@overdeck/desktop 0.45.12 → 0.45.13
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 +33 -0
- package/package.json +7 -2
- package/server/{acceptance-criteria-1LHgD9vg.js → acceptance-criteria-CfujPRrz.js} +2 -2
- package/server/{advancing-selfheal-BqsLWqEM.js → advancing-selfheal-Bn5QiLtn.js} +4 -4
- package/server/{agent-gc-CUb52n7s.js → agent-gc-Cl9Nm0Zu.js} +3 -3
- package/server/{agent-state-D-moNwhA.js → agent-state-C6Rm6FPR.js} +1 -1
- package/server/{agent-state-service-BzESvLOf.js → agent-state-service-JhFzYCP_.js} +5 -5
- package/server/{agent-state-service-BaZH7sXJ.js → agent-state-service-U8feBf8t.js} +1 -1
- package/server/{agents-C4kZ8a2r.js → agents-CxbuBjID.js} +1 -1
- package/server/{agents-B5LfpLPv.js → agents-DqQa4Dq_.js} +88 -64
- package/server/{archive-planning-oX1pj6nY.js → archive-planning-CPitEZo4.js} +3 -3
- package/server/{archive-planning-BbZe-8IK.js → archive-planning-DmpT1_14.js} +1 -1
- package/server/{artifact-index-jobs-DGr6bxev.js → artifact-index-jobs-sMnNtPhy.js} +2 -2
- package/server/{auto-commit-CGQlb4rV.js → auto-commit-wZ9X7Isd.js} +1 -1
- package/server/{backlog-auto-trigger-BlJHikOm.js → backlog-auto-trigger-Cf9C8fwD.js} +2 -2
- package/server/{bd-process-lock-i3CYMS-B.js → bd-process-lock-D1aJxeYv.js} +2 -2
- package/server/{beads-BNU-fb48.js → beads-CivpXztb.js} +1 -1
- package/server/{beads-DD7fYCl5.js → beads-DRoj6-e1.js} +4 -4
- package/server/{beads-query-e6oku4P5.js → beads-query-tOsAYP5h.js} +2 -2
- package/server/{behavior-CPf0pbOt.js → behavior-D3d2mVyD.js} +3 -3
- package/server/{briefing-freshness-B2FdLwIv.js → briefing-freshness-BL3Q6p7R.js} +4 -4
- package/server/{checkpoint-manager-JryW6MpM.js → checkpoint-manager-DCxjQvP_.js} +2 -2
- package/server/{checkpoint-manager-eFgaMMu4.js → checkpoint-manager-j5URlFY7.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-qvOqvMuC.js → checkpoints-BoX1H2Hf.js} +2 -2
- package/server/{checkpoints-BK17oicz.js → checkpoints-Bu_M_Q9W.js} +1 -1
- package/server/claude-hooks-provision-D-jGXmu1.js +360 -0
- package/server/{claude-permissions-B6bWGh9d.js → claude-permissions-DxIjkOVl.js} +2 -2
- package/server/{claude-settings-overlay-BPdhTPjo.js → claude-settings-overlay-5b9X2S0C.js} +1 -1
- package/server/{claude-settings-overlay-CRyyKKXQ.js → claude-settings-overlay-BPDS6GfE.js} +2 -2
- package/server/cli-CqgiSAU8.js +3 -0
- package/server/{cli-B75AieAM.js → cli-s7bPWy-E.js} +9 -9
- package/server/{cliproxy-CCzwuSNe.js → cliproxy-BituqWtR.js} +2 -2
- package/server/{cliproxy-DOQf66G9.js → cliproxy-D3sHB0sI.js} +1 -1
- package/server/{close-issue-_X3MXJyG.js → close-issue-CrBE7voz.js} +4 -4
- package/server/{closed-issue-reaper-CLR7ClsO.js → closed-issue-reaper-BRQBc7Xa.js} +1 -1
- package/server/{closed-issue-reaper-BsUfBSjM.js → closed-issue-reaper-DX9mYUji.js} +9 -9
- package/server/{codex-CY-QRuU9.js → codex-Bi1ITSOo.js} +1 -1
- package/server/{codex-B4KEpX5V.js → codex-CO0HrK3j.js} +5 -5
- package/server/{compact-beads-cZds2MTr.js → compact-beads-CrA8-k10.js} +1 -1
- package/server/{compact-beads-uEDccC76.js → compact-beads-DUkCUFxA.js} +3 -3
- package/server/{config-DARrpYWA.js → config-B4_d7z7z.js} +1 -1
- package/server/{config-8sjaU6jZ.js → config-DsCxzjXK.js} +2 -2
- package/server/{config-yaml-ClpGgrf6.js → config-yaml-C_djSurJ.js} +2 -2
- package/server/{conflict-gate-Ds9_2yjd.js → conflict-gate-CpOn9KC-.js} +1 -1
- package/server/{conflict-gate-BtB_o-Vi.js → conflict-gate-D47Kl78u.js} +3 -3
- package/server/{context-layers-r2ywnQYA.js → context-layers-BNhUBTkf.js} +3 -3
- package/server/{context-layers-CRCk1QG7.js → context-layers-CHl3Nroz.js} +2 -2
- package/server/{control-settings-D1B3u6HP.js → control-settings-KyYNXZLv.js} +4 -4
- package/server/{conversation-compaction-D86Zo2Ci.js → conversation-compaction-D3aS5PnS.js} +8 -8
- package/server/{conversation-compaction-CZRVk4hg.js → conversation-compaction-D4Wed1BJ.js} +1 -1
- package/server/{conversation-service-CuTVU8dV.js → conversation-service-CFZIjs-M.js} +5 -5
- package/server/{conversation-service-CkL-6MuG.js → conversation-service-DcDB5usR.js} +1 -1
- package/server/{conversations-DfJKBDwB.js → conversations-BSOU5qnu.js} +4 -4
- package/server/{conversations-BmWEluPL.js → conversations-BbDPrz89.js} +1 -1
- package/server/{cost-DAPYN6iA.js → cost-BE_ulOrw.js} +3 -3
- package/server/{cost-CCnqa5xK.js → cost-CaiG63FG.js} +2 -2
- package/server/{cost-sync-BDL10Nwu.js → cost-sync-D6AX8jv-.js} +3 -3
- package/server/{dag-Dv2r5bVD.js → dag-BQFtXOuJ.js} +3 -3
- package/server/{dangerous-git-ops-Dcw7PbYo.js → dangerous-git-ops-04Ba-Qu3.js} +1 -1
- package/server/dashboard-db-worker.js +6 -6
- package/server/{deacon-CM0MxbS8.js → deacon-2EvA9Ci3.js} +97 -97
- package/server/{deacon-DYnZH7kC.js → deacon-Bz-6Wjmn.js} +3 -3
- package/server/deacon-swarm-B8pgK2a7.js +2 -0
- package/server/{deacon-swarm-BstYoz8Q.js → deacon-swarm-DYYOzHRH.js} +10 -10
- package/server/deacon.js +7 -7
- package/server/{devcontainer-renderer-CaYOG9JN.js → devcontainer-renderer-Dx0C7VWJ.js} +2 -2
- package/server/dist-BYSj075e.js +3 -0
- package/server/{dist-BIC8spJ0.js → dist-ya66D9ze.js} +1 -1
- package/server/{docker-DDI1shu3.js → docker-D2TbXDO6.js} +2 -2
- package/server/{ensure-devcontainer-CbSXvN9W.js → ensure-devcontainer-BIShzs3M.js} +1 -1
- package/server/{ensure-devcontainer-DCAg3ksz.js → ensure-devcontainer-BTiMfFp5.js} +3 -3
- package/server/{event-store-DU3HkZlN.js → event-store-C02Gprug.js} +1 -1
- package/server/{event-store-DCMqyI07.js → event-store-C71x6h0i.js} +3 -3
- package/server/{events-BfiosVAn.js → events-BFDuPV6n.js} +3 -3
- package/server/{events-DLRxpSuV.js → events-D2gP2-Yv.js} +1 -1
- package/server/{factory-BMtWV9iv.js → factory-ByfbrCab.js} +4 -4
- package/server/{feature-registry-population-DA7bO6Zn.js → feature-registry-population-CSH66UO8.js} +4 -4
- package/server/{feature-registry-storage-nAY1fbBt.js → feature-registry-storage-DW7dUefc.js} +2 -2
- package/server/{features-DMu7eGmU.js → features-x_aLR7U9.js} +2 -2
- package/server/{feedback-target-DHqcw3cN.js → feedback-target-BFo9fScH.js} +6 -6
- package/server/{feedback-target-B2SEai8-.js → feedback-target-C4VMPTZu.js} +1 -1
- package/server/{feedback-writer-qvm7UON7.js → feedback-writer-B9ZqnnX3.js} +4 -4
- package/server/{feedback-writer-DMBdS_jL.js → feedback-writer-DCyd75yJ.js} +1 -1
- package/server/{flywheel-Dfpx4bIV.js → flywheel-D9NKvWqb.js} +11 -11
- package/server/{flywheel-k4FPtCQ_.js → flywheel-DB48X7Nn.js} +1 -1
- package/server/{flywheel-D2LdPSic.js → flywheel-DwQCoZQG.js} +13 -13
- package/server/{flywheel-merge-order-CB4lbXeJ.js → flywheel-merge-order-DrjmFXg4.js} +6 -6
- package/server/{flywheel-merge-order-CttTazRY.js → flywheel-merge-order-f1bi5XIf.js} +1 -1
- package/server/{forge-CoPFXFyl.js → forge-C-SoKy8U.js} +2 -2
- package/server/forge-CUCYK7h_.js +2 -0
- package/server/{from-B0YoJl9-.js → from-fu7ZumnY.js} +1 -1
- package/server/{fts-db-DAHW1yA_.js → fts-db-CL-YzSRG.js} +2 -2
- package/server/{fts-operations-DDXDBi0d.js → fts-operations-Bylu5NjM.js} +2 -2
- package/server/{git-utils-B90Zjzfl.js → git-utils-C8koBs8j.js} +2 -2
- package/server/{git-utils-DbfC0zls.js → git-utils-Ym380hJZ.js} +1 -1
- package/server/{github-app-C7lftMNj.js → github-app-DIr70YLg.js} +1 -1
- package/server/{github-app-BecAnXRX.js → github-app-DhycHVLF.js} +2 -2
- package/server/{github-client-D21rCIXk.js → github-client-7gkcXcBS.js} +2 -2
- package/server/{github-client-BwtKZtM0.js → github-client-Ji9lUTNF.js} +1 -1
- package/server/{github-pr-lookup-CzVWuysl.js → github-pr-lookup-rt7T9FwA.js} +2 -2
- package/server/{harness-resolve-SkRJm4a7.js → harness-resolve-CvGXUnAF.js} +3 -3
- package/server/{health-events-BT0aAfeA.js → health-events-D4E1DLN-.js} +2 -2
- package/server/{health-events-DA_JLpgZ.js → health-events-DDfkoO5a.js} +1 -1
- package/server/{hooks-DxEn2BoY.js → hooks-D_6pAbuJ.js} +2 -2
- package/server/{hooks-BQxRXtRb.js → hooks-DvdnCVv6.js} +1 -1
- package/server/{idle-stack-reaper-C7fJL8jH.js → idle-stack-reaper-DNbV9-fj.js} +1 -1
- package/server/{idle-stack-reaper-DGy7tvC9.js → idle-stack-reaper-cDRXDpgE.js} +2 -2
- package/server/{infra-DE3C4PMr.js → infra-Clew3DpF.js} +50 -3
- package/server/{injection-Dt22tGvS.js → injection-QCIHOpk6.js} +1 -1
- package/server/{injection-Cc4Qt8LZ.js → injection-ql0Nddcn.js} +7 -7
- package/server/inspect-agent-D8UBDgfR.js +2 -0
- package/server/{inspect-agent-DOaCDkCF.js → inspect-agent-DY18KEx4.js} +9 -9
- package/server/{internal-token-B_1YLWLI.js → internal-token-BeXjPLKy.js} +2 -2
- package/server/{internal-token-nobT6FhA.js → internal-token-C90jBp-y.js} +1 -1
- package/server/{io-A7ZuOBkz.js → io-CbAFXQge.js} +2 -2
- package/server/{issue-closed-Da3DeomA.js → issue-closed-BYC2TCk-.js} +4 -4
- package/server/{issue-lifecycle-543pQX9D.js → issue-lifecycle-BoJa6qIt.js} +21 -21
- package/server/{issue-lifecycle-Bd9XBJAQ.js → issue-lifecycle-CLHbj8RS.js} +1 -1
- package/server/{issue-service-singleton-BC2JLZi7.js → issue-service-singleton-3g_CCY-1.js} +1 -1
- package/server/{issue-service-singleton-Brc3t0SV.js → issue-service-singleton-BS9NENuR.js} +8 -8
- package/server/{issues-D3kt9UWE.js → issues-BPcqPqfV.js} +2 -2
- package/server/{label-cleanup-w9X_T3AQ.js → label-cleanup-CwiCSZrb.js} +2 -2
- package/server/{layers-Cwe1J-9o.js → layers-OHHLphl0.js} +2 -2
- package/server/{lifecycle-f1GbDK33.js → lifecycle-B8IdvUbt.js} +6 -6
- package/server/{lifecycle-io-D56q8zlO.js → lifecycle-io-BMCH1Bxg.js} +1 -1
- package/server/{lifecycle-io-Bqvj0m3i.js → lifecycle-io-C73m5e6R.js} +4 -4
- package/server/{linear-client-Bh4T4S-c.js → linear-client-BMxgycoy.js} +1 -1
- package/server/{linear-client-CfJMTAYd.js → linear-client-CgQlM4aT.js} +2 -2
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-ZrXFM3jv.js → merge-B7Oi-g6k.js} +3 -3
- package/server/{merge-DRMPa8CQ.js → merge-BRkVaIx-.js} +1 -1
- package/server/merge-agent-Bwm34MZ5.js +3 -0
- package/server/{merge-agent-CHHs5S_0.js → merge-agent-DNFFsiEm.js} +61 -26
- package/server/{merge-batch-BwhGdlh4.js → merge-batch-BpYXUaqJ.js} +1 -1
- package/server/{merge-blockers-BMhDpMl_.js → merge-blockers-DIOZmqdK.js} +2 -2
- package/server/merge-ops-B7m-hBEZ.js +2 -0
- package/server/{merge-rebase-R7MfqpiE.js → merge-rebase-C8WH39MB.js} +2 -2
- package/server/{merge-set-B3Breacq.js → merge-set-CsEE2CyQ.js} +9 -5
- package/server/{merge-set-D-iXNP0I.js → merge-set-DOsBTBQc.js} +1 -1
- package/server/{merge-sync-DHWbGtjR.js → merge-sync-C2B322Ot.js} +2 -2
- package/server/{merge-sync-bOOtfeXR.js → merge-sync-CcLM2vwW.js} +1 -1
- package/server/{merge-train-98ptZrPT.js → merge-train-BIm7-7cy.js} +3 -3
- package/server/{merge-train-deps-B5FWJTE2.js → merge-train-deps-DG1oQ2DT.js} +4 -4
- package/server/{merge-verification-BGiuiXAK.js → merge-verification-BAbjxEd5.js} +4 -4
- package/server/{multipart-parser-D7mzNNDm.js → multipart-parser-jKtKAXtl.js} +2 -2
- package/server/node_modules/.package-lock.json +1 -1
- package/server/{orphan-proposed-reconciler-CSuxivr9.js → orphan-proposed-reconciler-BqVGaOIj.js} +1 -1
- package/server/{orphan-proposed-reconciler-BSGCNJ6X.js → orphan-proposed-reconciler-zHrwJ3xr.js} +9 -9
- package/server/package-lock.json +2 -2
- package/server/package.json +1 -1
- package/server/{pan-dir-DoPtdHrp.js → pan-dir-BlNrLzW7.js} +3 -3
- package/server/{paths-CVDLPxXp.js → paths-CiVeo4N_.js} +2 -2
- package/server/{pipeline-notifier-WD2dnOsR.js → pipeline-notifier-DBF6dHxH.js} +2 -2
- package/server/{pipeline-notifier-BtYHbBPl.js → pipeline-notifier-nkWCe042.js} +1 -1
- package/server/{projects-Bqfwuqet.js → projects-BqRMlDOv.js} +1 -1
- package/server/{prompts-Cg7e9FPb.js → prompts-CXbQvevY.js} +2 -2
- package/server/{providers-fLduChnX.js → providers-CUdAb5Qu.js} +7 -7
- package/server/{providers-JjK6izqX.js → providers-gZ0cUgQM.js} +1 -1
- package/server/public/assets/{chunk-BO2N2NFS-aNlsGDCu.js → chunk-BO2N2NFS-C-6y8VFI.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-CnjkrvT8.js → diagram-OG6HWLK6-NACO1xW5.js} +1 -1
- package/server/public/assets/{dist-CGKBCieA.js → dist-D1FjqGgm.js} +1 -1
- package/server/public/assets/{dist-Bg3Sbsx4.js → dist-DQD-ZjQY.js} +3 -3
- package/server/public/assets/{ganttDiagram-6RSMTGT7-C8LLKj23.js → ganttDiagram-6RSMTGT7-CEMAKgmE.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-BSDEUvhW.js → highlighted-body-OFNGDK62-D5lC7FW8.js} +1 -1
- package/server/public/assets/{index-LQIfhmgI.js → index-BDqWyuZQ.js} +140 -140
- package/server/public/assets/{linear-DEbYZoxg.js → linear-DDHAMRPB.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-DRM2ANcR.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-BtZL5pXE.js → pieDiagram-4H26LBE5-DwBdeKBb.js} +1 -1
- package/server/public/assets/{prod-DYVvIyuh.js → prod-DAZt0c4G.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-a7vS8Jc8.js → quadrantDiagram-W4KKPZXB-CNDLp-_m.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-Ckbq2SWH.js → sankeyDiagram-5OEKKPKP-oIUL_uO1.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-DJyeNa99.js → xychartDiagram-2RQKCTM6-B-IM6Cck.js} +1 -1
- package/server/public/index.html +1 -1
- package/server/{pull-requests-D2SjJIwY.js → pull-requests-DZ-V7_LB.js} +1 -1
- package/server/{pull-requests-1WXmTBlo.js → pull-requests-kTRl7cWC.js} +3 -3
- package/server/rally-CRteqXe0.js +3 -0
- package/server/{rally-api-H5I2CBO0.js → rally-api-DpZo3WwF.js} +2 -2
- package/server/{rally-api-BtvwdX6d.js → rally-api-jOk4vit_.js} +1 -1
- package/server/{rally-client-Bt-qHiOh.js → rally-client-BQjm3aaq.js} +1 -1
- package/server/{rally-client-33CYZYYu.js → rally-client-CoWZeVEj.js} +4 -4
- package/server/{rally-8aQlLLVj.js → rally-xCTZ-UcI.js} +3 -3
- package/server/{rebuild-stack-KHkkrGjx.js → rebuild-stack-BZ7j27xY.js} +5 -5
- package/server/{rebuild-stack-CXSgAGPR.js → rebuild-stack-r-cxcr26.js} +1 -1
- package/server/{reconstruct-cache-D_Ml65_6.js → reconstruct-cache-13EkMg_i.js} +6 -6
- package/server/{record-De2syxNB.js → record-CJsjvRO4.js} +1 -1
- package/server/release-engine-YLTnEO_K.js +306 -0
- package/server/release-set-DwvT_Opu.js +125 -0
- package/server/{remote-CGuognN3.js → remote-9u9WL0NJ.js} +3 -3
- package/server/{remote-D0Old0Cv.js → remote-B062S1Kc.js} +3 -3
- package/server/{remote-agents-UHoi4oGr.js → remote-agents-B4eWgwNd.js} +1 -1
- package/server/{remote-agents-DfhMq6kQ.js → remote-agents-BBTg-vLT.js} +5 -5
- package/server/{remote-completion-RZYePR_0.js → remote-completion-B0rmBnbL.js} +12 -12
- package/server/resume-R7xkSmLW.js +3 -0
- package/server/{review-agent-uwVftH98.js → review-agent-Bf9XjLnl.js} +1 -1
- package/server/{review-agent-sZBCpEVv.js → review-agent-tfR5RDzG.js} +22 -22
- package/server/{review-artifacts-C7a45b1_.js → review-artifacts-D0_IE6DQ.js} +6 -6
- package/server/{review-context-CErbQpKL.js → review-context-CXO5ml5D.js} +7 -7
- package/server/{review-monitor-DHD9m_kh.js → review-monitor-DfFUSx0J.js} +2 -2
- package/server/{review-status-JhQ3qlDS.js → review-status-B0Axo-Ma.js} +1 -1
- package/server/{review-status-gPndPUBc.js → review-status-BcfwcAcO.js} +23 -16
- package/server/{review-status-enrichment-qWvWckYN.js → review-status-enrichment-Cp5kFTGl.js} +3 -3
- package/server/{review-status-sync-B_GrEke8.js → review-status-sync-Bc0c_u12.js} +1 -1
- package/server/{review-status-sync-D3A9KX95.js → review-status-sync-CEFty1pW.js} +9 -5
- package/server/{review-verdict-feedback-4WZ5ZdbC.js → review-verdict-feedback-BOKRLLDf.js} +6 -6
- package/server/{review-verdict-feedback-Zo0r_z4m.js → review-verdict-feedback-BnGtT0vN.js} +1 -1
- package/server/{rollup-Bmhn80tB.js → rollup-BVqFuiS9.js} +1 -1
- package/server/{rollup-BrUIKMv_.js → rollup-C22QDVxh.js} +8 -8
- package/server/{scanner-BIGumel_.js → scanner-BLCnuXqY.js} +7 -7
- package/server/{sequence-io-DA0akEQN.js → sequence-io-BozlUb6f.js} +4 -4
- package/server/{sequencer-agent-DeflKafB.js → sequencer-agent-BEDEHfd2.js} +5 -5
- package/server/server.js +251 -160
- package/server/{service-V0sUK-OR.js → service-C8jKYZ0w.js} +42 -42
- package/server/{session-fork-Yx3UcAQf.js → session-fork-BDGksK4e.js} +2 -2
- package/server/{settings-CFEeQRj2.js → settings-CSLhh6qR.js} +2 -2
- package/server/settings-CSaXtkoA.js +2 -0
- package/server/{settings-CxVate0h.js → settings-DrRQCren.js} +3 -3
- package/server/{shadow-engineering-BRxnVSDk.js → shadow-engineering-BMcBN-Of.js} +2 -2
- package/server/{shadow-state-BiMwdyl1.js → shadow-state-B4ayC7nx.js} +2 -2
- package/server/{shadow-state-1aS8FijU.js → shadow-state-CHqWHD3T.js} +1 -1
- package/server/{ship-log-CMWH3H5-.js → ship-log-CDVmOlZP.js} +1 -1
- package/server/{smart-compaction-Bw1K_Sbl.js → smart-compaction-C-F5sP9P.js} +7 -7
- package/server/{smart-compaction-xblMyVpT.js → smart-compaction-V9DBrGcr.js} +1 -1
- package/server/{spawn-planning-session-CzDFSKAQ.js → spawn-planning-session-Bz4_JES2.js} +1 -1
- package/server/{spawn-planning-session-DxLxcM7m.js → spawn-planning-session-dSpOU0lP.js} +15 -15
- package/server/{specialist-completion-BiEXUHfD.js → specialist-completion-Coz3eTSr.js} +1 -1
- package/server/{specialist-context-BfkTA81h.js → specialist-context-fmb03vXQ.js} +5 -5
- package/server/{specialist-handoff-logger-BiKuLtNm.js → specialist-handoff-logger-B9HK_lRu.js} +2 -2
- package/server/{specialist-logs-CFJjGsLC.js → specialist-logs-B24R2B9Y.js} +3 -3
- package/server/{specialists-BLIreoE7.js → specialists-B6f5-5nG.js} +1 -1
- package/server/{specialists-DjHbwQ_p.js → specialists-BGNZ0_ZW.js} +18 -18
- package/server/{specialists-B4byf18k.js → specialists-CL7E8yUg.js} +75 -75
- package/server/{specialists-DdvpFNt1.js → specialists-Chvvwf5z.js} +1 -1
- package/server/specs-oaaYaA5c.js +3 -0
- package/server/{src-CALBEUMX.js → src-BVxZuHMg.js} +3 -3
- package/server/{src-mK_M_ZIj.js → src-D-VXCC9C.js} +5 -5
- package/server/{src-fgbU-jJ-.js → src-DGAEtABV.js} +13 -2
- package/server/{stack-health-BFM8YlHw.js → stack-health-BKbTTOT2.js} +1 -1
- package/server/{stack-health-Qd7rPiVe.js → stack-health-C-le5erA.js} +2 -2
- package/server/{state-home-C2Bicw9N.js → state-home-CoyWsECg.js} +6 -6
- package/server/{summary-fork-EWWBvzgE.js → summary-fork-BF_0vxrq.js} +2 -2
- package/server/{summary-fork-DezPkJSm.js → summary-fork-BlE30Q-I.js} +8 -8
- package/server/supervisor-03Tj_Wra.js +2 -0
- package/server/{supervisor-D5GC5jUM.js → supervisor-BSeML_p0.js} +2 -2
- package/server/{swarm-readiness-Cf9mommA.js → swarm-readiness-CQ4sjrXc.js} +3 -3
- package/server/{system-prerequisites-BsI9hxh9.js → system-prerequisites-DnmLYOnU.js} +13 -1
- package/server/{teardown-workspace-CWz1pbEK.js → teardown-workspace-CpcjDrZ4.js} +12 -12
- package/server/{test-agent-queue-TiVXe3ZT.js → test-agent-queue-Bq298zZl.js} +5 -5
- package/server/{tldr-daemon-C_1frSDj.js → tldr-daemon-CaSUXd9r.js} +2 -2
- package/server/{tldr-daemon-Big5IZ_M.js → tldr-daemon-Rn1Zue0P.js} +1 -1
- package/server/{tmux-D57f-XNv.js → tmux-BVc-NeKM.js} +2 -2
- package/server/{tmux-DClqWwb8.js → tmux-CbcrkUx5.js} +1 -1
- package/server/{token-_qujO3JZ.js → token-D2OC_9ms.js} +1 -1
- package/server/{tracker-config-BmdJU_w6.js → tracker-config-C1Y_2CIo.js} +2 -2
- package/server/{tracker-config-B_Ubts1Z.js → tracker-config-EsBoOWEy.js} +1 -1
- package/server/{tracker-utils-Bg-Sevcv.js → tracker-utils-DSb9cfrF.js} +1 -1
- package/server/{tracker-utils-CWFt6jjV.js → tracker-utils-lph9C3Pw.js} +2 -2
- package/server/{tunnel-UBf2vyAL.js → tunnel-BFBCeo97.js} +2 -2
- package/server/{tunnel-hOBNQbmF.js → tunnel-DDe-ATFF.js} +1 -1
- package/server/{uat-train-DGkIkLxu.js → uat-train-8T24rPzc.js} +1 -1
- package/server/{uat-train-qNanv5hN.js → uat-train-DtKHHy1U.js} +23 -23
- package/server/{validation-B0QaLIHP.js → validation-COOXwNXU.js} +1 -1
- package/server/{validation-C4wegCvH.js → validation-lyudzPvD.js} +3 -3
- package/server/{verification-runner-CntudBes.js → verification-runner-DO0nYTJx.js} +11 -11
- package/server/{verification-runner-DdleMNLq.js → verification-runner-Dd1FX8Qk.js} +1 -1
- package/server/{vtt-parser-CKc-smWM.js → vtt-parser-C57tEF7-.js} +1 -1
- package/server/{work-agent-prompt-CG5jFV9A.js → work-agent-prompt-B2F3ZwKm.js} +11 -11
- package/server/workflows-B4fIN8VP.js +2 -0
- package/server/{workflows-BK2xs_a8.js → workflows-Clz_AFwR.js} +13 -13
- package/server/{workspace-CLrSIRCx.js → workspace-CY_2-Ddv.js} +3 -3
- package/server/{workspace-C9lC5o3E.js → workspace-D0rCFemz.js} +1 -1
- package/server/{workspace-manager-Cb2a7bg9.js → workspace-manager-BIfpzqdU.js} +1 -1
- package/server/{workspace-manager-BJhW2sky.js → workspace-manager-D6NgGkiF.js} +10 -10
- package/server/{workspace-metadata-QQmo_Z0l.js → workspace-metadata-C8yn8kAH.js} +2 -2
- package/server/{workspace-metadata-CTRnr323.js → workspace-metadata-DfgR40YU.js} +1 -1
- package/server/{workspaces-Ca4zZs12.js → workspaces-DOeHyKmA.js} +104 -92
- package/sync-sources/hooks/ask-user-question-hook +87 -0
- package/sync-sources/hooks/auto-approve-hook +96 -0
- package/sync-sources/hooks/codex-notify-hook +62 -0
- package/sync-sources/hooks/gh-issue-trailer-hook +4 -0
- package/sync-sources/hooks/gh-issue-trailer-hook.d.ts +7 -0
- package/sync-sources/hooks/gh-issue-trailer-hook.d.ts.map +1 -0
- package/sync-sources/hooks/gh-issue-trailer-hook.js +239 -0
- package/sync-sources/hooks/gh-issue-trailer-hook.js.map +1 -0
- package/sync-sources/hooks/gh-issue-trailer-hook.ts +296 -0
- package/sync-sources/hooks/git-hooks/post-checkout +109 -0
- package/sync-sources/hooks/heartbeat-hook +113 -0
- package/sync-sources/hooks/notification-hook +70 -0
- package/sync-sources/hooks/notify-complete +79 -0
- package/sync-sources/hooks/pan-hook-lib.sh +153 -0
- package/sync-sources/hooks/permission-event-hook +24 -0
- package/sync-sources/hooks/post-compact-hook +25 -0
- package/sync-sources/hooks/pre-compact-hook +26 -0
- package/sync-sources/hooks/pre-tool-hook +35 -0
- package/sync-sources/hooks/record-cost-event.d.ts +1 -0
- package/sync-sources/hooks/record-cost-event.js +31858 -0
- package/sync-sources/hooks/record-cost-event.js.map +1 -0
- package/sync-sources/hooks/record-cost-event.ts +267 -0
- package/sync-sources/hooks/rtk-bash-filter +152 -0
- package/sync-sources/hooks/session-start-hook +80 -0
- package/sync-sources/hooks/specialist-stop-hook +106 -0
- package/sync-sources/hooks/statusline.sh +169 -0
- package/sync-sources/hooks/stop-hook +217 -0
- package/sync-sources/hooks/tldr-post-edit +72 -0
- package/sync-sources/hooks/tldr-read-enforcer +340 -0
- package/sync-sources/hooks/tmux-send-keys-guard +87 -0
- package/sync-sources/hooks/tsdown.config.ts +14 -0
- package/sync-sources/hooks/user-prompt-submit-hook +57 -0
- package/sync-sources/hooks/work-agent-stop-hook +424 -0
- package/server/cli-Ch_BWJB2.js +0 -3
- package/server/deacon-swarm-CSWGRfzr.js +0 -2
- package/server/dist-BUplB3Od.js +0 -3
- package/server/forge-IgLR0Ist.js +0 -2
- package/server/inspect-agent-CYoWAeeB.js +0 -2
- package/server/merge-agent-CfohxFWM.js +0 -3
- package/server/merge-ops-Czke6UAp.js +0 -2
- package/server/public/assets/mermaid-GHXKKRXX-CZOsRYoT.js +0 -1
- package/server/rally-Ba9QoNYc.js +0 -3
- package/server/resume-CmxF3Kjz.js +0 -3
- package/server/settings-DEhYpW0k.js +0 -2
- package/server/specs-CVH1kvz3.js +0 -3
- package/server/supervisor-DQMK2e3I.js +0 -2
- package/server/workflows-pKw9yRSV.js +0 -2
|
@@ -1,42 +1,43 @@
|
|
|
1
|
-
import { $n as extractPrefixSync,
|
|
2
|
-
import { D as jsonResponse, E as httpHandler, S as normalizeOrigin, b as getTrustedOrigins, f as getWorkAgentLifecycleStateSync, n as _serverManagedMerges, y as getHeaderFromMap } from "./specialists-
|
|
1
|
+
import { $n as extractPrefixSync, Dn as getProjectSync, Gn as resolveProjectFromIssueSync, Hr as init_paths, Ln as listProjectsSync, Nn as init_projects, Qn as extractNumberSync, Rr as encodeClaudeProjectDir, Sn as findProjectByTeamSync, Vr as getOverdeckHome, er as init_issue_id, ir as resolveIssueIdSync, ln as init_state_plane, lr as FsError, nr as parseIssueIdSync, un as isStatePlaneOnlyStatus, ur as GitError, vn as extractTeamPrefix, yr as init_errors } from "./config-yaml-C_djSurJ.js";
|
|
2
|
+
import { D as jsonResponse, E as httpHandler, S as normalizeOrigin, b as getTrustedOrigins, f as getWorkAgentLifecycleStateSync, n as _serverManagedMerges, y as getHeaderFromMap } from "./specialists-CL7E8yUg.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 { K as buildChildEnvWithoutTmuxSync, L as sessionExists, O as listSessionNames, i as capturePane, q as init_child_env, x as init_tmux } from "./tmux-
|
|
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 { Mn as getAgentState, Rt as transitionIssueToInReview, U as spawnAgent, Z as listRunningAgents, gr as getAgentRuntimeStateSync, j as messageAgent, t as init_agents, vr as saveAgentRuntimeState } from "./agents-
|
|
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-
|
|
4
|
+
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-Clew3DpF.js";
|
|
5
|
+
import { K as buildChildEnvWithoutTmuxSync, L as sessionExists, O as listSessionNames, i as capturePane, q as init_child_env, x as init_tmux } from "./tmux-BVc-NeKM.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-BcfwcAcO.js";
|
|
7
|
+
import { _ as init_queue_position, a as EventStoreService, g as findPositionInQueueSync, h as computeQueuePositionFromStatusSync, s as init_domain_services } from "./issue-lifecycle-BoJa6qIt.js";
|
|
8
|
+
import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-CaiG63FG.js";
|
|
9
|
+
import { Mn as getAgentState, Rt as transitionIssueToInReview, U as spawnAgent, Z as listRunningAgents, gr as getAgentRuntimeStateSync, j as messageAgent, t as init_agents, vr as saveAgentRuntimeState } from "./agents-DqQa4Dq_.js";
|
|
10
|
+
import { f as CostWriter, l as CostDoorLive } from "./service-C8jKYZ0w.js";
|
|
11
|
+
import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-C1Y_2CIo.js";
|
|
12
|
+
import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-lph9C3Pw.js";
|
|
13
|
+
import { o as getInternalTokenSync, s as init_internal_token } from "./internal-token-BeXjPLKy.js";
|
|
14
14
|
import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME, p as init_types } from "./types-CE1m_daD.js";
|
|
15
|
-
import { o as init_merge_sync, r as getAllActiveQueues } from "./merge-sync-
|
|
16
|
-
import { A as findVBriefByIssue, N as readVBriefDocument, b as init_types$1, c as mergeRecordStatusOverrides, j as init_vbrief_index, o as init_io, r as findPlan, s as isPlanningComplete, u as readPlan, y as VBRIEF_INSPECTION_POLICIES } from "./io-
|
|
17
|
-
import { f as init_config, m as loadConfigSync$1 } from "./config-
|
|
18
|
-
import { it as findConversationForCostSessionSync, k as init_conversations } from "./conversations-
|
|
19
|
-
import { a as init_stack_health, i as getWorkspaceStackHealth, n as collectDockerContainerLifecycleSnapshot } from "./stack-health-
|
|
20
|
-
import { o as criticalPath, t as actionableDoc, u as init_dag } from "./dag-
|
|
21
|
-
import { a as queryBeadsForIssue, r as init_beads_query } from "./beads-query-
|
|
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 { at as init_jsonl_parser, nt as getActiveSessionModelSync } from "./specialists-
|
|
15
|
+
import { o as init_merge_sync, r as getAllActiveQueues } from "./merge-sync-C2B322Ot.js";
|
|
16
|
+
import { A as findVBriefByIssue, N as readVBriefDocument, b as init_types$1, c as mergeRecordStatusOverrides, j as init_vbrief_index, o as init_io, r as findPlan, s as isPlanningComplete, u as readPlan, y as VBRIEF_INSPECTION_POLICIES } from "./io-CbAFXQge.js";
|
|
17
|
+
import { f as init_config, m as loadConfigSync$1 } from "./config-DsCxzjXK.js";
|
|
18
|
+
import { it as findConversationForCostSessionSync, k as init_conversations } from "./conversations-BSOU5qnu.js";
|
|
19
|
+
import { a as init_stack_health, i as getWorkspaceStackHealth, n as collectDockerContainerLifecycleSnapshot } from "./stack-health-C-le5erA.js";
|
|
20
|
+
import { o as criticalPath, t as actionableDoc, u as init_dag } from "./dag-BQFtXOuJ.js";
|
|
21
|
+
import { a as queryBeadsForIssue, r as init_beads_query } from "./beads-query-tOsAYP5h.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-BFDuPV6n.js";
|
|
23
|
+
import { n as getContainersReferencingWorkspacePath, r as init_workspace_manager } from "./workspace-manager-D6NgGkiF.js";
|
|
24
|
+
import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-Dx0C7VWJ.js";
|
|
25
|
+
import { at as init_jsonl_parser, nt as getActiveSessionModelSync } from "./specialists-BGNZ0_ZW.js";
|
|
26
26
|
import { n as restoreTrackedBeadsExport, t as init_beads_restore } from "./beads-restore-CMbDSB5R.js";
|
|
27
|
-
import { i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-
|
|
28
|
-
import { T as verifyAppCanMerge, f as init_github_app, m as isIntegrationPermissionError } from "./github-app-
|
|
29
|
-
import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync } from "./workspace-metadata-
|
|
30
|
-
import { n as enrichReviewStatusFromSessions } from "./review-status-enrichment-
|
|
31
|
-
import { n as generateDailySummary, r as init_cli } from "./cli-
|
|
32
|
-
import { a as getDiffStat, i as getDiffBase, o as init_review_context, r as getChangedFiles } from "./review-context-
|
|
33
|
-
import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-
|
|
34
|
-
import { C as
|
|
35
|
-
import { F as enqueueMerge, I as getAllActiveQueues$1, L as getCurrentMerge, P as dequeueMerge, z as markMergeProcessing } from "./merge-
|
|
36
|
-
import {
|
|
37
|
-
import {
|
|
38
|
-
import {
|
|
39
|
-
import {
|
|
27
|
+
import { i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-CPitEZo4.js";
|
|
28
|
+
import { T as verifyAppCanMerge, f as init_github_app, m as isIntegrationPermissionError } from "./github-app-DhycHVLF.js";
|
|
29
|
+
import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync } from "./workspace-metadata-C8yn8kAH.js";
|
|
30
|
+
import { n as enrichReviewStatusFromSessions } from "./review-status-enrichment-Cp5kFTGl.js";
|
|
31
|
+
import { n as generateDailySummary, r as init_cli } from "./cli-s7bPWy-E.js";
|
|
32
|
+
import { a as getDiffStat, i as getDiffBase, o as init_review_context, r as getChangedFiles } from "./review-context-CXO5ml5D.js";
|
|
33
|
+
import { n as getTldrDaemonServiceSync, r as init_tldr_daemon } from "./tldr-daemon-CaSUXd9r.js";
|
|
34
|
+
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-DNFFsiEm.js";
|
|
35
|
+
import { F as enqueueMerge, I as getAllActiveQueues$1, L as getCurrentMerge, P as dequeueMerge, z as markMergeProcessing } from "./merge-B7Oi-g6k.js";
|
|
36
|
+
import { n as init_release_set, t as getReleaseSetSync } from "./release-set-DwvT_Opu.js";
|
|
37
|
+
import { i as init_conflict_gate, r as getCachedConflictGateMergeability } from "./conflict-gate-D47Kl78u.js";
|
|
38
|
+
import { n as runVerificationForIssue } from "./verification-runner-DO0nYTJx.js";
|
|
39
|
+
import { t as teardownWorkspace } from "./teardown-workspace-CpcjDrZ4.js";
|
|
40
|
+
import { n as init_rebuild_stack, t as composeProjectNameForWorkspace } from "./rebuild-stack-BZ7j27xY.js";
|
|
40
41
|
import { basename, dirname, join, resolve, sep } from "node:path";
|
|
41
42
|
import { Effect, Layer, Option } from "effect";
|
|
42
43
|
import { closeSync, existsSync, fstatSync, mkdirSync, openSync, readFileSync, readSync, readdirSync, renameSync, writeFileSync } from "fs";
|
|
@@ -973,7 +974,7 @@ const postWorkspaceContainerActionRoute = HttpRouter.add("POST", "/api/workspace
|
|
|
973
974
|
}
|
|
974
975
|
if (!workspacePath) return jsonResponse({ error: `Workspace not found for ${issueId}` }, { status: 404 });
|
|
975
976
|
if (!composeFile && ["start", "restart"].includes(action)) {
|
|
976
|
-
const { ensureDevcontainerSync } = yield* Effect.promise(() => import("./ensure-devcontainer-
|
|
977
|
+
const { ensureDevcontainerSync } = yield* Effect.promise(() => import("./ensure-devcontainer-BIShzs3M.js"));
|
|
977
978
|
if (ensureDevcontainerSync({
|
|
978
979
|
workspacePath,
|
|
979
980
|
issueId
|
|
@@ -2593,7 +2594,7 @@ async function reconcileGitHubMergeStatus(issueId, status) {
|
|
|
2593
2594
|
const prRef = parseGitHubPullRequestUrl(status.prUrl);
|
|
2594
2595
|
if (!prRef) return false;
|
|
2595
2596
|
try {
|
|
2596
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
2597
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-DIr70YLg.js");
|
|
2597
2598
|
if (!isGitHubAppConfigured()) return false;
|
|
2598
2599
|
const prState = await Effect.runPromise(getPullRequestState(prRef.owner, prRef.repo, prRef.number));
|
|
2599
2600
|
console.log(`[merge] reconcileGitHubMergeStatus: ${issueId} PR #${prRef.number} merged=${prState.merged} state=${prState.state}`);
|
|
@@ -2871,8 +2872,8 @@ async function triggerMerge(issueId) {
|
|
|
2871
2872
|
try {
|
|
2872
2873
|
if (workspaceInfo.isRemote && workspaceInfo.vmName) {
|
|
2873
2874
|
console.log(`[merge] Remote workspace detected for ${issueId}, using review artifact merge...`);
|
|
2874
|
-
const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-
|
|
2875
|
-
const { getForgeAdapter } = await import("./forge-
|
|
2875
|
+
const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-DOsBTBQc.js");
|
|
2876
|
+
const { getForgeAdapter } = await import("./forge-CUCYK7h_.js");
|
|
2876
2877
|
const remotePrimaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
|
|
2877
2878
|
const remoteTargetBranch = remotePrimaryRepo?.targetBranch || "main";
|
|
2878
2879
|
const remoteForge = remotePrimaryRepo?.forge || "github";
|
|
@@ -2907,7 +2908,7 @@ async function triggerMerge(issueId) {
|
|
|
2907
2908
|
readyForMerge: false
|
|
2908
2909
|
});
|
|
2909
2910
|
completePendingOperation(issueId, null);
|
|
2910
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
2911
|
+
const { postMergeLifecycle } = await import("./merge-agent-Bwm34MZ5.js");
|
|
2911
2912
|
await postMergeLifecycle(issueId, projectPath);
|
|
2912
2913
|
return {
|
|
2913
2914
|
success: true,
|
|
@@ -2944,10 +2945,10 @@ async function triggerMerge(issueId) {
|
|
|
2944
2945
|
const projectConfig = findProjectByTeamSync(issuePrefix);
|
|
2945
2946
|
if (projectConfig?.workspace?.type === "polyrepo" && projectConfig?.workspace?.repos) {
|
|
2946
2947
|
console.log(`[merge] Polyrepo detected for ${issueId}, coordinating merge set...`);
|
|
2947
|
-
const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-
|
|
2948
|
-
const { runQualityGates } = await import("./validation-
|
|
2949
|
-
const { getForgeAdapter } = await import("./forge-
|
|
2950
|
-
const { messageAgent } = await import("./agents-
|
|
2948
|
+
const { getMergeSetSync, ensureMergeSetForIssueSync, upsertMergeSetSync, withRepoStateSync } = await import("./merge-set-DOsBTBQc.js");
|
|
2949
|
+
const { runQualityGates } = await import("./validation-COOXwNXU.js");
|
|
2950
|
+
const { getForgeAdapter } = await import("./forge-CUCYK7h_.js");
|
|
2951
|
+
const { messageAgent } = await import("./agents-CxbuBjID.js");
|
|
2951
2952
|
let mergeSet = getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId);
|
|
2952
2953
|
if (!mergeSet) {
|
|
2953
2954
|
const error = `No merge set found for ${issueId}`;
|
|
@@ -3217,7 +3218,7 @@ async function triggerMerge(issueId) {
|
|
|
3217
3218
|
readyForMerge: false
|
|
3218
3219
|
});
|
|
3219
3220
|
completePendingOperation(issueId, null);
|
|
3220
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
3221
|
+
const { postMergeLifecycle } = await import("./merge-agent-Bwm34MZ5.js");
|
|
3221
3222
|
advanceQueue();
|
|
3222
3223
|
await postMergeLifecycle(issueId, projectPath);
|
|
3223
3224
|
return {
|
|
@@ -3228,8 +3229,8 @@ async function triggerMerge(issueId) {
|
|
|
3228
3229
|
repos: mergeResults
|
|
3229
3230
|
};
|
|
3230
3231
|
}
|
|
3231
|
-
const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-
|
|
3232
|
-
const { getForgeAdapter } = await import("./forge-
|
|
3232
|
+
const { getMergeSetSync, ensureMergeSetForIssueSync } = await import("./merge-set-DOsBTBQc.js");
|
|
3233
|
+
const { getForgeAdapter } = await import("./forge-CUCYK7h_.js");
|
|
3233
3234
|
const primaryRepo = (getMergeSetSync(issueId) || ensureMergeSetForIssueSync(issueId))?.repos[0];
|
|
3234
3235
|
const targetBranch = primaryRepo?.targetBranch || "main";
|
|
3235
3236
|
const primaryForge = primaryRepo?.forge || "github";
|
|
@@ -3271,7 +3272,7 @@ async function triggerMerge(issueId) {
|
|
|
3271
3272
|
};
|
|
3272
3273
|
}
|
|
3273
3274
|
if (githubPrRef) try {
|
|
3274
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
3275
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-DIr70YLg.js");
|
|
3275
3276
|
if (isGitHubAppConfigured()) {
|
|
3276
3277
|
const prState = await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number));
|
|
3277
3278
|
if (prState.state !== "OPEN" && !prState.merged) {
|
|
@@ -3332,7 +3333,7 @@ async function triggerMerge(issueId) {
|
|
|
3332
3333
|
readyForMerge: false
|
|
3333
3334
|
});
|
|
3334
3335
|
completePendingOperation(issueId, null);
|
|
3335
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
3336
|
+
const { postMergeLifecycle } = await import("./merge-agent-Bwm34MZ5.js");
|
|
3336
3337
|
await postMergeLifecycle(issueId, projectPath, branchName);
|
|
3337
3338
|
return {
|
|
3338
3339
|
success: true,
|
|
@@ -3346,13 +3347,13 @@ async function triggerMerge(issueId) {
|
|
|
3346
3347
|
} catch (prStateErr) {
|
|
3347
3348
|
console.warn(`[merge] Pre-merge PR state check failed for ${issueId}: ${prStateErr.message} — proceeding (check is best-effort)`);
|
|
3348
3349
|
}
|
|
3349
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
3350
|
+
const { postMergeLifecycle } = await import("./merge-agent-Bwm34MZ5.js");
|
|
3350
3351
|
const agentId = `agent-${issueId.toLowerCase()}`;
|
|
3351
3352
|
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.`;
|
|
3352
3353
|
setReviewStatus(issueId, { mergeStep: "rebasing" });
|
|
3353
3354
|
console.log(`[merge] Rebasing ${branchName} onto ${targetBranch} for ${issueId} (agent=${await Effect.runPromise(sessionExists(agentId)) ? "running" : "stopped"})...`);
|
|
3354
3355
|
{
|
|
3355
|
-
const { beginShipLog, appendShipLog } = await import("./ship-log-
|
|
3356
|
+
const { beginShipLog, appendShipLog } = await import("./ship-log-CDVmOlZP.js");
|
|
3356
3357
|
beginShipLog(issueId);
|
|
3357
3358
|
appendShipLog(issueId, `Ship started: rebasing ${branchName} onto ${targetBranch}…`, "rebasing");
|
|
3358
3359
|
}
|
|
@@ -3480,7 +3481,7 @@ async function triggerMerge(issueId) {
|
|
|
3480
3481
|
});
|
|
3481
3482
|
let skipLocalVerification = false;
|
|
3482
3483
|
if (primaryForge === "github" && artifactUrl) try {
|
|
3483
|
-
const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-
|
|
3484
|
+
const { parsePullRequestRef, getCiCheckRunsStatePromise, isGitHubAppConfigured } = await import("./github-app-DIr70YLg.js");
|
|
3484
3485
|
if (isGitHubAppConfigured()) {
|
|
3485
3486
|
const ref = parsePullRequestRef({ url: artifactUrl });
|
|
3486
3487
|
if (ref) {
|
|
@@ -3501,12 +3502,12 @@ async function triggerMerge(issueId) {
|
|
|
3501
3502
|
} catch (ciErr) {
|
|
3502
3503
|
console.warn(`[merge] CI-state check failed (${ciErr.message?.slice(0, 120)}) — falling back to local verification for ${issueId}`);
|
|
3503
3504
|
}
|
|
3504
|
-
const { appendShipLog } = await import("./ship-log-
|
|
3505
|
+
const { appendShipLog } = await import("./ship-log-CDVmOlZP.js");
|
|
3505
3506
|
if (skipLocalVerification) appendShipLog(issueId, "✓ Local verification skipped — CI already green on this exact commit", "verifying");
|
|
3506
3507
|
const verifyResult = skipLocalVerification ? { outcome: "passed" } : await (async () => {
|
|
3507
3508
|
console.log(`[merge] Running post-rebase verification for ${issueId}...`);
|
|
3508
3509
|
appendShipLog(issueId, "Running post-rebase verification (full quality-gate suite)…", "verifying");
|
|
3509
|
-
const { runVerificationForIssue } = await import("./verification-runner-
|
|
3510
|
+
const { runVerificationForIssue } = await import("./verification-runner-Dd1FX8Qk.js");
|
|
3510
3511
|
return Effect.runPromise(runVerificationForIssue(issueId, workspacePath, { isRemote: false }, "merge-verify", {
|
|
3511
3512
|
syncTargetBranch: false,
|
|
3512
3513
|
onGateLog: (line) => appendShipLog(issueId, line, "verifying")
|
|
@@ -3539,7 +3540,7 @@ async function triggerMerge(issueId) {
|
|
|
3539
3540
|
console.log(`[merge] Post-rebase verification ${verifyResult.outcome} for ${issueId}`);
|
|
3540
3541
|
setReviewStatus(issueId, { mergeStep: "reporting-statuses" });
|
|
3541
3542
|
try {
|
|
3542
|
-
const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-
|
|
3543
|
+
const { getPullRequestState, isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-DIr70YLg.js");
|
|
3543
3544
|
if (githubPrRef && isGitHubAppConfigured()) {
|
|
3544
3545
|
const sha = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).headSha.trim();
|
|
3545
3546
|
if (sha) {
|
|
@@ -3567,7 +3568,7 @@ async function triggerMerge(issueId) {
|
|
|
3567
3568
|
} catch (prMergeErr) {
|
|
3568
3569
|
console.error(`[merge] Review artifact merge threw for ${issueId}:`, prMergeErr);
|
|
3569
3570
|
try {
|
|
3570
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
3571
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-DIr70YLg.js");
|
|
3571
3572
|
if (githubPrRef && isGitHubAppConfigured()) {
|
|
3572
3573
|
artifactMerged = (await Effect.runPromise(getPullRequestState(githubPrRef.owner, githubPrRef.repo, githubPrRef.number))).merged;
|
|
3573
3574
|
if (artifactMerged) console.log(`[merge] Race-detected: PR #${githubPrRef.number} for ${issueId} was already merged despite thrown error; proceeding`);
|
|
@@ -3684,8 +3685,8 @@ const postForgeApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge
|
|
|
3684
3685
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
3685
3686
|
if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
|
|
3686
3687
|
return yield* Effect.promise(async () => {
|
|
3687
|
-
const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-
|
|
3688
|
-
const { getForgeAdapter } = await import("./forge-
|
|
3688
|
+
const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-DOsBTBQc.js");
|
|
3689
|
+
const { getForgeAdapter } = await import("./forge-CUCYK7h_.js");
|
|
3689
3690
|
let mergeSet = getMergeSetSync(issueId);
|
|
3690
3691
|
if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
|
|
3691
3692
|
const results = [];
|
|
@@ -3773,8 +3774,8 @@ const postForgeMergeRoute = HttpRouter.add("POST", "/api/issues/:issueId/forge-m
|
|
|
3773
3774
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
3774
3775
|
if (!/^[A-Z]+-\d+$/i.test(issueId)) return jsonResponse({ error: "Invalid issue ID format" }, { status: 400 });
|
|
3775
3776
|
return yield* Effect.promise(async () => {
|
|
3776
|
-
const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-
|
|
3777
|
-
const { getForgeAdapter } = await import("./forge-
|
|
3777
|
+
const { getMergeSetSync, upsertMergeSetSync, withRepoArtifactUrlSync, withRepoStateSync } = await import("./merge-set-DOsBTBQc.js");
|
|
3778
|
+
const { getForgeAdapter } = await import("./forge-CUCYK7h_.js");
|
|
3778
3779
|
let mergeSet = getMergeSetSync(issueId);
|
|
3779
3780
|
if (!mergeSet) return jsonResponse({ error: `No merge set found for ${issueId}` }, { status: 404 });
|
|
3780
3781
|
const results = [];
|
|
@@ -3967,7 +3968,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
|
|
|
3967
3968
|
console.log(`[approve] Starting role pipeline for ${issueId}...`);
|
|
3968
3969
|
let reviewResult;
|
|
3969
3970
|
try {
|
|
3970
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
3971
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-Bf9XjLnl.js");
|
|
3971
3972
|
reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
3972
3973
|
issueId,
|
|
3973
3974
|
workspace: workspacePath,
|
|
@@ -4014,7 +4015,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
|
|
|
4014
4015
|
}
|
|
4015
4016
|
console.log(`[approve] Step 3/3: Running server-side rebase for ${issueId}...`);
|
|
4016
4017
|
try {
|
|
4017
|
-
const { rebaseFeatureBranch } = await import("./merge-rebase-
|
|
4018
|
+
const { rebaseFeatureBranch } = await import("./merge-rebase-C8WH39MB.js");
|
|
4018
4019
|
const workspacePathForRebase = join(projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
|
|
4019
4020
|
const rebaseResult = await Effect.runPromise(rebaseFeatureBranch(workspacePathForRebase, branchName, "main", issueId));
|
|
4020
4021
|
if (!rebaseResult.success) {
|
|
@@ -4034,7 +4035,7 @@ const postWorkspaceApproveRoute = HttpRouter.add("POST", "/api/issues/:issueId/a
|
|
|
4034
4035
|
completePendingOperation(issueId, pushResult.error);
|
|
4035
4036
|
return jsonResponse({ error: pushResult.error }, { status: pushResult.httpStatus });
|
|
4036
4037
|
}
|
|
4037
|
-
const { approve: lifecycleApprove } = await import("./lifecycle-
|
|
4038
|
+
const { approve: lifecycleApprove } = await import("./lifecycle-B8IdvUbt.js");
|
|
4038
4039
|
const ghResolved = resolveGitHubIssueSync(issueId);
|
|
4039
4040
|
const isGitHubIssueFlag = ghResolved.isGitHub;
|
|
4040
4041
|
const lifecycleCtx = {
|
|
@@ -4068,7 +4069,7 @@ const getMergeQueueRoute = HttpRouter.add("GET", "/api/merge-queue", httpHandler
|
|
|
4068
4069
|
})));
|
|
4069
4070
|
const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pipeline/notify", httpHandler(Effect.gen(function* () {
|
|
4070
4071
|
const request = yield* HttpServerRequest.HttpServerRequest;
|
|
4071
|
-
const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-
|
|
4072
|
+
const { INTERNAL_TOKEN_HEADER, getInternalTokenSync } = yield* Effect.promise(() => import("./internal-token-C90jBp-y.js"));
|
|
4072
4073
|
const expected = getInternalTokenSync();
|
|
4073
4074
|
if (!expected) return jsonResponse({
|
|
4074
4075
|
ok: false,
|
|
@@ -4082,7 +4083,7 @@ const postInternalPipelineNotifyRoute = HttpRouter.add("POST", "/api/internal/pi
|
|
|
4082
4083
|
}, 403);
|
|
4083
4084
|
const event = yield* readJsonBody;
|
|
4084
4085
|
const type = event.type;
|
|
4085
|
-
const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-
|
|
4086
|
+
const { notifyPipelineSync } = yield* Effect.promise(() => import("./pipeline-notifier-nkWCe042.js"));
|
|
4086
4087
|
switch (type) {
|
|
4087
4088
|
case "status_changed": {
|
|
4088
4089
|
const issueId = event.issueId;
|
|
@@ -4857,7 +4858,7 @@ const patchWorkspaceTieredExecutionRoute = HttpRouter.add("PATCH", "/api/workspa
|
|
|
4857
4858
|
if (override !== "on" && override !== "off" && override !== null && override !== void 0) return jsonResponse({ error: "Invalid tiered-execution override" }, { status: 400 });
|
|
4858
4859
|
const project = getProjectSync(extractPrefixSync(issueId) ?? issueId.split("-")[0]);
|
|
4859
4860
|
if (!project) return jsonResponse({ error: "Project not found" }, { status: 404 });
|
|
4860
|
-
yield* Effect.promise(() => import("./record-
|
|
4861
|
+
yield* Effect.promise(() => import("./record-CJsjvRO4.js").then((m) => m.writeRecordTieredExecutionOverride(project, issueId, override)));
|
|
4861
4862
|
const projectPath = project.path;
|
|
4862
4863
|
const location = yield* resolvePlanLocation(projectPath, issueId);
|
|
4863
4864
|
if (!location) return jsonResponse({ error: "No vBRIEF plan found for this workspace" }, { status: 404 });
|
|
@@ -5153,6 +5154,9 @@ const stashCleanRouteLayer = Layer.mergeAll(getWorkspaceStashesRoute, postWorksp
|
|
|
5153
5154
|
* POST /api/review/:issueId/trigger
|
|
5154
5155
|
* POST /api/review/:issueId/request
|
|
5155
5156
|
*
|
|
5157
|
+
* Release read endpoint:
|
|
5158
|
+
* GET /api/workspaces/:issueId/release
|
|
5159
|
+
*
|
|
5156
5160
|
* The cancel/control routes (reset, purge, abort, pending, unstick,
|
|
5157
5161
|
* deacon-ignore, auto-merge) live in review-control.ts. Shared singletons
|
|
5158
5162
|
* (review-status wrapper, pending-ops cluster, project path, readJsonBody,
|
|
@@ -5163,6 +5167,7 @@ init_projects();
|
|
|
5163
5167
|
init_state_plane();
|
|
5164
5168
|
init_domain_services();
|
|
5165
5169
|
init_review_status();
|
|
5170
|
+
init_release_set();
|
|
5166
5171
|
init_conflict_gate();
|
|
5167
5172
|
init_beads_restore();
|
|
5168
5173
|
init_agents();
|
|
@@ -5290,7 +5295,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
|
|
|
5290
5295
|
console.log(`Feature branch push note: ${errorMessage(pushErr)}`);
|
|
5291
5296
|
}
|
|
5292
5297
|
try {
|
|
5293
|
-
const { createReviewArtifactsForIssue } = await import("./review-artifacts-
|
|
5298
|
+
const { createReviewArtifactsForIssue } = await import("./review-artifacts-D0_IE6DQ.js");
|
|
5294
5299
|
const artifactResult = await Effect.runPromise(createReviewArtifactsForIssue(issueId, workspacePath));
|
|
5295
5300
|
const primaryArtifact = artifactResult.mergeSet?.repos.find((repo) => !!repo.artifactUrl);
|
|
5296
5301
|
artifactResult.mergeSet?.repos.find((repo) => repo.mergeStatus !== "skipped")?.targetBranch;
|
|
@@ -5345,7 +5350,7 @@ const postWorkspaceReviewRoute = HttpRouter.add("POST", "/api/review/:issueId/tr
|
|
|
5345
5350
|
} catch {}
|
|
5346
5351
|
return;
|
|
5347
5352
|
}
|
|
5348
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
5353
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-Bf9XjLnl.js");
|
|
5349
5354
|
const prUrl = getReviewStatusSync(issueId)?.prUrl;
|
|
5350
5355
|
const reviewResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
5351
5356
|
issueId,
|
|
@@ -5485,7 +5490,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
|
|
|
5485
5490
|
console.log(`[request-review] Feature branch push note: ${errorMessage(pushErr)}`);
|
|
5486
5491
|
}
|
|
5487
5492
|
const prUrl = getReviewStatusSync(issueId)?.prUrl;
|
|
5488
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
5493
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-Bf9XjLnl.js");
|
|
5489
5494
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
5490
5495
|
issueId,
|
|
5491
5496
|
workspace: workspacePathRerun,
|
|
@@ -5535,7 +5540,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
|
|
|
5535
5540
|
});
|
|
5536
5541
|
} else {
|
|
5537
5542
|
const workspacePath = join(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
|
|
5538
|
-
const { spawnRun } = yield* Effect.promise(() => import("./agents-
|
|
5543
|
+
const { spawnRun } = yield* Effect.promise(() => import("./agents-CxbuBjID.js"));
|
|
5539
5544
|
try {
|
|
5540
5545
|
const testRun = yield* Effect.promise(() => spawnRun(issueId, "test", { workspace: workspacePath }));
|
|
5541
5546
|
setReviewStatus(issueId, { testStatus: "testing" });
|
|
@@ -5624,7 +5629,7 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
|
|
|
5624
5629
|
autoRequeueCount: newCount
|
|
5625
5630
|
}, { status: 500 });
|
|
5626
5631
|
const result = yield* Effect.promise(async () => {
|
|
5627
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
5632
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-Bf9XjLnl.js");
|
|
5628
5633
|
return await Effect.runPromise(spawnReviewRoleForIssue({
|
|
5629
5634
|
issueId,
|
|
5630
5635
|
workspace: workspacePath,
|
|
@@ -5688,7 +5693,14 @@ const postWorkspaceRequestReviewRoute = HttpRouter.add("POST", "/api/review/:iss
|
|
|
5688
5693
|
}, { status: 500 });
|
|
5689
5694
|
}
|
|
5690
5695
|
})));
|
|
5691
|
-
const
|
|
5696
|
+
const getReleaseSetRoute = HttpRouter.add("GET", "/api/workspaces/:issueId/release", httpHandler(Effect.gen(function* () {
|
|
5697
|
+
const rawIssueId = (yield* HttpRouter.params)["issueId"] ?? "";
|
|
5698
|
+
if (!parseIssueIdSync(rawIssueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
5699
|
+
const releaseSet = getReleaseSetSync(resolveIssueIdSync(rawIssueId));
|
|
5700
|
+
if (!releaseSet) return jsonResponse({ error: "Release set not found" }, { status: 404 });
|
|
5701
|
+
return jsonResponse(releaseSet);
|
|
5702
|
+
})));
|
|
5703
|
+
const reviewPipelineRouteLayer = Layer.mergeAll(postWorkspaceReviewRoute, postWorkspaceRequestReviewRoute, getReleaseSetRoute);
|
|
5692
5704
|
//#endregion
|
|
5693
5705
|
//#region routes/workspaces/review-control.ts
|
|
5694
5706
|
/**
|
|
@@ -5921,7 +5933,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
|
|
|
5921
5933
|
const result = processResetReviewPipeline(issueId, resetWorkspace.exists);
|
|
5922
5934
|
if (result.httpStatus !== 200) return jsonResponse(result.body, { status: result.httpStatus });
|
|
5923
5935
|
try {
|
|
5924
|
-
const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-
|
|
5936
|
+
const { resetPostMergeState } = yield* Effect.promise(() => import("./merge-agent-Bwm34MZ5.js"));
|
|
5925
5937
|
resetPostMergeState(issueId);
|
|
5926
5938
|
} catch (err) {
|
|
5927
5939
|
console.warn(`[reset-review] resetPostMergeState best-effort failed for ${issueId}:`, err);
|
|
@@ -5930,7 +5942,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
|
|
|
5930
5942
|
const rerun = body?.rerun === true;
|
|
5931
5943
|
if (rerun) try {
|
|
5932
5944
|
yield* Effect.promise(async () => {
|
|
5933
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
5945
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-Bf9XjLnl.js");
|
|
5934
5946
|
const dispatchArgs = buildReviewRedispatchArgs(issueId, resetWorkspace, workspaceInfo, resolved);
|
|
5935
5947
|
if (dispatchArgs) {
|
|
5936
5948
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
@@ -5959,7 +5971,7 @@ const postWorkspaceResetReviewRoute = HttpRouter.add("POST", "/api/review/:issue
|
|
|
5959
5971
|
const postWorkspaceReviewPurgeRoute = HttpRouter.add("POST", "/api/review/:issueId/purge", httpHandler(Effect.gen(function* () {
|
|
5960
5972
|
const issueId = (yield* HttpRouter.params)["issueId"] ?? "";
|
|
5961
5973
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
5962
|
-
const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-
|
|
5974
|
+
const { purgeReviewAgentsForIssue } = yield* Effect.promise(() => import("./review-agent-Bf9XjLnl.js"));
|
|
5963
5975
|
const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
|
|
5964
5976
|
const purge = yield* Effect.promise(() => purgeReviewAgentsForIssue(projectKey, issueId));
|
|
5965
5977
|
const workspaceInfo = getWorkspaceInfoForIssue(issueId);
|
|
@@ -5989,8 +6001,8 @@ const postWorkspaceAbortReviewRoute = HttpRouter.add("POST", "/api/review/:issue
|
|
|
5989
6001
|
success: false,
|
|
5990
6002
|
error: "Workspace does not exist"
|
|
5991
6003
|
}, { status: 400 });
|
|
5992
|
-
const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-
|
|
5993
|
-
const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-
|
|
6004
|
+
const { resolveProjectFromIssueSync } = yield* Effect.promise(() => import("./projects-BqRMlDOv.js"));
|
|
6005
|
+
const { killAllReviewerSessions } = yield* Effect.promise(() => import("./review-agent-Bf9XjLnl.js"));
|
|
5994
6006
|
const { killed, failed } = yield* killAllReviewerSessions(resolveProjectFromIssueSync(issueId)?.projectKey, issueId);
|
|
5995
6007
|
setReviewStatus(issueId, {
|
|
5996
6008
|
reviewStatus: "pending",
|
|
@@ -6062,8 +6074,8 @@ const getReviewConfigRoute = HttpRouter.add("GET", "/api/review/:issueId/config"
|
|
|
6062
6074
|
const issueId = ((yield* HttpRouter.params)["issueId"] ?? "").toUpperCase();
|
|
6063
6075
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
6064
6076
|
return jsonResponse(yield* Effect.promise(async () => {
|
|
6065
|
-
const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-
|
|
6066
|
-
const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-
|
|
6077
|
+
const { readIssueRecordSync, resolveProjectForIssue } = await import("./record-CJsjvRO4.js");
|
|
6078
|
+
const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-Bf9XjLnl.js");
|
|
6067
6079
|
const project = resolveProjectForIssue(issueId);
|
|
6068
6080
|
const record = project ? readIssueRecordSync(project, issueId) : null;
|
|
6069
6081
|
return {
|
|
@@ -6089,8 +6101,8 @@ const postReviewConfigRoute = HttpRouter.add("POST", "/api/review/:issueId/confi
|
|
|
6089
6101
|
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 });
|
|
6090
6102
|
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 });
|
|
6091
6103
|
return jsonResponse(yield* Effect.promise(async () => {
|
|
6092
|
-
const { ensureIssueRecordSync, readIssueRecordSync, resolveProjectForIssue, writeIssueRecordSync } = await import("./record-
|
|
6093
|
-
const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-
|
|
6104
|
+
const { ensureIssueRecordSync, readIssueRecordSync, resolveProjectForIssue, writeIssueRecordSync } = await import("./record-CJsjvRO4.js");
|
|
6105
|
+
const { resolveReviewMode, resolveReReviewScope } = await import("./review-agent-Bf9XjLnl.js");
|
|
6094
6106
|
const project = resolveProjectForIssue(issueId);
|
|
6095
6107
|
const record = readIssueRecordSync(project, issueId) ?? ensureIssueRecordSync(project, issueId);
|
|
6096
6108
|
if (hasMode) if (body.reviewMode === null) delete record.reviewMode;
|
|
@@ -6484,7 +6496,7 @@ async function readWorkspacePlanningMarkdown(issueId, fileName) {
|
|
|
6484
6496
|
*/
|
|
6485
6497
|
async function readWorkspaceContinueFile(_projectPath, workspacePath, issueId) {
|
|
6486
6498
|
try {
|
|
6487
|
-
const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-
|
|
6499
|
+
const { readRecordContinueViewSync, getProjectConfigFromWorkspacePath, resolveProjectForIssue } = await import("./record-CJsjvRO4.js");
|
|
6488
6500
|
const recordView = readRecordContinueViewSync(resolveProjectForIssue(issueId) ?? getProjectConfigFromWorkspacePath(workspacePath), issueId);
|
|
6489
6501
|
return recordView ? JSON.stringify(recordView, null, 2) : null;
|
|
6490
6502
|
} catch {
|
|
@@ -7253,7 +7265,7 @@ const getWorkspaceReviewStatusRoute = HttpRouter.add("GET", "/api/review/:issueI
|
|
|
7253
7265
|
if (queuePosition === null) try {
|
|
7254
7266
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
7255
7267
|
if (resolved) {
|
|
7256
|
-
const { getQueueForProject } = yield* Effect.promise(() => import("./merge-
|
|
7268
|
+
const { getQueueForProject } = yield* Effect.promise(() => import("./merge-BRkVaIx-.js"));
|
|
7257
7269
|
const mergePos = findPositionInQueueSync(issueId, getQueueForProject(resolved.projectKey).map((e) => ({
|
|
7258
7270
|
id: String(e.id),
|
|
7259
7271
|
type: "task",
|
|
@@ -7291,7 +7303,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
7291
7303
|
const workspaceInfo = getWorkspaceInfoForIssue(issueId);
|
|
7292
7304
|
if (workspaceInfo.exists && workspaceInfo.localPath) {
|
|
7293
7305
|
const localPath = workspaceInfo.localPath;
|
|
7294
|
-
const { getWorkspaceGitInfo } = yield* Effect.promise(() => import("./git-utils-
|
|
7306
|
+
const { getWorkspaceGitInfo } = yield* Effect.promise(() => import("./git-utils-Ym380hJZ.js"));
|
|
7295
7307
|
try {
|
|
7296
7308
|
const gitInfo = yield* getWorkspaceGitInfo(localPath);
|
|
7297
7309
|
if (gitInfo.HEAD) update.reviewedAtCommit = gitInfo.HEAD;
|
|
@@ -7306,7 +7318,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
7306
7318
|
if (verificationStatus) update.verificationStatus = verificationStatus;
|
|
7307
7319
|
if (readyForMerge !== void 0) update.readyForMerge = readyForMerge;
|
|
7308
7320
|
const status = setReviewStatus(issueId, update);
|
|
7309
|
-
const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-
|
|
7321
|
+
const { getTmuxSessionName } = yield* Effect.promise(() => import("./specialists-Chvvwf5z.js"));
|
|
7310
7322
|
const projectKey = resolveProjectFromIssueSync(issueId)?.projectKey;
|
|
7311
7323
|
if (reviewStatus && [
|
|
7312
7324
|
"passed",
|
|
@@ -7324,7 +7336,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
7324
7336
|
const agentId = `agent-${issueId.toLowerCase()}`;
|
|
7325
7337
|
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.`;
|
|
7326
7338
|
try {
|
|
7327
|
-
const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-
|
|
7339
|
+
const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-DCyd75yJ.js"));
|
|
7328
7340
|
const wsInfo = getWorkspaceInfoForIssue(issueId);
|
|
7329
7341
|
const fileResult = yield* Effect.promise(() => writeFeedbackFile({
|
|
7330
7342
|
issueId,
|
|
@@ -7388,7 +7400,7 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
7388
7400
|
const agentId = `agent-${issueId.toLowerCase()}`;
|
|
7389
7401
|
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.`;
|
|
7390
7402
|
try {
|
|
7391
|
-
const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-
|
|
7403
|
+
const { writeFeedbackFile } = yield* Effect.promise(() => import("./feedback-writer-DCyd75yJ.js"));
|
|
7392
7404
|
const wsInfo = getWorkspaceInfoForIssue(issueId);
|
|
7393
7405
|
const fileResult = yield* Effect.promise(() => writeFeedbackFile({
|
|
7394
7406
|
issueId,
|
|
@@ -7413,14 +7425,14 @@ const postWorkspaceReviewStatusRoute = HttpRouter.add("POST", "/api/review/:issu
|
|
|
7413
7425
|
console.log(`[review-status] ${issueId} marked ready for merge after test=passed`);
|
|
7414
7426
|
yield* Effect.promise(async () => {
|
|
7415
7427
|
try {
|
|
7416
|
-
const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-
|
|
7428
|
+
const { resolveProjectFromIssueSync, getProjectSync } = await import("./projects-BqRMlDOv.js");
|
|
7417
7429
|
const project = resolveProjectFromIssueSync(issueId);
|
|
7418
7430
|
const repo = (project ? getProjectSync(project.projectKey) : null)?.github_repo;
|
|
7419
7431
|
if (!repo || !repo.includes("/")) return;
|
|
7420
7432
|
const [owner, name] = repo.split("/");
|
|
7421
7433
|
const wsInfo = getWorkspaceInfoForIssue(issueId);
|
|
7422
7434
|
if (!wsInfo?.localPath) return;
|
|
7423
|
-
const { postOverdeckTestsStatus } = await import("./github-app-
|
|
7435
|
+
const { postOverdeckTestsStatus } = await import("./github-app-DIr70YLg.js");
|
|
7424
7436
|
await postOverdeckTestsStatus(wsInfo.localPath, owner, name, "success", "Test specialist passed");
|
|
7425
7437
|
} catch (err) {
|
|
7426
7438
|
console.warn(`[review-status] Failed to post overdeck/tests for ${issueId}: ${err.message}`);
|
|
@@ -7462,7 +7474,7 @@ const postWorkspaceRefreshTokenRoute = HttpRouter.add("POST", "/api/workspaces/:
|
|
|
7462
7474
|
if (!parseIssueIdSync(issueId)) return jsonResponse({ error: "Invalid issue ID" }, { status: 400 });
|
|
7463
7475
|
const issueLower = issueId.toLowerCase();
|
|
7464
7476
|
const workspacePath = join(getProjectPath(void 0, extractPrefixSync(issueId) ?? issueId.split("-")[0]), "workspaces", `feature-${issueLower}`);
|
|
7465
|
-
const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-
|
|
7477
|
+
const { refreshWorkspaceToken, isGitHubAppConfigured } = yield* Effect.promise(() => import("./github-app-DIr70YLg.js"));
|
|
7466
7478
|
if (!isGitHubAppConfigured()) return jsonResponse({
|
|
7467
7479
|
success: false,
|
|
7468
7480
|
error: "GitHub App not configured"
|
|
@@ -7477,4 +7489,4 @@ const workspacesRouteLayer = Layer.mergeAll(workspaceDataRouteLayer, postWorkspa
|
|
|
7477
7489
|
//#endregion
|
|
7478
7490
|
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 };
|
|
7479
7491
|
|
|
7480
|
-
//# sourceMappingURL=workspaces-
|
|
7492
|
+
//# sourceMappingURL=workspaces-DOeHyKmA.js.map
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# ~/.overdeck/bin/ask-user-question-hook (PAN-1520)
|
|
3
|
+
#
|
|
4
|
+
# PreToolUse hook on AskUserQuestion — denies the tool call to prevent the
|
|
5
|
+
# upstream Claude Code silent-corruption bug (anthropics/claude-code#10229,
|
|
6
|
+
# #10400) where AskUserQuestion's choice menu does not render under
|
|
7
|
+
# --dangerously-skip-permissions and the harness returns option #1's literal
|
|
8
|
+
# label as the tool_result, fabricating an operator answer that never happened.
|
|
9
|
+
#
|
|
10
|
+
# Until the dashboard surfaces AskUserQuestion options interactively (the rest
|
|
11
|
+
# of PAN-1520), the only safe failure mode is "block until the agent re-asks
|
|
12
|
+
# in plain prose". This hook converts silent corruption -> visible block by
|
|
13
|
+
# returning a deny verdict with the full question text + option labels as
|
|
14
|
+
# additionalContext, so the agent restates the choice to the operator as
|
|
15
|
+
# regular text and waits for a normal response.
|
|
16
|
+
#
|
|
17
|
+
# Never breaks Claude Code: on any error the hook exits 0 silently (which
|
|
18
|
+
# lets the original AskUserQuestion call through — preserving the prior
|
|
19
|
+
# behaviour rather than introducing a new hang).
|
|
20
|
+
|
|
21
|
+
set +e
|
|
22
|
+
|
|
23
|
+
INPUT=$(cat 2>/dev/null || echo '{}')
|
|
24
|
+
|
|
25
|
+
if ! command -v jq >/dev/null 2>&1; then
|
|
26
|
+
# Without jq we cannot safely parse the question payload. Allow the call.
|
|
27
|
+
exit 0
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
TOOL_NAME=$(echo "$INPUT" | jq -r '.tool_name // ""' 2>/dev/null)
|
|
31
|
+
if [ "$TOOL_NAME" != "AskUserQuestion" ]; then
|
|
32
|
+
exit 0
|
|
33
|
+
fi
|
|
34
|
+
|
|
35
|
+
# Emit an awareness event to the dashboard via the standard hook lib so the
|
|
36
|
+
# operator can see the question was asked, even though the tool call is denied.
|
|
37
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
38
|
+
# shellcheck source=pan-hook-lib.sh
|
|
39
|
+
. "$SCRIPT_DIR/pan-hook-lib.sh" 2>/dev/null || true
|
|
40
|
+
if declare -f pan_resolve_agent_id >/dev/null && pan_resolve_agent_id; then
|
|
41
|
+
TS=$(date -Iseconds)
|
|
42
|
+
EVENT_BODY=$(echo "$INPUT" | jq --arg ts "$TS" '{
|
|
43
|
+
kind: "ask_user_question_blocked",
|
|
44
|
+
timestamp: $ts,
|
|
45
|
+
questions: (.tool_input.questions // [])
|
|
46
|
+
}' 2>/dev/null)
|
|
47
|
+
if [ -n "$EVENT_BODY" ] && declare -f pan_emit_event >/dev/null; then
|
|
48
|
+
pan_emit_event "$AGENT_ID" "$EVENT_BODY" 2>/dev/null || true
|
|
49
|
+
fi
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
REASON='Your question has been surfaced to the operator in the Overdeck dashboard, where they answer it directly. Restate the question and its options to the operator as a short plain-text message and wait for their reply (it arrives as a normal user message).'
|
|
53
|
+
|
|
54
|
+
CONTEXT=$(echo "$INPUT" | jq -r '
|
|
55
|
+
def fmt_option:
|
|
56
|
+
" - " + (.label // "(no label)")
|
|
57
|
+
+ (if .description then ": " + .description else "" end);
|
|
58
|
+
def fmt_question:
|
|
59
|
+
"Question: " + (.question // "(no question text)")
|
|
60
|
+
+ (if .header then "\nHeader: " + .header else "" end)
|
|
61
|
+
+ "\nOptions:\n" + ((.options // []) | map(fmt_option) | join("\n"));
|
|
62
|
+
(.tool_input.questions // [])
|
|
63
|
+
| map(fmt_question)
|
|
64
|
+
| join("\n\n")
|
|
65
|
+
' 2>/dev/null)
|
|
66
|
+
|
|
67
|
+
if [ -z "$CONTEXT" ]; then
|
|
68
|
+
CONTEXT="(failed to parse questions payload — restate your question to the operator as plain text)"
|
|
69
|
+
fi
|
|
70
|
+
|
|
71
|
+
INSTRUCTION="Restate the following to the operator as a plain-text message, listing the options as a numbered list, and wait for their normal response. Do not call AskUserQuestion again."
|
|
72
|
+
|
|
73
|
+
jq -n \
|
|
74
|
+
--arg reason "$REASON" \
|
|
75
|
+
--arg context "${INSTRUCTION}
|
|
76
|
+
|
|
77
|
+
${CONTEXT}" \
|
|
78
|
+
'{
|
|
79
|
+
hookSpecificOutput: {
|
|
80
|
+
hookEventName: "PreToolUse",
|
|
81
|
+
permissionDecision: "deny",
|
|
82
|
+
permissionDecisionReason: $reason,
|
|
83
|
+
additionalContext: $context
|
|
84
|
+
}
|
|
85
|
+
}'
|
|
86
|
+
|
|
87
|
+
exit 0
|