@overdeck/desktop 0.45.22 → 0.45.24

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 (429) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +2 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-BH7ac_1G.js → acceptance-criteria-DDCnXF58.js} +5 -5
  4. package/server/{advancing-selfheal-cSvXNZLZ.js → advancing-selfheal-BVwW4qRn.js} +6 -6
  5. package/server/{agent-gc-Dj2gncak.js → agent-gc-CHcnvonI.js} +4 -4
  6. package/server/agent-state-Bc3tzUC8.js +3 -0
  7. package/server/{agent-state-service-DistflNn.js → agent-state-service-BsgWxZuB.js} +5 -5
  8. package/server/{agent-state-service-CsQ07Pxe.js → agent-state-service-D5UGKIJL.js} +1 -1
  9. package/server/{agents-DXdHmRTC.js → agents-EbI0zCJl.js} +4 -4
  10. package/server/agents-wi9NWzs2.js +3 -0
  11. package/server/{archive-planning-Cp_DC1j-.js → archive-planning-BZDgzoEj.js} +1 -1
  12. package/server/{archive-planning-BvDuWNMo.js → archive-planning-Du25Jtst.js} +30 -6
  13. package/server/{artifact-index-jobs-CDBFL4OU.js → artifact-index-jobs-CbEDfCDu.js} +2 -2
  14. package/server/assemble-J2ZZ2C15.js +339 -0
  15. package/server/{backlog-auto-trigger-DmA1IbYf.js → backlog-auto-trigger-2R2jog7n.js} +3 -3
  16. package/server/{behavior-CGj16clS.js → behavior-B3exJ42O.js} +2 -2
  17. package/server/{briefing-freshness-C12WgkaB.js → briefing-freshness-D1wzUIWv.js} +2 -2
  18. package/server/{build-info-BRpqQvNd.js → build-info-CZk_TITh.js} +1 -1
  19. package/server/{build-info-NU3KbXYw.js → build-info-Ie_D0_BT.js} +3 -3
  20. package/server/{checkpoint-manager-CTPjAmtH.js → checkpoint-manager-BI1Wxoku.js} +2 -2
  21. package/server/{checkpoint-manager-rOgT98WY.js → checkpoint-manager-DwbQoqrC.js} +1 -1
  22. package/server/checkpoint-worker.js +1 -1
  23. package/server/{checkpoints-B5jFNi2G.js → checkpoints-BJIs5QIA.js} +1 -1
  24. package/server/{checkpoints-BJum14fs.js → checkpoints-CQB1h765.js} +2 -2
  25. package/server/{claude-hooks-provision-BhwWK-TQ.js → claude-hooks-provision-8Ngo8TpT.js} +1 -1
  26. package/server/{claude-hooks-provision-D7p5WcKZ.js → claude-hooks-provision-D8GXF3_s.js} +2 -2
  27. package/server/{claude-permissions-nSFKH78M.js → claude-permissions-DNWEVV6z.js} +2 -2
  28. package/server/{claude-settings-overlay-BI_UIke0.js → claude-settings-overlay-CEdaqpWI.js} +2 -2
  29. package/server/{claude-settings-overlay-DHBwjS1X.js → claude-settings-overlay-DWy-Bb4Y.js} +1 -1
  30. package/server/cli-B86rejVV.js +3 -0
  31. package/server/{cli-CbKNkFE5.js → cli-RoOx5DUf.js} +9 -9
  32. package/server/{cliproxy-Brf_5MuG.js → cliproxy-C8a1vtTU.js} +2 -2
  33. package/server/{cliproxy-bONZDBbC.js → cliproxy-fHfIeiGd.js} +1 -1
  34. package/server/{close-issue-CxReRxIc.js → close-issue-DoOifFIK.js} +5 -5
  35. package/server/{closed-issue-reaper-CQ3kqha7.js → closed-issue-reaper-Bk3SU4RC.js} +9 -9
  36. package/server/{closed-issue-reaper-DXP2Xyv3.js → closed-issue-reaper-CktPXo8m.js} +1 -1
  37. package/server/{codex-CbmztVcc.js → codex-BZXGhUVB.js} +27 -8
  38. package/server/codex-GcHuUF-k.js +3 -0
  39. package/server/{codex-parser-jl8AeAmB.js → codex-parser-CFZ1_1Jl.js} +2 -2
  40. package/server/{config-q4Gvd8dq.js → config-BZ0sHTju.js} +2 -2
  41. package/server/{config-DeTsoZdR.js → config-CKxYiCmX.js} +2 -2
  42. package/server/{config-BJKocXKd.js → config-DzV30TOm.js} +1 -1
  43. package/server/{config-yaml-ig8Nwtiw.js → config-yaml-DySPNmKN.js} +77 -194
  44. package/server/{conflict-gate-CFqPVxEg.js → conflict-gate-BaCVrH-N.js} +3 -3
  45. package/server/{conflict-gate-CHU9K1vU.js → conflict-gate-BhAY7TUd.js} +1 -1
  46. package/server/context-layers-BrPmE__h.js +4 -0
  47. package/server/context-layers-igZ4FI4_.js +37 -0
  48. package/server/{control-settings-D_odMIaC.js → control-settings-BQp7_4uD.js} +4 -4
  49. package/server/{conversation-compaction-B6YSRLda.js → conversation-compaction-CgrR8YYp.js} +8 -8
  50. package/server/{conversation-compaction-CN4-5YYt.js → conversation-compaction-eQB5CkOe.js} +1 -1
  51. package/server/{conversation-service-Dq33SYEj.js → conversation-service-BLd3MYsG.js} +1 -1
  52. package/server/{conversation-service-C3avRVEr.js → conversation-service-DPJ71F33.js} +329 -19
  53. package/server/{conversations-bYpM9-kZ.js → conversations-6AfUfbwc.js} +5 -5
  54. package/server/{conversations-H9if0bCQ.js → conversations-CAsJF9kh.js} +1 -1
  55. package/server/{cost-Codk1pc2.js → cost-B2ddP6wq.js} +18 -2
  56. package/server/{cost-wH46-WsJ.js → cost-R-m6Yi-W.js} +3 -3
  57. package/server/{cost-sync-D_cre6WM.js → cost-sync-BsN6ER0n.js} +3 -3
  58. package/server/{dag-CJpgf9A3.js → dag-B1ucnjDU.js} +9 -9
  59. package/server/{dangerous-git-ops-D6AF-Hg_.js → dangerous-git-ops-BXqeWVSf.js} +1 -1
  60. package/server/dashboard-db-worker.js +7 -7
  61. package/server/{deacon-CkT_kznS.js → deacon-CU_cAYSR.js} +406 -607
  62. package/server/{deacon-B8HbQdqU.js → deacon-kiQrb4ZT.js} +3 -3
  63. package/server/{deacon-nudge-log-D6K9K-rE.js → deacon-nudge-log-6wVqAaqz.js} +3 -3
  64. package/server/{deacon-swarm-BryRr6AO.js → deacon-swarm-BXZZ1Z2-.js} +17 -17
  65. package/server/deacon-swarm-C-GwfjJy.js +2 -0
  66. package/server/deacon.js +8 -8
  67. package/server/{deploy-patrol-1IrZxicY.js → deploy-patrol-AiFoP8dw.js} +136 -19
  68. package/server/{deploy-window-wDf4UgHt.js → deploy-window-C3F-tihF.js} +77 -10
  69. package/server/{deploy-window-7ZYHh7Zp.js → deploy-window-DkZraDyj.js} +1 -1
  70. package/server/{dev-supervisor-C7p9kEpc.js → dev-supervisor-bcOWqdQE.js} +2 -2
  71. package/server/{devcontainer-renderer-CNmQy0pL.js → devcontainer-renderer-_d6XhyND.js} +3 -3
  72. package/server/dist-Bzy0y69j.js +3 -0
  73. package/server/{dist-D-Ed5yVw.js → dist-Cb_0uvpS.js} +1 -1
  74. package/server/{docker-BCZ89M9X.js → docker-DcMTFTUC.js} +2 -2
  75. package/server/{dod-DbJLYcHv.js → dod-C6n9RV3G.js} +1 -1
  76. package/server/{ensure-devcontainer-Cs6W9Yzj.js → ensure-devcontainer-BZgOhRo7.js} +1 -1
  77. package/server/{ensure-devcontainer-V5JWaAva.js → ensure-devcontainer-DNi-ono3.js} +4 -4
  78. package/server/{esm-shims-dTeNdq7X.js → esm-shims-OSHAYaS1.js} +1 -1
  79. package/server/{event-store-TnWdydfB.js → event-store-CQL6NeqB.js} +3 -3
  80. package/server/{event-store-CpBGsO6_.js → event-store-EV2cMiXj.js} +1 -1
  81. package/server/{events-Dsuv6qyB.js → events-BTdrdEq8.js} +1 -1
  82. package/server/{events-DSUdR-04.js → events-DTfAe4My.js} +3 -3
  83. package/server/{factory-BMrK4TrE.js → factory-CFibJuaw.js} +50 -13
  84. package/server/{feature-registry-population-B-CI9hgE.js → feature-registry-population-DKZFMbFt.js} +4 -4
  85. package/server/{feature-registry-storage-B972ph_A.js → feature-registry-storage-BdPuLcBX.js} +2 -2
  86. package/server/{features-Bc-Bmiye.js → features-ez2271oH.js} +2 -2
  87. package/server/{feedback-target-DZ-iAnAa.js → feedback-target-7mqqwrX6.js} +7 -7
  88. package/server/{feedback-target-DS6NUuSs.js → feedback-target-CoFDHiM8.js} +1 -1
  89. package/server/{feedback-writer-BXP6g75N.js → feedback-writer-CY5L1lB7.js} +6 -5
  90. package/server/{feedback-writer-Bx5z11mF.js → feedback-writer-D3a22RCd.js} +1 -1
  91. package/server/flywheel-DHrgCphM.js +1084 -0
  92. package/server/flywheel-DzGtWnJ1.js +477 -0
  93. package/server/flywheel-SVF02Jpq.js +2 -0
  94. package/server/{flywheel-merge-order-CTgHeg-W.js → flywheel-merge-order-UU0tiUld.js} +10 -9
  95. package/server/{flywheel-merge-order-CNKAY489.js → flywheel-merge-order-UUcsCDb6.js} +1 -1
  96. package/server/{forge-B1S_KZv4.js → forge-CNFnyqps.js} +2 -2
  97. package/server/forge-DXnS_YFH.js +2 -0
  98. package/server/{from-DpwQ-sc3.js → from-kNxT0bZC.js} +1 -1
  99. package/server/{fts-db-DmAcuCkV.js → fts-db-CE46vDkZ.js} +2 -2
  100. package/server/{fts-operations-7d_RkmWp.js → fts-operations-CqY6zl-i.js} +2 -2
  101. package/server/{git-utils-Cc3FHDKd.js → git-utils-CRw2zLPC.js} +68 -3
  102. package/server/git-utils-D0_yhCgF.js +3 -0
  103. package/server/{github-app-CDPtGF7J.js → github-app-C3QrAUd0.js} +27 -8
  104. package/server/{github-app-CU14oYzP.js → github-app-ClZ2lk8D.js} +1 -1
  105. package/server/{github-client-XjTJbBm7.js → github-client-BnIsSrEN.js} +2 -2
  106. package/server/{github-client-CwBZZ3t7.js → github-client-DfQYVUaw.js} +1 -1
  107. package/server/{github-pr-lookup-CFGeVhqv.js → github-pr-lookup-D16NGsSO.js} +2 -2
  108. package/server/{harness-binary-B2CTcD84.js → harness-binary-DPUi-Pv8.js} +32 -6
  109. package/server/{harness-resolve-D5FVQTmy.js → harness-resolve-3lNZkyT4.js} +18 -9
  110. package/server/{health-events-DREeevle.js → health-events-BBcTYQKU.js} +2 -2
  111. package/server/{health-events-C1whmd58.js → health-events-BDOHby5Q.js} +1 -1
  112. package/server/{hooks-yxRsjk-z.js → hooks-CKZgXlJb.js} +2 -2
  113. package/server/{hooks-B-HItBiS.js → hooks-DPVX1rwQ.js} +1 -1
  114. package/server/{hume-Dz_OymXE.js → hume-Cz8igP9E.js} +2 -2
  115. package/server/hume-ccTf4wTX.js +3 -0
  116. package/server/{idle-stack-reaper-DrCv0OAG.js → idle-stack-reaper-CuLF0j2H.js} +1 -1
  117. package/server/{idle-stack-reaper-Yf34xXxY.js → idle-stack-reaper-DDIRwxUY.js} +2 -2
  118. package/server/{in-flight-guard-BoWm66Kh.js → in-flight-guard-CAAkqPLu.js} +2 -2
  119. package/server/{infra-D4iNWMA5.js → infra-BEqFxlJc.js} +14 -4
  120. package/server/{injection-D7T75Pye.js → injection-C8aiVJrF.js} +191 -183
  121. package/server/{injection-BVNa4MQW.js → injection-CPUIqNhI.js} +1 -1
  122. package/server/{inspect-agent-BXCgNeZ4.js → inspect-agent-BLuJ1AkT.js} +137 -81
  123. package/server/inspect-agent-Brtz0URj.js +2 -0
  124. package/server/{internal-token-C9DdEOKY.js → internal-token-BrcU6qfe.js} +1 -1
  125. package/server/{internal-token-CXsfxslp.js → internal-token-s0-oKybJ.js} +2 -2
  126. package/server/{io-DQR9PMgS.js → io-C9kF1wtJ.js} +160 -184
  127. package/server/{issue-closed-DtmJM0D0.js → issue-closed-CDJk4pIp.js} +7 -7
  128. package/server/{issue-lifecycle-8PSS9Anq.js → issue-lifecycle-B8sZHVHh.js} +1 -1
  129. package/server/{issue-lifecycle-CeyW_HoD.js → issue-lifecycle-ojZAzDBP.js} +22 -22
  130. package/server/{issue-service-singleton-DBZabEl7.js → issue-service-singleton-BvJ09SaR.js} +1 -1
  131. package/server/{issue-service-singleton-D_RVYBuL.js → issue-service-singleton-Yx5DdmVJ.js} +8 -8
  132. package/server/{issues-pDW9VUNz.js → issues-BMmP_77e.js} +2 -2
  133. package/server/{jsonl-parser-C3HVNR5d.js → jsonl-parser-BXSlHwEh.js} +3 -3
  134. package/server/{label-cleanup-DPwiZlWo.js → label-cleanup-B0UJwnv5.js} +3 -3
  135. package/server/{label-reconciler-Df1ZduPH.js → label-reconciler-B4iOAjlC.js} +4 -4
  136. package/server/{launcher-generator-COgR2By1.js → launcher-generator-BBWG_SiS.js} +105 -10
  137. package/server/{lifecycle-io-taIb0PoH.js → lifecycle-io-BREGpnLk.js} +37 -37
  138. package/server/lifecycle-io-DPo7x11I.js +3 -0
  139. package/server/{lifecycle-CtPDcZ9u.js → lifecycle-xmBfK2GJ.js} +6 -6
  140. package/server/lifecycle-yPd___5E.js +121 -0
  141. package/server/{linear-client-DsFkIxee.js → linear-client-BsuUvkdA.js} +2 -2
  142. package/server/{linear-client-YwZMDIwQ.js → linear-client-CTskEeT_.js} +1 -1
  143. package/server/memory-fts-worker.js +1 -1
  144. package/server/{merge-BwsyNRJV.js → merge-B1DiziGU.js} +1 -1
  145. package/server/{merge-C1t-bspg.js → merge-CefQNAnq.js} +3 -3
  146. package/server/{merge-agent-DDiIjzk-.js → merge-agent-4WOWlSYA.js} +28 -28
  147. package/server/{merge-agent-B-SnXOoc.js → merge-agent-CKkgIBPB.js} +1 -1
  148. package/server/{merge-batch-Byt-QnEl.js → merge-batch-ClFn2T-y.js} +1 -1
  149. package/server/merge-ops-CR44oU9-.js +2 -0
  150. package/server/{merge-rebase-Cm6fXaZN.js → merge-rebase-BfaTyXsw.js} +2 -2
  151. package/server/merge-set-DJ8-UErs.js +83 -0
  152. package/server/{merge-set-6LEglm6o.js → merge-set-bUqbm3yc.js} +1 -1
  153. package/server/{merge-sync-B95_4in_.js → merge-sync-BJYeOODr.js} +1 -1
  154. package/server/{merge-sync-Do8_q32h.js → merge-sync-VPV28g0g.js} +2 -2
  155. package/server/{merge-train-CKana8EH.js → merge-train-CHopycP0.js} +3 -3
  156. package/server/{merge-train-deps-BgmqwIfA.js → merge-train-deps-D1cOZzy2.js} +4 -4
  157. package/server/{merge-verification-CqnUzGEK.js → merge-verification-BkaOqPsw.js} +4 -4
  158. package/server/{multipart-parser-tdOQDJ3o.js → multipart-parser-duPAfSBw.js} +2 -2
  159. package/server/{no-resume-mode-BWOSZjWd.js → no-resume-mode-Nw29vaFb.js} +11 -8
  160. package/server/node_modules/.package-lock.json +8 -8
  161. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
  162. package/server/node_modules/undici/README.md +5 -0
  163. package/server/node_modules/undici/docs/docs/api/Client.md +4 -0
  164. package/server/node_modules/undici/docs/docs/api/Dispatcher.md +6 -0
  165. package/server/node_modules/undici/docs/docs/api/Interceptors.md +59 -0
  166. package/server/node_modules/undici/docs/docs/api/MockAgent.md +27 -0
  167. package/server/node_modules/undici/docs/docs/api/MockPool.md +28 -1
  168. package/server/node_modules/undici/docs/docs/index.md +5 -0
  169. package/server/node_modules/undici/lib/core/request.js +1 -1
  170. package/server/node_modules/undici/lib/core/util.js +6 -1
  171. package/server/node_modules/undici/lib/dispatcher/agent.js +3 -3
  172. package/server/node_modules/undici/lib/dispatcher/client-h1.js +31 -6
  173. package/server/node_modules/undici/lib/dispatcher/client-h2.js +34 -43
  174. package/server/node_modules/undici/lib/handler/cache-handler.js +93 -5
  175. package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +10 -0
  176. package/server/node_modules/undici/lib/handler/redirect-handler.js +5 -2
  177. package/server/node_modules/undici/lib/handler/retry-handler.js +6 -4
  178. package/server/node_modules/undici/lib/interceptor/cache.js +21 -4
  179. package/server/node_modules/undici/lib/interceptor/decompress.js +4 -0
  180. package/server/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
  181. package/server/node_modules/undici/lib/mock/mock-utils.js +39 -10
  182. package/server/node_modules/undici/lib/util/cache.js +49 -7
  183. package/server/node_modules/undici/lib/web/fetch/body.js +2 -1
  184. package/server/node_modules/undici/lib/web/fetch/response.js +1 -3
  185. package/server/node_modules/undici/package.json +2 -2
  186. package/server/node_modules/undici/types/client.d.ts +2 -2
  187. package/server/node_modules/undici/types/dispatcher.d.ts +3 -3
  188. package/server/node_modules/undici/types/mock-interceptor.d.ts +5 -1
  189. package/server/{orphan-proposed-reconciler-xklgvNA7.js → orphan-proposed-reconciler-BvKkWMJQ.js} +15 -13
  190. package/server/{orphan-proposed-reconciler-DSvsJ5M7.js → orphan-proposed-reconciler-CTSGcK8p.js} +1 -1
  191. package/server/package-lock.json +9 -9
  192. package/server/package.json +1 -1
  193. package/server/{pan-dir-DOcf6ug3.js → pan-dir-B0c3w0Ya.js} +78 -58
  194. package/server/{paths-DooHpt9p.js → paths-D-xWGHdh.js} +2 -2
  195. package/server/{pickup-CaskQ7j6.js → pickup-DUCLWrJY.js} +17 -16
  196. package/server/{pipeline-membership-1LGRjo-k.js → pipeline-membership-mY3GprlK.js} +186 -67
  197. package/server/{pipeline-notifier-CZsrU_nj.js → pipeline-notifier-BJr8gQX6.js} +1 -1
  198. package/server/{pipeline-notifier-B6FVsYF9.js → pipeline-notifier-BXkJzDC4.js} +2 -2
  199. package/server/{project-pipelines-CtNG_rvs.js → project-pipelines-C0MWUeCU.js} +2 -2
  200. package/server/project-repos-B6GycDh9.js +94 -0
  201. package/server/project-repos-DXKQsc_m.js +3 -0
  202. package/server/projects-vjjcmiN8.js +3 -0
  203. package/server/{prompts-EvhMeeHG.js → prompts-DxzFXuLl.js} +2 -2
  204. package/server/{providers-BDDPULlp.js → providers-qQAwGQDW.js} +7 -7
  205. package/server/{providers-DNSQqy2V.js → providers-u4Ga0jOr.js} +1 -1
  206. package/server/public/assets/{chunk-BO2N2NFS-sym_ufXe.js → chunk-BO2N2NFS-BamJdinX.js} +4 -4
  207. package/server/public/assets/{diagram-OG6HWLK6-CQJPBNBu.js → diagram-OG6HWLK6-DfOB8-w4.js} +1 -1
  208. package/server/public/assets/{dist-DukGS2YZ.js → dist-ByIuzMQW.js} +3 -3
  209. package/server/public/assets/{dist-Bio7THQU.js → dist-D7zYSEA6.js} +1 -1
  210. package/server/public/assets/{ganttDiagram-6RSMTGT7-D4lWwte3.js → ganttDiagram-6RSMTGT7-EdmRyXL3.js} +1 -1
  211. package/server/public/assets/{highlighted-body-OFNGDK62-CaLboCt5.js → highlighted-body-OFNGDK62-MerOfTX8.js} +1 -1
  212. package/server/public/assets/{index-Bwejq-5s.js → index-CWeMerGO.js} +147 -144
  213. package/server/public/assets/index-CenuJ3Cw.css +1 -0
  214. package/server/public/assets/{linear-qUWmMZ-c.js → linear-BBbArIcK.js} +1 -1
  215. package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +1 -0
  216. package/server/public/assets/{pieDiagram-4H26LBE5-C4zYulEm.js → pieDiagram-4H26LBE5-BKIddiJN.js} +1 -1
  217. package/server/public/assets/{prod-C8VtLuWC.js → prod-B8vYiu52.js} +4 -4
  218. package/server/public/assets/{quadrantDiagram-W4KKPZXB-qP04zyZC.js → quadrantDiagram-W4KKPZXB-D6RtoULk.js} +1 -1
  219. package/server/public/assets/{sankeyDiagram-5OEKKPKP-eMPTX_cG.js → sankeyDiagram-5OEKKPKP-CLrCedZX.js} +1 -1
  220. package/server/public/assets/{xychartDiagram-2RQKCTM6-Dme1PIt6.js → xychartDiagram-2RQKCTM6-hznR8DYl.js} +1 -1
  221. package/server/public/index.html +2 -2
  222. package/server/{pull-requests-By_BteaL.js → pull-requests-7N8WKseP.js} +1 -1
  223. package/server/{pull-requests-8z2N1UOV.js → pull-requests-_lHueOHW.js} +13 -11
  224. package/server/{queries-ZABd5aXP.js → queries-CjNIf-Ub.js} +1200 -201
  225. package/server/{rally-i_goYmiA.js → rally-CyWT_lNO.js} +3 -3
  226. package/server/{rally-api-DqKqIMNR.js → rally-api-C8e_1JRi.js} +2 -2
  227. package/server/{rally-api-xHazRk0d.js → rally-api-ClOSd-Tt.js} +1 -1
  228. package/server/{rally-client-COYz1vYR.js → rally-client-lc-nokqr.js} +4 -4
  229. package/server/{rally-client-CGWEHaPd.js → rally-client-sgtVqzNU.js} +1 -1
  230. package/server/rally-zhhtXuDP.js +3 -0
  231. package/server/{reap-terminal-sessions-CaMkFOIH.js → reap-terminal-sessions-7KeHv1R1.js} +1 -1
  232. package/server/{reap-terminal-sessions-DG9eiMVz.js → reap-terminal-sessions-BtHPo6Xc.js} +1 -1
  233. package/server/rebuild-stack-CFvcBHsS.js +4 -0
  234. package/server/{rebuild-stack-JUm0jqYP.js → rebuild-stack-lwtsW0GO.js} +26 -35
  235. package/server/{reconstruct-cache-wU79aCee.js → reconstruct-cache-C3Ui7ojV.js} +6 -6
  236. package/server/record-CN0pj4_5.js +3 -0
  237. package/server/{record-update-D3N6WMFR.js → record-update-bLJxAXH4.js} +1 -1
  238. package/server/record-update-dE1Aw83j.js +310 -0
  239. package/server/{recovery-trip-DkzJSej9.js → recovery-trip-BvRWfUXM.js} +2 -2
  240. package/server/{release-engine-DMINVN8S.js → release-engine-Cx48W7z8.js} +5 -5
  241. package/server/{release-set-DeUSOEHy.js → release-set-CQfuN9-v.js} +3 -3
  242. package/server/{remote-b-c5bOce.js → remote-C_2hasl7.js} +3 -3
  243. package/server/{remote-Dr5kGYSZ.js → remote-ChgimyYa.js} +3 -3
  244. package/server/{remote-agents-Ct_WOyke.js → remote-agents-By1ige5O.js} +6 -6
  245. package/server/{remote-agents-D6O_zETW.js → remote-agents-CA3Ihlxj.js} +1 -1
  246. package/server/{remote-completion-Dca3hAaa.js → remote-completion-fVe9e_3u.js} +12 -12
  247. package/server/resume-BFv1PGpA.js +3 -0
  248. package/server/{review-agent-CThvgK2r.js → review-agent-CIGOQYBD.js} +29 -25
  249. package/server/{review-agent-CCum8sGe.js → review-agent-DNboMyW4.js} +1 -1
  250. package/server/{review-artifacts-CXywD0F2.js → review-artifacts-nRDPuMxd.js} +5 -5
  251. package/server/{review-context-OYfKUprb.js → review-context-2uj-YQ8J.js} +70 -26
  252. package/server/review-status-btEYlaxA.js +3 -0
  253. package/server/{review-status-enrichment-crNAtIpL.js → review-status-enrichment-Dci-ZwEt.js} +3 -3
  254. package/server/{review-status-DFRjDFef.js → review-status-kZj_KyCk.js} +77 -28
  255. package/server/{review-status-sync-DpAMD_WO.js → review-status-sync-BTOpxtTC.js} +10 -5
  256. package/server/{review-status-sync-D60PJWNL.js → review-status-sync-DSDK3OMy.js} +1 -1
  257. package/server/{review-verdict-feedback-CpUZl5aE.js → review-verdict-feedback-CCjVA7Uk.js} +6 -6
  258. package/server/{review-verdict-feedback-JImjut0z.js → review-verdict-feedback-CTd4QMBu.js} +1 -1
  259. package/server/{rollup-CZ02qgxk.js → rollup-BKQC7jp4.js} +1 -1
  260. package/server/{rollup-SyuF09e4.js → rollup-FGsKki9R.js} +8 -8
  261. package/server/{scanner-Br0Z5S6R.js → scanner-CnqEZeDy.js} +45 -14
  262. package/server/{sequence-io-fxU0DlwW.js → sequence-io-D909zgeH.js} +4 -4
  263. package/server/{sequencer-agent-B5YC5XVP.js → sequencer-agent-CzkcK6P5.js} +5 -5
  264. package/server/server.js +2961 -919
  265. package/server/{service-Bagb90KZ.js → service-CLeAoU6G.js} +55 -54
  266. package/server/{session-fork-BqQxd-V6.js → session-fork-CHI1XvL9.js} +2 -2
  267. package/server/{session-history-XdS0JKp3.js → session-history-BT3IvqhC.js} +4 -4
  268. package/server/settings-66A6uvIA.js +2 -0
  269. package/server/{settings-BNbocWOg.js → settings-BTMvpNFU.js} +3 -3
  270. package/server/{settings-uLc6DEYI.js → settings-C0zgxOGf.js} +2 -2
  271. package/server/{shadow-engineering-D4X_s3fA.js → shadow-engineering-BJfgm-hX.js} +2 -2
  272. package/server/{shadow-state-C_NkP-sa.js → shadow-state-7a-524T8.js} +2 -2
  273. package/server/{shadow-state-CbvsN3qG.js → shadow-state-DnDyjujH.js} +1 -1
  274. package/server/{shadow-utils-CYMRPeRT.js → shadow-utils-Db3oroFG.js} +2 -2
  275. package/server/{ship-log-__QtAFXG.js → ship-log-D9MlVzYU.js} +1 -1
  276. package/server/{smart-compaction-jdMkG1vo.js → smart-compaction-CV2ukKND.js} +1 -1
  277. package/server/{smart-compaction-CLZOWin1.js → smart-compaction-KCYScAU1.js} +7 -7
  278. package/server/{spawn-planning-session-D5OXo8pT.js → spawn-planning-session-DKpdFyOC.js} +35 -27
  279. package/server/{spawn-planning-session-8D6mE033.js → spawn-planning-session-qUC2VWu3.js} +1 -1
  280. package/server/{specialist-completion-CqmduO92.js → specialist-completion-Ky9wCDpb.js} +1 -1
  281. package/server/{specialist-context-CJ-QjFR-.js → specialist-context-Bn3dCGS2.js} +5 -5
  282. package/server/{specialist-handoff-logger-Dnjlwt7g.js → specialist-handoff-logger-CMEwYxa2.js} +2 -2
  283. package/server/{specialist-logs-CQnKzuZs.js → specialist-logs-C5p8G7tx.js} +3 -3
  284. package/server/{specialists-Bg9v4z3F.js → specialists-CC4r-c2s.js} +1015 -460
  285. package/server/{specialists-D0gGXMZx.js → specialists-CShuVGWT.js} +1 -1
  286. package/server/specialists-DM6bWjsi.js +3 -0
  287. package/server/{specialists-CwZHb5cb.js → specialists-jiuuyVkp.js} +66 -74
  288. package/server/specs-C8Wsn2XO.js +3 -0
  289. package/server/{src-BMMoA_ba.js → src-CXmtj0im.js} +6 -6
  290. package/server/{src-Bqdtd6po.js → src-CdmnTM2m.js} +5 -5
  291. package/server/{src-k039WVYY.js → src-DtcUOZCq.js} +112 -18
  292. package/server/stack-health-Bn3o8FBX.js +3 -0
  293. package/server/{stack-health-C-ifC7b0.js → stack-health-DxSdG9cW.js} +63 -9
  294. package/server/{stale-task-claims-L7pJkQFL.js → stale-task-claims-KJKxxiiQ.js} +4 -4
  295. package/server/{staleness-_Tr-GwdA.js → staleness-CT34nwr9.js} +1 -1
  296. package/server/{staleness-BID1BKdr.js → staleness-DPm7ClwA.js} +15 -3
  297. package/server/{state-home-CONQvZR0.js → state-home-Cn_Qu8IX.js} +96 -44
  298. package/server/{state-migrate-BeBW0KXA.js → state-migrate-BGg2ZaOt.js} +12 -3
  299. package/server/{stuck-remediation-CKnIryGT.js → stuck-remediation-DYuPRYYw.js} +307 -26
  300. package/server/{stuck-remediation-CsGD5Ksb.js → stuck-remediation-s9_2qfi6.js} +1 -1
  301. package/server/{substrate-bug-weights-service-CpIZILj9.js → substrate-bug-weights-service-B-FwCs5V.js} +3 -3
  302. package/server/{summary-fork-bX6ax6X7.js → summary-fork-D1RAk9rJ.js} +78 -12
  303. package/server/{summary-fork-agEMsPSo.js → summary-fork-DpcxN9tf.js} +2 -2
  304. package/server/supervisor/{injection-budget-C1iPirFS.js → injection-budget-Csw5tqfJ.js} +2 -41
  305. package/server/supervisor/pty-supervisor.js +2 -1
  306. package/server/supervisor/pty-token-x-ea28Us.js +43 -0
  307. package/server/supervisor-FTJAIsAK.js +2 -0
  308. package/server/{supervisor-Ctt4eRYz.js → supervisor-wM4ooB5O.js} +3 -3
  309. package/server/{swarm-readiness-DdmJVX7y.js → swarm-readiness-DlP_UjHq.js} +4 -4
  310. package/server/{system-prerequisites-DSXBvffY.js → system-prerequisites-DUDj1YHf.js} +56 -29
  311. package/server/{teardown-workspace-DDCf5n-a.js → teardown-workspace-DeTTImn-.js} +15 -15
  312. package/server/{test-agent-queue-BJZ9Nfcc.js → test-agent-queue-MbxX5vqq.js} +7 -7
  313. package/server/{test-verdict-Cp5tljlJ.js → test-verdict-bWYBtqBg.js} +1 -1
  314. package/server/{test-verdict-D_-sXIz_.js → test-verdict-gscuksPv.js} +1 -1
  315. package/server/{tldr-daemon-B8_oT5gx.js → tldr-daemon-BYFkts95.js} +1 -1
  316. package/server/{tldr-daemon-BQFmmFp0.js → tldr-daemon-C-69c3OI.js} +2 -2
  317. package/server/tmux-B6z7h_vZ.js +3 -0
  318. package/server/{tmux-L5LgvGLp.js → tmux-R7N7y-Mh.js} +76 -44
  319. package/server/{token-BkQLy4yS.js → token-BK6t8BIT.js} +2 -2
  320. package/server/token-util-DuPuNriz.js +3 -0
  321. package/server/{token-util-DI8sGlmF.js → token-util-DxXu-vd1.js} +1 -1
  322. package/server/{tracker-config-DdT-nUAM.js → tracker-config-G6latr8C.js} +2 -2
  323. package/server/{tracker-utils-DV3h1FYG.js → tracker-utils-B4ylXZQK.js} +1 -1
  324. package/server/{tracker-utils-CawsPSS2.js → tracker-utils-DHv5pSDT.js} +2 -2
  325. package/server/{traefik-connect-C6mJckNs.js → traefik-connect-Df2uXPsQ.js} +1 -1
  326. package/server/{tunnel-IdK1iTHx.js → tunnel-CDVKJpRv.js} +3 -3
  327. package/server/{tunnel-BIFl98rc.js → tunnel-DGdUkGoZ.js} +1 -1
  328. package/server/{types-7-GnJn0t.js → types-5M0lupud.js} +1 -1
  329. package/server/{uat-train-0Ujk8GCv.js → uat-train-B05BWkp-.js} +1 -1
  330. package/server/{uat-train-j0cPeMSj.js → uat-train-DDSrSoV1.js} +28 -28
  331. package/server/validate-IfDGkaVR.js +177 -0
  332. package/server/{validation-DcAgXTQp.js → validation-CC9OPqJZ.js} +1 -1
  333. package/server/{validation-CabEISJT.js → validation-Dw1pzDzr.js} +259 -9
  334. package/server/{verification-artifact-Ck1tefmz.js → verification-artifact-B3itKTxu.js} +1 -1
  335. package/server/{verification-artifact-BuTA1QbL.js → verification-artifact-TVFSz_q1.js} +1 -1
  336. package/server/{verification-runner-DlJezzef.js → verification-runner-BW4HOKAz.js} +1 -1
  337. package/server/{verification-runner-FiuAZ-H2.js → verification-runner-CkgX6EtI.js} +174 -124
  338. package/server/{vtt-parser-BnRsYzcz.js → vtt-parser-DYPbKcIJ.js} +1 -1
  339. package/server/{work-agent-prompt-DLthEPAq.js → work-agent-prompt-Du8Vh2aJ.js} +13 -13
  340. package/server/workflows-BQu4RFQ-.js +2 -0
  341. package/server/{workflows-BZNNYkGC.js → workflows-mbQzh6mQ.js} +39 -77
  342. package/server/{workspace-3IC-UkAi.js → workspace--8tnhDI0.js} +1 -1
  343. package/server/{workspace-D9ppycdg.js → workspace-BPUws1-_.js} +3 -3
  344. package/server/{workspace-config-Bigl_-Lk.js → workspace-config-CIVWZOQr.js} +1 -1
  345. package/server/{workspace-manager-ClkCIWTe.js → workspace-manager-CBhNdzE4.js} +76 -18
  346. package/server/workspace-manager-CWT55qeI.js +3 -0
  347. package/server/{workspace-metadata-BE0efUv_.js → workspace-metadata-BzHnwwX4.js} +1 -1
  348. package/server/{workspace-metadata-tiSRIWJP.js → workspace-metadata-_WygnyoX.js} +2 -2
  349. package/server/{workspaces-CFPcL0vl.js → workspaces-Do_9J0LQ.js} +309 -124
  350. package/sync-sources/agents/pan-inspect-agent.md +1 -1
  351. package/sync-sources/agents/pan-merge-agent.md +1 -1
  352. package/sync-sources/agents/pan-planning-agent.md +4 -4
  353. package/sync-sources/agents/pan-work-agent.md +1 -1
  354. package/sync-sources/dev-skills/pan-commit/SKILL.md +1 -1
  355. package/sync-sources/dev-skills/test-specialist-workflow/SKILL.md +1 -1
  356. package/sync-sources/hooks/record-cost-event.js +369 -75
  357. package/sync-sources/hooks/session-start-hook +7 -0
  358. package/sync-sources/hooks/work-agent-stop-hook +1 -1
  359. package/sync-sources/rules/per-bead-durability.md +1 -1
  360. package/sync-sources/rules/prd-authoring.md +1 -1
  361. package/sync-sources/skills/feature-work/SKILL.md +1 -1
  362. package/sync-sources/skills/okf/README.md +11 -3
  363. package/sync-sources/skills/okf/SKILL.md +12 -1
  364. package/sync-sources/skills/okf/docs/USAGE.md +15 -0
  365. package/sync-sources/skills/okf/references/overdeck.md +28 -0
  366. package/sync-sources/skills/pan/SKILL.md +2 -2
  367. package/sync-sources/skills/pan-admin-config/SKILL.md +1 -0
  368. package/sync-sources/skills/pan-approve/SKILL.md +1 -1
  369. package/sync-sources/skills/pan-close/SKILL.md +1 -1
  370. package/sync-sources/skills/pan-doctor/SKILL.md +1 -1
  371. package/sync-sources/skills/pan-flywheel/SKILL.md +18 -1
  372. package/sync-sources/skills/pan-knowledge/SKILL.md +10 -0
  373. package/sync-sources/skills/pan-new-project/SKILL.md +9 -11
  374. package/sync-sources/skills/pan-orders/SKILL.md +33 -0
  375. package/sync-sources/skills/pan-oversee/SKILL.md +5 -5
  376. package/sync-sources/skills/pan-plan/SKILL.md +6 -6
  377. package/sync-sources/skills/pan-quickstart/SKILL.md +1 -1
  378. package/sync-sources/skills/pan-recap/SKILL.md +2 -2
  379. package/sync-sources/skills/pan-review/SKILL.md +1 -1
  380. package/sync-sources/skills/pan-start/SKILL.md +7 -3
  381. package/sync-sources/skills/pan-swarm/SKILL.md +1 -1
  382. package/sync-sources/skills/pan-sync/SKILL.md +1 -1
  383. package/sync-sources/skills/pan-task/SKILL.md +2 -2
  384. package/sync-sources/skills/pan-wipe/SKILL.md +2 -2
  385. package/sync-sources/skills/pipeline-list/SKILL.md +1 -1
  386. package/sync-sources/skills/pipeline-status/SKILL.md +2 -2
  387. package/sync-sources/skills/plan/SKILL.md +11 -11
  388. package/sync-sources/skills/write-vbrief/SKILL.md +7 -282
  389. package/sync-sources/skills/write-xbrief/SKILL.md +295 -0
  390. package/sync-sources/templates/claude-md/sections/warnings.md +1 -1
  391. package/sync-sources/templates/traefik/dynamic/overdeck.yml.template +10 -0
  392. package/server/agent-state-Co5Sy2Fw.js +0 -3
  393. package/server/agents-DyHKlq1I.js +0 -3
  394. package/server/cli-BRORS9qY.js +0 -3
  395. package/server/codex-DNyiQDKW.js +0 -3
  396. package/server/context-layers-15gDOk20.js +0 -165
  397. package/server/context-layers-DlQKkHH2.js +0 -4
  398. package/server/deacon-swarm-CV54eNmU.js +0 -2
  399. package/server/dist-j64RzSrQ.js +0 -3
  400. package/server/flywheel-6WHU4O7A.js +0 -207
  401. package/server/flywheel-COR0mbRI.js +0 -522
  402. package/server/flywheel-Ctr5uuvo.js +0 -2
  403. package/server/forge-B0_opi-V.js +0 -2
  404. package/server/git-utils-CsKGnzFA.js +0 -3
  405. package/server/hume-BmhvfVbV.js +0 -3
  406. package/server/inspect-agent-Dq0z1k3H.js +0 -2
  407. package/server/layers-Cp1To4L8.js +0 -93
  408. package/server/lifecycle-io-DmY2qwCn.js +0 -3
  409. package/server/merge-blockers-BYjeXrVN.js +0 -41
  410. package/server/merge-ops-DwWCkSgo.js +0 -2
  411. package/server/merge-set-DiISXcC-.js +0 -139
  412. package/server/projects-BKkwpH6q.js +0 -3
  413. package/server/public/assets/index-Bdc4V9ba.css +0 -1
  414. package/server/public/assets/mermaid-GHXKKRXX-B5v_r7cI.js +0 -1
  415. package/server/rally-OSJXdiHK.js +0 -3
  416. package/server/rebuild-stack-CKjJAI8L.js +0 -3
  417. package/server/record-rwK-nKv_.js +0 -3
  418. package/server/record-update-Crz74r-6.js +0 -168
  419. package/server/resume-wZZsWtzz.js +0 -3
  420. package/server/review-status-Bnh-rdkY.js +0 -3
  421. package/server/settings-BlUsVaUc.js +0 -2
  422. package/server/specialists-Dqe6_HE5.js +0 -3
  423. package/server/specs-BhOKBzqk.js +0 -3
  424. package/server/stack-health-Bd06frFn.js +0 -3
  425. package/server/supervisor-COVHrBTg.js +0 -2
  426. package/server/tmux-BAvtac_u.js +0 -3
  427. package/server/token-util-BArZLN6w.js +0 -3
  428. package/server/workflows-C4mR0Reb.js +0 -2
  429. package/server/workspace-manager-B1WOfKvB.js +0 -3
@@ -1,9 +1,9 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Hn as init_projects, In as getProjectSync, fr as init_issue_id, mr as parseIssueIdSync, nr as resolveProjectFromIssueSync } from "./config-yaml-ig8Nwtiw.js";
2
+ import { Tn as init_projects, Yn as init_issue_id, Zn as parseIssueIdSync, yn as getProjectSync, zn as resolveProjectFromIssueSync } from "./config-yaml-DySPNmKN.js";
3
3
  import { a as init_activity_logger, n as emitActivityEntrySync } from "./activity-logger-DDlOIAML.js";
4
4
  import { join } from "node:path";
5
5
  import { Duration, Effect, Schedule, Stream } from "effect";
6
- import { existsSync } from "node:fs";
6
+ import { existsSync, readFileSync } from "node:fs";
7
7
  import { ChildProcess } from "effect/unstable/process";
8
8
  import { execFile } from "node:child_process";
9
9
  import { promisify } from "node:util";
@@ -177,6 +177,52 @@ var init_docker_stats = __esmMin((() => {
177
177
  }));
178
178
  //#endregion
179
179
  //#region ../../lib/workspace/stack-health.ts
180
+ function declaredComposeProjectName(content, featureFolder) {
181
+ const templatedMatch = content.match(/COMPOSE_PROJECT_NAME="([^$"]*)\$\{FEATURE_FOLDER\}"/);
182
+ if (templatedMatch) return `${templatedMatch[1]}${featureFolder}`;
183
+ return content.match(/COMPOSE_PROJECT_NAME="([^"]+)"/)?.[1] ?? null;
184
+ }
185
+ /**
186
+ * Derive the canonical `COMPOSE_PROJECT_NAME` for a workspace. Throws when the
187
+ * workspace declares a name that does not end in the feature folder — a
188
+ * mismatch means `docker compose down` would target the wrong stack.
189
+ * (Lives here rather than in rebuild-stack so health checks can scope
190
+ * container matching without an import cycle.)
191
+ */
192
+ function composeProjectNameForWorkspace(workspacePath, issueId) {
193
+ const featureFolder = `feature-${issueId.toLowerCase()}`;
194
+ const fallback = `overdeck-${featureFolder}`;
195
+ for (const devPath of [join(workspacePath, ".devcontainer", "dev"), join(workspacePath, "dev")]) {
196
+ if (!existsSync(devPath)) continue;
197
+ try {
198
+ const declared = declaredComposeProjectName(readFileSync(devPath, "utf-8"), featureFolder);
199
+ if (!declared) continue;
200
+ if (!declared.endsWith(featureFolder)) throw new Error(`Refusing workspace rebuild: ${devPath} declares COMPOSE_PROJECT_NAME=${declared}, expected a name ending in ${featureFolder}`);
201
+ return declared;
202
+ } catch (err) {
203
+ if (err instanceof Error && err.message.startsWith("Refusing workspace rebuild:")) throw err;
204
+ }
205
+ }
206
+ return fallback;
207
+ }
208
+ /**
209
+ * Best-effort canonical compose project for a workspace — null when the
210
+ * workspace (or its dev file) is missing or declares a conflicting name, in
211
+ * which case callers fall back to name-token matching.
212
+ */
213
+ function tryComposeProjectNameForWorkspace(workspacePath, issueId) {
214
+ if (!workspacePath || !existsSync(workspacePath)) return null;
215
+ try {
216
+ return composeProjectNameForWorkspace(workspacePath, issueId);
217
+ } catch {
218
+ return null;
219
+ }
220
+ }
221
+ /** Extract `com.docker.compose.project` from docker ps's comma-joined Labels. */
222
+ function parseComposeProjectLabel(labels) {
223
+ if (!labels) return void 0;
224
+ return /(?:^|,)com\.docker\.compose\.project=([^,]+)/.exec(labels)?.[1];
225
+ }
180
226
  function normalizeIssue(issueId) {
181
227
  if (!issueId) return "";
182
228
  return parseIssueIdSync(issueId)?.normalized ?? issueId.toLowerCase();
@@ -203,9 +249,14 @@ function escapeRegExp(value) {
203
249
  function hasNameToken(name, token) {
204
250
  return new RegExp(`(^|[-_])${escapeRegExp(token)}($|[-_])`).test(name);
205
251
  }
206
- function isStackContainer(container, issueId) {
252
+ function isStackContainer(container, issueId, composeProjectName) {
253
+ if (composeProjectName && container.composeProject) return container.composeProject === composeProjectName;
254
+ return hasIssueToken(container.name, issueId);
255
+ }
256
+ /** Name-token match: does this container name belong to the issue's stack? */
257
+ function hasIssueToken(containerName, issueId) {
207
258
  const normalized = normalizeIssue(issueId);
208
- const name = container.name.toLowerCase();
259
+ const name = containerName.toLowerCase();
209
260
  return hasNameToken(name, `feature-${normalized}`) || hasNameToken(name, normalized);
210
261
  }
211
262
  function isSuccessfulOneShotContainer(name) {
@@ -236,7 +287,7 @@ function evaluateWorkspaceStackHealth(issueId, projectConfig, containers, option
236
287
  lastObserved
237
288
  };
238
289
  const thresholdMs = options.stuckCreatedThresholdMs ?? 12e4;
239
- const stackContainers = containers.filter((container) => isStackContainer(container, issueId));
290
+ const stackContainers = containers.filter((container) => isStackContainer(container, issueId, options.composeProjectName));
240
291
  const reasons = [];
241
292
  if (stackContainers.length === 0 && options.stackExpected !== false) reasons.push(`No Docker containers found for workspace stack ${normalizeIssue(issueId)}`);
242
293
  for (const container of stackContainers) {
@@ -311,7 +362,8 @@ var init_stack_health = __esmMin((() => {
311
362
  name,
312
363
  status: raw.Status ?? "",
313
364
  state: raw.State,
314
- createdAt: raw.CreatedAt
365
+ createdAt: raw.CreatedAt,
366
+ composeProject: parseComposeProjectLabel(raw.Labels)
315
367
  });
316
368
  } catch {}
317
369
  }
@@ -336,10 +388,12 @@ var init_stack_health = __esmMin((() => {
336
388
  observedAt = observed.toISOString();
337
389
  recordDockerContainerLifecycleSnapshot(containers, observedAt);
338
390
  }
391
+ const workspacePath = options.workspacePath ?? defaultWorkspacePath(issueId, projectConfig);
339
392
  const health = evaluateWorkspaceStackHealth(issueId, projectConfig, containers, {
340
393
  now: options.now,
341
394
  stuckCreatedThresholdMs: options.stuckCreatedThresholdMs,
342
- stackExpected: options.stackExpected ?? isWorkspaceStackExpected(issueId, projectConfig, options.workspacePath)
395
+ stackExpected: options.stackExpected ?? isWorkspaceStackExpected(issueId, projectConfig, options.workspacePath),
396
+ composeProjectName: tryComposeProjectNameForWorkspace(workspacePath, issueId)
343
397
  });
344
398
  const observedHealth = observedAt && !options.now ? {
345
399
  ...health,
@@ -350,6 +404,6 @@ var init_stack_health = __esmMin((() => {
350
404
  });
351
405
  }));
352
406
  //#endregion
353
- export { init_stack_health as a, init_docker_stats as c, getWorkspaceStackHealth as i, recordDockerContainerLifecycleSnapshot as l, collectDockerContainerLifecycleSnapshot as n, recordWorkspaceStackHealthTransition as o, evaluateWorkspaceStackHealth as r, DockerStatsCollector as s, DEFAULT_STUCK_CREATED_THRESHOLD_MS as t };
407
+ export { getWorkspaceStackHealth as a, recordWorkspaceStackHealthTransition as c, init_docker_stats as d, recordDockerContainerLifecycleSnapshot as f, evaluateWorkspaceStackHealth as i, tryComposeProjectNameForWorkspace as l, collectDockerContainerLifecycleSnapshot as n, hasIssueToken as o, composeProjectNameForWorkspace as r, init_stack_health as s, DEFAULT_STUCK_CREATED_THRESHOLD_MS as t, DockerStatsCollector as u };
354
408
 
355
- //# sourceMappingURL=stack-health-C-ifC7b0.js.map
409
+ //# sourceMappingURL=stack-health-DxSdG9cW.js.map
@@ -1,6 +1,6 @@
1
- import { Hn as init_projects, Kn as listProjectsSync, Nt as init_record, Rt as readIssueRecordSync, kt as getIssueRecordPath } from "./config-yaml-ig8Nwtiw.js";
2
- import { a as isPidDead, i as init_fs_lock, n as updateIssueRecord, t as init_record_update } from "./record-update-Crz74r-6.js";
3
- import { c as listAllAgentsSync, o as init_agents } from "./agents-DXdHmRTC.js";
1
+ import { Nt as readIssueRecordSync, Ot as init_record, Tn as init_projects, kn as listProjectsSync, wt as getIssueRecordPath } from "./config-yaml-DySPNmKN.js";
2
+ import { a as isPidDead, i as init_fs_lock, n as updateIssueRecord, t as init_record_update } from "./record-update-dE1Aw83j.js";
3
+ import { c as listAllAgentsSync, o as init_agents } from "./agents-EbI0zCJl.js";
4
4
  import { dirname } from "node:path";
5
5
  import { hostname } from "node:os";
6
6
  import { readdirSync } from "node:fs";
@@ -66,4 +66,4 @@ async function patrolStaleTaskClaims() {
66
66
  //#endregion
67
67
  export { patrolStaleTaskClaims };
68
68
 
69
- //# sourceMappingURL=stale-task-claims-L7pJkQFL.js.map
69
+ //# sourceMappingURL=stale-task-claims-KJKxxiiQ.js.map
@@ -1,3 +1,3 @@
1
- import { i as init_staleness, n as _resetForTests, r as computeBuildStaleness, t as BUILD_INPUT_PATHS } from "./staleness-BID1BKdr.js";
1
+ import { i as init_staleness, n as _resetForTests, r as computeBuildStaleness, t as BUILD_INPUT_PATHS } from "./staleness-DPm7ClwA.js";
2
2
  init_staleness();
3
3
  export { BUILD_INPUT_PATHS, _resetForTests, computeBuildStaleness };
@@ -23,6 +23,7 @@ function unknown(buildCommit, computedAt, reason, originMainSha = null) {
23
23
  behindTotal: null,
24
24
  behindBuildInputs: null,
25
25
  originMainLastCommitAt: null,
26
+ originMainLastBuildInputCommitAt: null,
26
27
  computedAt,
27
28
  reason
28
29
  };
@@ -55,7 +56,7 @@ async function computeBuildStaleness(input) {
55
56
  try {
56
57
  originMainSha = (await run("git", ["rev-parse", "origin/main"], { cwd: repoRoot })).stdout.trim();
57
58
  const range = `${buildCommit}..origin/main`;
58
- const [total, buildInputs, lastCommit] = await Promise.all([
59
+ const [total, buildInputs, lastCommit, lastBuildInputCommit] = await Promise.all([
59
60
  run("git", [
60
61
  "rev-list",
61
62
  "--count",
@@ -73,15 +74,25 @@ async function computeBuildStaleness(input) {
73
74
  "-1",
74
75
  "--format=%ct",
75
76
  "origin/main"
77
+ ], { cwd: repoRoot }),
78
+ run("git", [
79
+ "log",
80
+ "-1",
81
+ "--format=%ct",
82
+ "origin/main",
83
+ "--",
84
+ ...BUILD_INPUT_PATHS
76
85
  ], { cwd: repoRoot })
77
86
  ]);
78
87
  const behindTotal = Number.parseInt(total.stdout.trim(), 10);
79
88
  const behindBuildInputs = Number.parseInt(buildInputs.stdout.trim(), 10);
80
89
  const originMainLastCommitAt = Number.parseInt(lastCommit.stdout.trim(), 10) * 1e3;
90
+ const originMainLastBuildInputCommitAt = Number.parseInt(lastBuildInputCommit.stdout.trim(), 10) * 1e3;
81
91
  if (![
82
92
  behindTotal,
83
93
  behindBuildInputs,
84
- originMainLastCommitAt
94
+ originMainLastCommitAt,
95
+ originMainLastBuildInputCommitAt
85
96
  ].every(Number.isFinite)) return unknown(buildCommit, computedAt, "Git returned invalid staleness metadata.", originMainSha);
86
97
  return {
87
98
  status: behindBuildInputs > 0 ? "stale" : "fresh",
@@ -90,6 +101,7 @@ async function computeBuildStaleness(input) {
90
101
  behindTotal,
91
102
  behindBuildInputs,
92
103
  originMainLastCommitAt,
104
+ originMainLastBuildInputCommitAt,
93
105
  computedAt
94
106
  };
95
107
  } catch (error) {
@@ -129,4 +141,4 @@ var init_staleness = __esmMin((() => {
129
141
  //#endregion
130
142
  export { init_staleness as i, _resetForTests as n, computeBuildStaleness as r, BUILD_INPUT_PATHS as t };
131
143
 
132
- //# sourceMappingURL=staleness-BID1BKdr.js.map
144
+ //# sourceMappingURL=staleness-DPm7ClwA.js.map
@@ -1,7 +1,7 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.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";
2
+ import { Br as getOverdeckHome, Kt as STATE_BRANCH_PATHS, Ln as resolveInfraRepo, Tn as init_projects, Vr as init_paths, Yt as init_state_plane, an as init_project_key, on as projectKey } from "./config-yaml-DySPNmKN.js";
3
3
  import { dirname, join } from "node:path";
4
- import { existsSync } from "node:fs";
4
+ import { existsSync, readFileSync } from "node:fs";
5
5
  import { mkdir, rm } from "node:fs/promises";
6
6
  import { execFile } from "node:child_process";
7
7
  import { promisify } from "node:util";
@@ -40,8 +40,16 @@ function parseMigrationCompleteMarker(value) {
40
40
  if (!Number.isInteger(marker.version) || (marker.version ?? 0) < 1) return null;
41
41
  return marker;
42
42
  }
43
- async function remoteStateTip(repoPath, signal) {
44
- const sha = (await git(repoPath, [
43
+ function readMigrationCompleteMarker(path) {
44
+ if (!existsSync(path)) return null;
45
+ try {
46
+ return parseMigrationCompleteMarker(JSON.parse(readFileSync(path, "utf8")));
47
+ } catch {
48
+ return null;
49
+ }
50
+ }
51
+ async function remoteStateTip(repoPath, signal, runGit = git) {
52
+ const sha = (await runGit(repoPath, [
45
53
  "ls-remote",
46
54
  "--heads",
47
55
  "origin",
@@ -49,20 +57,32 @@ async function remoteStateTip(repoPath, signal) {
49
57
  ], signal)).split(/\s+/)[0];
50
58
  return isSha(sha) ? sha : null;
51
59
  }
52
- async function markerAtRemoteTip(repoPath, tip, signal) {
53
- await git(repoPath, [
54
- "fetch",
55
- "--quiet",
56
- "origin",
57
- `refs/heads/${STATE_BRANCH}:refs/remotes/origin/${STATE_BRANCH}`
58
- ], signal);
59
- if (await git(repoPath, ["rev-parse", `refs/remotes/origin/overdeck-state`], signal) !== tip) return null;
60
+ async function markerAtRemoteTip(repoPath, initialTip, signal, runGit = git) {
61
+ let tip = initialTip;
62
+ for (let attempt = 0; attempt < 3; attempt += 1) {
63
+ await runGit(repoPath, [
64
+ "fetch",
65
+ "--quiet",
66
+ "origin",
67
+ `refs/heads/${STATE_BRANCH}:refs/remotes/origin/${STATE_BRANCH}`
68
+ ], signal);
69
+ const fetchedTip = await runGit(repoPath, ["rev-parse", `refs/remotes/origin/${STATE_BRANCH}`], signal);
70
+ if (!isSha(fetchedTip)) throw new Error(`Invalid origin/${STATE_BRANCH} tip: ${fetchedTip}`);
71
+ if (fetchedTip === tip || attempt === 2) {
72
+ tip = fetchedTip;
73
+ break;
74
+ }
75
+ tip = fetchedTip;
76
+ }
60
77
  let raw;
61
78
  try {
62
- raw = await git(repoPath, ["show", `${tip}:${MIGRATION_COMPLETE_MARKER}`], signal);
79
+ raw = await runGit(repoPath, ["show", `${tip}:${MIGRATION_COMPLETE_MARKER}`], signal);
63
80
  } catch {
64
81
  signal?.throwIfAborted();
65
- return null;
82
+ return {
83
+ marker: null,
84
+ tip
85
+ };
66
86
  }
67
87
  let marker;
68
88
  try {
@@ -70,46 +90,77 @@ async function markerAtRemoteTip(repoPath, tip, signal) {
70
90
  } catch {
71
91
  marker = null;
72
92
  }
73
- if (!marker) return null;
74
- return await git(repoPath, [
75
- "merge-base",
76
- "--is-ancestor",
77
- marker.stateBranchSha,
93
+ if (!marker) return {
94
+ marker: null,
78
95
  tip
79
- ], signal).then(() => true).catch(() => {
80
- signal?.throwIfAborted();
81
- return false;
82
- }) ? marker : null;
96
+ };
97
+ return {
98
+ marker: await runGit(repoPath, [
99
+ "merge-base",
100
+ "--is-ancestor",
101
+ marker.stateBranchSha,
102
+ tip
103
+ ], signal).then(() => true).catch(() => {
104
+ signal?.throwIfAborted();
105
+ return false;
106
+ }) ? marker : null,
107
+ tip
108
+ };
83
109
  }
84
110
  async function inspectStateMigration(project, options = {}) {
85
111
  const { repoPath } = resolveInfraRepo(project);
86
- let tip;
112
+ const cached = migrationCache.get(repoPath);
113
+ const runGit = options.git ?? git;
87
114
  try {
88
- tip = await remoteStateTip(repoPath, options.signal);
115
+ const listedTip = await remoteStateTip(repoPath, options.signal, runGit);
116
+ if (cached?.remoteTip === listedTip) return {
117
+ migrated: cached.migrated,
118
+ migrationInProgress: listedTip !== null && !cached.migrated,
119
+ remoteTip: listedTip
120
+ };
121
+ if (listedTip === null) {
122
+ migrationCache.set(repoPath, {
123
+ remoteTip: null,
124
+ migrated: false
125
+ });
126
+ return {
127
+ migrated: false,
128
+ migrationInProgress: false,
129
+ remoteTip: null
130
+ };
131
+ }
132
+ const remote = await markerAtRemoteTip(repoPath, listedTip, options.signal, runGit);
133
+ const migrated = remote.marker !== null;
134
+ migrationCache.set(repoPath, {
135
+ remoteTip: remote.tip,
136
+ migrated
137
+ });
138
+ return {
139
+ migrated,
140
+ migrationInProgress: !migrated,
141
+ remoteTip: remote.tip
142
+ };
89
143
  } catch {
90
144
  options.signal?.throwIfAborted();
145
+ if (cached?.migrated) return {
146
+ migrated: true,
147
+ migrationInProgress: false,
148
+ remoteTip: cached.remoteTip,
149
+ fallback: "cache"
150
+ };
151
+ if (readMigrationCompleteMarker(join(stateWorktreePath(project, options), "migration-complete.json"))) return {
152
+ migrated: true,
153
+ migrationInProgress: false,
154
+ remoteTip: null,
155
+ fallback: "local"
156
+ };
91
157
  return {
92
158
  migrated: false,
93
159
  migrationInProgress: false,
94
- remoteTip: null
160
+ remoteTip: null,
161
+ remoteCheckFailed: true
95
162
  };
96
163
  }
97
- const cached = migrationCache.get(repoPath);
98
- if (cached?.remoteTip === tip) return {
99
- migrated: cached.migrated,
100
- migrationInProgress: tip !== null && !cached.migrated,
101
- remoteTip: tip
102
- };
103
- const migrated = tip !== null && await markerAtRemoteTip(repoPath, tip, options.signal) !== null;
104
- migrationCache.set(repoPath, {
105
- remoteTip: tip,
106
- migrated
107
- });
108
- return {
109
- migrated,
110
- migrationInProgress: tip !== null && !migrated,
111
- remoteTip: tip
112
- };
113
164
  }
114
165
  async function isStateMigrated(project) {
115
166
  return (await inspectStateMigration(project)).migrated;
@@ -150,7 +201,8 @@ async function ensureStateWorktree(project, options = {}) {
150
201
  const path = stateWorktreePath(project, options);
151
202
  if (!migration.migrated) return {
152
203
  status: "legacy",
153
- path
204
+ path,
205
+ detail: migration.remoteCheckFailed ? "The remote overdeck-state marker check failed transiently and no valid cached or local marker was available." : "The remote overdeck-state branch is reachable but does not contain a valid migration marker."
154
206
  };
155
207
  const { repoPath } = resolveInfraRepo(project);
156
208
  if (!existsSync(path)) {
@@ -221,4 +273,4 @@ var init_state_home = __esmMin((() => {
221
273
  //#endregion
222
274
  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 };
223
275
 
224
- //# sourceMappingURL=state-home-CONQvZR0.js.map
276
+ //# sourceMappingURL=state-home-Cn_Qu8IX.js.map
@@ -1,11 +1,13 @@
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";
1
+ import { $t as acquireStateMigrationLock, Ht as flushAutoCommits, Kt as STATE_BRANCH_PATHS, Ln as resolveInfraRepo, Tn as init_projects, Ut as init_auto_commit, Yt as init_state_plane, en as init_state_migration_lock, yn as getProjectSync } from "./config-yaml-DySPNmKN.js";
2
+ import { o as init_lifecycle } from "./lifecycle-yPd___5E.js";
3
+ import { l as stateWorktreePath, n as STATE_BRANCH, o as init_state_home, r as clearStateMigrationCache, t as MIGRATION_COMPLETE_MARKER } from "./state-home-Cn_Qu8IX.js";
3
4
  import { dirname, join } from "node:path";
4
5
  import { Effect } from "effect";
5
6
  import { tmpdir } from "node:os";
6
7
  import { createReadStream, createWriteStream, existsSync, lstatSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from "node:fs";
7
8
  import { chmod, lstat, mkdir, readdir, rename, rm, utimes } from "node:fs/promises";
8
9
  import { execFile } from "node:child_process";
10
+ import { promisify } from "node:util";
9
11
  import { createHash } from "node:crypto";
10
12
  import { pipeline } from "node:stream/promises";
11
13
  //#region ../../lib/state-migration-manifest.ts
@@ -41,7 +43,14 @@ async function verifyStateMigrationManifest(entries) {
41
43
  }
42
44
  }
43
45
  //#endregion
46
+ //#region ../../cli/commands/admin/xbrief-state-migrate.ts
47
+ init_lifecycle();
48
+ promisify(execFile);
49
+ //#endregion
44
50
  //#region ../../cli/commands/admin/state-migrate.ts
51
+ init_auto_commit();
52
+ init_projects();
53
+ init_state_home();
45
54
  const GIT_COMMAND_TIMEOUT_MS = 3e4;
46
55
  const execFileDetached = execFile;
47
56
  function killProcessTree(child) {
@@ -475,4 +484,4 @@ async function migrateProjectState(projectKey, options = {}, projectOverride) {
475
484
  //#endregion
476
485
  export { migrateProjectState };
477
486
 
478
- //# sourceMappingURL=state-migrate-BeBW0KXA.js.map
487
+ //# sourceMappingURL=state-migrate-BGg2ZaOt.js.map