@overdeck/desktop 0.45.16 → 0.45.18
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/dist-electron/main.js +149 -158
- package/dist-electron/main.js.map +1 -1
- package/dist-electron/preload.js +17 -2
- package/dist-electron/preload.js.map +1 -1
- package/package.json +5 -4
- package/server/acceptance-criteria-aQFKQf-J.js +62 -0
- package/server/{advancing-selfheal-DJYAvGv-.js → advancing-selfheal-DgwQgm4D.js} +6 -6
- package/server/{agent-gc-D0wDIeV1.js → agent-gc-kpzxqT7P.js} +3 -3
- package/server/agent-state-C_6TG-Ad.js +3 -0
- package/server/{agent-state-service-CZrayD_G.js → agent-state-service-BUfovFfB.js} +1 -1
- package/server/{agent-state-service-DFslS5go.js → agent-state-service-nUD3qfob.js} +5 -5
- package/server/agents-BA15AQqo.js +3 -0
- package/server/{briefing-freshness-DESTCWo-.js → agents-BHBxr8c9.js} +5 -131
- package/server/{archive-planning-CbghE9-o.js → archive-planning-CzCW9Ifl.js} +5 -10
- package/server/{archive-planning-CoyIbgGK.js → archive-planning-D-QsBufn.js} +1 -1
- package/server/{artifact-index-jobs-CcSrUoSE.js → artifact-index-jobs-qqa51B2Z.js} +2 -2
- package/server/{backlog-auto-trigger-BfgDsII0.js → backlog-auto-trigger-B7Bi0bvY.js} +2 -2
- package/server/{behavior-BTpYbAv4.js → behavior-CWqNMqE5.js} +2 -2
- package/server/briefing-freshness-DuxIE1yr.js +131 -0
- package/server/{checkpoint-manager-BwFdegJF.js → checkpoint-manager-DF6hb9Jw.js} +3 -3
- package/server/{checkpoint-manager-DWSXooZV.js → checkpoint-manager-DixkLus7.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-fjadfOKF.js → checkpoints-B1Z42tJE.js} +1 -1
- package/server/{checkpoints-BtUonbs3.js → checkpoints-BiviJqei.js} +2 -2
- package/server/{claude-hooks-provision-DiK62u0k.js → claude-hooks-provision-BeMGi4ty.js} +1 -1
- package/server/{claude-hooks-provision-DAtxutOs.js → claude-hooks-provision-Du_PkMsp.js} +2 -2
- package/server/{claude-permissions-CThLgf8d.js → claude-permissions-BB6agcOZ.js} +2 -2
- package/server/{claude-settings-overlay-BF9MPIwx.js → claude-settings-overlay-CAq2oFSK.js} +2 -2
- package/server/{claude-settings-overlay-Dx_Uqcmv.js → claude-settings-overlay-DUWWLd6M.js} +1 -1
- package/server/cli-BFgrSWKV.js +3 -0
- package/server/{cli-ByKIIMfT.js → cli-C33xPZNm.js} +9 -9
- package/server/{cliproxy-C_GuT5DU.js → cliproxy-BQX1TL6N.js} +1 -1
- package/server/{cliproxy-B4c1BUvs.js → cliproxy-CGBA1GzA.js} +2 -2
- package/server/{close-issue-BOuLKr6e.js → close-issue-DNv8npc1.js} +5 -5
- package/server/{closed-issue-reaper-CksfuiFD.js → closed-issue-reaper-DrqgBJlr.js} +1 -1
- package/server/{closed-issue-reaper-DCAYzNXW.js → closed-issue-reaper-LoMnnjtJ.js} +9 -9
- package/server/codex-DxLivxri.js +3 -0
- package/server/{codex-parser-mFYZh8vR.js → codex-parser-DboQnEXN.js} +2 -2
- package/server/{codex-BbqIRZjd.js → codex-sgWVCGUd.js} +43 -18
- package/server/{config-Dj6N8EP9.js → config-6MCHOZ2N.js} +1 -1
- package/server/{config-DVLdmnMJ.js → config-DfaUXr6r.js} +2 -2
- package/server/{config-yaml-cNOZcEww.js → config-yaml-CqaAyn8y.js} +74 -74
- package/server/{conflict-gate-BMKm_5DV.js → conflict-gate-BF_zhcmb.js} +3 -3
- package/server/{conflict-gate-CuXUv-bP.js → conflict-gate-BubJprtD.js} +1 -1
- package/server/{context-layers-c0JqYHcS.js → context-layers-BFrxfl0l.js} +17 -3
- package/server/{context-layers-CeAwSYNt.js → context-layers-DWL_8HhY.js} +2 -2
- package/server/{control-settings-D4EFsRBd.js → control-settings-BguNQ1F_.js} +4 -4
- package/server/{conversation-compaction-kHVfVRg3.js → conversation-compaction-CRKAf2qP.js} +1 -1
- package/server/{conversation-compaction-BCggyih4.js → conversation-compaction-DxSXl0pT.js} +8 -8
- package/server/{conversation-service-BTzObqGi.js → conversation-service-DzuY9qoH.js} +1 -1
- package/server/{conversation-service-B8LFQQm1.js → conversation-service-mFVFdDQK.js} +6 -6
- package/server/{conversations-B-lcHv-5.js → conversations-BX5aD-6F.js} +4 -4
- package/server/{conversations-BM7zlXjr.js → conversations-BajHQ60c.js} +1 -1
- package/server/{cost-D9kPIY_5.js → cost-BoqD1Pxz.js} +2 -2
- package/server/{cost-BcpRQ-7o.js → cost-DuZ5vlv-.js} +3 -3
- package/server/{cost-sync-DF6odxK9.js → cost-sync-BYnmnMkY.js} +3 -3
- package/server/{dag-DKI3sOmX.js → dag-C6kYyF17.js} +7 -243
- package/server/{dangerous-git-ops-Bn18PEcN.js → dangerous-git-ops-q5OPtXMd.js} +1 -1
- package/server/dashboard-db-worker.js +6 -6
- package/server/{deacon-DONuopff.js → deacon-CwCiNuEZ.js} +3 -3
- package/server/{deacon-DdARMjZq.js → deacon-Dru5onpk.js} +233 -162
- package/server/{deacon-nudge-log-B-naf89q.js → deacon-nudge-log-ilDfxrhK.js} +1 -1
- package/server/{deacon-swarm-BNGkmYR_.js → deacon-swarm-BPmBmSoU.js} +298 -72
- package/server/deacon-swarm-CKyGJng1.js +2 -0
- package/server/deacon.js +14 -7
- package/server/{devcontainer-renderer-C-34Sxyz.js → devcontainer-renderer-BqGNCzvN.js} +3 -3
- package/server/{dist-BMXvKiZP.js → dist-BwlEiLCU.js} +1 -1
- package/server/dist-Bx4KkgYL.js +3 -0
- package/server/{dist-src-BgGUblXg.js → dist-src-BE0Denfs.js} +1 -1
- package/server/{docker-apZ9pBYw.js → docker-CNjXS72x.js} +2 -2
- package/server/{ensure-devcontainer-Bqi1EF1P.js → ensure-devcontainer-5e9xOve4.js} +4 -4
- package/server/{ensure-devcontainer-Dq3KoOIl.js → ensure-devcontainer-C6gyUQdE.js} +1 -1
- package/server/{esm-shims-BEjvINX3.js → esm-shims-Cso7IGBC.js} +1 -1
- package/server/{event-store-CqDgfbAs.js → event-store-D9UhQyMS.js} +1 -1
- package/server/{event-store-D89fMfXS.js → event-store-KZnWUKWh.js} +3 -3
- package/server/{events-S_C0pvl6.js → events-2eFUPdqz.js} +3 -3
- package/server/{events-rIGncmP1.js → events-BYbvqZky.js} +1 -1
- package/server/{factory-DV18m0rc.js → factory-BtaRsHFC.js} +20 -17
- package/server/{feature-registry-population-CqZSnqQi.js → feature-registry-population-Ca2UaV0U.js} +4 -4
- package/server/{feature-registry-storage-BeXmNBwK.js → feature-registry-storage-DaP-bQxO.js} +2 -2
- package/server/{features-u5XeMaOK.js → features-DqvaoQoa.js} +2 -2
- package/server/{feedback-target-CwyWf0Dg.js → feedback-target-BXWdOiYI.js} +9 -7
- package/server/{feedback-target-DDG1PWl3.js → feedback-target-BblmMe9P.js} +1 -1
- package/server/{feedback-writer-BsJiw5aT.js → feedback-writer-CULeOOY4.js} +1 -1
- package/server/{feedback-writer-D20HSXre.js → feedback-writer-Dn8o9ZyE.js} +4 -4
- package/server/{flywheel-RCnHAgc4.js → flywheel-BUWdcfhq.js} +1 -1
- package/server/{flywheel-Dczmgchd.js → flywheel-CqkO3cDj.js} +15 -28
- package/server/{flywheel-9Y1X7IM-.js → flywheel-D9r1mw2U.js} +13 -13
- package/server/{flywheel-merge-order-DEtEd3aK.js → flywheel-merge-order-LDzQDwSg.js} +1 -1
- package/server/{flywheel-merge-order-CtCYsFJP.js → flywheel-merge-order-VtjUweEb.js} +6 -6
- package/server/forge-DJy3Zx4s.js +2 -0
- package/server/{forge-DFDThFil.js → forge-wEollMCi.js} +22 -12
- package/server/{from-NSJypkI8.js → from-B2tOYhYV.js} +1 -1
- package/server/{fts-db-C5A_TTOM.js → fts-db-Bgzn2RO7.js} +2 -2
- package/server/{fts-operations-DvCSimfU.js → fts-operations-Bj8yutnR.js} +2 -2
- package/server/{git-utils-Dr0L7mFk.js → git-utils-GxlL0tmt.js} +2 -2
- package/server/{git-utils-C0neHvQx.js → git-utils-q8jNoBts.js} +1 -1
- package/server/{github-app-Bwt9lK4A.js → github-app-BrYwK_Gb.js} +1 -1
- package/server/{github-app-u9-SX7Gc.js → github-app-tUbb8Ldr.js} +8 -3
- package/server/{github-client-Btyy3uan.js → github-client-BwBU41jK.js} +3 -3
- package/server/{github-client-Do3k-N1W.js → github-client-D6CNsftm.js} +1 -1
- package/server/{github-pr-lookup-DOF1U2WW.js → github-pr-lookup-BS5PqkJb.js} +2 -2
- package/server/{harness-resolve-C6g2R0Cd.js → harness-resolve-Dx8hUsvC.js} +3 -3
- package/server/{health-events-B4u-2a9m.js → health-events-2DLp-5Xp.js} +2 -2
- package/server/{health-events-Bos3sk5g.js → health-events-B0mj6Iae.js} +1 -1
- package/server/{hooks-uEr8WTx_.js → hooks-BDcQJDUe.js} +1 -1
- package/server/{hooks-BCoOjL_R.js → hooks-BS_JrvYP.js} +3 -3
- package/server/hume-B4seN95Y.js +3 -0
- package/server/{hume-BqxYKbUf.js → hume-BRhNKyXQ.js} +2 -2
- package/server/{idle-stack-reaper-DbZ8ukMd.js → idle-stack-reaper-BCITXNW5.js} +2 -2
- package/server/{idle-stack-reaper-H0W6XtHh.js → idle-stack-reaper-C1ymihno.js} +1 -1
- package/server/{infra-Ba9mS6e6.js → infra-_Kx1m9pm.js} +9 -4
- package/server/{injection-C1DKXeIZ.js → injection-Bvhyg_MV.js} +1 -1
- package/server/{injection-yrMBxzVq.js → injection-CCaYkofq.js} +7 -7
- package/server/{inspect-agent-B-mnb4uh.js → inspect-agent-BqyZ4pCo.js} +35 -67
- package/server/inspect-agent-DCJQm9Wu.js +2 -0
- package/server/{internal-token-BtqSbKTx.js → internal-token-Cl-1IxaE.js} +2 -2
- package/server/{internal-token-BPYEaXFh.js → internal-token-D-t28de5.js} +1 -1
- package/server/{io-VEGSAqsd.js → io-DkC4sFSy.js} +36 -43
- package/server/{issue-closed-BxcePXL-.js → issue-closed-Cpl4VDUM.js} +41 -6
- package/server/{issue-lifecycle--8MRxrG1.js → issue-lifecycle-CFR8TJ22.js} +22 -37
- package/server/{issue-lifecycle-CdMUauyb.js → issue-lifecycle-YNTy3OT3.js} +1 -1
- package/server/{issue-service-singleton-MZsDhAob.js → issue-service-singleton-D81mCts_.js} +1 -1
- package/server/{issue-service-singleton-CkTUI-eu.js → issue-service-singleton-ldvUUXi3.js} +29 -29
- package/server/{issues-CBAsuoAO.js → issues-DIEHt9sq.js} +2 -2
- package/server/{jsonl-parser-BUW5_sSK.js → jsonl-parser-Cd5jIqh7.js} +3 -3
- package/server/{label-cleanup-htK6fBRU.js → label-cleanup-Btny6Gyo.js} +3 -3
- package/server/{state-home-CEvD_v5F.js → launcher-generator-BXLM9f4b.js} +7 -127
- package/server/{layers-jjL16At6.js → layers-gCJlK62m.js} +2 -2
- package/server/lifecycle-D7aQUnTO.js +12 -0
- package/server/{lifecycle-io-DXv8Utct.js → lifecycle-io-DQBF-GHO.js} +1 -1
- package/server/{lifecycle-io-IehcRt2v.js → lifecycle-io-FfPUtz-y.js} +4 -4
- package/server/{linear-client-D9cSQfvD.js → linear-client-CDH2D6Qy.js} +3 -3
- package/server/{linear-client-By7hjwuN.js → linear-client-WrYrUIAH.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-BN8FGJ2q.js → merge-BsDgUxFz.js} +3 -3
- package/server/{merge-BLcEZNXz.js → merge-Dervs4BF.js} +1 -1
- package/server/{merge-agent-B3u2szOL.js → merge-agent-D6DNhe9j.js} +64 -51
- package/server/{merge-agent-ejC7Wos8.js → merge-agent-DMQTJMP0.js} +1 -1
- package/server/{merge-batch-DyqlgYGp.js → merge-batch-Bv6Z5K2H.js} +1 -1
- package/server/{merge-blockers-cq-aS2KG.js → merge-blockers-WWWi6Ur2.js} +2 -2
- package/server/merge-ops-h9OCnIVz.js +2 -0
- package/server/{merge-rebase-Dl7yIxtV.js → merge-rebase-Czth9ggm.js} +2 -2
- package/server/{merge-set-CZ9Nbay0.js → merge-set-DNc4zBqd.js} +3 -3
- package/server/{merge-set-Dy0D0r3i.js → merge-set-vuE3MEVt.js} +1 -1
- package/server/{merge-sync-D7jWLgCC.js → merge-sync-B2KSk54U.js} +2 -2
- package/server/{merge-sync-CG9kDCdT.js → merge-sync-B9nHdUGx.js} +1 -1
- package/server/{merge-train-CH33XJOH.js → merge-train-DJgr81tF.js} +3 -3
- package/server/{merge-train-deps-JoVdGnOg.js → merge-train-deps-B2OWS0k9.js} +4 -4
- package/server/{merge-verification-D4wTChdX.js → merge-verification-BBIXUEqa.js} +4 -4
- package/server/{multipart-parser-Csn8U-K9.js → multipart-parser-9DhuAkPd.js} +2 -2
- package/server/node_modules/.package-lock.json +11 -11
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
- package/server/node_modules/toml/README.md +54 -0
- package/server/node_modules/toml/index.d.ts +42 -1
- package/server/node_modules/toml/index.js +3 -3
- package/server/node_modules/toml/lib/compiler.js +35 -3
- package/server/node_modules/toml/lib/parser.js +224 -143
- package/server/node_modules/toml/package.json +3 -1
- package/server/node_modules/ws/lib/receiver.js +15 -32
- package/server/node_modules/ws/lib/websocket-server.js +4 -4
- package/server/node_modules/ws/lib/websocket.js +4 -4
- package/server/node_modules/ws/package.json +5 -1
- package/server/{orphan-proposed-reconciler-DI_IS1p_.js → orphan-proposed-reconciler-B8H41C4a.js} +14 -24
- package/server/{orphan-proposed-reconciler-BIcNu4tl.js → orphan-proposed-reconciler-DbTmT7qy.js} +1 -1
- package/server/package-lock.json +12 -12
- package/server/package.json +1 -1
- package/server/{pan-dir-CQIfKG8c.js → pan-dir-BTw4MdSe.js} +4 -4
- package/server/{paths-Blj6A9AJ.js → paths-Btkc8mzp.js} +2 -2
- package/server/{pipeline-notifier-BH4PAi-w.js → pipeline-notifier-3frIvSi3.js} +1 -1
- package/server/{pipeline-notifier-D_WYtEwl.js → pipeline-notifier-DTd19f18.js} +2 -2
- package/server/{project-pipelines-jMTitpeO.js → project-pipelines-B95fcAek.js} +2 -2
- package/server/projects-Dc9aoVoG.js +3 -0
- package/server/{prompts-B3njaImU.js → prompts-CIVmjHxn.js} +2 -2
- package/server/{providers-DnPxkHoG.js → providers-BLLk5IIb.js} +1 -1
- package/server/{providers-BbEyFhPX.js → providers-C-yWibCk.js} +7 -7
- package/server/public/assets/{chunk-BO2N2NFS-3qh9TUJi.js → chunk-BO2N2NFS-DzKZyoKY.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-D8UVTPj7.js → diagram-OG6HWLK6-Cx8mWUb8.js} +1 -1
- package/server/public/assets/{dist-BvLLn1YC.js → dist-BqccLhaw.js} +3 -3
- package/server/public/assets/{dist-CyubL7Wj.js → dist-rC3nAs_O.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-BI4E1LbQ.js → ganttDiagram-6RSMTGT7-DLYPLf5T.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-D_bapWkF.js → highlighted-body-OFNGDK62-D4DqixbV.js} +1 -1
- package/server/public/assets/index-CPcysUHk.js +796 -0
- package/server/public/assets/index-H5M0yhM4.css +1 -0
- package/server/public/assets/{linear-CEdobObr.js → linear-yqcXkDfj.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-CWdZ_heB.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-DT79L01f.js → pieDiagram-4H26LBE5-DhraIOaV.js} +1 -1
- package/server/public/assets/{prod-CR_K2DFV.js → prod-DKUunUdN.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-BEkKXXrL.js → quadrantDiagram-W4KKPZXB-DPiRcToa.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-BxSCqn-j.js → sankeyDiagram-5OEKKPKP-3An5HNkZ.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-DicwJGG_.js → xychartDiagram-2RQKCTM6-lbEOjfqQ.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-43LPDfM8.js → pull-requests-D7AL5woD.js} +1 -1
- package/server/{pull-requests-DyUkQl4W.js → pull-requests-NDDNtqNq.js} +3 -3
- package/server/{agents-B9GwfCyp.js → queries-C0LCGG21.js} +710 -325
- package/server/{rally-BtWjybOa.js → rally-4oKvnxLG.js} +3 -3
- package/server/rally-DF5a3ioP.js +3 -0
- package/server/{rally-api-B-osULNL.js → rally-api-41tT6ikZ.js} +2 -2
- package/server/{rally-api-B-YA_oXx.js → rally-api-BsaQ8Vnz.js} +1 -1
- package/server/{rally-client-sErNQBO0.js → rally-client-Bo4hNcCZ.js} +5 -5
- package/server/{rally-client-CzFymP7P.js → rally-client-b5PT1x5L.js} +1 -1
- package/server/{reap-terminal-sessions-DnDQ7pf9.js → reap-terminal-sessions-BR39qflC.js} +1 -1
- package/server/{reap-terminal-sessions-2s-fvilz.js → reap-terminal-sessions-CFkuquQj.js} +1 -1
- package/server/{rebuild-stack-nGD_nPZo.js → rebuild-stack-C7JPUom6.js} +1 -1
- package/server/{rebuild-stack-CoU-HqZj.js → rebuild-stack-Ddv6W017.js} +5 -5
- package/server/{reconstruct-cache-Wj8GrYB0.js → reconstruct-cache-Gqhm---K.js} +6 -6
- package/server/record-DLOqfbkI.js +3 -0
- package/server/record-update-BltEmPge.js +168 -0
- package/server/record-update-CDp7aTaT.js +3 -0
- package/server/recovery-trip-Cn7KJVkS.js +44 -0
- package/server/{release-engine-CBLQXDlH.js → release-engine-BYzmIBf9.js} +5 -5
- package/server/{release-set-BNiqi7hy.js → release-set-7pnxFOWR.js} +3 -3
- package/server/{remote-DW_TWQnr.js → remote-Cvu4CSDk.js} +3 -3
- package/server/{remote-agents-C4cyxHQS.js → remote-agents-C2C6z9tj.js} +6 -33
- package/server/{remote-agents-Cv-U-_V8.js → remote-agents-DYY5fFpd.js} +1 -1
- package/server/{remote-completion-PhXGGFQy.js → remote-completion-2Kb4IDg_.js} +13 -13
- package/server/{remote-DcO9An_f.js → remote-rN0ecjHE.js} +3 -3
- package/server/resume-BFLl-yLn.js +3 -0
- package/server/{review-agent-Dn-yn7Zj.js → review-agent-BZvk0N5G.js} +31 -23
- package/server/{review-agent-u5q3ip7H.js → review-agent-CpSHLzed.js} +1 -1
- package/server/{review-artifacts-D4T04aYI.js → review-artifacts-PCo53YMn.js} +5 -19
- package/server/{review-context-Rc0VDLG_.js → review-context-M7QtJlJq.js} +8 -8
- package/server/{review-monitor-BC--miCO.js → review-monitor-BLC5mTTg.js} +2 -2
- package/server/{review-status-CG0iDuWa.js → review-status-77N3PoZr.js} +1 -1
- package/server/{review-status-Dc1l4dVz.js → review-status-DANr0t-v.js} +32 -58
- package/server/{review-status-enrichment-C1a1OG_1.js → review-status-enrichment-DwOg4UfL.js} +3 -3
- package/server/{review-status-sync-CfSixhhX.js → review-status-sync-Bd08OOFA.js} +1 -1
- package/server/{review-status-sync-CAr-hfnJ.js → review-status-sync-BjTUJ5fx.js} +2 -2
- package/server/{review-verdict-feedback-D2Q960wX.js → review-verdict-feedback-BsFLjN_6.js} +1 -1
- package/server/{review-verdict-feedback-CVDbIDBe.js → review-verdict-feedback-CBf-J_wS.js} +8 -8
- package/server/{rollup-DctoIu-A.js → rollup-Bu0f2EyN.js} +8 -8
- package/server/{rollup-CakjztPl.js → rollup-DTCCdEy4.js} +1 -1
- package/server/{scanner-BTM1jc_u.js → scanner-BlZ2vB7j.js} +7 -7
- package/server/{sequence-io-pnoIDGv4.js → sequence-io-ylyDtz2J.js} +4 -4
- package/server/{sequencer-agent-9Soi-WL-.js → sequencer-agent-DsWQ-87H.js} +6 -17
- package/server/server.js +4695 -4093
- package/server/{service-DfTVoqJg.js → service-CLVBC_1Y.js} +116 -90
- package/server/{session-fork-C4jAFHj8.js → session-fork-DlEIAhRy.js} +2 -2
- package/server/{session-history-DanhhiCw.js → session-history-bnOFKMwf.js} +4 -4
- package/server/settings-CP3GGon2.js +2 -0
- package/server/{settings-Cuc12oP_.js → settings-Cqa-8nyj.js} +2 -2
- package/server/{settings-DfT3f86D.js → settings-gJrdLZy2.js} +3 -3
- package/server/{shadow-engineering-bKuKTCn-.js → shadow-engineering-fq1YEKV3.js} +3 -3
- package/server/{shadow-state-CVHpRWlb.js → shadow-state-BqeFAygK.js} +1 -1
- package/server/{shadow-state-DJz6_pb_.js → shadow-state-RptE9Cau.js} +2 -2
- package/server/shadow-utils-BMWr5tRT.js +39 -0
- package/server/{ship-log-CwqPFfqx.js → ship-log-BRQQi2lU.js} +1 -1
- package/server/{smart-compaction-CiWfGfRZ.js → smart-compaction-CmoXpjeU.js} +7 -7
- package/server/{smart-compaction-B4KlpZGN.js → smart-compaction-DldUel4B.js} +1 -1
- package/server/{spawn-planning-session-CU-DwyDl.js → spawn-planning-session-CoS6LTc6.js} +16 -16
- package/server/{spawn-planning-session-D5N3RuLG.js → spawn-planning-session-DT2tSMxo.js} +1 -1
- package/server/{specialist-completion-CJcv-NXH.js → specialist-completion-pJtESo7m.js} +1 -1
- package/server/{specialist-context-B2HlbNxS.js → specialist-context-CspI4Eog.js} +5 -5
- package/server/{specialist-handoff-logger-CQyF1ygu.js → specialist-handoff-logger-Duz9RGvk.js} +2 -2
- package/server/{specialist-logs-CdcUpfjj.js → specialist-logs-DtSkPJZK.js} +3 -3
- package/server/{specialists-D7AcFi1u.js → specialists-CywEMwxk.js} +1 -1
- package/server/{specialists-k22_Btaq.js → specialists-D9-dMUtI.js} +1 -1
- package/server/{specialists-CFgw_0Q6.js → specialists-Dax7tqXC.js} +161 -448
- package/server/{specialists-CwzFdapR.js → specialists-GF42OOqd.js} +18 -18
- package/server/specs-VwcFtEDi.js +3 -0
- package/server/{src-B4TTzNSr.js → src-By3D85Ry.js} +6 -1
- package/server/{src-BvpMg4EB.js → src-CqyFg52C.js} +5 -5
- package/server/{src-D4YUZrwR.js → src-DhxM-eCb.js} +6 -6
- package/server/{stack-health-DVN7zRnL.js → stack-health-BsEVrJZ6.js} +1 -1
- package/server/{stack-health-CSgcYcr8.js → stack-health-C-SnpRHh.js} +2 -2
- package/server/stale-task-claims-vTxmRzLi.js +69 -0
- package/server/state-home-Bur1y4oH.js +213 -0
- package/server/{state-mapping-C13UaCL7.js → state-mapping-Ci0pkac4.js} +1 -1
- package/server/state-migrate-D3VveYfO.js +362 -0
- package/server/{stuck-remediation-CxsyxwFO.js → stuck-remediation-B699-p8v.js} +36 -41
- package/server/{stuck-remediation-nTIvhGOR.js → stuck-remediation-CaFYYTQW.js} +1 -1
- package/server/{summary-fork-CnRMPCYd.js → summary-fork-BxnF8Xh0.js} +2 -2
- package/server/{summary-fork-gKSoFAnK.js → summary-fork-COqYpVa3.js} +8 -8
- package/server/supervisor/{paths-3R6b989k.js → paths-Bk6hJRH9.js} +4 -3
- package/server/supervisor/pty-supervisor.js +2 -2
- package/server/supervisor/{pty-token-CScQ32Rj.js → pty-token-BZS5GYdG.js} +2 -2
- package/server/supervisor-eWAAmXKu.js +2 -0
- package/server/{supervisor-CZMs8s0M.js → supervisor-liMgIPDF.js} +2 -2
- package/server/{swarm-readiness-h6-pwY8w.js → swarm-readiness-sXB1vhzo.js} +3 -3
- package/server/{system-prerequisites-DZZTi2G6.js → system-prerequisites-Bz6KdkFJ.js} +1 -13
- package/server/{teardown-workspace-B4D-oCVg.js → teardown-workspace-DvzqnmUF.js} +14 -71
- package/server/{test-agent-queue-CnuYku4B.js → test-agent-queue-hAU1Ah08.js} +5 -5
- package/server/{tldr-daemon-CuA8hz21.js → tldr-daemon-Bam7Xhoo.js} +2 -2
- package/server/{tldr-daemon-CgZQ3jmZ.js → tldr-daemon-DhGwd88s.js} +1 -1
- package/server/tmux-C-rgxRDA.js +3 -0
- package/server/{tmux-C3g9VFcg.js → tmux-U55cNGFG.js} +92 -4
- package/server/{token-g_sJ19g3.js → token-Dsa-i36o.js} +2 -2
- package/server/{token-util-DiwnnbJo.js → token-util-BWNpH96m.js} +1 -1
- package/server/token-util-DRt0j2nQ.js +3 -0
- package/server/{tracker-config-dQxC15vH.js → tracker-config-OkdbaUCm.js} +2 -2
- package/server/{tracker-utils--z8FLSWn.js → tracker-utils-CghXMF3q.js} +2 -2
- package/server/{tracker-utils-DkKyRT0H.js → tracker-utils-DdzUiPNU.js} +1 -1
- package/server/{tunnel-BpWZs0Jy.js → tunnel-D1YxesBL.js} +3 -3
- package/server/{tunnel-CN2px87h.js → tunnel-DjlzgTl3.js} +1 -1
- package/server/typed-errors-CH4roFIj.js +3 -0
- package/server/{typed-errors-sLpGfegz.js → typed-errors-n_Tnb4Fh.js} +3 -4
- package/server/{types-BLS_Zbmd.js → types-DOjWNv3Z.js} +1 -1
- package/server/{types-tlXf80x3.js → types-DXBMm4mX.js} +1 -1
- package/server/{uat-train-utGVmqdm.js → uat-train-CaaWs9Rp.js} +1 -1
- package/server/{uat-train-BRo6DM7p.js → uat-train-CqN34zFx.js} +24 -25
- package/server/{validation-CsPVsoA0.js → validation-4-z2Cw4z.js} +70 -23
- package/server/validation-DpTNakM6.js +3 -0
- package/server/verification-artifact-DK1xb1zG.js +56 -0
- package/server/verification-artifact-JD_edpZ9.js +2 -0
- package/server/{verification-runner-CMT5WRMS.js → verification-runner-BjHN80pJ.js} +338 -58
- package/server/verification-runner-ShYu5Ph3.js +2 -0
- package/server/{vtt-parser-C_XPlifj.js → vtt-parser-QnRfcjiU.js} +1 -1
- package/server/{work-agent-prompt-ZTAb2Hyf.js → work-agent-prompt-BiJ43Der.js} +12 -88
- package/server/workflows-B4C3lY9E.js +2 -0
- package/server/{workflows-CXRwhw_o.js → workflows-DkTotz_m.js} +17 -24
- package/server/{workspace-CNfuj1-5.js → workspace-CuN0ev4Z.js} +3 -3
- package/server/{workspace-9UEsKuiP.js → workspace-DQ4vVivd.js} +1 -1
- package/server/{workspace-config-ChWOECy0.js → workspace-config-C77NKnsV.js} +1 -1
- package/server/{workspace-manager-BO-6k3sP.js → workspace-manager-B1mYn0lN.js} +1 -1
- package/server/{workspace-manager-D8AByFIT.js → workspace-manager-Beeo2aKF.js} +23 -48
- package/server/{workspace-metadata-CvC268MN.js → workspace-metadata-BZC5BmoP.js} +2 -2
- package/server/{workspace-metadata-DZiJtnuF.js → workspace-metadata-Cy7_ZACL.js} +1 -1
- package/server/{workspaces-D-uIoqbg.js → workspaces-CGuzW1Ia.js} +182 -152
- package/sync-sources/hooks/codex-notify-hook +64 -8
- package/sync-sources/hooks/record-cost-event.js +1109 -36
- package/sync-sources/hooks/record-cost-event.js.map +1 -1
- package/sync-sources/hooks/statusline.sh +2 -2
- package/sync-sources/hooks/work-agent-stop-hook +1 -2
- package/server/acceptance-criteria-BZ_nQS1f.js +0 -33
- package/server/agent-state-lGvgPP4m.js +0 -3
- package/server/agents-CEcaxSkR.js +0 -3
- package/server/auto-commit-IW-eik_b.js +0 -3
- package/server/bd-process-lock-XAXAet9O.js +0 -390
- package/server/beads-B1u04n3o.js +0 -2
- package/server/beads-BeSMEjGT.js +0 -649
- package/server/beads-query-Dl4FhT8J.js +0 -95
- package/server/beads-restore-BUItPOjI.js +0 -23
- package/server/cli-D9cUTbBr.js +0 -3
- package/server/codex-BYPz6ZdF.js +0 -3
- package/server/compact-beads-CyJtoXJi.js +0 -94
- package/server/compact-beads-N00E4EVa.js +0 -3
- package/server/deacon-swarm-CvdFekIO.js +0 -2
- package/server/dist-BNwrgsUO.js +0 -3
- package/server/export-BJHSVwKP.js +0 -87
- package/server/forge-8y6aEPTB.js +0 -2
- package/server/hume-CerGi2RH.js +0 -3
- package/server/inspect-agent-CWkeAB7J.js +0 -2
- package/server/lifecycle-Ck2UR27D.js +0 -14
- package/server/merge-ops-CFkQtXEj.js +0 -2
- package/server/projects-CrBE6IhN.js +0 -3
- package/server/public/assets/index-BAZxZ-8I.js +0 -796
- package/server/public/assets/index-FBG3JBfq.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-BYP8MI37.js +0 -1
- package/server/rally-oggyp4cs.js +0 -3
- package/server/record-lEYK__LD.js +0 -3
- package/server/recovery-trip-BT7nb9OV.js +0 -98
- package/server/resolver-C7dLn8OK.js +0 -158
- package/server/resume-BYZBIab-.js +0 -3
- package/server/settings-Cy7SCFO9.js +0 -2
- package/server/specs-RzcDgozr.js +0 -3
- package/server/supervisor-CfX192ma.js +0 -2
- package/server/tmux-By8E_Yv_.js +0 -3
- package/server/token-util-C9u4An3K.js +0 -3
- package/server/tracker-config-BzfVj41Z.js +0 -3
- package/server/typed-errors-CrN1AByg.js +0 -3
- package/server/validation-Dq_wwcw3.js +0 -3
- package/server/verification-runner-D0Uh-9jc.js +0 -2
- package/server/workflows-BLwxUMP7.js +0 -2
- package/server/writer-BUweuRPx.js +0 -3
- package/server/writer-CrP2xuBn.js +0 -251
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { Fn as init_projects,
|
|
1
|
+
import { Fn as init_projects, Sn as findProjectByPathSync, Yr as init_paths, Z as resolveModel, d as loadConfigNoMigration, kr as CONFIG_FILE, t as init_config_yaml } from "./config-yaml-CqaAyn8y.js";
|
|
2
2
|
import { t as require_toml } from "./toml-CeLDATih.js";
|
|
3
|
-
import {
|
|
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 {
|
|
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 { S as writeLatestFlywheelStatus, c as spawnFlywheelAgent, f as getFlywheelRunDetail, g as nextFlywheelRunId, h as listFlywheelRuns, i as loadResumeSessionId, r as isFlywheelDevcontainerRuntime, s as saveResumeSessionId, t as FLYWHEEL_ORCHESTRATOR_AGENT_ID, u as abortFlywheelRun, v as readFlywheelLaunchMetadata, x as writeFlywheelLaunchMetadata, y as resolveLiveFlywheelRunId } from "./flywheel-
|
|
12
|
-
import { t as recordDeaconNudge } from "./deacon-nudge-log-
|
|
13
|
-
import {
|
|
14
|
-
import { n as ensureDevcontainerSync, r as init_ensure_devcontainer } from "./ensure-devcontainer-
|
|
3
|
+
import { R as sessionExists, S as init_tmux, T as killSession, w as isPaneDead } from "./tmux-U55cNGFG.js";
|
|
4
|
+
import { L as messageAgent, s as init_agents } from "./queries-C0LCGG21.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-B2KSk54U.js";
|
|
6
|
+
import { O as findVBriefByIssue, j as readVBriefDocument, k as init_vbrief_index } from "./io-DkC4sFSy.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-BX5aD-6F.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-BguNQ1F_.js";
|
|
9
|
+
import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-Dx8hUsvC.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-BlZ2vB7j.js";
|
|
11
|
+
import { S as writeLatestFlywheelStatus, c as spawnFlywheelAgent, f as getFlywheelRunDetail, g as nextFlywheelRunId, h as listFlywheelRuns, i as loadResumeSessionId, r as isFlywheelDevcontainerRuntime, s as saveResumeSessionId, t as FLYWHEEL_ORCHESTRATOR_AGENT_ID, u as abortFlywheelRun, v as readFlywheelLaunchMetadata, x as writeFlywheelLaunchMetadata, y as resolveLiveFlywheelRunId } from "./flywheel-CqkO3cDj.js";
|
|
12
|
+
import { t as recordDeaconNudge } from "./deacon-nudge-log-ilDfxrhK.js";
|
|
13
|
+
import { t as extractACFromDocument } from "./acceptance-criteria-aQFKQf-J.js";
|
|
14
|
+
import { n as ensureDevcontainerSync, r as init_ensure_devcontainer } from "./ensure-devcontainer-5e9xOve4.js";
|
|
15
15
|
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
16
16
|
import { Effect } from "effect";
|
|
17
17
|
import { existsSync } from "fs";
|
|
@@ -206,15 +206,15 @@ async function runInline(operation, payload, onProgress) {
|
|
|
206
206
|
return null;
|
|
207
207
|
}
|
|
208
208
|
case "getArtifactBySlug": {
|
|
209
|
-
const { getArtifactBySlugJob } = await import("./artifact-index-jobs-
|
|
209
|
+
const { getArtifactBySlugJob } = await import("./artifact-index-jobs-qqa51B2Z.js");
|
|
210
210
|
return getArtifactBySlugJob(payload);
|
|
211
211
|
}
|
|
212
212
|
case "listArtifactsForWorkspaceOrIssue": {
|
|
213
|
-
const { listArtifactsForWorkspaceOrIssueJob } = await import("./artifact-index-jobs-
|
|
213
|
+
const { listArtifactsForWorkspaceOrIssueJob } = await import("./artifact-index-jobs-qqa51B2Z.js");
|
|
214
214
|
return listArtifactsForWorkspaceOrIssueJob(payload);
|
|
215
215
|
}
|
|
216
216
|
case "unshareArtifactBySlug": {
|
|
217
|
-
const { unshareArtifactBySlugJob } = await import("./artifact-index-jobs-
|
|
217
|
+
const { unshareArtifactBySlugJob } = await import("./artifact-index-jobs-qqa51B2Z.js");
|
|
218
218
|
return unshareArtifactBySlugJob(payload);
|
|
219
219
|
}
|
|
220
220
|
}
|
|
@@ -273,7 +273,6 @@ function runDashboardDbJob(operation, payload, onProgress) {
|
|
|
273
273
|
}
|
|
274
274
|
//#endregion
|
|
275
275
|
//#region services/flywheel-actions.ts
|
|
276
|
-
init_acceptance_criteria();
|
|
277
276
|
init_ensure_devcontainer();
|
|
278
277
|
init_control_settings();
|
|
279
278
|
const DEFAULT_BRIEF_PATH = "docs/flywheel-brief.md";
|
|
@@ -455,12 +454,12 @@ async function pauseFlywheelRunForDashboard() {
|
|
|
455
454
|
if (before.activeRunId) try {
|
|
456
455
|
const { readFile } = await import("node:fs/promises");
|
|
457
456
|
const { join } = await import("node:path");
|
|
458
|
-
const { getAgentDir } = await import("./agents-
|
|
457
|
+
const { getAgentDir } = await import("./agents-BA15AQqo.js");
|
|
459
458
|
const sessionId = (await readFile(join(getAgentDir(FLYWHEEL_ORCHESTRATOR_AGENT_ID), "session.id"), "utf-8")).trim();
|
|
460
459
|
if (sessionId) await saveResumeSessionId(before.activeRunId, sessionId);
|
|
461
460
|
} catch {}
|
|
462
461
|
await setPaused(true);
|
|
463
|
-
await import("./agents-
|
|
462
|
+
await import("./agents-BA15AQqo.js").then(({ stopAgent }) => Effect.runPromise(stopAgent(FLYWHEEL_ORCHESTRATOR_AGENT_ID)));
|
|
464
463
|
return {
|
|
465
464
|
before,
|
|
466
465
|
after: await readGateSnapshot(),
|
|
@@ -470,7 +469,7 @@ async function pauseFlywheelRunForDashboard() {
|
|
|
470
469
|
async function abortFlywheelRunForDashboard() {
|
|
471
470
|
const candidate = await getActiveRunId();
|
|
472
471
|
if (!candidate) return { aborted: await resolveLiveFlywheelRunId() ?? null };
|
|
473
|
-
const { stopAgent } = await import("./agents-
|
|
472
|
+
const { stopAgent } = await import("./agents-BA15AQqo.js");
|
|
474
473
|
await Effect.runPromise(stopAgent(FLYWHEEL_ORCHESTRATOR_AGENT_ID));
|
|
475
474
|
await abortFlywheelRun(candidate);
|
|
476
475
|
return { aborted: candidate };
|
|
@@ -1901,7 +1900,7 @@ function canStartUatTrainReconciler() {
|
|
|
1901
1900
|
async function getReadySet() {
|
|
1902
1901
|
const status = await readCurrentFlywheelStatusForDashboard();
|
|
1903
1902
|
if (!status) return null;
|
|
1904
|
-
const { computeMergeQueue, resolveMergeQueuePrUrl } = await import("./flywheel-merge-order-
|
|
1903
|
+
const { computeMergeQueue, resolveMergeQueuePrUrl } = await import("./flywheel-merge-order-LDzQDwSg.js");
|
|
1905
1904
|
const fromVerbs = (await Effect.runPromise(computeMergeQueue(status.activePipeline, projectRoot(), {
|
|
1906
1905
|
getPrUrl: resolveMergeQueuePrUrl,
|
|
1907
1906
|
onIneligible: (issueId, reason) => console.log(`[uat-train] ${issueId} has a merge verb but is not merge-eligible (${reason}) — excluded from the ready set`)
|
|
@@ -1927,8 +1926,8 @@ async function getReadySet() {
|
|
|
1927
1926
|
*/
|
|
1928
1927
|
async function sweepEligibleFeatures(alreadyIncluded) {
|
|
1929
1928
|
try {
|
|
1930
|
-
const { loadReviewStatuses, mergeGateEligibility } = await import("./review-status-
|
|
1931
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
1929
|
+
const { loadReviewStatuses, mergeGateEligibility } = await import("./review-status-77N3PoZr.js");
|
|
1930
|
+
const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
|
|
1932
1931
|
const { execFile } = await import("node:child_process");
|
|
1933
1932
|
const { promisify } = await import("node:util");
|
|
1934
1933
|
const execFileAsync = promisify(execFile);
|
|
@@ -2162,7 +2161,7 @@ async function postUatGenerationStackPayload(name) {
|
|
|
2162
2161
|
}
|
|
2163
2162
|
async function postUatGenerationPromotePayload(name, firePostMerge) {
|
|
2164
2163
|
const root = projectRoot();
|
|
2165
|
-
const { reviewRecordEligibility } = await import("./flywheel-merge-order-
|
|
2164
|
+
const { reviewRecordEligibility } = await import("./flywheel-merge-order-LDzQDwSg.js");
|
|
2166
2165
|
const result = await promoteUatGeneration(name, root, {
|
|
2167
2166
|
git: buildUatPromoteGitDeps(root),
|
|
2168
2167
|
store: {
|
|
@@ -2180,4 +2179,4 @@ async function postUatGenerationPromotePayload(name, firePostMerge) {
|
|
|
2180
2179
|
//#endregion
|
|
2181
2180
|
export { getDashboardIdentity as _, postUatGenerationStackPayload as a, shouldRefuseHostDashboardPort as b, 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, isWorkspaceRepoRoot as v, readHostDashboardApiPort as y };
|
|
2182
2181
|
|
|
2183
|
-
//# sourceMappingURL=uat-train-
|
|
2182
|
+
//# sourceMappingURL=uat-train-CqN34zFx.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
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 { Sr as init_errors } from "./config-yaml-CqaAyn8y.js";
|
|
3
|
+
import { f as init_config, m as loadConfigSync } from "./config-DfaUXr6r.js";
|
|
4
|
+
import { n as init_workspace_config, r as replacePlaceholdersSync } from "./workspace-config-C77NKnsV.js";
|
|
5
5
|
import { Effect } from "effect";
|
|
6
6
|
import "fs";
|
|
7
7
|
import { join } from "path";
|
|
@@ -25,6 +25,32 @@ function buildQualityGateEnv(gateEnv) {
|
|
|
25
25
|
...gateEnv
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
|
+
function registerGateProcessGroup(pid) {
|
|
29
|
+
if (!pid || process.platform === "win32") return void 0;
|
|
30
|
+
const watchdog = setTimeout(() => {
|
|
31
|
+
console.warn(`[quality-gate] process group ${pid} exceeded timeout+grace — killing group (PAN-2669)`);
|
|
32
|
+
killGateProcessGroup(pid);
|
|
33
|
+
}, GATE_TIMEOUT_MS + GATE_WATCHDOG_GRACE_MS);
|
|
34
|
+
watchdog.unref();
|
|
35
|
+
activeGateProcessGroups.set(pid, watchdog);
|
|
36
|
+
return pid;
|
|
37
|
+
}
|
|
38
|
+
function killGateProcessGroup(pgid) {
|
|
39
|
+
if (!pgid) return;
|
|
40
|
+
const watchdog = activeGateProcessGroups.get(pgid);
|
|
41
|
+
if (watchdog) clearTimeout(watchdog);
|
|
42
|
+
activeGateProcessGroups.delete(pgid);
|
|
43
|
+
try {
|
|
44
|
+
process.kill(-pgid, "SIGKILL");
|
|
45
|
+
} catch {}
|
|
46
|
+
}
|
|
47
|
+
/** PAN-2669: reap every live gate process group — called on server shutdown so
|
|
48
|
+
* restarts never orphan vitest/build trees. */
|
|
49
|
+
function killAllGateProcessGroups() {
|
|
50
|
+
const count = activeGateProcessGroups.size;
|
|
51
|
+
for (const pgid of [...activeGateProcessGroups.keys()]) killGateProcessGroup(pgid);
|
|
52
|
+
return count;
|
|
53
|
+
}
|
|
28
54
|
async function runQualityGatesPromise(gates, projectPath, phase = "pre_push", opts = {}) {
|
|
29
55
|
if (opts.isRemote && !opts.vmName) throw new Error("Remote workspace requires vmName");
|
|
30
56
|
if (opts.isRemote && opts.vmName) {
|
|
@@ -38,10 +64,12 @@ async function runQualityGatesPromise(gates, projectPath, phase = "pre_push", op
|
|
|
38
64
|
const cwd = gate.path ? join(projectPath, gate.path) : projectPath;
|
|
39
65
|
console.log(`[quality-gate] Running "${name}" (${required ? "required" : "optional"}) in ${cwd}`);
|
|
40
66
|
opts.onLog?.(`Running gate "${name}"${required ? "" : " (optional)"}…`);
|
|
67
|
+
opts.onGateStart?.(name);
|
|
41
68
|
const startTime = Date.now();
|
|
42
69
|
if (gate.type === "http_health") {
|
|
43
70
|
const result = await runHttpHealthGate(name, gate, required);
|
|
44
71
|
results.push(result);
|
|
72
|
+
opts.onGateResult?.(result);
|
|
45
73
|
if (!result.passed && required) {
|
|
46
74
|
console.log(`[quality-gate] ✗ Required gate "${name}" failed — stopping`);
|
|
47
75
|
break;
|
|
@@ -71,6 +99,7 @@ async function runQualityGatesPromise(gates, projectPath, phase = "pre_push", op
|
|
|
71
99
|
error: `container ${containerName} is not running`,
|
|
72
100
|
infraUnavailable: true
|
|
73
101
|
});
|
|
102
|
+
opts.onGateResult?.(results[results.length - 1]);
|
|
74
103
|
if (required) break;
|
|
75
104
|
continue;
|
|
76
105
|
}
|
|
@@ -84,6 +113,7 @@ async function runQualityGatesPromise(gates, projectPath, phase = "pre_push", op
|
|
|
84
113
|
error: "docker daemon unreachable",
|
|
85
114
|
infraUnavailable: true
|
|
86
115
|
});
|
|
116
|
+
opts.onGateResult?.(results[results.length - 1]);
|
|
87
117
|
if (required) break;
|
|
88
118
|
continue;
|
|
89
119
|
}
|
|
@@ -96,23 +126,35 @@ async function runQualityGatesPromise(gates, projectPath, phase = "pre_push", op
|
|
|
96
126
|
let lastError = null;
|
|
97
127
|
let passedGate = false;
|
|
98
128
|
let passOutput = "";
|
|
99
|
-
for (let attempt = 1; attempt <= maxAttempts; attempt++)
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
129
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
130
|
+
let gatePgid;
|
|
131
|
+
try {
|
|
132
|
+
const useHostCwd = !isRemote && !(gate.container && gate.container_name);
|
|
133
|
+
const env = buildQualityGateEnv(gate.env);
|
|
134
|
+
const execPromise = execAsync(resolvedCommand, {
|
|
135
|
+
cwd: useHostCwd ? cwd : void 0,
|
|
136
|
+
env,
|
|
137
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
138
|
+
timeout: GATE_TIMEOUT_MS,
|
|
139
|
+
...process.platform !== "win32" ? { detached: true } : {}
|
|
140
|
+
});
|
|
141
|
+
gatePgid = registerGateProcessGroup(execPromise.child.pid);
|
|
142
|
+
if (opts.onGateOutput) {
|
|
143
|
+
execPromise.child.stdout?.on("data", (chunk) => opts.onGateOutput(name, String(chunk)));
|
|
144
|
+
execPromise.child.stderr?.on("data", (chunk) => opts.onGateOutput(name, String(chunk)));
|
|
145
|
+
}
|
|
146
|
+
const { stdout, stderr } = await execPromise;
|
|
147
|
+
killGateProcessGroup(gatePgid);
|
|
148
|
+
passedGate = true;
|
|
149
|
+
passOutput = (stdout + stderr).slice(-2e3);
|
|
150
|
+
break;
|
|
151
|
+
} catch (error) {
|
|
152
|
+
killGateProcessGroup(gatePgid);
|
|
153
|
+
lastError = error;
|
|
154
|
+
if (attempt < maxAttempts) {
|
|
155
|
+
console.log(`[quality-gate] ✗ "${name}" failed attempt ${attempt}/${maxAttempts} — retrying (gate declares retry: ${gate.retry})`);
|
|
156
|
+
opts.onLog?.(`↻ ${name} failed attempt ${attempt}/${maxAttempts} — retrying`);
|
|
157
|
+
}
|
|
116
158
|
}
|
|
117
159
|
}
|
|
118
160
|
if (passedGate) {
|
|
@@ -126,6 +168,7 @@ async function runQualityGatesPromise(gates, projectPath, phase = "pre_push", op
|
|
|
126
168
|
output: passOutput,
|
|
127
169
|
durationMs
|
|
128
170
|
});
|
|
171
|
+
opts.onGateResult?.(results[results.length - 1]);
|
|
129
172
|
} else {
|
|
130
173
|
const error = lastError;
|
|
131
174
|
const durationMs = Date.now() - startTime;
|
|
@@ -140,6 +183,7 @@ async function runQualityGatesPromise(gates, projectPath, phase = "pre_push", op
|
|
|
140
183
|
durationMs,
|
|
141
184
|
error: error.message?.slice(0, 500)
|
|
142
185
|
});
|
|
186
|
+
opts.onGateResult?.(results[results.length - 1]);
|
|
143
187
|
if (required) {
|
|
144
188
|
console.log(`[quality-gate] ✗ Required gate "${name}" failed — stopping`);
|
|
145
189
|
break;
|
|
@@ -194,7 +238,7 @@ async function runHttpHealthGate(name, gate, required) {
|
|
|
194
238
|
};
|
|
195
239
|
}
|
|
196
240
|
}
|
|
197
|
-
var execAsync, DASHBOARD_RUNTIME_ENV_KEYS, DEFAULT_GATES, runQualityGates;
|
|
241
|
+
var execAsync, DASHBOARD_RUNTIME_ENV_KEYS, GATE_TIMEOUT_MS, GATE_WATCHDOG_GRACE_MS, activeGateProcessGroups, DEFAULT_GATES, runQualityGates;
|
|
198
242
|
var init_validation = __esmMin((() => {
|
|
199
243
|
init_workspace_config();
|
|
200
244
|
init_config();
|
|
@@ -205,6 +249,9 @@ var init_validation = __esmMin((() => {
|
|
|
205
249
|
"PORT",
|
|
206
250
|
"DASHBOARD_URL"
|
|
207
251
|
];
|
|
252
|
+
GATE_TIMEOUT_MS = 1200 * 1e3;
|
|
253
|
+
GATE_WATCHDOG_GRACE_MS = 3e4;
|
|
254
|
+
activeGateProcessGroups = /* @__PURE__ */ new Map();
|
|
208
255
|
DEFAULT_GATES = {
|
|
209
256
|
typecheck: { command: "npm run typecheck 2>&1" },
|
|
210
257
|
lint: { command: "npm run lint 2>&1" },
|
|
@@ -213,6 +260,6 @@ var init_validation = __esmMin((() => {
|
|
|
213
260
|
runQualityGates = (gates, projectPath, phase = "pre_push", opts = {}) => Effect.promise(() => runQualityGatesPromise(gates, projectPath, phase, opts));
|
|
214
261
|
}));
|
|
215
262
|
//#endregion
|
|
216
|
-
export { init_validation as n,
|
|
263
|
+
export { runQualityGates as i, init_validation as n, killAllGateProcessGroups as r, DEFAULT_GATES as t };
|
|
217
264
|
|
|
218
|
-
//# sourceMappingURL=validation-
|
|
265
|
+
//# sourceMappingURL=validation-4-z2Cw4z.js.map
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
|
+
//#region ../../lib/cloister/verification-artifact.ts
|
|
4
|
+
/**
|
|
5
|
+
* Verification gate artifact — the durable record of the most recent
|
|
6
|
+
* quality-gate run for a workspace, written by the verification runner and
|
|
7
|
+
* served to the dashboard's issue-tree Lint node.
|
|
8
|
+
*
|
|
9
|
+
* Lives at `<workspace>/.overdeck/verification-latest.json` (workspace runtime
|
|
10
|
+
* plane, gitignored alongside continue.json). Each run overwrites the previous
|
|
11
|
+
* artifact; history is not kept here — review-status history remains the
|
|
12
|
+
* canonical timeline.
|
|
13
|
+
*/
|
|
14
|
+
const ARTIFACT_RELATIVE_PATH = join(".overdeck", "verification-latest.json");
|
|
15
|
+
function verificationArtifactPath(workspacePath) {
|
|
16
|
+
return join(workspacePath, ARTIFACT_RELATIVE_PATH);
|
|
17
|
+
}
|
|
18
|
+
function writeVerificationArtifact(workspacePath, issueId, gateResults, progress) {
|
|
19
|
+
const failed = gateResults.find((r) => !r.passed && r.required !== false);
|
|
20
|
+
const running = progress !== void 0;
|
|
21
|
+
const artifact = {
|
|
22
|
+
issueId,
|
|
23
|
+
ranAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
24
|
+
outcome: running ? "running" : failed ? "failed" : "passed",
|
|
25
|
+
...running && progress.currentGate ? { currentGate: progress.currentGate } : {},
|
|
26
|
+
...running && progress.currentGateOutput ? { currentGateOutput: progress.currentGateOutput } : {},
|
|
27
|
+
...!running && failed ? { failedCheck: failed.name } : {},
|
|
28
|
+
gates: gateResults.map((r) => ({
|
|
29
|
+
name: r.name,
|
|
30
|
+
passed: r.passed,
|
|
31
|
+
required: r.required !== false,
|
|
32
|
+
durationMs: r.durationMs,
|
|
33
|
+
...r.passed ? {} : { output: r.output },
|
|
34
|
+
...r.error ? { error: r.error } : {}
|
|
35
|
+
}))
|
|
36
|
+
};
|
|
37
|
+
const path = verificationArtifactPath(workspacePath);
|
|
38
|
+
mkdirSync(join(workspacePath, ".overdeck"), { recursive: true });
|
|
39
|
+
writeFileSync(path, JSON.stringify(artifact, null, 2));
|
|
40
|
+
return artifact;
|
|
41
|
+
}
|
|
42
|
+
function readVerificationArtifact(workspacePath) {
|
|
43
|
+
const path = verificationArtifactPath(workspacePath);
|
|
44
|
+
if (!existsSync(path)) return null;
|
|
45
|
+
try {
|
|
46
|
+
const parsed = JSON.parse(readFileSync(path, "utf-8"));
|
|
47
|
+
if (!parsed || !Array.isArray(parsed.gates)) return null;
|
|
48
|
+
return parsed;
|
|
49
|
+
} catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//#endregion
|
|
54
|
+
export { verificationArtifactPath as n, writeVerificationArtifact as r, readVerificationArtifact as t };
|
|
55
|
+
|
|
56
|
+
//# sourceMappingURL=verification-artifact-DK1xb1zG.js.map
|