@overdeck/desktop 0.45.15 → 0.45.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-electron/main.js +149 -158
- package/dist-electron/main.js.map +1 -1
- package/dist-electron/preload.js +17 -2
- package/dist-electron/preload.js.map +1 -1
- package/package.json +5 -4
- package/server/acceptance-criteria-aQFKQf-J.js +62 -0
- package/server/{advancing-selfheal-CSuZ31bB.js → advancing-selfheal-DgwQgm4D.js} +6 -5
- package/server/{agent-gc-D_DxfBHR.js → agent-gc-kpzxqT7P.js} +3 -3
- package/server/agent-state-C_6TG-Ad.js +3 -0
- package/server/{agent-state-service-C_2ZAQRP.js → agent-state-service-BUfovFfB.js} +1 -1
- package/server/{agent-state-service-BZkvgQf4.js → agent-state-service-nUD3qfob.js} +9 -52
- package/server/agents-BA15AQqo.js +3 -0
- package/server/{briefing-freshness-Kh5V8RTh.js → agents-BHBxr8c9.js} +5 -131
- package/server/{archive-planning-DkivCk1A.js → archive-planning-CzCW9Ifl.js} +5 -10
- package/server/{archive-planning-CTILQRnV.js → archive-planning-D-QsBufn.js} +1 -1
- package/server/{artifact-index-jobs-CmsvQ1ey.js → artifact-index-jobs-qqa51B2Z.js} +2 -2
- package/server/{backlog-auto-trigger-ueRaT8Dy.js → backlog-auto-trigger-B7Bi0bvY.js} +3 -3
- package/server/behavior-CWqNMqE5.js +10 -0
- package/server/briefing-freshness-DuxIE1yr.js +131 -0
- package/server/{checkpoint-manager-fu9oVsR-.js → checkpoint-manager-DF6hb9Jw.js} +3 -3
- package/server/{checkpoint-manager-CAFos8e1.js → checkpoint-manager-DixkLus7.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-DvhGi8P_.js → checkpoints-B1Z42tJE.js} +1 -1
- package/server/{checkpoints-1BqOlS4q.js → checkpoints-BiviJqei.js} +2 -2
- package/server/claude-hooks-provision-BeMGi4ty.js +3 -0
- package/server/{claude-hooks-provision-s_wdpeVj.js → claude-hooks-provision-Du_PkMsp.js} +132 -114
- package/server/{claude-permissions-CaWqysff.js → claude-permissions-BB6agcOZ.js} +2 -2
- package/server/{claude-settings-overlay-CcTf0xzG.js → claude-settings-overlay-CAq2oFSK.js} +2 -2
- package/server/{claude-settings-overlay-BbA4FbVI.js → claude-settings-overlay-DUWWLd6M.js} +1 -1
- package/server/cli-BFgrSWKV.js +3 -0
- package/server/{cli-BwCvCUBK.js → cli-C33xPZNm.js} +9 -9
- package/server/{cliproxy-C2xC-3vH.js → cliproxy-BQX1TL6N.js} +1 -1
- package/server/{cliproxy-BsoNNDAj.js → cliproxy-CGBA1GzA.js} +2 -2
- package/server/{close-issue-BleIwP3f.js → close-issue-DNv8npc1.js} +5 -5
- package/server/{closed-issue-reaper-BwUUvjEW.js → closed-issue-reaper-DrqgBJlr.js} +1 -1
- package/server/{closed-issue-reaper-mC5pujeb.js → closed-issue-reaper-LoMnnjtJ.js} +9 -9
- package/server/codex-DxLivxri.js +3 -0
- package/server/{behavior-Cpj03N4v.js → codex-parser-DboQnEXN.js} +3 -9
- package/server/{codex-DW60_5j2.js → codex-sgWVCGUd.js} +43 -17
- package/server/{config-BRNQJXhA.js → config-6MCHOZ2N.js} +1 -1
- package/server/{config-ZNnMpIlh.js → config-DfaUXr6r.js} +2 -2
- package/server/{config-yaml-Dcz-8uit.js → config-yaml-CqaAyn8y.js} +149 -80
- package/server/{conflict-gate-DTje2Ll7.js → conflict-gate-BF_zhcmb.js} +3 -3
- package/server/{conflict-gate-DGT8jCLp.js → conflict-gate-BubJprtD.js} +1 -1
- package/server/{context-layers-BdUCQ-cl.js → context-layers-BFrxfl0l.js} +17 -3
- package/server/{context-layers-ByOWUjUg.js → context-layers-DWL_8HhY.js} +2 -2
- package/server/{control-settings-DwkAeooY.js → control-settings-BguNQ1F_.js} +4 -4
- package/server/{conversation-compaction-WYQZUVDm.js → conversation-compaction-CRKAf2qP.js} +1 -1
- package/server/{conversation-compaction-OTYgd6eg.js → conversation-compaction-DxSXl0pT.js} +8 -8
- package/server/{conversation-service-C_kNZPLx.js → conversation-service-DzuY9qoH.js} +1 -1
- package/server/{conversation-service-BR1OgvxO.js → conversation-service-mFVFdDQK.js} +6 -5
- package/server/{conversations-DG2M8WnT.js → conversations-BX5aD-6F.js} +4 -4
- package/server/{conversations-izHvSoAR.js → conversations-BajHQ60c.js} +1 -1
- package/server/{cost-DQ2ajr_m.js → cost-BoqD1Pxz.js} +2 -2
- package/server/{cost-B2mj17iG.js → cost-DuZ5vlv-.js} +3 -3
- package/server/{cost-sync-gTayEuWP.js → cost-sync-BYnmnMkY.js} +3 -3
- package/server/{dag-CqTehWpY.js → dag-C6kYyF17.js} +7 -243
- package/server/{dangerous-git-ops-DDWQlPC3.js → dangerous-git-ops-q5OPtXMd.js} +1 -1
- package/server/dashboard-db-worker.js +6 -6
- package/server/{deacon-BqW9HMew.js → deacon-CwCiNuEZ.js} +3 -3
- package/server/{deacon-DrKDBeJL.js → deacon-Dru5onpk.js} +258 -167
- package/server/{deacon-nudge-log-D1wEK6zF.js → deacon-nudge-log-ilDfxrhK.js} +1 -1
- package/server/{deacon-swarm-CO_A7xyd.js → deacon-swarm-BPmBmSoU.js} +298 -72
- package/server/deacon-swarm-CKyGJng1.js +2 -0
- package/server/deacon.js +14 -7
- package/server/{devcontainer-renderer-BQolp_qZ.js → devcontainer-renderer-BqGNCzvN.js} +3 -3
- package/server/{dist-Bc32rWJB.js → dist-BwlEiLCU.js} +1 -1
- package/server/dist-Bx4KkgYL.js +3 -0
- package/server/{dist-src-Byxt1ifL.js → dist-src-BE0Denfs.js} +1 -1
- package/server/{docker-s-esqZ__.js → docker-CNjXS72x.js} +2 -2
- package/server/{ensure-devcontainer-DA4-jF6R.js → ensure-devcontainer-5e9xOve4.js} +4 -4
- package/server/{ensure-devcontainer-pUVaT0h3.js → ensure-devcontainer-C6gyUQdE.js} +1 -1
- package/server/{esm-shims-CJHy8CZY.js → esm-shims-Cso7IGBC.js} +1 -1
- package/server/{event-store-CcJAhKCl.js → event-store-D9UhQyMS.js} +1 -1
- package/server/{event-store-DRte2Rwt.js → event-store-KZnWUKWh.js} +3 -3
- package/server/{events-Bej1w_k8.js → events-2eFUPdqz.js} +3 -3
- package/server/{events-CtsLScn8.js → events-BYbvqZky.js} +1 -1
- package/server/{factory-FN727tWr.js → factory-BtaRsHFC.js} +20 -17
- package/server/{feature-registry-population-ie-yBcQC.js → feature-registry-population-Ca2UaV0U.js} +4 -4
- package/server/{feature-registry-storage-CkZTFSsn.js → feature-registry-storage-DaP-bQxO.js} +2 -2
- package/server/{features-Dtm9ABuz.js → features-DqvaoQoa.js} +2 -2
- package/server/{feedback-target-BYtpyt1i.js → feedback-target-BXWdOiYI.js} +9 -7
- package/server/{feedback-target-DVJQDiE4.js → feedback-target-BblmMe9P.js} +1 -1
- package/server/{feedback-writer-DOUhyIW2.js → feedback-writer-CULeOOY4.js} +1 -1
- package/server/{feedback-writer-fdE1BzeL.js → feedback-writer-Dn8o9ZyE.js} +4 -4
- package/server/{flywheel-Bi82iiNl.js → flywheel-BUWdcfhq.js} +1 -1
- package/server/{flywheel-Bv3wv2S6.js → flywheel-CqkO3cDj.js} +15 -28
- package/server/{flywheel-CUErLAyN.js → flywheel-D9r1mw2U.js} +13 -13
- package/server/{flywheel-merge-order-DXjeBnJ1.js → flywheel-merge-order-LDzQDwSg.js} +1 -1
- package/server/{flywheel-merge-order-BaEN3iyN.js → flywheel-merge-order-VtjUweEb.js} +7 -7
- package/server/forge-DJy3Zx4s.js +2 -0
- package/server/{forge-ButEdJ31.js → forge-wEollMCi.js} +22 -12
- package/server/{from-CbtTxftl.js → from-B2tOYhYV.js} +1 -1
- package/server/{fts-db-CBgBLZcL.js → fts-db-Bgzn2RO7.js} +2 -2
- package/server/{fts-operations-CI9Xuo_1.js → fts-operations-Bj8yutnR.js} +2 -2
- package/server/{git-utils-ClfpP47N.js → git-utils-GxlL0tmt.js} +2 -2
- package/server/{git-utils-BCLRWQ-y.js → git-utils-q8jNoBts.js} +1 -1
- package/server/{github-app-DRD2woO0.js → github-app-BrYwK_Gb.js} +1 -1
- package/server/{github-app-DscZ0_B6.js → github-app-tUbb8Ldr.js} +8 -3
- package/server/{github-client-DpiZnxGH.js → github-client-BwBU41jK.js} +3 -3
- package/server/{github-client-iFRw8f7e.js → github-client-D6CNsftm.js} +1 -1
- package/server/{github-pr-lookup-D-EBexxC.js → github-pr-lookup-BS5PqkJb.js} +2 -2
- package/server/{harness-resolve-iMjyNUJ2.js → harness-resolve-Dx8hUsvC.js} +3 -3
- package/server/{health-events-CRdxDFN2.js → health-events-2DLp-5Xp.js} +2 -2
- package/server/{health-events-B_WsQyYm.js → health-events-B0mj6Iae.js} +1 -1
- package/server/{hooks-C1ScyVxP.js → hooks-BDcQJDUe.js} +1 -1
- package/server/{hooks-C9b7Vqpw.js → hooks-BS_JrvYP.js} +3 -3
- package/server/hume-B4seN95Y.js +3 -0
- package/server/{hume-TQ5pvOZ_.js → hume-BRhNKyXQ.js} +2 -2
- package/server/{idle-stack-reaper-B1kG7B_X.js → idle-stack-reaper-BCITXNW5.js} +2 -2
- package/server/{idle-stack-reaper-iFVOAoJy.js → idle-stack-reaper-C1ymihno.js} +1 -1
- package/server/{infra-bpq1MHKU.js → infra-_Kx1m9pm.js} +9 -4
- package/server/{injection-BLWfwTVZ.js → injection-Bvhyg_MV.js} +1 -1
- package/server/{injection-DJqWld1v.js → injection-CCaYkofq.js} +7 -7
- package/server/{inspect-agent-DytCsltn.js → inspect-agent-BqyZ4pCo.js} +35 -67
- package/server/inspect-agent-DCJQm9Wu.js +2 -0
- package/server/{internal-token-CjlhdufS.js → internal-token-Cl-1IxaE.js} +2 -2
- package/server/{internal-token-CCaWaTwE.js → internal-token-D-t28de5.js} +1 -1
- package/server/{io-BiQ2Cs3k.js → io-DkC4sFSy.js} +42 -56
- package/server/{issue-closed-FApNiOOs.js → issue-closed-Cpl4VDUM.js} +41 -6
- package/server/{issue-lifecycle-C-K53ASY.js → issue-lifecycle-CFR8TJ22.js} +22 -37
- package/server/{issue-lifecycle-BkFWNjlD.js → issue-lifecycle-YNTy3OT3.js} +1 -1
- package/server/{issue-service-singleton-bG1WdSdQ.js → issue-service-singleton-D81mCts_.js} +1 -1
- package/server/{issue-service-singleton-CuHGpJJP.js → issue-service-singleton-ldvUUXi3.js} +29 -29
- package/server/{issues-CwQMphDH.js → issues-DIEHt9sq.js} +2 -2
- package/server/{jsonl-parser-dNIjHgym.js → jsonl-parser-Cd5jIqh7.js} +3 -3
- package/server/{label-cleanup-DYvAZknd.js → label-cleanup-Btny6Gyo.js} +3 -3
- package/server/{state-home-CRowbXqU.js → launcher-generator-BXLM9f4b.js} +7 -127
- package/server/{layers-CD6FysRU.js → layers-gCJlK62m.js} +2 -2
- package/server/lifecycle-D7aQUnTO.js +12 -0
- package/server/{lifecycle-io-C_Wu0_i-.js → lifecycle-io-DQBF-GHO.js} +1 -1
- package/server/{lifecycle-io-CeYxP3cE.js → lifecycle-io-FfPUtz-y.js} +36 -47
- package/server/{linear-client-EtVyblVz.js → linear-client-CDH2D6Qy.js} +3 -3
- package/server/{linear-client-4qoKnuQu.js → linear-client-WrYrUIAH.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-7rqkTUm2.js → merge-BsDgUxFz.js} +3 -3
- package/server/{merge-brm721Es.js → merge-Dervs4BF.js} +1 -1
- package/server/{merge-agent-4Zhlgvqp.js → merge-agent-D6DNhe9j.js} +64 -51
- package/server/{merge-agent-36wfYm2u.js → merge-agent-DMQTJMP0.js} +1 -1
- package/server/{merge-batch-itfnwdsT.js → merge-batch-Bv6Z5K2H.js} +1 -1
- package/server/{merge-blockers-Bto_Oe_o.js → merge-blockers-WWWi6Ur2.js} +2 -2
- package/server/merge-ops-h9OCnIVz.js +2 -0
- package/server/{merge-rebase-Czfqfe4q.js → merge-rebase-Czth9ggm.js} +2 -2
- package/server/{merge-set-BIkGQL9j.js → merge-set-DNc4zBqd.js} +3 -3
- package/server/{merge-set-G1RHcu3D.js → merge-set-vuE3MEVt.js} +1 -1
- package/server/{merge-sync-B43Dybea.js → merge-sync-B2KSk54U.js} +2 -2
- package/server/{merge-sync-DIrmlZUr.js → merge-sync-B9nHdUGx.js} +1 -1
- package/server/{merge-train-DGqVuNZV.js → merge-train-DJgr81tF.js} +3 -3
- package/server/{merge-train-deps-q15XLnAS.js → merge-train-deps-B2OWS0k9.js} +4 -4
- package/server/{merge-verification-Cqfxx6bE.js → merge-verification-BBIXUEqa.js} +4 -4
- package/server/{multipart-parser-CiPxxfUH.js → multipart-parser-9DhuAkPd.js} +2 -2
- package/server/{no-resume-mode-yrPEQ_pC.js → no-resume-mode-Gh5R_YLF.js} +1 -1
- package/server/node_modules/.package-lock.json +11 -11
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
- package/server/node_modules/toml/README.md +54 -0
- package/server/node_modules/toml/index.d.ts +42 -1
- package/server/node_modules/toml/index.js +3 -3
- package/server/node_modules/toml/lib/compiler.js +35 -3
- package/server/node_modules/toml/lib/parser.js +224 -143
- package/server/node_modules/toml/package.json +3 -1
- package/server/node_modules/ws/lib/receiver.js +15 -32
- package/server/node_modules/ws/lib/websocket-server.js +4 -4
- package/server/node_modules/ws/lib/websocket.js +4 -4
- package/server/node_modules/ws/package.json +5 -1
- package/server/{orphan-proposed-reconciler-BWWHn4Lr.js → orphan-proposed-reconciler-B8H41C4a.js} +14 -24
- package/server/{orphan-proposed-reconciler-DAD9FJtQ.js → orphan-proposed-reconciler-DbTmT7qy.js} +1 -1
- package/server/package-lock.json +12 -12
- package/server/package.json +1 -1
- package/server/{pan-dir-Bj7Hy8iu.js → pan-dir-BTw4MdSe.js} +4 -4
- package/server/{paths-C9DkhIOT.js → paths-Btkc8mzp.js} +2 -2
- package/server/{pickup-CKRuGDsB.js → pickup-BtvRBbvI.js} +1 -1
- package/server/{pipeline-notifier-BkKbQ8ji.js → pipeline-notifier-3frIvSi3.js} +1 -1
- package/server/{pipeline-notifier-CAurUste.js → pipeline-notifier-DTd19f18.js} +2 -2
- package/server/{project-pipelines-BRWaGmI4.js → project-pipelines-B95fcAek.js} +2 -2
- package/server/projects-Dc9aoVoG.js +3 -0
- package/server/{prompts-DfI5qbTW.js → prompts-CIVmjHxn.js} +2 -2
- package/server/{providers-D-5txBRc.js → providers-BLLk5IIb.js} +1 -1
- package/server/{providers-CWDXoaMA.js → providers-C-yWibCk.js} +7 -7
- package/server/public/assets/chunk-BO2N2NFS-DzKZyoKY.js +103 -0
- package/server/public/assets/{diagram-OG6HWLK6-Avtvq2qI.js → diagram-OG6HWLK6-Cx8mWUb8.js} +1 -1
- package/server/public/assets/{dist-BEHQuasD.js → dist-BqccLhaw.js} +3 -3
- package/server/public/assets/{dist-BvmY-qb1.js → dist-rC3nAs_O.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-7KhCd0fH.js → ganttDiagram-6RSMTGT7-DLYPLf5T.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-iQoBMTf0.js → highlighted-body-OFNGDK62-D4DqixbV.js} +1 -1
- package/server/public/assets/index-CPcysUHk.js +796 -0
- package/server/public/assets/index-H5M0yhM4.css +1 -0
- package/server/public/assets/{linear-CiJHW9g5.js → linear-yqcXkDfj.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-CWdZ_heB.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-BOhmvUhW.js → pieDiagram-4H26LBE5-DhraIOaV.js} +1 -1
- package/server/public/assets/{prod-DmLBBqat.js → prod-DKUunUdN.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-Cjku660G.js → quadrantDiagram-W4KKPZXB-DPiRcToa.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-D52w5oPh.js → sankeyDiagram-5OEKKPKP-3An5HNkZ.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-BTO07_Iv.js → xychartDiagram-2RQKCTM6-lbEOjfqQ.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-CKZPWhjD.js → pull-requests-D7AL5woD.js} +1 -1
- package/server/{pull-requests-Bmre-Xlz.js → pull-requests-NDDNtqNq.js} +3 -3
- package/server/{agents-CsOzAmRg.js → queries-C0LCGG21.js} +743 -399
- package/server/{rally-BBd9tQ__.js → rally-4oKvnxLG.js} +3 -3
- package/server/rally-DF5a3ioP.js +3 -0
- package/server/{rally-api-DxZFObI_.js → rally-api-41tT6ikZ.js} +2 -2
- package/server/{rally-api-DDc85HIz.js → rally-api-BsaQ8Vnz.js} +1 -1
- package/server/{rally-client-DvvLiAQP.js → rally-client-Bo4hNcCZ.js} +5 -5
- package/server/{rally-client-BADHn0m_.js → rally-client-b5PT1x5L.js} +1 -1
- package/server/{reap-terminal-sessions-D_xvy-Mk.js → reap-terminal-sessions-BR39qflC.js} +1 -1
- package/server/{reap-terminal-sessions-D6JDJsqF.js → reap-terminal-sessions-CFkuquQj.js} +1 -1
- package/server/{rebuild-stack-GOsWqXi3.js → rebuild-stack-C7JPUom6.js} +1 -1
- package/server/{rebuild-stack-D19i080j.js → rebuild-stack-Ddv6W017.js} +6 -6
- package/server/{reconstruct-cache-lQrG4xGg.js → reconstruct-cache-Gqhm---K.js} +6 -6
- package/server/record-DLOqfbkI.js +3 -0
- package/server/record-update-BltEmPge.js +168 -0
- package/server/record-update-CDp7aTaT.js +3 -0
- package/server/recovery-trip-Cn7KJVkS.js +44 -0
- package/server/{release-engine-DxcMWRuK.js → release-engine-BYzmIBf9.js} +5 -5
- package/server/{release-set-BYsgX7o6.js → release-set-7pnxFOWR.js} +3 -3
- package/server/{remote-DmeL21dF.js → remote-Cvu4CSDk.js} +3 -3
- package/server/{remote-agents-BfQBE6MN.js → remote-agents-C2C6z9tj.js} +6 -33
- package/server/{remote-agents-DlvbzO7m.js → remote-agents-DYY5fFpd.js} +1 -1
- package/server/{remote-completion-BgkiSQmx.js → remote-completion-2Kb4IDg_.js} +13 -13
- package/server/{remote-8W2Yhygw.js → remote-rN0ecjHE.js} +3 -3
- package/server/resume-BFLl-yLn.js +3 -0
- package/server/{review-agent-D025Wt7w.js → review-agent-BZvk0N5G.js} +31 -23
- package/server/{review-agent-Rub0OpZc.js → review-agent-CpSHLzed.js} +1 -1
- package/server/{review-artifacts-CX951jTU.js → review-artifacts-PCo53YMn.js} +5 -19
- package/server/{review-context-DGGGR_w5.js → review-context-M7QtJlJq.js} +8 -8
- package/server/{review-monitor-0_qqMcnS.js → review-monitor-BLC5mTTg.js} +2 -2
- package/server/{review-status-Br6lAFGO.js → review-status-77N3PoZr.js} +1 -1
- package/server/{review-status-4qqLkRMu.js → review-status-DANr0t-v.js} +33 -59
- package/server/{review-status-enrichment-Cr8m3uVL.js → review-status-enrichment-DwOg4UfL.js} +3 -3
- package/server/{review-status-sync-D3KUhsdA.js → review-status-sync-Bd08OOFA.js} +1 -1
- package/server/{review-status-sync-OC-l1lNt.js → review-status-sync-BjTUJ5fx.js} +2 -2
- package/server/{review-verdict-feedback-YOzmsq9G.js → review-verdict-feedback-BsFLjN_6.js} +1 -1
- package/server/{review-verdict-feedback-DrWMuRaj.js → review-verdict-feedback-CBf-J_wS.js} +8 -8
- package/server/{rollup-CnxbwaLH.js → rollup-Bu0f2EyN.js} +8 -8
- package/server/{rollup-DmazRY0j.js → rollup-DTCCdEy4.js} +1 -1
- package/server/{scanner-DE1MqAaF.js → scanner-BlZ2vB7j.js} +7 -7
- package/server/{sequence-io-C0uoqfGx.js → sequence-io-ylyDtz2J.js} +4 -4
- package/server/{sequencer-agent-i-b2u4SJ.js → sequencer-agent-DsWQ-87H.js} +6 -17
- package/server/server.js +5670 -6392
- package/server/{service-D0_gh2tl.js → service-CLVBC_1Y.js} +116 -90
- package/server/{session-fork-DZ12vipL.js → session-fork-DlEIAhRy.js} +2 -2
- package/server/session-history-bnOFKMwf.js +168 -0
- package/server/settings-CP3GGon2.js +2 -0
- package/server/{settings-ByqjPtFO.js → settings-Cqa-8nyj.js} +2 -2
- package/server/{settings-DCC4BAqj.js → settings-gJrdLZy2.js} +3 -3
- package/server/{shadow-engineering-BhnmtW5m.js → shadow-engineering-fq1YEKV3.js} +3 -3
- package/server/{shadow-state-ByXZehsy.js → shadow-state-BqeFAygK.js} +1 -1
- package/server/{shadow-state-CKm8xWX9.js → shadow-state-RptE9Cau.js} +2 -2
- package/server/shadow-utils-BMWr5tRT.js +39 -0
- package/server/{ship-log-DE_0Cv_i.js → ship-log-BRQQi2lU.js} +1 -1
- package/server/{smart-compaction-D5Zen3AA.js → smart-compaction-CmoXpjeU.js} +7 -7
- package/server/{smart-compaction-h4_ca6Uk.js → smart-compaction-DldUel4B.js} +1 -1
- package/server/{spawn-planning-session-Dueit4WX.js → spawn-planning-session-CoS6LTc6.js} +16 -16
- package/server/{spawn-planning-session-Bgi7Ub02.js → spawn-planning-session-DT2tSMxo.js} +1 -1
- package/server/{specialist-completion-BZ8M-WZ0.js → specialist-completion-pJtESo7m.js} +1 -1
- package/server/{specialist-context-BMq83C58.js → specialist-context-CspI4Eog.js} +5 -5
- package/server/{specialist-handoff-logger-BxX1YefH.js → specialist-handoff-logger-Duz9RGvk.js} +2 -2
- package/server/{specialist-logs-BWZYcJ6P.js → specialist-logs-DtSkPJZK.js} +3 -3
- package/server/{specialists-ZkW4Mb7U.js → specialists-CywEMwxk.js} +1 -1
- package/server/{specialists-8ZAguXef.js → specialists-D9-dMUtI.js} +1 -1
- package/server/{specialists-BudKrjOu.js → specialists-Dax7tqXC.js} +1817 -560
- package/server/{specialists-DrPrC9Y9.js → specialists-GF42OOqd.js} +18 -18
- package/server/specs-VwcFtEDi.js +3 -0
- package/server/{src-DHn4Rd2F.js → src-By3D85Ry.js} +77 -1
- package/server/{src-Dv6L03vW.js → src-CqyFg52C.js} +5 -5
- package/server/{src-DNUUqkec.js → src-DhxM-eCb.js} +6 -6
- package/server/{stack-health-Dclm7_tu.js → stack-health-BsEVrJZ6.js} +1 -1
- package/server/{stack-health-DxsTx7II.js → stack-health-C-SnpRHh.js} +2 -2
- package/server/stale-task-claims-vTxmRzLi.js +69 -0
- package/server/state-home-Bur1y4oH.js +213 -0
- package/server/{state-mapping-BvAgFK8n.js → state-mapping-Ci0pkac4.js} +1 -1
- package/server/state-migrate-D3VveYfO.js +362 -0
- package/server/{stuck-remediation-CFWUP8_I.js → stuck-remediation-B699-p8v.js} +63 -46
- package/server/{stuck-remediation-CLHd-lrF.js → stuck-remediation-CaFYYTQW.js} +1 -1
- package/server/{summary-fork-CKc01Our.js → summary-fork-BxnF8Xh0.js} +2 -2
- package/server/{summary-fork-CtCwBJ2Z.js → summary-fork-COqYpVa3.js} +8 -8
- package/server/supervisor/{paths-3R6b989k.js → paths-Bk6hJRH9.js} +4 -3
- package/server/supervisor/pty-supervisor.js +2 -2
- package/server/supervisor/{pty-token-CScQ32Rj.js → pty-token-BZS5GYdG.js} +2 -2
- package/server/supervisor-eWAAmXKu.js +2 -0
- package/server/{supervisor-BA5D72Qa.js → supervisor-liMgIPDF.js} +2 -2
- package/server/{swarm-readiness-CL5sM9B1.js → swarm-readiness-sXB1vhzo.js} +3 -3
- package/server/{system-prerequisites-DmFSXIE5.js → system-prerequisites-Bz6KdkFJ.js} +1 -13
- package/server/{teardown-workspace-DWmFJzTw.js → teardown-workspace-DvzqnmUF.js} +14 -71
- package/server/{test-agent-queue-DjsQoV5X.js → test-agent-queue-hAU1Ah08.js} +6 -6
- package/server/{test-verdict-BSqsQp3G.js → test-verdict-CRsPpByy.js} +1 -1
- package/server/{test-verdict-D1AmZ2c0.js → test-verdict-CXMLATGc.js} +1 -1
- package/server/{tldr-daemon-C-MGomL8.js → tldr-daemon-Bam7Xhoo.js} +2 -2
- package/server/{tldr-daemon-DD9rI5gA.js → tldr-daemon-DhGwd88s.js} +1 -1
- package/server/tmux-C-rgxRDA.js +3 -0
- package/server/{tmux-C_d-lSIq.js → tmux-U55cNGFG.js} +92 -4
- package/server/{token-DfBf1bsd.js → token-Dsa-i36o.js} +2 -2
- package/server/{token-util-CROoF5ic.js → token-util-BWNpH96m.js} +1 -1
- package/server/token-util-DRt0j2nQ.js +3 -0
- package/server/{tracker-config-CNODpd11.js → tracker-config-OkdbaUCm.js} +2 -2
- package/server/{tracker-utils-Ch2_5GGf.js → tracker-utils-CghXMF3q.js} +2 -2
- package/server/{tracker-utils-B9ZoVA9b.js → tracker-utils-DdzUiPNU.js} +1 -1
- package/server/{traefik-connect-BF4x_LUQ.js → traefik-connect-CZYB3dlm.js} +1 -1
- package/server/{tunnel-r_5nHAI6.js → tunnel-D1YxesBL.js} +3 -3
- package/server/{tunnel-YD80_IHr.js → tunnel-DjlzgTl3.js} +1 -1
- package/server/typed-errors-CH4roFIj.js +3 -0
- package/server/{typed-errors-BEJhbjJg.js → typed-errors-n_Tnb4Fh.js} +3 -4
- package/server/{types-CE1m_daD.js → types-DOjWNv3Z.js} +1 -1
- package/server/{types-33JEP4LZ.js → types-DXBMm4mX.js} +1 -1
- package/server/{uat-train-DDI00aqD.js → uat-train-CaaWs9Rp.js} +1 -1
- package/server/{uat-train-DjkFWXge.js → uat-train-CqN34zFx.js} +24 -25
- package/server/{validation-DUTiJnyz.js → validation-4-z2Cw4z.js} +70 -23
- package/server/validation-DpTNakM6.js +3 -0
- package/server/verification-artifact-DK1xb1zG.js +56 -0
- package/server/verification-artifact-JD_edpZ9.js +2 -0
- package/server/{verification-runner-inLgeQux.js → verification-runner-BjHN80pJ.js} +338 -58
- package/server/verification-runner-ShYu5Ph3.js +2 -0
- package/server/{work-agent-prompt-fZljjA1_.js → work-agent-prompt-BiJ43Der.js} +12 -88
- package/server/workflows-B4C3lY9E.js +2 -0
- package/server/{workflows-oBnJ7Tm0.js → workflows-DkTotz_m.js} +17 -24
- package/server/{workspace-CNuW2j41.js → workspace-CuN0ev4Z.js} +3 -3
- package/server/{workspace-B2WOW9Hw.js → workspace-DQ4vVivd.js} +1 -1
- package/server/{workspace-config-CBgMGhWs.js → workspace-config-C77NKnsV.js} +1 -1
- package/server/{workspace-manager-DjUAJCSs.js → workspace-manager-B1mYn0lN.js} +1 -1
- package/server/{workspace-manager-CB-R07R3.js → workspace-manager-Beeo2aKF.js} +23 -48
- package/server/{workspace-metadata-9Nn5kgRl.js → workspace-metadata-BZC5BmoP.js} +2 -2
- package/server/{workspace-metadata-Fd58uUQG.js → workspace-metadata-Cy7_ZACL.js} +1 -1
- package/server/{workspaces-BjWXntty.js → workspaces-CGuzW1Ia.js} +191 -153
- package/sync-sources/hooks/ask-user-question-hook +7 -1
- package/sync-sources/hooks/codex-notify-hook +64 -8
- package/sync-sources/hooks/record-cost-event.js +1109 -36
- package/sync-sources/hooks/record-cost-event.js.map +1 -1
- package/sync-sources/hooks/statusline.sh +2 -2
- package/sync-sources/hooks/work-agent-stop-hook +1 -2
- package/server/acceptance-criteria-DHZk2ceV.js +0 -33
- package/server/agent-runtime-mirror-DrWxopNA.js +0 -37
- package/server/agent-state-EP2QFV9n.js +0 -3
- package/server/agents-DCvyTXNU.js +0 -3
- package/server/auto-commit-QAfsu3Sb.js +0 -3
- package/server/bd-process-lock-D3S4T4o-.js +0 -390
- package/server/beads-BGGxrkZ5.js +0 -649
- package/server/beads-CYsLiyIM.js +0 -2
- package/server/beads-query-B1DlJVp9.js +0 -95
- package/server/beads-restore-CyygSmmn.js +0 -23
- package/server/cli-ClIQwgMI.js +0 -3
- package/server/codex-B7DTpwEw.js +0 -3
- package/server/compact-beads-CK_hHEnB.js +0 -3
- package/server/compact-beads-DKL54y6j.js +0 -94
- package/server/deacon-swarm-BY5hKNaU.js +0 -2
- package/server/dist-DGTwcZhI.js +0 -3
- package/server/export-Dx_qJ3h8.js +0 -87
- package/server/forge-XlDgPQWs.js +0 -2
- package/server/hume-K1pi8jC4.js +0 -3
- package/server/inspect-agent-477VxQim.js +0 -2
- package/server/lifecycle-C_73gi-C.js +0 -14
- package/server/merge-ops-PzqsW69V.js +0 -2
- package/server/projects-KJ94e50I.js +0 -3
- package/server/public/assets/chunk-BO2N2NFS-ClukPsZQ.js +0 -103
- package/server/public/assets/index-DUFDmvmH.css +0 -1
- package/server/public/assets/index-DnTZ2QeN.js +0 -796
- package/server/public/assets/mermaid-GHXKKRXX-DZJOwgBG.js +0 -1
- package/server/rally-Dc2Wnxw2.js +0 -3
- package/server/record-pyB6VA32.js +0 -3
- package/server/recovery-trip-Dfh1tNHn.js +0 -98
- package/server/resolver-dTpSSzaH.js +0 -158
- package/server/resume-DhcIqsTm.js +0 -3
- package/server/settings-yydgaqhv.js +0 -2
- package/server/specs-DwoAEGrW.js +0 -3
- package/server/supervisor-DHjumXlL.js +0 -2
- package/server/tmux-x291Gjjb.js +0 -3
- package/server/token-util-xNaV-00f.js +0 -3
- package/server/tracker-config-DItsdelv.js +0 -3
- package/server/typed-errors-DSPn_xWP.js +0 -3
- package/server/validation-ict8hnXk.js +0 -3
- package/server/verification-runner-ATaLbpr5.js +0 -2
- package/server/workflows-tU7KKxQi.js +0 -2
- package/server/writer-CQMGzEkw.js +0 -3
- package/server/writer-fe1-8iGc.js +0 -251
|
@@ -1,43 +1,42 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Fn as init_projects, Jr as getOverdeckHome, Sr as init_errors, Vr as encodeClaudeProjectDir, Yr as init_paths, Z as resolveModel, ar as parseIssueIdSync, bn as extractTeamPrefix, cn as init_state_plane, fr as FsError, kn as getProjectSync, ln as isStatePlaneOnlyStatus, nr as extractPrefixSync, pr as GitError, qn as resolveProjectFromIssueSync, rr as init_issue_id, sr as resolveIssueIdSync, t as init_config_yaml, tr as extractNumberSync, wn as findProjectByTeamSync, zn as listProjectsSync } from "./config-yaml-CqaAyn8y.js";
|
|
2
|
+
import { Q as getWorkAgentLifecycleStateSync, ct as getTrustedOrigins, ht as jsonResponse, n as _serverManagedMerges, pt as httpHandler, st as getHeaderFromMap, ut as normalizeOrigin } from "./specialists-Dax7tqXC.js";
|
|
3
3
|
import { a as init_activity_logger, n as emitActivityEntrySync } from "./activity-logger-pcbf-e30.js";
|
|
4
|
-
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-
|
|
5
|
-
import {
|
|
6
|
-
import { _ as setDeaconIgnored, c as init_review_status, f as markWorkspaceStuck, g as setAutoMerge, s as getReviewStatusSync, u as loadReviewStatuses, y as setReviewStatusSync } from "./review-status-
|
|
7
|
-
import { _ as init_queue_position, a as EventStoreService, g as findPositionInQueueSync, h as computeQueuePositionFromStatusSync, s as init_domain_services } from "./issue-lifecycle-
|
|
8
|
-
import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-
|
|
9
|
-
import {
|
|
10
|
-
import { f as CostWriter, l as CostDoorLive } from "./service-
|
|
11
|
-
import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-
|
|
12
|
-
import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-
|
|
13
|
-
import { o as getInternalTokenSync, s as init_internal_token } from "./internal-token-
|
|
14
|
-
import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME, p as init_types } from "./types-
|
|
15
|
-
import { o as init_merge_sync, r as getAllActiveQueues } from "./merge-sync-
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import { a as
|
|
22
|
-
import { a as readEventsFromLineSync, i as init_events, l as init_wal, o as readEventsSync, r as getLastEventMetadataSync, t as appendCostEventSync } from "./events-
|
|
23
|
-
import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-
|
|
24
|
-
import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-
|
|
25
|
-
import { a as init_jsonl_parser, t as getActiveSessionModelSync } from "./jsonl-parser-
|
|
26
|
-
import { i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-
|
|
27
|
-
import { T as verifyAppCanMerge, f as init_github_app, m as isIntegrationPermissionError } from "./github-app-
|
|
28
|
-
import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync } from "./workspace-metadata-
|
|
29
|
-
import { n as
|
|
30
|
-
import { n as
|
|
31
|
-
import {
|
|
32
|
-
import {
|
|
33
|
-
import {
|
|
34
|
-
import {
|
|
35
|
-
import {
|
|
36
|
-
import {
|
|
37
|
-
import {
|
|
38
|
-
import {
|
|
39
|
-
import { t as
|
|
40
|
-
import { n as init_rebuild_stack, t as composeProjectNameForWorkspace } from "./rebuild-stack-D19i080j.js";
|
|
4
|
+
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-_Kx1m9pm.js";
|
|
5
|
+
import { J as init_child_env, R as sessionExists, S as init_tmux, i as capturePane, k as listSessionNames, q as buildChildEnvWithoutTmuxSync } from "./tmux-U55cNGFG.js";
|
|
6
|
+
import { _ as setDeaconIgnored, c as init_review_status, f as markWorkspaceStuck, g as setAutoMerge, s as getReviewStatusSync, u as loadReviewStatuses, y as setReviewStatusSync } from "./review-status-DANr0t-v.js";
|
|
7
|
+
import { _ as init_queue_position, a as EventStoreService, g as findPositionInQueueSync, h as computeQueuePositionFromStatusSync, s as init_domain_services } from "./issue-lifecycle-CFR8TJ22.js";
|
|
8
|
+
import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-BoqD1Pxz.js";
|
|
9
|
+
import { L as messageAgent, Nn as getAgentState, Rt as transitionIssueToInReview, Y as spawnAgent, gr as saveAgentRuntimeState, i as listRunningAgents, mr as getAgentRuntimeStateSync, s as init_agents } from "./queries-C0LCGG21.js";
|
|
10
|
+
import { f as CostWriter, l as CostDoorLive } from "./service-CLVBC_1Y.js";
|
|
11
|
+
import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-OkdbaUCm.js";
|
|
12
|
+
import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-CghXMF3q.js";
|
|
13
|
+
import { o as getInternalTokenSync, s as init_internal_token } from "./internal-token-Cl-1IxaE.js";
|
|
14
|
+
import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME, p as init_types } from "./types-DOjWNv3Z.js";
|
|
15
|
+
import { o as init_merge_sync, r as getAllActiveQueues } from "./merge-sync-B2KSk54U.js";
|
|
16
|
+
import { O as findVBriefByIssue, _ as VBRIEF_INSPECTION_POLICIES, c as mergeRecordStatusOverrides, j as readVBriefDocument, k as init_vbrief_index, o as init_io, r as findPlan, s as isPlanningComplete, u as readPlan, v as init_types$1 } from "./io-DkC4sFSy.js";
|
|
17
|
+
import { it as findConversationForCostSessionSync, k as init_conversations } from "./conversations-BX5aD-6F.js";
|
|
18
|
+
import { i as normalizeModelOverrideSync, r as init_model_validation } from "./launcher-generator-BXLM9f4b.js";
|
|
19
|
+
import { f as init_config, m as loadConfigSync$1 } from "./config-DfaUXr6r.js";
|
|
20
|
+
import { a as init_stack_health, i as getWorkspaceStackHealth, n as collectDockerContainerLifecycleSnapshot } from "./stack-health-C-SnpRHh.js";
|
|
21
|
+
import { a as criticalPath, l as init_dag, t as actionableDoc } from "./dag-C6kYyF17.js";
|
|
22
|
+
import { a as readEventsFromLineSync, i as init_events, l as init_wal, o as readEventsSync, r as getLastEventMetadataSync, t as appendCostEventSync } from "./events-2eFUPdqz.js";
|
|
23
|
+
import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-Beeo2aKF.js";
|
|
24
|
+
import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-BqGNCzvN.js";
|
|
25
|
+
import { a as init_jsonl_parser, t as getActiveSessionModelSync } from "./jsonl-parser-Cd5jIqh7.js";
|
|
26
|
+
import { i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-CzCW9Ifl.js";
|
|
27
|
+
import { T as verifyAppCanMerge, f as init_github_app, m as isIntegrationPermissionError } from "./github-app-tUbb8Ldr.js";
|
|
28
|
+
import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync } from "./workspace-metadata-BZC5BmoP.js";
|
|
29
|
+
import { n as enrichReviewStatusFromSessions } from "./review-status-enrichment-DwOg4UfL.js";
|
|
30
|
+
import { n as generateDailySummary, r as init_cli } from "./cli-C33xPZNm.js";
|
|
31
|
+
import { a as getDiffStat, i as getDiffBase, o as init_review_context, r as getChangedFiles } from "./review-context-M7QtJlJq.js";
|
|
32
|
+
import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-Bam7Xhoo.js";
|
|
33
|
+
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-D6DNhe9j.js";
|
|
34
|
+
import { F as enqueueMerge, I as getAllActiveQueues$1, L as getCurrentMerge, P as dequeueMerge, z as markMergeProcessing } from "./merge-BsDgUxFz.js";
|
|
35
|
+
import { n as init_release_set, t as getReleaseSetSync } from "./release-set-7pnxFOWR.js";
|
|
36
|
+
import { i as init_conflict_gate, r as getCachedConflictGateMergeability } from "./conflict-gate-BF_zhcmb.js";
|
|
37
|
+
import { r as runVerificationForIssue } from "./verification-runner-BjHN80pJ.js";
|
|
38
|
+
import { t as teardownWorkspace } from "./teardown-workspace-DvzqnmUF.js";
|
|
39
|
+
import { n as init_rebuild_stack, t as composeProjectNameForWorkspace } from "./rebuild-stack-Ddv6W017.js";
|
|
41
40
|
import { basename, dirname, join, resolve, sep } from "node:path";
|
|
42
41
|
import { Effect, Layer, Option } from "effect";
|
|
43
42
|
import { closeSync, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, renameSync, writeFileSync } from "fs";
|
|
@@ -974,7 +973,7 @@ const postWorkspaceContainerActionRoute = HttpRouter.add("POST", "/api/workspace
|
|
|
974
973
|
}
|
|
975
974
|
if (!workspacePath) return jsonResponse({ error: `Workspace not found for ${issueId}` }, { status: 404 });
|
|
976
975
|
if (!composeFile && ["start", "restart"].includes(action)) {
|
|
977
|
-
const { ensureDevcontainerSync } = yield* Effect.promise(() => import("./ensure-devcontainer-
|
|
976
|
+
const { ensureDevcontainerSync } = yield* Effect.promise(() => import("./ensure-devcontainer-C6gyUQdE.js"));
|
|
978
977
|
if (ensureDevcontainerSync({
|
|
979
978
|
workspacePath,
|
|
980
979
|
issueId
|
|
@@ -2484,7 +2483,6 @@ function buildLocalMainRecoveryError(projectPath, aheadCount, behindCount) {
|
|
|
2484
2483
|
* stay owned by ../workspaces.js and are imported here.
|
|
2485
2484
|
*/
|
|
2486
2485
|
init_agents();
|
|
2487
|
-
init_beads_query();
|
|
2488
2486
|
init_merge_agent();
|
|
2489
2487
|
init_operations();
|
|
2490
2488
|
init_git_activity();
|
|
@@ -2594,7 +2592,7 @@ async function reconcileGitHubMergeStatus(issueId, status) {
|
|
|
2594
2592
|
const prRef = parseGitHubPullRequestUrl(status.prUrl);
|
|
2595
2593
|
if (!prRef) return false;
|
|
2596
2594
|
try {
|
|
2597
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
2595
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
|
|
2598
2596
|
if (!isGitHubAppConfigured()) return false;
|
|
2599
2597
|
const prState = await Effect.runPromise(getPullRequestState(prRef.owner, prRef.repo, prRef.number));
|
|
2600
2598
|
console.log(`[merge] reconcileGitHubMergeStatus: ${issueId} PR #${prRef.number} merged=${prState.merged} state=${prState.state}`);
|
|
@@ -2612,7 +2610,7 @@ async function reconcileGitHubMergeStatus(issueId, status) {
|
|
|
2612
2610
|
}
|
|
2613
2611
|
}
|
|
2614
2612
|
/**
|
|
2615
|
-
* Build a rich PR body with issue link,
|
|
2613
|
+
* Build a rich PR body with issue link, tasks task summary, and AC checklist
|
|
2616
2614
|
* from the vBRIEF plan. Exported for testing.
|
|
2617
2615
|
*/
|
|
2618
2616
|
async function buildRichPRBody(issueId, workspacePath) {
|
|
@@ -2635,18 +2633,6 @@ async function buildRichPRBody(issueId, workspacePath) {
|
|
|
2635
2633
|
}
|
|
2636
2634
|
}
|
|
2637
2635
|
} catch {}
|
|
2638
|
-
try {
|
|
2639
|
-
const beads = (await Effect.runPromise(queryBeadsForIssue(workspacePath, issueId, { acquisitionTimeoutMs: 500 }))).beads;
|
|
2640
|
-
if (beads.length > 0) {
|
|
2641
|
-
lines.push("## Implementation Tasks");
|
|
2642
|
-
lines.push("");
|
|
2643
|
-
for (const bead of beads) {
|
|
2644
|
-
const checked = bead.status === "closed" ? "x" : " ";
|
|
2645
|
-
lines.push(`- [${checked}] ${bead.title.replace(/^[^:]+:\s*/, "")}`);
|
|
2646
|
-
}
|
|
2647
|
-
lines.push("");
|
|
2648
|
-
}
|
|
2649
|
-
} catch {}
|
|
2650
2636
|
return lines.join("\n") || `Automated PR for ${issueId}`;
|
|
2651
2637
|
}
|
|
2652
2638
|
async function ensurePRExists(issueId, options) {
|
|
@@ -2846,8 +2832,8 @@ async function triggerMerge(issueId) {
|
|
|
2846
2832
|
try {
|
|
2847
2833
|
if (workspaceInfo.isRemote && workspaceInfo.vmName) {
|
|
2848
2834
|
console.log(`[merge] Remote workspace detected for ${issueId}, using review artifact merge...`);
|
|
2849
|
-
const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-
|
|
2850
|
-
const { getForgeAdapter } = await import("./forge-
|
|
2835
|
+
const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-vuE3MEVt.js");
|
|
2836
|
+
const { getForgeAdapter } = await import("./forge-DJy3Zx4s.js");
|
|
2851
2837
|
const remotePrimaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
|
|
2852
2838
|
const remoteTargetBranch = remotePrimaryRepo?.targetBranch || "main";
|
|
2853
2839
|
const remoteForge = remotePrimaryRepo?.forge || "github";
|
|
@@ -2882,7 +2868,7 @@ async function triggerMerge(issueId) {
|
|
|
2882
2868
|
readyForMerge: false
|
|
2883
2869
|
});
|
|
2884
2870
|
completePendingOperation(issueId, null);
|
|
2885
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
2871
|
+
const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
|
|
2886
2872
|
await postMergeLifecycle(issueId, projectPath);
|
|
2887
2873
|
return {
|
|
2888
2874
|
success: true,
|
|
@@ -2919,10 +2905,10 @@ async function triggerMerge(issueId) {
|
|
|
2919
2905
|
const projectConfig = findProjectByTeamSync(issuePrefix);
|
|
2920
2906
|
if (projectConfig?.workspace?.type === "polyrepo" && projectConfig?.workspace?.repos) {
|
|
2921
2907
|
console.log(`[merge] Polyrepo detected for ${issueId}, coordinating merge set...`);
|
|
2922
|
-
const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-
|
|
2923
|
-
const { runQualityGates } = await import("./validation-
|
|
2924
|
-
const { getForgeAdapter } = await import("./forge-
|
|
2925
|
-
const { messageAgent } = await import("./agents-
|
|
2908
|
+
const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-vuE3MEVt.js");
|
|
2909
|
+
const { runQualityGates } = await import("./validation-DpTNakM6.js");
|
|
2910
|
+
const { getForgeAdapter } = await import("./forge-DJy3Zx4s.js");
|
|
2911
|
+
const { messageAgent } = await import("./agents-BA15AQqo.js");
|
|
2926
2912
|
let mergeSet = getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId);
|
|
2927
2913
|
if (!mergeSet) {
|
|
2928
2914
|
const error = `No merge set found for ${issueId}`;
|
|
@@ -3192,7 +3178,7 @@ async function triggerMerge(issueId) {
|
|
|
3192
3178
|
readyForMerge: false
|
|
3193
3179
|
});
|
|
3194
3180
|
completePendingOperation(issueId, null);
|
|
3195
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
3181
|
+
const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
|
|
3196
3182
|
advanceQueue();
|
|
3197
3183
|
await postMergeLifecycle(issueId, projectPath);
|
|
3198
3184
|
return {
|
|
@@ -3203,8 +3189,8 @@ async function triggerMerge(issueId) {
|
|
|
3203
3189
|
repos: mergeResults
|
|
3204
3190
|
};
|
|
3205
3191
|
}
|
|
3206
|
-
const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-
|
|
3207
|
-
const { getForgeAdapter } = await import("./forge-
|
|
3192
|
+
const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-vuE3MEVt.js");
|
|
3193
|
+
const { getForgeAdapter } = await import("./forge-DJy3Zx4s.js");
|
|
3208
3194
|
const primaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
|
|
3209
3195
|
const targetBranch = primaryRepo?.targetBranch || "main";
|
|
3210
3196
|
const primaryForge = primaryRepo?.forge || "github";
|
|
@@ -3246,7 +3232,7 @@ async function triggerMerge(issueId) {
|
|
|
3246
3232
|
};
|
|
3247
3233
|
}
|
|
3248
3234
|
if (githubPrRef) try {
|
|
3249
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
3235
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
|
|
3250
3236
|
if (isGitHubAppConfigured()) {
|
|
3251
3237
|
const prState = await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number));
|
|
3252
3238
|
if (prState.state !== "OPEN" && !prState.merged) {
|
|
@@ -3307,7 +3293,7 @@ async function triggerMerge(issueId) {
|
|
|
3307
3293
|
readyForMerge: false
|
|
3308
3294
|
});
|
|
3309
3295
|
completePendingOperation(issueId, null);
|
|
3310
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
3296
|
+
const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
|
|
3311
3297
|
await postMergeLifecycle(issueId, projectPath, branchName);
|
|
3312
3298
|
return {
|
|
3313
3299
|
success: true,
|
|
@@ -3321,13 +3307,13 @@ async function triggerMerge(issueId) {
|
|
|
3321
3307
|
} catch (prStateErr) {
|
|
3322
3308
|
console.warn(`[merge] Pre-merge PR state check failed for ${issueId}: ${prStateErr.message} — proceeding (check is best-effort)`);
|
|
3323
3309
|
}
|
|
3324
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
3310
|
+
const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
|
|
3325
3311
|
const agentId = `agent-${issueId.toLowerCase()}`;
|
|
3326
3312
|
const rebaseMsg = `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.`;
|
|
3327
3313
|
setReviewStatus(issueId, { mergeStep: "rebasing" });
|
|
3328
3314
|
console.log(`[merge] Rebasing ${branchName} onto ${targetBranch} for ${issueId} (agent=${await Effect.runPromise(sessionExists(agentId)) ? "running" : "stopped"})...`);
|
|
3329
3315
|
{
|
|
3330
|
-
const { beginShipLog, appendShipLog } = await import("./ship-log-
|
|
3316
|
+
const { beginShipLog, appendShipLog } = await import("./ship-log-BRQQi2lU.js");
|
|
3331
3317
|
beginShipLog(issueId);
|
|
3332
3318
|
appendShipLog(issueId, `Ship started: rebasing ${branchName} onto ${targetBranch}…`, "rebasing");
|
|
3333
3319
|
}
|
|
@@ -3455,7 +3441,7 @@ async function triggerMerge(issueId) {
|
|
|
3455
3441
|
});
|
|
3456
3442
|
let skipLocalVerification = false;
|
|
3457
3443
|
if (primaryForge === "github" && artifactUrl) try {
|
|
3458
|
-
const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-
|
|
3444
|
+
const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
|
|
3459
3445
|
if (isGitHubAppConfigured()) {
|
|
3460
3446
|
const ref = parsePullRequestRef({ url: artifactUrl });
|
|
3461
3447
|
if (ref) {
|
|
@@ -3476,12 +3462,12 @@ async function triggerMerge(issueId) {
|
|
|
3476
3462
|
} catch (ciErr) {
|
|
3477
3463
|
console.warn(`[merge] CI-state check failed (${ciErr.message?.slice(0, 120)}) — falling back to local verification for ${issueId}`);
|
|
3478
3464
|
}
|
|
3479
|
-
const { appendShipLog } = await import("./ship-log-
|
|
3465
|
+
const { appendShipLog } = await import("./ship-log-BRQQi2lU.js");
|
|
3480
3466
|
if (skipLocalVerification) appendShipLog(issueId, "✓ Local verification skipped — CI already green on this exact commit", "verifying");
|
|
3481
3467
|
const verifyResult = skipLocalVerification ? { outcome: "passed" } : await (async () => {
|
|
3482
3468
|
console.log(`[merge] Running post-rebase verification for ${issueId}...`);
|
|
3483
3469
|
appendShipLog(issueId, "Running post-rebase verification (full quality-gate suite)…", "verifying");
|
|
3484
|
-
const { runVerificationForIssue } = await import("./verification-runner-
|
|
3470
|
+
const { runVerificationForIssue } = await import("./verification-runner-ShYu5Ph3.js");
|
|
3485
3471
|
return Effect.runPromise(runVerificationForIssue(issueId, workspacePath, { isRemote: false }, "merge-verify", {
|
|
3486
3472
|
syncTargetBranch: false,
|
|
3487
3473
|
onGateLog: (line) => appendShipLog(issueId, line, "verifying")
|
|
@@ -3514,7 +3500,7 @@ async function triggerMerge(issueId) {
|
|
|
3514
3500
|
console.log(`[merge] Post-rebase verification ${verifyResult.outcome} for ${issueId}`);
|
|
3515
3501
|
setReviewStatus(issueId, { mergeStep: "reporting-statuses" });
|
|
3516
3502
|
try {
|
|
3517
|
-
const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-
|
|
3503
|
+
const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-BrYwK_Gb.js");
|
|
3518
3504
|
if (githubPrRef && isGitHubAppConfigured()) {
|
|
3519
3505
|
const sha = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).headSha.trim();
|
|
3520
3506
|
if (sha) {
|
|
@@ -3542,7 +3528,7 @@ async function triggerMerge(issueId) {
|
|
|
3542
3528
|
} catch (prMergeErr) {
|
|
3543
3529
|
console.error(`[merge] Review artifact merge threw for ${issueId}:`, prMergeErr);
|
|
3544
3530
|
try {
|
|
3545
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
3531
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
|
|
3546
3532
|
if (githubPrRef && isGitHubAppConfigured()) {
|
|
3547
3533
|
artifactMerged = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).merged;
|
|
3548
3534
|
if (artifactMerged) console.log(`[merge] Race-detected: PR #${githubPrRef.number} for ${issueId} was already merged despite thrown error; proceeding`);
|
|
@@ -3659,8 +3645,8 @@ const postForgeApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge
|
|
|
3659
3645
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
3660
3646
|
if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
|
|
3661
3647
|
return yield* Effect.promise(async () => {
|
|
3662
|
-
const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-
|
|
3663
|
-
const { getForgeAdapter } = await import("./forge-
|
|
3648
|
+
const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-vuE3MEVt.js");
|
|
3649
|
+
const { getForgeAdapter } = await import("./forge-DJy3Zx4s.js");
|
|
3664
3650
|
let mergeSet = getMergeSetSync(issueId);
|
|
3665
3651
|
if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
|
|
3666
3652
|
const results = [];
|
|
@@ -3748,8 +3734,8 @@ const postForgeMergeRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge-m
|
|
|
3748
3734
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
3749
3735
|
if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
|
|
3750
3736
|
return yield* Effect.promise(async () => {
|
|
3751
|
-
const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-
|
|
3752
|
-
const { getForgeAdapter } = await import("./forge-
|
|
3737
|
+
const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-vuE3MEVt.js");
|
|
3738
|
+
const { getForgeAdapter } = await import("./forge-DJy3Zx4s.js");
|
|
3753
3739
|
let mergeSet = getMergeSetSync(issueId);
|
|
3754
3740
|
if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
|
|
3755
3741
|
const results = [];
|
|
@@ -3942,7 +3928,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
|
|
|
3942
3928
|
console.log(`[approve] Starting role pipeline for ${issueId}...`);
|
|
3943
3929
|
let reviewResult;
|
|
3944
3930
|
try {
|
|
3945
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
3931
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
|
|
3946
3932
|
reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
3947
3933
|
issueId,
|
|
3948
3934
|
workspace: workspacePath,
|
|
@@ -3989,7 +3975,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
|
|
|
3989
3975
|
}
|
|
3990
3976
|
console.log(`[approve] Step 3/3: Running server-side rebase for ${issueId}...`);
|
|
3991
3977
|
try {
|
|
3992
|
-
const { rebaseFeatureBranch } = await import("./merge-rebase-
|
|
3978
|
+
const { rebaseFeatureBranch } = await import("./merge-rebase-Czth9ggm.js");
|
|
3993
3979
|
const workspacePathForRebase = join(projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
|
|
3994
3980
|
const rebaseResult = await Effect.runPromise(rebaseFeatureBranch(workspacePathForRebase, branchName, "main", issueId));
|
|
3995
3981
|
if (!rebaseResult.success) {
|
|
@@ -4009,7 +3995,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
|
|
|
4009
3995
|
completePendingOperation(issueId, pushResult.error);
|
|
4010
3996
|
return jsonResponse({ error: pushResult.error }, { status: pushResult.httpStatus });
|
|
4011
3997
|
}
|
|
4012
|
-
const { approve: lifecycleApprove } = await import("./lifecycle-
|
|
3998
|
+
const { approve: lifecycleApprove } = await import("./lifecycle-D7aQUnTO.js");
|
|
4013
3999
|
const ghResolved = resolveGitHubIssueSync(issueId);
|
|
4014
4000
|
const isGitHubIssueFlag = ghResolved.isGitHub;
|
|
4015
4001
|
const lifecycleCtx = {
|
|
@@ -4043,7 +4029,7 @@ const getMergeQueueRoute = HttpRouter.add("GET", "/api/merge-queue", httpHandler
|
|
|
4043
4029
|
})));
|
|
4044
4030
|
const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pipeline/notify", httpHandler(Effect.gen(function* () {
|
|
4045
4031
|
const request = yield* HttpServerRequest.HttpServerRequest;
|
|
4046
|
-
const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-
|
|
4032
|
+
const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-D-t28de5.js"));
|
|
4047
4033
|
const expected = getInternalTokenSync();
|
|
4048
4034
|
if (!expected) return jsonResponse({
|
|
4049
4035
|
ok: false,
|
|
@@ -4057,7 +4043,7 @@ const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pi
|
|
|
4057
4043
|
}, 403);
|
|
4058
4044
|
const event = yield* readJsonBody;
|
|
4059
4045
|
const type = event.type;
|
|
4060
|
-
const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-
|
|
4046
|
+
const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-3frIvSi3.js"));
|
|
4061
4047
|
switch (type) {
|
|
4062
4048
|
case "status_changed": {
|
|
4063
4049
|
const issueId = event.issueId;
|
|
@@ -4636,7 +4622,7 @@ const getWorkspaceRoute = HttpRouter.add("GET", "/api/workspaces/:issueId", http
|
|
|
4636
4622
|
const salvageableStashes = (yield* listStashes(workspacePath)).filter(isSalvageableStash).filter((entry) => entry.issueId === issueId.toUpperCase());
|
|
4637
4623
|
const hasPlan = (yield* findPlan(workspacePath)) !== null;
|
|
4638
4624
|
const planningComplete = hasPlan ? yield* isPlanningComplete(workspacePath) : false;
|
|
4639
|
-
const
|
|
4625
|
+
const hasTasks = planningComplete;
|
|
4640
4626
|
const issueData = getCostsForIssueSync(issueId);
|
|
4641
4627
|
const agents = yield* Effect.promise(() => getCachedRunningAgents());
|
|
4642
4628
|
const resolvedCost = resolveIssueHeadlineCost({
|
|
@@ -4667,8 +4653,8 @@ const getWorkspaceRoute = HttpRouter.add("GET", "/api/workspaces/:issueId", http
|
|
|
4667
4653
|
salvageableStashes,
|
|
4668
4654
|
planningState: {
|
|
4669
4655
|
hasPlan,
|
|
4670
|
-
|
|
4671
|
-
|
|
4656
|
+
hasTasks,
|
|
4657
|
+
tasksCount: 0,
|
|
4672
4658
|
planningComplete,
|
|
4673
4659
|
workspacePath
|
|
4674
4660
|
},
|
|
@@ -4832,7 +4818,7 @@ const patchWorkspaceTieredExecutionRoute = HttpRouter.add("PATCH", "/api/workspa
|
|
|
4832
4818
|
if (override !== "on" && override !== "off" && override !== null && override !== void 0) return jsonResponse({ error: "Invalid tiered-execution override" }, { status: 400 });
|
|
4833
4819
|
const project = getProjectSync(extractPrefixSync(issueId) ?? issueId.split("-")[0]);
|
|
4834
4820
|
if (!project) return jsonResponse({ error: "Project not found" }, { status: 404 });
|
|
4835
|
-
yield* Effect.promise(() => import("./record-
|
|
4821
|
+
yield* Effect.promise(() => import("./record-DLOqfbkI.js").then((m) => m.writeRecordTieredExecutionOverride(project, issueId, override)));
|
|
4836
4822
|
const projectPath = project.path;
|
|
4837
4823
|
const location = yield* resolvePlanLocation(projectPath, issueId);
|
|
4838
4824
|
if (!location) return jsonResponse({ error: "No vBRIEF plan found for this workspace" }, { status: 404 });
|
|
@@ -5143,7 +5129,6 @@ init_domain_services();
|
|
|
5143
5129
|
init_review_status();
|
|
5144
5130
|
init_release_set();
|
|
5145
5131
|
init_conflict_gate();
|
|
5146
|
-
init_beads_restore();
|
|
5147
5132
|
init_agents();
|
|
5148
5133
|
const execAsync$2 = promisify(exec);
|
|
5149
5134
|
const MAX_AUTO_REQUEUE = 25;
|
|
@@ -5159,7 +5144,6 @@ function getDirtyWorkspaceErrorForReviewRequestStatus(status, workspacePath) {
|
|
|
5159
5144
|
}
|
|
5160
5145
|
async function getDirtyWorkspaceErrorForReviewRequest(workspacePath, workspaceInfo) {
|
|
5161
5146
|
try {
|
|
5162
|
-
if (!workspaceInfo.isRemote) await Effect.runPromise(restoreTrackedBeadsExport(workspacePath));
|
|
5163
5147
|
const statusCmd = "git status --porcelain -uno";
|
|
5164
5148
|
return getDirtyWorkspaceErrorForReviewRequestStatus(workspaceInfo.isRemote && workspaceInfo.vmName ? (await execAsync$2(flyExecCmd(workspaceInfo.vmName, `cd ${workspacePath} && ${statusCmd}`), {
|
|
5165
5149
|
encoding: "utf-8",
|
|
@@ -5269,7 +5253,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
|
|
|
5269
5253
|
console.log(`Feature branch push note: ${errorMessage(pushErr)}`);
|
|
5270
5254
|
}
|
|
5271
5255
|
try {
|
|
5272
|
-
const { createReviewArtifactsForIssue } = await import("./review-artifacts-
|
|
5256
|
+
const { createReviewArtifactsForIssue } = await import("./review-artifacts-PCo53YMn.js");
|
|
5273
5257
|
const artifactResult = await Effect.runPromise(createReviewArtifactsForIssue(issueId, workspacePath));
|
|
5274
5258
|
const primaryArtifact = artifactResult.mergeSet?.repos.find((repo) => !!repo.artifactUrl);
|
|
5275
5259
|
artifactResult.mergeSet?.repos.find((repo) => repo.mergeStatus !== "skipped")?.targetBranch;
|
|
@@ -5324,7 +5308,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
|
|
|
5324
5308
|
} catch {}
|
|
5325
5309
|
return;
|
|
5326
5310
|
}
|
|
5327
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
5311
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
|
|
5328
5312
|
const prUrl = getReviewStatusSync(issueId)?.prUrl;
|
|
5329
5313
|
const reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
5330
5314
|
issueId,
|
|
@@ -5425,7 +5409,6 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
|
|
|
5425
5409
|
message: `${canonicalIssueId} is executing remotely on ${wsInfoRerun.vmName ?? "a fly machine"} — run 'pan admin remote reap --issue ${canonicalIssueId}' after the agent finishes, then review.`
|
|
5426
5410
|
}, { status: 409 });
|
|
5427
5411
|
const workspacePathRerun = wsInfoRerun.localPath || join(projectPathRerun, "workspaces", `feature-${issueLowerRerun}`);
|
|
5428
|
-
if (!wsInfoRerun.isRemote) yield* restoreTrackedBeadsExport(workspacePathRerun);
|
|
5429
5412
|
const dirtyError = yield* Effect.promise(() => getDirtyWorkspaceErrorForReviewRequest(workspacePathRerun, wsInfoRerun));
|
|
5430
5413
|
if (dirtyError) {
|
|
5431
5414
|
console.log(`[request-review] Rejecting ${issueId}: dirty workspace on rerun path`);
|
|
@@ -5464,7 +5447,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
|
|
|
5464
5447
|
console.log(`[request-review] Feature branch push note: ${errorMessage(pushErr)}`);
|
|
5465
5448
|
}
|
|
5466
5449
|
const prUrl = getReviewStatusSync(issueId)?.prUrl;
|
|
5467
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
5450
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
|
|
5468
5451
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
5469
5452
|
issueId,
|
|
5470
5453
|
workspace: workspacePathRerun,
|
|
@@ -5514,7 +5497,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
|
|
|
5514
5497
|
});
|
|
5515
5498
|
} else {
|
|
5516
5499
|
const workspacePath = join(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
|
|
5517
|
-
const { spawnRun } = yield* Effect.promise(() => import("./agents-
|
|
5500
|
+
const { spawnRun } = yield* Effect.promise(() => import("./agents-BA15AQqo.js"));
|
|
5518
5501
|
try {
|
|
5519
5502
|
const testRun = yield* Effect.promise(() => spawnRun(issueId, "test", { workspace: workspacePath }));
|
|
5520
5503
|
setReviewStatus(issueId, { testStatus: "testing" });
|
|
@@ -5564,7 +5547,6 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
|
|
|
5564
5547
|
success: false,
|
|
5565
5548
|
error: "Workspace does not exist"
|
|
5566
5549
|
}, { status: 400 });
|
|
5567
|
-
if (!workspaceInfo.isRemote) yield* restoreTrackedBeadsExport(workspacePath);
|
|
5568
5550
|
const dirtyWorkspaceError = yield* Effect.promise(() => getDirtyWorkspaceErrorForReviewRequest(workspacePath, workspaceInfo));
|
|
5569
5551
|
if (dirtyWorkspaceError) return jsonResponse({
|
|
5570
5552
|
success: false,
|
|
@@ -5603,7 +5585,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
|
|
|
5603
5585
|
autoRequeueCount: newCount
|
|
5604
5586
|
}, { status: 500 });
|
|
5605
5587
|
const result = yield* Effect.promise(async () => {
|
|
5606
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
5588
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
|
|
5607
5589
|
return await Effect.runPromise(spawnReviewRoleForIssue({
|
|
5608
5590
|
issueId,
|
|
5609
5591
|
workspace: workspacePath,
|
|
@@ -5698,7 +5680,16 @@ init_archive_planning();
|
|
|
5698
5680
|
init_projects();
|
|
5699
5681
|
init_review_status();
|
|
5700
5682
|
init_agents();
|
|
5683
|
+
init_model_validation();
|
|
5684
|
+
init_config_yaml();
|
|
5701
5685
|
const execAsync$1 = promisify(exec);
|
|
5686
|
+
function resolveConfiguredReviewModel() {
|
|
5687
|
+
try {
|
|
5688
|
+
return resolveModel("review");
|
|
5689
|
+
} catch {
|
|
5690
|
+
return null;
|
|
5691
|
+
}
|
|
5692
|
+
}
|
|
5702
5693
|
/**
|
|
5703
5694
|
* Core logic for POST /api/review/:issueId/reset (synchronous, testable).
|
|
5704
5695
|
*
|
|
@@ -5907,7 +5898,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
|
|
|
5907
5898
|
const result = processResetReviewPipeline(issueId, resetWorkspace.exists);
|
|
5908
5899
|
if (result.httpStatus !== 200) return jsonResponse(result.body, { status: result.httpStatus });
|
|
5909
5900
|
try {
|
|
5910
|
-
const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-
|
|
5901
|
+
const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-DMQTJMP0.js"));
|
|
5911
5902
|
resetPostMergeState(issueId);
|
|
5912
5903
|
} catch (err) {
|
|
5913
5904
|
console.warn(`[reset-review] resetPostMergeState best-effort failed for ${issueId}:`, err);
|
|
@@ -5916,7 +5907,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
|
|
|
5916
5907
|
const rerun = body?.rerun === true;
|
|
5917
5908
|
if (rerun) try {
|
|
5918
5909
|
yield* Effect.promise(async () => {
|
|
5919
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
5910
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
|
|
5920
5911
|
const dispatchArgs = buildReviewRedispatchArgs(issueId, resetWorkspace, workspaceInfo, resolved);
|
|
5921
5912
|
if (dispatchArgs) {
|
|
5922
5913
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
@@ -5945,7 +5936,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
|
|
|
5945
5936
|
const postWorkspaceReviewPurgeRoute = HttpRouter.add("POST", "/api/review/:issueId/purge", httpHandler(Effect.gen(function* () {
|
|
5946
5937
|
const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
|
|
5947
5938
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
5948
|
-
const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-
|
|
5939
|
+
const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-CpSHLzed.js"));
|
|
5949
5940
|
const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
|
|
5950
5941
|
const purge = yield* Effect.promise(() => purgeReviewAgentsForIssue(projectKey, issueId));
|
|
5951
5942
|
const workspaceInfo = getWorkspaceInfoForIssue(issueId);
|
|
@@ -5975,8 +5966,8 @@ const postWorkspaceAbortReviewRoute = HttpRouter.add("POST", "/api/review/:issue
|
|
|
5975
5966
|
success: false,
|
|
5976
5967
|
error: "Workspace does not exist"
|
|
5977
5968
|
}, { status: 400 });
|
|
5978
|
-
const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-
|
|
5979
|
-
const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-
|
|
5969
|
+
const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-Dc9aoVoG.js"));
|
|
5970
|
+
const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-CpSHLzed.js"));
|
|
5980
5971
|
const { killed, failed } = yield* killAllReviewerSessions(resolveProjectFromIssueSync(issueId)?.projectKey, issueId);
|
|
5981
5972
|
setReviewStatus(issueId, {
|
|
5982
5973
|
reviewStatus: "pending",
|
|
@@ -6048,19 +6039,21 @@ const getReviewConfigRoute = HttpRouter.add("GET", "/api/review/:issueId/config"
|
|
|
6048
6039
|
const issueId = ((yield* HttpRouter.params)["issueId"] ?? "").toUpperCase();
|
|
6049
6040
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
6050
6041
|
return jsonResponse(yield* Effect.promise(async () => {
|
|
6051
|
-
const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-
|
|
6052
|
-
const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-
|
|
6042
|
+
const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-DLOqfbkI.js");
|
|
6043
|
+
const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-CpSHLzed.js");
|
|
6053
6044
|
const project = resolveProjectForIssue(issueId);
|
|
6054
6045
|
const record = project ? readIssueRecordSync(project, issueId) : null;
|
|
6055
6046
|
return {
|
|
6056
6047
|
issueId,
|
|
6057
6048
|
override: {
|
|
6058
6049
|
reviewMode: record?.reviewMode ?? null,
|
|
6059
|
-
reReviewScope: record?.reReviewScope ?? null
|
|
6050
|
+
reReviewScope: record?.reReviewScope ?? null,
|
|
6051
|
+
reviewModel: record?.reviewModel ?? null
|
|
6060
6052
|
},
|
|
6061
6053
|
resolved: {
|
|
6062
6054
|
reviewMode: resolveReviewMode(issueId),
|
|
6063
|
-
reReviewScope: resolveReReviewScope(issueId)
|
|
6055
|
+
reReviewScope: resolveReReviewScope(issueId),
|
|
6056
|
+
reviewModel: record?.reviewModel ?? resolveConfiguredReviewModel()
|
|
6064
6057
|
}
|
|
6065
6058
|
};
|
|
6066
6059
|
}));
|
|
@@ -6071,29 +6064,40 @@ const postReviewConfigRoute = HttpRouter.add("POST", "/api/review/:issueId/confi
|
|
|
6071
6064
|
const body = yield* readJsonBody;
|
|
6072
6065
|
const hasMode = Object.prototype.hasOwnProperty.call(body ?? {}, "reviewMode");
|
|
6073
6066
|
const hasScope = Object.prototype.hasOwnProperty.call(body ?? {}, "reReviewScope");
|
|
6074
|
-
|
|
6067
|
+
const hasModel = Object.prototype.hasOwnProperty.call(body ?? {}, "reviewModel");
|
|
6068
|
+
if (!hasMode && !hasScope && !hasModel) return jsonResponse({ error: "Provide reviewMode, reReviewScope, and/or reviewModel (null clears the override)" }, { status: 400 });
|
|
6075
6069
|
if (hasMode && body.reviewMode !== null && body.reviewMode !== "quick" && body.reviewMode !== "full" && body.reviewMode !== "none") return jsonResponse({ error: "reviewMode must be quick, full, none, or null" }, { status: 400 });
|
|
6076
6070
|
if (hasScope && body.reReviewScope !== null && body.reReviewScope !== "all" && body.reReviewScope !== "changed" && body.reReviewScope !== "blockers") return jsonResponse({ error: "reReviewScope must be all, changed, blockers, or null" }, { status: 400 });
|
|
6071
|
+
let reviewModel;
|
|
6072
|
+
if (hasModel && body.reviewModel !== null) try {
|
|
6073
|
+
reviewModel = normalizeModelOverrideSync(body.reviewModel);
|
|
6074
|
+
} catch (error) {
|
|
6075
|
+
return jsonResponse({ error: error instanceof Error ? error.message : String(error) }, { status: 400 });
|
|
6076
|
+
}
|
|
6077
6077
|
return jsonResponse(yield* Effect.promise(async () => {
|
|
6078
|
-
const {
|
|
6079
|
-
const {
|
|
6080
|
-
const
|
|
6081
|
-
const record =
|
|
6082
|
-
|
|
6083
|
-
|
|
6084
|
-
|
|
6085
|
-
|
|
6086
|
-
|
|
6078
|
+
const { resolveProjectForIssue } = await import("./record-DLOqfbkI.js");
|
|
6079
|
+
const { updateIssueRecord } = await import("./record-update-CDp7aTaT.js");
|
|
6080
|
+
const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-CpSHLzed.js");
|
|
6081
|
+
const record = await updateIssueRecord(resolveProjectForIssue(issueId), issueId, (current) => {
|
|
6082
|
+
if (hasMode) if (body.reviewMode === null) delete current.reviewMode;
|
|
6083
|
+
else current.reviewMode = body.reviewMode;
|
|
6084
|
+
if (hasScope) if (body.reReviewScope === null) delete current.reReviewScope;
|
|
6085
|
+
else current.reReviewScope = body.reReviewScope;
|
|
6086
|
+
if (hasModel) if (body.reviewModel === null) delete current.reviewModel;
|
|
6087
|
+
else current.reviewModel = reviewModel;
|
|
6088
|
+
});
|
|
6087
6089
|
return {
|
|
6088
6090
|
success: true,
|
|
6089
6091
|
issueId,
|
|
6090
6092
|
override: {
|
|
6091
6093
|
reviewMode: record.reviewMode ?? null,
|
|
6092
|
-
reReviewScope: record.reReviewScope ?? null
|
|
6094
|
+
reReviewScope: record.reReviewScope ?? null,
|
|
6095
|
+
reviewModel: record.reviewModel ?? null
|
|
6093
6096
|
},
|
|
6094
6097
|
resolved: {
|
|
6095
6098
|
reviewMode: resolveReviewMode(issueId),
|
|
6096
|
-
reReviewScope: resolveReReviewScope(issueId)
|
|
6099
|
+
reReviewScope: resolveReReviewScope(issueId),
|
|
6100
|
+
reviewModel: record.reviewModel ?? resolveConfiguredReviewModel()
|
|
6097
6101
|
}
|
|
6098
6102
|
};
|
|
6099
6103
|
}));
|
|
@@ -6122,6 +6126,29 @@ function findWorkspaceComposeFile(workspacePath) {
|
|
|
6122
6126
|
}
|
|
6123
6127
|
return null;
|
|
6124
6128
|
}
|
|
6129
|
+
/**
|
|
6130
|
+
* Discover the compose project name from existing container labels. The
|
|
6131
|
+
* declared-name sources (compose file, dev script) can be gone — teardown or
|
|
6132
|
+
* cleanup removes the workspace .devcontainer dir while the stack's containers
|
|
6133
|
+
* survive — and the label on those containers is then the only truth.
|
|
6134
|
+
*/
|
|
6135
|
+
async function discoverComposeProjectName(issueId) {
|
|
6136
|
+
const suffix = `feature-${issueId.toLowerCase()}`;
|
|
6137
|
+
try {
|
|
6138
|
+
const { stdout } = await execFileAsync$1("docker", [
|
|
6139
|
+
"ps",
|
|
6140
|
+
"-a",
|
|
6141
|
+
"--format",
|
|
6142
|
+
"{{.Label \"com.docker.compose.project\"}}"
|
|
6143
|
+
], {
|
|
6144
|
+
encoding: "utf-8",
|
|
6145
|
+
timeout: 1e4
|
|
6146
|
+
});
|
|
6147
|
+
return [...new Set(stdout.split("\n").map((line) => line.trim()).filter(Boolean))].find((name) => name.endsWith(suffix)) ?? null;
|
|
6148
|
+
} catch {
|
|
6149
|
+
return null;
|
|
6150
|
+
}
|
|
6151
|
+
}
|
|
6125
6152
|
function resolveWorkspaceStackContext(issueId) {
|
|
6126
6153
|
const parsed = parseIssueIdSync(issueId);
|
|
6127
6154
|
if (!parsed) return {
|
|
@@ -6140,10 +6167,6 @@ function resolveWorkspaceStackContext(issueId) {
|
|
|
6140
6167
|
status: 404
|
|
6141
6168
|
};
|
|
6142
6169
|
const composeFile = findWorkspaceComposeFile(workspacePath);
|
|
6143
|
-
if (!composeFile) return {
|
|
6144
|
-
error: `No workspace compose file found for ${normalizedIssueId}`,
|
|
6145
|
-
status: 404
|
|
6146
|
-
};
|
|
6147
6170
|
try {
|
|
6148
6171
|
return {
|
|
6149
6172
|
issueId: normalizedIssueId,
|
|
@@ -6258,14 +6281,30 @@ const postWorkspaceStackActionRoute = HttpRouter.add("POST", "/api/workspaces/:i
|
|
|
6258
6281
|
if ("error" in context) return jsonResponse({ error: context.error }, { status: context.status });
|
|
6259
6282
|
const pendingOperation = action === "start" ? "start-stack" : action === "stop" ? "stop-stack" : "restart-stack";
|
|
6260
6283
|
const description = `${action[0].toUpperCase()}${action.slice(1)} stack for ${context.issueId}`;
|
|
6261
|
-
|
|
6262
|
-
|
|
6263
|
-
|
|
6264
|
-
|
|
6265
|
-
|
|
6266
|
-
|
|
6267
|
-
|
|
6268
|
-
|
|
6284
|
+
let composeArgs;
|
|
6285
|
+
let cwd;
|
|
6286
|
+
if (context.composeFile) {
|
|
6287
|
+
composeArgs = [
|
|
6288
|
+
"compose",
|
|
6289
|
+
"-f",
|
|
6290
|
+
context.composeFile,
|
|
6291
|
+
"-p",
|
|
6292
|
+
context.composeProjectName,
|
|
6293
|
+
action
|
|
6294
|
+
];
|
|
6295
|
+
cwd = dirname(context.composeFile);
|
|
6296
|
+
} else {
|
|
6297
|
+
const discovered = yield* Effect.promise(() => discoverComposeProjectName(context.issueId));
|
|
6298
|
+
if (!discovered) return jsonResponse({ error: `No compose file or stack containers found for ${context.issueId} — use Rebuild to recreate the stack` }, { status: 404 });
|
|
6299
|
+
composeArgs = [
|
|
6300
|
+
"compose",
|
|
6301
|
+
"-p",
|
|
6302
|
+
discovered,
|
|
6303
|
+
action
|
|
6304
|
+
];
|
|
6305
|
+
cwd = context.workspacePath;
|
|
6306
|
+
}
|
|
6307
|
+
const activityId = spawnCommandActivity("docker", composeArgs, description, cwd, {
|
|
6269
6308
|
issueId: context.issueId,
|
|
6270
6309
|
pendingOperation
|
|
6271
6310
|
});
|
|
@@ -6280,11 +6319,12 @@ const getWorkspaceStackLogsRoute = HttpRouter.add("GET", "/api/workspaces/:issue
|
|
|
6280
6319
|
if (authError) return authError;
|
|
6281
6320
|
const context = resolveWorkspaceStackContext((yield* HttpRouter.params)["issueId"] ?? "");
|
|
6282
6321
|
if ("error" in context) return jsonResponse({ error: context.error }, { status: context.status });
|
|
6322
|
+
const stackName = context.composeFile ? context.composeProjectName : (yield* Effect.promise(() => discoverComposeProjectName(context.issueId))) ?? context.composeProjectName;
|
|
6283
6323
|
const { stdout } = yield* Effect.promise(() => execFileAsync$1("docker", [
|
|
6284
6324
|
"ps",
|
|
6285
6325
|
"-a",
|
|
6286
6326
|
"--filter",
|
|
6287
|
-
`label=com.docker.compose.project=${
|
|
6327
|
+
`label=com.docker.compose.project=${stackName}`,
|
|
6288
6328
|
"--format",
|
|
6289
6329
|
"{{.Names}}"
|
|
6290
6330
|
], {
|
|
@@ -6312,7 +6352,7 @@ const getWorkspaceStackLogsRoute = HttpRouter.add("GET", "/api/workspaces/:issue
|
|
|
6312
6352
|
return jsonResponse({
|
|
6313
6353
|
success: true,
|
|
6314
6354
|
issueId: context.issueId,
|
|
6315
|
-
stackName
|
|
6355
|
+
stackName,
|
|
6316
6356
|
logs: chunks.join("\n\n")
|
|
6317
6357
|
});
|
|
6318
6358
|
})));
|
|
@@ -6340,7 +6380,7 @@ const postWorkspaceReapRoute = HttpRouter.add("POST", "/api/workspaces/:issueId/
|
|
|
6340
6380
|
projectName: context.projectName
|
|
6341
6381
|
}, {
|
|
6342
6382
|
deleteBranches: false,
|
|
6343
|
-
|
|
6383
|
+
clearTasks: false
|
|
6344
6384
|
}));
|
|
6345
6385
|
for (const step of steps) {
|
|
6346
6386
|
const detail = step.details?.length ? `: ${step.details.join("; ")}` : "";
|
|
@@ -6470,7 +6510,7 @@ async function readWorkspacePlanningMarkdown(issueId, fileName) {
|
|
|
6470
6510
|
*/
|
|
6471
6511
|
async function readWorkspaceContinueFile(_projectPath, workspacePath, issueId) {
|
|
6472
6512
|
try {
|
|
6473
|
-
const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-
|
|
6513
|
+
const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-DLOqfbkI.js");
|
|
6474
6514
|
const recordView = readRecordContinueViewSync(resolveProjectForIssue(issueId) ?? getProjectConfigFromWorkspacePath(workspacePath), issueId);
|
|
6475
6515
|
return recordView ? JSON.stringify(recordView, null, 2) : null;
|
|
6476
6516
|
} catch {
|
|
@@ -7034,16 +7074,6 @@ const postWorkspaceStartRoute = HttpRouter.add("POST", "/api/issues/:issueId/sta
|
|
|
7034
7074
|
const issueLower = issueId.toLowerCase();
|
|
7035
7075
|
const workspacePath = join(projectPath, "workspaces", `feature-${issueLower}`);
|
|
7036
7076
|
if (!existsSync$1(workspacePath)) return jsonResponse({ error: "Workspace does not exist" }, { status: 400 });
|
|
7037
|
-
const workspaceBeadsDir = join(workspacePath, ".beads");
|
|
7038
|
-
if (!existsSync$1(workspaceBeadsDir)) {
|
|
7039
|
-
const projectRootBeadsDir = join(projectPath, ".beads");
|
|
7040
|
-
if (existsSync$1(projectRootBeadsDir)) try {
|
|
7041
|
-
yield* Effect.promise(() => execAsync(`cp -r "${projectRootBeadsDir}" "${workspaceBeadsDir}"`, { encoding: "utf-8" }));
|
|
7042
|
-
console.log(`[workspace/start] Copied beads from project root to workspace for ${issueId}`);
|
|
7043
|
-
} catch (e) {
|
|
7044
|
-
console.warn(`[workspace/start] Could not copy beads: ${e}`);
|
|
7045
|
-
}
|
|
7046
|
-
}
|
|
7047
7077
|
const devScript = join(workspacePath, "dev");
|
|
7048
7078
|
const devScriptInContainer = join(workspacePath, ".devcontainer", "dev");
|
|
7049
7079
|
if (!existsSync$1(devScript)) if (existsSync$1(devScriptInContainer)) try {
|
|
@@ -7239,7 +7269,7 @@ const getWorkspaceReviewStatusRoute = HttpRouter.add("GET", "/api/review/:issueI
|
|
|
7239
7269
|
if (queuePosition === null) try {
|
|
7240
7270
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
7241
7271
|
if (resolved) {
|
|
7242
|
-
const { getQueueForProject } = yield* Effect.promise(() => import("./merge-
|
|
7272
|
+
const { getQueueForProject } = yield* Effect.promise(() => import("./merge-Dervs4BF.js"));
|
|
7243
7273
|
const mergePos = findPositionInQueueSync(issueId, getQueueForProject(resolved.projectKey).map((e) => ({
|
|
7244
7274
|
id: String(e.id),
|
|
7245
7275
|
type: "task",
|
|
@@ -7277,7 +7307,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
7277
7307
|
const workspaceInfo = getWorkspaceInfoForIssue(issueId);
|
|
7278
7308
|
if (workspaceInfo.exists && workspaceInfo.localPath) {
|
|
7279
7309
|
const localPath = workspaceInfo.localPath;
|
|
7280
|
-
const { getWorkspaceGitInfo } = yield* Effect.promise(() => import("./git-utils-
|
|
7310
|
+
const { getWorkspaceGitInfo } = yield* Effect.promise(() => import("./git-utils-q8jNoBts.js"));
|
|
7281
7311
|
try {
|
|
7282
7312
|
const gitInfo = yield* getWorkspaceGitInfo(localPath);
|
|
7283
7313
|
if (gitInfo.HEAD) update.reviewedAtCommit = gitInfo.HEAD;
|
|
@@ -7292,7 +7322,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
7292
7322
|
if (verificationStatus) update.verificationStatus = verificationStatus;
|
|
7293
7323
|
if (readyForMerge !== void 0) update.readyForMerge = readyForMerge;
|
|
7294
7324
|
const status = setReviewStatus(issueId, update);
|
|
7295
|
-
const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-
|
|
7325
|
+
const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-D9-dMUtI.js"));
|
|
7296
7326
|
const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
|
|
7297
7327
|
if (reviewStatus && [
|
|
7298
7328
|
"passed",
|
|
@@ -7310,7 +7340,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
7310
7340
|
const agentId = `agent-${issueId.toLowerCase()}`;
|
|
7311
7341
|
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.`;
|
|
7312
7342
|
try {
|
|
7313
|
-
const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-
|
|
7343
|
+
const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-CULeOOY4.js"));
|
|
7314
7344
|
const wsInfo = getWorkspaceInfoForIssue(issueId);
|
|
7315
7345
|
const fileResult = yield* Effect.promise(() => writeFeedbackFile({
|
|
7316
7346
|
issueId,
|
|
@@ -7374,7 +7404,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
7374
7404
|
const agentId = `agent-${issueId.toLowerCase()}`;
|
|
7375
7405
|
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.`;
|
|
7376
7406
|
try {
|
|
7377
|
-
const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-
|
|
7407
|
+
const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-CULeOOY4.js"));
|
|
7378
7408
|
const wsInfo = getWorkspaceInfoForIssue(issueId);
|
|
7379
7409
|
const fileResult = yield* Effect.promise(() => writeFeedbackFile({
|
|
7380
7410
|
issueId,
|
|
@@ -7397,16 +7427,24 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
7397
7427
|
if (testStatus === "passed") {
|
|
7398
7428
|
setReviewStatus(issueId, { readyForMerge: true });
|
|
7399
7429
|
console.log(`[review-status] ${issueId} marked ready for merge after test=passed`);
|
|
7430
|
+
emitActivityEntrySync({
|
|
7431
|
+
source: "ship",
|
|
7432
|
+
level: "success",
|
|
7433
|
+
issueId,
|
|
7434
|
+
message: `${issueId} is ready. Open Awaiting Merge and click MERGE when you are ready to land it.`,
|
|
7435
|
+
link: "/awaiting-merge",
|
|
7436
|
+
desktop: true
|
|
7437
|
+
});
|
|
7400
7438
|
yield* Effect.promise(async () => {
|
|
7401
7439
|
try {
|
|
7402
|
-
const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-
|
|
7440
|
+
const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-Dc9aoVoG.js");
|
|
7403
7441
|
const project = resolveProjectFromIssueSync(issueId);
|
|
7404
7442
|
const repo = (project ? getProjectSync(project.projectKey) : null)?.github_repo;
|
|
7405
7443
|
if (!repo || !repo.includes("/")) return;
|
|
7406
7444
|
const [owner, name] = repo.split("/");
|
|
7407
7445
|
const wsInfo = getWorkspaceInfoForIssue(issueId);
|
|
7408
7446
|
if (!wsInfo?.localPath) return;
|
|
7409
|
-
const { postOverdeckTestsStatus } = await import("./github-app-
|
|
7447
|
+
const { postOverdeckTestsStatus } = await import("./github-app-BrYwK_Gb.js");
|
|
7410
7448
|
await postOverdeckTestsStatus(wsInfo.localPath, owner, name, "success", "Test specialist passed");
|
|
7411
7449
|
} catch (err) {
|
|
7412
7450
|
console.warn(`[review-status] Failed to post overdeck/tests for ${issueId}: ${err.message}`);
|
|
@@ -7421,7 +7459,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
7421
7459
|
}
|
|
7422
7460
|
})));
|
|
7423
7461
|
const notifyAgentId = `agent-${issueId.toLowerCase()}`;
|
|
7424
|
-
yield* Effect.tryPromise(() => messageAgent(notifyAgentId, `ALL CHECKS PASSED for ${issueId}. Review: passed. Tests: passed. Your work is complete
|
|
7462
|
+
yield* Effect.tryPromise(() => messageAgent(notifyAgentId, `ALL CHECKS PASSED for ${issueId}. Review: passed. Tests: passed. Your work is complete. Tell the operator to open Overdeck's Awaiting Merge page and click MERGE when ready. You may stop working on this issue.`)).pipe(Effect.tap(() => Effect.sync(() => console.log(`[review-status] Notified ${notifyAgentId} that all checks passed`))), Effect.catch((err) => Effect.sync(() => console.log(`[review-status] Could not notify work agent for ${issueId} (may not be running): ${err instanceof Error ? err.message : String(err)}`))));
|
|
7425
7463
|
}
|
|
7426
7464
|
}
|
|
7427
7465
|
return jsonResponse(status);
|
|
@@ -7448,7 +7486,7 @@ const postWorkspaceRefreshTokenRoute = HttpRouter.add("POST", "/api/workspaces/:
|
|
|
7448
7486
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
7449
7487
|
const issueLower = issueId.toLowerCase();
|
|
7450
7488
|
const workspacePath = join(getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]), "workspaces", `feature-${issueLower}`);
|
|
7451
|
-
const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-
|
|
7489
|
+
const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-BrYwK_Gb.js"));
|
|
7452
7490
|
if (!isGitHubAppConfigured()) return jsonResponse({
|
|
7453
7491
|
success: false,
|
|
7454
7492
|
error: "GitHub App not configured"
|
|
@@ -7463,4 +7501,4 @@ const workspacesRouteLayer = Layer.mergeAll(workspaceDataRouteLayer, postWorkspa
|
|
|
7463
7501
|
//#endregion
|
|
7464
7502
|
export { hasDashboardInternalToken as C, getWorkspacePathForIssue as D, rejectUnsafeDashboardMutationRequest as E, dashboardSessionCookieHeader as S, rejectUnauthorizedDashboardSessionMintRequest as T, syncCacheSync as _, pushApproveMain as a, resolveIssueHeadlineCost as b, triggerMerge as c, reconcile as d, reconcilePiTranscripts as f, rebuildCacheSync as g, getCostsForIssueSync as h, mergeOpsRouteLayer as i, resumeQueuedMerges as l, migrateAllSessionsSync as m, buildRichPRBody as n, reconcileGitHubMergeStatus as o, reclassifyUnknownCostEventsSync as p, isBranchAlreadyRebased as r, shouldBlockApproveForDirtyStatus as s, workspacesRouteLayer as t, syncWalFromAllProjects as u, processPendingFeedbackDeliveries as v, rejectUnauthorizedDashboardRequest as w, dashboardCsrfToken as x, getCachedRunningAgents as y };
|
|
7465
7503
|
|
|
7466
|
-
//# sourceMappingURL=workspaces-
|
|
7504
|
+
//# sourceMappingURL=workspaces-CGuzW1Ia.js.map
|