ace-swarm 1.1.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 (72) hide show
  1. package/README.md +113 -0
  2. package/assets/.agents/ACE/ACE-Init/AGENTS.md +275 -0
  3. package/assets/.agents/ACE/ACE-Init/instructions.md +177 -0
  4. package/assets/.agents/ACE/ACE_coders/AGENTS.md +97 -0
  5. package/assets/.agents/ACE/ACE_coders/INSTRUCTIONS.md +146 -0
  6. package/assets/.agents/ACE/UI/AGENTS.md +115 -0
  7. package/assets/.agents/ACE/UI/instructions.md +178 -0
  8. package/assets/.agents/ACE/VOS/AGENTS.md +72 -0
  9. package/assets/.agents/ACE/VOS/instructions.md +211 -0
  10. package/assets/.agents/skills/ace-orchestrator/SKILL.md +317 -0
  11. package/assets/.agents/skills/codemunch/SKILL.md +502 -0
  12. package/assets/.agents/skills/codesnipe/SKILL.md +629 -0
  13. package/assets/agent-state/DECISIONS.md +7 -0
  14. package/assets/agent-state/EVIDENCE_LOG.md +7 -0
  15. package/assets/agent-state/HANDOFF.json +24 -0
  16. package/assets/agent-state/MODULES/gates/gate-completeness.json +7 -0
  17. package/assets/agent-state/MODULES/gates/gate-correctness.json +7 -0
  18. package/assets/agent-state/MODULES/registry.json +15 -0
  19. package/assets/agent-state/MODULES/roles/capability-build.json +19 -0
  20. package/assets/agent-state/MODULES/roles/capability-docs.json +19 -0
  21. package/assets/agent-state/MODULES/roles/capability-ops.json +18 -0
  22. package/assets/agent-state/MODULES/roles/capability-qa.json +20 -0
  23. package/assets/agent-state/MODULES/roles/capability-research.json +19 -0
  24. package/assets/agent-state/MODULES/roles/capability-skeptic.json +20 -0
  25. package/assets/agent-state/MODULES/roles/capability-spec.json +18 -0
  26. package/assets/agent-state/RISKS.md +5 -0
  27. package/assets/agent-state/SCOPE.md +10 -0
  28. package/assets/agent-state/STATUS.md +6 -0
  29. package/assets/agent-state/TASK.md +16 -0
  30. package/assets/agent-state/TEAL_CONFIG.md +31 -0
  31. package/assets/instructions/ACE.instructions.md +177 -0
  32. package/assets/instructions/ACE_Coder.instructions.md +146 -0
  33. package/assets/instructions/ACE_UI.instructions.md +178 -0
  34. package/assets/instructions/ACE_VOS.instructions.md +211 -0
  35. package/assets/tasks/README.md +19 -0
  36. package/assets/tasks/SWARM_HANDOFF.example.json +53 -0
  37. package/assets/tasks/SWARM_HANDOFF.example_ui_to_coders.json +55 -0
  38. package/assets/tasks/SWARM_HANDOFF.example_vos_to_ui.json +55 -0
  39. package/assets/tasks/SWARM_HANDOFF.template.json +52 -0
  40. package/assets/tasks/cli_work_split.md +22 -0
  41. package/assets/tasks/lessons.md +17 -0
  42. package/assets/tasks/role_tasks.md +48 -0
  43. package/assets/tasks/todo.md +23 -0
  44. package/dist/cli.d.ts +3 -0
  45. package/dist/cli.d.ts.map +1 -0
  46. package/dist/cli.js +88 -0
  47. package/dist/cli.js.map +1 -0
  48. package/dist/helpers.d.ts +50 -0
  49. package/dist/helpers.d.ts.map +1 -0
  50. package/dist/helpers.js +379 -0
  51. package/dist/helpers.js.map +1 -0
  52. package/dist/index.d.ts +3 -0
  53. package/dist/index.d.ts.map +1 -0
  54. package/dist/index.js +7 -0
  55. package/dist/index.js.map +1 -0
  56. package/dist/prompts.d.ts +7 -0
  57. package/dist/prompts.d.ts.map +1 -0
  58. package/dist/prompts.js +281 -0
  59. package/dist/prompts.js.map +1 -0
  60. package/dist/resources.d.ts +7 -0
  61. package/dist/resources.d.ts.map +1 -0
  62. package/dist/resources.js +140 -0
  63. package/dist/resources.js.map +1 -0
  64. package/dist/server.d.ts +6 -0
  65. package/dist/server.d.ts.map +1 -0
  66. package/dist/server.js +26 -0
  67. package/dist/server.js.map +1 -0
  68. package/dist/tools.d.ts +6 -0
  69. package/dist/tools.d.ts.map +1 -0
  70. package/dist/tools.js +601 -0
  71. package/dist/tools.js.map +1 -0
  72. package/package.json +46 -0
package/dist/tools.js ADDED
@@ -0,0 +1,601 @@
1
+ /**
2
+ * MCP Tools – actionable orchestration tools for the ACE framework.
3
+ */
4
+ import { readdirSync } from "node:fs";
5
+ import { isAbsolute, relative } from "node:path";
6
+ import { z } from "zod";
7
+ import { ALL_AGENTS, WORKSPACE_ROOT, bootstrapAceWorkspace, classifyPathSource, getAgentInstructionPath, getAgentManifestPath, getMcpServerConfigSnippet, getTaskArtifactPath, listAvailableSkills, readAgentInstructions, readAgentManifest, readSkillInstructions, readTaskArtifact, resolveWritableTaskPath, safeRead, safeWrite, wsPath, } from "./helpers.js";
8
+ const ROLE_ENUM = z.enum(["orchestrator", "vos", "ui", "coders"]);
9
+ function getRoleTitle(role) {
10
+ if (role === "orchestrator")
11
+ return "Orchestrator";
12
+ if (role === "coders")
13
+ return "Coders";
14
+ return role.toUpperCase();
15
+ }
16
+ export function registerTools(server) {
17
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
18
+ // 1. AGENT INSTRUCTIONS & MANIFESTS
19
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
20
+ server.tool("get_agent_instructions", "Load the full instruction file for a specific ACE agent role", {
21
+ role: ROLE_ENUM.describe("Which agent role to load"),
22
+ }, async ({ role }) => {
23
+ const content = readAgentInstructions(role);
24
+ const sourcePath = getAgentInstructionPath(role);
25
+ const source = classifyPathSource(sourcePath);
26
+ return {
27
+ content: [
28
+ {
29
+ type: "text",
30
+ text: [
31
+ `# ACE-${role.toUpperCase()} Instructions`,
32
+ "",
33
+ `Source: ${source}${sourcePath ? ` (${sourcePath})` : ""}`,
34
+ "",
35
+ content,
36
+ ].join("\n"),
37
+ },
38
+ ],
39
+ };
40
+ });
41
+ server.tool("get_agent_manifest", "Load AGENTS manifest-style instructions for a specific ACE role", {
42
+ role: ROLE_ENUM.describe("Which agent role to load"),
43
+ }, async ({ role }) => {
44
+ const content = readAgentManifest(role);
45
+ const sourcePath = getAgentManifestPath(role);
46
+ const source = classifyPathSource(sourcePath);
47
+ return {
48
+ content: [
49
+ {
50
+ type: "text",
51
+ text: [
52
+ `# ACE-${role.toUpperCase()} Manifest`,
53
+ "",
54
+ `Source: ${source}${sourcePath ? ` (${sourcePath})` : ""}`,
55
+ "",
56
+ content,
57
+ ].join("\n"),
58
+ },
59
+ ],
60
+ };
61
+ });
62
+ server.tool("get_all_agents_summary", "Get an overview of all ACE agents, source files, and activation triggers", {}, async () => {
63
+ const blocks = ALL_AGENTS.map((role) => {
64
+ const instructionPath = getAgentInstructionPath(role);
65
+ const manifestPath = getAgentManifestPath(role);
66
+ return [
67
+ `## ACE-${getRoleTitle(role)}`,
68
+ `- Instruction source: ${classifyPathSource(instructionPath)}${instructionPath ? ` (${instructionPath})` : ""}`,
69
+ `- Manifest source: ${classifyPathSource(manifestPath)}${manifestPath ? ` (${manifestPath})` : ""}`,
70
+ ].join("\n");
71
+ });
72
+ return {
73
+ content: [
74
+ {
75
+ type: "text",
76
+ text: [
77
+ "# ACE Agent Swarm Summary",
78
+ "",
79
+ ...blocks,
80
+ "",
81
+ "## Pipelines",
82
+ "- Genesis: VOS -> UI -> Coders",
83
+ "- Pivot: VOS -> Orchestrator -> Coders",
84
+ "- Ship It: UI -> Coders -> QA",
85
+ ].join("\n"),
86
+ },
87
+ ],
88
+ };
89
+ });
90
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
91
+ // 2. SKILLS
92
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
93
+ server.tool("list_skills", "List all discoverable ACE skills with source paths", {}, async () => {
94
+ const skills = listAvailableSkills();
95
+ const lines = [
96
+ "# ACE Skills",
97
+ "",
98
+ ...skills.map((skill) => `- ${skill.name} (${skill.source}) -> ${skill.path}`),
99
+ ];
100
+ return {
101
+ content: [{ type: "text", text: lines.join("\n") }],
102
+ };
103
+ });
104
+ server.tool("get_skill_instructions", "Load SKILL.md for a specific ACE skill", {
105
+ name: z.string().describe("Skill name (e.g., codemunch, codesnipe)"),
106
+ }, async ({ name }) => {
107
+ const skills = listAvailableSkills();
108
+ const match = skills.find((skill) => skill.name.toLowerCase() === name.trim().toLowerCase());
109
+ const prefix = match
110
+ ? `# Skill: ${match.name}\n\nSource: ${match.source} (${match.path})\n\n`
111
+ : `# Skill: ${name}\n\n`;
112
+ return {
113
+ content: [
114
+ {
115
+ type: "text",
116
+ text: `${prefix}${readSkillInstructions(name)}`,
117
+ },
118
+ ],
119
+ };
120
+ });
121
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
122
+ // 3. HANDOFF MANAGEMENT
123
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
124
+ server.tool("create_handoff", "Generate a SWARM_HANDOFF.json payload for routing work between ACE agents", {
125
+ from: ROLE_ENUM.describe("Source agent"),
126
+ to: ROLE_ENUM.describe("Target agent"),
127
+ title: z.string().describe("Short task title"),
128
+ task_type: z
129
+ .enum(["venture", "ux", "engineering", "mixed"])
130
+ .describe("Domain"),
131
+ priority: z.enum(["P0", "P1", "P2"]).describe("Priority level"),
132
+ directive: z.string().describe("Plain-language action directive"),
133
+ acceptance_criteria: z
134
+ .array(z.string())
135
+ .min(1)
136
+ .describe("Measurable acceptance criteria"),
137
+ context_pointers: z
138
+ .object({
139
+ business_requirement: z.string().optional(),
140
+ design_constraint: z.string().optional(),
141
+ engineering_constraint: z.string().optional(),
142
+ })
143
+ .optional()
144
+ .describe("File:line pointers for context"),
145
+ }, async ({ from, to, title, task_type, priority, directive, acceptance_criteria, context_pointers, }) => {
146
+ const now = new Date();
147
+ const dateStr = now.toISOString().slice(0, 10).replace(/-/g, "");
148
+ const handoff = {
149
+ handoff_id: `HND-${dateStr}-${String(Math.floor(Math.random() * 999) + 1).padStart(3, "0")}`,
150
+ timestamp_utc: now.toISOString(),
151
+ router: {
152
+ from: `ACE-${from.charAt(0).toUpperCase() + from.slice(1)}`,
153
+ via: "ACE-Orchestrator",
154
+ to: `ACE-${to.charAt(0).toUpperCase() + to.slice(1)}`,
155
+ },
156
+ task: {
157
+ title,
158
+ type: task_type,
159
+ priority,
160
+ owner: `ACE-${to.toUpperCase()}`,
161
+ depends_on: [],
162
+ scope: title,
163
+ },
164
+ context: {
165
+ business_requirement: context_pointers?.business_requirement || "",
166
+ design_constraint: context_pointers?.design_constraint || "",
167
+ engineering_constraint: context_pointers?.engineering_constraint || "",
168
+ directive,
169
+ },
170
+ acceptance_criteria,
171
+ deliverables: [],
172
+ verification: {
173
+ required_evidence: ["artifact_pointers", "verification_evidence"],
174
+ review_check: "Would a staff engineer approve this?",
175
+ status: "pending",
176
+ },
177
+ risks: [],
178
+ open_questions: [],
179
+ lessons_hook: {
180
+ on_correction_update: "tasks/lessons.md",
181
+ rule_format: "Never <bad pattern>; always <guardrail>.",
182
+ },
183
+ return_payload_contract: {
184
+ must_include: [
185
+ "updated_artifact_pointers",
186
+ "verification_evidence",
187
+ "residual_risks",
188
+ "explicit_blockers_or_done_state",
189
+ ],
190
+ },
191
+ };
192
+ const filePath = wsPath("tasks", `SWARM_HANDOFF.${from}_to_${to}_${dateStr}.json`);
193
+ safeWrite(filePath, JSON.stringify(handoff, null, 2));
194
+ return {
195
+ content: [
196
+ {
197
+ type: "text",
198
+ text: `# Handoff Created\n\nSaved to: ${filePath}\n\n\
199
+ \`\`\`json\n${JSON.stringify(handoff, null, 2)}\n\`\`\``,
200
+ },
201
+ ],
202
+ };
203
+ });
204
+ server.tool("validate_handoff", "Validate a SWARM_HANDOFF.json payload against required schema fields", {
205
+ handoff_json: z.string().describe("The handoff JSON string to validate"),
206
+ }, async ({ handoff_json }) => {
207
+ const errors = [];
208
+ let parsed;
209
+ try {
210
+ parsed = JSON.parse(handoff_json);
211
+ }
212
+ catch {
213
+ return {
214
+ content: [{ type: "text", text: "❌ Invalid JSON: could not parse payload." }],
215
+ };
216
+ }
217
+ const requiredTopLevel = [
218
+ "handoff_id",
219
+ "timestamp_utc",
220
+ "router",
221
+ "task",
222
+ "context",
223
+ "acceptance_criteria",
224
+ "verification",
225
+ "return_payload_contract",
226
+ ];
227
+ for (const key of requiredTopLevel) {
228
+ if (!(key in parsed))
229
+ errors.push(`Missing required field: ${key}`);
230
+ }
231
+ const router = parsed.router;
232
+ if (router) {
233
+ for (const k of ["from", "via", "to"]) {
234
+ if (!router[k])
235
+ errors.push(`router.${k} is missing`);
236
+ }
237
+ }
238
+ const task = parsed.task;
239
+ if (task) {
240
+ for (const k of ["title", "type", "priority", "owner"]) {
241
+ if (!task[k])
242
+ errors.push(`task.${k} is missing`);
243
+ }
244
+ }
245
+ const context = parsed.context;
246
+ if (context && !context.directive) {
247
+ errors.push("context.directive is required");
248
+ }
249
+ const criteria = parsed.acceptance_criteria;
250
+ if (!Array.isArray(criteria) || criteria.length === 0) {
251
+ errors.push("acceptance_criteria must be a non-empty array");
252
+ }
253
+ if (errors.length === 0) {
254
+ return {
255
+ content: [{ type: "text", text: "✅ Handoff payload is valid." }],
256
+ };
257
+ }
258
+ return {
259
+ content: [
260
+ {
261
+ type: "text",
262
+ text: `❌ Validation failed (${errors.length} issues):\n\n${errors
263
+ .map((error) => `- ${error}`)
264
+ .join("\n")}`,
265
+ },
266
+ ],
267
+ };
268
+ });
269
+ server.tool("get_handoff_template", "Get the canonical SWARM_HANDOFF.json template", {}, async () => ({
270
+ content: [
271
+ {
272
+ type: "text",
273
+ text: `# Handoff Template\n\n\`\`\`json\n${readTaskArtifact("handoff_template")}\n\`\`\``,
274
+ },
275
+ ],
276
+ }));
277
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
278
+ // 4. TODO / TASK MANAGEMENT
279
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
280
+ server.tool("get_todo", "Read the current swarm TODO execution board", {}, async () => ({
281
+ content: [{ type: "text", text: readTaskArtifact("todo") }],
282
+ }));
283
+ server.tool("update_todo", "Replace TODO board content", {
284
+ new_content: z.string().describe("Full updated TODO markdown content"),
285
+ }, async ({ new_content }) => {
286
+ const path = safeWrite(resolveWritableTaskPath("todo"), new_content);
287
+ return {
288
+ content: [{ type: "text", text: `✅ TODO updated: ${path}` }],
289
+ };
290
+ });
291
+ server.tool("get_task_pack", "Get responsibilities and evidence requirements for a specific ACE role", {
292
+ role: ROLE_ENUM.describe("Agent role"),
293
+ }, async ({ role }) => {
294
+ const full = readTaskArtifact("role_tasks");
295
+ const roleHeader = `## ACE-${role === "orchestrator" ? "Orchestrator" : role.toUpperCase()} Task Pack`;
296
+ const start = full.indexOf(roleHeader);
297
+ if (start === -1) {
298
+ return {
299
+ content: [{ type: "text", text: `Task pack section not found for role: ${role}` }],
300
+ };
301
+ }
302
+ const next = full.indexOf("\n## ", start + roleHeader.length);
303
+ const section = next === -1 ? full.slice(start) : full.slice(start, next);
304
+ return {
305
+ content: [{ type: "text", text: section.trim() }],
306
+ };
307
+ });
308
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
309
+ // 5. LESSONS
310
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
311
+ server.tool("get_lessons", "Read all accumulated lessons and guardrails", {}, async () => ({
312
+ content: [{ type: "text", text: readTaskArtifact("lessons") }],
313
+ }));
314
+ server.tool("add_lesson", "Record a new lesson/guardrail after a correction or failure", {
315
+ context: z.string().describe("What happened"),
316
+ failure_pattern: z.string().describe("What went wrong"),
317
+ guardrail: z.string().describe("Rule to prevent recurrence"),
318
+ verification_check: z.string().describe("How to verify compliance"),
319
+ }, async ({ context, failure_pattern, guardrail, verification_check }) => {
320
+ const date = new Date().toISOString().slice(0, 10);
321
+ const entry = [
322
+ "",
323
+ `## Lesson — ${date}`,
324
+ "",
325
+ `- **Date:** ${date}`,
326
+ `- **Context:** ${context}`,
327
+ `- **Failure Pattern:** ${failure_pattern}`,
328
+ `- **Guardrail:** ${guardrail}`,
329
+ `- **Verification Check:** ${verification_check}`,
330
+ "",
331
+ ].join("\n");
332
+ const existing = readTaskArtifact("lessons");
333
+ const path = safeWrite(resolveWritableTaskPath("lessons"), `${existing}${entry}`);
334
+ return {
335
+ content: [{ type: "text", text: `✅ Lesson recorded in ${path}` }],
336
+ };
337
+ });
338
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
339
+ // 6. ROUTING
340
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
341
+ server.tool("route_task", "Determine which ACE agent(s) or skill should handle a task", {
342
+ description: z.string().describe("Describe the task or question"),
343
+ domain: z
344
+ .enum(["venture", "ux", "engineering", "mixed", "research", "unknown"])
345
+ .optional()
346
+ .describe("Known domain, or unknown for auto-detect"),
347
+ }, async ({ description, domain }) => {
348
+ const text = description.toLowerCase();
349
+ let detected = domain ?? "unknown";
350
+ if (detected === "unknown") {
351
+ if (text.includes("thesis") ||
352
+ text.includes("market") ||
353
+ text.includes("pricing") ||
354
+ text.includes("distribution") ||
355
+ text.includes("unit economics")) {
356
+ detected = "venture";
357
+ }
358
+ else if (text.includes("ui") ||
359
+ text.includes("ux") ||
360
+ text.includes("copy") ||
361
+ text.includes("visual") ||
362
+ text.includes("mercer")) {
363
+ detected = "ux";
364
+ }
365
+ else if (text.includes("ast") ||
366
+ text.includes("codebase map") ||
367
+ text.includes("analyze codebase") ||
368
+ text.includes("compare codebase")) {
369
+ detected = "research";
370
+ }
371
+ else if (text.includes("build") ||
372
+ text.includes("test") ||
373
+ text.includes("code") ||
374
+ text.includes("deploy") ||
375
+ text.includes("bug")) {
376
+ detected = "engineering";
377
+ }
378
+ else {
379
+ detected = "mixed";
380
+ }
381
+ }
382
+ const routingMap = {
383
+ venture: {
384
+ agents: ["vos"],
385
+ pipeline: "VOS -> UI -> Coders (as needed)",
386
+ prompt: "ace-vos",
387
+ },
388
+ ux: {
389
+ agents: ["ui"],
390
+ pipeline: "UI -> Coders",
391
+ prompt: "ace-ui",
392
+ },
393
+ engineering: {
394
+ agents: ["coders"],
395
+ pipeline: "Coders",
396
+ prompt: "ace-coders",
397
+ },
398
+ mixed: {
399
+ agents: ["orchestrator"],
400
+ pipeline: "Orchestrator -> VOS/UI/Coders",
401
+ prompt: "ace-orchestrator",
402
+ },
403
+ research: {
404
+ agents: ["orchestrator"],
405
+ pipeline: "Orchestrator -> Skill-driven analysis",
406
+ skills: ["codemunch", "codesnipe"],
407
+ prompt: "ace-orchestrator",
408
+ },
409
+ };
410
+ const route = routingMap[detected] ?? routingMap.mixed;
411
+ return {
412
+ content: [
413
+ {
414
+ type: "text",
415
+ text: [
416
+ "# Task Routing Decision",
417
+ "",
418
+ `**Task:** ${description}`,
419
+ `**Detected Domain:** ${detected}`,
420
+ `**Primary Agent(s):** ${route.agents
421
+ .map((agent) => `ACE-${agent.toUpperCase()}`)
422
+ .join(", ")}`,
423
+ `**Pipeline:** ${route.pipeline}`,
424
+ `**Recommended Prompt:** ${route.prompt}`,
425
+ route.skills ? `**Recommended Skills:** ${route.skills.join(", ")}` : "",
426
+ "",
427
+ "## Next Steps",
428
+ `1. Activate prompt: \`${route.prompt}\``,
429
+ "2. Generate a structured handoff with `create_handoff` when cross-role routing is needed",
430
+ "3. Load role task pack with `get_task_pack`",
431
+ ]
432
+ .filter(Boolean)
433
+ .join("\n"),
434
+ },
435
+ ],
436
+ };
437
+ });
438
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
439
+ // 7. FILE OPERATIONS
440
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
441
+ server.tool("read_workspace_file", "Read any workspace file by relative path", {
442
+ path: z.string().describe("Relative path from workspace root"),
443
+ }, async ({ path }) => ({
444
+ content: [{ type: "text", text: safeRead(path) }],
445
+ }));
446
+ server.tool("write_workspace_file", "Write or update a workspace file", {
447
+ path: z.string().describe("Relative path from workspace root"),
448
+ content: z.string().describe("File content"),
449
+ }, async ({ path, content }) => {
450
+ const abs = safeWrite(path, content);
451
+ return {
452
+ content: [{ type: "text", text: `✅ Written: ${abs}` }],
453
+ };
454
+ });
455
+ server.tool("list_workspace", "List files/directories in a workspace path", {
456
+ path: z.string().optional().describe("Relative path (default: workspace root)"),
457
+ }, async ({ path }) => {
458
+ const dir = path ? wsPath(path) : WORKSPACE_ROOT;
459
+ const rel = relative(WORKSPACE_ROOT, dir);
460
+ if (rel.startsWith("..") || isAbsolute(rel)) {
461
+ return {
462
+ content: [
463
+ { type: "text", text: `❌ Access denied: path escapes workspace root (${dir})` },
464
+ ],
465
+ };
466
+ }
467
+ try {
468
+ const entries = readdirSync(dir, { withFileTypes: true })
469
+ .map((entry) => `${entry.isDirectory() ? "[DIR]" : "[FILE]"} ${entry.name}`)
470
+ .join("\n");
471
+ return {
472
+ content: [{ type: "text", text: `# ${dir}\n\n${entries}` }],
473
+ };
474
+ }
475
+ catch (err) {
476
+ return {
477
+ content: [{ type: "text", text: `❌ Could not list ${dir}\n${String(err)}` }],
478
+ };
479
+ }
480
+ });
481
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
482
+ // 8. BOOTSTRAP & STATUS
483
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
484
+ server.tool("bootstrap_state", "Bootstrap ACE framework files (state, tasks, instructions, skills, MCP config)", {
485
+ project_name: z.string().optional().describe("Project name for MASTER_PLAN.md"),
486
+ force: z.boolean().optional().describe("Overwrite existing scaffold files"),
487
+ include_mcp_config: z
488
+ .boolean()
489
+ .optional()
490
+ .describe("Write .vscode/mcp.json pointing to npx ace-swarm mcp"),
491
+ }, async ({ project_name, force, include_mcp_config }) => {
492
+ const result = bootstrapAceWorkspace({
493
+ projectName: project_name,
494
+ force,
495
+ includeMcpConfig: include_mcp_config,
496
+ });
497
+ return {
498
+ content: [
499
+ {
500
+ type: "text",
501
+ text: [
502
+ "# Bootstrap Complete",
503
+ "",
504
+ `Created: ${result.created.length}`,
505
+ `Updated: ${result.updated.length}`,
506
+ `Skipped: ${result.skipped.length}`,
507
+ "",
508
+ "## Created",
509
+ ...result.created.map((p) => `- ${p}`),
510
+ "",
511
+ "## Updated",
512
+ ...(result.updated.length > 0
513
+ ? result.updated.map((p) => `- ${p}`)
514
+ : ["- (none)"]),
515
+ ].join("\n"),
516
+ },
517
+ ],
518
+ };
519
+ });
520
+ server.tool("get_framework_status", "Inspect ACE framework wiring: agents, tasks, skills, and core state files", {}, async () => {
521
+ const agentLines = ALL_AGENTS.flatMap((role) => {
522
+ const instructionPath = getAgentInstructionPath(role);
523
+ const manifestPath = getAgentManifestPath(role);
524
+ return [
525
+ `- ${role}: instructions -> ${classifyPathSource(instructionPath)}${instructionPath ? ` (${instructionPath})` : ""}`,
526
+ ` manifest -> ${classifyPathSource(manifestPath)}${manifestPath ? ` (${manifestPath})` : ""}`,
527
+ ];
528
+ });
529
+ const taskKeys = [
530
+ "todo",
531
+ "role_tasks",
532
+ "cli_work_split",
533
+ "lessons",
534
+ "handoff_template",
535
+ ];
536
+ const taskLines = taskKeys.map((key) => {
537
+ const path = getTaskArtifactPath(key);
538
+ return `- ${key}: ${classifyPathSource(path)}${path ? ` (${path})` : ""}`;
539
+ });
540
+ const skills = listAvailableSkills();
541
+ const skillsLines = skills.map((skill) => `- ${skill.name}: ${skill.source} (${skill.path})`);
542
+ const stateChecks = [
543
+ "agent-state/TASK.md",
544
+ "agent-state/STATUS.md",
545
+ "agent-state/SCOPE.md",
546
+ "agent-state/EVIDENCE_LOG.md",
547
+ "agent-state/DECISIONS.md",
548
+ "agent-state/RISKS.md",
549
+ "agent-state/TEAL_CONFIG.md",
550
+ "agent-state/HANDOFF.json",
551
+ ];
552
+ const stateLines = stateChecks.map((relPath) => {
553
+ const abs = wsPath(relPath);
554
+ const exists = safeRead(relPath).startsWith("[FILE NOT FOUND]") ? "missing" : "ok";
555
+ return `- ${relPath}: ${exists} (${abs})`;
556
+ });
557
+ return {
558
+ content: [
559
+ {
560
+ type: "text",
561
+ text: [
562
+ "# ACE Framework Status",
563
+ "",
564
+ "## Agent Artifacts",
565
+ ...agentLines,
566
+ "",
567
+ "## Task Artifacts",
568
+ ...taskLines,
569
+ "",
570
+ "## Skills",
571
+ ...(skillsLines.length > 0 ? skillsLines : ["- none found"]),
572
+ "",
573
+ "## Core State",
574
+ ...stateLines,
575
+ ].join("\n"),
576
+ },
577
+ ],
578
+ };
579
+ });
580
+ server.tool("get_mcp_config", "Get VS Code .vscode/mcp.json snippet for this package", {}, async () => ({
581
+ content: [
582
+ {
583
+ type: "text",
584
+ text: [
585
+ "# VS Code MCP Config",
586
+ "",
587
+ "```json",
588
+ getMcpServerConfigSnippet(),
589
+ "```",
590
+ ].join("\n"),
591
+ },
592
+ ],
593
+ }));
594
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
595
+ // 9. CLI WORK SPLIT
596
+ // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
597
+ server.tool("get_cli_split", "Get the CLI work split contract (Codex vs Gemini routing)", {}, async () => ({
598
+ content: [{ type: "text", text: readTaskArtifact("cli_work_split") }],
599
+ }));
600
+ }
601
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}