@cleocode/core 2026.9.7 → 2026.9.9

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 (565) hide show
  1. package/dist/audit/reconstruct.d.ts +13 -43
  2. package/dist/audit/reconstruct.d.ts.map +1 -1
  3. package/dist/audit/reconstruct.js +295 -290
  4. package/dist/audit/reconstruct.js.map +1 -1
  5. package/dist/bootstrap.d.ts.map +1 -1
  6. package/dist/bootstrap.js +8 -2
  7. package/dist/bootstrap.js.map +1 -1
  8. package/dist/dispatch/mutate-projection.d.ts.map +1 -1
  9. package/dist/dispatch/mutate-projection.js +12 -0
  10. package/dist/dispatch/mutate-projection.js.map +1 -1
  11. package/dist/dispatch/mvi-projection.d.ts +29 -6
  12. package/dist/dispatch/mvi-projection.d.ts.map +1 -1
  13. package/dist/dispatch/mvi-projection.js +109 -139
  14. package/dist/dispatch/mvi-projection.js.map +1 -1
  15. package/dist/docs/docs-read-model.d.ts +3 -2
  16. package/dist/docs/docs-read-model.d.ts.map +1 -1
  17. package/dist/docs/docs-read-model.js +4 -3
  18. package/dist/docs/docs-read-model.js.map +1 -1
  19. package/dist/docs/export-document.js +5100 -2297
  20. package/dist/docs/export-document.js.map +3 -3
  21. package/dist/docs/projection.d.ts +67 -0
  22. package/dist/docs/projection.d.ts.map +1 -0
  23. package/dist/docs/projection.js +370 -0
  24. package/dist/docs/projection.js.map +1 -0
  25. package/dist/doctor/acceptance-drift.d.ts +6 -2
  26. package/dist/doctor/acceptance-drift.d.ts.map +1 -1
  27. package/dist/doctor/acceptance-drift.js +43 -5
  28. package/dist/doctor/acceptance-drift.js.map +1 -1
  29. package/dist/doctor/knowledge-summary.d.ts +41 -0
  30. package/dist/doctor/knowledge-summary.d.ts.map +1 -0
  31. package/dist/doctor/knowledge-summary.js +81 -0
  32. package/dist/doctor/knowledge-summary.js.map +1 -0
  33. package/dist/doctor/knowledge.d.ts +192 -0
  34. package/dist/doctor/knowledge.d.ts.map +1 -0
  35. package/dist/doctor/knowledge.js +1864 -0
  36. package/dist/doctor/knowledge.js.map +1 -0
  37. package/dist/git/work-tree.d.ts +64 -0
  38. package/dist/git/work-tree.d.ts.map +1 -0
  39. package/dist/git/work-tree.js +111 -0
  40. package/dist/git/work-tree.js.map +1 -0
  41. package/dist/hooks/handlers/task-hooks.d.ts +8 -5
  42. package/dist/hooks/handlers/task-hooks.d.ts.map +1 -1
  43. package/dist/hooks/handlers/task-hooks.js +15 -60
  44. package/dist/hooks/handlers/task-hooks.js.map +1 -1
  45. package/dist/identity/cleo-identity.d.ts +13 -0
  46. package/dist/identity/cleo-identity.d.ts.map +1 -1
  47. package/dist/identity/cleo-identity.js +20 -6
  48. package/dist/identity/cleo-identity.js.map +1 -1
  49. package/dist/injection.d.ts.map +1 -1
  50. package/dist/injection.js +29 -13
  51. package/dist/injection.js.map +1 -1
  52. package/dist/internal.d.ts +2 -0
  53. package/dist/internal.d.ts.map +1 -1
  54. package/dist/internal.js +2 -0
  55. package/dist/internal.js.map +1 -1
  56. package/dist/lifecycle/verification/satisfies-validator.d.ts.map +1 -1
  57. package/dist/lifecycle/verification/satisfies-validator.js +124 -120
  58. package/dist/lifecycle/verification/satisfies-validator.js.map +1 -1
  59. package/dist/llm/plugin-facade.js +4018 -1726
  60. package/dist/llm/plugin-facade.js.map +3 -3
  61. package/dist/memory/brain-backfill.d.ts +27 -12
  62. package/dist/memory/brain-backfill.d.ts.map +1 -1
  63. package/dist/memory/brain-backfill.js +325 -134
  64. package/dist/memory/brain-backfill.js.map +1 -1
  65. package/dist/memory/brain-doctor.d.ts +21 -0
  66. package/dist/memory/brain-doctor.d.ts.map +1 -1
  67. package/dist/memory/brain-doctor.js +111 -53
  68. package/dist/memory/brain-doctor.js.map +1 -1
  69. package/dist/memory/brain-links.d.ts.map +1 -1
  70. package/dist/memory/brain-links.js +31 -4
  71. package/dist/memory/brain-links.js.map +1 -1
  72. package/dist/memory/brain-reasoning.d.ts.map +1 -1
  73. package/dist/memory/brain-reasoning.js +28 -2
  74. package/dist/memory/brain-reasoning.js.map +1 -1
  75. package/dist/memory/brain-reconciler.d.ts +14 -19
  76. package/dist/memory/brain-reconciler.d.ts.map +1 -1
  77. package/dist/memory/brain-reconciler.js +70 -97
  78. package/dist/memory/brain-reconciler.js.map +1 -1
  79. package/dist/memory/brain-search.d.ts +2 -0
  80. package/dist/memory/brain-search.d.ts.map +1 -1
  81. package/dist/memory/brain-search.js +59 -29
  82. package/dist/memory/brain-search.js.map +1 -1
  83. package/dist/memory/brain-similarity.d.ts.map +1 -1
  84. package/dist/memory/brain-similarity.js +5 -4
  85. package/dist/memory/brain-similarity.js.map +1 -1
  86. package/dist/memory/brain-stub-prune.d.ts +31 -9
  87. package/dist/memory/brain-stub-prune.d.ts.map +1 -1
  88. package/dist/memory/brain-stub-prune.js +65 -18
  89. package/dist/memory/brain-stub-prune.js.map +1 -1
  90. package/dist/memory/brain-writer-handlers.d.ts +10 -1
  91. package/dist/memory/brain-writer-handlers.d.ts.map +1 -1
  92. package/dist/memory/brain-writer-handlers.js +23 -3
  93. package/dist/memory/brain-writer-handlers.js.map +1 -1
  94. package/dist/memory/brain-writer-thread.d.ts +31 -1
  95. package/dist/memory/brain-writer-thread.d.ts.map +1 -1
  96. package/dist/memory/brain-writer-thread.js +166 -24
  97. package/dist/memory/brain-writer-thread.js.map +1 -1
  98. package/dist/memory/brain-writer-worker.js +8 -1
  99. package/dist/memory/brain-writer-worker.js.map +1 -1
  100. package/dist/memory/decision-cross-link.d.ts +39 -0
  101. package/dist/memory/decision-cross-link.d.ts.map +1 -1
  102. package/dist/memory/decision-cross-link.js +316 -0
  103. package/dist/memory/decision-cross-link.js.map +1 -1
  104. package/dist/memory/decisions.d.ts +4 -1
  105. package/dist/memory/decisions.d.ts.map +1 -1
  106. package/dist/memory/decisions.js +7 -24
  107. package/dist/memory/decisions.js.map +1 -1
  108. package/dist/memory/dispatch-trace.d.ts +12 -5
  109. package/dist/memory/dispatch-trace.d.ts.map +1 -1
  110. package/dist/memory/dispatch-trace.js +17 -7
  111. package/dist/memory/dispatch-trace.js.map +1 -1
  112. package/dist/memory/eligibility.d.ts +51 -0
  113. package/dist/memory/eligibility.d.ts.map +1 -0
  114. package/dist/memory/eligibility.js +77 -0
  115. package/dist/memory/eligibility.js.map +1 -0
  116. package/dist/memory/engine-compat.d.ts +2 -0
  117. package/dist/memory/engine-compat.d.ts.map +1 -1
  118. package/dist/memory/engine-compat.js +10 -0
  119. package/dist/memory/engine-compat.js.map +1 -1
  120. package/dist/memory/extraction-gate.d.ts +21 -7
  121. package/dist/memory/extraction-gate.d.ts.map +1 -1
  122. package/dist/memory/extraction-gate.js +178 -216
  123. package/dist/memory/extraction-gate.js.map +1 -1
  124. package/dist/memory/graph-auto-populate.d.ts +38 -5
  125. package/dist/memory/graph-auto-populate.d.ts.map +1 -1
  126. package/dist/memory/graph-auto-populate.js +182 -60
  127. package/dist/memory/graph-auto-populate.js.map +1 -1
  128. package/dist/memory/graph-memory-bridge.d.ts +14 -1
  129. package/dist/memory/graph-memory-bridge.d.ts.map +1 -1
  130. package/dist/memory/graph-memory-bridge.js +66 -28
  131. package/dist/memory/graph-memory-bridge.js.map +1 -1
  132. package/dist/memory/index.d.ts +1 -19
  133. package/dist/memory/index.d.ts.map +1 -1
  134. package/dist/memory/index.js +1 -50
  135. package/dist/memory/index.js.map +1 -1
  136. package/dist/memory/learnings.d.ts.map +1 -1
  137. package/dist/memory/learnings.js +2 -23
  138. package/dist/memory/learnings.js.map +1 -1
  139. package/dist/memory/manifest-filter.d.ts +21 -0
  140. package/dist/memory/manifest-filter.d.ts.map +1 -0
  141. package/dist/memory/manifest-filter.js +51 -0
  142. package/dist/memory/manifest-filter.js.map +1 -0
  143. package/dist/memory/manifest-ingestion.d.ts +28 -30
  144. package/dist/memory/manifest-ingestion.d.ts.map +1 -1
  145. package/dist/memory/manifest-ingestion.js +104 -235
  146. package/dist/memory/manifest-ingestion.js.map +1 -1
  147. package/dist/memory/observer-reflector.d.ts +2 -0
  148. package/dist/memory/observer-reflector.d.ts.map +1 -1
  149. package/dist/memory/observer-reflector.js +6 -49
  150. package/dist/memory/observer-reflector.js.map +1 -1
  151. package/dist/memory/patterns.d.ts +10 -0
  152. package/dist/memory/patterns.d.ts.map +1 -1
  153. package/dist/memory/patterns.js +25 -33
  154. package/dist/memory/patterns.js.map +1 -1
  155. package/dist/memory/pipeline-manifest-sqlite.d.ts +72 -9
  156. package/dist/memory/pipeline-manifest-sqlite.d.ts.map +1 -1
  157. package/dist/memory/pipeline-manifest-sqlite.js +508 -412
  158. package/dist/memory/pipeline-manifest-sqlite.js.map +1 -1
  159. package/dist/memory/retrieval/build-retrieval-bundle.d.ts.map +1 -1
  160. package/dist/memory/retrieval/build-retrieval-bundle.js +16 -15
  161. package/dist/memory/retrieval/build-retrieval-bundle.js.map +1 -1
  162. package/dist/memory/retrieval/fetch.d.ts +7 -0
  163. package/dist/memory/retrieval/fetch.d.ts.map +1 -1
  164. package/dist/memory/retrieval/fetch.js +14 -11
  165. package/dist/memory/retrieval/fetch.js.map +1 -1
  166. package/dist/memory/retrieval/observe.d.ts +7 -1
  167. package/dist/memory/retrieval/observe.d.ts.map +1 -1
  168. package/dist/memory/retrieval/observe.js +58 -4
  169. package/dist/memory/retrieval/observe.js.map +1 -1
  170. package/dist/memory/retrieval/search.d.ts +14 -1
  171. package/dist/memory/retrieval/search.d.ts.map +1 -1
  172. package/dist/memory/retrieval/search.js +133 -69
  173. package/dist/memory/retrieval/search.js.map +1 -1
  174. package/dist/memory/retrieval/telemetry.d.ts +31 -0
  175. package/dist/memory/retrieval/telemetry.d.ts.map +1 -0
  176. package/dist/memory/retrieval/telemetry.js +53 -0
  177. package/dist/memory/retrieval/telemetry.js.map +1 -0
  178. package/dist/nexus/analyze-orchestrator.d.ts +41 -9
  179. package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
  180. package/dist/nexus/analyze-orchestrator.js +257 -58
  181. package/dist/nexus/analyze-orchestrator.js.map +1 -1
  182. package/dist/nexus/api-contracts.d.ts +2 -6
  183. package/dist/nexus/api-contracts.d.ts.map +1 -1
  184. package/dist/nexus/api-contracts.js +11 -2
  185. package/dist/nexus/api-contracts.js.map +1 -1
  186. package/dist/nexus/context.d.ts.map +1 -1
  187. package/dist/nexus/context.js +14 -37
  188. package/dist/nexus/context.js.map +1 -1
  189. package/dist/nexus/diff.d.ts.map +1 -1
  190. package/dist/nexus/diff.js +2 -1
  191. package/dist/nexus/diff.js.map +1 -1
  192. package/dist/nexus/identity.d.ts +29 -3
  193. package/dist/nexus/identity.d.ts.map +1 -1
  194. package/dist/nexus/identity.js +63 -12
  195. package/dist/nexus/identity.js.map +1 -1
  196. package/dist/nexus/impact.d.ts +21 -19
  197. package/dist/nexus/impact.d.ts.map +1 -1
  198. package/dist/nexus/impact.js +96 -192
  199. package/dist/nexus/impact.js.map +1 -1
  200. package/dist/nexus/knowledge.d.ts +80 -0
  201. package/dist/nexus/knowledge.d.ts.map +1 -0
  202. package/dist/nexus/knowledge.js +786 -0
  203. package/dist/nexus/knowledge.js.map +1 -0
  204. package/dist/nexus/living-brain.d.ts +8 -5
  205. package/dist/nexus/living-brain.d.ts.map +1 -1
  206. package/dist/nexus/living-brain.js +252 -188
  207. package/dist/nexus/living-brain.js.map +1 -1
  208. package/dist/nexus/registry.d.ts +11 -2
  209. package/dist/nexus/registry.d.ts.map +1 -1
  210. package/dist/nexus/registry.js +144 -128
  211. package/dist/nexus/registry.js.map +1 -1
  212. package/dist/nexus/source-roots.d.ts +16 -0
  213. package/dist/nexus/source-roots.d.ts.map +1 -0
  214. package/dist/nexus/source-roots.js +174 -0
  215. package/dist/nexus/source-roots.js.map +1 -0
  216. package/dist/nexus/task-evidence.d.ts +22 -0
  217. package/dist/nexus/task-evidence.d.ts.map +1 -0
  218. package/dist/nexus/task-evidence.js +210 -0
  219. package/dist/nexus/task-evidence.js.map +1 -0
  220. package/dist/nexus/tasks-bridge.d.ts +14 -7
  221. package/dist/nexus/tasks-bridge.d.ts.map +1 -1
  222. package/dist/nexus/tasks-bridge.js +81 -40
  223. package/dist/nexus/tasks-bridge.js.map +1 -1
  224. package/dist/orchestrate/lifecycle-ops.d.ts.map +1 -1
  225. package/dist/orchestrate/lifecycle-ops.js +170 -120
  226. package/dist/orchestrate/lifecycle-ops.js.map +1 -1
  227. package/dist/orchestrate/query-ops.d.ts +6 -7
  228. package/dist/orchestrate/query-ops.d.ts.map +1 -1
  229. package/dist/orchestrate/query-ops.js +509 -532
  230. package/dist/orchestrate/query-ops.js.map +1 -1
  231. package/dist/orchestration/bootstrap.d.ts +15 -1
  232. package/dist/orchestration/bootstrap.d.ts.map +1 -1
  233. package/dist/orchestration/bootstrap.js +21 -10
  234. package/dist/orchestration/bootstrap.js.map +1 -1
  235. package/dist/orchestration/index.d.ts +35 -3
  236. package/dist/orchestration/index.d.ts.map +1 -1
  237. package/dist/orchestration/index.js +64 -35
  238. package/dist/orchestration/index.js.map +1 -1
  239. package/dist/orchestration/lead-rollup.d.ts +24 -1
  240. package/dist/orchestration/lead-rollup.d.ts.map +1 -1
  241. package/dist/orchestration/lead-rollup.js +31 -11
  242. package/dist/orchestration/lead-rollup.js.map +1 -1
  243. package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
  244. package/dist/orchestration/spawn-prompt.js +16 -41
  245. package/dist/orchestration/spawn-prompt.js.map +1 -1
  246. package/dist/orchestration/unblock.d.ts +15 -1
  247. package/dist/orchestration/unblock.d.ts.map +1 -1
  248. package/dist/orchestration/unblock.js +23 -12
  249. package/dist/orchestration/unblock.js.map +1 -1
  250. package/dist/orchestration/validate-spawn.d.ts.map +1 -1
  251. package/dist/orchestration/validate-spawn.js +3 -3
  252. package/dist/orchestration/validate-spawn.js.map +1 -1
  253. package/dist/orchestration/waves.d.ts +29 -13
  254. package/dist/orchestration/waves.d.ts.map +1 -1
  255. package/dist/orchestration/waves.js +43 -55
  256. package/dist/orchestration/waves.js.map +1 -1
  257. package/dist/paths.d.ts +17 -163
  258. package/dist/paths.d.ts.map +1 -1
  259. package/dist/paths.js +145 -496
  260. package/dist/paths.js.map +1 -1
  261. package/dist/project-info.d.ts +2 -11
  262. package/dist/project-info.d.ts.map +1 -1
  263. package/dist/project-info.js +3 -31
  264. package/dist/project-info.js.map +1 -1
  265. package/dist/project-scope.d.ts +239 -0
  266. package/dist/project-scope.d.ts.map +1 -0
  267. package/dist/project-scope.js +473 -0
  268. package/dist/project-scope.js.map +1 -0
  269. package/dist/release/pr-evidence.d.ts +16 -3
  270. package/dist/release/pr-evidence.d.ts.map +1 -1
  271. package/dist/release/pr-evidence.js +53 -7
  272. package/dist/release/pr-evidence.js.map +1 -1
  273. package/dist/render/nexus/graph/index.d.ts.map +1 -1
  274. package/dist/render/nexus/graph/index.js +4 -2
  275. package/dist/render/nexus/graph/index.js.map +1 -1
  276. package/dist/render/orchestration/audit-reconstruct.d.ts +11 -0
  277. package/dist/render/orchestration/audit-reconstruct.d.ts.map +1 -1
  278. package/dist/render/orchestration/audit-reconstruct.js +21 -6
  279. package/dist/render/orchestration/audit-reconstruct.js.map +1 -1
  280. package/dist/render/tasks/show.js +2 -1
  281. package/dist/render/tasks/show.js.map +1 -1
  282. package/dist/resources/spawn-wrapper.d.ts +82 -14
  283. package/dist/resources/spawn-wrapper.d.ts.map +1 -1
  284. package/dist/resources/spawn-wrapper.js +585 -27
  285. package/dist/resources/spawn-wrapper.js.map +1 -1
  286. package/dist/selfimprove/fix-gen.js +4026 -1734
  287. package/dist/selfimprove/fix-gen.js.map +3 -3
  288. package/dist/sequence/index.d.ts.map +1 -1
  289. package/dist/sequence/index.js +76 -68
  290. package/dist/sequence/index.js.map +1 -1
  291. package/dist/session/canon-lint.d.ts +24 -3
  292. package/dist/session/canon-lint.d.ts.map +1 -1
  293. package/dist/session/canon-lint.js +72 -31
  294. package/dist/session/canon-lint.js.map +1 -1
  295. package/dist/session/engine-ops.d.ts +1 -4
  296. package/dist/session/engine-ops.d.ts.map +1 -1
  297. package/dist/session/engine-ops.js +6 -2
  298. package/dist/session/engine-ops.js.map +1 -1
  299. package/dist/sessions/briefing.d.ts +11 -1
  300. package/dist/sessions/briefing.d.ts.map +1 -1
  301. package/dist/sessions/briefing.js +76 -8
  302. package/dist/sessions/briefing.js.map +1 -1
  303. package/dist/sessions/handoff.d.ts +3 -1
  304. package/dist/sessions/handoff.d.ts.map +1 -1
  305. package/dist/sessions/handoff.js +2 -0
  306. package/dist/sessions/handoff.js.map +1 -1
  307. package/dist/shutdown-deadline.d.ts +24 -33
  308. package/dist/shutdown-deadline.d.ts.map +1 -1
  309. package/dist/shutdown-deadline.js +71 -14
  310. package/dist/shutdown-deadline.js.map +1 -1
  311. package/dist/shutdown.d.ts +21 -10
  312. package/dist/shutdown.d.ts.map +1 -1
  313. package/dist/shutdown.js +91 -35
  314. package/dist/shutdown.js.map +1 -1
  315. package/dist/skills/index.d.ts +1 -1
  316. package/dist/skills/index.d.ts.map +1 -1
  317. package/dist/skills/index.js +1 -1
  318. package/dist/skills/index.js.map +1 -1
  319. package/dist/skills/orchestrator/validator.d.ts +87 -20
  320. package/dist/skills/orchestrator/validator.d.ts.map +1 -1
  321. package/dist/skills/orchestrator/validator.js +330 -241
  322. package/dist/skills/orchestrator/validator.js.map +1 -1
  323. package/dist/store/agent-resolver.d.ts.map +1 -1
  324. package/dist/store/agent-resolver.js +16 -9
  325. package/dist/store/agent-resolver.js.map +1 -1
  326. package/dist/store/attachment-store.d.ts +4 -1
  327. package/dist/store/attachment-store.d.ts.map +1 -1
  328. package/dist/store/attachment-store.js +20 -3
  329. package/dist/store/attachment-store.js.map +1 -1
  330. package/dist/store/background-jobs.d.ts +426 -105
  331. package/dist/store/background-jobs.d.ts.map +1 -1
  332. package/dist/store/background-jobs.js +1208 -252
  333. package/dist/store/background-jobs.js.map +1 -1
  334. package/dist/store/background-ops.d.ts +145 -8
  335. package/dist/store/background-ops.d.ts.map +1 -1
  336. package/dist/store/background-ops.js +459 -15
  337. package/dist/store/background-ops.js.map +1 -1
  338. package/dist/store/backup-inspect.d.ts +48 -4
  339. package/dist/store/backup-inspect.d.ts.map +1 -1
  340. package/dist/store/backup-inspect.js +384 -4
  341. package/dist/store/backup-inspect.js.map +1 -1
  342. package/dist/store/converters.d.ts.map +1 -1
  343. package/dist/store/converters.js +19 -2
  344. package/dist/store/converters.js.map +1 -1
  345. package/dist/store/data-accessor.d.ts +9 -1
  346. package/dist/store/data-accessor.d.ts.map +1 -1
  347. package/dist/store/data-accessor.js +22 -5
  348. package/dist/store/data-accessor.js.map +1 -1
  349. package/dist/store/data-safety-central.d.ts.map +1 -1
  350. package/dist/store/data-safety-central.js +272 -232
  351. package/dist/store/data-safety-central.js.map +1 -1
  352. package/dist/store/db-helpers.d.ts +19 -3
  353. package/dist/store/db-helpers.d.ts.map +1 -1
  354. package/dist/store/db-helpers.js +42 -58
  355. package/dist/store/db-helpers.js.map +1 -1
  356. package/dist/store/dual-scope-db.d.ts +63 -4
  357. package/dist/store/dual-scope-db.d.ts.map +1 -1
  358. package/dist/store/dual-scope-db.js +166 -19
  359. package/dist/store/dual-scope-db.js.map +1 -1
  360. package/dist/store/exodus/archive.d.ts +21 -7
  361. package/dist/store/exodus/archive.d.ts.map +1 -1
  362. package/dist/store/exodus/archive.js +60 -18
  363. package/dist/store/exodus/archive.js.map +1 -1
  364. package/dist/store/exodus/migrate.d.ts.map +1 -1
  365. package/dist/store/exodus/migrate.js +27 -23
  366. package/dist/store/exodus/migrate.js.map +1 -1
  367. package/dist/store/exodus/on-open.d.ts +16 -27
  368. package/dist/store/exodus/on-open.d.ts.map +1 -1
  369. package/dist/store/exodus/on-open.js +121 -169
  370. package/dist/store/exodus/on-open.js.map +1 -1
  371. package/dist/store/exodus/recovery.d.ts +90 -0
  372. package/dist/store/exodus/recovery.d.ts.map +1 -0
  373. package/dist/store/exodus/recovery.js +434 -0
  374. package/dist/store/exodus/recovery.js.map +1 -0
  375. package/dist/store/exodus/types.d.ts +15 -0
  376. package/dist/store/exodus/types.d.ts.map +1 -1
  377. package/dist/store/memory-accessor.d.ts +52 -3
  378. package/dist/store/memory-accessor.d.ts.map +1 -1
  379. package/dist/store/memory-accessor.js +122 -7
  380. package/dist/store/memory-accessor.js.map +1 -1
  381. package/dist/store/nexus-sqlite.d.ts +24 -6
  382. package/dist/store/nexus-sqlite.d.ts.map +1 -1
  383. package/dist/store/nexus-sqlite.js +39 -20
  384. package/dist/store/nexus-sqlite.js.map +1 -1
  385. package/dist/store/ports/domain-binding.d.ts.map +1 -1
  386. package/dist/store/ports/domain-binding.js +27 -5
  387. package/dist/store/ports/domain-binding.js.map +1 -1
  388. package/dist/store/schema/background-jobs.d.ts +181 -2
  389. package/dist/store/schema/background-jobs.d.ts.map +1 -1
  390. package/dist/store/schema/background-jobs.js +27 -3
  391. package/dist/store/schema/background-jobs.js.map +1 -1
  392. package/dist/store/schema/cleo-global/skills.d.ts +2 -2
  393. package/dist/store/schema/cleo-project/lifecycle.d.ts +2 -2
  394. package/dist/store/schema/cleo-project/runtime.d.ts +1 -1
  395. package/dist/store/schema/cleo-project/tasks-core.d.ts +1 -1
  396. package/dist/store/schema/lifecycle.d.ts +2 -2
  397. package/dist/store/schema/skills-schema.d.ts +2 -2
  398. package/dist/store/schema/tasks.d.ts +1 -1
  399. package/dist/store/session-store.d.ts +3 -1
  400. package/dist/store/session-store.d.ts.map +1 -1
  401. package/dist/store/session-store.js +252 -207
  402. package/dist/store/session-store.js.map +1 -1
  403. package/dist/store/sqlite-data-accessor.d.ts +39 -4
  404. package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
  405. package/dist/store/sqlite-data-accessor.js +689 -527
  406. package/dist/store/sqlite-data-accessor.js.map +1 -1
  407. package/dist/store/tasks-sqlite.d.ts +3 -1
  408. package/dist/store/tasks-sqlite.d.ts.map +1 -1
  409. package/dist/store/tasks-sqlite.js +309 -279
  410. package/dist/store/tasks-sqlite.js.map +1 -1
  411. package/dist/store/validation-schemas.d.ts +8 -8
  412. package/dist/store/writer-lease.d.ts +80 -8
  413. package/dist/store/writer-lease.d.ts.map +1 -1
  414. package/dist/store/writer-lease.js +503 -134
  415. package/dist/store/writer-lease.js.map +1 -1
  416. package/dist/system/audit.d.ts +2 -1
  417. package/dist/system/audit.d.ts.map +1 -1
  418. package/dist/system/audit.js +118 -71
  419. package/dist/system/audit.js.map +1 -1
  420. package/dist/system/backup.d.ts.map +1 -1
  421. package/dist/system/backup.js +5 -5
  422. package/dist/system/backup.js.map +1 -1
  423. package/dist/system/inject-generate.js +1 -1
  424. package/dist/task-work/index.d.ts +3 -0
  425. package/dist/task-work/index.d.ts.map +1 -1
  426. package/dist/task-work/index.js +34 -37
  427. package/dist/task-work/index.js.map +1 -1
  428. package/dist/tasks/ac-coverage-gate.d.ts.map +1 -1
  429. package/dist/tasks/ac-coverage-gate.js +4 -0
  430. package/dist/tasks/ac-coverage-gate.js.map +1 -1
  431. package/dist/tasks/ac-immutability.d.ts +7 -4
  432. package/dist/tasks/ac-immutability.d.ts.map +1 -1
  433. package/dist/tasks/ac-immutability.js +19 -17
  434. package/dist/tasks/ac-immutability.js.map +1 -1
  435. package/dist/tasks/ac-table.d.ts +5 -5
  436. package/dist/tasks/ac-table.d.ts.map +1 -1
  437. package/dist/tasks/ac-table.js +26 -12
  438. package/dist/tasks/ac-table.js.map +1 -1
  439. package/dist/tasks/acceptance-input.d.ts +52 -0
  440. package/dist/tasks/acceptance-input.d.ts.map +1 -0
  441. package/dist/tasks/acceptance-input.js +259 -0
  442. package/dist/tasks/acceptance-input.js.map +1 -0
  443. package/dist/tasks/add.d.ts +67 -29
  444. package/dist/tasks/add.d.ts.map +1 -1
  445. package/dist/tasks/add.js +255 -97
  446. package/dist/tasks/add.js.map +1 -1
  447. package/dist/tasks/complete.d.ts +16 -1
  448. package/dist/tasks/complete.d.ts.map +1 -1
  449. package/dist/tasks/complete.js +152 -55
  450. package/dist/tasks/complete.js.map +1 -1
  451. package/dist/tasks/decompose.d.ts +103 -0
  452. package/dist/tasks/decompose.d.ts.map +1 -0
  453. package/dist/tasks/decompose.js +224 -0
  454. package/dist/tasks/decompose.js.map +1 -0
  455. package/dist/tasks/delete.d.ts +5 -8
  456. package/dist/tasks/delete.d.ts.map +1 -1
  457. package/dist/tasks/delete.js +4 -3
  458. package/dist/tasks/delete.js.map +1 -1
  459. package/dist/tasks/dependency-check.d.ts +59 -0
  460. package/dist/tasks/dependency-check.d.ts.map +1 -1
  461. package/dist/tasks/dependency-check.js +73 -0
  462. package/dist/tasks/dependency-check.js.map +1 -1
  463. package/dist/tasks/deps-ready.d.ts +13 -1
  464. package/dist/tasks/deps-ready.d.ts.map +1 -1
  465. package/dist/tasks/deps-ready.js +16 -5
  466. package/dist/tasks/deps-ready.js.map +1 -1
  467. package/dist/tasks/engine-converters.d.ts +7 -0
  468. package/dist/tasks/engine-converters.d.ts.map +1 -1
  469. package/dist/tasks/engine-converters.js +8 -1
  470. package/dist/tasks/engine-converters.js.map +1 -1
  471. package/dist/tasks/evidence.d.ts +54 -26
  472. package/dist/tasks/evidence.d.ts.map +1 -1
  473. package/dist/tasks/evidence.js +292 -40
  474. package/dist/tasks/evidence.js.map +1 -1
  475. package/dist/tasks/find.d.ts +16 -12
  476. package/dist/tasks/find.d.ts.map +1 -1
  477. package/dist/tasks/find.js +107 -93
  478. package/dist/tasks/find.js.map +1 -1
  479. package/dist/tasks/gate-runner.d.ts +88 -14
  480. package/dist/tasks/gate-runner.d.ts.map +1 -1
  481. package/dist/tasks/gate-runner.js +596 -253
  482. package/dist/tasks/gate-runner.js.map +1 -1
  483. package/dist/tasks/hierarchy-policy.d.ts +8 -0
  484. package/dist/tasks/hierarchy-policy.d.ts.map +1 -1
  485. package/dist/tasks/hierarchy-policy.js +9 -2
  486. package/dist/tasks/hierarchy-policy.js.map +1 -1
  487. package/dist/tasks/hierarchy.d.ts +67 -1
  488. package/dist/tasks/hierarchy.d.ts.map +1 -1
  489. package/dist/tasks/hierarchy.js +81 -1
  490. package/dist/tasks/hierarchy.js.map +1 -1
  491. package/dist/tasks/index.d.ts +3 -0
  492. package/dist/tasks/index.d.ts.map +1 -1
  493. package/dist/tasks/index.js +3 -0
  494. package/dist/tasks/index.js.map +1 -1
  495. package/dist/tasks/infer-add-params.d.ts +1 -20
  496. package/dist/tasks/infer-add-params.d.ts.map +1 -1
  497. package/dist/tasks/infer-add-params.js +2 -203
  498. package/dist/tasks/infer-add-params.js.map +1 -1
  499. package/dist/tasks/list.d.ts +7 -2
  500. package/dist/tasks/list.d.ts.map +1 -1
  501. package/dist/tasks/list.js +24 -36
  502. package/dist/tasks/list.js.map +1 -1
  503. package/dist/tasks/ops.d.ts +6 -61
  504. package/dist/tasks/ops.d.ts.map +1 -1
  505. package/dist/tasks/ops.js +5 -53
  506. package/dist/tasks/ops.js.map +1 -1
  507. package/dist/tasks/plan.d.ts +15 -1
  508. package/dist/tasks/plan.d.ts.map +1 -1
  509. package/dist/tasks/plan.js +23 -25
  510. package/dist/tasks/plan.js.map +1 -1
  511. package/dist/tasks/population.d.ts +46 -0
  512. package/dist/tasks/population.d.ts.map +1 -0
  513. package/dist/tasks/population.js +88 -0
  514. package/dist/tasks/population.js.map +1 -0
  515. package/dist/tasks/reconcile-scope.d.ts +157 -0
  516. package/dist/tasks/reconcile-scope.d.ts.map +1 -0
  517. package/dist/tasks/reconcile-scope.js +242 -0
  518. package/dist/tasks/reconcile-scope.js.map +1 -0
  519. package/dist/tasks/req.d.ts +51 -12
  520. package/dist/tasks/req.d.ts.map +1 -1
  521. package/dist/tasks/req.js +125 -69
  522. package/dist/tasks/req.js.map +1 -1
  523. package/dist/tasks/session-scope.d.ts +6 -31
  524. package/dist/tasks/session-scope.d.ts.map +1 -1
  525. package/dist/tasks/session-scope.js +3 -17
  526. package/dist/tasks/session-scope.js.map +1 -1
  527. package/dist/tasks/severity-attestation.d.ts +39 -10
  528. package/dist/tasks/severity-attestation.d.ts.map +1 -1
  529. package/dist/tasks/severity-attestation.js +75 -36
  530. package/dist/tasks/severity-attestation.js.map +1 -1
  531. package/dist/tasks/task-next.d.ts +5 -0
  532. package/dist/tasks/task-next.d.ts.map +1 -1
  533. package/dist/tasks/task-next.js +10 -9
  534. package/dist/tasks/task-next.js.map +1 -1
  535. package/dist/tasks/task-reparent.d.ts.map +1 -1
  536. package/dist/tasks/task-reparent.js +3 -13
  537. package/dist/tasks/task-reparent.js.map +1 -1
  538. package/dist/tasks/update.d.ts +20 -43
  539. package/dist/tasks/update.d.ts.map +1 -1
  540. package/dist/tasks/update.js +64 -49
  541. package/dist/tasks/update.js.map +1 -1
  542. package/dist/teardown-signal.d.ts +72 -0
  543. package/dist/teardown-signal.d.ts.map +1 -0
  544. package/dist/teardown-signal.js +108 -0
  545. package/dist/teardown-signal.js.map +1 -0
  546. package/dist/validation/engine-ops.d.ts +17 -1
  547. package/dist/validation/engine-ops.d.ts.map +1 -1
  548. package/dist/validation/engine-ops.js +149 -11
  549. package/dist/validation/engine-ops.js.map +1 -1
  550. package/dist/workgraph/reparent-preflight.d.ts +1 -1
  551. package/dist/workgraph/reparent-preflight.d.ts.map +1 -1
  552. package/dist/workgraph/reparent-preflight.js +6 -1
  553. package/dist/workgraph/reparent-preflight.js.map +1 -1
  554. package/dist/workgraph/scaffold-apply.d.ts.map +1 -1
  555. package/dist/workgraph/scaffold-apply.js +81 -76
  556. package/dist/workgraph/scaffold-apply.js.map +1 -1
  557. package/dist/workgraph/structure-validation.d.ts +1 -1
  558. package/dist/workgraph/structure-validation.d.ts.map +1 -1
  559. package/dist/workgraph/structure-validation.js +6 -1
  560. package/dist/workgraph/structure-validation.js.map +1 -1
  561. package/migrations/drizzle-tasks/20260919180000_t12263-job-ownership-fences/migration.sql +34 -0
  562. package/migrations/drizzle-tasks/20260919184500_t12265-durable-pending-proposals/migration.sql +4 -0
  563. package/package.json +18 -13
  564. package/schemas/config.schema.json +2 -2
  565. package/templates/CLEO-INJECTION.md +103 -101
@@ -27,41 +27,485 @@
27
27
  * @task T10490
28
28
  * @see packages/core/src/store/__tests__/test-db-helper.ts (flush wiring)
29
29
  */
30
+ import { AsyncLocalStorage } from 'node:async_hooks';
31
+ import { isAbsolute } from 'node:path';
32
+ import { registerTeardownAbort } from '../teardown-signal.js';
30
33
  /** Promises for best-effort background work that has not yet settled. */
31
34
  const inFlight = new Set();
35
+ const backgroundCommitBoundary = new AsyncLocalStorage();
32
36
  /**
33
- * Register a best-effort background promise so a later {@link awaitBackgroundOps}
34
- * can flush it. The promise is wrapped so a rejection never escapes the
35
- * registry (callers keep their own `.catch`); the wrapper removes itself from
36
- * the set once settled.
37
- *
38
- * @param op - the detached best-effort promise to track
37
+ * Stage lazy effects until the supplied transaction has actually committed.
38
+ * @typeParam T - Committed transaction result.
39
+ * @param native - Existing writer handle whose nested savepoints share this boundary.
40
+ * @param commit - Existing transaction implementation, including commit or rollback.
41
+ * @param execution - Existing captured budget; never replaced with a fresh context.
42
+ * @param schedule - Existing writer queue admission for committed effects.
43
+ * @returns The original committed result; deferred failures never undo it.
44
+ * @remarks Call around the actual transaction, not an individual row write. Nested
45
+ * successful savepoints transfer effects to their parent; rollback discards them.
46
+ * This adds no deadline and never executes eager promises again.
47
+ * @example
48
+ * ```ts
49
+ * await withBackgroundOpCommitBoundary(native, () => executeTransaction());
50
+ * ```
39
51
  */
40
- export function trackBackgroundOp(op) {
41
- const tracked = Promise.resolve(op).catch(() => {
42
- /* Best-effort — the caller owns error handling; never reject the registry. */
43
- });
52
+ export async function withBackgroundOpCommitBoundary(native, commit, execution, schedule) {
53
+ const inherited = backgroundCommitBoundary.getStore();
54
+ const parent = inherited?.active && inherited.native === native ? inherited : undefined;
55
+ const boundary = {
56
+ native,
57
+ execution: execution ?? parent?.execution,
58
+ schedule: schedule ?? parent?.schedule,
59
+ parent,
60
+ active: true,
61
+ deferred: [],
62
+ };
63
+ try {
64
+ const result = await backgroundCommitBoundary.run(boundary, commit);
65
+ boundary.active = false;
66
+ if (parent)
67
+ parent.deferred.push(...boundary.deferred);
68
+ else
69
+ for (const operation of boundary.deferred)
70
+ operation.start();
71
+ return result;
72
+ }
73
+ catch (error) {
74
+ boundary.active = false;
75
+ boundary.rollback = new Error('Background operation discarded because its transaction rolled back', { cause: error });
76
+ for (const operation of boundary.deferred)
77
+ operation.discard(boundary.rollback);
78
+ throw error;
79
+ }
80
+ }
81
+ /**
82
+ * Track an eager legacy promise or defer a lazy effect until outer transaction commit.
83
+ * @param op - Existing promise, or lazy operation that must not run before commit.
84
+ * @param execution - Optional original budget, otherwise inherited from the transaction.
85
+ * @returns An inspectable settled result, including rollback, cancellation and failures.
86
+ * @remarks Lazy work retains captured async context and the original execution budget.
87
+ * The registry counts staged work as pending. Eager promises have already started
88
+ * and cannot gain rollback safety. Results are process-local, not durable job receipts.
89
+ * @example
90
+ * ```ts
91
+ * const outcome = trackBackgroundOp(() => writeProjection());
92
+ * const result = await outcome;
93
+ * ```
94
+ */
95
+ export function trackBackgroundOp(op, execution) {
96
+ const completion = Promise.withResolvers();
97
+ const tracked = completion.promise;
44
98
  inFlight.add(tracked);
45
- void tracked.finally(() => {
46
- inFlight.delete(tracked);
47
- });
99
+ void tracked.then(() => inFlight.delete(tracked));
100
+ const settle = (work) => {
101
+ void work.then(() => completion.resolve({ status: 'fulfilled', value: undefined }), (reason) => completion.resolve({ status: 'rejected', reason }));
102
+ };
103
+ if (typeof op !== 'function') {
104
+ settle(op);
105
+ return tracked;
106
+ }
107
+ const resume = AsyncLocalStorage.snapshot();
108
+ const capturedBoundary = backgroundCommitBoundary.getStore();
109
+ const capturedExecution = execution ?? capturedBoundary?.execution;
110
+ const schedule = capturedBoundary?.schedule;
111
+ let started = false;
112
+ const operation = {
113
+ start() {
114
+ if (started)
115
+ return;
116
+ started = true;
117
+ settle(Promise.resolve().then(() => resume(() => {
118
+ capturedExecution?.assertActive();
119
+ const invoke = async () => {
120
+ capturedExecution?.assertActive();
121
+ return op();
122
+ };
123
+ return schedule ? schedule(invoke) : invoke();
124
+ })));
125
+ },
126
+ discard(error) {
127
+ if (started)
128
+ return;
129
+ started = true;
130
+ completion.resolve({ status: 'rejected', reason: error });
131
+ },
132
+ };
133
+ let boundary = backgroundCommitBoundary.getStore();
134
+ while (boundary && !boundary.active) {
135
+ if (boundary.rollback) {
136
+ operation.discard(boundary.rollback);
137
+ return tracked;
138
+ }
139
+ boundary = boundary.parent;
140
+ }
141
+ if (boundary)
142
+ boundary.deferred.push(operation);
143
+ else
144
+ operation.start();
145
+ return tracked;
48
146
  }
49
147
  /**
50
148
  * Await every currently in-flight background op, then return. Safe to call
51
149
  * repeatedly and when nothing is pending. Loops until the set drains so an op
52
150
  * that schedules further tracked work during the flush is also awaited.
151
+ * @remarks This legacy barrier can wait indefinitely on any one promise. It is
152
+ * not the foreground maintenance budget or proof that untracked work stopped.
153
+ * @example
154
+ * ```ts
155
+ * await awaitBackgroundOps();
156
+ * ```
53
157
  */
54
158
  export async function awaitBackgroundOps() {
55
- // Bound the drain so a pathological self-rescheduling op cannot spin forever.
159
+ if (backgroundCommitBoundary.getStore()?.active) {
160
+ throw new Error('Cannot drain background work before its transaction commits');
161
+ }
162
+ // Bound rescheduling rounds only; a round itself can wait indefinitely.
56
163
  for (let i = 0; i < 100 && inFlight.size > 0; i++) {
57
164
  await Promise.allSettled(Array.from(inFlight));
58
165
  }
59
166
  }
60
167
  /**
61
168
  * Number of background ops currently in flight. Diagnostic/test use — assert it
62
- * is `0` after a flush to prove no detached promise survives a test boundary.
169
+ * is `0` after a flush to account for the tracked subset at a test boundary.
170
+ * @returns Number of registered, unsettled promises.
171
+ * @remarks Unregistered work is not included in this count.
172
+ * @example
173
+ * ```ts
174
+ * const pending = pendingBackgroundOpCount();
175
+ * ```
63
176
  */
64
177
  export function pendingBackgroundOpCount() {
65
178
  return inFlight.size;
66
179
  }
180
+ /**
181
+ * Stable refusal at a cooperating operation boundary.
182
+ * @remarks A refusal does not roll back work already committed by another stage.
183
+ * @example
184
+ * ```ts
185
+ * if (error instanceof OperationExecutionError) record(error.code);
186
+ * ```
187
+ */
188
+ export class OperationExecutionError extends Error {
189
+ /** Machine-readable reason that a new stage was refused. */
190
+ code;
191
+ /**
192
+ * Construct a boundary refusal.
193
+ * @param code - Stable cancellation/deadline/limit reason.
194
+ * @param message - Specific diagnostic for the caller.
195
+ */
196
+ constructor(code, message) {
197
+ super(message);
198
+ this.name = 'OperationExecutionError';
199
+ this.code = code;
200
+ }
201
+ }
202
+ /**
203
+ * Capture one immutable scope and cooperative foreground lifetime.
204
+ * @param identity - Explicit routing and caller identity, captured before awaiting.
205
+ * @param options - Shared deadline, caller cancellation and admission limits.
206
+ * @returns One context to pass unchanged through nested stages; close it in finally.
207
+ * @remarks The timer requests cancellation; boundary checks independently inspect
208
+ * wall time. Neither can preempt synchronous work. Resource limits count declared
209
+ * bytes/items, not actual process memory. This creates no executor or background job.
210
+ * @example
211
+ * ```ts
212
+ * const context = createOperationExecutionContext(identity, { budgetMs: 2000 });
213
+ * try { context.assertActive(); await inspect(context); }
214
+ * finally { context.close(); }
215
+ * ```
216
+ */
217
+ export function createOperationExecutionContext(identity, options = {}) {
218
+ for (const key of ['projectId', 'projectRoot', 'actor', 'operation', 'idempotencyKey']) {
219
+ const value = identity[key];
220
+ if (typeof value !== 'string' || value.trim().length === 0)
221
+ throw new TypeError(`Operation ${key} must be a nonempty string`);
222
+ }
223
+ if (!isAbsolute(identity.projectRoot))
224
+ throw new TypeError('Operation projectRoot must be absolute');
225
+ const budgetMs = options.budgetMs ?? 2000;
226
+ if (!Number.isSafeInteger(budgetMs) || budgetMs < 0)
227
+ throw new TypeError('Operation budgetMs must be a nonnegative safe integer');
228
+ if (options.deadlineAt !== undefined && !Number.isSafeInteger(options.deadlineAt))
229
+ throw new TypeError('Operation deadlineAt must be a safe integer');
230
+ const resources = Object.freeze({ ...options.resources });
231
+ for (const value of Object.values(resources)) {
232
+ if (value !== undefined && (!Number.isSafeInteger(value) || value < 0))
233
+ throw new TypeError('Operation resource limits must be nonnegative safe integers');
234
+ }
235
+ const deadlineAt = Math.min(Date.now() + budgetMs, options.deadlineAt ?? Infinity);
236
+ if (!Number.isSafeInteger(deadlineAt))
237
+ throw new TypeError('Operation deadline exceeds safe range');
238
+ const writeFence = captureWriteFence(options.writeFence);
239
+ const callerSignal = options.signal;
240
+ const controller = new AbortController();
241
+ let bytes = 0;
242
+ let items = 0;
243
+ let closed = false;
244
+ let timer;
245
+ const stop = (code, message) => {
246
+ if (!controller.signal.aborted)
247
+ controller.abort(new OperationExecutionError(code, message));
248
+ };
249
+ const cancel = () => stop('E_OPERATION_CANCELLED', 'Operation cancelled by its caller');
250
+ const expire = () => stop('E_OPERATION_DEADLINE', 'Shared operation deadline reached');
251
+ const remainingMs = () => {
252
+ const remaining = Math.max(0, deadlineAt - Date.now());
253
+ if (remaining === 0)
254
+ expire();
255
+ return remaining;
256
+ };
257
+ const assertActive = () => {
258
+ if (closed)
259
+ throw new OperationExecutionError('E_OPERATION_CLOSED', 'Operation scope is closed');
260
+ remainingMs();
261
+ if (controller.signal.aborted) {
262
+ const reason = controller.signal.reason;
263
+ throw reason instanceof OperationExecutionError
264
+ ? reason
265
+ : new OperationExecutionError('E_OPERATION_CANCELLED', 'Operation cancelled during teardown');
266
+ }
267
+ };
268
+ const consume = (usage) => {
269
+ assertActive();
270
+ const addBytes = usage.bytes ?? 0;
271
+ const addItems = usage.items ?? 0;
272
+ if (!Number.isSafeInteger(addBytes) ||
273
+ addBytes < 0 ||
274
+ !Number.isSafeInteger(addItems) ||
275
+ addItems < 0)
276
+ throw new TypeError('Operation resource usage must be nonnegative safe integers');
277
+ const nextBytes = bytes + addBytes;
278
+ const nextItems = items + addItems;
279
+ if (!Number.isSafeInteger(nextBytes) ||
280
+ !Number.isSafeInteger(nextItems) ||
281
+ nextBytes > (resources.maxBytes ?? Infinity) ||
282
+ nextItems > (resources.maxItems ?? Infinity)) {
283
+ stop('E_OPERATION_RESOURCE_LIMIT', 'Operation resource admission limit exceeded');
284
+ assertActive();
285
+ }
286
+ bytes = nextBytes;
287
+ items = nextItems;
288
+ };
289
+ const deregister = registerTeardownAbort(controller);
290
+ callerSignal?.addEventListener('abort', cancel, { once: true });
291
+ if (callerSignal?.aborted)
292
+ cancel();
293
+ // setTimeout cannot represent arbitrary long deadlines. Recheck instead of
294
+ // allowing overflow to cancel a long-lived explicitly bounded invocation early.
295
+ const schedule = () => {
296
+ const remaining = remainingMs();
297
+ if (remaining > 0 && !controller.signal.aborted && !closed) {
298
+ timer = setTimeout(schedule, Math.min(remaining, 2_147_483_647));
299
+ timer.unref();
300
+ }
301
+ };
302
+ schedule();
303
+ return Object.freeze({
304
+ identity: Object.freeze({ ...identity }),
305
+ ...(writeFence ? { writeFence } : {}),
306
+ deadlineAt,
307
+ signal: controller.signal,
308
+ resources,
309
+ remainingMs,
310
+ assertActive,
311
+ consume,
312
+ close: () => {
313
+ if (closed)
314
+ return;
315
+ closed = true;
316
+ if (timer)
317
+ clearTimeout(timer);
318
+ callerSignal?.removeEventListener('abort', cancel);
319
+ deregister();
320
+ stop('E_OPERATION_CLOSED', 'Operation scope is closed');
321
+ },
322
+ });
323
+ }
324
+ /** Copy and validate an optional authority reference without admitting work. */
325
+ function captureWriteFence(input) {
326
+ const writeFence = input
327
+ ? Object.freeze({
328
+ ...input,
329
+ lease: Object.freeze({ ...input.lease }),
330
+ })
331
+ : undefined;
332
+ if (writeFence &&
333
+ (!isAbsolute(writeFence.dbPath) ||
334
+ !/^[a-f0-9]{64}$/.test(writeFence.proposalHash) ||
335
+ !writeFence.lease.jobId?.trim() ||
336
+ !writeFence.lease.ownerId?.trim() ||
337
+ !Number.isSafeInteger(writeFence.lease.epoch) ||
338
+ writeFence.lease.epoch < 1 ||
339
+ !Number.isSafeInteger(writeFence.lease.expiresAt) ||
340
+ writeFence.lease.expiresAt <= 0))
341
+ throw new TypeError('Invalid operation write fence');
342
+ return writeFence;
343
+ }
344
+ /**
345
+ * Bind a newly claimed job fence without replacing the caller's lifetime or budget.
346
+ * @param context - Original captured operation whose accounting remains authoritative.
347
+ * @param writeFence - Persisted attempt reference to check at domain write boundaries.
348
+ * @param allowCancelledOutcome - Permit an already cancelled scope solely for bounded outcome bookkeeping.
349
+ * @returns Immutable scoped view sharing the original deadline, cancellation and accounting.
350
+ * @throws Error if the scope is inactive, already fenced, or the reference is malformed.
351
+ * @remarks This does not renew a lease or authorize mutation. Binding changes only
352
+ * the immutable authority reference; closing either view invalidates both. The
353
+ * outcome option requires an aborted signal and remaining deadline/lease time,
354
+ * preserves the original failing domain guards, and does not prove persisted ownership.
355
+ * @example
356
+ * ```ts
357
+ * const guarded = bindOperationWriteFence(context, fence);
358
+ * await existingDomainOperation(guarded);
359
+ * ```
360
+ */
361
+ export function bindOperationWriteFence(context, writeFence, allowCancelledOutcome = false) {
362
+ if (typeof allowCancelledOutcome !== 'boolean')
363
+ throw new TypeError('Outcome binding requires an explicit boolean');
364
+ if (context.writeFence)
365
+ throw new Error('Operation already has an immutable write fence');
366
+ const captured = captureWriteFence(writeFence);
367
+ if (!captured)
368
+ throw new TypeError('A claimed operation write fence is required');
369
+ if (allowCancelledOutcome) {
370
+ if (Date.now() >= context.deadlineAt)
371
+ throw new OperationExecutionError('E_OPERATION_DEADLINE', 'Outcome binding deadline elapsed');
372
+ if (!context.signal.aborted)
373
+ throw new TypeError('Outcome-only binding requires an already cancelled operation');
374
+ if (captured.lease.expiresAt <= Date.now())
375
+ throw new TypeError('Outcome binding lease reference expired');
376
+ }
377
+ else
378
+ context.assertActive();
379
+ return Object.freeze({ ...context, writeFence: captured });
380
+ }
381
+ /**
382
+ * Observe supplied work until it settles or the shared scope is cancelled.
383
+ * @typeParam T - Supplied promise's result type.
384
+ * @param context - Existing operation context; this does not start a new budget.
385
+ * @param work - Already accepted work whose outcome is being observed.
386
+ * @returns Actual settlement or an explicit unresolved observation, never fake cancellation.
387
+ * @remarks The underlying promise may continue. Its rejection remains handled,
388
+ * but preventing later writes requires guarded executor/chokepoint boundaries.
389
+ * A synchronous overrun is reported after returning control, not called preemption.
390
+ * @example
391
+ * ```ts
392
+ * const observed = await observeOperation(context, verification);
393
+ * if (!observed.settled) reportPending(operationId);
394
+ * ```
395
+ */
396
+ export function observeOperation(context, work) {
397
+ return new Promise((resolve) => {
398
+ let observed = false;
399
+ const finish = (result) => {
400
+ if (observed)
401
+ return;
402
+ observed = true;
403
+ context.signal.removeEventListener('abort', abort);
404
+ resolve(result);
405
+ };
406
+ const abort = () => {
407
+ const reason = context.signal.reason;
408
+ finish({
409
+ settled: false,
410
+ reason: reason instanceof OperationExecutionError ? reason.code : 'E_OPERATION_CANCELLED',
411
+ deadlineExceeded: Date.now() >= context.deadlineAt,
412
+ });
413
+ };
414
+ void work.then((value) => finish({
415
+ settled: true,
416
+ success: true,
417
+ value,
418
+ deadlineExceeded: Date.now() >= context.deadlineAt,
419
+ }), (error) => finish({
420
+ settled: true,
421
+ success: false,
422
+ error: error instanceof Error ? error : new Error(String(error)),
423
+ deadlineExceeded: Date.now() >= context.deadlineAt,
424
+ }));
425
+ context.signal.addEventListener('abort', abort, { once: true });
426
+ if (context.signal.aborted)
427
+ abort();
428
+ });
429
+ }
430
+ /**
431
+ * Reserve a worker stage in the original resource budget and link cancellation.
432
+ * @param context - Origin-owned operation context.
433
+ * @param usage - Complete declared stage admission charged before the transfer exists.
434
+ * @returns Structured-cloneable scope and listener cleanup owned by the originating caller.
435
+ * @remarks The shared flag is cooperative evidence, not synchronous preemption or
436
+ * permission to write. Executors still validate domain fences at the commit boundary.
437
+ * Release only after observing actual completion or explicitly reporting unresolved work.
438
+ * @example
439
+ * ```ts
440
+ * const usage = { bytes: payloadBytes, items: 1 };
441
+ * const link = transferOperationContext(context, usage);
442
+ * try { await existingWorker.enqueue(link.transfer); } finally { link.release(); }
443
+ * ```
444
+ */
445
+ export function transferOperationContext(context, usage) {
446
+ context.consume(usage);
447
+ const cancellation = new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT);
448
+ const state = new Int32Array(cancellation);
449
+ const cancel = () => {
450
+ Atomics.store(state, 0, 1);
451
+ };
452
+ context.signal.addEventListener('abort', cancel, { once: true });
453
+ if (context.signal.aborted)
454
+ cancel();
455
+ return Object.freeze({
456
+ transfer: Object.freeze({
457
+ identity: context.identity,
458
+ ...(context.writeFence ? { writeFence: context.writeFence } : {}),
459
+ deadlineAt: context.deadlineAt,
460
+ cancellation,
461
+ }),
462
+ release: () => {
463
+ cancel();
464
+ context.signal.removeEventListener('abort', cancel);
465
+ },
466
+ });
467
+ }
468
+ /**
469
+ * Receive an admitted worker scope without granting another resource budget.
470
+ * @param transfer - Serialized identity/deadline plus the origin-owned cancellation flag.
471
+ * @returns Cooperating worker context with no additional byte/item admission allowance.
472
+ * @throws TypeError - Malformed shared cancellation storage or identity/deadline.
473
+ * @remarks The origin must reserve the complete stage before sending it. Positive
474
+ * receiver resource charges refuse rather than reset the original aggregate limits.
475
+ * A busy worker observes cancellation when it next checks a boundary; a committed
476
+ * result must still be reported as committed if cancellation arrives afterwards.
477
+ * @example
478
+ * ```ts
479
+ * const context = receiveOperationContext(envelope.execution);
480
+ * try { context.assertActive(); await existingHandler(context); } finally { context.close(); }
481
+ * ```
482
+ */
483
+ export function receiveOperationContext(transfer) {
484
+ if (!(transfer.cancellation instanceof SharedArrayBuffer) ||
485
+ transfer.cancellation.byteLength !== Int32Array.BYTES_PER_ELEMENT) {
486
+ throw new TypeError('Invalid operation cancellation transfer');
487
+ }
488
+ const state = new Int32Array(transfer.cancellation);
489
+ const controller = new AbortController();
490
+ const context = createOperationExecutionContext(transfer.identity, {
491
+ deadlineAt: transfer.deadlineAt,
492
+ writeFence: transfer.writeFence,
493
+ budgetMs: Math.max(0, transfer.deadlineAt - Date.now()),
494
+ signal: controller.signal,
495
+ resources: { maxBytes: 0, maxItems: 0 },
496
+ });
497
+ const assertActive = () => {
498
+ if (Atomics.load(state, 0) !== 0)
499
+ controller.abort();
500
+ context.assertActive();
501
+ };
502
+ return Object.freeze({
503
+ ...context,
504
+ assertActive,
505
+ consume: (usage) => {
506
+ assertActive();
507
+ context.consume(usage);
508
+ },
509
+ });
510
+ }
67
511
  //# sourceMappingURL=background-ops.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"background-ops.js","sourceRoot":"","sources":["../../src/store/background-ops.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,yEAAyE;AACzE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;AAE7C;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAoB;IACpD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QAC7C,8EAA8E;IAChF,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtB,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE;QACxB,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,8EAA8E;IAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"background-ops.js","sourceRoot":"","sources":["../../src/store/background-ops.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,13 @@
1
1
  /**
2
2
  * Backup bundle inspect primitives (SDK).
3
3
  *
4
- * Pure manifest-parsing helpers extracted from
4
+ * Manifest parsing helpers and exact read-only observation inspection.
5
+ *
6
+ * Manifest helpers were extracted from
5
7
  * `packages/cleo/src/cli/commands/backup-inspect.ts` per the AGENTS.md
6
- * Package-Boundary Check (T9985 / E8-CLI-LAYERING). These functions never
7
- * touch process state, citty, or any CLI renderer — they read raw buffers
8
- * and return values, so they are unit-testable without spinning up the CLI.
8
+ * Package-Boundary Check (T9985 / E8-CLI-LAYERING). The snapshot inspector
9
+ * accepts explicit paths, validates a private copy through the canonical opener,
10
+ * and returns provenance without live-store routing or CLI rendering.
9
11
  *
10
12
  * The CLI command file retains the orchestrator (`inspectAction`,
11
13
  * `inspectTarball`, `printInspectReport`) because those bind to
@@ -18,6 +20,7 @@
18
20
  * @saga T9977 (SG-WORKTRUNK-OWN)
19
21
  * @see packages/cleo/src/cli/commands/backup-inspect.ts — CLI orchestrator
20
22
  */
23
+ import type { BackupObservationInspectFailure, BackupObservationInspection, BackupObservationInspectOptions } from '@cleocode/contracts/backup-manifest';
21
24
  /** Magic string that identifies a CLEO encrypted bundle (ASCII "CLEOENC1"). */
22
25
  export declare const CLEO_ENC_MAGIC = "CLEOENC1";
23
26
  /** Byte offset of the format-version byte in the encrypted header. */
@@ -75,4 +78,45 @@ export declare function fmtBytes(bytes: number): string;
75
78
  * @public
76
79
  */
77
80
  export declare function detectEncryption(filePath: string): boolean;
81
+ /**
82
+ * Explicit inspection failure; callers must not translate this into not-found.
83
+ *
84
+ * @remarks
85
+ * The code describes a refusal or failed diagnostic within the requested snapshot
86
+ * scope. It does not establish whether the historical record exists elsewhere.
87
+ */
88
+ export declare class BackupObservationInspectionError extends Error {
89
+ readonly code: BackupObservationInspectFailure;
90
+ /**
91
+ * Construct a scoped inspection diagnostic.
92
+ * @param code - Stable failure category.
93
+ * @param message - Specific refusal or observed failure.
94
+ * @remarks No error category establishes absence of the requested record.
95
+ * @example
96
+ * ```ts
97
+ * throw new BackupObservationInspectionError('SOURCE_CHANGED', 'Snapshot changed during copy.');
98
+ * ```
99
+ */
100
+ constructor(code: BackupObservationInspectFailure, message: string);
101
+ }
102
+ /**
103
+ * Inspect one exact historical observation without opening or restoring a live store.
104
+ * @param options - Explicit snapshot identity, record ID and byte ceilings.
105
+ * @returns Scoped authentic payload and provenance, or scoped not-found.
106
+ * @throws BackupObservationInspectionError - The source, schema, identity or bounds are unproven.
107
+ * @remarks Linux O_NOFOLLOW protects source identity; O_NOATIME is requested as a
108
+ * best effort. Access-time changes are reported separately from content changes and
109
+ * never restored. Unsupported platforms fail explicitly. Queries are synchronous
110
+ * and are not claimed to be preemptible;
111
+ * source/payload sizes and indexed exact lookups bound the accepted workload.
112
+ * @example
113
+ * ```ts
114
+ * const evidence = await inspectBackupObservation({
115
+ * snapshotPath: '/authorized/backups/tasks-20260919-120000.db',
116
+ * recordId: 'O-mspmgvbg-0',
117
+ * });
118
+ * // evidence.status concerns only evidence.inspectedTables in this snapshot.
119
+ * ```
120
+ */
121
+ export declare function inspectBackupObservation(options: BackupObservationInspectOptions): Promise<BackupObservationInspection>;
78
122
  //# sourceMappingURL=backup-inspect.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"backup-inspect.d.ts","sourceRoot":"","sources":["../../src/store/backup-inspect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AASH,+EAA+E;AAC/E,eAAO,MAAM,cAAc,aAAa,CAAC;AAEzC,sEAAsE;AACtE,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,iDAAiD;AACjD,eAAO,MAAM,qBAAqB,IAAO,CAAC;AAE1C,4FAA4F;AAC5F,eAAO,MAAM,cAAc,QAA2B,CAAC;AAwBvD;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgDpE;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAsB1F;AAMD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ9C;AAMD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAS1D"}
1
+ {"version":3,"file":"backup-inspect.d.ts","sourceRoot":"","sources":["../../src/store/backup-inspect.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH,OAAO,KAAK,EACV,+BAA+B,EAC/B,2BAA2B,EAC3B,+BAA+B,EAGhC,MAAM,qCAAqC,CAAC;AAO7C,+EAA+E;AAC/E,eAAO,MAAM,cAAc,aAAa,CAAC;AAEzC,sEAAsE;AACtE,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,iDAAiD;AACjD,eAAO,MAAM,qBAAqB,IAAO,CAAC;AAE1C,4FAA4F;AAC5F,eAAO,MAAM,cAAc,QAA2B,CAAC;AAwBvD;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgDpE;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAsB1F;AAMD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ9C;AAMD;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAS1D;AAED;;;;;;GAMG;AACH,qBAAa,gCAAiC,SAAQ,KAAK;aAYvC,IAAI,EAAE,+BAA+B;IAXvD;;;;;;;;;OASG;gBAEe,IAAI,EAAE,+BAA+B,EACrD,OAAO,EAAE,MAAM;CAKlB;AAkKD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,2BAA2B,CAAC,CAsOtC"}