@cleocode/core 2026.9.20 → 2026.9.21

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 (855) 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/bootstrap.d.ts +5 -1
  12. package/dist/bootstrap.d.ts.map +1 -1
  13. package/dist/bootstrap.js +41 -21
  14. package/dist/bootstrap.js.map +1 -1
  15. package/dist/cloud/crypto.d.ts +47 -0
  16. package/dist/cloud/crypto.d.ts.map +1 -0
  17. package/dist/cloud/crypto.js +223 -0
  18. package/dist/cloud/crypto.js.map +1 -0
  19. package/dist/cloud/http.d.ts +52 -0
  20. package/dist/cloud/http.d.ts.map +1 -0
  21. package/dist/cloud/http.js +98 -0
  22. package/dist/cloud/http.js.map +1 -0
  23. package/dist/cloud/index.d.ts +19 -0
  24. package/dist/cloud/index.d.ts.map +1 -0
  25. package/dist/cloud/index.js +19 -0
  26. package/dist/cloud/index.js.map +1 -0
  27. package/dist/cloud/journal.d.ts +169 -0
  28. package/dist/cloud/journal.d.ts.map +1 -0
  29. package/dist/cloud/journal.js +428 -0
  30. package/dist/cloud/journal.js.map +1 -0
  31. package/dist/cloud/keys.d.ts +213 -0
  32. package/dist/cloud/keys.d.ts.map +1 -0
  33. package/dist/cloud/keys.js +362 -0
  34. package/dist/cloud/keys.js.map +1 -0
  35. package/dist/cloud/manifest-check.d.ts +36 -0
  36. package/dist/cloud/manifest-check.d.ts.map +1 -0
  37. package/dist/cloud/manifest-check.js +70 -0
  38. package/dist/cloud/manifest-check.js.map +1 -0
  39. package/dist/cloud/projects.d.ts +13 -0
  40. package/dist/cloud/projects.d.ts.map +1 -0
  41. package/dist/cloud/projects.js +11 -0
  42. package/dist/cloud/projects.js.map +1 -0
  43. package/dist/cloud/signing.d.ts +105 -0
  44. package/dist/cloud/signing.d.ts.map +1 -0
  45. package/dist/cloud/signing.js +117 -0
  46. package/dist/cloud/signing.js.map +1 -0
  47. package/dist/cloud/streams.d.ts +6 -0
  48. package/dist/cloud/streams.d.ts.map +1 -0
  49. package/dist/cloud/streams.js +5 -0
  50. package/dist/cloud/streams.js.map +1 -0
  51. package/dist/decide/audit.d.ts +131 -0
  52. package/dist/decide/audit.d.ts.map +1 -0
  53. package/dist/decide/audit.js +98 -0
  54. package/dist/decide/audit.js.map +1 -0
  55. package/dist/decide/budget.d.ts +91 -0
  56. package/dist/decide/budget.d.ts.map +1 -0
  57. package/dist/decide/budget.js +194 -0
  58. package/dist/decide/budget.js.map +1 -0
  59. package/dist/decide/cache.d.ts +49 -0
  60. package/dist/decide/cache.d.ts.map +1 -0
  61. package/dist/decide/cache.js +87 -0
  62. package/dist/decide/cache.js.map +1 -0
  63. package/dist/decide/client.d.ts +103 -0
  64. package/dist/decide/client.d.ts.map +1 -0
  65. package/dist/decide/client.js +262 -0
  66. package/dist/decide/client.js.map +1 -0
  67. package/dist/decide/credentials.d.ts +159 -0
  68. package/dist/decide/credentials.d.ts.map +1 -0
  69. package/dist/decide/credentials.js +383 -0
  70. package/dist/decide/credentials.js.map +1 -0
  71. package/dist/decide/index.d.ts +18 -0
  72. package/dist/decide/index.d.ts.map +1 -0
  73. package/dist/decide/index.js +18 -0
  74. package/dist/decide/index.js.map +1 -0
  75. package/dist/decide/jev-wire.d.ts +155 -0
  76. package/dist/decide/jev-wire.d.ts.map +1 -0
  77. package/dist/decide/jev-wire.js +420 -0
  78. package/dist/decide/jev-wire.js.map +1 -0
  79. package/dist/decide/operations.d.ts +152 -0
  80. package/dist/decide/operations.d.ts.map +1 -0
  81. package/dist/decide/operations.js +199 -0
  82. package/dist/decide/operations.js.map +1 -0
  83. package/dist/decide/provider.d.ts +90 -0
  84. package/dist/decide/provider.d.ts.map +1 -0
  85. package/dist/decide/provider.js +43 -0
  86. package/dist/decide/provider.js.map +1 -0
  87. package/dist/decide/site.d.ts +148 -0
  88. package/dist/decide/site.d.ts.map +1 -0
  89. package/dist/decide/site.js +181 -0
  90. package/dist/decide/site.js.map +1 -0
  91. package/dist/decide/transport.d.ts +67 -0
  92. package/dist/decide/transport.d.ts.map +1 -0
  93. package/dist/decide/transport.js +350 -0
  94. package/dist/decide/transport.js.map +1 -0
  95. package/dist/docs/export-document.js +5908 -2436
  96. package/dist/docs/export-document.js.map +3 -3
  97. package/dist/docs/index.d.ts +2 -2
  98. package/dist/docs/index.d.ts.map +1 -1
  99. package/dist/docs/index.js +1 -1
  100. package/dist/docs/index.js.map +1 -1
  101. package/dist/docs/projection.d.ts.map +1 -1
  102. package/dist/docs/projection.js +2 -3
  103. package/dist/docs/projection.js.map +1 -1
  104. package/dist/docs/publish-pr.d.ts +69 -1
  105. package/dist/docs/publish-pr.d.ts.map +1 -1
  106. package/dist/docs/publish-pr.js +112 -10
  107. package/dist/docs/publish-pr.js.map +1 -1
  108. package/dist/doctor/db-substrate.d.ts +13 -8
  109. package/dist/doctor/db-substrate.d.ts.map +1 -1
  110. package/dist/doctor/db-substrate.js +39 -26
  111. package/dist/doctor/db-substrate.js.map +1 -1
  112. package/dist/doctor/index.d.ts +2 -0
  113. package/dist/doctor/index.d.ts.map +1 -1
  114. package/dist/doctor/index.js +1 -0
  115. package/dist/doctor/index.js.map +1 -1
  116. package/dist/doctor/knowledge.d.ts.map +1 -1
  117. package/dist/doctor/knowledge.js +5 -15
  118. package/dist/doctor/knowledge.js.map +1 -1
  119. package/dist/doctor/nexus-schema-residency.d.ts +1 -1
  120. package/dist/doctor/nexus-schema-residency.d.ts.map +1 -1
  121. package/dist/doctor/nexus-schema-residency.js +3 -0
  122. package/dist/doctor/nexus-schema-residency.js.map +1 -1
  123. package/dist/doctor/project-identity.d.ts +44 -1
  124. package/dist/doctor/project-identity.d.ts.map +1 -1
  125. package/dist/doctor/project-identity.js +237 -10
  126. package/dist/doctor/project-identity.js.map +1 -1
  127. package/dist/doctor/projects.d.ts +170 -0
  128. package/dist/doctor/projects.d.ts.map +1 -0
  129. package/dist/doctor/projects.js +1075 -0
  130. package/dist/doctor/projects.js.map +1 -0
  131. package/dist/doctor/twin-collapse.d.ts +97 -0
  132. package/dist/doctor/twin-collapse.d.ts.map +1 -0
  133. package/dist/doctor/twin-collapse.js +168 -0
  134. package/dist/doctor/twin-collapse.js.map +1 -0
  135. package/dist/doctor/worktree-orphans.d.ts.map +1 -1
  136. package/dist/doctor/worktree-orphans.js +13 -29
  137. package/dist/doctor/worktree-orphans.js.map +1 -1
  138. package/dist/doctor/worktree-stores.d.ts +128 -0
  139. package/dist/doctor/worktree-stores.d.ts.map +1 -0
  140. package/dist/doctor/worktree-stores.js +374 -0
  141. package/dist/doctor/worktree-stores.js.map +1 -0
  142. package/dist/error-catalog.d.ts.map +1 -1
  143. package/dist/error-catalog.js +21 -0
  144. package/dist/error-catalog.js.map +1 -1
  145. package/dist/error-registry.d.ts.map +1 -1
  146. package/dist/error-registry.js +40 -0
  147. package/dist/error-registry.js.map +1 -1
  148. package/dist/gc/cleanup.d.ts.map +1 -1
  149. package/dist/gc/cleanup.js +32 -19
  150. package/dist/gc/cleanup.js.map +1 -1
  151. package/dist/git/bounded-git.d.ts +170 -0
  152. package/dist/git/bounded-git.d.ts.map +1 -0
  153. package/dist/git/bounded-git.js +371 -0
  154. package/dist/git/bounded-git.js.map +1 -0
  155. package/dist/git/work-tree.d.ts +20 -0
  156. package/dist/git/work-tree.d.ts.map +1 -1
  157. package/dist/git/work-tree.js +20 -2
  158. package/dist/git/work-tree.js.map +1 -1
  159. package/dist/hooks/handlers/session-hooks.d.ts +11 -26
  160. package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
  161. package/dist/hooks/handlers/session-hooks.js +18 -47
  162. package/dist/hooks/handlers/session-hooks.js.map +1 -1
  163. package/dist/hooks/payload-schemas.d.ts +2 -2
  164. package/dist/index.d.ts +6 -5
  165. package/dist/index.d.ts.map +1 -1
  166. package/dist/index.js +5 -3
  167. package/dist/index.js.map +1 -1
  168. package/dist/init/engine-ops.d.ts.map +1 -1
  169. package/dist/init/engine-ops.js +23 -1
  170. package/dist/init/engine-ops.js.map +1 -1
  171. package/dist/init.d.ts +158 -1
  172. package/dist/init.d.ts.map +1 -1
  173. package/dist/init.js +527 -42
  174. package/dist/init.js.map +1 -1
  175. package/dist/injection.d.ts +55 -0
  176. package/dist/injection.d.ts.map +1 -1
  177. package/dist/injection.js +102 -6
  178. package/dist/injection.js.map +1 -1
  179. package/dist/internal.d.ts +9 -5
  180. package/dist/internal.d.ts.map +1 -1
  181. package/dist/internal.js +8 -4
  182. package/dist/internal.js.map +1 -1
  183. package/dist/issue/diagnostics.d.ts.map +1 -1
  184. package/dist/issue/diagnostics.js +2 -1
  185. package/dist/issue/diagnostics.js.map +1 -1
  186. package/dist/lib/concurrency.d.ts +25 -0
  187. package/dist/lib/concurrency.d.ts.map +1 -0
  188. package/dist/lib/concurrency.js +43 -0
  189. package/dist/lib/concurrency.js.map +1 -0
  190. package/dist/lib/index.d.ts +1 -0
  191. package/dist/lib/index.d.ts.map +1 -1
  192. package/dist/lib/index.js +1 -0
  193. package/dist/lib/index.js.map +1 -1
  194. package/dist/lifecycle/engine-ops.d.ts.map +1 -1
  195. package/dist/lifecycle/engine-ops.js +4 -2
  196. package/dist/lifecycle/engine-ops.js.map +1 -1
  197. package/dist/lifecycle/stage-guidance.d.ts +5 -0
  198. package/dist/lifecycle/stage-guidance.d.ts.map +1 -1
  199. package/dist/lifecycle/stage-guidance.js +14 -4
  200. package/dist/lifecycle/stage-guidance.js.map +1 -1
  201. package/dist/llm/catalog-cache.d.ts +3 -2
  202. package/dist/llm/catalog-cache.d.ts.map +1 -1
  203. package/dist/llm/catalog-cache.js +5 -5
  204. package/dist/llm/catalog-cache.js.map +1 -1
  205. package/dist/llm/credentials.d.ts +4 -4
  206. package/dist/llm/credentials.js +6 -6
  207. package/dist/llm/credentials.js.map +1 -1
  208. package/dist/llm/plugin-facade.js +4312 -1798
  209. package/dist/llm/plugin-facade.js.map +3 -3
  210. package/dist/llm/stable-device-id.d.ts.map +1 -1
  211. package/dist/llm/stable-device-id.js +3 -5
  212. package/dist/llm/stable-device-id.js.map +1 -1
  213. package/dist/memory/attention.d.ts.map +1 -1
  214. package/dist/memory/attention.js +30 -30
  215. package/dist/memory/attention.js.map +1 -1
  216. package/dist/memory/decision-contradiction.d.ts +152 -0
  217. package/dist/memory/decision-contradiction.d.ts.map +1 -0
  218. package/dist/memory/decision-contradiction.js +273 -0
  219. package/dist/memory/decision-contradiction.js.map +1 -0
  220. package/dist/memory/decisions.d.ts +42 -11
  221. package/dist/memory/decisions.d.ts.map +1 -1
  222. package/dist/memory/decisions.js +153 -56
  223. package/dist/memory/decisions.js.map +1 -1
  224. package/dist/memory/dialectic-evaluator.d.ts +7 -0
  225. package/dist/memory/dialectic-evaluator.d.ts.map +1 -1
  226. package/dist/memory/dialectic-evaluator.js +23 -8
  227. package/dist/memory/dialectic-evaluator.js.map +1 -1
  228. package/dist/memory/dispatch-trace-format.d.ts +39 -0
  229. package/dist/memory/dispatch-trace-format.d.ts.map +1 -0
  230. package/dist/memory/dispatch-trace-format.js +54 -0
  231. package/dist/memory/dispatch-trace-format.js.map +1 -0
  232. package/dist/memory/dispatch-trace.d.ts.map +1 -1
  233. package/dist/memory/dispatch-trace.js +1 -27
  234. package/dist/memory/dispatch-trace.js.map +1 -1
  235. package/dist/memory/engine-compat.d.ts +2 -0
  236. package/dist/memory/engine-compat.d.ts.map +1 -1
  237. package/dist/memory/engine-compat.js +1 -0
  238. package/dist/memory/engine-compat.js.map +1 -1
  239. package/dist/memory/import-from-provider.js +3 -3
  240. package/dist/memory/import-from-provider.js.map +1 -1
  241. package/dist/memory/learnings.d.ts +2 -2
  242. package/dist/memory/observation-type-decision.d.ts +96 -0
  243. package/dist/memory/observation-type-decision.d.ts.map +1 -0
  244. package/dist/memory/observation-type-decision.js +218 -0
  245. package/dist/memory/observation-type-decision.js.map +1 -0
  246. package/dist/memory/redaction.js +2 -0
  247. package/dist/memory/redaction.js.map +1 -1
  248. package/dist/memory/retrieval/build-retrieval-bundle.d.ts +9 -2
  249. package/dist/memory/retrieval/build-retrieval-bundle.d.ts.map +1 -1
  250. package/dist/memory/retrieval/build-retrieval-bundle.js +42 -11
  251. package/dist/memory/retrieval/build-retrieval-bundle.js.map +1 -1
  252. package/dist/memory/retrieval/get-current-session-id.d.ts +5 -0
  253. package/dist/memory/retrieval/get-current-session-id.d.ts.map +1 -1
  254. package/dist/memory/retrieval/get-current-session-id.js +7 -2
  255. package/dist/memory/retrieval/get-current-session-id.js.map +1 -1
  256. package/dist/memory/retrieval/observe.d.ts.map +1 -1
  257. package/dist/memory/retrieval/observe.js +30 -29
  258. package/dist/memory/retrieval/observe.js.map +1 -1
  259. package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
  260. package/dist/nexus/analyze-orchestrator.js +42 -29
  261. package/dist/nexus/analyze-orchestrator.js.map +1 -1
  262. package/dist/nexus/assessment-projection.d.ts +76 -0
  263. package/dist/nexus/assessment-projection.d.ts.map +1 -0
  264. package/dist/nexus/assessment-projection.js +143 -0
  265. package/dist/nexus/assessment-projection.js.map +1 -0
  266. package/dist/nexus/assessment-store.d.ts +14 -2
  267. package/dist/nexus/assessment-store.d.ts.map +1 -1
  268. package/dist/nexus/assessment-store.js +21 -3
  269. package/dist/nexus/assessment-store.js.map +1 -1
  270. package/dist/nexus/checkout-nonce.d.ts +48 -0
  271. package/dist/nexus/checkout-nonce.d.ts.map +1 -0
  272. package/dist/nexus/checkout-nonce.js +84 -0
  273. package/dist/nexus/checkout-nonce.js.map +1 -0
  274. package/dist/nexus/devices.d.ts +93 -0
  275. package/dist/nexus/devices.d.ts.map +1 -0
  276. package/dist/nexus/devices.js +141 -0
  277. package/dist/nexus/devices.js.map +1 -0
  278. package/dist/nexus/freshness.d.ts.map +1 -1
  279. package/dist/nexus/freshness.js +25 -6
  280. package/dist/nexus/freshness.js.map +1 -1
  281. package/dist/nexus/git-state.d.ts +225 -0
  282. package/dist/nexus/git-state.d.ts.map +1 -0
  283. package/dist/nexus/git-state.js +677 -0
  284. package/dist/nexus/git-state.js.map +1 -0
  285. package/dist/nexus/graph-manifest.d.ts +20 -4
  286. package/dist/nexus/graph-manifest.d.ts.map +1 -1
  287. package/dist/nexus/graph-manifest.js +40 -5
  288. package/dist/nexus/graph-manifest.js.map +1 -1
  289. package/dist/nexus/identity.d.ts +68 -23
  290. package/dist/nexus/identity.d.ts.map +1 -1
  291. package/dist/nexus/identity.js +99 -22
  292. package/dist/nexus/identity.js.map +1 -1
  293. package/dist/nexus/index.d.ts +5 -2
  294. package/dist/nexus/index.d.ts.map +1 -1
  295. package/dist/nexus/index.js +10 -4
  296. package/dist/nexus/index.js.map +1 -1
  297. package/dist/nexus/knowledge.d.ts +5 -0
  298. package/dist/nexus/knowledge.d.ts.map +1 -1
  299. package/dist/nexus/knowledge.js +26 -2
  300. package/dist/nexus/knowledge.js.map +1 -1
  301. package/dist/nexus/legacy-alias.d.ts +60 -0
  302. package/dist/nexus/legacy-alias.d.ts.map +1 -0
  303. package/dist/nexus/legacy-alias.js +68 -0
  304. package/dist/nexus/legacy-alias.js.map +1 -0
  305. package/dist/nexus/migrate-json-to-sqlite.js +2 -2
  306. package/dist/nexus/migrate-json-to-sqlite.js.map +1 -1
  307. package/dist/nexus/ops.d.ts +1 -0
  308. package/dist/nexus/ops.d.ts.map +1 -1
  309. package/dist/nexus/path-map.d.ts +264 -20
  310. package/dist/nexus/path-map.d.ts.map +1 -1
  311. package/dist/nexus/path-map.js +580 -44
  312. package/dist/nexus/path-map.js.map +1 -1
  313. package/dist/nexus/projects-clean.d.ts +9 -1
  314. package/dist/nexus/projects-clean.d.ts.map +1 -1
  315. package/dist/nexus/projects-clean.js +126 -14
  316. package/dist/nexus/projects-clean.js.map +1 -1
  317. package/dist/nexus/projects-scan.d.ts +56 -1
  318. package/dist/nexus/projects-scan.d.ts.map +1 -1
  319. package/dist/nexus/projects-scan.js +144 -3
  320. package/dist/nexus/projects-scan.js.map +1 -1
  321. package/dist/nexus/registry-hygiene.d.ts +18 -2
  322. package/dist/nexus/registry-hygiene.d.ts.map +1 -1
  323. package/dist/nexus/registry-hygiene.js +37 -11
  324. package/dist/nexus/registry-hygiene.js.map +1 -1
  325. package/dist/nexus/registry-roots.d.ts +47 -0
  326. package/dist/nexus/registry-roots.d.ts.map +1 -0
  327. package/dist/nexus/registry-roots.js +79 -0
  328. package/dist/nexus/registry-roots.js.map +1 -0
  329. package/dist/nexus/registry.d.ts +50 -9
  330. package/dist/nexus/registry.d.ts.map +1 -1
  331. package/dist/nexus/registry.js +311 -156
  332. package/dist/nexus/registry.js.map +1 -1
  333. package/dist/nexus/stored-roots.d.ts +106 -0
  334. package/dist/nexus/stored-roots.d.ts.map +1 -0
  335. package/dist/nexus/stored-roots.js +180 -0
  336. package/dist/nexus/stored-roots.js.map +1 -0
  337. package/dist/nexus/transfer.d.ts.map +1 -1
  338. package/dist/nexus/transfer.js +3 -0
  339. package/dist/nexus/transfer.js.map +1 -1
  340. package/dist/nexus/user-profile-hygiene.d.ts +168 -0
  341. package/dist/nexus/user-profile-hygiene.d.ts.map +1 -0
  342. package/dist/nexus/user-profile-hygiene.js +305 -0
  343. package/dist/nexus/user-profile-hygiene.js.map +1 -0
  344. package/dist/nexus/user-profile.d.ts +53 -2
  345. package/dist/nexus/user-profile.d.ts.map +1 -1
  346. package/dist/nexus/user-profile.js +106 -4
  347. package/dist/nexus/user-profile.js.map +1 -1
  348. package/dist/orchestrate/pivot.d.ts.map +1 -1
  349. package/dist/orchestrate/pivot.js +5 -1
  350. package/dist/orchestrate/pivot.js.map +1 -1
  351. package/dist/orchestrate/spawn-ops.d.ts +12 -0
  352. package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
  353. package/dist/orchestrate/spawn-ops.js +152 -57
  354. package/dist/orchestrate/spawn-ops.js.map +1 -1
  355. package/dist/orchestration/classify-readiness.d.ts +37 -1
  356. package/dist/orchestration/classify-readiness.d.ts.map +1 -1
  357. package/dist/orchestration/classify-readiness.js +48 -19
  358. package/dist/orchestration/classify-readiness.js.map +1 -1
  359. package/dist/orchestration/index.d.ts +3 -2
  360. package/dist/orchestration/index.d.ts.map +1 -1
  361. package/dist/orchestration/index.js +2 -1
  362. package/dist/orchestration/index.js.map +1 -1
  363. package/dist/orchestration/owner-decision-readiness.d.ts +88 -0
  364. package/dist/orchestration/owner-decision-readiness.d.ts.map +1 -0
  365. package/dist/orchestration/owner-decision-readiness.js +152 -0
  366. package/dist/orchestration/owner-decision-readiness.js.map +1 -0
  367. package/dist/orchestration/psyche-memory-budget.d.ts +105 -0
  368. package/dist/orchestration/psyche-memory-budget.d.ts.map +1 -0
  369. package/dist/orchestration/psyche-memory-budget.js +383 -0
  370. package/dist/orchestration/psyche-memory-budget.js.map +1 -0
  371. package/dist/orchestration/spawn-prompt.d.ts +12 -1
  372. package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
  373. package/dist/orchestration/spawn-prompt.js +141 -179
  374. package/dist/orchestration/spawn-prompt.js.map +1 -1
  375. package/dist/orchestration/spawn.d.ts +7 -0
  376. package/dist/orchestration/spawn.d.ts.map +1 -1
  377. package/dist/orchestration/spawn.js +1 -0
  378. package/dist/orchestration/spawn.js.map +1 -1
  379. package/dist/paths.d.ts +24 -8
  380. package/dist/paths.d.ts.map +1 -1
  381. package/dist/paths.js +135 -71
  382. package/dist/paths.js.map +1 -1
  383. package/dist/platform.d.ts +6 -1
  384. package/dist/platform.d.ts.map +1 -1
  385. package/dist/platform.js +8 -19
  386. package/dist/platform.js.map +1 -1
  387. package/dist/project-info.d.ts +18 -0
  388. package/dist/project-info.d.ts.map +1 -1
  389. package/dist/project-info.js +29 -1
  390. package/dist/project-info.js.map +1 -1
  391. package/dist/project-lifecycle.d.ts +91 -32
  392. package/dist/project-lifecycle.d.ts.map +1 -1
  393. package/dist/project-lifecycle.js +639 -75
  394. package/dist/project-lifecycle.js.map +1 -1
  395. package/dist/project-scope.d.ts +86 -4
  396. package/dist/project-scope.d.ts.map +1 -1
  397. package/dist/project-scope.js +226 -13
  398. package/dist/project-scope.js.map +1 -1
  399. package/dist/project-tombstone.d.ts +111 -0
  400. package/dist/project-tombstone.d.ts.map +1 -0
  401. package/dist/project-tombstone.js +220 -0
  402. package/dist/project-tombstone.js.map +1 -0
  403. package/dist/release/artifacts.d.ts.map +1 -1
  404. package/dist/release/artifacts.js +14 -9
  405. package/dist/release/artifacts.js.map +1 -1
  406. package/dist/release/ci-evidence.d.ts +223 -0
  407. package/dist/release/ci-evidence.d.ts.map +1 -0
  408. package/dist/release/ci-evidence.js +652 -0
  409. package/dist/release/ci-evidence.js.map +1 -0
  410. package/dist/release/engine-ops.d.ts.map +1 -1
  411. package/dist/release/engine-ops.js +3 -3
  412. package/dist/release/engine-ops.js.map +1 -1
  413. package/dist/release/plan.d.ts.map +1 -1
  414. package/dist/release/plan.js +7 -6
  415. package/dist/release/plan.js.map +1 -1
  416. package/dist/release/pr-evidence.d.ts +38 -0
  417. package/dist/release/pr-evidence.d.ts.map +1 -1
  418. package/dist/release/pr-evidence.js +67 -11
  419. package/dist/release/pr-evidence.js.map +1 -1
  420. package/dist/release/reconcile.d.ts.map +1 -1
  421. package/dist/release/reconcile.js +3 -2
  422. package/dist/release/reconcile.js.map +1 -1
  423. package/dist/release/release-manifest.d.ts +2 -1
  424. package/dist/release/release-manifest.d.ts.map +1 -1
  425. package/dist/release/release-manifest.js +6 -5
  426. package/dist/release/release-manifest.js.map +1 -1
  427. package/dist/render/nexus/graph/index.d.ts +4 -0
  428. package/dist/render/nexus/graph/index.d.ts.map +1 -1
  429. package/dist/render/nexus/graph/index.js +57 -0
  430. package/dist/render/nexus/graph/index.js.map +1 -1
  431. package/dist/resources/spawn-wrapper.d.ts +8 -1
  432. package/dist/resources/spawn-wrapper.d.ts.map +1 -1
  433. package/dist/resources/spawn-wrapper.js +42 -5
  434. package/dist/resources/spawn-wrapper.js.map +1 -1
  435. package/dist/routing/build-command-groups.d.ts.map +1 -1
  436. package/dist/routing/build-command-groups.js +1 -0
  437. package/dist/routing/build-command-groups.js.map +1 -1
  438. package/dist/sagas/index.d.ts +1 -1
  439. package/dist/sagas/index.d.ts.map +1 -1
  440. package/dist/sagas/index.js +1 -1
  441. package/dist/sagas/index.js.map +1 -1
  442. package/dist/sagas/reconcile.d.ts +24 -4
  443. package/dist/sagas/reconcile.d.ts.map +1 -1
  444. package/dist/sagas/reconcile.js +226 -100
  445. package/dist/sagas/reconcile.js.map +1 -1
  446. package/dist/scaffold/ensure-config.d.ts.map +1 -1
  447. package/dist/scaffold/ensure-config.js +31 -1
  448. package/dist/scaffold/ensure-config.js.map +1 -1
  449. package/dist/scaffold/project-identity.d.ts +2 -8
  450. package/dist/scaffold/project-identity.d.ts.map +1 -1
  451. package/dist/scaffold/project-identity.js +5 -21
  452. package/dist/scaffold/project-identity.js.map +1 -1
  453. package/dist/security/input-sanitization.d.ts +9 -1
  454. package/dist/security/input-sanitization.d.ts.map +1 -1
  455. package/dist/security/input-sanitization.js +12 -2
  456. package/dist/security/input-sanitization.js.map +1 -1
  457. package/dist/selfimprove/fix-gen.js +4321 -1807
  458. package/dist/selfimprove/fix-gen.js.map +3 -3
  459. package/dist/sentient/propose-tick.d.ts.map +1 -1
  460. package/dist/sentient/propose-tick.js +4 -2
  461. package/dist/sentient/propose-tick.js.map +1 -1
  462. package/dist/sequence/index.d.ts.map +1 -1
  463. package/dist/sequence/index.js +6 -23
  464. package/dist/sequence/index.js.map +1 -1
  465. package/dist/session/engine-ops.d.ts +9 -0
  466. package/dist/session/engine-ops.d.ts.map +1 -1
  467. package/dist/session/engine-ops.js +110 -18
  468. package/dist/session/engine-ops.js.map +1 -1
  469. package/dist/sessions/assumptions.d.ts.map +1 -1
  470. package/dist/sessions/assumptions.js +7 -4
  471. package/dist/sessions/assumptions.js.map +1 -1
  472. package/dist/sessions/briefing.d.ts +6 -0
  473. package/dist/sessions/briefing.d.ts.map +1 -1
  474. package/dist/sessions/briefing.js +12 -1
  475. package/dist/sessions/briefing.js.map +1 -1
  476. package/dist/sessions/decisions.d.ts +38 -3
  477. package/dist/sessions/decisions.d.ts.map +1 -1
  478. package/dist/sessions/decisions.js +235 -21
  479. package/dist/sessions/decisions.js.map +1 -1
  480. package/dist/sessions/drift-watchdog.d.ts.map +1 -1
  481. package/dist/sessions/drift-watchdog.js +4 -2
  482. package/dist/sessions/drift-watchdog.js.map +1 -1
  483. package/dist/sessions/index.d.ts.map +1 -1
  484. package/dist/sessions/index.js +33 -4
  485. package/dist/sessions/index.js.map +1 -1
  486. package/dist/sessions/session-end-snapshot-entry.d.ts +26 -0
  487. package/dist/sessions/session-end-snapshot-entry.d.ts.map +1 -0
  488. package/dist/sessions/session-end-snapshot-entry.js +59 -0
  489. package/dist/sessions/session-end-snapshot-entry.js.map +1 -0
  490. package/dist/sessions/session-end-snapshot.d.ts +114 -0
  491. package/dist/sessions/session-end-snapshot.d.ts.map +1 -0
  492. package/dist/sessions/session-end-snapshot.js +446 -0
  493. package/dist/sessions/session-end-snapshot.js.map +1 -0
  494. package/dist/sessions/session-manifest-mirror.d.ts.map +1 -1
  495. package/dist/sessions/session-manifest-mirror.js +10 -17
  496. package/dist/sessions/session-manifest-mirror.js.map +1 -1
  497. package/dist/sessions/session-switch.d.ts.map +1 -1
  498. package/dist/sessions/session-switch.js +5 -3
  499. package/dist/sessions/session-switch.js.map +1 -1
  500. package/dist/sessions/snapshot.d.ts.map +1 -1
  501. package/dist/sessions/snapshot.js +5 -4
  502. package/dist/sessions/snapshot.js.map +1 -1
  503. package/dist/sessions/terminal-identity.d.ts +169 -0
  504. package/dist/sessions/terminal-identity.d.ts.map +1 -0
  505. package/dist/sessions/terminal-identity.js +273 -0
  506. package/dist/sessions/terminal-identity.js.map +1 -0
  507. package/dist/setup/sections/verification.d.ts +1 -1
  508. package/dist/setup/sections/verification.d.ts.map +1 -1
  509. package/dist/setup/sections/verification.js +11 -15
  510. package/dist/setup/sections/verification.js.map +1 -1
  511. package/dist/skills/discovery.d.ts +8 -2
  512. package/dist/skills/discovery.d.ts.map +1 -1
  513. package/dist/skills/discovery.js +15 -3
  514. package/dist/skills/discovery.js.map +1 -1
  515. package/dist/skills/dispatch.d.ts +5 -2
  516. package/dist/skills/dispatch.d.ts.map +1 -1
  517. package/dist/skills/dispatch.js +5 -2
  518. package/dist/skills/dispatch.js.map +1 -1
  519. package/dist/skills/doctor.d.ts.map +1 -1
  520. package/dist/skills/doctor.js +5 -1
  521. package/dist/skills/doctor.js.map +1 -1
  522. package/dist/skills/federated-search.js +2 -2
  523. package/dist/skills/federated-search.js.map +1 -1
  524. package/dist/skills/index.d.ts +3 -3
  525. package/dist/skills/index.d.ts.map +1 -1
  526. package/dist/skills/index.js +1 -1
  527. package/dist/skills/index.js.map +1 -1
  528. package/dist/skills/migration.d.ts +5 -5
  529. package/dist/skills/migration.d.ts.map +1 -1
  530. package/dist/skills/migration.js +7 -9
  531. package/dist/skills/migration.js.map +1 -1
  532. package/dist/skills/orchestrator/startup.d.ts.map +1 -1
  533. package/dist/skills/orchestrator/startup.js +4 -2
  534. package/dist/skills/orchestrator/startup.js.map +1 -1
  535. package/dist/skills/skill-paths.d.ts +30 -3
  536. package/dist/skills/skill-paths.d.ts.map +1 -1
  537. package/dist/skills/skill-paths.js +28 -9
  538. package/dist/skills/skill-paths.js.map +1 -1
  539. package/dist/skills/skill-root.d.ts +60 -11
  540. package/dist/skills/skill-root.d.ts.map +1 -1
  541. package/dist/skills/skill-root.js +100 -14
  542. package/dist/skills/skill-root.js.map +1 -1
  543. package/dist/skills/skills-guard.js +5 -5
  544. package/dist/skills/skills-guard.js.map +1 -1
  545. package/dist/skills/types.d.ts +23 -0
  546. package/dist/skills/types.d.ts.map +1 -1
  547. package/dist/skills/types.js.map +1 -1
  548. package/dist/spawn/agent-identity.d.ts +51 -2
  549. package/dist/spawn/agent-identity.d.ts.map +1 -1
  550. package/dist/spawn/agent-identity.js +89 -26
  551. package/dist/spawn/agent-identity.js.map +1 -1
  552. package/dist/spawn/branch-lock.d.ts.map +1 -1
  553. package/dist/spawn/branch-lock.js +56 -79
  554. package/dist/spawn/branch-lock.js.map +1 -1
  555. package/dist/spawn/index.d.ts +2 -2
  556. package/dist/spawn/index.d.ts.map +1 -1
  557. package/dist/spawn/index.js +1 -1
  558. package/dist/spawn/index.js.map +1 -1
  559. package/dist/spawn/worktree-lock-holder.d.ts +37 -0
  560. package/dist/spawn/worktree-lock-holder.d.ts.map +1 -0
  561. package/dist/spawn/worktree-lock-holder.js +41 -0
  562. package/dist/spawn/worktree-lock-holder.js.map +1 -0
  563. package/dist/sticky/convert.d.ts.map +1 -1
  564. package/dist/sticky/convert.js +16 -4
  565. package/dist/sticky/convert.js.map +1 -1
  566. package/dist/store/attachment-store.d.ts +14 -0
  567. package/dist/store/attachment-store.d.ts.map +1 -1
  568. package/dist/store/attachment-store.js +11 -1
  569. package/dist/store/attachment-store.js.map +1 -1
  570. package/dist/store/backup-inspect.d.ts +7 -3
  571. package/dist/store/backup-inspect.d.ts.map +1 -1
  572. package/dist/store/backup-inspect.js +18 -7
  573. package/dist/store/backup-inspect.js.map +1 -1
  574. package/dist/store/backup-sidecar.d.ts +60 -0
  575. package/dist/store/backup-sidecar.d.ts.map +1 -0
  576. package/dist/store/backup-sidecar.js +96 -0
  577. package/dist/store/backup-sidecar.js.map +1 -0
  578. package/dist/store/data-accessor.d.ts +1 -1
  579. package/dist/store/data-accessor.d.ts.map +1 -1
  580. package/dist/store/data-accessor.js +6 -6
  581. package/dist/store/data-accessor.js.map +1 -1
  582. package/dist/store/data-safety-central.d.ts +13 -4
  583. package/dist/store/data-safety-central.d.ts.map +1 -1
  584. package/dist/store/data-safety-central.js +31 -4
  585. package/dist/store/data-safety-central.js.map +1 -1
  586. package/dist/store/dual-scope-db.d.ts.map +1 -1
  587. package/dist/store/dual-scope-db.js +10 -0
  588. package/dist/store/dual-scope-db.js.map +1 -1
  589. package/dist/store/exodus/__fixtures__/representative-fixture.d.ts.map +1 -1
  590. package/dist/store/exodus/__fixtures__/representative-fixture.js +4 -0
  591. package/dist/store/exodus/__fixtures__/representative-fixture.js.map +1 -1
  592. package/dist/store/exodus/migrate.js +1 -1
  593. package/dist/store/exodus/migrate.js.map +1 -1
  594. package/dist/store/exodus/reconcile.js +1 -1
  595. package/dist/store/exodus/reconcile.js.map +1 -1
  596. package/dist/store/exodus/runtime-targets.d.ts +4 -3
  597. package/dist/store/exodus/runtime-targets.d.ts.map +1 -1
  598. package/dist/store/exodus/runtime-targets.js +4 -3
  599. package/dist/store/exodus/runtime-targets.js.map +1 -1
  600. package/dist/store/import-logging.d.ts.map +1 -1
  601. package/dist/store/import-logging.js +5 -4
  602. package/dist/store/import-logging.js.map +1 -1
  603. package/dist/store/legacy-tasks-lineage.d.ts.map +1 -1
  604. package/dist/store/legacy-tasks-lineage.js +2 -7
  605. package/dist/store/legacy-tasks-lineage.js.map +1 -1
  606. package/dist/store/lock.d.ts +1 -0
  607. package/dist/store/lock.d.ts.map +1 -1
  608. package/dist/store/lock.js +1 -0
  609. package/dist/store/lock.js.map +1 -1
  610. package/dist/store/memory-accessor.d.ts +8 -3
  611. package/dist/store/memory-accessor.d.ts.map +1 -1
  612. package/dist/store/memory-accessor.js +29 -13
  613. package/dist/store/memory-accessor.js.map +1 -1
  614. package/dist/store/memory-sqlite.d.ts.map +1 -1
  615. package/dist/store/memory-sqlite.js +5 -0
  616. package/dist/store/memory-sqlite.js.map +1 -1
  617. package/dist/store/open-cleo-db.d.ts.map +1 -1
  618. package/dist/store/open-cleo-db.js +11 -6
  619. package/dist/store/open-cleo-db.js.map +1 -1
  620. package/dist/store/portable-bundle-relocate.d.ts +13 -8
  621. package/dist/store/portable-bundle-relocate.d.ts.map +1 -1
  622. package/dist/store/portable-bundle-relocate.js +75 -31
  623. package/dist/store/portable-bundle-relocate.js.map +1 -1
  624. package/dist/store/portable-bundle-scan.d.ts.map +1 -1
  625. package/dist/store/portable-bundle-scan.js +2 -1
  626. package/dist/store/portable-bundle-scan.js.map +1 -1
  627. package/dist/store/portable-bundle.d.ts.map +1 -1
  628. package/dist/store/portable-bundle.js +7 -3
  629. package/dist/store/portable-bundle.js.map +1 -1
  630. package/dist/store/pre-repair-snapshot.d.ts +77 -0
  631. package/dist/store/pre-repair-snapshot.d.ts.map +1 -0
  632. package/dist/store/pre-repair-snapshot.js +122 -0
  633. package/dist/store/pre-repair-snapshot.js.map +1 -0
  634. package/dist/store/regenerators.d.ts +2 -1
  635. package/dist/store/regenerators.d.ts.map +1 -1
  636. package/dist/store/regenerators.js +17 -3
  637. package/dist/store/regenerators.js.map +1 -1
  638. package/dist/store/relocated-store-guard.d.ts +71 -0
  639. package/dist/store/relocated-store-guard.d.ts.map +1 -0
  640. package/dist/store/relocated-store-guard.js +138 -0
  641. package/dist/store/relocated-store-guard.js.map +1 -0
  642. package/dist/store/safety-data-accessor.d.ts +2 -2
  643. package/dist/store/safety-data-accessor.d.ts.map +1 -1
  644. package/dist/store/safety-data-accessor.js +2 -2
  645. package/dist/store/safety-data-accessor.js.map +1 -1
  646. package/dist/store/schema/attachments.d.ts +2 -2
  647. package/dist/store/schema/audit.d.ts +5 -5
  648. package/dist/store/schema/background-jobs.d.ts +1 -1
  649. package/dist/store/schema/cleo-global/models-catalog.d.ts +1 -1
  650. package/dist/store/schema/cleo-global/nexus.d.ts +686 -0
  651. package/dist/store/schema/cleo-global/nexus.d.ts.map +1 -1
  652. package/dist/store/schema/cleo-global/nexus.js +175 -7
  653. package/dist/store/schema/cleo-global/nexus.js.map +1 -1
  654. package/dist/store/schema/cleo-global/skills.d.ts +2 -2
  655. package/dist/store/schema/cleo-project/audit.d.ts +5 -5
  656. package/dist/store/schema/cleo-project/docs.d.ts +3 -3
  657. package/dist/store/schema/cleo-project/lifecycle.d.ts +3 -3
  658. package/dist/store/schema/cleo-project/provenance-commits.d.ts +2 -2
  659. package/dist/store/schema/cleo-project/provenance-rest.d.ts +3 -3
  660. package/dist/store/schema/cleo-project/tasks-core-batch2.d.ts +1 -1
  661. package/dist/store/schema/cleo-project/tasks-core.d.ts +6 -6
  662. package/dist/store/schema/cleo-shared/brain.d.ts +26 -26
  663. package/dist/store/schema/lifecycle.d.ts +3 -3
  664. package/dist/store/schema/manifest.d.ts +1 -1
  665. package/dist/store/schema/memory-schema.d.ts +26 -26
  666. package/dist/store/schema/nexus-schema.d.ts +696 -2
  667. package/dist/store/schema/nexus-schema.d.ts.map +1 -1
  668. package/dist/store/schema/nexus-schema.js +175 -19
  669. package/dist/store/schema/nexus-schema.js.map +1 -1
  670. package/dist/store/schema/provenance/releases.d.ts +1 -1
  671. package/dist/store/schema/skills-schema.d.ts +2 -2
  672. package/dist/store/schema/tasks.d.ts +5 -5
  673. package/dist/store/session-binding-schema.d.ts +132 -0
  674. package/dist/store/session-binding-schema.d.ts.map +1 -0
  675. package/dist/store/session-binding-schema.js +53 -0
  676. package/dist/store/session-binding-schema.js.map +1 -0
  677. package/dist/store/session-store.d.ts +262 -4
  678. package/dist/store/session-store.d.ts.map +1 -1
  679. package/dist/store/session-store.js +486 -26
  680. package/dist/store/session-store.js.map +1 -1
  681. package/dist/store/snapshot-gate.d.ts +239 -0
  682. package/dist/store/snapshot-gate.d.ts.map +1 -0
  683. package/dist/store/snapshot-gate.js +398 -0
  684. package/dist/store/snapshot-gate.js.map +1 -0
  685. package/dist/store/split-brain-import.js +2 -2
  686. package/dist/store/split-brain-import.js.map +1 -1
  687. package/dist/store/sqlite-backup.d.ts +55 -13
  688. package/dist/store/sqlite-backup.d.ts.map +1 -1
  689. package/dist/store/sqlite-backup.js +414 -106
  690. package/dist/store/sqlite-backup.js.map +1 -1
  691. package/dist/store/sqlite-data-accessor.d.ts +15 -0
  692. package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
  693. package/dist/store/sqlite-data-accessor.js +63 -4
  694. package/dist/store/sqlite-data-accessor.js.map +1 -1
  695. package/dist/store/sqlite.d.ts +1 -1
  696. package/dist/store/sqlite.d.ts.map +1 -1
  697. package/dist/store/sqlite.js +53 -5
  698. package/dist/store/sqlite.js.map +1 -1
  699. package/dist/store/store-write-guard.d.ts +28 -0
  700. package/dist/store/store-write-guard.d.ts.map +1 -0
  701. package/dist/store/store-write-guard.js +50 -0
  702. package/dist/store/store-write-guard.js.map +1 -0
  703. package/dist/store/table-classification.d.ts +143 -0
  704. package/dist/store/table-classification.d.ts.map +1 -0
  705. package/dist/store/table-classification.js +1866 -0
  706. package/dist/store/table-classification.js.map +1 -0
  707. package/dist/store/task-version.d.ts +72 -0
  708. package/dist/store/task-version.d.ts.map +1 -0
  709. package/dist/store/task-version.js +93 -0
  710. package/dist/store/task-version.js.map +1 -0
  711. package/dist/store/tasks-schema.d.ts +1 -0
  712. package/dist/store/tasks-schema.d.ts.map +1 -1
  713. package/dist/store/tasks-schema.js +13 -0
  714. package/dist/store/tasks-schema.js.map +1 -1
  715. package/dist/store/tasks-sqlite.d.ts +10 -3
  716. package/dist/store/tasks-sqlite.d.ts.map +1 -1
  717. package/dist/store/tasks-sqlite.js +12 -3
  718. package/dist/store/tasks-sqlite.js.map +1 -1
  719. package/dist/store/twin-collapse.d.ts +275 -0
  720. package/dist/store/twin-collapse.d.ts.map +1 -0
  721. package/dist/store/twin-collapse.js +805 -0
  722. package/dist/store/twin-collapse.js.map +1 -0
  723. package/dist/store/umbrella-data-accessor.d.ts +2 -2
  724. package/dist/store/umbrella-data-accessor.d.ts.map +1 -1
  725. package/dist/store/umbrella-data-accessor.js +2 -2
  726. package/dist/store/umbrella-data-accessor.js.map +1 -1
  727. package/dist/store/validation-schemas.d.ts +63 -63
  728. package/dist/store/worktree-isolation-guard.d.ts +46 -24
  729. package/dist/store/worktree-isolation-guard.d.ts.map +1 -1
  730. package/dist/store/worktree-isolation-guard.js +69 -50
  731. package/dist/store/worktree-isolation-guard.js.map +1 -1
  732. package/dist/system/backup.d.ts.map +1 -1
  733. package/dist/system/backup.js +3 -67
  734. package/dist/system/backup.js.map +1 -1
  735. package/dist/system/cleo-link.d.ts +163 -0
  736. package/dist/system/cleo-link.d.ts.map +1 -0
  737. package/dist/system/cleo-link.js +246 -0
  738. package/dist/system/cleo-link.js.map +1 -0
  739. package/dist/system/dependencies.d.ts.map +1 -1
  740. package/dist/system/dependencies.js +3 -6
  741. package/dist/system/dependencies.js.map +1 -1
  742. package/dist/system/global-delivery.d.ts +205 -0
  743. package/dist/system/global-delivery.d.ts.map +1 -0
  744. package/dist/system/global-delivery.js +320 -0
  745. package/dist/system/global-delivery.js.map +1 -0
  746. package/dist/system/health.d.ts.map +1 -1
  747. package/dist/system/health.js +29 -6
  748. package/dist/system/health.js.map +1 -1
  749. package/dist/system/project-health.d.ts.map +1 -1
  750. package/dist/system/project-health.js +1 -20
  751. package/dist/system/project-health.js.map +1 -1
  752. package/dist/system/runtime.d.ts.map +1 -1
  753. package/dist/system/runtime.js +2 -12
  754. package/dist/system/runtime.js.map +1 -1
  755. package/dist/system/safestop.d.ts.map +1 -1
  756. package/dist/system/safestop.js +5 -2
  757. package/dist/system/safestop.js.map +1 -1
  758. package/dist/system/skill-fixtures.d.ts +200 -0
  759. package/dist/system/skill-fixtures.d.ts.map +1 -0
  760. package/dist/system/skill-fixtures.js +331 -0
  761. package/dist/system/skill-fixtures.js.map +1 -0
  762. package/dist/tasks/add.d.ts.map +1 -1
  763. package/dist/tasks/add.js +4 -2
  764. package/dist/tasks/add.js.map +1 -1
  765. package/dist/tasks/affected-packages.d.ts +173 -0
  766. package/dist/tasks/affected-packages.d.ts.map +1 -0
  767. package/dist/tasks/affected-packages.js +389 -0
  768. package/dist/tasks/affected-packages.js.map +1 -0
  769. package/dist/tasks/change-set.d.ts +151 -0
  770. package/dist/tasks/change-set.d.ts.map +1 -0
  771. package/dist/tasks/change-set.js +634 -0
  772. package/dist/tasks/change-set.js.map +1 -0
  773. package/dist/tasks/complete.d.ts.map +1 -1
  774. package/dist/tasks/complete.js +10 -5
  775. package/dist/tasks/complete.js.map +1 -1
  776. package/dist/tasks/done-plan.d.ts +103 -0
  777. package/dist/tasks/done-plan.d.ts.map +1 -0
  778. package/dist/tasks/done-plan.js +541 -0
  779. package/dist/tasks/done-plan.js.map +1 -0
  780. package/dist/tasks/done-record.d.ts +127 -0
  781. package/dist/tasks/done-record.d.ts.map +1 -0
  782. package/dist/tasks/done-record.js +373 -0
  783. package/dist/tasks/done-record.js.map +1 -0
  784. package/dist/tasks/duplicate-detector.d.ts +68 -11
  785. package/dist/tasks/duplicate-detector.d.ts.map +1 -1
  786. package/dist/tasks/duplicate-detector.js +314 -58
  787. package/dist/tasks/duplicate-detector.js.map +1 -1
  788. package/dist/tasks/evidence-paths.d.ts +78 -0
  789. package/dist/tasks/evidence-paths.d.ts.map +1 -0
  790. package/dist/tasks/evidence-paths.js +150 -0
  791. package/dist/tasks/evidence-paths.js.map +1 -0
  792. package/dist/tasks/evidence.d.ts +55 -0
  793. package/dist/tasks/evidence.d.ts.map +1 -1
  794. package/dist/tasks/evidence.js +223 -26
  795. package/dist/tasks/evidence.js.map +1 -1
  796. package/dist/tasks/gate-preview.d.ts +5 -0
  797. package/dist/tasks/gate-preview.d.ts.map +1 -1
  798. package/dist/tasks/gate-preview.js +25 -21
  799. package/dist/tasks/gate-preview.js.map +1 -1
  800. package/dist/tasks/gate-result-cache.d.ts +205 -0
  801. package/dist/tasks/gate-result-cache.d.ts.map +1 -0
  802. package/dist/tasks/gate-result-cache.js +285 -0
  803. package/dist/tasks/gate-result-cache.js.map +1 -0
  804. package/dist/tasks/gate-runner.d.ts +126 -3
  805. package/dist/tasks/gate-runner.d.ts.map +1 -1
  806. package/dist/tasks/gate-runner.js +483 -28
  807. package/dist/tasks/gate-runner.js.map +1 -1
  808. package/dist/tasks/session-scope.d.ts +3 -1
  809. package/dist/tasks/session-scope.d.ts.map +1 -1
  810. package/dist/tasks/session-scope.js +18 -3
  811. package/dist/tasks/session-scope.js.map +1 -1
  812. package/dist/tasks/tool-resolver.d.ts +23 -6
  813. package/dist/tasks/tool-resolver.d.ts.map +1 -1
  814. package/dist/tasks/tool-resolver.js +146 -8
  815. package/dist/tasks/tool-resolver.js.map +1 -1
  816. package/dist/tasks/tool-vacuity.d.ts +71 -0
  817. package/dist/tasks/tool-vacuity.d.ts.map +1 -0
  818. package/dist/tasks/tool-vacuity.js +334 -0
  819. package/dist/tasks/tool-vacuity.js.map +1 -0
  820. package/dist/tasks/update.d.ts +8 -0
  821. package/dist/tasks/update.d.ts.map +1 -1
  822. package/dist/tasks/update.js +159 -78
  823. package/dist/tasks/update.js.map +1 -1
  824. package/dist/upgrade.d.ts.map +1 -1
  825. package/dist/upgrade.js +18 -2
  826. package/dist/upgrade.js.map +1 -1
  827. package/dist/validation/doctor/checks.d.ts +20 -2
  828. package/dist/validation/doctor/checks.d.ts.map +1 -1
  829. package/dist/validation/doctor/checks.js +64 -4
  830. package/dist/validation/doctor/checks.js.map +1 -1
  831. package/dist/validation/doctor/index.d.ts +1 -1
  832. package/dist/validation/doctor/index.d.ts.map +1 -1
  833. package/dist/validation/doctor/index.js +1 -1
  834. package/dist/validation/doctor/index.js.map +1 -1
  835. package/dist/validation/doctor/utils.d.ts.map +1 -1
  836. package/dist/validation/doctor/utils.js +7 -2
  837. package/dist/validation/doctor/utils.js.map +1 -1
  838. package/dist/validation/engine-ops.d.ts +15 -0
  839. package/dist/validation/engine-ops.d.ts.map +1 -1
  840. package/dist/validation/engine-ops.js +249 -98
  841. package/dist/validation/engine-ops.js.map +1 -1
  842. package/migrations/drizzle-cleo-global/20260927000000_t12469-project-locations/migration.sql +121 -0
  843. package/migrations/drizzle-cleo-global/20260927010000_t12543-user-profile-project-scope/migration.sql +23 -0
  844. package/migrations/drizzle-cleo-global/20260928010000_t12470-location-candidates/migration.sql +72 -0
  845. package/migrations/drizzle-cleo-global/20260928020000_t12510-nexus-devices/migration.sql +34 -0
  846. package/migrations/drizzle-cleo-global/20260928030000_t12511-project-git-state/migration.sql +62 -0
  847. package/migrations/drizzle-cleo-project/20260927000000_t12499-session-terminal-bindings/migration.sql +34 -0
  848. package/migrations/drizzle-cleo-project/20260928000000_t12500-binding-provider-flag/migration.sql +15 -0
  849. package/package.json +23 -13
  850. package/schemas/config.schema.json +54 -0
  851. package/schemas/project-context.schema.json +51 -3
  852. package/schemas/project-info.schema.json +28 -1
  853. package/templates/CLEO-INJECTION.md +40 -332
  854. package/templates/CLEO-REFERENCE.md +303 -0
  855. package/templates/workflows/README.md +36 -14
@@ -0,0 +1,127 @@
1
+ /**
2
+ * `cleo done` / `cleo verify --auto` — record every required gate in one write.
3
+ *
4
+ * {@link recordTaskDone} turns the read-only plan from
5
+ * {@link deriveTaskEvidence} into recorded gates, in a fixed order that keeps
6
+ * every slow step OUTSIDE the task write transaction:
7
+ *
8
+ * 1. plan — change set, gate evidence, AC links, blockers (git and gh only);
9
+ * 2. tools — `lint` and `typecheck` in parallel, then `test`, each through the
10
+ * ADR-061 resolver and cache (`runToolCached`, under its global semaphore
11
+ * and memory caps); a cached result is reused, a failure stops here;
12
+ * 3. typed gates — executed once by `previewTaskGates`, which caches each pass
13
+ * (T12621); a failure stops here;
14
+ * 4. write — ONE `validateGateVerify` call with per-gate evidence
15
+ * (`gateEvidence`), which parses and validates every atom through the
16
+ * existing `parseEvidence` → `validateAtom` → gate minimum →
17
+ * `checkTaskEvidenceContext` path, serves the typed gates from the cache
18
+ * (`noRun`), and persists all gates in a single transaction.
19
+ *
20
+ * Tool atoms re-enter `validateAtom` at step 4, where they hit the cache entry
21
+ * step 2 wrote — the same key, because the tools ran in the same execution
22
+ * root the validator resolves. That is why a plan whose change set lives in the
23
+ * task's worktree refuses to run from the main checkout: the validator would
24
+ * measure the wrong tree.
25
+ *
26
+ * There is no override: `CLEO_OWNER_OVERRIDE` is refused by the multi-gate
27
+ * write and stays a single-gate `cleo verify` path. Completion is the caller's
28
+ * next step (`cleo done` dispatches `tasks.complete`, unchanged).
29
+ *
30
+ * Spec: `verify-streamlined-design` §3.2 steps 3-7 and §4.
31
+ *
32
+ * @task T12625
33
+ */
34
+ import type { DoneRecordResult, VerificationGate } from '@cleocode/contracts';
35
+ import { type EngineResult } from '../engine-result.js';
36
+ import { type DeriveTaskEvidenceOptions } from './done-plan.js';
37
+ /** A tool run as `recordTaskDone` needs it; injectable for tests. */
38
+ export type DoneToolRunner = (tool: string, storeRoot: string, executionRoot: string) => Promise<{
39
+ exitCode: number | null;
40
+ cacheHit: boolean;
41
+ durationMs: number;
42
+ timedOut: boolean;
43
+ tail: string;
44
+ }>;
45
+ /** Typed-gate execution before the write; injectable for tests. */
46
+ export type DoneTypedGateRunner = (storeRoot: string, taskId: string) => Promise<{
47
+ gateCount: number;
48
+ passed: boolean;
49
+ failing: string[];
50
+ }>;
51
+ /** The single multi-gate write; injectable for tests. */
52
+ export type DoneGateWriter = (storeRoot: string, params: {
53
+ taskId: string;
54
+ gateEvidence: Partial<Record<VerificationGate, string | readonly string[]>>;
55
+ noRun: boolean;
56
+ sessionId?: string;
57
+ agent?: string;
58
+ }) => Promise<EngineResult<{
59
+ passed: boolean;
60
+ }>>;
61
+ /** Options for {@link recordTaskDone}. */
62
+ export interface RecordTaskDoneOptions extends DeriveTaskEvidenceOptions {
63
+ /** Agent recorded as the gate author. */
64
+ agent?: string;
65
+ /** Session for the audit trail; defaults to the caller's bound session. */
66
+ sessionId?: string;
67
+ /** Injectable slow steps (tests assert their order). */
68
+ steps?: {
69
+ runTool?: DoneToolRunner;
70
+ runTypedGates?: DoneTypedGateRunner;
71
+ write?: DoneGateWriter;
72
+ };
73
+ }
74
+ /**
75
+ * Record every required gate a task lacks, in one write, from derived
76
+ * evidence. Does not complete the task.
77
+ *
78
+ * @param taskId - Task to record.
79
+ * @param opts - Planner options (`satisfies`, `prNumber`, roots) plus author,
80
+ * session and injectable steps.
81
+ * @returns The recorded gates, or `E_DONE_BLOCKED` with one next step and
82
+ * the original cause in `details.cause`.
83
+ * @example
84
+ * ```ts
85
+ * const r = await recordTaskDone('T123', { satisfies: 'all' });
86
+ * if (!r.success) console.error(r.error.fix);
87
+ * ```
88
+ * @task T12625
89
+ */
90
+ export declare function recordTaskDone(taskId: string, opts?: RecordTaskDoneOptions): Promise<EngineResult<DoneRecordResult>>;
91
+ /**
92
+ * A tool runner shared by a batch: each (tool, execution root) pair runs once
93
+ * and every later caller gets the same outcome. Keyed on the root as well as
94
+ * the tool — two tasks whose work lives in different trees must each be
95
+ * measured in their own tree.
96
+ *
97
+ * @param base - The runner that actually executes.
98
+ * @returns A memoising runner.
99
+ * @task T12628
100
+ */
101
+ export declare function sharedToolRunner(base: DoneToolRunner): DoneToolRunner;
102
+ /** One task's outcome in a batch close. */
103
+ export interface BatchDoneEntry {
104
+ /** Task the entry is for. */
105
+ taskId: string;
106
+ /** Its record result, or its `E_DONE_BLOCKED`. */
107
+ result: EngineResult<DoneRecordResult>;
108
+ }
109
+ /**
110
+ * Close several tasks shipped by one PR (T12628): each task is planned and
111
+ * recorded on its own, and one task's blocker never stops the others. The
112
+ * tools run once per execution root for the whole batch — every task shares
113
+ * one memoised runner — and each task still gets its own validated write.
114
+ * Shared evidence is NOT pre-acknowledged: the ADR-059 warning fires as for
115
+ * any other reuse.
116
+ *
117
+ * @param taskIds - Tasks to record, in order.
118
+ * @param opts - Shared options (`prNumber`, `satisfies`, roots, author, steps).
119
+ * @returns One entry per task, in the given order.
120
+ * @example
121
+ * ```ts
122
+ * const entries = await recordTasksDone(['T1', 'T2', 'T3'], { prNumber: 42 });
123
+ * ```
124
+ * @task T12628
125
+ */
126
+ export declare function recordTasksDone(taskIds: readonly string[], opts?: RecordTaskDoneOptions): Promise<BatchDoneEntry[]>;
127
+ //# sourceMappingURL=done-record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"done-record.d.ts","sourceRoot":"","sources":["../../src/tasks/done-record.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAGH,OAAO,KAAK,EAIV,gBAAgB,EAEhB,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,YAAY,EAA8B,MAAM,qBAAqB,CAAC;AAGpF,OAAO,EAAE,KAAK,yBAAyB,EAAkC,MAAM,gBAAgB,CAAC;AAGhG,qEAAqE;AACrE,MAAM,MAAM,cAAc,GAAG,CAC3B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;IACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,CAAC;AAEH,mEAAmE;AACnE,MAAM,MAAM,mBAAmB,GAAG,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAAC;AAExE,yDAAyD;AACzD,MAAM,MAAM,cAAc,GAAG,CAC3B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE;IACN,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;IAC5E,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,KACE,OAAO,CAAC,YAAY,CAAC;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC,CAAC;AAEhD,0CAA0C;AAC1C,MAAM,WAAW,qBAAsB,SAAQ,yBAAyB;IACtE,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,cAAc,CAAC;QAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC;QAAC,KAAK,CAAC,EAAE,cAAc,CAAA;KAAE,CAAC;CACnG;AAoMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CA6FzC;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,CAWrE;AAED,2CAA2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,MAAM,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;CACxC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,cAAc,EAAE,CAAC,CAU3B"}
@@ -0,0 +1,373 @@
1
+ /**
2
+ * `cleo done` / `cleo verify --auto` — record every required gate in one write.
3
+ *
4
+ * {@link recordTaskDone} turns the read-only plan from
5
+ * {@link deriveTaskEvidence} into recorded gates, in a fixed order that keeps
6
+ * every slow step OUTSIDE the task write transaction:
7
+ *
8
+ * 1. plan — change set, gate evidence, AC links, blockers (git and gh only);
9
+ * 2. tools — `lint` and `typecheck` in parallel, then `test`, each through the
10
+ * ADR-061 resolver and cache (`runToolCached`, under its global semaphore
11
+ * and memory caps); a cached result is reused, a failure stops here;
12
+ * 3. typed gates — executed once by `previewTaskGates`, which caches each pass
13
+ * (T12621); a failure stops here;
14
+ * 4. write — ONE `validateGateVerify` call with per-gate evidence
15
+ * (`gateEvidence`), which parses and validates every atom through the
16
+ * existing `parseEvidence` → `validateAtom` → gate minimum →
17
+ * `checkTaskEvidenceContext` path, serves the typed gates from the cache
18
+ * (`noRun`), and persists all gates in a single transaction.
19
+ *
20
+ * Tool atoms re-enter `validateAtom` at step 4, where they hit the cache entry
21
+ * step 2 wrote — the same key, because the tools ran in the same execution
22
+ * root the validator resolves. That is why a plan whose change set lives in the
23
+ * task's worktree refuses to run from the main checkout: the validator would
24
+ * measure the wrong tree.
25
+ *
26
+ * There is no override: `CLEO_OWNER_OVERRIDE` is refused by the multi-gate
27
+ * write and stays a single-gate `cleo verify` path. Completion is the caller's
28
+ * next step (`cleo done` dispatches `tasks.complete`, unchanged).
29
+ *
30
+ * Spec: `verify-streamlined-design` §3.2 steps 3-7 and §4.
31
+ *
32
+ * @task T12625
33
+ */
34
+ import { execFileSync } from 'node:child_process';
35
+ import { engineError, engineSuccess } from '../engine-result.js';
36
+ import { cleoErrorToEngineResult } from '../errors-to-engine.js';
37
+ import { getProjectRoot } from '../paths.js';
38
+ import { deriveTaskEvidence, shellQuote } from './done-plan.js';
39
+ import { resolveToolCommand } from './tool-resolver.js';
40
+ /** Default tool runner: resolve through ADR-061 and run through its cache. */
41
+ const defaultRunTool = async (tool, storeRoot, executionRoot) => {
42
+ if (tool === 'test-affected') {
43
+ const { planAffectedTestRun } = await import('./affected-packages.js');
44
+ const affected = await planAffectedTestRun(storeRoot, executionRoot);
45
+ if (!affected.ok) {
46
+ return {
47
+ exitCode: null,
48
+ cacheHit: false,
49
+ durationMs: 0,
50
+ timedOut: false,
51
+ tail: affected.reason,
52
+ };
53
+ }
54
+ const { runToolCached } = await import('./tool-cache.js');
55
+ const r = await runToolCached(affected.command, storeRoot, { executionRoot });
56
+ return {
57
+ exitCode: r.exitCode,
58
+ cacheHit: r.cacheHit,
59
+ durationMs: r.cacheHit ? 0 : r.durationMs,
60
+ timedOut: r.timedOut,
61
+ tail: (r.stderrTail || r.stdoutTail).trim().slice(-400),
62
+ };
63
+ }
64
+ const resolved = resolveToolCommand(tool, storeRoot);
65
+ if (!resolved.ok) {
66
+ return {
67
+ exitCode: null,
68
+ cacheHit: false,
69
+ durationMs: 0,
70
+ timedOut: false,
71
+ tail: resolved.reason,
72
+ };
73
+ }
74
+ const { runToolCached } = await import('./tool-cache.js');
75
+ const r = await runToolCached(resolved.command, storeRoot, { executionRoot });
76
+ return {
77
+ exitCode: r.exitCode,
78
+ cacheHit: r.cacheHit,
79
+ durationMs: r.cacheHit ? 0 : r.durationMs,
80
+ timedOut: r.timedOut,
81
+ tail: (r.stderrTail || r.stdoutTail).trim().slice(-400),
82
+ };
83
+ };
84
+ /** Default typed-gate runner: `previewTaskGates`, which caches each pass (T12621). */
85
+ const defaultRunTypedGates = async (storeRoot, taskId) => {
86
+ const { previewTaskGates } = await import('./gate-preview.js');
87
+ const preview = await previewTaskGates(storeRoot, { taskId });
88
+ return {
89
+ gateCount: preview.gateCount,
90
+ passed: preview.passed,
91
+ failing: preview.results
92
+ .filter((r) => r.result === 'fail' || r.result === 'error')
93
+ .map((r) => `${r.req ?? `#${r.index}`} (${r.kind}): ${r.errorMessage ?? r.result}`),
94
+ };
95
+ };
96
+ /** Default writer: the existing gate write, with per-gate evidence. */
97
+ const defaultWrite = async (storeRoot, params) => {
98
+ const { validateGateVerify } = await import('../validation/engine-ops.js');
99
+ const result = await validateGateVerify(storeRoot, params);
100
+ return result.success ? engineSuccess({ passed: result.data.passed }) : result;
101
+ };
102
+ function blocked(plan, blocker, recordedGates = []) {
103
+ const details = {
104
+ blocker: blocker.code,
105
+ ...(blocker.cause ? { cause: blocker.cause } : {}),
106
+ next: blocker.next,
107
+ recordedGates,
108
+ plan,
109
+ };
110
+ return engineError('E_DONE_BLOCKED', blocker.message, { details, fix: blocker.next.command });
111
+ }
112
+ /** `git` read in `cwd`, trimmed; `null` on failure (a non-zero exit included). */
113
+ function gitRead(cwd, args) {
114
+ try {
115
+ return execFileSync('git', args, {
116
+ cwd,
117
+ encoding: 'utf-8',
118
+ stdio: ['ignore', 'pipe', 'ignore'],
119
+ }).trim();
120
+ }
121
+ catch {
122
+ return null;
123
+ }
124
+ }
125
+ /**
126
+ * The tools and typed gates run on whatever `executionRoot` has checked out.
127
+ * `implemented` cites the change set's commit; unless that tree CONTAINS the
128
+ * change, `testsPassed`/`qaPassed` would attest a different tree — the T12625
129
+ * review reproduced a failing test recording testsPassed from the main
130
+ * checkout while `implemented` cited the unchecked-out task branch.
131
+ *
132
+ * - branch: the change-set commit must be the checked-out HEAD (a dirty tree
133
+ * is already a plan blocker);
134
+ * - pr: the merge commit must be an ancestor of the checked-out HEAD.
135
+ */
136
+ function checkoutBlocker(plan) {
137
+ const cs = plan.changeSet;
138
+ const root = cs.executionRoot;
139
+ const head = gitRead(root, ['rev-parse', 'HEAD']);
140
+ const short = (sha) => (sha ?? 'nothing').slice(0, 12);
141
+ if (cs.source === 'branch') {
142
+ if (cs.headRef === 'HEAD' && head !== null && head === cs.commitSha)
143
+ return null;
144
+ const branch = cs.headRef && cs.headRef !== 'HEAD' ? cs.headRef : `task/${plan.taskId}`;
145
+ return {
146
+ code: 'checkout-required',
147
+ message: `${plan.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.`,
148
+ next: {
149
+ command: `git -C ${shellQuote(root)} switch ${branch} && cleo done ${plan.taskId}`,
150
+ why: 'Tests, lint, typecheck and typed gates must run on the commit implemented records.',
151
+ },
152
+ };
153
+ }
154
+ if (cs.source === 'pr' && cs.mergeCommitSha) {
155
+ // D11151: every PR the task shipped in must be in the tested tree.
156
+ const merges = [
157
+ ...(cs.additionalPrs ?? []).flatMap((p) => p.mergeCommitSha ? [{ pr: p.prNumber, sha: p.mergeCommitSha }] : []),
158
+ { pr: cs.prNumber, sha: cs.mergeCommitSha },
159
+ ];
160
+ const missing = merges.find((m) => head === null || gitRead(root, ['merge-base', '--is-ancestor', m.sha, 'HEAD']) === null);
161
+ if (!missing)
162
+ return null;
163
+ return {
164
+ code: 'checkout-required',
165
+ message: `${root} has ${short(head)} checked out, which does not contain PR #${missing.pr}'s merge commit ${short(missing.sha)}.`,
166
+ next: {
167
+ command: `git -C ${shellQuote(root)} switch --detach ${cs.mergeCommitSha} && cleo done ${plan.taskId}`,
168
+ why: 'Tests, lint, typecheck and typed gates must run on a tree containing the merged change.',
169
+ },
170
+ };
171
+ }
172
+ return null;
173
+ }
174
+ /** Step 2: lint + typecheck in parallel, then test; stop at the first failure. */
175
+ async function runPlannedTools(plan, storeRoot, runTool) {
176
+ const root = plan.changeSet.executionRoot;
177
+ const runnable = plan.toolRuns.filter((r) => r.cache !== 'not-applicable');
178
+ const results = [];
179
+ const waves = [
180
+ runnable.filter((r) => r.tool !== 'test'),
181
+ runnable.filter((r) => r.tool === 'test'),
182
+ ];
183
+ for (const wave of waves) {
184
+ const outcomes = await Promise.all(wave.map(async (r) => ({ run: r, out: await runTool(r.tool, storeRoot, root) })));
185
+ for (const { run, out } of outcomes) {
186
+ results.push({
187
+ tool: run.tool,
188
+ gate: run.gate,
189
+ exitCode: out.exitCode,
190
+ cacheHit: out.cacheHit,
191
+ durationMs: out.durationMs,
192
+ });
193
+ }
194
+ const failed = outcomes.find(({ out }) => out.exitCode !== 0);
195
+ if (failed) {
196
+ const { run, out } = failed;
197
+ return {
198
+ results,
199
+ blocker: {
200
+ code: 'tool-failed',
201
+ message: out.timedOut
202
+ ? `tool:${run.tool} exceeded its deadline in ${root}.`
203
+ : `tool:${run.tool} failed (exit ${out.exitCode}) in ${root}: ${out.tail}`,
204
+ next: {
205
+ command: `cd ${shellQuote(root)} && ${run.command ?? `cleo done ${plan.taskId}`}`,
206
+ why: `${run.gate} needs a passing ${run.tool} run on the recorded tree.`,
207
+ },
208
+ cause: out.timedOut ? 'E_EVIDENCE_TOOL_TIMEOUT' : 'E_EVIDENCE_TOOL_FAILED',
209
+ },
210
+ };
211
+ }
212
+ }
213
+ return { results };
214
+ }
215
+ /**
216
+ * Record every required gate a task lacks, in one write, from derived
217
+ * evidence. Does not complete the task.
218
+ *
219
+ * @param taskId - Task to record.
220
+ * @param opts - Planner options (`satisfies`, `prNumber`, roots) plus author,
221
+ * session and injectable steps.
222
+ * @returns The recorded gates, or `E_DONE_BLOCKED` with one next step and
223
+ * the original cause in `details.cause`.
224
+ * @example
225
+ * ```ts
226
+ * const r = await recordTaskDone('T123', { satisfies: 'all' });
227
+ * if (!r.success) console.error(r.error.fix);
228
+ * ```
229
+ * @task T12625
230
+ */
231
+ export async function recordTaskDone(taskId, opts = {}) {
232
+ const storeRoot = opts.projectRoot ?? getProjectRoot();
233
+ let plan;
234
+ try {
235
+ plan = await deriveTaskEvidence(taskId, { ...opts, projectRoot: storeRoot });
236
+ }
237
+ catch (err) {
238
+ return cleoErrorToEngineResult(err, 'E_DONE_FAILED', 'cleo done failed');
239
+ }
240
+ if (plan.changeSet.rootSource === 'task-worktree') {
241
+ return blocked(plan, {
242
+ code: 'run-from-worktree',
243
+ message: `${taskId}'s work is in its worktree ${plan.runFrom}; tools must run in that tree.`,
244
+ next: {
245
+ command: `cd ${shellQuote(plan.runFrom)} && cleo done ${taskId}`,
246
+ why: 'Evidence tools measure the invocation tree; run cleo done from the task worktree.',
247
+ },
248
+ });
249
+ }
250
+ const first = plan.blockers[0];
251
+ if (first)
252
+ return blocked(plan, first);
253
+ if (plan.toolRuns.length > 0 || plan.typedGates.length > 0) {
254
+ const checkout = checkoutBlocker(plan);
255
+ if (checkout)
256
+ return blocked(plan, checkout);
257
+ }
258
+ const steps = opts.steps ?? {};
259
+ const tools = await runPlannedTools(plan, storeRoot, steps.runTool ?? defaultRunTool);
260
+ if (tools.blocker)
261
+ return blocked(plan, tools.blocker);
262
+ const typed = plan.typedGates.length
263
+ ? await (steps.runTypedGates ?? defaultRunTypedGates)(storeRoot, taskId)
264
+ : { gateCount: 0, passed: true, failing: [] };
265
+ if (!typed.passed) {
266
+ return blocked(plan, {
267
+ code: 'typed-gate-failed',
268
+ message: `Typed gate(s) failed: ${typed.failing.join('; ')}`,
269
+ next: {
270
+ command: `cleo verify ${taskId} --run`,
271
+ why: 'Fix the failing typed gate and re-run.',
272
+ },
273
+ });
274
+ }
275
+ const pending = plan.gates.filter((g) => !g.passed && g.evidence !== null);
276
+ const gateEvidence = Object.fromEntries(pending.map((g) => [g.gate, g.evidence]));
277
+ let verificationPassed = plan.gates.every((g) => g.passed);
278
+ if (pending.length > 0) {
279
+ let sessionId = opts.sessionId;
280
+ if (sessionId === undefined) {
281
+ const { resolveBoundSessionId } = await import('../store/session-store.js');
282
+ sessionId = (await resolveBoundSessionId(storeRoot).catch(() => null)) ?? undefined;
283
+ }
284
+ const { readAllowCachedGates } = await import('./gate-result-cache.js');
285
+ // D11151: every earlier own-branch PR is an ordered implemented attempt in
286
+ // the SAME write as the primary, so all are recorded or none (review HIGH).
287
+ if (plan.additionalImplemented?.length && gateEvidence.implemented) {
288
+ gateEvidence.implemented = [
289
+ ...plan.additionalImplemented,
290
+ gateEvidence.implemented,
291
+ ];
292
+ }
293
+ const written = await (steps.write ?? defaultWrite)(storeRoot, {
294
+ taskId,
295
+ gateEvidence,
296
+ noRun: typed.gateCount > 0 && readAllowCachedGates(storeRoot),
297
+ ...(sessionId ? { sessionId } : {}),
298
+ ...(opts.agent ? { agent: opts.agent } : {}),
299
+ });
300
+ if (!written.success) {
301
+ return blocked(plan, {
302
+ code: 'evidence-refused',
303
+ message: written.error.message,
304
+ next: {
305
+ command: `cleo done ${taskId} --plan`,
306
+ why: 'The validators refused the derived evidence; the plan shows what changed.',
307
+ },
308
+ cause: written.error.code,
309
+ });
310
+ }
311
+ verificationPassed = written.data.passed;
312
+ }
313
+ return engineSuccess({
314
+ taskId,
315
+ recordedGates: pending.map((g) => g.gate),
316
+ alreadyPassed: plan.gates.filter((g) => g.passed).map((g) => g.gate),
317
+ toolResults: tools.results,
318
+ typedGateCount: typed.gateCount,
319
+ verificationPassed,
320
+ plan,
321
+ });
322
+ }
323
+ /**
324
+ * A tool runner shared by a batch: each (tool, execution root) pair runs once
325
+ * and every later caller gets the same outcome. Keyed on the root as well as
326
+ * the tool — two tasks whose work lives in different trees must each be
327
+ * measured in their own tree.
328
+ *
329
+ * @param base - The runner that actually executes.
330
+ * @returns A memoising runner.
331
+ * @task T12628
332
+ */
333
+ export function sharedToolRunner(base) {
334
+ const runs = new Map();
335
+ return (tool, storeRoot, executionRoot) => {
336
+ const key = `${tool}\u0000${executionRoot}`;
337
+ let run = runs.get(key);
338
+ if (!run) {
339
+ run = base(tool, storeRoot, executionRoot);
340
+ runs.set(key, run);
341
+ }
342
+ return run;
343
+ };
344
+ }
345
+ /**
346
+ * Close several tasks shipped by one PR (T12628): each task is planned and
347
+ * recorded on its own, and one task's blocker never stops the others. The
348
+ * tools run once per execution root for the whole batch — every task shares
349
+ * one memoised runner — and each task still gets its own validated write.
350
+ * Shared evidence is NOT pre-acknowledged: the ADR-059 warning fires as for
351
+ * any other reuse.
352
+ *
353
+ * @param taskIds - Tasks to record, in order.
354
+ * @param opts - Shared options (`prNumber`, `satisfies`, roots, author, steps).
355
+ * @returns One entry per task, in the given order.
356
+ * @example
357
+ * ```ts
358
+ * const entries = await recordTasksDone(['T1', 'T2', 'T3'], { prNumber: 42 });
359
+ * ```
360
+ * @task T12628
361
+ */
362
+ export async function recordTasksDone(taskIds, opts = {}) {
363
+ const runTool = sharedToolRunner(opts.steps?.runTool ?? defaultRunTool);
364
+ const entries = [];
365
+ for (const taskId of taskIds) {
366
+ entries.push({
367
+ taskId,
368
+ result: await recordTaskDone(taskId, { ...opts, steps: { ...opts.steps, runTool } }),
369
+ });
370
+ }
371
+ return entries;
372
+ }
373
+ //# sourceMappingURL=done-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"done-record.js","sourceRoot":"","sources":["../../src/tasks/done-record.ts"],"names":[],"mappings":"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"}
@@ -20,10 +20,20 @@
20
20
  * score < 0.40 → insert
21
21
  * score in [0.40, 0.85) → escalate to Tier 3 (LLM, paid)
22
22
  *
23
- * Tier 3 — LLM reasoning (max 1 call per cleo add):
24
- * are_duplicate=true → reject
25
- * are_duplicate=false → insert
26
- * LLM error / timeout → fall back to Tier-1-only decision (never block on error)
23
+ * Tier 3 — one batched System One decision (T12492), then the optional
24
+ * generative LLM tier:
25
+ * - System One: ONE `decide()` request carrying up to {@link MAX_CANDIDATES}
26
+ * noul questions ("is the new task the same work as candidate cN?"),
27
+ * bounded by {@link DUPLICATE_DECISION_BUDGET_MS} end to end. Mode comes
28
+ * from `decide.sites.duplicateDetection` (`off | shadow | on`): `shadow`
29
+ * (the default once a provider is configured) records the heuristic and
30
+ * decision answers side by side in `.cleo/audit/decisions.jsonl` and acts
31
+ * on the heuristic; `on` acts on the decision when one arrives. No
32
+ * provider configured → `off`, and no network call is made at all.
33
+ * - Generative LLM (T1681, max 1 call): OPT-IN via
34
+ * `decide.generativeFallback.duplicateDetection: true`. Off by default,
35
+ * so `cleo add` no longer pays its 15 s timeout.
36
+ * Fallback on every failure: the Tier-1-only decision (never block on error).
27
37
  *
28
38
  * Thresholds (original T1633 behavior preserved for the Tier-1 clear-match path):
29
39
  * Tier-1 score >= 0.85 → warning emitted to stderr (non-blocking)
@@ -35,6 +45,8 @@
35
45
  */
36
46
  import type { Task } from '@cleocode/contracts';
37
47
  import { z } from 'zod';
48
+ import type { DecideOptions } from '../decide/client.js';
49
+ import { type DecisionSiteMode } from '../decide/site.js';
38
50
  import type { DataAccessor } from '../store/data-accessor.js';
39
51
  /** Tier-1 score at which a non-blocking warning is emitted. (Name kept: exported API.) */
40
52
  export declare const DUPLICATE_WARN_THRESHOLD = 0.85;
@@ -42,6 +54,25 @@ export declare const DUPLICATE_WARN_THRESHOLD = 0.85;
42
54
  export declare const DUPLICATE_REJECT_THRESHOLD = 0.92;
43
55
  /** Maximum number of candidates to surface in the warning/rejection message. */
44
56
  export declare const MAX_CANDIDATES = 3;
57
+ /**
58
+ * End-to-end budget for the System One duplicate decision, in milliseconds:
59
+ * module load, settings, redaction, the shared request budget and the HTTP
60
+ * round trip (connection setup included) all fit inside it.
61
+ *
62
+ * @task T12492
63
+ */
64
+ export declare const DUPLICATE_DECISION_BUDGET_MS = 300;
65
+ /**
66
+ * Minimum confidence EVERY decision answer needs before `on` mode acts on the
67
+ * decision. Below it the decision is audited but the heuristic acts.
68
+ */
69
+ export declare const DUPLICATE_DECISION_MIN_CONFIDENCE = 0.6;
70
+ /** Call-site id for the duplicate decision; keys the audit line. */
71
+ export declare const DUPLICATE_DECISION_SITE = "tasks.duplicate-detection";
72
+ /** Config key selecting the System One mode for duplicate detection. */
73
+ export declare const DUPLICATE_DECISION_MODE_KEY = "decide.sites.duplicateDetection";
74
+ /** Config key opting in to the generative LLM tier (T1681). Default `false`. */
75
+ export declare const DUPLICATE_LLM_TIER_KEY = "decide.generativeFallback.duplicateDetection";
45
76
  /** A candidate active task that scored above the warning threshold. */
46
77
  export interface DuplicateCandidate {
47
78
  /** The matching active task ID. */
@@ -76,7 +107,24 @@ export interface DuplicateCheckResult {
76
107
  * not BM25 — see the module docblock. Reporting WHICH Tier-1 implementation
77
108
  * ran (lexical vs vector) is tracked separately.
78
109
  */
79
- tier?: 'bm25' | 'jaccard' | 'llm';
110
+ tier?: 'bm25' | 'jaccard' | 'llm' | 'decision';
111
+ }
112
+ /**
113
+ * System One mode for duplicate detection (T12492).
114
+ *
115
+ * - `off` — no decision request.
116
+ * - `shadow` — ask, audit both answers, act on the heuristic.
117
+ * - `on` — ask, act on the decision; the heuristic acts on any fallback.
118
+ */
119
+ export type DuplicateDecisionMode = DecisionSiteMode;
120
+ /** Optional wiring for {@link checkDuplicates}. Every field defaults from config. */
121
+ export interface DuplicateCheckOptions {
122
+ /** Force a mode instead of reading {@link DUPLICATE_DECISION_MODE_KEY}. Still `off` when unconfigured. */
123
+ mode?: DuplicateDecisionMode;
124
+ /** Force the generative LLM tier on/off instead of reading {@link DUPLICATE_LLM_TIER_KEY}. */
125
+ llmTier?: boolean;
126
+ /** Provider, connection, budget, cache and audit wiring forwarded to `decide()`. Tests inject a stub here. */
127
+ decide?: DecideOptions;
80
128
  }
81
129
  /**
82
130
  * Structured output schema for the LLM duplicate-reasoning call.
@@ -158,27 +206,32 @@ export declare function callLlmDuplicateReasoning(incomingTitle: string, incomin
158
206
  * - score < JACCARD_ESCALATE_LOW (0.40): clear different → skip LLM.
159
207
  * - score in [0.40, 0.85): ambiguous → escalate to LLM (cost cap: 1 call per invocation).
160
208
  *
161
- * Tier 3 — LLM reasoning (max 1 call per `cleo add`):
162
- * Call the daemon provider with both task descriptions and the structured-output schema.
163
- * On error/timeout: fall back to the Tier-1 decision for the candidate (never block).
209
+ * Tier 3 — System One, then the opt-in generative LLM (T12492):
210
+ * One `decide()` request with up to 3 candidates as noul questions, bounded by
211
+ * DUPLICATE_DECISION_BUDGET_MS. `shadow` audits it and acts on the heuristic; `on`
212
+ * acts on it. Then, only when `decide.generativeFallback.duplicateDetection` is true,
213
+ * the T1681 LLM call (max 1). On any failure: the Tier-1 decision (never block).
164
214
  *
165
215
  * @param title - Title of the task being added.
166
216
  * @param description - Description of the task being added (empty string if not provided).
167
217
  * @param accessor - DataAccessor instance to load active tasks from.
168
218
  * @param labels - Labels of the task being added (empty array if not provided).
169
219
  * @param cwd - Project root for LLM credential resolution (Tier 3).
220
+ * @param options - System One mode, generative-tier opt-in and `decide()` wiring (T12492).
170
221
  * @returns Duplicate check result with tier provenance.
171
222
  * @task T1633
172
223
  * @task T1681
224
+ * @task T12492
173
225
  */
174
- export declare function checkDuplicates(title: string, description: string, accessor: DataAccessor, labels?: string[], cwd?: string): Promise<DuplicateCheckResult>;
226
+ export declare function checkDuplicates(title: string, description: string, accessor: DataAccessor, labels?: string[], cwd?: string, options?: DuplicateCheckOptions): Promise<DuplicateCheckResult>;
175
227
  /**
176
228
  * Format a human-readable candidate list for warning/rejection messages.
177
229
  *
178
230
  * @param candidates - Array of duplicate candidates.
231
+ * @param label - What `score` measures; defaults to the lexical `similarity`.
179
232
  * @returns Formatted multi-line string listing candidates.
180
233
  */
181
- export declare function formatCandidateList(candidates: DuplicateCandidate[]): string;
234
+ export declare function formatCandidateList(candidates: DuplicateCandidate[], label?: string): string;
182
235
  /**
183
236
  * Build a warning message for candidates above the warn threshold.
184
237
  *
@@ -189,10 +242,14 @@ export declare function buildWarnMessage(candidates: DuplicateCandidate[]): stri
189
242
  /**
190
243
  * Build a rejection message for candidates above the reject threshold.
191
244
  *
245
+ * A System One rejection (`tier: 'decision'`) is worded as what it is — the
246
+ * model's duplicate probability — never as a lexical similarity score.
247
+ *
192
248
  * @param candidates - Candidates to include in the message.
249
+ * @param tier - The tier that decided (from {@link DuplicateCheckResult.tier}).
193
250
  * @returns Rejection string (no newline at end).
194
251
  */
195
- export declare function buildRejectMessage(candidates: DuplicateCandidate[]): string;
252
+ export declare function buildRejectMessage(candidates: DuplicateCandidate[], tier?: DuplicateCheckResult['tier']): string;
196
253
  /**
197
254
  * Load active tasks from the data accessor, restricted to non-terminal statuses.
198
255
  * Exported for testing purposes.