@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
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
+
import { Dn as getProjectSync, Nn as init_projects, bn as findProjectByPathSync } from "./config-yaml-C_djSurJ.js";
|
|
3
|
+
import { c as init_review_status, y as setReviewStatusSync } from "./review-status-BcfwcAcO.js";
|
|
4
|
+
import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-CsEE2CyQ.js";
|
|
5
|
+
import { i as withComponentStateSync, n as init_release_set, r as upsertReleaseSetSync } from "./release-set-DwvT_Opu.js";
|
|
6
|
+
import { exec } from "node:child_process";
|
|
7
|
+
import { promisify } from "node:util";
|
|
8
|
+
//#region ../../lib/release/release-plan.ts
|
|
9
|
+
function resolveReleasePlan(release) {
|
|
10
|
+
const components = release.components ?? {};
|
|
11
|
+
const activeComponentNames = Object.keys(components).filter((name) => components[name]?.trigger !== "skip");
|
|
12
|
+
const activeComponents = new Set(activeComponentNames);
|
|
13
|
+
const dependencyNotes = /* @__PURE__ */ new Map();
|
|
14
|
+
const activeDependencies = /* @__PURE__ */ new Map();
|
|
15
|
+
for (const name of activeComponentNames) {
|
|
16
|
+
const active = (components[name]?.depends_on ?? []).filter((dependency) => {
|
|
17
|
+
if (activeComponents.has(dependency)) return true;
|
|
18
|
+
const reason = components[dependency]?.trigger === "skip" ? "skipped" : "absent";
|
|
19
|
+
const notes = dependencyNotes.get(name) ?? [];
|
|
20
|
+
notes.push(`Dependency "${dependency}" is ${reason}; treated as satisfied.`);
|
|
21
|
+
dependencyNotes.set(name, notes);
|
|
22
|
+
return false;
|
|
23
|
+
});
|
|
24
|
+
activeDependencies.set(name, active);
|
|
25
|
+
}
|
|
26
|
+
const sorted = [];
|
|
27
|
+
const visitState = /* @__PURE__ */ new Map();
|
|
28
|
+
const stack = [];
|
|
29
|
+
const visit = (name) => {
|
|
30
|
+
const state = visitState.get(name);
|
|
31
|
+
if (state === "visited") return;
|
|
32
|
+
if (state === "visiting") {
|
|
33
|
+
const cycleStart = stack.indexOf(name);
|
|
34
|
+
const cycle = [...stack.slice(cycleStart), name];
|
|
35
|
+
throw new Error(`Release dependency cycle detected: ${cycle.join(" -> ")}`);
|
|
36
|
+
}
|
|
37
|
+
visitState.set(name, "visiting");
|
|
38
|
+
stack.push(name);
|
|
39
|
+
for (const dependency of activeDependencies.get(name) ?? []) visit(dependency);
|
|
40
|
+
stack.pop();
|
|
41
|
+
visitState.set(name, "visited");
|
|
42
|
+
sorted.push(name);
|
|
43
|
+
};
|
|
44
|
+
for (const name of activeComponentNames) visit(name);
|
|
45
|
+
return sorted.map((component, releaseOrder) => ({
|
|
46
|
+
component,
|
|
47
|
+
config: components[component],
|
|
48
|
+
dependsOn: activeDependencies.get(component) ?? [],
|
|
49
|
+
releaseOrder,
|
|
50
|
+
notes: dependencyNotes.get(component) ?? []
|
|
51
|
+
}));
|
|
52
|
+
}
|
|
53
|
+
var init_release_plan = __esmMin((() => {}));
|
|
54
|
+
//#endregion
|
|
55
|
+
//#region ../../lib/release/release-engine.ts
|
|
56
|
+
async function runRelease(issueId, projectPath, options = {}) {
|
|
57
|
+
const mergeSet = getMergeSetSync(issueId);
|
|
58
|
+
if (!mergeSet) throw new Error(`Cannot run release for ${issueId}: merge set not found`);
|
|
59
|
+
const project = getProjectSync(mergeSet.projectKey) ?? findProjectByPathSync(projectPath);
|
|
60
|
+
if (!project?.release) {
|
|
61
|
+
setReviewStatusSync(issueId, {
|
|
62
|
+
releaseStatus: "skipped",
|
|
63
|
+
releaseNotes: "No release config found for project."
|
|
64
|
+
});
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const now = options.now ?? (() => /* @__PURE__ */ new Date());
|
|
68
|
+
options.commandCwd = options.commandCwd ?? projectPath;
|
|
69
|
+
const plan = resolveReleasePlan(project.release);
|
|
70
|
+
let releaseSet = buildReleaseSet(issueId, mergeSet, plan, now().toISOString());
|
|
71
|
+
upsertReleaseSetSync(releaseSet);
|
|
72
|
+
setReviewStatusSync(issueId, { releaseStatus: "releasing" });
|
|
73
|
+
let failure = null;
|
|
74
|
+
for (const entry of plan) {
|
|
75
|
+
if (entry.config.trigger === "manual") {
|
|
76
|
+
releaseSet = persistComponentPatch(releaseSet, entry.component, {
|
|
77
|
+
status: "blocked",
|
|
78
|
+
notes: "Awaiting manual release."
|
|
79
|
+
});
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
const unmetDependencies = entry.dependsOn.filter((dependencyKey) => {
|
|
83
|
+
const dependency = releaseSet.components.find((component) => component.componentKey === dependencyKey);
|
|
84
|
+
return !dependency || dependency.status !== "passed";
|
|
85
|
+
});
|
|
86
|
+
if (unmetDependencies.length > 0) {
|
|
87
|
+
const dependencyNames = unmetDependencies.join(", ");
|
|
88
|
+
releaseSet = persistComponentPatch(releaseSet, entry.component, {
|
|
89
|
+
status: "blocked",
|
|
90
|
+
notes: `Blocked: dependencies not passed: ${dependencyNames}.`
|
|
91
|
+
});
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
releaseSet = persistComponentPatch(releaseSet, entry.component, {
|
|
95
|
+
status: "releasing",
|
|
96
|
+
notes: entry.notes.join(" ") || void 0
|
|
97
|
+
});
|
|
98
|
+
const result = await runAutoComponent(entry.component, entry.config, options);
|
|
99
|
+
releaseSet = persistComponentPatch(releaseSet, entry.component, result.patch);
|
|
100
|
+
if (!result.passed) {
|
|
101
|
+
let rollbackRan = false;
|
|
102
|
+
if (entry.config.rollback) {
|
|
103
|
+
rollbackRan = await runConfiguredCommand(entry.config.rollback, options);
|
|
104
|
+
releaseSet = persistComponentPatch(releaseSet, entry.component, {
|
|
105
|
+
status: rollbackRan ? "rolled_back" : "failed",
|
|
106
|
+
rollbackStatus: rollbackRan ? "rolled_back" : "failed",
|
|
107
|
+
notes: appendNote(result.patch.notes, rollbackRan ? "Rollback completed." : "Rollback failed.")
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
failure = {
|
|
111
|
+
componentKey: entry.component,
|
|
112
|
+
rollbackRan
|
|
113
|
+
};
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (failure) {
|
|
118
|
+
releaseSet = haltRemainingComponents(releaseSet, failure.componentKey);
|
|
119
|
+
const releaseStatus = finalFailureStatus(releaseSet, failure.rollbackRan);
|
|
120
|
+
releaseSet = persistReleaseSetStatus(releaseSet, releaseStatus);
|
|
121
|
+
setReviewStatusSync(issueId, {
|
|
122
|
+
releaseStatus,
|
|
123
|
+
releaseNotes: `Release halted at ${failure.componentKey}.`
|
|
124
|
+
});
|
|
125
|
+
return releaseSet;
|
|
126
|
+
}
|
|
127
|
+
const blockedComponents = releaseSet.components.filter((component) => component.status === "blocked");
|
|
128
|
+
if (blockedComponents.length > 0) {
|
|
129
|
+
const blockedKeys = blockedComponents.map((component) => component.componentKey).join(", ");
|
|
130
|
+
releaseSet = persistReleaseSetStatus(releaseSet, "partial");
|
|
131
|
+
setReviewStatusSync(issueId, {
|
|
132
|
+
releaseStatus: "partial",
|
|
133
|
+
releaseNotes: `Release awaiting manual step(s): ${blockedKeys}.`
|
|
134
|
+
});
|
|
135
|
+
return releaseSet;
|
|
136
|
+
}
|
|
137
|
+
releaseSet = persistReleaseSetStatus(releaseSet, "passed");
|
|
138
|
+
setReviewStatusSync(issueId, { releaseStatus: "passed" });
|
|
139
|
+
return releaseSet;
|
|
140
|
+
}
|
|
141
|
+
function buildReleaseSet(issueId, mergeSet, plan, timestamp) {
|
|
142
|
+
return {
|
|
143
|
+
issueId,
|
|
144
|
+
projectKey: mergeSet.projectKey,
|
|
145
|
+
projectPath: mergeSet.projectPath,
|
|
146
|
+
workspaceType: mergeSet.workspaceType,
|
|
147
|
+
status: "releasing",
|
|
148
|
+
createdAt: timestamp,
|
|
149
|
+
updatedAt: timestamp,
|
|
150
|
+
components: plan.map((entry) => ({
|
|
151
|
+
componentKey: entry.component,
|
|
152
|
+
provider: entry.config.provider,
|
|
153
|
+
trigger: entry.config.trigger,
|
|
154
|
+
releaseOrder: entry.releaseOrder,
|
|
155
|
+
required: true,
|
|
156
|
+
status: "pending",
|
|
157
|
+
healthStatus: entry.config.health_url ? "pending" : "skipped",
|
|
158
|
+
versionStatus: entry.config.version_check ? "pending" : "skipped",
|
|
159
|
+
smokeStatus: entry.config.smoke_test ? "pending" : "skipped",
|
|
160
|
+
rollbackStatus: entry.config.rollback ? "pending" : "skipped",
|
|
161
|
+
notes: entry.notes.join(" ") || void 0
|
|
162
|
+
}))
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
async function runAutoComponent(componentKey, config, options) {
|
|
166
|
+
if (config.health_url) {
|
|
167
|
+
if (!await waitForHealth(config.health_url, options)) return {
|
|
168
|
+
passed: false,
|
|
169
|
+
patch: {
|
|
170
|
+
status: "failed",
|
|
171
|
+
healthStatus: "failed",
|
|
172
|
+
notes: `Health check failed for ${componentKey}.`
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
if (config.version_check) {
|
|
177
|
+
if (!await runConfiguredCommand(config.version_check, options)) return {
|
|
178
|
+
passed: false,
|
|
179
|
+
patch: {
|
|
180
|
+
status: "failed",
|
|
181
|
+
healthStatus: config.health_url ? "passed" : "skipped",
|
|
182
|
+
versionStatus: "failed",
|
|
183
|
+
notes: `Version check failed for ${componentKey}.`
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
if (config.smoke_test) {
|
|
188
|
+
if (!await runConfiguredCommand(config.smoke_test, options)) return {
|
|
189
|
+
passed: false,
|
|
190
|
+
patch: {
|
|
191
|
+
status: "failed",
|
|
192
|
+
healthStatus: config.health_url ? "passed" : "skipped",
|
|
193
|
+
versionStatus: config.version_check ? "passed" : "skipped",
|
|
194
|
+
smokeStatus: "failed",
|
|
195
|
+
notes: `Smoke test failed for ${componentKey}.`
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
passed: true,
|
|
201
|
+
patch: {
|
|
202
|
+
status: "passed",
|
|
203
|
+
healthStatus: config.health_url ? "passed" : "skipped",
|
|
204
|
+
versionStatus: config.version_check ? "passed" : "skipped",
|
|
205
|
+
smokeStatus: config.smoke_test ? "passed" : "skipped"
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
async function waitForHealth(url, options) {
|
|
210
|
+
const timeoutMs = options.healthTimeoutMs ?? DEFAULT_HEALTH_TIMEOUT_MS;
|
|
211
|
+
const intervalMs = options.healthPollIntervalMs ?? DEFAULT_HEALTH_POLL_INTERVAL_MS;
|
|
212
|
+
const fetchHealth = options.fetchHealth ?? defaultFetchHealth;
|
|
213
|
+
const sleep = options.sleep ?? defaultSleep;
|
|
214
|
+
const deadline = Date.now() + timeoutMs;
|
|
215
|
+
while (true) {
|
|
216
|
+
try {
|
|
217
|
+
if ((await fetchHealth(url, options.commandTimeoutMs ?? DEFAULT_COMMAND_TIMEOUT_MS)).ok) return true;
|
|
218
|
+
} catch {}
|
|
219
|
+
const remaining = deadline - Date.now();
|
|
220
|
+
if (remaining <= 0) return false;
|
|
221
|
+
await sleep(Math.min(intervalMs, remaining));
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
async function runConfiguredCommand(command, options) {
|
|
225
|
+
const timeoutMs = options.commandTimeoutMs ?? DEFAULT_COMMAND_TIMEOUT_MS;
|
|
226
|
+
const runCommand = options.runCommand ?? defaultRunCommand;
|
|
227
|
+
try {
|
|
228
|
+
await runCommand(command, timeoutMs, options.commandCwd);
|
|
229
|
+
return true;
|
|
230
|
+
} catch {
|
|
231
|
+
return false;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
async function defaultRunCommand(command, timeoutMs, cwd) {
|
|
235
|
+
await execAsync(command, {
|
|
236
|
+
timeout: timeoutMs,
|
|
237
|
+
cwd
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
async function defaultFetchHealth(url, timeoutMs) {
|
|
241
|
+
const controller = new AbortController();
|
|
242
|
+
const timeout = setTimeout(() => controller.abort(), timeoutMs);
|
|
243
|
+
try {
|
|
244
|
+
const response = await fetch(url, { signal: controller.signal });
|
|
245
|
+
return {
|
|
246
|
+
ok: response.ok,
|
|
247
|
+
status: response.status
|
|
248
|
+
};
|
|
249
|
+
} finally {
|
|
250
|
+
clearTimeout(timeout);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
function defaultSleep(ms) {
|
|
254
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
255
|
+
}
|
|
256
|
+
function persistComponentPatch(releaseSet, componentKey, patch) {
|
|
257
|
+
const updated = withComponentStateSync(releaseSet, componentKey, patch);
|
|
258
|
+
upsertReleaseSetSync(updated);
|
|
259
|
+
return updated;
|
|
260
|
+
}
|
|
261
|
+
function persistReleaseSetStatus(releaseSet, status) {
|
|
262
|
+
const updated = {
|
|
263
|
+
...releaseSet,
|
|
264
|
+
status,
|
|
265
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
266
|
+
};
|
|
267
|
+
upsertReleaseSetSync(updated);
|
|
268
|
+
return updated;
|
|
269
|
+
}
|
|
270
|
+
function haltRemainingComponents(releaseSet, failedComponentKey) {
|
|
271
|
+
const failed = releaseSet.components.find((component) => component.componentKey === failedComponentKey);
|
|
272
|
+
if (!failed) return releaseSet;
|
|
273
|
+
let updated = releaseSet;
|
|
274
|
+
for (const component of releaseSet.components) {
|
|
275
|
+
if (component.releaseOrder <= failed.releaseOrder || component.status !== "pending") continue;
|
|
276
|
+
updated = withComponentStateSync(updated, component.componentKey, {
|
|
277
|
+
status: "skipped",
|
|
278
|
+
notes: "Release halted before this component ran."
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
upsertReleaseSetSync(updated);
|
|
282
|
+
return updated;
|
|
283
|
+
}
|
|
284
|
+
function finalFailureStatus(releaseSet, rollbackRan) {
|
|
285
|
+
if (rollbackRan) return "rolled_back";
|
|
286
|
+
return releaseSet.components.some((component) => component.required && component.status === "passed") ? "partial" : "failed";
|
|
287
|
+
}
|
|
288
|
+
function appendNote(existing, note) {
|
|
289
|
+
return existing ? `${existing} ${note}` : note;
|
|
290
|
+
}
|
|
291
|
+
var execAsync, DEFAULT_COMMAND_TIMEOUT_MS, DEFAULT_HEALTH_TIMEOUT_MS, DEFAULT_HEALTH_POLL_INTERVAL_MS;
|
|
292
|
+
//#endregion
|
|
293
|
+
__esmMin((() => {
|
|
294
|
+
init_merge_set();
|
|
295
|
+
init_projects();
|
|
296
|
+
init_review_status();
|
|
297
|
+
init_release_set();
|
|
298
|
+
init_release_plan();
|
|
299
|
+
execAsync = promisify(exec);
|
|
300
|
+
DEFAULT_COMMAND_TIMEOUT_MS = 6e4;
|
|
301
|
+
DEFAULT_HEALTH_TIMEOUT_MS = 12e4;
|
|
302
|
+
DEFAULT_HEALTH_POLL_INTERVAL_MS = 2e3;
|
|
303
|
+
}))();
|
|
304
|
+
export { runRelease };
|
|
305
|
+
|
|
306
|
+
//# sourceMappingURL=release-engine-YLTnEO_K.js.map
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
+
import { er as init_issue_id, ir as resolveIssueIdSync } from "./config-yaml-C_djSurJ.js";
|
|
3
|
+
import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-Clew3DpF.js";
|
|
4
|
+
import "effect";
|
|
5
|
+
//#region ../../lib/overdeck/release-sync.ts
|
|
6
|
+
function isoFromMillis(value) {
|
|
7
|
+
return new Date(value).toISOString();
|
|
8
|
+
}
|
|
9
|
+
function millisFromIso(value) {
|
|
10
|
+
if (!value) return null;
|
|
11
|
+
const ms = Date.parse(value);
|
|
12
|
+
return Number.isFinite(ms) ? ms : null;
|
|
13
|
+
}
|
|
14
|
+
function nowMillis() {
|
|
15
|
+
return Date.now();
|
|
16
|
+
}
|
|
17
|
+
function rowToReleaseSet(row, components) {
|
|
18
|
+
return {
|
|
19
|
+
issueId: row.issue_id,
|
|
20
|
+
projectKey: row.project_key,
|
|
21
|
+
projectPath: row.project_path,
|
|
22
|
+
workspaceType: row.workspace_type,
|
|
23
|
+
status: row.status,
|
|
24
|
+
createdAt: isoFromMillis(row.created_at),
|
|
25
|
+
updatedAt: isoFromMillis(row.updated_at),
|
|
26
|
+
components
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function rowToReleaseComponent(row) {
|
|
30
|
+
return {
|
|
31
|
+
componentKey: row.component_key,
|
|
32
|
+
provider: row.provider ?? void 0,
|
|
33
|
+
trigger: row.trigger,
|
|
34
|
+
releaseOrder: row.release_order,
|
|
35
|
+
required: row.required === 1,
|
|
36
|
+
status: row.status,
|
|
37
|
+
healthStatus: row.health_status ?? void 0,
|
|
38
|
+
versionStatus: row.version_status ?? void 0,
|
|
39
|
+
smokeStatus: row.smoke_status ?? void 0,
|
|
40
|
+
rollbackStatus: row.rollback_status ?? void 0,
|
|
41
|
+
notes: row.notes ?? void 0
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function loadComponentsForReleaseSet(db, issueId) {
|
|
45
|
+
return db.prepare(`
|
|
46
|
+
SELECT component_key, provider, trigger, release_order, required, status,
|
|
47
|
+
health_status, version_status, smoke_status, rollback_status, notes
|
|
48
|
+
FROM release_set_components
|
|
49
|
+
WHERE issue_id = ?
|
|
50
|
+
ORDER BY release_order ASC, component_key ASC
|
|
51
|
+
`).all(issueId).map(rowToReleaseComponent);
|
|
52
|
+
}
|
|
53
|
+
/** Insert or replace a release set and its component rows. */
|
|
54
|
+
function upsertReleaseSet(releaseSet) {
|
|
55
|
+
const db = getOverdeckDatabaseSync();
|
|
56
|
+
const createdAtMs = millisFromIso(releaseSet.createdAt) ?? nowMillis();
|
|
57
|
+
const updatedAtMs = millisFromIso(releaseSet.updatedAt) ?? nowMillis();
|
|
58
|
+
db.transaction((set) => {
|
|
59
|
+
db.prepare(`
|
|
60
|
+
INSERT INTO release_sets (
|
|
61
|
+
issue_id, project_key, project_path, workspace_type, status, created_at, updated_at
|
|
62
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
63
|
+
ON CONFLICT(issue_id) DO UPDATE SET
|
|
64
|
+
project_key = excluded.project_key,
|
|
65
|
+
project_path = excluded.project_path,
|
|
66
|
+
workspace_type = excluded.workspace_type,
|
|
67
|
+
status = excluded.status,
|
|
68
|
+
created_at = excluded.created_at,
|
|
69
|
+
updated_at = excluded.updated_at
|
|
70
|
+
`).run(set.issueId, set.projectKey, set.projectPath, set.workspaceType, set.status, createdAtMs, updatedAtMs);
|
|
71
|
+
db.prepare("DELETE FROM release_set_components WHERE issue_id = ?").run(set.issueId);
|
|
72
|
+
const insertComponent = db.prepare(`
|
|
73
|
+
INSERT INTO release_set_components (
|
|
74
|
+
issue_id, component_key, provider, trigger, release_order, required, status,
|
|
75
|
+
health_status, version_status, smoke_status, rollback_status, notes
|
|
76
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
77
|
+
`);
|
|
78
|
+
for (const component of set.components) insertComponent.run(set.issueId, component.componentKey, component.provider ?? null, component.trigger, component.releaseOrder, component.required ? 1 : 0, component.status, component.healthStatus ?? null, component.versionStatus ?? null, component.smokeStatus ?? null, component.rollbackStatus ?? null, component.notes ?? null);
|
|
79
|
+
})(releaseSet);
|
|
80
|
+
}
|
|
81
|
+
/** Fetch a release set by issue id, or null if none exists. */
|
|
82
|
+
function getReleaseSetFromDb(issueId) {
|
|
83
|
+
const db = getOverdeckDatabaseSync();
|
|
84
|
+
const row = db.prepare(`
|
|
85
|
+
SELECT issue_id, project_key, project_path, workspace_type, status, created_at, updated_at
|
|
86
|
+
FROM release_sets
|
|
87
|
+
WHERE issue_id = ?
|
|
88
|
+
`).get(issueId);
|
|
89
|
+
if (!row) return null;
|
|
90
|
+
return rowToReleaseSet(row, loadComponentsForReleaseSet(db, issueId));
|
|
91
|
+
}
|
|
92
|
+
var init_release_sync = __esmMin((() => {
|
|
93
|
+
init_infra();
|
|
94
|
+
}));
|
|
95
|
+
//#endregion
|
|
96
|
+
//#region ../../lib/release-set.ts
|
|
97
|
+
function upsertReleaseSetSync(releaseSet) {
|
|
98
|
+
upsertReleaseSet({
|
|
99
|
+
...releaseSet,
|
|
100
|
+
issueId: resolveIssueIdSync(releaseSet.issueId)
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
function getReleaseSetSync(issueId) {
|
|
104
|
+
return getReleaseSetFromDb(resolveIssueIdSync(issueId));
|
|
105
|
+
}
|
|
106
|
+
function withComponentStateSync(releaseSet, componentKey, patch) {
|
|
107
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
108
|
+
return {
|
|
109
|
+
...releaseSet,
|
|
110
|
+
updatedAt: now,
|
|
111
|
+
components: releaseSet.components.map((component) => component.componentKey === componentKey ? {
|
|
112
|
+
...component,
|
|
113
|
+
...patch,
|
|
114
|
+
componentKey
|
|
115
|
+
} : component)
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
var init_release_set = __esmMin((() => {
|
|
119
|
+
init_release_sync();
|
|
120
|
+
init_issue_id();
|
|
121
|
+
}));
|
|
122
|
+
//#endregion
|
|
123
|
+
export { withComponentStateSync as i, init_release_set as n, upsertReleaseSetSync as r, getReleaseSetSync as t };
|
|
124
|
+
|
|
125
|
+
//# sourceMappingURL=release-set-DwvT_Opu.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "./workspace-metadata-
|
|
2
|
-
import { C as init_fly_provider, S as createFlyProvider, s as init_remote_agents } from "./remote-agents-
|
|
1
|
+
import "./workspace-metadata-C8yn8kAH.js";
|
|
2
|
+
import { C as init_fly_provider, S as createFlyProvider, s as init_remote_agents } from "./remote-agents-BBTg-vLT.js";
|
|
3
3
|
import { Effect } from "effect";
|
|
4
4
|
//#region ../../lib/remote/index.ts
|
|
5
5
|
init_fly_provider();
|
|
@@ -52,4 +52,4 @@ function createFlyProviderFromConfig(remoteConfig, tierOverride) {
|
|
|
52
52
|
//#endregion
|
|
53
53
|
export { getRemoteProvider as n, isRemoteAvailable as r, createFlyProviderFromConfig as t };
|
|
54
54
|
|
|
55
|
-
//# sourceMappingURL=remote-
|
|
55
|
+
//# sourceMappingURL=remote-9u9WL0NJ.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync, n as deleteWorkspaceMetadataSync, o as saveWorkspaceMetadataSync, r as findRemoteWorkspaceMetadataSync, t as WORKSPACES_DIR } from "./workspace-metadata-
|
|
2
|
-
import { S as createFlyProvider, d as killRemoteAgent, g as refreshHostHeartbeatForEphemeralVms, h as pollRemoteAgentStatus, m as loadRemoteAgentState, o as getRemoteAgentOutput, p as listRemoteAgents, r as checkRemoteSpendCap, u as isRemoteAgentRunning, v as sendToRemoteAgent, x as FlyProvider, y as spawnRemoteAgent } from "./remote-agents-
|
|
3
|
-
import { n as getRemoteProvider, r as isRemoteAvailable, t as createFlyProviderFromConfig } from "./remote-
|
|
1
|
+
import { a as loadWorkspaceMetadataSync, i as listWorkspaceMetadataSync, n as deleteWorkspaceMetadataSync, o as saveWorkspaceMetadataSync, r as findRemoteWorkspaceMetadataSync, t as WORKSPACES_DIR } from "./workspace-metadata-C8yn8kAH.js";
|
|
2
|
+
import { S as createFlyProvider, d as killRemoteAgent, g as refreshHostHeartbeatForEphemeralVms, h as pollRemoteAgentStatus, m as loadRemoteAgentState, o as getRemoteAgentOutput, p as listRemoteAgents, r as checkRemoteSpendCap, u as isRemoteAgentRunning, v as sendToRemoteAgent, x as FlyProvider, y as spawnRemoteAgent } from "./remote-agents-BBTg-vLT.js";
|
|
3
|
+
import { n as getRemoteProvider, r as isRemoteAvailable, t as createFlyProviderFromConfig } from "./remote-9u9WL0NJ.js";
|
|
4
4
|
export { FlyProvider, WORKSPACES_DIR, checkRemoteSpendCap, createFlyProvider, createFlyProviderFromConfig, deleteWorkspaceMetadataSync, findRemoteWorkspaceMetadataSync, getRemoteAgentOutput, getRemoteProvider, isRemoteAgentRunning, isRemoteAvailable, killRemoteAgent, listRemoteAgents, listWorkspaceMetadataSync, loadRemoteAgentState, loadWorkspaceMetadataSync, pollRemoteAgentStatus, refreshHostHeartbeatForEphemeralVms, saveWorkspaceMetadataSync, sendToRemoteAgent, spawnRemoteAgent };
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { _ as saveRemoteAgentState, a as generatePushDaemonScript, b as writeRemoteFile, c as installEphemeralWatchdog, d as killRemoteAgent, f as listActiveRemoteAgentStates, g as refreshHostHeartbeatForEphemeralVms, h as pollRemoteAgentStatus, i as generateEphemeralWatchdogScript, l as installPushDaemon, m as loadRemoteAgentState, n as checkRemoteDurabilityPreflight, o as getRemoteAgentOutput, p as listRemoteAgents, r as checkRemoteSpendCap, s as init_remote_agents, t as assertFlyRemoteStateSupported, u as isRemoteAgentRunning, v as sendToRemoteAgent, y as spawnRemoteAgent } from "./remote-agents-
|
|
1
|
+
import { _ as saveRemoteAgentState, a as generatePushDaemonScript, b as writeRemoteFile, c as installEphemeralWatchdog, d as killRemoteAgent, f as listActiveRemoteAgentStates, g as refreshHostHeartbeatForEphemeralVms, h as pollRemoteAgentStatus, i as generateEphemeralWatchdogScript, l as installPushDaemon, m as loadRemoteAgentState, n as checkRemoteDurabilityPreflight, o as getRemoteAgentOutput, p as listRemoteAgents, r as checkRemoteSpendCap, s as init_remote_agents, t as assertFlyRemoteStateSupported, u as isRemoteAgentRunning, v as sendToRemoteAgent, y as spawnRemoteAgent } from "./remote-agents-BBTg-vLT.js";
|
|
2
2
|
init_remote_agents();
|
|
3
3
|
export { assertFlyRemoteStateSupported, checkRemoteDurabilityPreflight, checkRemoteSpendCap, generateEphemeralWatchdogScript, generatePushDaemonScript, getRemoteAgentOutput, installEphemeralWatchdog, installPushDaemon, isRemoteAgentRunning, killRemoteAgent, listActiveRemoteAgentStates, listRemoteAgents, loadRemoteAgentState, pollRemoteAgentStatus, refreshHostHeartbeatForEphemeralVms, saveRemoteAgentState, sendToRemoteAgent, spawnRemoteAgent, writeRemoteFile };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { n as __esmMin, o as __toESM } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { Ft as resolveProjectForIssue, Ot as init_record,
|
|
3
|
-
import { g as getManagedTmuxSocketName, x as init_tmux } from "./tmux-
|
|
4
|
-
import { a as init_launcher_generator, i as generateLauncherScriptSync, n as init_state_home, r as isStateMigrated } from "./state-home-
|
|
5
|
-
import { a as init_claude_permissions, i as getClaudePermissionFlagsSync, n as buildClaudeUserSettingsSync, r as getClaudePermissionFlagsStringSync } from "./claude-permissions-
|
|
2
|
+
import { Ft as resolveProjectForIssue, Ot as init_record, ar as require_dist, yr as init_errors } from "./config-yaml-C_djSurJ.js";
|
|
3
|
+
import { g as getManagedTmuxSocketName, x as init_tmux } from "./tmux-BVc-NeKM.js";
|
|
4
|
+
import { a as init_launcher_generator, i as generateLauncherScriptSync, n as init_state_home, r as isStateMigrated } from "./state-home-CoyWsECg.js";
|
|
5
|
+
import { a as init_claude_permissions, i as getClaudePermissionFlagsSync, n as buildClaudeUserSettingsSync, r as getClaudePermissionFlagsStringSync } from "./claude-permissions-DxIjkOVl.js";
|
|
6
6
|
import { Data, Effect, Stream } from "effect";
|
|
7
7
|
import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "fs";
|
|
8
8
|
import { join } from "path";
|
|
@@ -1259,4 +1259,4 @@ var init_remote_agents = __esmMin((() => {
|
|
|
1259
1259
|
//#endregion
|
|
1260
1260
|
export { init_fly_provider as C, createFlyProvider as S, saveRemoteAgentState as _, generatePushDaemonScript as a, writeRemoteFile as b, installEphemeralWatchdog as c, killRemoteAgent as d, listActiveRemoteAgentStates as f, refreshHostHeartbeatForEphemeralVms as g, pollRemoteAgentStatus as h, generateEphemeralWatchdogScript as i, installPushDaemon as l, loadRemoteAgentState as m, checkRemoteDurabilityPreflight as n, getRemoteAgentOutput as o, listRemoteAgents as p, checkRemoteSpendCap as r, init_remote_agents as s, assertFlyRemoteStateSupported as t, isRemoteAgentRunning as u, sendToRemoteAgent as v, FlyProvider as x, spawnRemoteAgent as y };
|
|
1261
1261
|
|
|
1262
|
-
//# sourceMappingURL=remote-agents-
|
|
1262
|
+
//# sourceMappingURL=remote-agents-BBTg-vLT.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Gn as resolveProjectFromIssueSync, Nn as init_projects, Sn as findProjectByTeamSync, vn as extractTeamPrefix } from "./config-yaml-
|
|
1
|
+
import { Gn as resolveProjectFromIssueSync, Nn as init_projects, Sn as findProjectByTeamSync, vn as extractTeamPrefix } from "./config-yaml-C_djSurJ.js";
|
|
2
2
|
import { a as PAN_DIRNAME, i as PAN_CONTINUE_FILENAME } from "./types-CE1m_daD.js";
|
|
3
|
-
import { f as init_config, m as loadConfigSync } from "./config-
|
|
4
|
-
import { t as init_pan_dir } from "./pan-dir-
|
|
5
|
-
import { r as init_workspace_manager, t as createWorkspace } from "./workspace-manager-
|
|
6
|
-
import { _ as saveRemoteAgentState, f as listActiveRemoteAgentStates, m as loadRemoteAgentState, o as getRemoteAgentOutput, s as init_remote_agents, u as isRemoteAgentRunning, v as sendToRemoteAgent } from "./remote-agents-
|
|
7
|
-
import { t as createFlyProviderFromConfig } from "./remote-
|
|
3
|
+
import { f as init_config, m as loadConfigSync } from "./config-DsCxzjXK.js";
|
|
4
|
+
import { t as init_pan_dir } from "./pan-dir-BlNrLzW7.js";
|
|
5
|
+
import { r as init_workspace_manager, t as createWorkspace } from "./workspace-manager-D6NgGkiF.js";
|
|
6
|
+
import { _ as saveRemoteAgentState, f as listActiveRemoteAgentStates, m as loadRemoteAgentState, o as getRemoteAgentOutput, s as init_remote_agents, u as isRemoteAgentRunning, v as sendToRemoteAgent } from "./remote-agents-BBTg-vLT.js";
|
|
7
|
+
import { t as createFlyProviderFromConfig } from "./remote-9u9WL0NJ.js";
|
|
8
8
|
import { Effect } from "effect";
|
|
9
9
|
import { existsSync, mkdirSync, statSync, unlinkSync, writeFileSync } from "fs";
|
|
10
10
|
import { basename, join } from "path";
|
|
@@ -309,7 +309,7 @@ async function reapCompletedRemoteAgents(opts = {}) {
|
|
|
309
309
|
} catch {
|
|
310
310
|
details.push("No continue.json retrieved from VM (skipped)");
|
|
311
311
|
}
|
|
312
|
-
const { getAgentStateSync, saveAgentStateSync } = await import("./agents-
|
|
312
|
+
const { getAgentStateSync, saveAgentStateSync } = await import("./agents-CxbuBjID.js");
|
|
313
313
|
const existing = getAgentStateSync(agentId);
|
|
314
314
|
if (existing) {
|
|
315
315
|
existing.workspace = existing.workspace || workspacePath;
|
|
@@ -327,8 +327,8 @@ async function reapCompletedRemoteAgents(opts = {}) {
|
|
|
327
327
|
startedAt: remoteState.startedAt,
|
|
328
328
|
lastActivity: (/* @__PURE__ */ new Date()).toISOString()
|
|
329
329
|
});
|
|
330
|
-
const { createReviewArtifactsForIssue } = await import("./review-artifacts-
|
|
331
|
-
const { setReviewStatusSync } = await import("./review-status-
|
|
330
|
+
const { createReviewArtifactsForIssue } = await import("./review-artifacts-D0_IE6DQ.js");
|
|
331
|
+
const { setReviewStatusSync } = await import("./review-status-B0Axo-Ma.js");
|
|
332
332
|
const primaryArtifact = (await Effect.runPromise(createReviewArtifactsForIssue(issueId, workspacePath))).mergeSet?.repos.find((repo) => !!repo.artifactUrl);
|
|
333
333
|
if (primaryArtifact?.artifactUrl) {
|
|
334
334
|
setReviewStatusSync(issueId, { prUrl: primaryArtifact.artifactUrl });
|
|
@@ -349,7 +349,7 @@ async function reapCompletedRemoteAgents(opts = {}) {
|
|
|
349
349
|
try {
|
|
350
350
|
const fly = createFlyProviderFromConfig(loadConfigSync().remote);
|
|
351
351
|
if (sessionAlive) {
|
|
352
|
-
const { killRemoteAgent } = await import("./remote-agents-
|
|
352
|
+
const { killRemoteAgent } = await import("./remote-agents-B4eWgwNd.js");
|
|
353
353
|
await killRemoteAgent(agentId, vmName).catch(() => void 0);
|
|
354
354
|
}
|
|
355
355
|
await Effect.runPromise(fly.deleteVm(vmName));
|
|
@@ -357,7 +357,7 @@ async function reapCompletedRemoteAgents(opts = {}) {
|
|
|
357
357
|
} catch (err) {
|
|
358
358
|
details.push(`Warning: could not destroy machine: ${err.message}`);
|
|
359
359
|
}
|
|
360
|
-
const { deleteWorkspaceMetadataSync } = await import("./workspace-metadata-
|
|
360
|
+
const { deleteWorkspaceMetadataSync } = await import("./workspace-metadata-DfgR40YU.js");
|
|
361
361
|
deleteWorkspaceMetadataSync(issueId);
|
|
362
362
|
details.push("Removed remote workspace metadata (pipeline is local from here)");
|
|
363
363
|
saveRemoteAgentState({
|
|
@@ -386,4 +386,4 @@ async function reapCompletedRemoteAgents(opts = {}) {
|
|
|
386
386
|
//#endregion
|
|
387
387
|
export { reapCompletedRemoteAgents, refreshClaudeCredentialsForActiveRemoteAgents };
|
|
388
388
|
|
|
389
|
-
//# sourceMappingURL=remote-completion-
|
|
389
|
+
//# sourceMappingURL=remote-completion-B0rmBnbL.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as isReviewStaleSync, c as purgeReviewAgentsForIssue, d as buildConvoyPrompt, f as handleReviewDiscoveryReady, h as reviewResumeDecision, i as isReviewSessionForIssue, l as resolveReviewMode, m as spawnReviewSubRoleForIssue, n as init_review_agent, o as killAllReviewSessions, p as resolveReReviewScope, r as isExtendedReviewEnabled, s as killAllReviewerSessions, t as PARENT_REVIEW_TIMEOUT_MS, u as spawnReviewRoleForIssue } from "./review-agent-
|
|
1
|
+
import { a as isReviewStaleSync, c as purgeReviewAgentsForIssue, d as buildConvoyPrompt, f as handleReviewDiscoveryReady, h as reviewResumeDecision, i as isReviewSessionForIssue, l as resolveReviewMode, m as spawnReviewSubRoleForIssue, n as init_review_agent, o as killAllReviewSessions, p as resolveReReviewScope, r as isExtendedReviewEnabled, s as killAllReviewerSessions, t as PARENT_REVIEW_TIMEOUT_MS, u as spawnReviewRoleForIssue } from "./review-agent-tfR5RDzG.js";
|
|
2
2
|
init_review_agent();
|
|
3
3
|
export { PARENT_REVIEW_TIMEOUT_MS, buildConvoyPrompt, handleReviewDiscoveryReady, isExtendedReviewEnabled, isReviewSessionForIssue, isReviewStaleSync, killAllReviewSessions, killAllReviewerSessions, purgeReviewAgentsForIssue, resolveReReviewScope, resolveReviewMode, reviewResumeDecision, spawnReviewRoleForIssue, spawnReviewSubRoleForIssue };
|