@hham21/circe 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README.md +185 -0
  2. package/dist/agent.d.ts +73 -0
  3. package/dist/agent.js +334 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/cli/agents-cmd.d.ts +2 -0
  6. package/dist/cli/agents-cmd.js +77 -0
  7. package/dist/cli/agents-cmd.js.map +1 -0
  8. package/dist/cli/index.d.ts +4 -0
  9. package/dist/cli/index.js +29 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli/output.d.ts +20 -0
  12. package/dist/cli/output.js +136 -0
  13. package/dist/cli/output.js.map +1 -0
  14. package/dist/cli/run.d.ts +10 -0
  15. package/dist/cli/run.js +90 -0
  16. package/dist/cli/run.js.map +1 -0
  17. package/dist/cli/skills-cmd.d.ts +2 -0
  18. package/dist/cli/skills-cmd.js +95 -0
  19. package/dist/cli/skills-cmd.js.map +1 -0
  20. package/dist/cli/workflows-cmd.d.ts +2 -0
  21. package/dist/cli/workflows-cmd.js +61 -0
  22. package/dist/cli/workflows-cmd.js.map +1 -0
  23. package/dist/context.d.ts +8 -0
  24. package/dist/context.js +23 -0
  25. package/dist/context.js.map +1 -0
  26. package/dist/events.d.ts +134 -0
  27. package/dist/events.js +127 -0
  28. package/dist/events.js.map +1 -0
  29. package/dist/handoff.d.ts +153 -0
  30. package/dist/handoff.js +42 -0
  31. package/dist/handoff.js.map +1 -0
  32. package/dist/index.d.ts +9 -0
  33. package/dist/index.js +10 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/orchestration/contract.d.ts +27 -0
  36. package/dist/orchestration/contract.js +104 -0
  37. package/dist/orchestration/contract.js.map +1 -0
  38. package/dist/orchestration/index.d.ts +10 -0
  39. package/dist/orchestration/index.js +6 -0
  40. package/dist/orchestration/index.js.map +1 -0
  41. package/dist/orchestration/loop.d.ts +25 -0
  42. package/dist/orchestration/loop.js +81 -0
  43. package/dist/orchestration/loop.js.map +1 -0
  44. package/dist/orchestration/parallel.d.ts +27 -0
  45. package/dist/orchestration/parallel.js +78 -0
  46. package/dist/orchestration/parallel.js.map +1 -0
  47. package/dist/orchestration/pipeline.d.ts +23 -0
  48. package/dist/orchestration/pipeline.js +100 -0
  49. package/dist/orchestration/pipeline.js.map +1 -0
  50. package/dist/orchestration/sprint.d.ts +21 -0
  51. package/dist/orchestration/sprint.js +56 -0
  52. package/dist/orchestration/sprint.js.map +1 -0
  53. package/dist/presets/frontend.d.ts +8 -0
  54. package/dist/presets/frontend.js +113 -0
  55. package/dist/presets/frontend.js.map +1 -0
  56. package/dist/presets/fullstack.d.ts +9 -0
  57. package/dist/presets/fullstack.js +118 -0
  58. package/dist/presets/fullstack.js.map +1 -0
  59. package/dist/presets/index.d.ts +2 -0
  60. package/dist/presets/index.js +3 -0
  61. package/dist/presets/index.js.map +1 -0
  62. package/dist/session/index.d.ts +1 -0
  63. package/dist/session/index.js +2 -0
  64. package/dist/session/index.js.map +1 -0
  65. package/dist/session/manager.d.ts +17 -0
  66. package/dist/session/manager.js +50 -0
  67. package/dist/session/manager.js.map +1 -0
  68. package/dist/tools/custom.d.ts +5 -0
  69. package/dist/tools/custom.js +7 -0
  70. package/dist/tools/custom.js.map +1 -0
  71. package/dist/tools/index.d.ts +1 -0
  72. package/dist/tools/index.js +2 -0
  73. package/dist/tools/index.js.map +1 -0
  74. package/dist/tools/skills.d.ts +18 -0
  75. package/dist/tools/skills.js +99 -0
  76. package/dist/tools/skills.js.map +1 -0
  77. package/dist/types.d.ts +36 -0
  78. package/dist/types.js +12 -0
  79. package/dist/types.js.map +1 -0
  80. package/dist/utils.d.ts +24 -0
  81. package/dist/utils.js +85 -0
  82. package/dist/utils.js.map +1 -0
  83. package/package.json +49 -0
package/README.md ADDED
@@ -0,0 +1,185 @@
1
+ # Circe
2
+
3
+ GAN-style multi-agent framework that turns prompts into full-stack applications.
4
+
5
+ Inspired by Anthropic's [Harness Design for Long-Running Application Development](https://www.anthropic.com/engineering/harness-design-long-running-apps) — a Planner, Generator, and Evaluator work together in an adversarial loop to build, test, and refine applications autonomously.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ git clone https://github.com/hham21/circe.git
11
+ cd circe
12
+ npm install
13
+ ```
14
+
15
+ Requires Node.js 22+ and [Claude Code](https://claude.ai/code) authenticated via OAuth or API key:
16
+
17
+ ```bash
18
+ export ANTHROPIC_API_KEY=sk-ant-...
19
+ ```
20
+
21
+ Run examples with `npx tsx` (see [examples/README.md](examples/README.md) for the full list):
22
+
23
+ ```bash
24
+ npx tsx examples/01-single-agent.ts
25
+ npx tsx examples/06-compose.ts # the money shot — nested primitives
26
+ ```
27
+
28
+ ## Quick Start
29
+
30
+ ```typescript
31
+ import { Pipeline, Loop, agent } from "circe";
32
+
33
+ const planner = agent({
34
+ name: "planner",
35
+ prompt: "Expand the user prompt into a detailed product spec.",
36
+ });
37
+
38
+ const generator = agent({
39
+ name: "generator",
40
+ prompt: "Build the app based on the spec or QA feedback.",
41
+ });
42
+
43
+ const evaluator = agent({
44
+ name: "evaluator",
45
+ prompt: "Test the app with Playwright. FAIL with feedback if issues found.",
46
+ tools: ["Read", "Bash", "Glob", "Grep"],
47
+ skills: ["qa", "browse"],
48
+ });
49
+
50
+ const app = new Pipeline(
51
+ planner,
52
+ new Loop(generator, evaluator, { maxRounds: 3, stopWhen: (r: any) => r.passed }),
53
+ );
54
+
55
+ await app.run("Build a retro game maker");
56
+ ```
57
+
58
+ ## Concepts
59
+
60
+ ### Agents
61
+
62
+ ```typescript
63
+ import { Agent, agent } from "circe";
64
+
65
+ // Factory function (simple)
66
+ const reviewer = agent({
67
+ name: "reviewer",
68
+ prompt: "Review code for bugs.",
69
+ tools: ["Read", "Grep"],
70
+ });
71
+
72
+ // Class (fine-grained control)
73
+ const evaluator = new Agent({
74
+ name: "evaluator",
75
+ prompt: "Strict QA engineer.",
76
+ tools: ["Read", "Bash"],
77
+ skills: ["qa"],
78
+ contextStrategy: "reset",
79
+ });
80
+ ```
81
+
82
+ All Claude Agent SDK built-in tools (Read, Write, Edit, Bash, Glob, Grep, WebSearch, WebFetch, Agent) are available by default. Restrict with `tools`.
83
+
84
+ ### Orchestrators
85
+
86
+ Five composable building blocks, all generic: `Runnable<TIn, TOut>`.
87
+
88
+ | Orchestrator | Purpose | Example |
89
+ |---|---|---|
90
+ | `Pipeline` | Sequential execution | `new Pipeline(planner, builder)` or `pipe(a, b, c)` |
91
+ | `Loop` | Repeat until condition | `new Loop(gen, eval, { maxRounds: 3, stopWhen: ... })` |
92
+ | `Parallel` | Concurrent execution | `new Parallel(frontend, backend)` |
93
+ | `Contract` | Pre-build negotiation | `new Contract(proposer, reviewer)` |
94
+ | `Sprint` | Feature decomposition | `new Sprint(runner)` |
95
+
96
+ Loop and Contract return **producer output on success** (the content, not the evaluation). Access evaluation via `.lastEvaluatorResult`. All orchestrators expose `.lastMetrics` for cost tracking.
97
+
98
+ Compose freely:
99
+
100
+ ```typescript
101
+ import { pipe } from "circe";
102
+
103
+ // Type-safe pipeline — compiler checks that output types chain correctly
104
+ pipe(planner, new Loop(generator, evaluator, { maxRounds: 3 }));
105
+
106
+ // With negotiation
107
+ pipe(planner, new Contract(proposer, reviewer), new Loop(generator, evaluator));
108
+ ```
109
+
110
+ ### Tools
111
+
112
+ ```typescript
113
+ import { tool } from "circe";
114
+
115
+ const searchNpm = tool(function searchNpm(query: string): string {
116
+ // Search npm packages
117
+ return `results for ${query}`;
118
+ });
119
+ ```
120
+
121
+ MCP servers are supported via the `mcpServers` parameter on agents.
122
+
123
+ ### Skills
124
+
125
+ Skills are on-demand prompt templates. Agents load them when needed:
126
+
127
+ ```typescript
128
+ const evaluator = agent({
129
+ name: "evaluator",
130
+ prompt: "QA engineer.",
131
+ skills: ["qa", "browse"],
132
+ });
133
+ ```
134
+
135
+ The agent sees a skill list in its prompt and calls `use_skill("qa")` to load the full methodology.
136
+
137
+ ### Context Strategy
138
+
139
+ | Strategy | When to use |
140
+ |---|---|
141
+ | `compaction` (default) | Most cases. Agent SDK auto-summarizes context. |
142
+ | `reset` | Weaker models or long Sprint-based builds. Clean context per sprint. |
143
+
144
+ ### Handoff Schemas
145
+
146
+ Zod schemas for structured agent-to-agent data passing:
147
+
148
+ - `ProductSpecSchema` — Planner output
149
+ - `BuildResultSchema` — Generator output
150
+ - `QAReportSchema` — Evaluator output
151
+
152
+ ## CLI
153
+
154
+ ```bash
155
+ # Run a workflow file
156
+ circe run workflow.js -i "prompt or spec file"
157
+
158
+ # Agent management
159
+ circe agents create my-reviewer --prompt "Review code." --tools "Read,Grep"
160
+ circe agents list
161
+ circe agents info my-reviewer
162
+ circe agents delete my-reviewer
163
+
164
+ # Workflow management
165
+ circe workflows create my-pipe --agents "planner,generator,evaluator"
166
+ circe workflows list
167
+ circe workflows delete my-pipe
168
+ ```
169
+
170
+ ## Architecture
171
+
172
+ ```
173
+ CLI Layer circe run, agents, workflows
174
+ Orchestration Pipeline, Loop, Parallel, Sprint, Contract
175
+ Agent Layer Agent, agent(), Handoff, Context Strategy
176
+ Tool Layer SDK built-ins, tool(), MCP servers, Skills
177
+ ```
178
+
179
+ ## Development
180
+
181
+ ```bash
182
+ npm install
183
+ npm test
184
+ npm run build
185
+ ```
@@ -0,0 +1,73 @@
1
+ import type { ZodSchema } from "zod";
2
+ import type { Runnable } from "./types.js";
3
+ export interface AgentConfig {
4
+ name: string;
5
+ prompt: string;
6
+ /** Auto-approve list, NOT a restriction. Unlisted tools fall through to permissionMode. */
7
+ tools?: string[] | null;
8
+ /** Tools to always deny. Checked before allowedTools and permissionMode. */
9
+ disallowedTools?: string[];
10
+ skills?: string[];
11
+ mcpServers?: Record<string, unknown>;
12
+ contextStrategy?: "compaction" | "reset";
13
+ permissionMode?: string;
14
+ continueSession?: boolean;
15
+ inputSchema?: ZodSchema;
16
+ outputSchema?: ZodSchema;
17
+ model?: string;
18
+ costPerMTokens?: {
19
+ input: number;
20
+ output: number;
21
+ };
22
+ timeout?: number;
23
+ }
24
+ export interface ResultMetrics {
25
+ resultText: string;
26
+ cost: number;
27
+ inputTokens: number;
28
+ outputTokens: number;
29
+ }
30
+ export declare class Agent<TIn = string, TOut = string> implements Runnable<TIn, TOut> {
31
+ name: string;
32
+ prompt: string;
33
+ tools: string[] | null;
34
+ disallowedTools: string[];
35
+ skills: string[];
36
+ mcpServers: Record<string, unknown>;
37
+ contextStrategy: "compaction" | "reset";
38
+ permissionMode: string;
39
+ continueSession: boolean;
40
+ inputSchema: ZodSchema | null;
41
+ outputSchema: ZodSchema | null;
42
+ model: string | undefined;
43
+ private costPerMTokens;
44
+ private timeout;
45
+ private sessionId;
46
+ private _lastMetrics;
47
+ private _jsonSchema;
48
+ get lastMetrics(): ResultMetrics | null;
49
+ constructor(config: AgentConfig);
50
+ buildSystemPrompt(): string;
51
+ run(input: TIn): Promise<TOut>;
52
+ private executeQuery;
53
+ buildUserPrompt(input: TIn): string;
54
+ extractJson(text: string): string | null;
55
+ parseResult(raw: string): unknown;
56
+ private tryParseWithSchema;
57
+ estimateCost(inputTokens: number, outputTokens: number): number;
58
+ private validateInput;
59
+ private describeInputForError;
60
+ private validateSkills;
61
+ private handleSessionInit;
62
+ private handleAssistantMessage;
63
+ private extractResultMetrics;
64
+ private extractTokenCounts;
65
+ private finalize;
66
+ private buildSdkOptions;
67
+ private buildSkillMcpServer;
68
+ private loadSkillContent;
69
+ private stripCodeBlock;
70
+ private summarizeToolCall;
71
+ }
72
+ export declare function agent<TOut = string>(config: AgentConfig): Agent<string, TOut>;
73
+ export declare function loadAgent(name: string): Promise<Agent>;
package/dist/agent.js ADDED
@@ -0,0 +1,334 @@
1
+ import { query, createSdkMcpServer, tool as sdkTool } from "@anthropic-ai/claude-agent-sdk";
2
+ import { z } from "zod";
3
+ import { zodToJsonSchema } from "zod-to-json-schema";
4
+ import { getFormatter, getWorkDir, getSkillRegistry } from "./context.js";
5
+ import { findJsonString, circeHome } from "./utils.js";
6
+ const DEFAULT_COST_PER_M_TOKENS = { input: 15, output: 75 };
7
+ const BYPASS_PERMISSIONS_MODE = "bypassPermissions";
8
+ const SKILL_SERVER_NAME = "circe-skills";
9
+ const INPUT_PREVIEW_MAX_LENGTH = 80;
10
+ export class Agent {
11
+ name;
12
+ prompt;
13
+ tools;
14
+ disallowedTools;
15
+ skills;
16
+ mcpServers;
17
+ contextStrategy;
18
+ permissionMode;
19
+ continueSession;
20
+ inputSchema;
21
+ outputSchema;
22
+ model;
23
+ costPerMTokens;
24
+ timeout;
25
+ sessionId = null;
26
+ _lastMetrics = null;
27
+ _jsonSchema = null;
28
+ get lastMetrics() {
29
+ return this._lastMetrics;
30
+ }
31
+ constructor(config) {
32
+ this.name = config.name;
33
+ this.prompt = config.prompt;
34
+ this.tools = config.tools ?? null;
35
+ this.disallowedTools = config.disallowedTools ?? [];
36
+ this.skills = config.skills ?? [];
37
+ this.mcpServers = config.mcpServers ?? {};
38
+ this.contextStrategy = config.contextStrategy ?? "compaction";
39
+ this.permissionMode = config.permissionMode ?? BYPASS_PERMISSIONS_MODE;
40
+ this.continueSession = config.continueSession ?? false;
41
+ this.inputSchema = config.inputSchema ?? null;
42
+ this.outputSchema = config.outputSchema ?? null;
43
+ this.model = config.model;
44
+ this.costPerMTokens = config.costPerMTokens ?? DEFAULT_COST_PER_M_TOKENS;
45
+ this.timeout = config.timeout ?? 0;
46
+ if (this.outputSchema) {
47
+ this._jsonSchema = zodToJsonSchema(this.outputSchema);
48
+ }
49
+ }
50
+ // --- Public methods ---
51
+ buildSystemPrompt() {
52
+ const registry = getSkillRegistry();
53
+ if (!registry || this.skills.length === 0)
54
+ return this.prompt;
55
+ const summary = registry.promptSummary(this.skills);
56
+ return summary ? `${this.prompt}\n\n${summary}` : this.prompt;
57
+ }
58
+ async run(input) {
59
+ this.validateInput(input);
60
+ this.validateSkills();
61
+ if (this.timeout <= 0)
62
+ return this.executeQuery(input);
63
+ const abortController = new AbortController();
64
+ const timer = setTimeout(() => abortController.abort(), this.timeout);
65
+ try {
66
+ return await this.executeQuery(input, abortController);
67
+ }
68
+ catch (err) {
69
+ if (abortController.signal.aborted) {
70
+ throw new Error(`[${this.name}] timed out after ${this.timeout}ms`);
71
+ }
72
+ throw err;
73
+ }
74
+ finally {
75
+ clearTimeout(timer);
76
+ }
77
+ }
78
+ async executeQuery(input, abortController) {
79
+ const formatter = getFormatter();
80
+ const workDir = getWorkDir();
81
+ formatter?.agentStart?.(this.name, this.prompt.slice(0, 60));
82
+ const userPrompt = this.buildUserPrompt(input);
83
+ const options = this.buildSdkOptions(workDir, abortController);
84
+ let metrics = { resultText: "", cost: 0, inputTokens: 0, outputTokens: 0 };
85
+ let structuredOutput = undefined;
86
+ try {
87
+ for await (const message of query({ prompt: userPrompt, options })) {
88
+ this.handleSessionInit(message);
89
+ this.handleAssistantMessage(message, formatter);
90
+ if (message.type === "result") {
91
+ metrics = this.extractResultMetrics(message);
92
+ structuredOutput = message.structured_output;
93
+ }
94
+ }
95
+ }
96
+ catch (err) {
97
+ const { inputTokens, outputTokens, cost } = metrics;
98
+ formatter?.agentDone?.(this.name, `ERROR: ${err.message}`, [inputTokens, outputTokens], cost);
99
+ throw new Error(`[${this.name}] ${err.message}`);
100
+ }
101
+ return this.finalize(metrics, structuredOutput, formatter);
102
+ }
103
+ buildUserPrompt(input) {
104
+ const workDir = getWorkDir();
105
+ const workDirRule = workDir
106
+ ? `IMPORTANT: Your working directory is ${workDir}. All file operations MUST use this directory. Do NOT cd to other directories.`
107
+ : "IMPORTANT: Use relative paths from the working directory.";
108
+ const rules = [workDirRule, "Never create files inside an 'output/' subdirectory."].join("\n");
109
+ if (input == null)
110
+ return rules;
111
+ const inputStr = typeof input === "string" ? input : JSON.stringify(input, null, 2);
112
+ return `${rules}\n\n${inputStr}`;
113
+ }
114
+ extractJson(text) {
115
+ return findJsonString(text);
116
+ }
117
+ parseResult(raw) {
118
+ if (!this.outputSchema)
119
+ return raw;
120
+ const jsonStr = this.extractJson(raw);
121
+ if (!jsonStr)
122
+ return raw;
123
+ try {
124
+ return this.tryParseWithSchema(JSON.parse(jsonStr));
125
+ }
126
+ catch {
127
+ return raw;
128
+ }
129
+ }
130
+ tryParseWithSchema(data) {
131
+ if (!this.outputSchema)
132
+ return data;
133
+ try {
134
+ return this.outputSchema.parse(data);
135
+ }
136
+ catch {
137
+ return data;
138
+ }
139
+ }
140
+ estimateCost(inputTokens, outputTokens) {
141
+ return (inputTokens * this.costPerMTokens.input + outputTokens * this.costPerMTokens.output) / 1_000_000;
142
+ }
143
+ // --- run() implementation details ---
144
+ validateInput(input) {
145
+ if (!this.inputSchema)
146
+ return;
147
+ const result = this.inputSchema.safeParse(input);
148
+ if (result.success)
149
+ return;
150
+ const received = this.describeInputForError(input);
151
+ const issues = result.error.issues.map((i) => i.message).join(", ");
152
+ throw new Error(`[${this.name}] input validation failed — ${issues} (received ${received})`);
153
+ }
154
+ describeInputForError(input) {
155
+ if (typeof input !== "string")
156
+ return typeof input;
157
+ const preview = input.slice(0, INPUT_PREVIEW_MAX_LENGTH);
158
+ const truncated = input.length > INPUT_PREVIEW_MAX_LENGTH ? "…" : "";
159
+ return `string: "${preview}${truncated}"`;
160
+ }
161
+ validateSkills() {
162
+ const registry = getSkillRegistry();
163
+ if (registry && this.skills.length > 0) {
164
+ registry.validateSkills(this.skills);
165
+ }
166
+ }
167
+ handleSessionInit(message) {
168
+ if (message.type === "system" && message.subtype === "init" && this.continueSession) {
169
+ this.sessionId = message.session_id ?? null;
170
+ }
171
+ }
172
+ handleAssistantMessage(message, formatter) {
173
+ if (message.type !== "assistant")
174
+ return;
175
+ if (!formatter?.logActivity || !message.message?.content)
176
+ return;
177
+ for (const block of message.message.content) {
178
+ if (block.type === "tool_use") {
179
+ formatter.logActivity(this.name, this.summarizeToolCall(block));
180
+ }
181
+ }
182
+ }
183
+ extractResultMetrics(message) {
184
+ if (message.is_error) {
185
+ throw new Error(`[${this.name}] SDK error: ${message.result ?? "unknown"}`);
186
+ }
187
+ const resultText = typeof message.result === "string" ? message.result : JSON.stringify(message.result);
188
+ const { inputTokens, outputTokens } = this.extractTokenCounts(message.usage);
189
+ const cost = message.total_cost_usd ?? this.estimateCost(inputTokens, outputTokens);
190
+ return { resultText, cost, inputTokens, outputTokens };
191
+ }
192
+ extractTokenCounts(usage) {
193
+ if (!usage)
194
+ return { inputTokens: 0, outputTokens: 0 };
195
+ const inputTokens = (usage.input_tokens ?? 0) +
196
+ (usage.cache_creation_input_tokens ?? 0) +
197
+ (usage.cache_read_input_tokens ?? 0);
198
+ const outputTokens = usage.output_tokens ?? 0;
199
+ return { inputTokens, outputTokens };
200
+ }
201
+ finalize(metrics, structuredOutput, formatter) {
202
+ this._lastMetrics = metrics;
203
+ const { resultText, cost, inputTokens, outputTokens } = metrics;
204
+ const parsed = structuredOutput !== undefined ? this.tryParseWithSchema(structuredOutput) : this.parseResult(resultText);
205
+ if (formatter?.agentDone) {
206
+ const formattedOutput = typeof parsed === "string" ? this.stripCodeBlock(parsed) : JSON.stringify(parsed);
207
+ formatter.agentDone(this.name, formattedOutput, [inputTokens, outputTokens], cost);
208
+ }
209
+ return parsed;
210
+ }
211
+ // --- SDK option builders ---
212
+ buildSdkOptions(workDir, abortController) {
213
+ const options = {
214
+ systemPrompt: this.buildSystemPrompt(),
215
+ permissionMode: this.permissionMode,
216
+ };
217
+ if (this.model) {
218
+ options.model = this.model;
219
+ }
220
+ if (abortController) {
221
+ options.abortController = abortController;
222
+ }
223
+ if (this.permissionMode === BYPASS_PERMISSIONS_MODE) {
224
+ options.allowDangerouslySkipPermissions = true;
225
+ }
226
+ if (this.tools) {
227
+ options.allowedTools = this.tools;
228
+ }
229
+ if (this.disallowedTools.length > 0) {
230
+ options.disallowedTools = this.disallowedTools;
231
+ }
232
+ if (Object.keys(this.mcpServers).length > 0) {
233
+ options.mcpServers = this.mcpServers;
234
+ }
235
+ if (workDir) {
236
+ options.cwd = workDir;
237
+ }
238
+ if (this.continueSession && this.sessionId) {
239
+ options.resume = this.sessionId;
240
+ }
241
+ if (this._jsonSchema) {
242
+ options.outputFormat = { type: "json_schema", schema: this._jsonSchema };
243
+ }
244
+ const skillServer = this.skills.length > 0 ? this.buildSkillMcpServer() : null;
245
+ if (skillServer) {
246
+ const existingServers = options.mcpServers ?? {};
247
+ options.mcpServers = { ...existingServers, [SKILL_SERVER_NAME]: skillServer };
248
+ }
249
+ return options;
250
+ }
251
+ buildSkillMcpServer() {
252
+ const registry = getSkillRegistry();
253
+ if (!registry)
254
+ return null;
255
+ return createSdkMcpServer({
256
+ name: SKILL_SERVER_NAME,
257
+ tools: [
258
+ sdkTool("use_skill", "Load a skill's full content by name. Use this to access detailed methodology.", { name: z.string().describe("Name of the skill to load") }, async (args) => this.loadSkillContent(registry, args.name)),
259
+ ],
260
+ });
261
+ }
262
+ loadSkillContent(registry, skillName) {
263
+ const content = registry.getSkill(skillName);
264
+ if (content) {
265
+ console.error(`[skill] Loaded: ${skillName}`);
266
+ return { content: [{ type: "text", text: content }] };
267
+ }
268
+ console.error(`[skill] Not found: ${skillName}`);
269
+ return {
270
+ content: [{ type: "text", text: `Skill '${skillName}' not found. Continuing without it.` }],
271
+ };
272
+ }
273
+ // --- Output formatting helpers ---
274
+ stripCodeBlock(text) {
275
+ const match = text.match(/```(?:\w*)\s*\n([\s\S]*?)\n```/);
276
+ return match ? match[1].trim() : text;
277
+ }
278
+ summarizeToolCall(block) {
279
+ const name = block.name ?? "unknown";
280
+ const input = block.input ?? {};
281
+ if (name === "Bash" && input.command)
282
+ return `$ ${input.command}`;
283
+ if (name === "Read" && input.file_path)
284
+ return `Read ${input.file_path}`;
285
+ if (name === "Write" && input.file_path)
286
+ return `Write ${input.file_path}`;
287
+ if (name === "Edit" && input.file_path)
288
+ return `Edit ${input.file_path}`;
289
+ return name;
290
+ }
291
+ }
292
+ export function agent(config) {
293
+ return new Agent(config);
294
+ }
295
+ const AgentConfigFileSchema = z.object({
296
+ name: z.string(),
297
+ prompt: z.string(),
298
+ tools: z.array(z.string()).nullable().optional(),
299
+ disallowedTools: z.array(z.string()).optional(),
300
+ skills: z.array(z.string()).optional(),
301
+ mcpServers: z.record(z.unknown()).optional(),
302
+ contextStrategy: z.enum(["compaction", "reset"]).optional(),
303
+ permissionMode: z.string().optional(),
304
+ continueSession: z.boolean().optional(),
305
+ model: z.string().optional(),
306
+ costPerMTokens: z.object({ input: z.number(), output: z.number() }).optional(),
307
+ timeout: z.number().optional(),
308
+ });
309
+ export async function loadAgent(name) {
310
+ const home = circeHome();
311
+ const agentPath = `${home}/agents/${name}.json`;
312
+ const { readFileSync } = await import("node:fs");
313
+ let raw;
314
+ try {
315
+ raw = readFileSync(agentPath, "utf-8");
316
+ }
317
+ catch {
318
+ throw new Error(`Agent file not found: ${agentPath}`);
319
+ }
320
+ let parsed;
321
+ try {
322
+ parsed = JSON.parse(raw);
323
+ }
324
+ catch {
325
+ throw new Error(`Invalid JSON in agent file: ${agentPath}`);
326
+ }
327
+ const result = AgentConfigFileSchema.safeParse(parsed);
328
+ if (!result.success) {
329
+ const issues = result.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join(", ");
330
+ throw new Error(`Invalid agent config in ${agentPath}: ${issues}`);
331
+ }
332
+ return new Agent(result.data);
333
+ }
334
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from "commander";
2
+ export declare const agentsCommand: Command;