@cleocode/core 2026.10.27 → 2026.11.1-canary.3

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 (520) hide show
  1. package/README.md +2 -0
  2. package/binaries/README.md +30 -10
  3. package/dist/.source-stamp.json +4 -0
  4. package/dist/audit/reconstruct.d.ts.map +1 -1
  5. package/dist/audit/reconstruct.js +3 -13
  6. package/dist/audit/reconstruct.js.map +1 -1
  7. package/dist/build-provenance.json +2 -2
  8. package/dist/cloud/nexus-cloud.d.ts.map +1 -1
  9. package/dist/cloud/nexus-cloud.js +3 -3
  10. package/dist/cloud/nexus-cloud.js.map +1 -1
  11. package/dist/cloud/nexus-device.d.ts +1 -1
  12. package/dist/cloud/nexus-link.d.ts +18 -2
  13. package/dist/cloud/nexus-link.d.ts.map +1 -1
  14. package/dist/cloud/nexus-link.js +26 -6
  15. package/dist/cloud/nexus-link.js.map +1 -1
  16. package/dist/cloud/nexus-vault.d.ts.map +1 -1
  17. package/dist/cloud/nexus-vault.js +3 -9
  18. package/dist/cloud/nexus-vault.js.map +1 -1
  19. package/dist/decide/sites/registry.d.ts +40 -0
  20. package/dist/decide/sites/registry.d.ts.map +1 -1
  21. package/dist/decide/sites/registry.js +38 -0
  22. package/dist/decide/sites/registry.js.map +1 -1
  23. package/dist/docs/adr-allocator.d.ts +3 -3
  24. package/dist/docs/adr-allocator.d.ts.map +1 -1
  25. package/dist/docs/adr-allocator.js +8 -5
  26. package/dist/docs/adr-allocator.js.map +1 -1
  27. package/dist/docs/blob-consolidation.d.ts.map +1 -1
  28. package/dist/docs/blob-consolidation.js +3 -2
  29. package/dist/docs/blob-consolidation.js.map +1 -1
  30. package/dist/docs/derive-links.d.ts +12 -0
  31. package/dist/docs/derive-links.d.ts.map +1 -1
  32. package/dist/docs/derive-links.js +19 -0
  33. package/dist/docs/derive-links.js.map +1 -1
  34. package/dist/docs/doc-name-rule.d.ts +105 -0
  35. package/dist/docs/doc-name-rule.d.ts.map +1 -0
  36. package/dist/docs/doc-name-rule.js +212 -0
  37. package/dist/docs/doc-name-rule.js.map +1 -0
  38. package/dist/docs/docs-inconsistency-detector.d.ts.map +1 -1
  39. package/dist/docs/docs-inconsistency-detector.js +4 -3
  40. package/dist/docs/docs-inconsistency-detector.js.map +1 -1
  41. package/dist/docs/docs-ops.d.ts +27 -5
  42. package/dist/docs/docs-ops.d.ts.map +1 -1
  43. package/dist/docs/docs-ops.js +149 -17
  44. package/dist/docs/docs-ops.js.map +1 -1
  45. package/dist/docs/docs-read-model.d.ts +45 -15
  46. package/dist/docs/docs-read-model.d.ts.map +1 -1
  47. package/dist/docs/docs-read-model.js +22 -102
  48. package/dist/docs/docs-read-model.js.map +1 -1
  49. package/dist/docs/docs-update.d.ts.map +1 -1
  50. package/dist/docs/docs-update.js +8 -2
  51. package/dist/docs/docs-update.js.map +1 -1
  52. package/dist/docs/doctor.d.ts +71 -4
  53. package/dist/docs/doctor.d.ts.map +1 -1
  54. package/dist/docs/doctor.js +324 -23
  55. package/dist/docs/doctor.js.map +1 -1
  56. package/dist/docs/duplicate-check.d.ts +138 -0
  57. package/dist/docs/duplicate-check.d.ts.map +1 -0
  58. package/dist/docs/duplicate-check.js +286 -0
  59. package/dist/docs/duplicate-check.js.map +1 -0
  60. package/dist/docs/fetch-result.d.ts.map +1 -1
  61. package/dist/docs/fetch-result.js +27 -0
  62. package/dist/docs/fetch-result.js.map +1 -1
  63. package/dist/docs/import/scanner.d.ts +2 -0
  64. package/dist/docs/import/scanner.d.ts.map +1 -1
  65. package/dist/docs/import/scanner.js +3 -1
  66. package/dist/docs/import/scanner.js.map +1 -1
  67. package/dist/docs/lineage.d.ts +66 -0
  68. package/dist/docs/lineage.d.ts.map +1 -0
  69. package/dist/docs/lineage.js +190 -0
  70. package/dist/docs/lineage.js.map +1 -0
  71. package/dist/docs/modernize/apply.d.ts +139 -0
  72. package/dist/docs/modernize/apply.d.ts.map +1 -0
  73. package/dist/docs/modernize/apply.js +760 -0
  74. package/dist/docs/modernize/apply.js.map +1 -0
  75. package/dist/docs/modernize/guard.d.ts +92 -0
  76. package/dist/docs/modernize/guard.d.ts.map +1 -0
  77. package/dist/docs/modernize/guard.js +214 -0
  78. package/dist/docs/modernize/guard.js.map +1 -0
  79. package/dist/docs/modernize/index.d.ts +68 -0
  80. package/dist/docs/modernize/index.d.ts.map +1 -0
  81. package/dist/docs/modernize/index.js +97 -0
  82. package/dist/docs/modernize/index.js.map +1 -0
  83. package/dist/docs/modernize/judge.d.ts +85 -0
  84. package/dist/docs/modernize/judge.d.ts.map +1 -0
  85. package/dist/docs/modernize/judge.js +186 -0
  86. package/dist/docs/modernize/judge.js.map +1 -0
  87. package/dist/docs/modernize/plan.d.ts +77 -0
  88. package/dist/docs/modernize/plan.d.ts.map +1 -0
  89. package/dist/docs/modernize/plan.js +510 -0
  90. package/dist/docs/modernize/plan.js.map +1 -0
  91. package/dist/docs/modernize/restore.d.ts +41 -0
  92. package/dist/docs/modernize/restore.d.ts.map +1 -0
  93. package/dist/docs/modernize/restore.js +103 -0
  94. package/dist/docs/modernize/restore.js.map +1 -0
  95. package/dist/docs/modernize/rules.d.ts +197 -0
  96. package/dist/docs/modernize/rules.d.ts.map +1 -0
  97. package/dist/docs/modernize/rules.js +510 -0
  98. package/dist/docs/modernize/rules.js.map +1 -0
  99. package/dist/docs/modernize/store.d.ts +64 -0
  100. package/dist/docs/modernize/store.d.ts.map +1 -0
  101. package/dist/docs/modernize/store.js +390 -0
  102. package/dist/docs/modernize/store.js.map +1 -0
  103. package/dist/docs/publications-store.d.ts +16 -2
  104. package/dist/docs/publications-store.d.ts.map +1 -1
  105. package/dist/docs/publications-store.js +23 -2
  106. package/dist/docs/publications-store.js.map +1 -1
  107. package/dist/docs/publish-pr.d.ts.map +1 -1
  108. package/dist/docs/publish-pr.js +12 -1
  109. package/dist/docs/publish-pr.js.map +1 -1
  110. package/dist/docs/rot.d.ts +94 -0
  111. package/dist/docs/rot.d.ts.map +1 -0
  112. package/dist/docs/rot.js +298 -0
  113. package/dist/docs/rot.js.map +1 -0
  114. package/dist/docs/similarity-check.d.ts +2 -0
  115. package/dist/docs/similarity-check.d.ts.map +1 -1
  116. package/dist/docs/similarity-check.js +6 -49
  117. package/dist/docs/similarity-check.js.map +1 -1
  118. package/dist/docs/slug-rename.d.ts +84 -0
  119. package/dist/docs/slug-rename.d.ts.map +1 -0
  120. package/dist/docs/slug-rename.js +166 -0
  121. package/dist/docs/slug-rename.js.map +1 -0
  122. package/dist/docs/slug-similarity.d.ts +24 -0
  123. package/dist/docs/slug-similarity.d.ts.map +1 -0
  124. package/dist/docs/slug-similarity.js +63 -0
  125. package/dist/docs/slug-similarity.js.map +1 -0
  126. package/dist/docs/wikilinks.d.ts +20 -4
  127. package/dist/docs/wikilinks.d.ts.map +1 -1
  128. package/dist/docs/wikilinks.js +52 -7
  129. package/dist/docs/wikilinks.js.map +1 -1
  130. package/dist/docs/writer-registry.d.ts.map +1 -1
  131. package/dist/docs/writer-registry.js +33 -0
  132. package/dist/docs/writer-registry.js.map +1 -1
  133. package/dist/doctor/type-matrix-repair.d.ts +194 -0
  134. package/dist/doctor/type-matrix-repair.d.ts.map +1 -0
  135. package/dist/doctor/type-matrix-repair.js +662 -0
  136. package/dist/doctor/type-matrix-repair.js.map +1 -0
  137. package/dist/gateway-client/generated/index.d.ts +2 -2
  138. package/dist/gateway-client/generated/index.d.ts.map +1 -1
  139. package/dist/gateway-client/generated/index.js +1 -1
  140. package/dist/gateway-client/generated/index.js.map +1 -1
  141. package/dist/gateway-client/generated/namespaces.gen.d.ts +5 -0
  142. package/dist/gateway-client/generated/namespaces.gen.d.ts.map +1 -1
  143. package/dist/gateway-client/generated/namespaces.gen.js +6 -1
  144. package/dist/gateway-client/generated/namespaces.gen.js.map +1 -1
  145. package/dist/gateway-client/generated/sdk.gen.d.ts +21 -1
  146. package/dist/gateway-client/generated/sdk.gen.d.ts.map +1 -1
  147. package/dist/gateway-client/generated/sdk.gen.js +55 -0
  148. package/dist/gateway-client/generated/sdk.gen.js.map +1 -1
  149. package/dist/gateway-client/generated/types.gen.d.ts +222 -0
  150. package/dist/gateway-client/generated/types.gen.d.ts.map +1 -1
  151. package/dist/gc/gc-subsystem.d.ts +4 -0
  152. package/dist/gc/gc-subsystem.d.ts.map +1 -1
  153. package/dist/gc/gc-subsystem.js +16 -0
  154. package/dist/gc/gc-subsystem.js.map +1 -1
  155. package/dist/git/work-tree.d.ts +48 -0
  156. package/dist/git/work-tree.d.ts.map +1 -1
  157. package/dist/git/work-tree.js +63 -1
  158. package/dist/git/work-tree.js.map +1 -1
  159. package/dist/hooks/handlers/session-hooks.d.ts +5 -4
  160. package/dist/hooks/handlers/session-hooks.d.ts.map +1 -1
  161. package/dist/hooks/handlers/session-hooks.js +5 -21
  162. package/dist/hooks/handlers/session-hooks.js.map +1 -1
  163. package/dist/internal.d.ts +5 -1
  164. package/dist/internal.d.ts.map +1 -1
  165. package/dist/internal.js +5 -1
  166. package/dist/internal.js.map +1 -1
  167. package/dist/memory/brain-doctor.d.ts.map +1 -1
  168. package/dist/memory/brain-doctor.js +6 -1
  169. package/dist/memory/brain-doctor.js.map +1 -1
  170. package/dist/memory/engine-compat.d.ts.map +1 -1
  171. package/dist/memory/engine-compat.js +6 -0
  172. package/dist/memory/engine-compat.js.map +1 -1
  173. package/dist/nexus/analyze-orchestrator.d.ts +24 -0
  174. package/dist/nexus/analyze-orchestrator.d.ts.map +1 -1
  175. package/dist/nexus/analyze-orchestrator.js +43 -5
  176. package/dist/nexus/analyze-orchestrator.js.map +1 -1
  177. package/dist/nexus/user-profile.d.ts +2 -1
  178. package/dist/nexus/user-profile.d.ts.map +1 -1
  179. package/dist/nexus/user-profile.js +13 -5
  180. package/dist/nexus/user-profile.js.map +1 -1
  181. package/dist/orchestrate/admission.d.ts +8 -0
  182. package/dist/orchestrate/admission.d.ts.map +1 -1
  183. package/dist/orchestrate/admission.js +3 -1
  184. package/dist/orchestrate/admission.js.map +1 -1
  185. package/dist/orchestrate/query-ops.d.ts.map +1 -1
  186. package/dist/orchestrate/query-ops.js +15 -4
  187. package/dist/orchestrate/query-ops.js.map +1 -1
  188. package/dist/orchestrate/spawn-ops.d.ts.map +1 -1
  189. package/dist/orchestrate/spawn-ops.js +43 -2
  190. package/dist/orchestrate/spawn-ops.js.map +1 -1
  191. package/dist/orchestration/index.d.ts +6 -0
  192. package/dist/orchestration/index.d.ts.map +1 -1
  193. package/dist/orchestration/index.js +3 -0
  194. package/dist/orchestration/index.js.map +1 -1
  195. package/dist/orchestration/spawn-prompt.d.ts.map +1 -1
  196. package/dist/orchestration/spawn-prompt.js +3 -1
  197. package/dist/orchestration/spawn-prompt.js.map +1 -1
  198. package/dist/paths.d.ts +43 -1
  199. package/dist/paths.d.ts.map +1 -1
  200. package/dist/paths.js +51 -1
  201. package/dist/paths.js.map +1 -1
  202. package/dist/project-lifecycle.d.ts.map +1 -1
  203. package/dist/project-lifecycle.js +31 -0
  204. package/dist/project-lifecycle.js.map +1 -1
  205. package/dist/release/authorization.d.ts +156 -0
  206. package/dist/release/authorization.d.ts.map +1 -0
  207. package/dist/release/authorization.js +460 -0
  208. package/dist/release/authorization.js.map +1 -0
  209. package/dist/release/ci-evidence.d.ts +55 -4
  210. package/dist/release/ci-evidence.d.ts.map +1 -1
  211. package/dist/release/ci-evidence.js +251 -22
  212. package/dist/release/ci-evidence.js.map +1 -1
  213. package/dist/release/ci-run-evidence.d.ts +107 -0
  214. package/dist/release/ci-run-evidence.d.ts.map +1 -0
  215. package/dist/release/ci-run-evidence.js +234 -0
  216. package/dist/release/ci-run-evidence.js.map +1 -0
  217. package/dist/release/cut.d.ts +231 -0
  218. package/dist/release/cut.d.ts.map +1 -0
  219. package/dist/release/cut.js +775 -0
  220. package/dist/release/cut.js.map +1 -0
  221. package/dist/release/deploy-evidence.d.ts +173 -0
  222. package/dist/release/deploy-evidence.d.ts.map +1 -0
  223. package/dist/release/deploy-evidence.js +381 -0
  224. package/dist/release/deploy-evidence.js.map +1 -0
  225. package/dist/release/engine-ops.d.ts.map +1 -1
  226. package/dist/release/engine-ops.js +10 -4
  227. package/dist/release/engine-ops.js.map +1 -1
  228. package/dist/release/index.d.ts +3 -0
  229. package/dist/release/index.d.ts.map +1 -1
  230. package/dist/release/index.js +2 -0
  231. package/dist/release/index.js.map +1 -1
  232. package/dist/release/invariants/archive-reason-invariant.d.ts.map +1 -1
  233. package/dist/release/invariants/archive-reason-invariant.js +4 -1
  234. package/dist/release/invariants/archive-reason-invariant.js.map +1 -1
  235. package/dist/release/open.d.ts.map +1 -1
  236. package/dist/release/open.js +2 -6
  237. package/dist/release/open.js.map +1 -1
  238. package/dist/release/plan.d.ts +34 -2
  239. package/dist/release/plan.d.ts.map +1 -1
  240. package/dist/release/plan.js +30 -6
  241. package/dist/release/plan.js.map +1 -1
  242. package/dist/release/preflight-skip.d.ts +4 -19
  243. package/dist/release/preflight-skip.d.ts.map +1 -1
  244. package/dist/release/preflight-skip.js +5 -110
  245. package/dist/release/preflight-skip.js.map +1 -1
  246. package/dist/release/reconcile-latest.d.ts +29 -0
  247. package/dist/release/reconcile-latest.d.ts.map +1 -0
  248. package/dist/release/reconcile-latest.js +71 -0
  249. package/dist/release/reconcile-latest.js.map +1 -0
  250. package/dist/release/reconcile.d.ts +3 -1
  251. package/dist/release/reconcile.d.ts.map +1 -1
  252. package/dist/release/reconcile.js +18 -6
  253. package/dist/release/reconcile.js.map +1 -1
  254. package/dist/release/release-published.d.ts +27 -0
  255. package/dist/release/release-published.d.ts.map +1 -0
  256. package/dist/release/release-published.js +35 -0
  257. package/dist/release/release-published.js.map +1 -0
  258. package/dist/release/tty-confirm.d.ts +23 -0
  259. package/dist/release/tty-confirm.d.ts.map +1 -0
  260. package/dist/release/tty-confirm.js +50 -0
  261. package/dist/release/tty-confirm.js.map +1 -0
  262. package/dist/remote/index.js +1 -1
  263. package/dist/remote/index.js.map +1 -1
  264. package/dist/resources/admission-ledger.d.ts +103 -1
  265. package/dist/resources/admission-ledger.d.ts.map +1 -1
  266. package/dist/resources/admission-ledger.js +200 -17
  267. package/dist/resources/admission-ledger.js.map +1 -1
  268. package/dist/resources/agent-lease.d.ts +82 -0
  269. package/dist/resources/agent-lease.d.ts.map +1 -0
  270. package/dist/resources/agent-lease.js +167 -0
  271. package/dist/resources/agent-lease.js.map +1 -0
  272. package/dist/resources/governor.d.ts +27 -1
  273. package/dist/resources/governor.d.ts.map +1 -1
  274. package/dist/resources/governor.js +88 -4
  275. package/dist/resources/governor.js.map +1 -1
  276. package/dist/resources/hook-footprint.d.ts +13 -1
  277. package/dist/resources/hook-footprint.d.ts.map +1 -1
  278. package/dist/resources/hook-footprint.js +33 -7
  279. package/dist/resources/hook-footprint.js.map +1 -1
  280. package/dist/resources/run-governed.d.ts +25 -0
  281. package/dist/resources/run-governed.d.ts.map +1 -1
  282. package/dist/resources/run-governed.js +44 -3
  283. package/dist/resources/run-governed.js.map +1 -1
  284. package/dist/sagas/reconcile.d.ts.map +1 -1
  285. package/dist/sagas/reconcile.js +11 -0
  286. package/dist/sagas/reconcile.js.map +1 -1
  287. package/dist/scaffold/ensure-dirs.d.ts.map +1 -1
  288. package/dist/scaffold/ensure-dirs.js +8 -6
  289. package/dist/scaffold/ensure-dirs.js.map +1 -1
  290. package/dist/security/override-cap-setting.d.ts +132 -0
  291. package/dist/security/override-cap-setting.d.ts.map +1 -1
  292. package/dist/security/override-cap-setting.js +88 -10
  293. package/dist/security/override-cap-setting.js.map +1 -1
  294. package/dist/security/owner-override-authority.d.ts.map +1 -1
  295. package/dist/security/owner-override-authority.js +5 -1
  296. package/dist/security/owner-override-authority.js.map +1 -1
  297. package/dist/selfimprove/draft-pr.d.ts.map +1 -1
  298. package/dist/selfimprove/draft-pr.js +4 -1
  299. package/dist/selfimprove/draft-pr.js.map +1 -1
  300. package/dist/session/engine-ops.d.ts.map +1 -1
  301. package/dist/session/engine-ops.js +4 -16
  302. package/dist/session/engine-ops.js.map +1 -1
  303. package/dist/sessions/briefing.d.ts +6 -0
  304. package/dist/sessions/briefing.d.ts.map +1 -1
  305. package/dist/sessions/briefing.js +34 -0
  306. package/dist/sessions/briefing.js.map +1 -1
  307. package/dist/sessions/session-end-snapshot-entry.js +2 -2
  308. package/dist/sessions/session-end-snapshot-entry.js.map +1 -1
  309. package/dist/sessions/session-end-snapshot.js +4 -4
  310. package/dist/sessions/session-end-snapshot.js.map +1 -1
  311. package/dist/skills/injection/token.d.ts.map +1 -1
  312. package/dist/skills/injection/token.js +3 -6
  313. package/dist/skills/injection/token.js.map +1 -1
  314. package/dist/skills/orchestrator/spawn.d.ts.map +1 -1
  315. package/dist/skills/orchestrator/spawn.js +3 -4
  316. package/dist/skills/orchestrator/spawn.js.map +1 -1
  317. package/dist/skills/propose-patch.d.ts.map +1 -1
  318. package/dist/skills/propose-patch.js +4 -1
  319. package/dist/skills/propose-patch.js.map +1 -1
  320. package/dist/spawn/branch-integration.d.ts.map +1 -1
  321. package/dist/spawn/branch-integration.js +5 -2
  322. package/dist/spawn/branch-integration.js.map +1 -1
  323. package/dist/store/attachment-repair.d.ts.map +1 -1
  324. package/dist/store/attachment-repair.js +5 -4
  325. package/dist/store/attachment-repair.js.map +1 -1
  326. package/dist/store/attachment-store.d.ts +6 -0
  327. package/dist/store/attachment-store.d.ts.map +1 -1
  328. package/dist/store/attachment-store.js +19 -2
  329. package/dist/store/attachment-store.js.map +1 -1
  330. package/dist/store/blob-ops.d.ts +1 -1
  331. package/dist/store/blob-ops.d.ts.map +1 -1
  332. package/dist/store/blob-ops.js +7 -3
  333. package/dist/store/blob-ops.js.map +1 -1
  334. package/dist/store/conduit-doc-history.d.ts +15 -1
  335. package/dist/store/conduit-doc-history.d.ts.map +1 -1
  336. package/dist/store/conduit-doc-history.js +16 -10
  337. package/dist/store/conduit-doc-history.js.map +1 -1
  338. package/dist/store/db-helpers.d.ts +29 -0
  339. package/dist/store/db-helpers.d.ts.map +1 -1
  340. package/dist/store/db-helpers.js +89 -1
  341. package/dist/store/db-helpers.js.map +1 -1
  342. package/dist/store/decision-adr-links.d.ts.map +1 -1
  343. package/dist/store/decision-adr-links.js +5 -2
  344. package/dist/store/decision-adr-links.js.map +1 -1
  345. package/dist/store/git-checkpoint.d.ts +11 -1
  346. package/dist/store/git-checkpoint.d.ts.map +1 -1
  347. package/dist/store/git-checkpoint.js +14 -3
  348. package/dist/store/git-checkpoint.js.map +1 -1
  349. package/dist/store/llmtxt-blob-adapter.d.ts.map +1 -1
  350. package/dist/store/llmtxt-blob-adapter.js +4 -1
  351. package/dist/store/llmtxt-blob-adapter.js.map +1 -1
  352. package/dist/store/schema/attachments.d.ts +7 -5
  353. package/dist/store/schema/attachments.d.ts.map +1 -1
  354. package/dist/store/schema/attachments.js +5 -2
  355. package/dist/store/schema/attachments.js.map +1 -1
  356. package/dist/store/session-store.d.ts.map +1 -1
  357. package/dist/store/session-store.js +6 -0
  358. package/dist/store/session-store.js.map +1 -1
  359. package/dist/store/sqlite-backup.d.ts +6 -1
  360. package/dist/store/sqlite-backup.d.ts.map +1 -1
  361. package/dist/store/sqlite-backup.js +9 -5
  362. package/dist/store/sqlite-backup.js.map +1 -1
  363. package/dist/store/sqlite-data-accessor.d.ts.map +1 -1
  364. package/dist/store/sqlite-data-accessor.js +63 -36
  365. package/dist/store/sqlite-data-accessor.js.map +1 -1
  366. package/dist/system/backup.d.ts +29 -0
  367. package/dist/system/backup.d.ts.map +1 -1
  368. package/dist/system/backup.js +240 -37
  369. package/dist/system/backup.js.map +1 -1
  370. package/dist/system/dependencies.d.ts +22 -0
  371. package/dist/system/dependencies.d.ts.map +1 -1
  372. package/dist/system/dependencies.js +49 -2
  373. package/dist/system/dependencies.js.map +1 -1
  374. package/dist/system/health.d.ts.map +1 -1
  375. package/dist/system/health.js +23 -1
  376. package/dist/system/health.js.map +1 -1
  377. package/dist/task-work/claims.d.ts.map +1 -1
  378. package/dist/task-work/claims.js +14 -0
  379. package/dist/task-work/claims.js.map +1 -1
  380. package/dist/task-work/index.d.ts.map +1 -1
  381. package/dist/task-work/index.js +22 -0
  382. package/dist/task-work/index.js.map +1 -1
  383. package/dist/tasks/ac-coverage-gate.d.ts +27 -0
  384. package/dist/tasks/ac-coverage-gate.d.ts.map +1 -1
  385. package/dist/tasks/ac-coverage-gate.js +63 -28
  386. package/dist/tasks/ac-coverage-gate.js.map +1 -1
  387. package/dist/tasks/affected-packages.d.ts +26 -30
  388. package/dist/tasks/affected-packages.d.ts.map +1 -1
  389. package/dist/tasks/affected-packages.js +27 -50
  390. package/dist/tasks/affected-packages.js.map +1 -1
  391. package/dist/tasks/affected-scope.d.ts +13 -3
  392. package/dist/tasks/affected-scope.d.ts.map +1 -1
  393. package/dist/tasks/affected-scope.js +29 -11
  394. package/dist/tasks/affected-scope.js.map +1 -1
  395. package/dist/tasks/change-set.d.ts.map +1 -1
  396. package/dist/tasks/change-set.js +39 -20
  397. package/dist/tasks/change-set.js.map +1 -1
  398. package/dist/tasks/command-gate-cmd.d.ts +33 -0
  399. package/dist/tasks/command-gate-cmd.d.ts.map +1 -0
  400. package/dist/tasks/command-gate-cmd.js +45 -0
  401. package/dist/tasks/command-gate-cmd.js.map +1 -0
  402. package/dist/tasks/complete-ci.d.ts +9 -0
  403. package/dist/tasks/complete-ci.d.ts.map +1 -1
  404. package/dist/tasks/complete-ci.js +21 -4
  405. package/dist/tasks/complete-ci.js.map +1 -1
  406. package/dist/tasks/complete.d.ts.map +1 -1
  407. package/dist/tasks/complete.js +14 -0
  408. package/dist/tasks/complete.js.map +1 -1
  409. package/dist/tasks/component-pr.d.ts +37 -0
  410. package/dist/tasks/component-pr.d.ts.map +1 -1
  411. package/dist/tasks/component-pr.js +106 -14
  412. package/dist/tasks/component-pr.js.map +1 -1
  413. package/dist/tasks/done-plan.d.ts +14 -1
  414. package/dist/tasks/done-plan.d.ts.map +1 -1
  415. package/dist/tasks/done-plan.js +125 -15
  416. package/dist/tasks/done-plan.js.map +1 -1
  417. package/dist/tasks/done-record.d.ts.map +1 -1
  418. package/dist/tasks/done-record.js +4 -0
  419. package/dist/tasks/done-record.js.map +1 -1
  420. package/dist/tasks/engine-converters.d.ts.map +1 -1
  421. package/dist/tasks/engine-converters.js +2 -0
  422. package/dist/tasks/engine-converters.js.map +1 -1
  423. package/dist/tasks/evidence-tree.d.ts +28 -1
  424. package/dist/tasks/evidence-tree.d.ts.map +1 -1
  425. package/dist/tasks/evidence-tree.js +66 -2
  426. package/dist/tasks/evidence-tree.js.map +1 -1
  427. package/dist/tasks/evidence.d.ts +39 -27
  428. package/dist/tasks/evidence.d.ts.map +1 -1
  429. package/dist/tasks/evidence.js +382 -188
  430. package/dist/tasks/evidence.js.map +1 -1
  431. package/dist/tasks/gate-notes.d.ts +17 -0
  432. package/dist/tasks/gate-notes.d.ts.map +1 -1
  433. package/dist/tasks/gate-notes.js.map +1 -1
  434. package/dist/tasks/gate-preview.d.ts +7 -1
  435. package/dist/tasks/gate-preview.d.ts.map +1 -1
  436. package/dist/tasks/gate-preview.js +30 -4
  437. package/dist/tasks/gate-preview.js.map +1 -1
  438. package/dist/tasks/gate-runner.d.ts +42 -0
  439. package/dist/tasks/gate-runner.d.ts.map +1 -1
  440. package/dist/tasks/gate-runner.js +234 -94
  441. package/dist/tasks/gate-runner.js.map +1 -1
  442. package/dist/tasks/manifest-scope.d.ts +115 -0
  443. package/dist/tasks/manifest-scope.d.ts.map +1 -0
  444. package/dist/tasks/manifest-scope.js +352 -0
  445. package/dist/tasks/manifest-scope.js.map +1 -0
  446. package/dist/tasks/merge-close.d.ts +376 -0
  447. package/dist/tasks/merge-close.d.ts.map +1 -0
  448. package/dist/tasks/merge-close.js +1497 -0
  449. package/dist/tasks/merge-close.js.map +1 -0
  450. package/dist/tasks/qa-run-binding.d.ts +5 -0
  451. package/dist/tasks/qa-run-binding.d.ts.map +1 -1
  452. package/dist/tasks/qa-run-binding.js +6 -1
  453. package/dist/tasks/qa-run-binding.js.map +1 -1
  454. package/dist/tasks/req.d.ts.map +1 -1
  455. package/dist/tasks/req.js +29 -1
  456. package/dist/tasks/req.js.map +1 -1
  457. package/dist/tasks/review-verdict.d.ts +159 -0
  458. package/dist/tasks/review-verdict.d.ts.map +1 -0
  459. package/dist/tasks/review-verdict.js +442 -0
  460. package/dist/tasks/review-verdict.js.map +1 -0
  461. package/dist/tasks/task-reparent.d.ts.map +1 -1
  462. package/dist/tasks/task-reparent.js +22 -3
  463. package/dist/tasks/task-reparent.js.map +1 -1
  464. package/dist/tasks/test-report-counts.d.ts +274 -0
  465. package/dist/tasks/test-report-counts.d.ts.map +1 -0
  466. package/dist/tasks/test-report-counts.js +746 -0
  467. package/dist/tasks/test-report-counts.js.map +1 -0
  468. package/dist/tasks/test-run-binding.d.ts +20 -45
  469. package/dist/tasks/test-run-binding.d.ts.map +1 -1
  470. package/dist/tasks/test-run-binding.js +34 -119
  471. package/dist/tasks/test-run-binding.js.map +1 -1
  472. package/dist/tasks/update.d.ts.map +1 -1
  473. package/dist/tasks/update.js +42 -0
  474. package/dist/tasks/update.js.map +1 -1
  475. package/dist/tasks/verification-policy.d.ts +12 -0
  476. package/dist/tasks/verification-policy.d.ts.map +1 -1
  477. package/dist/tasks/verification-policy.js +13 -0
  478. package/dist/tasks/verification-policy.js.map +1 -1
  479. package/dist/tasks/workspace-resolution.d.ts +225 -0
  480. package/dist/tasks/workspace-resolution.d.ts.map +1 -0
  481. package/dist/tasks/workspace-resolution.js +497 -0
  482. package/dist/tasks/workspace-resolution.js.map +1 -0
  483. package/dist/validation/doctor/checks.d.ts +20 -0
  484. package/dist/validation/doctor/checks.d.ts.map +1 -1
  485. package/dist/validation/doctor/checks.js +112 -0
  486. package/dist/validation/doctor/checks.js.map +1 -1
  487. package/dist/validation/engine-ops.d.ts.map +1 -1
  488. package/dist/validation/engine-ops.js +37 -3
  489. package/dist/validation/engine-ops.js.map +1 -1
  490. package/dist/validation/validate-ops.d.ts +4 -0
  491. package/dist/validation/validate-ops.d.ts.map +1 -1
  492. package/dist/validation/validate-ops.js +79 -2
  493. package/dist/validation/validate-ops.js.map +1 -1
  494. package/dist/worktree/list.d.ts +4 -21
  495. package/dist/worktree/list.d.ts.map +1 -1
  496. package/dist/worktree/list.js +14 -44
  497. package/dist/worktree/list.js.map +1 -1
  498. package/dist/worktree/merged-cleanup.d.ts +63 -0
  499. package/dist/worktree/merged-cleanup.d.ts.map +1 -0
  500. package/dist/worktree/merged-cleanup.js +571 -0
  501. package/dist/worktree/merged-cleanup.js.map +1 -0
  502. package/dist/worktree/prune.d.ts +64 -2
  503. package/dist/worktree/prune.d.ts.map +1 -1
  504. package/dist/worktree/prune.js +151 -6
  505. package/dist/worktree/prune.js.map +1 -1
  506. package/dist/worktree/sentinel-index.d.ts +14 -0
  507. package/dist/worktree/sentinel-index.d.ts.map +1 -1
  508. package/dist/worktree/sentinel-index.js +17 -0
  509. package/dist/worktree/sentinel-index.js.map +1 -1
  510. package/dist/worktree/worktree-adopt.d.ts +1 -13
  511. package/dist/worktree/worktree-adopt.d.ts.map +1 -1
  512. package/dist/worktree/worktree-adopt.js +2 -17
  513. package/dist/worktree/worktree-adopt.js.map +1 -1
  514. package/package.json +12 -12
  515. package/schemas/project-context.schema.json +33 -0
  516. package/templates/CLEO-INJECTION.md +6 -16
  517. package/templates/CLEO-REFERENCE.md +27 -4
  518. package/templates/git-hooks/legacy-hashes.json +2 -1
  519. package/templates/git-hooks/pre-commit +43 -11
  520. package/templates/workflows/release-prepare.yml.tmpl +9 -88
@@ -0,0 +1,571 @@
1
+ /**
2
+ * Clean up what merged work left behind (T14142, owner decision D11212):
3
+ * canonical task worktrees, `task/*` branches (local and on `origin`), and
4
+ * repository copies nested inside worktrees.
5
+ *
6
+ * Every item is proven redundant on its own before anything is deleted, and
7
+ * any doubt keeps it:
8
+ *
9
+ * - **merged**: the item's commits are ancestors of `origin/<default>`, read
10
+ * after a fresh fetch (a failed fetch deletes nothing on `origin`);
11
+ * - **in scope**: its task is stored done or cancelled and, when the caller
12
+ * names tasks (a merged PR's closed tasks, a release's tasks), is one of
13
+ * them; an open task (a `Refs:` PR, more to come) never is. Nested copies
14
+ * are only looked for inside an in-scope task's worktree;
15
+ * - **clean**: `git status --porcelain -uall` is empty (an error keeps it);
16
+ * - **not in use**: not git-locked, no CLEO task lock record, no other
17
+ * checkout linking into it and no evidence living only there
18
+ * (`guardWorktreeDisposal`, the guard every disposal path shares).
19
+ *
20
+ * Nothing new deletes: worktrees go through `removeWorktreeFromDisk`, nested
21
+ * copies through the worktree package's `removeDir`, branches through git.
22
+ * A dry run (the default) reports the same items without touching them.
23
+ *
24
+ * @task T14142
25
+ */
26
+ import { execFileSync, spawnSync } from 'node:child_process';
27
+ import { existsSync, lstatSync, readdirSync, realpathSync } from 'node:fs';
28
+ import { basename, dirname, join, relative, sep } from 'node:path';
29
+ import { computeProjectHash, resolveWorktreeRootForHash } from '@cleocode/paths';
30
+ import { describeDisposalBlockers, guardWorktreeDisposal, napiRemoveDir, pruneWorktreeRegistry, readWorktreeTaskLock, } from '@cleocode/worktree';
31
+ import { discoveryEnv } from '../git/work-tree.js';
32
+ import { appendWorktreeAuditEntry, resolveWorktreeAuditActor } from './audit.js';
33
+ import { enumerateWorktrees } from './list.js';
34
+ import { loadTaskEvidence, newCompareBudget, removeWorktreeFromDisk, unprovenContent, } from './prune.js';
35
+ /** `task/T123` or `task/T123-slug`: the task id a branch belongs to. */
36
+ const TASK_BRANCH = /^task\/(T\d+)(?:[-/]|$)/;
37
+ /** How deep below a worktree's root nested copies are looked for. */
38
+ const MAX_NEST_DEPTH = 4;
39
+ /** Branches deleted on `origin` per push. */
40
+ const REMOTE_DELETE_BATCH = 50;
41
+ /** Run git in `cwd`; stdout trimmed, or `null` on any failure. */
42
+ function git(cwd, args) {
43
+ try {
44
+ return execFileSync('git', ['-C', cwd, ...args], {
45
+ // T14189: `-C` does not override an inherited GIT_DIR / GIT_INDEX_FILE.
46
+ env: discoveryEnv(),
47
+ encoding: 'utf8',
48
+ stdio: ['ignore', 'pipe', 'pipe'],
49
+ timeout: 120_000,
50
+ maxBuffer: 64 * 1024 * 1024,
51
+ }).trim();
52
+ }
53
+ catch {
54
+ return null;
55
+ }
56
+ }
57
+ /**
58
+ * The cleanup's git runner, for tests: `git -C <cwd>` that acts on `cwd`'s
59
+ * repository even when the caller inherited a git hook's `GIT_DIR` (T14189).
60
+ *
61
+ * @internal Exported for tests only.
62
+ */
63
+ export const cleanupGit = git;
64
+ function lines(out) {
65
+ return (out ?? '').split('\n').filter((l) => l.length > 0);
66
+ }
67
+ /**
68
+ * Bytes a directory tree occupies on disk, without following symlinks.
69
+ *
70
+ * @param path - Directory to measure.
71
+ * @returns Allocated bytes (`blocks * 512`, else the size); 0 when unreadable.
72
+ * @task T14142
73
+ */
74
+ export function diskBytes(path) {
75
+ let total = 0;
76
+ const stack = [path];
77
+ while (stack.length > 0) {
78
+ const current = stack.pop();
79
+ try {
80
+ const st = lstatSync(current);
81
+ total += st.blocks > 0 ? st.blocks * 512 : st.size;
82
+ if (st.isDirectory()) {
83
+ for (const name of readdirSync(current))
84
+ stack.push(join(current, name));
85
+ }
86
+ }
87
+ catch {
88
+ // vanished or unreadable: counts as nothing
89
+ }
90
+ }
91
+ return total;
92
+ }
93
+ /** The task id of a `task/*` branch, or `null`. */
94
+ function branchTaskId(branch) {
95
+ return TASK_BRANCH.exec(branch)?.[1] ?? null;
96
+ }
97
+ /**
98
+ * Build the in-scope test: a task stored done or cancelled and, when the
99
+ * caller names tasks, one of them. A task still open (a `Refs:` PR's, more PRs
100
+ * to come) is never in scope; an unreadable store puts nothing in scope.
101
+ */
102
+ async function scopeFor(projectRoot, taskIds) {
103
+ const named = taskIds === undefined ? null : new Set(taskIds);
104
+ const statuses = new Map();
105
+ let accessor = null;
106
+ try {
107
+ const { getTaskAccessor } = await import('../store/data-accessor.js');
108
+ accessor = await getTaskAccessor(projectRoot);
109
+ }
110
+ catch {
111
+ accessor = null;
112
+ }
113
+ return async (id) => {
114
+ if (accessor === null || (named !== null && !named.has(id)))
115
+ return false;
116
+ const cached = statuses.get(id);
117
+ if (cached !== undefined)
118
+ return cached;
119
+ let terminal = false;
120
+ try {
121
+ const task = await accessor.loadSingleTask(id);
122
+ terminal = task?.status === 'done' || task?.status === 'cancelled';
123
+ }
124
+ catch {
125
+ terminal = false;
126
+ }
127
+ statuses.set(id, terminal);
128
+ return terminal;
129
+ };
130
+ }
131
+ /**
132
+ * Whether `target` is a real directory (not a symlink) strictly inside
133
+ * `root` once both are resolved: the precondition of every removal here.
134
+ */
135
+ function insideRoot(target, root) {
136
+ try {
137
+ if (!lstatSync(target).isDirectory())
138
+ return false;
139
+ const rel = relative(realpathSync(root), realpathSync(target));
140
+ return rel !== '' && !rel.startsWith(`..${sep}`) && rel !== '..' && !rel.startsWith(sep);
141
+ }
142
+ catch {
143
+ return false;
144
+ }
145
+ }
146
+ /**
147
+ * Every commit a nested copy holds that must be on the project's `origin`
148
+ * before it may go: every ref (branches, tags, notes, stash, and every
149
+ * remote-tracking ref, its own `origin`'s included) and every reflog entry of
150
+ * every ref (`log -g --all`). `null` when unreadable.
151
+ */
152
+ function nestedTips(nested) {
153
+ const refs = git(nested, ['for-each-ref', '--format=%(objectname)']);
154
+ const reflogs = git(nested, ['log', '-g', '--all', '--format=%H']);
155
+ const head = git(nested, ['rev-parse', 'HEAD']);
156
+ if (refs === null || reflogs === null || head === null)
157
+ return null;
158
+ return [head, ...lines(refs), ...lines(reflogs)];
159
+ }
160
+ /** Directories holding a `.git` below `root` (not `root` itself), depth-bounded. */
161
+ function findNestedRepos(root) {
162
+ const found = [];
163
+ const walk = (dir, depth) => {
164
+ if (depth > MAX_NEST_DEPTH)
165
+ return;
166
+ let names;
167
+ try {
168
+ names = readdirSync(dir);
169
+ }
170
+ catch {
171
+ return;
172
+ }
173
+ for (const name of names) {
174
+ if (name === 'node_modules' || name === '.git')
175
+ continue;
176
+ const child = join(dir, name);
177
+ try {
178
+ if (!lstatSync(child).isDirectory())
179
+ continue;
180
+ }
181
+ catch {
182
+ continue;
183
+ }
184
+ if (existsSync(join(child, '.git'))) {
185
+ found.push(child);
186
+ continue; // a copy's own contents are the copy
187
+ }
188
+ walk(child, depth + 1);
189
+ }
190
+ };
191
+ walk(root, 1);
192
+ return found;
193
+ }
194
+ /**
195
+ * Remove the canonical worktrees, `task/*` branches and nested repository
196
+ * copies that merged work left behind, each only with proof it is redundant.
197
+ *
198
+ * @param opts - Project, scope, dry run (default) and whether to touch `origin`.
199
+ * @param deps - `openPrHeads`: head branches of open pull requests, or `null`
200
+ * when unknown (default: one `gh pr list`); `afterProof`: a test seam
201
+ * between the proofs and the deletes.
202
+ * @returns Every item considered, removed or kept with its reason, and the bytes reclaimed.
203
+ * @task T14142
204
+ */
205
+ export async function cleanupMergedWork(opts, deps = {}) {
206
+ const root = opts.projectRoot;
207
+ const dryRun = opts.dryRun !== false;
208
+ const remote = opts.remote !== false;
209
+ const defaultBranch = (git(root, ['symbolic-ref', '--short', 'refs/remotes/origin/HEAD']) ?? 'origin/main').replace(/^origin\//, '');
210
+ const base = `origin/${defaultBranch}`;
211
+ const result = {
212
+ dryRun,
213
+ base,
214
+ worktrees: [],
215
+ localBranches: [],
216
+ remoteBranches: [],
217
+ nestedCopies: [],
218
+ bytesReclaimed: 0,
219
+ };
220
+ // Every proof below reads origin as fetched now; without that, nothing is deleted.
221
+ if (git(root, ['fetch', '-q', '--prune', 'origin']) === null) {
222
+ return { ...result, skippedReason: 'git fetch origin failed: nothing can be proven merged' };
223
+ }
224
+ if (git(root, ['rev-parse', '--verify', '-q', base]) === null) {
225
+ return { ...result, skippedReason: `${base} does not exist` };
226
+ }
227
+ const merged = (sha) => git(root, ['merge-base', '--is-ancestor', sha, base]) !== null;
228
+ const inScope = await scopeFor(root, opts.taskIds);
229
+ const projectHash = computeProjectHash(root);
230
+ const worktreeRoot = resolveWorktreeRootForHash(projectHash);
231
+ const actor = resolveWorktreeAuditActor();
232
+ // One comparison budget for the whole run (T14146).
233
+ const budget = newCompareBudget();
234
+ // A merged, clean worktree may drop rebuildable output; a repository copy never.
235
+ const worktreeContent = (path) => unprovenContent(path, root, { budget, exemptRegenerable: true });
236
+ const copyContent = (path) => unprovenContent(path, root, { budget, exemptNodeModules: false });
237
+ const keep = (list, target, taskId, reason) => list.push({ target, taskId, removed: false, reason, bytes: 0 });
238
+ // Read before any worktree removal: removing a worktree also drops its branch.
239
+ const localRefs = lines(git(root, ['for-each-ref', '--format=%(refname:short)%09%(objectname)', 'refs/heads/task']));
240
+ // ── Canonical task worktrees ──────────────────────────────────────────────
241
+ let registered = [];
242
+ try {
243
+ registered = enumerateWorktrees(root);
244
+ }
245
+ catch {
246
+ registered = [];
247
+ }
248
+ const removedPaths = new Set();
249
+ for (const wt of registered) {
250
+ const taskId = basename(wt.path);
251
+ if (dirname(wt.path) !== worktreeRoot || !/^T\d+$/.test(taskId))
252
+ continue;
253
+ if (!(await inScope(taskId)))
254
+ continue;
255
+ if (wt.locked) {
256
+ keep(result.worktrees, wt.path, taskId, 'git-locked');
257
+ continue;
258
+ }
259
+ if (readWorktreeTaskLock(projectHash, taskId) !== null) {
260
+ keep(result.worktrees, wt.path, taskId, 'task lock held');
261
+ continue;
262
+ }
263
+ const tip = git(wt.path, ['rev-parse', 'HEAD']);
264
+ if (tip === null || !merged(tip)) {
265
+ keep(result.worktrees, wt.path, taskId, `unmerged: not in ${base}`);
266
+ continue;
267
+ }
268
+ const blockers = guardWorktreeDisposal(wt.path, {
269
+ taskId,
270
+ reason: 'merged-cleanup',
271
+ gitRoot: root,
272
+ projectRoot: root,
273
+ evidence: await loadTaskEvidence(root, taskId),
274
+ dryRun,
275
+ });
276
+ if (blockers !== null) {
277
+ keep(result.worktrees, wt.path, taskId, describeDisposalBlockers(wt.path, blockers));
278
+ continue;
279
+ }
280
+ if (!insideRoot(wt.path, worktreeRoot)) {
281
+ keep(result.worktrees, wt.path, taskId, 'not a real directory inside the worktree root');
282
+ continue;
283
+ }
284
+ const unproven = worktreeContent(wt.path);
285
+ if (unproven !== null) {
286
+ keep(result.worktrees, wt.path, taskId, unproven);
287
+ continue;
288
+ }
289
+ if (findNestedRepos(wt.path).length > 0) {
290
+ keep(result.worktrees, wt.path, taskId, 'holds a nested repository or worktree');
291
+ continue;
292
+ }
293
+ const bytes = diskBytes(wt.path);
294
+ if (!dryRun) {
295
+ // Re-prove right before removing: anything written since the first check keeps it.
296
+ deps.beforeRemove?.(wt.path);
297
+ const late = worktreeContent(wt.path) ??
298
+ (findNestedRepos(wt.path).length > 0 ? 'holds a nested repository or worktree' : null);
299
+ if (late !== null) {
300
+ keep(result.worktrees, wt.path, taskId, `changed during cleanup: ${late}`);
301
+ continue;
302
+ }
303
+ const removal = removeWorktreeFromDisk(
304
+ // The branch is deleted below, leased to the sha proven merged.
305
+ { path: wt.path, branch: wt.branch, isMerged: false }, root);
306
+ appendWorktreeAuditEntry(root, {
307
+ actor,
308
+ action: 'prune',
309
+ target: wt.path,
310
+ branch: wt.branch,
311
+ taskId,
312
+ reason: 'merged-cleanup',
313
+ success: removal.success,
314
+ ...(removal.success ? {} : { error: removal.error }),
315
+ });
316
+ if (!removal.success) {
317
+ keep(result.worktrees, wt.path, taskId, removal.error);
318
+ continue;
319
+ }
320
+ }
321
+ removedPaths.add(wt.path);
322
+ result.worktrees.push({
323
+ target: wt.path,
324
+ taskId,
325
+ removed: true,
326
+ reason: `clean and merged into ${base}`,
327
+ bytes,
328
+ });
329
+ result.bytesReclaimed += bytes;
330
+ }
331
+ // ── Local task branches (a removed worktree, dry run included, frees its branch) ──
332
+ const checkedOut = new Set(registered.filter((w) => !removedPaths.has(w.path)).map((w) => w.branch));
333
+ const localProven = [];
334
+ for (const line of localRefs) {
335
+ const [branch = '', sha = ''] = line.split('\t');
336
+ const taskId = branchTaskId(branch);
337
+ if (taskId === null || !(await inScope(taskId)))
338
+ continue;
339
+ if (checkedOut.has(branch)) {
340
+ keep(result.localBranches, branch, taskId, 'checked out in a worktree');
341
+ continue;
342
+ }
343
+ if (!merged(sha)) {
344
+ keep(result.localBranches, branch, taskId, `unmerged: not in ${base}`);
345
+ continue;
346
+ }
347
+ localProven.push({
348
+ target: branch,
349
+ taskId,
350
+ sha,
351
+ removed: true,
352
+ reason: `merged into ${base}`,
353
+ bytes: 0,
354
+ });
355
+ }
356
+ // ── Remote task branches ──────────────────────────────────────────────────
357
+ const remoteProven = [];
358
+ if (remote) {
359
+ const openHeads = (deps.openPrHeads ?? openPrHeads)(root);
360
+ const remoteRefs = lines(git(root, [
361
+ 'for-each-ref',
362
+ '--format=%(refname:short)%09%(objectname)',
363
+ 'refs/remotes/origin/task',
364
+ ]));
365
+ const doomed = [];
366
+ for (const line of remoteRefs) {
367
+ const [ref = '', sha = ''] = line.split('\t');
368
+ const branch = ref.replace(/^origin\//, '');
369
+ const taskId = branchTaskId(branch);
370
+ if (taskId === null || !(await inScope(taskId)))
371
+ continue;
372
+ if (openHeads === null) {
373
+ keep(result.remoteBranches, branch, taskId, 'open pull requests could not be read');
374
+ }
375
+ else if (openHeads.has(branch)) {
376
+ keep(result.remoteBranches, branch, taskId, 'head of an open pull request');
377
+ }
378
+ else if (!merged(sha)) {
379
+ keep(result.remoteBranches, branch, taskId, `unmerged: not in ${base}`);
380
+ }
381
+ else {
382
+ doomed.push({
383
+ target: branch,
384
+ taskId,
385
+ sha,
386
+ removed: true,
387
+ reason: `merged into ${base}`,
388
+ bytes: 0,
389
+ });
390
+ }
391
+ }
392
+ remoteProven.push(...doomed);
393
+ }
394
+ // ── Deletes, each leased to the sha its proof read ──────────────────────
395
+ deps.afterProof?.();
396
+ for (const item of localProven) {
397
+ // update-ref deletes only while the tip is still the proven sha.
398
+ if (!dryRun &&
399
+ git(root, ['update-ref', '-d', `refs/heads/${item.target}`, item.sha ?? '']) === null) {
400
+ result.localBranches.push({ ...item, removed: false, reason: 'tip moved after the proof' });
401
+ continue;
402
+ }
403
+ if (!dryRun)
404
+ auditBranchDelete(root, actor, item.target, item.taskId, item.sha ?? '', 'local');
405
+ result.localBranches.push(item);
406
+ }
407
+ for (let i = 0; i < remoteProven.length; i += REMOTE_DELETE_BATCH) {
408
+ const batch = remoteProven.slice(i, i + REMOTE_DELETE_BATCH);
409
+ const deleted = dryRun ? null : leasedRemoteDelete(root, batch);
410
+ for (const item of batch) {
411
+ if (deleted !== null && !deleted.has(item.target)) {
412
+ result.remoteBranches.push({
413
+ ...item,
414
+ removed: false,
415
+ reason: 'tip moved after the proof, or the push failed',
416
+ });
417
+ continue;
418
+ }
419
+ if (!dryRun)
420
+ auditBranchDelete(root, actor, item.target, item.taskId, item.sha ?? '', 'origin');
421
+ result.remoteBranches.push(item);
422
+ }
423
+ }
424
+ // ── Repository copies nested inside worktrees ─────────────────────────────
425
+ const projectRoots = new Set(lines(git(root, ['rev-list', '--max-parents=0', base])));
426
+ let worktreeDirs = [];
427
+ try {
428
+ worktreeDirs = readdirSync(worktreeRoot)
429
+ .map((n) => join(worktreeRoot, n))
430
+ .filter((d) => insideRoot(d, worktreeRoot));
431
+ }
432
+ catch {
433
+ worktreeDirs = [];
434
+ }
435
+ for (const dir of worktreeDirs) {
436
+ if (removedPaths.has(dir))
437
+ continue;
438
+ // A copy inside a live task's worktree may be someone's working directory:
439
+ // only a worktree whose task is in scope (done or cancelled) is entered.
440
+ const owner = basename(dir);
441
+ const ownerInScope = /^T\d+$/.test(owner) && (await inScope(owner));
442
+ for (const nested of findNestedRepos(dir)) {
443
+ const roots = lines(git(nested, ['rev-list', '--max-parents=0', 'HEAD']));
444
+ if (!roots.some((r) => projectRoots.has(r)))
445
+ continue; // another project's repo
446
+ if (!ownerInScope) {
447
+ keep(result.nestedCopies, nested, /^T\d+$/.test(owner) ? owner : null, 'task active');
448
+ continue;
449
+ }
450
+ // A `.git` file is a linked worktree, possibly in use: the worktree tools own it.
451
+ if (!lstatSync(join(nested, '.git')).isDirectory()) {
452
+ keep(result.nestedCopies, nested, null, 'a linked worktree, not a copy');
453
+ continue;
454
+ }
455
+ if (!insideRoot(nested, worktreeRoot)) {
456
+ keep(result.nestedCopies, nested, null, 'not a real directory inside the worktree root');
457
+ continue;
458
+ }
459
+ const unprovenNested = copyContent(nested);
460
+ if (unprovenNested !== null) {
461
+ keep(result.nestedCopies, nested, null, unprovenNested);
462
+ continue;
463
+ }
464
+ const tips = nestedTips(nested);
465
+ // Count commits reachable from the copy's tips but from no origin ref; an
466
+ // object unknown here fails the call, which also keeps the copy.
467
+ const notOnOrigin = tips === null
468
+ ? null
469
+ : git(root, ['rev-list', '--count', ...new Set(tips), '--not', '--remotes=origin']);
470
+ const unpushed = notOnOrigin === null || notOnOrigin !== '0';
471
+ if (unpushed) {
472
+ keep(result.nestedCopies, nested, null, 'holds commits not on origin');
473
+ continue;
474
+ }
475
+ const bytes = diskBytes(nested);
476
+ if (!dryRun) {
477
+ deps.beforeRemove?.(nested);
478
+ const late = copyContent(nested);
479
+ if (late !== null || !insideRoot(nested, worktreeRoot)) {
480
+ keep(result.nestedCopies, nested, null, `changed during cleanup: ${late ?? 'moved'}`);
481
+ continue;
482
+ }
483
+ try {
484
+ napiRemoveDir({ path: nested });
485
+ }
486
+ catch {
487
+ // verified below
488
+ }
489
+ if (existsSync(nested)) {
490
+ keep(result.nestedCopies, nested, null, 'removal failed');
491
+ continue;
492
+ }
493
+ pruneWorktreeRegistry(root);
494
+ }
495
+ result.nestedCopies.push({
496
+ target: nested,
497
+ taskId: null,
498
+ removed: true,
499
+ reason: 'clean copy of this repository; every commit is on origin',
500
+ bytes,
501
+ });
502
+ result.bytesReclaimed += bytes;
503
+ }
504
+ }
505
+ return result;
506
+ }
507
+ /**
508
+ * Record a deleted branch with its tip, so a mistaken delete is one command to
509
+ * undo: `git branch <b> <sha>` locally, `git push origin <sha>:refs/heads/<b>`
510
+ * on origin.
511
+ */
512
+ function auditBranchDelete(root, actor, branch, taskId, sha, where) {
513
+ const restore = where === 'local'
514
+ ? `git branch ${branch} ${sha}`
515
+ : `git push origin ${sha}:refs/heads/${branch}`;
516
+ appendWorktreeAuditEntry(root, {
517
+ actor,
518
+ action: 'prune',
519
+ target: where === 'local' ? branch : `origin/${branch}`,
520
+ branch,
521
+ ...(taskId !== null ? { taskId } : {}),
522
+ reason: `merged-cleanup: deleted ${where} branch at ${sha}; restore with ${restore}`,
523
+ success: true,
524
+ });
525
+ }
526
+ /**
527
+ * Delete `origin` branches, each under its own lease: a ref whose tip is no
528
+ * longer the proven sha is rejected, not deleted.
529
+ *
530
+ * @returns The branches `origin` reports deleted (`--porcelain`).
531
+ */
532
+ function leasedRemoteDelete(root, items) {
533
+ const args = ['-C', root, 'push', '--porcelain', 'origin'];
534
+ for (const it of items)
535
+ args.push(`--force-with-lease=refs/heads/${it.target}:${it.sha ?? ''}`);
536
+ for (const it of items)
537
+ args.push(`:refs/heads/${it.target}`);
538
+ // A rejected ref fails the push; its porcelain report is still on stdout.
539
+ const out = spawnSync('git', args, { encoding: 'utf8', timeout: 120_000, env: discoveryEnv() }).stdout ??
540
+ '';
541
+ const deleted = new Set();
542
+ for (const line of lines(out)) {
543
+ const [flag, refs] = line.split('\t');
544
+ const ref = refs?.split(':')[1] ?? '';
545
+ if (flag === '-' && ref.startsWith('refs/heads/'))
546
+ deleted.add(ref.slice('refs/heads/'.length));
547
+ }
548
+ return deleted;
549
+ }
550
+ /** Head branches of open pull requests, or `null` when `gh` cannot say. */
551
+ function openPrHeads(root) {
552
+ try {
553
+ const out = execFileSync('gh', [
554
+ 'pr',
555
+ 'list',
556
+ '--state',
557
+ 'open',
558
+ '--limit',
559
+ '1000',
560
+ '--json',
561
+ 'headRefName',
562
+ '--jq',
563
+ '.[].headRefName',
564
+ ], { cwd: root, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'], timeout: 60_000 });
565
+ return new Set(lines(out));
566
+ }
567
+ catch {
568
+ return null;
569
+ }
570
+ }
571
+ //# sourceMappingURL=merged-cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merged-cleanup.js","sourceRoot":"","sources":["../../src/worktree/merged-cleanup.ts"],"names":[],"mappings":"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"}