@overdeck/desktop 0.47.0 → 0.47.1
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/package.json +1 -1
- package/server/{acceptance-criteria-10Ur5Dne.js → acceptance-criteria-Cd7ZGZCq.js} +2 -2
- package/server/{advancing-selfheal-BNwqxseD.js → advancing-selfheal-DieFp3qi.js} +5 -5
- package/server/{agent-gc-C3h9Or3a.js → agent-gc-BMcgTDl7.js} +4 -4
- package/server/{agent-state-CYXJVG72.js → agent-state-DyZJia9f.js} +1 -1
- package/server/{agent-state-service-Ds6OeFvo.js → agent-state-service-BOzQhLjU.js} +4 -4
- package/server/{agent-state-service-C63p_ftq.js → agent-state-service-DFO6qvHp.js} +1 -1
- package/server/agent-state-source-Ca_zCaII.js +21 -0
- package/server/{agents-J5mEnekq.js → agents-CtACUuVG.js} +3 -3
- package/server/{agents-ePFVoZbu.js → agents-Dnn4XgdB.js} +1 -1
- package/server/archive-planning-BHCd_eL5.js +2 -0
- package/server/{archive-planning-BwhxeP7C.js → archive-planning-Binfb99i.js} +4 -4
- package/server/{artifact-index-jobs-D1q_vR3V.js → artifact-index-jobs-Jn7BGOtV.js} +1 -1
- package/server/{assemble-Bgwqv-Ro.js → assemble-DsqK9OAq.js} +1 -1
- package/server/{auto-spawn-consent-CQ9Bi9q6.js → auto-spawn-consent-BooqhC3L.js} +3 -3
- package/server/{backlog-auto-trigger-n1lzPgN4.js → backlog-auto-trigger-BADGPxov.js} +3 -3
- package/server/{behavior-td6-xhQk.js → behavior-B7biGtFT.js} +1 -1
- package/server/{boot-reconciled-stop-events-C7gGe3oB.js → boot-reconciled-stop-events-bQUzU8ns.js} +1 -1
- package/server/{bridge-pool-patrol-CYH2OLb5.js → bridge-pool-patrol-DsPj6F7t.js} +1 -1
- package/server/{briefing-freshness-DRqZ8lAz.js → briefing-freshness-CUerZqWd.js} +1 -1
- package/server/{build-info-7yiEpl6u.js → build-info-D0q_i8WM.js} +3 -3
- package/server/{build-info-CpG__c63.js → build-info-Du74MKiP.js} +1 -1
- package/server/{checkpoint-manager-CkKmB0wZ.js → checkpoint-manager-Cu-R5Uzg.js} +1 -1
- package/server/{checkpoint-manager-DBcyNR8w.js → checkpoint-manager-R5tnaxEY.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-D95apurL.js → checkpoints-DYtLu-PB.js} +1 -1
- package/server/{checkpoints-Wm963lm8.js → checkpoints-wF84ubZ8.js} +1 -1
- package/server/{claude-hooks-provision-Bjitl9aI.js → claude-hooks-provision-DXI3Wqlm.js} +1 -1
- package/server/{claude-hooks-provision-4RPxNkE8.js → claude-hooks-provision-UKxCeOyj.js} +1 -1
- package/server/{claude-permissions-CpbpvUQ2.js → claude-permissions-DYVLnX9t.js} +1 -1
- package/server/{claude-settings-overlay-_H9Yrzab.js → claude-settings-overlay-DsbpIq2d.js} +1 -1
- package/server/{claude-settings-overlay-BzkHYDwR.js → claude-settings-overlay-DxP2F_gY.js} +1 -1
- package/server/cli-D6mRfUE6.js +3 -0
- package/server/{cli-Cte9ZFGn.js → cli-DzRKxxP_.js} +7 -7
- package/server/{cliproxy-C5fMJ7rY.js → cliproxy-CG4meRFc.js} +1 -1
- package/server/{cliproxy-DaAbWMjC.js → cliproxy-Cwzw39yN.js} +1 -1
- package/server/{close-issue-BPh1ARCF.js → close-issue-BX1bATJy.js} +4 -4
- package/server/{closed-issue-reaper-DHRfRMrp.js → closed-issue-reaper-DvnTSN6a.js} +1 -1
- package/server/{closed-issue-reaper-DoOZqGFK.js → closed-issue-reaper-hLt0W86J.js} +9 -9
- package/server/{codex-BzGDW_d3.js → codex-BYwi1uyW.js} +4 -4
- package/server/{codex-parser-Dt-ycU8L.js → codex-parser-Poyz29GE.js} +2 -2
- package/server/{codex-o8FJwzmy.js → codex-rnJN3v3_.js} +1 -1
- package/server/{compaction-continuation-CvXpbZ4w.js → compaction-continuation-DtMfHN0f.js} +2 -2
- package/server/{config-BvLe652W.js → config-CX4vk1CV.js} +1 -1
- package/server/{config-CL3Gyvja.js → config-R793W0yA.js} +1 -1
- package/server/{config-Bi3u1VK7.js → config-ktAVnp4s.js} +1 -1
- package/server/{conflict-gate-E4nt7ZeS.js → conflict-gate-BNv6UolH.js} +3 -3
- package/server/{conflict-gate-CX80JYYS.js → conflict-gate-BSTlwCtF.js} +1 -1
- package/server/{context-layers-DAG83UZt.js → context-layers-DCdaGsRG.js} +2 -2
- package/server/{context-layers-C_IIysnm.js → context-layers-DlWsDiRF.js} +2 -2
- package/server/{control-settings-CiqGxXnc.js → control-settings-qYYHrIqy.js} +2 -2
- package/server/{conversation-compaction-BE3CNtHF.js → conversation-compaction-BxUKObHb.js} +1 -1
- package/server/{conversation-compaction-D6-yLtqt.js → conversation-compaction-CXQrN3I_.js} +6 -6
- package/server/{conversation-service-D_TS2b1r.js → conversation-service-CDnQ3ayN.js} +1 -1
- package/server/{conversation-service-DBxoYMDl.js → conversation-service-CZiUE8Uw.js} +4 -4
- package/server/{conversations-D0UEdLtk.js → conversations-D7lR670u.js} +1 -1
- package/server/{conversations-BKDVpB-3.js → conversations-DXl5YTf4.js} +1 -1
- package/server/{cost-DpgYmYqR.js → cost-Aat8HfO_.js} +1 -1
- package/server/{cost-DS1s0DbG.js → cost-CWvN9FP2.js} +3 -3
- package/server/{cost-sync-tOCCGnEt.js → cost-sync-DiUBXwl6.js} +1 -1
- package/server/{dag-BtkgLeqY.js → dag-5QlmH0oC.js} +2 -2
- package/server/{dangerous-git-ops-CFLykHWt.js → dangerous-git-ops-DWX6Og8c.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/{deacon-pLRLbPvR.js → deacon-B1LD5cJU.js} +318 -160
- package/server/{deacon-BIblC-WX.js → deacon-PW_bg4uL.js} +2 -2
- package/server/{deacon-nudge-log-B08gF0mh.js → deacon-nudge-log-DPHsO14z.js} +2 -2
- package/server/{deacon-pending-lifecycle-B-Io84AP.js → deacon-pending-lifecycle-2ZflPxgo.js} +3 -3
- package/server/deacon-swarm-BkKR7SXu.js +2 -0
- package/server/{deacon-swarm-v5PMun-m.js → deacon-swarm-DwGUgSVp.js} +10 -10
- package/server/deacon.js +7 -7
- package/server/{dead-end-trip-D8A3msX9.js → dead-end-trip-B06RFIr2.js} +2 -2
- package/server/{delivery-BX9HR4wQ.js → delivery-C2M73sBg.js} +1 -1
- package/server/{deploy-patrol-sYgOxLeb.js → deploy-patrol-BNjeCL8u.js} +7 -7
- package/server/{deploy-queue-VfohaPN_.js → deploy-queue-CKT_Ia9p.js} +1 -1
- package/server/{deploy-queue-gHJBycaF.js → deploy-queue-DMMYhFC8.js} +1 -1
- package/server/{deploy-window-D4DQb8VP.js → deploy-window-DC8lze3d.js} +4 -4
- package/server/{deploy-window-CFRZ0-kt.js → deploy-window-D_AimdNN.js} +1 -1
- package/server/{dev-supervisor-DiOBDM1c.js → dev-supervisor-C4F0vbno.js} +1 -1
- package/server/{devcontainer-renderer-BUOIlfgD.js → devcontainer-renderer-66sqMQIi.js} +2 -2
- package/server/{dist-C3A8B8wM.js → dist-C5FT9lTG.js} +1 -1
- package/server/dist-qcf9gAP0.js +3 -0
- package/server/{dist-src-C0adpegX.js → dist-src-B-AlGWSl.js} +1 -1
- package/server/{docker-Y3PElJb0.js → docker-BxrFhTZ_.js} +1 -1
- package/server/{docker-BJzlkqYB.js → docker-CoAT8R0J.js} +2 -2
- package/server/{dod-DlNtcH6n.js → dod-Bg6wsKTV.js} +1 -1
- package/server/{durable-review-pipeline-DP6bIcOY.js → durable-review-pipeline-D_DcfIGP.js} +1 -1
- package/server/{durable-review-pipeline-Cibps-Rg.js → durable-review-pipeline-HkAgnx0L.js} +1 -1
- package/server/{ensure-devcontainer-DMAbWqtQ.js → ensure-devcontainer-Bg5HJAcO.js} +1 -1
- package/server/{ensure-devcontainer-BAofzBPv.js → ensure-devcontainer-DTxChVuA.js} +3 -3
- package/server/{esm-shims-BeObUkaw.js → esm-shims-CaBWIR7f.js} +1 -1
- package/server/{events-CF8QDbuV.js → events-ChEFB7Jp.js} +1 -1
- package/server/{events-BNrvchBg.js → events-DhRN-6vM.js} +2 -2
- package/server/{factory-Cmm9Hsho.js → factory-BezSPaTd.js} +4 -4
- package/server/{feature-registry-population-B6HpNWRy.js → feature-registry-population-DhswNiXx.js} +3 -3
- package/server/{feature-registry-storage-DJEFx1Pf.js → feature-registry-storage-CUVNpAso.js} +1 -1
- package/server/{features-D5km80UI.js → features-B2CfNPFw.js} +1 -1
- package/server/{feedback-target-BJ5ZADsu.js → feedback-target-CMrEAoeA.js} +1 -1
- package/server/{feedback-target-DSxEL6lP.js → feedback-target-VBr9gKgX.js} +15 -4
- package/server/{feedback-writer-CoB9Z6aU.js → feedback-writer-CY91ckuw.js} +1 -1
- package/server/{feedback-writer-C27Hak8a.js → feedback-writer-xpFgU632.js} +4 -4
- package/server/{flywheel-BHx8XuMr.js → flywheel-CTVY3yCG.js} +12 -12
- package/server/{flywheel-f662Q-y2.js → flywheel-DQqsSm7P.js} +11 -11
- package/server/{flywheel-DZZdtiOL.js → flywheel-DsICCjTR.js} +1 -1
- package/server/{flywheel-merge-order-Dil0LmdN.js → flywheel-merge-order-C-TI4JGu.js} +1 -1
- package/server/{flywheel-merge-order-D_xLMbJU.js → flywheel-merge-order-CMGz-imq.js} +6 -6
- package/server/forge-D647IMNa.js +3 -0
- package/server/{forge-BaKGCya6.js → forge-RTNqJe6a.js} +2 -2
- package/server/{from-B3tZbB55.js → from-DxGcivc9.js} +1 -1
- package/server/{fts-db-IVc4_M3f.js → fts-db-wROfFfje.js} +2 -2
- package/server/{fts-operations-B9jG8wa3.js → fts-operations-BuTdlZFA.js} +2 -2
- package/server/{git-utils-Xg4PFN45.js → git-utils-CedsVume.js} +1 -1
- package/server/{git-utils-CsvYfJU3.js → git-utils-DtdoEXJk.js} +3 -3
- package/server/{github-app-Bmg4R9mv.js → github-app-DIE8BkHI.js} +1 -1
- package/server/{github-app-CmNk0zLU.js → github-app-gVnZcP9B.js} +1 -1
- package/server/{github-client-qazkPrg0.js → github-client-BrAC6ELh.js} +3 -3
- package/server/{github-client-B6KM9_wA.js → github-client-CBOkvBUl.js} +1 -1
- package/server/{github-pr-lookup-DAcVeRLK.js → github-pr-lookup-CgMULTPf.js} +2 -2
- package/server/{harness-binary-BSpiXaLw.js → harness-binary-CnBHpd57.js} +1 -1
- package/server/{harness-resolve-BAJu5MX8.js → harness-resolve-BVj6sI8m.js} +3 -3
- package/server/{health-events-BwX32k8d.js → health-events-BBWO_Dh9.js} +1 -1
- package/server/{health-events-2Z6Wa9SM.js → health-events-Der6bOkm.js} +1 -1
- package/server/{hooks-D1g1jKLI.js → hooks-BJNal-bs.js} +1 -1
- package/server/{hooks-DbtbimEf.js → hooks-BOavco-e.js} +1 -1
- package/server/{hume-DXNiu6nQ.js → hume-DBocJFkA.js} +2 -2
- package/server/hume-DtWN8oV5.js +3 -0
- package/server/{idle-stack-reaper-CRA1e0jr.js → idle-stack-reaper-CyGxXOfC.js} +1 -1
- package/server/{idle-stack-reaper-Cy-dQzW4.js → idle-stack-reaper-DQFh8rDh.js} +1 -1
- package/server/{in-flight-guard-D-sSkADM.js → in-flight-guard-nXEKoxI7.js} +1 -1
- package/server/{injection-6AGnXxlj.js → injection-CCopdUKz.js} +6 -6
- package/server/{injection-Bl8d_jHZ.js → injection-DfFFEMKL.js} +1 -1
- package/server/inspect-agent-CPqXI81t.js +2 -0
- package/server/{inspect-agent-nXdIptyh.js → inspect-agent-FCDlNT_i.js} +10 -10
- package/server/{internal-token-DzK385vD.js → internal-token-BG6yQKNL.js} +1 -1
- package/server/{internal-token-Ias7N8Kg.js → internal-token-BJZa40Ld.js} +1 -1
- package/server/{io-B00PBNku.js → io-C0NV7y6C.js} +3 -3
- package/server/{issue-closed-BehTG1be.js → issue-closed-CNNGbhWm.js} +6 -6
- package/server/{issue-lifecycle-Birk-ifu.js → issue-lifecycle-BXfzxFCD.js} +18 -18
- package/server/{issue-lifecycle-BqSuQvbn.js → issue-lifecycle-DSH0GpWC.js} +1 -1
- package/server/{issue-service-singleton-C6ZduvuY.js → issue-service-singleton-F3A5VP6M.js} +8 -8
- package/server/{issue-service-singleton-B2wXiIlw.js → issue-service-singleton-lwFJ4dHk.js} +1 -1
- package/server/{issues-DQ5-LatB.js → issues-DA-U_MpR.js} +1 -1
- package/server/{jsonl-parser-BDpnGFCl.js → jsonl-parser-BXiGANOh.js} +2 -2
- package/server/{label-cleanup-Dwnky8FG.js → label-cleanup-BnxRk0Eo.js} +2 -2
- package/server/{lifecycle-B4Xdb4cY.js → lifecycle-DOgGnpIv.js} +1 -1
- package/server/{lifecycle-B3s4sM1G.js → lifecycle-Di48-w4x.js} +6 -6
- package/server/{lifecycle-io-DCo6s6ks.js → lifecycle-io-1XSeczTr.js} +4 -4
- package/server/{lifecycle-io-CzTHEooc.js → lifecycle-io-eVG6v_8-.js} +1 -1
- package/server/{linear-client-9uq7fhiV.js → linear-client-CYZRrcjp.js} +3 -3
- package/server/{linear-client-CnbtHiic.js → linear-client-CvGo9n7M.js} +1 -1
- package/server/{linear-mcp-auth-BxUOzswy.js → linear-mcp-auth-Cp0XaP96.js} +4 -4
- package/server/{linear-mcp-auth-D46fBCLf.js → linear-mcp-auth-DoJnjdPZ.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-DiW9RdSB.js → merge-DO14mOr3.js} +2 -2
- package/server/{merge-sr8Nrnmi.js → merge-ZF99ig6A.js} +1 -1
- package/server/{merge-agent-DQTXZk8z.js → merge-agent-C1-9zbP_.js} +1 -1
- package/server/{merge-agent-BLUgRsz3.js → merge-agent-gpiRkcvj.js} +25 -25
- package/server/{merge-batch-Cp_j9BGk.js → merge-batch-C11ocNkO.js} +1 -1
- package/server/{merge-completeness-B46KqhtY.js → merge-completeness-BUzPZy0E.js} +4 -4
- package/server/{merge-completeness-BLbB5-6n.js → merge-completeness-CghMbyX7.js} +1 -1
- package/server/merge-ops-7QqziXAh.js +2 -0
- package/server/merge-rebase-B4pgzvQJ.js +2 -0
- package/server/{merge-rebase-DIkBjgwq.js → merge-rebase-iwlUzZjr.js} +1 -1
- package/server/{merge-set-DeUxFsC3.js → merge-set-BymrheTj.js} +1 -1
- package/server/{merge-set-CBgHfwM0.js → merge-set-Dbnx4chw.js} +3 -3
- package/server/{merge-sync-kr4vqyjM.js → merge-sync-CM978zez.js} +1 -1
- package/server/{merge-sync-CpGmk6Ch.js → merge-sync-CqEtqjI2.js} +1 -1
- package/server/{merge-train-Dmrcus12.js → merge-train-DvLcAn1G.js} +3 -3
- package/server/{merge-train-deps-D_uGX91G.js → merge-train-deps-Cl_kcRbO.js} +3 -3
- package/server/{merge-verification-NvaAd8CZ.js → merge-verification-c9Y9mllw.js} +5 -5
- package/server/{merged-docker-cleanup-worker-Y1R06TEl.js → merged-docker-cleanup-worker-CGiDOdv8.js} +3 -3
- package/server/{merged-docker-cleanup-worker-DH_hrGPI.js → merged-docker-cleanup-worker-DgsLOx3E.js} +1 -1
- package/server/{multipart-parser-R-oC8dQg.js → multipart-parser-D0twwRjz.js} +2 -2
- package/server/{no-resume-mode-BgD0JUmM.js → no-resume-mode-DZvP0M_S.js} +1 -1
- package/server/node_modules/.package-lock.json +1 -1
- package/server/{orphan-proposed-reconciler-DcgTPPFY.js → orphan-proposed-reconciler-6r2OEfYd.js} +1 -1
- package/server/{orphan-proposed-reconciler-B6vJHxtX.js → orphan-proposed-reconciler-DtQP6oE_.js} +17 -17
- package/server/package-lock.json +2 -2
- package/server/package.json +1 -1
- package/server/{pan-dir-DMzF5wne.js → pan-dir-DAOb1V2-.js} +3 -3
- package/server/{paths-sJBSb7Ul.js → paths-DuATV5iE.js} +1 -1
- package/server/{pending-lifecycle-claim-DilzGfgk.js → pending-lifecycle-claim-DQUHIDfX.js} +2 -2
- package/server/{persistent-logger-H_VjuOu7.js → persistent-logger-CBj016pT.js} +1 -1
- package/server/{pickup-DWhqzliO.js → pickup-zXZl5lQI.js} +1 -1
- package/server/{pipeline-membership-D9SBvItj.js → pipeline-membership-B2yUcBz7.js} +1 -1
- package/server/{pipeline-membership-C88VBnhJ.js → pipeline-membership-DHOXmvba.js} +1 -1
- package/server/{pipeline-membership-gather-CeVGnNJ2.js → pipeline-membership-gather-BIcJ-N0W.js} +7 -7
- package/server/{pipeline-membership-gather-4eR-7Tqy.js → pipeline-membership-gather-OkLXuvxR.js} +1 -1
- package/server/{pipeline-notifier-DT6xLFao.js → pipeline-notifier-BmwrVKsO.js} +1 -1
- package/server/{pipeline-notifier-D0ALV6Nw.js → pipeline-notifier-CxMes51i.js} +2 -2
- package/server/{post-merge-lifecycle-worker-8HIeS_J6.js → post-merge-lifecycle-worker-3u_rA4R0.js} +3 -3
- package/server/{project-pipelines-9SKt2bEc.js → project-pipelines-C3SPFJ38.js} +1 -1
- package/server/{project-repos-B5pIphKg.js → project-repos-BOpBzkO6.js} +1 -1
- package/server/{project-repos-DPjOdfPa.js → project-repos-BgW4lcIa.js} +1 -1
- package/server/{prompts-CgzMBvQF.js → prompts-B0TtboFm.js} +1 -1
- package/server/{providers-BJQSnAAp.js → providers-O2smCvSz.js} +6 -6
- package/server/{pull-requests-7BgLDsIo.js → pull-requests-BonZ4WVG.js} +3 -3
- package/server/{pull-requests-Dq0y6IxE.js → pull-requests-DNcJUVWA.js} +1 -1
- package/server/{queries-C-MUZaIy.js → queries-DCX27GRr.js} +64 -64
- package/server/{rally-CPysR4T_.js → rally-Cxe7lKYX.js} +2 -2
- package/server/{rally-api-CgosKdKL.js → rally-api-Cp50exEi.js} +1 -1
- package/server/{rally-api-8Ptlp2os.js → rally-api-CzkKenoi.js} +1 -1
- package/server/{rally-client-CCX0hADj.js → rally-client-Bu3Cekkw.js} +1 -1
- package/server/{rally-client-iYMHWQD7.js → rally-client-CyBBEDHu.js} +5 -5
- package/server/rally-x6ztTQo4.js +3 -0
- package/server/{reap-terminal-sessions-Qf-9LVQc.js → reap-terminal-sessions-CtAhr6L0.js} +2 -2
- package/server/{reap-terminal-sessions-4Xg9NGA8.js → reap-terminal-sessions-DvFqQUnq.js} +2 -2
- package/server/{rebuild-stack-DqcOVmJO.js → rebuild-stack-BKYpIPDL.js} +2 -2
- package/server/{rebuild-stack-CMdgaylx.js → rebuild-stack-hCQtprWC.js} +6 -6
- package/server/{reconstruct-cache-CMZJ_Vjq.js → reconstruct-cache-CF2avArx.js} +6 -6
- package/server/{recovery-trip-DDH-02ng.js → recovery-trip-D-wM9EfB.js} +1 -1
- package/server/{release-engine-B2X9AfFC.js → release-engine-_eO3VFth.js} +4 -4
- package/server/{release-set-G4XKyQ8K.js → release-set-vxgZwwZV.js} +1 -1
- package/server/{remote-BXarMvqf.js → remote-BienmcrZ.js} +3 -3
- package/server/{remote-CUhyqjXk.js → remote-CVPCc7Vy.js} +3 -3
- package/server/{remote-agents-CLZB3Coc.js → remote-agents-kwsEZvXu.js} +1 -1
- package/server/{remote-agents-Bba-MgSA.js → remote-agents-kxraOCGT.js} +4 -4
- package/server/{remote-completion-CwAp79EC.js → remote-completion-BtmZ42aP.js} +12 -12
- package/server/resume-DXIIfJNk.js +3 -0
- package/server/{review-agent--pOptAEV.js → review-agent-CIRr0yYt.js} +25 -25
- package/server/{review-agent-BTCNkq2h.js → review-agent-UpAM4DmT.js} +1 -1
- package/server/{review-artifacts-BNmw8dWE.js → review-artifacts-BCODM9ww.js} +4 -4
- package/server/{review-context-DFxYOOJW.js → review-context-BBsNrDri.js} +8 -8
- package/server/{review-convoy-liveness-BgU_1jJf.js → review-convoy-liveness-l06_LYCt.js} +1 -1
- package/server/{review-status-Dma9SFaN.js → review-status-CacDM78F.js} +1 -1
- package/server/{review-status-CGvlA4o_.js → review-status-CwhA9wmd.js} +22 -19
- package/server/{review-status-emit-DURrmGYX.js → review-status-emit-BPJwYcRy.js} +3 -3
- package/server/{review-status-enrichment-8NiNXi5W.js → review-status-enrichment-DvyZAbGR.js} +1 -1
- package/server/{review-status-source-BLx_1siH.js → review-status-source-B70ekARK.js} +1 -1
- package/server/{review-status-source-DIk1JSow.js → review-status-source-DWnFE0b6.js} +1 -1
- package/server/{review-status-sync-muT-EBp2.js → review-status-sync-B0IS6Beh.js} +1 -1
- package/server/{review-status-sync-0GxOqeqF.js → review-status-sync-h2CJX6ju.js} +1 -1
- package/server/{review-verdict-feedback-HwF6ODFy.js → review-verdict-feedback-qRohbFG2.js} +1 -1
- package/server/{review-verdict-feedback-xJNdqBnX.js → review-verdict-feedback-yrrmgps_.js} +74 -12
- package/server/{rollup-BQaol5TX.js → rollup-CUoav0Op.js} +5 -5
- package/server/{rollup-BR4t_wck.js → rollup-DxCjJaAM.js} +1 -1
- package/server/{scanner-C-D2cFdX.js → scanner-ChURu_b-.js} +5 -5
- package/server/{sequence-io-Bmf1EZM5.js → sequence-io-D9ITDxzq.js} +3 -3
- package/server/{sequencer-agent-CigMyKh2.js → sequencer-agent-m7gmaakW.js} +5 -5
- package/server/server.js +180 -180
- package/server/{service-CD0DvFvD.js → service-BzFG0Us_.js} +51 -51
- package/server/{session-fork-B6cQ5eya.js → session-fork-KBq4HIHF.js} +1 -1
- package/server/{session-history-3ON_IJjm.js → session-history-C_EMhIIF.js} +3 -3
- package/server/settings-9jSGHBPY.js +2 -0
- package/server/{settings-VN0qOh4U.js → settings-BLbcDqUp.js} +2 -2
- package/server/{settings-PilbFZAM.js → settings-DejgzzLs.js} +1 -1
- package/server/{shadow-engineering-DXvx77oE.js → shadow-engineering-D8R9I8Yl.js} +3 -3
- package/server/{shadow-state-CZBp7pwq.js → shadow-state-C0Af4clN.js} +1 -1
- package/server/{shadow-state-BBk_zacw.js → shadow-state-fzIqIMDD.js} +1 -1
- package/server/{shadow-utils-DdZ05AJS.js → shadow-utils-Ugca_9ND.js} +1 -1
- package/server/{ship-log-7kJfjUX2.js → ship-log-VAv-lHrF.js} +1 -1
- package/server/{smart-compaction-ByhL9cRS.js → smart-compaction-B2Xu5XEb.js} +5 -5
- package/server/{smart-compaction-8fA5k5XN.js → smart-compaction-BcYY_Suf.js} +1 -1
- package/server/{spawn-planning-session-pcF-YeFE.js → spawn-planning-session-DhCoBPct.js} +14 -14
- package/server/{spawn-planning-session-vLUJoFjy.js → spawn-planning-session-Dsv-350T.js} +2 -2
- package/server/{specialist-completion-B07XjWD2.js → specialist-completion-z6v3ZqJE.js} +1 -1
- package/server/{specialist-context-DJ-zFyL3.js → specialist-context-CrA5azkJ.js} +4 -4
- package/server/{specialist-handoff-logger-aKSxbIgD.js → specialist-handoff-logger-CmpZYJMB.js} +1 -1
- package/server/{specialist-logs-Dae-n52_.js → specialist-logs-BorrIu0x.js} +2 -2
- package/server/{specialists-6PWdtWcg.js → specialists-2yLmqph9.js} +86 -86
- package/server/{specialists-Bz-wFT7R.js → specialists-CH6ah6D-.js} +1 -1
- package/server/{specialists-DUiExaxb.js → specialists-Dfx9_Wzb.js} +15 -15
- package/server/{specialists-KR3pKulN.js → specialists-ZdrifiKx.js} +1 -1
- package/server/specs-DKV3jIEs.js +3 -0
- package/server/{src-rac0Mepv.js → src-B2e5rGu2.js} +6 -6
- package/server/{src-vHy2-oCv.js → src-Dm_NV7f6.js} +3 -3
- package/server/{stack-health-DqLTiEu4.js → stack-health-Bf2WdG4E.js} +1 -1
- package/server/{stack-health-BikqHSjn.js → stack-health-CoWAhA99.js} +1 -1
- package/server/{stale-task-claims-Cab_Fo_Z.js → stale-task-claims-D1Ll8fI5.js} +2 -2
- package/server/{staleness-C-a5rBxF.js → staleness-45qZ_a60.js} +1 -1
- package/server/{staleness-CGTZyp6V.js → staleness-CuED1Psm.js} +1 -1
- package/server/{state-home-722Dkx92.js → state-home-B4EWfIxF.js} +1 -1
- package/server/{state-mapping-CybR81Uf.js → state-mapping-BEONzr8P.js} +1 -1
- package/server/{state-migrate-2u8wIpoL.js → state-migrate-Cd8BH33U.js} +3 -3
- package/server/{stuck-remediation-r1TJu68G.js → stuck-remediation-ChcooZuk.js} +1 -1
- package/server/{stuck-remediation-CC6q3eqQ.js → stuck-remediation-DmY5UJLg.js} +16 -16
- package/server/{substrate-bug-weights-service-CzIyyWFT.js → substrate-bug-weights-service-BvTWrFUz.js} +1 -1
- package/server/{summary-fork-BqgmgPDt.js → summary-fork--Jr8duYh.js} +2 -2
- package/server/{summary-fork-Df2WFijM.js → summary-fork-Ct514_Jl.js} +7 -7
- package/server/supervisor/{injection-budget-Cg_KIb3o.js → injection-budget-B3UyEONL.js} +1 -1
- package/server/supervisor/pty-supervisor.js +2 -2
- package/server/supervisor/{pty-token-BbjwEUUM.js → pty-token-CWRffcCa.js} +1 -1
- package/server/{supervisor-BxqSpjcN.js → supervisor-B7BHGcNA.js} +2 -2
- package/server/supervisor-CyR_mW5B.js +2 -0
- package/server/{swarm-readiness-DfFxa9-n.js → swarm-readiness-MNE5O8hn.js} +3 -3
- package/server/{system-prerequisites-ICLSkhhZ.js → system-prerequisites-Cin9ZgDx.js} +2 -2
- package/server/{teardown-workspace-DRdi_CPa.js → teardown-workspace-CvBpvc85.js} +13 -13
- package/server/{test-agent-queue-A_-p-i0I.js → test-agent-queue-DmSIqays.js} +5 -5
- package/server/{test-verdict-BHgTAwIG.js → test-verdict-BieVDAV1.js} +1 -1
- package/server/{test-verdict-C4i9aqEP.js → test-verdict-Cy2jJGTe.js} +1 -1
- package/server/{tldr-daemon-CvWXBhX1.js → tldr-daemon-Ca0eovh3.js} +1 -1
- package/server/{tldr-daemon-wvsU6bKv.js → tldr-daemon-IOssGwg7.js} +1 -1
- package/server/{token-DrxwytsZ.js → token-B10VFNOD.js} +2 -2
- package/server/{token-util-B48BlCba.js → token-util-CZ8WPtdk.js} +1 -1
- package/server/token-util-CrfQ2FKf.js +3 -0
- package/server/{tracker-config-BcPMElRB.js → tracker-config-CHbrjg6m.js} +1 -1
- package/server/{tracker-utils-CJ6BHjcD.js → tracker-utils-DZZq_C0R.js} +1 -1
- package/server/{traefik-connect-DZ6nMYMj.js → traefik-connect-GHomyBaD.js} +1 -1
- package/server/{tunnel-DUbUPElU.js → tunnel-Bdyb-sNq.js} +2 -2
- package/server/{tunnel-Bp-dRHZz.js → tunnel-Dz7y434T.js} +1 -1
- package/server/{typed-errors-CKeoDdU3.js → typed-errors-BR_RmPS_.js} +1 -1
- package/server/{typed-errors-DyjseiB6.js → typed-errors-Bn_2WRU7.js} +1 -1
- package/server/{types-Cm5ASJbq.js → types-D2ETIB8T.js} +1 -1
- package/server/{types-Di8wdakq.js → types-Dh6RI5Vj.js} +1 -1
- package/server/{uat-promote-verification-CoJuh7XO.js → uat-promote-verification-DyvQXvIn.js} +4 -4
- package/server/{uat-train-4Q0k06CQ.js → uat-train-Dv0Bxer7.js} +0 -0
- package/server/{uat-train-Dewoatps.js → uat-train-diX_7shd.js} +1 -1
- package/server/{validate-B0C8p66t.js → validate-606KcYZC.js} +3 -3
- package/server/{validation-hVOwQk8T.js → validation-Cf7aaV5A.js} +1 -1
- package/server/{validation-B_kIRfNe.js → validation-CnrDul1x.js} +3 -3
- package/server/{verification-artifact-D70AtckY.js → verification-artifact-D4b-bio9.js} +1 -1
- package/server/{verification-artifact-BxlxTiYK.js → verification-artifact-GOaj8u2s.js} +1 -1
- package/server/{verification-runner-KZTz6u72.js → verification-runner-B5MVxDvU.js} +18 -18
- package/server/{verification-runner-Bc3cJvpC.js → verification-runner-DiPaUP-C.js} +1 -1
- package/server/{vtt-parser-CE_i3Bcw.js → vtt-parser-CMU5EZ5R.js} +1 -1
- package/server/{work-agent-prompt-ByrPAzOy.js → work-agent-prompt-Csb3fbVR.js} +8 -8
- package/server/{workflows-D0vP1WrK.js → workflows-D87ajwV6.js} +20 -20
- package/server/workflows-DN6NyVGd.js +2 -0
- package/server/{workspace-COWvdibH.js → workspace-AIOM7n00.js} +1 -1
- package/server/{workspace-anchor-drift-pwz23TI1.js → workspace-anchor-drift-19cJ1bH5.js} +1 -1
- package/server/{workspace-anchor-drift-DXYIAHzr.js → workspace-anchor-drift-C3mK5wNI.js} +3 -3
- package/server/{workspace-config-BdZM4PvZ.js → workspace-config-CJ7RqQiP.js} +1 -1
- package/server/{workspace-DQkRPLlQ.js → workspace-iD8oULqu.js} +2 -2
- package/server/{workspace-manager-C1F3XsnS.js → workspace-manager-B38rFWA1.js} +1 -1
- package/server/{workspace-manager-BPgTrG66.js → workspace-manager-CXfrw4rR.js} +12 -12
- package/server/{workspace-metadata-CdjzAP8x.js → workspace-metadata-BuMRco5P.js} +1 -1
- package/server/{workspace-metadata-DkO_iTLo.js → workspace-metadata-eHSj_NsP.js} +1 -1
- package/server/{workspaces-CRBJikLp.js → workspaces-DbtMX2TM.js} +96 -96
- package/server/archive-planning-B2XplFzT.js +0 -2
- package/server/cli-CjOCSnfj.js +0 -3
- package/server/deacon-swarm-B1XkIvfr.js +0 -2
- package/server/dist-B3YPQa5A.js +0 -3
- package/server/forge-B5o319qI.js +0 -3
- package/server/hume-VUCNbTgn.js +0 -3
- package/server/inspect-agent-CUwVmr2h.js +0 -2
- package/server/merge-ops-1abz6O_P.js +0 -2
- package/server/merge-rebase-CJJVAJuz.js +0 -2
- package/server/rally-D_VW4bJv.js +0 -3
- package/server/resume-mOREjlYu.js +0 -3
- package/server/settings-CVmWiJ-r.js +0 -2
- package/server/specs--enInima.js +0 -3
- package/server/supervisor-B4anCCSm.js +0 -2
- package/server/token-util-D411CAq9.js +0 -3
- package/server/workflows-DtDX08ed.js +0 -2
|
@@ -1,57 +1,57 @@
|
|
|
1
1
|
import { i as __require, t as __commonJSMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
2
|
import { Fr as init_errors, Gn as init_projects, Gr as OVERDECK_HOME, Ir as AGENTS_DIR, Pt as init_record, Yn as listProjectsSync, Zn as loadProjectsConfigSync, ar as resolveProjectFromIssueSync, b as DEFAULT_CONFIG$1, dn as reconcileStatePlaneDrift, f as loadConfigSync, hn as init_state_plane, li as init_paths, ln as init_auto_commit, mn as getMainDivergence, or as resolveProjectPath, pi as sessionFilePath, s as init_load, x as init_defaults, zn as getProjectSync, zt as readIssueRecordSync } from "./config-yaml-CxdwhAIA.js";
|
|
3
|
-
import { n as init_build_info, t as getBuildInfo } from "./build-info-
|
|
4
|
-
import { n as getDashboardIdentity, t as recordDeaconNudge } from "./deacon-nudge-log-
|
|
3
|
+
import { n as init_build_info, t as getBuildInfo } from "./build-info-D0q_i8WM.js";
|
|
4
|
+
import { n as getDashboardIdentity, t as recordDeaconNudge } from "./deacon-nudge-log-DPHsO14z.js";
|
|
5
5
|
import { i as emitActivityTtsSync, o as init_activity_logger, r as emitActivityEntrySync } from "./activity-logger-CyteR4JO.js";
|
|
6
6
|
import { i as updateIssueRecord, r as init_record_update } from "./record-update-DaOKS7Wb.js";
|
|
7
7
|
import { A as listPaneValues, B as sendKeysAsync, D as killSession, E as isPaneDead, H as sessionExists, I as querySessionSync, M as listSessionNames, N as listSessions, U as sessionExistsSync, i as capturePane, w as init_tmux, z as sendKeys } from "./tmux-CfDHob9M.js";
|
|
8
8
|
import { a as init_event_store, i as initEventStore } from "./event-store-CrHcVC5_.js";
|
|
9
9
|
import { D as projectLegacySystemHealthSummary, t as init_src } from "./src-B948bGVR.js";
|
|
10
|
-
import { B as reviewGatesPassedSync, C as setReviewStatusSync, H as findBlockingFindings, K as readJournalStatusSync, R as init_review_dispatch_decision, U as init_review_findings, W as init_review_status_record_sync, d as getReviewStatusSync, h as loadReviewStatuses, p as init_review_status, z as needsReviewDispatch } from "./review-status-
|
|
11
|
-
import { n as logAgentLifecycleSync, r as logDeaconEventSync, t as init_persistent_logger } from "./persistent-logger-
|
|
12
|
-
import { c as listAllAgentsSync, d as isTerminalIssueStage, o as init_agents, u as getIssueStageSync } from "./agents-
|
|
13
|
-
import { $n as getAgentDir, Br as saveAgentRuntimeState, Bt as init_transcript_landing, Ct as resetPatrolDispatchBudget, Et as workResumeSlotsAvailable, G as resumeAgent, Gr as init_codex_auth, J as isContextOverflowTail, K as init_context_overflow, Kr as paneShowsCodexAuthBurn, Ln as buildResumeContinueMessage, Lr as getAgentRuntimeState, Ot as init_memory_verdict_cache, Pt as deliverInitialPromptWithRetry, Rr as getAgentRuntimeStateSync, Ur as applyCodexAuthBurnFlag, X as messageAgent, Xn as clearAgentTroubledSync, Y as init_messaging, Zn as clearYieldForResumeSync, _ as init_linux, _r as saveAgentStateSync, _t as describeRunningAgents, a as listRunningAgentsSync, b as init_agents$1, br as setAgentYieldedSync, bt as init_concurrency, c as getRuntimeCensus, fr as recordAgentFailure, ft as init_termination, g as LINUX_MEMORY_PRESSURE_DEFAULTS, gr as saveAgentState, h as init_collector, hr as resetAgentFailureCount, ht as countRunningAgents, i as listRunningAgents, ir as init_agent_state, kt as setCachedMemoryVerdict, lr as markAgentRunningState, m as createHostHealthCollector, n as init_queries, pt as stopAgent, r as listAgentStates, rr as getAgentStateSync, s as descendantPidsForSession, tr as getAgentState, u as init_runtime_census, v as DARWIN_MEMORY_PRESSURE_DEFAULTS, wt as tryReserveAdvancingSlot, xt as releaseAdvancingSlot, y as init_darwin, yr as setAgentPausedSync, yt as getConcurrencyLimits, zr as init_runtime_state, zt as captureTranscriptUserRecordSnapshot } from "./queries-
|
|
14
|
-
import { o as getRuntimeSnapshot, s as init_agent_runtime_mirror } from "./session-history-
|
|
15
|
-
import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-
|
|
16
|
-
import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-
|
|
17
|
-
import { c as init_review_status_sync, l as markWorkspaceStuck } from "./review-status-sync-
|
|
18
|
-
import { i as readReviewStatusMap, n as init_review_status_source, t as classifyAdvancingSessionLifecycle } from "./review-status-source-
|
|
19
|
-
import { _ as markMerged, c as init_merge_sync, f as listActiveAutoMerges, m as listProblemAutoMerges, t as cancelPending } from "./merge-sync-
|
|
20
|
-
import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-
|
|
21
|
-
import { m as readWorkspacePlanSync, o as init_io } from "./io-
|
|
22
|
-
import { f as init_config, m as loadConfigSync$1, p as loadConfig$1 } from "./config-
|
|
23
|
-
import { D as setSetting, O as stampBootReconciliation, _ as setBootReconciliationGrace, c as init_control_settings, g as setBootReconciliationDecision, o as getLastCleanShutdownAt, r as getBootReconciliationState, s as getSetting, u as isDeaconGloballyPaused } from "./control-settings-
|
|
24
|
-
import { d as init_docker_stats, u as DockerStatsCollector } from "./stack-health-
|
|
25
|
-
import { l as init_dag, o as getDispatchableItems } from "./dag-
|
|
26
|
-
import { a as loadCloisterConfigSync, i as loadCloisterConfig, r as init_config$1 } from "./config-
|
|
27
|
-
import { a as findRecreatedLegacyStatePaths, o as init_state_home } from "./state-home-
|
|
28
|
-
import { M as withConcurrencyLimit, j as init_concurrency$1 } from "./github-app-
|
|
29
|
-
import { a as isAgentIdleForNudge, t as checkStuckAgentRemediation } from "./stuck-remediation-
|
|
30
|
-
import { n as __filename, r as init_esm_shims } from "./esm-shims-
|
|
31
|
-
import { i as init_staleness, r as computeBuildStaleness } from "./staleness-
|
|
32
|
-
import { a as pidsWithCwdUnder, i as sweepAutoCloseOutCache, n as pruneTerminalStoppedAgents, r as getAutoCloseOutCanonicalState } from "./agent-gc-
|
|
33
|
-
import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-
|
|
34
|
-
import { n as getForgeAdapter, r as init_forge } from "./forge-
|
|
35
|
-
import { a as observeForgeMergeState, i as init_merge_completeness } from "./merge-completeness-
|
|
36
|
-
import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-
|
|
37
|
-
import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-
|
|
38
|
-
import { a as init_review_monitor, i as REVIEW_SUB_ROLES, n as init_review_convoy_liveness, r as reviewTimestampMs, t as evaluateReviewConvoyLiveness } from "./review-convoy-liveness-
|
|
39
|
-
import { J as parseReviewerSessionName, U as getTmuxSessionName, g as getAllProjectSpecialistStatuses, t as init_specialists } from "./specialists-
|
|
40
|
-
import { a as inferBranchFromWorkspace, i as findWorkspacePath } from "./archive-planning-
|
|
41
|
-
import { n as init_merge_verification, r as shouldSkipDispatchAsMerged } from "./merge-verification-
|
|
42
|
-
import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-
|
|
43
|
-
import { _ as init_label_reconciler, a as gatherProjectLensSignals, s as init_pipeline_membership_gather, v as reconcilePipelineLabelsPatrol } from "./pipeline-membership-gather-
|
|
44
|
-
import { n as init_pipeline_membership, r as resolvePipelineMembership } from "./pipeline-membership-
|
|
45
|
-
import { i as init_conflict_gate, o as probeBranchConflictPaths } from "./conflict-gate-
|
|
46
|
-
import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-
|
|
47
|
-
import { g as decideAgentAutonomousRedrive, r as coordinateSwarmSlots, y as listFeatureWorkspaces } from "./deacon-swarm-
|
|
48
|
-
import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-
|
|
49
|
-
import { r as init_in_flight_guard, t as createInFlightGuard } from "./in-flight-guard-
|
|
50
|
-
import { r as reconcileClosedIssueAgents } from "./closed-issue-reaper-
|
|
51
|
-
import { t as recordDeadEndNeedsYou } from "./dead-end-trip-
|
|
52
|
-
import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-
|
|
53
|
-
import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-
|
|
54
|
-
import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-
|
|
10
|
+
import { B as reviewGatesPassedSync, C as setReviewStatusSync, H as findBlockingFindings, K as readJournalStatusSync, R as init_review_dispatch_decision, U as init_review_findings, W as init_review_status_record_sync, d as getReviewStatusSync, h as loadReviewStatuses, p as init_review_status, z as needsReviewDispatch } from "./review-status-CwhA9wmd.js";
|
|
11
|
+
import { n as logAgentLifecycleSync, r as logDeaconEventSync, t as init_persistent_logger } from "./persistent-logger-CBj016pT.js";
|
|
12
|
+
import { c as listAllAgentsSync, d as isTerminalIssueStage, o as init_agents, u as getIssueStageSync } from "./agents-CtACUuVG.js";
|
|
13
|
+
import { $n as getAgentDir, Br as saveAgentRuntimeState, Bt as init_transcript_landing, Ct as resetPatrolDispatchBudget, Et as workResumeSlotsAvailable, G as resumeAgent, Gr as init_codex_auth, J as isContextOverflowTail, K as init_context_overflow, Kr as paneShowsCodexAuthBurn, Ln as buildResumeContinueMessage, Lr as getAgentRuntimeState, Ot as init_memory_verdict_cache, Pt as deliverInitialPromptWithRetry, Rr as getAgentRuntimeStateSync, Ur as applyCodexAuthBurnFlag, X as messageAgent, Xn as clearAgentTroubledSync, Y as init_messaging, Zn as clearYieldForResumeSync, _ as init_linux, _r as saveAgentStateSync, _t as describeRunningAgents, a as listRunningAgentsSync, b as init_agents$1, br as setAgentYieldedSync, bt as init_concurrency, c as getRuntimeCensus, fr as recordAgentFailure, ft as init_termination, g as LINUX_MEMORY_PRESSURE_DEFAULTS, gr as saveAgentState, h as init_collector, hr as resetAgentFailureCount, ht as countRunningAgents, i as listRunningAgents, ir as init_agent_state, kt as setCachedMemoryVerdict, lr as markAgentRunningState, m as createHostHealthCollector, n as init_queries, pt as stopAgent, r as listAgentStates, rr as getAgentStateSync, s as descendantPidsForSession, tr as getAgentState, u as init_runtime_census, v as DARWIN_MEMORY_PRESSURE_DEFAULTS, wt as tryReserveAdvancingSlot, xt as releaseAdvancingSlot, y as init_darwin, yr as setAgentPausedSync, yt as getConcurrencyLimits, zr as init_runtime_state, zt as captureTranscriptUserRecordSnapshot } from "./queries-DCX27GRr.js";
|
|
14
|
+
import { o as getRuntimeSnapshot, s as init_agent_runtime_mirror } from "./session-history-C_EMhIIF.js";
|
|
15
|
+
import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-DZZq_C0R.js";
|
|
16
|
+
import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-BG6yQKNL.js";
|
|
17
|
+
import { c as init_review_status_sync, l as markWorkspaceStuck } from "./review-status-sync-h2CJX6ju.js";
|
|
18
|
+
import { i as readReviewStatusMap, n as init_review_status_source, t as classifyAdvancingSessionLifecycle } from "./review-status-source-DWnFE0b6.js";
|
|
19
|
+
import { _ as markMerged, c as init_merge_sync, f as listActiveAutoMerges, m as listProblemAutoMerges, t as cancelPending } from "./merge-sync-CM978zez.js";
|
|
20
|
+
import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-Dbnx4chw.js";
|
|
21
|
+
import { m as readWorkspacePlanSync, o as init_io } from "./io-C0NV7y6C.js";
|
|
22
|
+
import { f as init_config, m as loadConfigSync$1, p as loadConfig$1 } from "./config-CX4vk1CV.js";
|
|
23
|
+
import { D as setSetting, O as stampBootReconciliation, _ as setBootReconciliationGrace, c as init_control_settings, g as setBootReconciliationDecision, o as getLastCleanShutdownAt, r as getBootReconciliationState, s as getSetting, u as isDeaconGloballyPaused } from "./control-settings-qYYHrIqy.js";
|
|
24
|
+
import { d as init_docker_stats, u as DockerStatsCollector } from "./stack-health-Bf2WdG4E.js";
|
|
25
|
+
import { l as init_dag, o as getDispatchableItems } from "./dag-5QlmH0oC.js";
|
|
26
|
+
import { a as loadCloisterConfigSync, i as loadCloisterConfig, r as init_config$1 } from "./config-ktAVnp4s.js";
|
|
27
|
+
import { a as findRecreatedLegacyStatePaths, o as init_state_home } from "./state-home-B4EWfIxF.js";
|
|
28
|
+
import { M as withConcurrencyLimit, j as init_concurrency$1 } from "./github-app-gVnZcP9B.js";
|
|
29
|
+
import { a as isAgentIdleForNudge, t as checkStuckAgentRemediation } from "./stuck-remediation-DmY5UJLg.js";
|
|
30
|
+
import { n as __filename, r as init_esm_shims } from "./esm-shims-CaBWIR7f.js";
|
|
31
|
+
import { i as init_staleness, r as computeBuildStaleness } from "./staleness-45qZ_a60.js";
|
|
32
|
+
import { a as pidsWithCwdUnder, i as sweepAutoCloseOutCache, n as pruneTerminalStoppedAgents, r as getAutoCloseOutCanonicalState } from "./agent-gc-BMcgTDl7.js";
|
|
33
|
+
import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-CNNGbhWm.js";
|
|
34
|
+
import { n as getForgeAdapter, r as init_forge } from "./forge-RTNqJe6a.js";
|
|
35
|
+
import { a as observeForgeMergeState, i as init_merge_completeness } from "./merge-completeness-BUzPZy0E.js";
|
|
36
|
+
import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-xpFgU632.js";
|
|
37
|
+
import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-VBr9gKgX.js";
|
|
38
|
+
import { a as init_review_monitor, i as REVIEW_SUB_ROLES, n as init_review_convoy_liveness, r as reviewTimestampMs, t as evaluateReviewConvoyLiveness } from "./review-convoy-liveness-l06_LYCt.js";
|
|
39
|
+
import { J as parseReviewerSessionName, U as getTmuxSessionName, g as getAllProjectSpecialistStatuses, t as init_specialists } from "./specialists-Dfx9_Wzb.js";
|
|
40
|
+
import { a as inferBranchFromWorkspace, i as findWorkspacePath } from "./archive-planning-Binfb99i.js";
|
|
41
|
+
import { n as init_merge_verification, r as shouldSkipDispatchAsMerged } from "./merge-verification-c9Y9mllw.js";
|
|
42
|
+
import { a as findVerdictReportAsync, i as findVerdictReport, n as init_review_verdict_feedback, o as init_review_verdict_report, s as parseVerdictReport, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-yrrmgps_.js";
|
|
43
|
+
import { _ as init_label_reconciler, a as gatherProjectLensSignals, s as init_pipeline_membership_gather, v as reconcilePipelineLabelsPatrol } from "./pipeline-membership-gather-BIcJ-N0W.js";
|
|
44
|
+
import { n as init_pipeline_membership, r as resolvePipelineMembership } from "./pipeline-membership-B2yUcBz7.js";
|
|
45
|
+
import { i as init_conflict_gate, o as probeBranchConflictPaths } from "./conflict-gate-BNv6UolH.js";
|
|
46
|
+
import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-GHomyBaD.js";
|
|
47
|
+
import { g as decideAgentAutonomousRedrive, r as coordinateSwarmSlots, y as listFeatureWorkspaces } from "./deacon-swarm-DwGUgSVp.js";
|
|
48
|
+
import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-DZvP0M_S.js";
|
|
49
|
+
import { r as init_in_flight_guard, t as createInFlightGuard } from "./in-flight-guard-nXEKoxI7.js";
|
|
50
|
+
import { r as reconcileClosedIssueAgents } from "./closed-issue-reaper-hLt0W86J.js";
|
|
51
|
+
import { t as recordDeadEndNeedsYou } from "./dead-end-trip-B06RFIr2.js";
|
|
52
|
+
import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-DtQP6oE_.js";
|
|
53
|
+
import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-DQFh8rDh.js";
|
|
54
|
+
import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-Cy2jJGTe.js";
|
|
55
55
|
import { createRequire } from "node:module";
|
|
56
56
|
import { join } from "node:path";
|
|
57
57
|
import { Effect } from "effect";
|
|
@@ -60,7 +60,7 @@ import { basename as basename$1, dirname as dirname$1, join as join$1 } from "pa
|
|
|
60
60
|
import { cpus, loadavg } from "os";
|
|
61
61
|
import { freemem as freemem$1, homedir as homedir$1, platform as platform$1, totalmem as totalmem$1 } from "node:os";
|
|
62
62
|
import { closeSync as closeSync$1, existsSync as existsSync$1, openSync as openSync$1, readFileSync as readFileSync$1, readdirSync as readdirSync$1, unlinkSync as unlinkSync$1, writeFileSync as writeFileSync$1 } from "node:fs";
|
|
63
|
-
import { readFile } from "node:fs/promises";
|
|
63
|
+
import { readFile, readdir, stat as stat$1 } from "node:fs/promises";
|
|
64
64
|
import { readFile as readFile$1, readdir as readdir$1, writeFile as writeFile$1 } from "fs/promises";
|
|
65
65
|
import { exec, execFile, execFileSync, spawn } from "node:child_process";
|
|
66
66
|
import { promisify } from "node:util";
|
|
@@ -23211,7 +23211,7 @@ async function checkInspectAgentTimeouts(now = /* @__PURE__ */ new Date()) {
|
|
|
23211
23211
|
console.warn(`[deacon] Failed to kill inspect session ${sessionName}: ${msg}`);
|
|
23212
23212
|
});
|
|
23213
23213
|
try {
|
|
23214
|
-
const { messageAgent } = await import("./agents-
|
|
23214
|
+
const { messageAgent } = await import("./agents-Dnn4XgdB.js");
|
|
23215
23215
|
await messageAgent(`agent-${issueId.toLowerCase()}`, verdict, "deacon:inspect-watchdog");
|
|
23216
23216
|
} catch (err) {
|
|
23217
23217
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -23405,7 +23405,7 @@ async function maybeProactivelyCompactContext(sessionName, now) {
|
|
|
23405
23405
|
if (!agentState?.workspace || !sessionId || !agentState.model) return null;
|
|
23406
23406
|
let usage = null;
|
|
23407
23407
|
try {
|
|
23408
|
-
const { computeContextUsage } = await import("./conversation-service-
|
|
23408
|
+
const { computeContextUsage } = await import("./conversation-service-CDnQ3ayN.js");
|
|
23409
23409
|
usage = await computeContextUsage(sessionFilePath(agentState.workspace, sessionId), agentState.model);
|
|
23410
23410
|
} catch {
|
|
23411
23411
|
return null;
|
|
@@ -23504,9 +23504,9 @@ async function checkApiErrorAgents() {
|
|
|
23504
23504
|
}
|
|
23505
23505
|
if (!tmuxOutput.includes("❯")) continue;
|
|
23506
23506
|
try {
|
|
23507
|
-
const { maybeContinueCompactedAgent } = await import("./compaction-continuation-
|
|
23508
|
-
const { findLastCompactBoundary } = await import("./conversation-service-
|
|
23509
|
-
const { deliverAgentMessage } = await import("./delivery-
|
|
23507
|
+
const { maybeContinueCompactedAgent } = await import("./compaction-continuation-DtMfHN0f.js");
|
|
23508
|
+
const { findLastCompactBoundary } = await import("./conversation-service-CDnQ3ayN.js");
|
|
23509
|
+
const { deliverAgentMessage } = await import("./delivery-C2M73sBg.js");
|
|
23510
23510
|
const continued = await maybeContinueCompactedAgent({
|
|
23511
23511
|
agentId: sessionName,
|
|
23512
23512
|
tmuxOutput,
|
|
@@ -23557,13 +23557,13 @@ async function checkApiErrorAgents() {
|
|
|
23557
23557
|
const st = getAgentStateSync(sessionName);
|
|
23558
23558
|
const sid = st?.sessionId ?? runtimeState?.claudeSessionId;
|
|
23559
23559
|
if (st?.workspace && sid && st.model) {
|
|
23560
|
-
const { computeContextUsage } = await import("./conversation-service-
|
|
23560
|
+
const { computeContextUsage } = await import("./conversation-service-CDnQ3ayN.js");
|
|
23561
23561
|
const usage = await computeContextUsage(sessionFilePath(st.workspace, sid), st.model);
|
|
23562
23562
|
if (usage && usage.percentUsed < 85) recoveredPct = usage.percentUsed;
|
|
23563
23563
|
}
|
|
23564
23564
|
} catch {}
|
|
23565
23565
|
if (recoveredPct !== null) {
|
|
23566
|
-
const { clearWorkspaceStuck } = await import("./review-status-sync-
|
|
23566
|
+
const { clearWorkspaceStuck } = await import("./review-status-sync-B0IS6Beh.js");
|
|
23567
23567
|
clearWorkspaceStuck(issueId);
|
|
23568
23568
|
stuckOverflowNativeRecoveryState.delete(sessionName);
|
|
23569
23569
|
actions.push(`Context overflow recovery: cleared stuck flag for ${sessionName} (context back to ${Math.round(recoveredPct)}%)`);
|
|
@@ -23579,7 +23579,7 @@ async function checkApiErrorAgents() {
|
|
|
23579
23579
|
rec.attempts += 1;
|
|
23580
23580
|
rec.lastAttempt = now;
|
|
23581
23581
|
stuckOverflowNativeRecoveryState.set(sessionName, rec);
|
|
23582
|
-
const { resumeAgent } = await import("./agents-
|
|
23582
|
+
const { resumeAgent } = await import("./agents-Dnn4XgdB.js");
|
|
23583
23583
|
const recovered = await resumeAgent(sessionName, void 0, { compact: true });
|
|
23584
23584
|
if (recovered.success) {
|
|
23585
23585
|
stuckOverflowNativeRecoveryState.delete(sessionName);
|
|
@@ -23627,7 +23627,7 @@ async function checkApiErrorAgents() {
|
|
|
23627
23627
|
}
|
|
23628
23628
|
const compactAttempts = (ov?.compactAttempts ?? 0) + 1;
|
|
23629
23629
|
if (issueId !== null) {
|
|
23630
|
-
const { resumeAgent } = await import("./agents-
|
|
23630
|
+
const { resumeAgent } = await import("./agents-Dnn4XgdB.js");
|
|
23631
23631
|
const resumeResult = await resumeAgent(sessionName, void 0, { compact: true });
|
|
23632
23632
|
contextOverflowRecoveryState.set(sessionName, {
|
|
23633
23633
|
lastAttempt: now,
|
|
@@ -23746,7 +23746,7 @@ function isStuckMergingState(status, now) {
|
|
|
23746
23746
|
}
|
|
23747
23747
|
async function readSpecStatus(projectPath, issueId) {
|
|
23748
23748
|
try {
|
|
23749
|
-
const { findSpecByIssue } = await import("./specs
|
|
23749
|
+
const { findSpecByIssue } = await import("./specs-DKV3jIEs.js");
|
|
23750
23750
|
return (await Effect.runPromise(findSpecByIssue(projectPath, issueId)))?.status;
|
|
23751
23751
|
} catch {
|
|
23752
23752
|
return;
|
|
@@ -23828,7 +23828,7 @@ async function reconcileStuckMergingStates() {
|
|
|
23828
23828
|
reviewGatesPassed: reviewGatesPassedSync,
|
|
23829
23829
|
setReviewStatus: setReviewStatusSync,
|
|
23830
23830
|
enqueuePostMerge: async (issueId, projectPath, branch) => {
|
|
23831
|
-
const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-
|
|
23831
|
+
const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-3u_rA4R0.js");
|
|
23832
23832
|
return enqueuePostMergeLifecycle(issueId, projectPath, branch);
|
|
23833
23833
|
},
|
|
23834
23834
|
warn: (message) => console.warn(message)
|
|
@@ -24073,7 +24073,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
24073
24073
|
].includes(status.mergeStatus ?? "") || ["merging", "failed"].includes(mergeSet?.status ?? "");
|
|
24074
24074
|
let specStatus;
|
|
24075
24075
|
try {
|
|
24076
|
-
const { findSpecByIssue } = await import("./specs
|
|
24076
|
+
const { findSpecByIssue } = await import("./specs-DKV3jIEs.js");
|
|
24077
24077
|
const spec = await Effect.runPromise(findSpecByIssue(project.projectPath, issueId));
|
|
24078
24078
|
specStatus = spec?.status;
|
|
24079
24079
|
if (spec && (spec.status === "completed" || spec.status === "cancelled")) {
|
|
@@ -24083,7 +24083,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
24083
24083
|
} catch {}
|
|
24084
24084
|
const branch = `feature/${issueId.toLowerCase()}`;
|
|
24085
24085
|
if (postMergeIncomplete) {
|
|
24086
|
-
const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-
|
|
24086
|
+
const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-3u_rA4R0.js");
|
|
24087
24087
|
const action = enqueuePostMergeLifecycle(issueId, project.projectPath, branch);
|
|
24088
24088
|
if (action) actions.push(action);
|
|
24089
24089
|
continue;
|
|
@@ -24095,7 +24095,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
24095
24095
|
} catch {}
|
|
24096
24096
|
if (!isMerged) isMerged = (await observeGitHubBranchMerge(issueId, branch, project.projectPath)).merged;
|
|
24097
24097
|
if (shouldObserveForge && mergeRelevant) try {
|
|
24098
|
-
const observation = await (await import("./merge-completeness-
|
|
24098
|
+
const observation = await (await import("./merge-completeness-CghMbyX7.js")).observeForgeMergeState(issueId);
|
|
24099
24099
|
const blocker = observation.repos.find((repo) => repo.state === "unverifiable");
|
|
24100
24100
|
if (blocker) {
|
|
24101
24101
|
console.warn(`[deacon] ${issueId}: forge merge state is unverifiable — ${blocker.reason}`);
|
|
@@ -24122,7 +24122,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
24122
24122
|
const msg = `Reconciled stale mergeStatus for ${issueId} — branch ${branch} is merged to main`;
|
|
24123
24123
|
actions.push(msg);
|
|
24124
24124
|
console.log(`[deacon] ${msg}`);
|
|
24125
|
-
const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-
|
|
24125
|
+
const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-3u_rA4R0.js");
|
|
24126
24126
|
const action = enqueuePostMergeLifecycle(issueId, project.projectPath, branch);
|
|
24127
24127
|
if (action) actions.push(action);
|
|
24128
24128
|
}
|
|
@@ -24145,7 +24145,7 @@ const falseMergedReset = /* @__PURE__ */ new Set();
|
|
|
24145
24145
|
async function reconcileFalseMerged() {
|
|
24146
24146
|
const actions = [];
|
|
24147
24147
|
try {
|
|
24148
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
24148
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-DIE8BkHI.js");
|
|
24149
24149
|
if (!isGitHubAppConfigured()) return actions;
|
|
24150
24150
|
const statuses = loadReviewStatuses();
|
|
24151
24151
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
@@ -24190,7 +24190,7 @@ const CLOSED_PR_RECONCILE_COOLDOWN_MS = 600 * 1e3;
|
|
|
24190
24190
|
async function reconcileClosedPrReadyForMerge() {
|
|
24191
24191
|
const actions = [];
|
|
24192
24192
|
try {
|
|
24193
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
24193
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-DIE8BkHI.js");
|
|
24194
24194
|
if (!isGitHubAppConfigured()) return actions;
|
|
24195
24195
|
const statuses = loadReviewStatuses();
|
|
24196
24196
|
const now = Date.now();
|
|
@@ -24262,7 +24262,7 @@ const STALE_MERGE_BLOCKER_COOLDOWN_MS = 120 * 1e3;
|
|
|
24262
24262
|
async function reconcileStaleMergeBlockers() {
|
|
24263
24263
|
const actions = [];
|
|
24264
24264
|
try {
|
|
24265
|
-
const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-
|
|
24265
|
+
const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-BSTlwCtF.js");
|
|
24266
24266
|
const statuses = loadReviewStatuses();
|
|
24267
24267
|
const now = Date.now();
|
|
24268
24268
|
const deps = buildRealConflictGateDeps();
|
|
@@ -24405,7 +24405,7 @@ async function checkFailedMergeRetry() {
|
|
|
24405
24405
|
if (ciEntry.count === 5) {
|
|
24406
24406
|
console.log(`[deacon] CI check failure for ${issueId} — retries exhausted, notifying work agent`);
|
|
24407
24407
|
const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
|
|
24408
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
24408
|
+
const { writeFeedbackFile } = await import("./feedback-writer-CY91ckuw.js");
|
|
24409
24409
|
const ciFileResult = await Effect.runPromise(writeFeedbackFile({
|
|
24410
24410
|
issueId,
|
|
24411
24411
|
specialist: "merge-agent",
|
|
@@ -24437,7 +24437,7 @@ async function checkFailedMergeRetry() {
|
|
|
24437
24437
|
ciRetryMap.set(issueId, ciEntry);
|
|
24438
24438
|
console.log(`[deacon] CI check failure for ${issueId} — notifying agent to re-submit (attempt ${ciEntry.count}/5)`);
|
|
24439
24439
|
const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
|
|
24440
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
24440
|
+
const { writeFeedbackFile } = await import("./feedback-writer-CY91ckuw.js");
|
|
24441
24441
|
const ciFileResult2 = await Effect.runPromise(writeFeedbackFile({
|
|
24442
24442
|
issueId,
|
|
24443
24443
|
specialist: "merge-agent",
|
|
@@ -24465,7 +24465,7 @@ async function checkFailedMergeRetry() {
|
|
|
24465
24465
|
const lastNudge = timeoutNudgeCooldowns.get(issueIdForFb);
|
|
24466
24466
|
if (!lastNudge || now - lastNudge >= TIMEOUT_NUDGE_COOLDOWN_MS) {
|
|
24467
24467
|
const timeoutNotes = status.mergeNotes;
|
|
24468
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
24468
|
+
const { writeFeedbackFile } = await import("./feedback-writer-CY91ckuw.js");
|
|
24469
24469
|
await Effect.runPromise(writeFeedbackFile({
|
|
24470
24470
|
issueId: issueIdForFb,
|
|
24471
24471
|
specialist: "merge-agent",
|
|
@@ -24570,7 +24570,7 @@ async function autoCloseOut(now = /* @__PURE__ */ new Date()) {
|
|
|
24570
24570
|
} } : {}
|
|
24571
24571
|
};
|
|
24572
24572
|
try {
|
|
24573
|
-
const { closeOut } = await import("./workflows-
|
|
24573
|
+
const { closeOut } = await import("./workflows-DN6NyVGd.js");
|
|
24574
24574
|
const result = await Effect.runPromise(closeOut(ctx));
|
|
24575
24575
|
if (!result.success) {
|
|
24576
24576
|
const failed = result.steps.find((step) => !step.success && !step.skipped);
|
|
@@ -24913,8 +24913,8 @@ async function checkPostReviewCommits() {
|
|
|
24913
24913
|
if (!project) continue;
|
|
24914
24914
|
const workspacePath = join$1(project.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
|
|
24915
24915
|
if (!existsSync(workspacePath)) continue;
|
|
24916
|
-
const { formatAnchorShort, rehydrateHeadAnchor } = await import("./git-utils-
|
|
24917
|
-
const { evaluateWorkspaceAnchorDrift } = await import("./workspace-anchor-drift-
|
|
24916
|
+
const { formatAnchorShort, rehydrateHeadAnchor } = await import("./git-utils-CedsVume.js");
|
|
24917
|
+
const { evaluateWorkspaceAnchorDrift } = await import("./workspace-anchor-drift-19cJ1bH5.js");
|
|
24918
24918
|
const verdict = await evaluateWorkspaceAnchorDrift(issueId, workspacePath, rehydrateHeadAnchor(reviewedAnchor));
|
|
24919
24919
|
if (verdict.kind === "unreadable" || verdict.kind === "current") {
|
|
24920
24920
|
blockedReviewDriftObservations.delete(issueId);
|
|
@@ -24964,7 +24964,7 @@ async function checkPostReviewCommits() {
|
|
|
24964
24964
|
actions.push(`Deferred post-review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
|
|
24965
24965
|
logDeaconEventSync(`checkPostReviewCommits: deferred review for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
|
|
24966
24966
|
} else if (freshStatus?.reviewStatus === "pending") {
|
|
24967
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
24967
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-UpAM4DmT.js");
|
|
24968
24968
|
const branch = `feature/${issueId.toLowerCase()}`;
|
|
24969
24969
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
24970
24970
|
issueId,
|
|
@@ -25345,7 +25345,7 @@ function reviewConvoyLiveness(issueId) {
|
|
|
25345
25345
|
*/
|
|
25346
25346
|
async function recoverUnhealthyTestStack(issueId, workspacePath) {
|
|
25347
25347
|
const key = issueId.toUpperCase();
|
|
25348
|
-
const { getWorkspaceStackHealth } = await import("./stack-health-
|
|
25348
|
+
const { getWorkspaceStackHealth } = await import("./stack-health-CoWAhA99.js");
|
|
25349
25349
|
const health = await Effect.runPromise(getWorkspaceStackHealth(issueId, { workspacePath }));
|
|
25350
25350
|
if (health.healthy) {
|
|
25351
25351
|
testStackRebuildState.delete(key);
|
|
@@ -25377,7 +25377,7 @@ async function recoverUnhealthyTestStack(issueId, workspacePath) {
|
|
|
25377
25377
|
record.attempts += 1;
|
|
25378
25378
|
testStackRebuildState.set(key, record);
|
|
25379
25379
|
console.log(`[deacon] Test stack for ${key} unhealthy (${health.reasons.join("; ")}) — rebuilding (attempt ${record.attempts}/${TEST_STACK_REBUILD_MAX_ATTEMPTS})`);
|
|
25380
|
-
const { rebuildWorkspaceStack } = await import("./rebuild-stack-
|
|
25380
|
+
const { rebuildWorkspaceStack } = await import("./rebuild-stack-BKYpIPDL.js");
|
|
25381
25381
|
const result = await Effect.runPromise(rebuildWorkspaceStack(issueId, { onProgress: (m) => console.log(`[deacon] ${key} stack rebuild: ${m}`) }));
|
|
25382
25382
|
if (!result.success) {
|
|
25383
25383
|
console.warn(`[deacon] Test stack rebuild failed for ${key}: ${result.error}`);
|
|
@@ -25545,7 +25545,7 @@ async function handleReviewCoordinatorDied(issueId, _sessionName, _reason) {
|
|
|
25545
25545
|
return actions;
|
|
25546
25546
|
}
|
|
25547
25547
|
try {
|
|
25548
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
25548
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-UpAM4DmT.js");
|
|
25549
25549
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
25550
25550
|
issueId,
|
|
25551
25551
|
workspace,
|
|
@@ -25620,7 +25620,7 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus, options = {}) {
|
|
|
25620
25620
|
const issueLower = issueId.toLowerCase();
|
|
25621
25621
|
const workspace = getAgentStateSync(`agent-${issueLower}`)?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
|
|
25622
25622
|
if (workspace) try {
|
|
25623
|
-
if ((options.readWorkspaceHead ? await options.readWorkspaceHead(workspace) : await (await import("./git-utils-
|
|
25623
|
+
if ((options.readWorkspaceHead ? await options.readWorkspaceHead(workspace) : await (await import("./git-utils-CedsVume.js")).snapshotWorkspaceHeadsPromise(issueId, workspace)) === status.lastVerifiedCommit) {
|
|
25624
25624
|
setReviewStatusSync(issueId, {
|
|
25625
25625
|
reviewStatus: "pending",
|
|
25626
25626
|
reviewNotes: void 0
|
|
@@ -25642,7 +25642,7 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus, options = {}) {
|
|
|
25642
25642
|
if (project) {
|
|
25643
25643
|
const workspacePath = join$1(project.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
|
|
25644
25644
|
if (existsSync(workspacePath)) {
|
|
25645
|
-
const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-
|
|
25645
|
+
const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-CedsVume.js");
|
|
25646
25646
|
reviewUpdate["reviewedAtCommit"] = await snapshotWorkspaceHeadsPromise(issueId, workspacePath);
|
|
25647
25647
|
}
|
|
25648
25648
|
}
|
|
@@ -25697,7 +25697,7 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus, options = {}) {
|
|
|
25697
25697
|
const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
|
|
25698
25698
|
if (workspace && resolved && !tryReserveAdvancingSlot() && !await tryYieldForAdvancingDispatch("review", issueId)) actions.push(`Deferred review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
|
|
25699
25699
|
else if (workspace && resolved) try {
|
|
25700
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
25700
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-UpAM4DmT.js");
|
|
25701
25701
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
25702
25702
|
issueId,
|
|
25703
25703
|
workspace,
|
|
@@ -25722,8 +25722,8 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus, options = {}) {
|
|
|
25722
25722
|
const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
|
|
25723
25723
|
if (workspace && resolved) {
|
|
25724
25724
|
const branch = `feature/${issueLower}`;
|
|
25725
|
-
const { spawnRun } = await import("./agents-
|
|
25726
|
-
const { buildTestRolePrompt } = await import("./test-agent-queue-
|
|
25725
|
+
const { spawnRun } = await import("./agents-Dnn4XgdB.js");
|
|
25726
|
+
const { buildTestRolePrompt } = await import("./test-agent-queue-DmSIqays.js");
|
|
25727
25727
|
const stackRecovery = await recoverUnhealthyTestStack(issueId, workspace);
|
|
25728
25728
|
if (stackRecovery === "cooldown" || stackRecovery === "exhausted") {
|
|
25729
25729
|
setReviewStatusSync(issueId, { testStatus: "dispatch_failed" });
|
|
@@ -25862,7 +25862,7 @@ async function recoverStalledReviewConvoys(getCanonicalState = getAutoCloseOutCa
|
|
|
25862
25862
|
record.lastAttempt = now;
|
|
25863
25863
|
record.attempts += 1;
|
|
25864
25864
|
stalledReviewConvoyRecoveryState.set(key, record);
|
|
25865
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
25865
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-UpAM4DmT.js");
|
|
25866
25866
|
try {
|
|
25867
25867
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
25868
25868
|
issueId,
|
|
@@ -25933,7 +25933,7 @@ async function checkMissingReviewStatuses() {
|
|
|
25933
25933
|
continue;
|
|
25934
25934
|
}
|
|
25935
25935
|
try {
|
|
25936
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
25936
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-UpAM4DmT.js");
|
|
25937
25937
|
await Effect.runPromise(spawnReviewRoleForIssue({
|
|
25938
25938
|
issueId,
|
|
25939
25939
|
workspace,
|
|
@@ -25961,11 +25961,14 @@ async function checkMissingReviewStatuses() {
|
|
|
25961
25961
|
//#endregion
|
|
25962
25962
|
//#region ../../lib/cloister/deacon-review-unsignaled.ts
|
|
25963
25963
|
init_agents$1();
|
|
25964
|
+
init_activity_logger();
|
|
25964
25965
|
init_projects();
|
|
25965
25966
|
init_review_status();
|
|
25966
25967
|
init_specialists();
|
|
25967
25968
|
init_tmux();
|
|
25968
25969
|
init_review_convoy_liveness();
|
|
25970
|
+
init_review_verdict_feedback();
|
|
25971
|
+
init_review_verdict_report();
|
|
25969
25972
|
/**
|
|
25970
25973
|
* Detect issues stuck in `reviewing` status with no active review session.
|
|
25971
25974
|
*
|
|
@@ -25984,7 +25987,7 @@ async function checkStuckReviewing() {
|
|
|
25984
25987
|
const actions = [];
|
|
25985
25988
|
const REVIEW_STUCK_THRESHOLD_MS = 1800 * 1e3;
|
|
25986
25989
|
try {
|
|
25987
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
25990
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-CacDM78F.js");
|
|
25988
25991
|
const statuses = loadReviewStatuses();
|
|
25989
25992
|
const now = Date.now();
|
|
25990
25993
|
const activeReviewIssues = /* @__PURE__ */ new Set();
|
|
@@ -26042,25 +26045,183 @@ async function checkStuckReviewing() {
|
|
|
26042
26045
|
* - Only nudges once per review cycle (tracked by runId in the review dir)
|
|
26043
26046
|
*/
|
|
26044
26047
|
const unsignaledReviewNudges = /* @__PURE__ */ new Map();
|
|
26045
|
-
|
|
26048
|
+
const pendingVerdictNudges = /* @__PURE__ */ new Map();
|
|
26049
|
+
function reviewAnchorFromContext(context) {
|
|
26050
|
+
if (context.repos) {
|
|
26051
|
+
if (context.repos.length === 0) return void 0;
|
|
26052
|
+
const heads = [];
|
|
26053
|
+
for (const repo of context.repos) {
|
|
26054
|
+
if (!repo.repoKey?.trim() || !repo.headSha?.trim()) return void 0;
|
|
26055
|
+
heads.push(`${repo.repoKey.trim()}@${repo.headSha.trim()}`);
|
|
26056
|
+
}
|
|
26057
|
+
return heads.join(" ");
|
|
26058
|
+
}
|
|
26059
|
+
return context.headSha?.trim() || void 0;
|
|
26060
|
+
}
|
|
26061
|
+
function shellQuote(value) {
|
|
26062
|
+
return `'${value.replaceAll("'", "'\\''")}'`;
|
|
26063
|
+
}
|
|
26064
|
+
function buildReviewCompletionCommand(issueId, verdict, notes, runId) {
|
|
26065
|
+
let command = `pan admin specialists done review ${shellQuote(issueId)} --status ${shellQuote(verdict)}`;
|
|
26066
|
+
if (verdict === "blocked" || verdict === "failed") command += ` --notes ${shellQuote(notes)}`;
|
|
26067
|
+
return `${command} --run-id ${shellQuote(runId)}`;
|
|
26068
|
+
}
|
|
26069
|
+
function isReviewContextForActiveRun(context, status, reportMtimeMs) {
|
|
26046
26070
|
if (!status.reviewSpawnedAt) return true;
|
|
26047
26071
|
const spawnedAtMs = reviewTimestampMs(status.reviewSpawnedAt);
|
|
26048
26072
|
if (!Number.isFinite(spawnedAtMs)) return true;
|
|
26049
|
-
if (
|
|
26073
|
+
if (reportMtimeMs < spawnedAtMs) return false;
|
|
26074
|
+
if (context.generatedAt) {
|
|
26075
|
+
const generatedAtMs = Date.parse(context.generatedAt);
|
|
26076
|
+
if (Number.isFinite(generatedAtMs) && generatedAtMs < spawnedAtMs) return false;
|
|
26077
|
+
}
|
|
26078
|
+
const reviewedAnchor = reviewAnchorFromContext(context);
|
|
26079
|
+
return !status.lastVerifiedCommit || !reviewedAnchor || reviewedAnchor === status.lastVerifiedCommit;
|
|
26080
|
+
}
|
|
26081
|
+
function isSynthesisForActiveReviewRun(dirPath, status, synthesisMtimeMs) {
|
|
26082
|
+
if (!status.reviewSpawnedAt) return true;
|
|
26050
26083
|
const contextPath = join$1(dirPath, "context.json");
|
|
26051
26084
|
if (!existsSync(contextPath)) return false;
|
|
26052
|
-
let context;
|
|
26053
26085
|
try {
|
|
26054
|
-
|
|
26086
|
+
return isReviewContextForActiveRun(JSON.parse(readFileSync(contextPath, "utf8")), status, synthesisMtimeMs);
|
|
26055
26087
|
} catch {
|
|
26056
26088
|
return false;
|
|
26057
26089
|
}
|
|
26058
|
-
|
|
26059
|
-
|
|
26060
|
-
|
|
26090
|
+
}
|
|
26091
|
+
/**
|
|
26092
|
+
* Apply settled review verdicts that reached disk after their runtime status
|
|
26093
|
+
* was reset to pending. The live review parent gets one chance to signal the
|
|
26094
|
+
* verdict itself; a dead parent, or one still unsignaled after 30 minutes, is
|
|
26095
|
+
* reconciled directly through the review-status and feedback write doors.
|
|
26096
|
+
*/
|
|
26097
|
+
async function reconcileUnappliedReviewVerdicts() {
|
|
26098
|
+
const actions = [];
|
|
26099
|
+
const VERDICT_SETTLE_MS = 300 * 1e3;
|
|
26100
|
+
const NUDGE_GRACE_MS = 1800 * 1e3;
|
|
26101
|
+
try {
|
|
26102
|
+
const statuses = loadReviewStatuses();
|
|
26103
|
+
const now = Date.now();
|
|
26104
|
+
for (const [issueId, status] of Object.entries(statuses)) {
|
|
26105
|
+
if (status.reviewStatus !== "pending" || !status.reviewSpawnedAt) continue;
|
|
26106
|
+
try {
|
|
26107
|
+
const resolved = resolveProjectFromIssueSync(issueId);
|
|
26108
|
+
if (!resolved) continue;
|
|
26109
|
+
const wsPath = findWorkspacePath(resolved.projectPath, issueId.toLowerCase());
|
|
26110
|
+
if (!wsPath) continue;
|
|
26111
|
+
const reviewBaseDir = join$1(wsPath, ".pan", "review");
|
|
26112
|
+
let reviewEntries;
|
|
26113
|
+
try {
|
|
26114
|
+
reviewEntries = await readdir(reviewBaseDir);
|
|
26115
|
+
} catch {
|
|
26116
|
+
continue;
|
|
26117
|
+
}
|
|
26118
|
+
let latestDir = null;
|
|
26119
|
+
let latestReport = null;
|
|
26120
|
+
let latestContext = null;
|
|
26121
|
+
let latestMtime = 0;
|
|
26122
|
+
for (const entry of reviewEntries) {
|
|
26123
|
+
if (!entry.startsWith(`agent-${issueId.toLowerCase()}-review`)) continue;
|
|
26124
|
+
const dirPath = join$1(reviewBaseDir, entry);
|
|
26125
|
+
try {
|
|
26126
|
+
const report = await findVerdictReportAsync(dirPath);
|
|
26127
|
+
if (!report) continue;
|
|
26128
|
+
const [reportStat, contextContent] = await Promise.all([stat$1(report.path), readFile(join$1(dirPath, "context.json"), "utf8")]);
|
|
26129
|
+
const context = JSON.parse(contextContent);
|
|
26130
|
+
if (!isReviewContextForActiveRun(context, status, reportStat.mtimeMs)) continue;
|
|
26131
|
+
if (reportStat.mtimeMs > latestMtime) {
|
|
26132
|
+
latestDir = dirPath;
|
|
26133
|
+
latestReport = report;
|
|
26134
|
+
latestContext = context;
|
|
26135
|
+
latestMtime = reportStat.mtimeMs;
|
|
26136
|
+
}
|
|
26137
|
+
} catch (error) {
|
|
26138
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
26139
|
+
console.error(`[deacon] Error reading review run ${dirPath}:`, msg);
|
|
26140
|
+
}
|
|
26141
|
+
}
|
|
26142
|
+
if (!latestDir || !latestReport || !latestContext) continue;
|
|
26143
|
+
if (now - latestMtime < VERDICT_SETTLE_MS) continue;
|
|
26144
|
+
const requestedAtMs = status.reviewRequestedAt ? Date.parse(status.reviewRequestedAt) : NaN;
|
|
26145
|
+
if (Number.isFinite(requestedAtMs) && requestedAtMs > latestMtime) continue;
|
|
26146
|
+
let currentHead;
|
|
26147
|
+
let reviewedHead;
|
|
26148
|
+
try {
|
|
26149
|
+
const { rehydrateHeadAnchor, snapshotWorkspaceHeadsPromise } = await import("./git-utils-CedsVume.js");
|
|
26150
|
+
currentHead = await snapshotWorkspaceHeadsPromise(issueId, wsPath);
|
|
26151
|
+
const persistedAnchor = reviewAnchorFromContext(latestContext);
|
|
26152
|
+
reviewedHead = persistedAnchor ? rehydrateHeadAnchor(persistedAnchor) : void 0;
|
|
26153
|
+
} catch {
|
|
26154
|
+
continue;
|
|
26155
|
+
}
|
|
26156
|
+
if (!reviewedHead || currentHead !== reviewedHead) continue;
|
|
26157
|
+
let parsed;
|
|
26158
|
+
try {
|
|
26159
|
+
parsed = parseVerdictReport(await readFile(latestReport.path, "utf8"));
|
|
26160
|
+
} catch {
|
|
26161
|
+
continue;
|
|
26162
|
+
}
|
|
26163
|
+
if (!parsed) continue;
|
|
26164
|
+
const reviewSession = `agent-${issueId.toLowerCase()}-review`;
|
|
26165
|
+
const sessionAlive = sessionExistsSync(reviewSession);
|
|
26166
|
+
const paneDead = sessionAlive ? await Effect.runPromise(isPaneDead(reviewSession)).catch(() => true) : true;
|
|
26167
|
+
if (sessionAlive && !paneDead) {
|
|
26168
|
+
const lastNudged = pendingVerdictNudges.get(latestDir);
|
|
26169
|
+
if (!lastNudged) {
|
|
26170
|
+
const notes = parsed.topBlocker || `See ${latestReport.filename}`;
|
|
26171
|
+
const nudge = `Your review verdict is already written on disk but review status is still pending. Your ONLY remaining task is to execute this Bash command immediately — do not analyze, do not summarize, do not ask questions, just run it:\n\n${buildReviewCompletionCommand(issueId, parsed.verdict, notes, basename$1(latestDir))}\n\nRun this command NOW. Do not write any other response before executing it.`;
|
|
26172
|
+
try {
|
|
26173
|
+
const { messageAgent } = await import("./agents-Dnn4XgdB.js");
|
|
26174
|
+
await messageAgent(reviewSession, nudge);
|
|
26175
|
+
pendingVerdictNudges.set(latestDir, now);
|
|
26176
|
+
const action = `Nudged ${reviewSession} to apply pending ${parsed.verdict} verdict from ${latestReport.filename}`;
|
|
26177
|
+
actions.push(action);
|
|
26178
|
+
console.log(`[deacon] ${action}`);
|
|
26179
|
+
} catch (err) {
|
|
26180
|
+
console.error(`[deacon] Failed to nudge ${reviewSession}:`, err instanceof Error ? err.message : String(err));
|
|
26181
|
+
}
|
|
26182
|
+
continue;
|
|
26183
|
+
}
|
|
26184
|
+
if (now - lastNudged < NUDGE_GRACE_MS) continue;
|
|
26185
|
+
}
|
|
26186
|
+
const attribution = `applied by deacon sweep from on-disk ${latestReport.filename}`;
|
|
26187
|
+
const reviewNotes = parsed.topBlocker ? `${parsed.topBlocker} — ${attribution}` : `Review ${parsed.verdict} ${attribution}`;
|
|
26188
|
+
setReviewStatusSync(issueId, {
|
|
26189
|
+
reviewStatus: parsed.verdict,
|
|
26190
|
+
reviewNotes,
|
|
26191
|
+
...(parsed.verdict === "passed" || parsed.verdict === "blocked") && currentHead ? { reviewedAtCommit: currentHead } : {}
|
|
26192
|
+
});
|
|
26193
|
+
if (parsed.verdict === "blocked") try {
|
|
26194
|
+
await Effect.runPromise(deliverReviewVerdictFeedback({
|
|
26195
|
+
issueId,
|
|
26196
|
+
verdict: "blocked",
|
|
26197
|
+
notes: parsed.topBlocker || reviewNotes,
|
|
26198
|
+
workspacePath: wsPath,
|
|
26199
|
+
prUrl: status.prUrl,
|
|
26200
|
+
runId: basename$1(latestDir)
|
|
26201
|
+
}));
|
|
26202
|
+
} catch (err) {
|
|
26203
|
+
console.error(`[deacon] Failed to deliver reconciled review verdict for ${issueId}:`, err instanceof Error ? err.message : String(err));
|
|
26204
|
+
}
|
|
26205
|
+
pendingVerdictNudges.delete(latestDir);
|
|
26206
|
+
const action = `reconcileUnappliedReviewVerdicts deacon sweep applied ${parsed.verdict} for ${issueId} from ${latestReport.filename}`;
|
|
26207
|
+
actions.push(action);
|
|
26208
|
+
emitActivityEntrySync({
|
|
26209
|
+
source: "cloister",
|
|
26210
|
+
level: "warn",
|
|
26211
|
+
message: action,
|
|
26212
|
+
issueId
|
|
26213
|
+
});
|
|
26214
|
+
console.log(`[deacon] ${action}`);
|
|
26215
|
+
} catch (error) {
|
|
26216
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
26217
|
+
console.error(`[deacon] Error reconciling unapplied review verdict for ${issueId}:`, msg);
|
|
26218
|
+
}
|
|
26219
|
+
}
|
|
26220
|
+
} catch (error) {
|
|
26221
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
26222
|
+
console.error("[deacon] Error reconciling unapplied review verdicts:", msg);
|
|
26061
26223
|
}
|
|
26062
|
-
|
|
26063
|
-
return true;
|
|
26224
|
+
return actions;
|
|
26064
26225
|
}
|
|
26065
26226
|
async function checkCompletedButUnsignaledReviews() {
|
|
26066
26227
|
const actions = [];
|
|
@@ -26077,20 +26238,22 @@ async function checkCompletedButUnsignaledReviews() {
|
|
|
26077
26238
|
const reviewBaseDir = join$1(wsPath, ".pan", "review");
|
|
26078
26239
|
if (!existsSync(reviewBaseDir)) continue;
|
|
26079
26240
|
let latestDir = null;
|
|
26241
|
+
let latestReport = null;
|
|
26080
26242
|
let latestMtime = 0;
|
|
26081
26243
|
for (const entry of readdirSync(reviewBaseDir)) {
|
|
26082
26244
|
if (!entry.startsWith(`agent-${issueId.toLowerCase()}-review`)) continue;
|
|
26083
26245
|
const dirPath = join$1(reviewBaseDir, entry);
|
|
26084
|
-
const
|
|
26085
|
-
if (!
|
|
26086
|
-
const mtime = statSync(
|
|
26246
|
+
const report = findVerdictReport(dirPath);
|
|
26247
|
+
if (!report) continue;
|
|
26248
|
+
const mtime = statSync(report.path).mtimeMs;
|
|
26087
26249
|
if (!isSynthesisForActiveReviewRun(dirPath, status, mtime)) continue;
|
|
26088
26250
|
if (mtime > latestMtime) {
|
|
26089
26251
|
latestMtime = mtime;
|
|
26090
26252
|
latestDir = dirPath;
|
|
26253
|
+
latestReport = report;
|
|
26091
26254
|
}
|
|
26092
26255
|
}
|
|
26093
|
-
if (!latestDir) continue;
|
|
26256
|
+
if (!latestDir || !latestReport) continue;
|
|
26094
26257
|
if (now - latestMtime < SYNTHESIS_SETTLE_MS) continue;
|
|
26095
26258
|
const lastNudged = unsignaledReviewNudges.get(latestDir);
|
|
26096
26259
|
if (lastNudged && now - lastNudged < 1800 * 1e3) continue;
|
|
@@ -26099,40 +26262,31 @@ async function checkCompletedButUnsignaledReviews() {
|
|
|
26099
26262
|
const paneDead = sessionAlive ? await Effect.runPromise(isPaneDead(reviewSession)).catch(() => true) : true;
|
|
26100
26263
|
const activeReviewState = sessionAlive && !paneDead ? getAgentStateSync(reviewSession) : null;
|
|
26101
26264
|
if (activeReviewState?.reviewRunId && latestDir !== join$1(reviewBaseDir, activeReviewState.reviewRunId)) continue;
|
|
26102
|
-
|
|
26103
|
-
let verdict = null;
|
|
26104
|
-
let topBlocker = "";
|
|
26265
|
+
let parsed;
|
|
26105
26266
|
try {
|
|
26106
|
-
|
|
26107
|
-
const verdictLine = content.match(/## Verdict:\s*(.+)/i);
|
|
26108
|
-
if (verdictLine) {
|
|
26109
|
-
const v = verdictLine[1].trim().toUpperCase();
|
|
26110
|
-
if (v === "PASSED") verdict = "passed";
|
|
26111
|
-
else if (v === "CHANGES REQUESTED") verdict = "blocked";
|
|
26112
|
-
else if (v === "FAILED") verdict = "failed";
|
|
26113
|
-
}
|
|
26114
|
-
const blockerMatch = content.match(/## Blocking Findings\s*\n\s*###\s*\[[^\]]+\]\s*(.+)/);
|
|
26115
|
-
if (blockerMatch) topBlocker = blockerMatch[1].slice(0, 120);
|
|
26267
|
+
parsed = parseVerdictReport(readFileSync(latestReport.path, "utf8"));
|
|
26116
26268
|
} catch {
|
|
26117
26269
|
continue;
|
|
26118
26270
|
}
|
|
26119
|
-
if (!
|
|
26271
|
+
if (!parsed) continue;
|
|
26272
|
+
const { verdict, topBlocker } = parsed;
|
|
26120
26273
|
if (sessionAlive && !paneDead) {
|
|
26121
26274
|
if (lastNudged) {
|
|
26122
26275
|
setReviewStatusSync(issueId, {
|
|
26123
26276
|
reviewStatus: verdict,
|
|
26124
|
-
reviewNotes: topBlocker || `Review auto-completed by deacon: ${verdict} (agent alive but unresponsive after nudge,
|
|
26277
|
+
reviewNotes: topBlocker || `Review auto-completed by deacon: ${verdict} (agent alive but unresponsive after nudge, ${latestReport.filename} exists)`
|
|
26125
26278
|
});
|
|
26126
|
-
actions.push(`Auto-completed review for ${issueId}: ${verdict} (alive but unresponsive after nudge,
|
|
26279
|
+
actions.push(`Auto-completed review for ${issueId}: ${verdict} (alive but unresponsive after nudge, ${latestReport.filename} written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
|
|
26127
26280
|
console.log(`[deacon] Auto-completed review for ${issueId}: ${verdict} (alive but unresponsive after nudge)`);
|
|
26128
26281
|
continue;
|
|
26129
26282
|
}
|
|
26130
|
-
const
|
|
26283
|
+
const cmd = buildReviewCompletionCommand(issueId, verdict, topBlocker || `See ${latestReport.filename}`, basename$1(latestDir));
|
|
26284
|
+
const nudge = `Your review verdict in ${latestReport.filename} is already written and saved. Your ONLY remaining task is to execute this Bash command immediately — do not analyze, do not summarize, do not ask questions, just run it:\n\n${cmd}\n\nRun this command NOW. Do not write any other response before executing it.`;
|
|
26131
26285
|
try {
|
|
26132
|
-
const { messageAgent } = await import("./agents-
|
|
26286
|
+
const { messageAgent } = await import("./agents-Dnn4XgdB.js");
|
|
26133
26287
|
await messageAgent(reviewSession, nudge);
|
|
26134
26288
|
unsignaledReviewNudges.set(latestDir, now);
|
|
26135
|
-
actions.push(`Nudged ${reviewSession} to signal ${verdict} (
|
|
26289
|
+
actions.push(`Nudged ${reviewSession} to signal ${verdict} (${latestReport.filename} written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
|
|
26136
26290
|
console.log(`[deacon] Nudged ${reviewSession} to signal ${verdict}`);
|
|
26137
26291
|
} catch (err) {
|
|
26138
26292
|
console.error(`[deacon] Failed to nudge ${reviewSession}:`, err instanceof Error ? err.message : String(err));
|
|
@@ -26140,9 +26294,9 @@ async function checkCompletedButUnsignaledReviews() {
|
|
|
26140
26294
|
} else {
|
|
26141
26295
|
setReviewStatusSync(issueId, {
|
|
26142
26296
|
reviewStatus: verdict,
|
|
26143
|
-
reviewNotes: topBlocker || `Review auto-completed by deacon: ${verdict} (agent dead,
|
|
26297
|
+
reviewNotes: topBlocker || `Review auto-completed by deacon: ${verdict} (agent dead, ${latestReport.filename} exists)`
|
|
26144
26298
|
});
|
|
26145
|
-
actions.push(`Auto-completed review for ${issueId}: ${verdict} (dead agent,
|
|
26299
|
+
actions.push(`Auto-completed review for ${issueId}: ${verdict} (dead agent, ${latestReport.filename} written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
|
|
26146
26300
|
console.log(`[deacon] Auto-completed review for ${issueId}: ${verdict} (dead agent)`);
|
|
26147
26301
|
}
|
|
26148
26302
|
}
|
|
@@ -26157,6 +26311,7 @@ async function checkCompletedButUnsignaledReviews() {
|
|
|
26157
26311
|
init_context_overflow();
|
|
26158
26312
|
init_agents$1();
|
|
26159
26313
|
init_review_verdict_feedback();
|
|
26314
|
+
init_review_verdict_report();
|
|
26160
26315
|
init_paths();
|
|
26161
26316
|
init_review_status();
|
|
26162
26317
|
init_persistent_logger();
|
|
@@ -26238,7 +26393,7 @@ async function respawnIdleReviewer(state, agentId) {
|
|
|
26238
26393
|
return false;
|
|
26239
26394
|
}
|
|
26240
26395
|
try {
|
|
26241
|
-
const { spawnReviewSubRoleForIssue } = await import("./review-agent-
|
|
26396
|
+
const { spawnReviewSubRoleForIssue } = await import("./review-agent-UpAM4DmT.js");
|
|
26242
26397
|
const contextManifestPath = join$1(dirname$1(outputPath), "context.json");
|
|
26243
26398
|
const result = await Effect.runPromise(spawnReviewSubRoleForIssue({
|
|
26244
26399
|
issueId: state.issueId,
|
|
@@ -26276,7 +26431,7 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
|
|
|
26276
26431
|
const status = getReviewStatusSync(state.issueId);
|
|
26277
26432
|
if (!status || status.reviewStatus !== "reviewing") continue;
|
|
26278
26433
|
const reviewDir = join$1(state.workspace, ".pan", "review", state.reviewRunId);
|
|
26279
|
-
const synthesisAlreadyWritten =
|
|
26434
|
+
const synthesisAlreadyWritten = findVerdictReport(reviewDir) !== null;
|
|
26280
26435
|
const startedMs = Date.parse(state.startedAt);
|
|
26281
26436
|
const readyLines = [];
|
|
26282
26437
|
const reports = [];
|
|
@@ -26324,7 +26479,7 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
|
|
|
26324
26479
|
writeFileSync(join$1(reviewDir, "synthesis.md"), synthesis.body);
|
|
26325
26480
|
let fallbackHead;
|
|
26326
26481
|
try {
|
|
26327
|
-
const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-
|
|
26482
|
+
const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-CedsVume.js");
|
|
26328
26483
|
fallbackHead = await snapshotWorkspaceHeadsPromise(state.issueId, state.workspace);
|
|
26329
26484
|
} catch {}
|
|
26330
26485
|
const anchoredVerdicts = Object.fromEntries(Object.entries(synthesis.reviewerVerdicts).map(([subRole, v]) => [subRole, {
|
|
@@ -26363,7 +26518,7 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
|
|
|
26363
26518
|
"Read the four reports, write synthesis.md, then signal review status exactly as roles/review.md instructs."
|
|
26364
26519
|
].join("\n");
|
|
26365
26520
|
try {
|
|
26366
|
-
const { messageAgent } = await import("./agents-
|
|
26521
|
+
const { messageAgent } = await import("./agents-Dnn4XgdB.js");
|
|
26367
26522
|
await messageAgent(state.id, message);
|
|
26368
26523
|
reviewReportsPresentNudges.set(nudgeKey, now);
|
|
26369
26524
|
const action = `Nudged ${state.id} to synthesize from ${REVIEW_SUB_ROLES.length} reviewer reports`;
|
|
@@ -26449,7 +26604,7 @@ async function monitorReviewConvoySignals() {
|
|
|
26449
26604
|
if (!signal) continue;
|
|
26450
26605
|
const message = signal === "ready" ? `REVIEWER_READY ${state.reviewSubRole} ${outputPath}` : signal === "timeout" ? `REVIEWER_TIMEOUT ${state.reviewSubRole} ${reason}` : `REVIEWER_FAILED ${state.reviewSubRole} ${reason}`;
|
|
26451
26606
|
try {
|
|
26452
|
-
const { messageAgent } = await import("./agents-
|
|
26607
|
+
const { messageAgent } = await import("./agents-Dnn4XgdB.js");
|
|
26453
26608
|
await messageAgent(state.reviewSynthesisAgentId, message);
|
|
26454
26609
|
state.reviewMonitorSignaled = signal;
|
|
26455
26610
|
saveAgentStateSync(state);
|
|
@@ -26457,7 +26612,7 @@ async function monitorReviewConvoySignals() {
|
|
|
26457
26612
|
actions.push(action);
|
|
26458
26613
|
logDeaconEventSync(`monitorReviewConvoySignals: ${action}`);
|
|
26459
26614
|
if (signal === "ready") try {
|
|
26460
|
-
const { notifyPipelineSync } = await import("./pipeline-notifier-
|
|
26615
|
+
const { notifyPipelineSync } = await import("./pipeline-notifier-BmwrVKsO.js");
|
|
26461
26616
|
notifyPipelineSync({
|
|
26462
26617
|
type: "reviewer_completed",
|
|
26463
26618
|
issueId: state.issueId,
|
|
@@ -26465,7 +26620,7 @@ async function monitorReviewConvoySignals() {
|
|
|
26465
26620
|
});
|
|
26466
26621
|
} catch {}
|
|
26467
26622
|
else if (signal === "timeout") try {
|
|
26468
|
-
const { notifyPipelineSync } = await import("./pipeline-notifier-
|
|
26623
|
+
const { notifyPipelineSync } = await import("./pipeline-notifier-BmwrVKsO.js");
|
|
26469
26624
|
notifyPipelineSync({
|
|
26470
26625
|
type: "reviewer_timed_out",
|
|
26471
26626
|
issueId: state.issueId,
|
|
@@ -26565,7 +26720,7 @@ const FORK_CACHE_CHECK_DELAY_MS = 180 * 1e3;
|
|
|
26565
26720
|
async function checkStalledReviewDiscovery() {
|
|
26566
26721
|
const actions = [];
|
|
26567
26722
|
try {
|
|
26568
|
-
const { listAgentStates } = await import("./agents-
|
|
26723
|
+
const { listAgentStates } = await import("./agents-Dnn4XgdB.js");
|
|
26569
26724
|
const states = listAgentStates();
|
|
26570
26725
|
const now = Date.now();
|
|
26571
26726
|
for (const state of states) {
|
|
@@ -26574,7 +26729,7 @@ async function checkStalledReviewDiscovery() {
|
|
|
26574
26729
|
const aged = Number.isFinite(startedMs) && now - startedMs > 48e4;
|
|
26575
26730
|
const dead = !await Effect.runPromise(sessionExists(state.id)).catch(() => false) || await Effect.runPromise(isPaneDead(state.id)).catch(() => true);
|
|
26576
26731
|
if (!aged && !dead) continue;
|
|
26577
|
-
const { handleReviewDiscoveryReady } = await import("./review-agent-
|
|
26732
|
+
const { handleReviewDiscoveryReady } = await import("./review-agent-UpAM4DmT.js");
|
|
26578
26733
|
const result = await handleReviewDiscoveryReady(state.issueId, { source: dead ? "deacon-backstop (parent dead)" : "deacon-backstop (discovery timeout)" });
|
|
26579
26734
|
actions.push(result.message);
|
|
26580
26735
|
logDeaconEventSync(`checkStalledReviewDiscovery: ${result.message}`);
|
|
@@ -26597,8 +26752,8 @@ async function checkStalledReviewDiscovery() {
|
|
|
26597
26752
|
async function checkStalledReviewParents() {
|
|
26598
26753
|
const actions = [];
|
|
26599
26754
|
try {
|
|
26600
|
-
const { listAgentStates, markAgentStoppedState } = await import("./agents-
|
|
26601
|
-
const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-
|
|
26755
|
+
const { listAgentStates, markAgentStoppedState } = await import("./agents-Dnn4XgdB.js");
|
|
26756
|
+
const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-UpAM4DmT.js");
|
|
26602
26757
|
const states = listAgentStates();
|
|
26603
26758
|
const now = Date.now();
|
|
26604
26759
|
for (const state of states) {
|
|
@@ -26647,8 +26802,8 @@ async function checkStalledReviewParents() {
|
|
|
26647
26802
|
async function checkReviewForkCacheMisses() {
|
|
26648
26803
|
const actions = [];
|
|
26649
26804
|
try {
|
|
26650
|
-
const { listAgentStates, saveAgentState } = await import("./agents-
|
|
26651
|
-
const { readEventsSync } = await import("./events-
|
|
26805
|
+
const { listAgentStates, saveAgentState } = await import("./agents-Dnn4XgdB.js");
|
|
26806
|
+
const { readEventsSync } = await import("./events-ChEFB7Jp.js");
|
|
26652
26807
|
const { emitActivityEntrySync } = await import("./activity-logger-CMthG6Vd.js");
|
|
26653
26808
|
const states = listAgentStates();
|
|
26654
26809
|
const now = Date.now();
|
|
@@ -27511,7 +27666,7 @@ async function nudgeStalledResumeWorkAgents() {
|
|
|
27511
27666
|
const message = buildStalledResumePrompt(state);
|
|
27512
27667
|
if (!message) continue;
|
|
27513
27668
|
try {
|
|
27514
|
-
const { messageAgent } = await import("./agents-
|
|
27669
|
+
const { messageAgent } = await import("./agents-Dnn4XgdB.js");
|
|
27515
27670
|
await messageAgent(agentId, message);
|
|
27516
27671
|
recordCooldown(agentId, ".last-stalled-resume-nudge");
|
|
27517
27672
|
const action = `Re-sent stalled resume prompt to ${agentId} (${state.issueId})`;
|
|
@@ -27625,7 +27780,7 @@ async function nudgeIdleWorkAgentsWithOpenBeads() {
|
|
|
27625
27780
|
"Continue the per-item workflow without asking — claim it (`pan task claim <item-id>`), implement, commit, push, then complete it through `pan task done <item-id>`. Inspection is conditional on metadata.requiresInspection (default false; check the plan item before deciding to call `pan inspect`). Do NOT end your turn with a multi-paragraph summary; just advance to the next bead."
|
|
27626
27781
|
].join("\n");
|
|
27627
27782
|
try {
|
|
27628
|
-
const { messageAgent } = await import("./agents-
|
|
27783
|
+
const { messageAgent } = await import("./agents-Dnn4XgdB.js");
|
|
27629
27784
|
await messageAgent(agentId, message);
|
|
27630
27785
|
writeFileSync(join$1(getAgentDir(agentId), ".last-bead-nudge"), String(Date.now()), "utf-8");
|
|
27631
27786
|
const action = `Nudged idle ${agentId} (${state.issueId}) — ${openTasks.length} ready task(s)`;
|
|
@@ -28843,8 +28998,8 @@ async function cleanupStaleAgentState() {
|
|
|
28843
28998
|
*/
|
|
28844
28999
|
async function cleanupAbandonedFeedback() {
|
|
28845
29000
|
const actions = [];
|
|
28846
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
28847
|
-
const { clearFeedbackFiles } = await import("./feedback-writer-
|
|
29001
|
+
const { getReviewStatusSync } = await import("./review-status-CacDM78F.js");
|
|
29002
|
+
const { clearFeedbackFiles } = await import("./feedback-writer-CY91ckuw.js");
|
|
28848
29003
|
for (const { issueId, workspacePath } of listFeatureWorkspaces()) {
|
|
28849
29004
|
const panFeedbackDir = join$1(workspacePath, ".pan", "feedback");
|
|
28850
29005
|
if (!existsSync(panFeedbackDir)) continue;
|
|
@@ -28915,7 +29070,7 @@ async function handleOrphanReviewerSession(sessionName, sessions, creationTimes,
|
|
|
28915
29070
|
if (!issueId) return null;
|
|
28916
29071
|
const agentSession = `agent-${issueId.toLowerCase()}`;
|
|
28917
29072
|
if (sessions.includes(agentSession)) return null;
|
|
28918
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
29073
|
+
const { getReviewStatusSync } = await import("./review-status-CacDM78F.js");
|
|
28919
29074
|
try {
|
|
28920
29075
|
if (getReviewStatusSync(issueId)?.reviewStatus === "reviewing") return null;
|
|
28921
29076
|
} catch {}
|
|
@@ -29037,7 +29192,7 @@ async function checkOrphanedCompletions() {
|
|
|
29037
29192
|
async function checkPendingTestDispatch() {
|
|
29038
29193
|
const actions = [];
|
|
29039
29194
|
try {
|
|
29040
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
29195
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-CacDM78F.js");
|
|
29041
29196
|
const statuses = loadReviewStatuses();
|
|
29042
29197
|
const now = Date.now();
|
|
29043
29198
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
@@ -29085,8 +29240,8 @@ async function checkPendingTestDispatch() {
|
|
|
29085
29240
|
logDeaconEventSync(`checkPendingTestDispatch: deferred test for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
|
|
29086
29241
|
continue;
|
|
29087
29242
|
}
|
|
29088
|
-
const { spawnRun } = await import("./agents-
|
|
29089
|
-
const { buildTestRolePrompt } = await import("./test-agent-queue-
|
|
29243
|
+
const { spawnRun } = await import("./agents-Dnn4XgdB.js");
|
|
29244
|
+
const { buildTestRolePrompt } = await import("./test-agent-queue-DmSIqays.js");
|
|
29090
29245
|
try {
|
|
29091
29246
|
const run = await spawnRun(issueId, "test", {
|
|
29092
29247
|
workspace,
|
|
@@ -29210,7 +29365,7 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
29210
29365
|
const cmd = `pan admin specialists done test ${issueId} --status ${decision.status}${noteArg}`;
|
|
29211
29366
|
const nudge = `Your test verdict (${decision.status}) is already written to .pan/test/result.json. Your ONLY remaining task is to execute this Bash command immediately — do not analyze, do not summarize, do not ask questions, just run it:\n\n${cmd}\n\nRun this command NOW. Do not write any other response before executing it.`;
|
|
29212
29367
|
try {
|
|
29213
|
-
const { messageAgent } = await import("./agents-
|
|
29368
|
+
const { messageAgent } = await import("./agents-Dnn4XgdB.js");
|
|
29214
29369
|
await messageAgent(testSession, nudge);
|
|
29215
29370
|
unsignaledTestNudges.set(testSession, now);
|
|
29216
29371
|
const msg = `Nudged ${testSession} to signal ${decision.status} (verdict artifact present)`;
|
|
@@ -29224,7 +29379,7 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
29224
29379
|
case "nudge-write": {
|
|
29225
29380
|
const nudge = `Your test run for ${issueId} looks finished but no verdict was recorded. Decide the verdict from the gates/UAT you ran, then do BOTH of these now: (1) write the workspace file .pan/test/result.json as {"status":"passed"|"failed","notes":"<evidence>"}, and (2) run: pan admin specialists done test ${issueId} --status passed|failed. Do this immediately — do not summarize or ask questions, just write the file and run the command.`;
|
|
29226
29381
|
try {
|
|
29227
|
-
const { messageAgent } = await import("./agents-
|
|
29382
|
+
const { messageAgent } = await import("./agents-Dnn4XgdB.js");
|
|
29228
29383
|
await messageAgent(testSession, nudge);
|
|
29229
29384
|
unsignaledTestNudges.set(testSession, now);
|
|
29230
29385
|
const msg = `Nudged ${testSession} to write+signal a test verdict (no artifact yet)`;
|
|
@@ -29247,7 +29402,7 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
29247
29402
|
async function checkVerificationReviewContradiction() {
|
|
29248
29403
|
const actions = [];
|
|
29249
29404
|
try {
|
|
29250
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
29405
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-CacDM78F.js");
|
|
29251
29406
|
const { resolveProjectFromIssueSync } = await import("./projects-_n3Zui6K.js");
|
|
29252
29407
|
const statuses = loadReviewStatuses();
|
|
29253
29408
|
for (const [issueId, status] of Object.entries(statuses)) if (status.verificationStatus === "passed" && status.reviewStatus === "reviewing" && status.stuckReason === "review_infrastructure_failure") {
|
|
@@ -29257,7 +29412,7 @@ async function checkVerificationReviewContradiction() {
|
|
|
29257
29412
|
if (project) {
|
|
29258
29413
|
const workspacePath = join$1(project.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
|
|
29259
29414
|
if (existsSync(workspacePath)) {
|
|
29260
|
-
const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-
|
|
29415
|
+
const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-CedsVume.js");
|
|
29261
29416
|
reviewedAtCommit = await snapshotWorkspaceHeadsPromise(issueId, workspacePath);
|
|
29262
29417
|
}
|
|
29263
29418
|
}
|
|
@@ -29353,7 +29508,7 @@ async function checkReadyForMergeStuck() {
|
|
|
29353
29508
|
const testStatusGreenCiReconcileCooldowns = /* @__PURE__ */ new Map();
|
|
29354
29509
|
const TEST_STATUS_GREEN_CI_RECONCILE_COOLDOWN_MS = 300 * 1e3;
|
|
29355
29510
|
async function reconcileTestStatusFromGreenCi() {
|
|
29356
|
-
const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-
|
|
29511
|
+
const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-DIE8BkHI.js");
|
|
29357
29512
|
return reconcileTestStatusFromGreenCiWithDeps({
|
|
29358
29513
|
isGitHubAppConfigured,
|
|
29359
29514
|
loadReviewStatuses,
|
|
@@ -29719,8 +29874,8 @@ async function checkWorkspaceContainerHealth(sharedState) {
|
|
|
29719
29874
|
async function checkMergedWorkSessions() {
|
|
29720
29875
|
const actions = [];
|
|
29721
29876
|
try {
|
|
29722
|
-
const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-
|
|
29723
|
-
const { setAgentPaused } = await import("./agents-
|
|
29877
|
+
const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-DvFqQUnq.js");
|
|
29878
|
+
const { setAgentPaused } = await import("./agents-Dnn4XgdB.js");
|
|
29724
29879
|
const toKill = selectMergedWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
|
|
29725
29880
|
for (const session of toKill) try {
|
|
29726
29881
|
await Effect.runPromise(setAgentPaused(session, "merged — awaiting close-out (verify on main)", true));
|
|
@@ -29760,7 +29915,7 @@ const AWAITING_TEST_IDLE_REAP_MS = 600 * 1e3;
|
|
|
29760
29915
|
async function checkAwaitingTestWorkSessions() {
|
|
29761
29916
|
const actions = [];
|
|
29762
29917
|
try {
|
|
29763
|
-
const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-
|
|
29918
|
+
const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-DvFqQUnq.js");
|
|
29764
29919
|
const candidates = selectAwaitingTestWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
|
|
29765
29920
|
const now = Date.now();
|
|
29766
29921
|
for (const session of candidates) {
|
|
@@ -29813,26 +29968,26 @@ async function runPatrol() {
|
|
|
29813
29968
|
hasLoggedGlobalPauseSkip = false;
|
|
29814
29969
|
addLog("info", `Patrol cycle ${state.patrolCycle} — checking per-project specialists`, state.patrolCycle);
|
|
29815
29970
|
console.log(`[deacon] Patrol cycle ${state.patrolCycle} - checking per-project specialists`);
|
|
29816
|
-
for (const a of await (await import("./stale-task-claims-
|
|
29971
|
+
for (const a of await (await import("./stale-task-claims-D1Ll8fI5.js")).patrolStaleTaskClaims()) {
|
|
29817
29972
|
actions.push(a);
|
|
29818
29973
|
addLog("action", a, state.patrolCycle);
|
|
29819
29974
|
}
|
|
29820
29975
|
const stuckRemediationActions = await checkStuckAgentRemediation();
|
|
29821
29976
|
actions.push(...stuckRemediationActions);
|
|
29822
29977
|
for (const a of stuckRemediationActions) addLog("action", a, state.patrolCycle);
|
|
29823
|
-
const { reconcileInFlightJournals } = await import("./advancing-selfheal-
|
|
29978
|
+
const { reconcileInFlightJournals } = await import("./advancing-selfheal-DieFp3qi.js");
|
|
29824
29979
|
const reconciledJournalActions = await reconcileInFlightJournals();
|
|
29825
29980
|
actions.push(...reconciledJournalActions);
|
|
29826
29981
|
for (const a of reconciledJournalActions) addLog("action", a, state.patrolCycle);
|
|
29827
29982
|
try {
|
|
29828
29983
|
const pendingFile = join$1(OVERDECK_HOME, "pending-post-merge.json");
|
|
29829
|
-
const { processPendingLifecycleForPatrol } = await import("./deacon-pending-lifecycle-
|
|
29984
|
+
const { processPendingLifecycleForPatrol } = await import("./deacon-pending-lifecycle-2ZflPxgo.js");
|
|
29830
29985
|
const action = await processPendingLifecycleForPatrol(pendingFile);
|
|
29831
29986
|
if (action) actions.push(action);
|
|
29832
29987
|
} catch (err) {
|
|
29833
29988
|
console.warn(`[deacon] Failed to process pending lifecycle: ${err.message}`);
|
|
29834
29989
|
}
|
|
29835
|
-
if (state.patrolCycle % 5 === 0) await (await import("./deploy-patrol-
|
|
29990
|
+
if (state.patrolCycle % 5 === 0) await (await import("./deploy-patrol-BNjeCL8u.js")).runScheduledDeployPatrol();
|
|
29836
29991
|
const livenessActions = await reconcileAgentLiveness();
|
|
29837
29992
|
actions.push(...livenessActions);
|
|
29838
29993
|
for (const a of livenessActions) addLog("action", a, state.patrolCycle);
|
|
@@ -29848,7 +30003,7 @@ async function runPatrol() {
|
|
|
29848
30003
|
const idleStackActions = await reconcileIdleWorkspaceStacks();
|
|
29849
30004
|
actions.push(...idleStackActions);
|
|
29850
30005
|
for (const a of idleStackActions) addLog("action", a, state.patrolCycle);
|
|
29851
|
-
for (const a of await (await import("./bridge-pool-patrol-
|
|
30006
|
+
for (const a of await (await import("./bridge-pool-patrol-DsPj6F7t.js")).patrolDockerBridgePool()) {
|
|
29852
30007
|
actions.push(a);
|
|
29853
30008
|
addLog("action", a, state.patrolCycle);
|
|
29854
30009
|
}
|
|
@@ -29888,7 +30043,7 @@ async function runPatrol() {
|
|
|
29888
30043
|
} catch (err) {
|
|
29889
30044
|
console.warn(`[deacon] Failed to check workspace existence: ${err.message}`);
|
|
29890
30045
|
}
|
|
29891
|
-
const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-
|
|
30046
|
+
const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-DieFp3qi.js");
|
|
29892
30047
|
const reapedWorkActions = await checkMergedWorkSessions();
|
|
29893
30048
|
actions.push(...reapedWorkActions);
|
|
29894
30049
|
for (const a of reapedWorkActions) addLog("action", a, state.patrolCycle);
|
|
@@ -29896,7 +30051,7 @@ async function runPatrol() {
|
|
|
29896
30051
|
actions.push(...reapedMergedAdvancingActions);
|
|
29897
30052
|
for (const a of reapedMergedAdvancingActions) addLog("action", a, state.patrolCycle);
|
|
29898
30053
|
try {
|
|
29899
|
-
const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-
|
|
30054
|
+
const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-BtmZ42aP.js");
|
|
29900
30055
|
const remoteCredentialActions = await refreshClaudeCredentialsForActiveRemoteAgents();
|
|
29901
30056
|
actions.push(...remoteCredentialActions);
|
|
29902
30057
|
for (const a of remoteCredentialActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
|
|
@@ -29904,7 +30059,7 @@ async function runPatrol() {
|
|
|
29904
30059
|
addLog("warn", `Remote credential refresh patrol failed: ${err.message}`, state.patrolCycle);
|
|
29905
30060
|
}
|
|
29906
30061
|
try {
|
|
29907
|
-
const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-
|
|
30062
|
+
const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-kwsEZvXu.js");
|
|
29908
30063
|
const heartbeatActions = await refreshHostHeartbeatForEphemeralVms();
|
|
29909
30064
|
actions.push(...heartbeatActions);
|
|
29910
30065
|
for (const a of heartbeatActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
|
|
@@ -29912,7 +30067,7 @@ async function runPatrol() {
|
|
|
29912
30067
|
addLog("warn", `Remote heartbeat refresh patrol failed: ${err.message}`, state.patrolCycle);
|
|
29913
30068
|
}
|
|
29914
30069
|
try {
|
|
29915
|
-
const { reapCompletedRemoteAgents } = await import("./remote-completion-
|
|
30070
|
+
const { reapCompletedRemoteAgents } = await import("./remote-completion-BtmZ42aP.js");
|
|
29916
30071
|
const remoteReap = await reapCompletedRemoteAgents();
|
|
29917
30072
|
for (const r of remoteReap) if (r.status === "handed-off" || r.status === "error") {
|
|
29918
30073
|
const msg = `Remote reap ${r.issueId}: ${r.status} (${r.details.join("; ")})`;
|
|
@@ -29961,6 +30116,9 @@ async function runPatrol() {
|
|
|
29961
30116
|
const unsignaledReviewActions = await checkCompletedButUnsignaledReviews();
|
|
29962
30117
|
actions.push(...unsignaledReviewActions);
|
|
29963
30118
|
for (const a of unsignaledReviewActions) addLog("action", a, state.patrolCycle);
|
|
30119
|
+
const unappliedReviewActions = await reconcileUnappliedReviewVerdicts();
|
|
30120
|
+
actions.push(...unappliedReviewActions);
|
|
30121
|
+
for (const a of unappliedReviewActions) addLog("action", a, state.patrolCycle);
|
|
29964
30122
|
const verifContradictionActions = await checkVerificationReviewContradiction();
|
|
29965
30123
|
actions.push(...verifContradictionActions);
|
|
29966
30124
|
for (const a of verifContradictionActions) addLog("action", a, state.patrolCycle);
|
|
@@ -30119,7 +30277,7 @@ async function runPatrol() {
|
|
|
30119
30277
|
mergeStatus: "merged",
|
|
30120
30278
|
readyForMerge: false
|
|
30121
30279
|
});
|
|
30122
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
30280
|
+
const { postMergeLifecycle } = await import("./merge-agent-C1-9zbP_.js");
|
|
30123
30281
|
postMergeLifecycle(issueId, resolved.projectPath).catch((err) => console.warn(`[deacon] postMergeLifecycle failed for ${issueId}: ${err}`));
|
|
30124
30282
|
actions.push(`Auto-completed stale merge for ${issueId}`);
|
|
30125
30283
|
} else {
|
|
@@ -30299,7 +30457,7 @@ function startDeacon() {
|
|
|
30299
30457
|
logDeaconEventSync(`startDeacon: health monitor starting (patrol every ${config.patrolIntervalMs / 1e3}s)`);
|
|
30300
30458
|
(async () => {
|
|
30301
30459
|
await reconcileAgentLiveness();
|
|
30302
|
-
const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-
|
|
30460
|
+
const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-DieFp3qi.js");
|
|
30303
30461
|
await runBootAdvancingSelfHeal();
|
|
30304
30462
|
runScheduledPatrol("startup");
|
|
30305
30463
|
})().catch((err) => {
|
|
@@ -30369,6 +30527,6 @@ function assessDeaconPatrolFreshness(params) {
|
|
|
30369
30527
|
};
|
|
30370
30528
|
}
|
|
30371
30529
|
//#endregion
|
|
30372
|
-
export { checkStuckReviewing as $, reconcileTestStatusFromGreenCi as A,
|
|
30530
|
+
export { checkStuckReviewing as $, reconcileTestStatusFromGreenCi as A, WORK_LAUNCHER_GRACE_MS as At, isRapidPostResumeDeath as B, getSystemHealthSnapshot as Bt, handleAgentHeartbeatDeadEvent as C, contextOverflowRecoveryState as Ct, loadConfig as D, paneShowsClaudeBootBlockingScreen as Dt, isDeaconRunning as E, deliverOrchestratedCompact as Et, setAgentStoppedNotifier as F, getCurrentDockerStats as Ft, isAutoResumableRole as G, nudgeStalledResumeWorkAgents as H, startSmeeProcessSync as Ht, setMergeReadyNotifier as I, getAcceptedSystemHealthSnapshot as It, startBootReconciliation as J, isBootReconciliationCandidate as K, startDeacon as L, getDeployStaleness as Lt, runPatrol as M, getResourceStacks as Mt, saveState as N, formatUptime as Nt, loadState as O, INSPECT_TIMEOUT_MS as Ot, setAgentStatusChangedNotifier as P, getContainerHistory as Pt, checkCompletedButUnsignaledReviews as Q, stopDeacon as R, getResourceConfig as Rt, getLastPatrolResult as S, checkApiErrorAgents as St, handleAgentStoppedForOrphanReviewerSessions as T, stuckOverflowNativeRecoveryState as Tt, redeliverUndeliveredKickoffs as U, classifyAgentHealth as Ut, nudgeIdleWorkAgentsWithOpenBeads as V, isSmeeConfiguredSync as Vt, extendBootReconciliationGrace as W, monitorReviewConvoySignals as X, cleanupOrphanedReviewSessions as Y, synthesizeReviewFromReports as Z, cleanupOrphanedPlanningSessions as _, reconcileStaleMergeBlockers as _t, checkCompletedButUnsignaledTests as a, handleWorkCompleted as at, getDeaconLogs as b, reconcileAutoMergeRows as bt, checkMergedWorkSessions as c, stalledReviewConvoyRecoveryState as ct, checkReadyForMergeStuck as d, checkFailedMergeRetry as dt, isSynthesisForActiveReviewRun as et, checkStuckWorkAgents as f, checkFirstCompletionAgents as ft, cleanupOrphanReviewerSessions as g, reconcileMergedButReviewing as gt, cleanupAbandonedFeedback as h, reconcileFalseMerged as ht, checkAwaitingTestWorkSessions as i, handleReviewCoordinatorDied as it, resetPatrolHeartbeatForStartup as j, classifyMemoryPressure as jt, reconcileAgentLiveness as k, checkInspectAgentTimeouts as kt, checkOrphanedCompletions as l, checkPostReviewCommits as lt, checkWorkspaceContainerHealth as m, reconcileClosedPrReadyForMerge as mt, assessDeaconPatrolFreshness as n, checkMissingReviewStatuses as nt, checkDeadEndAgents as o, recoverStalledReviewConvoys as ot, checkVerificationReviewContradiction as p, ciRetryMap as pt, listBootReconciliationCandidates as q, checkAndSuspendIdleAgents as r, checkOrphanedReviewStatuses as rt, checkMassDeath as s, reviewConvoyLiveness as st, applyBootReconciliationDecision as t, reconcileUnappliedReviewVerdicts as tt, checkPendingTestDispatch as u, autoCloseOut as ut, cleanupStaleAgentState as v, reconcileStaleMergeStatus as vt, handleAgentStoppedEvent as w, contextProactiveCompactState as wt, getDeaconStatus as x, reconcileStuckMergingStates as xt, containerRestartBackoffMs as y, reconcileStuckReadyForMerge as yt, isPreKickoffLaunchDeath as z, getSystemHealthEvidenceSnapshot as zt };
|
|
30373
30531
|
|
|
30374
|
-
//# sourceMappingURL=deacon-
|
|
30532
|
+
//# sourceMappingURL=deacon-B1LD5cJU.js.map
|