@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,239 @@
1
+ /**
2
+ * VericifyProjector
3
+ *
4
+ * Writes 5 Vericify-facing files from store state on every relevant mutation.
5
+ * These are MIRRORS only — the store is source of truth.
6
+ *
7
+ * All files live under .agents/ACE/ (the canonical ACE namespace as defined
8
+ * by ACE_ROOT_REL in helpers.ts and remapped via ACE_MANAGED_PREFIXES).
9
+ *
10
+ * Files projected:
11
+ * .agents/ACE/agent-state/handoff-registry.json
12
+ * .agents/ACE/agent-state/todo-state.json ← schema: { version, updated_at, order[], nodes{} }
13
+ * .agents/ACE/agent-state/run-ledger.json ← schema: { version, updated_at, entries[] }
14
+ * .agents/ACE/agent-state/STATUS_EVENTS.ndjson ← schema: StatusEventRecord per line
15
+ * .agents/ACE/agent-state/vericify/process-posts.json
16
+ */
17
+ import { createHash, randomUUID } from "crypto";
18
+ import { HandoffRepository } from "../repositories/handoff-repository.js";
19
+ import { TodoRepository } from "../repositories/todo-repository.js";
20
+ import { LedgerRepository } from "../repositories/ledger-repository.js";
21
+ import { TrackerRepository } from "../repositories/tracker-repository.js";
22
+ import { VericifyRepository } from "../repositories/vericify-repository.js";
23
+ import { operationalArtifactKey } from "../store-artifacts.js";
24
+ // Canonical ACE state root — mirrors helpers.ts ACE_ROOT_REL + ACE_MANAGED_PREFIXES remapping
25
+ const ACE_ROOT = ".agents/ACE";
26
+ const ACE_STATE_ROOT = `${ACE_ROOT}/agent-state`;
27
+ const CHECKSUMS_KEY = "host/materializations/checksums";
28
+ function sha256(content) {
29
+ return createHash("sha256").update(content, "utf8").digest("hex");
30
+ }
31
+ export class VericifyProjector {
32
+ store;
33
+ workspaceRoot;
34
+ handoffs;
35
+ todos;
36
+ ledger;
37
+ tracker;
38
+ vericify;
39
+ constructor(store, workspaceRoot) {
40
+ this.store = store;
41
+ this.workspaceRoot = workspaceRoot;
42
+ this.handoffs = new HandoffRepository(store);
43
+ this.todos = new TodoRepository(store);
44
+ this.ledger = new LedgerRepository(store);
45
+ this.tracker = new TrackerRepository(store);
46
+ this.vericify = new VericifyRepository(store);
47
+ }
48
+ operationalRel(relPath) {
49
+ return `agent-state/${relPath}`;
50
+ }
51
+ async projectAll() {
52
+ await this.projectHandoffs();
53
+ await this.projectTodos();
54
+ await this.projectLedger();
55
+ await this.projectStatusEvents();
56
+ await this.projectVericifyPosts();
57
+ }
58
+ async projectHandoffs() {
59
+ const records = await this.handoffs.list();
60
+ // Schema expected by vericify-bridge: { handoffs: Record<string, HandoffRecord>, updated_at }
61
+ const handoffMap = {};
62
+ for (const r of records) {
63
+ const metadata = r.metadata && typeof r.metadata === "object" && !Array.isArray(r.metadata)
64
+ ? r.metadata
65
+ : {};
66
+ const legacyStatus = mapHandoffStatus(r.status, metadata);
67
+ handoffMap[r.id] = {
68
+ handoff_id: r.id,
69
+ created_at: new Date(r.created_at).toISOString(),
70
+ updated_at: new Date(r.updated_at).toISOString(),
71
+ from: r.from_agent,
72
+ to: r.to_agent,
73
+ title: typeof metadata.title === "string" ? metadata.title : r.summary,
74
+ task_type: typeof metadata.task_type === "string" ? metadata.task_type : r.task,
75
+ priority: typeof metadata.priority === "string" ? metadata.priority : undefined,
76
+ source_file: typeof metadata.source_file === "string" ? metadata.source_file : undefined,
77
+ status: legacyStatus,
78
+ history: Array.isArray(metadata.history) ? metadata.history : [],
79
+ };
80
+ }
81
+ const content = JSON.stringify({ version: 1, updated_at: new Date().toISOString(), handoffs: handoffMap }, null, 2);
82
+ await this._write("handoff-registry.json", content);
83
+ }
84
+ async projectTodos() {
85
+ const todos = await this.todos.getAll();
86
+ // Schema expected by consumers (todo-state.ts TodoStateFile):
87
+ // { version: 1, updated_at, source_todo_path, order: string[], nodes: Record<string, TodoNode> }
88
+ const order = [];
89
+ const nodes = {};
90
+ for (const t of todos) {
91
+ order.push(t.id);
92
+ nodes[t.id] = {
93
+ id: t.id,
94
+ title: t.title,
95
+ section: "",
96
+ source_line: 0,
97
+ depends_on: t.depends_on ?? [],
98
+ status: mapStatus(t.status),
99
+ };
100
+ }
101
+ const content = JSON.stringify({
102
+ version: 1,
103
+ updated_at: new Date().toISOString(),
104
+ source_todo_path: `${ACE_ROOT}/tasks/todo.md`,
105
+ order,
106
+ nodes,
107
+ }, null, 2);
108
+ await this._write("todo-state.json", content);
109
+ }
110
+ async projectLedger() {
111
+ const events = await this.ledger.list();
112
+ // Schema expected by consumers (run-ledger.ts RunLedgerFile):
113
+ // { version: 1, updated_at, entries: RunLedgerEntry[] }
114
+ const entries = events.map((e) => ({
115
+ id: e.id,
116
+ timestamp_utc: new Date(e.ts).toISOString(),
117
+ tool: "store",
118
+ category: mapLedgerCategory(e.kind),
119
+ message: e.summary,
120
+ artifacts: e.artifact ? [e.artifact] : [],
121
+ metadata: e.metadata ?? {},
122
+ }));
123
+ const content = JSON.stringify({ version: 1, updated_at: new Date().toISOString(), entries }, null, 2);
124
+ await this._write("run-ledger.json", content);
125
+ }
126
+ async projectStatusEvents() {
127
+ const events = await this.tracker.list();
128
+ // Canonical schema (status-events.ts StatusEventRecord):
129
+ // { schema_version, event_id, trace_id, timestamp, source_module,
130
+ // event_type, status, objective_id?, decision_id?, payload }
131
+ const lines = events.map((e) => JSON.stringify({
132
+ schema_version: "1.0.0",
133
+ event_id: e.id ?? randomUUID(),
134
+ trace_id: e.metadata?.trace_id ?? randomUUID(),
135
+ timestamp: new Date(e.ts).toISOString(),
136
+ source_module: e.agent ?? "store/tracker",
137
+ event_type: e.kind,
138
+ status: e.metadata?.status ?? "done",
139
+ objective_id: e.metadata?.objective_id,
140
+ decision_id: e.metadata?.decision_id,
141
+ payload: {
142
+ summary: e.summary,
143
+ ...(e.metadata ?? {}),
144
+ },
145
+ }));
146
+ const ndjson = lines.join("\n") + (lines.length ? "\n" : "");
147
+ await this._write("STATUS_EVENTS.ndjson", ndjson);
148
+ }
149
+ async projectVericifyPosts() {
150
+ const posts = await this.vericify.list();
151
+ const content = JSON.stringify({
152
+ version: 1,
153
+ updated_at: new Date().toISOString(),
154
+ posts: posts.map((post) => ({
155
+ process_post_id: post.id,
156
+ run_id: post.run_id,
157
+ agent_id: post.agent_id,
158
+ kind: post.kind,
159
+ summary: post.summary,
160
+ timestamp: new Date(post.ts).toISOString(),
161
+ branch_id: typeof post.metadata?.branch_id === "string" ? post.metadata.branch_id : undefined,
162
+ lane_id: typeof post.metadata?.lane_id === "string" ? post.metadata.lane_id : undefined,
163
+ checkpoint_ref: typeof post.metadata?.checkpoint_ref === "string"
164
+ ? post.metadata.checkpoint_ref
165
+ : undefined,
166
+ tool_refs: Array.isArray(post.metadata?.tool_refs)
167
+ ? post.metadata.tool_refs.filter((value) => typeof value === "string")
168
+ : [],
169
+ evidence_refs: Array.isArray(post.metadata?.evidence_refs)
170
+ ? post.metadata.evidence_refs.filter((value) => typeof value === "string")
171
+ : [],
172
+ })),
173
+ }, null, 2);
174
+ await this._write("vericify/process-posts.json", content);
175
+ }
176
+ async _write(relPath, content) {
177
+ await this.store.setBlob(operationalArtifactKey(this.operationalRel(relPath)), content);
178
+ await this._trackChecksum(relPath, content);
179
+ }
180
+ async _trackChecksum(relPath, content) {
181
+ const checksums = (await this.store.getJSON(CHECKSUMS_KEY)) ?? {};
182
+ checksums[relPath] = { path: relPath, hash: sha256(content), written_at: Date.now() };
183
+ await this.store.setJSON(CHECKSUMS_KEY, checksums);
184
+ }
185
+ async checkExternalModification(relPath, currentContent) {
186
+ const checksums = (await this.store.getJSON(CHECKSUMS_KEY)) ?? {};
187
+ const stored = checksums[relPath];
188
+ if (!stored)
189
+ return false;
190
+ return stored.hash !== sha256(currentContent);
191
+ }
192
+ }
193
+ function mapStatus(storeStatus) {
194
+ switch (storeStatus) {
195
+ case "pending":
196
+ return "backlog";
197
+ case "in_progress":
198
+ return "in_progress";
199
+ case "blocked":
200
+ return "blocked";
201
+ case "done":
202
+ return "done";
203
+ case "cancelled":
204
+ return "done"; // closest legacy equivalent
205
+ default:
206
+ return "backlog";
207
+ }
208
+ }
209
+ function mapLedgerCategory(kind) {
210
+ switch (kind) {
211
+ case "regression":
212
+ return "regression";
213
+ case "milestone":
214
+ case "update":
215
+ return "major_update";
216
+ default:
217
+ return "info";
218
+ }
219
+ }
220
+ function mapHandoffStatus(status, metadata) {
221
+ if (metadata.legacy_status === "open" ||
222
+ metadata.legacy_status === "accepted" ||
223
+ metadata.legacy_status === "blocked" ||
224
+ metadata.legacy_status === "completed") {
225
+ return metadata.legacy_status;
226
+ }
227
+ switch (status) {
228
+ case "acked":
229
+ case "active":
230
+ return "accepted";
231
+ case "blocked":
232
+ return "blocked";
233
+ case "closed":
234
+ return "completed";
235
+ default:
236
+ return "open";
237
+ }
238
+ }
239
+ //# sourceMappingURL=vericify-projector.js.map
@@ -0,0 +1,24 @@
1
+ /**
2
+ * DiscoveryRepository — state/discovery/
3
+ * Stores provider discovery results (ollama, llama.cpp, codex, claude, etc.)
4
+ */
5
+ import { AcePackedStore } from "../ace-packed-store.js";
6
+ export interface DiscoveryResult {
7
+ provider: string;
8
+ available: boolean;
9
+ endpoint?: string;
10
+ models?: string[];
11
+ detected_at: number;
12
+ metadata?: Record<string, unknown>;
13
+ }
14
+ export declare class DiscoveryRepository {
15
+ private store;
16
+ constructor(store: AcePackedStore);
17
+ private key;
18
+ record(result: Omit<DiscoveryResult, "detected_at">): Promise<DiscoveryResult>;
19
+ get(provider: string): Promise<DiscoveryResult | undefined>;
20
+ listAvailable(): Promise<DiscoveryResult[]>;
21
+ listAll(): Promise<DiscoveryResult[]>;
22
+ private _addToIndex;
23
+ }
24
+ //# sourceMappingURL=discovery-repository.d.ts.map
@@ -0,0 +1,58 @@
1
+ /**
2
+ * DiscoveryRepository — state/discovery/
3
+ * Stores provider discovery results (ollama, llama.cpp, codex, claude, etc.)
4
+ */
5
+ import { ContentSource, EntityKind } from "../types.js";
6
+ const INDEX_KEY = "state/discovery/index";
7
+ export class DiscoveryRepository {
8
+ store;
9
+ constructor(store) {
10
+ this.store = store;
11
+ }
12
+ key(provider) {
13
+ return `state/discovery/${provider}`;
14
+ }
15
+ async record(result) {
16
+ const record = { ...result, detected_at: Date.now() };
17
+ await this.store.setJSON(this.key(result.provider), record);
18
+ await this.store.appendEntry({
19
+ kind: EntityKind.DiscoveryResult,
20
+ content_source: ContentSource.Runtime,
21
+ key: this.key(result.provider),
22
+ payload: record,
23
+ });
24
+ await this._addToIndex(result.provider);
25
+ return record;
26
+ }
27
+ async get(provider) {
28
+ return this.store.getJSON(this.key(provider));
29
+ }
30
+ async listAvailable() {
31
+ const index = await this.store.getJSON(INDEX_KEY) ?? [];
32
+ const results = [];
33
+ for (const p of index) {
34
+ const r = await this.get(p);
35
+ if (r?.available)
36
+ results.push(r);
37
+ }
38
+ return results;
39
+ }
40
+ async listAll() {
41
+ const index = await this.store.getJSON(INDEX_KEY) ?? [];
42
+ const results = [];
43
+ for (const p of index) {
44
+ const r = await this.get(p);
45
+ if (r)
46
+ results.push(r);
47
+ }
48
+ return results;
49
+ }
50
+ async _addToIndex(provider) {
51
+ const index = await this.store.getJSON(INDEX_KEY) ?? [];
52
+ if (!index.includes(provider)) {
53
+ index.push(provider);
54
+ await this.store.setJSON(INDEX_KEY, index);
55
+ }
56
+ }
57
+ }
58
+ //# sourceMappingURL=discovery-repository.js.map
@@ -0,0 +1,31 @@
1
+ /**
2
+ * HandoffRepository — state/handoffs/
3
+ * Replaces: agent-state/handoff-registry.json
4
+ */
5
+ import { AcePackedStore } from "../ace-packed-store.js";
6
+ export interface HandoffRecord {
7
+ id: string;
8
+ from_agent: string;
9
+ to_agent: string;
10
+ status: "pending" | "active" | "acked" | "closed" | "blocked";
11
+ summary: string;
12
+ task?: string;
13
+ created_at: number;
14
+ updated_at: number;
15
+ metadata?: Record<string, unknown>;
16
+ }
17
+ export declare class HandoffRepository {
18
+ private store;
19
+ constructor(store: AcePackedStore);
20
+ private key;
21
+ create(handoff: Omit<HandoffRecord, "created_at" | "updated_at">): Promise<HandoffRecord>;
22
+ get(id: string): Promise<HandoffRecord | undefined>;
23
+ update(id: string, patch: Partial<HandoffRecord>): Promise<HandoffRecord>;
24
+ list(filter?: {
25
+ status?: HandoffRecord["status"];
26
+ to_agent?: string;
27
+ }): Promise<HandoffRecord[]>;
28
+ ack(id: string): Promise<HandoffRecord>;
29
+ close(id: string): Promise<HandoffRecord>;
30
+ }
31
+ //# sourceMappingURL=handoff-repository.d.ts.map
@@ -0,0 +1,67 @@
1
+ /**
2
+ * HandoffRepository — state/handoffs/
3
+ * Replaces: agent-state/handoff-registry.json
4
+ */
5
+ import { ContentSource, EntityKind } from "../types.js";
6
+ export class HandoffRepository {
7
+ store;
8
+ constructor(store) {
9
+ this.store = store;
10
+ }
11
+ key(id) {
12
+ return `state/handoffs/${id}`;
13
+ }
14
+ async create(handoff) {
15
+ const now = Date.now();
16
+ const record = { ...handoff, created_at: now, updated_at: now };
17
+ await this.store.setJSON(this.key(handoff.id), record);
18
+ await this.store.appendEntry({
19
+ kind: EntityKind.Handoff,
20
+ content_source: ContentSource.Runtime,
21
+ key: this.key(handoff.id),
22
+ payload: record,
23
+ });
24
+ return record;
25
+ }
26
+ async get(id) {
27
+ return this.store.getJSON(this.key(id));
28
+ }
29
+ async update(id, patch) {
30
+ const existing = await this.get(id);
31
+ if (!existing)
32
+ throw new Error(`HandoffRepository: handoff not found: ${id}`);
33
+ const updated = { ...existing, ...patch, updated_at: Date.now() };
34
+ await this.store.setJSON(this.key(id), updated);
35
+ await this.store.appendEntry({
36
+ kind: EntityKind.Handoff,
37
+ content_source: ContentSource.Runtime,
38
+ key: this.key(id),
39
+ payload: updated,
40
+ });
41
+ return updated;
42
+ }
43
+ async list(filter) {
44
+ const all = await this.store.getEntries({ kind: EntityKind.Handoff });
45
+ // Deduplicate — only keep latest entry per handoff id
46
+ const latest = new Map();
47
+ for (const entry of all) {
48
+ const record = entry.payload;
49
+ if (!record?.id)
50
+ continue;
51
+ latest.set(record.id, record);
52
+ }
53
+ let results = [...latest.values()];
54
+ if (filter?.status)
55
+ results = results.filter((r) => r.status === filter.status);
56
+ if (filter?.to_agent)
57
+ results = results.filter((r) => r.to_agent === filter.to_agent);
58
+ return results.sort((a, b) => b.created_at - a.created_at);
59
+ }
60
+ async ack(id) {
61
+ return this.update(id, { status: "acked" });
62
+ }
63
+ async close(id) {
64
+ return this.update(id, { status: "closed" });
65
+ }
66
+ }
67
+ //# sourceMappingURL=handoff-repository.js.map
@@ -0,0 +1,26 @@
1
+ /**
2
+ * LedgerRepository — state/ledger/
3
+ * Replaces: agent-state/run-ledger.json
4
+ */
5
+ import { AcePackedStore } from "../ace-packed-store.js";
6
+ export interface LedgerEvent {
7
+ id: string;
8
+ ts: number;
9
+ kind: "update" | "regression" | "milestone" | "note" | "gate_passed" | "gate_failed";
10
+ summary: string;
11
+ agent?: string;
12
+ artifact?: string;
13
+ metadata?: Record<string, unknown>;
14
+ }
15
+ export declare class LedgerRepository {
16
+ private store;
17
+ private seq;
18
+ constructor(store: AcePackedStore);
19
+ init(): Promise<void>;
20
+ private nextSeq;
21
+ private key;
22
+ append(event: Omit<LedgerEvent, "id" | "ts">): Promise<LedgerEvent>;
23
+ list(limit?: number): Promise<LedgerEvent[]>;
24
+ recent(n?: number): Promise<LedgerEvent[]>;
25
+ }
26
+ //# sourceMappingURL=ledger-repository.d.ts.map
@@ -0,0 +1,49 @@
1
+ /**
2
+ * LedgerRepository — state/ledger/
3
+ * Replaces: agent-state/run-ledger.json
4
+ */
5
+ import { ContentSource, EntityKind } from "../types.js";
6
+ const LEDGER_SEQ_KEY = "state/ledger/seq";
7
+ export class LedgerRepository {
8
+ store;
9
+ seq = 0;
10
+ constructor(store) {
11
+ this.store = store;
12
+ }
13
+ async init() {
14
+ this.seq = (await this.store.getJSON(LEDGER_SEQ_KEY)) ?? 0;
15
+ }
16
+ nextSeq() {
17
+ this.seq++;
18
+ return String(this.seq).padStart(10, "0");
19
+ }
20
+ key(id) {
21
+ return `state/ledger/${id}`;
22
+ }
23
+ async append(event) {
24
+ const id = `le-${this.nextSeq()}`;
25
+ const record = { ...event, id, ts: Date.now() };
26
+ await this.store.setJSON(this.key(id), record);
27
+ await this.store.setJSON(LEDGER_SEQ_KEY, this.seq);
28
+ await this.store.appendEntry({
29
+ kind: EntityKind.LedgerEvent,
30
+ content_source: ContentSource.Runtime,
31
+ key: this.key(id),
32
+ payload: record,
33
+ });
34
+ return record;
35
+ }
36
+ async list(limit) {
37
+ const entries = await this.store.getEntries({ kind: EntityKind.LedgerEvent });
38
+ const events = entries
39
+ .map((e) => e.payload)
40
+ .filter(Boolean)
41
+ .sort((a, b) => a.ts - b.ts);
42
+ return limit ? events.slice(-limit) : events;
43
+ }
44
+ async recent(n = 10) {
45
+ const all = await this.list();
46
+ return all.slice(-n);
47
+ }
48
+ }
49
+ //# sourceMappingURL=ledger-repository.js.map
@@ -0,0 +1,16 @@
1
+ /**
2
+ * RuntimeKVRepository — state/runtime/kv
3
+ * General-purpose key-value store for runtime metadata.
4
+ */
5
+ import { AcePackedStore } from "../ace-packed-store.js";
6
+ export declare class RuntimeKVRepository {
7
+ private store;
8
+ constructor(store: AcePackedStore);
9
+ private key;
10
+ set(k: string, value: unknown): Promise<void>;
11
+ get<T>(k: string): Promise<T | undefined>;
12
+ delete(k: string): Promise<boolean>;
13
+ setString(k: string, value: string): Promise<void>;
14
+ getString(k: string): Promise<string | undefined>;
15
+ }
16
+ //# sourceMappingURL=runtime-kv-repository.d.ts.map
@@ -0,0 +1,36 @@
1
+ /**
2
+ * RuntimeKVRepository — state/runtime/kv
3
+ * General-purpose key-value store for runtime metadata.
4
+ */
5
+ import { ContentSource, EntityKind } from "../types.js";
6
+ export class RuntimeKVRepository {
7
+ store;
8
+ constructor(store) {
9
+ this.store = store;
10
+ }
11
+ key(k) {
12
+ return `state/runtime/kv/${k}`;
13
+ }
14
+ async set(k, value) {
15
+ await this.store.setJSON(this.key(k), value);
16
+ await this.store.appendEntry({
17
+ kind: EntityKind.RuntimeKv,
18
+ content_source: ContentSource.Runtime,
19
+ key: this.key(k),
20
+ payload: { key: k },
21
+ });
22
+ }
23
+ async get(k) {
24
+ return this.store.getJSON(this.key(k));
25
+ }
26
+ async delete(k) {
27
+ return this.store.delete(this.key(k));
28
+ }
29
+ async setString(k, value) {
30
+ await this.store.setBlob(this.key(k), value);
31
+ }
32
+ async getString(k) {
33
+ return this.store.getBlob(this.key(k));
34
+ }
35
+ }
36
+ //# sourceMappingURL=runtime-kv-repository.js.map
@@ -0,0 +1,50 @@
1
+ /**
2
+ * SchedulerRepository — state/scheduler/
3
+ * Replaces: job-queue.json, job-locks.json, scheduler-lease.json
4
+ */
5
+ import { AcePackedStore } from "../ace-packed-store.js";
6
+ export interface Job {
7
+ id: string;
8
+ role: string;
9
+ task: string;
10
+ priority: "high" | "medium" | "low";
11
+ status: "queued" | "running" | "done" | "failed" | "cancelled";
12
+ depends_on?: string[];
13
+ created_at: number;
14
+ started_at?: number;
15
+ completed_at?: number;
16
+ result?: unknown;
17
+ metadata?: Record<string, unknown>;
18
+ }
19
+ export interface ResourceLock {
20
+ resource: string;
21
+ holder: string;
22
+ acquired_at: number;
23
+ expires_at?: number;
24
+ }
25
+ export interface SchedulerLease {
26
+ holder: string;
27
+ acquired_at: number;
28
+ expires_at: number;
29
+ run_id?: string;
30
+ }
31
+ export declare class SchedulerRepository {
32
+ private store;
33
+ constructor(store: AcePackedStore);
34
+ enqueue(job: Omit<Job, "created_at" | "status">): Promise<Job>;
35
+ listJobs(filter?: {
36
+ status?: Job["status"];
37
+ role?: string;
38
+ }): Promise<Job[]>;
39
+ updateJob(id: string, patch: Partial<Job>): Promise<Job>;
40
+ completeJob(id: string, result?: unknown): Promise<Job>;
41
+ failJob(id: string, reason?: string): Promise<Job>;
42
+ dispatchReady(): Promise<Job[]>;
43
+ acquireLock(resource: string, holder: string, ttlMs?: number): Promise<ResourceLock>;
44
+ releaseLock(resource: string, holder: string): Promise<boolean>;
45
+ getLocks(): Promise<ResourceLock[]>;
46
+ acquireLease(holder: string, ttlMs?: number, runId?: string): Promise<SchedulerLease>;
47
+ releaseLease(holder: string): Promise<boolean>;
48
+ getLease(): Promise<SchedulerLease | undefined>;
49
+ }
50
+ //# sourceMappingURL=scheduler-repository.d.ts.map