diff --git a/scripts/dead-export-allowlist.txt b/scripts/dead-export-allowlist.txt index 8421c5327..2367c0410 100644 --- a/scripts/dead-export-allowlist.txt +++ b/scripts/dead-export-allowlist.txt @@ -43,12 +43,8 @@ packages/opencode-go/src/models.ts: readonly # consumed by the app registry/barrel once the fleet merges; on a per-extract # branch they have no in-repo consumer yet. Public API by design — owned by the # agent-template lane; remove with the code if the package is deleted. -agents/dispatch/src/index.ts: agent -agents/dispatch/src/index.ts: defineAgent agents/dispatch/src/config.ts: satisfies agents/dispatch/src/config.ts: boolean -agents/warden/src/index.ts: agent -agents/warden/src/index.ts: defineAgent agents/warden/src/config.ts: satisfies agents/warden/src/config.ts: boolean agents/designer/src/index.ts: agent @@ -111,15 +107,9 @@ packages/prompt-variance/src/index.ts: PromptVarianceRow # consumed by the app registry/barrel once the fleet merges; on a per-extract # branch they have no in-repo consumer yet. Public API by design — owned by the # agent-template lane; remove with the code if the package is deleted. -agents/artist/src/index.ts: agent -agents/artist/src/index.ts: defineAgent agents/artist/src/config.ts: satisfies agents/artist/src/config.ts: boolean -agents/shakespeare/src/index.ts: agent -agents/shakespeare/src/index.ts: defineAgent agents/shakespeare/src/config.ts: satisfies agents/shakespeare/src/config.ts: boolean -agents/prober/src/index.ts: agent -agents/prober/src/index.ts: defineAgent agents/prober/src/config.ts: satisfies agents/prober/src/config.ts: boolean diff --git a/src/agent/fleet.test.ts b/src/agent/fleet.test.ts new file mode 100644 index 000000000..0b2068cda --- /dev/null +++ b/src/agent/fleet.test.ts @@ -0,0 +1,39 @@ +import { describe, expect, test } from "bun:test"; + +import { FLEET } from "./fleet.js"; +import { DIRECTOR_IDS, type DirectorId } from "./directors/types.js"; + +describe("fleet barrel", () => { + test("FLEET covers all 10 extract ids in the closed director set", () => { + const closed = new Set(DIRECTOR_IDS); + expect(Object.keys(FLEET).length).toBe(10); + for (const id of Object.keys(FLEET) as readonly DirectorId[]) { + expect(closed).toContain(id); + } + }); + + test("every FLEET entry structurally satisfies the director contract", () => { + for (const id of Object.keys(FLEET) as readonly (keyof typeof FLEET)[]) { + const entry = FLEET[id]; + expect(entry.id).toBe(id); + } + }); + + test("barrel owns no in-tree director package data", () => { + // Backed only by the workspace packages (never in-tree ./directors/* re-exports + // — the merge-order stale re-export hazard), via the tsconfig paths aliases to + // agents//src/index.ts on this standalone branch. + expect(Object.keys(FLEET)).toEqual([ + "artist", + "coder", + "designer", + "dispatch", + "explorer", + "planner", + "prober", + "reviewer", + "shakespeare", + "warden", + ]); + }); +}); diff --git a/src/agent/fleet.ts b/src/agent/fleet.ts new file mode 100644 index 000000000..7d6740607 --- /dev/null +++ b/src/agent/fleet.ts @@ -0,0 +1,170 @@ +/** + * Fleet barrel (CL-9808, PR #1352): one import site for the closed director fleet. + * + * Re-exports the six-name surface per @corbits/code-agent- workspace package, + * plus a FLEET registry keyed by id over each package's director. Re-export only — + * never in-tree ./directors/* (the merge-order stale re-export hazard). + * + * All 10 @corbits/code-agent- packages have merged; `tsconfig` `paths` + * aliases resolve each name to the real agents//src/index.ts package entry. + */ + +// Workspace packages — six-name surface each. +import { + agent as artistAgent, + config as artistConfig, + defineAgent as defineArtistAgent, + director as artistDirector, + systemPrompt as artistSystemPrompt, + tools as artistTools, +} from "@corbits/code-agent-artist"; +import { + agent as coderAgent, + config as coderConfig, + defineAgent as defineCoderAgent, + director as coderDirector, + systemPrompt as coderSystemPrompt, + tools as coderTools, +} from "@corbits/code-agent-coder"; +import { + agent as designerAgent, + config as designerConfig, + defineAgent as defineDesignerAgent, + director as designerDirector, + systemPrompt as designerSystemPrompt, + tools as designerTools, +} from "@corbits/code-agent-designer"; +import { + agent as dispatchAgent, + config as dispatchConfig, + defineAgent as defineDispatchAgent, + director as dispatchDirector, + systemPrompt as dispatchSystemPrompt, + tools as dispatchTools, +} from "@corbits/code-agent-dispatch"; +import { + agent as explorerAgent, + config as explorerConfig, + defineAgent as defineExplorerAgent, + director as explorerDirector, + systemPrompt as explorerSystemPrompt, + tools as explorerTools, +} from "@corbits/code-agent-explorer"; +import { + agent as plannerAgent, + config as plannerConfig, + defineAgent as definePlannerAgent, + director as plannerDirector, + systemPrompt as plannerSystemPrompt, + tools as plannerTools, +} from "@corbits/code-agent-planner"; +import { + agent as proberAgent, + config as proberConfig, + defineAgent as defineProberAgent, + director as proberDirector, + systemPrompt as proberSystemPrompt, + tools as proberTools, +} from "@corbits/code-agent-prober"; +import { + agent as reviewerAgent, + config as reviewerConfig, + defineAgent as defineReviewerAgent, + director as reviewerDirector, + systemPrompt as reviewerSystemPrompt, + tools as reviewerTools, +} from "@corbits/code-agent-reviewer"; +import { + agent as shakespeareAgent, + config as shakespeareConfig, + defineAgent as defineShakespeareAgent, + director as shakespeareDirector, + systemPrompt as shakespeareSystemPrompt, + tools as shakespeareTools, +} from "@corbits/code-agent-shakespeare"; +import { + agent as wardenAgent, + config as wardenConfig, + defineAgent as defineWardenAgent, + director as wardenDirector, + systemPrompt as wardenSystemPrompt, + tools as wardenTools, +} from "@corbits/code-agent-warden"; + +// Fleet registry — keyed by id, one director per workspace package. +export const FLEET = { + artist: artistDirector, + coder: coderDirector, + designer: designerDirector, + dispatch: dispatchDirector, + explorer: explorerDirector, + planner: plannerDirector, + prober: proberDirector, + reviewer: reviewerDirector, + shakespeare: shakespeareDirector, + warden: wardenDirector, +} as const; + +// Re-exports — six-name surface per package. +export { + artistAgent, + artistConfig, + artistDirector, + artistSystemPrompt, + artistTools, + coderAgent, + coderConfig, + coderDirector, + coderSystemPrompt, + coderTools, + defineArtistAgent, + defineCoderAgent, + defineDesignerAgent, + defineDispatchAgent, + defineExplorerAgent, + definePlannerAgent, + defineProberAgent, + defineReviewerAgent, + defineShakespeareAgent, + defineWardenAgent, + designerAgent, + designerConfig, + designerDirector, + designerSystemPrompt, + designerTools, + dispatchAgent, + dispatchConfig, + dispatchDirector, + dispatchSystemPrompt, + dispatchTools, + explorerAgent, + explorerConfig, + explorerDirector, + explorerSystemPrompt, + explorerTools, + plannerAgent, + plannerConfig, + plannerDirector, + plannerSystemPrompt, + plannerTools, + proberAgent, + proberConfig, + proberDirector, + proberSystemPrompt, + proberTools, + reviewerAgent, + reviewerConfig, + reviewerDirector, + reviewerSystemPrompt, + reviewerTools, + shakespeareAgent, + shakespeareConfig, + shakespeareDirector, + shakespeareSystemPrompt, + shakespeareTools, + wardenAgent, + wardenConfig, + wardenDirector, + wardenSystemPrompt, + wardenTools, +};