Files
AgentCompany/tests/unit/builtin-skills-bundle.test.ts
T
ZacharyZhang-NY 86aa6fdb29 Ship skills built-in: bundle the catalogue, assign per hire, force humanizer
Skills no longer come from the user's ~/.agents library - most users have
none, and the CEO branch that compiled the entire catalogue into its
prompt overflowed the model context (1.1MB) and failed every CEO run.

- Bundle "built-in skills/" with the app (extraResources) and stage it
  at startup into <profile>/builtin-skills as one dir-per-skill copy -
  both bundle shapes (SKILL.md dirs and flat category .md files)
  normalize into the same importable layout
- Import the staged catalogue per org at startup and inside onboarding,
  so the CEO's first run already carries it
- Forced house style: resolveRuntimeSnapshot unions the humanizer skill
  into every agent's runtime (CEO included) as a resolution rule - no
  binding row to forget, delete, or bypass; revoke_skill refuses it
- CEO staffs hires with skills: hire_agent accepts a skills array,
  grant_skill/revoke_skill adjust later, list_skills now shows
  descriptions from skill frontmatter
- Kill the c_suite compile-all branch; everyone resolves bindings-only,
  capped at 200k chars with omissions named in the prompt
- Remove the Skills settings page and its import/sync/test IPC surface;
  drop ~/.agents discovery and the AGENTCOMPANY_NEW_SKILLS_ROOT seam in
  favor of AGENTCOMPANY_NEW_BUILTIN_SKILLS_DIR
- Tests: staging/import/forced-resolution/cap units, real-bundle CI
  check, e2e asserts the tab is gone and the catalogue self-imports
2026-07-08 21:18:50 -04:00

27 lines
1.2 KiB
TypeScript

import { mkdtempSync, rmSync } from "node:fs";
import { tmpdir } from "node:os";
import { join, resolve } from "node:path";
import { describe, expect, test } from "vitest";
import { stageBuiltinSkillsLibrary } from "../../src/main/services/builtin-skills";
/**
* The real bundled catalogue must stage cleanly: every skill gets a unique
* slug, the forced humanizer skill exists, and category files carry the
* descriptions agents browse. A broken bundle should fail CI, not first
* launch.
*/
describe("bundled skill catalogue", () => {
test("the repo bundle stages with unique slugs and the forced humanizer", () => {
const libraryRoot = mkdtempSync(join(tmpdir(), "ac-bundle-check-"));
try {
const staged = stageBuiltinSkillsLibrary(resolve(process.cwd(), "built-in skills"), libraryRoot);
expect(staged.length).toBeGreaterThan(200);
expect(staged.some((unit) => unit.slug === "humanizer")).toBe(true);
const withDescription = staged.filter((unit) => unit.manifest.description).length;
expect(withDescription / staged.length).toBeGreaterThan(0.9);
} finally {
rmSync(libraryRoot, { recursive: true, force: true });
}
});
});