@overdeck/desktop 0.45.21 → 0.45.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. package/package.json +1 -1
  2. package/server/{acceptance-criteria-CJIFA8Vg.js → acceptance-criteria-BH7ac_1G.js} +2 -2
  3. package/server/{advancing-selfheal-CPOBO5ZS.js → advancing-selfheal-cSvXNZLZ.js} +6 -6
  4. package/server/{agent-gc-D6PUckBB.js → agent-gc-Dj2gncak.js} +4 -4
  5. package/server/{agent-state-BV_6RHnO.js → agent-state-Co5Sy2Fw.js} +1 -1
  6. package/server/{agent-state-service-DHwemt96.js → agent-state-service-CsQ07Pxe.js} +1 -1
  7. package/server/{agent-state-service-6MFQqnFy.js → agent-state-service-DistflNn.js} +5 -5
  8. package/server/{agents-DbrHWunF.js → agents-DXdHmRTC.js} +4 -4
  9. package/server/{agents-Czz6R57Z.js → agents-DyHKlq1I.js} +1 -1
  10. package/server/{archive-planning-BOnwJq8M.js → archive-planning-BvDuWNMo.js} +5 -5
  11. package/server/{archive-planning-MPpvQJL4.js → archive-planning-Cp_DC1j-.js} +1 -1
  12. package/server/{artifact-index-jobs-BOoySTKD.js → artifact-index-jobs-CDBFL4OU.js} +2 -2
  13. package/server/{backlog-auto-trigger-BUaFI44J.js → backlog-auto-trigger-DmA1IbYf.js} +3 -3
  14. package/server/{behavior-Dg-D8eBG.js → behavior-CGj16clS.js} +2 -2
  15. package/server/{briefing-freshness-OouGbJ7d.js → briefing-freshness-C12WgkaB.js} +2 -2
  16. package/server/{build-info-Cv6CI7Gu.js → build-info-BRpqQvNd.js} +1 -1
  17. package/server/{build-info-27NlbKhV.js → build-info-NU3KbXYw.js} +3 -3
  18. package/server/{checkpoint-manager-D64fCC4p.js → checkpoint-manager-CTPjAmtH.js} +2 -2
  19. package/server/{checkpoint-manager-C7mFCY_E.js → checkpoint-manager-rOgT98WY.js} +1 -1
  20. package/server/checkpoint-worker.js +1 -1
  21. package/server/{checkpoints-DwZqT2qQ.js → checkpoints-B5jFNi2G.js} +1 -1
  22. package/server/{checkpoints-Vh-J15ge.js → checkpoints-BJum14fs.js} +2 -2
  23. package/server/{claude-hooks-provision-CS5W_dhI.js → claude-hooks-provision-BhwWK-TQ.js} +1 -1
  24. package/server/{claude-hooks-provision-BVLGfHrv.js → claude-hooks-provision-D7p5WcKZ.js} +2 -2
  25. package/server/{claude-permissions-C2OrLYKL.js → claude-permissions-nSFKH78M.js} +2 -2
  26. package/server/{claude-settings-overlay-DX-fMFpC.js → claude-settings-overlay-BI_UIke0.js} +2 -2
  27. package/server/{claude-settings-overlay-DWXjafJh.js → claude-settings-overlay-DHBwjS1X.js} +1 -1
  28. package/server/cli-BRORS9qY.js +3 -0
  29. package/server/{cli-mvpEOb3w.js → cli-CbKNkFE5.js} +9 -9
  30. package/server/{cliproxy-Dvsr4ZkW.js → cliproxy-Brf_5MuG.js} +2 -2
  31. package/server/{cliproxy-7g1nObvB.js → cliproxy-bONZDBbC.js} +1 -1
  32. package/server/{close-issue-8F6uawYj.js → close-issue-CxReRxIc.js} +5 -5
  33. package/server/{closed-issue-reaper-BaYQYF6w.js → closed-issue-reaper-CQ3kqha7.js} +9 -9
  34. package/server/{closed-issue-reaper-BhV-r-tC.js → closed-issue-reaper-DXP2Xyv3.js} +1 -1
  35. package/server/{codex-D_UBEOwL.js → codex-CbmztVcc.js} +9 -6
  36. package/server/{codex-BBeZ8c3s.js → codex-DNyiQDKW.js} +1 -1
  37. package/server/{codex-parser-BTzlOZiV.js → codex-parser-jl8AeAmB.js} +2 -2
  38. package/server/{config-nAB_F-Gp.js → config-BJKocXKd.js} +1 -1
  39. package/server/{config-G1TOMJZA.js → config-DeTsoZdR.js} +2 -2
  40. package/server/{config-CrduXs4a.js → config-q4Gvd8dq.js} +2 -2
  41. package/server/{config-yaml-Ciyp2mYe.js → config-yaml-ig8Nwtiw.js} +124 -27
  42. package/server/{conflict-gate-BLUNMs1i.js → conflict-gate-CFqPVxEg.js} +3 -3
  43. package/server/{conflict-gate-BKalpcjL.js → conflict-gate-CHU9K1vU.js} +1 -1
  44. package/server/{context-layers-Cg9ZgVfx.js → context-layers-15gDOk20.js} +3 -3
  45. package/server/{context-layers-YNpf6Q_I.js → context-layers-DlQKkHH2.js} +2 -2
  46. package/server/{control-settings-D_79A6gp.js → control-settings-D_odMIaC.js} +4 -4
  47. package/server/{conversation-compaction-DiuZbIUB.js → conversation-compaction-B6YSRLda.js} +8 -8
  48. package/server/{conversation-compaction-CMIeWW4_.js → conversation-compaction-CN4-5YYt.js} +1 -1
  49. package/server/{conversation-service-DQybSPUK.js → conversation-service-C3avRVEr.js} +6 -6
  50. package/server/{conversation-service-CWk8mEym.js → conversation-service-Dq33SYEj.js} +1 -1
  51. package/server/{conversations-BJ-t3BRm.js → conversations-H9if0bCQ.js} +1 -1
  52. package/server/{conversations-BUgGvqVL.js → conversations-bYpM9-kZ.js} +4 -4
  53. package/server/{cost-Drm7qeD5.js → cost-Codk1pc2.js} +2 -2
  54. package/server/{cost-sync-DzHP6zaR.js → cost-sync-D_cre6WM.js} +3 -3
  55. package/server/{cost-jJ2cgDcG.js → cost-wH46-WsJ.js} +3 -3
  56. package/server/{dag-DIji6O2b.js → dag-CJpgf9A3.js} +2 -2
  57. package/server/{dangerous-git-ops-BebB-61h.js → dangerous-git-ops-D6AF-Hg_.js} +1 -1
  58. package/server/dashboard-db-worker.js +7 -7
  59. package/server/{deacon-pleYrvIm.js → deacon-B8HbQdqU.js} +3 -3
  60. package/server/{deacon-1s7bM5zn.js → deacon-CkT_kznS.js} +1377 -407
  61. package/server/{deacon-nudge-log-C5VCKtyi.js → deacon-nudge-log-D6K9K-rE.js} +3 -3
  62. package/server/{deacon-swarm-DmA3rJ7k.js → deacon-swarm-BryRr6AO.js} +13 -13
  63. package/server/deacon-swarm-CV54eNmU.js +2 -0
  64. package/server/deacon.js +8 -8
  65. package/server/{deploy-patrol-DmM6F-yw.js → deploy-patrol-1IrZxicY.js} +6 -6
  66. package/server/{deploy-window-ClLq1RYf.js → deploy-window-7ZYHh7Zp.js} +1 -1
  67. package/server/{deploy-window-jw4S_Y-c.js → deploy-window-wDf4UgHt.js} +6 -6
  68. package/server/{dev-supervisor-Do2Stz49.js → dev-supervisor-C7p9kEpc.js} +2 -2
  69. package/server/{devcontainer-renderer-D8ylupco.js → devcontainer-renderer-CNmQy0pL.js} +3 -3
  70. package/server/{dist-yfR7G1BL.js → dist-D-Ed5yVw.js} +1 -1
  71. package/server/dist-j64RzSrQ.js +3 -0
  72. package/server/{docker-ClwPQaba.js → docker-BCZ89M9X.js} +2 -2
  73. package/server/{dod-BLphkhjs.js → dod-DbJLYcHv.js} +1 -1
  74. package/server/{ensure-devcontainer-BA3bICoY.js → ensure-devcontainer-Cs6W9Yzj.js} +1 -1
  75. package/server/{ensure-devcontainer-CFpQatOc.js → ensure-devcontainer-V5JWaAva.js} +4 -4
  76. package/server/{esm-shims-BZw-fTQ6.js → esm-shims-dTeNdq7X.js} +1 -1
  77. package/server/{event-store-DABarGNz.js → event-store-CpBGsO6_.js} +1 -1
  78. package/server/{event-store-BVnON3vf.js → event-store-TnWdydfB.js} +3 -3
  79. package/server/{events-CmERlnwn.js → events-DSUdR-04.js} +3 -3
  80. package/server/{events-LGeUehYW.js → events-Dsuv6qyB.js} +1 -1
  81. package/server/{factory-CQNprtHe.js → factory-BMrK4TrE.js} +4 -4
  82. package/server/{feature-registry-population-D9Z3tYSa.js → feature-registry-population-B-CI9hgE.js} +4 -4
  83. package/server/{feature-registry-storage-BWymOgXE.js → feature-registry-storage-B972ph_A.js} +2 -2
  84. package/server/{features--fOza5g5.js → features-Bc-Bmiye.js} +2 -2
  85. package/server/{feedback-target-Dn9vfPpz.js → feedback-target-DS6NUuSs.js} +1 -1
  86. package/server/{feedback-target-Dqik2WTe.js → feedback-target-DZ-iAnAa.js} +7 -7
  87. package/server/{feedback-writer-Wlq5-qgS.js → feedback-writer-BXP6g75N.js} +4 -4
  88. package/server/{feedback-writer-DDQNV8uc.js → feedback-writer-Bx5z11mF.js} +1 -1
  89. package/server/{flywheel-DPUc8r3V.js → flywheel-6WHU4O7A.js} +14 -14
  90. package/server/{flywheel-1Wd8WDlh.js → flywheel-COR0mbRI.js} +12 -12
  91. package/server/{flywheel-Q-38YhZG.js → flywheel-Ctr5uuvo.js} +1 -1
  92. package/server/{flywheel-merge-order-CeBuX0EJ.js → flywheel-merge-order-CNKAY489.js} +1 -1
  93. package/server/{flywheel-merge-order-4SqOXFAr.js → flywheel-merge-order-CTgHeg-W.js} +7 -7
  94. package/server/forge-B0_opi-V.js +2 -0
  95. package/server/{forge-DBbDpiYc.js → forge-B1S_KZv4.js} +2 -2
  96. package/server/{from-hh6vTBGl.js → from-DpwQ-sc3.js} +1 -1
  97. package/server/{fts-db-6ponMie2.js → fts-db-DmAcuCkV.js} +2 -2
  98. package/server/{fts-operations-KIRK165y.js → fts-operations-7d_RkmWp.js} +2 -2
  99. package/server/git-utils-Cc3FHDKd.js +198 -0
  100. package/server/{git-utils-DmF5xkj8.js → git-utils-CsKGnzFA.js} +1 -1
  101. package/server/{github-app-B3yfECo8.js → github-app-CDPtGF7J.js} +2 -2
  102. package/server/{github-app-CeSVFL6C.js → github-app-CU14oYzP.js} +1 -1
  103. package/server/{github-client-4A6FgA8O.js → github-client-CwBZZ3t7.js} +1 -1
  104. package/server/{github-client-Dslipypz.js → github-client-XjTJbBm7.js} +2 -2
  105. package/server/{github-pr-lookup-DBP0YHMr.js → github-pr-lookup-CFGeVhqv.js} +2 -2
  106. package/server/harness-binary-B2CTcD84.js +106 -0
  107. package/server/{harness-resolve-BGpO-OVM.js → harness-resolve-D5FVQTmy.js} +9 -15
  108. package/server/{health-events-CnwV_SSz.js → health-events-C1whmd58.js} +1 -1
  109. package/server/{health-events-CZGZ5I-A.js → health-events-DREeevle.js} +2 -2
  110. package/server/{hooks-DvX33gY_.js → hooks-B-HItBiS.js} +1 -1
  111. package/server/{hooks-CoNscX84.js → hooks-yxRsjk-z.js} +2 -2
  112. package/server/hume-BmhvfVbV.js +3 -0
  113. package/server/{hume-DSJt5eA_.js → hume-Dz_OymXE.js} +2 -2
  114. package/server/{idle-stack-reaper-5DVRoY6P.js → idle-stack-reaper-DrCv0OAG.js} +1 -1
  115. package/server/{idle-stack-reaper-BfL8HqYy.js → idle-stack-reaper-Yf34xXxY.js} +2 -2
  116. package/server/{in-flight-guard-tVGiI5ee.js → in-flight-guard-BoWm66Kh.js} +2 -2
  117. package/server/{infra-DN2wSxle.js → infra-D4iNWMA5.js} +4 -4
  118. package/server/{injection-DK9zh_HL.js → injection-BVNa4MQW.js} +1 -1
  119. package/server/{injection-DtlT8Akv.js → injection-D7T75Pye.js} +7 -7
  120. package/server/{inspect-agent-DKByUS_F.js → inspect-agent-BXCgNeZ4.js} +13 -9
  121. package/server/inspect-agent-Dq0z1k3H.js +2 -0
  122. package/server/{internal-token-7bYL5v6K.js → internal-token-C9DdEOKY.js} +1 -1
  123. package/server/{internal-token-DhfFiwW7.js → internal-token-CXsfxslp.js} +2 -2
  124. package/server/{io-BiM-7Zsx.js → io-DQR9PMgS.js} +3 -3
  125. package/server/{issue-closed-Dfw3QDyZ.js → issue-closed-DtmJM0D0.js} +7 -7
  126. package/server/{issue-lifecycle-ytsEdDlK.js → issue-lifecycle-8PSS9Anq.js} +1 -1
  127. package/server/{issue-lifecycle-B7HZWnTA.js → issue-lifecycle-CeyW_HoD.js} +21 -21
  128. package/server/{issue-service-singleton-D5EB5eYr.js → issue-service-singleton-DBZabEl7.js} +1 -1
  129. package/server/{issue-service-singleton-CPESc4Or.js → issue-service-singleton-D_RVYBuL.js} +8 -8
  130. package/server/{issues-XYtFMxrH.js → issues-pDW9VUNz.js} +2 -2
  131. package/server/{jsonl-parser-DJV2eZUP.js → jsonl-parser-C3HVNR5d.js} +3 -3
  132. package/server/{label-cleanup-CJ4m8iRU.js → label-cleanup-DPwiZlWo.js} +3 -3
  133. package/server/{label-reconciler-CNf3Ylm3.js → label-reconciler-Df1ZduPH.js} +4 -4
  134. package/server/{launcher-generator-5DJRiovn.js → launcher-generator-COgR2By1.js} +6 -6
  135. package/server/{layers-cZx7ibtV.js → layers-Cp1To4L8.js} +2 -2
  136. package/server/{lifecycle-CE7619Xw.js → lifecycle-CtPDcZ9u.js} +6 -6
  137. package/server/{lifecycle-io-CUpsxG0p.js → lifecycle-io-DmY2qwCn.js} +1 -1
  138. package/server/{lifecycle-io-DMurK4oM.js → lifecycle-io-taIb0PoH.js} +4 -4
  139. package/server/{linear-client-BLyN-NiP.js → linear-client-DsFkIxee.js} +2 -2
  140. package/server/{linear-client-Bj1l4FOA.js → linear-client-YwZMDIwQ.js} +1 -1
  141. package/server/memory-fts-worker.js +1 -1
  142. package/server/{merge-CwX2_AWm.js → merge-BwsyNRJV.js} +1 -1
  143. package/server/{merge-hSC2BENe.js → merge-C1t-bspg.js} +3 -3
  144. package/server/{merge-agent-CnORPiri.js → merge-agent-B-SnXOoc.js} +1 -1
  145. package/server/{merge-agent-DnBsms_V.js → merge-agent-DDiIjzk-.js} +369 -213
  146. package/server/{merge-batch-C2w2U2eK.js → merge-batch-Byt-QnEl.js} +1 -1
  147. package/server/{merge-blockers-DhRgh76x.js → merge-blockers-BYjeXrVN.js} +2 -2
  148. package/server/merge-ops-DwWCkSgo.js +2 -0
  149. package/server/{merge-rebase-CE-ZyOMY.js → merge-rebase-Cm6fXaZN.js} +2 -2
  150. package/server/{merge-set-DHkzPCJU.js → merge-set-6LEglm6o.js} +1 -1
  151. package/server/{merge-set-D7YNU1ZB.js → merge-set-DiISXcC-.js} +3 -3
  152. package/server/{merge-sync-CpGA9Kg7.js → merge-sync-B95_4in_.js} +1 -1
  153. package/server/{merge-sync-De1FYva5.js → merge-sync-Do8_q32h.js} +2 -2
  154. package/server/{merge-train-SvkRJZ-k.js → merge-train-CKana8EH.js} +3 -3
  155. package/server/{merge-train-deps-CECJTElu.js → merge-train-deps-BgmqwIfA.js} +4 -4
  156. package/server/{merge-verification-B3meGcXF.js → merge-verification-CqnUzGEK.js} +4 -4
  157. package/server/{multipart-parser-ByTMgYV5.js → multipart-parser-tdOQDJ3o.js} +2 -2
  158. package/server/{no-resume-mode-BnInAFKs.js → no-resume-mode-BWOSZjWd.js} +1 -1
  159. package/server/node_modules/.package-lock.json +5 -5
  160. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/README.md +3 -3
  161. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.d.ts.map +1 -1
  162. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js +2 -2
  163. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js.map +1 -1
  164. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +5 -5
  165. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeChildProcessSpawner.ts +6 -8
  166. package/server/{orphan-proposed-reconciler-CAfuWTA1.js → orphan-proposed-reconciler-DSvsJ5M7.js} +1 -1
  167. package/server/{orphan-proposed-reconciler-AxAGUouN.js → orphan-proposed-reconciler-xklgvNA7.js} +19 -12
  168. package/server/package-lock.json +6 -6
  169. package/server/package.json +1 -1
  170. package/server/{pan-dir-Rw17YjT1.js → pan-dir-DOcf6ug3.js} +4 -4
  171. package/server/{paths-FP8v3lTz.js → paths-DooHpt9p.js} +2 -2
  172. package/server/{pickup-xi3KTLaJ.js → pickup-CaskQ7j6.js} +2 -2
  173. package/server/{pipeline-membership-BtKMNY7v.js → pipeline-membership-1LGRjo-k.js} +11 -8
  174. package/server/{pipeline-notifier-BM2HLF7B.js → pipeline-notifier-B6FVsYF9.js} +2 -2
  175. package/server/{pipeline-notifier-dQ-U4NSb.js → pipeline-notifier-CZsrU_nj.js} +1 -1
  176. package/server/{project-pipelines-B59NfN44.js → project-pipelines-CtNG_rvs.js} +2 -2
  177. package/server/projects-BKkwpH6q.js +3 -0
  178. package/server/{prompts-CbqaVjbe.js → prompts-EvhMeeHG.js} +2 -2
  179. package/server/{providers-d3pwXGVE.js → providers-BDDPULlp.js} +7 -7
  180. package/server/providers-DNSQqy2V.js +3 -0
  181. package/server/public/assets/{chunk-BO2N2NFS-BxYSL7J-.js → chunk-BO2N2NFS-sym_ufXe.js} +4 -4
  182. package/server/public/assets/{diagram-OG6HWLK6-C_F9Q2as.js → diagram-OG6HWLK6-CQJPBNBu.js} +1 -1
  183. package/server/public/assets/{dist-DQNg4CiF.js → dist-Bio7THQU.js} +1 -1
  184. package/server/public/assets/{dist-CLSlc6cV.js → dist-DukGS2YZ.js} +3 -3
  185. package/server/public/assets/{ganttDiagram-6RSMTGT7-Cq0my-0C.js → ganttDiagram-6RSMTGT7-D4lWwte3.js} +1 -1
  186. package/server/public/assets/{highlighted-body-OFNGDK62-eZC03dGh.js → highlighted-body-OFNGDK62-CaLboCt5.js} +1 -1
  187. package/server/public/assets/{index-C6NLz_1S.css → index-Bdc4V9ba.css} +1 -1
  188. package/server/public/assets/{index-SLYGA8AQ.js → index-Bwejq-5s.js} +147 -145
  189. package/server/public/assets/{linear-6Fi3qnGg.js → linear-qUWmMZ-c.js} +1 -1
  190. package/server/public/assets/mermaid-GHXKKRXX-B5v_r7cI.js +1 -0
  191. package/server/public/assets/{pieDiagram-4H26LBE5-Dpmc6xsv.js → pieDiagram-4H26LBE5-C4zYulEm.js} +1 -1
  192. package/server/public/assets/{prod-ojHllFvN.js → prod-C8VtLuWC.js} +4 -4
  193. package/server/public/assets/{quadrantDiagram-W4KKPZXB-Ulr9gON5.js → quadrantDiagram-W4KKPZXB-qP04zyZC.js} +1 -1
  194. package/server/public/assets/{sankeyDiagram-5OEKKPKP-CwdHGXfL.js → sankeyDiagram-5OEKKPKP-eMPTX_cG.js} +1 -1
  195. package/server/public/assets/{xychartDiagram-2RQKCTM6-r-bEDzJh.js → xychartDiagram-2RQKCTM6-Dme1PIt6.js} +1 -1
  196. package/server/public/index.html +54 -10
  197. package/server/{pull-requests-CjjPj7v6.js → pull-requests-8z2N1UOV.js} +3 -3
  198. package/server/{pull-requests-D3N6HQzI.js → pull-requests-By_BteaL.js} +1 -1
  199. package/server/{queries-B5hl7lMQ.js → queries-ZABd5aXP.js} +95 -71
  200. package/server/rally-OSJXdiHK.js +3 -0
  201. package/server/{rally-api-DGaFz5L5.js → rally-api-DqKqIMNR.js} +2 -2
  202. package/server/{rally-api-CKr0O4DJ.js → rally-api-xHazRk0d.js} +1 -1
  203. package/server/{rally-client-Cqf6EX_r.js → rally-client-CGWEHaPd.js} +1 -1
  204. package/server/{rally-client-SVbjGvqj.js → rally-client-COYz1vYR.js} +4 -4
  205. package/server/{rally-Dp0Gb1DN.js → rally-i_goYmiA.js} +3 -3
  206. package/server/reap-terminal-sessions-CaMkFOIH.js +4 -0
  207. package/server/{reap-terminal-sessions-CjqRAGw7.js → reap-terminal-sessions-DG9eiMVz.js} +11 -28
  208. package/server/{rebuild-stack-DjdpALr1.js → rebuild-stack-CKjJAI8L.js} +1 -1
  209. package/server/{rebuild-stack-DHqCLvLX.js → rebuild-stack-JUm0jqYP.js} +6 -6
  210. package/server/{reconstruct-cache-BqrCQt0o.js → reconstruct-cache-wU79aCee.js} +6 -6
  211. package/server/record-rwK-nKv_.js +3 -0
  212. package/server/{record-update-RviRDSNs.js → record-update-Crz74r-6.js} +2 -2
  213. package/server/{record-update-BlB8mpKO.js → record-update-D3N6WMFR.js} +1 -1
  214. package/server/{recovery-trip-l1Hsi37x.js → recovery-trip-DkzJSej9.js} +2 -2
  215. package/server/{release-engine-CSI4K6Oj.js → release-engine-DMINVN8S.js} +5 -5
  216. package/server/{release-set-BywwggrE.js → release-set-DeUSOEHy.js} +3 -3
  217. package/server/{remote-DYziAkiZ.js → remote-Dr5kGYSZ.js} +3 -3
  218. package/server/{remote-agents-CZ2rc8I0.js → remote-agents-Ct_WOyke.js} +6 -6
  219. package/server/{remote-agents-BNORDWAX.js → remote-agents-D6O_zETW.js} +1 -1
  220. package/server/{remote-cnoeuDWn.js → remote-b-c5bOce.js} +3 -3
  221. package/server/{remote-completion-W67FNQ-A.js → remote-completion-Dca3hAaa.js} +13 -13
  222. package/server/resume-wZZsWtzz.js +3 -0
  223. package/server/{review-agent-CSswH985.js → review-agent-CCum8sGe.js} +1 -1
  224. package/server/{review-agent-CqSqSHkU.js → review-agent-CThvgK2r.js} +23 -23
  225. package/server/{review-artifacts-BBgnd5df.js → review-artifacts-CXywD0F2.js} +5 -5
  226. package/server/{review-context-Ctp9BdNJ.js → review-context-OYfKUprb.js} +8 -8
  227. package/server/{review-status-DXeqFpk5.js → review-status-Bnh-rdkY.js} +1 -1
  228. package/server/{review-status-CCgPVK1h.js → review-status-DFRjDFef.js} +21 -37
  229. package/server/{review-status-enrichment-DtDRGpst.js → review-status-enrichment-crNAtIpL.js} +3 -3
  230. package/server/review-status-source-CxuEjLGg.js +39 -0
  231. package/server/{review-status-sync-C792ksoJ.js → review-status-sync-D60PJWNL.js} +1 -1
  232. package/server/{review-status-sync-jnLgd04F.js → review-status-sync-DpAMD_WO.js} +2 -2
  233. package/server/{review-verdict-feedback-CMsIpTpy.js → review-verdict-feedback-CpUZl5aE.js} +7 -7
  234. package/server/{review-verdict-feedback-D5lW0o3k.js → review-verdict-feedback-JImjut0z.js} +1 -1
  235. package/server/{rollup-B3kQmNpl.js → rollup-CZ02qgxk.js} +1 -1
  236. package/server/{rollup-CLj_AK9f.js → rollup-SyuF09e4.js} +8 -8
  237. package/server/{scanner-C4NeC4FE.js → scanner-Br0Z5S6R.js} +7 -7
  238. package/server/{sequence-io-Ce-6grIY.js → sequence-io-fxU0DlwW.js} +4 -4
  239. package/server/{sequencer-agent-Bpz0yGmG.js → sequencer-agent-B5YC5XVP.js} +5 -5
  240. package/server/server.js +583 -387
  241. package/server/{service-CqAY8Kmk.js → service-Bagb90KZ.js} +150 -47
  242. package/server/{session-fork-uNo4rMRA.js → session-fork-BqQxd-V6.js} +2 -2
  243. package/server/{session-history-DUehL3KN.js → session-history-XdS0JKp3.js} +4 -4
  244. package/server/{settings-DP2OYLXL.js → settings-BNbocWOg.js} +3 -3
  245. package/server/settings-BlUsVaUc.js +2 -0
  246. package/server/{settings-D9grjmaP.js → settings-uLc6DEYI.js} +2 -2
  247. package/server/{shadow-engineering-Bi_oIMtF.js → shadow-engineering-D4X_s3fA.js} +3 -3
  248. package/server/{shadow-state-a_ztFBJe.js → shadow-state-C_NkP-sa.js} +2 -2
  249. package/server/{shadow-state-CDxEuPlE.js → shadow-state-CbvsN3qG.js} +1 -1
  250. package/server/{shadow-utils-CyOg6_Xq.js → shadow-utils-CYMRPeRT.js} +2 -2
  251. package/server/{ship-log-DDcueaIR.js → ship-log-__QtAFXG.js} +1 -1
  252. package/server/{smart-compaction--Oj65Uov.js → smart-compaction-CLZOWin1.js} +7 -7
  253. package/server/{smart-compaction-C1_VVLEd.js → smart-compaction-jdMkG1vo.js} +1 -1
  254. package/server/{spawn-planning-session-LFtK2QCE.js → spawn-planning-session-8D6mE033.js} +1 -1
  255. package/server/{spawn-planning-session-AiUSsBnH.js → spawn-planning-session-D5OXo8pT.js} +19 -15
  256. package/server/{specialist-completion-qOgqdqXH.js → specialist-completion-CqmduO92.js} +1 -1
  257. package/server/{specialist-context-gjj8Z4Ii.js → specialist-context-CJ-QjFR-.js} +5 -5
  258. package/server/{specialist-handoff-logger-BsBNvVZv.js → specialist-handoff-logger-Dnjlwt7g.js} +2 -2
  259. package/server/{specialist-logs-CSLtvPx6.js → specialist-logs-CQnKzuZs.js} +3 -3
  260. package/server/{specialists-DAegTvRt.js → specialists-Bg9v4z3F.js} +122 -94
  261. package/server/{specialists-CYRwELzc.js → specialists-CwZHb5cb.js} +18 -18
  262. package/server/{specialists-D0VBf8g_.js → specialists-D0gGXMZx.js} +1 -1
  263. package/server/{specialists-C6WkeKFK.js → specialists-Dqe6_HE5.js} +1 -1
  264. package/server/specs-BhOKBzqk.js +3 -0
  265. package/server/{src-OLoJhUiJ.js → src-BMMoA_ba.js} +6 -6
  266. package/server/{src-BqTcrfO_.js → src-Bqdtd6po.js} +3 -3
  267. package/server/{src-Dpq1yFIl.js → src-k039WVYY.js} +337 -4
  268. package/server/{stack-health-I713ELld.js → stack-health-Bd06frFn.js} +1 -1
  269. package/server/{stack-health-DV_f-lK0.js → stack-health-C-ifC7b0.js} +2 -2
  270. package/server/{stale-task-claims-CQSKZVq0.js → stale-task-claims-L7pJkQFL.js} +4 -4
  271. package/server/{staleness-BbsGxmF2.js → staleness-BID1BKdr.js} +1 -1
  272. package/server/{staleness-zGp4P1hd.js → staleness-_Tr-GwdA.js} +1 -1
  273. package/server/{state-home-DixkE-up.js → state-home-CONQvZR0.js} +36 -23
  274. package/server/state-migrate-BeBW0KXA.js +478 -0
  275. package/server/{stuck-remediation-BWkK_O7A.js → stuck-remediation-CKnIryGT.js} +20 -18
  276. package/server/{stuck-remediation-CTPRC2S5.js → stuck-remediation-CsGD5Ksb.js} +1 -1
  277. package/server/{substrate-bug-weights-service-DXd0ID83.js → substrate-bug-weights-service-CpIZILj9.js} +3 -3
  278. package/server/{summary-fork-CdLn8Chr.js → summary-fork-agEMsPSo.js} +2 -2
  279. package/server/{summary-fork-f3DpgjXh.js → summary-fork-bX6ax6X7.js} +8 -8
  280. package/server/supervisor-COVHrBTg.js +2 -0
  281. package/server/{supervisor-Ch8CDuoF.js → supervisor-Ctt4eRYz.js} +3 -3
  282. package/server/{swarm-readiness-C9P2iPap.js → swarm-readiness-DdmJVX7y.js} +3 -3
  283. package/server/{system-prerequisites-DkoQBn1q.js → system-prerequisites-DSXBvffY.js} +24 -44
  284. package/server/{teardown-workspace-D-5yMyit.js → teardown-workspace-DDCf5n-a.js} +15 -15
  285. package/server/{test-agent-queue-BwpUpu-o.js → test-agent-queue-BJZ9Nfcc.js} +6 -6
  286. package/server/{test-verdict-BRiSu7eW.js → test-verdict-Cp5tljlJ.js} +1 -1
  287. package/server/{test-verdict-BQ1yx7d4.js → test-verdict-D_-sXIz_.js} +1 -1
  288. package/server/{tldr-daemon-BJA7TkqS.js → tldr-daemon-B8_oT5gx.js} +1 -1
  289. package/server/{tldr-daemon-DjxP5g6Y.js → tldr-daemon-BQFmmFp0.js} +2 -2
  290. package/server/{tmux-HQLgwo_C.js → tmux-BAvtac_u.js} +1 -1
  291. package/server/{tmux-y1blSxks.js → tmux-L5LgvGLp.js} +2 -2
  292. package/server/{token-LUrbM9sU.js → token-BkQLy4yS.js} +2 -2
  293. package/server/token-util-BArZLN6w.js +3 -0
  294. package/server/{token-util-BZaDAQ8S.js → token-util-DI8sGlmF.js} +1 -1
  295. package/server/{tracker-config-DSFZBdXP.js → tracker-config-DdT-nUAM.js} +2 -2
  296. package/server/{tracker-utils-DiceZN3a.js → tracker-utils-CawsPSS2.js} +2 -2
  297. package/server/{tracker-utils-WtP_V-yn.js → tracker-utils-DV3h1FYG.js} +1 -1
  298. package/server/{traefik-connect-BXqfOP4-.js → traefik-connect-C6mJckNs.js} +1 -1
  299. package/server/{tunnel-WcJImbAC.js → tunnel-BIFl98rc.js} +1 -1
  300. package/server/{tunnel-DTng1rfQ.js → tunnel-IdK1iTHx.js} +3 -3
  301. package/server/{types-BjaZ1oqH.js → types-7-GnJn0t.js} +1 -1
  302. package/server/{types-DqeBMmJN.js → types-hraoaQIp.js} +1 -1
  303. package/server/{uat-train-Wismge7h.js → uat-train-0Ujk8GCv.js} +1 -1
  304. package/server/{uat-train-BpLnp7Cx.js → uat-train-j0cPeMSj.js} +25 -25
  305. package/server/{validation-BA4e5EGm.js → validation-CabEISJT.js} +4 -4
  306. package/server/{validation-CUWamZ4X.js → validation-DcAgXTQp.js} +1 -1
  307. package/server/{verification-artifact-Dr_0g9nb.js → verification-artifact-BuTA1QbL.js} +1 -1
  308. package/server/{verification-artifact-CrbI4tJE.js → verification-artifact-Ck1tefmz.js} +1 -1
  309. package/server/{verification-runner-Dcksl_P-.js → verification-runner-DlJezzef.js} +1 -1
  310. package/server/{verification-runner-gAzh3cVD.js → verification-runner-FiuAZ-H2.js} +15 -14
  311. package/server/{vtt-parser-3VZKsmSm.js → vtt-parser-BnRsYzcz.js} +1 -1
  312. package/server/{work-agent-prompt-ULdcANl5.js → work-agent-prompt-DLthEPAq.js} +12 -11
  313. package/server/{workflows-B8ROFlfw.js → workflows-BZNNYkGC.js} +18 -18
  314. package/server/workflows-C4mR0Reb.js +2 -0
  315. package/server/{workspace-DSjUJaJN.js → workspace-3IC-UkAi.js} +1 -1
  316. package/server/{workspace-DhTDA8nB.js → workspace-D9ppycdg.js} +3 -3
  317. package/server/{workspace-config-BAAsAv-o.js → workspace-config-Bigl_-Lk.js} +1 -1
  318. package/server/{workspace-manager-CcujONCR.js → workspace-manager-B1WOfKvB.js} +1 -1
  319. package/server/{workspace-manager-DsN52IMG.js → workspace-manager-ClkCIWTe.js} +13 -13
  320. package/server/{workspace-metadata-CftOpNLs.js → workspace-metadata-BE0efUv_.js} +1 -1
  321. package/server/{workspace-metadata-DIL5_U4c.js → workspace-metadata-tiSRIWJP.js} +2 -2
  322. package/server/{workspaces-Dmlh1YXm.js → workspaces-CFPcL0vl.js} +96 -96
  323. package/sync-sources/skills/pan-start/SKILL.md +23 -0
  324. package/server/cli-ChErG518.js +0 -3
  325. package/server/deacon-swarm-uudlSCLM.js +0 -2
  326. package/server/dist-BEDL2alY.js +0 -3
  327. package/server/forge-DbhJyH6u.js +0 -2
  328. package/server/git-utils-Bkxzr1Xf.js +0 -129
  329. package/server/hume-BrA1tUuk.js +0 -3
  330. package/server/inspect-agent-CyXNo9fM.js +0 -2
  331. package/server/merge-ops-BpTtuO8x.js +0 -2
  332. package/server/projects-IRHJIPYC.js +0 -3
  333. package/server/providers-BqCdTryq.js +0 -3
  334. package/server/public/assets/mermaid-GHXKKRXX-BNwFoQsf.js +0 -1
  335. package/server/rally-DGimSRBQ.js +0 -3
  336. package/server/reap-terminal-sessions-C1mfzoZo.js +0 -3
  337. package/server/record-us0YECMO.js +0 -3
  338. package/server/resume-OyN3dEXE.js +0 -3
  339. package/server/settings-BaPXXJsT.js +0 -2
  340. package/server/specs-BsNcum0h.js +0 -3
  341. package/server/state-migrate-_zJJ6XKE.js +0 -362
  342. package/server/supervisor-Qy1QecAs.js +0 -2
  343. package/server/token-util-Cg-QnowA.js +0 -3
  344. package/server/workflows-C5c-RPsY.js +0 -2
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Zn as resolveInfraRepo, bn as projectKey, cn as STATE_BRANCH_PATHS, dn as init_state_plane, ei as getOverdeckHome, ti as init_paths, yn as init_project_key, zn as init_projects } from "./config-yaml-Ciyp2mYe.js";
2
+ import { Cn as projectKey, Hn as init_projects, Sn as init_project_key, dn as STATE_BRANCH_PATHS, er as resolveInfraRepo, ii as init_paths, mn as init_state_plane, ri as getOverdeckHome } from "./config-yaml-ig8Nwtiw.js";
3
3
  import { dirname, join } from "node:path";
4
4
  import { existsSync } from "node:fs";
5
5
  import { mkdir, rm } from "node:fs/promises";
@@ -14,13 +14,15 @@ import { promisify } from "node:util";
14
14
  * An unmarked branch is an in-progress migration and continues using legacy
15
15
  * project-root state paths.
16
16
  */
17
- async function git(repoPath, args) {
17
+ async function git(repoPath, args, signal) {
18
+ signal?.throwIfAborted();
18
19
  const { stdout } = await execFileAsync("git", args, {
19
20
  cwd: repoPath,
20
21
  encoding: "utf8",
21
22
  maxBuffer: 16 * 1024 * 1024,
22
23
  timeout: 15e3,
23
- killSignal: "SIGTERM"
24
+ killSignal: "SIGTERM",
25
+ signal
24
26
  });
25
27
  return stdout.trim();
26
28
  }
@@ -38,27 +40,28 @@ function parseMigrationCompleteMarker(value) {
38
40
  if (!Number.isInteger(marker.version) || (marker.version ?? 0) < 1) return null;
39
41
  return marker;
40
42
  }
41
- async function remoteStateTip(repoPath) {
43
+ async function remoteStateTip(repoPath, signal) {
42
44
  const sha = (await git(repoPath, [
43
45
  "ls-remote",
44
46
  "--heads",
45
47
  "origin",
46
48
  `refs/heads/${STATE_BRANCH}`
47
- ])).split(/\s+/)[0];
49
+ ], signal)).split(/\s+/)[0];
48
50
  return isSha(sha) ? sha : null;
49
51
  }
50
- async function markerAtRemoteTip(repoPath, tip) {
52
+ async function markerAtRemoteTip(repoPath, tip, signal) {
51
53
  await git(repoPath, [
52
54
  "fetch",
53
55
  "--quiet",
54
56
  "origin",
55
57
  `refs/heads/${STATE_BRANCH}:refs/remotes/origin/${STATE_BRANCH}`
56
- ]);
57
- if (await git(repoPath, ["rev-parse", `refs/remotes/origin/overdeck-state`]) !== tip) return null;
58
+ ], signal);
59
+ if (await git(repoPath, ["rev-parse", `refs/remotes/origin/overdeck-state`], signal) !== tip) return null;
58
60
  let raw;
59
61
  try {
60
- raw = await git(repoPath, ["show", `${tip}:${MIGRATION_COMPLETE_MARKER}`]);
62
+ raw = await git(repoPath, ["show", `${tip}:${MIGRATION_COMPLETE_MARKER}`], signal);
61
63
  } catch {
64
+ signal?.throwIfAborted();
62
65
  return null;
63
66
  }
64
67
  let marker;
@@ -73,14 +76,18 @@ async function markerAtRemoteTip(repoPath, tip) {
73
76
  "--is-ancestor",
74
77
  marker.stateBranchSha,
75
78
  tip
76
- ]).then(() => true).catch(() => false) ? marker : null;
79
+ ], signal).then(() => true).catch(() => {
80
+ signal?.throwIfAborted();
81
+ return false;
82
+ }) ? marker : null;
77
83
  }
78
- async function inspectStateMigration(project) {
84
+ async function inspectStateMigration(project, options = {}) {
79
85
  const { repoPath } = resolveInfraRepo(project);
80
86
  let tip;
81
87
  try {
82
- tip = await remoteStateTip(repoPath);
88
+ tip = await remoteStateTip(repoPath, options.signal);
83
89
  } catch {
90
+ options.signal?.throwIfAborted();
84
91
  return {
85
92
  migrated: false,
86
93
  migrationInProgress: false,
@@ -93,7 +100,7 @@ async function inspectStateMigration(project) {
93
100
  migrationInProgress: tip !== null && !cached.migrated,
94
101
  remoteTip: tip
95
102
  };
96
- const migrated = tip !== null && await markerAtRemoteTip(repoPath, tip) !== null;
103
+ const migrated = tip !== null && await markerAtRemoteTip(repoPath, tip, options.signal) !== null;
97
104
  migrationCache.set(repoPath, {
98
105
  remoteTip: tip,
99
106
  migrated
@@ -112,14 +119,18 @@ async function findRecreatedLegacyStatePaths(project) {
112
119
  const legacyStateRoot = project.path;
113
120
  return STATE_BRANCH_PATHS.map((statePath) => join(legacyStateRoot, ".pan", statePath.slice(0, -1))).filter(existsSync);
114
121
  }
115
- async function addStateWorktree(repoPath, path) {
122
+ async function addStateWorktree(repoPath, path, signal) {
123
+ signal?.throwIfAborted();
116
124
  await mkdir(dirname(path), { recursive: true });
117
125
  await git(repoPath, await git(repoPath, [
118
126
  "show-ref",
119
127
  "--verify",
120
128
  "--quiet",
121
129
  `refs/heads/overdeck-state`
122
- ]).then(() => true, () => false) ? [
130
+ ], signal).then(() => true).catch(() => {
131
+ signal?.throwIfAborted();
132
+ return false;
133
+ }) ? [
123
134
  "worktree",
124
135
  "add",
125
136
  path,
@@ -132,10 +143,10 @@ async function addStateWorktree(repoPath, path) {
132
143
  STATE_BRANCH,
133
144
  path,
134
145
  `origin/${STATE_BRANCH}`
135
- ]);
146
+ ], signal);
136
147
  }
137
148
  async function ensureStateWorktree(project, options = {}) {
138
- const migration = await inspectStateMigration(project);
149
+ const migration = await inspectStateMigration(project, options);
139
150
  const path = stateWorktreePath(project, options);
140
151
  if (!migration.migrated) return {
141
152
  status: "legacy",
@@ -143,7 +154,7 @@ async function ensureStateWorktree(project, options = {}) {
143
154
  };
144
155
  const { repoPath } = resolveInfraRepo(project);
145
156
  if (!existsSync(path)) {
146
- await addStateWorktree(repoPath, path);
157
+ await addStateWorktree(repoPath, path, options.signal);
147
158
  return {
148
159
  status: "created",
149
160
  path
@@ -151,8 +162,9 @@ async function ensureStateWorktree(project, options = {}) {
151
162
  }
152
163
  let branch;
153
164
  try {
154
- branch = await git(path, ["branch", "--show-current"]);
165
+ branch = await git(path, ["branch", "--show-current"], options.signal);
155
166
  } catch (error) {
167
+ options.signal?.throwIfAborted();
156
168
  return {
157
169
  status: "error",
158
170
  path,
@@ -164,7 +176,7 @@ async function ensureStateWorktree(project, options = {}) {
164
176
  path
165
177
  };
166
178
  try {
167
- if (await git(path, ["status", "--porcelain"])) return {
179
+ if (await git(path, ["status", "--porcelain"], options.signal)) return {
168
180
  status: "dirty",
169
181
  path,
170
182
  detail: "state worktree has uncommitted changes; refusing destructive repair"
@@ -173,17 +185,18 @@ async function ensureStateWorktree(project, options = {}) {
173
185
  "worktree",
174
186
  "remove",
175
187
  path
176
- ]);
188
+ ], options.signal);
177
189
  await rm(path, {
178
190
  recursive: true,
179
191
  force: true
180
192
  });
181
- await addStateWorktree(repoPath, path);
193
+ await addStateWorktree(repoPath, path, options.signal);
182
194
  return {
183
195
  status: "recreated",
184
196
  path
185
197
  };
186
198
  } catch (error) {
199
+ options.signal?.throwIfAborted();
187
200
  return {
188
201
  status: "error",
189
202
  path,
@@ -208,4 +221,4 @@ var init_state_home = __esmMin((() => {
208
221
  //#endregion
209
222
  export { findRecreatedLegacyStatePaths as a, isStateMigrated as c, ensureStateWorktree as i, stateWorktreePath as l, STATE_BRANCH as n, init_state_home as o, clearStateMigrationCache as r, inspectStateMigration as s, MIGRATION_COMPLETE_MARKER as t };
210
223
 
211
- //# sourceMappingURL=state-home-DixkE-up.js.map
224
+ //# sourceMappingURL=state-home-CONQvZR0.js.map
@@ -0,0 +1,478 @@
1
+ import { Hn as init_projects, In as getProjectSync, _n as acquireStateMigrationLock, cn as init_auto_commit, dn as STATE_BRANCH_PATHS, er as resolveInfraRepo, mn as init_state_plane, sn as flushAutoCommits, vn as init_state_migration_lock } from "./config-yaml-ig8Nwtiw.js";
2
+ import { l as stateWorktreePath, n as STATE_BRANCH, o as init_state_home, r as clearStateMigrationCache, t as MIGRATION_COMPLETE_MARKER } from "./state-home-CONQvZR0.js";
3
+ import { dirname, join } from "node:path";
4
+ import { Effect } from "effect";
5
+ import { tmpdir } from "node:os";
6
+ import { createReadStream, createWriteStream, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
7
+ import { chmod, lstat, mkdir, readdir, rename, rm, utimes } from "node:fs/promises";
8
+ import { execFile } from "node:child_process";
9
+ import { createHash } from "node:crypto";
10
+ import { pipeline } from "node:stream/promises";
11
+ //#region ../../lib/state-migration-manifest.ts
12
+ init_projects();
13
+ init_state_migration_lock();
14
+ init_state_plane();
15
+ init_auto_commit();
16
+ init_state_home();
17
+ async function sha256(path, signal) {
18
+ const hash = createHash("sha256");
19
+ for await (const chunk of createReadStream(path, { signal })) {
20
+ signal?.throwIfAborted();
21
+ hash.update(chunk);
22
+ }
23
+ return hash.digest("hex");
24
+ }
25
+ async function manifestEntry(source, destination, signal) {
26
+ signal?.throwIfAborted();
27
+ const [stat, digest] = await Promise.all([lstat(source), sha256(source, signal)]);
28
+ signal?.throwIfAborted();
29
+ return {
30
+ source,
31
+ destination,
32
+ mode: stat.mode & 511,
33
+ size: stat.size,
34
+ sha256: digest
35
+ };
36
+ }
37
+ async function verifyStateMigrationManifest(entries) {
38
+ for (const expected of entries) {
39
+ const actual = await manifestEntry(expected.destination, expected.destination);
40
+ if ((actual.mode & 64) !== (expected.mode & 64) || actual.size !== expected.size || actual.sha256 !== expected.sha256) throw new Error(`State migration no-loss mismatch: ${expected.source} -> ${expected.destination}`);
41
+ }
42
+ }
43
+ //#endregion
44
+ //#region ../../cli/commands/admin/state-migrate.ts
45
+ const GIT_COMMAND_TIMEOUT_MS = 3e4;
46
+ const execFileDetached = execFile;
47
+ function killProcessTree(child) {
48
+ if (!child?.pid) return;
49
+ try {
50
+ if (process.platform === "win32") child.kill("SIGKILL");
51
+ else process.kill(-child.pid, "SIGKILL");
52
+ } catch {
53
+ try {
54
+ child.kill("SIGKILL");
55
+ } catch {}
56
+ }
57
+ }
58
+ async function git(cwd, args, signal, env) {
59
+ signal?.throwIfAborted();
60
+ const command = `git ${args.join(" ")}`;
61
+ return new Promise((resolve, reject) => {
62
+ let child;
63
+ let termination;
64
+ const terminate = (kind) => {
65
+ if (termination) return;
66
+ termination = kind;
67
+ killProcessTree(child);
68
+ };
69
+ const timeout = setTimeout(() => terminate("timeout"), GIT_COMMAND_TIMEOUT_MS);
70
+ const onAbort = () => terminate("abort");
71
+ signal?.addEventListener("abort", onAbort, { once: true });
72
+ child = execFileDetached("git", args, {
73
+ cwd,
74
+ env: {
75
+ ...process.env,
76
+ ...env
77
+ },
78
+ encoding: "utf8",
79
+ maxBuffer: 32 * 1024 * 1024,
80
+ detached: process.platform !== "win32"
81
+ }, (error, stdout, stderr) => {
82
+ clearTimeout(timeout);
83
+ signal?.removeEventListener("abort", onAbort);
84
+ if (termination === "abort") reject(signal?.reason ?? new DOMException(`${command} was cancelled`, "AbortError"));
85
+ else if (termination === "timeout") reject(/* @__PURE__ */ new Error(`${command} timed out after ${GIT_COMMAND_TIMEOUT_MS / 1e3}s`));
86
+ else if (error) reject(Object.assign(error, {
87
+ stdout,
88
+ stderr
89
+ }));
90
+ else resolve(stdout.trim());
91
+ });
92
+ if (signal?.aborted) terminate("abort");
93
+ });
94
+ }
95
+ function destinationForTracked(path) {
96
+ if (!path.startsWith(".pan/")) return null;
97
+ const flat = path.slice(5);
98
+ return STATE_BRANCH_PATHS.some((prefix) => flat.startsWith(prefix)) ? flat : null;
99
+ }
100
+ async function trackedManifest(repo, sourceSha, stateRoot, signal, copyFile = copyFileAbortable) {
101
+ const paths = (await git(repo, [
102
+ "ls-tree",
103
+ "-r",
104
+ "--name-only",
105
+ sourceSha,
106
+ "--",
107
+ ".pan"
108
+ ], signal)).split("\n").filter(Boolean);
109
+ const manifest = [];
110
+ for (const path of paths) {
111
+ signal?.throwIfAborted();
112
+ const destination = destinationForTracked(path);
113
+ if (!destination) continue;
114
+ const source = join(repo, path);
115
+ const target = join(stateRoot, destination);
116
+ if (!existsSync(target)) await copyFile(source, target, signal);
117
+ manifest.push(await manifestEntry(source, target, signal));
118
+ }
119
+ return manifest;
120
+ }
121
+ async function createOrphanStateCommit(repo, sourceSha, signal) {
122
+ const index = join(tmpdir(), `overdeck-state-index-${process.pid}-${Date.now()}`);
123
+ const env = { GIT_INDEX_FILE: index };
124
+ try {
125
+ await git(repo, ["read-tree", "--empty"], signal, env);
126
+ const rows = (await git(repo, [
127
+ "ls-tree",
128
+ "-r",
129
+ sourceSha,
130
+ "--",
131
+ ".pan"
132
+ ], signal)).split("\n").filter(Boolean);
133
+ for (const row of rows) {
134
+ const match = row.match(/^(\d+)\s+\w+\s+([0-9a-f]+)\t(.+)$/);
135
+ if (!match) continue;
136
+ const destination = destinationForTracked(match[3]);
137
+ if (destination) await git(repo, [
138
+ "update-index",
139
+ "--add",
140
+ "--cacheinfo",
141
+ `${match[1]},${match[2]},${destination}`
142
+ ], signal, env);
143
+ }
144
+ return await git(repo, [
145
+ "commit-tree",
146
+ await git(repo, ["write-tree"], signal, env),
147
+ "-m",
148
+ "chore(state): seed overdeck-state"
149
+ ], signal, env);
150
+ } finally {
151
+ rmSync(index, { force: true });
152
+ }
153
+ }
154
+ let copySequence = 0;
155
+ async function copyFileAbortable(source, destination, signal) {
156
+ signal?.throwIfAborted();
157
+ const stat = await lstat(source);
158
+ const temporary = join(dirname(destination), `.overdeck-migrate-${process.pid}-${copySequence++}`);
159
+ await mkdir(dirname(destination), { recursive: true });
160
+ try {
161
+ await pipeline(createReadStream(source, { signal }), createWriteStream(temporary, { mode: stat.mode & 511 }), { signal });
162
+ signal?.throwIfAborted();
163
+ await chmod(temporary, stat.mode & 511);
164
+ await utimes(temporary, stat.atime, stat.mtime);
165
+ signal?.throwIfAborted();
166
+ await rename(temporary, destination);
167
+ } catch (error) {
168
+ if (signal?.aborted) throw signal.reason;
169
+ throw error;
170
+ } finally {
171
+ await rm(temporary, { force: true });
172
+ }
173
+ }
174
+ async function filesEqualAbortable(source, destination, signal) {
175
+ const [sourceEntry, destinationEntry] = await Promise.all([manifestEntry(source, source, signal), manifestEntry(destination, destination, signal)]);
176
+ return sourceEntry.size === destinationEntry.size && sourceEntry.sha256 === destinationEntry.sha256;
177
+ }
178
+ async function preserveUntrackedNotes(legacyStateSource, stateRoot, paths, signal, copyFile = copyFileAbortable) {
179
+ const manifest = [];
180
+ for (const path of paths) {
181
+ signal?.throwIfAborted();
182
+ const source = join(legacyStateSource, path);
183
+ let sourceStat;
184
+ try {
185
+ sourceStat = await lstat(source);
186
+ } catch (error) {
187
+ if (error.code === "ENOENT") continue;
188
+ throw error;
189
+ }
190
+ if (sourceStat.isSymbolicLink()) throw new Error(`Legacy state changed during migration: symbolic link appeared at ${source}`);
191
+ if (!sourceStat.isFile()) continue;
192
+ const destination = join(stateRoot, "notes", path.slice(5));
193
+ if (existsSync(destination)) {
194
+ if (!await filesEqualAbortable(source, destination, signal)) throw new Error(`Untracked-note destination collision: ${destination}`);
195
+ } else await copyFile(source, destination, signal);
196
+ manifest.push(await manifestEntry(source, destination, signal));
197
+ }
198
+ return manifest;
199
+ }
200
+ async function assertNoLegacySymlinks(source, signal, allowMissing = false) {
201
+ signal?.throwIfAborted();
202
+ let stat;
203
+ try {
204
+ stat = await lstat(source);
205
+ } catch (error) {
206
+ if (allowMissing && error.code === "ENOENT") return;
207
+ throw error;
208
+ }
209
+ if (stat.isSymbolicLink()) throw new Error(`Legacy state contains unsupported symbolic link: ${source}. Resolve it before migrating so canonical state cannot depend on the legacy tree.`);
210
+ if (!stat.isDirectory()) return;
211
+ for (const entry of await readdir(source, { withFileTypes: true })) await assertNoLegacySymlinks(join(source, entry.name), signal);
212
+ }
213
+ async function copyLegacyState(sourceRoot, stateRoot, signal, copyFile = copyFileAbortable) {
214
+ const manifest = [];
215
+ const sources = STATE_BRANCH_PATHS.map((sourcePath) => ({
216
+ source: join(sourceRoot, ".pan", sourcePath),
217
+ destination: join(stateRoot, sourcePath)
218
+ })).filter(({ source }) => existsSync(source));
219
+ await assertNoLegacySymlinks(join(sourceRoot, ".pan"), signal, true);
220
+ const visit = async (sourceDir, destinationDir) => {
221
+ await mkdir(destinationDir, { recursive: true });
222
+ for (const entry of await readdir(sourceDir, { withFileTypes: true })) {
223
+ signal?.throwIfAborted();
224
+ const sourceEntry = join(sourceDir, entry.name);
225
+ const destinationEntry = join(destinationDir, entry.name);
226
+ if (entry.isDirectory()) await visit(sourceEntry, destinationEntry);
227
+ else if (entry.isFile()) {
228
+ await copyFile(sourceEntry, destinationEntry, signal);
229
+ signal?.throwIfAborted();
230
+ manifest.push(await manifestEntry(sourceEntry, destinationEntry, signal));
231
+ } else if (entry.isSymbolicLink()) throw new Error(`Legacy state changed during migration: symbolic link appeared at ${sourceEntry}`);
232
+ }
233
+ };
234
+ for (const { source, destination } of sources) {
235
+ signal?.throwIfAborted();
236
+ await visit(source, destination);
237
+ }
238
+ return manifest;
239
+ }
240
+ function hasNonStateDirtyState(porcelain) {
241
+ return porcelain.split("\n").filter(Boolean).some((line) => {
242
+ const path = line.slice(3).split(" -> ").at(-1) ?? "";
243
+ if (path === ".pan" || path.startsWith(".pan/")) return false;
244
+ return true;
245
+ });
246
+ }
247
+ function dedupeManifest(entries) {
248
+ return [...new Map(entries.map((entry) => [entry.destination, entry])).values()];
249
+ }
250
+ const GITIGNORE_MANAGED_LINES = [
251
+ "# PAN-2541: permanent state is on overdeck-state; workspace runtime stays local.",
252
+ ".pan/",
253
+ ".overdeck/continue.json",
254
+ ".overdeck/spec.vbrief.json",
255
+ ".overdeck/sessions.jsonl",
256
+ ".overdeck/feedback/",
257
+ ".overdeck/review/",
258
+ ".overdeck/test/",
259
+ ".overdeck/kickoff.md",
260
+ ".overdeck/agent-mcp.json"
261
+ ];
262
+ function rewriteGitignore(repo) {
263
+ const path = join(repo, ".gitignore");
264
+ const prior = existsSync(path) ? readFileSync(path, "utf8") : "";
265
+ const managed = new Set([...GITIGNORE_MANAGED_LINES, ".overdeck/"]);
266
+ const kept = prior.split("\n").filter((line) => !managed.has(line.trim()));
267
+ while (kept.length > 0 && kept[kept.length - 1]?.trim() === "") kept.pop();
268
+ writeFileSync(path, [
269
+ ...kept,
270
+ "",
271
+ ...GITIGNORE_MANAGED_LINES,
272
+ ""
273
+ ].join("\n"));
274
+ }
275
+ async function migrateProjectState(projectKey, options = {}, projectOverride) {
276
+ const project = projectOverride ?? getProjectSync(projectKey);
277
+ if (!project) throw new Error(`Unknown project: ${projectKey}`);
278
+ const { repoPath: repo } = resolveInfraRepo(project);
279
+ const legacyStateSource = project.path;
280
+ const sourceIsHostRepo = legacyStateSource === repo;
281
+ const stateRoot = stateWorktreePath(project, { projectKey });
282
+ console.log(`PAN-2541 state migration plan for ${projectKey}:`);
283
+ console.log(` ${legacyStateSource}/.pan/{${STATE_BRANCH_PATHS.map((p) => p.slice(0, -1)).join(",")}} -> ${stateRoot}/`);
284
+ console.log(` ${legacyStateSource}/.pan/context -> ${legacyStateSource}/.overdeck/context`);
285
+ if (options.dryRun) return;
286
+ options.signal?.throwIfAborted();
287
+ const release = acquireStateMigrationLock(projectKey);
288
+ try {
289
+ const flush = await Effect.runPromise(flushAutoCommits(repo, options.signal));
290
+ if (flush.errored) throw new Error(`State writer did not quiesce before migration: ${flush.reason ?? "unknown error"}`);
291
+ options.signal?.throwIfAborted();
292
+ await assertNoLegacySymlinks(join(legacyStateSource, ".pan"), options.signal, true);
293
+ if (hasNonStateDirtyState(await git(repo, ["status", "--porcelain"], options.signal))) throw new Error("Primary checkout is dirty outside legacy state paths; migration refused before mutation");
294
+ await git(repo, [
295
+ "fetch",
296
+ "--prune",
297
+ "origin"
298
+ ], options.signal);
299
+ const sourceMainSha = await git(repo, ["rev-parse", "main"], options.signal);
300
+ if (sourceMainSha !== await git(repo, ["rev-parse", "origin/main"], options.signal)) throw new Error("main is not exactly at origin/main; migration refused");
301
+ if (await git(repo, ["show", `origin/overdeck-state:migration-complete.json`], options.signal).catch(() => {
302
+ options.signal?.throwIfAborted();
303
+ return "";
304
+ })) {
305
+ console.log("State migration already complete on origin; nothing to do.");
306
+ return;
307
+ }
308
+ let stateSha = await git(repo, ["rev-parse", STATE_BRANCH], options.signal).catch(() => {
309
+ options.signal?.throwIfAborted();
310
+ return "";
311
+ });
312
+ const remoteStateSha = await git(repo, ["rev-parse", `origin/${STATE_BRANCH}`], options.signal).catch(() => {
313
+ options.signal?.throwIfAborted();
314
+ return "";
315
+ });
316
+ if (stateSha && remoteStateSha && stateSha !== remoteStateSha) throw new Error("Local and remote overdeck-state diverged; refusing non-fast-forward migration");
317
+ if (!stateSha) {
318
+ stateSha = remoteStateSha || await createOrphanStateCommit(repo, sourceMainSha, options.signal);
319
+ await git(repo, [
320
+ "update-ref",
321
+ `refs/heads/${STATE_BRANCH}`,
322
+ stateSha
323
+ ], options.signal);
324
+ }
325
+ if (!remoteStateSha) await git(repo, [
326
+ "push",
327
+ "origin",
328
+ STATE_BRANCH
329
+ ], options.signal);
330
+ if (!existsSync(stateRoot)) {
331
+ options.signal?.throwIfAborted();
332
+ mkdirSync(dirname(stateRoot), { recursive: true });
333
+ await git(repo, [
334
+ "worktree",
335
+ "add",
336
+ stateRoot,
337
+ STATE_BRANCH
338
+ ], options.signal);
339
+ }
340
+ const manifest = sourceIsHostRepo ? dedupeManifest([...await trackedManifest(repo, sourceMainSha, stateRoot, options.signal), ...await copyLegacyState(legacyStateSource, stateRoot, options.signal)]) : await copyLegacyState(legacyStateSource, stateRoot, options.signal);
341
+ if (manifest.length > 0) {
342
+ await git(stateRoot, ["add", "--all"], options.signal);
343
+ if (await git(stateRoot, [
344
+ "diff",
345
+ "--cached",
346
+ "--name-only"
347
+ ], options.signal)) await git(stateRoot, [
348
+ "commit",
349
+ "-m",
350
+ "chore(state): seed legacy project state"
351
+ ], options.signal);
352
+ await git(stateRoot, [
353
+ "push",
354
+ "origin",
355
+ STATE_BRANCH
356
+ ], options.signal);
357
+ }
358
+ const untracked = sourceIsHostRepo ? (await git(repo, [
359
+ "ls-files",
360
+ "--others",
361
+ "--",
362
+ ".pan"
363
+ ], options.signal)).split("\n").filter((path) => path.split("/").length === 2 && existsSync(join(repo, path)) && lstatSync(join(repo, path)).isFile()) : existsSync(join(legacyStateSource, ".pan")) ? readdirSync(join(legacyStateSource, ".pan"), { withFileTypes: true }).filter((entry) => entry.isFile()).map((entry) => `.pan/${entry.name}`) : [];
364
+ manifest.push(...await preserveUntrackedNotes(legacyStateSource, stateRoot, untracked, options.signal));
365
+ if (untracked.length > 0) {
366
+ await git(stateRoot, ["add", "notes"], options.signal);
367
+ if (await git(stateRoot, [
368
+ "diff",
369
+ "--cached",
370
+ "--name-only"
371
+ ], options.signal)) await git(stateRoot, [
372
+ "commit",
373
+ "-m",
374
+ "chore(state): preserve untracked operator notes"
375
+ ], options.signal);
376
+ await git(stateRoot, [
377
+ "push",
378
+ "origin",
379
+ STATE_BRANCH
380
+ ], options.signal);
381
+ }
382
+ if (await git(repo, ["rev-parse", "main"], options.signal) !== sourceMainSha) throw new Error("main advanced during migration; refusing cleanup");
383
+ options.signal?.throwIfAborted();
384
+ if (sourceIsHostRepo) await git(repo, [
385
+ "rm",
386
+ "-r",
387
+ "--cached",
388
+ "--ignore-unmatch",
389
+ ".pan/records",
390
+ ".pan/continues",
391
+ ".pan/specs",
392
+ ".pan/drafts",
393
+ ".pan/review",
394
+ ".pan/test",
395
+ ".pan/feedback",
396
+ ".pan/backlog",
397
+ ".pan/notes"
398
+ ]);
399
+ const oldContext = join(legacyStateSource, ".pan", "context");
400
+ const newContext = join(legacyStateSource, ".overdeck", "context");
401
+ let movedContext = false;
402
+ if (existsSync(oldContext) && !existsSync(newContext)) {
403
+ mkdirSync(dirname(newContext), { recursive: true });
404
+ renameSync(oldContext, newContext);
405
+ movedContext = true;
406
+ }
407
+ rewriteGitignore(legacyStateSource);
408
+ if (sourceIsHostRepo) {
409
+ if (await git(repo, [
410
+ "ls-files",
411
+ "--",
412
+ ".pan/context"
413
+ ])) await git(repo, [
414
+ "add",
415
+ "-u",
416
+ "--",
417
+ ".pan/context"
418
+ ]);
419
+ const addPaths = [".gitignore"];
420
+ if (movedContext || existsSync(newContext)) addPaths.push(".overdeck/context");
421
+ await git(repo, [
422
+ "add",
423
+ "--",
424
+ ...addPaths
425
+ ]);
426
+ if (await git(repo, [
427
+ "diff",
428
+ "--cached",
429
+ "--name-only"
430
+ ])) await git(repo, [
431
+ "commit",
432
+ "-m",
433
+ "chore(state): move permanent state to overdeck-state"
434
+ ]);
435
+ }
436
+ await verifyStateMigrationManifest(manifest);
437
+ for (const entry of manifest) rmSync(entry.source, { force: true });
438
+ if (!sourceIsHostRepo) rmSync(join(legacyStateSource, ".pan"), {
439
+ recursive: true,
440
+ force: true
441
+ });
442
+ stateSha = await git(stateRoot, ["rev-parse", "HEAD"]);
443
+ writeFileSync(join(stateRoot, MIGRATION_COMPLETE_MARKER), `${JSON.stringify({
444
+ sourceMainSha,
445
+ stateBranchSha: stateSha,
446
+ completedAt: (/* @__PURE__ */ new Date()).toISOString(),
447
+ version: 1
448
+ }, null, 2)}\n`);
449
+ await git(stateRoot, ["add", MIGRATION_COMPLETE_MARKER]);
450
+ await git(stateRoot, [
451
+ "commit",
452
+ "-m",
453
+ "chore(state): complete state migration"
454
+ ]);
455
+ await git(repo, [
456
+ "push",
457
+ "--atomic",
458
+ "--dry-run",
459
+ "origin",
460
+ "main",
461
+ STATE_BRANCH
462
+ ]);
463
+ await git(repo, [
464
+ "push",
465
+ "--atomic",
466
+ "origin",
467
+ "main",
468
+ STATE_BRANCH
469
+ ]);
470
+ clearStateMigrationCache();
471
+ } finally {
472
+ release();
473
+ }
474
+ }
475
+ //#endregion
476
+ export { migrateProjectState };
477
+
478
+ //# sourceMappingURL=state-migrate-BeBW0KXA.js.map