@overdeck/desktop 0.45.22 → 0.45.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/drizzle/overdeck/0000_overdeck_init.sql +2 -0
- package/package.json +1 -1
- package/server/{acceptance-criteria-BH7ac_1G.js → acceptance-criteria-DDCnXF58.js} +5 -5
- package/server/{advancing-selfheal-cSvXNZLZ.js → advancing-selfheal-BVwW4qRn.js} +6 -6
- package/server/{agent-gc-Dj2gncak.js → agent-gc-CHcnvonI.js} +4 -4
- package/server/agent-state-Bc3tzUC8.js +3 -0
- package/server/{agent-state-service-DistflNn.js → agent-state-service-BsgWxZuB.js} +5 -5
- package/server/{agent-state-service-CsQ07Pxe.js → agent-state-service-D5UGKIJL.js} +1 -1
- package/server/{agents-DXdHmRTC.js → agents-EbI0zCJl.js} +4 -4
- package/server/agents-wi9NWzs2.js +3 -0
- package/server/{archive-planning-Cp_DC1j-.js → archive-planning-BZDgzoEj.js} +1 -1
- package/server/{archive-planning-BvDuWNMo.js → archive-planning-Du25Jtst.js} +30 -6
- package/server/{artifact-index-jobs-CDBFL4OU.js → artifact-index-jobs-CbEDfCDu.js} +2 -2
- package/server/assemble-J2ZZ2C15.js +339 -0
- package/server/{backlog-auto-trigger-DmA1IbYf.js → backlog-auto-trigger-2R2jog7n.js} +3 -3
- package/server/{behavior-CGj16clS.js → behavior-B3exJ42O.js} +2 -2
- package/server/{briefing-freshness-C12WgkaB.js → briefing-freshness-D1wzUIWv.js} +2 -2
- package/server/{build-info-BRpqQvNd.js → build-info-CZk_TITh.js} +1 -1
- package/server/{build-info-NU3KbXYw.js → build-info-Ie_D0_BT.js} +3 -3
- package/server/{checkpoint-manager-CTPjAmtH.js → checkpoint-manager-BI1Wxoku.js} +2 -2
- package/server/{checkpoint-manager-rOgT98WY.js → checkpoint-manager-DwbQoqrC.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-B5jFNi2G.js → checkpoints-BJIs5QIA.js} +1 -1
- package/server/{checkpoints-BJum14fs.js → checkpoints-CQB1h765.js} +2 -2
- package/server/{claude-hooks-provision-BhwWK-TQ.js → claude-hooks-provision-8Ngo8TpT.js} +1 -1
- package/server/{claude-hooks-provision-D7p5WcKZ.js → claude-hooks-provision-D8GXF3_s.js} +2 -2
- package/server/{claude-permissions-nSFKH78M.js → claude-permissions-DNWEVV6z.js} +2 -2
- package/server/{claude-settings-overlay-BI_UIke0.js → claude-settings-overlay-CEdaqpWI.js} +2 -2
- package/server/{claude-settings-overlay-DHBwjS1X.js → claude-settings-overlay-DWy-Bb4Y.js} +1 -1
- package/server/cli-B86rejVV.js +3 -0
- package/server/{cli-CbKNkFE5.js → cli-RoOx5DUf.js} +9 -9
- package/server/{cliproxy-Brf_5MuG.js → cliproxy-C8a1vtTU.js} +2 -2
- package/server/{cliproxy-bONZDBbC.js → cliproxy-fHfIeiGd.js} +1 -1
- package/server/{close-issue-CxReRxIc.js → close-issue-DoOifFIK.js} +5 -5
- package/server/{closed-issue-reaper-CQ3kqha7.js → closed-issue-reaper-Bk3SU4RC.js} +9 -9
- package/server/{closed-issue-reaper-DXP2Xyv3.js → closed-issue-reaper-CktPXo8m.js} +1 -1
- package/server/{codex-CbmztVcc.js → codex-BZXGhUVB.js} +27 -8
- package/server/codex-GcHuUF-k.js +3 -0
- package/server/{codex-parser-jl8AeAmB.js → codex-parser-CFZ1_1Jl.js} +2 -2
- package/server/{config-q4Gvd8dq.js → config-BZ0sHTju.js} +2 -2
- package/server/{config-DeTsoZdR.js → config-CKxYiCmX.js} +2 -2
- package/server/{config-BJKocXKd.js → config-DzV30TOm.js} +1 -1
- package/server/{config-yaml-ig8Nwtiw.js → config-yaml-DySPNmKN.js} +77 -194
- package/server/{conflict-gate-CFqPVxEg.js → conflict-gate-BaCVrH-N.js} +3 -3
- package/server/{conflict-gate-CHU9K1vU.js → conflict-gate-BhAY7TUd.js} +1 -1
- package/server/context-layers-BrPmE__h.js +4 -0
- package/server/context-layers-igZ4FI4_.js +37 -0
- package/server/{control-settings-D_odMIaC.js → control-settings-BQp7_4uD.js} +4 -4
- package/server/{conversation-compaction-B6YSRLda.js → conversation-compaction-CgrR8YYp.js} +8 -8
- package/server/{conversation-compaction-CN4-5YYt.js → conversation-compaction-eQB5CkOe.js} +1 -1
- package/server/{conversation-service-Dq33SYEj.js → conversation-service-BLd3MYsG.js} +1 -1
- package/server/{conversation-service-C3avRVEr.js → conversation-service-DPJ71F33.js} +329 -19
- package/server/{conversations-bYpM9-kZ.js → conversations-6AfUfbwc.js} +5 -5
- package/server/{conversations-H9if0bCQ.js → conversations-CAsJF9kh.js} +1 -1
- package/server/{cost-Codk1pc2.js → cost-B2ddP6wq.js} +18 -2
- package/server/{cost-wH46-WsJ.js → cost-R-m6Yi-W.js} +3 -3
- package/server/{cost-sync-D_cre6WM.js → cost-sync-BsN6ER0n.js} +3 -3
- package/server/{dag-CJpgf9A3.js → dag-B1ucnjDU.js} +9 -9
- package/server/{dangerous-git-ops-D6AF-Hg_.js → dangerous-git-ops-BXqeWVSf.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/{deacon-CkT_kznS.js → deacon-CU_cAYSR.js} +406 -607
- package/server/{deacon-B8HbQdqU.js → deacon-kiQrb4ZT.js} +3 -3
- package/server/{deacon-nudge-log-D6K9K-rE.js → deacon-nudge-log-6wVqAaqz.js} +3 -3
- package/server/{deacon-swarm-BryRr6AO.js → deacon-swarm-BXZZ1Z2-.js} +17 -17
- package/server/deacon-swarm-C-GwfjJy.js +2 -0
- package/server/deacon.js +8 -8
- package/server/{deploy-patrol-1IrZxicY.js → deploy-patrol-AiFoP8dw.js} +136 -19
- package/server/{deploy-window-wDf4UgHt.js → deploy-window-C3F-tihF.js} +77 -10
- package/server/{deploy-window-7ZYHh7Zp.js → deploy-window-DkZraDyj.js} +1 -1
- package/server/{dev-supervisor-C7p9kEpc.js → dev-supervisor-bcOWqdQE.js} +2 -2
- package/server/{devcontainer-renderer-CNmQy0pL.js → devcontainer-renderer-_d6XhyND.js} +3 -3
- package/server/dist-Bzy0y69j.js +3 -0
- package/server/{dist-D-Ed5yVw.js → dist-Cb_0uvpS.js} +1 -1
- package/server/{docker-BCZ89M9X.js → docker-DcMTFTUC.js} +2 -2
- package/server/{dod-DbJLYcHv.js → dod-C6n9RV3G.js} +1 -1
- package/server/{ensure-devcontainer-Cs6W9Yzj.js → ensure-devcontainer-BZgOhRo7.js} +1 -1
- package/server/{ensure-devcontainer-V5JWaAva.js → ensure-devcontainer-DNi-ono3.js} +4 -4
- package/server/{esm-shims-dTeNdq7X.js → esm-shims-OSHAYaS1.js} +1 -1
- package/server/{event-store-TnWdydfB.js → event-store-CQL6NeqB.js} +3 -3
- package/server/{event-store-CpBGsO6_.js → event-store-EV2cMiXj.js} +1 -1
- package/server/{events-Dsuv6qyB.js → events-BTdrdEq8.js} +1 -1
- package/server/{events-DSUdR-04.js → events-DTfAe4My.js} +3 -3
- package/server/{factory-BMrK4TrE.js → factory-CFibJuaw.js} +50 -13
- package/server/{feature-registry-population-B-CI9hgE.js → feature-registry-population-DKZFMbFt.js} +4 -4
- package/server/{feature-registry-storage-B972ph_A.js → feature-registry-storage-BdPuLcBX.js} +2 -2
- package/server/{features-Bc-Bmiye.js → features-ez2271oH.js} +2 -2
- package/server/{feedback-target-DZ-iAnAa.js → feedback-target-7mqqwrX6.js} +7 -7
- package/server/{feedback-target-DS6NUuSs.js → feedback-target-CoFDHiM8.js} +1 -1
- package/server/{feedback-writer-BXP6g75N.js → feedback-writer-CY5L1lB7.js} +6 -5
- package/server/{feedback-writer-Bx5z11mF.js → feedback-writer-D3a22RCd.js} +1 -1
- package/server/flywheel-DHrgCphM.js +1084 -0
- package/server/flywheel-DzGtWnJ1.js +477 -0
- package/server/flywheel-SVF02Jpq.js +2 -0
- package/server/{flywheel-merge-order-CTgHeg-W.js → flywheel-merge-order-UU0tiUld.js} +10 -9
- package/server/{flywheel-merge-order-CNKAY489.js → flywheel-merge-order-UUcsCDb6.js} +1 -1
- package/server/{forge-B1S_KZv4.js → forge-CNFnyqps.js} +2 -2
- package/server/forge-DXnS_YFH.js +2 -0
- package/server/{from-DpwQ-sc3.js → from-kNxT0bZC.js} +1 -1
- package/server/{fts-db-DmAcuCkV.js → fts-db-CE46vDkZ.js} +2 -2
- package/server/{fts-operations-7d_RkmWp.js → fts-operations-CqY6zl-i.js} +2 -2
- package/server/{git-utils-Cc3FHDKd.js → git-utils-CRw2zLPC.js} +68 -3
- package/server/git-utils-D0_yhCgF.js +3 -0
- package/server/{github-app-CDPtGF7J.js → github-app-C3QrAUd0.js} +27 -8
- package/server/{github-app-CU14oYzP.js → github-app-ClZ2lk8D.js} +1 -1
- package/server/{github-client-XjTJbBm7.js → github-client-BnIsSrEN.js} +2 -2
- package/server/{github-client-CwBZZ3t7.js → github-client-DfQYVUaw.js} +1 -1
- package/server/{github-pr-lookup-CFGeVhqv.js → github-pr-lookup-D16NGsSO.js} +2 -2
- package/server/{harness-binary-B2CTcD84.js → harness-binary-DPUi-Pv8.js} +32 -6
- package/server/{harness-resolve-D5FVQTmy.js → harness-resolve-3lNZkyT4.js} +18 -9
- package/server/{health-events-DREeevle.js → health-events-BBcTYQKU.js} +2 -2
- package/server/{health-events-C1whmd58.js → health-events-BDOHby5Q.js} +1 -1
- package/server/{hooks-yxRsjk-z.js → hooks-CKZgXlJb.js} +2 -2
- package/server/{hooks-B-HItBiS.js → hooks-DPVX1rwQ.js} +1 -1
- package/server/{hume-Dz_OymXE.js → hume-Cz8igP9E.js} +2 -2
- package/server/hume-ccTf4wTX.js +3 -0
- package/server/{idle-stack-reaper-DrCv0OAG.js → idle-stack-reaper-CuLF0j2H.js} +1 -1
- package/server/{idle-stack-reaper-Yf34xXxY.js → idle-stack-reaper-DDIRwxUY.js} +2 -2
- package/server/{in-flight-guard-BoWm66Kh.js → in-flight-guard-CAAkqPLu.js} +2 -2
- package/server/{infra-D4iNWMA5.js → infra-BEqFxlJc.js} +14 -4
- package/server/{injection-D7T75Pye.js → injection-C8aiVJrF.js} +191 -183
- package/server/{injection-BVNa4MQW.js → injection-CPUIqNhI.js} +1 -1
- package/server/{inspect-agent-BXCgNeZ4.js → inspect-agent-BLuJ1AkT.js} +137 -81
- package/server/inspect-agent-Brtz0URj.js +2 -0
- package/server/{internal-token-C9DdEOKY.js → internal-token-BrcU6qfe.js} +1 -1
- package/server/{internal-token-CXsfxslp.js → internal-token-s0-oKybJ.js} +2 -2
- package/server/{io-DQR9PMgS.js → io-C9kF1wtJ.js} +160 -184
- package/server/{issue-closed-DtmJM0D0.js → issue-closed-CDJk4pIp.js} +7 -7
- package/server/{issue-lifecycle-8PSS9Anq.js → issue-lifecycle-B8sZHVHh.js} +1 -1
- package/server/{issue-lifecycle-CeyW_HoD.js → issue-lifecycle-ojZAzDBP.js} +22 -22
- package/server/{issue-service-singleton-DBZabEl7.js → issue-service-singleton-BvJ09SaR.js} +1 -1
- package/server/{issue-service-singleton-D_RVYBuL.js → issue-service-singleton-Yx5DdmVJ.js} +8 -8
- package/server/{issues-pDW9VUNz.js → issues-BMmP_77e.js} +2 -2
- package/server/{jsonl-parser-C3HVNR5d.js → jsonl-parser-BXSlHwEh.js} +3 -3
- package/server/{label-cleanup-DPwiZlWo.js → label-cleanup-B0UJwnv5.js} +3 -3
- package/server/{label-reconciler-Df1ZduPH.js → label-reconciler-B4iOAjlC.js} +4 -4
- package/server/{launcher-generator-COgR2By1.js → launcher-generator-BBWG_SiS.js} +105 -10
- package/server/{lifecycle-io-taIb0PoH.js → lifecycle-io-BREGpnLk.js} +37 -37
- package/server/lifecycle-io-DPo7x11I.js +3 -0
- package/server/{lifecycle-CtPDcZ9u.js → lifecycle-xmBfK2GJ.js} +6 -6
- package/server/lifecycle-yPd___5E.js +121 -0
- package/server/{linear-client-DsFkIxee.js → linear-client-BsuUvkdA.js} +2 -2
- package/server/{linear-client-YwZMDIwQ.js → linear-client-CTskEeT_.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-BwsyNRJV.js → merge-B1DiziGU.js} +1 -1
- package/server/{merge-C1t-bspg.js → merge-CefQNAnq.js} +3 -3
- package/server/{merge-agent-DDiIjzk-.js → merge-agent-4WOWlSYA.js} +28 -28
- package/server/{merge-agent-B-SnXOoc.js → merge-agent-CKkgIBPB.js} +1 -1
- package/server/{merge-batch-Byt-QnEl.js → merge-batch-ClFn2T-y.js} +1 -1
- package/server/merge-ops-CR44oU9-.js +2 -0
- package/server/{merge-rebase-Cm6fXaZN.js → merge-rebase-BfaTyXsw.js} +2 -2
- package/server/merge-set-DJ8-UErs.js +83 -0
- package/server/{merge-set-6LEglm6o.js → merge-set-bUqbm3yc.js} +1 -1
- package/server/{merge-sync-B95_4in_.js → merge-sync-BJYeOODr.js} +1 -1
- package/server/{merge-sync-Do8_q32h.js → merge-sync-VPV28g0g.js} +2 -2
- package/server/{merge-train-CKana8EH.js → merge-train-CHopycP0.js} +3 -3
- package/server/{merge-train-deps-BgmqwIfA.js → merge-train-deps-D1cOZzy2.js} +4 -4
- package/server/{merge-verification-CqnUzGEK.js → merge-verification-BkaOqPsw.js} +4 -4
- package/server/{multipart-parser-tdOQDJ3o.js → multipart-parser-duPAfSBw.js} +2 -2
- package/server/{no-resume-mode-BWOSZjWd.js → no-resume-mode-Nw29vaFb.js} +11 -8
- package/server/node_modules/.package-lock.json +8 -8
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
- package/server/node_modules/undici/README.md +5 -0
- package/server/node_modules/undici/docs/docs/api/Client.md +4 -0
- package/server/node_modules/undici/docs/docs/api/Dispatcher.md +6 -0
- package/server/node_modules/undici/docs/docs/api/Interceptors.md +59 -0
- package/server/node_modules/undici/docs/docs/api/MockAgent.md +27 -0
- package/server/node_modules/undici/docs/docs/api/MockPool.md +28 -1
- package/server/node_modules/undici/docs/docs/index.md +5 -0
- package/server/node_modules/undici/lib/core/request.js +1 -1
- package/server/node_modules/undici/lib/core/util.js +6 -1
- package/server/node_modules/undici/lib/dispatcher/agent.js +3 -3
- package/server/node_modules/undici/lib/dispatcher/client-h1.js +31 -6
- package/server/node_modules/undici/lib/dispatcher/client-h2.js +34 -43
- package/server/node_modules/undici/lib/handler/cache-handler.js +93 -5
- package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +10 -0
- package/server/node_modules/undici/lib/handler/redirect-handler.js +5 -2
- package/server/node_modules/undici/lib/handler/retry-handler.js +6 -4
- package/server/node_modules/undici/lib/interceptor/cache.js +21 -4
- package/server/node_modules/undici/lib/interceptor/decompress.js +4 -0
- package/server/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
- package/server/node_modules/undici/lib/mock/mock-utils.js +39 -10
- package/server/node_modules/undici/lib/util/cache.js +49 -7
- package/server/node_modules/undici/lib/web/fetch/body.js +2 -1
- package/server/node_modules/undici/lib/web/fetch/response.js +1 -3
- package/server/node_modules/undici/package.json +2 -2
- package/server/node_modules/undici/types/client.d.ts +2 -2
- package/server/node_modules/undici/types/dispatcher.d.ts +3 -3
- package/server/node_modules/undici/types/mock-interceptor.d.ts +5 -1
- package/server/{orphan-proposed-reconciler-xklgvNA7.js → orphan-proposed-reconciler-BvKkWMJQ.js} +15 -13
- package/server/{orphan-proposed-reconciler-DSvsJ5M7.js → orphan-proposed-reconciler-CTSGcK8p.js} +1 -1
- package/server/package-lock.json +9 -9
- package/server/package.json +1 -1
- package/server/{pan-dir-DOcf6ug3.js → pan-dir-B0c3w0Ya.js} +78 -58
- package/server/{paths-DooHpt9p.js → paths-D-xWGHdh.js} +2 -2
- package/server/{pickup-CaskQ7j6.js → pickup-DUCLWrJY.js} +17 -16
- package/server/{pipeline-membership-1LGRjo-k.js → pipeline-membership-mY3GprlK.js} +186 -67
- package/server/{pipeline-notifier-CZsrU_nj.js → pipeline-notifier-BJr8gQX6.js} +1 -1
- package/server/{pipeline-notifier-B6FVsYF9.js → pipeline-notifier-BXkJzDC4.js} +2 -2
- package/server/{project-pipelines-CtNG_rvs.js → project-pipelines-C0MWUeCU.js} +2 -2
- package/server/project-repos-B6GycDh9.js +94 -0
- package/server/project-repos-DXKQsc_m.js +3 -0
- package/server/projects-vjjcmiN8.js +3 -0
- package/server/{prompts-EvhMeeHG.js → prompts-DxzFXuLl.js} +2 -2
- package/server/{providers-BDDPULlp.js → providers-qQAwGQDW.js} +7 -7
- package/server/{providers-DNSQqy2V.js → providers-u4Ga0jOr.js} +1 -1
- package/server/public/assets/{chunk-BO2N2NFS-sym_ufXe.js → chunk-BO2N2NFS-BamJdinX.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-CQJPBNBu.js → diagram-OG6HWLK6-DfOB8-w4.js} +1 -1
- package/server/public/assets/{dist-DukGS2YZ.js → dist-ByIuzMQW.js} +3 -3
- package/server/public/assets/{dist-Bio7THQU.js → dist-D7zYSEA6.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-D4lWwte3.js → ganttDiagram-6RSMTGT7-EdmRyXL3.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-CaLboCt5.js → highlighted-body-OFNGDK62-MerOfTX8.js} +1 -1
- package/server/public/assets/{index-Bwejq-5s.js → index-CWeMerGO.js} +147 -144
- package/server/public/assets/index-CenuJ3Cw.css +1 -0
- package/server/public/assets/{linear-qUWmMZ-c.js → linear-BBbArIcK.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-C4zYulEm.js → pieDiagram-4H26LBE5-BKIddiJN.js} +1 -1
- package/server/public/assets/{prod-C8VtLuWC.js → prod-B8vYiu52.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-qP04zyZC.js → quadrantDiagram-W4KKPZXB-D6RtoULk.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-eMPTX_cG.js → sankeyDiagram-5OEKKPKP-CLrCedZX.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-Dme1PIt6.js → xychartDiagram-2RQKCTM6-hznR8DYl.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-By_BteaL.js → pull-requests-7N8WKseP.js} +1 -1
- package/server/{pull-requests-8z2N1UOV.js → pull-requests-_lHueOHW.js} +13 -11
- package/server/{queries-ZABd5aXP.js → queries-CjNIf-Ub.js} +1200 -201
- package/server/{rally-i_goYmiA.js → rally-CyWT_lNO.js} +3 -3
- package/server/{rally-api-DqKqIMNR.js → rally-api-C8e_1JRi.js} +2 -2
- package/server/{rally-api-xHazRk0d.js → rally-api-ClOSd-Tt.js} +1 -1
- package/server/{rally-client-COYz1vYR.js → rally-client-lc-nokqr.js} +4 -4
- package/server/{rally-client-CGWEHaPd.js → rally-client-sgtVqzNU.js} +1 -1
- package/server/rally-zhhtXuDP.js +3 -0
- package/server/{reap-terminal-sessions-CaMkFOIH.js → reap-terminal-sessions-7KeHv1R1.js} +1 -1
- package/server/{reap-terminal-sessions-DG9eiMVz.js → reap-terminal-sessions-BtHPo6Xc.js} +1 -1
- package/server/rebuild-stack-CFvcBHsS.js +4 -0
- package/server/{rebuild-stack-JUm0jqYP.js → rebuild-stack-lwtsW0GO.js} +26 -35
- package/server/{reconstruct-cache-wU79aCee.js → reconstruct-cache-C3Ui7ojV.js} +6 -6
- package/server/record-CN0pj4_5.js +3 -0
- package/server/{record-update-D3N6WMFR.js → record-update-bLJxAXH4.js} +1 -1
- package/server/record-update-dE1Aw83j.js +310 -0
- package/server/{recovery-trip-DkzJSej9.js → recovery-trip-BvRWfUXM.js} +2 -2
- package/server/{release-engine-DMINVN8S.js → release-engine-Cx48W7z8.js} +5 -5
- package/server/{release-set-DeUSOEHy.js → release-set-CQfuN9-v.js} +3 -3
- package/server/{remote-b-c5bOce.js → remote-C_2hasl7.js} +3 -3
- package/server/{remote-Dr5kGYSZ.js → remote-ChgimyYa.js} +3 -3
- package/server/{remote-agents-Ct_WOyke.js → remote-agents-By1ige5O.js} +6 -6
- package/server/{remote-agents-D6O_zETW.js → remote-agents-CA3Ihlxj.js} +1 -1
- package/server/{remote-completion-Dca3hAaa.js → remote-completion-fVe9e_3u.js} +12 -12
- package/server/resume-BFv1PGpA.js +3 -0
- package/server/{review-agent-CThvgK2r.js → review-agent-CIGOQYBD.js} +29 -25
- package/server/{review-agent-CCum8sGe.js → review-agent-DNboMyW4.js} +1 -1
- package/server/{review-artifacts-CXywD0F2.js → review-artifacts-nRDPuMxd.js} +5 -5
- package/server/{review-context-OYfKUprb.js → review-context-2uj-YQ8J.js} +70 -26
- package/server/review-status-btEYlaxA.js +3 -0
- package/server/{review-status-enrichment-crNAtIpL.js → review-status-enrichment-Dci-ZwEt.js} +3 -3
- package/server/{review-status-DFRjDFef.js → review-status-kZj_KyCk.js} +77 -28
- package/server/{review-status-sync-DpAMD_WO.js → review-status-sync-BTOpxtTC.js} +10 -5
- package/server/{review-status-sync-D60PJWNL.js → review-status-sync-DSDK3OMy.js} +1 -1
- package/server/{review-verdict-feedback-CpUZl5aE.js → review-verdict-feedback-CCjVA7Uk.js} +6 -6
- package/server/{review-verdict-feedback-JImjut0z.js → review-verdict-feedback-CTd4QMBu.js} +1 -1
- package/server/{rollup-CZ02qgxk.js → rollup-BKQC7jp4.js} +1 -1
- package/server/{rollup-SyuF09e4.js → rollup-FGsKki9R.js} +8 -8
- package/server/{scanner-Br0Z5S6R.js → scanner-CnqEZeDy.js} +45 -14
- package/server/{sequence-io-fxU0DlwW.js → sequence-io-D909zgeH.js} +4 -4
- package/server/{sequencer-agent-B5YC5XVP.js → sequencer-agent-CzkcK6P5.js} +5 -5
- package/server/server.js +2961 -919
- package/server/{service-Bagb90KZ.js → service-CLeAoU6G.js} +55 -54
- package/server/{session-fork-BqQxd-V6.js → session-fork-CHI1XvL9.js} +2 -2
- package/server/{session-history-XdS0JKp3.js → session-history-BT3IvqhC.js} +4 -4
- package/server/settings-66A6uvIA.js +2 -0
- package/server/{settings-BNbocWOg.js → settings-BTMvpNFU.js} +3 -3
- package/server/{settings-uLc6DEYI.js → settings-C0zgxOGf.js} +2 -2
- package/server/{shadow-engineering-D4X_s3fA.js → shadow-engineering-BJfgm-hX.js} +2 -2
- package/server/{shadow-state-C_NkP-sa.js → shadow-state-7a-524T8.js} +2 -2
- package/server/{shadow-state-CbvsN3qG.js → shadow-state-DnDyjujH.js} +1 -1
- package/server/{shadow-utils-CYMRPeRT.js → shadow-utils-Db3oroFG.js} +2 -2
- package/server/{ship-log-__QtAFXG.js → ship-log-D9MlVzYU.js} +1 -1
- package/server/{smart-compaction-jdMkG1vo.js → smart-compaction-CV2ukKND.js} +1 -1
- package/server/{smart-compaction-CLZOWin1.js → smart-compaction-KCYScAU1.js} +7 -7
- package/server/{spawn-planning-session-D5OXo8pT.js → spawn-planning-session-DKpdFyOC.js} +35 -27
- package/server/{spawn-planning-session-8D6mE033.js → spawn-planning-session-qUC2VWu3.js} +1 -1
- package/server/{specialist-completion-CqmduO92.js → specialist-completion-Ky9wCDpb.js} +1 -1
- package/server/{specialist-context-CJ-QjFR-.js → specialist-context-Bn3dCGS2.js} +5 -5
- package/server/{specialist-handoff-logger-Dnjlwt7g.js → specialist-handoff-logger-CMEwYxa2.js} +2 -2
- package/server/{specialist-logs-CQnKzuZs.js → specialist-logs-C5p8G7tx.js} +3 -3
- package/server/{specialists-Bg9v4z3F.js → specialists-CC4r-c2s.js} +1015 -460
- package/server/{specialists-D0gGXMZx.js → specialists-CShuVGWT.js} +1 -1
- package/server/specialists-DM6bWjsi.js +3 -0
- package/server/{specialists-CwZHb5cb.js → specialists-jiuuyVkp.js} +66 -74
- package/server/specs-C8Wsn2XO.js +3 -0
- package/server/{src-BMMoA_ba.js → src-CXmtj0im.js} +6 -6
- package/server/{src-Bqdtd6po.js → src-CdmnTM2m.js} +5 -5
- package/server/{src-k039WVYY.js → src-DtcUOZCq.js} +112 -18
- package/server/stack-health-Bn3o8FBX.js +3 -0
- package/server/{stack-health-C-ifC7b0.js → stack-health-DxSdG9cW.js} +63 -9
- package/server/{stale-task-claims-L7pJkQFL.js → stale-task-claims-KJKxxiiQ.js} +4 -4
- package/server/{staleness-_Tr-GwdA.js → staleness-CT34nwr9.js} +1 -1
- package/server/{staleness-BID1BKdr.js → staleness-DPm7ClwA.js} +15 -3
- package/server/{state-home-CONQvZR0.js → state-home-Cn_Qu8IX.js} +96 -44
- package/server/{state-migrate-BeBW0KXA.js → state-migrate-BGg2ZaOt.js} +12 -3
- package/server/{stuck-remediation-CKnIryGT.js → stuck-remediation-DYuPRYYw.js} +307 -26
- package/server/{stuck-remediation-CsGD5Ksb.js → stuck-remediation-s9_2qfi6.js} +1 -1
- package/server/{substrate-bug-weights-service-CpIZILj9.js → substrate-bug-weights-service-B-FwCs5V.js} +3 -3
- package/server/{summary-fork-bX6ax6X7.js → summary-fork-D1RAk9rJ.js} +78 -12
- package/server/{summary-fork-agEMsPSo.js → summary-fork-DpcxN9tf.js} +2 -2
- package/server/supervisor/{injection-budget-C1iPirFS.js → injection-budget-Csw5tqfJ.js} +2 -41
- package/server/supervisor/pty-supervisor.js +2 -1
- package/server/supervisor/pty-token-x-ea28Us.js +43 -0
- package/server/supervisor-FTJAIsAK.js +2 -0
- package/server/{supervisor-Ctt4eRYz.js → supervisor-wM4ooB5O.js} +3 -3
- package/server/{swarm-readiness-DdmJVX7y.js → swarm-readiness-DlP_UjHq.js} +4 -4
- package/server/{system-prerequisites-DSXBvffY.js → system-prerequisites-DUDj1YHf.js} +56 -29
- package/server/{teardown-workspace-DDCf5n-a.js → teardown-workspace-DeTTImn-.js} +15 -15
- package/server/{test-agent-queue-BJZ9Nfcc.js → test-agent-queue-MbxX5vqq.js} +7 -7
- package/server/{test-verdict-Cp5tljlJ.js → test-verdict-bWYBtqBg.js} +1 -1
- package/server/{test-verdict-D_-sXIz_.js → test-verdict-gscuksPv.js} +1 -1
- package/server/{tldr-daemon-B8_oT5gx.js → tldr-daemon-BYFkts95.js} +1 -1
- package/server/{tldr-daemon-BQFmmFp0.js → tldr-daemon-C-69c3OI.js} +2 -2
- package/server/tmux-B6z7h_vZ.js +3 -0
- package/server/{tmux-L5LgvGLp.js → tmux-R7N7y-Mh.js} +76 -44
- package/server/{token-BkQLy4yS.js → token-BK6t8BIT.js} +2 -2
- package/server/token-util-DuPuNriz.js +3 -0
- package/server/{token-util-DI8sGlmF.js → token-util-DxXu-vd1.js} +1 -1
- package/server/{tracker-config-DdT-nUAM.js → tracker-config-G6latr8C.js} +2 -2
- package/server/{tracker-utils-DV3h1FYG.js → tracker-utils-B4ylXZQK.js} +1 -1
- package/server/{tracker-utils-CawsPSS2.js → tracker-utils-DHv5pSDT.js} +2 -2
- package/server/{traefik-connect-C6mJckNs.js → traefik-connect-Df2uXPsQ.js} +1 -1
- package/server/{tunnel-IdK1iTHx.js → tunnel-CDVKJpRv.js} +3 -3
- package/server/{tunnel-BIFl98rc.js → tunnel-DGdUkGoZ.js} +1 -1
- package/server/{types-7-GnJn0t.js → types-5M0lupud.js} +1 -1
- package/server/{uat-train-0Ujk8GCv.js → uat-train-B05BWkp-.js} +1 -1
- package/server/{uat-train-j0cPeMSj.js → uat-train-DDSrSoV1.js} +28 -28
- package/server/validate-IfDGkaVR.js +177 -0
- package/server/{validation-DcAgXTQp.js → validation-CC9OPqJZ.js} +1 -1
- package/server/{validation-CabEISJT.js → validation-Dw1pzDzr.js} +259 -9
- package/server/{verification-artifact-Ck1tefmz.js → verification-artifact-B3itKTxu.js} +1 -1
- package/server/{verification-artifact-BuTA1QbL.js → verification-artifact-TVFSz_q1.js} +1 -1
- package/server/{verification-runner-DlJezzef.js → verification-runner-BW4HOKAz.js} +1 -1
- package/server/{verification-runner-FiuAZ-H2.js → verification-runner-CkgX6EtI.js} +174 -124
- package/server/{vtt-parser-BnRsYzcz.js → vtt-parser-DYPbKcIJ.js} +1 -1
- package/server/{work-agent-prompt-DLthEPAq.js → work-agent-prompt-Du8Vh2aJ.js} +13 -13
- package/server/workflows-BQu4RFQ-.js +2 -0
- package/server/{workflows-BZNNYkGC.js → workflows-mbQzh6mQ.js} +39 -77
- package/server/{workspace-3IC-UkAi.js → workspace--8tnhDI0.js} +1 -1
- package/server/{workspace-D9ppycdg.js → workspace-BPUws1-_.js} +3 -3
- package/server/{workspace-config-Bigl_-Lk.js → workspace-config-CIVWZOQr.js} +1 -1
- package/server/{workspace-manager-ClkCIWTe.js → workspace-manager-CBhNdzE4.js} +76 -18
- package/server/workspace-manager-CWT55qeI.js +3 -0
- package/server/{workspace-metadata-BE0efUv_.js → workspace-metadata-BzHnwwX4.js} +1 -1
- package/server/{workspace-metadata-tiSRIWJP.js → workspace-metadata-_WygnyoX.js} +2 -2
- package/server/{workspaces-CFPcL0vl.js → workspaces-Do_9J0LQ.js} +309 -124
- package/sync-sources/agents/pan-inspect-agent.md +1 -1
- package/sync-sources/agents/pan-merge-agent.md +1 -1
- package/sync-sources/agents/pan-planning-agent.md +4 -4
- package/sync-sources/agents/pan-work-agent.md +1 -1
- package/sync-sources/dev-skills/pan-commit/SKILL.md +1 -1
- package/sync-sources/dev-skills/test-specialist-workflow/SKILL.md +1 -1
- package/sync-sources/hooks/record-cost-event.js +369 -75
- package/sync-sources/hooks/session-start-hook +7 -0
- package/sync-sources/hooks/work-agent-stop-hook +1 -1
- package/sync-sources/rules/per-bead-durability.md +1 -1
- package/sync-sources/rules/prd-authoring.md +1 -1
- package/sync-sources/skills/feature-work/SKILL.md +1 -1
- package/sync-sources/skills/okf/README.md +11 -3
- package/sync-sources/skills/okf/SKILL.md +12 -1
- package/sync-sources/skills/okf/docs/USAGE.md +15 -0
- package/sync-sources/skills/okf/references/overdeck.md +28 -0
- package/sync-sources/skills/pan/SKILL.md +2 -2
- package/sync-sources/skills/pan-admin-config/SKILL.md +1 -0
- package/sync-sources/skills/pan-approve/SKILL.md +1 -1
- package/sync-sources/skills/pan-close/SKILL.md +1 -1
- package/sync-sources/skills/pan-doctor/SKILL.md +1 -1
- package/sync-sources/skills/pan-flywheel/SKILL.md +18 -1
- package/sync-sources/skills/pan-knowledge/SKILL.md +10 -0
- package/sync-sources/skills/pan-new-project/SKILL.md +9 -11
- package/sync-sources/skills/pan-orders/SKILL.md +33 -0
- package/sync-sources/skills/pan-oversee/SKILL.md +5 -5
- package/sync-sources/skills/pan-plan/SKILL.md +6 -6
- package/sync-sources/skills/pan-quickstart/SKILL.md +1 -1
- package/sync-sources/skills/pan-recap/SKILL.md +2 -2
- package/sync-sources/skills/pan-review/SKILL.md +1 -1
- package/sync-sources/skills/pan-start/SKILL.md +7 -3
- package/sync-sources/skills/pan-swarm/SKILL.md +1 -1
- package/sync-sources/skills/pan-sync/SKILL.md +1 -1
- package/sync-sources/skills/pan-task/SKILL.md +2 -2
- package/sync-sources/skills/pan-wipe/SKILL.md +2 -2
- package/sync-sources/skills/pipeline-list/SKILL.md +1 -1
- package/sync-sources/skills/pipeline-status/SKILL.md +2 -2
- package/sync-sources/skills/plan/SKILL.md +11 -11
- package/sync-sources/skills/write-vbrief/SKILL.md +7 -282
- package/sync-sources/skills/write-xbrief/SKILL.md +295 -0
- package/sync-sources/templates/claude-md/sections/warnings.md +1 -1
- package/sync-sources/templates/traefik/dynamic/overdeck.yml.template +10 -0
- package/server/agent-state-Co5Sy2Fw.js +0 -3
- package/server/agents-DyHKlq1I.js +0 -3
- package/server/cli-BRORS9qY.js +0 -3
- package/server/codex-DNyiQDKW.js +0 -3
- package/server/context-layers-15gDOk20.js +0 -165
- package/server/context-layers-DlQKkHH2.js +0 -4
- package/server/deacon-swarm-CV54eNmU.js +0 -2
- package/server/dist-j64RzSrQ.js +0 -3
- package/server/flywheel-6WHU4O7A.js +0 -207
- package/server/flywheel-COR0mbRI.js +0 -522
- package/server/flywheel-Ctr5uuvo.js +0 -2
- package/server/forge-B0_opi-V.js +0 -2
- package/server/git-utils-CsKGnzFA.js +0 -3
- package/server/hume-BmhvfVbV.js +0 -3
- package/server/inspect-agent-Dq0z1k3H.js +0 -2
- package/server/layers-Cp1To4L8.js +0 -93
- package/server/lifecycle-io-DmY2qwCn.js +0 -3
- package/server/merge-blockers-BYjeXrVN.js +0 -41
- package/server/merge-ops-DwWCkSgo.js +0 -2
- package/server/merge-set-DiISXcC-.js +0 -139
- package/server/projects-BKkwpH6q.js +0 -3
- package/server/public/assets/index-Bdc4V9ba.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-B5v_r7cI.js +0 -1
- package/server/rally-OSJXdiHK.js +0 -3
- package/server/rebuild-stack-CKjJAI8L.js +0 -3
- package/server/record-rwK-nKv_.js +0 -3
- package/server/record-update-Crz74r-6.js +0 -168
- package/server/resume-wZZsWtzz.js +0 -3
- package/server/review-status-Bnh-rdkY.js +0 -3
- package/server/settings-BlUsVaUc.js +0 -2
- package/server/specialists-Dqe6_HE5.js +0 -3
- package/server/specs-BhOKBzqk.js +0 -3
- package/server/stack-health-Bd06frFn.js +0 -3
- package/server/supervisor-COVHrBTg.js +0 -2
- package/server/tmux-BAvtac_u.js +0 -3
- package/server/token-util-BArZLN6w.js +0 -3
- package/server/workflows-C4mR0Reb.js +0 -2
- package/server/workspace-manager-B1WOfKvB.js +0 -3
|
@@ -1,44 +1,44 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { $n as resolveIssueIdSync, Br as getOverdeckHome, Jn as extractPrefixSync, Nr as encodeClaudeProjectDir, Tn as init_projects, Vr as init_paths, Xt as isStatePlaneOnlyStatus, Yn as init_issue_id, Yt as init_state_plane, Zn as parseIssueIdSync, ar as GitError, ir as FsError, kn as listProjectsSync, mn as findProjectByTeamSync, mr as init_errors, qn as extractNumberSync, t as init_config_yaml, tt as resolveModel, un as extractTeamPrefix, yn as getProjectSync, zn as resolveProjectFromIssueSync } from "./config-yaml-DySPNmKN.js";
|
|
2
|
+
import { Q as getWorkAgentLifecycleStateSync, St as jsonResponse, bt as httpHandler, dt as rejectUnauthorizedDashboardRequest, et as spawnPanCli, gt as getHeaderFromMap, n as _serverManagedMerges, pt as rejectUnsafeDashboardMutationRequest } from "./specialists-CC4r-c2s.js";
|
|
3
3
|
import { a as init_activity_logger, n as emitActivityEntrySync } from "./activity-logger-DDlOIAML.js";
|
|
4
|
-
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-
|
|
5
|
-
import {
|
|
6
|
-
import { a as init_event_store, n as getEventStore } from "./event-store-
|
|
7
|
-
import { _ as
|
|
8
|
-
import { _ as init_queue_position, a as EventStoreService, g as findPositionInQueueSync, h as computeQueuePositionFromStatusSync, s as init_domain_services } from "./issue-lifecycle-
|
|
9
|
-
import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-
|
|
10
|
-
import {
|
|
11
|
-
import { f as CostWriter, l as CostDoorLive } from "./service-
|
|
12
|
-
import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-
|
|
13
|
-
import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-
|
|
14
|
-
import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-
|
|
4
|
+
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-BEqFxlJc.js";
|
|
5
|
+
import { $ as init_child_env, H as sessionExists, M as listSessionNames, Q as buildChildEnvWithoutTmuxSync, i as capturePane, w as init_tmux } from "./tmux-R7N7y-Mh.js";
|
|
6
|
+
import { a as init_event_store, n as getEventStore } from "./event-store-CQL6NeqB.js";
|
|
7
|
+
import { _ as setAutoMerge, b as setReviewStatusSync, c as getReviewStatusSync, d as loadReviewStatuses, l as init_review_status, p as markWorkspaceStuck, v as setDeaconIgnored } from "./review-status-kZj_KyCk.js";
|
|
8
|
+
import { _ as init_queue_position, a as EventStoreService, g as findPositionInQueueSync, h as computeQueuePositionFromStatusSync, s as init_domain_services } from "./issue-lifecycle-ojZAzDBP.js";
|
|
9
|
+
import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-B2ddP6wq.js";
|
|
10
|
+
import { Ar as saveAgentRuntimeState, Kt as transitionIssueToInReview, Or as getAgentRuntimeStateSync, X as messageAgent, b as init_agents, i as listRunningAgents, lt as spawnAgent, qn as getAgentState } from "./queries-CjNIf-Ub.js";
|
|
11
|
+
import { f as CostWriter, l as CostDoorLive } from "./service-CLeAoU6G.js";
|
|
12
|
+
import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-G6latr8C.js";
|
|
13
|
+
import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-DHv5pSDT.js";
|
|
14
|
+
import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-s0-oKybJ.js";
|
|
15
15
|
import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME, p as init_types } from "./types-hraoaQIp.js";
|
|
16
|
-
import { o as init_merge_sync, r as getAllActiveQueues } from "./merge-sync-
|
|
17
|
-
import { A as
|
|
18
|
-
import { it as findConversationForCostSessionSync, k as init_conversations } from "./conversations-
|
|
19
|
-
import {
|
|
20
|
-
import { f as init_config, m as loadConfigSync$1 } from "./config-
|
|
21
|
-
import { a as
|
|
22
|
-
import { a as criticalPath, l as init_dag, t as actionableDoc } from "./dag-
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import {
|
|
30
|
-
import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync } from "./workspace-metadata-
|
|
31
|
-
import { n as enrichReviewStatusFromSessions } from "./review-status-enrichment-
|
|
32
|
-
import { n as generateDailySummary, r as init_cli } from "./cli-
|
|
33
|
-
import { a as getDiffStat, i as getDiffBase, o as init_review_context, r as getChangedFiles } from "./review-context-
|
|
34
|
-
import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-
|
|
35
|
-
import { C as init_operations, S as gitPush, T as listGitOperationsSync, a as init_merge_agent, w as init_git_activity, x as MainDivergedError, y as syncMainIntoWorkspace } from "./merge-agent-
|
|
36
|
-
import { F as enqueueMerge, I as getAllActiveQueues$1, L as getCurrentMerge, P as dequeueMerge, z as markMergeProcessing } from "./merge-
|
|
37
|
-
import { n as init_release_set, t as getReleaseSetSync } from "./release-set-
|
|
38
|
-
import { i as init_conflict_gate, r as getCachedConflictGateMergeability } from "./conflict-gate-
|
|
39
|
-
import { r as runVerificationForIssue } from "./verification-runner-
|
|
40
|
-
import { t as teardownWorkspace } from "./teardown-workspace-
|
|
41
|
-
import {
|
|
16
|
+
import { o as init_merge_sync, r as getAllActiveQueues } from "./merge-sync-VPV28g0g.js";
|
|
17
|
+
import { A as init_xbrief_index, M as readXBriefDocument, _ as XBRIEF_INSPECTION_POLICIES, c as mergeRecordStatusOverrides, g as serializeXBriefDocument, k as findXBriefByIssue, o as init_io, r as findPlan, s as isPlanningComplete, u as readPlan, v as init_types$1 } from "./io-C9kF1wtJ.js";
|
|
18
|
+
import { it as findConversationForCostSessionSync, k as init_conversations } from "./conversations-6AfUfbwc.js";
|
|
19
|
+
import { a as normalizeModelOverrideSync, i as init_model_validation } from "./launcher-generator-BBWG_SiS.js";
|
|
20
|
+
import { f as init_config, m as loadConfigSync$1 } from "./config-BZ0sHTju.js";
|
|
21
|
+
import { a as getWorkspaceStackHealth, n as collectDockerContainerLifecycleSnapshot, r as composeProjectNameForWorkspace, s as init_stack_health } from "./stack-health-DxSdG9cW.js";
|
|
22
|
+
import { a as criticalPath, l as init_dag, t as actionableDoc } from "./dag-B1ucnjDU.js";
|
|
23
|
+
import { E as verifyAppCanMerge, M as withConcurrencyLimit, f as init_github_app, j as init_concurrency, m as isIntegrationPermissionError } from "./github-app-C3QrAUd0.js";
|
|
24
|
+
import { a as readEventsFromLineSync, i as init_events, l as init_wal, o as readEventsSync, r as getLastEventMetadataSync, t as appendCostEventSync } from "./events-DTfAe4My.js";
|
|
25
|
+
import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-CBhNdzE4.js";
|
|
26
|
+
import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-_d6XhyND.js";
|
|
27
|
+
import { a as init_jsonl_parser, t as getActiveSessionModelSync } from "./jsonl-parser-BXSlHwEh.js";
|
|
28
|
+
import { r as init_in_flight_guard, t as createInFlightGuard } from "./in-flight-guard-CAAkqPLu.js";
|
|
29
|
+
import { i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-Du25Jtst.js";
|
|
30
|
+
import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync } from "./workspace-metadata-_WygnyoX.js";
|
|
31
|
+
import { n as enrichReviewStatusFromSessions } from "./review-status-enrichment-Dci-ZwEt.js";
|
|
32
|
+
import { n as generateDailySummary, r as init_cli } from "./cli-RoOx5DUf.js";
|
|
33
|
+
import { a as getDiffStat, i as getDiffBase, o as init_review_context, r as getChangedFiles } from "./review-context-2uj-YQ8J.js";
|
|
34
|
+
import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-C-69c3OI.js";
|
|
35
|
+
import { C as init_operations, S as gitPush, T as listGitOperationsSync, a as init_merge_agent, w as init_git_activity, x as MainDivergedError, y as syncMainIntoWorkspace } from "./merge-agent-4WOWlSYA.js";
|
|
36
|
+
import { F as enqueueMerge, I as getAllActiveQueues$1, L as getCurrentMerge, P as dequeueMerge, z as markMergeProcessing } from "./merge-CefQNAnq.js";
|
|
37
|
+
import { n as init_release_set, t as getReleaseSetSync } from "./release-set-CQfuN9-v.js";
|
|
38
|
+
import { i as init_conflict_gate, r as getCachedConflictGateMergeability } from "./conflict-gate-BaCVrH-N.js";
|
|
39
|
+
import { r as runVerificationForIssue } from "./verification-runner-CkgX6EtI.js";
|
|
40
|
+
import { t as teardownWorkspace } from "./teardown-workspace-DeTTImn-.js";
|
|
41
|
+
import { t as init_rebuild_stack } from "./rebuild-stack-lwtsW0GO.js";
|
|
42
42
|
import { basename, dirname, join, resolve, sep } from "node:path";
|
|
43
43
|
import { Effect, Layer, Option, Stream } from "effect";
|
|
44
44
|
import { closeSync, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, renameSync, writeFileSync } from "fs";
|
|
@@ -54,6 +54,162 @@ import { promisify } from "node:util";
|
|
|
54
54
|
import { timingSafeEqual } from "node:crypto";
|
|
55
55
|
import { createConnection } from "node:net";
|
|
56
56
|
import { crc32 } from "node:zlib";
|
|
57
|
+
//#region services/agent-output-service.ts
|
|
58
|
+
/**
|
|
59
|
+
* Agent Output Service (PAN-1221 F3)
|
|
60
|
+
*
|
|
61
|
+
* Captures tmux pane output only for agents with an active output subscriber.
|
|
62
|
+
* Explicit agent subscriptions and the public all-output SSE feed share one
|
|
63
|
+
* reference-counted poller, so zero interest means zero pane captures.
|
|
64
|
+
*/
|
|
65
|
+
init_agents();
|
|
66
|
+
init_tmux();
|
|
67
|
+
init_concurrency();
|
|
68
|
+
init_event_store();
|
|
69
|
+
function splitLines(text) {
|
|
70
|
+
const lines = text.split("\n");
|
|
71
|
+
if (lines.length > 0 && lines[lines.length - 1] === "") lines.pop();
|
|
72
|
+
return lines;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Find new lines by looking for the longest suffix of `previous` that matches
|
|
76
|
+
* a prefix of `current`. The non-overlapping prefix of `current` is returned.
|
|
77
|
+
* If there is no overlap, all of `current` is new (pane was cleared or scrolled
|
|
78
|
+
* past the overlap window).
|
|
79
|
+
*/
|
|
80
|
+
function diffLines(previous, current) {
|
|
81
|
+
if (previous.length === 0) return current;
|
|
82
|
+
for (let start = 0; start < previous.length; start++) {
|
|
83
|
+
const suffix = previous.slice(start);
|
|
84
|
+
if (suffix.length > current.length) continue;
|
|
85
|
+
if (suffix.every((line, i) => line === current[i])) return current.slice(suffix.length);
|
|
86
|
+
}
|
|
87
|
+
return current;
|
|
88
|
+
}
|
|
89
|
+
function hasAgentInterest(state, agentId) {
|
|
90
|
+
return state.allInterestCount > 0 || (state.interestCounts.get(agentId) ?? 0) > 0;
|
|
91
|
+
}
|
|
92
|
+
async function captureInterestedAgent(state, agentId) {
|
|
93
|
+
if (!hasAgentInterest(state, agentId) || state.inFlight.has(agentId)) return;
|
|
94
|
+
state.inFlight.add(agentId);
|
|
95
|
+
try {
|
|
96
|
+
let stdout;
|
|
97
|
+
try {
|
|
98
|
+
const remoteState = await readFile(join(homedir$1(), ".overdeck", "agents", agentId, "remote-state.json"), "utf-8").then((text) => JSON.parse(text)).catch(() => null);
|
|
99
|
+
if (remoteState?.location === "remote" && remoteState?.vmName) {
|
|
100
|
+
const { getRemoteAgentOutput } = await import("./remote-agents-CA3Ihlxj.js");
|
|
101
|
+
stdout = await getRemoteAgentOutput(agentId, remoteState.vmName, 50);
|
|
102
|
+
} else stdout = await Effect.runPromise(capturePane(agentId, 50));
|
|
103
|
+
} catch {
|
|
104
|
+
stdout = await Effect.runPromise(capturePane(agentId, 50).pipe(Effect.catch(() => Effect.succeed(""))));
|
|
105
|
+
}
|
|
106
|
+
if (!hasAgentInterest(state, agentId)) return;
|
|
107
|
+
if (!stdout || stdout.trim() === "" || stdout.trim() === "Session not found") return;
|
|
108
|
+
const previousOutput = state.lastOutput.get(agentId) ?? "";
|
|
109
|
+
if (stdout === previousOutput) return;
|
|
110
|
+
const newLines = diffLines(splitLines(previousOutput), splitLines(stdout));
|
|
111
|
+
state.lastOutput.set(agentId, stdout);
|
|
112
|
+
if (newLines.length === 0) return;
|
|
113
|
+
const event = {
|
|
114
|
+
type: "agent.output_received",
|
|
115
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
116
|
+
payload: {
|
|
117
|
+
agentId,
|
|
118
|
+
lines: newLines
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
getEventStore().emitOnly(event);
|
|
122
|
+
} finally {
|
|
123
|
+
state.inFlight.delete(agentId);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async function pollOnce(state) {
|
|
127
|
+
if (state.polling) return;
|
|
128
|
+
state.polling = true;
|
|
129
|
+
try {
|
|
130
|
+
const interestedIds = new Set(state.interestCounts.keys());
|
|
131
|
+
if (state.allInterestCount > 0) try {
|
|
132
|
+
const runningAgents = await Effect.runPromise(listRunningAgents());
|
|
133
|
+
for (const agent of runningAgents) if (agent.tmuxActive) interestedIds.add(agent.id);
|
|
134
|
+
} catch {}
|
|
135
|
+
if (interestedIds.size === 0) return;
|
|
136
|
+
await Effect.runPromise(withConcurrencyLimit([...interestedIds].map((agentId) => Effect.tryPromise({
|
|
137
|
+
try: () => captureInterestedAgent(state, agentId),
|
|
138
|
+
catch: (cause) => cause
|
|
139
|
+
})), 4));
|
|
140
|
+
} finally {
|
|
141
|
+
state.polling = false;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const POLL_INTERVAL_MS = 3e3;
|
|
145
|
+
const serviceState = {
|
|
146
|
+
timer: null,
|
|
147
|
+
lastOutput: /* @__PURE__ */ new Map(),
|
|
148
|
+
interestCounts: /* @__PURE__ */ new Map(),
|
|
149
|
+
allInterestCount: 0,
|
|
150
|
+
inFlight: /* @__PURE__ */ new Set(),
|
|
151
|
+
polling: false,
|
|
152
|
+
started: false
|
|
153
|
+
};
|
|
154
|
+
function hasAnyInterest(state) {
|
|
155
|
+
return state.allInterestCount > 0 || state.interestCounts.size > 0;
|
|
156
|
+
}
|
|
157
|
+
function ensurePolling() {
|
|
158
|
+
if (!serviceState.started || serviceState.timer !== null || !hasAnyInterest(serviceState)) return;
|
|
159
|
+
serviceState.timer = setInterval(() => {
|
|
160
|
+
pollOnce(serviceState).catch(() => void 0);
|
|
161
|
+
}, POLL_INTERVAL_MS);
|
|
162
|
+
}
|
|
163
|
+
function stopPollingIfIdle() {
|
|
164
|
+
if (hasAnyInterest(serviceState) || serviceState.timer === null) return;
|
|
165
|
+
clearInterval(serviceState.timer);
|
|
166
|
+
serviceState.timer = null;
|
|
167
|
+
}
|
|
168
|
+
function retainAgentOutputInterest(agentId) {
|
|
169
|
+
const previousCount = serviceState.interestCounts.get(agentId) ?? 0;
|
|
170
|
+
serviceState.interestCounts.set(agentId, previousCount + 1);
|
|
171
|
+
ensurePolling();
|
|
172
|
+
if (serviceState.started && previousCount === 0) captureInterestedAgent(serviceState, agentId).catch(() => void 0);
|
|
173
|
+
let released = false;
|
|
174
|
+
return () => {
|
|
175
|
+
if (released) return;
|
|
176
|
+
released = true;
|
|
177
|
+
const count = serviceState.interestCounts.get(agentId) ?? 0;
|
|
178
|
+
if (count <= 1) serviceState.interestCounts.delete(agentId);
|
|
179
|
+
else serviceState.interestCounts.set(agentId, count - 1);
|
|
180
|
+
stopPollingIfIdle();
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/** Preserve the public SSE feed's existing all-agent output surface on demand. */
|
|
184
|
+
function retainAllAgentOutputInterest() {
|
|
185
|
+
serviceState.allInterestCount += 1;
|
|
186
|
+
ensurePolling();
|
|
187
|
+
if (serviceState.started && serviceState.allInterestCount === 1) pollOnce(serviceState).catch(() => void 0);
|
|
188
|
+
let released = false;
|
|
189
|
+
return () => {
|
|
190
|
+
if (released) return;
|
|
191
|
+
released = true;
|
|
192
|
+
serviceState.allInterestCount = Math.max(0, serviceState.allInterestCount - 1);
|
|
193
|
+
stopPollingIfIdle();
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
function startAgentOutputService() {
|
|
197
|
+
if (serviceState.started) return;
|
|
198
|
+
serviceState.started = true;
|
|
199
|
+
ensurePolling();
|
|
200
|
+
if (hasAnyInterest(serviceState)) pollOnce(serviceState).catch(() => void 0);
|
|
201
|
+
}
|
|
202
|
+
function stopAgentOutputService() {
|
|
203
|
+
serviceState.started = false;
|
|
204
|
+
if (serviceState.timer !== null) clearInterval(serviceState.timer);
|
|
205
|
+
serviceState.timer = null;
|
|
206
|
+
serviceState.lastOutput.clear();
|
|
207
|
+
serviceState.interestCounts.clear();
|
|
208
|
+
serviceState.allInterestCount = 0;
|
|
209
|
+
serviceState.inFlight.clear();
|
|
210
|
+
serviceState.polling = false;
|
|
211
|
+
}
|
|
212
|
+
//#endregion
|
|
57
213
|
//#region workspace-paths.ts
|
|
58
214
|
init_issue_id();
|
|
59
215
|
function getWorkspacePathForIssue(projectPath, rawIssueId) {
|
|
@@ -775,7 +931,7 @@ const postWorkspaceContainerActionRoute = HttpRouter.add("POST", "/api/workspace
|
|
|
775
931
|
}
|
|
776
932
|
if (!workspacePath) return jsonResponse({ error: `Workspace not found for ${issueId}` }, { status: 404 });
|
|
777
933
|
if (!composeFile && ["start", "restart"].includes(action)) {
|
|
778
|
-
const { ensureDevcontainerSync } = yield* Effect.promise(() => import("./ensure-devcontainer-
|
|
934
|
+
const { ensureDevcontainerSync } = yield* Effect.promise(() => import("./ensure-devcontainer-BZgOhRo7.js"));
|
|
779
935
|
if (ensureDevcontainerSync({
|
|
780
936
|
workspacePath,
|
|
781
937
|
issueId
|
|
@@ -2371,6 +2527,7 @@ const getEventStreamRoute = HttpRouter.add("GET", "/events/stream", httpHandler(
|
|
|
2371
2527
|
const nodeStream = new ReadableStream({
|
|
2372
2528
|
start(controller) {
|
|
2373
2529
|
let closed = false;
|
|
2530
|
+
let cleanedUp = false;
|
|
2374
2531
|
const safeEnqueue = (chunk) => {
|
|
2375
2532
|
if (closed) return;
|
|
2376
2533
|
try {
|
|
@@ -2398,14 +2555,17 @@ const getEventStreamRoute = HttpRouter.add("GET", "/events/stream", httpHandler(
|
|
|
2398
2555
|
if (!matchesFilter(event, filters)) return;
|
|
2399
2556
|
safeEnqueue(encoder.encode(formatFrame(event)));
|
|
2400
2557
|
});
|
|
2558
|
+
const releaseOutputInterest = !filters.types || filters.types.has("agent.output_received") ? retainAllAgentOutputInterest() : () => void 0;
|
|
2401
2559
|
const keepalive = setInterval(() => {
|
|
2402
2560
|
safeEnqueue(encoder.encode(`: keepalive\n\n`));
|
|
2403
2561
|
}, KEEPALIVE_INTERVAL_MS);
|
|
2404
2562
|
cleanup = () => {
|
|
2405
|
-
if (
|
|
2563
|
+
if (cleanedUp) return;
|
|
2564
|
+
cleanedUp = true;
|
|
2406
2565
|
closed = true;
|
|
2407
2566
|
clearInterval(keepalive);
|
|
2408
2567
|
unsubscribe();
|
|
2568
|
+
releaseOutputInterest();
|
|
2409
2569
|
try {
|
|
2410
2570
|
controller.close();
|
|
2411
2571
|
} catch {}
|
|
@@ -2602,6 +2762,12 @@ const internalEventsRouteLayer = Layer.mergeAll(internalEventsRoute, internalEve
|
|
|
2602
2762
|
//#endregion
|
|
2603
2763
|
//#region routes/workspaces/merge-strike.ts
|
|
2604
2764
|
init_agents();
|
|
2765
|
+
function mergeVerificationOptions(request) {
|
|
2766
|
+
return {
|
|
2767
|
+
syncTargetBranch: false,
|
|
2768
|
+
...request.kind === "strike" ? { skipPlanChecklist: true } : {}
|
|
2769
|
+
};
|
|
2770
|
+
}
|
|
2605
2771
|
function parseStrikeMergeRequest(raw) {
|
|
2606
2772
|
if (!raw || typeof raw !== "object") return null;
|
|
2607
2773
|
const request = raw;
|
|
@@ -2611,7 +2777,9 @@ function mergeCompletionStatus(request) {
|
|
|
2611
2777
|
return request.kind === "strike" ? {
|
|
2612
2778
|
strikeLandingState: "landed",
|
|
2613
2779
|
strikeReadyHead: void 0,
|
|
2614
|
-
strikeReadyAt: void 0
|
|
2780
|
+
strikeReadyAt: void 0,
|
|
2781
|
+
strikeTransportRetryCount: void 0,
|
|
2782
|
+
strikeNextAttemptAt: void 0
|
|
2615
2783
|
} : {};
|
|
2616
2784
|
}
|
|
2617
2785
|
function activeStrikeMerge(currentMerge, pendingOperation) {
|
|
@@ -2823,7 +2991,7 @@ async function reconcileGitHubMergeStatus(issueId, status) {
|
|
|
2823
2991
|
const prRef = parseGitHubPullRequestUrl(status.prUrl);
|
|
2824
2992
|
if (!prRef) return false;
|
|
2825
2993
|
try {
|
|
2826
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
2994
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-ClZ2lk8D.js");
|
|
2827
2995
|
if (!isGitHubAppConfigured()) return false;
|
|
2828
2996
|
const prState = await Effect.runPromise(getPullRequestState(prRef.owner, prRef.repo, prRef.number));
|
|
2829
2997
|
console.log(`[merge] reconcileGitHubMergeStatus: ${issueId} PR #${prRef.number} merged=${prState.merged} state=${prState.state}`);
|
|
@@ -2842,7 +3010,7 @@ async function reconcileGitHubMergeStatus(issueId, status) {
|
|
|
2842
3010
|
}
|
|
2843
3011
|
/**
|
|
2844
3012
|
* Build a rich PR body with issue link, tasks task summary, and AC checklist
|
|
2845
|
-
* from the
|
|
3013
|
+
* from the xBRIEF plan. Exported for testing.
|
|
2846
3014
|
*/
|
|
2847
3015
|
async function buildRichPRBody(issueId, workspacePath) {
|
|
2848
3016
|
const lines = [];
|
|
@@ -3090,8 +3258,8 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3090
3258
|
try {
|
|
3091
3259
|
if (request.kind === "normal" && workspaceInfo.isRemote && workspaceInfo.vmName) {
|
|
3092
3260
|
console.log(`[merge] Remote workspace detected for ${issueId}, using review artifact merge...`);
|
|
3093
|
-
const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-
|
|
3094
|
-
const { getForgeAdapter } = await import("./forge-
|
|
3261
|
+
const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-bUqbm3yc.js");
|
|
3262
|
+
const { getForgeAdapter } = await import("./forge-DXnS_YFH.js");
|
|
3095
3263
|
const remotePrimaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
|
|
3096
3264
|
const remoteTargetBranch = remotePrimaryRepo?.targetBranch || "main";
|
|
3097
3265
|
const remoteForge = remotePrimaryRepo?.forge || "github";
|
|
@@ -3127,7 +3295,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3127
3295
|
...mergeCompletionStatus(request)
|
|
3128
3296
|
});
|
|
3129
3297
|
completePendingOperation(issueId, null);
|
|
3130
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
3298
|
+
const { postMergeLifecycle } = await import("./merge-agent-CKkgIBPB.js");
|
|
3131
3299
|
await postMergeLifecycle(issueId, projectPath);
|
|
3132
3300
|
return {
|
|
3133
3301
|
success: true,
|
|
@@ -3164,10 +3332,10 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3164
3332
|
const projectConfig = findProjectByTeamSync(issuePrefix);
|
|
3165
3333
|
if (projectConfig?.workspace?.type === "polyrepo" && projectConfig?.workspace?.repos) {
|
|
3166
3334
|
console.log(`[merge] Polyrepo detected for ${issueId}, coordinating merge set...`);
|
|
3167
|
-
const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-
|
|
3168
|
-
const { runQualityGates } = await import("./validation-
|
|
3169
|
-
const { getForgeAdapter } = await import("./forge-
|
|
3170
|
-
const { messageAgent } = await import("./agents-
|
|
3335
|
+
const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-bUqbm3yc.js");
|
|
3336
|
+
const { runQualityGates } = await import("./validation-CC9OPqJZ.js");
|
|
3337
|
+
const { getForgeAdapter } = await import("./forge-DXnS_YFH.js");
|
|
3338
|
+
const { messageAgent } = await import("./agents-wi9NWzs2.js");
|
|
3171
3339
|
let mergeSet = getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId);
|
|
3172
3340
|
if (!mergeSet) {
|
|
3173
3341
|
const error = `No merge set found for ${issueId}`;
|
|
@@ -3438,7 +3606,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3438
3606
|
...mergeCompletionStatus(request)
|
|
3439
3607
|
});
|
|
3440
3608
|
completePendingOperation(issueId, null);
|
|
3441
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
3609
|
+
const { postMergeLifecycle } = await import("./merge-agent-CKkgIBPB.js");
|
|
3442
3610
|
advanceQueue();
|
|
3443
3611
|
await postMergeLifecycle(issueId, projectPath);
|
|
3444
3612
|
return {
|
|
@@ -3449,8 +3617,8 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3449
3617
|
repos: mergeResults
|
|
3450
3618
|
};
|
|
3451
3619
|
}
|
|
3452
|
-
const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-
|
|
3453
|
-
const { getForgeAdapter } = await import("./forge-
|
|
3620
|
+
const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-bUqbm3yc.js");
|
|
3621
|
+
const { getForgeAdapter } = await import("./forge-DXnS_YFH.js");
|
|
3454
3622
|
const primaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
|
|
3455
3623
|
const targetBranch = primaryRepo?.targetBranch || "main";
|
|
3456
3624
|
const primaryForge = primaryRepo?.forge || "github";
|
|
@@ -3492,7 +3660,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3492
3660
|
};
|
|
3493
3661
|
}
|
|
3494
3662
|
if (githubPrRef) try {
|
|
3495
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
3663
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-ClZ2lk8D.js");
|
|
3496
3664
|
if (isGitHubAppConfigured()) {
|
|
3497
3665
|
const prState = await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number));
|
|
3498
3666
|
if (prState.state !== "OPEN" && !prState.merged) {
|
|
@@ -3554,7 +3722,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3554
3722
|
...mergeCompletionStatus(request)
|
|
3555
3723
|
});
|
|
3556
3724
|
completePendingOperation(issueId, null);
|
|
3557
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
3725
|
+
const { postMergeLifecycle } = await import("./merge-agent-CKkgIBPB.js");
|
|
3558
3726
|
await postMergeLifecycle(issueId, projectPath, branchName);
|
|
3559
3727
|
return {
|
|
3560
3728
|
success: true,
|
|
@@ -3568,13 +3736,13 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3568
3736
|
} catch (prStateErr) {
|
|
3569
3737
|
console.warn(`[merge] Pre-merge PR state check failed for ${issueId}: ${prStateErr.message} — proceeding (check is best-effort)`);
|
|
3570
3738
|
}
|
|
3571
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
3739
|
+
const { postMergeLifecycle } = await import("./merge-agent-CKkgIBPB.js");
|
|
3572
3740
|
const agentId = request.kind === "strike" ? request.recoveryTarget : `agent-${issueId.toLowerCase()}`;
|
|
3573
3741
|
const rebaseMsg = request.kind === "strike" ? `STRIKE LANDING REQUEST: Rebase ${branchName} onto ${targetBranch}, resolve conflicts, run the full quality gates, push ${branchName}, then run pan strike-ready ${issueId} to persist the new HEAD. Do NOT merge or push main.` : `MERGE REQUESTED: The human has clicked MERGE for ${issueId}. Please rebase onto ${targetBranch} and push:\n\n1. git fetch origin ${targetBranch}\n2. git rebase origin/${targetBranch}\n3. If conflicts: resolve them, git add, git rebase --continue\n4. git push --force-with-lease\n\nAfter pushing, the server will handle verification and merge automatically. Do NOT run gh pr merge yourself.`;
|
|
3574
3742
|
setReviewStatus(issueId, { mergeStep: "rebasing" });
|
|
3575
3743
|
console.log(`[merge] Rebasing ${branchName} onto ${targetBranch} for ${issueId} (agent=${await Effect.runPromise(sessionExists(agentId)) ? "running" : "stopped"})...`);
|
|
3576
3744
|
{
|
|
3577
|
-
const { beginShipLog, appendShipLog } = await import("./ship-log-
|
|
3745
|
+
const { beginShipLog, appendShipLog } = await import("./ship-log-D9MlVzYU.js");
|
|
3578
3746
|
beginShipLog(issueId);
|
|
3579
3747
|
appendShipLog(issueId, `Ship started: rebasing ${branchName} onto ${targetBranch}…`, "rebasing");
|
|
3580
3748
|
}
|
|
@@ -3705,7 +3873,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3705
3873
|
});
|
|
3706
3874
|
let skipLocalVerification = false;
|
|
3707
3875
|
if (primaryForge === "github" && artifactUrl) try {
|
|
3708
|
-
const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-
|
|
3876
|
+
const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-ClZ2lk8D.js");
|
|
3709
3877
|
if (isGitHubAppConfigured()) {
|
|
3710
3878
|
const ref = parsePullRequestRef({ url: artifactUrl });
|
|
3711
3879
|
if (ref) {
|
|
@@ -3726,14 +3894,14 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3726
3894
|
} catch (ciErr) {
|
|
3727
3895
|
console.warn(`[merge] CI-state check failed (${ciErr.message?.slice(0, 120)}) — falling back to local verification for ${issueId}`);
|
|
3728
3896
|
}
|
|
3729
|
-
const { appendShipLog } = await import("./ship-log-
|
|
3897
|
+
const { appendShipLog } = await import("./ship-log-D9MlVzYU.js");
|
|
3730
3898
|
if (skipLocalVerification) appendShipLog(issueId, "✓ Local verification skipped — CI already green on this exact commit", "verifying");
|
|
3731
3899
|
const verifyResult = skipLocalVerification ? { outcome: "passed" } : await (async () => {
|
|
3732
3900
|
console.log(`[merge] Running post-rebase verification for ${issueId}...`);
|
|
3733
3901
|
appendShipLog(issueId, "Running post-rebase verification (full quality-gate suite)…", "verifying");
|
|
3734
|
-
const { runVerificationForIssue } = await import("./verification-runner-
|
|
3902
|
+
const { runVerificationForIssue } = await import("./verification-runner-BW4HOKAz.js");
|
|
3735
3903
|
return Effect.runPromise(runVerificationForIssue(issueId, workspacePath, { isRemote: false }, "merge-verify", {
|
|
3736
|
-
|
|
3904
|
+
...mergeVerificationOptions(request),
|
|
3737
3905
|
onGateLog: (line) => appendShipLog(issueId, line, "verifying")
|
|
3738
3906
|
}));
|
|
3739
3907
|
})();
|
|
@@ -3764,7 +3932,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3764
3932
|
console.log(`[merge] Post-rebase verification ${verifyResult.outcome} for ${issueId}`);
|
|
3765
3933
|
setReviewStatus(issueId, { mergeStep: "reporting-statuses" });
|
|
3766
3934
|
try {
|
|
3767
|
-
const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-
|
|
3935
|
+
const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-ClZ2lk8D.js");
|
|
3768
3936
|
if (githubPrRef && isGitHubAppConfigured()) {
|
|
3769
3937
|
const sha = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).headSha.trim();
|
|
3770
3938
|
if (sha) {
|
|
@@ -3792,7 +3960,7 @@ async function triggerMerge(issueId, request = { kind: "normal" }) {
|
|
|
3792
3960
|
} catch (prMergeErr) {
|
|
3793
3961
|
console.error(`[merge] Review artifact merge threw for ${issueId}:`, prMergeErr);
|
|
3794
3962
|
try {
|
|
3795
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
3963
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-ClZ2lk8D.js");
|
|
3796
3964
|
if (githubPrRef && isGitHubAppConfigured()) {
|
|
3797
3965
|
artifactMerged = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).merged;
|
|
3798
3966
|
if (artifactMerged) console.log(`[merge] Race-detected: PR #${githubPrRef.number} for ${issueId} was already merged despite thrown error; proceeding`);
|
|
@@ -3911,8 +4079,8 @@ const postForgeApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge
|
|
|
3911
4079
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
3912
4080
|
if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
|
|
3913
4081
|
return yield* Effect.promise(async () => {
|
|
3914
|
-
const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-
|
|
3915
|
-
const { getForgeAdapter } = await import("./forge-
|
|
4082
|
+
const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-bUqbm3yc.js");
|
|
4083
|
+
const { getForgeAdapter } = await import("./forge-DXnS_YFH.js");
|
|
3916
4084
|
let mergeSet = getMergeSetSync(issueId);
|
|
3917
4085
|
if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
|
|
3918
4086
|
const results = [];
|
|
@@ -4000,8 +4168,8 @@ const postForgeMergeRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge-m
|
|
|
4000
4168
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
4001
4169
|
if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
|
|
4002
4170
|
return yield* Effect.promise(async () => {
|
|
4003
|
-
const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-
|
|
4004
|
-
const { getForgeAdapter } = await import("./forge-
|
|
4171
|
+
const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-bUqbm3yc.js");
|
|
4172
|
+
const { getForgeAdapter } = await import("./forge-DXnS_YFH.js");
|
|
4005
4173
|
let mergeSet = getMergeSetSync(issueId);
|
|
4006
4174
|
if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
|
|
4007
4175
|
const results = [];
|
|
@@ -4194,7 +4362,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
|
|
|
4194
4362
|
console.log(`[approve] Starting role pipeline for ${issueId}...`);
|
|
4195
4363
|
let reviewResult;
|
|
4196
4364
|
try {
|
|
4197
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
4365
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DNboMyW4.js");
|
|
4198
4366
|
reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
4199
4367
|
issueId,
|
|
4200
4368
|
workspace: workspacePath,
|
|
@@ -4241,7 +4409,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
|
|
|
4241
4409
|
}
|
|
4242
4410
|
console.log(`[approve] Step 3/3: Running server-side rebase for ${issueId}...`);
|
|
4243
4411
|
try {
|
|
4244
|
-
const { rebaseFeatureBranch } = await import("./merge-rebase-
|
|
4412
|
+
const { rebaseFeatureBranch } = await import("./merge-rebase-BfaTyXsw.js");
|
|
4245
4413
|
const workspacePathForRebase = join(projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
|
|
4246
4414
|
const rebaseResult = await Effect.runPromise(rebaseFeatureBranch(workspacePathForRebase, branchName, "main", issueId));
|
|
4247
4415
|
if (!rebaseResult.success) {
|
|
@@ -4261,7 +4429,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
|
|
|
4261
4429
|
completePendingOperation(issueId, pushResult.error);
|
|
4262
4430
|
return jsonResponse({ error: pushResult.error }, { status: pushResult.httpStatus });
|
|
4263
4431
|
}
|
|
4264
|
-
const { approve: lifecycleApprove } = await import("./lifecycle-
|
|
4432
|
+
const { approve: lifecycleApprove } = await import("./lifecycle-xmBfK2GJ.js");
|
|
4265
4433
|
const ghResolved = resolveGitHubIssueSync(issueId);
|
|
4266
4434
|
const isGitHubIssueFlag = ghResolved.isGitHub;
|
|
4267
4435
|
const lifecycleCtx = {
|
|
@@ -4295,7 +4463,7 @@ const getMergeQueueRoute = HttpRouter.add("GET", "/api/merge-queue", httpHandler
|
|
|
4295
4463
|
})));
|
|
4296
4464
|
const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pipeline/notify", httpHandler(Effect.gen(function* () {
|
|
4297
4465
|
const request = yield* HttpServerRequest.HttpServerRequest;
|
|
4298
|
-
const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-
|
|
4466
|
+
const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-BrcU6qfe.js"));
|
|
4299
4467
|
const expected = getInternalTokenSync();
|
|
4300
4468
|
if (!expected) return jsonResponse({
|
|
4301
4469
|
ok: false,
|
|
@@ -4309,7 +4477,7 @@ const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pi
|
|
|
4309
4477
|
}, 403);
|
|
4310
4478
|
const event = yield* readJsonBody;
|
|
4311
4479
|
const type = event.type;
|
|
4312
|
-
const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-
|
|
4480
|
+
const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-BJr8gQX6.js"));
|
|
4313
4481
|
switch (type) {
|
|
4314
4482
|
case "status_changed": {
|
|
4315
4483
|
const issueId = event.issueId;
|
|
@@ -4472,7 +4640,7 @@ init_review_status();
|
|
|
4472
4640
|
init_io();
|
|
4473
4641
|
init_types();
|
|
4474
4642
|
init_dag();
|
|
4475
|
-
|
|
4643
|
+
init_xbrief_index();
|
|
4476
4644
|
init_types$1();
|
|
4477
4645
|
init_review_context();
|
|
4478
4646
|
init_tldr_daemon();
|
|
@@ -4601,9 +4769,9 @@ async function getIndexStats(workspacePath) {
|
|
|
4601
4769
|
function resolvePlanLocation(projectPath, issueId) {
|
|
4602
4770
|
return Effect.gen(function* () {
|
|
4603
4771
|
const workspacePath = join(projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
|
|
4604
|
-
const found = yield*
|
|
4772
|
+
const found = yield* findXBriefByIssue(projectPath, issueId);
|
|
4605
4773
|
if (found) {
|
|
4606
|
-
const doc = yield*
|
|
4774
|
+
const doc = yield* readXBriefDocument(found.path);
|
|
4607
4775
|
return {
|
|
4608
4776
|
path: found.path,
|
|
4609
4777
|
lifecycleDir: found.lifecycleDir,
|
|
@@ -4990,7 +5158,7 @@ const getWorkspacePlanRoute = HttpRouter.add("GET", "/api/workspaces/:issueId/pl
|
|
|
4990
5158
|
const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
|
|
4991
5159
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
4992
5160
|
const location = yield* resolvePlanLocation(getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]), issueId);
|
|
4993
|
-
if (!location) return jsonResponse({ error: "No
|
|
5161
|
+
if (!location) return jsonResponse({ error: "No xBRIEF plan found for this workspace" }, { status: 404 });
|
|
4994
5162
|
const cp = criticalPath(actionableDoc(location.doc));
|
|
4995
5163
|
return jsonResponse({
|
|
4996
5164
|
...location.doc,
|
|
@@ -5026,14 +5194,14 @@ const patchWorkspacePlanInspectionPolicyRoute = HttpRouter.add("PATCH", "/api/wo
|
|
|
5026
5194
|
const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
|
|
5027
5195
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
5028
5196
|
const policy = (yield* readJsonBody).inspectionPolicy;
|
|
5029
|
-
if (!
|
|
5197
|
+
if (!XBRIEF_INSPECTION_POLICIES.includes(policy)) return jsonResponse({ error: "Invalid inspection policy" }, { status: 400 });
|
|
5030
5198
|
const location = yield* resolvePlanLocation(getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]), issueId);
|
|
5031
|
-
if (!location) return jsonResponse({ error: "No
|
|
5199
|
+
if (!location) return jsonResponse({ error: "No xBRIEF plan found for this workspace" }, { status: 404 });
|
|
5032
5200
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
5033
5201
|
const updated = {
|
|
5034
5202
|
...location.doc,
|
|
5035
|
-
|
|
5036
|
-
...location.doc.
|
|
5203
|
+
xBRIEFInfo: {
|
|
5204
|
+
...location.doc.xBRIEFInfo,
|
|
5037
5205
|
inspectionPolicy: policy,
|
|
5038
5206
|
updated: now
|
|
5039
5207
|
},
|
|
@@ -5042,7 +5210,7 @@ const patchWorkspacePlanInspectionPolicyRoute = HttpRouter.add("PATCH", "/api/wo
|
|
|
5042
5210
|
updated: now
|
|
5043
5211
|
}
|
|
5044
5212
|
};
|
|
5045
|
-
yield* Effect.promise(() => writeFile(location.path,
|
|
5213
|
+
yield* Effect.promise(() => writeFile(location.path, `${serializeXBriefDocument(updated)}\n`, "utf-8"));
|
|
5046
5214
|
const cp = criticalPath(updated);
|
|
5047
5215
|
return jsonResponse({
|
|
5048
5216
|
...updated,
|
|
@@ -5084,10 +5252,10 @@ const patchWorkspaceTieredExecutionRoute = HttpRouter.add("PATCH", "/api/workspa
|
|
|
5084
5252
|
if (override !== "on" && override !== "off" && override !== null && override !== void 0) return jsonResponse({ error: "Invalid tiered-execution override" }, { status: 400 });
|
|
5085
5253
|
const project = getProjectSync(extractPrefixSync(issueId) ?? issueId.split("-")[0]);
|
|
5086
5254
|
if (!project) return jsonResponse({ error: "Project not found" }, { status: 404 });
|
|
5087
|
-
yield* Effect.promise(() => import("./record-
|
|
5255
|
+
yield* Effect.promise(() => import("./record-CN0pj4_5.js").then((m) => m.writeRecordTieredExecutionOverride(project, issueId, override)));
|
|
5088
5256
|
const projectPath = project.path;
|
|
5089
5257
|
const location = yield* resolvePlanLocation(projectPath, issueId);
|
|
5090
|
-
if (!location) return jsonResponse({ error: "No
|
|
5258
|
+
if (!location) return jsonResponse({ error: "No xBRIEF plan found for this workspace" }, { status: 404 });
|
|
5091
5259
|
const globalEnabled = loadConfigSync().config.tieredExecution?.enabled ?? false;
|
|
5092
5260
|
const planMetadata = location.doc.plan?.metadata;
|
|
5093
5261
|
let source;
|
|
@@ -5431,6 +5599,33 @@ const MAX_AUTO_REQUEUE = 25;
|
|
|
5431
5599
|
const requestReviewPipeline = createRequestReviewPipeline();
|
|
5432
5600
|
/** Safe `.message` read for caught values of unknown shape. */
|
|
5433
5601
|
const errorMessage = (e) => e instanceof Error ? e.message : void 0;
|
|
5602
|
+
/**
|
|
5603
|
+
* Push the feature branch of every repo in the workspace (PAN-2948).
|
|
5604
|
+
*
|
|
5605
|
+
* A polyrepo workspace root is a one-commit wrapper repo with no remote and no
|
|
5606
|
+
* feature branch — pushing there fails and, on the verified-dispatch path,
|
|
5607
|
+
* kills the whole re-review pipeline. Loop the resolved repo roots instead
|
|
5608
|
+
* (mirrors rebase-helper.ts), skipping repos whose feature branch doesn't
|
|
5609
|
+
* exist locally (untouched sub-repos). Monorepo resolves to a single root at
|
|
5610
|
+
* the workspace path, preserving the previous behavior.
|
|
5611
|
+
*/
|
|
5612
|
+
async function pushFeatureBranches(issueId, workspacePath) {
|
|
5613
|
+
const { resolveWorkspaceRepoRootsSync } = await import("./project-repos-DXKQsc_m.js");
|
|
5614
|
+
for (const root of resolveWorkspaceRepoRootsSync(issueId, workspacePath)) {
|
|
5615
|
+
try {
|
|
5616
|
+
await execAsync$2(`git rev-parse --verify --quiet refs/heads/${root.sourceBranch}`, {
|
|
5617
|
+
cwd: root.dir,
|
|
5618
|
+
encoding: "utf-8"
|
|
5619
|
+
});
|
|
5620
|
+
} catch {
|
|
5621
|
+
continue;
|
|
5622
|
+
}
|
|
5623
|
+
await execAsync$2(`git push origin ${root.sourceBranch}`, {
|
|
5624
|
+
cwd: root.dir,
|
|
5625
|
+
encoding: "utf-8"
|
|
5626
|
+
});
|
|
5627
|
+
}
|
|
5628
|
+
}
|
|
5434
5629
|
function shouldTreatAsRerun(status) {
|
|
5435
5630
|
if (!status) return false;
|
|
5436
5631
|
return status.readyForMerge === true || status.reviewStatus === "passed" || status.testStatus === "passed" || status.mergeStatus === "failed";
|
|
@@ -5542,15 +5737,12 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
|
|
|
5542
5737
|
console.warn(`[review] Could not transition ${issueId} to in_review: ${errorMessage(err)}`);
|
|
5543
5738
|
});
|
|
5544
5739
|
try {
|
|
5545
|
-
await
|
|
5546
|
-
cwd: workspacePath,
|
|
5547
|
-
encoding: "utf-8"
|
|
5548
|
-
});
|
|
5740
|
+
await pushFeatureBranches(issueId, workspacePath);
|
|
5549
5741
|
} catch (pushErr) {
|
|
5550
5742
|
console.log(`Feature branch push note: ${errorMessage(pushErr)}`);
|
|
5551
5743
|
}
|
|
5552
5744
|
try {
|
|
5553
|
-
const { createReviewArtifactsForIssue } = await import("./review-artifacts-
|
|
5745
|
+
const { createReviewArtifactsForIssue } = await import("./review-artifacts-nRDPuMxd.js");
|
|
5554
5746
|
const artifactResult = await Effect.runPromise(createReviewArtifactsForIssue(issueId, workspacePath));
|
|
5555
5747
|
const primaryArtifact = artifactResult.mergeSet?.repos.find((repo) => !!repo.artifactUrl);
|
|
5556
5748
|
artifactResult.mergeSet?.repos.find((repo) => repo.mergeStatus !== "skipped")?.targetBranch;
|
|
@@ -5605,7 +5797,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
|
|
|
5605
5797
|
} catch {}
|
|
5606
5798
|
return;
|
|
5607
5799
|
}
|
|
5608
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
5800
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DNboMyW4.js");
|
|
5609
5801
|
const prUrl = getReviewStatusSync(issueId)?.prUrl;
|
|
5610
5802
|
const reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
5611
5803
|
issueId,
|
|
@@ -5736,15 +5928,12 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
|
|
|
5736
5928
|
console.warn(`[request-review] Could not transition ${issueId} to in_review: ${errorMessage(err)}`);
|
|
5737
5929
|
});
|
|
5738
5930
|
try {
|
|
5739
|
-
await
|
|
5740
|
-
cwd: workspacePathRerun,
|
|
5741
|
-
encoding: "utf-8"
|
|
5742
|
-
});
|
|
5931
|
+
await pushFeatureBranches(issueId, workspacePathRerun);
|
|
5743
5932
|
} catch (pushErr) {
|
|
5744
5933
|
console.log(`[request-review] Feature branch push note: ${errorMessage(pushErr)}`);
|
|
5745
5934
|
}
|
|
5746
5935
|
const prUrl = getReviewStatusSync(issueId)?.prUrl;
|
|
5747
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
5936
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DNboMyW4.js");
|
|
5748
5937
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
5749
5938
|
issueId,
|
|
5750
5939
|
workspace: workspacePathRerun,
|
|
@@ -5794,7 +5983,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
|
|
|
5794
5983
|
});
|
|
5795
5984
|
} else {
|
|
5796
5985
|
const workspacePath = join(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
|
|
5797
|
-
const { spawnRun } = yield* Effect.promise(() => import("./agents-
|
|
5986
|
+
const { spawnRun } = yield* Effect.promise(() => import("./agents-wi9NWzs2.js"));
|
|
5798
5987
|
try {
|
|
5799
5988
|
const testRun = yield* Effect.promise(() => spawnRun(issueId, "test", { workspace: workspacePath }));
|
|
5800
5989
|
setReviewStatus(issueId, { testStatus: "testing" });
|
|
@@ -5890,12 +6079,8 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
|
|
|
5890
6079
|
});
|
|
5891
6080
|
},
|
|
5892
6081
|
pushBranch: async () => {
|
|
5893
|
-
|
|
5894
|
-
|
|
5895
|
-
else await execAsync$2(pushCommand, {
|
|
5896
|
-
cwd: workspacePath,
|
|
5897
|
-
encoding: "utf-8"
|
|
5898
|
-
});
|
|
6082
|
+
if (workspaceInfo.isRemote && workspaceInfo.vmName) await execAsync$2(flyExecCmd(workspaceInfo.vmName, `cd ${workspacePath} && git push origin ${branchName}`), { encoding: "utf-8" });
|
|
6083
|
+
else await pushFeatureBranches(issueId, workspacePath);
|
|
5899
6084
|
console.log(`[request-review] Pushed verified branch ${branchName} for ${issueId}`);
|
|
5900
6085
|
},
|
|
5901
6086
|
dispatchReview: async () => {
|
|
@@ -5904,7 +6089,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
|
|
|
5904
6089
|
testStatus: "pending",
|
|
5905
6090
|
reviewNotes
|
|
5906
6091
|
});
|
|
5907
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
6092
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DNboMyW4.js");
|
|
5908
6093
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
5909
6094
|
issueId,
|
|
5910
6095
|
workspace: workspacePath,
|
|
@@ -6213,7 +6398,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
|
|
|
6213
6398
|
const result = processResetReviewPipeline(issueId, resetWorkspace.exists);
|
|
6214
6399
|
if (result.httpStatus !== 200) return jsonResponse(result.body, { status: result.httpStatus });
|
|
6215
6400
|
try {
|
|
6216
|
-
const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-
|
|
6401
|
+
const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-CKkgIBPB.js"));
|
|
6217
6402
|
resetPostMergeState(issueId);
|
|
6218
6403
|
} catch (err) {
|
|
6219
6404
|
console.warn(`[reset-review] resetPostMergeState best-effort failed for ${issueId}:`, err);
|
|
@@ -6222,7 +6407,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
|
|
|
6222
6407
|
const rerun = body?.rerun === true;
|
|
6223
6408
|
if (rerun) try {
|
|
6224
6409
|
yield* Effect.promise(async () => {
|
|
6225
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
6410
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DNboMyW4.js");
|
|
6226
6411
|
const dispatchArgs = buildReviewRedispatchArgs(issueId, resetWorkspace, workspaceInfo, resolved);
|
|
6227
6412
|
if (dispatchArgs) {
|
|
6228
6413
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
@@ -6251,7 +6436,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
|
|
|
6251
6436
|
const postWorkspaceReviewPurgeRoute = HttpRouter.add("POST", "/api/review/:issueId/purge", httpHandler(Effect.gen(function* () {
|
|
6252
6437
|
const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
|
|
6253
6438
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
6254
|
-
const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-
|
|
6439
|
+
const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-DNboMyW4.js"));
|
|
6255
6440
|
const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
|
|
6256
6441
|
const purge = yield* Effect.promise(() => purgeReviewAgentsForIssue(projectKey, issueId));
|
|
6257
6442
|
const workspaceInfo = getWorkspaceInfoForIssue(issueId);
|
|
@@ -6281,8 +6466,8 @@ const postWorkspaceAbortReviewRoute = HttpRouter.add("POST", "/api/review/:issue
|
|
|
6281
6466
|
success: false,
|
|
6282
6467
|
error: "Workspace does not exist"
|
|
6283
6468
|
}, { status: 400 });
|
|
6284
|
-
const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-
|
|
6285
|
-
const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-
|
|
6469
|
+
const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-vjjcmiN8.js"));
|
|
6470
|
+
const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-DNboMyW4.js"));
|
|
6286
6471
|
const { killed, failed } = yield* killAllReviewerSessions(resolveProjectFromIssueSync(issueId)?.projectKey, issueId);
|
|
6287
6472
|
setReviewStatus(issueId, {
|
|
6288
6473
|
reviewStatus: "pending",
|
|
@@ -6354,8 +6539,8 @@ const getReviewConfigRoute = HttpRouter.add("GET", "/api/review/:issueId/config"
|
|
|
6354
6539
|
const issueId = ((yield* HttpRouter.params)["issueId"] ?? "").toUpperCase();
|
|
6355
6540
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
6356
6541
|
return jsonResponse(yield* Effect.promise(async () => {
|
|
6357
|
-
const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-
|
|
6358
|
-
const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-
|
|
6542
|
+
const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-CN0pj4_5.js");
|
|
6543
|
+
const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-DNboMyW4.js");
|
|
6359
6544
|
const project = resolveProjectForIssue(issueId);
|
|
6360
6545
|
const record = project ? readIssueRecordSync(project, issueId) : null;
|
|
6361
6546
|
return {
|
|
@@ -6390,9 +6575,9 @@ const postReviewConfigRoute = HttpRouter.add("POST", "/api/review/:issueId/confi
|
|
|
6390
6575
|
return jsonResponse({ error: error instanceof Error ? error.message : String(error) }, { status: 400 });
|
|
6391
6576
|
}
|
|
6392
6577
|
return jsonResponse(yield* Effect.promise(async () => {
|
|
6393
|
-
const { resolveProjectForIssue } = await import("./record-
|
|
6394
|
-
const { updateIssueRecord } = await import("./record-update-
|
|
6395
|
-
const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-
|
|
6578
|
+
const { resolveProjectForIssue } = await import("./record-CN0pj4_5.js");
|
|
6579
|
+
const { updateIssueRecord } = await import("./record-update-bLJxAXH4.js");
|
|
6580
|
+
const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-DNboMyW4.js");
|
|
6396
6581
|
const record = await updateIssueRecord(resolveProjectForIssue(issueId), issueId, (current) => {
|
|
6397
6582
|
if (hasMode) if (body.reviewMode === null) delete current.reviewMode;
|
|
6398
6583
|
else current.reviewMode = body.reviewMode;
|
|
@@ -6825,7 +7010,7 @@ async function readWorkspacePlanningMarkdown(issueId, fileName) {
|
|
|
6825
7010
|
*/
|
|
6826
7011
|
async function readWorkspaceContinueFile(_projectPath, workspacePath, issueId) {
|
|
6827
7012
|
try {
|
|
6828
|
-
const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-
|
|
7013
|
+
const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-CN0pj4_5.js");
|
|
6829
7014
|
const recordView = readRecordContinueViewSync(resolveProjectForIssue(issueId) ?? getProjectConfigFromWorkspacePath(workspacePath), issueId);
|
|
6830
7015
|
return recordView ? JSON.stringify(recordView, null, 2) : null;
|
|
6831
7016
|
} catch {
|
|
@@ -7584,7 +7769,7 @@ const getWorkspaceReviewStatusRoute = HttpRouter.add("GET", "/api/review/:issueI
|
|
|
7584
7769
|
if (queuePosition === null) try {
|
|
7585
7770
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
7586
7771
|
if (resolved) {
|
|
7587
|
-
const { getQueueForProject } = yield* Effect.promise(() => import("./merge-
|
|
7772
|
+
const { getQueueForProject } = yield* Effect.promise(() => import("./merge-B1DiziGU.js"));
|
|
7588
7773
|
const mergePos = findPositionInQueueSync(issueId, getQueueForProject(resolved.projectKey).map((e) => ({
|
|
7589
7774
|
id: String(e.id),
|
|
7590
7775
|
type: "task",
|
|
@@ -7622,7 +7807,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
7622
7807
|
const workspaceInfo = getWorkspaceInfoForIssue(issueId);
|
|
7623
7808
|
if (workspaceInfo.exists && workspaceInfo.localPath) {
|
|
7624
7809
|
const localPath = workspaceInfo.localPath;
|
|
7625
|
-
const { getWorkspaceGitInfo } = yield* Effect.promise(() => import("./git-utils-
|
|
7810
|
+
const { getWorkspaceGitInfo } = yield* Effect.promise(() => import("./git-utils-D0_yhCgF.js"));
|
|
7626
7811
|
try {
|
|
7627
7812
|
const gitInfo = yield* getWorkspaceGitInfo(localPath);
|
|
7628
7813
|
if (gitInfo.HEAD) update.reviewedAtCommit = gitInfo.HEAD;
|
|
@@ -7637,7 +7822,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
7637
7822
|
if (verificationStatus) update.verificationStatus = verificationStatus;
|
|
7638
7823
|
if (readyForMerge !== void 0) update.readyForMerge = readyForMerge;
|
|
7639
7824
|
const status = setReviewStatus(issueId, update);
|
|
7640
|
-
const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-
|
|
7825
|
+
const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-DM6bWjsi.js"));
|
|
7641
7826
|
const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
|
|
7642
7827
|
if (reviewStatus && [
|
|
7643
7828
|
"passed",
|
|
@@ -7655,7 +7840,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
7655
7840
|
const agentId = `agent-${issueId.toLowerCase()}`;
|
|
7656
7841
|
const feedbackBody = `CODE REVIEW ${reviewStatus.toUpperCase()} for ${issueId}:\n\n${reviewNotes}\n\n## REQUIRED: Fix ALL issues above, then invoke the /rebase-and-submit skill\n\n1. Read each blocking issue carefully\n2. Fix the code for EVERY issue listed\n3. Run tests locally to verify your fixes\n4. Commit every change\n5. Invoke the /rebase-and-submit skill for ${issueId} — this is an atomic task that runs pan done (which handles rebase + push + re-submit internally)\n\nDo NOT stop between steps. Do NOT run git push manually — the skill handles it. Do NOT stop until pan done has completed successfully.`;
|
|
7657
7842
|
try {
|
|
7658
|
-
const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-
|
|
7843
|
+
const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-D3a22RCd.js"));
|
|
7659
7844
|
const wsInfo = getWorkspaceInfoForIssue(issueId);
|
|
7660
7845
|
const fileResult = yield* Effect.promise(() => writeFeedbackFile({
|
|
7661
7846
|
issueId,
|
|
@@ -7719,7 +7904,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
7719
7904
|
const agentId = `agent-${issueId.toLowerCase()}`;
|
|
7720
7905
|
const feedbackBody = `TESTS FAILED for ${issueId}:\n\n${testNotes}\n\n## REQUIRED: Fix ALL test failures, then invoke the /rebase-and-submit skill\n\n1. Read each test failure carefully\n2. Fix the code causing EVERY failure\n3. Run the test suite locally to verify your fixes pass\n4. Commit every change\n5. Invoke the /rebase-and-submit skill for ${issueId} — this is an atomic task that runs pan done (which handles rebase + push + re-submit internally)\n\nDo NOT stop between steps. Do NOT run git push manually — the skill handles it. Do NOT stop until pan done has completed successfully.`;
|
|
7721
7906
|
try {
|
|
7722
|
-
const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-
|
|
7907
|
+
const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-D3a22RCd.js"));
|
|
7723
7908
|
const wsInfo = getWorkspaceInfoForIssue(issueId);
|
|
7724
7909
|
const fileResult = yield* Effect.promise(() => writeFeedbackFile({
|
|
7725
7910
|
issueId,
|
|
@@ -7752,14 +7937,14 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
7752
7937
|
});
|
|
7753
7938
|
yield* Effect.promise(async () => {
|
|
7754
7939
|
try {
|
|
7755
|
-
const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-
|
|
7940
|
+
const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-vjjcmiN8.js");
|
|
7756
7941
|
const project = resolveProjectFromIssueSync(issueId);
|
|
7757
7942
|
const repo = (project ? getProjectSync(project.projectKey) : null)?.github_repo;
|
|
7758
7943
|
if (!repo || !repo.includes("/")) return;
|
|
7759
7944
|
const [owner, name] = repo.split("/");
|
|
7760
7945
|
const wsInfo = getWorkspaceInfoForIssue(issueId);
|
|
7761
7946
|
if (!wsInfo?.localPath) return;
|
|
7762
|
-
const { postOverdeckTestsStatus } = await import("./github-app-
|
|
7947
|
+
const { postOverdeckTestsStatus } = await import("./github-app-ClZ2lk8D.js");
|
|
7763
7948
|
await postOverdeckTestsStatus(wsInfo.localPath, owner, name, "success", "Test specialist passed");
|
|
7764
7949
|
} catch (err) {
|
|
7765
7950
|
console.warn(`[review-status] Failed to post overdeck/tests for ${issueId}: ${err.message}`);
|
|
@@ -7801,7 +7986,7 @@ const postWorkspaceRefreshTokenRoute = HttpRouter.add("POST", "/api/workspaces/:
|
|
|
7801
7986
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
7802
7987
|
const issueLower = issueId.toLowerCase();
|
|
7803
7988
|
const workspacePath = join(getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]), "workspaces", `feature-${issueLower}`);
|
|
7804
|
-
const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-
|
|
7989
|
+
const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-ClZ2lk8D.js"));
|
|
7805
7990
|
if (!isGitHubAppConfigured()) return jsonResponse({
|
|
7806
7991
|
success: false,
|
|
7807
7992
|
error: "GitHub App not configured"
|
|
@@ -7814,6 +7999,6 @@ const postWorkspaceRefreshTokenRoute = HttpRouter.add("POST", "/api/workspaces/:
|
|
|
7814
7999
|
})));
|
|
7815
8000
|
const workspacesRouteLayer = Layer.mergeAll(workspaceDataRouteLayer, postWorkspaceRebuildRoute, postWorkspaceRebuildAndStartRoute, uatStackActionRouteLayer, getWorkspaceStateMdRoute, getWorkspaceInferenceMdRoute, stashCleanRouteLayer, containerOpsRouteLayer, postWorkspaceStartRoute, getWorkspaceReviewStatusRoute, postWorkspaceReviewStatusRoute, reviewPipelineRouteLayer, reviewControlRouteLayer, mergeOpsRouteLayer, postWorkspaceRefreshTokenRoute);
|
|
7816
8001
|
//#endregion
|
|
7817
|
-
export { getWorkspacePathForIssue as C, resolveIssueHeadlineCost as S, getCostsForIssueSync as _, pushApproveMain as a, processPendingFeedbackDeliveries as b, triggerMerge as c, resumeQueuedMerges as d, syncWalFromAllProjects as f, migrateAllSessionsSync as g, reclassifyUnknownCostEventsSync as h, mergeOpsRouteLayer as i, internalEventsRouteLayer as l, reconcilePiTranscripts as m, buildRichPRBody as n, reconcileGitHubMergeStatus as o, reconcile as p, isBranchAlreadyRebased as r, shouldBlockApproveForDirtyStatus as s, workspacesRouteLayer as t, eventsRouteLayer as u, rebuildCacheSync as v, getCachedRunningAgents as x, syncCacheSync as y };
|
|
8002
|
+
export { getWorkspacePathForIssue as C, stopAgentOutputService as E, resolveIssueHeadlineCost as S, startAgentOutputService as T, getCostsForIssueSync as _, pushApproveMain as a, processPendingFeedbackDeliveries as b, triggerMerge as c, resumeQueuedMerges as d, syncWalFromAllProjects as f, migrateAllSessionsSync as g, reclassifyUnknownCostEventsSync as h, mergeOpsRouteLayer as i, internalEventsRouteLayer as l, reconcilePiTranscripts as m, buildRichPRBody as n, reconcileGitHubMergeStatus as o, reconcile as p, isBranchAlreadyRebased as r, shouldBlockApproveForDirtyStatus as s, workspacesRouteLayer as t, eventsRouteLayer as u, rebuildCacheSync as v, retainAgentOutputInterest as w, getCachedRunningAgents as x, syncCacheSync as y };
|
|
7818
8003
|
|
|
7819
|
-
//# sourceMappingURL=workspaces-
|
|
8004
|
+
//# sourceMappingURL=workspaces-Do_9J0LQ.js.map
|