@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
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
import { Tn as init_projects, f as loadConfigSync, fn as findProjectByPathSync, nn as init_state_read_home, rn as resolveStateReadHomeSync, t as init_config_yaml, tt as resolveModel } from "./config-yaml-DySPNmKN.js";
|
|
2
|
+
import { H as sessionExists, w as init_tmux } from "./tmux-R7N7y-Mh.js";
|
|
3
|
+
import { S as FlywheelStatus, f as FlywheelStats, t as init_src } from "./src-DtcUOZCq.js";
|
|
4
|
+
import { b as init_agents } from "./queries-CjNIf-Ub.js";
|
|
5
|
+
import { s as init_internal_token } from "./internal-token-s0-oKybJ.js";
|
|
6
|
+
import { d as isFlywheelAutoPickupBacklog, i as getFlywheelActiveRunId, p as isFlywheelRequireUatBeforeMerge, s as init_control_settings } from "./control-settings-BQp7_4uD.js";
|
|
7
|
+
import { n as resolveHarness, t as init_harness_resolve } from "./harness-resolve-3lNZkyT4.js";
|
|
8
|
+
import { f as init_github_app } from "./github-app-C3QrAUd0.js";
|
|
9
|
+
import "./substrate-bug-weights-service-B-FwCs5V.js";
|
|
10
|
+
import { t as init_sequence_io } from "./sequence-io-D909zgeH.js";
|
|
11
|
+
import { A as advanceQueue, B as getBook, D as writeFlywheelLaunchMetadata, L as setStatus, O as writeLatestFlywheelStatus, S as nextFlywheelRunId, _ as clearFlywheelGate, d as spawnFlywheel, h as resolvePrimaryWorktreeRoot, m as requireFlywheelBrief, n as abortSpawnedFlywheel, t as FLYWHEEL_ORCHESTRATOR_AGENT_ID, v as getFlywheelRunDetail, w as readFlywheelLaunchMetadata, x as listFlywheelRuns, y as getFlywheelRunDir, z as computeBookProgress } from "./flywheel-DHrgCphM.js";
|
|
12
|
+
import { r as computeMergeQueue } from "./flywheel-merge-order-UU0tiUld.js";
|
|
13
|
+
import { r as validateBookForStart } from "./validate-IfDGkaVR.js";
|
|
14
|
+
import { join } from "node:path";
|
|
15
|
+
import { Effect, Schema } from "effect";
|
|
16
|
+
import { freemem, totalmem } from "node:os";
|
|
17
|
+
import "node:fs";
|
|
18
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
19
|
+
import { exec, execFile } from "node:child_process";
|
|
20
|
+
import { promisify } from "node:util";
|
|
21
|
+
import { layer } from "@effect/platform-node/NodeServices";
|
|
22
|
+
//#region ../../cli/commands/flywheel-merge-backend.ts
|
|
23
|
+
init_projects();
|
|
24
|
+
init_config_yaml();
|
|
25
|
+
init_tmux();
|
|
26
|
+
init_src();
|
|
27
|
+
init_internal_token();
|
|
28
|
+
init_control_settings();
|
|
29
|
+
init_harness_resolve();
|
|
30
|
+
init_agents();
|
|
31
|
+
init_github_app();
|
|
32
|
+
//#endregion
|
|
33
|
+
//#region ../../cli/commands/flywheel-orders.ts
|
|
34
|
+
init_state_read_home();
|
|
35
|
+
function orderStateRootFor(cwd) {
|
|
36
|
+
const project = findProjectByPathSync(cwd);
|
|
37
|
+
if (!project) throw new Error(`No configured project contains ${cwd}`);
|
|
38
|
+
return resolveStateReadHomeSync(project).root;
|
|
39
|
+
}
|
|
40
|
+
function validationError(bookId, findings) {
|
|
41
|
+
return new Error([`Order book ${bookId} cannot start:`, ...findings.map((finding) => `- [${finding.code}] ${finding.issue}: ${finding.message}`)].join("\n"));
|
|
42
|
+
}
|
|
43
|
+
function resolveFlywheelOrderStart(cwd, bookId, deps = {}) {
|
|
44
|
+
const stateRoot = (deps.orderStateRoot ?? orderStateRootFor)(cwd);
|
|
45
|
+
const book = (deps.getOrderBook ?? getBook)(stateRoot, bookId);
|
|
46
|
+
if (!book) throw new Error(`Order book not found: ${bookId}`);
|
|
47
|
+
if (book.status !== "ready") throw new Error(`Order book ${book.id} must be ready before start (current status: ${book.status})`);
|
|
48
|
+
const validation = (deps.validateOrderBook ?? validateBookForStart)(stateRoot, book);
|
|
49
|
+
if (validation.blocks.length > 0) throw validationError(book.id, validation.blocks);
|
|
50
|
+
return {
|
|
51
|
+
stateRoot,
|
|
52
|
+
book
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
async function resolveFlywheelOrderBriefOverlay(cwd, book, deps = {}) {
|
|
56
|
+
const path = book?.settings.briefOverlay?.trim();
|
|
57
|
+
if (!path) return {};
|
|
58
|
+
const brief = await (deps.requireBrief ?? requireFlywheelBrief)(cwd, path);
|
|
59
|
+
return {
|
|
60
|
+
briefOverlayPath: brief.displayPath,
|
|
61
|
+
briefOverlayContent: await (deps.readBrief ?? ((absolutePath) => readFile(absolutePath, "utf8")))(brief.absolutePath)
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
async function compensateFailedFlywheelStart(context, runId, cause, deps = {}) {
|
|
65
|
+
const failures = [cause];
|
|
66
|
+
try {
|
|
67
|
+
await (deps.cleanupSpawnedRun ?? abortSpawnedFlywheel)(runId);
|
|
68
|
+
} catch (error) {
|
|
69
|
+
failures.push(error);
|
|
70
|
+
}
|
|
71
|
+
if (context) try {
|
|
72
|
+
await setFlywheelOrderStatus(context, "ready", null, deps);
|
|
73
|
+
} catch (error) {
|
|
74
|
+
failures.push(error);
|
|
75
|
+
}
|
|
76
|
+
if (failures.length > 1) throw new AggregateError(failures, `Flywheel run ${runId} failed to start and compensation was incomplete`);
|
|
77
|
+
throw cause;
|
|
78
|
+
}
|
|
79
|
+
async function setFlywheelOrderStatus(context, status, runId, deps = {}) {
|
|
80
|
+
await (deps.setOrderStatus ?? setStatus)(context.stateRoot, context.book.id, status, runId === void 0 ? {} : { runId });
|
|
81
|
+
}
|
|
82
|
+
//#endregion
|
|
83
|
+
//#region ../../cli/commands/flywheel-complete.ts
|
|
84
|
+
init_projects();
|
|
85
|
+
init_state_read_home();
|
|
86
|
+
function stateRootFor(workspace) {
|
|
87
|
+
const project = findProjectByPathSync(workspace);
|
|
88
|
+
if (!project) throw new Error(`No configured project contains ${workspace}`);
|
|
89
|
+
return resolveStateReadHomeSync(project).root;
|
|
90
|
+
}
|
|
91
|
+
async function readOptionalFile(path) {
|
|
92
|
+
try {
|
|
93
|
+
return await readFile(path, "utf8");
|
|
94
|
+
} catch (error) {
|
|
95
|
+
if ((typeof error === "object" && error !== null && "code" in error ? error.code : void 0) === "ENOENT") return null;
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function appendFlywheelRetrospective(report, retro) {
|
|
100
|
+
const finding = retro?.trim();
|
|
101
|
+
if (!finding) return {
|
|
102
|
+
report: `${report.trimEnd()}\n\nRetrospective: no findings recognized.\n`,
|
|
103
|
+
retrospectiveIncluded: false
|
|
104
|
+
};
|
|
105
|
+
return {
|
|
106
|
+
report: `${report.trimEnd()}\n\n---\n\n## Retrospective\n\n${finding}\n`,
|
|
107
|
+
retrospectiveIncluded: true
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function nonTerminalIssues(progress) {
|
|
111
|
+
return progress.items.filter((item) => !item.terminal).map((item) => item.issue);
|
|
112
|
+
}
|
|
113
|
+
async function completeFlywheelRun(options, deps) {
|
|
114
|
+
const cwd = options.cwd ?? process.cwd();
|
|
115
|
+
const status = await deps.loadStatus();
|
|
116
|
+
if (!status) throw new Error("no flywheel run to complete");
|
|
117
|
+
const launch = await (deps.readLaunch ?? readFlywheelLaunchMetadata)(status.runId);
|
|
118
|
+
if (!launch) throw new Error(`Flywheel run ${status.runId} is missing launch metadata`);
|
|
119
|
+
const bookId = launch.orders?.bookId;
|
|
120
|
+
if (!bookId) throw new Error(`Flywheel run ${status.runId} is not bound to an order book; use pan flywheel report`);
|
|
121
|
+
const stateRoot = (deps.stateRoot ?? stateRootFor)(launch.workspace);
|
|
122
|
+
const book = (deps.getOrderBook ?? getBook)(stateRoot, bookId);
|
|
123
|
+
if (!book) throw new Error(`Flywheel run ${status.runId} references missing order book ${bookId}`);
|
|
124
|
+
const progress = (deps.computeProgress ?? computeBookProgress)(book);
|
|
125
|
+
const remaining = nonTerminalIssues(progress);
|
|
126
|
+
if (!progress.drained && !options.force) throw new Error(`Order book ${book.id} is not drained; non-terminal items: ${remaining.join(", ")}. Pass --force to complete anyway.`);
|
|
127
|
+
const runDir = getFlywheelRunDir(status.runId);
|
|
128
|
+
const retro = await (deps.readRetro ?? readOptionalFile)(join(runDir, "retro.md"));
|
|
129
|
+
const report = appendFlywheelRetrospective(await deps.buildReport(status, cwd), retro);
|
|
130
|
+
try {
|
|
131
|
+
await deps.persistReport(status, cwd, report.report);
|
|
132
|
+
} finally {
|
|
133
|
+
deps.clearGate(status.runId);
|
|
134
|
+
}
|
|
135
|
+
const nextBook = await (deps.advance ?? advanceQueue)(stateRoot, book.id);
|
|
136
|
+
const startOptions = {
|
|
137
|
+
cwd: launch.workspace,
|
|
138
|
+
brief: launch.briefPath
|
|
139
|
+
};
|
|
140
|
+
if (nextBook) {
|
|
141
|
+
const next = await deps.start({
|
|
142
|
+
...startOptions,
|
|
143
|
+
orders: nextBook.id
|
|
144
|
+
});
|
|
145
|
+
return {
|
|
146
|
+
runId: status.runId,
|
|
147
|
+
reportPath: join(runDir, "report.md"),
|
|
148
|
+
retrospectiveIncluded: report.retrospectiveIncluded,
|
|
149
|
+
continuation: "next-book",
|
|
150
|
+
nextRunId: next.runId,
|
|
151
|
+
nextBookId: nextBook.id
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
if ((deps.autoPickupBacklog ?? isFlywheelAutoPickupBacklog)()) {
|
|
155
|
+
const next = await deps.start(startOptions);
|
|
156
|
+
return {
|
|
157
|
+
runId: status.runId,
|
|
158
|
+
reportPath: join(runDir, "report.md"),
|
|
159
|
+
retrospectiveIncluded: report.retrospectiveIncluded,
|
|
160
|
+
continuation: "backlog",
|
|
161
|
+
nextRunId: next.runId
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
runId: status.runId,
|
|
166
|
+
reportPath: join(runDir, "report.md"),
|
|
167
|
+
retrospectiveIncluded: report.retrospectiveIncluded,
|
|
168
|
+
continuation: "needs-you"
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function createFlywheelCompleteCommand(deps) {
|
|
172
|
+
return async (options = {}) => {
|
|
173
|
+
try {
|
|
174
|
+
const result = await completeFlywheelRun(options, deps);
|
|
175
|
+
if (result.continuation === "next-book") console.log(`Completed ${result.runId}; started ${result.nextRunId} with order book ${result.nextBookId}.`);
|
|
176
|
+
else if (result.continuation === "backlog") console.log(`Completed ${result.runId}; started ${result.nextRunId} in backlog mode.`);
|
|
177
|
+
else console.log("needs-you: pipeline idle — no order book queued and auto-pickup is off");
|
|
178
|
+
} catch (error) {
|
|
179
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
180
|
+
process.exitCode = 1;
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
//#endregion
|
|
185
|
+
//#region ../../cli/commands/flywheel-surfaces.ts
|
|
186
|
+
init_sequence_io();
|
|
187
|
+
init_control_settings();
|
|
188
|
+
init_github_app();
|
|
189
|
+
promisify(exec);
|
|
190
|
+
promisify(execFile);
|
|
191
|
+
//#endregion
|
|
192
|
+
//#region ../../cli/commands/flywheel.ts
|
|
193
|
+
init_control_settings();
|
|
194
|
+
Schema.decodeUnknownSync(FlywheelStatus);
|
|
195
|
+
Schema.decodeUnknownSync(FlywheelStats);
|
|
196
|
+
const execAsync = promisify(exec);
|
|
197
|
+
function mb(bytes) {
|
|
198
|
+
return Math.round(bytes / 1024 / 1024);
|
|
199
|
+
}
|
|
200
|
+
async function resolveFlywheelRoleConfig() {
|
|
201
|
+
const { config } = loadConfigSync();
|
|
202
|
+
const flywheel = config.roles?.flywheel;
|
|
203
|
+
const model = resolveModel("flywheel", void 0, config);
|
|
204
|
+
return {
|
|
205
|
+
harness: await resolveHarness({ model }),
|
|
206
|
+
model,
|
|
207
|
+
effort: flywheel?.effort ?? "high",
|
|
208
|
+
minAgents: flywheel?.minAgents ?? 20,
|
|
209
|
+
maxAgents: flywheel?.maxAgents ?? 30,
|
|
210
|
+
scope: flywheel?.scope ?? "pan-only",
|
|
211
|
+
autoPickupBacklog: isFlywheelAutoPickupBacklog(),
|
|
212
|
+
requireUatBeforeMerge: isFlywheelRequireUatBeforeMerge()
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
async function createInitialFlywheelStatus(runId, startedAt, cwd, agentModel, agentHarness, roleConfig) {
|
|
216
|
+
const ramTotalMb = mb(totalmem());
|
|
217
|
+
return {
|
|
218
|
+
runId,
|
|
219
|
+
startedAt,
|
|
220
|
+
elapsedMs: 0,
|
|
221
|
+
orchestrator: {
|
|
222
|
+
harness: agentHarness ?? roleConfig.harness,
|
|
223
|
+
model: agentModel ?? roleConfig.model,
|
|
224
|
+
effort: roleConfig.effort,
|
|
225
|
+
ctxPercent: 0
|
|
226
|
+
},
|
|
227
|
+
headline: {
|
|
228
|
+
bugsFixed: 0,
|
|
229
|
+
swarmItemsMerged: 0,
|
|
230
|
+
swarmItemsTotal: 0,
|
|
231
|
+
prsMerged: 0,
|
|
232
|
+
awaitingUat: 0
|
|
233
|
+
},
|
|
234
|
+
activePipeline: [],
|
|
235
|
+
substrateBugs: [],
|
|
236
|
+
agents: [{
|
|
237
|
+
id: FLYWHEEL_ORCHESTRATOR_AGENT_ID,
|
|
238
|
+
label: "flywheel-orchestrator",
|
|
239
|
+
status: "running",
|
|
240
|
+
role: "flywheel",
|
|
241
|
+
model: agentModel
|
|
242
|
+
}],
|
|
243
|
+
parked: [],
|
|
244
|
+
suggestions: [],
|
|
245
|
+
system: {
|
|
246
|
+
mainHead: await gitOutput("git rev-parse --short HEAD", cwd).catch(() => "unknown"),
|
|
247
|
+
ramUsedMb: Math.max(0, ramTotalMb - mb(freemem())),
|
|
248
|
+
ramTotalMb,
|
|
249
|
+
swapUsedMb: 0,
|
|
250
|
+
swapTotalMb: 0,
|
|
251
|
+
agentsActive: 1,
|
|
252
|
+
agentsCap: roleConfig.maxAgents
|
|
253
|
+
},
|
|
254
|
+
openQuestions: [],
|
|
255
|
+
ticks: 0,
|
|
256
|
+
lastTickAt: startedAt
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
async function startFlywheelRun(options = {}, deps = {}) {
|
|
260
|
+
const cwd = options.cwd ?? await (deps.resolvePrimaryRoot ?? resolvePrimaryWorktreeRoot)(process.cwd());
|
|
261
|
+
const brief = await (deps.requireBrief ?? requireFlywheelBrief)(cwd, options.brief);
|
|
262
|
+
const orderContext = options.orders ? resolveFlywheelOrderStart(cwd, options.orders, deps) : null;
|
|
263
|
+
const book = orderContext?.book ?? null;
|
|
264
|
+
const overlay = await resolveFlywheelOrderBriefOverlay(cwd, book, deps);
|
|
265
|
+
const runId = await (deps.nextRunId ?? nextFlywheelRunId)();
|
|
266
|
+
const startedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
267
|
+
const launchMetadata = {
|
|
268
|
+
version: 1,
|
|
269
|
+
runId,
|
|
270
|
+
workspace: cwd,
|
|
271
|
+
briefPath: brief.absolutePath,
|
|
272
|
+
briefDisplayPath: brief.displayPath,
|
|
273
|
+
...overlay.briefOverlayPath ? { briefOverlayPath: overlay.briefOverlayPath } : {},
|
|
274
|
+
...book ? { orders: { bookId: book.id } } : {}
|
|
275
|
+
};
|
|
276
|
+
await (deps.writeLaunchMetadata ?? writeFlywheelLaunchMetadata)(launchMetadata);
|
|
277
|
+
const roleConfig = await (deps.resolveRoleConfig ?? resolveFlywheelRoleConfig)();
|
|
278
|
+
const agent = await (deps.spawn ?? spawnFlywheel)({
|
|
279
|
+
runId,
|
|
280
|
+
briefPath: brief.absolutePath,
|
|
281
|
+
...overlay,
|
|
282
|
+
workspace: cwd,
|
|
283
|
+
model: roleConfig.model,
|
|
284
|
+
harness: roleConfig.harness,
|
|
285
|
+
effort: roleConfig.effort,
|
|
286
|
+
minAgents: roleConfig.minAgents,
|
|
287
|
+
maxAgents: roleConfig.maxAgents,
|
|
288
|
+
scope: roleConfig.scope,
|
|
289
|
+
autoPickupBacklog: roleConfig.autoPickupBacklog,
|
|
290
|
+
requireUatBeforeMerge: roleConfig.requireUatBeforeMerge
|
|
291
|
+
});
|
|
292
|
+
try {
|
|
293
|
+
if (orderContext) await setFlywheelOrderStatus(orderContext, "running", runId, deps);
|
|
294
|
+
await (deps.writeStatus ?? writeLatestFlywheelStatus)(await createInitialFlywheelStatus(runId, startedAt, cwd, agent.model, agent.harness, roleConfig));
|
|
295
|
+
return {
|
|
296
|
+
runId,
|
|
297
|
+
briefDisplayPath: brief.displayPath,
|
|
298
|
+
agentModel: agent.model
|
|
299
|
+
};
|
|
300
|
+
} catch (error) {
|
|
301
|
+
return compensateFailedFlywheelStart(orderContext, runId, error, deps);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
function runNumberFromRunId(runId) {
|
|
305
|
+
const match = /^RUN-(\d+)$/.exec(runId);
|
|
306
|
+
if (!match) throw new Error(`Invalid Flywheel run id for report: ${runId}`);
|
|
307
|
+
return Number(match[1]);
|
|
308
|
+
}
|
|
309
|
+
function reportDate(status) {
|
|
310
|
+
return status.lastTickAt.slice(0, 10);
|
|
311
|
+
}
|
|
312
|
+
function tableCell(value) {
|
|
313
|
+
return String(value ?? "").replace(/\|/g, "\\|").replace(/\n/g, " ");
|
|
314
|
+
}
|
|
315
|
+
function formatFlywheelStateReport(status, mergeQueue = []) {
|
|
316
|
+
const runNumber = runNumberFromRunId(status.runId);
|
|
317
|
+
const suggestionRows = status.suggestions.length > 0 ? status.suggestions.map((suggestion) => `| ${tableCell(suggestion.priority)} | ${tableCell(suggestion.action)} | ${tableCell(suggestion.issueId)} | ${tableCell(suggestion.rationale)} |`).join("\n") : "No suggestions emitted this run.";
|
|
318
|
+
const activePipelineRows = status.activePipeline.length > 0 ? status.activePipeline.map((item) => `| ${tableCell(item.issueId)} | ${tableCell(item.verb)} | ${tableCell(item.status)} | ${tableCell(item.title)} | ${tableCell(item.progressPercent)} | ${tableCell(item.pr)} |`).join("\n") : "| _None_ | | | | | |";
|
|
319
|
+
const substrateRows = status.substrateBugs.length > 0 ? status.substrateBugs.map((bug) => `| ${tableCell(bug.issueId)} | ${tableCell(bug.status)} | ${tableCell(bug.title)} | ${tableCell(bug.commitSha?.slice(0, 10))} |`).join("\n") : "| _None_ | | | |";
|
|
320
|
+
const patternLines = status.parked.length > 0 ? status.parked.map((item) => `- **${item.issueId}** (${item.reason}) — ${item.title}`).join("\n") : "- None recorded this run.";
|
|
321
|
+
const questionLines = status.openQuestions.length > 0 ? status.openQuestions.map((question) => `- ${question}`).join("\n") : "- None.";
|
|
322
|
+
const mergeQueueSection = mergeQueue.length > 0 ? `## Merge Queue
|
|
323
|
+
|
|
324
|
+
Merge ship-ready PRs in this order to avoid rebase conflicts. Branches with overlapping file changes must be merged in sequence; non-overlapping branches can be merged in any order.
|
|
325
|
+
|
|
326
|
+
| # | Issue | PR | Conflicts With |
|
|
327
|
+
|---|---|---|---|
|
|
328
|
+
${mergeQueue.map((item) => {
|
|
329
|
+
const prCell = item.pr != null ? `#${item.pr}` : "—";
|
|
330
|
+
const conflictsCell = item.conflictsWith.length > 0 ? item.conflictsWith.join(", ") : "—";
|
|
331
|
+
return `| ${item.mergeOrder} | ${item.issueId} | ${prCell} | ${conflictsCell} |`;
|
|
332
|
+
}).join("\n")}
|
|
333
|
+
|
|
334
|
+
---
|
|
335
|
+
|
|
336
|
+
` : "";
|
|
337
|
+
return `# Flywheel Run ${runNumber} Report — ${reportDate(status)}
|
|
338
|
+
|
|
339
|
+
Per-run report derived from the last \`FlywheelStatus\` snapshot. Durable cumulative memory across runs lives in \`docs/FLYWHEEL-STATE.md\`.
|
|
340
|
+
|
|
341
|
+
**Run window:** ${status.startedAt} → ${status.lastTickAt} (${status.orchestrator.harness}, ${status.orchestrator.model}, ${status.orchestrator.effort})
|
|
342
|
+
|
|
343
|
+
**Headline result:** ${status.headline.bugsFixed} substrate bugs fixed; ${status.headline.swarmItemsMerged}/${status.headline.swarmItemsTotal} SWARM items merged; ${status.headline.prsMerged} PRs merged; ${status.headline.awaitingUat} awaiting UAT.
|
|
344
|
+
|
|
345
|
+
**Run counters:** ticks ${status.ticks}; last tick ${status.lastTickAt}; orchestrator context ${status.orchestrator.ctxPercent}%.
|
|
346
|
+
|
|
347
|
+
---
|
|
348
|
+
|
|
349
|
+
${mergeQueueSection}## Suggestions
|
|
350
|
+
|
|
351
|
+
${status.suggestions.length > 0 ? `| Priority | Action | Issue | Rationale |
|
|
352
|
+
|---|---|---|---|
|
|
353
|
+
${suggestionRows}` : suggestionRows}
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## Active Pipeline
|
|
358
|
+
|
|
359
|
+
| Issue | Verb | Status | Title | Progress | PR |
|
|
360
|
+
|---|---|---|---|---:|---:|
|
|
361
|
+
${activePipelineRows}
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## Cycling Alerts
|
|
366
|
+
|
|
367
|
+
${questionLines}
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## Infrastructure Gaps
|
|
372
|
+
|
|
373
|
+
| Issue | Status | Notes | Commit |
|
|
374
|
+
|---|---|---|---|
|
|
375
|
+
${substrateRows}
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## Pattern Ledger
|
|
380
|
+
|
|
381
|
+
${patternLines}
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
## Skill Gaps
|
|
386
|
+
|
|
387
|
+
- Keep \`pan flywheel report\` in the closeout path so run summaries stay archived under the run directory.
|
|
388
|
+
`;
|
|
389
|
+
}
|
|
390
|
+
async function isFlywheelStateDirty(cwd) {
|
|
391
|
+
try {
|
|
392
|
+
const { stdout } = await execAsync("git status --porcelain docs/FLYWHEEL-STATE.md", {
|
|
393
|
+
cwd,
|
|
394
|
+
encoding: "utf8"
|
|
395
|
+
});
|
|
396
|
+
return stdout.trim().length > 0;
|
|
397
|
+
} catch {
|
|
398
|
+
return false;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
async function loadReportFlywheelStatus() {
|
|
402
|
+
const activeRunId = getFlywheelActiveRunId();
|
|
403
|
+
if (activeRunId) {
|
|
404
|
+
const activeDetail = await getFlywheelRunDetail(activeRunId);
|
|
405
|
+
if (activeDetail?.latest) return activeDetail.latest;
|
|
406
|
+
}
|
|
407
|
+
const runs = await listFlywheelRuns();
|
|
408
|
+
const run = runs.find((candidate) => candidate.status === "running") ?? runs[0];
|
|
409
|
+
if (!run) return null;
|
|
410
|
+
return (await getFlywheelRunDetail(run.id))?.latest ?? null;
|
|
411
|
+
}
|
|
412
|
+
async function gitOutput(command, cwd) {
|
|
413
|
+
const { stdout } = await execAsync(command, {
|
|
414
|
+
cwd,
|
|
415
|
+
encoding: "utf8"
|
|
416
|
+
});
|
|
417
|
+
return stdout.trim();
|
|
418
|
+
}
|
|
419
|
+
async function commitFlywheelStateChanges(cwd, runNumber) {
|
|
420
|
+
const subject = `docs(flywheel): run ${runNumber}`;
|
|
421
|
+
await execAsync("git add docs/FLYWHEEL-STATE.md", { cwd });
|
|
422
|
+
await execAsync(await gitOutput("git log -1 --format=%s", cwd).catch(() => "") === subject ? `git commit --amend -m ${JSON.stringify(subject)}` : `git commit -m ${JSON.stringify(subject)}`, {
|
|
423
|
+
cwd,
|
|
424
|
+
encoding: "utf8"
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
function clearFlywheelRunGate(runId) {
|
|
428
|
+
if (getFlywheelActiveRunId() === runId) clearFlywheelGate();
|
|
429
|
+
}
|
|
430
|
+
async function buildFlywheelStateReport(status, cwd) {
|
|
431
|
+
return formatFlywheelStateReport(status, await Effect.runPromise(computeMergeQueue(status.activePipeline, cwd).pipe(Effect.provide(layer))));
|
|
432
|
+
}
|
|
433
|
+
async function persistFlywheelStateReport(status, cwd, report) {
|
|
434
|
+
const runNumber = runNumberFromRunId(status.runId);
|
|
435
|
+
await writeFile(join(getFlywheelRunDir(status.runId), "report.md"), report, "utf8");
|
|
436
|
+
if (await isFlywheelStateDirty(cwd)) {
|
|
437
|
+
await commitFlywheelStateChanges(cwd, runNumber);
|
|
438
|
+
console.log(`Wrote per-run report and committed FLYWHEEL-STATE.md changes for run ${runNumber}.`);
|
|
439
|
+
} else console.log(`Wrote per-run report for run ${runNumber}. No FLYWHEEL-STATE.md changes to commit.`);
|
|
440
|
+
}
|
|
441
|
+
async function flywheelReportCommand(options = {}) {
|
|
442
|
+
try {
|
|
443
|
+
const cwd = options.cwd ?? process.cwd();
|
|
444
|
+
if (!options.force && await Effect.runPromise(sessionExists("flywheel-orchestrator"))) {
|
|
445
|
+
console.error("Refusing to write report — flywheel orchestrator session is still alive.");
|
|
446
|
+
console.error("This command finalizes the run (writes report.md and clears the active-run gate).");
|
|
447
|
+
console.error("Run `pan flywheel pause` (or `pan flywheel abort`) first, or pass --force to override.");
|
|
448
|
+
process.exitCode = 1;
|
|
449
|
+
return;
|
|
450
|
+
}
|
|
451
|
+
const status = await loadReportFlywheelStatus();
|
|
452
|
+
if (!status) {
|
|
453
|
+
console.error("no flywheel run to report");
|
|
454
|
+
process.exitCode = 1;
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
try {
|
|
458
|
+
await persistFlywheelStateReport(status, cwd, await buildFlywheelStateReport(status, cwd));
|
|
459
|
+
} finally {
|
|
460
|
+
clearFlywheelRunGate(status.runId);
|
|
461
|
+
}
|
|
462
|
+
} catch (error) {
|
|
463
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
464
|
+
process.exitCode = 1;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
createFlywheelCompleteCommand({
|
|
468
|
+
loadStatus: loadReportFlywheelStatus,
|
|
469
|
+
buildReport: buildFlywheelStateReport,
|
|
470
|
+
persistReport: persistFlywheelStateReport,
|
|
471
|
+
clearGate: clearFlywheelRunGate,
|
|
472
|
+
start: startFlywheelRun
|
|
473
|
+
});
|
|
474
|
+
//#endregion
|
|
475
|
+
export { flywheelReportCommand, startFlywheelRun };
|
|
476
|
+
|
|
477
|
+
//# sourceMappingURL=flywheel-DzGtWnJ1.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Tn as init_projects, fn as findProjectByPathSync, vn as getProjectSwarmHotspots } from "./config-yaml-
|
|
2
|
-
import { c as getReviewStatusSync, l as init_review_status, m as mergeGateEligibility } from "./review-status-
|
|
3
|
-
import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-
|
|
4
|
-
import { l as init_dag, r as compileGlob } from "./dag-
|
|
5
|
-
import { n as computeIssueFootprint, r as init_swarm_readiness } from "./swarm-readiness-
|
|
6
|
-
import { c as classifyIssue, h as isAutoPickable, m as init_pickup } from "./pickup-
|
|
1
|
+
import { Tn as init_projects, fn as findProjectByPathSync, vn as getProjectSwarmHotspots } from "./config-yaml-DySPNmKN.js";
|
|
2
|
+
import { c as getReviewStatusSync, l as init_review_status, m as mergeGateEligibility } from "./review-status-kZj_KyCk.js";
|
|
3
|
+
import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-DHv5pSDT.js";
|
|
4
|
+
import { l as init_dag, r as compileGlob } from "./dag-B1ucnjDU.js";
|
|
5
|
+
import { n as computeIssueFootprint, r as init_swarm_readiness } from "./swarm-readiness-DlP_UjHq.js";
|
|
6
|
+
import { c as classifyIssue, h as isAutoPickable, m as init_pickup } from "./pickup-DUCLWrJY.js";
|
|
7
7
|
import { Effect } from "effect";
|
|
8
8
|
import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process";
|
|
9
9
|
//#region ../../lib/flywheel-merge-order.ts
|
|
@@ -208,10 +208,11 @@ function pickFromSequence(nodes, opts) {
|
|
|
208
208
|
const signalByIssue = new Map((opts?.predictedConflictSignals ?? []).map((signal) => [signal.issueId.toUpperCase(), signal]));
|
|
209
209
|
const eligible = [...nodes].sort((a, b) => a.rank - b.rank).filter((node) => {
|
|
210
210
|
const state = classifyIssue(node, lookups);
|
|
211
|
+
const activeBookMember = opts?.activeBookMembership?.has(node.issue.toUpperCase()) ?? false;
|
|
211
212
|
if (!isAutoPickable(opts?.requireReady ? state : {
|
|
212
213
|
...state,
|
|
213
214
|
ready: true
|
|
214
|
-
}, opts?.autoPickupBacklog ?? false)) return false;
|
|
215
|
+
}, opts?.autoPickupBacklog ?? false, activeBookMember)) return false;
|
|
215
216
|
if (opts?.excludeIssueIds?.has(node.issue)) return false;
|
|
216
217
|
if (opts?.isAuthorizedIssue && !opts.isAuthorizedIssue(node.issue)) return false;
|
|
217
218
|
return true;
|
|
@@ -241,4 +242,4 @@ function pickFromSequence(nodes, opts) {
|
|
|
241
242
|
//#endregion
|
|
242
243
|
export { declaredIssueFootprint as a, resolveMergeQueuePrUrl as c, computePredictedConflictSignals as i, reviewRecordEligibility as l, changedFilesVsMain as n, orderMergeCandidates as o, computeMergeQueue as r, pickFromSequence as s, MERGE_GATE_VERBS as t };
|
|
243
244
|
|
|
244
|
-
//# sourceMappingURL=flywheel-merge-order-
|
|
245
|
+
//# sourceMappingURL=flywheel-merge-order-UU0tiUld.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { c as resolveMergeQueuePrUrl, l as reviewRecordEligibility, r as computeMergeQueue } from "./flywheel-merge-order-
|
|
1
|
+
import { c as resolveMergeQueuePrUrl, l as reviewRecordEligibility, r as computeMergeQueue } from "./flywheel-merge-order-UU0tiUld.js";
|
|
2
2
|
export { computeMergeQueue, resolveMergeQueuePrUrl, reviewRecordEligibility };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { S as parsePullRequestRef, d as getPullRequestState, f as init_github_app, p as isGitHubAppConfigured, v as listPullRequestsForHead, x as mergePullRequestWithApp } from "./github-app-
|
|
1
|
+
import { S as parsePullRequestRef, d as getPullRequestState, f as init_github_app, p as isGitHubAppConfigured, v as listPullRequestsForHead, x as mergePullRequestWithApp } from "./github-app-C3QrAUd0.js";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { Data, Effect } from "effect";
|
|
4
4
|
import { tmpdir } from "node:os";
|
|
@@ -267,4 +267,4 @@ function getForgeAdapter(forge) {
|
|
|
267
267
|
//#endregion
|
|
268
268
|
export { getForgeAdapter as n, parseArtifactRef as r, GITHUB_MERGE_TIMEOUT_MS as t };
|
|
269
269
|
|
|
270
|
-
//# sourceMappingURL=forge-
|
|
270
|
+
//# sourceMappingURL=forge-CNFnyqps.js.map
|
|
@@ -3841,4 +3841,4 @@ var init_from = __esmMin((() => {
|
|
|
3841
3841
|
//#endregion
|
|
3842
3842
|
export { File as a, init_esm_min as i, FormData as n, Blob as o, formDataToBlob as r, init_fetch_blob as s, init_from as t };
|
|
3843
3843
|
|
|
3844
|
-
//# sourceMappingURL=from-
|
|
3844
|
+
//# sourceMappingURL=from-kNxT0bZC.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { a as runMemoryFtsTransactionSync, i as runMemoryFtsStatementSync, n as getMemoryFtsDatabaseSync, r as init_fts_operations, t as closeMemoryFtsDatabasesInProcess } from "./fts-operations-
|
|
2
|
+
import { a as runMemoryFtsTransactionSync, i as runMemoryFtsStatementSync, n as getMemoryFtsDatabaseSync, r as init_fts_operations, t as closeMemoryFtsDatabasesInProcess } from "./fts-operations-CqY6zl-i.js";
|
|
3
3
|
import { Worker } from "node:worker_threads";
|
|
4
4
|
//#region ../../lib/memory/fts-db.ts
|
|
5
5
|
async function getMemoryFtsDatabase(projectId) {
|
|
@@ -143,4 +143,4 @@ var init_fts_db = __esmMin((() => {
|
|
|
143
143
|
//#endregion
|
|
144
144
|
export { withMemoryFtsDatabase as a, runMemoryFtsTransaction as i, init_fts_db as n, runMemoryFtsStatement as r, closeMemoryFtsDatabases as t };
|
|
145
145
|
|
|
146
|
-
//# sourceMappingURL=fts-db-
|
|
146
|
+
//# sourceMappingURL=fts-db-CE46vDkZ.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
2
|
import { n as openDatabase, t as init_driver } from "./driver-CKVGi51s.js";
|
|
3
|
-
import { i as init_paths, o as resolveFtsDbPath } from "./paths-
|
|
3
|
+
import { i as init_paths, o as resolveFtsDbPath } from "./paths-D-xWGHdh.js";
|
|
4
4
|
import { dirname } from "node:path";
|
|
5
5
|
import { mkdirSync } from "node:fs";
|
|
6
6
|
//#region ../../lib/memory/fts-operations.ts
|
|
@@ -131,4 +131,4 @@ var init_fts_operations = __esmMin((() => {
|
|
|
131
131
|
//#endregion
|
|
132
132
|
export { runMemoryFtsTransactionSync as a, runMemoryFtsStatementSync as i, getMemoryFtsDatabaseSync as n, init_fts_operations as r, closeMemoryFtsDatabasesInProcess as t };
|
|
133
133
|
|
|
134
|
-
//# sourceMappingURL=fts-operations-
|
|
134
|
+
//# sourceMappingURL=fts-operations-CqY6zl-i.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { ar as GitError, ir as FsError, mr as init_errors } from "./config-yaml-
|
|
2
|
+
import { ar as GitError, ir as FsError, mr as init_errors } from "./config-yaml-DySPNmKN.js";
|
|
3
3
|
import { Effect } from "effect";
|
|
4
4
|
import { existsSync, readdirSync, unlinkSync } from "fs";
|
|
5
5
|
import { join } from "path";
|
|
@@ -142,6 +142,43 @@ async function cleanupStaleLocksPromise(repoPath, options) {
|
|
|
142
142
|
}
|
|
143
143
|
return result;
|
|
144
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Parse a polyrepo head anchor such as `fe@<sha> api@<sha>`.
|
|
147
|
+
* Plain single-repo refs return null. Malformed composite anchors fail before
|
|
148
|
+
* any caller can accidentally pass the whitespace-containing value to git.
|
|
149
|
+
*/
|
|
150
|
+
function parseWorkspaceHeadAnchor(anchor) {
|
|
151
|
+
const normalized = anchor.trim();
|
|
152
|
+
if (!normalized.includes("@")) {
|
|
153
|
+
if (/\s/.test(normalized)) throw new Error(`Invalid workspace head anchor: ${anchor}`);
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
return normalized.split(/\s+/).map((token) => {
|
|
157
|
+
const match = /^([^@\s]+)@([0-9a-fA-F]{40,64})$/.exec(token);
|
|
158
|
+
if (!match) throw new Error(`Invalid workspace head anchor token '${token}' in '${anchor}'`);
|
|
159
|
+
return {
|
|
160
|
+
repoKey: match[1],
|
|
161
|
+
sha: match[2]
|
|
162
|
+
};
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Render `git show` for a single-repo ref or every entry in a polyrepo anchor.
|
|
167
|
+
* Composite entries are resolved to their nested worktree and labeled using
|
|
168
|
+
* the same repo-section convention as review and inspect diff summaries.
|
|
169
|
+
*/
|
|
170
|
+
async function renderWorkspaceGitShowPromise(issueId, workspacePath, anchor, args, gitShow) {
|
|
171
|
+
const entries = parseWorkspaceHeadAnchor(anchor);
|
|
172
|
+
if (!entries) return gitShow(workspacePath, anchor.trim(), args);
|
|
173
|
+
if (!issueId) throw new Error(`Cannot resolve composite workspace head anchor '${anchor}' without an issue id`);
|
|
174
|
+
const { resolveWorkspaceRepoRootsSync } = await import("./project-repos-DXKQsc_m.js");
|
|
175
|
+
const rootsByKey = new Map(resolveWorkspaceRepoRootsSync(issueId, workspacePath).map((root) => [root.repoKey, root]));
|
|
176
|
+
return (await Promise.all(entries.map(async ({ repoKey, sha }) => {
|
|
177
|
+
const root = rootsByKey.get(repoKey);
|
|
178
|
+
if (!root) throw new Error(`Composite workspace head anchor repo '${repoKey}' was not found in ${workspacePath}`);
|
|
179
|
+
return `── ${repoKey} ──\n${(await gitShow(root.dir, sha, args)).trimEnd()}`;
|
|
180
|
+
}))).join("\n");
|
|
181
|
+
}
|
|
145
182
|
async function getWorkspaceGitInfoPromise(workspacePath) {
|
|
146
183
|
try {
|
|
147
184
|
const [headResult, branchResult] = await Promise.all([execAsync("git rev-parse HEAD", { cwd: workspacePath }), execAsync("git rev-parse --abbrev-ref HEAD", { cwd: workspacePath })]);
|
|
@@ -154,6 +191,34 @@ async function getWorkspaceGitInfoPromise(workspacePath) {
|
|
|
154
191
|
throw new Error(`getWorkspaceGitInfo failed for ${workspacePath}: ${msg}`);
|
|
155
192
|
}
|
|
156
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Snapshot the code HEAD(s) of a workspace for drift comparison (PAN-2948).
|
|
196
|
+
*
|
|
197
|
+
* Monorepo: returns the workspace HEAD SHA (unchanged behavior). Polyrepo:
|
|
198
|
+
* returns a composite `fe@<sha> api@<sha>` over the sub-repo worktrees —
|
|
199
|
+
* the wrapper repo at the workspace root is a one-commit artifacts repo whose
|
|
200
|
+
* SHA never changes, so snapshotting it makes every drift comparison
|
|
201
|
+
* (reviewedAtCommit vs lastVerifiedCommit, reviewer verdict anchors) report
|
|
202
|
+
* "no drift" forever. Composite snapshots compare equal iff every sub-repo
|
|
203
|
+
* head is unchanged; consumers that try to use the anchor as a git ref fail
|
|
204
|
+
* the ref lookup and fall back to their conservative full-rerun path.
|
|
205
|
+
*/
|
|
206
|
+
async function snapshotWorkspaceHeadsPromise(issueId, workspacePath) {
|
|
207
|
+
const { resolveWorkspaceRepoRootsSync } = await import("./project-repos-DXKQsc_m.js");
|
|
208
|
+
const roots = resolveWorkspaceRepoRootsSync(issueId, workspacePath);
|
|
209
|
+
const isPolyrepo = roots.some((root) => root.isPolyrepo);
|
|
210
|
+
const heads = [];
|
|
211
|
+
for (const root of roots) try {
|
|
212
|
+
const { stdout } = await execAsync("git rev-parse HEAD", {
|
|
213
|
+
cwd: root.dir,
|
|
214
|
+
encoding: "utf-8",
|
|
215
|
+
timeout: 1e4
|
|
216
|
+
});
|
|
217
|
+
const sha = stdout.trim();
|
|
218
|
+
if (sha) heads.push(isPolyrepo ? `${root.repoKey}@${sha}` : sha);
|
|
219
|
+
} catch {}
|
|
220
|
+
return heads.length > 0 ? heads.join(" ") : void 0;
|
|
221
|
+
}
|
|
157
222
|
async function hasStaleLocksPromise(repoPath) {
|
|
158
223
|
if (findGitLockFiles(repoPath).length === 0) return false;
|
|
159
224
|
return (await hasRunningGitProcesses(repoPath, {})).status === "idle";
|
|
@@ -193,6 +258,6 @@ var init_git_utils = __esmMin((() => {
|
|
|
193
258
|
hasStaleLocks = (repoPath) => Effect.promise(() => hasStaleLocksPromise(repoPath));
|
|
194
259
|
}));
|
|
195
260
|
//#endregion
|
|
196
|
-
export { init_git_utils as i, getWorkspaceGitInfo as n, hasStaleLocks as r, cleanupStaleLocks as t };
|
|
261
|
+
export { parseWorkspaceHeadAnchor as a, init_git_utils as i, getWorkspaceGitInfo as n, renderWorkspaceGitShowPromise as o, hasStaleLocks as r, snapshotWorkspaceHeadsPromise as s, cleanupStaleLocks as t };
|
|
197
262
|
|
|
198
|
-
//# sourceMappingURL=git-utils-
|
|
263
|
+
//# sourceMappingURL=git-utils-CRw2zLPC.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { a as parseWorkspaceHeadAnchor, i as init_git_utils, n as getWorkspaceGitInfo, o as renderWorkspaceGitShowPromise, r as hasStaleLocks, s as snapshotWorkspaceHeadsPromise, t as cleanupStaleLocks } from "./git-utils-CRw2zLPC.js";
|
|
2
|
+
init_git_utils();
|
|
3
|
+
export { cleanupStaleLocks, getWorkspaceGitInfo, hasStaleLocks, parseWorkspaceHeadAnchor, renderWorkspaceGitShowPromise, snapshotWorkspaceHeadsPromise };
|