@overdeck/desktop 0.45.23 → 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-DOA0KgXx.js → acceptance-criteria-DDCnXF58.js} +2 -2
- package/server/{advancing-selfheal-BBu6DSNm.js → advancing-selfheal-BVwW4qRn.js} +6 -6
- package/server/{agent-gc-BV1q_2EV.js → agent-gc-CHcnvonI.js} +4 -4
- package/server/agent-state-Bc3tzUC8.js +3 -0
- package/server/{agent-state-service-HoK8U4jW.js → agent-state-service-BsgWxZuB.js} +5 -5
- package/server/{agent-state-service-CnzFKSAQ.js → agent-state-service-D5UGKIJL.js} +1 -1
- package/server/{agents-B4Bjbkfv.js → agents-EbI0zCJl.js} +4 -4
- package/server/agents-wi9NWzs2.js +3 -0
- package/server/{archive-planning-zkJb3BeM.js → archive-planning-BZDgzoEj.js} +1 -1
- package/server/{archive-planning-DYrYojxl.js → archive-planning-Du25Jtst.js} +4 -4
- package/server/{artifact-index-jobs-C-xy7Z5v.js → artifact-index-jobs-CbEDfCDu.js} +2 -2
- package/server/assemble-J2ZZ2C15.js +339 -0
- package/server/{backlog-auto-trigger-GtG71X8H.js → backlog-auto-trigger-2R2jog7n.js} +3 -3
- package/server/{behavior-B_-4EKF3.js → behavior-B3exJ42O.js} +2 -2
- package/server/{briefing-freshness-DWdW7vUm.js → briefing-freshness-D1wzUIWv.js} +2 -2
- package/server/{build-info-DgTqZkL5.js → build-info-CZk_TITh.js} +1 -1
- package/server/{build-info-BT096lEl.js → build-info-Ie_D0_BT.js} +3 -3
- package/server/{checkpoint-manager-DDqcGyu8.js → checkpoint-manager-BI1Wxoku.js} +2 -2
- package/server/{checkpoint-manager-B7Bt29J0.js → checkpoint-manager-DwbQoqrC.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-CpgCjAlN.js → checkpoints-BJIs5QIA.js} +1 -1
- package/server/{checkpoints-C-AXLfYT.js → checkpoints-CQB1h765.js} +2 -2
- package/server/{claude-hooks-provision-C8wdRnN1.js → claude-hooks-provision-8Ngo8TpT.js} +1 -1
- package/server/{claude-hooks-provision-but-_qGY.js → claude-hooks-provision-D8GXF3_s.js} +2 -2
- package/server/{claude-permissions-H_5wHQZQ.js → claude-permissions-DNWEVV6z.js} +2 -2
- package/server/{claude-settings-overlay-CbSz0Dvb.js → claude-settings-overlay-CEdaqpWI.js} +2 -2
- package/server/{claude-settings-overlay-BTENVmYf.js → claude-settings-overlay-DWy-Bb4Y.js} +1 -1
- package/server/cli-B86rejVV.js +3 -0
- package/server/{cli-vBeXbPrq.js → cli-RoOx5DUf.js} +9 -9
- package/server/{cliproxy-Bgb2XCqi.js → cliproxy-C8a1vtTU.js} +2 -2
- package/server/{cliproxy-DW0V86F8.js → cliproxy-fHfIeiGd.js} +1 -1
- package/server/{close-issue-Dn_4c4G8.js → close-issue-DoOifFIK.js} +5 -5
- package/server/{closed-issue-reaper-hANY_ehE.js → closed-issue-reaper-Bk3SU4RC.js} +9 -9
- package/server/{closed-issue-reaper-CWpY2uBw.js → closed-issue-reaper-CktPXo8m.js} +1 -1
- package/server/{codex-TmSi-yTv.js → codex-BZXGhUVB.js} +7 -7
- package/server/{codex-Dg7Is5yb.js → codex-GcHuUF-k.js} +1 -1
- package/server/{codex-parser-C4gSH-IR.js → codex-parser-CFZ1_1Jl.js} +2 -2
- package/server/{config-CCvjQf27.js → config-BZ0sHTju.js} +2 -2
- package/server/{config-DjLOdbgT.js → config-CKxYiCmX.js} +2 -2
- package/server/{config-DUIhMN_T.js → config-DzV30TOm.js} +1 -1
- package/server/{config-yaml-DvyMuOle.js → config-yaml-DySPNmKN.js} +23 -9
- package/server/{conflict-gate-CmrYpa47.js → conflict-gate-BaCVrH-N.js} +3 -3
- package/server/{conflict-gate-BSJkNTdp.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-aP1ANIlI.js → control-settings-BQp7_4uD.js} +4 -4
- package/server/{conversation-compaction-CNbTLB86.js → conversation-compaction-CgrR8YYp.js} +8 -8
- package/server/{conversation-compaction-DiG5zWQq.js → conversation-compaction-eQB5CkOe.js} +1 -1
- package/server/{conversation-service-Up7FEzIC.js → conversation-service-BLd3MYsG.js} +1 -1
- package/server/{conversation-service-Du-MTNpJ.js → conversation-service-DPJ71F33.js} +329 -19
- package/server/{conversations-DbOs1e9Q.js → conversations-6AfUfbwc.js} +5 -5
- package/server/{conversations-6mPANqvL.js → conversations-CAsJF9kh.js} +1 -1
- package/server/{cost-Ca0YTWDw.js → cost-B2ddP6wq.js} +2 -2
- package/server/{cost-CW4WSe72.js → cost-R-m6Yi-W.js} +3 -3
- package/server/{cost-sync-C0VdGme1.js → cost-sync-BsN6ER0n.js} +3 -3
- package/server/{dag-CdOjJVDT.js → dag-B1ucnjDU.js} +2 -2
- package/server/{dangerous-git-ops-CT-IypG3.js → dangerous-git-ops-BXqeWVSf.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/{deacon-pRnyD5w9.js → deacon-CU_cAYSR.js} +254 -144
- package/server/{deacon-DYSEJb48.js → deacon-kiQrb4ZT.js} +3 -3
- package/server/{deacon-nudge-log-Bjg8U4Y9.js → deacon-nudge-log-6wVqAaqz.js} +3 -3
- package/server/{deacon-swarm-DftYRDo8.js → deacon-swarm-BXZZ1Z2-.js} +13 -13
- package/server/deacon-swarm-C-GwfjJy.js +2 -0
- package/server/deacon.js +8 -8
- package/server/{deploy-patrol-Bjsho_ha.js → deploy-patrol-AiFoP8dw.js} +6 -6
- package/server/{deploy-window-DeP_OIRk.js → deploy-window-C3F-tihF.js} +6 -6
- package/server/{deploy-window-CM6W1-c6.js → deploy-window-DkZraDyj.js} +1 -1
- package/server/{dev-supervisor-BpMoHlkR.js → dev-supervisor-bcOWqdQE.js} +2 -2
- package/server/{devcontainer-renderer-CtUgrVKW.js → devcontainer-renderer-_d6XhyND.js} +3 -3
- package/server/dist-Bzy0y69j.js +3 -0
- package/server/{dist-DyRx4cI7.js → dist-Cb_0uvpS.js} +1 -1
- package/server/{docker-BK7HIcBj.js → docker-DcMTFTUC.js} +2 -2
- package/server/{dod-BrSfUHm0.js → dod-C6n9RV3G.js} +1 -1
- package/server/{ensure-devcontainer-DRqaAkBR.js → ensure-devcontainer-BZgOhRo7.js} +1 -1
- package/server/{ensure-devcontainer-DseivYEy.js → ensure-devcontainer-DNi-ono3.js} +4 -4
- package/server/{esm-shims-CbI3BVkl.js → esm-shims-OSHAYaS1.js} +1 -1
- package/server/{event-store-tdiY5eDZ.js → event-store-CQL6NeqB.js} +3 -3
- package/server/{event-store-Cr5PQwFC.js → event-store-EV2cMiXj.js} +1 -1
- package/server/{events-CvvGK6LT.js → events-BTdrdEq8.js} +1 -1
- package/server/{events-CC1dgUpx.js → events-DTfAe4My.js} +3 -3
- package/server/{factory-CynerjXO.js → factory-CFibJuaw.js} +4 -4
- package/server/{feature-registry-population-B0pmAz0a.js → feature-registry-population-DKZFMbFt.js} +4 -4
- package/server/{feature-registry-storage-_wUBRD3J.js → feature-registry-storage-BdPuLcBX.js} +2 -2
- package/server/{features-Dhxz-wLc.js → features-ez2271oH.js} +2 -2
- package/server/{feedback-target-CPS15Vte.js → feedback-target-7mqqwrX6.js} +7 -7
- package/server/{feedback-target-iygZwmMc.js → feedback-target-CoFDHiM8.js} +1 -1
- package/server/{feedback-writer-C9b6ccN1.js → feedback-writer-CY5L1lB7.js} +5 -5
- package/server/{feedback-writer-qmiMbqTZ.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-DxbQKE1d.js → flywheel-merge-order-UU0tiUld.js} +9 -8
- package/server/{flywheel-merge-order-C-6zRLvM.js → flywheel-merge-order-UUcsCDb6.js} +1 -1
- package/server/{forge-Ch9gCFod.js → forge-CNFnyqps.js} +2 -2
- package/server/forge-DXnS_YFH.js +2 -0
- package/server/{from-CJ_aH5jD.js → from-kNxT0bZC.js} +1 -1
- package/server/{fts-db-CKgg0VKg.js → fts-db-CE46vDkZ.js} +2 -2
- package/server/{fts-operations-BrL_VTRr.js → fts-operations-CqY6zl-i.js} +2 -2
- package/server/{git-utils-BVa07a4a.js → git-utils-CRw2zLPC.js} +68 -3
- package/server/git-utils-D0_yhCgF.js +3 -0
- package/server/{github-app-CMBdIFBQ.js → github-app-C3QrAUd0.js} +18 -7
- package/server/{github-app-CPfoFAdV.js → github-app-ClZ2lk8D.js} +1 -1
- package/server/{github-client--XVlDpwM.js → github-client-BnIsSrEN.js} +2 -2
- package/server/{github-client-B4QsdE-X.js → github-client-DfQYVUaw.js} +1 -1
- package/server/{github-pr-lookup-BRbDW-qk.js → github-pr-lookup-D16NGsSO.js} +2 -2
- package/server/{harness-binary-CVio2m-u.js → harness-binary-DPUi-Pv8.js} +32 -6
- package/server/{harness-resolve-qHJBhy3Z.js → harness-resolve-3lNZkyT4.js} +18 -9
- package/server/{health-events-C9B8y1Hm.js → health-events-BBcTYQKU.js} +2 -2
- package/server/{health-events-CpfvuVmm.js → health-events-BDOHby5Q.js} +1 -1
- package/server/{hooks-DUXw8A0-.js → hooks-CKZgXlJb.js} +2 -2
- package/server/{hooks-ltecuFqZ.js → hooks-DPVX1rwQ.js} +1 -1
- package/server/{hume-BEq0bUDg.js → hume-Cz8igP9E.js} +2 -2
- package/server/hume-ccTf4wTX.js +3 -0
- package/server/{idle-stack-reaper-D7w9t3fE.js → idle-stack-reaper-CuLF0j2H.js} +1 -1
- package/server/{idle-stack-reaper-w1ISSlhs.js → idle-stack-reaper-DDIRwxUY.js} +2 -2
- package/server/{in-flight-guard-aQ1IxeI3.js → in-flight-guard-CAAkqPLu.js} +2 -2
- package/server/{infra-CzaSOgul.js → infra-BEqFxlJc.js} +14 -4
- package/server/{injection-DZ0PfYa4.js → injection-C8aiVJrF.js} +191 -183
- package/server/{injection-oNZeoDhL.js → injection-CPUIqNhI.js} +1 -1
- package/server/{inspect-agent-DJKLWcVT.js → inspect-agent-BLuJ1AkT.js} +135 -79
- package/server/inspect-agent-Brtz0URj.js +2 -0
- package/server/{internal-token-DXdfprGr.js → internal-token-BrcU6qfe.js} +1 -1
- package/server/{internal-token-Bb4XeV2x.js → internal-token-s0-oKybJ.js} +2 -2
- package/server/{io-B3_AHDfr.js → io-C9kF1wtJ.js} +3 -3
- package/server/{issue-closed-zhdvQicO.js → issue-closed-CDJk4pIp.js} +7 -7
- package/server/{issue-lifecycle-Dy4vd0Oa.js → issue-lifecycle-B8sZHVHh.js} +1 -1
- package/server/{issue-lifecycle-CreaCkjW.js → issue-lifecycle-ojZAzDBP.js} +21 -21
- package/server/{issue-service-singleton-DabvBWUp.js → issue-service-singleton-BvJ09SaR.js} +1 -1
- package/server/{issue-service-singleton-B5ushCvE.js → issue-service-singleton-Yx5DdmVJ.js} +8 -8
- package/server/{issues-B6ToV6x1.js → issues-BMmP_77e.js} +2 -2
- package/server/{jsonl-parser-Dhflo1SH.js → jsonl-parser-BXSlHwEh.js} +3 -3
- package/server/{label-cleanup-BKPJm4Hv.js → label-cleanup-B0UJwnv5.js} +3 -3
- package/server/{label-reconciler-DdWbHEBu.js → label-reconciler-B4iOAjlC.js} +4 -4
- package/server/{launcher-generator-CHVm7bGT.js → launcher-generator-BBWG_SiS.js} +101 -7
- package/server/{lifecycle-io-D8iNBcux.js → lifecycle-io-BREGpnLk.js} +5 -5
- package/server/{lifecycle-io-Bsnr2K4F.js → lifecycle-io-DPo7x11I.js} +1 -1
- package/server/{lifecycle-sycO16hj.js → lifecycle-xmBfK2GJ.js} +6 -6
- package/server/{lifecycle-DfeyBDwA.js → lifecycle-yPd___5E.js} +2 -2
- package/server/{linear-client-D4zqMnX7.js → linear-client-BsuUvkdA.js} +2 -2
- package/server/{linear-client-DqhDQO9k.js → linear-client-CTskEeT_.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-DK23JEdS.js → merge-B1DiziGU.js} +1 -1
- package/server/{merge-C_ZEhbqI.js → merge-CefQNAnq.js} +3 -3
- package/server/{merge-agent-XrB80vfT.js → merge-agent-4WOWlSYA.js} +28 -28
- package/server/{merge-agent-BQM3a8z5.js → merge-agent-CKkgIBPB.js} +1 -1
- package/server/{merge-batch-Bwoyr8Je.js → merge-batch-ClFn2T-y.js} +1 -1
- package/server/merge-ops-CR44oU9-.js +2 -0
- package/server/{merge-rebase-C1KIVr0s.js → merge-rebase-BfaTyXsw.js} +2 -2
- package/server/merge-set-DJ8-UErs.js +83 -0
- package/server/{merge-set-DnSYdBEp.js → merge-set-bUqbm3yc.js} +1 -1
- package/server/{merge-sync-SSv3E-pl.js → merge-sync-BJYeOODr.js} +1 -1
- package/server/{merge-sync-DZ9dojJn.js → merge-sync-VPV28g0g.js} +2 -2
- package/server/{merge-train-DxDfBTjr.js → merge-train-CHopycP0.js} +3 -3
- package/server/{merge-train-deps-CyYQUksx.js → merge-train-deps-D1cOZzy2.js} +4 -4
- package/server/{merge-verification-CSizH3HY.js → merge-verification-BkaOqPsw.js} +4 -4
- package/server/{multipart-parser-Dt8YPN5S.js → multipart-parser-duPAfSBw.js} +2 -2
- package/server/{no-resume-mode-Cx3K0hHi.js → no-resume-mode-Nw29vaFb.js} +1 -1
- 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-neK8dHQk.js → orphan-proposed-reconciler-BvKkWMJQ.js} +12 -12
- package/server/{orphan-proposed-reconciler-BTkDrl4R.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-DeVUgwA7.js → pan-dir-B0c3w0Ya.js} +3 -3
- package/server/{paths-_zEts6wc.js → paths-D-xWGHdh.js} +2 -2
- package/server/{pickup-Dd0Znxxy.js → pickup-DUCLWrJY.js} +17 -16
- package/server/{pipeline-membership-0HaEGDlH.js → pipeline-membership-mY3GprlK.js} +7 -7
- package/server/{pipeline-notifier-6iCJplFZ.js → pipeline-notifier-BJr8gQX6.js} +1 -1
- package/server/{pipeline-notifier-D0ykk59O.js → pipeline-notifier-BXkJzDC4.js} +2 -2
- package/server/{project-pipelines-2sK1apsO.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-9SkRpES9.js → projects-vjjcmiN8.js} +1 -1
- package/server/{prompts-Dp4Tpk39.js → prompts-DxzFXuLl.js} +2 -2
- package/server/{providers-DV7ec8l7.js → providers-qQAwGQDW.js} +7 -7
- package/server/{providers-DKkBXhxU.js → providers-u4Ga0jOr.js} +1 -1
- package/server/public/assets/{chunk-BO2N2NFS-CltymLRg.js → chunk-BO2N2NFS-BamJdinX.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-D2f6pjgA.js → diagram-OG6HWLK6-DfOB8-w4.js} +1 -1
- package/server/public/assets/{dist-DEmlBBNQ.js → dist-ByIuzMQW.js} +3 -3
- package/server/public/assets/{dist-BWR4qFiV.js → dist-D7zYSEA6.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-DnfiViPK.js → ganttDiagram-6RSMTGT7-EdmRyXL3.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-B8Wrmj9H.js → highlighted-body-OFNGDK62-MerOfTX8.js} +1 -1
- package/server/public/assets/{index-CsSuZQBI.js → index-CWeMerGO.js} +146 -144
- package/server/public/assets/{index-CUr1xv8w.css → index-CenuJ3Cw.css} +1 -1
- package/server/public/assets/{linear-C9zFQpkX.js → linear-BBbArIcK.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-lR8H7Yjd.js → pieDiagram-4H26LBE5-BKIddiJN.js} +1 -1
- package/server/public/assets/{prod-B1jCQihw.js → prod-B8vYiu52.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-CVQ2guem.js → quadrantDiagram-W4KKPZXB-D6RtoULk.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-eD1RB4gm.js → sankeyDiagram-5OEKKPKP-CLrCedZX.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-ChEC6dQn.js → xychartDiagram-2RQKCTM6-hznR8DYl.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests--Ib2jTgy.js → pull-requests-7N8WKseP.js} +1 -1
- package/server/{pull-requests-CXIhdCYD.js → pull-requests-_lHueOHW.js} +3 -3
- package/server/{queries-6d7Cdtm7.js → queries-CjNIf-Ub.js} +576 -166
- package/server/{rally-B708-nZn.js → rally-CyWT_lNO.js} +3 -3
- package/server/{rally-api-nY0ZANw3.js → rally-api-C8e_1JRi.js} +2 -2
- package/server/{rally-api-yjQ0TfHd.js → rally-api-ClOSd-Tt.js} +1 -1
- package/server/{rally-client-B1EJhfV0.js → rally-client-lc-nokqr.js} +4 -4
- package/server/{rally-client-CULK2XAY.js → rally-client-sgtVqzNU.js} +1 -1
- package/server/rally-zhhtXuDP.js +3 -0
- package/server/{reap-terminal-sessions-MWnqdLCJ.js → reap-terminal-sessions-7KeHv1R1.js} +1 -1
- package/server/{reap-terminal-sessions-N3BTkmX_.js → reap-terminal-sessions-BtHPo6Xc.js} +1 -1
- package/server/rebuild-stack-CFvcBHsS.js +4 -0
- package/server/{rebuild-stack-Dp4eLkt4.js → rebuild-stack-lwtsW0GO.js} +26 -35
- package/server/{reconstruct-cache-uWbZfjms.js → reconstruct-cache-C3Ui7ojV.js} +6 -6
- package/server/{record-t6V-3Dcj.js → record-CN0pj4_5.js} +1 -1
- package/server/{record-update-DACtKh6_.js → record-update-bLJxAXH4.js} +1 -1
- package/server/{record-update-Dq0t2uBG.js → record-update-dE1Aw83j.js} +2 -2
- package/server/{recovery-trip-BJtIQuag.js → recovery-trip-BvRWfUXM.js} +2 -2
- package/server/{release-engine-DZpmGGzb.js → release-engine-Cx48W7z8.js} +5 -5
- package/server/{release-set-hnXd_kga.js → release-set-CQfuN9-v.js} +3 -3
- package/server/{remote-Br-ZWVIP.js → remote-C_2hasl7.js} +3 -3
- package/server/{remote-4tiENDaI.js → remote-ChgimyYa.js} +3 -3
- package/server/{remote-agents-nmty1mLu.js → remote-agents-By1ige5O.js} +6 -6
- package/server/{remote-agents-CRCg1L4H.js → remote-agents-CA3Ihlxj.js} +1 -1
- package/server/{remote-completion-BbWNd10K.js → remote-completion-fVe9e_3u.js} +12 -12
- package/server/resume-BFv1PGpA.js +3 -0
- package/server/{review-agent-sKkE1FEL.js → review-agent-CIGOQYBD.js} +29 -25
- package/server/{review-agent-DJRO8EG8.js → review-agent-DNboMyW4.js} +1 -1
- package/server/{review-artifacts-BLbSC4ke.js → review-artifacts-nRDPuMxd.js} +5 -5
- package/server/{review-context-BgX3lcCx.js → review-context-2uj-YQ8J.js} +69 -25
- package/server/{review-status-C6n6-9f_.js → review-status-btEYlaxA.js} +1 -1
- package/server/{review-status-enrichment-tbOn_A_u.js → review-status-enrichment-Dci-ZwEt.js} +3 -3
- package/server/{review-status-A7quS5KJ.js → review-status-kZj_KyCk.js} +42 -26
- package/server/{review-status-sync-BhSQ0d0l.js → review-status-sync-BTOpxtTC.js} +10 -5
- package/server/{review-status-sync-To3-iS-N.js → review-status-sync-DSDK3OMy.js} +1 -1
- package/server/{review-verdict-feedback-CTRNtzXO.js → review-verdict-feedback-CCjVA7Uk.js} +6 -6
- package/server/{review-verdict-feedback-C1Kg8n7t.js → review-verdict-feedback-CTd4QMBu.js} +1 -1
- package/server/{rollup-B53Y81xK.js → rollup-BKQC7jp4.js} +1 -1
- package/server/{rollup-WA0VD-Rr.js → rollup-FGsKki9R.js} +8 -8
- package/server/{scanner-D2743cp8.js → scanner-CnqEZeDy.js} +41 -14
- package/server/{sequence-io-Cg0zYj_E.js → sequence-io-D909zgeH.js} +4 -4
- package/server/{sequencer-agent-BGY8gjg-.js → sequencer-agent-CzkcK6P5.js} +5 -5
- package/server/server.js +2194 -341
- package/server/{service-DCpB_SGd.js → service-CLeAoU6G.js} +51 -50
- package/server/{session-fork-BQ8_6H32.js → session-fork-CHI1XvL9.js} +2 -2
- package/server/{session-history-CVZDpS3c.js → session-history-BT3IvqhC.js} +4 -4
- package/server/settings-66A6uvIA.js +2 -0
- package/server/{settings-BZ5m1UCl.js → settings-BTMvpNFU.js} +3 -3
- package/server/{settings-ylxwqwQG.js → settings-C0zgxOGf.js} +2 -2
- package/server/{shadow-engineering-BlxG6Xye.js → shadow-engineering-BJfgm-hX.js} +2 -2
- package/server/{shadow-state-Dh-HzF2J.js → shadow-state-7a-524T8.js} +2 -2
- package/server/{shadow-state-C2_epgx2.js → shadow-state-DnDyjujH.js} +1 -1
- package/server/{shadow-utils-4bvjn9b3.js → shadow-utils-Db3oroFG.js} +2 -2
- package/server/{ship-log-ClSMIzZX.js → ship-log-D9MlVzYU.js} +1 -1
- package/server/{smart-compaction-CHIxLr_d.js → smart-compaction-CV2ukKND.js} +1 -1
- package/server/{smart-compaction-r4pHQBIr.js → smart-compaction-KCYScAU1.js} +7 -7
- package/server/{spawn-planning-session-DWAorh2B.js → spawn-planning-session-DKpdFyOC.js} +30 -23
- package/server/{spawn-planning-session-KC_UduxD.js → spawn-planning-session-qUC2VWu3.js} +1 -1
- package/server/{specialist-completion-BXhav38U.js → specialist-completion-Ky9wCDpb.js} +1 -1
- package/server/{specialist-context-DtrYvGJ-.js → specialist-context-Bn3dCGS2.js} +5 -5
- package/server/{specialist-handoff-logger-C45ouoZ6.js → specialist-handoff-logger-CMEwYxa2.js} +2 -2
- package/server/{specialist-logs-DJ3RzKxW.js → specialist-logs-C5p8G7tx.js} +3 -3
- package/server/{specialists-JVO00bs7.js → specialists-CC4r-c2s.js} +776 -347
- package/server/{specialists-D5fRZXmN.js → specialists-CShuVGWT.js} +1 -1
- package/server/{specialists-DVj0hvaL.js → specialists-DM6bWjsi.js} +1 -1
- package/server/{specialists-DyFeedjn.js → specialists-jiuuyVkp.js} +21 -19
- package/server/specs-C8Wsn2XO.js +3 -0
- package/server/{src-CG9mCkP6.js → src-CXmtj0im.js} +6 -6
- package/server/{src-CMTQGyCK.js → src-CdmnTM2m.js} +5 -5
- package/server/{src-U7_kTPEE.js → src-DtcUOZCq.js} +111 -18
- package/server/stack-health-Bn3o8FBX.js +3 -0
- package/server/{stack-health-puygdaMd.js → stack-health-DxSdG9cW.js} +63 -9
- package/server/{stale-task-claims-BbFwCTb0.js → stale-task-claims-KJKxxiiQ.js} +4 -4
- package/server/{staleness-Cbl_w4Bw.js → staleness-CT34nwr9.js} +1 -1
- package/server/{staleness-Bpy41ngS.js → staleness-DPm7ClwA.js} +1 -1
- package/server/{state-home-CIGjwNfJ.js → state-home-Cn_Qu8IX.js} +2 -2
- package/server/{state-migrate-Dkzaxvny.js → state-migrate-BGg2ZaOt.js} +4 -4
- package/server/{stuck-remediation-CzEov_fq.js → stuck-remediation-DYuPRYYw.js} +300 -23
- package/server/{stuck-remediation-sY_MHHgQ.js → stuck-remediation-s9_2qfi6.js} +1 -1
- package/server/{substrate-bug-weights-service-BH66lhm7.js → substrate-bug-weights-service-B-FwCs5V.js} +3 -3
- package/server/{summary-fork-DHhJIsAL.js → summary-fork-D1RAk9rJ.js} +78 -12
- package/server/{summary-fork-D8bXjCr7.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-BO-Zk_h-.js → supervisor-wM4ooB5O.js} +3 -3
- package/server/{swarm-readiness-CQ_fwUWF.js → swarm-readiness-DlP_UjHq.js} +3 -3
- package/server/{system-prerequisites-Bza0ffAh.js → system-prerequisites-DUDj1YHf.js} +56 -29
- package/server/{teardown-workspace-CEgauF4U.js → teardown-workspace-DeTTImn-.js} +15 -15
- package/server/{test-agent-queue-DXDt0Xa-.js → test-agent-queue-MbxX5vqq.js} +6 -6
- package/server/{test-verdict-CmUBK5cT.js → test-verdict-bWYBtqBg.js} +1 -1
- package/server/{test-verdict-DFjjIHR5.js → test-verdict-gscuksPv.js} +1 -1
- package/server/{tldr-daemon-DL566HbH.js → tldr-daemon-BYFkts95.js} +1 -1
- package/server/{tldr-daemon-BDtLOIlO.js → tldr-daemon-C-69c3OI.js} +2 -2
- package/server/{tmux-DoThH6aj.js → tmux-B6z7h_vZ.js} +1 -1
- package/server/{tmux-ftABRAmc.js → tmux-R7N7y-Mh.js} +2 -2
- package/server/{token-CsOhvw42.js → token-BK6t8BIT.js} +2 -2
- package/server/token-util-DuPuNriz.js +3 -0
- package/server/{token-util-CTmczIfW.js → token-util-DxXu-vd1.js} +1 -1
- package/server/{tracker-config-B4itFzDo.js → tracker-config-G6latr8C.js} +2 -2
- package/server/{tracker-utils-BePq_oj-.js → tracker-utils-B4ylXZQK.js} +1 -1
- package/server/{tracker-utils-tnxxqROg.js → tracker-utils-DHv5pSDT.js} +2 -2
- package/server/{traefik-connect-m73vGebA.js → traefik-connect-Df2uXPsQ.js} +1 -1
- package/server/{tunnel-B2vxjx_b.js → tunnel-CDVKJpRv.js} +3 -3
- package/server/{tunnel-Cgj-IGIl.js → tunnel-DGdUkGoZ.js} +1 -1
- package/server/{types-BBNjPcqU.js → types-5M0lupud.js} +1 -1
- package/server/{uat-train-cKfM-_WW.js → uat-train-B05BWkp-.js} +1 -1
- package/server/{uat-train-CuEn0t9M.js → uat-train-DDSrSoV1.js} +25 -25
- package/server/validate-IfDGkaVR.js +177 -0
- package/server/{validation-CIi6pnI2.js → validation-CC9OPqJZ.js} +1 -1
- package/server/{validation-B5JxoPUS.js → validation-Dw1pzDzr.js} +4 -4
- package/server/{verification-artifact-C-lIHfUa.js → verification-artifact-B3itKTxu.js} +1 -1
- package/server/{verification-artifact-BcnIbigL.js → verification-artifact-TVFSz_q1.js} +1 -1
- package/server/{verification-runner-CDj4lD4t.js → verification-runner-BW4HOKAz.js} +1 -1
- package/server/{verification-runner-Br0S_Ous.js → verification-runner-CkgX6EtI.js} +91 -106
- package/server/{vtt-parser-DKpNNW5i.js → vtt-parser-DYPbKcIJ.js} +1 -1
- package/server/{work-agent-prompt-Yb2bd3Fq.js → work-agent-prompt-Du8Vh2aJ.js} +9 -9
- package/server/workflows-BQu4RFQ-.js +2 -0
- package/server/{workflows-C9WmILql.js → workflows-mbQzh6mQ.js} +18 -18
- package/server/{workspace-DuUdndHe.js → workspace--8tnhDI0.js} +1 -1
- package/server/{workspace-BVl4rihN.js → workspace-BPUws1-_.js} +3 -3
- package/server/{workspace-config-cEGcO6UT.js → workspace-config-CIVWZOQr.js} +1 -1
- package/server/{workspace-manager-hLUv3ADC.js → workspace-manager-CBhNdzE4.js} +66 -15
- package/server/workspace-manager-CWT55qeI.js +3 -0
- package/server/{workspace-metadata-DNpMixRq.js → workspace-metadata-BzHnwwX4.js} +1 -1
- package/server/{workspace-metadata-CskwzzhL.js → workspace-metadata-_WygnyoX.js} +2 -2
- package/server/{workspaces-hWvy9eKs.js → workspaces-Do_9J0LQ.js} +130 -111
- package/sync-sources/hooks/record-cost-event.js +6 -4
- 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-flywheel/SKILL.md +18 -1
- package/sync-sources/skills/pan-knowledge/SKILL.md +10 -0
- package/sync-sources/skills/pan-orders/SKILL.md +33 -0
- package/sync-sources/skills/pan-start/SKILL.md +4 -0
- package/sync-sources/templates/traefik/dynamic/overdeck.yml.template +10 -0
- package/server/agent-state-Bg0lhqwj.js +0 -3
- package/server/agents-FlIgQ3ql.js +0 -3
- package/server/cli-BsVIHwzC.js +0 -3
- package/server/context-layers-B3Nt58jl.js +0 -4
- package/server/context-layers-ZYFcWiyc.js +0 -165
- package/server/deacon-swarm-9jRLS5Ke.js +0 -2
- package/server/dist-Bd3vn0Hw.js +0 -3
- package/server/flywheel-DMCUzDWg.js +0 -2
- package/server/flywheel-DSSpWmqF.js +0 -522
- package/server/flywheel-DcBkQvgE.js +0 -207
- package/server/forge-B-ZWyTRm.js +0 -2
- package/server/git-utils-Dry_Ka_D.js +0 -3
- package/server/hume-B_DbflNM.js +0 -3
- package/server/inspect-agent-ch-F-5Ci.js +0 -2
- package/server/layers-DzxSTGNA.js +0 -93
- package/server/merge-blockers-BsFjGrQ8.js +0 -41
- package/server/merge-ops-DlB1IM0Y.js +0 -2
- package/server/merge-set-DLz0MkGT.js +0 -139
- package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +0 -1
- package/server/rally-njs_mJrt.js +0 -3
- package/server/rebuild-stack-kA7XngID.js +0 -3
- package/server/resume-CcKqnTvE.js +0 -3
- package/server/settings-D0OSwos5.js +0 -2
- package/server/specs-nN45DG2X.js +0 -3
- package/server/stack-health-Df0YEZKa.js +0 -3
- package/server/supervisor-BPy-o1A8.js +0 -2
- package/server/token-util-DrHg8abn.js +0 -3
- package/server/workflows-D90rMOya.js +0 -2
- package/server/workspace-manager-ZTdJAy9M.js +0 -3
|
@@ -1,522 +0,0 @@
|
|
|
1
|
-
import { a as __toCommonJS } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { Tn as init_projects, fn as findProjectByPathSync, vn as getProjectSwarmHotspots } from "./config-yaml-DvyMuOle.js";
|
|
3
|
-
import { t as init_src, v as FlywheelRunId, y as FlywheelStatus } from "./src-U7_kTPEE.js";
|
|
4
|
-
import { c as getReviewStatusSync, l as init_review_status } from "./review-status-A7quS5KJ.js";
|
|
5
|
-
import { a as countAgentsByStatusRole, o as init_agents } from "./agents-B4Bjbkfv.js";
|
|
6
|
-
import { Bn as getAgentDir, b as init_agents$1, ft as stopAgent, ut as spawnRun } from "./queries-6d7Cdtm7.js";
|
|
7
|
-
import { n as init_issue_service_singleton, r as issue_service_singleton_exports } from "./issue-service-singleton-B5ushCvE.js";
|
|
8
|
-
import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-Bb4XeV2x.js";
|
|
9
|
-
import { d as isFlywheelAutoPickupBacklog, f as isFlywheelGloballyPaused, i as getFlywheelActiveRunId, p as isFlywheelRequireUatBeforeMerge, s as init_control_settings, x as setFlywheelGloballyPaused, y as setFlywheelActiveRunId } from "./control-settings-aP1ANIlI.js";
|
|
10
|
-
import { n as parseSequenceMd, t as init_sequence_io } from "./sequence-io-Cg0zYj_E.js";
|
|
11
|
-
import { a as declaredIssueFootprint, i as computePredictedConflictSignals, s as pickFromSequence } from "./flywheel-merge-order-DxbQKE1d.js";
|
|
12
|
-
import { i as gatherProjectLensSignals, n as init_pipeline_membership, o as init_pipeline_membership_gather, r as resolvePipelineMembership } from "./pipeline-membership-0HaEGDlH.js";
|
|
13
|
-
import { dirname, join } from "node:path";
|
|
14
|
-
import { Effect, Schema } from "effect";
|
|
15
|
-
import { homedir } from "node:os";
|
|
16
|
-
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
17
|
-
import { mkdir, readFile, readdir, rename, stat as stat$1, writeFile } from "node:fs/promises";
|
|
18
|
-
//#region services/flywheel-run-state.ts
|
|
19
|
-
init_projects();
|
|
20
|
-
init_internal_token();
|
|
21
|
-
init_review_status();
|
|
22
|
-
init_agents$1();
|
|
23
|
-
init_src();
|
|
24
|
-
init_control_settings();
|
|
25
|
-
init_agents();
|
|
26
|
-
const decodeFlywheelStatus = Schema.decodeUnknownSync(FlywheelStatus);
|
|
27
|
-
const decodeFlywheelRunId$1 = Schema.decodeUnknownSync(FlywheelRunId);
|
|
28
|
-
const RUN_ID_PATTERN = /^RUN-(\d+)$/;
|
|
29
|
-
const DEFAULT_RUNS_LIMIT = 20;
|
|
30
|
-
const MAX_RUNS_LIMIT = 100;
|
|
31
|
-
const RUN_SUMMARY_CONCURRENCY = 4;
|
|
32
|
-
const flywheelStatusListeners = /* @__PURE__ */ new Set();
|
|
33
|
-
function subscribeLatestFlywheelStatus(listener) {
|
|
34
|
-
flywheelStatusListeners.add(listener);
|
|
35
|
-
return () => {
|
|
36
|
-
flywheelStatusListeners.delete(listener);
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
function publishLatestFlywheelStatus(status) {
|
|
40
|
-
for (const listener of flywheelStatusListeners) listener(status);
|
|
41
|
-
}
|
|
42
|
-
function publishFlywheelStatusCleared() {
|
|
43
|
-
publishLatestFlywheelStatus(null);
|
|
44
|
-
}
|
|
45
|
-
function parseFlywheelRunId(runId) {
|
|
46
|
-
return decodeFlywheelRunId$1(runId);
|
|
47
|
-
}
|
|
48
|
-
function isFlywheelRunId(runId) {
|
|
49
|
-
return RUN_ID_PATTERN.test(runId);
|
|
50
|
-
}
|
|
51
|
-
function runNumber(runId) {
|
|
52
|
-
const match = RUN_ID_PATTERN.exec(runId);
|
|
53
|
-
return match ? Number(match[1]) : 0;
|
|
54
|
-
}
|
|
55
|
-
function normalizeLimit(limit) {
|
|
56
|
-
if (limit === void 0) return DEFAULT_RUNS_LIMIT;
|
|
57
|
-
if (!Number.isFinite(limit) || limit <= 0) return DEFAULT_RUNS_LIMIT;
|
|
58
|
-
return Math.min(Math.floor(limit), MAX_RUNS_LIMIT);
|
|
59
|
-
}
|
|
60
|
-
async function mapWithConcurrency(items, concurrency, mapper) {
|
|
61
|
-
const results = new Array(items.length);
|
|
62
|
-
let index = 0;
|
|
63
|
-
await Promise.all(Array.from({ length: Math.min(concurrency, items.length) }, async () => {
|
|
64
|
-
while (index < items.length) {
|
|
65
|
-
const current = index;
|
|
66
|
-
index += 1;
|
|
67
|
-
results[current] = await mapper(items[current]);
|
|
68
|
-
}
|
|
69
|
-
}));
|
|
70
|
-
return results;
|
|
71
|
-
}
|
|
72
|
-
function getFlywheelHome(options = {}) {
|
|
73
|
-
return join(options.overdeckHome ?? process.env["OVERDECK_HOME"] ?? join(homedir(), ".overdeck"), "flywheel");
|
|
74
|
-
}
|
|
75
|
-
function getFlywheelRunsDir(options = {}) {
|
|
76
|
-
return join(getFlywheelHome(options), "runs");
|
|
77
|
-
}
|
|
78
|
-
function getFlywheelRunDir(runId, options = {}) {
|
|
79
|
-
return join(getFlywheelRunsDir(options), parseFlywheelRunId(runId));
|
|
80
|
-
}
|
|
81
|
-
async function nextFlywheelRunId(options = {}) {
|
|
82
|
-
const runsDir = getFlywheelRunsDir(options);
|
|
83
|
-
await mkdir(runsDir, { recursive: true });
|
|
84
|
-
return parseFlywheelRunId(`RUN-${(await readdir(runsDir, { withFileTypes: true })).reduce((max, entry) => {
|
|
85
|
-
if (!entry.isDirectory()) return max;
|
|
86
|
-
const match = RUN_ID_PATTERN.exec(entry.name);
|
|
87
|
-
if (!match) return max;
|
|
88
|
-
return Math.max(max, Number(match[1]));
|
|
89
|
-
}, 0) + 1}`);
|
|
90
|
-
}
|
|
91
|
-
async function writeJsonAtomic(path, payload) {
|
|
92
|
-
const tmpPath = join(dirname(path), `.${process.pid}.${Date.now()}.${Math.random().toString(36).slice(2)}.tmp`);
|
|
93
|
-
await mkdir(dirname(path), { recursive: true });
|
|
94
|
-
await writeFile(tmpPath, `${JSON.stringify(payload, null, 2)}\n`, "utf8");
|
|
95
|
-
await rename(tmpPath, path);
|
|
96
|
-
return path;
|
|
97
|
-
}
|
|
98
|
-
async function writeLatestFlywheelStatus(status, options = {}) {
|
|
99
|
-
const latestPath = join(getFlywheelRunDir(status.runId, options), "latest.json");
|
|
100
|
-
await writeJsonAtomic(latestPath, status);
|
|
101
|
-
publishLatestFlywheelStatus(status);
|
|
102
|
-
return latestPath;
|
|
103
|
-
}
|
|
104
|
-
function decodeLaunchMetadata(payload) {
|
|
105
|
-
if (typeof payload !== "object" || payload === null) throw new Error("Invalid Flywheel launch metadata");
|
|
106
|
-
const record = payload;
|
|
107
|
-
if (record.version !== 1) throw new Error("Invalid Flywheel launch metadata version");
|
|
108
|
-
for (const key of [
|
|
109
|
-
"runId",
|
|
110
|
-
"workspace",
|
|
111
|
-
"briefPath",
|
|
112
|
-
"briefDisplayPath"
|
|
113
|
-
]) if (typeof record[key] !== "string" || !record[key]) throw new Error(`Invalid Flywheel launch metadata: ${key}`);
|
|
114
|
-
return record;
|
|
115
|
-
}
|
|
116
|
-
async function writeFlywheelLaunchMetadata(metadata, options = {}) {
|
|
117
|
-
const runId = parseFlywheelRunId(metadata.runId);
|
|
118
|
-
return writeJsonAtomic(join(getFlywheelRunDir(runId, options), "launch.json"), {
|
|
119
|
-
...metadata,
|
|
120
|
-
runId
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
async function readFlywheelLaunchMetadata(runId, options = {}) {
|
|
124
|
-
const launchPath = join(getFlywheelRunDir(runId, options), "launch.json");
|
|
125
|
-
try {
|
|
126
|
-
return decodeLaunchMetadata(JSON.parse(await readFile(launchPath, "utf8")));
|
|
127
|
-
} catch (error) {
|
|
128
|
-
if ((typeof error === "object" && error !== null && "code" in error ? error.code : void 0) === "ENOENT") return null;
|
|
129
|
-
throw error;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
async function readLatestFlywheelStatus(runId, options = {}) {
|
|
133
|
-
const latestPath = join(getFlywheelRunDir(runId, options), "latest.json");
|
|
134
|
-
try {
|
|
135
|
-
return decodeFlywheelStatus(JSON.parse(await readFile(latestPath, "utf8")));
|
|
136
|
-
} catch (error) {
|
|
137
|
-
if ((typeof error === "object" && error !== null && "code" in error ? error.code : void 0) === "ENOENT") return null;
|
|
138
|
-
throw error;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
async function fileExists(path) {
|
|
142
|
-
try {
|
|
143
|
-
return (await stat$1(path)).isFile();
|
|
144
|
-
} catch (error) {
|
|
145
|
-
if ((typeof error === "object" && error !== null && "code" in error ? error.code : void 0) === "ENOENT") return false;
|
|
146
|
-
throw error;
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
async function deriveRunStatus(runDir, runId, activeRunId) {
|
|
150
|
-
if (await fileExists(join(runDir, "aborted.json"))) return "aborted";
|
|
151
|
-
if (await fileExists(join(runDir, "report.md"))) return "complete";
|
|
152
|
-
if (activeRunId !== runId) return "aborted";
|
|
153
|
-
return isFlywheelGloballyPaused() ? "paused" : "running";
|
|
154
|
-
}
|
|
155
|
-
async function summarizeRun(runId, options, activeRunId) {
|
|
156
|
-
const runDir = getFlywheelRunDir(runId, options);
|
|
157
|
-
const latest = await readLatestFlywheelStatus(runId, options);
|
|
158
|
-
const status = await deriveRunStatus(runDir, runId, activeRunId);
|
|
159
|
-
return {
|
|
160
|
-
id: runId,
|
|
161
|
-
startedAt: latest?.startedAt ?? "",
|
|
162
|
-
status
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
async function readCurrentLatestFlywheelStatus(options = {}) {
|
|
166
|
-
const activeRunId = options.activeRunId === void 0 ? getFlywheelActiveRunId() : options.activeRunId;
|
|
167
|
-
if (!activeRunId || !isFlywheelRunId(activeRunId)) return null;
|
|
168
|
-
const activeRun = await getFlywheelRunDetail(activeRunId, options);
|
|
169
|
-
return activeRun?.status === "running" || activeRun?.status === "paused" ? activeRun.latest : null;
|
|
170
|
-
}
|
|
171
|
-
function selectLatestRunIds(entries, limit) {
|
|
172
|
-
const selected = [];
|
|
173
|
-
for (const entry of entries) {
|
|
174
|
-
if (!entry.isDirectory() || !isFlywheelRunId(entry.name)) continue;
|
|
175
|
-
selected.push(entry.name);
|
|
176
|
-
selected.sort((a, b) => runNumber(b) - runNumber(a));
|
|
177
|
-
if (selected.length > limit) selected.length = limit;
|
|
178
|
-
}
|
|
179
|
-
return selected;
|
|
180
|
-
}
|
|
181
|
-
async function listFlywheelRuns(options = {}) {
|
|
182
|
-
const runsDir = getFlywheelRunsDir(options);
|
|
183
|
-
let entries;
|
|
184
|
-
try {
|
|
185
|
-
entries = await readdir(runsDir, { withFileTypes: true });
|
|
186
|
-
} catch (error) {
|
|
187
|
-
if ((typeof error === "object" && error !== null && "code" in error ? error.code : void 0) === "ENOENT") return [];
|
|
188
|
-
throw error;
|
|
189
|
-
}
|
|
190
|
-
const runIds = selectLatestRunIds(entries, normalizeLimit(options.limit));
|
|
191
|
-
const activeRunId = getFlywheelActiveRunId();
|
|
192
|
-
return (await mapWithConcurrency(runIds, RUN_SUMMARY_CONCURRENCY, (runId) => summarizeRun(runId, options, activeRunId))).sort((a, b) => b.startedAt.localeCompare(a.startedAt));
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* PAN-1528/PAN-1908: overlay the flywheel capacity gauge from the indexed
|
|
196
|
-
* agents table. This status path must not enumerate state.json files.
|
|
197
|
-
*/
|
|
198
|
-
async function countLiveWorkAgents(_options = {}) {
|
|
199
|
-
return countAgentsByStatusRole("running", "work");
|
|
200
|
-
}
|
|
201
|
-
function withLiveAgentsActive(latest, liveCount) {
|
|
202
|
-
if (latest.system.agentsActive === liveCount) return latest;
|
|
203
|
-
return {
|
|
204
|
-
...latest,
|
|
205
|
-
system: {
|
|
206
|
-
...latest.system,
|
|
207
|
-
agentsActive: liveCount
|
|
208
|
-
}
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
async function getFlywheelRunDetail(runId, options = {}) {
|
|
212
|
-
const runDir = getFlywheelRunDir(runId, options);
|
|
213
|
-
const latest = await readLatestFlywheelStatus(runId, options);
|
|
214
|
-
if (!latest) return null;
|
|
215
|
-
const status = await deriveRunStatus(runDir, runId, options.activeRunId !== void 0 ? options.activeRunId : getFlywheelActiveRunId());
|
|
216
|
-
const reportPath = join(runDir, "report.md");
|
|
217
|
-
const openedPrPath = join(runDir, "opened-pr.json");
|
|
218
|
-
const liveCount = await countLiveWorkAgents(options);
|
|
219
|
-
return {
|
|
220
|
-
id: runId,
|
|
221
|
-
startedAt: latest.startedAt,
|
|
222
|
-
status,
|
|
223
|
-
latest: withLiveAgentsActive(latest, liveCount),
|
|
224
|
-
paths: {
|
|
225
|
-
latest: join(runDir, "latest.json"),
|
|
226
|
-
...await fileExists(reportPath) ? { report: reportPath } : {},
|
|
227
|
-
...await fileExists(openedPrPath) ? { openedPr: openedPrPath } : {}
|
|
228
|
-
}
|
|
229
|
-
};
|
|
230
|
-
}
|
|
231
|
-
function clearFlywheelGate() {
|
|
232
|
-
setFlywheelActiveRunId(null);
|
|
233
|
-
setFlywheelGloballyPaused(false);
|
|
234
|
-
publishFlywheelStatusCleared();
|
|
235
|
-
}
|
|
236
|
-
async function resolveLiveFlywheelRunId(options = {}) {
|
|
237
|
-
const candidate = getFlywheelActiveRunId();
|
|
238
|
-
if (!candidate) return null;
|
|
239
|
-
if (!isFlywheelRunId(candidate)) {
|
|
240
|
-
clearFlywheelGate();
|
|
241
|
-
return null;
|
|
242
|
-
}
|
|
243
|
-
if (!await readLatestFlywheelStatus(candidate, options)) {
|
|
244
|
-
clearFlywheelGate();
|
|
245
|
-
return null;
|
|
246
|
-
}
|
|
247
|
-
const status = await deriveRunStatus(getFlywheelRunDir(candidate, options), candidate, candidate);
|
|
248
|
-
if (status === "complete" || status === "aborted") {
|
|
249
|
-
clearFlywheelGate();
|
|
250
|
-
return null;
|
|
251
|
-
}
|
|
252
|
-
return candidate;
|
|
253
|
-
}
|
|
254
|
-
async function abortFlywheelRun(runId, options = {}) {
|
|
255
|
-
const parsed = parseFlywheelRunId(runId);
|
|
256
|
-
await writeJsonAtomic(join(getFlywheelRunDir(parsed, options), "aborted.json"), {
|
|
257
|
-
runId: parsed,
|
|
258
|
-
abortedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
259
|
-
});
|
|
260
|
-
if (getFlywheelActiveRunId() === parsed) clearFlywheelGate();
|
|
261
|
-
}
|
|
262
|
-
//#endregion
|
|
263
|
-
//#region ../../lib/backlog/lookups.ts
|
|
264
|
-
init_sequence_io();
|
|
265
|
-
/**
|
|
266
|
-
* Build the {@link ClassifyLookups} the shared pickup module needs from live project
|
|
267
|
-
* state: labels (in-memory issue service), planned (readable xBRIEF spec), and
|
|
268
|
-
* in-pipeline (review status / live workspace). Shared by the dashboard forecast
|
|
269
|
-
* route and the Flywheel run-cohort snapshot so both classify issues identically
|
|
270
|
-
* (PAN-2006 single source of truth). The issue service is lazy-required to avoid a
|
|
271
|
-
* static lib → dashboard layering edge.
|
|
272
|
-
*/
|
|
273
|
-
function buildClassifyLookups(projectRoot, opts = {}) {
|
|
274
|
-
const labelsByIssue = /* @__PURE__ */ new Map();
|
|
275
|
-
if (!opts?.labels) try {
|
|
276
|
-
const { getSharedIssueService } = (init_issue_service_singleton(), __toCommonJS(issue_service_singleton_exports));
|
|
277
|
-
for (const issue of getSharedIssueService().getIssues()) {
|
|
278
|
-
const id = typeof issue["identifier"] === "string" ? issue["identifier"].toUpperCase() : "";
|
|
279
|
-
if (!id) continue;
|
|
280
|
-
const names = (Array.isArray(issue["labels"]) ? issue["labels"] : []).map((l) => typeof l === "string" ? l : l?.name ?? "").filter((s) => Boolean(s));
|
|
281
|
-
labelsByIssue.set(id, names);
|
|
282
|
-
}
|
|
283
|
-
} catch {}
|
|
284
|
-
const specsDir = join(projectRoot, ".pan", "specs");
|
|
285
|
-
const specIssues = /* @__PURE__ */ new Set();
|
|
286
|
-
if (existsSync(specsDir)) for (const f of readdirSync(specsDir)) {
|
|
287
|
-
const m = /^[\d-]+-([A-Z]+-\d+)-/i.exec(f);
|
|
288
|
-
if (m) specIssues.add(m[1].toUpperCase());
|
|
289
|
-
}
|
|
290
|
-
const workspacesDir = join(projectRoot, "workspaces");
|
|
291
|
-
return {
|
|
292
|
-
labels: opts?.labels ?? ((id) => labelsByIssue.get(id.toUpperCase()) ?? []),
|
|
293
|
-
isPlanned: (id) => {
|
|
294
|
-
const u = id.toUpperCase();
|
|
295
|
-
return specIssues.has(u);
|
|
296
|
-
},
|
|
297
|
-
isInPipeline: (id) => {
|
|
298
|
-
const rs = getReviewStatusSync(id.toUpperCase());
|
|
299
|
-
return rs !== null && rs.reviewStatus !== "pending" || existsSync(join(workspacesDir, `feature-${id.toLowerCase()}`));
|
|
300
|
-
}
|
|
301
|
-
};
|
|
302
|
-
}
|
|
303
|
-
//#endregion
|
|
304
|
-
//#region ../../lib/cloister/flywheel.ts
|
|
305
|
-
init_control_settings();
|
|
306
|
-
init_pipeline_membership_gather();
|
|
307
|
-
init_pipeline_membership();
|
|
308
|
-
const FLYWHEEL_ORCHESTRATOR_AGENT_ID = "flywheel-orchestrator";
|
|
309
|
-
function isIssueInResolvedPipeline(issueId, memberships) {
|
|
310
|
-
return memberships.some((membership) => membership.issueId.toUpperCase() === issueId.toUpperCase() && membership.inPipeline);
|
|
311
|
-
}
|
|
312
|
-
const FlywheelRunIdSchema = Schema.String.check(Schema.isPattern(/^RUN-\d+$/));
|
|
313
|
-
const decodeFlywheelRunId = Schema.decodeUnknownSync(FlywheelRunIdSchema);
|
|
314
|
-
function parseRunId(runId) {
|
|
315
|
-
return decodeFlywheelRunId(runId);
|
|
316
|
-
}
|
|
317
|
-
function internalDashboardOrigin() {
|
|
318
|
-
const port = Number.parseInt(process.env["API_PORT"] ?? process.env["PORT"] ?? "3011", 10);
|
|
319
|
-
return process.env["OVERDECK_INTERNAL_DASHBOARD_URL"] ?? `http://127.0.0.1:${port}`;
|
|
320
|
-
}
|
|
321
|
-
async function fetchIssueRowsFromDashboard() {
|
|
322
|
-
const dashboardOrigin = internalDashboardOrigin();
|
|
323
|
-
const token = getInternalTokenSync();
|
|
324
|
-
if (!token) {
|
|
325
|
-
console.error("[flywheel] Cannot load issue metadata: internal dashboard token is unavailable");
|
|
326
|
-
return [];
|
|
327
|
-
}
|
|
328
|
-
try {
|
|
329
|
-
const response = await fetch(new URL("/api/issues?cycle=all&includeCompleted=true", dashboardOrigin), { headers: {
|
|
330
|
-
[INTERNAL_TOKEN_HEADER]: token,
|
|
331
|
-
origin: dashboardOrigin
|
|
332
|
-
} });
|
|
333
|
-
if (!response.ok) {
|
|
334
|
-
console.error(`[flywheel] Cannot load issue metadata from dashboard: HTTP ${response.status}`);
|
|
335
|
-
return [];
|
|
336
|
-
}
|
|
337
|
-
const body = await response.json();
|
|
338
|
-
if (!Array.isArray(body)) {
|
|
339
|
-
console.error("[flywheel] Cannot load issue metadata from dashboard: response was not an array");
|
|
340
|
-
return [];
|
|
341
|
-
}
|
|
342
|
-
return body;
|
|
343
|
-
} catch (error) {
|
|
344
|
-
console.error("[flywheel] Cannot load issue metadata from dashboard:", error);
|
|
345
|
-
return [];
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
async function flywheelRunConfigurationSection(options) {
|
|
349
|
-
const configLines = [
|
|
350
|
-
options.harness ? `Harness: ${options.harness}` : void 0,
|
|
351
|
-
options.effort ? `Effort: ${options.effort}` : void 0,
|
|
352
|
-
options.minAgents ? `Min concurrent agents (target): ${options.minAgents}` : void 0,
|
|
353
|
-
options.maxAgents ? `Max concurrent agents (ceiling): ${options.maxAgents}` : void 0,
|
|
354
|
-
options.scope ? `Scope: ${options.scope}` : void 0,
|
|
355
|
-
typeof options.autoPickupBacklog === "boolean" ? `Auto-pickup backlog: ${options.autoPickupBacklog}` : void 0,
|
|
356
|
-
typeof options.requireUatBeforeMerge === "boolean" ? `Require UAT before merge: ${options.requireUatBeforeMerge}` : void 0
|
|
357
|
-
].filter(Boolean).join("\n");
|
|
358
|
-
let sequenceSection = "";
|
|
359
|
-
if (options.autoPickupBacklog) {
|
|
360
|
-
const seqPath = join(process.cwd(), ".pan", "backlog", "sequence.md");
|
|
361
|
-
if (existsSync(seqPath)) try {
|
|
362
|
-
const parsed = parseSequenceMd(readFileSync(seqPath, "utf-8"));
|
|
363
|
-
if (parsed.ok) {
|
|
364
|
-
const getIssueRows = async () => fetchIssueRowsFromDashboard();
|
|
365
|
-
const issueRowMap = new Map((await getIssueRows()).map((i) => [i.ref ?? i.identifier ?? "", i]));
|
|
366
|
-
const issueLabelsLookup = (issueId) => issueRowMap.get(issueId)?.labels ?? [];
|
|
367
|
-
const AUTHORIZED_AUTHORS = new Set(["eltmon", "panopticon-agent[bot]"]);
|
|
368
|
-
const isAuthorizedIssue = (issueId) => {
|
|
369
|
-
const row = issueRowMap.get(issueId);
|
|
370
|
-
if (!row) return false;
|
|
371
|
-
if (row.author && AUTHORIZED_AUTHORS.has(row.author)) return true;
|
|
372
|
-
return (typeof row.assignee === "string" ? row.assignee : row.assignee?.name) === "eltmon";
|
|
373
|
-
};
|
|
374
|
-
const projectRoot = process.cwd();
|
|
375
|
-
const specsDir = join(projectRoot, ".pan", "specs");
|
|
376
|
-
const issuesWithSpecs = /* @__PURE__ */ new Set();
|
|
377
|
-
const declaredFootprints = [];
|
|
378
|
-
if (existsSync(specsDir)) for (const f of readdirSync(specsDir)) {
|
|
379
|
-
const match = /^[\d-]+-([A-Z]+-\d+)-/i.exec(f);
|
|
380
|
-
if (!match) continue;
|
|
381
|
-
const issueId = match[1].toUpperCase();
|
|
382
|
-
issuesWithSpecs.add(issueId);
|
|
383
|
-
try {
|
|
384
|
-
const doc = JSON.parse(readFileSync(join(specsDir, f), "utf-8"));
|
|
385
|
-
declaredFootprints.push(declaredIssueFootprint(issueId, doc));
|
|
386
|
-
} catch {}
|
|
387
|
-
}
|
|
388
|
-
const projectConfig = findProjectByPathSync(projectRoot);
|
|
389
|
-
const predictedConflictSignals = computePredictedConflictSignals(declaredFootprints, { hotspots: getProjectSwarmHotspots(projectConfig) });
|
|
390
|
-
const isReadyOrHasPrd = (issueId) => {
|
|
391
|
-
const id = issueId.toUpperCase();
|
|
392
|
-
if (issuesWithSpecs.has(id)) return true;
|
|
393
|
-
return existsSync(join(projectRoot, ".pan", "drafts", `${id}.md`));
|
|
394
|
-
};
|
|
395
|
-
const membershipAvailable = Boolean(projectConfig?.github_repo);
|
|
396
|
-
const memberships = projectConfig?.github_repo ? (await gatherProjectLensSignals(projectConfig)).map(resolvePipelineMembership) : [];
|
|
397
|
-
const isInPipeline = (issueId) => membershipAvailable ? isIssueInResolvedPipeline(issueId, memberships) : true;
|
|
398
|
-
const top10 = parsed.doc.nodes.slice(0, 10).map((n) => ` #${n.rank} ${n.issue}: ${n.why.slice(0, 100)} [gate:${n.gate}]`);
|
|
399
|
-
const nextPick = pickFromSequence(parsed.doc.nodes, {
|
|
400
|
-
issueLabels: issueLabelsLookup,
|
|
401
|
-
isAuthorizedIssue,
|
|
402
|
-
isReadyOrHasPrd,
|
|
403
|
-
isInPipeline,
|
|
404
|
-
requireReady: true,
|
|
405
|
-
autoPickupBacklog: options.autoPickupBacklog,
|
|
406
|
-
predictedConflictSignals
|
|
407
|
-
});
|
|
408
|
-
let nextLine;
|
|
409
|
-
let pickInstruction;
|
|
410
|
-
if (!membershipAvailable) {
|
|
411
|
-
nextLine = "MEMBERSHIP UNAVAILABLE: project has no GitHub repository; auto-pickup is disabled";
|
|
412
|
-
pickInstruction = "\n\nIMPORTANT: Canonical pipeline membership is unavailable for this project. Do NOT auto-start backlog work; surface the missing github_repo configuration to the operator.";
|
|
413
|
-
} else if (!nextPick) {
|
|
414
|
-
nextLine = "No eligible issue found in sequence — fall back to normal priority";
|
|
415
|
-
pickInstruction = "";
|
|
416
|
-
} else if (nextPick.planning === "interactive") {
|
|
417
|
-
nextLine = `NEEDS OPERATOR ACTION: ${nextPick.issueId} (rank ${nextPick.rank}) has planning=interactive — do NOT auto-start; operator must run 'pan plan ${nextPick.issueId}'`;
|
|
418
|
-
pickInstruction = `\n\nIMPORTANT: auto_pickup_backlog=true. The top-ranked issue requires interactive planning and MUST NOT be auto-started. Surface it to the operator for manual 'pan plan' invocation instead of auto-picking it.`;
|
|
419
|
-
} else {
|
|
420
|
-
const conflictSuffix = typeof nextPick.predictedConflictCount === "number" ? `, predictedConflicts=${nextPick.predictedConflictCount}${nextPick.predictedConflictsWith?.length ? ` with ${nextPick.predictedConflictsWith.join(", ")}` : ""}` : "";
|
|
421
|
-
nextLine = `MUST start next: ${nextPick.issueId} (rank ${nextPick.rank}, planning=${nextPick.planning}${conflictSuffix})`;
|
|
422
|
-
pickInstruction = `\n\nIMPORTANT: auto_pickup_backlog=true. You MUST pick the "MUST start next" issue above as your next startup target. Do NOT apply your own P0-P3/oldest-first ranking while a sequence is available.`;
|
|
423
|
-
}
|
|
424
|
-
sequenceSection = `\n\nBacklog sequence (${parsed.doc.nodes.length} issues ranked):\n${top10.join("\n")}\n${nextLine}${pickInstruction}`;
|
|
425
|
-
}
|
|
426
|
-
} catch {}
|
|
427
|
-
}
|
|
428
|
-
return (configLines ? `\n\nRun configuration:\n${configLines}` : "") + sequenceSection;
|
|
429
|
-
}
|
|
430
|
-
async function defaultFlywheelPrompt(runId, options, briefContent) {
|
|
431
|
-
return `FLYWHEEL ORCHESTRATOR TASK for ${runId}:
|
|
432
|
-
|
|
433
|
-
Run the Fix-All Flywheel loop. Keep status snapshots current, coordinate Overdeck roles through the normal pipeline surfaces, respect the configured run scope and agent cap, and wait for explicit lifecycle instructions when the run is paused or complete.${await flywheelRunConfigurationSection(options)}${options.briefPath ? `\n\nBrief path: ${options.briefPath}\n\n${briefContent ?? ""}` : ""}`;
|
|
434
|
-
}
|
|
435
|
-
function getLocalFlywheelRunDir(runId) {
|
|
436
|
-
return join(process.env.OVERDECK_HOME ?? join(homedir(), ".overdeck"), "flywheel", "runs", runId);
|
|
437
|
-
}
|
|
438
|
-
async function saveResumeSessionId(runId, sessionId) {
|
|
439
|
-
const runDir = getLocalFlywheelRunDir(runId);
|
|
440
|
-
await mkdir(runDir, { recursive: true });
|
|
441
|
-
await writeFile(join(runDir, "resume-session.json"), JSON.stringify({
|
|
442
|
-
sessionId,
|
|
443
|
-
pausedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
444
|
-
}), "utf-8");
|
|
445
|
-
}
|
|
446
|
-
async function loadResumeSessionId(runId) {
|
|
447
|
-
try {
|
|
448
|
-
const raw = await readFile(join(getLocalFlywheelRunDir(runId), "resume-session.json"), "utf-8");
|
|
449
|
-
const parsed = JSON.parse(raw);
|
|
450
|
-
return typeof parsed.sessionId === "string" ? parsed.sessionId : null;
|
|
451
|
-
} catch {
|
|
452
|
-
return null;
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
function isFlywheelDevcontainerRuntime(env = process.env) {
|
|
456
|
-
const disabledDeacon = env.OVERDECK_DISABLE_DEACON?.toLowerCase();
|
|
457
|
-
if (disabledDeacon === "1" || disabledDeacon === "true") return true;
|
|
458
|
-
const hostname = env.HOSTNAME?.toLowerCase() ?? "";
|
|
459
|
-
return hostname.includes("devcontainer") || hostname.startsWith("api-feature-") || hostname.startsWith("workspace-");
|
|
460
|
-
}
|
|
461
|
-
/**
|
|
462
|
-
* Resume prompt. PAN-2006 FR-8: re-attach the standing brief on resume so its
|
|
463
|
-
* directives (pipeline-unblock override, never-block, red-main-first) survive a
|
|
464
|
-
* resume + context compaction — the pre-PAN-2006 resume prompt only pointed at
|
|
465
|
-
* FLYWHEEL-STATE.md and a long-running orchestrator could drift off-brief.
|
|
466
|
-
*/
|
|
467
|
-
function buildFlywheelResumePrompt(configSection, briefContent) {
|
|
468
|
-
return `FLYWHEEL RESUME: You were paused by the operator. Resume the tick loop from your prior state. Check \`docs/FLYWHEEL-STATE.md\` and the latest status snapshot for context.${configSection}${briefContent ? `\n\n--- Standing brief (re-read it — it governs pickup, unblocking, and never-block) ---\n\n${briefContent}` : ""}`;
|
|
469
|
-
}
|
|
470
|
-
async function spawnFlywheelAgent(runId, options = {}) {
|
|
471
|
-
const workspace = options.workspace ?? process.cwd();
|
|
472
|
-
const briefContent = await readFile(options.briefPath ?? join(workspace, "docs", "flywheel-brief.md"), "utf8").catch(() => void 0);
|
|
473
|
-
return spawnRun(runId, "flywheel", {
|
|
474
|
-
agentId: FLYWHEEL_ORCHESTRATOR_AGENT_ID,
|
|
475
|
-
workspace,
|
|
476
|
-
prompt: options.resumeSessionId ? buildFlywheelResumePrompt(await flywheelRunConfigurationSection(options), briefContent) : options.prompt ?? await defaultFlywheelPrompt(runId, options, briefContent),
|
|
477
|
-
model: options.model,
|
|
478
|
-
harness: options.harness,
|
|
479
|
-
effort: options.effort,
|
|
480
|
-
allowHost: true,
|
|
481
|
-
registerConversation: true,
|
|
482
|
-
resumeSessionId: options.resumeSessionId,
|
|
483
|
-
flywheelRunId: runId
|
|
484
|
-
});
|
|
485
|
-
}
|
|
486
|
-
function withFlywheelAutonomyOptions(options) {
|
|
487
|
-
return {
|
|
488
|
-
...options,
|
|
489
|
-
autoPickupBacklog: options.autoPickupBacklog ?? isFlywheelAutoPickupBacklog(),
|
|
490
|
-
requireUatBeforeMerge: options.requireUatBeforeMerge ?? isFlywheelRequireUatBeforeMerge()
|
|
491
|
-
};
|
|
492
|
-
}
|
|
493
|
-
async function pauseFlywheel() {
|
|
494
|
-
const activeRunId = getFlywheelActiveRunId();
|
|
495
|
-
if (activeRunId) try {
|
|
496
|
-
const sessionId = (await readFile(join(getAgentDir(FLYWHEEL_ORCHESTRATOR_AGENT_ID), "session.id"), "utf-8")).trim();
|
|
497
|
-
if (sessionId) await saveResumeSessionId(activeRunId, sessionId);
|
|
498
|
-
} catch {}
|
|
499
|
-
setFlywheelGloballyPaused(true);
|
|
500
|
-
await Effect.runPromise(stopAgent(FLYWHEEL_ORCHESTRATOR_AGENT_ID));
|
|
501
|
-
return { activeRunId };
|
|
502
|
-
}
|
|
503
|
-
async function resumeFlywheel(options = {}) {
|
|
504
|
-
if (isFlywheelDevcontainerRuntime(options.env)) throw new Error("Refusing to resume flywheel-orchestrator inside a workspace devcontainer");
|
|
505
|
-
const activeRunId = getFlywheelActiveRunId();
|
|
506
|
-
if (!activeRunId) throw new Error("No active flywheel run to resume");
|
|
507
|
-
const runId = parseRunId(activeRunId);
|
|
508
|
-
const resumeSessionId = options.resumeSessionId ?? await loadResumeSessionId(runId) ?? void 0;
|
|
509
|
-
const agent = await spawnFlywheelAgent(runId, withFlywheelAutonomyOptions({
|
|
510
|
-
...options,
|
|
511
|
-
resumeSessionId
|
|
512
|
-
}));
|
|
513
|
-
setFlywheelGloballyPaused(false);
|
|
514
|
-
return {
|
|
515
|
-
activeRunId,
|
|
516
|
-
agent
|
|
517
|
-
};
|
|
518
|
-
}
|
|
519
|
-
//#endregion
|
|
520
|
-
export { writeLatestFlywheelStatus as C, writeFlywheelLaunchMetadata as S, nextFlywheelRunId as _, loadResumeSessionId as a, resolveLiveFlywheelRunId as b, saveResumeSessionId as c, abortFlywheelRun as d, clearFlywheelGate as f, listFlywheelRuns as g, isFlywheelRunId as h, isIssueInResolvedPipeline as i, spawnFlywheelAgent as l, getFlywheelRunDir as m, buildFlywheelResumePrompt as n, pauseFlywheel as o, getFlywheelRunDetail as p, isFlywheelDevcontainerRuntime as r, resumeFlywheel as s, FLYWHEEL_ORCHESTRATOR_AGENT_ID as t, buildClassifyLookups as u, readCurrentLatestFlywheelStatus as v, subscribeLatestFlywheelStatus as x, readFlywheelLaunchMetadata as y };
|
|
521
|
-
|
|
522
|
-
//# sourceMappingURL=flywheel-DSSpWmqF.js.map
|