@tacuchi/agent-workflow-cli 25.8.0 → 26.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (558) hide show
  1. package/CHANGELOG.md +106 -0
  2. package/README.md +6 -3
  3. package/dist/adapters/git-cli.js +225 -17
  4. package/dist/adapters/git-cli.js.map +1 -1
  5. package/dist/adapters/node-file-system.js +48 -0
  6. package/dist/adapters/node-file-system.js.map +1 -1
  7. package/dist/application/amend-service.js +51 -14
  8. package/dist/application/amend-service.js.map +1 -1
  9. package/dist/application/branch-resolver.js +6 -3
  10. package/dist/application/branch-resolver.js.map +1 -1
  11. package/dist/application/capability/design-handler.js +218 -43
  12. package/dist/application/capability/design-handler.js.map +1 -1
  13. package/dist/application/capability/dispatcher.js +182 -19
  14. package/dist/application/capability/dispatcher.js.map +1 -1
  15. package/dist/application/capability/durable-effect.js +3 -0
  16. package/dist/application/capability/durable-effect.js.map +1 -1
  17. package/dist/application/capability/readiness.js +8 -54
  18. package/dist/application/capability/readiness.js.map +1 -1
  19. package/dist/application/capability/resolution.js +124 -192
  20. package/dist/application/capability/resolution.js.map +1 -1
  21. package/dist/application/check-branch-service.js +158 -19
  22. package/dist/application/check-branch-service.js.map +1 -1
  23. package/dist/application/checkpoint/markdown.js +2 -2
  24. package/dist/application/checkpoint/markdown.js.map +1 -1
  25. package/dist/application/checkpoint/state-reader.js +12 -0
  26. package/dist/application/checkpoint/state-reader.js.map +1 -1
  27. package/dist/application/checkpoint-service.js +12 -4
  28. package/dist/application/checkpoint-service.js.map +1 -1
  29. package/dist/application/checkpoint-write-service.js +91 -17
  30. package/dist/application/checkpoint-write-service.js.map +1 -1
  31. package/dist/application/claims-ledger.js +137 -11
  32. package/dist/application/claims-ledger.js.map +1 -1
  33. package/dist/application/claims-recovery.js +85 -44
  34. package/dist/application/claims-recovery.js.map +1 -1
  35. package/dist/application/database-tool-catalog.js +33 -0
  36. package/dist/application/database-tool-catalog.js.map +1 -1
  37. package/dist/application/design/consumer-document.js +2 -2
  38. package/dist/application/design/consumer-document.js.map +1 -1
  39. package/dist/application/design/design-content-gate-service.js +20 -2
  40. package/dist/application/design/design-content-gate-service.js.map +1 -1
  41. package/dist/application/design/design-gate-service.js +2 -0
  42. package/dist/application/design/design-gate-service.js.map +1 -1
  43. package/dist/application/design/design-index-service.js +4 -0
  44. package/dist/application/design/design-index-service.js.map +1 -1
  45. package/dist/application/design/design-publish-service.js +1 -4
  46. package/dist/application/design/design-publish-service.js.map +1 -1
  47. package/dist/application/design/design-record-service.js +13 -7
  48. package/dist/application/design/design-record-service.js.map +1 -1
  49. package/dist/application/design/design-resolver-service.js +22 -3
  50. package/dist/application/design/design-resolver-service.js.map +1 -1
  51. package/dist/application/design/design-simple-service.js +24 -5
  52. package/dist/application/design/design-simple-service.js.map +1 -1
  53. package/dist/application/design/digest.js +41 -0
  54. package/dist/application/design/digest.js.map +1 -0
  55. package/dist/application/dev-only-services.js +166 -20
  56. package/dist/application/dev-only-services.js.map +1 -1
  57. package/dist/application/doc-branch-ledger.js +145 -0
  58. package/dist/application/doc-branch-ledger.js.map +1 -0
  59. package/dist/application/docs-canon-service.js +1 -1
  60. package/dist/application/docs-canon-service.js.map +1 -1
  61. package/dist/application/doctor/dist-integrity.js +113 -0
  62. package/dist/application/doctor/dist-integrity.js.map +1 -0
  63. package/dist/application/doctor/hosts.js +5 -2
  64. package/dist/application/doctor/hosts.js.map +1 -1
  65. package/dist/application/doctor/prepare.js +3 -3
  66. package/dist/application/doctor/prepare.js.map +1 -1
  67. package/dist/application/doctor/provider-installation.js +39 -19
  68. package/dist/application/doctor/provider-installation.js.map +1 -1
  69. package/dist/application/doctor/provider-mcps.js +9 -1
  70. package/dist/application/doctor/provider-mcps.js.map +1 -1
  71. package/dist/application/doctor/provider-skills.js +29 -115
  72. package/dist/application/doctor/provider-skills.js.map +1 -1
  73. package/dist/application/doctor/provider-visibility.js +76 -3
  74. package/dist/application/doctor/provider-visibility.js.map +1 -1
  75. package/dist/application/doctor/provider-workspace-block.js +156 -0
  76. package/dist/application/doctor/provider-workspace-block.js.map +1 -0
  77. package/dist/application/doctor/repair-runner.js +36 -39
  78. package/dist/application/doctor/repair-runner.js.map +1 -1
  79. package/dist/application/doctor/report.js +24 -4
  80. package/dist/application/doctor/report.js.map +1 -1
  81. package/dist/application/export-catalog-check.js +200 -0
  82. package/dist/application/export-catalog-check.js.map +1 -0
  83. package/dist/application/export-service.js +716 -79
  84. package/dist/application/export-service.js.map +1 -1
  85. package/dist/application/fix-git-service.js +285 -64
  86. package/dist/application/fix-git-service.js.map +1 -1
  87. package/dist/application/flow/advance.js +202 -25
  88. package/dist/application/flow/advance.js.map +1 -1
  89. package/dist/application/flow/annul-service.js +3 -1
  90. package/dist/application/flow/annul-service.js.map +1 -1
  91. package/dist/application/flow/batch-commit.js +189 -0
  92. package/dist/application/flow/batch-commit.js.map +1 -0
  93. package/dist/application/flow/checkout-observation.js +63 -10
  94. package/dist/application/flow/checkout-observation.js.map +1 -1
  95. package/dist/application/flow/close-artifacts.js +105 -0
  96. package/dist/application/flow/close-artifacts.js.map +1 -0
  97. package/dist/application/flow/close-at-boundary.js +25 -14
  98. package/dist/application/flow/close-at-boundary.js.map +1 -1
  99. package/dist/application/flow/close-document-guidance.js +70 -0
  100. package/dist/application/flow/close-document-guidance.js.map +1 -0
  101. package/dist/application/flow/flow-service.js +46 -3
  102. package/dist/application/flow/flow-service.js.map +1 -1
  103. package/dist/application/flow/internal-actions.js +300 -82
  104. package/dist/application/flow/internal-actions.js.map +1 -1
  105. package/dist/application/flow/internal-drive.js +24 -1
  106. package/dist/application/flow/internal-drive.js.map +1 -1
  107. package/dist/application/flow/plan-entry.js +82 -0
  108. package/dist/application/flow/plan-entry.js.map +1 -0
  109. package/dist/application/flow/prove.js +32 -1
  110. package/dist/application/flow/prove.js.map +1 -1
  111. package/dist/application/flow/quick-checkouts.js +48 -0
  112. package/dist/application/flow/quick-checkouts.js.map +1 -0
  113. package/dist/application/flow/reinfer-batch.js +177 -0
  114. package/dist/application/flow/reinfer-batch.js.map +1 -0
  115. package/dist/application/flow/reopen-run.js +12 -5
  116. package/dist/application/flow/reopen-run.js.map +1 -1
  117. package/dist/application/flow/run-state-service.js +2 -0
  118. package/dist/application/flow/run-state-service.js.map +1 -1
  119. package/dist/application/flow/submit.js +584 -117
  120. package/dist/application/flow/submit.js.map +1 -1
  121. package/dist/application/generate-launch-service.js +16 -6
  122. package/dist/application/generate-launch-service.js.map +1 -1
  123. package/dist/application/git-flow-service.js +34 -3
  124. package/dist/application/git-flow-service.js.map +1 -1
  125. package/dist/application/history-publications.js +24 -0
  126. package/dist/application/history-publications.js.map +1 -1
  127. package/dist/application/history-reconcile-service.js +45 -0
  128. package/dist/application/history-reconcile-service.js.map +1 -0
  129. package/dist/application/history-table.js +61 -12
  130. package/dist/application/history-table.js.map +1 -1
  131. package/dist/application/history-update-service.js +25 -4
  132. package/dist/application/history-update-service.js.map +1 -1
  133. package/dist/application/hook-branch-check.js +25 -3
  134. package/dist/application/hook-branch-check.js.map +1 -1
  135. package/dist/application/hook-git-commit-advisor.js +3 -4
  136. package/dist/application/hook-git-commit-advisor.js.map +1 -1
  137. package/dist/application/hook-turn-start.js +51 -0
  138. package/dist/application/hook-turn-start.js.map +1 -0
  139. package/dist/application/host-memory/codex.js +1 -1
  140. package/dist/application/host-memory/codex.js.map +1 -1
  141. package/dist/application/hub-registry.js +135 -0
  142. package/dist/application/hub-registry.js.map +1 -0
  143. package/dist/application/local-proposal.js +72 -19
  144. package/dist/application/local-proposal.js.map +1 -1
  145. package/dist/application/mcp-host-reader.js +1 -1
  146. package/dist/application/mcp-host-reader.js.map +1 -1
  147. package/dist/application/mcp-host-writer.js +16 -10
  148. package/dist/application/mcp-host-writer.js.map +1 -1
  149. package/dist/application/merge-state-service.js +150 -34
  150. package/dist/application/merge-state-service.js.map +1 -1
  151. package/dist/application/multiroot/claude.js +17 -10
  152. package/dist/application/multiroot/claude.js.map +1 -1
  153. package/dist/application/multiroot/codex.js +17 -11
  154. package/dist/application/multiroot/codex.js.map +1 -1
  155. package/dist/application/multiroot-service.js +52 -28
  156. package/dist/application/multiroot-service.js.map +1 -1
  157. package/dist/application/parsers/execution-batches.js +64 -0
  158. package/dist/application/parsers/execution-batches.js.map +1 -0
  159. package/dist/application/parsers/phases.js +23 -2
  160. package/dist/application/parsers/phases.js.map +1 -1
  161. package/dist/application/parsers/project-block.js +146 -17
  162. package/dist/application/parsers/project-block.js.map +1 -1
  163. package/dist/application/parsers/tasks.js +16 -2
  164. package/dist/application/parsers/tasks.js.map +1 -1
  165. package/dist/application/parsers/toml.js +19 -0
  166. package/dist/application/parsers/toml.js.map +1 -0
  167. package/dist/application/paths-service.js +13 -16
  168. package/dist/application/paths-service.js.map +1 -1
  169. package/dist/application/persist-service.js +118 -5
  170. package/dist/application/persist-service.js.map +1 -1
  171. package/dist/application/plan-exec-batch-service.js +162 -22
  172. package/dist/application/plan-exec-batch-service.js.map +1 -1
  173. package/dist/application/plan-exec-decision-service.js +61 -12
  174. package/dist/application/plan-exec-decision-service.js.map +1 -1
  175. package/dist/application/plan-exec-plan-diff.js +105 -0
  176. package/dist/application/plan-exec-plan-diff.js.map +1 -0
  177. package/dist/application/plan-lint-service.js +33 -5
  178. package/dist/application/plan-lint-service.js.map +1 -1
  179. package/dist/application/plan-passes.js +41 -0
  180. package/dist/application/plan-passes.js.map +1 -0
  181. package/dist/application/preparation-receipts.js +58 -0
  182. package/dist/application/preparation-receipts.js.map +1 -0
  183. package/dist/application/project-md-upsert-service.js +191 -52
  184. package/dist/application/project-md-upsert-service.js.map +1 -1
  185. package/dist/application/project-tab-data.js +40 -10
  186. package/dist/application/project-tab-data.js.map +1 -1
  187. package/dist/application/release-data/artifacts.js +15 -7
  188. package/dist/application/release-data/artifacts.js.map +1 -1
  189. package/dist/application/release-data/bundles.js +52 -6
  190. package/dist/application/release-data/bundles.js.map +1 -1
  191. package/dist/application/release-data/common.js +2 -2
  192. package/dist/application/release-data/common.js.map +1 -1
  193. package/dist/application/release-data/rollback.js +7 -0
  194. package/dist/application/release-data/rollback.js.map +1 -0
  195. package/dist/application/release-data/sessions.js +2 -2
  196. package/dist/application/release-data/sessions.js.map +1 -1
  197. package/dist/application/release-pass-ledger.js +1 -1
  198. package/dist/application/render/history-row.js +2 -0
  199. package/dist/application/render/history-row.js.map +1 -1
  200. package/dist/application/render/project-block.js +28 -11
  201. package/dist/application/render/project-block.js.map +1 -1
  202. package/dist/application/reseal-service.js +1 -0
  203. package/dist/application/reseal-service.js.map +1 -1
  204. package/dist/application/resume-service.js +55 -8
  205. package/dist/application/resume-service.js.map +1 -1
  206. package/dist/application/retirement/apply.js +25 -7
  207. package/dist/application/retirement/apply.js.map +1 -1
  208. package/dist/application/retirement/attribution.js +122 -50
  209. package/dist/application/retirement/attribution.js.map +1 -1
  210. package/dist/application/retirement/prepare.js +17 -11
  211. package/dist/application/retirement/prepare.js.map +1 -1
  212. package/dist/application/retirement/preview.js +2 -1
  213. package/dist/application/retirement/preview.js.map +1 -1
  214. package/dist/application/self/clean-legacy.js +1 -2
  215. package/dist/application/self/clean-legacy.js.map +1 -1
  216. package/dist/application/self/codex-plugin.js +1 -1
  217. package/dist/application/self/codex-plugin.js.map +1 -1
  218. package/dist/application/self/host-states.js +3 -3
  219. package/dist/application/self/host-states.js.map +1 -1
  220. package/dist/application/self/install-hooks.js +1 -1
  221. package/dist/application/self/install-hooks.js.map +1 -1
  222. package/dist/application/self/install-skill.js +5 -49
  223. package/dist/application/self/install-skill.js.map +1 -1
  224. package/dist/application/self/mcp-config.js +19 -11
  225. package/dist/application/self/mcp-config.js.map +1 -1
  226. package/dist/application/self/opencode-plugin.js +1 -0
  227. package/dist/application/self/opencode-plugin.js.map +1 -1
  228. package/dist/application/self/skill-files.js +29 -0
  229. package/dist/application/self/skill-files.js.map +1 -0
  230. package/dist/application/self/uninstall.js +1 -1
  231. package/dist/application/self/uninstall.js.map +1 -1
  232. package/dist/application/semantic-operation/protocol.js +66 -5
  233. package/dist/application/semantic-operation/protocol.js.map +1 -1
  234. package/dist/application/session-archive-service.js +113 -0
  235. package/dist/application/session-archive-service.js.map +1 -0
  236. package/dist/application/session-binding-service.js +35 -0
  237. package/dist/application/session-binding-service.js.map +1 -1
  238. package/dist/application/session-close-service.js +390 -54
  239. package/dist/application/session-close-service.js.map +1 -1
  240. package/dist/application/session-create-service.js +97 -5
  241. package/dist/application/session-create-service.js.map +1 -1
  242. package/dist/application/session-custody-recorder.js +15 -12
  243. package/dist/application/session-custody-recorder.js.map +1 -1
  244. package/dist/application/session-custody-service.js +1 -0
  245. package/dist/application/session-custody-service.js.map +1 -1
  246. package/dist/application/session-narrative.js +42 -12
  247. package/dist/application/session-narrative.js.map +1 -1
  248. package/dist/application/session-pause-service.js +46 -0
  249. package/dist/application/session-pause-service.js.map +1 -0
  250. package/dist/application/session-resolver.js +36 -11
  251. package/dist/application/session-resolver.js.map +1 -1
  252. package/dist/application/session-resume-service.js +134 -13
  253. package/dist/application/session-resume-service.js.map +1 -1
  254. package/dist/application/sessions-service.js +4 -0
  255. package/dist/application/sessions-service.js.map +1 -1
  256. package/dist/application/sessions-sweep-service.js +77 -0
  257. package/dist/application/sessions-sweep-service.js.map +1 -0
  258. package/dist/application/settle-service.js +3 -1
  259. package/dist/application/settle-service.js.map +1 -1
  260. package/dist/application/skills-resolver-service.js +6 -92
  261. package/dist/application/skills-resolver-service.js.map +1 -1
  262. package/dist/application/source-add-service.js +37 -0
  263. package/dist/application/source-add-service.js.map +1 -0
  264. package/dist/application/source-boundary-policy.js +105 -8
  265. package/dist/application/source-boundary-policy.js.map +1 -1
  266. package/dist/application/source-pipeline.js +68 -0
  267. package/dist/application/source-pipeline.js.map +1 -0
  268. package/dist/application/source-remove-service.js +15 -3
  269. package/dist/application/source-remove-service.js.map +1 -1
  270. package/dist/application/sources-service.js +71 -16
  271. package/dist/application/sources-service.js.map +1 -1
  272. package/dist/application/status-service.js +55 -5
  273. package/dist/application/status-service.js.map +1 -1
  274. package/dist/application/unit-dependencies.js +100 -0
  275. package/dist/application/unit-dependencies.js.map +1 -0
  276. package/dist/application/unit-membership.js +37 -0
  277. package/dist/application/unit-membership.js.map +1 -0
  278. package/dist/application/unit-residue.js +72 -0
  279. package/dist/application/unit-residue.js.map +1 -0
  280. package/dist/application/visibility-doctor-service.js +66 -4
  281. package/dist/application/visibility-doctor-service.js.map +1 -1
  282. package/dist/application/working-branch-service.js +6 -0
  283. package/dist/application/working-branch-service.js.map +1 -1
  284. package/dist/application/workline-graph.js +1 -1
  285. package/dist/application/workline-graph.js.map +1 -1
  286. package/dist/application/workline-index-service.js +118 -17
  287. package/dist/application/workline-index-service.js.map +1 -1
  288. package/dist/application/workspace-commit-service.js +218 -0
  289. package/dist/application/workspace-commit-service.js.map +1 -0
  290. package/dist/application/workspace-init-service.js +64 -34
  291. package/dist/application/workspace-init-service.js.map +1 -1
  292. package/dist/application/workspace-local-config.js +90 -0
  293. package/dist/application/workspace-local-config.js.map +1 -0
  294. package/dist/application/workspace-materialization-service.js +52 -3
  295. package/dist/application/workspace-materialization-service.js.map +1 -1
  296. package/dist/application/workspace-migrate/apply.js +525 -4
  297. package/dist/application/workspace-migrate/apply.js.map +1 -1
  298. package/dist/application/workspace-migrate/markers.js +9 -6
  299. package/dist/application/workspace-migrate/markers.js.map +1 -1
  300. package/dist/application/workspace-migrate/plan.js +97 -5
  301. package/dist/application/workspace-migrate/plan.js.map +1 -1
  302. package/dist/application/workspace-move-service.js +270 -0
  303. package/dist/application/workspace-move-service.js.map +1 -0
  304. package/dist/application/workspace-untrack-service.js +28 -0
  305. package/dist/application/workspace-untrack-service.js.map +1 -0
  306. package/dist/application/worktree-service.js +654 -105
  307. package/dist/application/worktree-service.js.map +1 -1
  308. package/dist/cli/ascii.js +2 -0
  309. package/dist/cli/ascii.js.map +1 -1
  310. package/dist/cli/commands/add-source.js +38 -0
  311. package/dist/cli/commands/add-source.js.map +1 -0
  312. package/dist/cli/commands/amend.js +14 -3
  313. package/dist/cli/commands/amend.js.map +1 -1
  314. package/dist/cli/commands/capability.js +23 -4
  315. package/dist/cli/commands/capability.js.map +1 -1
  316. package/dist/cli/commands/designs.js +14 -5
  317. package/dist/cli/commands/designs.js.map +1 -1
  318. package/dist/cli/commands/dev-only.js +19 -6
  319. package/dist/cli/commands/dev-only.js.map +1 -1
  320. package/dist/cli/commands/doc-branch.js +184 -0
  321. package/dist/cli/commands/doc-branch.js.map +1 -0
  322. package/dist/cli/commands/doctor.js +5 -1
  323. package/dist/cli/commands/doctor.js.map +1 -1
  324. package/dist/cli/commands/export.js +78 -18
  325. package/dist/cli/commands/export.js.map +1 -1
  326. package/dist/cli/commands/fix-git.js +89 -14
  327. package/dist/cli/commands/fix-git.js.map +1 -1
  328. package/dist/cli/commands/flow.js +120 -15
  329. package/dist/cli/commands/flow.js.map +1 -1
  330. package/dist/cli/commands/generate-launch.js +14 -2
  331. package/dist/cli/commands/generate-launch.js.map +1 -1
  332. package/dist/cli/commands/history-update.js +1 -1
  333. package/dist/cli/commands/history-update.js.map +1 -1
  334. package/dist/cli/commands/history.js +14 -0
  335. package/dist/cli/commands/history.js.map +1 -0
  336. package/dist/cli/commands/hook.js +15 -2
  337. package/dist/cli/commands/hook.js.map +1 -1
  338. package/dist/cli/commands/index.js +18 -5
  339. package/dist/cli/commands/index.js.map +1 -1
  340. package/dist/cli/commands/merge-state.js +2 -2
  341. package/dist/cli/commands/merge-state.js.map +1 -1
  342. package/dist/cli/commands/persist.js +6 -5
  343. package/dist/cli/commands/persist.js.map +1 -1
  344. package/dist/cli/commands/project-md-upsert.js +5 -3
  345. package/dist/cli/commands/project-md-upsert.js.map +1 -1
  346. package/dist/cli/commands/release-pass.js +3 -3
  347. package/dist/cli/commands/release-pass.js.map +1 -1
  348. package/dist/cli/commands/resume.js +12 -3
  349. package/dist/cli/commands/resume.js.map +1 -1
  350. package/dist/cli/commands/self.js +8 -24
  351. package/dist/cli/commands/self.js.map +1 -1
  352. package/dist/cli/commands/session-close.js +64 -9
  353. package/dist/cli/commands/session-close.js.map +1 -1
  354. package/dist/cli/commands/session-create.js +4 -2
  355. package/dist/cli/commands/session-create.js.map +1 -1
  356. package/dist/cli/commands/session-pause.js +14 -0
  357. package/dist/cli/commands/session-pause.js.map +1 -0
  358. package/dist/cli/commands/sessions.js +16 -3
  359. package/dist/cli/commands/sessions.js.map +1 -1
  360. package/dist/cli/commands/set-branch.js +28 -4
  361. package/dist/cli/commands/set-branch.js.map +1 -1
  362. package/dist/cli/commands/set-edit-mode.js +20 -0
  363. package/dist/cli/commands/set-edit-mode.js.map +1 -0
  364. package/dist/cli/commands/set-pipeline.js +35 -0
  365. package/dist/cli/commands/set-pipeline.js.map +1 -0
  366. package/dist/cli/commands/skills.js +4 -11
  367. package/dist/cli/commands/skills.js.map +1 -1
  368. package/dist/cli/commands/sources.js +4 -0
  369. package/dist/cli/commands/sources.js.map +1 -1
  370. package/dist/cli/commands/status.js +35 -2
  371. package/dist/cli/commands/status.js.map +1 -1
  372. package/dist/cli/commands/unknown-flags.js +1 -0
  373. package/dist/cli/commands/unknown-flags.js.map +1 -1
  374. package/dist/cli/commands/visibility.js +1 -0
  375. package/dist/cli/commands/visibility.js.map +1 -1
  376. package/dist/cli/commands/workspace-commit.js +62 -0
  377. package/dist/cli/commands/workspace-commit.js.map +1 -0
  378. package/dist/cli/commands/workspace-init.js +39 -2
  379. package/dist/cli/commands/workspace-init.js.map +1 -1
  380. package/dist/cli/commands/workspace-migrate.js +31 -3
  381. package/dist/cli/commands/workspace-migrate.js.map +1 -1
  382. package/dist/cli/commands/workspace-move.js +42 -0
  383. package/dist/cli/commands/workspace-move.js.map +1 -0
  384. package/dist/cli/commands/worktree.js +4 -4
  385. package/dist/cli/commands/worktree.js.map +1 -1
  386. package/dist/cli/context-id.js +6 -0
  387. package/dist/cli/context-id.js.map +1 -1
  388. package/dist/cli/full-cli.js +555 -0
  389. package/dist/cli/full-cli.js.map +1 -0
  390. package/dist/cli/help-groups.js +76 -19
  391. package/dist/cli/help-groups.js.map +1 -1
  392. package/dist/cli/hook-stdin-cache.js +12 -0
  393. package/dist/cli/hook-stdin-cache.js.map +1 -0
  394. package/dist/cli/main.js +47 -453
  395. package/dist/cli/main.js.map +1 -1
  396. package/dist/cli/parser.js +4 -0
  397. package/dist/cli/parser.js.map +1 -1
  398. package/dist/cli/tui/app.js +3 -4
  399. package/dist/cli/tui/app.js.map +1 -1
  400. package/dist/cli/tui/components/host-admin-section.js +2 -13
  401. package/dist/cli/tui/components/host-admin-section.js.map +1 -1
  402. package/dist/cli/tui/components/tabs-config.js +1 -2
  403. package/dist/cli/tui/components/tabs-config.js.map +1 -1
  404. package/dist/cli/tui/components/workspace-init-form.js +4 -1
  405. package/dist/cli/tui/components/workspace-init-form.js.map +1 -1
  406. package/dist/cli/tui/data/workflow-content.js +6 -1
  407. package/dist/cli/tui/data/workflow-content.js.map +1 -1
  408. package/dist/cli/tui/tabs/mcp-tab.js +4 -3
  409. package/dist/cli/tui/tabs/mcp-tab.js.map +1 -1
  410. package/dist/cli/tui/tabs/project-tab.js +7 -2
  411. package/dist/cli/tui/tabs/project-tab.js.map +1 -1
  412. package/dist/cli/tui/tui-prefs.js +2 -0
  413. package/dist/cli/tui/tui-prefs.js.map +1 -1
  414. package/dist/dist-manifest.json +3973 -0
  415. package/dist/domain/capability/protocol.js +3 -1
  416. package/dist/domain/capability/protocol.js.map +1 -1
  417. package/dist/domain/decision-note.js +13 -0
  418. package/dist/domain/decision-note.js.map +1 -1
  419. package/dist/domain/design/artifact.js +22 -3
  420. package/dist/domain/design/artifact.js.map +1 -1
  421. package/dist/domain/design/capability.js +1 -0
  422. package/dist/domain/design/capability.js.map +1 -1
  423. package/dist/domain/design/expansion.js +1 -1
  424. package/dist/domain/design/expansion.js.map +1 -1
  425. package/dist/domain/design/maturity.js +16 -0
  426. package/dist/domain/design/maturity.js.map +1 -1
  427. package/dist/domain/design/reference.js +5 -0
  428. package/dist/domain/design/reference.js.map +1 -1
  429. package/dist/domain/doctor/operations.js +20 -12
  430. package/dist/domain/doctor/operations.js.map +1 -1
  431. package/dist/domain/effective-contract.js +3 -1
  432. package/dist/domain/effective-contract.js.map +1 -1
  433. package/dist/domain/elicitation.js +1 -1
  434. package/dist/domain/flow/answer.js +265 -130
  435. package/dist/domain/flow/answer.js.map +1 -1
  436. package/dist/domain/flow/authority.js +194 -37
  437. package/dist/domain/flow/authority.js.map +1 -1
  438. package/dist/domain/flow/batch-review.js +65 -0
  439. package/dist/domain/flow/batch-review.js.map +1 -0
  440. package/dist/domain/flow/decision-schema.js +47 -0
  441. package/dist/domain/flow/decision-schema.js.map +1 -0
  442. package/dist/domain/flow/directive.js +16 -0
  443. package/dist/domain/flow/directive.js.map +1 -1
  444. package/dist/domain/flow/execution-result.js +91 -2
  445. package/dist/domain/flow/execution-result.js.map +1 -1
  446. package/dist/domain/flow/run-state.js +352 -24
  447. package/dist/domain/flow/run-state.js.map +1 -1
  448. package/dist/domain/flow/test-run-evidence.js +285 -0
  449. package/dist/domain/flow/test-run-evidence.js.map +1 -0
  450. package/dist/domain/flow/unchanged-phase.js +15 -0
  451. package/dist/domain/flow/unchanged-phase.js.map +1 -0
  452. package/dist/domain/harnesses.js +14 -5
  453. package/dist/domain/harnesses.js.map +1 -1
  454. package/dist/domain/isolation-unit.js +2 -2
  455. package/dist/domain/isolation-unit.js.map +1 -1
  456. package/dist/domain/lineage.js +7 -2
  457. package/dist/domain/lineage.js.map +1 -1
  458. package/dist/domain/obligation-correspondence.js +4 -2
  459. package/dist/domain/obligation-correspondence.js.map +1 -1
  460. package/dist/domain/plan-handoff.js +5 -0
  461. package/dist/domain/plan-handoff.js.map +1 -0
  462. package/dist/domain/proposal.js +18 -7
  463. package/dist/domain/proposal.js.map +1 -1
  464. package/dist/domain/reservation.js +5 -3
  465. package/dist/domain/reservation.js.map +1 -1
  466. package/dist/domain/retirement/proposal.js +1 -0
  467. package/dist/domain/retirement/proposal.js.map +1 -1
  468. package/dist/domain/session/custody.js +10 -6
  469. package/dist/domain/session/custody.js.map +1 -1
  470. package/dist/domain/session/narrative.js +4 -1
  471. package/dist/domain/session/narrative.js.map +1 -1
  472. package/dist/domain/skills.js +4 -6
  473. package/dist/domain/skills.js.map +1 -1
  474. package/dist/domain/sql-lexer.js +1 -1
  475. package/dist/domain/sql-lexer.js.map +1 -1
  476. package/dist/runtime/namespace-resolver.js +4 -0
  477. package/dist/runtime/namespace-resolver.js.map +1 -1
  478. package/dist/runtime/workline-marker.js +35 -8
  479. package/dist/runtime/workline-marker.js.map +1 -1
  480. package/dist/runtime/workspace-resolution.js +123 -0
  481. package/dist/runtime/workspace-resolution.js.map +1 -0
  482. package/package.json +6 -5
  483. package/skills/w/SKILL.md +12 -17
  484. package/skills/w/artifacts/artifacts-core/CHECKPOINT.md +1 -1
  485. package/skills/w/artifacts/artifacts-core/SCRIPTS.rollback.sql +8 -0
  486. package/skills/w/artifacts/artifacts-core/SCRIPTS.sql +4 -8
  487. package/skills/w/commands/export-diagrams.md +3 -3
  488. package/skills/w/commands/export-manuals.md +6 -6
  489. package/skills/w/commands/export-reports.md +3 -3
  490. package/skills/w/commands/export-scripts.md +5 -5
  491. package/skills/w/commands/fix-git.md +12 -13
  492. package/skills/w/commands/persist.md +2 -2
  493. package/skills/w/commands/plan-exec.md +4 -2
  494. package/skills/w/commands/spec-new.md +1 -1
  495. package/skills/w/commands/workspace-init.md +2 -0
  496. package/skills/w/context/MANIFEST.json +1 -1
  497. package/skills/w/exports/README.md +4 -4
  498. package/skills/w/exports/export-diagrams/EXPORT.md +4 -4
  499. package/skills/w/exports/export-manuals/EXPORT.md +14 -16
  500. package/skills/w/exports/export-reports/EXPORT.md +3 -3
  501. package/skills/w/exports/export-scripts/EXPORT.md +46 -22
  502. package/skills/w/harness/HARNESS.md +4 -7
  503. package/skills/w/hooks/hooks.template.json +6 -4
  504. package/skills/w/loops/CHASSIS.md +12 -6
  505. package/skills/w/loops/CODE-POLICIES.md +8 -5
  506. package/skills/w/loops/README.md +2 -2
  507. package/skills/w/loops/plan-exec-loop/LOOP.md +23 -22
  508. package/skills/w/loops/plan-new-loop/LOOP.md +23 -31
  509. package/skills/w/loops/plan-refine-loop/LOOP.md +8 -2
  510. package/skills/w/loops/quick-loop/LOOP.md +7 -6
  511. package/skills/w/loops/spec-refine-loop/LOOP.md +1 -1
  512. package/skills/w/modules/DESIGN-REFERENCES.md +9 -11
  513. package/skills/w/modules/PLAN-EXECUTION-BATCHES.md +4 -4
  514. package/skills/w/modules/SESSION-NUMBERING.md +2 -0
  515. package/skills/w/roles/README.md +11 -47
  516. package/skills/w/roles/design/CONTRACT.md +6 -4
  517. package/skills/w/roles/design/ROLE.md +7 -3
  518. package/skills/w/roles/diagrams/ROLE.md +1 -1
  519. package/skills/w/roles/git/ROLE.md +17 -10
  520. package/skills/w/roles/research/ROLE.md +2 -2
  521. package/skills/w/roles/sql/ROLE.md +17 -15
  522. package/skills/w/schemas/design/ui-screen.v1.schema.json +9 -0
  523. package/dist/application/capability/descriptor-loader.js +0 -109
  524. package/dist/application/capability/descriptor-loader.js.map +0 -1
  525. package/dist/application/capability/installed-inventory.js +0 -168
  526. package/dist/application/capability/installed-inventory.js.map +0 -1
  527. package/dist/application/self/install-plugin-skills-git.js +0 -226
  528. package/dist/application/self/install-plugin-skills-git.js.map +0 -1
  529. package/dist/application/self/install-plugin-skills.js +0 -203
  530. package/dist/application/self/install-plugin-skills.js.map +0 -1
  531. package/dist/application/self/plugin-cache-clear.js +0 -133
  532. package/dist/application/self/plugin-cache-clear.js.map +0 -1
  533. package/dist/application/self/plugin-cache-reload.js +0 -141
  534. package/dist/application/self/plugin-cache-reload.js.map +0 -1
  535. package/dist/application/self/skills-apply.js +0 -623
  536. package/dist/application/self/skills-apply.js.map +0 -1
  537. package/dist/application/self/skills-catalog.js +0 -35
  538. package/dist/application/self/skills-catalog.js.map +0 -1
  539. package/dist/application/self/skills-change.js +0 -479
  540. package/dist/application/self/skills-change.js.map +0 -1
  541. package/dist/application/self/skills-discovery.js +0 -275
  542. package/dist/application/self/skills-discovery.js.map +0 -1
  543. package/dist/application/self/skills-manager.js +0 -253
  544. package/dist/application/self/skills-manager.js.map +0 -1
  545. package/dist/application/self/skills-payload.js +0 -566
  546. package/dist/application/self/skills-payload.js.map +0 -1
  547. package/dist/application/self/skills-registry.js +0 -107
  548. package/dist/application/self/skills-registry.js.map +0 -1
  549. package/dist/application/skill-index-service.js +0 -78
  550. package/dist/application/skill-index-service.js.map +0 -1
  551. package/dist/cli/commands/plugin-cache.js +0 -25
  552. package/dist/cli/commands/plugin-cache.js.map +0 -1
  553. package/dist/cli/commands/skill-index.js +0 -19
  554. package/dist/cli/commands/skill-index.js.map +0 -1
  555. package/dist/cli/tui/data/recommended-skills.js +0 -482
  556. package/dist/cli/tui/data/recommended-skills.js.map +0 -1
  557. package/dist/cli/tui/tabs/skills-tab.js +0 -664
  558. package/dist/cli/tui/tabs/skills-tab.js.map +0 -1
@@ -0,0 +1,68 @@
1
+ import { join } from "node:path";
2
+ import { BLOCK_MIRROR_FILES, parseProjectBlock, } from "./parsers/project-block.js";
3
+ import { finalValidationOverrides } from "./source-boundary-policy.js";
4
+ export function sourcePipeline(block, alias, origin = "CLAUDE.md") {
5
+ const declaration = block.pipeline?.[alias];
6
+ const value = (field) => {
7
+ const command = declaration?.[field];
8
+ if (command === undefined)
9
+ return { kind: "undeclared", action: `aw set-pipeline ${alias} ${field} <comando|ninguno>` };
10
+ return command === "ninguno"
11
+ ? { kind: "none", value: "ninguno" }
12
+ : { kind: "command", command };
13
+ };
14
+ return { alias, build: value("build"), test: value("test"), origin };
15
+ }
16
+ /** The first mirror declaring a field wins; a second mirror can supply a missing field. */
17
+ export async function readSourcePipelines(fs, paths) {
18
+ const result = new Map();
19
+ for (const name of BLOCK_MIRROR_FILES) {
20
+ const file = join(paths.workspaceDir(), name);
21
+ if (!(await fs.exists(file)))
22
+ continue;
23
+ const block = parseProjectBlock(await fs.readText(file), paths.blockMarkers());
24
+ if (block === null)
25
+ continue;
26
+ for (const { alias } of block.fuentes) {
27
+ const candidate = sourcePipeline(block, alias, name);
28
+ const existing = result.get(alias);
29
+ if (!existing)
30
+ result.set(alias, candidate);
31
+ else
32
+ result.set(alias, {
33
+ ...existing,
34
+ build: existing.build.kind === "undeclared" ? candidate.build : existing.build,
35
+ test: existing.test.kind === "undeclared" ? candidate.test : existing.test,
36
+ origin: existing.build.kind === "undeclared" && existing.test.kind === "undeclared"
37
+ ? candidate.origin
38
+ : existing.origin,
39
+ });
40
+ }
41
+ }
42
+ return [...result.values()];
43
+ }
44
+ /** A plan override is per command and per source; `ninguno` is never a runnable command. */
45
+ export function resolveFinalValidation(plan, aliases, pipelines) {
46
+ const overrides = finalValidationOverrides(plan);
47
+ return aliases
48
+ .filter((alias) => alias !== "workspace")
49
+ .map((alias) => {
50
+ const override = overrides.find((item) => item.alias === alias);
51
+ const source = pipelines.find((item) => item.alias === alias);
52
+ const command = (field) => {
53
+ const fromPlan = override?.[field];
54
+ if (fromPlan !== undefined)
55
+ return { command: fromPlan, origin: "plan" };
56
+ const fromSource = source?.[field];
57
+ if (fromSource?.kind === "command")
58
+ return { command: fromSource.command, origin: "source" };
59
+ return {
60
+ command: null,
61
+ origin: null,
62
+ action: `declará ${field === "test" ? "tests" : "build"} para '${alias}' en el pipeline versionado de la fuente (aw set-pipeline ${alias} ${field} <comando>) o en ## Validations del plan con Validación final · \`${alias}\` · ${field === "test" ? "tests" : "build"} \`<comando>\``,
63
+ };
64
+ };
65
+ return { alias, build: command("build"), test: command("test") };
66
+ });
67
+ }
68
+ //# sourceMappingURL=source-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-pipeline.js","sourceRoot":"","sources":["../../src/application/source-pipeline.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import { runMultiroot } from "./multiroot-service.js";
3
3
  import { readWorkspaceBlock } from "./parsers/project-block.js";
4
4
  import { ProcessRegistryService } from "./process-registry-service.js";
5
5
  import { runProjectMdUpsertWrite } from "./project-md-upsert-service.js";
6
+ import { writeWorkspaceLocalConfig } from "./workspace-local-config.js";
6
7
  import { ensureWorklineMaterialized, } from "./workspace-materialization-service.js";
7
8
  /**
8
9
  * Removes a source from the workspace entirely, composing existing services in
@@ -30,9 +31,20 @@ export async function removeSource(deps, alias) {
30
31
  // the receipt in this operation's result.
31
32
  const materialization = await ensureWorklineMaterialized(fs, paths);
32
33
  // 2. Remove multi-root visibility (claude/codex/warp/oz). Idempotent per host.
33
- await runMultiroot(fs, env, paths, "detach", { paths: [fuente.path] });
34
+ if (fuente.path !== null)
35
+ await runMultiroot(fs, env, paths, "detach", { paths: [fuente.path] });
34
36
  // 3. Prune the WORKSPACE block: Fuentes + working_branches + qa_branches for the alias.
35
- await runProjectMdUpsertWrite(fs, env, paths, { op: "init", removeAliases: [alias] });
37
+ const updated = await runProjectMdUpsertWrite(fs, env, paths, {
38
+ op: "init",
39
+ removeAliases: [alias],
40
+ });
41
+ if ("error" in updated || !updated.ok)
42
+ return {
43
+ error: "error" in updated
44
+ ? updated.error
45
+ : (updated.results?.find((file) => file.error)?.error ?? "el bloque no se publicó"),
46
+ };
47
+ await writeWorkspaceLocalConfig(fs, paths, { [alias]: null });
36
48
  // 4. Stop running processes launched from this source.
37
49
  const registry = new ProcessRegistryService(fs, proc, paths.cwdProcessesFile(), paths.cwdLockFile());
38
50
  const running = (await registry.list()).filter((r) => r.sourceAlias === alias && r.state === "running");
@@ -44,7 +56,7 @@ export async function removeSource(deps, alias) {
44
56
  await fs.remove(join(paths.cwdLaunchDir(), alias));
45
57
  return {
46
58
  alias,
47
- path: fuente.path,
59
+ path: fuente.path ?? "(local)",
48
60
  processesStopped: running.length,
49
61
  ...(materialization.materialized ? { materialization } : {}),
50
62
  };
@@ -1 +1 @@
1
- {"version":3,"file":"source-remove-service.js","sourceRoot":"","sources":["../../src/application/source-remove-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"source-remove-service.js","sourceRoot":"","sources":["../../src/application/source-remove-service.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,12 @@
1
- import { expectedWorkBranch } from "./branch-resolver.js";
2
- import { readWorkspaceBlock } from "./parsers/project-block.js";
1
+ import { dirname } from "node:path";
2
+ import { documentOfSession, readDocBranches, resolveDocBranch } from "./doc-branch-ledger.js";
3
+ import { declaringHubs } from "./hub-registry.js";
4
+ import { readWorkspaceBlock, requireSourcePath, } from "./parsers/project-block.js";
3
5
  import { relpath } from "./paths.js";
6
+ import { resolveSessionTarget } from "./session-resolver.js";
4
7
  export async function runSources(fs, _env, git, paths, input) {
5
8
  const cwd = paths.workspaceDir();
9
+ const ownRoot = await fs.realPath(cwd).catch(() => cwd);
6
10
  const block = await readWorkspaceBlock(fs, cwd, paths.blockMarkers());
7
11
  const verbose = input.verbose === true;
8
12
  if (!block || block.fuentes.length === 0) {
@@ -21,9 +25,34 @@ export async function runSources(fs, _env, git, paths, input) {
21
25
  // Expected work branch comes from WORKSPACE block working_branches per source;
22
26
  // decoupled from sessions/flow.
23
27
  const workingBranches = block.working_branches;
28
+ const resolution = await resolveSessionTarget(fs, paths, {
29
+ intent: "read",
30
+ bind: false,
31
+ ...(input.sessionCode ? { code: input.sessionCode } : {}),
32
+ ...(input.contextId ? { contextId: input.contextId } : {}),
33
+ });
34
+ if (input.sessionCode !== undefined && resolution?.outcome !== "resolved") {
35
+ return {
36
+ sources: [],
37
+ working_branches_from_status: workingBranches,
38
+ cross_source_consistent: false,
39
+ divergent_sources: [],
40
+ error: resolution?.message ?? "sesión no resuelta",
41
+ };
42
+ }
43
+ const document = resolution?.outcome === "resolved"
44
+ ? await documentOfSession(fs, paths, resolution.session.folder)
45
+ : { status: "none" };
46
+ const ledger = await readDocBranches(fs, paths);
24
47
  const enriched = [];
25
48
  for (const src of sources) {
26
- const expected = expectedWorkBranch(src, workingBranches);
49
+ const effective = await resolveDocBranch(fs, paths, src, block, document, ledger);
50
+ const expected = effective.branch;
51
+ const others = src.path === null
52
+ ? []
53
+ : (await declaringHubs(fs, dirname(paths.userRoot()), paths.namespace, src.path))
54
+ .filter((hub) => hub.root !== ownRoot)
55
+ .map((hub) => ({ root: hub.root, working_branch: hub.workingBranch }));
27
56
  if (input.skipGit === true) {
28
57
  // Mirror Python: skip_git produces only alias/path/main_branch/expected_work_branch.
29
58
  enriched.push({
@@ -31,10 +60,35 @@ export async function runSources(fs, _env, git, paths, input) {
31
60
  path: src.path,
32
61
  main_branch: src.main_branch,
33
62
  expected_work_branch: expected,
63
+ expected_origin: effective.origin,
64
+ ...(effective.origin === "none"
65
+ ? {
66
+ working_branch_notice: `rama de trabajo no declarada para ${src.alias}; usá 'aw set-working-branch ${src.alias} <rama>'`,
67
+ }
68
+ : {}),
69
+ other_workspaces: others,
34
70
  });
35
71
  }
36
72
  else {
37
- enriched.push(await checkSourceBranch(fs, git, src, expected));
73
+ const checked = await checkSourceBranch(fs, git, src, expected);
74
+ enriched.push({
75
+ ...checked,
76
+ expected_origin: effective.origin,
77
+ ...(effective.origin === "none"
78
+ ? {
79
+ working_branch_notice: `rama de trabajo no declarada para ${src.alias}; usá 'aw set-working-branch ${src.alias} <rama>'`,
80
+ }
81
+ : {}),
82
+ other_workspaces: others,
83
+ ...(others.some((hub) => hub.working_branch !== null && hub.working_branch === checked.current_branch)
84
+ ? {
85
+ shared_branch_warning: `El checkout está en la rama de trabajo de otro workspace: ${others
86
+ .filter((hub) => hub.working_branch === checked.current_branch)
87
+ .map((hub) => hub.root)
88
+ .join(", ")}`,
89
+ }
90
+ : {}),
91
+ });
38
92
  }
39
93
  }
40
94
  const { consistent, divergent } = computeCrossSourceConsistency(enriched);
@@ -43,6 +97,7 @@ export async function runSources(fs, _env, git, paths, input) {
43
97
  working_branches_from_status: workingBranches,
44
98
  cross_source_consistent: consistent,
45
99
  divergent_sources: divergent,
100
+ ...(ledger.unreadable > 0 ? { doc_branch_unreadable: ledger.unreadable } : {}),
46
101
  };
47
102
  if (verbose) {
48
103
  payload.session_code = input.sessionCode ?? "";
@@ -64,20 +119,25 @@ async function checkSourceBranch(fs, git, source, expected) {
64
119
  is_repo: false,
65
120
  error: null,
66
121
  };
67
- if (!(await fs.exists(source.path))) {
68
- base.error = `Path does not exist: ${source.path}`;
122
+ let repo;
123
+ try {
124
+ repo = await requireSourcePath(fs, source);
125
+ }
126
+ catch (err) {
127
+ base.error = err.message;
128
+ base.error_code = "SOURCE_PATH_MISSING";
69
129
  return base;
70
130
  }
71
- if (!(await git.isGitRepo(source.path))) {
131
+ if (!(await git.isGitRepo(repo))) {
72
132
  base.error = "Not a git repository";
73
133
  return base;
74
134
  }
75
135
  base.is_repo = true;
76
- const current = (await git.currentBranch(source.path)) ?? null;
136
+ const current = (await git.currentBranch(repo)) ?? null;
77
137
  base.current_branch = current;
78
138
  base.match = expected === null ? null : current === expected;
79
139
  try {
80
- const changed = await git.changedFiles(source.path);
140
+ const changed = await git.changedFiles(repo);
81
141
  base.changed_files = changed;
82
142
  base.dirty = changed.length > 0;
83
143
  }
@@ -88,14 +148,9 @@ async function checkSourceBranch(fs, git, source, expected) {
88
148
  return base;
89
149
  }
90
150
  function computeCrossSourceConsistency(sources) {
91
- const candidates = sources.filter((s) => s.is_repo && s.error === null && s.current_branch);
92
- if (candidates.length < 2)
93
- return { consistent: true, divergent: [] };
94
- const branches = new Set(candidates.map((s) => s.current_branch));
95
- if (branches.size <= 1)
96
- return { consistent: true, divergent: [] };
151
+ const candidates = sources.filter((s) => s.is_repo && s.error === null && s.expected_work_branch !== null && s.match === false);
97
152
  return {
98
- consistent: false,
153
+ consistent: candidates.length === 0,
99
154
  divergent: candidates.map((s) => ({
100
155
  alias: s.alias,
101
156
  current: s.current_branch,
@@ -1 +1 @@
1
- {"version":3,"file":"sources-service.js","sourceRoot":"","sources":["../../src/application/sources-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sources-service.js","sourceRoot":"","sources":["../../src/application/sources-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAEL,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AA0C7D,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,EAAkB,EAClB,IAAa,EACb,GAAY,EACZ,KAAmB,EACnB,KAAmB;IAEnB,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC;IAEvC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,MAAM,KAAK,GAAkB;YAC3B,OAAO,EAAE,EAAE;YACX,4BAA4B,EAAE,EAAE;YAChC,uBAAuB,EAAE,IAAI;YAC7B,iBAAiB,EAAE,EAAE;YACrB,KAAK,EAAE,qBAAqB;SAC7B,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK;QACzB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC7D,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IAClB,+EAA+E;IAC/E,gCAAgC;IAChC,MAAM,eAAe,GAAG,KAAK,CAAC,gBAAgB,CAAC;IAC/C,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE;QACvD,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,KAAK;QACX,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3D,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,UAAU,EAAE,OAAO,KAAK,UAAU,EAAE,CAAC;QAC1E,OAAO;YACL,OAAO,EAAE,EAAE;YACX,4BAA4B,EAAE,eAAe;YAC7C,uBAAuB,EAAE,KAAK;YAC9B,iBAAiB,EAAE,EAAE;YACrB,KAAK,EAAE,UAAU,EAAE,OAAO,IAAI,oBAAoB;SACnD,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GACZ,UAAU,EAAE,OAAO,KAAK,UAAU;QAChC,CAAC,CAAC,MAAM,iBAAiB,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;QAC/D,CAAC,CAAC,EAAE,MAAM,EAAE,MAAe,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAEhD,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAClF,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC;QAClC,MAAM,MAAM,GACV,GAAG,CAAC,IAAI,KAAK,IAAI;YACf,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;iBAC5E,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC;iBACrC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QAC/E,IAAI,KAAK,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAC3B,qFAAqF;YACrF,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,WAAW,EAAE,GAAG,CAAC,WAAW;gBAC5B,oBAAoB,EAAE,QAAQ;gBAC9B,eAAe,EAAE,SAAS,CAAC,MAAM;gBACjC,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,MAAM;oBAC7B,CAAC,CAAC;wBACE,qBAAqB,EAAE,qCAAqC,GAAG,CAAC,KAAK,gCAAgC,GAAG,CAAC,KAAK,UAAU;qBACzH;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,gBAAgB,EAAE,MAAM;aACP,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YAChE,QAAQ,CAAC,IAAI,CAAC;gBACZ,GAAG,OAAO;gBACV,eAAe,EAAE,SAAS,CAAC,MAAM;gBACjC,GAAG,CAAC,SAAS,CAAC,MAAM,KAAK,MAAM;oBAC7B,CAAC,CAAC;wBACE,qBAAqB,EAAE,qCAAqC,GAAG,CAAC,KAAK,gCAAgC,GAAG,CAAC,KAAK,UAAU;qBACzH;oBACH,CAAC,CAAC,EAAE,CAAC;gBACP,gBAAgB,EAAE,MAAM;gBACxB,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,cAAc,KAAK,IAAI,IAAI,GAAG,CAAC,cAAc,KAAK,OAAO,CAAC,cAAc,CACtF;oBACC,CAAC,CAAC;wBACE,qBAAqB,EAAE,6DAA6D,MAAM;6BACvF,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,cAAc,KAAK,OAAO,CAAC,cAAc,CAAC;6BAC9D,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;6BACtB,IAAI,CAAC,IAAI,CAAC,EAAE;qBAChB;oBACH,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,6BAA6B,CAAC,QAAQ,CAAC,CAAC;IAE1E,MAAM,OAAO,GAAkB;QAC7B,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAE/D;QACD,4BAA4B,EAAE,eAAe;QAC7C,uBAAuB,EAAE,UAAU;QACnC,iBAAiB,EAAE,SAAS;QAC5B,GAAG,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/E,CAAC;IAEF,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;QAC/C,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC;IACtC,CAAC;SAAM,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAC3C,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC;IAC3C,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,EAAkB,EAClB,GAAY,EACZ,MAAqB,EACrB,QAAuB;IAEvB,MAAM,IAAI,GAAmB;QAC3B,GAAG,MAAM;QACT,oBAAoB,EAAE,QAAQ;QAC9B,cAAc,EAAE,IAAI;QACpB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,aAAa,EAAE,EAAE;QACjB,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,IAAI;KACZ,CAAC;IACF,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,GAAI,GAAa,CAAC,OAAO,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,qBAAqB,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACpB,MAAM,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;IACxD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;IAC9B,IAAI,CAAC,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,6BAA6B,CAAC,OAAyB;IAI9D,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,oBAAoB,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,KAAK,KAAK,CAC7F,CAAC;IACF,OAAO;QACL,UAAU,EAAE,UAAU,CAAC,MAAM,KAAK,CAAC;QACnC,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAChC,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,OAAO,EAAE,CAAC,CAAC,cAAc;YACzB,QAAQ,EAAE,CAAC,CAAC,oBAAoB;SACjC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAqB,EACrB,GAAW,EACX,OAAgB;IAEhB,IAAI,OAAO;QAAE,OAAO,KAA2C,CAAC;IAChE,+EAA+E;IAC/E,MAAM,CAAC,GAA4B,EAAE,CAAC;IACtC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,IAAI,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,IAAI;YAAE,SAAS;QAC1C,IAAI,CAAC,KAAK,eAAe,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAC1E,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI;YAAE,SAAS;QAC5C,IAAI,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC1C,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;YACvB,SAAS;QACX,CAAC;QACD,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACX,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -1,5 +1,8 @@
1
+ import { sameCorrelative } from "../domain/correlative.js";
1
2
  import { projectRun } from "./flow/run-projection.js";
3
+ import { readHistoryRows } from "./history-table.js";
2
4
  import { readEvents } from "./retirement/history-events.js";
5
+ import { sessionNumericCode } from "./session-resolver.js";
3
6
  import { buildWorklineIndex, } from "./workline-index-service.js";
4
7
  /**
5
8
  * Read-only whole-workspace status aggregator. Never throws on a reachable cwd:
@@ -11,9 +14,17 @@ export async function runStatusCommand(fs, env, paths, input = {}) {
11
14
  const events = await readEvents(fs, paths);
12
15
  const active = [];
13
16
  const closed = [];
17
+ const paused = [];
18
+ const abandoned = [];
14
19
  for (const session of index.sessions) {
15
- const isClosed = session.state === "closed";
16
- (isClosed ? closed : active).push({
20
+ const destination = session.state === "closed"
21
+ ? closed
22
+ : session.state === "paused"
23
+ ? paused
24
+ : session.state === "abandoned"
25
+ ? abandoned
26
+ : active;
27
+ destination.push({
17
28
  code: session.code,
18
29
  folder: session.folder,
19
30
  type: session.type,
@@ -21,15 +32,48 @@ export async function runStatusCommand(fs, env, paths, input = {}) {
21
32
  phase: session.phase,
22
33
  date: session.date,
23
34
  relative: session.relative,
24
- flow: isClosed ? null : await projectRun(fs, paths, session.folder),
35
+ flow: session.state === "active" ? await projectRun(fs, paths, session.folder) : null,
25
36
  units: session.units,
26
37
  });
27
38
  }
39
+ const historyPath = paths.cwdHistoryFile();
40
+ const rows = (await fs.exists(historyPath))
41
+ ? readHistoryRows(await fs.readText(historyPath))
42
+ : [];
43
+ const localFolders = new Set(index.sessions.map((session) => session.folder));
44
+ const sameFolder = (rowKey) => localFolders.has(rowKey) ||
45
+ [...localFolders].some((folder) => folder.replace(/^session(?=\d)/, "") === rowKey);
46
+ const historyRemoteRows = rows
47
+ .filter((row) => row.state !== "retired" && !sameFolder(row.key))
48
+ .map((row) => row.key);
49
+ const historyCollisions = [];
50
+ for (const session of index.sessions) {
51
+ const number = sessionNumericCode(session.folder);
52
+ if (number === null)
53
+ continue;
54
+ for (const row of rows) {
55
+ const recorded = sessionNumericCode(row.key);
56
+ if (recorded === null ||
57
+ !sameCorrelative(number, recorded) ||
58
+ row.key === session.folder ||
59
+ session.folder.replace(/^session(?=\d)/, "") === row.key ||
60
+ !row.key.includes("-"))
61
+ continue;
62
+ historyCollisions.push({
63
+ local: session.folder,
64
+ registered: row.key,
65
+ action: "aw workspace-migrate --renumber",
66
+ });
67
+ }
68
+ }
28
69
  return {
29
70
  workspace: index.workspace,
71
+ last_activity: index.last_activity,
30
72
  specs: index.specs,
31
73
  plans: index.plans,
32
- sessions: { active, closed },
74
+ sessions: { active, closed, paused, abandoned },
75
+ history_remote_rows: historyRemoteRows,
76
+ history_collisions: historyCollisions,
33
77
  discarded: index.discarded,
34
78
  terminal_events: events,
35
79
  pending_retirements: index.pending_retirements,
@@ -41,13 +85,19 @@ export async function runStatusCommand(fs, env, paths, input = {}) {
41
85
  loose_sessions: index.loose_sessions,
42
86
  designs: index.designs,
43
87
  orphan_units: index.orphan_units,
88
+ ...(index.unreadable_sources !== undefined
89
+ ? { unreadable_sources: index.unreadable_sources }
90
+ : {}),
91
+ ...(index.isolation_error !== undefined ? { isolation_error: index.isolation_error } : {}),
44
92
  ...(index.docs_canon_error !== undefined ? { docs_canon_error: index.docs_canon_error } : {}),
45
93
  counts: {
46
94
  specs: index.specs.length,
47
- specs_refined: index.specs.filter((s) => s.refined).length,
95
+ specs_refined: index.specs.filter((s) => s.status === "ready-for-plan").length,
48
96
  plans: index.plans.length,
49
97
  sessions_active: active.length,
50
98
  sessions_closed: closed.length,
99
+ sessions_paused: paused.length,
100
+ sessions_abandoned: abandoned.length,
51
101
  discarded: index.discarded.length,
52
102
  terminal_events: events.length,
53
103
  pending: index.pipeline.length,
@@ -1 +1 @@
1
- {"version":3,"file":"status-service.js","sourceRoot":"","sources":["../../src/application/status-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status-service.js","sourceRoot":"","sources":["../../src/application/status-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import { join } from "node:path";
2
+ const LOCKFILES = ["npm-shrinkwrap.json", "package-lock.json", "yarn.lock", "pnpm-lock.yaml"];
3
+ /** A unit never installs into the source; it only borrows an identical installation. */
4
+ export async function linkUnitDependencies(fs, git, source, unit) {
5
+ const modules = join(source, "node_modules");
6
+ const unitModules = join(unit, "node_modules");
7
+ const sourceModules = await fs.lstat(modules);
8
+ if (sourceModules === null || sourceModules.type !== "dir")
9
+ return {
10
+ status: "not_linked",
11
+ message: "sin node_modules en la fuente; instalá dependencias en la unidad",
12
+ };
13
+ const matchingLock = await firstLock(fs, unit);
14
+ if (matchingLock === null ||
15
+ (await firstLock(fs, source)) !== matchingLock ||
16
+ !(await sameBytes(fs, join(source, "package.json"), join(unit, "package.json"))) ||
17
+ !(await sameBytes(fs, join(source, matchingLock), join(unit, matchingLock)))) {
18
+ const install = matchingLock === "package-lock.json" || matchingLock === "npm-shrinkwrap.json"
19
+ ? "npm ci"
20
+ : matchingLock === "yarn.lock"
21
+ ? "yarn install --frozen-lockfile"
22
+ : matchingLock === "pnpm-lock.yaml"
23
+ ? "pnpm install --frozen-lockfile"
24
+ : "npm install";
25
+ return {
26
+ status: "not_linked",
27
+ message: `manifiesto o lockfile distinto o ausente; quitá cualquier enlace antes de instalar y corré '${install}' en la unidad`,
28
+ };
29
+ }
30
+ const present = await fs.lstat(unitModules);
31
+ if (present !== null) {
32
+ if (!present.isSymlink || (await fs.realPath(unitModules)) !== (await fs.realPath(modules)))
33
+ return {
34
+ status: "not_linked",
35
+ message: "node_modules propio en la unidad; no se sustituye ni se modifica",
36
+ };
37
+ }
38
+ else {
39
+ await fs.symlink(modules, unitModules);
40
+ }
41
+ try {
42
+ if (!git.ignoredOutsideIndex || !git.excludePattern)
43
+ throw new Error("git no permite verificar el ignore de node_modules");
44
+ if (!(await git.ignoredOutsideIndex(source, unit, "node_modules"))) {
45
+ await git.excludePattern(source, "/node_modules");
46
+ if (!(await git.ignoredOutsideIndex(source, unit, "node_modules")))
47
+ throw new Error("git sigue mostrando node_modules como no rastreado");
48
+ }
49
+ }
50
+ catch (err) {
51
+ if (present === null)
52
+ await fs.remove(unitModules);
53
+ throw err;
54
+ }
55
+ return {
56
+ status: "linked",
57
+ message: "node_modules enlazado con la fuente: instalar aquí escribe en la fuente; npm ci vaciaría su node_modules. Quitá el enlace 'node_modules' antes de instalar en la unidad",
58
+ };
59
+ }
60
+ async function firstLock(fs, root) {
61
+ for (const lock of LOCKFILES)
62
+ if ((await fs.lstat(join(root, lock))) !== null)
63
+ return lock;
64
+ return null;
65
+ }
66
+ async function sameBytes(fs, left, right) {
67
+ try {
68
+ const a = await fs.readBytes(left);
69
+ const b = await fs.readBytes(right);
70
+ return Buffer.from(a).equals(Buffer.from(b));
71
+ }
72
+ catch {
73
+ return false;
74
+ }
75
+ }
76
+ /** A link is ours only when its resolved target is the source installation. */
77
+ export async function unlinkUnitDependencies(fs, source, unit) {
78
+ const path = join(unit, "node_modules");
79
+ const link = await fs.lstat(path);
80
+ if (!link?.isSymlink ||
81
+ (await fs.realPath(path)) !== (await fs.realPath(join(source, "node_modules"))))
82
+ return false;
83
+ await fs.remove(path);
84
+ return true;
85
+ }
86
+ /** Shared by release, integrate, reclaim and retirement. No recursive traversal of a link. */
87
+ export async function removeUnitSafely(fs, git, source, unit) {
88
+ if ((await git.operationState(unit)) !== "clean" || (await git.isDirty(unit)))
89
+ throw new Error(`la unidad ${unit} tiene cambios sin commitear u operación git pendiente`);
90
+ const removedLink = await unlinkUnitDependencies(fs, source, unit);
91
+ try {
92
+ await git.worktreeRemove(source, unit);
93
+ }
94
+ catch (err) {
95
+ if (removedLink && (await fs.lstat(unit)) !== null)
96
+ await fs.symlink(join(source, "node_modules"), join(unit, "node_modules"));
97
+ throw err;
98
+ }
99
+ }
100
+ //# sourceMappingURL=unit-dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unit-dependencies.js","sourceRoot":"","sources":["../../src/application/unit-dependencies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import { parseUnitPath, workspaceKey } from "../domain/isolation-unit.js";
2
+ import { readCustody } from "./session-custody-service.js";
3
+ import { listSessionFolders } from "./session-resolver.js";
4
+ /** Every known historical key and every sealed unit of this hub. */
5
+ export async function hubUnitPaths(fs, paths, root) {
6
+ const keys = new Set([workspaceKey(paths.workspaceDir())]);
7
+ try {
8
+ const local = JSON.parse(await fs.readText(paths.cwdLocalConfigFile()));
9
+ if (local &&
10
+ typeof local === "object" &&
11
+ "previous_keys" in local &&
12
+ Array.isArray(local.previous_keys)) {
13
+ for (const key of local.previous_keys)
14
+ if (typeof key === "string")
15
+ keys.add(key);
16
+ }
17
+ }
18
+ catch {
19
+ /* legacy hub */
20
+ }
21
+ const owned = new Set();
22
+ for (const session of await listSessionFolders(fs, paths.cwdSessionsDir())) {
23
+ const custody = await readCustody(fs, session.path);
24
+ if (custody.status !== "present")
25
+ continue;
26
+ for (const source of custody.custody.sources)
27
+ if (source.unit_path)
28
+ owned.add(source.unit_path);
29
+ }
30
+ return (path) => {
31
+ const unit = parseUnitPath(root, path);
32
+ if (unit === null)
33
+ return false;
34
+ return owned.has(path) || keys.has(unit.workspaceKey);
35
+ };
36
+ }
37
+ //# sourceMappingURL=unit-membership.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unit-membership.js","sourceRoot":"","sources":["../../src/application/unit-membership.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG1E,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,oEAAoE;AACpE,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,EAAkB,EAClB,KAAmB,EACnB,IAAY;IAEZ,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3D,IAAI,CAAC;QACH,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QACjF,IACE,KAAK;YACL,OAAO,KAAK,KAAK,QAAQ;YACzB,eAAe,IAAI,KAAK;YACxB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,EAClC,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,aAAa;gBAAE,IAAI,OAAO,GAAG,KAAK,QAAQ;oBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,OAAO,IAAI,MAAM,kBAAkB,CAAC,EAAE,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;QAC3E,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QACpD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,SAAS;QAC3C,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO;YAAE,IAAI,MAAM,CAAC,SAAS;gBAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAChC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC;AACJ,CAAC"}