@cleocode/core 2026.9.20 → 2026.9.22

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 (961) hide show
  1. package/dist/adapters/discovery.d.ts.map +1 -1
  2. package/dist/adapters/discovery.js +3 -10
  3. package/dist/adapters/discovery.js.map +1 -1
  4. package/dist/adrs/link-pipeline.js +2 -2
  5. package/dist/adrs/link-pipeline.js.map +1 -1
  6. package/dist/adrs/parse.js +3 -3
  7. package/dist/adrs/parse.js.map +1 -1
  8. package/dist/agents/invoke-meta-agent.d.ts.map +1 -1
  9. package/dist/agents/invoke-meta-agent.js +8 -4
  10. package/dist/agents/invoke-meta-agent.js.map +1 -1
  11. package/dist/agents/scaffold.d.ts.map +1 -1
  12. package/dist/agents/scaffold.js +0 -1
  13. package/dist/agents/scaffold.js.map +1 -1
  14. package/dist/bootstrap.d.ts +5 -1
  15. package/dist/bootstrap.d.ts.map +1 -1
  16. package/dist/bootstrap.js +45 -21
  17. package/dist/bootstrap.js.map +1 -1
  18. package/dist/cloud/crypto.d.ts +47 -0
  19. package/dist/cloud/crypto.d.ts.map +1 -0
  20. package/dist/cloud/crypto.js +223 -0
  21. package/dist/cloud/crypto.js.map +1 -0
  22. package/dist/cloud/http.d.ts +52 -0
  23. package/dist/cloud/http.d.ts.map +1 -0
  24. package/dist/cloud/http.js +98 -0
  25. package/dist/cloud/http.js.map +1 -0
  26. package/dist/cloud/index.d.ts +19 -0
  27. package/dist/cloud/index.d.ts.map +1 -0
  28. package/dist/cloud/index.js +19 -0
  29. package/dist/cloud/index.js.map +1 -0
  30. package/dist/cloud/journal.d.ts +169 -0
  31. package/dist/cloud/journal.d.ts.map +1 -0
  32. package/dist/cloud/journal.js +428 -0
  33. package/dist/cloud/journal.js.map +1 -0
  34. package/dist/cloud/keys.d.ts +213 -0
  35. package/dist/cloud/keys.d.ts.map +1 -0
  36. package/dist/cloud/keys.js +362 -0
  37. package/dist/cloud/keys.js.map +1 -0
  38. package/dist/cloud/manifest-check.d.ts +36 -0
  39. package/dist/cloud/manifest-check.d.ts.map +1 -0
  40. package/dist/cloud/manifest-check.js +70 -0
  41. package/dist/cloud/manifest-check.js.map +1 -0
  42. package/dist/cloud/projects.d.ts +13 -0
  43. package/dist/cloud/projects.d.ts.map +1 -0
  44. package/dist/cloud/projects.js +11 -0
  45. package/dist/cloud/projects.js.map +1 -0
  46. package/dist/cloud/signing.d.ts +105 -0
  47. package/dist/cloud/signing.d.ts.map +1 -0
  48. package/dist/cloud/signing.js +117 -0
  49. package/dist/cloud/signing.js.map +1 -0
  50. package/dist/cloud/streams.d.ts +6 -0
  51. package/dist/cloud/streams.d.ts.map +1 -0
  52. package/dist/cloud/streams.js +5 -0
  53. package/dist/cloud/streams.js.map +1 -0
  54. package/dist/decide/audit.d.ts +131 -0
  55. package/dist/decide/audit.d.ts.map +1 -0
  56. package/dist/decide/audit.js +98 -0
  57. package/dist/decide/audit.js.map +1 -0
  58. package/dist/decide/budget.d.ts +91 -0
  59. package/dist/decide/budget.d.ts.map +1 -0
  60. package/dist/decide/budget.js +194 -0
  61. package/dist/decide/budget.js.map +1 -0
  62. package/dist/decide/cache.d.ts +49 -0
  63. package/dist/decide/cache.d.ts.map +1 -0
  64. package/dist/decide/cache.js +87 -0
  65. package/dist/decide/cache.js.map +1 -0
  66. package/dist/decide/client.d.ts +103 -0
  67. package/dist/decide/client.d.ts.map +1 -0
  68. package/dist/decide/client.js +262 -0
  69. package/dist/decide/client.js.map +1 -0
  70. package/dist/decide/credentials.d.ts +159 -0
  71. package/dist/decide/credentials.d.ts.map +1 -0
  72. package/dist/decide/credentials.js +383 -0
  73. package/dist/decide/credentials.js.map +1 -0
  74. package/dist/decide/index.d.ts +18 -0
  75. package/dist/decide/index.d.ts.map +1 -0
  76. package/dist/decide/index.js +18 -0
  77. package/dist/decide/index.js.map +1 -0
  78. package/dist/decide/jev-wire.d.ts +155 -0
  79. package/dist/decide/jev-wire.d.ts.map +1 -0
  80. package/dist/decide/jev-wire.js +420 -0
  81. package/dist/decide/jev-wire.js.map +1 -0
  82. package/dist/decide/operations.d.ts +152 -0
  83. package/dist/decide/operations.d.ts.map +1 -0
  84. package/dist/decide/operations.js +199 -0
  85. package/dist/decide/operations.js.map +1 -0
  86. package/dist/decide/provider.d.ts +90 -0
  87. package/dist/decide/provider.d.ts.map +1 -0
  88. package/dist/decide/provider.js +43 -0
  89. package/dist/decide/provider.js.map +1 -0
  90. package/dist/decide/site.d.ts +148 -0
  91. package/dist/decide/site.d.ts.map +1 -0
  92. package/dist/decide/site.js +181 -0
  93. package/dist/decide/site.js.map +1 -0
  94. package/dist/decide/transport.d.ts +67 -0
  95. package/dist/decide/transport.d.ts.map +1 -0
  96. package/dist/decide/transport.js +350 -0
  97. package/dist/decide/transport.js.map +1 -0
  98. package/dist/dispatch/mutate-projection.d.ts.map +1 -1
  99. package/dist/dispatch/mutate-projection.js +5 -0
  100. package/dist/dispatch/mutate-projection.js.map +1 -1
  101. package/dist/docs/docs-update.d.ts.map +1 -1
  102. package/dist/docs/docs-update.js +25 -9
  103. package/dist/docs/docs-update.js.map +1 -1
  104. package/dist/docs/export-document.js +5963 -2406
  105. package/dist/docs/export-document.js.map +3 -3
  106. package/dist/docs/index.d.ts +2 -2
  107. package/dist/docs/index.d.ts.map +1 -1
  108. package/dist/docs/index.js +1 -1
  109. package/dist/docs/index.js.map +1 -1
  110. package/dist/docs/projection.d.ts.map +1 -1
  111. package/dist/docs/projection.js +2 -3
  112. package/dist/docs/projection.js.map +1 -1
  113. package/dist/docs/publish-pr.d.ts +69 -1
  114. package/dist/docs/publish-pr.d.ts.map +1 -1
  115. package/dist/docs/publish-pr.js +112 -10
  116. package/dist/docs/publish-pr.js.map +1 -1
  117. package/dist/doctor/db-substrate.d.ts +13 -8
  118. package/dist/doctor/db-substrate.d.ts.map +1 -1
  119. package/dist/doctor/db-substrate.js +39 -26
  120. package/dist/doctor/db-substrate.js.map +1 -1
  121. package/dist/doctor/index.d.ts +2 -0
  122. package/dist/doctor/index.d.ts.map +1 -1
  123. package/dist/doctor/index.js +1 -0
  124. package/dist/doctor/index.js.map +1 -1
  125. package/dist/doctor/knowledge.d.ts +16 -1
  126. package/dist/doctor/knowledge.d.ts.map +1 -1
  127. package/dist/doctor/knowledge.js +58 -32
  128. package/dist/doctor/knowledge.js.map +1 -1
  129. package/dist/doctor/nexus-schema-residency.d.ts +1 -1
  130. package/dist/doctor/nexus-schema-residency.d.ts.map +1 -1
  131. package/dist/doctor/nexus-schema-residency.js +3 -0
  132. package/dist/doctor/nexus-schema-residency.js.map +1 -1
  133. package/dist/doctor/project-identity.d.ts +44 -1
  134. package/dist/doctor/project-identity.d.ts.map +1 -1
  135. package/dist/doctor/project-identity.js +237 -10
  136. package/dist/doctor/project-identity.js.map +1 -1
  137. package/dist/doctor/projects.d.ts +170 -0
  138. package/dist/doctor/projects.d.ts.map +1 -0
  139. package/dist/doctor/projects.js +1075 -0
  140. package/dist/doctor/projects.js.map +1 -0
  141. package/dist/doctor/twin-collapse.d.ts +97 -0
  142. package/dist/doctor/twin-collapse.d.ts.map +1 -0
  143. package/dist/doctor/twin-collapse.js +168 -0
  144. package/dist/doctor/twin-collapse.js.map +1 -0
  145. package/dist/doctor/worktree-orphans.d.ts.map +1 -1
  146. package/dist/doctor/worktree-orphans.js +13 -29
  147. package/dist/doctor/worktree-orphans.js.map +1 -1
  148. package/dist/doctor/worktree-stores.d.ts +128 -0
  149. package/dist/doctor/worktree-stores.d.ts.map +1 -0
  150. package/dist/doctor/worktree-stores.js +374 -0
  151. package/dist/doctor/worktree-stores.js.map +1 -0
  152. package/dist/engine/engine-ops.d.ts +36 -6
  153. package/dist/engine/engine-ops.d.ts.map +1 -1
  154. package/dist/engine/engine-ops.js +115 -14
  155. package/dist/engine/engine-ops.js.map +1 -1
  156. package/dist/error-catalog.d.ts.map +1 -1
  157. package/dist/error-catalog.js +21 -0
  158. package/dist/error-catalog.js.map +1 -1
  159. package/dist/error-registry.d.ts.map +1 -1
  160. package/dist/error-registry.js +40 -0
  161. package/dist/error-registry.js.map +1 -1
  162. package/dist/gateway-client/generated/types.gen.d.ts +1 -1
  163. package/dist/gc/cleanup.d.ts.map +1 -1
  164. package/dist/gc/cleanup.js +32 -19
  165. package/dist/gc/cleanup.js.map +1 -1
  166. package/dist/git/bounded-git.d.ts +170 -0
  167. package/dist/git/bounded-git.d.ts.map +1 -0
  168. package/dist/git/bounded-git.js +371 -0
  169. package/dist/git/bounded-git.js.map +1 -0
  170. package/dist/git/work-tree.d.ts +20 -0
  171. package/dist/git/work-tree.d.ts.map +1 -1
  172. package/dist/git/work-tree.js +20 -2
  173. package/dist/git/work-tree.js.map +1 -1
  174. package/dist/hooks/handlers/session-hooks.d.ts +11 -26
  175. package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
  176. package/dist/hooks/handlers/session-hooks.js +18 -47
  177. package/dist/hooks/handlers/session-hooks.js.map +1 -1
  178. package/dist/hooks/payload-schemas.d.ts +2 -2
  179. package/dist/index.d.ts +8 -5
  180. package/dist/index.d.ts.map +1 -1
  181. package/dist/index.js +6 -3
  182. package/dist/index.js.map +1 -1
  183. package/dist/init/engine-ops.d.ts.map +1 -1
  184. package/dist/init/engine-ops.js +23 -1
  185. package/dist/init/engine-ops.js.map +1 -1
  186. package/dist/init.d.ts +158 -1
  187. package/dist/init.d.ts.map +1 -1
  188. package/dist/init.js +578 -53
  189. package/dist/init.js.map +1 -1
  190. package/dist/inject/index.d.ts.map +1 -1
  191. package/dist/inject/index.js +8 -3
  192. package/dist/inject/index.js.map +1 -1
  193. package/dist/injection.d.ts +55 -0
  194. package/dist/injection.d.ts.map +1 -1
  195. package/dist/injection.js +102 -6
  196. package/dist/injection.js.map +1 -1
  197. package/dist/internal.d.ts +11 -7
  198. package/dist/internal.d.ts.map +1 -1
  199. package/dist/internal.js +9 -5
  200. package/dist/internal.js.map +1 -1
  201. package/dist/issue/diagnostics.d.ts.map +1 -1
  202. package/dist/issue/diagnostics.js +2 -1
  203. package/dist/issue/diagnostics.js.map +1 -1
  204. package/dist/lib/concurrency.d.ts +25 -0
  205. package/dist/lib/concurrency.d.ts.map +1 -0
  206. package/dist/lib/concurrency.js +43 -0
  207. package/dist/lib/concurrency.js.map +1 -0
  208. package/dist/lib/index.d.ts +1 -0
  209. package/dist/lib/index.d.ts.map +1 -1
  210. package/dist/lib/index.js +1 -0
  211. package/dist/lib/index.js.map +1 -1
  212. package/dist/lifecycle/engine-ops.d.ts.map +1 -1
  213. package/dist/lifecycle/engine-ops.js +4 -2
  214. package/dist/lifecycle/engine-ops.js.map +1 -1
  215. package/dist/lifecycle/stage-guidance.d.ts +5 -0
  216. package/dist/lifecycle/stage-guidance.d.ts.map +1 -1
  217. package/dist/lifecycle/stage-guidance.js +14 -4
  218. package/dist/lifecycle/stage-guidance.js.map +1 -1
  219. package/dist/llm/catalog-cache.d.ts +3 -2
  220. package/dist/llm/catalog-cache.d.ts.map +1 -1
  221. package/dist/llm/catalog-cache.js +5 -5
  222. package/dist/llm/catalog-cache.js.map +1 -1
  223. package/dist/llm/credentials.d.ts +4 -4
  224. package/dist/llm/credentials.js +6 -6
  225. package/dist/llm/credentials.js.map +1 -1
  226. package/dist/llm/plugin-facade.js +4400 -1801
  227. package/dist/llm/plugin-facade.js.map +3 -3
  228. package/dist/llm/stable-device-id.d.ts.map +1 -1
  229. package/dist/llm/stable-device-id.js +3 -5
  230. package/dist/llm/stable-device-id.js.map +1 -1
  231. package/dist/memory/attention.js +31 -31
  232. package/dist/memory/attention.js.map +1 -1
  233. package/dist/memory/decision-contradiction.d.ts +152 -0
  234. package/dist/memory/decision-contradiction.d.ts.map +1 -0
  235. package/dist/memory/decision-contradiction.js +273 -0
  236. package/dist/memory/decision-contradiction.js.map +1 -0
  237. package/dist/memory/decisions.d.ts +42 -11
  238. package/dist/memory/decisions.d.ts.map +1 -1
  239. package/dist/memory/decisions.js +153 -56
  240. package/dist/memory/decisions.js.map +1 -1
  241. package/dist/memory/dialectic-evaluator.d.ts +7 -0
  242. package/dist/memory/dialectic-evaluator.d.ts.map +1 -1
  243. package/dist/memory/dialectic-evaluator.js +23 -8
  244. package/dist/memory/dialectic-evaluator.js.map +1 -1
  245. package/dist/memory/dispatch-trace-format.d.ts +39 -0
  246. package/dist/memory/dispatch-trace-format.d.ts.map +1 -0
  247. package/dist/memory/dispatch-trace-format.js +54 -0
  248. package/dist/memory/dispatch-trace-format.js.map +1 -0
  249. package/dist/memory/dispatch-trace.d.ts.map +1 -1
  250. package/dist/memory/dispatch-trace.js +1 -27
  251. package/dist/memory/dispatch-trace.js.map +1 -1
  252. package/dist/memory/engine-compat.d.ts +2 -0
  253. package/dist/memory/engine-compat.d.ts.map +1 -1
  254. package/dist/memory/engine-compat.js +1 -0
  255. package/dist/memory/engine-compat.js.map +1 -1
  256. package/dist/memory/import-from-provider.js +3 -3
  257. package/dist/memory/import-from-provider.js.map +1 -1
  258. package/dist/memory/learnings.d.ts +2 -2
  259. package/dist/memory/observation-type-decision.d.ts +96 -0
  260. package/dist/memory/observation-type-decision.d.ts.map +1 -0
  261. package/dist/memory/observation-type-decision.js +218 -0
  262. package/dist/memory/observation-type-decision.js.map +1 -0
  263. package/dist/memory/redaction.js +2 -0
  264. package/dist/memory/redaction.js.map +1 -1
  265. package/dist/memory/retrieval/build-retrieval-bundle.d.ts +9 -2
  266. package/dist/memory/retrieval/build-retrieval-bundle.d.ts.map +1 -1
  267. package/dist/memory/retrieval/build-retrieval-bundle.js +42 -11
  268. package/dist/memory/retrieval/build-retrieval-bundle.js.map +1 -1
  269. package/dist/memory/retrieval/get-current-session-id.d.ts +5 -0
  270. package/dist/memory/retrieval/get-current-session-id.d.ts.map +1 -1
  271. package/dist/memory/retrieval/get-current-session-id.js +7 -2
  272. package/dist/memory/retrieval/get-current-session-id.js.map +1 -1
  273. package/dist/memory/retrieval/observe.d.ts.map +1 -1
  274. package/dist/memory/retrieval/observe.js +30 -29
  275. package/dist/memory/retrieval/observe.js.map +1 -1
  276. package/dist/nexus/analyze-orchestrator.d.ts +38 -0
  277. package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
  278. package/dist/nexus/analyze-orchestrator.js +136 -48
  279. package/dist/nexus/analyze-orchestrator.js.map +1 -1
  280. package/dist/nexus/assessment-projection.d.ts +76 -0
  281. package/dist/nexus/assessment-projection.d.ts.map +1 -0
  282. package/dist/nexus/assessment-projection.js +143 -0
  283. package/dist/nexus/assessment-projection.js.map +1 -0
  284. package/dist/nexus/assessment-store.d.ts +14 -2
  285. package/dist/nexus/assessment-store.d.ts.map +1 -1
  286. package/dist/nexus/assessment-store.js +21 -3
  287. package/dist/nexus/assessment-store.js.map +1 -1
  288. package/dist/nexus/checkout-nonce.d.ts +48 -0
  289. package/dist/nexus/checkout-nonce.d.ts.map +1 -0
  290. package/dist/nexus/checkout-nonce.js +84 -0
  291. package/dist/nexus/checkout-nonce.js.map +1 -0
  292. package/dist/nexus/devices.d.ts +93 -0
  293. package/dist/nexus/devices.d.ts.map +1 -0
  294. package/dist/nexus/devices.js +141 -0
  295. package/dist/nexus/devices.js.map +1 -0
  296. package/dist/nexus/freshness.d.ts.map +1 -1
  297. package/dist/nexus/freshness.js +25 -6
  298. package/dist/nexus/freshness.js.map +1 -1
  299. package/dist/nexus/git-state.d.ts +225 -0
  300. package/dist/nexus/git-state.d.ts.map +1 -0
  301. package/dist/nexus/git-state.js +677 -0
  302. package/dist/nexus/git-state.js.map +1 -0
  303. package/dist/nexus/graph-manifest.d.ts +20 -4
  304. package/dist/nexus/graph-manifest.d.ts.map +1 -1
  305. package/dist/nexus/graph-manifest.js +40 -5
  306. package/dist/nexus/graph-manifest.js.map +1 -1
  307. package/dist/nexus/identity.d.ts +68 -23
  308. package/dist/nexus/identity.d.ts.map +1 -1
  309. package/dist/nexus/identity.js +99 -22
  310. package/dist/nexus/identity.js.map +1 -1
  311. package/dist/nexus/index.d.ts +5 -2
  312. package/dist/nexus/index.d.ts.map +1 -1
  313. package/dist/nexus/index.js +10 -4
  314. package/dist/nexus/index.js.map +1 -1
  315. package/dist/nexus/knowledge.d.ts +5 -0
  316. package/dist/nexus/knowledge.d.ts.map +1 -1
  317. package/dist/nexus/knowledge.js +40 -5
  318. package/dist/nexus/knowledge.js.map +1 -1
  319. package/dist/nexus/legacy-alias.d.ts +60 -0
  320. package/dist/nexus/legacy-alias.d.ts.map +1 -0
  321. package/dist/nexus/legacy-alias.js +68 -0
  322. package/dist/nexus/legacy-alias.js.map +1 -0
  323. package/dist/nexus/migrate-json-to-sqlite.js +2 -2
  324. package/dist/nexus/migrate-json-to-sqlite.js.map +1 -1
  325. package/dist/nexus/ops.d.ts +1 -0
  326. package/dist/nexus/ops.d.ts.map +1 -1
  327. package/dist/nexus/path-map.d.ts +264 -20
  328. package/dist/nexus/path-map.d.ts.map +1 -1
  329. package/dist/nexus/path-map.js +580 -44
  330. package/dist/nexus/path-map.js.map +1 -1
  331. package/dist/nexus/projects-clean.d.ts +9 -1
  332. package/dist/nexus/projects-clean.d.ts.map +1 -1
  333. package/dist/nexus/projects-clean.js +126 -14
  334. package/dist/nexus/projects-clean.js.map +1 -1
  335. package/dist/nexus/projects-scan.d.ts +56 -1
  336. package/dist/nexus/projects-scan.d.ts.map +1 -1
  337. package/dist/nexus/projects-scan.js +144 -3
  338. package/dist/nexus/projects-scan.js.map +1 -1
  339. package/dist/nexus/registry-hygiene.d.ts +18 -2
  340. package/dist/nexus/registry-hygiene.d.ts.map +1 -1
  341. package/dist/nexus/registry-hygiene.js +37 -11
  342. package/dist/nexus/registry-hygiene.js.map +1 -1
  343. package/dist/nexus/registry-roots.d.ts +47 -0
  344. package/dist/nexus/registry-roots.d.ts.map +1 -0
  345. package/dist/nexus/registry-roots.js +79 -0
  346. package/dist/nexus/registry-roots.js.map +1 -0
  347. package/dist/nexus/registry.d.ts +50 -9
  348. package/dist/nexus/registry.d.ts.map +1 -1
  349. package/dist/nexus/registry.js +311 -156
  350. package/dist/nexus/registry.js.map +1 -1
  351. package/dist/nexus/stored-roots.d.ts +171 -0
  352. package/dist/nexus/stored-roots.d.ts.map +1 -0
  353. package/dist/nexus/stored-roots.js +253 -0
  354. package/dist/nexus/stored-roots.js.map +1 -0
  355. package/dist/nexus/transfer.d.ts.map +1 -1
  356. package/dist/nexus/transfer.js +3 -0
  357. package/dist/nexus/transfer.js.map +1 -1
  358. package/dist/nexus/user-profile-hygiene.d.ts +168 -0
  359. package/dist/nexus/user-profile-hygiene.d.ts.map +1 -0
  360. package/dist/nexus/user-profile-hygiene.js +305 -0
  361. package/dist/nexus/user-profile-hygiene.js.map +1 -0
  362. package/dist/nexus/user-profile.d.ts +53 -2
  363. package/dist/nexus/user-profile.d.ts.map +1 -1
  364. package/dist/nexus/user-profile.js +106 -4
  365. package/dist/nexus/user-profile.js.map +1 -1
  366. package/dist/orchestrate/lifecycle-ops.d.ts.map +1 -1
  367. package/dist/orchestrate/lifecycle-ops.js +4 -1
  368. package/dist/orchestrate/lifecycle-ops.js.map +1 -1
  369. package/dist/orchestrate/pivot.d.ts.map +1 -1
  370. package/dist/orchestrate/pivot.js +5 -1
  371. package/dist/orchestrate/pivot.js.map +1 -1
  372. package/dist/orchestrate/plan.d.ts.map +1 -1
  373. package/dist/orchestrate/plan.js +5 -2
  374. package/dist/orchestrate/plan.js.map +1 -1
  375. package/dist/orchestrate/query-ops.d.ts +7 -2
  376. package/dist/orchestrate/query-ops.d.ts.map +1 -1
  377. package/dist/orchestrate/query-ops.js +17 -6
  378. package/dist/orchestrate/query-ops.js.map +1 -1
  379. package/dist/orchestrate/spawn-ops.d.ts +12 -0
  380. package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
  381. package/dist/orchestrate/spawn-ops.js +157 -71
  382. package/dist/orchestrate/spawn-ops.js.map +1 -1
  383. package/dist/orchestration/bootstrap.d.ts.map +1 -1
  384. package/dist/orchestration/bootstrap.js +4 -2
  385. package/dist/orchestration/bootstrap.js.map +1 -1
  386. package/dist/orchestration/classify-readiness.d.ts +37 -1
  387. package/dist/orchestration/classify-readiness.d.ts.map +1 -1
  388. package/dist/orchestration/classify-readiness.js +48 -19
  389. package/dist/orchestration/classify-readiness.js.map +1 -1
  390. package/dist/orchestration/index.d.ts +4 -2
  391. package/dist/orchestration/index.d.ts.map +1 -1
  392. package/dist/orchestration/index.js +6 -4
  393. package/dist/orchestration/index.js.map +1 -1
  394. package/dist/orchestration/lead-rollup.d.ts +8 -5
  395. package/dist/orchestration/lead-rollup.d.ts.map +1 -1
  396. package/dist/orchestration/lead-rollup.js +32 -15
  397. package/dist/orchestration/lead-rollup.js.map +1 -1
  398. package/dist/orchestration/owner-decision-readiness.d.ts +88 -0
  399. package/dist/orchestration/owner-decision-readiness.d.ts.map +1 -0
  400. package/dist/orchestration/owner-decision-readiness.js +152 -0
  401. package/dist/orchestration/owner-decision-readiness.js.map +1 -0
  402. package/dist/orchestration/parallel.d.ts.map +1 -1
  403. package/dist/orchestration/parallel.js +10 -17
  404. package/dist/orchestration/parallel.js.map +1 -1
  405. package/dist/orchestration/psyche-memory-budget.d.ts +105 -0
  406. package/dist/orchestration/psyche-memory-budget.d.ts.map +1 -0
  407. package/dist/orchestration/psyche-memory-budget.js +383 -0
  408. package/dist/orchestration/psyche-memory-budget.js.map +1 -0
  409. package/dist/orchestration/spawn-prompt.d.ts +16 -2
  410. package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
  411. package/dist/orchestration/spawn-prompt.js +144 -181
  412. package/dist/orchestration/spawn-prompt.js.map +1 -1
  413. package/dist/orchestration/spawn.d.ts +7 -0
  414. package/dist/orchestration/spawn.d.ts.map +1 -1
  415. package/dist/orchestration/spawn.js +1 -0
  416. package/dist/orchestration/spawn.js.map +1 -1
  417. package/dist/orchestration/status.d.ts +8 -3
  418. package/dist/orchestration/status.d.ts.map +1 -1
  419. package/dist/orchestration/status.js +9 -6
  420. package/dist/orchestration/status.js.map +1 -1
  421. package/dist/orchestration/wave-topic.d.ts +54 -0
  422. package/dist/orchestration/wave-topic.d.ts.map +1 -0
  423. package/dist/orchestration/wave-topic.js +68 -0
  424. package/dist/orchestration/wave-topic.js.map +1 -0
  425. package/dist/orchestration/waves.d.ts +47 -8
  426. package/dist/orchestration/waves.d.ts.map +1 -1
  427. package/dist/orchestration/waves.js +152 -43
  428. package/dist/orchestration/waves.js.map +1 -1
  429. package/dist/paths.d.ts +24 -8
  430. package/dist/paths.d.ts.map +1 -1
  431. package/dist/paths.js +135 -71
  432. package/dist/paths.js.map +1 -1
  433. package/dist/phases/index.d.ts.map +1 -1
  434. package/dist/phases/index.js +6 -2
  435. package/dist/phases/index.js.map +1 -1
  436. package/dist/platform.d.ts +6 -1
  437. package/dist/platform.d.ts.map +1 -1
  438. package/dist/platform.js +8 -19
  439. package/dist/platform.js.map +1 -1
  440. package/dist/project-info.d.ts +18 -0
  441. package/dist/project-info.d.ts.map +1 -1
  442. package/dist/project-info.js +29 -1
  443. package/dist/project-info.js.map +1 -1
  444. package/dist/project-lifecycle.d.ts +91 -32
  445. package/dist/project-lifecycle.d.ts.map +1 -1
  446. package/dist/project-lifecycle.js +639 -75
  447. package/dist/project-lifecycle.js.map +1 -1
  448. package/dist/project-scope.d.ts +104 -4
  449. package/dist/project-scope.d.ts.map +1 -1
  450. package/dist/project-scope.js +263 -13
  451. package/dist/project-scope.js.map +1 -1
  452. package/dist/project-tombstone.d.ts +111 -0
  453. package/dist/project-tombstone.d.ts.map +1 -0
  454. package/dist/project-tombstone.js +220 -0
  455. package/dist/project-tombstone.js.map +1 -0
  456. package/dist/release/artifacts.d.ts.map +1 -1
  457. package/dist/release/artifacts.js +14 -9
  458. package/dist/release/artifacts.js.map +1 -1
  459. package/dist/release/ci-evidence.d.ts +233 -0
  460. package/dist/release/ci-evidence.d.ts.map +1 -0
  461. package/dist/release/ci-evidence.js +668 -0
  462. package/dist/release/ci-evidence.js.map +1 -0
  463. package/dist/release/engine-ops.d.ts.map +1 -1
  464. package/dist/release/engine-ops.js +3 -3
  465. package/dist/release/engine-ops.js.map +1 -1
  466. package/dist/release/github-pr.d.ts +30 -0
  467. package/dist/release/github-pr.d.ts.map +1 -1
  468. package/dist/release/github-pr.js +40 -0
  469. package/dist/release/github-pr.js.map +1 -1
  470. package/dist/release/plan.d.ts.map +1 -1
  471. package/dist/release/plan.js +11 -7
  472. package/dist/release/plan.js.map +1 -1
  473. package/dist/release/pr-evidence.d.ts +38 -0
  474. package/dist/release/pr-evidence.d.ts.map +1 -1
  475. package/dist/release/pr-evidence.js +79 -15
  476. package/dist/release/pr-evidence.js.map +1 -1
  477. package/dist/release/reconcile.d.ts.map +1 -1
  478. package/dist/release/reconcile.js +3 -2
  479. package/dist/release/reconcile.js.map +1 -1
  480. package/dist/release/release-manifest.d.ts +2 -1
  481. package/dist/release/release-manifest.d.ts.map +1 -1
  482. package/dist/release/release-manifest.js +6 -5
  483. package/dist/release/release-manifest.js.map +1 -1
  484. package/dist/render/nexus/graph/index.d.ts +4 -0
  485. package/dist/render/nexus/graph/index.d.ts.map +1 -1
  486. package/dist/render/nexus/graph/index.js +57 -0
  487. package/dist/render/nexus/graph/index.js.map +1 -1
  488. package/dist/resources/spawn-wrapper.d.ts +8 -1
  489. package/dist/resources/spawn-wrapper.d.ts.map +1 -1
  490. package/dist/resources/spawn-wrapper.js +42 -5
  491. package/dist/resources/spawn-wrapper.js.map +1 -1
  492. package/dist/routing/build-command-groups.d.ts.map +1 -1
  493. package/dist/routing/build-command-groups.js +1 -0
  494. package/dist/routing/build-command-groups.js.map +1 -1
  495. package/dist/sagas/index.d.ts +1 -1
  496. package/dist/sagas/index.d.ts.map +1 -1
  497. package/dist/sagas/index.js +1 -1
  498. package/dist/sagas/index.js.map +1 -1
  499. package/dist/sagas/reconcile.d.ts +24 -4
  500. package/dist/sagas/reconcile.d.ts.map +1 -1
  501. package/dist/sagas/reconcile.js +226 -100
  502. package/dist/sagas/reconcile.js.map +1 -1
  503. package/dist/scaffold/ensure-config.d.ts.map +1 -1
  504. package/dist/scaffold/ensure-config.js +31 -1
  505. package/dist/scaffold/ensure-config.js.map +1 -1
  506. package/dist/scaffold/project-identity.d.ts +2 -8
  507. package/dist/scaffold/project-identity.d.ts.map +1 -1
  508. package/dist/scaffold/project-identity.js +5 -21
  509. package/dist/scaffold/project-identity.js.map +1 -1
  510. package/dist/security/input-sanitization.d.ts +9 -1
  511. package/dist/security/input-sanitization.d.ts.map +1 -1
  512. package/dist/security/input-sanitization.js +20 -3
  513. package/dist/security/input-sanitization.js.map +1 -1
  514. package/dist/selfimprove/fix-gen.js +4409 -1810
  515. package/dist/selfimprove/fix-gen.js.map +3 -3
  516. package/dist/sentient/propose-tick.d.ts.map +1 -1
  517. package/dist/sentient/propose-tick.js +4 -2
  518. package/dist/sentient/propose-tick.js.map +1 -1
  519. package/dist/sequence/index.d.ts.map +1 -1
  520. package/dist/sequence/index.js +6 -23
  521. package/dist/sequence/index.js.map +1 -1
  522. package/dist/session/engine-ops.d.ts +15 -0
  523. package/dist/session/engine-ops.d.ts.map +1 -1
  524. package/dist/session/engine-ops.js +146 -22
  525. package/dist/session/engine-ops.js.map +1 -1
  526. package/dist/sessions/assumptions.d.ts.map +1 -1
  527. package/dist/sessions/assumptions.js +7 -4
  528. package/dist/sessions/assumptions.js.map +1 -1
  529. package/dist/sessions/briefing.d.ts +23 -0
  530. package/dist/sessions/briefing.d.ts.map +1 -1
  531. package/dist/sessions/briefing.js +59 -9
  532. package/dist/sessions/briefing.js.map +1 -1
  533. package/dist/sessions/decisions.d.ts +38 -3
  534. package/dist/sessions/decisions.d.ts.map +1 -1
  535. package/dist/sessions/decisions.js +235 -21
  536. package/dist/sessions/decisions.js.map +1 -1
  537. package/dist/sessions/drift-watchdog.d.ts.map +1 -1
  538. package/dist/sessions/drift-watchdog.js +8 -5
  539. package/dist/sessions/drift-watchdog.js.map +1 -1
  540. package/dist/sessions/focus-state-store.d.ts +89 -1
  541. package/dist/sessions/focus-state-store.d.ts.map +1 -1
  542. package/dist/sessions/focus-state-store.js +97 -1
  543. package/dist/sessions/focus-state-store.js.map +1 -1
  544. package/dist/sessions/index.d.ts +2 -2
  545. package/dist/sessions/index.d.ts.map +1 -1
  546. package/dist/sessions/index.js +34 -5
  547. package/dist/sessions/index.js.map +1 -1
  548. package/dist/sessions/session-drift.d.ts.map +1 -1
  549. package/dist/sessions/session-drift.js +4 -3
  550. package/dist/sessions/session-drift.js.map +1 -1
  551. package/dist/sessions/session-end-snapshot-entry.d.ts +26 -0
  552. package/dist/sessions/session-end-snapshot-entry.d.ts.map +1 -0
  553. package/dist/sessions/session-end-snapshot-entry.js +59 -0
  554. package/dist/sessions/session-end-snapshot-entry.js.map +1 -0
  555. package/dist/sessions/session-end-snapshot.d.ts +114 -0
  556. package/dist/sessions/session-end-snapshot.d.ts.map +1 -0
  557. package/dist/sessions/session-end-snapshot.js +446 -0
  558. package/dist/sessions/session-end-snapshot.js.map +1 -0
  559. package/dist/sessions/session-manifest-mirror.d.ts.map +1 -1
  560. package/dist/sessions/session-manifest-mirror.js +10 -17
  561. package/dist/sessions/session-manifest-mirror.js.map +1 -1
  562. package/dist/sessions/session-switch.d.ts.map +1 -1
  563. package/dist/sessions/session-switch.js +5 -3
  564. package/dist/sessions/session-switch.js.map +1 -1
  565. package/dist/sessions/snapshot.d.ts.map +1 -1
  566. package/dist/sessions/snapshot.js +5 -4
  567. package/dist/sessions/snapshot.js.map +1 -1
  568. package/dist/sessions/terminal-identity.d.ts +169 -0
  569. package/dist/sessions/terminal-identity.d.ts.map +1 -0
  570. package/dist/sessions/terminal-identity.js +273 -0
  571. package/dist/sessions/terminal-identity.js.map +1 -0
  572. package/dist/setup/sections/verification.d.ts +1 -1
  573. package/dist/setup/sections/verification.d.ts.map +1 -1
  574. package/dist/setup/sections/verification.js +11 -15
  575. package/dist/setup/sections/verification.js.map +1 -1
  576. package/dist/skills/discovery.d.ts +20 -3
  577. package/dist/skills/discovery.d.ts.map +1 -1
  578. package/dist/skills/discovery.js +41 -4
  579. package/dist/skills/discovery.js.map +1 -1
  580. package/dist/skills/dispatch.d.ts +5 -2
  581. package/dist/skills/dispatch.d.ts.map +1 -1
  582. package/dist/skills/dispatch.js +5 -2
  583. package/dist/skills/dispatch.js.map +1 -1
  584. package/dist/skills/doctor.d.ts.map +1 -1
  585. package/dist/skills/doctor.js +5 -1
  586. package/dist/skills/doctor.js.map +1 -1
  587. package/dist/skills/federated-search.js +2 -2
  588. package/dist/skills/federated-search.js.map +1 -1
  589. package/dist/skills/index.d.ts +3 -3
  590. package/dist/skills/index.d.ts.map +1 -1
  591. package/dist/skills/index.js +1 -1
  592. package/dist/skills/index.js.map +1 -1
  593. package/dist/skills/migration.d.ts +5 -5
  594. package/dist/skills/migration.d.ts.map +1 -1
  595. package/dist/skills/migration.js +7 -9
  596. package/dist/skills/migration.js.map +1 -1
  597. package/dist/skills/orchestrator/startup.d.ts.map +1 -1
  598. package/dist/skills/orchestrator/startup.js +14 -7
  599. package/dist/skills/orchestrator/startup.js.map +1 -1
  600. package/dist/skills/prune-bundled.d.ts +267 -0
  601. package/dist/skills/prune-bundled.d.ts.map +1 -0
  602. package/dist/skills/prune-bundled.js +536 -0
  603. package/dist/skills/prune-bundled.js.map +1 -0
  604. package/dist/skills/skill-paths.d.ts +30 -3
  605. package/dist/skills/skill-paths.d.ts.map +1 -1
  606. package/dist/skills/skill-paths.js +28 -9
  607. package/dist/skills/skill-paths.js.map +1 -1
  608. package/dist/skills/skill-root.d.ts +60 -11
  609. package/dist/skills/skill-root.d.ts.map +1 -1
  610. package/dist/skills/skill-root.js +100 -14
  611. package/dist/skills/skill-root.js.map +1 -1
  612. package/dist/skills/skills-guard.js +5 -5
  613. package/dist/skills/skills-guard.js.map +1 -1
  614. package/dist/skills/types.d.ts +32 -1
  615. package/dist/skills/types.d.ts.map +1 -1
  616. package/dist/skills/types.js +17 -34
  617. package/dist/skills/types.js.map +1 -1
  618. package/dist/spawn/agent-identity.d.ts +51 -2
  619. package/dist/spawn/agent-identity.d.ts.map +1 -1
  620. package/dist/spawn/agent-identity.js +89 -26
  621. package/dist/spawn/agent-identity.js.map +1 -1
  622. package/dist/spawn/branch-lock.d.ts.map +1 -1
  623. package/dist/spawn/branch-lock.js +80 -79
  624. package/dist/spawn/branch-lock.js.map +1 -1
  625. package/dist/spawn/index.d.ts +2 -2
  626. package/dist/spawn/index.d.ts.map +1 -1
  627. package/dist/spawn/index.js +1 -1
  628. package/dist/spawn/index.js.map +1 -1
  629. package/dist/spawn/worktree-lock-holder.d.ts +37 -0
  630. package/dist/spawn/worktree-lock-holder.d.ts.map +1 -0
  631. package/dist/spawn/worktree-lock-holder.js +41 -0
  632. package/dist/spawn/worktree-lock-holder.js.map +1 -0
  633. package/dist/stats/index.d.ts.map +1 -1
  634. package/dist/stats/index.js +4 -2
  635. package/dist/stats/index.js.map +1 -1
  636. package/dist/sticky/convert.d.ts.map +1 -1
  637. package/dist/sticky/convert.js +16 -4
  638. package/dist/sticky/convert.js.map +1 -1
  639. package/dist/store/attachment-store.d.ts +14 -0
  640. package/dist/store/attachment-store.d.ts.map +1 -1
  641. package/dist/store/attachment-store.js +11 -1
  642. package/dist/store/attachment-store.js.map +1 -1
  643. package/dist/store/backup-inspect.d.ts +7 -3
  644. package/dist/store/backup-inspect.d.ts.map +1 -1
  645. package/dist/store/backup-inspect.js +18 -7
  646. package/dist/store/backup-inspect.js.map +1 -1
  647. package/dist/store/backup-sidecar.d.ts +60 -0
  648. package/dist/store/backup-sidecar.d.ts.map +1 -0
  649. package/dist/store/backup-sidecar.js +96 -0
  650. package/dist/store/backup-sidecar.js.map +1 -0
  651. package/dist/store/data-accessor.d.ts +1 -1
  652. package/dist/store/data-accessor.d.ts.map +1 -1
  653. package/dist/store/data-accessor.js +6 -6
  654. package/dist/store/data-accessor.js.map +1 -1
  655. package/dist/store/data-safety-central.d.ts +13 -4
  656. package/dist/store/data-safety-central.d.ts.map +1 -1
  657. package/dist/store/data-safety-central.js +31 -4
  658. package/dist/store/data-safety-central.js.map +1 -1
  659. package/dist/store/dual-scope-db.d.ts.map +1 -1
  660. package/dist/store/dual-scope-db.js +10 -0
  661. package/dist/store/dual-scope-db.js.map +1 -1
  662. package/dist/store/exodus/__fixtures__/representative-fixture.d.ts.map +1 -1
  663. package/dist/store/exodus/__fixtures__/representative-fixture.js +4 -0
  664. package/dist/store/exodus/__fixtures__/representative-fixture.js.map +1 -1
  665. package/dist/store/exodus/migrate.js +1 -1
  666. package/dist/store/exodus/migrate.js.map +1 -1
  667. package/dist/store/exodus/reconcile.js +1 -1
  668. package/dist/store/exodus/reconcile.js.map +1 -1
  669. package/dist/store/exodus/runtime-targets.d.ts +4 -3
  670. package/dist/store/exodus/runtime-targets.d.ts.map +1 -1
  671. package/dist/store/exodus/runtime-targets.js +4 -3
  672. package/dist/store/exodus/runtime-targets.js.map +1 -1
  673. package/dist/store/import-logging.d.ts.map +1 -1
  674. package/dist/store/import-logging.js +5 -4
  675. package/dist/store/import-logging.js.map +1 -1
  676. package/dist/store/legacy-tasks-lineage.d.ts.map +1 -1
  677. package/dist/store/legacy-tasks-lineage.js +2 -7
  678. package/dist/store/legacy-tasks-lineage.js.map +1 -1
  679. package/dist/store/lock.d.ts +1 -0
  680. package/dist/store/lock.d.ts.map +1 -1
  681. package/dist/store/lock.js +1 -0
  682. package/dist/store/lock.js.map +1 -1
  683. package/dist/store/memory-accessor.d.ts +8 -3
  684. package/dist/store/memory-accessor.d.ts.map +1 -1
  685. package/dist/store/memory-accessor.js +29 -13
  686. package/dist/store/memory-accessor.js.map +1 -1
  687. package/dist/store/memory-sqlite.d.ts.map +1 -1
  688. package/dist/store/memory-sqlite.js +5 -0
  689. package/dist/store/memory-sqlite.js.map +1 -1
  690. package/dist/store/open-cleo-db.d.ts.map +1 -1
  691. package/dist/store/open-cleo-db.js +11 -6
  692. package/dist/store/open-cleo-db.js.map +1 -1
  693. package/dist/store/portable-bundle-relocate.d.ts +13 -8
  694. package/dist/store/portable-bundle-relocate.d.ts.map +1 -1
  695. package/dist/store/portable-bundle-relocate.js +75 -31
  696. package/dist/store/portable-bundle-relocate.js.map +1 -1
  697. package/dist/store/portable-bundle-scan.d.ts.map +1 -1
  698. package/dist/store/portable-bundle-scan.js +2 -1
  699. package/dist/store/portable-bundle-scan.js.map +1 -1
  700. package/dist/store/portable-bundle.d.ts.map +1 -1
  701. package/dist/store/portable-bundle.js +7 -3
  702. package/dist/store/portable-bundle.js.map +1 -1
  703. package/dist/store/pre-repair-snapshot.d.ts +77 -0
  704. package/dist/store/pre-repair-snapshot.d.ts.map +1 -0
  705. package/dist/store/pre-repair-snapshot.js +122 -0
  706. package/dist/store/pre-repair-snapshot.js.map +1 -0
  707. package/dist/store/regenerators.d.ts +2 -1
  708. package/dist/store/regenerators.d.ts.map +1 -1
  709. package/dist/store/regenerators.js +17 -3
  710. package/dist/store/regenerators.js.map +1 -1
  711. package/dist/store/relocated-store-guard.d.ts +71 -0
  712. package/dist/store/relocated-store-guard.d.ts.map +1 -0
  713. package/dist/store/relocated-store-guard.js +138 -0
  714. package/dist/store/relocated-store-guard.js.map +1 -0
  715. package/dist/store/safety-data-accessor.d.ts +2 -2
  716. package/dist/store/safety-data-accessor.d.ts.map +1 -1
  717. package/dist/store/safety-data-accessor.js +2 -2
  718. package/dist/store/safety-data-accessor.js.map +1 -1
  719. package/dist/store/schema/attachments.d.ts +2 -2
  720. package/dist/store/schema/audit.d.ts +5 -5
  721. package/dist/store/schema/background-jobs.d.ts +1 -1
  722. package/dist/store/schema/cleo-global/models-catalog.d.ts +1 -1
  723. package/dist/store/schema/cleo-global/nexus.d.ts +686 -0
  724. package/dist/store/schema/cleo-global/nexus.d.ts.map +1 -1
  725. package/dist/store/schema/cleo-global/nexus.js +175 -7
  726. package/dist/store/schema/cleo-global/nexus.js.map +1 -1
  727. package/dist/store/schema/cleo-global/skills.d.ts +2 -2
  728. package/dist/store/schema/cleo-project/audit.d.ts +5 -5
  729. package/dist/store/schema/cleo-project/docs.d.ts +3 -3
  730. package/dist/store/schema/cleo-project/lifecycle.d.ts +3 -3
  731. package/dist/store/schema/cleo-project/provenance-commits.d.ts +2 -2
  732. package/dist/store/schema/cleo-project/provenance-rest.d.ts +3 -3
  733. package/dist/store/schema/cleo-project/tasks-core-batch2.d.ts +1 -1
  734. package/dist/store/schema/cleo-project/tasks-core.d.ts +6 -6
  735. package/dist/store/schema/cleo-shared/brain.d.ts +26 -26
  736. package/dist/store/schema/lifecycle.d.ts +3 -3
  737. package/dist/store/schema/manifest.d.ts +1 -1
  738. package/dist/store/schema/memory-schema.d.ts +26 -26
  739. package/dist/store/schema/nexus-schema.d.ts +696 -2
  740. package/dist/store/schema/nexus-schema.d.ts.map +1 -1
  741. package/dist/store/schema/nexus-schema.js +175 -19
  742. package/dist/store/schema/nexus-schema.js.map +1 -1
  743. package/dist/store/schema/provenance/releases.d.ts +1 -1
  744. package/dist/store/schema/skills-schema.d.ts +2 -2
  745. package/dist/store/schema/tasks.d.ts +5 -5
  746. package/dist/store/session-binding-schema.d.ts +132 -0
  747. package/dist/store/session-binding-schema.d.ts.map +1 -0
  748. package/dist/store/session-binding-schema.js +53 -0
  749. package/dist/store/session-binding-schema.js.map +1 -0
  750. package/dist/store/session-store.d.ts +262 -4
  751. package/dist/store/session-store.d.ts.map +1 -1
  752. package/dist/store/session-store.js +486 -26
  753. package/dist/store/session-store.js.map +1 -1
  754. package/dist/store/skills-db.d.ts +17 -0
  755. package/dist/store/skills-db.d.ts.map +1 -1
  756. package/dist/store/skills-db.js +30 -0
  757. package/dist/store/skills-db.js.map +1 -1
  758. package/dist/store/snapshot-gate.d.ts +239 -0
  759. package/dist/store/snapshot-gate.d.ts.map +1 -0
  760. package/dist/store/snapshot-gate.js +401 -0
  761. package/dist/store/snapshot-gate.js.map +1 -0
  762. package/dist/store/split-brain-import.js +2 -2
  763. package/dist/store/split-brain-import.js.map +1 -1
  764. package/dist/store/sqlite-backup.d.ts +55 -13
  765. package/dist/store/sqlite-backup.d.ts.map +1 -1
  766. package/dist/store/sqlite-backup.js +414 -106
  767. package/dist/store/sqlite-backup.js.map +1 -1
  768. package/dist/store/sqlite-data-accessor.d.ts +15 -0
  769. package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
  770. package/dist/store/sqlite-data-accessor.js +73 -4
  771. package/dist/store/sqlite-data-accessor.js.map +1 -1
  772. package/dist/store/sqlite.d.ts +15 -1
  773. package/dist/store/sqlite.d.ts.map +1 -1
  774. package/dist/store/sqlite.js +75 -5
  775. package/dist/store/sqlite.js.map +1 -1
  776. package/dist/store/store-write-guard.d.ts +28 -0
  777. package/dist/store/store-write-guard.d.ts.map +1 -0
  778. package/dist/store/store-write-guard.js +50 -0
  779. package/dist/store/store-write-guard.js.map +1 -0
  780. package/dist/store/table-classification.d.ts +143 -0
  781. package/dist/store/table-classification.d.ts.map +1 -0
  782. package/dist/store/table-classification.js +1866 -0
  783. package/dist/store/table-classification.js.map +1 -0
  784. package/dist/store/task-version.d.ts +72 -0
  785. package/dist/store/task-version.d.ts.map +1 -0
  786. package/dist/store/task-version.js +93 -0
  787. package/dist/store/task-version.js.map +1 -0
  788. package/dist/store/tasks-schema.d.ts +1 -0
  789. package/dist/store/tasks-schema.d.ts.map +1 -1
  790. package/dist/store/tasks-schema.js +13 -0
  791. package/dist/store/tasks-schema.js.map +1 -1
  792. package/dist/store/tasks-sqlite.d.ts +10 -3
  793. package/dist/store/tasks-sqlite.d.ts.map +1 -1
  794. package/dist/store/tasks-sqlite.js +12 -3
  795. package/dist/store/tasks-sqlite.js.map +1 -1
  796. package/dist/store/twin-collapse.d.ts +320 -0
  797. package/dist/store/twin-collapse.d.ts.map +1 -0
  798. package/dist/store/twin-collapse.js +931 -0
  799. package/dist/store/twin-collapse.js.map +1 -0
  800. package/dist/store/umbrella-data-accessor.d.ts +2 -2
  801. package/dist/store/umbrella-data-accessor.d.ts.map +1 -1
  802. package/dist/store/umbrella-data-accessor.js +2 -2
  803. package/dist/store/umbrella-data-accessor.js.map +1 -1
  804. package/dist/store/validation-schemas.d.ts +63 -63
  805. package/dist/store/worktree-isolation-guard.d.ts +46 -24
  806. package/dist/store/worktree-isolation-guard.d.ts.map +1 -1
  807. package/dist/store/worktree-isolation-guard.js +71 -50
  808. package/dist/store/worktree-isolation-guard.js.map +1 -1
  809. package/dist/system/backup.d.ts.map +1 -1
  810. package/dist/system/backup.js +3 -67
  811. package/dist/system/backup.js.map +1 -1
  812. package/dist/system/cleo-link.d.ts +163 -0
  813. package/dist/system/cleo-link.d.ts.map +1 -0
  814. package/dist/system/cleo-link.js +246 -0
  815. package/dist/system/cleo-link.js.map +1 -0
  816. package/dist/system/dependencies.d.ts.map +1 -1
  817. package/dist/system/dependencies.js +3 -6
  818. package/dist/system/dependencies.js.map +1 -1
  819. package/dist/system/global-delivery.d.ts +205 -0
  820. package/dist/system/global-delivery.d.ts.map +1 -0
  821. package/dist/system/global-delivery.js +320 -0
  822. package/dist/system/global-delivery.js.map +1 -0
  823. package/dist/system/health.d.ts.map +1 -1
  824. package/dist/system/health.js +29 -6
  825. package/dist/system/health.js.map +1 -1
  826. package/dist/system/inject-generate.d.ts.map +1 -1
  827. package/dist/system/inject-generate.js +4 -4
  828. package/dist/system/inject-generate.js.map +1 -1
  829. package/dist/system/project-health.d.ts.map +1 -1
  830. package/dist/system/project-health.js +1 -20
  831. package/dist/system/project-health.js.map +1 -1
  832. package/dist/system/runtime.d.ts.map +1 -1
  833. package/dist/system/runtime.js +2 -12
  834. package/dist/system/runtime.js.map +1 -1
  835. package/dist/system/safestop.d.ts.map +1 -1
  836. package/dist/system/safestop.js +5 -2
  837. package/dist/system/safestop.js.map +1 -1
  838. package/dist/system/skill-fixtures.d.ts +200 -0
  839. package/dist/system/skill-fixtures.d.ts.map +1 -0
  840. package/dist/system/skill-fixtures.js +331 -0
  841. package/dist/system/skill-fixtures.js.map +1 -0
  842. package/dist/task-work/index.d.ts +6 -0
  843. package/dist/task-work/index.d.ts.map +1 -1
  844. package/dist/task-work/index.js +6 -3
  845. package/dist/task-work/index.js.map +1 -1
  846. package/dist/tasks/add.d.ts.map +1 -1
  847. package/dist/tasks/add.js +4 -2
  848. package/dist/tasks/add.js.map +1 -1
  849. package/dist/tasks/affected-packages.d.ts +218 -0
  850. package/dist/tasks/affected-packages.d.ts.map +1 -0
  851. package/dist/tasks/affected-packages.js +496 -0
  852. package/dist/tasks/affected-packages.js.map +1 -0
  853. package/dist/tasks/affected-scope.d.ts +59 -0
  854. package/dist/tasks/affected-scope.d.ts.map +1 -0
  855. package/dist/tasks/affected-scope.js +81 -0
  856. package/dist/tasks/affected-scope.js.map +1 -0
  857. package/dist/tasks/analyze.d.ts.map +1 -1
  858. package/dist/tasks/analyze.js +7 -2
  859. package/dist/tasks/analyze.js.map +1 -1
  860. package/dist/tasks/change-set.d.ts +175 -0
  861. package/dist/tasks/change-set.d.ts.map +1 -0
  862. package/dist/tasks/change-set.js +753 -0
  863. package/dist/tasks/change-set.js.map +1 -0
  864. package/dist/tasks/complete.d.ts +10 -0
  865. package/dist/tasks/complete.d.ts.map +1 -1
  866. package/dist/tasks/complete.js +59 -5
  867. package/dist/tasks/complete.js.map +1 -1
  868. package/dist/tasks/component-pr.d.ts +106 -0
  869. package/dist/tasks/component-pr.d.ts.map +1 -0
  870. package/dist/tasks/component-pr.js +190 -0
  871. package/dist/tasks/component-pr.js.map +1 -0
  872. package/dist/tasks/done-plan.d.ts +123 -0
  873. package/dist/tasks/done-plan.d.ts.map +1 -0
  874. package/dist/tasks/done-plan.js +696 -0
  875. package/dist/tasks/done-plan.js.map +1 -0
  876. package/dist/tasks/done-record.d.ts +127 -0
  877. package/dist/tasks/done-record.d.ts.map +1 -0
  878. package/dist/tasks/done-record.js +302 -0
  879. package/dist/tasks/done-record.js.map +1 -0
  880. package/dist/tasks/duplicate-detector.d.ts +68 -11
  881. package/dist/tasks/duplicate-detector.d.ts.map +1 -1
  882. package/dist/tasks/duplicate-detector.js +314 -58
  883. package/dist/tasks/duplicate-detector.js.map +1 -1
  884. package/dist/tasks/evidence-paths.d.ts +78 -0
  885. package/dist/tasks/evidence-paths.d.ts.map +1 -0
  886. package/dist/tasks/evidence-paths.js +150 -0
  887. package/dist/tasks/evidence-paths.js.map +1 -0
  888. package/dist/tasks/evidence.d.ts +101 -1
  889. package/dist/tasks/evidence.d.ts.map +1 -1
  890. package/dist/tasks/evidence.js +278 -31
  891. package/dist/tasks/evidence.js.map +1 -1
  892. package/dist/tasks/gate-preview.d.ts +5 -0
  893. package/dist/tasks/gate-preview.d.ts.map +1 -1
  894. package/dist/tasks/gate-preview.js +25 -21
  895. package/dist/tasks/gate-preview.js.map +1 -1
  896. package/dist/tasks/gate-result-cache.d.ts +205 -0
  897. package/dist/tasks/gate-result-cache.d.ts.map +1 -0
  898. package/dist/tasks/gate-result-cache.js +285 -0
  899. package/dist/tasks/gate-result-cache.js.map +1 -0
  900. package/dist/tasks/gate-runner.d.ts +126 -3
  901. package/dist/tasks/gate-runner.d.ts.map +1 -1
  902. package/dist/tasks/gate-runner.js +483 -28
  903. package/dist/tasks/gate-runner.js.map +1 -1
  904. package/dist/tasks/session-scope.d.ts +3 -1
  905. package/dist/tasks/session-scope.d.ts.map +1 -1
  906. package/dist/tasks/session-scope.js +18 -3
  907. package/dist/tasks/session-scope.js.map +1 -1
  908. package/dist/tasks/task-next.d.ts +4 -0
  909. package/dist/tasks/task-next.d.ts.map +1 -1
  910. package/dist/tasks/task-next.js +32 -28
  911. package/dist/tasks/task-next.js.map +1 -1
  912. package/dist/tasks/tool-resolver.d.ts +23 -6
  913. package/dist/tasks/tool-resolver.d.ts.map +1 -1
  914. package/dist/tasks/tool-resolver.js +146 -8
  915. package/dist/tasks/tool-resolver.js.map +1 -1
  916. package/dist/tasks/tool-vacuity.d.ts +71 -0
  917. package/dist/tasks/tool-vacuity.d.ts.map +1 -0
  918. package/dist/tasks/tool-vacuity.js +334 -0
  919. package/dist/tasks/tool-vacuity.js.map +1 -0
  920. package/dist/tasks/update.d.ts +8 -0
  921. package/dist/tasks/update.d.ts.map +1 -1
  922. package/dist/tasks/update.js +159 -78
  923. package/dist/tasks/update.js.map +1 -1
  924. package/dist/upgrade.d.ts.map +1 -1
  925. package/dist/upgrade.js +18 -2
  926. package/dist/upgrade.js.map +1 -1
  927. package/dist/validation/doctor/checks.d.ts +20 -2
  928. package/dist/validation/doctor/checks.d.ts.map +1 -1
  929. package/dist/validation/doctor/checks.js +64 -4
  930. package/dist/validation/doctor/checks.js.map +1 -1
  931. package/dist/validation/doctor/index.d.ts +1 -1
  932. package/dist/validation/doctor/index.d.ts.map +1 -1
  933. package/dist/validation/doctor/index.js +1 -1
  934. package/dist/validation/doctor/index.js.map +1 -1
  935. package/dist/validation/doctor/utils.d.ts.map +1 -1
  936. package/dist/validation/doctor/utils.js +7 -2
  937. package/dist/validation/doctor/utils.js.map +1 -1
  938. package/dist/validation/engine-ops.d.ts +24 -1
  939. package/dist/validation/engine-ops.d.ts.map +1 -1
  940. package/dist/validation/engine-ops.js +272 -98
  941. package/dist/validation/engine-ops.js.map +1 -1
  942. package/dist/validation/validate-ops.d.ts.map +1 -1
  943. package/dist/validation/validate-ops.js +9 -3
  944. package/dist/validation/validate-ops.js.map +1 -1
  945. package/dist/worktree/worktree-adopt.d.ts.map +1 -1
  946. package/dist/worktree/worktree-adopt.js +5 -2
  947. package/dist/worktree/worktree-adopt.js.map +1 -1
  948. package/migrations/drizzle-cleo-global/20260927000000_t12469-project-locations/migration.sql +121 -0
  949. package/migrations/drizzle-cleo-global/20260927010000_t12543-user-profile-project-scope/migration.sql +23 -0
  950. package/migrations/drizzle-cleo-global/20260928010000_t12470-location-candidates/migration.sql +72 -0
  951. package/migrations/drizzle-cleo-global/20260928020000_t12510-nexus-devices/migration.sql +34 -0
  952. package/migrations/drizzle-cleo-global/20260928030000_t12511-project-git-state/migration.sql +62 -0
  953. package/migrations/drizzle-cleo-project/20260927000000_t12499-session-terminal-bindings/migration.sql +34 -0
  954. package/migrations/drizzle-cleo-project/20260928000000_t12500-binding-provider-flag/migration.sql +15 -0
  955. package/package.json +23 -13
  956. package/schemas/config.schema.json +54 -0
  957. package/schemas/project-context.schema.json +51 -3
  958. package/schemas/project-info.schema.json +28 -1
  959. package/templates/CLEO-INJECTION.md +40 -332
  960. package/templates/CLEO-REFERENCE.md +303 -0
  961. package/templates/workflows/README.md +36 -14
@@ -0,0 +1,696 @@
1
+ /**
2
+ * `cleo done <id> --plan` — the read-only evidence planner.
3
+ *
4
+ * {@link deriveTaskEvidence} answers, for one task, "what would `cleo done`
5
+ * record, and what stops it?" without executing a tool or a typed gate and
6
+ * without writing a row, an audit line or a cache entry:
7
+ *
8
+ * - the implemented change set and where it came from ({@link deriveTaskChangeSet});
9
+ * - the gates the verification policy requires and whether each has passed;
10
+ * - the tool runs those gates need, resolved through the ADR-061 resolver,
11
+ * and whether each already has a fresh cached result for the current tree;
12
+ * - which acceptance criteria map to evidence deterministically — a stored
13
+ * passing typed gate, or every repo path the criterion names being in the
14
+ * change set by exact repo-relative path — and which need `--satisfies`;
15
+ * - the ordered blockers, each with one runnable next step;
16
+ * - the exact commands, spelled as today's `cleo verify` / `cleo complete`
17
+ * verbs, so every one is runnable before `cleo done` records anything.
18
+ *
19
+ * The planned atom strings are the same strings the existing validators
20
+ * receive; the planner adds no validation path of its own.
21
+ *
22
+ * Spec: `verify-streamlined-design` §3.1, §3.2, §7 step 1.
23
+ *
24
+ * @task T12623
25
+ */
26
+ import { execFileSync } from 'node:child_process';
27
+ import { readFileSync } from 'node:fs';
28
+ import { join } from 'node:path';
29
+ import { ExitCode } from '@cleocode/contracts';
30
+ import { engineSuccess } from '../engine-result.js';
31
+ import { CleoError } from '../errors.js';
32
+ import { cleoErrorToEngineResult } from '../errors-to-engine.js';
33
+ import { getProjectRoot } from '../paths.js';
34
+ import { isCiDocumentPath, readCiChecks, readCiSatisfies } from '../release/ci-evidence.js';
35
+ import { readRequiredCheckPins } from '../release/pr-evidence.js';
36
+ import { getTaskAccessor } from '../store/data-accessor.js';
37
+ import { planAffectedTestRun } from './affected-packages.js';
38
+ import { affectedScopeSupersededReason, mergeStateOfChangeSet } from './affected-scope.js';
39
+ import { deriveTaskChangeSet } from './change-set.js';
40
+ import { checkGateEvidenceMinimumDetailed, classifyEvidenceTask, extractTaskAcFilesWithProvenance, } from './evidence.js';
41
+ import { extractTypedGates } from './gate-runner.js';
42
+ import { captureDirtyFingerprint, captureHead, computeCacheKey, readCacheEntry, } from './tool-cache.js';
43
+ import { resolveToolCommand } from './tool-resolver.js';
44
+ import { loadVerificationGatePolicy } from './verification-policy.js';
45
+ /**
46
+ * Whether `ci:<pr>` can attest both tool gates for this change set (T12634):
47
+ * both `evidence.ciChecks` lists are declared, a change that is not purely
48
+ * documentation also declares its job globs, and the PR does not edit a pinned workflow (its own CI would
49
+ * vouch for itself). Otherwise the plan falls back to local tool runs.
50
+ */
51
+ function ciPlannable(storeRoot, needsJobs, touched) {
52
+ const lists = readCiChecks(storeRoot);
53
+ if (!lists.tests?.length || !lists.qa?.length)
54
+ return false;
55
+ if (needsJobs && (!lists.jobs?.tests?.length || !lists.jobs?.qa?.length))
56
+ return false;
57
+ let context = null;
58
+ try {
59
+ context = JSON.parse(readFileSync(join(storeRoot, '.cleo', 'project-context.json'), 'utf-8'));
60
+ }
61
+ catch {
62
+ context = null;
63
+ }
64
+ const pins = readRequiredCheckPins(context);
65
+ return !Object.values(pins).some((pin) => pin.workflow && touched.includes(pin.workflow));
66
+ }
67
+ /** Gates `cleo done` derives evidence for; every other required gate is manual. */
68
+ const EVIDENCE_GATES = ['implemented', 'testsPassed', 'qaPassed'];
69
+ /** Tools each tool-backed gate runs, in atom order. */
70
+ const GATE_TOOLS = {
71
+ testsPassed: ['test'],
72
+ qaPassed: ['lint', 'typecheck'],
73
+ };
74
+ /**
75
+ * Report order for blockers: the first is the one to clear first (spec §3.3:
76
+ * dirty tree → no change set → PR ambiguity → tool failure → typed gate
77
+ * failure → AC mapping → lifecycle).
78
+ */
79
+ const DONE_PLAN_BLOCKER_ORDER = [
80
+ 'git-root',
81
+ 'run-from-worktree',
82
+ 'dirty-tree',
83
+ 'checkout-required',
84
+ 'no-change-set',
85
+ 'pr-ambiguous',
86
+ 'pr-unverified',
87
+ 'merge-commit-missing',
88
+ 'decision-missing',
89
+ 'tool-unresolved',
90
+ 'tool-failed',
91
+ 'typed-gate-failed',
92
+ 'ac-mapping-needed',
93
+ 'manual-gate',
94
+ 'epic-rollup',
95
+ 'evidence-refused',
96
+ 'completion-refused',
97
+ ];
98
+ /** Default preview: `validateGateVerify` in preview mode (no tool runs, no write). */
99
+ const defaultPreviewEvidence = async (storeRoot, taskId, gateEvidence) => {
100
+ const { validateGateVerify } = await import('../validation/engine-ops.js');
101
+ const r = await validateGateVerify(storeRoot, { taskId, gateEvidence, preview: true });
102
+ return r.success
103
+ ? { ok: true }
104
+ : {
105
+ ok: false,
106
+ code: r.error.code,
107
+ message: r.error.message,
108
+ ...(r.error.fix ? { fix: r.error.fix } : {}),
109
+ };
110
+ };
111
+ /** `git` read in `cwd`, trimmed; `null` on failure (a non-zero exit included). */
112
+ function gitRead(cwd, args) {
113
+ try {
114
+ return execFileSync('git', args, {
115
+ cwd,
116
+ encoding: 'utf-8',
117
+ stdio: ['ignore', 'pipe', 'ignore'],
118
+ }).trim();
119
+ }
120
+ catch {
121
+ return null;
122
+ }
123
+ }
124
+ /**
125
+ * The tools and typed gates run on whatever `executionRoot` has checked out.
126
+ * `implemented` cites the change set's commit; unless that tree CONTAINS the
127
+ * change, `testsPassed`/`qaPassed` would attest a different tree — the T12625
128
+ * review reproduced a failing test recording testsPassed from the main
129
+ * checkout while `implemented` cited the unchecked-out task branch.
130
+ *
131
+ * - branch: the change-set commit must be the checked-out HEAD (a dirty tree
132
+ * is already a plan blocker);
133
+ * - pr: the merge commit must be an ancestor of the checked-out HEAD.
134
+ */
135
+ function checkoutBlocker(taskId, cs) {
136
+ const root = cs.executionRoot;
137
+ const head = gitRead(root, ['rev-parse', 'HEAD']);
138
+ const short = (sha) => (sha ?? 'nothing').slice(0, 12);
139
+ if (cs.source === 'branch') {
140
+ if (cs.headRef === 'HEAD' && head !== null && head === cs.commitSha)
141
+ return null;
142
+ const branch = cs.headRef && cs.headRef !== 'HEAD' ? cs.headRef : `task/${taskId}`;
143
+ return {
144
+ code: 'checkout-required',
145
+ message: `${taskId}'s change is ${short(cs.commitSha)} on ${branch}, but ${root} has ${short(head)} checked out; the tools would measure a different tree than implemented cites.`,
146
+ next: {
147
+ command: `git -C ${shellQuote(root)} switch ${branch} && cleo done ${taskId}`,
148
+ why: 'Tests, lint, typecheck and typed gates must run on the commit implemented records.',
149
+ },
150
+ };
151
+ }
152
+ if (cs.source === 'pr' && cs.mergeCommitSha) {
153
+ // D11151: every PR the task shipped in must be in the tested tree.
154
+ const merges = [
155
+ ...(cs.additionalPrs ?? []).flatMap((p) => p.mergeCommitSha ? [{ pr: p.prNumber, sha: p.mergeCommitSha }] : []),
156
+ { pr: cs.prNumber, sha: cs.mergeCommitSha },
157
+ ];
158
+ const missing = merges.find((m) => head === null || gitRead(root, ['merge-base', '--is-ancestor', m.sha, 'HEAD']) === null);
159
+ if (!missing)
160
+ return null;
161
+ return {
162
+ code: 'checkout-required',
163
+ message: `${root} has ${short(head)} checked out, which does not contain PR #${missing.pr}'s merge commit ${short(missing.sha)}.`,
164
+ next: {
165
+ command: `git -C ${shellQuote(root)} switch --detach ${cs.mergeCommitSha} && cleo done ${taskId}`,
166
+ why: 'Tests, lint, typecheck and typed gates must run on a tree containing the merged change.',
167
+ },
168
+ };
169
+ }
170
+ return null;
171
+ }
172
+ /**
173
+ * The refusals `cleo done` would raise from what the plan already knows —
174
+ * the ONE readiness check both `--plan` and `done` use (T12672), so
175
+ * `ready: true` never meets a plan-visible refusal:
176
+ *
177
+ * - tools or typed gates run on a tree: from the task worktree
178
+ * (`run-from-worktree`), with the change checked out (`checkout-required`).
179
+ * A close with no tool run needs no tree (T12671);
180
+ * - the derived evidence goes through the write's own validators in preview
181
+ * mode (`evidence-refused`), when nothing else blocks.
182
+ */
183
+ async function readinessBlockers(input) {
184
+ const { taskId, changeSet: cs } = input;
185
+ if (input.needsTree) {
186
+ if (cs.rootSource === 'task-worktree') {
187
+ return [
188
+ {
189
+ code: 'run-from-worktree',
190
+ message: `${taskId}'s work is in its worktree ${cs.executionRoot}; tools must run in that tree.`,
191
+ next: {
192
+ command: `cd ${shellQuote(cs.executionRoot)} && cleo done ${taskId}`,
193
+ why: 'Evidence tools measure the invocation tree; run cleo done from the task worktree.',
194
+ },
195
+ },
196
+ ];
197
+ }
198
+ const checkout = checkoutBlocker(taskId, cs);
199
+ if (checkout)
200
+ return [checkout];
201
+ }
202
+ const pending = input.gates.filter((g) => !g.passed && g.evidence !== null);
203
+ if (input.blocked || pending.length === 0)
204
+ return [];
205
+ const gateEvidence = Object.fromEntries(pending.map((g) => [g.gate, g.evidence]));
206
+ if (input.additionalImplemented.length > 0 && gateEvidence.implemented) {
207
+ gateEvidence.implemented = [...input.additionalImplemented, gateEvidence.implemented];
208
+ }
209
+ const checked = await input.preview(input.storeRoot, taskId, gateEvidence);
210
+ if (checked.ok)
211
+ return [];
212
+ return [
213
+ {
214
+ code: 'evidence-refused',
215
+ message: checked.message,
216
+ next: {
217
+ command: checked.fix ?? `cleo show ${taskId} --full`,
218
+ why: 'The validators cleo done records through refuse this evidence.',
219
+ },
220
+ cause: checked.code,
221
+ },
222
+ ];
223
+ }
224
+ /**
225
+ * POSIX single-quote a shell word (bare when it is already safe).
226
+ *
227
+ * @param word - Word to quote.
228
+ * @returns A string the shell reads back as exactly `word`.
229
+ */
230
+ export function shellQuote(word) {
231
+ return /^[A-Za-z0-9_./:@%+=,-]+$/.test(word) ? word : `'${word.replace(/'/g, `'\\''`)}'`;
232
+ }
233
+ function step(command, why) {
234
+ return { command, why };
235
+ }
236
+ function orderBlockers(blockers) {
237
+ return blockers
238
+ .map((b, i) => ({ b, i }))
239
+ .sort((x, y) => DONE_PLAN_BLOCKER_ORDER.indexOf(x.b.code) - DONE_PLAN_BLOCKER_ORDER.indexOf(y.b.code) ||
240
+ x.i - y.i)
241
+ .map(({ b }) => b);
242
+ }
243
+ /** Resolve one tool and read — never write — its ADR-061 cache entry for `root`. */
244
+ async function planToolRun(tool, gate, storeRoot, root, override) {
245
+ const resolution = override
246
+ ? { ok: true, command: override }
247
+ : resolveToolCommand(tool, storeRoot);
248
+ if (!resolution.ok) {
249
+ return {
250
+ tool,
251
+ gate,
252
+ command: null,
253
+ source: null,
254
+ cache: resolution.codeName === 'E_TOOL_NOT_APPLICABLE' ? 'not-applicable' : 'unresolved',
255
+ reason: resolution.reason,
256
+ };
257
+ }
258
+ const { command } = resolution;
259
+ const key = computeCacheKey(command, await captureHead(root), await captureDirtyFingerprint(root), root);
260
+ const entry = readCacheEntry(storeRoot, key);
261
+ const run = {
262
+ tool,
263
+ gate,
264
+ command: [command.cmd, ...command.args].join(' '),
265
+ source: command.source,
266
+ cache: entry === null ? 'miss' : entry.exitCode === 0 ? 'fresh-pass' : 'fresh-fail',
267
+ };
268
+ if (entry !== null && entry.exitCode !== null) {
269
+ run.exitCode = entry.exitCode;
270
+ run.capturedAt = entry.capturedAt;
271
+ }
272
+ return run;
273
+ }
274
+ /**
275
+ * Repo-relative path in the one spelling exact matching compares: no leading
276
+ * `./`, no trailing `/`. Deliberately NOT {@link diffIntersectsAc}, whose
277
+ * suffix rule would let `src/index.ts` match `packages/lafs/src/index.ts` —
278
+ * acceptable for an advisory intersect, not for claiming a criterion.
279
+ */
280
+ function normaliseRepoPath(path) {
281
+ return path.replace(/^\.\//, '').replace(/\/+$/, '');
282
+ }
283
+ /** Stored typed-gate results, aligned with criteria by acceptance index. */
284
+ function planTypedGates(task, rows) {
285
+ const results = task.verification?.gateResults ?? [];
286
+ return extractTypedGates(task.acceptance ?? []).map(({ gate, originalIndex }) => {
287
+ const stored = results.find((r) => r.index === originalIndex);
288
+ const status = stored === undefined || stored.result === 'skipped'
289
+ ? 'not-run'
290
+ : stored.result === 'pass'
291
+ ? 'pass'
292
+ : 'fail';
293
+ const row = rows[originalIndex];
294
+ return {
295
+ alias: `AC${row?.ordinal ?? originalIndex + 1}`,
296
+ kind: gate.kind,
297
+ ...(gate.req ? { req: gate.req } : {}),
298
+ status,
299
+ };
300
+ });
301
+ }
302
+ /** Criterion IDs already linked by recorded gate evidence. */
303
+ function recordedCriteria(task) {
304
+ const ids = new Set();
305
+ for (const evidence of Object.values(task.verification?.evidence ?? {})) {
306
+ for (const link of evidence?.scope?.criteria ?? [])
307
+ ids.add(link.criterionId);
308
+ }
309
+ return ids;
310
+ }
311
+ /**
312
+ * Map each criterion conservatively. Keyword matching is deliberately absent:
313
+ * a criterion is linked only by a stored passing typed gate, by every path it
314
+ * names being in the change set, by prior recorded evidence, or by the agent.
315
+ */
316
+ function mapCriteria(task, rows, typedGates, changeSet, pending, satisfies) {
317
+ const recorded = recordedCriteria(task);
318
+ const changed = new Set(changeSet.files.map(normaliseRepoPath));
319
+ const writable = (gates) => gates.filter((g) => pending.includes(g));
320
+ return rows.map((row) => {
321
+ const alias = `AC${row.ordinal}`;
322
+ const base = { alias, id: row.id, text: row.text };
323
+ if (satisfies === 'all' || satisfies?.includes(alias)) {
324
+ const gates = writable([...EVIDENCE_GATES]);
325
+ return { ...base, mapped: true, gates, basis: 'agent' };
326
+ }
327
+ if (typedGates.some((g) => g.alias === alias && g.status === 'pass')) {
328
+ return { ...base, mapped: true, gates: writable(['testsPassed']), basis: 'typed-gate' };
329
+ }
330
+ const named = extractTaskAcFilesWithProvenance({ acceptance: [row.text] }).files ?? [];
331
+ if (named.length > 0 && named.every((path) => changed.has(normaliseRepoPath(path)))) {
332
+ return {
333
+ ...base,
334
+ mapped: true,
335
+ gates: writable(['implemented']),
336
+ basis: 'files-in-diff',
337
+ files: named,
338
+ };
339
+ }
340
+ if (recorded.has(row.id))
341
+ return { ...base, mapped: true, gates: [], basis: 'recorded' };
342
+ return {
343
+ ...base,
344
+ mapped: false,
345
+ gates: [],
346
+ basis: 'none',
347
+ ...(named.length ? { files: named } : {}),
348
+ };
349
+ });
350
+ }
351
+ /** Planned atoms for a tool-backed gate, or a decision-only note. */
352
+ function toolGateEvidence(gate, runs, decisionOnly, ciPr) {
353
+ if (decisionOnly)
354
+ return 'note:decision-only implementation, no code changed';
355
+ if (ciPr !== null)
356
+ return `ci:${ciPr}`;
357
+ const atoms = runs
358
+ .filter((r) => r.gate === gate && r.cache !== 'unresolved')
359
+ .map((r) => `tool:${r.tool}`);
360
+ return atoms.length > 0 ? atoms.join(';') : null;
361
+ }
362
+ /** Blockers from tool runs and typed gates, before any AC question. */
363
+ function toolAndTypedGateBlockers(taskId, code, runs, typedGates, root) {
364
+ const out = [];
365
+ for (const run of runs) {
366
+ if (run.cache === 'unresolved') {
367
+ out.push({
368
+ code: 'tool-unresolved',
369
+ message: `No command resolves for tool:${run.tool} (${run.gate}): ${run.reason ?? 'unknown'}`,
370
+ next: step('cleo detect', `Re-detect the toolchain, or declare the ${run.tool} command in .cleo/project-context.json, so ${run.gate} has a real result.`),
371
+ cause: 'E_EVIDENCE_TOOL_UNAVAILABLE',
372
+ });
373
+ }
374
+ else if (run.cache === 'fresh-fail') {
375
+ out.push({
376
+ code: 'tool-failed',
377
+ message: `tool:${run.tool} failed (exit ${run.exitCode}) on the current tree; ${run.gate} cannot pass until it does.`,
378
+ next: step(`cd ${shellQuote(root)} && ${run.command}`, `Fix the failures ${run.tool} reports.`),
379
+ cause: 'E_EVIDENCE_TOOL_FAILED',
380
+ });
381
+ }
382
+ }
383
+ for (const gate of new Set(runs.map((r) => r.gate))) {
384
+ const gateRuns = runs.filter((r) => r.gate === gate);
385
+ if (code && gateRuns.every((r) => r.cache === 'not-applicable')) {
386
+ out.push({
387
+ code: 'tool-unresolved',
388
+ message: `Every tool for ${gate} is not applicable here; a code task needs an actual result.`,
389
+ next: step(`cleo verify ${taskId} --gate ${gate} --evidence 'test-run:<vitest-json-report>'`, 'A code task cannot pass on the absence of a toolchain.'),
390
+ });
391
+ }
392
+ }
393
+ for (const typed of typedGates) {
394
+ if (typed.status !== 'fail')
395
+ continue;
396
+ out.push({
397
+ code: 'typed-gate-failed',
398
+ message: `Typed gate ${typed.alias} (${typed.kind}${typed.req ? ` ${typed.req}` : ''}) last failed.`,
399
+ next: step(`cleo verify ${taskId} --run`, 'Re-run the typed gates and fix the failing one.'),
400
+ });
401
+ }
402
+ return out;
403
+ }
404
+ /** The AC blocker: criteria nobody linked, or a gate left with no linkage at all. */
405
+ function acMappingBlocker(taskId, mapping, pending) {
406
+ if (mapping.length === 0)
407
+ return null;
408
+ const unmapped = mapping.filter((m) => !m.mapped).map((m) => m.alias);
409
+ const bare = pending.filter((gate) => EVIDENCE_GATES.includes(gate) && !mapping.some((m) => m.gates.includes(gate)));
410
+ if (unmapped.length === 0 && bare.length === 0)
411
+ return null;
412
+ const ask = unmapped.length > 0 ? unmapped : mapping.map((m) => m.alias);
413
+ const parts = [
414
+ unmapped.length > 0 ? `${unmapped.join(', ')} have no deterministic evidence link` : '',
415
+ bare.length > 0 ? `${bare.join(', ')} would carry no criterion link` : '',
416
+ ].filter(Boolean);
417
+ return {
418
+ code: 'ac-mapping-needed',
419
+ message: `${parts.join('; ')}. Name the criteria this work satisfies; the claim is still bound to the validated artifacts.`,
420
+ next: step(`cleo done ${taskId} --plan --satisfies ${ask.join(',')}`, 'Answer once; the criteria fan out to every gate whose evidence covers them.'),
421
+ cause: 'E_EVIDENCE_CONTENT_MISMATCH',
422
+ };
423
+ }
424
+ /** Required gates `cleo done` cannot derive (documented, securityPassed, …). */
425
+ function manualGateBlockers(taskId, gates) {
426
+ return gates
427
+ .filter((g) => g.required && !g.passed && !EVIDENCE_GATES.includes(g.gate))
428
+ .map((g) => ({
429
+ code: 'manual-gate',
430
+ message: `${g.gate} is required and is not derived by cleo done.`,
431
+ next: step(`cleo verify ${taskId} --gate ${g.gate} --evidence '<atoms>'`, checkGateEvidenceMinimumDetailed(g.gate, [])?.message ?? `Record ${g.gate} evidence.`),
432
+ }));
433
+ }
434
+ function withSatisfies(taskId, gate, evidence, mapping) {
435
+ if (evidence === null)
436
+ return null;
437
+ const links = mapping
438
+ .filter((m) => m.gates.includes(gate))
439
+ .map((m) => `satisfies:${taskId}#${m.alias}`);
440
+ return [evidence, ...links].join(';');
441
+ }
442
+ function epicPlan(task, storeRoot) {
443
+ const blocker = {
444
+ code: 'epic-rollup',
445
+ message: `${task.id} is an epic; it completes through its children, not through derived evidence.`,
446
+ next: step(`cleo complete ${task.id}`, 'Epic completion uses the existing child rollup.'),
447
+ };
448
+ return {
449
+ taskId: task.id,
450
+ runFrom: storeRoot,
451
+ changeSet: {
452
+ source: 'none',
453
+ executionRoot: storeRoot,
454
+ rootSource: 'store',
455
+ files: [],
456
+ deletedFiles: [],
457
+ docs: [],
458
+ decisions: [],
459
+ candidates: [],
460
+ implementedEvidence: null,
461
+ blockers: [],
462
+ warnings: [],
463
+ },
464
+ gates: [],
465
+ toolRuns: [],
466
+ typedGates: [],
467
+ acMapping: [],
468
+ needsSatisfies: [],
469
+ blockers: [blocker],
470
+ commands: [],
471
+ ready: false,
472
+ next: blocker.next,
473
+ };
474
+ }
475
+ /** Normalise `--satisfies` and reject aliases the task does not have. */
476
+ function normaliseSatisfies(taskId, satisfies, rows) {
477
+ if (satisfies === undefined || satisfies === 'all')
478
+ return satisfies;
479
+ const aliases = satisfies.map((s) => s.trim().toUpperCase()).filter(Boolean);
480
+ const known = new Set(rows.map((r) => `AC${r.ordinal}`));
481
+ const unknown = aliases.filter((a) => !known.has(a));
482
+ if (unknown.length > 0) {
483
+ throw new CleoError(ExitCode.VALIDATION_ERROR, `--satisfies names criteria ${taskId} does not have: ${unknown.join(', ')}`, { fix: `cleo show ${taskId} --full # criteria: ${[...known].join(', ') || 'none'}` });
484
+ }
485
+ return aliases;
486
+ }
487
+ /**
488
+ * Plan the evidence `cleo done` would record for a task. Read-only: executes
489
+ * no tool or typed gate and writes nothing.
490
+ *
491
+ * @param taskId - Task to plan.
492
+ * @param opts - Store root, invocation directory, `--satisfies`, `--pr`.
493
+ * @returns The plan: change set, gates, tool runs, AC mapping, ordered
494
+ * blockers and the runnable commands.
495
+ * @throws CleoError(NOT_FOUND) for an unknown task; CleoError(VALIDATION_ERROR)
496
+ * for a `--satisfies` alias the task does not have.
497
+ * @example
498
+ * ```ts
499
+ * const plan = await deriveTaskEvidence('T123', { satisfies: ['AC2'] });
500
+ * for (const cmd of plan.commands) console.log(cmd);
501
+ * ```
502
+ * @task T12623
503
+ */
504
+ export async function deriveTaskEvidence(taskId, opts = {}) {
505
+ const storeRoot = opts.projectRoot ?? getProjectRoot();
506
+ const accessor = await getTaskAccessor(storeRoot);
507
+ const task = await accessor.loadSingleTask(taskId);
508
+ if (!task) {
509
+ throw new CleoError(ExitCode.NOT_FOUND, `Task ${taskId} not found`, {
510
+ fix: `cleo find "${taskId}"`,
511
+ });
512
+ }
513
+ if (task.type === 'epic')
514
+ return epicPlan(task, storeRoot);
515
+ const rows = [...(await accessor.getAcRows(taskId))].sort((a, b) => a.ordinal - b.ordinal);
516
+ const satisfies = normaliseSatisfies(taskId, opts.satisfies, rows);
517
+ const policy = await loadVerificationGatePolicy(storeRoot);
518
+ const changeSet = await deriveTaskChangeSet({ task, storeRoot, cwd: opts.cwd, prNumber: opts.prNumber }, opts.deps);
519
+ const root = changeSet.executionRoot;
520
+ // T12635 (D11150): a scope:affected testsPassed only stands before merge.
521
+ // Once the change set is a merged PR, merged CI or a full run supersedes it.
522
+ // T12656: the same rule `cleo complete` enforces (one shared function).
523
+ const supersededReason = affectedScopeSupersededReason(task.verification?.evidence?.testsPassed?.atoms ?? [], mergeStateOfChangeSet(changeSet));
524
+ const superseded = supersededReason !== null;
525
+ if (supersededReason)
526
+ changeSet.warnings.push(supersededReason);
527
+ const passed = (gate) => task.verification?.gates?.[gate] === true && !(gate === 'testsPassed' && superseded);
528
+ const pending = policy.requiredGates.filter((g) => !passed(g));
529
+ const decisionOnly = changeSet.source === 'docs' && (changeSet.implementedEvidence ?? '').startsWith('decision:');
530
+ // T12634 (D11149): a change set from a merged PR (not stacked) proves
531
+ // testsPassed/qaPassed by its merge-commit CI when the project opts in, so
532
+ // no local tool run is planned for them.
533
+ const ciPr = changeSet.source === 'pr' &&
534
+ changeSet.prNumber !== undefined &&
535
+ changeSet.stackedOn === undefined &&
536
+ readCiSatisfies(storeRoot) &&
537
+ ciPlannable(storeRoot, ![...changeSet.files, ...changeSet.deletedFiles].every(isCiDocumentPath), [...changeSet.files, ...changeSet.deletedFiles])
538
+ ? // T12671: a component landed by an integration PR is judged on the
539
+ // integration PR's CI, linked through the component.
540
+ changeSet.componentPrNumber !== undefined
541
+ ? `${changeSet.componentPrNumber}@${changeSet.prNumber}`
542
+ : String(changeSet.prNumber)
543
+ : null;
544
+ const toolRuns = [];
545
+ if (!decisionOnly && ciPr === null) {
546
+ for (const gate of pending) {
547
+ for (const tool of GATE_TOOLS[gate] ?? []) {
548
+ // T12635: before merge, test only the affected packages when declared.
549
+ // T12656 review: only when the change is KNOWN unmerged — an unknown
550
+ // merge state (gh unreachable) plans the full run complete accepts.
551
+ const affected = tool === 'test' &&
552
+ changeSet.source === 'branch' &&
553
+ mergeStateOfChangeSet(changeSet) === 'unmerged'
554
+ ? await planAffectedTestRun(storeRoot, root, { wait: opts.waitForTestSlot === true })
555
+ : null;
556
+ toolRuns.push(affected?.ok
557
+ ? await planToolRun('test-affected', gate, storeRoot, root, affected.command)
558
+ : affected?.pending
559
+ ? {
560
+ tool: 'test-affected',
561
+ gate,
562
+ command: null,
563
+ source: 'project-context',
564
+ cache: 'miss',
565
+ reason: affected.reason,
566
+ }
567
+ : await planToolRun(tool, gate, storeRoot, root));
568
+ }
569
+ }
570
+ }
571
+ const typedGates = planTypedGates(task, rows);
572
+ const acMapping = mapCriteria(task, rows, typedGates, changeSet, pending, satisfies);
573
+ const gates = policy.requiredGates.map((gate) => {
574
+ const raw = gate === 'implemented'
575
+ ? changeSet.implementedEvidence
576
+ : GATE_TOOLS[gate]
577
+ ? toolGateEvidence(gate, toolRuns, decisionOnly, ciPr)
578
+ : null;
579
+ return {
580
+ gate,
581
+ required: true,
582
+ passed: passed(gate),
583
+ evidence: passed(gate) ? null : withSatisfies(taskId, gate, raw, acMapping),
584
+ };
585
+ });
586
+ const isCode = classifyEvidenceTask({ task }) === 'code';
587
+ const acBlocker = acMappingBlocker(taskId, acMapping, pending);
588
+ const derivedBlockers = orderBlockers([
589
+ ...changeSet.blockers,
590
+ ...toolAndTypedGateBlockers(taskId, isCode, toolRuns, typedGates, root),
591
+ ...(acBlocker ? [acBlocker] : []),
592
+ ...manualGateBlockers(taskId, gates),
593
+ ]);
594
+ const cd = changeSet.rootSource === 'task-worktree' ? `cd ${shellQuote(root)} && ` : '';
595
+ // D11151: each earlier own-branch PR is its own implemented attempt, recorded
596
+ // first so the stored implemented evidence ends on the primary (latest) PR.
597
+ const additionalImplemented = passed('implemented')
598
+ ? []
599
+ : (changeSet.additionalPrs ?? []).flatMap((extra) => {
600
+ const ev = withSatisfies(taskId, 'implemented', extra.implementedEvidence, acMapping);
601
+ return ev === null ? [] : [ev];
602
+ });
603
+ const blockers = orderBlockers([
604
+ ...derivedBlockers,
605
+ ...(task.status === 'done'
606
+ ? []
607
+ : await readinessBlockers({
608
+ taskId,
609
+ storeRoot,
610
+ changeSet,
611
+ needsTree: toolRuns.length > 0 || typedGates.length > 0,
612
+ gates,
613
+ additionalImplemented,
614
+ blocked: derivedBlockers.length > 0,
615
+ preview: opts.previewEvidence ?? defaultPreviewEvidence,
616
+ })),
617
+ ]);
618
+ const commands = additionalImplemented.map((ev) => `${cd}cleo verify ${taskId} --gate implemented --evidence ${shellQuote(ev)}`);
619
+ commands.push(...gates
620
+ .filter((g) => !g.passed && g.evidence !== null)
621
+ .map((g) => `${cd}cleo verify ${taskId} --gate ${g.gate} --evidence ${shellQuote(g.evidence ?? '')}`));
622
+ if (task.status === 'done') {
623
+ changeSet.warnings.push(`${taskId} is already done; nothing is left to record.`);
624
+ }
625
+ else if (changeSet.implementedEvidence !== null || passed('implemented')) {
626
+ commands.push(`${cd}cleo complete ${taskId}`);
627
+ }
628
+ const next = blockers[0]?.next ??
629
+ (commands[0] ? step(commands[0], 'Every gate is derivable; record them in order.') : null);
630
+ return {
631
+ taskId,
632
+ runFrom: root,
633
+ changeSet,
634
+ gates,
635
+ ...(additionalImplemented.length > 0 ? { additionalImplemented } : {}),
636
+ toolRuns,
637
+ typedGates,
638
+ acMapping,
639
+ needsSatisfies: acMapping.filter((m) => !m.mapped).map((m) => m.alias),
640
+ blockers,
641
+ commands,
642
+ ready: blockers.length === 0 && commands.length > 0,
643
+ next,
644
+ };
645
+ }
646
+ /**
647
+ * {@link deriveTaskEvidence} as an {@link EngineResult}, for the CLI handler:
648
+ * a `CleoError` (unknown task, bad `--satisfies`) becomes a typed failure
649
+ * instead of a throw, so the handler stays a thin renderer.
650
+ *
651
+ * @param taskId - Task to plan.
652
+ * @param opts - Same options as {@link deriveTaskEvidence}.
653
+ * @returns The plan, or the refusal with its exit code and fix.
654
+ * @example
655
+ * ```ts
656
+ * const result = await planTaskDone('T123', { satisfies: 'all' });
657
+ * if (result.success) console.log(result.data.commands);
658
+ * ```
659
+ * @task T12623
660
+ */
661
+ export async function planTaskDone(taskId, opts = {}) {
662
+ try {
663
+ return engineSuccess(await deriveTaskEvidence(taskId, opts));
664
+ }
665
+ catch (err) {
666
+ return cleoErrorToEngineResult(err, 'E_DONE_PLAN_FAILED', 'cleo done --plan failed');
667
+ }
668
+ }
669
+ /**
670
+ * Parse the `--satisfies` / `--pr` CLI flags shared by `cleo done` and
671
+ * `cleo verify --auto` into planner options.
672
+ *
673
+ * @param satisfies - Raw `--satisfies` value (`AC1,AC3` or `all`), if given.
674
+ * @param pr - Raw `--pr` value, if given.
675
+ * @returns The options, or the refusal text for an invalid PR number.
676
+ * @example
677
+ * ```ts
678
+ * parseDoneOptions('AC1,AC3', '42'); // { ok: true, options: { satisfies: ['AC1','AC3'], prNumber: 42 } }
679
+ * ```
680
+ * @task T12625
681
+ */
682
+ export function parseDoneOptions(satisfies, pr) {
683
+ const raw = typeof satisfies === 'string' ? satisfies.trim() : '';
684
+ const prNumber = typeof pr === 'string' ? Number(pr) : undefined;
685
+ if (prNumber !== undefined && !(Number.isInteger(prNumber) && prNumber > 0)) {
686
+ return { ok: false, message: `--pr must be a positive PR number, got "${String(pr)}"` };
687
+ }
688
+ return {
689
+ ok: true,
690
+ options: {
691
+ ...(raw === '' ? {} : { satisfies: raw.toLowerCase() === 'all' ? 'all' : raw.split(',') }),
692
+ ...(prNumber !== undefined ? { prNumber } : {}),
693
+ },
694
+ };
695
+ }
696
+ //# sourceMappingURL=done-plan.js.map