@voybio/ace-swarm 0.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 (334) hide show
  1. package/CHANGELOG.md +109 -0
  2. package/LICENSE +186 -0
  3. package/README.md +229 -0
  4. package/assets/.agents/ACE/ACE-Init/AGENTS.md +210 -0
  5. package/assets/.agents/ACE/ACE-Init/instructions.md +118 -0
  6. package/assets/.agents/ACE/ACE_coders/AGENTS.md +154 -0
  7. package/assets/.agents/ACE/ACE_coders/INSTRUCTIONS.md +216 -0
  8. package/assets/.agents/ACE/AGENT_REGISTRY.md +70 -0
  9. package/assets/.agents/ACE/AGENT_REGISTRY_7.md +9 -0
  10. package/assets/.agents/ACE/DIRECTIVE_KERNEL.md +234 -0
  11. package/assets/.agents/ACE/UI/AGENTS.md +115 -0
  12. package/assets/.agents/ACE/UI/instructions.md +178 -0
  13. package/assets/.agents/ACE/VOS/ACE_VOS_MISSING_INFO_MATRIX.md +42 -0
  14. package/assets/.agents/ACE/VOS/AGENTS.md +72 -0
  15. package/assets/.agents/ACE/VOS/instructions.md +211 -0
  16. package/assets/.agents/ACE/agent-astgrep/AGENTS.md +123 -0
  17. package/assets/.agents/ACE/agent-astgrep/instructions.md +91 -0
  18. package/assets/.agents/ACE/agent-builder/AGENTS.md +172 -0
  19. package/assets/.agents/ACE/agent-builder/instructions.md +137 -0
  20. package/assets/.agents/ACE/agent-docs/AGENTS.md +159 -0
  21. package/assets/.agents/ACE/agent-docs/instructions.md +133 -0
  22. package/assets/.agents/ACE/agent-eval/AGENTS.md +46 -0
  23. package/assets/.agents/ACE/agent-eval/instructions.md +56 -0
  24. package/assets/.agents/ACE/agent-memory/AGENTS.md +49 -0
  25. package/assets/.agents/ACE/agent-memory/instructions.md +50 -0
  26. package/assets/.agents/ACE/agent-observability/AGENTS.md +46 -0
  27. package/assets/.agents/ACE/agent-observability/instructions.md +50 -0
  28. package/assets/.agents/ACE/agent-ops/AGENTS.md +201 -0
  29. package/assets/.agents/ACE/agent-ops/instructions.md +136 -0
  30. package/assets/.agents/ACE/agent-qa/AGENTS.md +189 -0
  31. package/assets/.agents/ACE/agent-qa/instructions.md +121 -0
  32. package/assets/.agents/ACE/agent-release/AGENTS.md +48 -0
  33. package/assets/.agents/ACE/agent-release/instructions.md +49 -0
  34. package/assets/.agents/ACE/agent-research/AGENTS.md +160 -0
  35. package/assets/.agents/ACE/agent-research/instructions.md +118 -0
  36. package/assets/.agents/ACE/agent-security/AGENTS.md +48 -0
  37. package/assets/.agents/ACE/agent-security/instructions.md +50 -0
  38. package/assets/.agents/ACE/agent-skeptic/AGENTS.md +178 -0
  39. package/assets/.agents/ACE/agent-skeptic/instructions.md +196 -0
  40. package/assets/.agents/ACE/agent-spec/AGENTS.md +169 -0
  41. package/assets/.agents/ACE/agent-spec/instructions.md +116 -0
  42. package/assets/.agents/ACE/orchestrator/AGENTS.md +365 -0
  43. package/assets/.agents/ACE/orchestrator/instructions.md +231 -0
  44. package/assets/.agents/skills/ace-orchestrator/SKILL.md +63 -0
  45. package/assets/.agents/skills/ace-orchestrator/references/engineering-bootstrap-playbook.md +360 -0
  46. package/assets/.agents/skills/astgrep-index/SKILL.md +58 -0
  47. package/assets/.agents/skills/codemunch/SKILL.md +65 -0
  48. package/assets/.agents/skills/codemunch/references/ast-driven-protocol.md +543 -0
  49. package/assets/.agents/skills/codesnipe/SKILL.md +64 -0
  50. package/assets/.agents/skills/codesnipe/references/dual-codebase-playbook.md +671 -0
  51. package/assets/.agents/skills/eval-harness/SKILL.md +203 -0
  52. package/assets/.agents/skills/handoff-lint/SKILL.md +164 -0
  53. package/assets/.agents/skills/incident-commander/SKILL.md +174 -0
  54. package/assets/.agents/skills/landing-review-watcher/SKILL.md +68 -0
  55. package/assets/.agents/skills/memory-curator/SKILL.md +179 -0
  56. package/assets/.agents/skills/problem-triage/SKILL.md +57 -0
  57. package/assets/.agents/skills/problem-triage/agents/openai.yaml +3 -0
  58. package/assets/.agents/skills/release-sentry/SKILL.md +189 -0
  59. package/assets/.agents/skills/risk-quant/SKILL.md +190 -0
  60. package/assets/.agents/skills/schema-forge/SKILL.md +174 -0
  61. package/assets/.agents/skills/skill-auditor/SKILL.md +52 -0
  62. package/assets/.agents/skills/state-auditor/SKILL.md +182 -0
  63. package/assets/.github/hooks/ace-copilot.json +68 -0
  64. package/assets/agent-state/ACE_WORKFLOW.md +131 -0
  65. package/assets/agent-state/ARTIFACT_MANIFEST.json +5 -0
  66. package/assets/agent-state/AST_GREP_COMMANDS.md +121 -0
  67. package/assets/agent-state/AST_GREP_INDEX.json +13 -0
  68. package/assets/agent-state/AST_GREP_INDEX.md +15 -0
  69. package/assets/agent-state/DECISIONS.md +7 -0
  70. package/assets/agent-state/EVIDENCE_LOG.md +7 -0
  71. package/assets/agent-state/HANDOFF.json +24 -0
  72. package/assets/agent-state/INTERFACE_REGISTRY.md +75 -0
  73. package/assets/agent-state/MODULES/gates/gate-autonomy.json +7 -0
  74. package/assets/agent-state/MODULES/gates/gate-completeness.json +7 -0
  75. package/assets/agent-state/MODULES/gates/gate-correctness.json +7 -0
  76. package/assets/agent-state/MODULES/gates/gate-evaluation.json +7 -0
  77. package/assets/agent-state/MODULES/gates/gate-operability.json +7 -0
  78. package/assets/agent-state/MODULES/gates/gate-security.json +7 -0
  79. package/assets/agent-state/MODULES/gates/gate-typescript-public-surface.json +7 -0
  80. package/assets/agent-state/MODULES/registry.json +41 -0
  81. package/assets/agent-state/MODULES/roles/capability-astgrep.json +49 -0
  82. package/assets/agent-state/MODULES/roles/capability-build.json +39 -0
  83. package/assets/agent-state/MODULES/roles/capability-docs.json +38 -0
  84. package/assets/agent-state/MODULES/roles/capability-eval.json +20 -0
  85. package/assets/agent-state/MODULES/roles/capability-memory.json +20 -0
  86. package/assets/agent-state/MODULES/roles/capability-observability.json +20 -0
  87. package/assets/agent-state/MODULES/roles/capability-ops.json +45 -0
  88. package/assets/agent-state/MODULES/roles/capability-qa.json +40 -0
  89. package/assets/agent-state/MODULES/roles/capability-release.json +21 -0
  90. package/assets/agent-state/MODULES/roles/capability-research.json +44 -0
  91. package/assets/agent-state/MODULES/roles/capability-security.json +21 -0
  92. package/assets/agent-state/MODULES/roles/capability-skeptic.json +48 -0
  93. package/assets/agent-state/MODULES/roles/capability-spec.json +42 -0
  94. package/assets/agent-state/MODULES/schemas/ACE_RUNTIME_PROFILE.schema.json +289 -0
  95. package/assets/agent-state/MODULES/schemas/ARTIFACT_MANIFEST.schema.json +185 -0
  96. package/assets/agent-state/MODULES/schemas/HANDOFF.agent-state.schema.json +124 -0
  97. package/assets/agent-state/MODULES/schemas/HANDOFF.schema.json +55 -0
  98. package/assets/agent-state/MODULES/schemas/RUNTIME_EXECUTOR_SESSION_REGISTRY.schema.json +290 -0
  99. package/assets/agent-state/MODULES/schemas/RUNTIME_TOOL_SPEC_REGISTRY.schema.json +144 -0
  100. package/assets/agent-state/MODULES/schemas/STATUS_EVENT.schema.json +84 -0
  101. package/assets/agent-state/MODULES/schemas/SWARM_HANDOFF.schema.json +138 -0
  102. package/assets/agent-state/MODULES/schemas/TRACKER_SNAPSHOT.schema.json +134 -0
  103. package/assets/agent-state/MODULES/schemas/VERICIFY_BRIDGE_SNAPSHOT.schema.json +157 -0
  104. package/assets/agent-state/MODULES/schemas/VERICIFY_PROCESS_POST_LOG.schema.json +93 -0
  105. package/assets/agent-state/MODULES/schemas/WORKSPACE_SESSION_REGISTRY.schema.json +133 -0
  106. package/assets/agent-state/PROVENANCE_LOG.md +28 -0
  107. package/assets/agent-state/QUALITY_GATES.md +15 -0
  108. package/assets/agent-state/RISKS.md +8 -0
  109. package/assets/agent-state/SCOPE.md +20 -0
  110. package/assets/agent-state/SKILL_CATALOG.md +48 -0
  111. package/assets/agent-state/STATUS.md +8 -0
  112. package/assets/agent-state/STATUS_EVENTS.ndjson +1 -0
  113. package/assets/agent-state/TASK.md +18 -0
  114. package/assets/agent-state/TEAL_CONFIG.md +117 -0
  115. package/assets/agent-state/handoff-registry.json +5 -0
  116. package/assets/agent-state/index-fingerprints.json +7 -0
  117. package/assets/agent-state/index.json +32 -0
  118. package/assets/agent-state/run-ledger.json +5 -0
  119. package/assets/agent-state/runtime-executor-sessions.json +5 -0
  120. package/assets/agent-state/runtime-tool-specs.json +5 -0
  121. package/assets/agent-state/runtime-workspaces.json +5 -0
  122. package/assets/agent-state/todo-state.json +7 -0
  123. package/assets/agent-state/tracker-snapshot.json +7 -0
  124. package/assets/agent-state/vericify/ace-bridge.json +60 -0
  125. package/assets/agent-state/vericify/process-posts.json +5 -0
  126. package/assets/instructions/ACE.instructions.md +187 -0
  127. package/assets/instructions/ACE_Coder.instructions.md +146 -0
  128. package/assets/instructions/ACE_UI.instructions.md +178 -0
  129. package/assets/instructions/ACE_VOS.instructions.md +211 -0
  130. package/assets/scripts/ace-hook-dispatch.mjs +538 -0
  131. package/assets/scripts/bootstrap-workspace.sh +27 -0
  132. package/assets/scripts/copilot-hook-dispatch.mjs +3 -0
  133. package/assets/scripts/eval-harness.sh +68 -0
  134. package/assets/scripts/render-mcp-configs.sh +396 -0
  135. package/assets/tasks/README.md +48 -0
  136. package/assets/tasks/SWARM_HANDOFF.example.json +53 -0
  137. package/assets/tasks/SWARM_HANDOFF.example_ui_to_coders.json +55 -0
  138. package/assets/tasks/SWARM_HANDOFF.example_vos_to_ui.json +55 -0
  139. package/assets/tasks/SWARM_HANDOFF.template.json +52 -0
  140. package/assets/tasks/cli_work_split.md +22 -0
  141. package/assets/tasks/lessons.md +17 -0
  142. package/assets/tasks/role_tasks.md +206 -0
  143. package/assets/tasks/todo.md +23 -0
  144. package/dist/ace-autonomy.d.ts +137 -0
  145. package/dist/ace-autonomy.js +472 -0
  146. package/dist/ace-context.d.ts +29 -0
  147. package/dist/ace-context.js +240 -0
  148. package/dist/ace-internal-tools.d.ts +8 -0
  149. package/dist/ace-internal-tools.js +76 -0
  150. package/dist/ace-server-instructions.d.ts +12 -0
  151. package/dist/ace-server-instructions.js +324 -0
  152. package/dist/agent-runtime/role-adapters.d.ts +29 -0
  153. package/dist/agent-runtime/role-adapters.js +573 -0
  154. package/dist/astgrep-index.d.ts +24 -0
  155. package/dist/astgrep-index.js +476 -0
  156. package/dist/cli.d.ts +3 -0
  157. package/dist/cli.js +591 -0
  158. package/dist/git-ops.d.ts +53 -0
  159. package/dist/git-ops.js +238 -0
  160. package/dist/handoff-registry.d.ts +71 -0
  161. package/dist/handoff-registry.js +422 -0
  162. package/dist/helpers.d.ts +126 -0
  163. package/dist/helpers.js +1687 -0
  164. package/dist/index-store.d.ts +51 -0
  165. package/dist/index-store.js +328 -0
  166. package/dist/index.d.ts +3 -0
  167. package/dist/index.js +7 -0
  168. package/dist/internal-tool-runtime.d.ts +21 -0
  169. package/dist/internal-tool-runtime.js +136 -0
  170. package/dist/job-scheduler.d.ts +175 -0
  171. package/dist/job-scheduler.js +1217 -0
  172. package/dist/kanban.d.ts +27 -0
  173. package/dist/kanban.js +339 -0
  174. package/dist/local-model-runtime.d.ts +40 -0
  175. package/dist/local-model-runtime.js +174 -0
  176. package/dist/model-bridge.d.ts +54 -0
  177. package/dist/model-bridge.js +587 -0
  178. package/dist/orchestrator-supervisor.d.ts +100 -0
  179. package/dist/orchestrator-supervisor.js +399 -0
  180. package/dist/problem-triage.d.ts +23 -0
  181. package/dist/problem-triage.js +448 -0
  182. package/dist/prompts.d.ts +7 -0
  183. package/dist/prompts.js +628 -0
  184. package/dist/public-surface.d.ts +30 -0
  185. package/dist/public-surface.js +316 -0
  186. package/dist/resources.d.ts +7 -0
  187. package/dist/resources.js +545 -0
  188. package/dist/run-ledger.d.ts +36 -0
  189. package/dist/run-ledger.js +257 -0
  190. package/dist/runtime-command.d.ts +18 -0
  191. package/dist/runtime-command.js +76 -0
  192. package/dist/runtime-executor.d.ts +104 -0
  193. package/dist/runtime-executor.js +985 -0
  194. package/dist/runtime-profile.d.ts +116 -0
  195. package/dist/runtime-profile.js +532 -0
  196. package/dist/runtime-tool-specs.d.ts +68 -0
  197. package/dist/runtime-tool-specs.js +527 -0
  198. package/dist/safe-edit.d.ts +52 -0
  199. package/dist/safe-edit.js +255 -0
  200. package/dist/schemas.d.ts +44 -0
  201. package/dist/schemas.js +830 -0
  202. package/dist/semantic-cache.d.ts +147 -0
  203. package/dist/semantic-cache.js +552 -0
  204. package/dist/semantic-hash.d.ts +83 -0
  205. package/dist/semantic-hash.js +346 -0
  206. package/dist/server.d.ts +10 -0
  207. package/dist/server.js +46 -0
  208. package/dist/shared.d.ts +136 -0
  209. package/dist/shared.js +269 -0
  210. package/dist/skill-auditor.d.ts +26 -0
  211. package/dist/skill-auditor.js +184 -0
  212. package/dist/skill-catalog.d.ts +60 -0
  213. package/dist/skill-catalog.js +305 -0
  214. package/dist/status-events.d.ts +40 -0
  215. package/dist/status-events.js +269 -0
  216. package/dist/store/ace-packed-store.d.ts +69 -0
  217. package/dist/store/ace-packed-store.js +434 -0
  218. package/dist/store/bootstrap-store.d.ts +46 -0
  219. package/dist/store/bootstrap-store.js +242 -0
  220. package/dist/store/catalog-builder.d.ts +21 -0
  221. package/dist/store/catalog-builder.js +68 -0
  222. package/dist/store/importer.d.ts +19 -0
  223. package/dist/store/importer.js +157 -0
  224. package/dist/store/knowledge-bake.d.ts +59 -0
  225. package/dist/store/knowledge-bake.js +339 -0
  226. package/dist/store/materializers/hook-context-materializer.d.ts +25 -0
  227. package/dist/store/materializers/hook-context-materializer.js +100 -0
  228. package/dist/store/materializers/host-file-materializer.d.ts +37 -0
  229. package/dist/store/materializers/host-file-materializer.js +271 -0
  230. package/dist/store/materializers/todo-syncer.d.ts +30 -0
  231. package/dist/store/materializers/todo-syncer.js +140 -0
  232. package/dist/store/materializers/vericify-projector.d.ts +38 -0
  233. package/dist/store/materializers/vericify-projector.js +239 -0
  234. package/dist/store/repositories/discovery-repository.d.ts +24 -0
  235. package/dist/store/repositories/discovery-repository.js +58 -0
  236. package/dist/store/repositories/handoff-repository.d.ts +31 -0
  237. package/dist/store/repositories/handoff-repository.js +67 -0
  238. package/dist/store/repositories/ledger-repository.d.ts +26 -0
  239. package/dist/store/repositories/ledger-repository.js +49 -0
  240. package/dist/store/repositories/runtime-kv-repository.d.ts +16 -0
  241. package/dist/store/repositories/runtime-kv-repository.js +36 -0
  242. package/dist/store/repositories/scheduler-repository.d.ts +50 -0
  243. package/dist/store/repositories/scheduler-repository.js +123 -0
  244. package/dist/store/repositories/session-repository.d.ts +33 -0
  245. package/dist/store/repositories/session-repository.js +82 -0
  246. package/dist/store/repositories/todo-repository.d.ts +31 -0
  247. package/dist/store/repositories/todo-repository.js +77 -0
  248. package/dist/store/repositories/tracker-repository.d.ts +25 -0
  249. package/dist/store/repositories/tracker-repository.js +43 -0
  250. package/dist/store/repositories/vericify-repository.d.ts +32 -0
  251. package/dist/store/repositories/vericify-repository.js +58 -0
  252. package/dist/store/skills-install.d.ts +28 -0
  253. package/dist/store/skills-install.js +86 -0
  254. package/dist/store/state-reader.d.ts +49 -0
  255. package/dist/store/state-reader.js +111 -0
  256. package/dist/store/store-artifacts.d.ts +12 -0
  257. package/dist/store/store-artifacts.js +138 -0
  258. package/dist/store/store-snapshot.d.ts +19 -0
  259. package/dist/store/store-snapshot.js +140 -0
  260. package/dist/store/topology-bake.d.ts +15 -0
  261. package/dist/store/topology-bake.js +215 -0
  262. package/dist/store/types.d.ts +155 -0
  263. package/dist/store/types.js +35 -0
  264. package/dist/store/workspace-snapshot.d.ts +26 -0
  265. package/dist/store/workspace-snapshot.js +107 -0
  266. package/dist/store/write-queue.d.ts +7 -0
  267. package/dist/store/write-queue.js +26 -0
  268. package/dist/todo-state.d.ts +41 -0
  269. package/dist/todo-state.js +399 -0
  270. package/dist/tools-agent.d.ts +7 -0
  271. package/dist/tools-agent.js +1542 -0
  272. package/dist/tools-discovery.d.ts +6 -0
  273. package/dist/tools-discovery.js +178 -0
  274. package/dist/tools-drift.d.ts +13 -0
  275. package/dist/tools-drift.js +357 -0
  276. package/dist/tools-files.d.ts +6 -0
  277. package/dist/tools-files.js +679 -0
  278. package/dist/tools-framework.d.ts +7 -0
  279. package/dist/tools-framework.js +1414 -0
  280. package/dist/tools-git.d.ts +6 -0
  281. package/dist/tools-git.js +183 -0
  282. package/dist/tools-handoff.d.ts +32 -0
  283. package/dist/tools-handoff.js +489 -0
  284. package/dist/tools-lifecycle.d.ts +6 -0
  285. package/dist/tools-lifecycle.js +205 -0
  286. package/dist/tools-memory.d.ts +6 -0
  287. package/dist/tools-memory.js +260 -0
  288. package/dist/tools-scheduler.d.ts +6 -0
  289. package/dist/tools-scheduler.js +228 -0
  290. package/dist/tools-skills.d.ts +3 -0
  291. package/dist/tools-skills.js +104 -0
  292. package/dist/tools-todo.d.ts +6 -0
  293. package/dist/tools-todo.js +154 -0
  294. package/dist/tools.d.ts +9 -0
  295. package/dist/tools.js +33 -0
  296. package/dist/tracker-adapters.d.ts +74 -0
  297. package/dist/tracker-adapters.js +776 -0
  298. package/dist/tracker-sync.d.ts +10 -0
  299. package/dist/tracker-sync.js +84 -0
  300. package/dist/tui/agent-runner.d.ts +137 -0
  301. package/dist/tui/agent-runner.js +466 -0
  302. package/dist/tui/agent-worker.d.ts +10 -0
  303. package/dist/tui/agent-worker.js +347 -0
  304. package/dist/tui/chat.d.ts +84 -0
  305. package/dist/tui/chat.js +368 -0
  306. package/dist/tui/commands.d.ts +57 -0
  307. package/dist/tui/commands.js +432 -0
  308. package/dist/tui/dashboard.d.ts +24 -0
  309. package/dist/tui/dashboard.js +110 -0
  310. package/dist/tui/index.d.ts +114 -0
  311. package/dist/tui/index.js +1059 -0
  312. package/dist/tui/input.d.ts +49 -0
  313. package/dist/tui/input.js +336 -0
  314. package/dist/tui/layout.d.ts +116 -0
  315. package/dist/tui/layout.js +367 -0
  316. package/dist/tui/ollama.d.ts +116 -0
  317. package/dist/tui/ollama.js +192 -0
  318. package/dist/tui/openai-compatible.d.ts +63 -0
  319. package/dist/tui/openai-compatible.js +370 -0
  320. package/dist/tui/provider-discovery.d.ts +59 -0
  321. package/dist/tui/provider-discovery.js +530 -0
  322. package/dist/tui/renderer.d.ts +166 -0
  323. package/dist/tui/renderer.js +304 -0
  324. package/dist/tui/tabs.d.ts +70 -0
  325. package/dist/tui/tabs.js +208 -0
  326. package/dist/tui/telemetry.d.ts +56 -0
  327. package/dist/tui/telemetry.js +106 -0
  328. package/dist/vericify-bridge.d.ts +146 -0
  329. package/dist/vericify-bridge.js +571 -0
  330. package/dist/vericify-context.d.ts +10 -0
  331. package/dist/vericify-context.js +72 -0
  332. package/dist/workspace-manager.d.ts +107 -0
  333. package/dist/workspace-manager.js +636 -0
  334. package/package.json +83 -0
@@ -0,0 +1,448 @@
1
+ import { safeWrite } from "./helpers.js";
2
+ import { slugify } from "./shared.js";
3
+ import { listSkillCatalogEntries, summarizeSkillCatalog, } from "./skill-catalog.js";
4
+ const STOPWORDS = new Set([
5
+ "the",
6
+ "and",
7
+ "for",
8
+ "that",
9
+ "this",
10
+ "with",
11
+ "from",
12
+ "into",
13
+ "your",
14
+ "when",
15
+ "what",
16
+ "where",
17
+ "which",
18
+ "about",
19
+ "need",
20
+ "needs",
21
+ "should",
22
+ "would",
23
+ "could",
24
+ "have",
25
+ "has",
26
+ "been",
27
+ "being",
28
+ "just",
29
+ "task",
30
+ "asks",
31
+ "user",
32
+ "skill",
33
+ "skills",
34
+ "agent",
35
+ "agents",
36
+ "workflow",
37
+ "workflows",
38
+ ]);
39
+ const CHANGE_HINTS = [
40
+ "improve",
41
+ "patch",
42
+ "fix",
43
+ "rewrite",
44
+ "split",
45
+ "add",
46
+ "update",
47
+ "extend",
48
+ "harden",
49
+ "implement",
50
+ "metadata",
51
+ "frontmatter",
52
+ "portable",
53
+ "portability",
54
+ "adapter",
55
+ "adapters",
56
+ "overlay",
57
+ "overlays",
58
+ "claude",
59
+ "cursor",
60
+ "codex",
61
+ "antigravity",
62
+ "turnkey",
63
+ "openai.yaml",
64
+ "openai yaml",
65
+ "canary",
66
+ "validation",
67
+ "references",
68
+ ];
69
+ const REUSABLE_HINTS = [
70
+ "reusable",
71
+ "repeat",
72
+ "repeated",
73
+ "every time",
74
+ "keep seeing",
75
+ "standardize",
76
+ "new skill",
77
+ "should become a skill",
78
+ "candidate skill",
79
+ "front door",
80
+ ];
81
+ const ONE_OFF_HINTS = [
82
+ "one-off",
83
+ "one off",
84
+ "just this once",
85
+ "single file",
86
+ "rename one",
87
+ "small tweak",
88
+ "ad hoc",
89
+ ];
90
+ const BLOCKED_TOOL_HINTS = [
91
+ "missing tool",
92
+ "missing permission",
93
+ "permission",
94
+ "approval",
95
+ "api key",
96
+ "access token",
97
+ "credential",
98
+ "credentials",
99
+ "network access",
100
+ "mcp server",
101
+ "connector",
102
+ "not installed",
103
+ "blocked",
104
+ ];
105
+ const MANUAL_SKILL_HINTS = {
106
+ "ace-orchestrator": [
107
+ "initiate ace",
108
+ "orchestrator",
109
+ "engineering snapshot",
110
+ "bootstrap engineering",
111
+ "swarm handoff",
112
+ ],
113
+ "astgrep-index": ["ast-grep index", "structural index", "discovery index", "astgrep"],
114
+ codemunch: ["codebase map", "understand codebase", "ast driven", "code comprehension"],
115
+ codesnipe: ["compare codebases", "dual codebase", "inspiration", "compare repo"],
116
+ "problem-triage": [
117
+ "problem triage",
118
+ "existing skill fits",
119
+ "needs patching",
120
+ "new skill warranted",
121
+ "one off task",
122
+ "missing tool or permission",
123
+ ],
124
+ "skill-auditor": [
125
+ "skill auditor",
126
+ "audit skills",
127
+ "skill quality",
128
+ "readiness rubric",
129
+ "portable skill contract",
130
+ ],
131
+ "schema-forge": ["schema", "contract", "compatibility", "migration"],
132
+ "risk-quant": ["risk", "probability impact", "mitigation"],
133
+ "state-auditor": ["state drift", "state audit", "status truth"],
134
+ };
135
+ function includesAny(text, patterns) {
136
+ return patterns.some((pattern) => text.includes(pattern));
137
+ }
138
+ function clamp(value, min, max) {
139
+ return Math.min(max, Math.max(min, value));
140
+ }
141
+ function normalizeText(value) {
142
+ return value.toLowerCase().replace(/\s+/g, " ").trim();
143
+ }
144
+ function extractTerms(value) {
145
+ return [...new Set(normalizeText(value)
146
+ .split(/[^a-z0-9-]+/g)
147
+ .map((term) => term.trim())
148
+ .filter((term) => term.length >= 3 && !STOPWORDS.has(term)))];
149
+ }
150
+ function candidateTerms(entry) {
151
+ const descriptionTerms = extractTerms(entry.description);
152
+ const headingTerms = entry.normalized_headings.flatMap((heading) => extractTerms(heading));
153
+ const nameTerms = entry.name.split("-").filter((term) => term.length >= 3);
154
+ return [...new Set([...nameTerms, ...descriptionTerms, ...headingTerms])];
155
+ }
156
+ function scoreSkillMatch(entry, request) {
157
+ const text = normalizeText(request);
158
+ const reasons = [];
159
+ let score = 0;
160
+ if (text.includes(entry.name.toLowerCase())) {
161
+ score += 14;
162
+ reasons.push(`Exact skill name match: ${entry.name}`);
163
+ }
164
+ for (const hint of MANUAL_SKILL_HINTS[entry.name] ?? []) {
165
+ if (text.includes(hint)) {
166
+ score += 5;
167
+ reasons.push(`Matched skill hint: "${hint}"`);
168
+ }
169
+ }
170
+ for (const term of candidateTerms(entry)) {
171
+ if (text.includes(term)) {
172
+ score += term.length >= 8 ? 3 : 2;
173
+ reasons.push(`Matched keyword: ${term}`);
174
+ }
175
+ }
176
+ return {
177
+ name: entry.name,
178
+ source: entry.source,
179
+ score,
180
+ reasons: [...new Set(reasons)].slice(0, 6),
181
+ };
182
+ }
183
+ function detectMissingRequirements(text) {
184
+ const requirements = [];
185
+ if (includesAny(text, ["permission", "approval", "blocked", "network access"]) &&
186
+ includesAny(text, BLOCKED_TOOL_HINTS)) {
187
+ requirements.push("permission_or_network_access");
188
+ }
189
+ if (includesAny(text, ["mcp server", "connector", "not installed", "missing tool"])) {
190
+ requirements.push("tooling_or_connector_install");
191
+ }
192
+ if (includesAny(text, ["api key", "access token", "credential", "credentials"])) {
193
+ requirements.push("runtime_credentials");
194
+ }
195
+ return [...new Set(requirements)];
196
+ }
197
+ function proposeSkillName(request) {
198
+ const terms = extractTerms(request).filter((term) => !["existing", "needs", "patching", "warranted", "missing", "permission"].includes(term));
199
+ if (terms.length < 2)
200
+ return undefined;
201
+ return slugify(terms.slice(0, 3).join("-"));
202
+ }
203
+ function buildNextSteps(route, topMatch, proposedSkillName) {
204
+ switch (route) {
205
+ case "existing_skill_fit":
206
+ return [
207
+ `Load \`${topMatch?.name ?? "the matched skill"}\` with \`ace-skill\` or \`get_skill_instructions\`.`,
208
+ "Execute the existing workflow before creating or patching a new skill.",
209
+ ];
210
+ case "existing_skill_needs_patch":
211
+ return [
212
+ `Patch \`${topMatch?.name ?? "the matched skill"}\` metadata/workflow instead of creating a duplicate.`,
213
+ "Add missing trigger phrases, portable SKILL.md semantics, explicit sections, and validation/canary coverage in the next remediation slice.",
214
+ ];
215
+ case "new_skill_warranted":
216
+ return [
217
+ `Draft a new skill spec${proposedSkillName ? ` with working name \`${proposedSkillName}\`` : ""}.`,
218
+ "Seed it with 2-3 concrete examples, portable semantics, and a validation path before promotion.",
219
+ ];
220
+ case "missing_tool_or_permission":
221
+ return [
222
+ "Resolve the missing permission/tooling/credential dependency before turning this into a reusable skill.",
223
+ "If the workflow still matters after the blocker clears, rerun problem triage with the dependency status included.",
224
+ ];
225
+ case "one_off_task":
226
+ default:
227
+ return [
228
+ "Handle this directly in the current task flow.",
229
+ "Promote it to a skill only if the same workflow repeats with stable inputs/outputs.",
230
+ ];
231
+ }
232
+ }
233
+ function computeConfidence(route, topMatch, secondMatch, missingRequirements) {
234
+ if (missingRequirements.length > 0) {
235
+ return 0.92;
236
+ }
237
+ if (!topMatch || topMatch.score === 0) {
238
+ return route === "one_off_task" ? 0.66 : 0.72;
239
+ }
240
+ let confidence = 0.58 + Math.min(topMatch.score / 30, 0.28);
241
+ if (topMatch.reasons.some((reason) => reason.startsWith("Exact skill name match"))) {
242
+ confidence += 0.12;
243
+ }
244
+ if (secondMatch && topMatch.score - secondMatch.score <= 3) {
245
+ confidence -= 0.1;
246
+ }
247
+ if (route === "existing_skill_needs_patch") {
248
+ confidence += 0.05;
249
+ }
250
+ return clamp(confidence, 0.45, 0.96);
251
+ }
252
+ export function triageProblemRequest(request, entries = listSkillCatalogEntries()) {
253
+ const text = normalizeText(request);
254
+ const missingRequirements = detectMissingRequirements(text);
255
+ const skillMatches = entries
256
+ .map((entry) => scoreSkillMatch(entry, request))
257
+ .filter((entry) => entry.score > 0)
258
+ .sort((a, b) => b.score - a.score)
259
+ .slice(0, 5);
260
+ const topMatch = skillMatches[0];
261
+ const secondMatch = skillMatches[1];
262
+ const catalogSummary = summarizeSkillCatalog(entries);
263
+ const mentionsPatch = includesAny(text, CHANGE_HINTS);
264
+ const mentionsReusableNeed = includesAny(text, REUSABLE_HINTS);
265
+ const looksOneOff = includesAny(text, ONE_OFF_HINTS);
266
+ const mentionsSkillSystem = includesAny(text, [
267
+ "skill",
268
+ "skills",
269
+ "frontmatter",
270
+ "portable",
271
+ "portability",
272
+ "adapter",
273
+ "adapters",
274
+ "overlay",
275
+ "overlays",
276
+ "claude",
277
+ "cursor",
278
+ "codex",
279
+ "antigravity",
280
+ "openai.yaml",
281
+ "openai yaml",
282
+ "trigger",
283
+ "canary",
284
+ "metadata",
285
+ ]);
286
+ let route;
287
+ const rationale = [];
288
+ if (missingRequirements.length > 0) {
289
+ route = "missing_tool_or_permission";
290
+ rationale.push(`Request is blocked by missing prerequisites: ${missingRequirements.join(", ")}.`);
291
+ }
292
+ else if (topMatch && topMatch.score >= 12 && mentionsPatch) {
293
+ route = "existing_skill_needs_patch";
294
+ rationale.push(`Strong overlap with existing skill \`${topMatch.name}\` suggests patching instead of creating a duplicate.`);
295
+ }
296
+ else if (topMatch && topMatch.score >= 12 && !mentionsReusableNeed) {
297
+ route = "existing_skill_fit";
298
+ rationale.push(`Existing skill \`${topMatch.name}\` already covers the request shape.`);
299
+ }
300
+ else if (mentionsReusableNeed ||
301
+ (mentionsSkillSystem && (!topMatch || topMatch.score < 12))) {
302
+ route = "new_skill_warranted";
303
+ rationale.push("Request describes a reusable decision/workflow surface that is not strongly covered by the current catalog.");
304
+ }
305
+ else if (looksOneOff || !mentionsSkillSystem) {
306
+ route = "one_off_task";
307
+ rationale.push("Request looks task-specific rather than reusable across repeated sessions.");
308
+ }
309
+ else {
310
+ route = topMatch ? "existing_skill_fit" : "one_off_task";
311
+ rationale.push("Falling back to the highest-signal route from the current catalog.");
312
+ }
313
+ if (topMatch) {
314
+ rationale.push(`Top skill match: \`${topMatch.name}\` (score=${topMatch.score}, source=${topMatch.source}).`);
315
+ }
316
+ if (route === "existing_skill_needs_patch" && topMatch) {
317
+ const entry = entries.find((candidate) => candidate.name === topMatch.name);
318
+ if (entry) {
319
+ const gaps = [
320
+ !entry.has_inputs_section ? "missing Inputs section" : "",
321
+ !entry.has_workflow_section ? "missing Workflow/Steps section" : "",
322
+ !entry.has_outputs_section ? "missing Outputs/Artifacts section" : "",
323
+ !entry.has_failure_policy ? "missing Failure/Troubleshooting section" : "",
324
+ !entry.has_use_cases_section ? "missing Canonical Use Cases section" : "",
325
+ !entry.has_validation_surface ? "missing Validation/Canary surface" : "",
326
+ entry.line_count > 500 && !entry.has_references_dir
327
+ ? "needs references/ split for progressive disclosure"
328
+ : "",
329
+ includesAny(text, [
330
+ "portable",
331
+ "portability",
332
+ "adapter",
333
+ "adapters",
334
+ "overlay",
335
+ "overlays",
336
+ "claude",
337
+ "cursor",
338
+ "codex",
339
+ "antigravity",
340
+ "openai.yaml",
341
+ "openai yaml",
342
+ ]) && !entry.has_portability_notes
343
+ ? "missing vendor-neutral portability guidance"
344
+ : "",
345
+ entry.has_optional_adapters && !entry.has_portability_notes
346
+ ? "adapter overlays exist without portable parity guidance"
347
+ : "",
348
+ ].filter(Boolean);
349
+ if (gaps.length > 0) {
350
+ rationale.push(`Patch focus areas: ${gaps.join(", ")}.`);
351
+ }
352
+ else {
353
+ const requestedFocusAreas = [
354
+ includesAny(text, ["trigger", "metadata", "frontmatter"])
355
+ ? "trigger metadata/frontmatter"
356
+ : "",
357
+ includesAny(text, ["portable", "portability"])
358
+ ? "portable SKILL.md guidance"
359
+ : "",
360
+ includesAny(text, ["references", "split"])
361
+ ? "references/ cleanup"
362
+ : "",
363
+ includesAny(text, ["validation", "canary"])
364
+ ? "validation/canary coverage"
365
+ : "",
366
+ ].filter(Boolean);
367
+ if (requestedFocusAreas.length > 0) {
368
+ rationale.push(`Patch focus areas: ${requestedFocusAreas.join(", ")}.`);
369
+ }
370
+ }
371
+ }
372
+ }
373
+ if (includesAny(text, ["openai.yaml", "openai yaml", "claude", "cursor", "codex", "antigravity"])) {
374
+ rationale.push("Client-specific adapter files are optional overlays; core skill meaning must remain complete in portable SKILL.md content.");
375
+ }
376
+ if (catalogSummary.portable_contract_ready_skills < catalogSummary.total_skills) {
377
+ rationale.push(`Portable-skill readiness remains incomplete: ${catalogSummary.portable_contract_ready_skills}/${catalogSummary.total_skills} skills currently meet the core portable contract.`);
378
+ }
379
+ const proposedSkillName = route === "new_skill_warranted" ? proposeSkillName(request) : undefined;
380
+ const confidence = computeConfidence(route, topMatch, secondMatch, missingRequirements);
381
+ return {
382
+ request,
383
+ route,
384
+ confidence,
385
+ rationale,
386
+ skill_matches: skillMatches,
387
+ missing_requirements: missingRequirements,
388
+ suggested_next_steps: buildNextSteps(route, topMatch, proposedSkillName),
389
+ proposed_skill_name: proposedSkillName,
390
+ catalog_summary: catalogSummary,
391
+ };
392
+ }
393
+ export function renderProblemTriageReport(result) {
394
+ const lines = [
395
+ "# PROBLEM_TRIAGE",
396
+ "",
397
+ `Generated: ${new Date().toISOString()}`,
398
+ `Route: \`${result.route}\``,
399
+ `Confidence: \`${result.confidence.toFixed(2)}\``,
400
+ "",
401
+ "## Request",
402
+ result.request,
403
+ "",
404
+ "## Rationale",
405
+ ...result.rationale.map((entry) => `- ${entry}`),
406
+ "",
407
+ "## Top Skill Matches",
408
+ ...(result.skill_matches.length > 0
409
+ ? result.skill_matches.map((entry) => `- \`${entry.name}\` (${entry.source}, score=${entry.score}) — ${entry.reasons.join("; ")}`)
410
+ : ["- none"]),
411
+ "",
412
+ "## Catalog Signals",
413
+ `- total skills: \`${result.catalog_summary.total_skills}\``,
414
+ `- portable-contract-ready skills: \`${result.catalog_summary.portable_contract_ready_skills}\``,
415
+ `- skills with frontmatter: \`${result.catalog_summary.with_frontmatter}\``,
416
+ `- trigger-aware descriptions: \`${result.catalog_summary.trigger_aware_descriptions}\``,
417
+ `- skills with validation surface: \`${result.catalog_summary.with_validation_surface}\``,
418
+ `- skills with portability notes: \`${result.catalog_summary.with_portability_notes}\``,
419
+ `- skills with optional adapters: \`${result.catalog_summary.with_adapter_overlays}\``,
420
+ `- adapter clients observed: \`${result.catalog_summary.adapter_clients.length > 0
421
+ ? result.catalog_summary.adapter_clients.join(", ")
422
+ : "none"}\``,
423
+ `- legacy openai overlays observed: \`${result.catalog_summary.with_openai_yaml}\``,
424
+ `- long skills (>500 lines): ${result.catalog_summary.long_skills.length > 0
425
+ ? result.catalog_summary.long_skills
426
+ .map((entry) => `\`${entry.name}\` (${entry.line_count})`)
427
+ .join(", ")
428
+ : "`none`"}`,
429
+ "",
430
+ ];
431
+ if (result.missing_requirements.length > 0) {
432
+ lines.push("## Missing Requirements");
433
+ lines.push(...result.missing_requirements.map((entry) => `- ${entry}`));
434
+ lines.push("");
435
+ }
436
+ if (result.proposed_skill_name) {
437
+ lines.push("## Proposed Skill Name");
438
+ lines.push(`- \`${result.proposed_skill_name}\``);
439
+ lines.push("");
440
+ }
441
+ lines.push("## Next Steps");
442
+ lines.push(...result.suggested_next_steps.map((entry, index) => `${index + 1}. ${entry}`));
443
+ return lines.join("\n");
444
+ }
445
+ export function writeProblemTriageReport(result, targetPath = "agent-state/PROBLEM_TRIAGE.md") {
446
+ return safeWrite(targetPath, renderProblemTriageReport(result));
447
+ }
448
+ //# sourceMappingURL=problem-triage.js.map
@@ -0,0 +1,7 @@
1
+ /**
2
+ * MCP Prompts – pre-built prompt templates for each ACE role,
3
+ * multi-agent workflows, and skill activation.
4
+ */
5
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ export declare function registerPrompts(server: McpServer): void;
7
+ //# sourceMappingURL=prompts.d.ts.map