@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
package/dist/cli.js ADDED
@@ -0,0 +1,591 @@
1
+ #!/usr/bin/env node
2
+ import { ACE_ROOT_REL, ACE_TASKS_ROOT_REL, ALL_MCP_CLIENTS, ALL_LLM_PROVIDERS, DEFAULTS_ROOT, PACKAGE_ROOT, WORKSPACE_ROOT, fileExists, getAllMcpServerConfigSnippets, getMcpClientInstallHint, getMcpServerConfigSnippet, wsPath, } from "./helpers.js";
3
+ import { refreshAstgrepIndex } from "./astgrep-index.js";
4
+ import { scanWorkspaceDelta } from "./index-store.js";
5
+ import { startStdioServer } from "./server.js";
6
+ import { appendRunLedgerEntrySafe } from "./run-ledger.js";
7
+ import { waitForPendingStatusEventMirrors } from "./status-events.js";
8
+ import { bootstrapStoreWorkspace } from "./store/bootstrap-store.js";
9
+ import { openStore } from "./store/ace-packed-store.js";
10
+ import { withStoreWriteQueue } from "./store/write-queue.js";
11
+ import { getWorkspaceStorePath, readStoreBlobSync, readStoreJsonSync, } from "./store/store-snapshot.js";
12
+ import { readFileSync } from "node:fs";
13
+ import { runTui } from "./tui/index.js";
14
+ import { buildOpenAiCompatibleBaseUrl, DEFAULT_LLAMA_CPP_MODEL, DEFAULT_OLLAMA_MODEL, discoverProviderContext, normalizeLocalBaseUrl, scanLocalModelRuntimes, } from "./tui/provider-discovery.js";
15
+ function printHelp() {
16
+ console.log(`ACE Swarm CLI
17
+
18
+ Usage:
19
+ ace mcp Start MCP server over stdio
20
+ ace serve Alias for mcp
21
+ ace tui [options] Launch interactive TUI dashboard
22
+ ace init [options] Bootstrap the ACE store into current workspace
23
+ ace turnkey [options] Project minimal workspace bootstrap stubs from the ACE store
24
+ ace doctor [options] Validate local LLM + MCP readiness
25
+ ace mcp-config [options] Print global/client MCP config snippet(s) from store
26
+ ace paths Show resolved package/workspace paths
27
+ ace help Show help
28
+
29
+ Options for tui:
30
+ --provider <name> Provider override (ollama|llama.cpp|codex|gemini|claude|copilot|...)
31
+ --model <name> Model name override (defaults from profile/settings discovery)
32
+ --base-url <url> Local runtime base URL override
33
+ --ollama-url <url> Legacy alias for --base-url
34
+
35
+ Options for init:
36
+ --project <name> Project name stored in ${ACE_ROOT_REL}/ace-state.zarr metadata
37
+ --force Overwrite scaffolded files if they already exist
38
+ --mcp-config Also write .vscode/mcp.json workspace bridge
39
+ --client-config-bundle Also write minimal workspace host stubs (AGENTS.md, CLAUDE.md, .cursorrules, .github/copilot-instructions.md)
40
+ --llm <provider> ollama|llama.cpp
41
+ --model <name> Model name for local provider
42
+ --base-url <url> Local runtime base URL override
43
+ --ollama-url <url> Legacy alias for --base-url
44
+
45
+ Options for doctor:
46
+ --llm <provider> ollama|llama.cpp (default: auto from ${ACE_ROOT_REL}/ace-state.zarr)
47
+ --model <name> Model name override
48
+ --base-url <url> Local runtime base URL override
49
+ --ollama-url <url> Legacy alias for --base-url
50
+ --scan Probe common local Ollama + llama.cpp endpoints when URL is unset
51
+
52
+ Options for mcp-config:
53
+ --client <name> codex|vscode|claude|cursor|antigravity
54
+ --all Print all client snippets for optional global install
55
+ `);
56
+ }
57
+ function readFlagValue(args, flag) {
58
+ const exact = args.find((arg) => arg.startsWith(`${flag}=`));
59
+ if (exact)
60
+ return exact.slice(flag.length + 1);
61
+ const index = args.indexOf(flag);
62
+ if (index === -1)
63
+ return undefined;
64
+ return args[index + 1];
65
+ }
66
+ function readLlmProfile() {
67
+ const storeProfile = readStoreJsonSync(WORKSPACE_ROOT, "state/runtime/llm_profile") ??
68
+ readStoreJsonSync(WORKSPACE_ROOT, "state/runtime/llm-profile");
69
+ if (storeProfile && typeof storeProfile === "object") {
70
+ return storeProfile;
71
+ }
72
+ const profilePath = wsPath(".ace", "llm-profile.json");
73
+ if (!fileExists(profilePath))
74
+ return undefined;
75
+ try {
76
+ const raw = readFileSync(profilePath, "utf-8");
77
+ const parsed = JSON.parse(raw);
78
+ return parsed && typeof parsed === "object" ? parsed : undefined;
79
+ }
80
+ catch {
81
+ return undefined;
82
+ }
83
+ }
84
+ function readBaseUrlFlag(args) {
85
+ return normalizeLocalBaseUrl(readFlagValue(args, "--base-url") ?? readFlagValue(args, "--ollama-url"));
86
+ }
87
+ function parseLlmOptions(args) {
88
+ const profile = readLlmProfile();
89
+ const selected = readFlagValue(args, "--llm")?.trim().toLowerCase() ?? profile?.provider?.trim().toLowerCase();
90
+ if (!selected)
91
+ return {};
92
+ if (!ALL_LLM_PROVIDERS.includes(selected)) {
93
+ throw new Error(`Unsupported LLM provider: ${selected}`);
94
+ }
95
+ const provider = selected;
96
+ const defaultModel = provider === "llama.cpp" ? DEFAULT_LLAMA_CPP_MODEL : DEFAULT_OLLAMA_MODEL;
97
+ const llmModel = readFlagValue(args, "--model")?.trim() || profile?.model || defaultModel;
98
+ const llmBaseUrl = readBaseUrlFlag(args) ?? normalizeLocalBaseUrl(profile?.base_url);
99
+ return {
100
+ llmProvider: provider,
101
+ llmModel,
102
+ llmBaseUrl,
103
+ };
104
+ }
105
+ async function writeLlmProfile(profile) {
106
+ const storePath = getWorkspaceStorePath(WORKSPACE_ROOT);
107
+ await withStoreWriteQueue(storePath, async () => {
108
+ const payload = {
109
+ provider: profile.provider,
110
+ model: profile.model,
111
+ generated_at: new Date().toISOString(),
112
+ };
113
+ if (profile.baseUrl) {
114
+ payload.base_url = profile.baseUrl;
115
+ if (profile.provider === "ollama") {
116
+ payload.api_compat_base_url = buildOpenAiCompatibleBaseUrl(profile.baseUrl);
117
+ payload.default_api_key = "ollama";
118
+ }
119
+ }
120
+ const doctorCommands = profile.provider === "ollama"
121
+ ? [
122
+ "ollama serve",
123
+ `ollama pull ${profile.model}`,
124
+ ...(profile.baseUrl ? [`curl -s ${profile.baseUrl}/api/tags`] : []),
125
+ ]
126
+ : [
127
+ "# Start llama-server separately, for example:",
128
+ "# llama-server -m /path/to/model.gguf --port 8080",
129
+ ...(profile.baseUrl ? [`curl -s ${buildOpenAiCompatibleBaseUrl(profile.baseUrl)}/models`] : []),
130
+ ];
131
+ const store = await openStore(storePath);
132
+ try {
133
+ await store.setJSON("state/runtime/llm_profile", payload);
134
+ await store.setBlob("state/runtime/doctor_checks.md", [
135
+ `# ACE + ${profile.provider} Doctor Checks`,
136
+ "",
137
+ "Run these commands to verify local-model readiness:",
138
+ "",
139
+ "```bash",
140
+ ...doctorCommands,
141
+ profile.baseUrl
142
+ ? `ace doctor --llm ${profile.provider} --model ${profile.model} --base-url ${profile.baseUrl}`
143
+ : `ace doctor --llm ${profile.provider} --model ${profile.model} --scan`,
144
+ "```",
145
+ "",
146
+ ].join("\n"));
147
+ await store.commit();
148
+ }
149
+ finally {
150
+ await store.close();
151
+ }
152
+ });
153
+ return `${storePath}#state/runtime/llm_profile`;
154
+ }
155
+ async function runInit(args, mode = "init") {
156
+ const projectName = readFlagValue(args, "--project");
157
+ const force = args.includes("--force");
158
+ const includeMcpConfig = args.includes("--mcp-config");
159
+ const includeClientConfigBundle = mode === "turnkey"
160
+ ? !args.includes("--no-client-config-bundle")
161
+ : args.includes("--client-config-bundle");
162
+ const llm = parseLlmOptions(args);
163
+ // Store-first bootstrap — init stays minimal, turnkey adds host-facing shims.
164
+ const storeResult = await bootstrapStoreWorkspace({
165
+ workspaceRoot: WORKSPACE_ROOT,
166
+ projectName: projectName ?? undefined,
167
+ force,
168
+ includeMcpConfig,
169
+ includeClientConfigBundle,
170
+ llm: llm.llmProvider ?? undefined,
171
+ model: llm.llmModel ?? undefined,
172
+ ollamaUrl: llm.llmBaseUrl ?? undefined,
173
+ });
174
+ const astIndex = refreshAstgrepIndex({
175
+ scope: ".",
176
+ append_evidence: true,
177
+ emit_event: true,
178
+ include_rep_corpus: true,
179
+ });
180
+ const delta = scanWorkspaceDelta({
181
+ path: ".",
182
+ depth: 8,
183
+ max_files: 25000,
184
+ include_hidden: false,
185
+ exclude: [".git", "node_modules", "dist", "target", ".venv", "__pycache__", ".DS_Store"],
186
+ file_entry_cap: 0,
187
+ });
188
+ if (storeResult.warnings.length) {
189
+ for (const w of storeResult.warnings)
190
+ console.warn(` [store] ${w}`);
191
+ }
192
+ console.log("ACE bootstrap complete");
193
+ console.log(`Workspace: ${WORKSPACE_ROOT}`);
194
+ console.log(`Store: ${storeResult.storePath}`);
195
+ console.log(`Agents baked: ${storeResult.agents}`);
196
+ console.log(`Materialized files: ${storeResult.materialized.length}`);
197
+ console.log(`Indexed files: ${delta.snapshot.file_count}`);
198
+ console.log(`Stored index entries: ${delta.snapshot.stored_file_count}`);
199
+ console.log(`Index entry cap: ${delta.snapshot.options.file_entry_cap}`);
200
+ console.log(`Index path: ${delta.index_path}`);
201
+ console.log(`Fingerprint path: ${delta.fingerprint_path}`);
202
+ console.log(`AST index path: ${astIndex.output_json_path}`);
203
+ console.log(`AST index generated: ${astIndex.generated_at}`);
204
+ if (llm.llmProvider) {
205
+ console.log(`LLM provider: ${llm.llmProvider}`);
206
+ console.log(`Model: ${llm.llmModel}`);
207
+ console.log(`Base URL: ${llm.llmBaseUrl ?? "(not set; run ace doctor --scan or pass --base-url)"}`);
208
+ console.log(`LLM profile path: ${storeResult.storePath}#state/runtime/llm_profile`);
209
+ }
210
+ if (storeResult.materialized.length > 0) {
211
+ console.log("\nMaterialized files:");
212
+ for (const path of storeResult.materialized)
213
+ console.log(`- ${path}`);
214
+ }
215
+ // refreshAstgrepIndex() emits a status event via a background store mirror.
216
+ // Drain that queue before appending the init run-ledger entry so init/turnkey
217
+ // never race two packed-store writers in the same process.
218
+ await waitForPendingStatusEventMirrors();
219
+ // Record CLI execution in run-ledger for observability
220
+ try {
221
+ await appendRunLedgerEntrySafe({
222
+ tool: "cli:init",
223
+ category: "major_update",
224
+ message: `ace ${mode} completed: ${storeResult.materialized.length} bootstrap files materialized`,
225
+ artifacts: [
226
+ `${ACE_TASKS_ROOT_REL}/`,
227
+ `${ACE_ROOT_REL}/ace-state.zarr`,
228
+ delta.index_path,
229
+ astIndex.output_json_path,
230
+ ],
231
+ metadata: {
232
+ materialized_count: storeResult.materialized.length,
233
+ indexed_files: delta.snapshot.file_count,
234
+ force,
235
+ mode,
236
+ llm_provider: llm.llmProvider ?? null,
237
+ llm_model: llm.llmModel ?? null,
238
+ llm_base_url: llm.llmBaseUrl ?? null,
239
+ },
240
+ });
241
+ }
242
+ catch {
243
+ // Run-ledger write may fail on first bootstrap before dirs exist
244
+ }
245
+ await waitForPendingStatusEventMirrors();
246
+ }
247
+ function getStoredMcpConfigKey(client) {
248
+ if (client === "codex")
249
+ return "knowledge/host/.mcp-config/codex.config.toml";
250
+ if (client === "vscode")
251
+ return "knowledge/host/.vscode/mcp.json";
252
+ if (client === "claude")
253
+ return "knowledge/host/.mcp-config/claude_desktop_config.json";
254
+ if (client === "cursor")
255
+ return "knowledge/host/.mcp-config/cursor.mcp.json";
256
+ return "knowledge/host/.mcp-config/antigravity.mcp.json";
257
+ }
258
+ function readStoredMcpSnippet(client) {
259
+ return readStoreBlobSync(WORKSPACE_ROOT, getStoredMcpConfigKey(client));
260
+ }
261
+ async function listLocalRuntimeModels(provider, baseUrl) {
262
+ if (provider === "ollama") {
263
+ const response = await fetch(`${baseUrl}/api/tags`, {
264
+ method: "GET",
265
+ headers: { Accept: "application/json" },
266
+ });
267
+ if (!response.ok) {
268
+ throw new Error(`${response.status} ${response.statusText}`);
269
+ }
270
+ const payload = (await response.json().catch(() => ({})));
271
+ return Array.isArray(payload.models)
272
+ ? payload.models
273
+ .map((item) => item?.name?.trim())
274
+ .filter((name) => Boolean(name))
275
+ : [];
276
+ }
277
+ const response = await fetch(`${buildOpenAiCompatibleBaseUrl(baseUrl)}/models`, {
278
+ method: "GET",
279
+ headers: { Accept: "application/json" },
280
+ });
281
+ if (!response.ok) {
282
+ throw new Error(`${response.status} ${response.statusText}`);
283
+ }
284
+ const payload = (await response.json().catch(() => ({})));
285
+ return Array.isArray(payload.data)
286
+ ? payload.data
287
+ .map((item) => item?.id?.trim())
288
+ .filter((name) => Boolean(name))
289
+ : [];
290
+ }
291
+ async function runDoctor(args) {
292
+ const llm = parseLlmOptions(args);
293
+ const checks = [];
294
+ const shouldScan = args.includes("--scan") || !llm.llmBaseUrl;
295
+ const mcpConfigPaths = [wsPath(".vscode", "mcp.json")];
296
+ const hasWorkspaceMcpConfig = mcpConfigPaths.some((path) => fileExists(path));
297
+ const hasStoredMcpConfig = ALL_MCP_CLIENTS.some((client) => typeof readStoredMcpSnippet(client) === "string");
298
+ const hasMcpConfig = hasWorkspaceMcpConfig || hasStoredMcpConfig;
299
+ checks.push({
300
+ name: "MCP config present",
301
+ ok: hasMcpConfig,
302
+ detail: hasMcpConfig
303
+ ? hasWorkspaceMcpConfig
304
+ ? "Found one or more workspace MCP bridge files."
305
+ : "Store-backed MCP snippets are baked into ace-state.zarr. Run `ace mcp-config --all` for global install."
306
+ : "No MCP bridge or baked snippets found. Run `ace init` first.",
307
+ });
308
+ const profilePath = `${getWorkspaceStorePath(WORKSPACE_ROOT)}#state/runtime/llm_profile`;
309
+ const hasProfile = Boolean(readLlmProfile());
310
+ checks.push({
311
+ name: "LLM profile present",
312
+ ok: hasProfile,
313
+ detail: hasProfile
314
+ ? profilePath
315
+ : `Missing ${ACE_ROOT_REL}/ace-state.zarr#state/runtime/llm_profile. Run \`ace init --llm ollama\` or \`ace doctor --scan\`.`,
316
+ });
317
+ let provider = llm.llmProvider;
318
+ let model = llm.llmModel;
319
+ let baseUrl = llm.llmBaseUrl;
320
+ if (shouldScan) {
321
+ const scanned = await scanLocalModelRuntimes({
322
+ workspaceRoot: WORKSPACE_ROOT,
323
+ preferredProvider: provider,
324
+ explicitBaseUrl: baseUrl,
325
+ });
326
+ const chosen = scanned.candidates.find((candidate) => !provider || candidate.provider === provider) ??
327
+ scanned.candidates[0];
328
+ if (chosen) {
329
+ provider = chosen.provider ?? provider;
330
+ baseUrl = baseUrl ?? chosen.baseUrl;
331
+ model = model || chosen.models[0] || (provider === "llama.cpp" ? DEFAULT_LLAMA_CPP_MODEL : DEFAULT_OLLAMA_MODEL);
332
+ checks.push({
333
+ name: "Runtime endpoint discovered",
334
+ ok: true,
335
+ detail: `Picked ${chosen.provider} at ${chosen.baseUrl} (${chosen.source})`,
336
+ });
337
+ const writtenProfilePath = await writeLlmProfile({
338
+ provider: provider ?? chosen.provider,
339
+ model: model ?? (provider === "llama.cpp" ? DEFAULT_LLAMA_CPP_MODEL : DEFAULT_OLLAMA_MODEL),
340
+ baseUrl,
341
+ });
342
+ checks.push({
343
+ name: "LLM profile refreshed",
344
+ ok: true,
345
+ detail: `Updated ${writtenProfilePath} from discovered runtime settings.`,
346
+ });
347
+ }
348
+ else {
349
+ checks.push({
350
+ name: "Runtime endpoint discovered",
351
+ ok: false,
352
+ detail: "No reachable local Ollama or llama.cpp runtime was found. Provide --base-url or start one before rerunning doctor.",
353
+ });
354
+ }
355
+ }
356
+ if (!provider) {
357
+ throw new Error(`No local runtime provider configured. Use --llm <provider>, bootstrap one into ${ACE_ROOT_REL}/ace-state.zarr#state/runtime/llm_profile, or run \`ace doctor --scan\`.`);
358
+ }
359
+ if (!model) {
360
+ model = provider === "llama.cpp" ? DEFAULT_LLAMA_CPP_MODEL : DEFAULT_OLLAMA_MODEL;
361
+ }
362
+ if (!baseUrl) {
363
+ checks.push({
364
+ name: "Base URL configured",
365
+ ok: false,
366
+ detail: "No local runtime base URL is configured. Pass --base-url or run `ace doctor --scan` to discover one.",
367
+ });
368
+ const failed = checks.filter((check) => !check.ok);
369
+ console.log("ACE Doctor Report (local runtime)");
370
+ console.log(`Workspace: ${WORKSPACE_ROOT}`);
371
+ console.log(`Provider: ${provider}`);
372
+ console.log(`Model: ${model}`);
373
+ console.log(`Base URL: (not set)`);
374
+ console.log("");
375
+ for (const check of checks) {
376
+ const status = check.ok ? "PASS" : "FAIL";
377
+ console.log(`- [${status}] ${check.name}: ${check.detail}`);
378
+ }
379
+ if (failed.length > 0) {
380
+ process.exitCode = 1;
381
+ }
382
+ return;
383
+ }
384
+ let modelNames = [];
385
+ try {
386
+ modelNames = await listLocalRuntimeModels(provider, baseUrl);
387
+ checks.push({
388
+ name: "Runtime endpoint reachable",
389
+ ok: true,
390
+ detail: provider === "ollama"
391
+ ? `${baseUrl}/api/tags responded with ${modelNames.length} models`
392
+ : `${buildOpenAiCompatibleBaseUrl(baseUrl)}/models responded with ${modelNames.length} models`,
393
+ });
394
+ }
395
+ catch (error) {
396
+ checks.push({
397
+ name: "Runtime endpoint reachable",
398
+ ok: false,
399
+ detail: `${baseUrl} request failed: ${error instanceof Error ? error.message : String(error)}`,
400
+ });
401
+ }
402
+ const hasModel = modelNames.includes(model);
403
+ checks.push({
404
+ name: provider === "ollama" ? "Requested model installed" : "Requested model served",
405
+ ok: hasModel,
406
+ detail: provider === "ollama"
407
+ ? hasModel
408
+ ? `${model} found`
409
+ : `${model} missing (run: ollama pull ${model})`
410
+ : hasModel
411
+ ? `${model} found`
412
+ : `${model} not reported by llama.cpp (available: ${modelNames.join(", ") || "none"})`,
413
+ });
414
+ const failed = checks.filter((check) => !check.ok);
415
+ console.log("ACE Doctor Report (local runtime)");
416
+ console.log(`Workspace: ${WORKSPACE_ROOT}`);
417
+ console.log(`Provider: ${provider}`);
418
+ console.log(`Model: ${model}`);
419
+ console.log(`Base URL: ${baseUrl}`);
420
+ console.log("");
421
+ for (const check of checks) {
422
+ const status = check.ok ? "PASS" : "FAIL";
423
+ console.log(`- [${status}] ${check.name}: ${check.detail}`);
424
+ }
425
+ if (failed.length > 0) {
426
+ process.exitCode = 1;
427
+ }
428
+ }
429
+ function parseClientFlag(args) {
430
+ const client = readFlagValue(args, "--client");
431
+ if (!client)
432
+ return undefined;
433
+ const normalized = client.trim().toLowerCase();
434
+ const match = ALL_MCP_CLIENTS.find((candidate) => candidate === normalized);
435
+ if (!match) {
436
+ throw new Error(`Unsupported MCP client: ${client}`);
437
+ }
438
+ return match;
439
+ }
440
+ async function runMcpConfig(args) {
441
+ const all = args.includes("--all");
442
+ const explicitClient = parseClientFlag(args);
443
+ if (all) {
444
+ for (const client of ALL_MCP_CLIENTS) {
445
+ const body = readStoredMcpSnippet(client) ?? getAllMcpServerConfigSnippets()[client];
446
+ const fence = client === "codex" ? "toml" : "json";
447
+ console.log(`# ${client}`);
448
+ console.log(`\`\`\`${fence}`);
449
+ console.log(body);
450
+ console.log("```");
451
+ console.log(`Install hint: ${getMcpClientInstallHint(client)}`);
452
+ console.log("");
453
+ }
454
+ return;
455
+ }
456
+ const client = explicitClient ?? "vscode";
457
+ const body = readStoredMcpSnippet(client) ?? getMcpServerConfigSnippet(client);
458
+ console.log(body);
459
+ }
460
+ async function main() {
461
+ const args = process.argv.slice(2);
462
+ const command = (args[0] ?? "mcp").toLowerCase();
463
+ if (command === "mcp" || command === "serve") {
464
+ await startStdioServer();
465
+ return;
466
+ }
467
+ if (command === "tui") {
468
+ const tuiArgs = args.slice(1);
469
+ const cliProvider = readFlagValue(tuiArgs, "--provider")?.trim() ||
470
+ readFlagValue(tuiArgs, "--llm")?.trim();
471
+ const cliModel = readFlagValue(tuiArgs, "--model")?.trim();
472
+ const cliBaseUrl = readBaseUrlFlag(tuiArgs);
473
+ const discovered = discoverProviderContext({
474
+ workspaceRoot: WORKSPACE_ROOT,
475
+ cliProvider,
476
+ cliModel,
477
+ cliBaseUrl,
478
+ });
479
+ await runTui({
480
+ provider: discovered.provider,
481
+ model: discovered.model,
482
+ providers: discovered.providers,
483
+ modelsByProvider: discovered.modelsByProvider,
484
+ baseUrl: discovered.baseUrl,
485
+ ollamaUrl: discovered.ollamaUrl,
486
+ providerBaseUrls: discovered.providerBaseUrls,
487
+ workspaceRoot: WORKSPACE_ROOT,
488
+ });
489
+ return;
490
+ }
491
+ if (command === "init") {
492
+ await runInit(args.slice(1), "init");
493
+ return;
494
+ }
495
+ if (command === "turnkey") {
496
+ await runInit(args.slice(1), "turnkey");
497
+ return;
498
+ }
499
+ if (command === "doctor") {
500
+ await runDoctor(args.slice(1));
501
+ return;
502
+ }
503
+ if (command === "mcp-config") {
504
+ await runMcpConfig(args.slice(1));
505
+ return;
506
+ }
507
+ if (command === "paths") {
508
+ console.log(`PACKAGE_ROOT=${PACKAGE_ROOT}`);
509
+ console.log(`DEFAULTS_ROOT=${DEFAULTS_ROOT}`);
510
+ console.log(`WORKSPACE_ROOT=${WORKSPACE_ROOT}`);
511
+ return;
512
+ }
513
+ if (command === "add") {
514
+ const subcommand = args[1]?.toLowerCase();
515
+ if (subcommand === "skills") {
516
+ const { installSkillPack, installAllSkills, listAvailableSkillPacks } = await import("./store/skills-install.js");
517
+ const skillName = args[2];
518
+ if (!skillName || skillName === "all") {
519
+ const packs = await listAvailableSkillPacks(WORKSPACE_ROOT);
520
+ if (!packs.available.length) {
521
+ console.log("No skill packs available in assets/.");
522
+ return;
523
+ }
524
+ console.log(`Installing all ${packs.available.length} available skill packs...`);
525
+ const results = await installAllSkills(WORKSPACE_ROOT);
526
+ for (const r of results) {
527
+ console.log(` ✓ ${r.skill} (${r.files} files${r.compacted ? ", compacted" : ""})`);
528
+ }
529
+ }
530
+ else {
531
+ console.log(`Installing skill pack: ${skillName}`);
532
+ const result = await installSkillPack(WORKSPACE_ROOT, skillName);
533
+ console.log(` ✓ ${result.skill} (${result.files} files${result.compacted ? ", compacted" : ""})`);
534
+ }
535
+ return;
536
+ }
537
+ console.error(`Unknown subcommand: ace add ${subcommand ?? "(missing)"}`);
538
+ console.error("Usage: ace add skills [skill-name|all]");
539
+ process.exit(1);
540
+ }
541
+ if (command === "migrate") {
542
+ const { importFromFileWorkspace } = await import("./store/importer.js");
543
+ const storePath = args[1] ?? `${WORKSPACE_ROOT}/.agents/ACE/ace-state.zarr`;
544
+ console.log(`Migrating file workspace at ${WORKSPACE_ROOT} to store at ${storePath}...`);
545
+ const result = await importFromFileWorkspace(WORKSPACE_ROOT, storePath);
546
+ console.log(`Migration complete:`);
547
+ console.log(` handoffs: ${result.handoffs}`);
548
+ console.log(` todos: ${result.todos}`);
549
+ console.log(` ledger events: ${result.ledger_events}`);
550
+ console.log(` status events: ${result.status_events}`);
551
+ console.log(` vericify posts: ${result.vericify_posts}`);
552
+ if (result.warnings.length) {
553
+ console.warn(`Warnings (${result.warnings.length}):`);
554
+ for (const w of result.warnings)
555
+ console.warn(` ! ${w}`);
556
+ }
557
+ return;
558
+ }
559
+ if (command === "repair") {
560
+ const { repairWorkspace } = await import("./store/bootstrap-store.js");
561
+ console.log(`Repairing workspace at ${WORKSPACE_ROOT}...`);
562
+ const warnings = await repairWorkspace(WORKSPACE_ROOT);
563
+ if (warnings.length) {
564
+ for (const w of warnings)
565
+ console.warn(` ! ${w}`);
566
+ }
567
+ else {
568
+ console.log(" ✓ All host files re-materialized.");
569
+ }
570
+ return;
571
+ }
572
+ if (command === "compact") {
573
+ const { compactWorkspace } = await import("./store/bootstrap-store.js");
574
+ const result = await compactWorkspace(WORKSPACE_ROOT);
575
+ const savedKb = Math.round((result.before - result.after) / 1024);
576
+ console.log(`Store compacted: ${result.before} → ${result.after} bytes (saved ${savedKb}KB)`);
577
+ return;
578
+ }
579
+ if (command === "help" || command === "--help" || command === "-h") {
580
+ printHelp();
581
+ return;
582
+ }
583
+ console.error(`Unknown command: ${command}`);
584
+ printHelp();
585
+ process.exit(1);
586
+ }
587
+ main().catch((err) => {
588
+ console.error("Fatal error:", err);
589
+ process.exit(1);
590
+ });
591
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Git operations module – wraps git CLI for rollback, audit trail,
3
+ * and workspace state management.
4
+ */
5
+ export interface GitStatusResult {
6
+ ok: boolean;
7
+ is_repo: boolean;
8
+ clean: boolean;
9
+ staged: string[];
10
+ unstaged: string[];
11
+ untracked: string[];
12
+ branch: string;
13
+ output: string;
14
+ error?: string;
15
+ }
16
+ export interface GitCommitResult {
17
+ ok: boolean;
18
+ hash?: string;
19
+ message: string;
20
+ files_committed: number;
21
+ output: string;
22
+ error?: string;
23
+ }
24
+ export interface GitDiffResult {
25
+ ok: boolean;
26
+ diff: string;
27
+ files_changed: number;
28
+ insertions: number;
29
+ deletions: number;
30
+ stat: string;
31
+ error?: string;
32
+ }
33
+ export interface GitLogEntry {
34
+ hash: string;
35
+ date: string;
36
+ message: string;
37
+ }
38
+ export interface GitLogResult {
39
+ ok: boolean;
40
+ entries: GitLogEntry[];
41
+ error?: string;
42
+ }
43
+ export declare function isGitRepo(): boolean;
44
+ export declare function gitStatus(): GitStatusResult;
45
+ export declare function gitCommit(message: string, paths?: string[]): GitCommitResult;
46
+ export declare function gitDiff(path?: string, staged?: boolean): GitDiffResult;
47
+ export declare function gitLog(limit?: number): GitLogResult;
48
+ export declare function gitInitIfNeeded(): {
49
+ ok: boolean;
50
+ initialized: boolean;
51
+ error?: string;
52
+ };
53
+ //# sourceMappingURL=git-ops.d.ts.map