@overdeck/desktop 0.45.21 → 0.45.23

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 (387) hide show
  1. package/package.json +1 -1
  2. package/server/{acceptance-criteria-CJIFA8Vg.js → acceptance-criteria-DOA0KgXx.js} +5 -5
  3. package/server/{advancing-selfheal-CPOBO5ZS.js → advancing-selfheal-BBu6DSNm.js} +6 -6
  4. package/server/{agent-gc-D6PUckBB.js → agent-gc-BV1q_2EV.js} +4 -4
  5. package/server/agent-state-Bg0lhqwj.js +3 -0
  6. package/server/{agent-state-service-DHwemt96.js → agent-state-service-CnzFKSAQ.js} +1 -1
  7. package/server/{agent-state-service-6MFQqnFy.js → agent-state-service-HoK8U4jW.js} +5 -5
  8. package/server/{agents-DbrHWunF.js → agents-B4Bjbkfv.js} +4 -4
  9. package/server/agents-FlIgQ3ql.js +3 -0
  10. package/server/{archive-planning-BOnwJq8M.js → archive-planning-DYrYojxl.js} +31 -7
  11. package/server/{archive-planning-MPpvQJL4.js → archive-planning-zkJb3BeM.js} +1 -1
  12. package/server/{artifact-index-jobs-BOoySTKD.js → artifact-index-jobs-C-xy7Z5v.js} +2 -2
  13. package/server/{backlog-auto-trigger-BUaFI44J.js → backlog-auto-trigger-GtG71X8H.js} +3 -3
  14. package/server/{behavior-Dg-D8eBG.js → behavior-B_-4EKF3.js} +2 -2
  15. package/server/{briefing-freshness-OouGbJ7d.js → briefing-freshness-DWdW7vUm.js} +2 -2
  16. package/server/{build-info-27NlbKhV.js → build-info-BT096lEl.js} +3 -3
  17. package/server/{build-info-Cv6CI7Gu.js → build-info-DgTqZkL5.js} +1 -1
  18. package/server/{checkpoint-manager-C7mFCY_E.js → checkpoint-manager-B7Bt29J0.js} +1 -1
  19. package/server/{checkpoint-manager-D64fCC4p.js → checkpoint-manager-DDqcGyu8.js} +2 -2
  20. package/server/checkpoint-worker.js +1 -1
  21. package/server/{checkpoints-Vh-J15ge.js → checkpoints-C-AXLfYT.js} +2 -2
  22. package/server/{checkpoints-DwZqT2qQ.js → checkpoints-CpgCjAlN.js} +1 -1
  23. package/server/{claude-hooks-provision-CS5W_dhI.js → claude-hooks-provision-C8wdRnN1.js} +1 -1
  24. package/server/{claude-hooks-provision-BVLGfHrv.js → claude-hooks-provision-but-_qGY.js} +2 -2
  25. package/server/{claude-permissions-C2OrLYKL.js → claude-permissions-H_5wHQZQ.js} +2 -2
  26. package/server/{claude-settings-overlay-DWXjafJh.js → claude-settings-overlay-BTENVmYf.js} +1 -1
  27. package/server/{claude-settings-overlay-DX-fMFpC.js → claude-settings-overlay-CbSz0Dvb.js} +2 -2
  28. package/server/cli-BsVIHwzC.js +3 -0
  29. package/server/{cli-mvpEOb3w.js → cli-vBeXbPrq.js} +9 -9
  30. package/server/{cliproxy-Dvsr4ZkW.js → cliproxy-Bgb2XCqi.js} +2 -2
  31. package/server/{cliproxy-7g1nObvB.js → cliproxy-DW0V86F8.js} +1 -1
  32. package/server/{close-issue-8F6uawYj.js → close-issue-Dn_4c4G8.js} +5 -5
  33. package/server/{closed-issue-reaper-BhV-r-tC.js → closed-issue-reaper-CWpY2uBw.js} +1 -1
  34. package/server/{closed-issue-reaper-BaYQYF6w.js → closed-issue-reaper-hANY_ehE.js} +9 -9
  35. package/server/codex-Dg7Is5yb.js +3 -0
  36. package/server/{codex-D_UBEOwL.js → codex-TmSi-yTv.js} +30 -8
  37. package/server/{codex-parser-BTzlOZiV.js → codex-parser-C4gSH-IR.js} +2 -2
  38. package/server/{config-CrduXs4a.js → config-CCvjQf27.js} +2 -2
  39. package/server/{config-nAB_F-Gp.js → config-DUIhMN_T.js} +1 -1
  40. package/server/{config-G1TOMJZA.js → config-DjLOdbgT.js} +2 -2
  41. package/server/{config-yaml-Ciyp2mYe.js → config-yaml-DvyMuOle.js} +177 -211
  42. package/server/{conflict-gate-BKalpcjL.js → conflict-gate-BSJkNTdp.js} +1 -1
  43. package/server/{conflict-gate-BLUNMs1i.js → conflict-gate-CmrYpa47.js} +3 -3
  44. package/server/{context-layers-YNpf6Q_I.js → context-layers-B3Nt58jl.js} +2 -2
  45. package/server/{context-layers-Cg9ZgVfx.js → context-layers-ZYFcWiyc.js} +3 -3
  46. package/server/{control-settings-D_79A6gp.js → control-settings-aP1ANIlI.js} +4 -4
  47. package/server/{conversation-compaction-DiuZbIUB.js → conversation-compaction-CNbTLB86.js} +8 -8
  48. package/server/{conversation-compaction-CMIeWW4_.js → conversation-compaction-DiG5zWQq.js} +1 -1
  49. package/server/{conversation-service-DQybSPUK.js → conversation-service-Du-MTNpJ.js} +6 -6
  50. package/server/{conversation-service-CWk8mEym.js → conversation-service-Up7FEzIC.js} +1 -1
  51. package/server/{conversations-BJ-t3BRm.js → conversations-6mPANqvL.js} +1 -1
  52. package/server/{conversations-BUgGvqVL.js → conversations-DbOs1e9Q.js} +4 -4
  53. package/server/{cost-jJ2cgDcG.js → cost-CW4WSe72.js} +3 -3
  54. package/server/{cost-Drm7qeD5.js → cost-Ca0YTWDw.js} +18 -2
  55. package/server/{cost-sync-DzHP6zaR.js → cost-sync-C0VdGme1.js} +3 -3
  56. package/server/{dag-DIji6O2b.js → dag-CdOjJVDT.js} +9 -9
  57. package/server/{dangerous-git-ops-BebB-61h.js → dangerous-git-ops-CT-IypG3.js} +1 -1
  58. package/server/dashboard-db-worker.js +7 -7
  59. package/server/{deacon-pleYrvIm.js → deacon-DYSEJb48.js} +3 -3
  60. package/server/{deacon-nudge-log-C5VCKtyi.js → deacon-nudge-log-Bjg8U4Y9.js} +3 -3
  61. package/server/{deacon-1s7bM5zn.js → deacon-pRnyD5w9.js} +1133 -474
  62. package/server/deacon-swarm-9jRLS5Ke.js +2 -0
  63. package/server/{deacon-swarm-DmA3rJ7k.js → deacon-swarm-DftYRDo8.js} +17 -17
  64. package/server/deacon.js +8 -8
  65. package/server/{deploy-patrol-DmM6F-yw.js → deploy-patrol-Bjsho_ha.js} +136 -19
  66. package/server/{deploy-window-ClLq1RYf.js → deploy-window-CM6W1-c6.js} +1 -1
  67. package/server/{deploy-window-jw4S_Y-c.js → deploy-window-DeP_OIRk.js} +77 -10
  68. package/server/{dev-supervisor-Do2Stz49.js → dev-supervisor-BpMoHlkR.js} +2 -2
  69. package/server/{devcontainer-renderer-D8ylupco.js → devcontainer-renderer-CtUgrVKW.js} +3 -3
  70. package/server/dist-Bd3vn0Hw.js +3 -0
  71. package/server/{dist-yfR7G1BL.js → dist-DyRx4cI7.js} +1 -1
  72. package/server/{docker-ClwPQaba.js → docker-BK7HIcBj.js} +2 -2
  73. package/server/{dod-BLphkhjs.js → dod-BrSfUHm0.js} +1 -1
  74. package/server/{ensure-devcontainer-BA3bICoY.js → ensure-devcontainer-DRqaAkBR.js} +1 -1
  75. package/server/{ensure-devcontainer-CFpQatOc.js → ensure-devcontainer-DseivYEy.js} +4 -4
  76. package/server/{esm-shims-BZw-fTQ6.js → esm-shims-CbI3BVkl.js} +1 -1
  77. package/server/{event-store-DABarGNz.js → event-store-Cr5PQwFC.js} +1 -1
  78. package/server/{event-store-BVnON3vf.js → event-store-tdiY5eDZ.js} +3 -3
  79. package/server/{events-CmERlnwn.js → events-CC1dgUpx.js} +3 -3
  80. package/server/{events-LGeUehYW.js → events-CvvGK6LT.js} +1 -1
  81. package/server/{factory-CQNprtHe.js → factory-CynerjXO.js} +50 -13
  82. package/server/{feature-registry-population-D9Z3tYSa.js → feature-registry-population-B0pmAz0a.js} +4 -4
  83. package/server/{feature-registry-storage-BWymOgXE.js → feature-registry-storage-_wUBRD3J.js} +2 -2
  84. package/server/{features--fOza5g5.js → features-Dhxz-wLc.js} +2 -2
  85. package/server/{feedback-target-Dqik2WTe.js → feedback-target-CPS15Vte.js} +7 -7
  86. package/server/{feedback-target-Dn9vfPpz.js → feedback-target-iygZwmMc.js} +1 -1
  87. package/server/{feedback-writer-Wlq5-qgS.js → feedback-writer-C9b6ccN1.js} +6 -5
  88. package/server/{feedback-writer-DDQNV8uc.js → feedback-writer-qmiMbqTZ.js} +1 -1
  89. package/server/{flywheel-Q-38YhZG.js → flywheel-DMCUzDWg.js} +1 -1
  90. package/server/{flywheel-1Wd8WDlh.js → flywheel-DSSpWmqF.js} +13 -13
  91. package/server/{flywheel-DPUc8r3V.js → flywheel-DcBkQvgE.js} +14 -14
  92. package/server/{flywheel-merge-order-CeBuX0EJ.js → flywheel-merge-order-C-6zRLvM.js} +1 -1
  93. package/server/{flywheel-merge-order-4SqOXFAr.js → flywheel-merge-order-DxbQKE1d.js} +8 -8
  94. package/server/forge-B-ZWyTRm.js +2 -0
  95. package/server/{forge-DBbDpiYc.js → forge-Ch9gCFod.js} +2 -2
  96. package/server/{from-hh6vTBGl.js → from-CJ_aH5jD.js} +1 -1
  97. package/server/{fts-db-6ponMie2.js → fts-db-CKgg0VKg.js} +2 -2
  98. package/server/{fts-operations-KIRK165y.js → fts-operations-BrL_VTRr.js} +2 -2
  99. package/server/git-utils-BVa07a4a.js +198 -0
  100. package/server/{git-utils-DmF5xkj8.js → git-utils-Dry_Ka_D.js} +1 -1
  101. package/server/{github-app-B3yfECo8.js → github-app-CMBdIFBQ.js} +11 -3
  102. package/server/{github-app-CeSVFL6C.js → github-app-CPfoFAdV.js} +1 -1
  103. package/server/{github-client-Dslipypz.js → github-client--XVlDpwM.js} +2 -2
  104. package/server/{github-client-4A6FgA8O.js → github-client-B4QsdE-X.js} +1 -1
  105. package/server/{github-pr-lookup-DBP0YHMr.js → github-pr-lookup-BRbDW-qk.js} +2 -2
  106. package/server/harness-binary-CVio2m-u.js +106 -0
  107. package/server/{harness-resolve-BGpO-OVM.js → harness-resolve-qHJBhy3Z.js} +9 -15
  108. package/server/{health-events-CZGZ5I-A.js → health-events-C9B8y1Hm.js} +2 -2
  109. package/server/{health-events-CnwV_SSz.js → health-events-CpfvuVmm.js} +1 -1
  110. package/server/{hooks-CoNscX84.js → hooks-DUXw8A0-.js} +2 -2
  111. package/server/{hooks-DvX33gY_.js → hooks-ltecuFqZ.js} +1 -1
  112. package/server/{hume-DSJt5eA_.js → hume-BEq0bUDg.js} +2 -2
  113. package/server/hume-B_DbflNM.js +3 -0
  114. package/server/{idle-stack-reaper-5DVRoY6P.js → idle-stack-reaper-D7w9t3fE.js} +1 -1
  115. package/server/{idle-stack-reaper-BfL8HqYy.js → idle-stack-reaper-w1ISSlhs.js} +2 -2
  116. package/server/{in-flight-guard-tVGiI5ee.js → in-flight-guard-aQ1IxeI3.js} +2 -2
  117. package/server/{infra-DN2wSxle.js → infra-CzaSOgul.js} +4 -4
  118. package/server/{injection-DtlT8Akv.js → injection-DZ0PfYa4.js} +7 -7
  119. package/server/{injection-DK9zh_HL.js → injection-oNZeoDhL.js} +1 -1
  120. package/server/{inspect-agent-DKByUS_F.js → inspect-agent-DJKLWcVT.js} +15 -11
  121. package/server/inspect-agent-ch-F-5Ci.js +2 -0
  122. package/server/{internal-token-DhfFiwW7.js → internal-token-Bb4XeV2x.js} +2 -2
  123. package/server/{internal-token-7bYL5v6K.js → internal-token-DXdfprGr.js} +1 -1
  124. package/server/{io-BiM-7Zsx.js → io-B3_AHDfr.js} +160 -184
  125. package/server/{issue-closed-Dfw3QDyZ.js → issue-closed-zhdvQicO.js} +7 -7
  126. package/server/{issue-lifecycle-B7HZWnTA.js → issue-lifecycle-CreaCkjW.js} +22 -22
  127. package/server/{issue-lifecycle-ytsEdDlK.js → issue-lifecycle-Dy4vd0Oa.js} +1 -1
  128. package/server/{issue-service-singleton-CPESc4Or.js → issue-service-singleton-B5ushCvE.js} +8 -8
  129. package/server/{issue-service-singleton-D5EB5eYr.js → issue-service-singleton-DabvBWUp.js} +1 -1
  130. package/server/{issues-XYtFMxrH.js → issues-B6ToV6x1.js} +2 -2
  131. package/server/{jsonl-parser-DJV2eZUP.js → jsonl-parser-Dhflo1SH.js} +3 -3
  132. package/server/{label-cleanup-CJ4m8iRU.js → label-cleanup-BKPJm4Hv.js} +3 -3
  133. package/server/{label-reconciler-CNf3Ylm3.js → label-reconciler-DdWbHEBu.js} +4 -4
  134. package/server/{launcher-generator-5DJRiovn.js → launcher-generator-CHVm7bGT.js} +10 -9
  135. package/server/{layers-cZx7ibtV.js → layers-DzxSTGNA.js} +2 -2
  136. package/server/lifecycle-DfeyBDwA.js +121 -0
  137. package/server/lifecycle-io-Bsnr2K4F.js +3 -0
  138. package/server/{lifecycle-io-DMurK4oM.js → lifecycle-io-D8iNBcux.js} +37 -37
  139. package/server/{lifecycle-CE7619Xw.js → lifecycle-sycO16hj.js} +6 -6
  140. package/server/{linear-client-BLyN-NiP.js → linear-client-D4zqMnX7.js} +2 -2
  141. package/server/{linear-client-Bj1l4FOA.js → linear-client-DqhDQO9k.js} +1 -1
  142. package/server/memory-fts-worker.js +1 -1
  143. package/server/{merge-hSC2BENe.js → merge-C_ZEhbqI.js} +3 -3
  144. package/server/{merge-CwX2_AWm.js → merge-DK23JEdS.js} +1 -1
  145. package/server/{merge-agent-CnORPiri.js → merge-agent-BQM3a8z5.js} +1 -1
  146. package/server/{merge-agent-DnBsms_V.js → merge-agent-XrB80vfT.js} +369 -213
  147. package/server/{merge-batch-C2w2U2eK.js → merge-batch-Bwoyr8Je.js} +1 -1
  148. package/server/{merge-blockers-DhRgh76x.js → merge-blockers-BsFjGrQ8.js} +2 -2
  149. package/server/merge-ops-DlB1IM0Y.js +2 -0
  150. package/server/{merge-rebase-CE-ZyOMY.js → merge-rebase-C1KIVr0s.js} +2 -2
  151. package/server/{merge-set-D7YNU1ZB.js → merge-set-DLz0MkGT.js} +3 -3
  152. package/server/{merge-set-DHkzPCJU.js → merge-set-DnSYdBEp.js} +1 -1
  153. package/server/{merge-sync-De1FYva5.js → merge-sync-DZ9dojJn.js} +2 -2
  154. package/server/{merge-sync-CpGA9Kg7.js → merge-sync-SSv3E-pl.js} +1 -1
  155. package/server/{merge-train-SvkRJZ-k.js → merge-train-DxDfBTjr.js} +3 -3
  156. package/server/{merge-train-deps-CECJTElu.js → merge-train-deps-CyYQUksx.js} +4 -4
  157. package/server/{merge-verification-B3meGcXF.js → merge-verification-CSizH3HY.js} +4 -4
  158. package/server/{multipart-parser-ByTMgYV5.js → multipart-parser-Dt8YPN5S.js} +2 -2
  159. package/server/{no-resume-mode-BnInAFKs.js → no-resume-mode-Cx3K0hHi.js} +11 -8
  160. package/server/node_modules/.package-lock.json +5 -5
  161. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/README.md +3 -3
  162. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.d.ts.map +1 -1
  163. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js +2 -2
  164. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js.map +1 -1
  165. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +5 -5
  166. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeChildProcessSpawner.ts +6 -8
  167. package/server/{orphan-proposed-reconciler-CAfuWTA1.js → orphan-proposed-reconciler-BTkDrl4R.js} +1 -1
  168. package/server/{orphan-proposed-reconciler-AxAGUouN.js → orphan-proposed-reconciler-neK8dHQk.js} +23 -14
  169. package/server/package-lock.json +6 -6
  170. package/server/package.json +1 -1
  171. package/server/{pan-dir-Rw17YjT1.js → pan-dir-DeVUgwA7.js} +78 -58
  172. package/server/{paths-FP8v3lTz.js → paths-_zEts6wc.js} +2 -2
  173. package/server/{pickup-xi3KTLaJ.js → pickup-Dd0Znxxy.js} +2 -2
  174. package/server/{pipeline-membership-BtKMNY7v.js → pipeline-membership-0HaEGDlH.js} +190 -68
  175. package/server/{pipeline-notifier-dQ-U4NSb.js → pipeline-notifier-6iCJplFZ.js} +1 -1
  176. package/server/{pipeline-notifier-BM2HLF7B.js → pipeline-notifier-D0ykk59O.js} +2 -2
  177. package/server/{project-pipelines-B59NfN44.js → project-pipelines-2sK1apsO.js} +2 -2
  178. package/server/projects-9SkRpES9.js +3 -0
  179. package/server/{prompts-CbqaVjbe.js → prompts-Dp4Tpk39.js} +2 -2
  180. package/server/providers-DKkBXhxU.js +3 -0
  181. package/server/{providers-d3pwXGVE.js → providers-DV7ec8l7.js} +7 -7
  182. package/server/public/assets/{chunk-BO2N2NFS-BxYSL7J-.js → chunk-BO2N2NFS-CltymLRg.js} +4 -4
  183. package/server/public/assets/{diagram-OG6HWLK6-C_F9Q2as.js → diagram-OG6HWLK6-D2f6pjgA.js} +1 -1
  184. package/server/public/assets/{dist-DQNg4CiF.js → dist-BWR4qFiV.js} +1 -1
  185. package/server/public/assets/{dist-CLSlc6cV.js → dist-DEmlBBNQ.js} +3 -3
  186. package/server/public/assets/{ganttDiagram-6RSMTGT7-Cq0my-0C.js → ganttDiagram-6RSMTGT7-DnfiViPK.js} +1 -1
  187. package/server/public/assets/{highlighted-body-OFNGDK62-eZC03dGh.js → highlighted-body-OFNGDK62-B8Wrmj9H.js} +1 -1
  188. package/server/public/assets/index-CUr1xv8w.css +1 -0
  189. package/server/public/assets/{index-SLYGA8AQ.js → index-CsSuZQBI.js} +148 -145
  190. package/server/public/assets/{linear-6Fi3qnGg.js → linear-C9zFQpkX.js} +1 -1
  191. package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +1 -0
  192. package/server/public/assets/{pieDiagram-4H26LBE5-Dpmc6xsv.js → pieDiagram-4H26LBE5-lR8H7Yjd.js} +1 -1
  193. package/server/public/assets/{prod-ojHllFvN.js → prod-B1jCQihw.js} +4 -4
  194. package/server/public/assets/{quadrantDiagram-W4KKPZXB-Ulr9gON5.js → quadrantDiagram-W4KKPZXB-CVQ2guem.js} +1 -1
  195. package/server/public/assets/{sankeyDiagram-5OEKKPKP-CwdHGXfL.js → sankeyDiagram-5OEKKPKP-eD1RB4gm.js} +1 -1
  196. package/server/public/assets/{xychartDiagram-2RQKCTM6-r-bEDzJh.js → xychartDiagram-2RQKCTM6-ChEC6dQn.js} +1 -1
  197. package/server/public/index.html +54 -10
  198. package/server/{pull-requests-D3N6HQzI.js → pull-requests--Ib2jTgy.js} +1 -1
  199. package/server/{pull-requests-CjjPj7v6.js → pull-requests-CXIhdCYD.js} +13 -11
  200. package/server/{queries-B5hl7lMQ.js → queries-6d7Cdtm7.js} +723 -110
  201. package/server/{rally-Dp0Gb1DN.js → rally-B708-nZn.js} +3 -3
  202. package/server/{rally-api-DGaFz5L5.js → rally-api-nY0ZANw3.js} +2 -2
  203. package/server/{rally-api-CKr0O4DJ.js → rally-api-yjQ0TfHd.js} +1 -1
  204. package/server/{rally-client-SVbjGvqj.js → rally-client-B1EJhfV0.js} +4 -4
  205. package/server/{rally-client-Cqf6EX_r.js → rally-client-CULK2XAY.js} +1 -1
  206. package/server/rally-njs_mJrt.js +3 -0
  207. package/server/reap-terminal-sessions-MWnqdLCJ.js +4 -0
  208. package/server/{reap-terminal-sessions-CjqRAGw7.js → reap-terminal-sessions-N3BTkmX_.js} +11 -28
  209. package/server/{rebuild-stack-DHqCLvLX.js → rebuild-stack-Dp4eLkt4.js} +6 -6
  210. package/server/{rebuild-stack-DjdpALr1.js → rebuild-stack-kA7XngID.js} +1 -1
  211. package/server/{reconstruct-cache-BqrCQt0o.js → reconstruct-cache-uWbZfjms.js} +6 -6
  212. package/server/record-t6V-3Dcj.js +3 -0
  213. package/server/{record-update-BlB8mpKO.js → record-update-DACtKh6_.js} +1 -1
  214. package/server/record-update-Dq0t2uBG.js +310 -0
  215. package/server/{recovery-trip-l1Hsi37x.js → recovery-trip-BJtIQuag.js} +2 -2
  216. package/server/{release-engine-CSI4K6Oj.js → release-engine-DZpmGGzb.js} +5 -5
  217. package/server/{release-set-BywwggrE.js → release-set-hnXd_kga.js} +3 -3
  218. package/server/{remote-DYziAkiZ.js → remote-4tiENDaI.js} +3 -3
  219. package/server/{remote-cnoeuDWn.js → remote-Br-ZWVIP.js} +3 -3
  220. package/server/{remote-agents-BNORDWAX.js → remote-agents-CRCg1L4H.js} +1 -1
  221. package/server/{remote-agents-CZ2rc8I0.js → remote-agents-nmty1mLu.js} +6 -6
  222. package/server/{remote-completion-W67FNQ-A.js → remote-completion-BbWNd10K.js} +13 -13
  223. package/server/resume-CcKqnTvE.js +3 -0
  224. package/server/{review-agent-CSswH985.js → review-agent-DJRO8EG8.js} +1 -1
  225. package/server/{review-agent-CqSqSHkU.js → review-agent-sKkE1FEL.js} +23 -23
  226. package/server/{review-artifacts-BBgnd5df.js → review-artifacts-BLbSC4ke.js} +5 -5
  227. package/server/{review-context-Ctp9BdNJ.js → review-context-BgX3lcCx.js} +9 -9
  228. package/server/{review-status-CCgPVK1h.js → review-status-A7quS5KJ.js} +56 -39
  229. package/server/review-status-C6n6-9f_.js +3 -0
  230. package/server/{review-status-enrichment-DtDRGpst.js → review-status-enrichment-tbOn_A_u.js} +3 -3
  231. package/server/review-status-source-CxuEjLGg.js +39 -0
  232. package/server/{review-status-sync-jnLgd04F.js → review-status-sync-BhSQ0d0l.js} +2 -2
  233. package/server/{review-status-sync-C792ksoJ.js → review-status-sync-To3-iS-N.js} +1 -1
  234. package/server/{review-verdict-feedback-D5lW0o3k.js → review-verdict-feedback-C1Kg8n7t.js} +1 -1
  235. package/server/{review-verdict-feedback-CMsIpTpy.js → review-verdict-feedback-CTRNtzXO.js} +7 -7
  236. package/server/{rollup-B3kQmNpl.js → rollup-B53Y81xK.js} +1 -1
  237. package/server/{rollup-CLj_AK9f.js → rollup-WA0VD-Rr.js} +8 -8
  238. package/server/{scanner-C4NeC4FE.js → scanner-D2743cp8.js} +11 -7
  239. package/server/{sequence-io-Ce-6grIY.js → sequence-io-Cg0zYj_E.js} +4 -4
  240. package/server/{sequencer-agent-Bpz0yGmG.js → sequencer-agent-BGY8gjg-.js} +5 -5
  241. package/server/server.js +1348 -963
  242. package/server/{service-CqAY8Kmk.js → service-DCpB_SGd.js} +154 -51
  243. package/server/{session-fork-uNo4rMRA.js → session-fork-BQ8_6H32.js} +2 -2
  244. package/server/{session-history-DUehL3KN.js → session-history-CVZDpS3c.js} +4 -4
  245. package/server/{settings-DP2OYLXL.js → settings-BZ5m1UCl.js} +3 -3
  246. package/server/settings-D0OSwos5.js +2 -0
  247. package/server/{settings-D9grjmaP.js → settings-ylxwqwQG.js} +2 -2
  248. package/server/{shadow-engineering-Bi_oIMtF.js → shadow-engineering-BlxG6Xye.js} +3 -3
  249. package/server/{shadow-state-CDxEuPlE.js → shadow-state-C2_epgx2.js} +1 -1
  250. package/server/{shadow-state-a_ztFBJe.js → shadow-state-Dh-HzF2J.js} +2 -2
  251. package/server/{shadow-utils-CyOg6_Xq.js → shadow-utils-4bvjn9b3.js} +2 -2
  252. package/server/{ship-log-DDcueaIR.js → ship-log-ClSMIzZX.js} +1 -1
  253. package/server/{smart-compaction-C1_VVLEd.js → smart-compaction-CHIxLr_d.js} +1 -1
  254. package/server/{smart-compaction--Oj65Uov.js → smart-compaction-r4pHQBIr.js} +7 -7
  255. package/server/{spawn-planning-session-AiUSsBnH.js → spawn-planning-session-DWAorh2B.js} +25 -20
  256. package/server/{spawn-planning-session-LFtK2QCE.js → spawn-planning-session-KC_UduxD.js} +1 -1
  257. package/server/{specialist-completion-qOgqdqXH.js → specialist-completion-BXhav38U.js} +1 -1
  258. package/server/{specialist-context-gjj8Z4Ii.js → specialist-context-DtrYvGJ-.js} +5 -5
  259. package/server/{specialist-handoff-logger-BsBNvVZv.js → specialist-handoff-logger-C45ouoZ6.js} +2 -2
  260. package/server/{specialist-logs-CSLtvPx6.js → specialist-logs-DJ3RzKxW.js} +3 -3
  261. package/server/{specialists-D0VBf8g_.js → specialists-D5fRZXmN.js} +1 -1
  262. package/server/specialists-DVj0hvaL.js +3 -0
  263. package/server/{specialists-CYRwELzc.js → specialists-DyFeedjn.js} +66 -76
  264. package/server/{specialists-DAegTvRt.js → specialists-JVO00bs7.js} +374 -220
  265. package/server/specs-nN45DG2X.js +3 -0
  266. package/server/{src-OLoJhUiJ.js → src-CG9mCkP6.js} +6 -6
  267. package/server/{src-BqTcrfO_.js → src-CMTQGyCK.js} +3 -3
  268. package/server/{src-Dpq1yFIl.js → src-U7_kTPEE.js} +338 -4
  269. package/server/{stack-health-I713ELld.js → stack-health-Df0YEZKa.js} +1 -1
  270. package/server/{stack-health-DV_f-lK0.js → stack-health-puygdaMd.js} +2 -2
  271. package/server/{stale-task-claims-CQSKZVq0.js → stale-task-claims-BbFwCTb0.js} +4 -4
  272. package/server/{staleness-BbsGxmF2.js → staleness-Bpy41ngS.js} +15 -3
  273. package/server/{staleness-zGp4P1hd.js → staleness-Cbl_w4Bw.js} +1 -1
  274. package/server/{state-home-DixkE-up.js → state-home-CIGjwNfJ.js} +119 -54
  275. package/server/state-migrate-Dkzaxvny.js +487 -0
  276. package/server/{stuck-remediation-BWkK_O7A.js → stuck-remediation-CzEov_fq.js} +27 -21
  277. package/server/{stuck-remediation-CTPRC2S5.js → stuck-remediation-sY_MHHgQ.js} +1 -1
  278. package/server/{substrate-bug-weights-service-DXd0ID83.js → substrate-bug-weights-service-BH66lhm7.js} +3 -3
  279. package/server/{summary-fork-CdLn8Chr.js → summary-fork-D8bXjCr7.js} +2 -2
  280. package/server/{summary-fork-f3DpgjXh.js → summary-fork-DHhJIsAL.js} +8 -8
  281. package/server/{supervisor-Ch8CDuoF.js → supervisor-BO-Zk_h-.js} +3 -3
  282. package/server/supervisor-BPy-o1A8.js +2 -0
  283. package/server/{swarm-readiness-C9P2iPap.js → swarm-readiness-CQ_fwUWF.js} +4 -4
  284. package/server/{system-prerequisites-DkoQBn1q.js → system-prerequisites-Bza0ffAh.js} +24 -44
  285. package/server/{teardown-workspace-D-5yMyit.js → teardown-workspace-CEgauF4U.js} +15 -15
  286. package/server/{test-agent-queue-BwpUpu-o.js → test-agent-queue-DXDt0Xa-.js} +7 -7
  287. package/server/{test-verdict-BRiSu7eW.js → test-verdict-CmUBK5cT.js} +1 -1
  288. package/server/{test-verdict-BQ1yx7d4.js → test-verdict-DFjjIHR5.js} +1 -1
  289. package/server/{tldr-daemon-DjxP5g6Y.js → tldr-daemon-BDtLOIlO.js} +2 -2
  290. package/server/{tldr-daemon-BJA7TkqS.js → tldr-daemon-DL566HbH.js} +1 -1
  291. package/server/tmux-DoThH6aj.js +3 -0
  292. package/server/{tmux-y1blSxks.js → tmux-ftABRAmc.js} +76 -44
  293. package/server/{token-LUrbM9sU.js → token-CsOhvw42.js} +2 -2
  294. package/server/{token-util-BZaDAQ8S.js → token-util-CTmczIfW.js} +1 -1
  295. package/server/token-util-DrHg8abn.js +3 -0
  296. package/server/{tracker-config-DSFZBdXP.js → tracker-config-B4itFzDo.js} +2 -2
  297. package/server/{tracker-utils-WtP_V-yn.js → tracker-utils-BePq_oj-.js} +1 -1
  298. package/server/{tracker-utils-DiceZN3a.js → tracker-utils-tnxxqROg.js} +2 -2
  299. package/server/{traefik-connect-BXqfOP4-.js → traefik-connect-m73vGebA.js} +1 -1
  300. package/server/{tunnel-DTng1rfQ.js → tunnel-B2vxjx_b.js} +3 -3
  301. package/server/{tunnel-WcJImbAC.js → tunnel-Cgj-IGIl.js} +1 -1
  302. package/server/{types-BjaZ1oqH.js → types-BBNjPcqU.js} +1 -1
  303. package/server/{types-DqeBMmJN.js → types-hraoaQIp.js} +1 -1
  304. package/server/{uat-train-BpLnp7Cx.js → uat-train-CuEn0t9M.js} +28 -28
  305. package/server/{uat-train-Wismge7h.js → uat-train-cKfM-_WW.js} +1 -1
  306. package/server/{validation-BA4e5EGm.js → validation-B5JxoPUS.js} +259 -9
  307. package/server/{validation-CUWamZ4X.js → validation-CIi6pnI2.js} +1 -1
  308. package/server/{verification-artifact-Dr_0g9nb.js → verification-artifact-BcnIbigL.js} +1 -1
  309. package/server/{verification-artifact-CrbI4tJE.js → verification-artifact-C-lIHfUa.js} +1 -1
  310. package/server/{verification-runner-gAzh3cVD.js → verification-runner-Br0S_Ous.js} +103 -37
  311. package/server/{verification-runner-Dcksl_P-.js → verification-runner-CDj4lD4t.js} +1 -1
  312. package/server/{vtt-parser-3VZKsmSm.js → vtt-parser-DKpNNW5i.js} +1 -1
  313. package/server/{work-agent-prompt-ULdcANl5.js → work-agent-prompt-Yb2bd3Fq.js} +16 -15
  314. package/server/{workflows-B8ROFlfw.js → workflows-C9WmILql.js} +39 -77
  315. package/server/workflows-D90rMOya.js +2 -0
  316. package/server/{workspace-DhTDA8nB.js → workspace-BVl4rihN.js} +3 -3
  317. package/server/{workspace-DSjUJaJN.js → workspace-DuUdndHe.js} +1 -1
  318. package/server/{workspace-config-BAAsAv-o.js → workspace-config-cEGcO6UT.js} +1 -1
  319. package/server/{workspace-manager-CcujONCR.js → workspace-manager-ZTdJAy9M.js} +1 -1
  320. package/server/{workspace-manager-DsN52IMG.js → workspace-manager-hLUv3ADC.js} +23 -16
  321. package/server/{workspace-metadata-DIL5_U4c.js → workspace-metadata-CskwzzhL.js} +2 -2
  322. package/server/{workspace-metadata-CftOpNLs.js → workspace-metadata-DNpMixRq.js} +1 -1
  323. package/server/{workspaces-Dmlh1YXm.js → workspaces-hWvy9eKs.js} +276 -110
  324. package/sync-sources/agents/pan-inspect-agent.md +1 -1
  325. package/sync-sources/agents/pan-merge-agent.md +1 -1
  326. package/sync-sources/agents/pan-planning-agent.md +4 -4
  327. package/sync-sources/agents/pan-work-agent.md +1 -1
  328. package/sync-sources/dev-skills/pan-commit/SKILL.md +1 -1
  329. package/sync-sources/dev-skills/test-specialist-workflow/SKILL.md +1 -1
  330. package/sync-sources/hooks/record-cost-event.js +363 -71
  331. package/sync-sources/hooks/session-start-hook +7 -0
  332. package/sync-sources/hooks/work-agent-stop-hook +1 -1
  333. package/sync-sources/rules/per-bead-durability.md +1 -1
  334. package/sync-sources/rules/prd-authoring.md +1 -1
  335. package/sync-sources/skills/feature-work/SKILL.md +1 -1
  336. package/sync-sources/skills/pan/SKILL.md +2 -2
  337. package/sync-sources/skills/pan-admin-config/SKILL.md +1 -0
  338. package/sync-sources/skills/pan-approve/SKILL.md +1 -1
  339. package/sync-sources/skills/pan-close/SKILL.md +1 -1
  340. package/sync-sources/skills/pan-doctor/SKILL.md +1 -1
  341. package/sync-sources/skills/pan-new-project/SKILL.md +9 -11
  342. package/sync-sources/skills/pan-oversee/SKILL.md +5 -5
  343. package/sync-sources/skills/pan-plan/SKILL.md +6 -6
  344. package/sync-sources/skills/pan-quickstart/SKILL.md +1 -1
  345. package/sync-sources/skills/pan-recap/SKILL.md +2 -2
  346. package/sync-sources/skills/pan-review/SKILL.md +1 -1
  347. package/sync-sources/skills/pan-start/SKILL.md +26 -3
  348. package/sync-sources/skills/pan-swarm/SKILL.md +1 -1
  349. package/sync-sources/skills/pan-sync/SKILL.md +1 -1
  350. package/sync-sources/skills/pan-task/SKILL.md +2 -2
  351. package/sync-sources/skills/pan-wipe/SKILL.md +2 -2
  352. package/sync-sources/skills/pipeline-list/SKILL.md +1 -1
  353. package/sync-sources/skills/pipeline-status/SKILL.md +2 -2
  354. package/sync-sources/skills/plan/SKILL.md +11 -11
  355. package/sync-sources/skills/write-vbrief/SKILL.md +7 -282
  356. package/sync-sources/skills/write-xbrief/SKILL.md +295 -0
  357. package/sync-sources/templates/claude-md/sections/warnings.md +1 -1
  358. package/server/agent-state-BV_6RHnO.js +0 -3
  359. package/server/agents-Czz6R57Z.js +0 -3
  360. package/server/cli-ChErG518.js +0 -3
  361. package/server/codex-BBeZ8c3s.js +0 -3
  362. package/server/deacon-swarm-uudlSCLM.js +0 -2
  363. package/server/dist-BEDL2alY.js +0 -3
  364. package/server/forge-DbhJyH6u.js +0 -2
  365. package/server/git-utils-Bkxzr1Xf.js +0 -129
  366. package/server/hume-BrA1tUuk.js +0 -3
  367. package/server/inspect-agent-CyXNo9fM.js +0 -2
  368. package/server/lifecycle-io-CUpsxG0p.js +0 -3
  369. package/server/merge-ops-BpTtuO8x.js +0 -2
  370. package/server/projects-IRHJIPYC.js +0 -3
  371. package/server/providers-BqCdTryq.js +0 -3
  372. package/server/public/assets/index-C6NLz_1S.css +0 -1
  373. package/server/public/assets/mermaid-GHXKKRXX-BNwFoQsf.js +0 -1
  374. package/server/rally-DGimSRBQ.js +0 -3
  375. package/server/reap-terminal-sessions-C1mfzoZo.js +0 -3
  376. package/server/record-update-RviRDSNs.js +0 -168
  377. package/server/record-us0YECMO.js +0 -3
  378. package/server/resume-OyN3dEXE.js +0 -3
  379. package/server/review-status-DXeqFpk5.js +0 -3
  380. package/server/settings-BaPXXJsT.js +0 -2
  381. package/server/specialists-C6WkeKFK.js +0 -3
  382. package/server/specs-BsNcum0h.js +0 -3
  383. package/server/state-migrate-_zJJ6XKE.js +0 -362
  384. package/server/supervisor-Qy1QecAs.js +0 -2
  385. package/server/tmux-HQLgwo_C.js +0 -3
  386. package/server/token-util-Cg-QnowA.js +0 -3
  387. package/server/workflows-C5c-RPsY.js +0 -2
@@ -1,17 +1,17 @@
1
- import { En as findProjectByPathSync, Q as resolveModel, d as loadConfigNoMigration, t as init_config_yaml, zn as init_projects } from "./config-yaml-Ciyp2mYe.js";
2
- import { n as getDashboardIdentity, t as recordDeaconNudge } from "./deacon-nudge-log-C5VCKtyi.js";
3
- import { D as killSession, E as isPaneDead, V as sessionExists, w as init_tmux } from "./tmux-y1blSxks.js";
4
- import { L as messageAgent, s as init_agents } from "./queries-B5hl7lMQ.js";
5
- import { S as setUatGenerationStackStartedAtSync, a as getUatGenerationSync, h as listUatGenerationsWithStacksSync, l as isMergeTrainEnabled, m as listUatGenerationsSync, o as init_merge_sync, p as listUatGenerationNamesSync, s as insertUatGenerationSync, w as updateUatGenerationSync } from "./merge-sync-De1FYva5.js";
6
- import { A as init_vbrief_index, M as readVBriefDocument, k as findVBriefByIssue } from "./io-BiM-7Zsx.js";
7
- import { S as getConversationByName, _t as getDiscoveredStats, at as aggregateDiscoveredSessionCost, ct as countDiscoveredSessions, ft as findDiscoveredSessions, k as init_conversations, mt as getDiscoveredSessionById, ot as aggregateDiscoveredSessionCostBy, yt as init_discovered_sessions } from "./conversations-BUgGvqVL.js";
8
- import { f as isFlywheelGloballyPaused, i as getFlywheelActiveRunId, n as FLYWHEEL_GLOBAL_PAUSE_KEY, o as getSetting, s as init_control_settings, t as FLYWHEEL_ACTIVE_RUN_ID_KEY, w as setSetting } from "./control-settings-D_79A6gp.js";
9
- import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-BGpO-OVM.js";
10
- import { a as enrichSessions, c as searchSessions, i as CostThresholdError, n as getSessionsFeedFacets, o as embedSessions, r as listSessionsFeed, t as scan } from "./scanner-C4NeC4FE.js";
11
- import { t as listSubstrateBugWeights } from "./substrate-bug-weights-service-DXd0ID83.js";
12
- import { C as writeLatestFlywheelStatus, S as writeFlywheelLaunchMetadata, _ as nextFlywheelRunId, a as loadResumeSessionId, b as resolveLiveFlywheelRunId, c as saveResumeSessionId, d as abortFlywheelRun, g as listFlywheelRuns, l as spawnFlywheelAgent, p as getFlywheelRunDetail, r as isFlywheelDevcontainerRuntime, t as FLYWHEEL_ORCHESTRATOR_AGENT_ID, y as readFlywheelLaunchMetadata } from "./flywheel-1Wd8WDlh.js";
13
- import { t as extractACFromDocument } from "./acceptance-criteria-CJIFA8Vg.js";
14
- import { n as ensureDevcontainerSync, r as init_ensure_devcontainer } from "./ensure-devcontainer-CFpQatOc.js";
1
+ import { Tn as init_projects, d as loadConfigNoMigration, fn as findProjectByPathSync, t as init_config_yaml, tt as resolveModel } from "./config-yaml-DvyMuOle.js";
2
+ import { n as getDashboardIdentity, t as recordDeaconNudge } from "./deacon-nudge-log-Bjg8U4Y9.js";
3
+ import { D as killSession, E as isPaneDead, H as sessionExists, w as init_tmux } from "./tmux-ftABRAmc.js";
4
+ import { X as messageAgent, b as init_agents } from "./queries-6d7Cdtm7.js";
5
+ import { S as setUatGenerationStackStartedAtSync, a as getUatGenerationSync, h as listUatGenerationsWithStacksSync, l as isMergeTrainEnabled, m as listUatGenerationsSync, o as init_merge_sync, p as listUatGenerationNamesSync, s as insertUatGenerationSync, w as updateUatGenerationSync } from "./merge-sync-DZ9dojJn.js";
6
+ import { A as init_xbrief_index, M as readXBriefDocument, k as findXBriefByIssue } from "./io-B3_AHDfr.js";
7
+ import { S as getConversationByName, _t as getDiscoveredStats, at as aggregateDiscoveredSessionCost, ct as countDiscoveredSessions, ft as findDiscoveredSessions, k as init_conversations, mt as getDiscoveredSessionById, ot as aggregateDiscoveredSessionCostBy, yt as init_discovered_sessions } from "./conversations-DbOs1e9Q.js";
8
+ import { f as isFlywheelGloballyPaused, i as getFlywheelActiveRunId, n as FLYWHEEL_GLOBAL_PAUSE_KEY, o as getSetting, s as init_control_settings, t as FLYWHEEL_ACTIVE_RUN_ID_KEY, w as setSetting } from "./control-settings-aP1ANIlI.js";
9
+ import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-qHJBhy3Z.js";
10
+ import { a as enrichSessions, c as searchSessions, i as CostThresholdError, n as getSessionsFeedFacets, o as embedSessions, r as listSessionsFeed, t as scan } from "./scanner-D2743cp8.js";
11
+ import { t as listSubstrateBugWeights } from "./substrate-bug-weights-service-BH66lhm7.js";
12
+ import { C as writeLatestFlywheelStatus, S as writeFlywheelLaunchMetadata, _ as nextFlywheelRunId, a as loadResumeSessionId, b as resolveLiveFlywheelRunId, c as saveResumeSessionId, d as abortFlywheelRun, g as listFlywheelRuns, l as spawnFlywheelAgent, p as getFlywheelRunDetail, r as isFlywheelDevcontainerRuntime, t as FLYWHEEL_ORCHESTRATOR_AGENT_ID, y as readFlywheelLaunchMetadata } from "./flywheel-DSSpWmqF.js";
13
+ import { t as extractACFromDocument } from "./acceptance-criteria-DOA0KgXx.js";
14
+ import { n as ensureDevcontainerSync, r as init_ensure_devcontainer } from "./ensure-devcontainer-DseivYEy.js";
15
15
  import { isAbsolute, relative, resolve, sep } from "node:path";
16
16
  import { Effect } from "effect";
17
17
  import { existsSync } from "fs";
@@ -31,7 +31,7 @@ init_projects();
31
31
  init_config_yaml();
32
32
  init_tmux();
33
33
  init_merge_sync();
34
- init_vbrief_index();
34
+ init_xbrief_index();
35
35
  init_harness_resolve();
36
36
  init_agents();
37
37
  init_discovered_sessions();
@@ -176,15 +176,15 @@ async function runInline(operation, payload, onProgress) {
176
176
  });
177
177
  }
178
178
  case "getArtifactBySlug": {
179
- const { getArtifactBySlugJob } = await import("./artifact-index-jobs-BOoySTKD.js");
179
+ const { getArtifactBySlugJob } = await import("./artifact-index-jobs-C-xy7Z5v.js");
180
180
  return getArtifactBySlugJob(payload);
181
181
  }
182
182
  case "listArtifactsForWorkspaceOrIssue": {
183
- const { listArtifactsForWorkspaceOrIssueJob } = await import("./artifact-index-jobs-BOoySTKD.js");
183
+ const { listArtifactsForWorkspaceOrIssueJob } = await import("./artifact-index-jobs-C-xy7Z5v.js");
184
184
  return listArtifactsForWorkspaceOrIssueJob(payload);
185
185
  }
186
186
  case "unshareArtifactBySlug": {
187
- const { unshareArtifactBySlugJob } = await import("./artifact-index-jobs-BOoySTKD.js");
187
+ const { unshareArtifactBySlugJob } = await import("./artifact-index-jobs-C-xy7Z5v.js");
188
188
  return unshareArtifactBySlugJob(payload);
189
189
  }
190
190
  }
@@ -424,12 +424,12 @@ async function pauseFlywheelRunForDashboard() {
424
424
  if (before.activeRunId) try {
425
425
  const { readFile } = await import("node:fs/promises");
426
426
  const { join } = await import("node:path");
427
- const { getAgentDir } = await import("./agents-Czz6R57Z.js");
427
+ const { getAgentDir } = await import("./agents-FlIgQ3ql.js");
428
428
  const sessionId = (await readFile(join(getAgentDir(FLYWHEEL_ORCHESTRATOR_AGENT_ID), "session.id"), "utf-8")).trim();
429
429
  if (sessionId) await saveResumeSessionId(before.activeRunId, sessionId);
430
430
  } catch {}
431
431
  await setPaused(true);
432
- await import("./agents-Czz6R57Z.js").then(({ stopAgent }) => Effect.runPromise(stopAgent(FLYWHEEL_ORCHESTRATOR_AGENT_ID)));
432
+ await import("./agents-FlIgQ3ql.js").then(({ stopAgent }) => Effect.runPromise(stopAgent(FLYWHEEL_ORCHESTRATOR_AGENT_ID)));
433
433
  return {
434
434
  before,
435
435
  after: await readGateSnapshot(),
@@ -439,7 +439,7 @@ async function pauseFlywheelRunForDashboard() {
439
439
  async function abortFlywheelRunForDashboard() {
440
440
  const candidate = await getActiveRunId();
441
441
  if (!candidate) return { aborted: await resolveLiveFlywheelRunId() ?? null };
442
- const { stopAgent } = await import("./agents-Czz6R57Z.js");
442
+ const { stopAgent } = await import("./agents-FlIgQ3ql.js");
443
443
  await Effect.runPromise(stopAgent(FLYWHEEL_ORCHESTRATOR_AGENT_ID));
444
444
  await abortFlywheelRun(candidate);
445
445
  return { aborted: candidate };
@@ -1870,7 +1870,7 @@ function canStartUatTrainReconciler() {
1870
1870
  async function getReadySet() {
1871
1871
  const status = await readCurrentFlywheelStatusForDashboard();
1872
1872
  if (!status) return null;
1873
- const { computeMergeQueue, resolveMergeQueuePrUrl } = await import("./flywheel-merge-order-CeBuX0EJ.js");
1873
+ const { computeMergeQueue, resolveMergeQueuePrUrl } = await import("./flywheel-merge-order-C-6zRLvM.js");
1874
1874
  const fromVerbs = (await Effect.runPromise(computeMergeQueue(status.activePipeline, projectRoot(), {
1875
1875
  getPrUrl: resolveMergeQueuePrUrl,
1876
1876
  onIneligible: (issueId, reason) => console.log(`[uat-train] ${issueId} has a merge verb but is not merge-eligible (${reason}) — excluded from the ready set`)
@@ -1896,8 +1896,8 @@ async function getReadySet() {
1896
1896
  */
1897
1897
  async function sweepEligibleFeatures(alreadyIncluded) {
1898
1898
  try {
1899
- const { loadReviewStatuses, mergeGateEligibility } = await import("./review-status-DXeqFpk5.js");
1900
- const { resolveProjectFromIssueSync } = await import("./projects-IRHJIPYC.js");
1899
+ const { loadReviewStatuses, mergeGateEligibility } = await import("./review-status-C6n6-9f_.js");
1900
+ const { resolveProjectFromIssueSync } = await import("./projects-9SkRpES9.js");
1901
1901
  const { execFile } = await import("node:child_process");
1902
1902
  const { promisify } = await import("node:util");
1903
1903
  const execFileAsync = promisify(execFile);
@@ -2029,14 +2029,14 @@ async function loadAcceptanceCriteriaCache(issueIds) {
2029
2029
  acceptanceCriteriaByIssue.delete(upperIssueId);
2030
2030
  }
2031
2031
  try {
2032
- const found = await Effect.runPromise(findVBriefByIssue(root, upperIssueId));
2032
+ const found = await Effect.runPromise(findXBriefByIssue(root, upperIssueId));
2033
2033
  if (!found) {
2034
2034
  acceptanceCriteriaByIssue.delete(upperIssueId);
2035
2035
  cache.set(upperIssueId, []);
2036
2036
  return;
2037
2037
  }
2038
2038
  const { mtimeMs } = await stat(found.path);
2039
- const criteria = extractACFromDocument(await Effect.runPromise(readVBriefDocument(found.path))).map((ac) => ({
2039
+ const criteria = extractACFromDocument(await Effect.runPromise(readXBriefDocument(found.path))).map((ac) => ({
2040
2040
  title: ac.title,
2041
2041
  status: ac.status
2042
2042
  }));
@@ -2131,7 +2131,7 @@ async function postUatGenerationStackPayload(name) {
2131
2131
  }
2132
2132
  async function postUatGenerationPromotePayload(name, firePostMerge) {
2133
2133
  const root = projectRoot();
2134
- const { reviewRecordEligibility } = await import("./flywheel-merge-order-CeBuX0EJ.js");
2134
+ const { reviewRecordEligibility } = await import("./flywheel-merge-order-C-6zRLvM.js");
2135
2135
  const result = await promoteUatGeneration(name, root, {
2136
2136
  git: buildUatPromoteGitDeps(root),
2137
2137
  store: {
@@ -2149,4 +2149,4 @@ async function postUatGenerationPromotePayload(name, firePostMerge) {
2149
2149
  //#endregion
2150
2150
  export { postUatGenerationStackPayload as a, startUatTrainReconciler as c, openFlywheelRunReportForDashboard as d, pauseFlywheelRunForDashboard as f, runDashboardDbJob as g, startFlywheelRunForDashboard as h, postUatGenerationPromotePayload as i, stopUatTrainReconciler as l, resumeFlywheelRunForDashboard as m, getUatCandidatePayload as n, resolveUatProjectRoot as o, readCurrentFlywheelStatusForDashboard as p, getUatGenerationsPayload as r, runUatTrainReconcile as s, canStartUatTrainReconciler as t, abortFlywheelRunForDashboard as u };
2151
2151
 
2152
- //# sourceMappingURL=uat-train-BpLnp7Cx.js.map
2152
+ //# sourceMappingURL=uat-train-CuEn0t9M.js.map
@@ -1,2 +1,2 @@
1
- import { a as postUatGenerationStackPayload, c as startUatTrainReconciler, i as postUatGenerationPromotePayload, l as stopUatTrainReconciler, n as getUatCandidatePayload, o as resolveUatProjectRoot, r as getUatGenerationsPayload, s as runUatTrainReconcile, t as canStartUatTrainReconciler } from "./uat-train-BpLnp7Cx.js";
1
+ import { a as postUatGenerationStackPayload, c as startUatTrainReconciler, i as postUatGenerationPromotePayload, l as stopUatTrainReconciler, n as getUatCandidatePayload, o as resolveUatProjectRoot, r as getUatGenerationsPayload, s as runUatTrainReconcile, t as canStartUatTrainReconciler } from "./uat-train-CuEn0t9M.js";
2
2
  export { canStartUatTrainReconciler, getUatCandidatePayload, getUatGenerationsPayload, postUatGenerationPromotePayload, postUatGenerationStackPayload, resolveUatProjectRoot, runUatTrainReconcile, startUatTrainReconciler, stopUatTrainReconciler };
@@ -1,12 +1,221 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Or as init_errors } from "./config-yaml-Ciyp2mYe.js";
3
- import { f as init_config, m as loadConfigSync } from "./config-CrduXs4a.js";
4
- import { n as init_workspace_config, r as replacePlaceholdersSync } from "./workspace-config-BAAsAv-o.js";
2
+ import { Br as getOverdeckHome, Vr as init_paths, mr as init_errors } from "./config-yaml-DvyMuOle.js";
3
+ import { f as init_config, m as loadConfigSync } from "./config-CCvjQf27.js";
4
+ import { n as init_workspace_config, r as replacePlaceholdersSync } from "./workspace-config-cEGcO6UT.js";
5
+ import { join } from "node:path";
5
6
  import { Effect } from "effect";
6
7
  import "fs";
7
- import { join } from "path";
8
+ import { join as join$1 } from "path";
9
+ import { cpus, loadavg } from "node:os";
10
+ import { mkdir, open, readFile, readdir, unlink } from "node:fs/promises";
8
11
  import { exec } from "child_process";
9
12
  import { promisify } from "util";
13
+ //#region ../../lib/cloister/quality-gate-admission.ts
14
+ function isErrnoException(error) {
15
+ return error instanceof Error && "code" in error;
16
+ }
17
+ function processIsAlive(pid) {
18
+ try {
19
+ process.kill(pid, 0);
20
+ return true;
21
+ } catch (error) {
22
+ return isErrnoException(error) && error.code === "EPERM";
23
+ }
24
+ }
25
+ function delay(ms) {
26
+ return new Promise((resolve) => setTimeout(resolve, ms));
27
+ }
28
+ function cpuTotals() {
29
+ const records = cpus();
30
+ let idle = 0;
31
+ let total = 0;
32
+ for (const cpu of records) {
33
+ idle += cpu.times.idle;
34
+ total += Object.values(cpu.times).reduce((sum, value) => sum + value, 0);
35
+ }
36
+ return {
37
+ idle,
38
+ total,
39
+ cores: Math.max(1, records.length)
40
+ };
41
+ }
42
+ async function sampleQualityGatePressure(sleep = delay) {
43
+ const before = cpuTotals();
44
+ await sleep(250);
45
+ const after = cpuTotals();
46
+ const totalDelta = after.total - before.total;
47
+ const idleDelta = after.idle - before.idle;
48
+ const cpuUtilization = totalDelta > 0 ? (totalDelta - idleDelta) / totalDelta : 0;
49
+ const loadPerCore = loadavg()[0] / after.cores;
50
+ return {
51
+ cpuUtilization,
52
+ loadPerCore,
53
+ pressured: cpuUtilization >= .75 || loadPerCore >= 1
54
+ };
55
+ }
56
+ function admissionRoot(rootDir) {
57
+ return rootDir ?? join(getOverdeckHome(), "verification-workers", "admission");
58
+ }
59
+ function ownerPath(root) {
60
+ return join(root, "owner.json");
61
+ }
62
+ function breakerPath(root) {
63
+ return join(root, "owner.break");
64
+ }
65
+ function ticketPath(root, ticketId) {
66
+ return join(root, `waiter-${ticketId}.json`);
67
+ }
68
+ async function writeExclusive(path, value) {
69
+ const file = await open(path, "wx", 384);
70
+ try {
71
+ await file.writeFile(`${JSON.stringify(value)}\n`, "utf8");
72
+ } finally {
73
+ await file.close();
74
+ }
75
+ }
76
+ async function readJson(path) {
77
+ try {
78
+ return JSON.parse(await readFile(path, "utf8"));
79
+ } catch {
80
+ return null;
81
+ }
82
+ }
83
+ async function unlinkIfExists(path) {
84
+ try {
85
+ await unlink(path);
86
+ } catch (error) {
87
+ if (!isErrnoException(error) || error.code !== "ENOENT") throw error;
88
+ }
89
+ }
90
+ function sameOwner(left, right) {
91
+ return left?.ticketId === right.ticketId && left.pid === right.pid && left.acquiredAt === right.acquiredAt;
92
+ }
93
+ function ownerIsStale(owner, now, staleMs, isProcessAlive) {
94
+ return now - owner.acquiredAt > staleMs || !isProcessAlive(owner.pid);
95
+ }
96
+ async function acquireBreaker(root, now, staleMs, isProcessAlive) {
97
+ const path = breakerPath(root);
98
+ for (let attempt = 0; attempt < 2; attempt++) try {
99
+ await writeExclusive(path, {
100
+ pid: process.pid,
101
+ acquiredAt: now()
102
+ });
103
+ return true;
104
+ } catch (error) {
105
+ if (!isErrnoException(error) || error.code !== "EEXIST") throw error;
106
+ const existing = await readJson(path);
107
+ if (existing && now() - existing.acquiredAt <= staleMs && isProcessAlive(existing.pid)) return false;
108
+ await unlinkIfExists(path);
109
+ }
110
+ return false;
111
+ }
112
+ async function clearStaleOwner(root, observed, now, staleMs, isProcessAlive) {
113
+ if (!await acquireBreaker(root, now, staleMs, isProcessAlive)) return;
114
+ try {
115
+ const current = await readJson(ownerPath(root));
116
+ if (!observed && !current || observed && sameOwner(current, observed) && ownerIsStale(observed, now(), staleMs, isProcessAlive)) await unlinkIfExists(ownerPath(root));
117
+ } finally {
118
+ await unlinkIfExists(breakerPath(root));
119
+ }
120
+ }
121
+ async function listLiveTickets(root, isProcessAlive) {
122
+ const entries = await readdir(root);
123
+ const tickets = [];
124
+ for (const entry of entries) {
125
+ if (!entry.startsWith("waiter-") || !entry.endsWith(".json")) continue;
126
+ const path = join(root, entry);
127
+ const ticket = await readJson(path);
128
+ if (!ticket || typeof ticket.ticketId !== "string" || !Number.isFinite(ticket.createdAt)) {
129
+ await unlinkIfExists(path);
130
+ continue;
131
+ }
132
+ if (!isProcessAlive(ticket.pid)) {
133
+ await unlinkIfExists(path);
134
+ continue;
135
+ }
136
+ tickets.push(ticket);
137
+ }
138
+ return tickets.sort((left, right) => left.createdAt - right.createdAt || left.ticketId.localeCompare(right.ticketId));
139
+ }
140
+ async function acquireQualityGateAdmission(request, deps = {}) {
141
+ const root = admissionRoot(deps.rootDir);
142
+ const now = deps.now ?? Date.now;
143
+ const sleep = deps.sleep ?? delay;
144
+ const pid = deps.pid ?? process.pid;
145
+ const isProcessAlive = deps.isProcessAlive ?? processIsAlive;
146
+ const samplePressure = deps.samplePressure ?? (() => sampleQualityGatePressure(sleep));
147
+ const pollMs = deps.pollMs ?? 1e3;
148
+ const settleMs = deps.settleMs ?? 1500;
149
+ const staleMs = deps.staleMs ?? 15e5;
150
+ await mkdir(root, { recursive: true });
151
+ const createdAt = now();
152
+ const ticketId = `${String(createdAt).padStart(16, "0")}-${String(pid).padStart(10, "0")}-${String(ticketSequence++).padStart(6, "0")}`;
153
+ const ticket = {
154
+ ...request,
155
+ ticketId,
156
+ pid,
157
+ createdAt
158
+ };
159
+ const ownTicketPath = ticketPath(root, ticketId);
160
+ await writeExclusive(ownTicketPath, ticket);
161
+ try {
162
+ for (;;) {
163
+ if ((await listLiveTickets(root, isProcessAlive))[0]?.ticketId !== ticketId) {
164
+ await sleep(pollMs);
165
+ continue;
166
+ }
167
+ const observedOwner = await readJson(ownerPath(root));
168
+ if (observedOwner) {
169
+ if (ownerIsStale(observedOwner, now(), staleMs, isProcessAlive)) await clearStaleOwner(root, observedOwner, now, staleMs, isProcessAlive);
170
+ await sleep(pollMs);
171
+ continue;
172
+ }
173
+ if ((await samplePressure()).pressured) {
174
+ await sleep(pollMs);
175
+ continue;
176
+ }
177
+ const owner = {
178
+ ...ticket,
179
+ acquiredAt: now()
180
+ };
181
+ try {
182
+ await writeExclusive(ownerPath(root), owner);
183
+ } catch (error) {
184
+ if (isErrnoException(error) && error.code === "EEXIST") {
185
+ if (!await readJson(ownerPath(root))) await clearStaleOwner(root, null, now, staleMs, isProcessAlive);
186
+ await sleep(pollMs);
187
+ continue;
188
+ }
189
+ throw error;
190
+ }
191
+ await sleep(settleMs);
192
+ if ((await samplePressure()).pressured) {
193
+ if (sameOwner(await readJson(ownerPath(root)), owner)) await unlinkIfExists(ownerPath(root));
194
+ await sleep(pollMs);
195
+ continue;
196
+ }
197
+ await unlinkIfExists(ownTicketPath);
198
+ let released = false;
199
+ return {
200
+ admittedAt: new Date(owner.acquiredAt).toISOString(),
201
+ async release() {
202
+ if (released) return;
203
+ released = true;
204
+ if (sameOwner(await readJson(ownerPath(root)), owner)) await unlinkIfExists(ownerPath(root));
205
+ }
206
+ };
207
+ }
208
+ } catch (error) {
209
+ await unlinkIfExists(ownTicketPath);
210
+ throw error;
211
+ }
212
+ }
213
+ var ticketSequence;
214
+ var init_quality_gate_admission = __esmMin((() => {
215
+ init_paths();
216
+ ticketSequence = 0;
217
+ }));
218
+ //#endregion
10
219
  //#region ../../lib/cloister/validation.ts
11
220
  /**
12
221
  * Merge Validation - Validation utilities for merge completeness
@@ -71,12 +280,18 @@ async function runQualityGatesPromise(gates, projectPath, phase = "pre_push", op
71
280
  for (const [name, gate] of Object.entries(gates)) {
72
281
  if ((gate.phase || "pre_push") !== phase) continue;
73
282
  const required = gate.required !== false;
74
- const cwd = gate.path ? join(projectPath, gate.path) : projectPath;
283
+ const cwd = gate.path ? join$1(projectPath, gate.path) : projectPath;
75
284
  console.log(`[quality-gate] Running "${name}" (${required ? "required" : "optional"}) in ${cwd}`);
76
285
  opts.onLog?.(`Running gate "${name}"${required ? "" : " (optional)"}…`);
77
286
  opts.onGateStart?.(name);
78
287
  const startTime = Date.now();
79
288
  if (gate.type === "http_health") {
289
+ opts.onAdmissionPhase?.({
290
+ phase: "running",
291
+ gateName: name,
292
+ attempt: 1,
293
+ admittedAt: (/* @__PURE__ */ new Date()).toISOString()
294
+ });
80
295
  const result = await runHttpHealthGate(name, gate, required);
81
296
  results.push(result);
82
297
  opts.onGateResult?.(result);
@@ -138,7 +353,36 @@ async function runQualityGatesPromise(gates, projectPath, phase = "pre_push", op
138
353
  let passOutput = "";
139
354
  for (let attempt = 1; attempt <= maxAttempts; attempt++) {
140
355
  let gatePgid;
356
+ let admission = null;
141
357
  try {
358
+ if (!isRemote) {
359
+ const identity = `${opts.issueId ?? "unscoped"} gate="${name}" attempt=${attempt}/${maxAttempts} workspace=${cwd}`;
360
+ console.log(`[quality-gate] Queued for CPU admission: ${identity}`);
361
+ opts.onLog?.(`Queued ${name} for CPU admission…`);
362
+ opts.onAdmissionPhase?.({
363
+ phase: "queued",
364
+ gateName: name,
365
+ attempt
366
+ });
367
+ admission = await acquireQualityGateAdmission({
368
+ issueId: opts.issueId,
369
+ workspacePath: cwd,
370
+ gateName: name,
371
+ attempt
372
+ });
373
+ console.log(`[quality-gate] Admitted: ${identity}`);
374
+ opts.onAdmissionPhase?.({
375
+ phase: "running",
376
+ gateName: name,
377
+ attempt,
378
+ admittedAt: admission.admittedAt
379
+ });
380
+ } else opts.onAdmissionPhase?.({
381
+ phase: "running",
382
+ gateName: name,
383
+ attempt,
384
+ admittedAt: (/* @__PURE__ */ new Date()).toISOString()
385
+ });
142
386
  const useHostCwd = !isRemote && !(gate.container && gate.container_name);
143
387
  const env = buildQualityGateEnv(gate.env);
144
388
  const execPromise = execAsync(resolvedCommand, {
@@ -154,18 +398,23 @@ async function runQualityGatesPromise(gates, projectPath, phase = "pre_push", op
154
398
  execPromise.child.stderr?.on("data", (chunk) => opts.onGateOutput(name, String(chunk)));
155
399
  }
156
400
  const { stdout, stderr } = await execPromise;
157
- killGateProcessGroup(gatePgid);
158
401
  passedGate = true;
159
402
  passOutput = formatGateOutput(stdout, stderr);
160
- break;
161
403
  } catch (error) {
162
- killGateProcessGroup(gatePgid);
163
404
  lastError = error;
164
405
  if (attempt < maxAttempts) {
165
406
  console.log(`[quality-gate] ✗ "${name}" failed attempt ${attempt}/${maxAttempts} — retrying (gate declares retry: ${gate.retry})`);
166
407
  opts.onLog?.(`↻ ${name} failed attempt ${attempt}/${maxAttempts} — retrying`);
167
408
  }
409
+ } finally {
410
+ killGateProcessGroup(gatePgid);
411
+ try {
412
+ await admission?.release();
413
+ } catch (error) {
414
+ console.warn(`[quality-gate] Failed to release CPU admission for ${opts.issueId ?? "unscoped"} gate="${name}": ${error instanceof Error ? error.message : String(error)}`);
415
+ }
168
416
  }
417
+ if (passedGate) break;
169
418
  }
170
419
  if (passedGate) {
171
420
  const durationMs = Date.now() - startTime;
@@ -253,6 +502,7 @@ var init_validation = __esmMin((() => {
253
502
  init_workspace_config();
254
503
  init_config();
255
504
  init_errors();
505
+ init_quality_gate_admission();
256
506
  execAsync = promisify(exec);
257
507
  DASHBOARD_RUNTIME_ENV_KEYS = [
258
508
  "API_PORT",
@@ -272,4 +522,4 @@ var init_validation = __esmMin((() => {
272
522
  //#endregion
273
523
  export { runQualityGates as i, init_validation as n, killAllGateProcessGroups as r, DEFAULT_GATES as t };
274
524
 
275
- //# sourceMappingURL=validation-BA4e5EGm.js.map
525
+ //# sourceMappingURL=validation-B5JxoPUS.js.map
@@ -1,3 +1,3 @@
1
- import { i as runQualityGates, n as init_validation, r as killAllGateProcessGroups } from "./validation-BA4e5EGm.js";
1
+ import { i as runQualityGates, n as init_validation, r as killAllGateProcessGroups } from "./validation-B5JxoPUS.js";
2
2
  init_validation();
3
3
  export { killAllGateProcessGroups, runQualityGates };
@@ -53,4 +53,4 @@ function readVerificationArtifact(workspacePath) {
53
53
  //#endregion
54
54
  export { verificationArtifactPath as n, writeVerificationArtifact as r, readVerificationArtifact as t };
55
55
 
56
- //# sourceMappingURL=verification-artifact-Dr_0g9nb.js.map
56
+ //# sourceMappingURL=verification-artifact-BcnIbigL.js.map
@@ -1,2 +1,2 @@
1
- import { t as readVerificationArtifact } from "./verification-artifact-Dr_0g9nb.js";
1
+ import { t as readVerificationArtifact } from "./verification-artifact-BcnIbigL.js";
2
2
  export { readVerificationArtifact };