@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.
- package/drizzle/overdeck/0000_overdeck_init.sql +2 -0
- package/package.json +1 -1
- package/server/{acceptance-criteria-BH7ac_1G.js → acceptance-criteria-DDCnXF58.js} +5 -5
- package/server/{advancing-selfheal-cSvXNZLZ.js → advancing-selfheal-BVwW4qRn.js} +6 -6
- package/server/{agent-gc-Dj2gncak.js → agent-gc-CHcnvonI.js} +4 -4
- package/server/agent-state-Bc3tzUC8.js +3 -0
- package/server/{agent-state-service-DistflNn.js → agent-state-service-BsgWxZuB.js} +5 -5
- package/server/{agent-state-service-CsQ07Pxe.js → agent-state-service-D5UGKIJL.js} +1 -1
- package/server/{agents-DXdHmRTC.js → agents-EbI0zCJl.js} +4 -4
- package/server/agents-wi9NWzs2.js +3 -0
- package/server/{archive-planning-Cp_DC1j-.js → archive-planning-BZDgzoEj.js} +1 -1
- package/server/{archive-planning-BvDuWNMo.js → archive-planning-Du25Jtst.js} +30 -6
- package/server/{artifact-index-jobs-CDBFL4OU.js → artifact-index-jobs-CbEDfCDu.js} +2 -2
- package/server/assemble-J2ZZ2C15.js +339 -0
- package/server/{backlog-auto-trigger-DmA1IbYf.js → backlog-auto-trigger-2R2jog7n.js} +3 -3
- package/server/{behavior-CGj16clS.js → behavior-B3exJ42O.js} +2 -2
- package/server/{briefing-freshness-C12WgkaB.js → briefing-freshness-D1wzUIWv.js} +2 -2
- package/server/{build-info-BRpqQvNd.js → build-info-CZk_TITh.js} +1 -1
- package/server/{build-info-NU3KbXYw.js → build-info-Ie_D0_BT.js} +3 -3
- package/server/{checkpoint-manager-CTPjAmtH.js → checkpoint-manager-BI1Wxoku.js} +2 -2
- package/server/{checkpoint-manager-rOgT98WY.js → checkpoint-manager-DwbQoqrC.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-B5jFNi2G.js → checkpoints-BJIs5QIA.js} +1 -1
- package/server/{checkpoints-BJum14fs.js → checkpoints-CQB1h765.js} +2 -2
- package/server/{claude-hooks-provision-BhwWK-TQ.js → claude-hooks-provision-8Ngo8TpT.js} +1 -1
- package/server/{claude-hooks-provision-D7p5WcKZ.js → claude-hooks-provision-D8GXF3_s.js} +2 -2
- package/server/{claude-permissions-nSFKH78M.js → claude-permissions-DNWEVV6z.js} +2 -2
- package/server/{claude-settings-overlay-BI_UIke0.js → claude-settings-overlay-CEdaqpWI.js} +2 -2
- package/server/{claude-settings-overlay-DHBwjS1X.js → claude-settings-overlay-DWy-Bb4Y.js} +1 -1
- package/server/cli-B86rejVV.js +3 -0
- package/server/{cli-CbKNkFE5.js → cli-RoOx5DUf.js} +9 -9
- package/server/{cliproxy-Brf_5MuG.js → cliproxy-C8a1vtTU.js} +2 -2
- package/server/{cliproxy-bONZDBbC.js → cliproxy-fHfIeiGd.js} +1 -1
- package/server/{close-issue-CxReRxIc.js → close-issue-DoOifFIK.js} +5 -5
- package/server/{closed-issue-reaper-CQ3kqha7.js → closed-issue-reaper-Bk3SU4RC.js} +9 -9
- package/server/{closed-issue-reaper-DXP2Xyv3.js → closed-issue-reaper-CktPXo8m.js} +1 -1
- package/server/{codex-CbmztVcc.js → codex-BZXGhUVB.js} +27 -8
- package/server/codex-GcHuUF-k.js +3 -0
- package/server/{codex-parser-jl8AeAmB.js → codex-parser-CFZ1_1Jl.js} +2 -2
- package/server/{config-q4Gvd8dq.js → config-BZ0sHTju.js} +2 -2
- package/server/{config-DeTsoZdR.js → config-CKxYiCmX.js} +2 -2
- package/server/{config-BJKocXKd.js → config-DzV30TOm.js} +1 -1
- package/server/{config-yaml-ig8Nwtiw.js → config-yaml-DySPNmKN.js} +77 -194
- package/server/{conflict-gate-CFqPVxEg.js → conflict-gate-BaCVrH-N.js} +3 -3
- package/server/{conflict-gate-CHU9K1vU.js → conflict-gate-BhAY7TUd.js} +1 -1
- package/server/context-layers-BrPmE__h.js +4 -0
- package/server/context-layers-igZ4FI4_.js +37 -0
- package/server/{control-settings-D_odMIaC.js → control-settings-BQp7_4uD.js} +4 -4
- package/server/{conversation-compaction-B6YSRLda.js → conversation-compaction-CgrR8YYp.js} +8 -8
- package/server/{conversation-compaction-CN4-5YYt.js → conversation-compaction-eQB5CkOe.js} +1 -1
- package/server/{conversation-service-Dq33SYEj.js → conversation-service-BLd3MYsG.js} +1 -1
- package/server/{conversation-service-C3avRVEr.js → conversation-service-DPJ71F33.js} +329 -19
- package/server/{conversations-bYpM9-kZ.js → conversations-6AfUfbwc.js} +5 -5
- package/server/{conversations-H9if0bCQ.js → conversations-CAsJF9kh.js} +1 -1
- package/server/{cost-Codk1pc2.js → cost-B2ddP6wq.js} +18 -2
- package/server/{cost-wH46-WsJ.js → cost-R-m6Yi-W.js} +3 -3
- package/server/{cost-sync-D_cre6WM.js → cost-sync-BsN6ER0n.js} +3 -3
- package/server/{dag-CJpgf9A3.js → dag-B1ucnjDU.js} +9 -9
- package/server/{dangerous-git-ops-D6AF-Hg_.js → dangerous-git-ops-BXqeWVSf.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/{deacon-CkT_kznS.js → deacon-CU_cAYSR.js} +406 -607
- package/server/{deacon-B8HbQdqU.js → deacon-kiQrb4ZT.js} +3 -3
- package/server/{deacon-nudge-log-D6K9K-rE.js → deacon-nudge-log-6wVqAaqz.js} +3 -3
- package/server/{deacon-swarm-BryRr6AO.js → deacon-swarm-BXZZ1Z2-.js} +17 -17
- package/server/deacon-swarm-C-GwfjJy.js +2 -0
- package/server/deacon.js +8 -8
- package/server/{deploy-patrol-1IrZxicY.js → deploy-patrol-AiFoP8dw.js} +136 -19
- package/server/{deploy-window-wDf4UgHt.js → deploy-window-C3F-tihF.js} +77 -10
- package/server/{deploy-window-7ZYHh7Zp.js → deploy-window-DkZraDyj.js} +1 -1
- package/server/{dev-supervisor-C7p9kEpc.js → dev-supervisor-bcOWqdQE.js} +2 -2
- package/server/{devcontainer-renderer-CNmQy0pL.js → devcontainer-renderer-_d6XhyND.js} +3 -3
- package/server/dist-Bzy0y69j.js +3 -0
- package/server/{dist-D-Ed5yVw.js → dist-Cb_0uvpS.js} +1 -1
- package/server/{docker-BCZ89M9X.js → docker-DcMTFTUC.js} +2 -2
- package/server/{dod-DbJLYcHv.js → dod-C6n9RV3G.js} +1 -1
- package/server/{ensure-devcontainer-Cs6W9Yzj.js → ensure-devcontainer-BZgOhRo7.js} +1 -1
- package/server/{ensure-devcontainer-V5JWaAva.js → ensure-devcontainer-DNi-ono3.js} +4 -4
- package/server/{esm-shims-dTeNdq7X.js → esm-shims-OSHAYaS1.js} +1 -1
- package/server/{event-store-TnWdydfB.js → event-store-CQL6NeqB.js} +3 -3
- package/server/{event-store-CpBGsO6_.js → event-store-EV2cMiXj.js} +1 -1
- package/server/{events-Dsuv6qyB.js → events-BTdrdEq8.js} +1 -1
- package/server/{events-DSUdR-04.js → events-DTfAe4My.js} +3 -3
- package/server/{factory-BMrK4TrE.js → factory-CFibJuaw.js} +50 -13
- package/server/{feature-registry-population-B-CI9hgE.js → feature-registry-population-DKZFMbFt.js} +4 -4
- package/server/{feature-registry-storage-B972ph_A.js → feature-registry-storage-BdPuLcBX.js} +2 -2
- package/server/{features-Bc-Bmiye.js → features-ez2271oH.js} +2 -2
- package/server/{feedback-target-DZ-iAnAa.js → feedback-target-7mqqwrX6.js} +7 -7
- package/server/{feedback-target-DS6NUuSs.js → feedback-target-CoFDHiM8.js} +1 -1
- package/server/{feedback-writer-BXP6g75N.js → feedback-writer-CY5L1lB7.js} +6 -5
- package/server/{feedback-writer-Bx5z11mF.js → feedback-writer-D3a22RCd.js} +1 -1
- package/server/flywheel-DHrgCphM.js +1084 -0
- package/server/flywheel-DzGtWnJ1.js +477 -0
- package/server/flywheel-SVF02Jpq.js +2 -0
- package/server/{flywheel-merge-order-CTgHeg-W.js → flywheel-merge-order-UU0tiUld.js} +10 -9
- package/server/{flywheel-merge-order-CNKAY489.js → flywheel-merge-order-UUcsCDb6.js} +1 -1
- package/server/{forge-B1S_KZv4.js → forge-CNFnyqps.js} +2 -2
- package/server/forge-DXnS_YFH.js +2 -0
- package/server/{from-DpwQ-sc3.js → from-kNxT0bZC.js} +1 -1
- package/server/{fts-db-DmAcuCkV.js → fts-db-CE46vDkZ.js} +2 -2
- package/server/{fts-operations-7d_RkmWp.js → fts-operations-CqY6zl-i.js} +2 -2
- package/server/{git-utils-Cc3FHDKd.js → git-utils-CRw2zLPC.js} +68 -3
- package/server/git-utils-D0_yhCgF.js +3 -0
- package/server/{github-app-CDPtGF7J.js → github-app-C3QrAUd0.js} +27 -8
- package/server/{github-app-CU14oYzP.js → github-app-ClZ2lk8D.js} +1 -1
- package/server/{github-client-XjTJbBm7.js → github-client-BnIsSrEN.js} +2 -2
- package/server/{github-client-CwBZZ3t7.js → github-client-DfQYVUaw.js} +1 -1
- package/server/{github-pr-lookup-CFGeVhqv.js → github-pr-lookup-D16NGsSO.js} +2 -2
- package/server/{harness-binary-B2CTcD84.js → harness-binary-DPUi-Pv8.js} +32 -6
- package/server/{harness-resolve-D5FVQTmy.js → harness-resolve-3lNZkyT4.js} +18 -9
- package/server/{health-events-DREeevle.js → health-events-BBcTYQKU.js} +2 -2
- package/server/{health-events-C1whmd58.js → health-events-BDOHby5Q.js} +1 -1
- package/server/{hooks-yxRsjk-z.js → hooks-CKZgXlJb.js} +2 -2
- package/server/{hooks-B-HItBiS.js → hooks-DPVX1rwQ.js} +1 -1
- package/server/{hume-Dz_OymXE.js → hume-Cz8igP9E.js} +2 -2
- package/server/hume-ccTf4wTX.js +3 -0
- package/server/{idle-stack-reaper-DrCv0OAG.js → idle-stack-reaper-CuLF0j2H.js} +1 -1
- package/server/{idle-stack-reaper-Yf34xXxY.js → idle-stack-reaper-DDIRwxUY.js} +2 -2
- package/server/{in-flight-guard-BoWm66Kh.js → in-flight-guard-CAAkqPLu.js} +2 -2
- package/server/{infra-D4iNWMA5.js → infra-BEqFxlJc.js} +14 -4
- package/server/{injection-D7T75Pye.js → injection-C8aiVJrF.js} +191 -183
- package/server/{injection-BVNa4MQW.js → injection-CPUIqNhI.js} +1 -1
- package/server/{inspect-agent-BXCgNeZ4.js → inspect-agent-BLuJ1AkT.js} +137 -81
- package/server/inspect-agent-Brtz0URj.js +2 -0
- package/server/{internal-token-C9DdEOKY.js → internal-token-BrcU6qfe.js} +1 -1
- package/server/{internal-token-CXsfxslp.js → internal-token-s0-oKybJ.js} +2 -2
- package/server/{io-DQR9PMgS.js → io-C9kF1wtJ.js} +160 -184
- package/server/{issue-closed-DtmJM0D0.js → issue-closed-CDJk4pIp.js} +7 -7
- package/server/{issue-lifecycle-8PSS9Anq.js → issue-lifecycle-B8sZHVHh.js} +1 -1
- package/server/{issue-lifecycle-CeyW_HoD.js → issue-lifecycle-ojZAzDBP.js} +22 -22
- package/server/{issue-service-singleton-DBZabEl7.js → issue-service-singleton-BvJ09SaR.js} +1 -1
- package/server/{issue-service-singleton-D_RVYBuL.js → issue-service-singleton-Yx5DdmVJ.js} +8 -8
- package/server/{issues-pDW9VUNz.js → issues-BMmP_77e.js} +2 -2
- package/server/{jsonl-parser-C3HVNR5d.js → jsonl-parser-BXSlHwEh.js} +3 -3
- package/server/{label-cleanup-DPwiZlWo.js → label-cleanup-B0UJwnv5.js} +3 -3
- package/server/{label-reconciler-Df1ZduPH.js → label-reconciler-B4iOAjlC.js} +4 -4
- package/server/{launcher-generator-COgR2By1.js → launcher-generator-BBWG_SiS.js} +105 -10
- package/server/{lifecycle-io-taIb0PoH.js → lifecycle-io-BREGpnLk.js} +37 -37
- package/server/lifecycle-io-DPo7x11I.js +3 -0
- package/server/{lifecycle-CtPDcZ9u.js → lifecycle-xmBfK2GJ.js} +6 -6
- package/server/lifecycle-yPd___5E.js +121 -0
- package/server/{linear-client-DsFkIxee.js → linear-client-BsuUvkdA.js} +2 -2
- package/server/{linear-client-YwZMDIwQ.js → linear-client-CTskEeT_.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-BwsyNRJV.js → merge-B1DiziGU.js} +1 -1
- package/server/{merge-C1t-bspg.js → merge-CefQNAnq.js} +3 -3
- package/server/{merge-agent-DDiIjzk-.js → merge-agent-4WOWlSYA.js} +28 -28
- package/server/{merge-agent-B-SnXOoc.js → merge-agent-CKkgIBPB.js} +1 -1
- package/server/{merge-batch-Byt-QnEl.js → merge-batch-ClFn2T-y.js} +1 -1
- package/server/merge-ops-CR44oU9-.js +2 -0
- package/server/{merge-rebase-Cm6fXaZN.js → merge-rebase-BfaTyXsw.js} +2 -2
- package/server/merge-set-DJ8-UErs.js +83 -0
- package/server/{merge-set-6LEglm6o.js → merge-set-bUqbm3yc.js} +1 -1
- package/server/{merge-sync-B95_4in_.js → merge-sync-BJYeOODr.js} +1 -1
- package/server/{merge-sync-Do8_q32h.js → merge-sync-VPV28g0g.js} +2 -2
- package/server/{merge-train-CKana8EH.js → merge-train-CHopycP0.js} +3 -3
- package/server/{merge-train-deps-BgmqwIfA.js → merge-train-deps-D1cOZzy2.js} +4 -4
- package/server/{merge-verification-CqnUzGEK.js → merge-verification-BkaOqPsw.js} +4 -4
- package/server/{multipart-parser-tdOQDJ3o.js → multipart-parser-duPAfSBw.js} +2 -2
- package/server/{no-resume-mode-BWOSZjWd.js → no-resume-mode-Nw29vaFb.js} +11 -8
- package/server/node_modules/.package-lock.json +8 -8
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
- package/server/node_modules/undici/README.md +5 -0
- package/server/node_modules/undici/docs/docs/api/Client.md +4 -0
- package/server/node_modules/undici/docs/docs/api/Dispatcher.md +6 -0
- package/server/node_modules/undici/docs/docs/api/Interceptors.md +59 -0
- package/server/node_modules/undici/docs/docs/api/MockAgent.md +27 -0
- package/server/node_modules/undici/docs/docs/api/MockPool.md +28 -1
- package/server/node_modules/undici/docs/docs/index.md +5 -0
- package/server/node_modules/undici/lib/core/request.js +1 -1
- package/server/node_modules/undici/lib/core/util.js +6 -1
- package/server/node_modules/undici/lib/dispatcher/agent.js +3 -3
- package/server/node_modules/undici/lib/dispatcher/client-h1.js +31 -6
- package/server/node_modules/undici/lib/dispatcher/client-h2.js +34 -43
- package/server/node_modules/undici/lib/handler/cache-handler.js +93 -5
- package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +10 -0
- package/server/node_modules/undici/lib/handler/redirect-handler.js +5 -2
- package/server/node_modules/undici/lib/handler/retry-handler.js +6 -4
- package/server/node_modules/undici/lib/interceptor/cache.js +21 -4
- package/server/node_modules/undici/lib/interceptor/decompress.js +4 -0
- package/server/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
- package/server/node_modules/undici/lib/mock/mock-utils.js +39 -10
- package/server/node_modules/undici/lib/util/cache.js +49 -7
- package/server/node_modules/undici/lib/web/fetch/body.js +2 -1
- package/server/node_modules/undici/lib/web/fetch/response.js +1 -3
- package/server/node_modules/undici/package.json +2 -2
- package/server/node_modules/undici/types/client.d.ts +2 -2
- package/server/node_modules/undici/types/dispatcher.d.ts +3 -3
- package/server/node_modules/undici/types/mock-interceptor.d.ts +5 -1
- package/server/{orphan-proposed-reconciler-xklgvNA7.js → orphan-proposed-reconciler-BvKkWMJQ.js} +15 -13
- package/server/{orphan-proposed-reconciler-DSvsJ5M7.js → orphan-proposed-reconciler-CTSGcK8p.js} +1 -1
- package/server/package-lock.json +9 -9
- package/server/package.json +1 -1
- package/server/{pan-dir-DOcf6ug3.js → pan-dir-B0c3w0Ya.js} +78 -58
- package/server/{paths-DooHpt9p.js → paths-D-xWGHdh.js} +2 -2
- package/server/{pickup-CaskQ7j6.js → pickup-DUCLWrJY.js} +17 -16
- package/server/{pipeline-membership-1LGRjo-k.js → pipeline-membership-mY3GprlK.js} +186 -67
- package/server/{pipeline-notifier-CZsrU_nj.js → pipeline-notifier-BJr8gQX6.js} +1 -1
- package/server/{pipeline-notifier-B6FVsYF9.js → pipeline-notifier-BXkJzDC4.js} +2 -2
- package/server/{project-pipelines-CtNG_rvs.js → project-pipelines-C0MWUeCU.js} +2 -2
- package/server/project-repos-B6GycDh9.js +94 -0
- package/server/project-repos-DXKQsc_m.js +3 -0
- package/server/projects-vjjcmiN8.js +3 -0
- package/server/{prompts-EvhMeeHG.js → prompts-DxzFXuLl.js} +2 -2
- package/server/{providers-BDDPULlp.js → providers-qQAwGQDW.js} +7 -7
- package/server/{providers-DNSQqy2V.js → providers-u4Ga0jOr.js} +1 -1
- package/server/public/assets/{chunk-BO2N2NFS-sym_ufXe.js → chunk-BO2N2NFS-BamJdinX.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-CQJPBNBu.js → diagram-OG6HWLK6-DfOB8-w4.js} +1 -1
- package/server/public/assets/{dist-DukGS2YZ.js → dist-ByIuzMQW.js} +3 -3
- package/server/public/assets/{dist-Bio7THQU.js → dist-D7zYSEA6.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-D4lWwte3.js → ganttDiagram-6RSMTGT7-EdmRyXL3.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-CaLboCt5.js → highlighted-body-OFNGDK62-MerOfTX8.js} +1 -1
- package/server/public/assets/{index-Bwejq-5s.js → index-CWeMerGO.js} +147 -144
- package/server/public/assets/index-CenuJ3Cw.css +1 -0
- package/server/public/assets/{linear-qUWmMZ-c.js → linear-BBbArIcK.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-C4zYulEm.js → pieDiagram-4H26LBE5-BKIddiJN.js} +1 -1
- package/server/public/assets/{prod-C8VtLuWC.js → prod-B8vYiu52.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-qP04zyZC.js → quadrantDiagram-W4KKPZXB-D6RtoULk.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-eMPTX_cG.js → sankeyDiagram-5OEKKPKP-CLrCedZX.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-Dme1PIt6.js → xychartDiagram-2RQKCTM6-hznR8DYl.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-By_BteaL.js → pull-requests-7N8WKseP.js} +1 -1
- package/server/{pull-requests-8z2N1UOV.js → pull-requests-_lHueOHW.js} +13 -11
- package/server/{queries-ZABd5aXP.js → queries-CjNIf-Ub.js} +1200 -201
- package/server/{rally-i_goYmiA.js → rally-CyWT_lNO.js} +3 -3
- package/server/{rally-api-DqKqIMNR.js → rally-api-C8e_1JRi.js} +2 -2
- package/server/{rally-api-xHazRk0d.js → rally-api-ClOSd-Tt.js} +1 -1
- package/server/{rally-client-COYz1vYR.js → rally-client-lc-nokqr.js} +4 -4
- package/server/{rally-client-CGWEHaPd.js → rally-client-sgtVqzNU.js} +1 -1
- package/server/rally-zhhtXuDP.js +3 -0
- package/server/{reap-terminal-sessions-CaMkFOIH.js → reap-terminal-sessions-7KeHv1R1.js} +1 -1
- package/server/{reap-terminal-sessions-DG9eiMVz.js → reap-terminal-sessions-BtHPo6Xc.js} +1 -1
- package/server/rebuild-stack-CFvcBHsS.js +4 -0
- package/server/{rebuild-stack-JUm0jqYP.js → rebuild-stack-lwtsW0GO.js} +26 -35
- package/server/{reconstruct-cache-wU79aCee.js → reconstruct-cache-C3Ui7ojV.js} +6 -6
- package/server/record-CN0pj4_5.js +3 -0
- package/server/{record-update-D3N6WMFR.js → record-update-bLJxAXH4.js} +1 -1
- package/server/record-update-dE1Aw83j.js +310 -0
- package/server/{recovery-trip-DkzJSej9.js → recovery-trip-BvRWfUXM.js} +2 -2
- package/server/{release-engine-DMINVN8S.js → release-engine-Cx48W7z8.js} +5 -5
- package/server/{release-set-DeUSOEHy.js → release-set-CQfuN9-v.js} +3 -3
- package/server/{remote-b-c5bOce.js → remote-C_2hasl7.js} +3 -3
- package/server/{remote-Dr5kGYSZ.js → remote-ChgimyYa.js} +3 -3
- package/server/{remote-agents-Ct_WOyke.js → remote-agents-By1ige5O.js} +6 -6
- package/server/{remote-agents-D6O_zETW.js → remote-agents-CA3Ihlxj.js} +1 -1
- package/server/{remote-completion-Dca3hAaa.js → remote-completion-fVe9e_3u.js} +12 -12
- package/server/resume-BFv1PGpA.js +3 -0
- package/server/{review-agent-CThvgK2r.js → review-agent-CIGOQYBD.js} +29 -25
- package/server/{review-agent-CCum8sGe.js → review-agent-DNboMyW4.js} +1 -1
- package/server/{review-artifacts-CXywD0F2.js → review-artifacts-nRDPuMxd.js} +5 -5
- package/server/{review-context-OYfKUprb.js → review-context-2uj-YQ8J.js} +70 -26
- package/server/review-status-btEYlaxA.js +3 -0
- package/server/{review-status-enrichment-crNAtIpL.js → review-status-enrichment-Dci-ZwEt.js} +3 -3
- package/server/{review-status-DFRjDFef.js → review-status-kZj_KyCk.js} +77 -28
- package/server/{review-status-sync-DpAMD_WO.js → review-status-sync-BTOpxtTC.js} +10 -5
- package/server/{review-status-sync-D60PJWNL.js → review-status-sync-DSDK3OMy.js} +1 -1
- package/server/{review-verdict-feedback-CpUZl5aE.js → review-verdict-feedback-CCjVA7Uk.js} +6 -6
- package/server/{review-verdict-feedback-JImjut0z.js → review-verdict-feedback-CTd4QMBu.js} +1 -1
- package/server/{rollup-CZ02qgxk.js → rollup-BKQC7jp4.js} +1 -1
- package/server/{rollup-SyuF09e4.js → rollup-FGsKki9R.js} +8 -8
- package/server/{scanner-Br0Z5S6R.js → scanner-CnqEZeDy.js} +45 -14
- package/server/{sequence-io-fxU0DlwW.js → sequence-io-D909zgeH.js} +4 -4
- package/server/{sequencer-agent-B5YC5XVP.js → sequencer-agent-CzkcK6P5.js} +5 -5
- package/server/server.js +2961 -919
- package/server/{service-Bagb90KZ.js → service-CLeAoU6G.js} +55 -54
- package/server/{session-fork-BqQxd-V6.js → session-fork-CHI1XvL9.js} +2 -2
- package/server/{session-history-XdS0JKp3.js → session-history-BT3IvqhC.js} +4 -4
- package/server/settings-66A6uvIA.js +2 -0
- package/server/{settings-BNbocWOg.js → settings-BTMvpNFU.js} +3 -3
- package/server/{settings-uLc6DEYI.js → settings-C0zgxOGf.js} +2 -2
- package/server/{shadow-engineering-D4X_s3fA.js → shadow-engineering-BJfgm-hX.js} +2 -2
- package/server/{shadow-state-C_NkP-sa.js → shadow-state-7a-524T8.js} +2 -2
- package/server/{shadow-state-CbvsN3qG.js → shadow-state-DnDyjujH.js} +1 -1
- package/server/{shadow-utils-CYMRPeRT.js → shadow-utils-Db3oroFG.js} +2 -2
- package/server/{ship-log-__QtAFXG.js → ship-log-D9MlVzYU.js} +1 -1
- package/server/{smart-compaction-jdMkG1vo.js → smart-compaction-CV2ukKND.js} +1 -1
- package/server/{smart-compaction-CLZOWin1.js → smart-compaction-KCYScAU1.js} +7 -7
- package/server/{spawn-planning-session-D5OXo8pT.js → spawn-planning-session-DKpdFyOC.js} +35 -27
- package/server/{spawn-planning-session-8D6mE033.js → spawn-planning-session-qUC2VWu3.js} +1 -1
- package/server/{specialist-completion-CqmduO92.js → specialist-completion-Ky9wCDpb.js} +1 -1
- package/server/{specialist-context-CJ-QjFR-.js → specialist-context-Bn3dCGS2.js} +5 -5
- package/server/{specialist-handoff-logger-Dnjlwt7g.js → specialist-handoff-logger-CMEwYxa2.js} +2 -2
- package/server/{specialist-logs-CQnKzuZs.js → specialist-logs-C5p8G7tx.js} +3 -3
- package/server/{specialists-Bg9v4z3F.js → specialists-CC4r-c2s.js} +1015 -460
- package/server/{specialists-D0gGXMZx.js → specialists-CShuVGWT.js} +1 -1
- package/server/specialists-DM6bWjsi.js +3 -0
- package/server/{specialists-CwZHb5cb.js → specialists-jiuuyVkp.js} +66 -74
- package/server/specs-C8Wsn2XO.js +3 -0
- package/server/{src-BMMoA_ba.js → src-CXmtj0im.js} +6 -6
- package/server/{src-Bqdtd6po.js → src-CdmnTM2m.js} +5 -5
- package/server/{src-k039WVYY.js → src-DtcUOZCq.js} +112 -18
- package/server/stack-health-Bn3o8FBX.js +3 -0
- package/server/{stack-health-C-ifC7b0.js → stack-health-DxSdG9cW.js} +63 -9
- package/server/{stale-task-claims-L7pJkQFL.js → stale-task-claims-KJKxxiiQ.js} +4 -4
- package/server/{staleness-_Tr-GwdA.js → staleness-CT34nwr9.js} +1 -1
- package/server/{staleness-BID1BKdr.js → staleness-DPm7ClwA.js} +15 -3
- package/server/{state-home-CONQvZR0.js → state-home-Cn_Qu8IX.js} +96 -44
- package/server/{state-migrate-BeBW0KXA.js → state-migrate-BGg2ZaOt.js} +12 -3
- package/server/{stuck-remediation-CKnIryGT.js → stuck-remediation-DYuPRYYw.js} +307 -26
- package/server/{stuck-remediation-CsGD5Ksb.js → stuck-remediation-s9_2qfi6.js} +1 -1
- package/server/{substrate-bug-weights-service-CpIZILj9.js → substrate-bug-weights-service-B-FwCs5V.js} +3 -3
- package/server/{summary-fork-bX6ax6X7.js → summary-fork-D1RAk9rJ.js} +78 -12
- package/server/{summary-fork-agEMsPSo.js → summary-fork-DpcxN9tf.js} +2 -2
- package/server/supervisor/{injection-budget-C1iPirFS.js → injection-budget-Csw5tqfJ.js} +2 -41
- package/server/supervisor/pty-supervisor.js +2 -1
- package/server/supervisor/pty-token-x-ea28Us.js +43 -0
- package/server/supervisor-FTJAIsAK.js +2 -0
- package/server/{supervisor-Ctt4eRYz.js → supervisor-wM4ooB5O.js} +3 -3
- package/server/{swarm-readiness-DdmJVX7y.js → swarm-readiness-DlP_UjHq.js} +4 -4
- package/server/{system-prerequisites-DSXBvffY.js → system-prerequisites-DUDj1YHf.js} +56 -29
- package/server/{teardown-workspace-DDCf5n-a.js → teardown-workspace-DeTTImn-.js} +15 -15
- package/server/{test-agent-queue-BJZ9Nfcc.js → test-agent-queue-MbxX5vqq.js} +7 -7
- package/server/{test-verdict-Cp5tljlJ.js → test-verdict-bWYBtqBg.js} +1 -1
- package/server/{test-verdict-D_-sXIz_.js → test-verdict-gscuksPv.js} +1 -1
- package/server/{tldr-daemon-B8_oT5gx.js → tldr-daemon-BYFkts95.js} +1 -1
- package/server/{tldr-daemon-BQFmmFp0.js → tldr-daemon-C-69c3OI.js} +2 -2
- package/server/tmux-B6z7h_vZ.js +3 -0
- package/server/{tmux-L5LgvGLp.js → tmux-R7N7y-Mh.js} +76 -44
- package/server/{token-BkQLy4yS.js → token-BK6t8BIT.js} +2 -2
- package/server/token-util-DuPuNriz.js +3 -0
- package/server/{token-util-DI8sGlmF.js → token-util-DxXu-vd1.js} +1 -1
- package/server/{tracker-config-DdT-nUAM.js → tracker-config-G6latr8C.js} +2 -2
- package/server/{tracker-utils-DV3h1FYG.js → tracker-utils-B4ylXZQK.js} +1 -1
- package/server/{tracker-utils-CawsPSS2.js → tracker-utils-DHv5pSDT.js} +2 -2
- package/server/{traefik-connect-C6mJckNs.js → traefik-connect-Df2uXPsQ.js} +1 -1
- package/server/{tunnel-IdK1iTHx.js → tunnel-CDVKJpRv.js} +3 -3
- package/server/{tunnel-BIFl98rc.js → tunnel-DGdUkGoZ.js} +1 -1
- package/server/{types-7-GnJn0t.js → types-5M0lupud.js} +1 -1
- package/server/{uat-train-0Ujk8GCv.js → uat-train-B05BWkp-.js} +1 -1
- package/server/{uat-train-j0cPeMSj.js → uat-train-DDSrSoV1.js} +28 -28
- package/server/validate-IfDGkaVR.js +177 -0
- package/server/{validation-DcAgXTQp.js → validation-CC9OPqJZ.js} +1 -1
- package/server/{validation-CabEISJT.js → validation-Dw1pzDzr.js} +259 -9
- package/server/{verification-artifact-Ck1tefmz.js → verification-artifact-B3itKTxu.js} +1 -1
- package/server/{verification-artifact-BuTA1QbL.js → verification-artifact-TVFSz_q1.js} +1 -1
- package/server/{verification-runner-DlJezzef.js → verification-runner-BW4HOKAz.js} +1 -1
- package/server/{verification-runner-FiuAZ-H2.js → verification-runner-CkgX6EtI.js} +174 -124
- package/server/{vtt-parser-BnRsYzcz.js → vtt-parser-DYPbKcIJ.js} +1 -1
- package/server/{work-agent-prompt-DLthEPAq.js → work-agent-prompt-Du8Vh2aJ.js} +13 -13
- package/server/workflows-BQu4RFQ-.js +2 -0
- package/server/{workflows-BZNNYkGC.js → workflows-mbQzh6mQ.js} +39 -77
- package/server/{workspace-3IC-UkAi.js → workspace--8tnhDI0.js} +1 -1
- package/server/{workspace-D9ppycdg.js → workspace-BPUws1-_.js} +3 -3
- package/server/{workspace-config-Bigl_-Lk.js → workspace-config-CIVWZOQr.js} +1 -1
- package/server/{workspace-manager-ClkCIWTe.js → workspace-manager-CBhNdzE4.js} +76 -18
- package/server/workspace-manager-CWT55qeI.js +3 -0
- package/server/{workspace-metadata-BE0efUv_.js → workspace-metadata-BzHnwwX4.js} +1 -1
- package/server/{workspace-metadata-tiSRIWJP.js → workspace-metadata-_WygnyoX.js} +2 -2
- package/server/{workspaces-CFPcL0vl.js → workspaces-Do_9J0LQ.js} +309 -124
- package/sync-sources/agents/pan-inspect-agent.md +1 -1
- package/sync-sources/agents/pan-merge-agent.md +1 -1
- package/sync-sources/agents/pan-planning-agent.md +4 -4
- package/sync-sources/agents/pan-work-agent.md +1 -1
- package/sync-sources/dev-skills/pan-commit/SKILL.md +1 -1
- package/sync-sources/dev-skills/test-specialist-workflow/SKILL.md +1 -1
- package/sync-sources/hooks/record-cost-event.js +369 -75
- package/sync-sources/hooks/session-start-hook +7 -0
- package/sync-sources/hooks/work-agent-stop-hook +1 -1
- package/sync-sources/rules/per-bead-durability.md +1 -1
- package/sync-sources/rules/prd-authoring.md +1 -1
- package/sync-sources/skills/feature-work/SKILL.md +1 -1
- package/sync-sources/skills/okf/README.md +11 -3
- package/sync-sources/skills/okf/SKILL.md +12 -1
- package/sync-sources/skills/okf/docs/USAGE.md +15 -0
- package/sync-sources/skills/okf/references/overdeck.md +28 -0
- package/sync-sources/skills/pan/SKILL.md +2 -2
- package/sync-sources/skills/pan-admin-config/SKILL.md +1 -0
- package/sync-sources/skills/pan-approve/SKILL.md +1 -1
- package/sync-sources/skills/pan-close/SKILL.md +1 -1
- package/sync-sources/skills/pan-doctor/SKILL.md +1 -1
- package/sync-sources/skills/pan-flywheel/SKILL.md +18 -1
- package/sync-sources/skills/pan-knowledge/SKILL.md +10 -0
- package/sync-sources/skills/pan-new-project/SKILL.md +9 -11
- package/sync-sources/skills/pan-orders/SKILL.md +33 -0
- package/sync-sources/skills/pan-oversee/SKILL.md +5 -5
- package/sync-sources/skills/pan-plan/SKILL.md +6 -6
- package/sync-sources/skills/pan-quickstart/SKILL.md +1 -1
- package/sync-sources/skills/pan-recap/SKILL.md +2 -2
- package/sync-sources/skills/pan-review/SKILL.md +1 -1
- package/sync-sources/skills/pan-start/SKILL.md +7 -3
- package/sync-sources/skills/pan-swarm/SKILL.md +1 -1
- package/sync-sources/skills/pan-sync/SKILL.md +1 -1
- package/sync-sources/skills/pan-task/SKILL.md +2 -2
- package/sync-sources/skills/pan-wipe/SKILL.md +2 -2
- package/sync-sources/skills/pipeline-list/SKILL.md +1 -1
- package/sync-sources/skills/pipeline-status/SKILL.md +2 -2
- package/sync-sources/skills/plan/SKILL.md +11 -11
- package/sync-sources/skills/write-vbrief/SKILL.md +7 -282
- package/sync-sources/skills/write-xbrief/SKILL.md +295 -0
- package/sync-sources/templates/claude-md/sections/warnings.md +1 -1
- package/sync-sources/templates/traefik/dynamic/overdeck.yml.template +10 -0
- package/server/agent-state-Co5Sy2Fw.js +0 -3
- package/server/agents-DyHKlq1I.js +0 -3
- package/server/cli-BRORS9qY.js +0 -3
- package/server/codex-DNyiQDKW.js +0 -3
- package/server/context-layers-15gDOk20.js +0 -165
- package/server/context-layers-DlQKkHH2.js +0 -4
- package/server/deacon-swarm-CV54eNmU.js +0 -2
- package/server/dist-j64RzSrQ.js +0 -3
- package/server/flywheel-6WHU4O7A.js +0 -207
- package/server/flywheel-COR0mbRI.js +0 -522
- package/server/flywheel-Ctr5uuvo.js +0 -2
- package/server/forge-B0_opi-V.js +0 -2
- package/server/git-utils-CsKGnzFA.js +0 -3
- package/server/hume-BmhvfVbV.js +0 -3
- package/server/inspect-agent-Dq0z1k3H.js +0 -2
- package/server/layers-Cp1To4L8.js +0 -93
- package/server/lifecycle-io-DmY2qwCn.js +0 -3
- package/server/merge-blockers-BYjeXrVN.js +0 -41
- package/server/merge-ops-DwWCkSgo.js +0 -2
- package/server/merge-set-DiISXcC-.js +0 -139
- package/server/projects-BKkwpH6q.js +0 -3
- package/server/public/assets/index-Bdc4V9ba.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-B5v_r7cI.js +0 -1
- package/server/rally-OSJXdiHK.js +0 -3
- package/server/rebuild-stack-CKjJAI8L.js +0 -3
- package/server/record-rwK-nKv_.js +0 -3
- package/server/record-update-Crz74r-6.js +0 -168
- package/server/resume-wZZsWtzz.js +0 -3
- package/server/review-status-Bnh-rdkY.js +0 -3
- package/server/settings-BlUsVaUc.js +0 -2
- package/server/specialists-Dqe6_HE5.js +0 -3
- package/server/specs-BhOKBzqk.js +0 -3
- package/server/stack-health-Bd06frFn.js +0 -3
- package/server/supervisor-COVHrBTg.js +0 -2
- package/server/tmux-BAvtac_u.js +0 -3
- package/server/token-util-BArZLN6w.js +0 -3
- package/server/workflows-C4mR0Reb.js +0 -2
- package/server/workspace-manager-B1WOfKvB.js +0 -3
|
@@ -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-
|
|
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-DDSrSoV1.js";
|
|
2
2
|
export { canStartUatTrainReconciler, getUatCandidatePayload, getUatGenerationsPayload, postUatGenerationPromotePayload, postUatGenerationStackPayload, resolveUatProjectRoot, runUatTrainReconcile, startUatTrainReconciler, stopUatTrainReconciler };
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as getDashboardIdentity, t as recordDeaconNudge } from "./deacon-nudge-log-
|
|
3
|
-
import { D as killSession, E as isPaneDead,
|
|
4
|
-
import {
|
|
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-
|
|
6
|
-
import { A as
|
|
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-
|
|
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-
|
|
9
|
-
import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-
|
|
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-
|
|
11
|
-
import { t as listSubstrateBugWeights } from "./substrate-bug-weights-service-
|
|
12
|
-
import {
|
|
13
|
-
import { t as extractACFromDocument } from "./acceptance-criteria-
|
|
14
|
-
import { n as ensureDevcontainerSync, r as init_ensure_devcontainer } from "./ensure-devcontainer-
|
|
1
|
+
import { Tn as init_projects, d as loadConfigNoMigration, fn as findProjectByPathSync, t as init_config_yaml, tt as resolveModel } from "./config-yaml-DySPNmKN.js";
|
|
2
|
+
import { n as getDashboardIdentity, t as recordDeaconNudge } from "./deacon-nudge-log-6wVqAaqz.js";
|
|
3
|
+
import { D as killSession, E as isPaneDead, H as sessionExists, w as init_tmux } from "./tmux-R7N7y-Mh.js";
|
|
4
|
+
import { X as messageAgent, b as init_agents } from "./queries-CjNIf-Ub.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-VPV28g0g.js";
|
|
6
|
+
import { A as init_xbrief_index, M as readXBriefDocument, k as findXBriefByIssue } from "./io-C9kF1wtJ.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-6AfUfbwc.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-BQp7_4uD.js";
|
|
9
|
+
import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-3lNZkyT4.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-CnqEZeDy.js";
|
|
11
|
+
import { t as listSubstrateBugWeights } from "./substrate-bug-weights-service-B-FwCs5V.js";
|
|
12
|
+
import { D as writeFlywheelLaunchMetadata, O as writeLatestFlywheelStatus, S as nextFlywheelRunId, T as resolveLiveFlywheelRunId, a as isFlywheelDevcontainerRuntime, f as spawnFlywheelAgent, g as abortFlywheelRun, s as loadResumeSessionId, t as FLYWHEEL_ORCHESTRATOR_AGENT_ID, u as saveResumeSessionId, v as getFlywheelRunDetail, w as readFlywheelLaunchMetadata, x as listFlywheelRuns } from "./flywheel-DHrgCphM.js";
|
|
13
|
+
import { t as extractACFromDocument } from "./acceptance-criteria-DDCnXF58.js";
|
|
14
|
+
import { n as ensureDevcontainerSync, r as init_ensure_devcontainer } from "./ensure-devcontainer-DNi-ono3.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
|
-
|
|
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-
|
|
179
|
+
const { getArtifactBySlugJob } = await import("./artifact-index-jobs-CbEDfCDu.js");
|
|
180
180
|
return getArtifactBySlugJob(payload);
|
|
181
181
|
}
|
|
182
182
|
case "listArtifactsForWorkspaceOrIssue": {
|
|
183
|
-
const { listArtifactsForWorkspaceOrIssueJob } = await import("./artifact-index-jobs-
|
|
183
|
+
const { listArtifactsForWorkspaceOrIssueJob } = await import("./artifact-index-jobs-CbEDfCDu.js");
|
|
184
184
|
return listArtifactsForWorkspaceOrIssueJob(payload);
|
|
185
185
|
}
|
|
186
186
|
case "unshareArtifactBySlug": {
|
|
187
|
-
const { unshareArtifactBySlugJob } = await import("./artifact-index-jobs-
|
|
187
|
+
const { unshareArtifactBySlugJob } = await import("./artifact-index-jobs-CbEDfCDu.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-
|
|
427
|
+
const { getAgentDir } = await import("./agents-wi9NWzs2.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-
|
|
432
|
+
await import("./agents-wi9NWzs2.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-
|
|
442
|
+
const { stopAgent } = await import("./agents-wi9NWzs2.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-
|
|
1873
|
+
const { computeMergeQueue, resolveMergeQueuePrUrl } = await import("./flywheel-merge-order-UUcsCDb6.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-
|
|
1900
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
1899
|
+
const { loadReviewStatuses, mergeGateEligibility } = await import("./review-status-btEYlaxA.js");
|
|
1900
|
+
const { resolveProjectFromIssueSync } = await import("./projects-vjjcmiN8.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(
|
|
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(
|
|
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-
|
|
2134
|
+
const { reviewRecordEligibility } = await import("./flywheel-merge-order-UUcsCDb6.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-
|
|
2152
|
+
//# sourceMappingURL=uat-train-DDSrSoV1.js.map
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { c as init_review_status_sync, r as getAllReviewStatusesFromDb } from "./review-status-sync-BTOpxtTC.js";
|
|
2
|
+
import { H as liveOrderIssueLookup, V as listBooks } from "./flywheel-DHrgCphM.js";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
5
|
+
//#region ../../lib/cloister/merge-blockers.ts
|
|
6
|
+
init_review_status_sync();
|
|
7
|
+
/**
|
|
8
|
+
* PRs that passed review but cannot merge for a GitHub-native reason (PAN-1620):
|
|
9
|
+
* merge_conflict / failing_checks / not_mergeable. These sit forever unless rebased.
|
|
10
|
+
*
|
|
11
|
+
* Reads `review_status` directly from SQLite — NO HTTP — so it works inside a
|
|
12
|
+
* network-sandboxed harness (e.g. codex's bwrap sandbox) where a `curl` to the
|
|
13
|
+
* dashboard's `/api/flywheel/merge-blockers` cannot reach `127.0.0.1:3011`.
|
|
14
|
+
* Shared by the dashboard route and the `pan flywheel merge-blockers` CLI so the
|
|
15
|
+
* two surfaces can never disagree.
|
|
16
|
+
*/
|
|
17
|
+
const MERGE_BLOCKER_TYPES = new Set([
|
|
18
|
+
"merge_conflict",
|
|
19
|
+
"failing_checks",
|
|
20
|
+
"not_mergeable"
|
|
21
|
+
]);
|
|
22
|
+
function getMergeBlockersPayload() {
|
|
23
|
+
const statuses = getAllReviewStatusesFromDb();
|
|
24
|
+
const out = [];
|
|
25
|
+
for (const [issueId, status] of Object.entries(statuses)) {
|
|
26
|
+
if (status.reviewStatus !== "passed") continue;
|
|
27
|
+
if (status.mergeStatus === "merged") continue;
|
|
28
|
+
const reasons = (status.blockerReasons ?? []).filter((b) => MERGE_BLOCKER_TYPES.has(b.type));
|
|
29
|
+
if (reasons.length === 0) continue;
|
|
30
|
+
out.push({
|
|
31
|
+
issueId,
|
|
32
|
+
prUrl: status.prUrl,
|
|
33
|
+
reasons: reasons.map((b) => ({
|
|
34
|
+
type: b.type,
|
|
35
|
+
summary: b.summary
|
|
36
|
+
}))
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return out;
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
//#region ../../lib/orders/validate.ts
|
|
43
|
+
function hasNonEmptyFile(path) {
|
|
44
|
+
try {
|
|
45
|
+
return existsSync(path) && statSync(path).isFile() && statSync(path).size > 0;
|
|
46
|
+
} catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function issuePattern(issueId) {
|
|
51
|
+
const escaped = issueId.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
52
|
+
return new RegExp(`(?:^|[-_])${escaped}(?:[-_.]|$)`, "i");
|
|
53
|
+
}
|
|
54
|
+
function nonEmptyFileNames(directory) {
|
|
55
|
+
if (!existsSync(directory)) return [];
|
|
56
|
+
return readdirSync(directory).filter((name) => hasNonEmptyFile(join(directory, name)));
|
|
57
|
+
}
|
|
58
|
+
function createOrderPrdLookup(stateRoot) {
|
|
59
|
+
const draftNames = new Set([...nonEmptyFileNames(join(stateRoot, "drafts")), ...nonEmptyFileNames(join(stateRoot, ".pan", "drafts"))].map((name) => name.toLowerCase()));
|
|
60
|
+
const specNames = [...nonEmptyFileNames(join(stateRoot, "specs")), ...nonEmptyFileNames(join(stateRoot, ".pan", "specs"))];
|
|
61
|
+
return (issueId) => {
|
|
62
|
+
const lower = issueId.toLowerCase();
|
|
63
|
+
if (draftNames.has(`${lower}.md`)) return true;
|
|
64
|
+
const pattern = issuePattern(issueId);
|
|
65
|
+
return specNames.some((name) => pattern.test(name));
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function hasOrderIssuePrd(stateRoot, issueId) {
|
|
69
|
+
const lower = issueId.toLowerCase();
|
|
70
|
+
if ([join(stateRoot, "drafts", `${lower}.md`), join(stateRoot, ".pan", "drafts", `${lower}.md`)].some(hasNonEmptyFile)) return true;
|
|
71
|
+
for (const specsDir of [join(stateRoot, "specs"), join(stateRoot, ".pan", "specs")]) {
|
|
72
|
+
if (!existsSync(specsDir)) continue;
|
|
73
|
+
const pattern = issuePattern(issueId);
|
|
74
|
+
if (readdirSync(specsDir).some((name) => pattern.test(name) && hasNonEmptyFile(join(specsDir, name)))) return true;
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
function findCycle(book) {
|
|
79
|
+
const issues = new Set(book.items.map((item) => item.issue.toUpperCase()));
|
|
80
|
+
const edges = new Map(book.items.map((item) => [item.issue.toUpperCase(), item.prereqs.map((prereq) => prereq.toUpperCase()).filter((prereq) => issues.has(prereq))]));
|
|
81
|
+
const visiting = /* @__PURE__ */ new Set();
|
|
82
|
+
const visited = /* @__PURE__ */ new Set();
|
|
83
|
+
const path = [];
|
|
84
|
+
const visit = (issue) => {
|
|
85
|
+
if (visiting.has(issue)) {
|
|
86
|
+
const start = path.indexOf(issue);
|
|
87
|
+
return [...path.slice(start), issue];
|
|
88
|
+
}
|
|
89
|
+
if (visited.has(issue)) return null;
|
|
90
|
+
visiting.add(issue);
|
|
91
|
+
path.push(issue);
|
|
92
|
+
for (const prereq of edges.get(issue) ?? []) {
|
|
93
|
+
const cycle = visit(prereq);
|
|
94
|
+
if (cycle) return cycle;
|
|
95
|
+
}
|
|
96
|
+
path.pop();
|
|
97
|
+
visiting.delete(issue);
|
|
98
|
+
visited.add(issue);
|
|
99
|
+
return null;
|
|
100
|
+
};
|
|
101
|
+
for (const issue of issues) {
|
|
102
|
+
const cycle = visit(issue);
|
|
103
|
+
if (cycle) return cycle;
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
function validateBookForStart(stateRoot, book, options = {}) {
|
|
108
|
+
const blocks = [];
|
|
109
|
+
const warns = [];
|
|
110
|
+
if (book.items.length === 0) blocks.push({
|
|
111
|
+
code: "empty-book",
|
|
112
|
+
issue: book.id,
|
|
113
|
+
message: "Order book must contain at least one issue"
|
|
114
|
+
});
|
|
115
|
+
const issueLookup = options.issueLookup ?? liveOrderIssueLookup;
|
|
116
|
+
const ids = /* @__PURE__ */ new Set();
|
|
117
|
+
for (const item of book.items) {
|
|
118
|
+
ids.add(item.issue.toUpperCase());
|
|
119
|
+
item.prereqs.forEach((prereq) => ids.add(prereq.toUpperCase()));
|
|
120
|
+
}
|
|
121
|
+
const issueState = issueLookup([...ids]);
|
|
122
|
+
for (const item of book.items) {
|
|
123
|
+
const issue = item.issue.toUpperCase();
|
|
124
|
+
const state = issueState.get(issue);
|
|
125
|
+
if (!state?.open) blocks.push({
|
|
126
|
+
code: "issue-not-open",
|
|
127
|
+
issue,
|
|
128
|
+
message: state ? `${issue} is not open` : `${issue} could not be resolved as an open issue`
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
for (const other of options.books ?? listBooks(stateRoot)) {
|
|
132
|
+
if (other.id === book.id || other.status === "complete") continue;
|
|
133
|
+
for (const item of other.items) {
|
|
134
|
+
const issue = item.issue.toUpperCase();
|
|
135
|
+
if (!ids.has(issue) || !book.items.some((candidate) => candidate.issue.toUpperCase() === issue)) continue;
|
|
136
|
+
blocks.push({
|
|
137
|
+
code: "duplicate-membership",
|
|
138
|
+
issue,
|
|
139
|
+
message: `${issue} already belongs to non-complete order book ${other.id}`
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const bookIssues = new Set(book.items.map((item) => item.issue.toUpperCase()));
|
|
144
|
+
for (const item of book.items) for (const rawPrereq of item.prereqs) {
|
|
145
|
+
const prereq = rawPrereq.toUpperCase();
|
|
146
|
+
if (!bookIssues.has(prereq) && !issueState.has(prereq)) blocks.push({
|
|
147
|
+
code: "unresolved-prerequisite",
|
|
148
|
+
issue: item.issue,
|
|
149
|
+
message: `${item.issue} prerequisite ${prereq} could not be resolved`
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
const cycle = findCycle(book);
|
|
153
|
+
if (cycle) blocks.push({
|
|
154
|
+
code: "prerequisite-cycle",
|
|
155
|
+
issue: cycle[0],
|
|
156
|
+
message: `Prerequisite cycle: ${cycle.join(" → ")}`
|
|
157
|
+
});
|
|
158
|
+
const hasPrd = options.hasPrd ?? ((issueId) => hasOrderIssuePrd(stateRoot, issueId));
|
|
159
|
+
for (const item of book.items) {
|
|
160
|
+
if (item.lane !== "B" || hasPrd(item.issue)) continue;
|
|
161
|
+
const finding = {
|
|
162
|
+
code: "missing-prd",
|
|
163
|
+
issue: item.issue,
|
|
164
|
+
message: `${item.issue} has no draft PRD or canonical spec`
|
|
165
|
+
};
|
|
166
|
+
if (item.planAtPickup) warns.push(finding);
|
|
167
|
+
else blocks.push(finding);
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
blocks,
|
|
171
|
+
warns
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
//#endregion
|
|
175
|
+
export { getMergeBlockersPayload as i, hasOrderIssuePrd as n, validateBookForStart as r, createOrderPrdLookup as t };
|
|
176
|
+
|
|
177
|
+
//# sourceMappingURL=validate-IfDGkaVR.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { i as runQualityGates, n as init_validation, r as killAllGateProcessGroups } from "./validation-
|
|
1
|
+
import { i as runQualityGates, n as init_validation, r as killAllGateProcessGroups } from "./validation-Dw1pzDzr.js";
|
|
2
2
|
init_validation();
|
|
3
3
|
export { killAllGateProcessGroups, runQualityGates };
|
|
@@ -1,12 +1,221 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import {
|
|
3
|
-
import { f as init_config, m as loadConfigSync } from "./config-
|
|
4
|
-
import { n as init_workspace_config, r as replacePlaceholdersSync } from "./workspace-config-
|
|
2
|
+
import { Br as getOverdeckHome, Vr as init_paths, mr as init_errors } from "./config-yaml-DySPNmKN.js";
|
|
3
|
+
import { f as init_config, m as loadConfigSync } from "./config-BZ0sHTju.js";
|
|
4
|
+
import { n as init_workspace_config, r as replacePlaceholdersSync } from "./workspace-config-CIVWZOQr.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-
|
|
525
|
+
//# sourceMappingURL=validation-Dw1pzDzr.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as readVerificationArtifact } from "./verification-artifact-
|
|
1
|
+
import { t as readVerificationArtifact } from "./verification-artifact-TVFSz_q1.js";
|
|
2
2
|
export { readVerificationArtifact };
|
|
@@ -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-
|
|
56
|
+
//# sourceMappingURL=verification-artifact-TVFSz_q1.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as reconcileInterruptedVerifications, r as runVerificationForIssue } from "./verification-runner-
|
|
1
|
+
import { n as reconcileInterruptedVerifications, r as runVerificationForIssue } from "./verification-runner-CkgX6EtI.js";
|
|
2
2
|
export { reconcileInterruptedVerifications, runVerificationForIssue };
|