@overdeck/desktop 0.45.6 → 0.45.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/drizzle/overdeck/0000_overdeck_init.sql +483 -0
- package/package.json +16 -4
- package/server/{acceptance-criteria-DYffaKI9.js → acceptance-criteria-l0DSvFFS.js} +2 -2
- package/server/{activity-logger-DO27GsPa.js → activity-logger-DvYvFhwZ.js} +1 -1
- package/server/{activity-logger-Dm95Ua07.js → activity-logger-pcbf-e30.js} +3 -2
- package/server/{advancing-selfheal-n8tAeFwE.js → advancing-selfheal-CMlGznKv.js} +11 -66
- package/server/{agent-gc-CIFaa2vJ.js → agent-gc-BtAzj8QN.js} +3 -3
- package/server/{agent-state-service-BqVDA9b8.js → agent-state-service-5ge9xxhx.js} +5 -5
- package/server/{agent-state-service-CLifyinO.js → agent-state-service-C1iUF9Ft.js} +1 -1
- package/server/agent-state-xk_G8t90.js +3 -0
- package/server/{agents-KaEsWZ8D.js → agents-BIggLvi_.js} +1 -1
- package/server/{agents-D_x5BSZM.js → agents-DHvsjsuP.js} +129 -61
- package/server/{archive-planning-CFxmeFKh.js → archive-planning-B4Qi02bk.js} +1 -1
- package/server/{archive-planning-DVUXlRBs.js → archive-planning-zTvWWHG_.js} +4 -4
- package/server/{artifact-index-jobs-ChUgzZah.js → artifact-index-jobs-BrByqVkB.js} +2 -2
- package/server/{auto-commit-2KiBFh-K.js → auto-commit-DoIPFoEs.js} +1 -1
- package/server/{backlog-auto-trigger-DoTEMZMl.js → backlog-auto-trigger-COm_R96V.js} +3 -3
- package/server/{bd-mutex-CE6P_MlD.js → bd-mutex-BItGvLQ8.js} +2 -2
- package/server/{bd-process-lock-Ch3WNHS9.js → bd-process-lock-CJkoG7hW.js} +2 -2
- package/server/{beads-B43pgBIy.js → beads-AmCXEv_E.js} +1 -1
- package/server/{beads-BugPvtWp.js → beads-DlZm-vrG.js} +5 -5
- package/server/{beads-query-CtqWakL6.js → beads-query-BrVNWoSL.js} +2 -2
- package/server/{beads-restore-BqTMSQi-.js → beads-restore-CMbDSB5R.js} +1 -1
- package/server/{behavior-vk1sixby.js → behavior-By-2Wipv.js} +3 -3
- package/server/{briefing-freshness-B3YxHQ-L.js → briefing-freshness-CXhZdnB8.js} +4 -4
- package/server/{checkpoint-manager-CdrwLsQh.js → checkpoint-manager-CPw51H2n.js} +1 -1
- package/server/{checkpoint-manager-Dg6cWZz3.js → checkpoint-manager-CfNpHOp4.js} +11 -2
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-DDd-0doa.js → checkpoints-BbfH1EIy.js} +2 -2
- package/server/{checkpoints-dBCJr0dC.js → checkpoints-BjlBWOA8.js} +1 -1
- package/server/{claude-permissions-BpwIcIR7.js → claude-permissions-DrRAs_0F.js} +3 -3
- package/server/{claude-settings-overlay-DnraWcz6.js → claude-settings-overlay-BSeS7Ki3.js} +2 -2
- package/server/{claude-settings-overlay-xD_Vu420.js → claude-settings-overlay-CEWlIFL-.js} +1 -1
- package/server/cli-CJDWXE_Y.js +3 -0
- package/server/{cli-BmzYZZKi.js → cli-CvK9xuSS.js} +9 -9
- package/server/{cliproxy-DYWdJKZ1.js → cliproxy-BOcmOK6l.js} +1 -1
- package/server/{cliproxy-CE2GDY7x.js → cliproxy-J-_1iIXe.js} +2 -2
- package/server/{close-issue-CpJd4SOL.js → close-issue-BnpErnD1.js} +5 -5
- package/server/{closed-issue-reaper-QpcvCDeE.js → closed-issue-reaper-BLCQwTpF.js} +1 -1
- package/server/{closed-issue-reaper-DubXY9Zg.js → closed-issue-reaper-DRqK5k39.js} +10 -10
- package/server/{codex-j8aVgRou.js → codex-BUZjrnqH.js} +1 -1
- package/server/{codex-B3J1TXo7.js → codex-DcInrhok.js} +5 -5
- package/server/{compact-beads-CqhLqG-k.js → compact-beads-RFwdZFPA.js} +4 -4
- package/server/{compact-beads-BeilHCdj.js → compact-beads-omhUgj5b.js} +1 -1
- package/server/{config-DHU0j_pS.js → config-CzcWQ24p.js} +1 -1
- package/server/{config-DkEhJM0h.js → config-oWoKf5jO.js} +4 -4
- package/server/{config-yaml-DbdN9Fuq.js → config-yaml-DPAieL_G.js} +3 -2
- package/server/{conflict-gate-CgOtMo8i.js → conflict-gate-BhKvrPxn.js} +4 -4
- package/server/{conflict-gate-D00zFjeu.js → conflict-gate-JdFuhKuF.js} +1 -1
- package/server/{context-layers-BHEjT8Cn.js → context-layers-CTjQwcEQ.js} +3 -3
- package/server/{context-layers-0Lgq-SE_.js → context-layers-DxKsseHI.js} +2 -2
- package/server/{control-settings-CYv732Gs.js → control-settings-BMqUkXmR.js} +4 -4
- package/server/{conversation-compaction-Dbw03b-X.js → conversation-compaction-Ba5aZdrb.js} +1 -1
- package/server/{conversation-compaction-DKXvmX50.js → conversation-compaction-C5o_eKEm.js} +8 -8
- package/server/{conversation-service-BwKUeEvn.js → conversation-service-DvG8vZSV.js} +5 -5
- package/server/{conversation-service-kYYeRp9B.js → conversation-service-WKl-sw58.js} +1 -1
- package/server/{conversations-Dwr1jHrO.js → conversations-DL_BAWVk.js} +4 -4
- package/server/{conversations-D-uOnA8T.js → conversations-Dcx6LeIh.js} +1 -1
- package/server/{cost-DiSDkYe7.js → cost-C2CuA66z.js} +2 -2
- package/server/{cost-DNIyZH1X.js → cost-DaOG8sUB.js} +3 -3
- package/server/{cost-sync-CfXu-3TF.js → cost-sync-8lkDeL9g.js} +3 -3
- package/server/{dag-DZBowTd2.js → dag-jH8ZkewR.js} +3 -3
- package/server/{dangerous-git-ops-Pongxg2d.js → dangerous-git-ops-Dcw7PbYo.js} +1 -1
- package/server/dashboard-db-worker.js +6 -6
- package/server/{deacon-DT0BsVyE.js → deacon-Cv2RMfHs.js} +3 -3
- package/server/{deacon-f0yvsG5S.js → deacon-j3qSZ7--.js} +222 -110
- package/server/{deacon-nudge-log-Cmcch2Av.js → deacon-nudge-log-CJGA6aSQ.js} +1 -1
- package/server/deacon-swarm-D1iAUX-P.js +2 -0
- package/server/{deacon-swarm-BBGnhvD2.js → deacon-swarm-DadWNi5J.js} +88 -43
- package/server/deacon.js +8 -8
- package/server/{devcontainer-renderer-Cpz7XBj0.js → devcontainer-renderer-DUJYYRQB.js} +3 -3
- package/server/{dist-DypOkJv9.js → dist-BIC8spJ0.js} +1 -1
- package/server/dist-BUplB3Od.js +3 -0
- package/server/{docker-DARVx0OZ.js → docker-Q4bphryk.js} +2 -2
- package/server/{ensure-devcontainer-Dmdw4BxF.js → ensure-devcontainer-BCB6fHp9.js} +1 -1
- package/server/{ensure-devcontainer-BJssuBG6.js → ensure-devcontainer-XLL0vtgV.js} +4 -4
- package/server/{esm-shims-Crmvo9Ln.js → esm-shims-DiV9jHa_.js} +1 -1
- package/server/{event-store-BeEE8pW5.js → event-store-DIk9wvnS.js} +1 -1
- package/server/{event-store-DrfTJZ1_.js → event-store-DTJXZjCl.js} +4 -4
- package/server/events-BlzVUyTx.js +3 -0
- package/server/{events-BbClwoM-.js → events-DGWZzye2.js} +4 -4
- package/server/{factory-DVv9cpG5.js → factory-rG4T40su.js} +4 -4
- package/server/{feature-registry-population-C6eVdq4J.js → feature-registry-population-Dwyj9gEM.js} +4 -4
- package/server/{feature-registry-storage-ByBosRId.js → feature-registry-storage-CnGyNgAq.js} +2 -2
- package/server/{features-EZfSwuqq.js → features-CYY2_Eeh.js} +2 -2
- package/server/{feedback-target-DENaINE6.js → feedback-target-C4DaDSZ8.js} +1 -1
- package/server/{feedback-target-Dv4VnbQl.js → feedback-target-oE4-Esxl.js} +48 -17
- package/server/{feedback-writer-Dxg8qM8i.js → feedback-writer-DMaO0XXa.js} +4 -4
- package/server/{feedback-writer-BvHE1I-3.js → feedback-writer-thrdxYpK.js} +1 -1
- package/server/{flywheel-Akbd9VNM.js → flywheel-BqDdGvrQ.js} +1 -1
- package/server/{flywheel-B4KN9BmW.js → flywheel-ClMjGW_u.js} +11 -11
- package/server/{flywheel-ByZyAv3P.js → flywheel-DefHRzY4.js} +13 -13
- package/server/{flywheel-merge-order-DPFZbt-w.js → flywheel-merge-order-B6YDSElh.js} +1 -1
- package/server/{flywheel-merge-order-BYUPxqgx.js → flywheel-merge-order-CuDcqTRJ.js} +7 -7
- package/server/forge-BfP7OJwK.js +2 -0
- package/server/{forge-BnTExkbK.js → forge-BixzckB0.js} +2 -2
- package/server/{from-B2i_NgIH.js → from-D4xmArTA.js} +1 -1
- package/server/{fts-db-dnCj-PD3.js → fts-db-DPtxOAjp.js} +2 -2
- package/server/{fts-operations-CAAofsTQ.js → fts-operations-VrGjsT0w.js} +2 -2
- package/server/{git-utils-CB3gDSM-.js → git-utils-D_cax3fD.js} +2 -2
- package/server/{git-utils-Bk7sJZru.js → git-utils-RAmTwjFB.js} +1 -1
- package/server/{github-app-CIhMNI4C.js → github-app-B5PDHMyn.js} +1 -1
- package/server/{github-app-BIU8a93o.js → github-app-FMXgo3vK.js} +2 -2
- package/server/{github-client-DmZgsnYP.js → github-client-VRiB6N-4.js} +1 -1
- package/server/{github-client-zREpj5HA.js → github-client-yjbXaqpR.js} +2 -2
- package/server/{github-pr-lookup-CPri6JR1.js → github-pr-lookup-t8X8R0c0.js} +2 -2
- package/server/{harness-resolve-TzYAiXzZ.js → harness-resolve-DKeSVsJL.js} +3 -3
- package/server/{health-events-CDWk8Oz4.js → health-events-CD6q47ub.js} +1 -1
- package/server/{health-events-Dd0FuKrE.js → health-events-DaLX4-0a.js} +2 -2
- package/server/{hooks-C6HBXlVm.js → hooks-CmHFSj_Z.js} +2 -2
- package/server/{hooks-DRLzoFof.js → hooks-D-cbMUzQ.js} +1 -1
- package/server/{hume-Bb91r_2I.js → hume-DkVOs1Qi.js} +2 -2
- package/server/hume-x9voULey.js +3 -0
- package/server/{idle-stack-reaper-BPHnItVj.js → idle-stack-reaper-DBKQ9SKu.js} +3 -3
- package/server/{idle-stack-reaper-D5bwmuwX.js → idle-stack-reaper-DdnERp3G.js} +1 -1
- package/server/{infra-CCTzpcuJ.js → infra-CpKlYZA9.js} +3 -3
- package/server/{injection-D6L7D_w0.js → injection-CszhePD2.js} +7 -7
- package/server/{injection-CBrN8UxB.js → injection-DKzL2Axk.js} +1 -1
- package/server/{inspect-agent-CSYyFWqP.js → inspect-agent-BKKc0XnB.js} +9 -9
- package/server/inspect-agent-vm88mLYr.js +2 -0
- package/server/{internal-token-DWhBqgIk.js → internal-token-CQUx9YLc.js} +2 -2
- package/server/{internal-token-DCrCAG_M.js → internal-token-DrGdpLFo.js} +1 -1
- package/server/{io-DtAQ_2hp.js → io-Wy8YpFeP.js} +2 -2
- package/server/{issue-closed-0Zx72zXf.js → issue-closed-BO84g03t.js} +4 -4
- package/server/{issue-lifecycle-ZTt6kP_K.js → issue-lifecycle-DnhQgddB.js} +22 -22
- package/server/{issue-lifecycle-CJ7-D4XX.js → issue-lifecycle-nY4esZn8.js} +1 -1
- package/server/{issue-service-singleton-DNh4RRI7.js → issue-service-singleton-Bnqv1uaa.js} +1 -1
- package/server/{issue-service-singleton-DRE7S-Zg.js → issue-service-singleton-_AquSBTl.js} +8 -8
- package/server/{issues-CGc8Aaxm.js → issues-ChNcfHta.js} +2 -2
- package/server/{label-cleanup-CNsPlXy6.js → label-cleanup-bVXCGWBM.js} +3 -3
- package/server/{layers-CO_VLcSv.js → layers-vdvlpFki.js} +2 -2
- package/server/{lifecycle-B_NFvTj9.js → lifecycle-CGKm7doE.js} +7 -7
- package/server/{lifecycle-io-D0FftBLy.js → lifecycle-io-CdqPkCyk.js} +1 -1
- package/server/{lifecycle-io-WDGwa1vV.js → lifecycle-io-DSrv9xGh.js} +4 -4
- package/server/{linear-client-MvjflCXs.js → linear-client-BxKvL6U8.js} +1 -1
- package/server/{linear-client-CSgH24Ym.js → linear-client-E0HdXtWs.js} +2 -2
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-DltB-RGV.js → merge-D3wEbmUJ.js} +1 -1
- package/server/{merge-Ce9DHBXM.js → merge-UlAwCk80.js} +4 -4
- package/server/{merge-agent-Rv0bNQNU.js → merge-agent-BcgAYStl.js} +27 -27
- package/server/{merge-agent-DRXwKxmb.js → merge-agent-Dh8Y9PDO.js} +1 -1
- package/server/{merge-batch-LLp_cXUR.js → merge-batch-BwhGdlh4.js} +1 -1
- package/server/{merge-blockers-BqYUtLBd.js → merge-blockers-DwdQNsYD.js} +2 -2
- package/server/merge-ops-QdBiQ8XB.js +2 -0
- package/server/{merge-rebase-AiSEs4QB.js → merge-rebase-CH12_ufi.js} +2 -2
- package/server/{merge-set-CUY9msG9.js → merge-set-TRxJwR-w.js} +3 -3
- package/server/{merge-set-CSJoIpKB.js → merge-set-rXK3ehnB.js} +1 -1
- package/server/{merge-sync-CAjbJeTp.js → merge-sync-BKLKu9kz.js} +1 -1
- package/server/{merge-sync-CuyWzzZK.js → merge-sync-CaLRt2cB.js} +2 -2
- package/server/{merge-train-DndZCAiv.js → merge-train-DmxlYbEo.js} +3 -3
- package/server/{merge-train-deps-Bsy90Q7t.js → merge-train-deps-DBHsOWt9.js} +4 -4
- package/server/{merge-verification-Kvh4WViS.js → merge-verification-DA9rvqsE.js} +4 -4
- package/server/{multipart-parser-BWnfyoyz.js → multipart-parser-DtIEUW2B.js} +2 -2
- package/server/{no-resume-mode-CKy2bwZL.js → no-resume-mode-yrPEQ_pC.js} +1 -1
- package/server/{orphan-proposed-reconciler-Cg5_uVy1.js → orphan-proposed-reconciler-Db8tUhce.js} +10 -10
- package/server/{orphan-proposed-reconciler-CjUuBs6J.js → orphan-proposed-reconciler-mXV--tcB.js} +1 -1
- package/server/{pan-dir-Cn3NUnxU.js → pan-dir-BgBeeZDX.js} +3 -3
- package/server/{paths-Bo-kA9ta.js → paths-TE1GOZDr.js} +2 -2
- package/server/{pickup-DRn-XNXS.js → pickup-KLRUhThD.js} +1 -1
- package/server/{pipeline-notifier-BbGQtvKM.js → pipeline-notifier-aX_5EqQO.js} +2 -2
- package/server/{pipeline-notifier-DQsOtdjZ.js → pipeline-notifier-lwMa--Gz.js} +1 -1
- package/server/{projects-CKTA6Klk.js → projects-BNmVxnNt.js} +1 -1
- package/server/{prompts-CVncQg4P.js → prompts-CelsUdrx.js} +2 -2
- package/server/{providers-uPI9uU7Q.js → providers-4-xOzHQu.js} +7 -7
- package/server/{providers-CapuDkKX.js → providers-BOnRq5XK.js} +1 -1
- package/server/public/assets/{chunk-BO2N2NFS-CaAvtgHW.js → chunk-BO2N2NFS-jJsbVwoD.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-C4flU2X9.js → diagram-OG6HWLK6-Cp1aNi3v.js} +1 -1
- package/server/public/assets/{dist-DXAnG2e9.js → dist-B2-Oc7J1.js} +1 -1
- package/server/public/assets/{dist-DygIHsen.js → dist-Dbb8vdyE.js} +3 -3
- package/server/public/assets/{ganttDiagram-6RSMTGT7-BJY25etK.js → ganttDiagram-6RSMTGT7-rujV2mSn.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-DIEQLSG_.js → highlighted-body-OFNGDK62-Df3Exbbt.js} +1 -1
- package/server/public/assets/{index-BsKNi2y5.js → index-rQPa7qlV.js} +88 -88
- package/server/public/assets/{linear-CRa2o9KP.js → linear-Ctp3LAJ5.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-BnC2HrDq.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-Cb6OrK_c.js → pieDiagram-4H26LBE5-K-m6VCum.js} +1 -1
- package/server/public/assets/{prod-DWpuiL-y.js → prod-jqZ3zqVg.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-DhZzzcAO.js → quadrantDiagram-W4KKPZXB-DXcFax_1.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-CVe6lE5A.js → sankeyDiagram-5OEKKPKP-DnD_J_rB.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-zukUz5pI.js → xychartDiagram-2RQKCTM6-Dx25iKVp.js} +1 -1
- package/server/public/index.html +1 -1
- package/server/{pull-requests-C3csHJsc.js → pull-requests-CH4iBFLl.js} +3 -3
- package/server/{pull-requests-MeAgb3Ax.js → pull-requests-DL_4klIb.js} +1 -1
- package/server/{rally-nalS21zz.js → rally-D0mKv2t8.js} +3 -3
- package/server/rally-DffLLIdl.js +3 -0
- package/server/{rally-api-DzQryQi8.js → rally-api-CcCdecF-.js} +1 -1
- package/server/{rally-api-DdY4ebu3.js → rally-api-DgAt6FbN.js} +2 -2
- package/server/{rally-client-9duSds1_.js → rally-client-DYjtgTOu.js} +4 -4
- package/server/{rally-client-B16-bZk9.js → rally-client-X0bEEN2B.js} +1 -1
- package/server/reap-terminal-sessions-BwJb2DLJ.js +3 -0
- package/server/{reap-terminal-sessions-C6rD1pDT.js → reap-terminal-sessions-CAmURC2h.js} +12 -62
- package/server/{rebuild-stack-D9qBmVcM.js → rebuild-stack-BLG3rlWa.js} +6 -6
- package/server/{rebuild-stack-DrWMHxoY.js → rebuild-stack-ByFCMqTK.js} +1 -1
- package/server/{reconstruct-cache--H2QBooC.js → reconstruct-cache-_tDZ2D72.js} +6 -6
- package/server/{record-fn7uPjsl.js → record-DjPikotp.js} +1 -1
- package/server/{remote-BEkHf2HO.js → remote-B1Trmr0N.js} +3 -3
- package/server/{remote-Dl6Hn0zz.js → remote-TN0cV8k-.js} +3 -3
- package/server/{remote-agents-DNdP4sew.js → remote-agents-CmbIKw7E.js} +5 -5
- package/server/{remote-agents-OB4zwVHz.js → remote-agents-DNuaAgU6.js} +1 -1
- package/server/{remote-completion-BINc1Y8c.js → remote-completion-Bklh6loJ.js} +12 -12
- package/server/resume-DnIsmIgC.js +3 -0
- package/server/review-agent-DgySDb-G.js +3 -0
- package/server/{review-agent-C-A6IgXc.js → review-agent-phzqNqIs.js} +599 -197
- package/server/{review-artifacts-DTTdAYsU.js → review-artifacts-BGc69epg.js} +7 -7
- package/server/{review-context-De14xPtc.js → review-context-CCq56O_Y.js} +7 -7
- package/server/{review-monitor-BNV3kjLq.js → review-monitor-BKG2ubt5.js} +2 -2
- package/server/{review-status-DWAsTqfJ.js → review-status-BQjqQXZG.js} +160 -52
- package/server/{review-status-mo3tyc8L.js → review-status-bBkqUj5i.js} +1 -1
- package/server/{review-status-enrichment-C6sr9wOI.js → review-status-enrichment-CGlcApSn.js} +3 -3
- package/server/{review-status-sync-D-p7TQit.js → review-status-sync-BWHnrq-k.js} +3 -3
- package/server/{review-status-sync-MvYGQLDD.js → review-status-sync-BxHBVH8s.js} +1 -1
- package/server/{review-verdict-feedback-BbIfN5Vg.js → review-verdict-feedback-cZh9Wi9G.js} +1 -1
- package/server/{review-verdict-feedback-Cfc-THvz.js → review-verdict-feedback-wqnikhMK.js} +16 -36
- package/server/{rollup-DgWlrSBc.js → rollup-BJE-Vc7H.js} +8 -8
- package/server/{rollup-CxR6GMTe.js → rollup-DBNy1yFB.js} +1 -1
- package/server/{scanner-6OmIn5XE.js → scanner-CUGpdp4i.js} +7 -7
- package/server/{sequence-io-CxiPMMKM.js → sequence-io-B2GmilSI.js} +4 -4
- package/server/{sequencer-agent--xPlSfR2.js → sequencer-agent-D8pW2aU_.js} +5 -5
- package/server/server.js +166 -162
- package/server/{service-CXje28KS.js → service-CILd-uOt.js} +46 -45
- package/server/session-fork-DDSDVoIK.js +99 -0
- package/server/{settings-ChvoXExM.js → settings-CBrei_kx.js} +2 -2
- package/server/{settings-DZq_bi-B.js → settings-D2wt4nku.js} +3 -3
- package/server/settings-vLoKyghx.js +2 -0
- package/server/{shadow-engineering-BHeyD5bL.js → shadow-engineering-Ba1D0QUN.js} +2 -2
- package/server/{shadow-state-p3YTxrJ5.js → shadow-state-BOaq8BrD.js} +1 -1
- package/server/{shadow-state-3L0eHQNE.js → shadow-state-DTC7AMHc.js} +2 -2
- package/server/{ship-log-B2EEH__n.js → ship-log-CMWH3H5-.js} +1 -1
- package/server/{smart-compaction-DRXK5_io.js → smart-compaction-Bgp_gwcA.js} +1 -1
- package/server/{smart-compaction-DMB4hv07.js → smart-compaction-CrP90OFE.js} +7 -7
- package/server/{spawn-planning-session-BZfVvIi3.js → spawn-planning-session-BmJWHSCu.js} +15 -15
- package/server/{spawn-planning-session-BBUzeHJQ.js → spawn-planning-session-D15KbPOy.js} +1 -1
- package/server/{specialist-completion-BAZHHbmp.js → specialist-completion-BiEXUHfD.js} +1 -1
- package/server/{specialist-context-DgdhI7rm.js → specialist-context-CwKkcXL9.js} +5 -5
- package/server/{specialist-handoff-logger-CH1nC8fq.js → specialist-handoff-logger-B_2VsWli.js} +2 -2
- package/server/{specialist-logs-DynFhFXg.js → specialist-logs-CvDxquV_.js} +3 -3
- package/server/{specialists-LJ9MZMCz.js → specialists-BCjcG4uE.js} +1 -1
- package/server/{specialists-BUKBHtmQ.js → specialists-BYi0k8CZ.js} +18 -18
- package/server/{specialists-e0Jmecc1.js → specialists-D07ybnam.js} +78 -85
- package/server/{specialists-CF02f9p2.js → specialists-F2uMO4QS.js} +1 -1
- package/server/specs-DeS98l_p.js +3 -0
- package/server/{src-CNLON0co.js → src-BswtmojL.js} +6 -6
- package/server/{src-DhJeCV1p.js → src-Dp0WHgDZ.js} +3 -3
- package/server/{src-AXK4mjue.js → src-fgbU-jJ-.js} +6 -3
- package/server/{stack-health-8jZH0Lgk.js → stack-health-BJVh1TCg.js} +3 -3
- package/server/{stack-health-CXYHwv5D.js → stack-health-Deel1mSW.js} +1 -1
- package/server/{state-home-XkLSsJCD.js → state-home-Bgj7i-C7.js} +8 -7
- package/server/{summary-fork-shfA2XOf.js → summary-fork-DedqguZb.js} +2 -2
- package/server/{summary-fork-BWa0ECGL.js → summary-fork-EjvOkEPl.js} +12 -91
- package/server/{supervisor-owMkHcx8.js → supervisor-0oXvLwyC.js} +3 -3
- package/server/supervisor-D1-XwmZ7.js +2 -0
- package/server/{swarm-readiness-BACUsKOx.js → swarm-readiness-OBgamRql.js} +3 -3
- package/server/{teardown-workspace-CYt_PBaq.js → teardown-workspace-5LCVbjfq.js} +14 -14
- package/server/{test-agent-queue-C1s6mB8C.js → test-agent-queue-qfsq6uaC.js} +6 -6
- package/server/{test-verdict-CmxX3KEf.js → test-verdict-BkubHtti.js} +1 -1
- package/server/{test-verdict-njEv9ZY2.js → test-verdict-D3Il7cBK.js} +1 -1
- package/server/{tldr-daemon-CEUflKr2.js → tldr-daemon-CJW_P4On.js} +2 -2
- package/server/{tldr-daemon-HIo0dwDB.js → tldr-daemon-CJqGsDFh.js} +1 -1
- package/server/tmux-CeDD14p1.js +3 -0
- package/server/{tmux-CBYZ5lKF.js → tmux-ePNhMIMU.js} +2 -2
- package/server/{token-CiS3w6Ma.js → token-_qujO3JZ.js} +1 -1
- package/server/{tracker-config-CVCoeaaL.js → tracker-config-C3hiPVAM.js} +2 -2
- package/server/{tracker-config-Bx50plWp.js → tracker-config-Drt_tx4D.js} +1 -1
- package/server/{tracker-utils-C2Lg4RoB.js → tracker-utils-D6B8scEw.js} +1 -1
- package/server/{tracker-utils-mI4d-vh8.js → tracker-utils-bpWs7Xyx.js} +2 -2
- package/server/{traefik-connect-D21-YEyX.js → traefik-connect-5EP1WS_Z.js} +1 -1
- package/server/{tunnel-BK4PVyb0.js → tunnel-3Ve8BS4H.js} +3 -3
- package/server/{tunnel-CcHkuRIS.js → tunnel-AporWhoi.js} +1 -1
- package/server/{types-DoPMvws2.js → types-B5u3NxMl.js} +1 -1
- package/server/{uat-train-BLFPxqLx.js → uat-train-C3hWXtip.js} +1 -1
- package/server/{uat-train-CQ_E-2ei.js → uat-train-CtNGgXxj.js} +27 -27
- package/server/{validation-Dab3bnSN.js → validation-BmUB-26g.js} +4 -4
- package/server/{validation-1QnjDMc0.js → validation-CbqP_dze.js} +1 -1
- package/server/{verification-runner-BO8TgZWA.js → verification-runner-BPAhPWR7.js} +11 -11
- package/server/{verification-runner-UhAAqOio.js → verification-runner-DuZRHjPU.js} +1 -1
- package/server/{vtt-parser-D-q5-8il.js → vtt-parser-CKc-smWM.js} +1 -1
- package/server/{work-agent-prompt-D_7T1xw5.js → work-agent-prompt-DCdHsm-V.js} +11 -11
- package/server/workflows-Cz8OtiB4.js +2 -0
- package/server/{workflows-CB5SWd0B.js → workflows-H-COJ84X.js} +14 -14
- package/server/{workspace-C4Avf_Tp.js → workspace-4ZufqeMe.js} +3 -3
- package/server/{workspace--XWYPbn1.js → workspace-DYv9kBg6.js} +1 -1
- package/server/{workspace-config-BwJB-bLH.js → workspace-config-DA8U97k9.js} +1 -1
- package/server/{workspace-manager-_6zbrhNF.js → workspace-manager-B3PqQQSM.js} +1 -1
- package/server/{workspace-manager-BE3OznLY.js → workspace-manager-CEWK-OXd.js} +12 -12
- package/server/{workspace-metadata-BCgODi1j.js → workspace-metadata-1eu1RvAT.js} +2 -2
- package/server/{workspace-metadata-wKPgY8PN.js → workspace-metadata-C0I-nIDL.js} +1 -1
- package/server/{workspaces-DpMiZ9BP.js → workspaces-CRU9_vRn.js} +154 -106
- package/server/agent-state-DTZCqWx5.js +0 -3
- package/server/cli-wyiCmp7b.js +0 -3
- package/server/deacon-swarm-jDiQ0kKk.js +0 -2
- package/server/dist-CnkaBMG-.js +0 -3
- package/server/forge-D2QLGWK9.js +0 -2
- package/server/hume-sCsuupWb.js +0 -3
- package/server/inspect-agent-DnspoIls.js +0 -2
- package/server/merge-ops-B6xc_Irj.js +0 -2
- package/server/public/assets/mermaid-GHXKKRXX-uIkd-n0c.js +0 -1
- package/server/rally-BJiyvz3w.js +0 -3
- package/server/reap-terminal-sessions-mW7SPDtP.js +0 -2
- package/server/resume-Pur3Z2e8.js +0 -3
- package/server/review-agent-BRSSFv7e.js +0 -3
- package/server/settings-D0XXIUQ0.js +0 -2
- package/server/specs-COn3zZ2Q.js +0 -3
- package/server/supervisor-DwGIhpXk.js +0 -2
- package/server/tmux-DNmHGMEv.js +0 -3
- package/server/workflows-Plo_VxeO.js +0 -2
|
@@ -1,40 +1,40 @@
|
|
|
1
1
|
import { i as __require, t as __commonJSMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { $n as extractPrefixSync, Br as getOverdeckHome, Dn as getProjectSync, Gn as resolveProjectFromIssueSync, Gr as sessionFilePath, Ln as listProjectsSync, Lr as encodeClaudeProjectDir, Mt as readIssueRecordForWorkspaceSync, Nn as init_projects, Nt as readIssueRecordSync, Or as OVERDECK_HOME, Ot as init_record, St as ensureIssueRecordSync, Vr as init_paths, an as queueBeadsAutoCommit, cn as getMainDivergence, cr as FsError, dn as isStatePlanePath, er as init_issue_id, f as loadConfigSync, hr as TmuxError, ln as init_state_plane, rn as init_auto_commit, s as init_load, sn as STATE_PLANE_PATHS, vr as init_errors, wn as getIssuePrefix, yr as AGENTS_DIR, zt as writeIssueRecordSync } from "./config-yaml-
|
|
3
|
-
import { a as init_activity_logger, n as emitActivityEntrySync, r as emitActivityTtsSync } from "./activity-logger-
|
|
4
|
-
import { C as isPaneDead, D as listPaneValuesSync, E as listPaneValues, F as sendKeysAsync, L as sessionExists, O as listSessionNames, P as sendKeys, R as sessionExistsSync, T as killSessionSync, i as capturePane, k as listSessions, w as killSession, x as init_tmux } from "./tmux-
|
|
5
|
-
import { a as init_event_store, i as initEventStore } from "./event-store-
|
|
6
|
-
import { n as CLAUDE_CODE_BEHAVIOR } from "./src-
|
|
7
|
-
import { C as init_record_lock, S as needsReviewDispatch, c as init_review_status, h as reviewGatesPassedSync, s as getReviewStatusSync, u as loadReviewStatuses, w as withIssueRecordLock, x as init_review_dispatch_decision, y as setReviewStatusSync } from "./review-status-
|
|
8
|
-
import { d as init_agents, g as isTerminalIssueStage, h as getIssueStageSync, p as listAllAgentsSync } from "./briefing-freshness-
|
|
9
|
-
import { An as getAgentDir, B as createOhmypiRuntimeSync, Bn as markAgentRunningState, D as init_context_overflow, Dn as clearAgentTroubledSync, Dt as captureTranscriptUserRecordSnapshot, E as resumeAgent, Fn as init_agent_state, G as init_termination, Hn as markAgentTroubled, Jn as saveAgentStateSync, K as stopAgent, Kn as resetAgentFailureCount, Mn as getAgentState, On as clearYieldForResumeSync, Ot as init_transcript_landing, Pn as getAgentStateSync, Q as listRunningAgentsSync, U as spawnAgent, Un as recordAgentFailure, V as init_ohmypi, X as listAgentStates, Xn as setAgentPausedSync, Y as init_queries, Z as listRunningAgents, Zn as setAgentYieldedSync, _t as init_config, at as init_concurrency, cn as determineModel, ct as resetPatrolDispatchBudget, dt as workResumeSlotsAvailable, en as init_pi_fifo, er as init_persistent_logger, et as countRunningAgents, gn as buildDefaultResumeContinueMessage, gr as saveAgentRuntimeState, hr as init_runtime_state, ht as DEFAULT_CLOISTER_CONFIG, it as getConcurrencyLimits, j as messageAgent, k as isContextOverflowTail, lt as tryReserveAdvancingSlot, mr as getAgentRuntimeStateSync, mt as setCachedMemoryVerdict, nr as logDeaconEventSync, nt as describeRunningAgents, ot as releaseAdvancingSlot, pr as getAgentRuntimeState, pt as init_memory_verdict_cache, qn as saveAgentState, t as init_agents$1, tr as logAgentLifecycleSync, vt as loadCloisterConfig, wt as deliverInitialPromptWithRetry, yt as loadCloisterConfigSync } from "./agents-
|
|
10
|
-
import { t as init_behavior } from "./behavior-
|
|
11
|
-
import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-
|
|
12
|
-
import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-
|
|
2
|
+
import { $n as extractPrefixSync, Br as getOverdeckHome, Dn as getProjectSync, Gn as resolveProjectFromIssueSync, Gr as sessionFilePath, Ln as listProjectsSync, Lr as encodeClaudeProjectDir, Mt as readIssueRecordForWorkspaceSync, Nn as init_projects, Nt as readIssueRecordSync, Or as OVERDECK_HOME, Ot as init_record, St as ensureIssueRecordSync, Vr as init_paths, an as queueBeadsAutoCommit, cn as getMainDivergence, cr as FsError, dn as isStatePlanePath, er as init_issue_id, f as loadConfigSync, hr as TmuxError, ln as init_state_plane, rn as init_auto_commit, s as init_load, sn as STATE_PLANE_PATHS, vr as init_errors, wn as getIssuePrefix, yr as AGENTS_DIR, zt as writeIssueRecordSync } from "./config-yaml-DPAieL_G.js";
|
|
3
|
+
import { a as init_activity_logger, n as emitActivityEntrySync, r as emitActivityTtsSync } from "./activity-logger-pcbf-e30.js";
|
|
4
|
+
import { C as isPaneDead, D as listPaneValuesSync, E as listPaneValues, F as sendKeysAsync, L as sessionExists, O as listSessionNames, P as sendKeys, R as sessionExistsSync, T as killSessionSync, i as capturePane, k as listSessions, w as killSession, x as init_tmux } from "./tmux-ePNhMIMU.js";
|
|
5
|
+
import { a as init_event_store, i as initEventStore } from "./event-store-DTJXZjCl.js";
|
|
6
|
+
import { n as CLAUDE_CODE_BEHAVIOR } from "./src-fgbU-jJ-.js";
|
|
7
|
+
import { C as init_record_lock, S as needsReviewDispatch, c as init_review_status, h as reviewGatesPassedSync, s as getReviewStatusSync, u as loadReviewStatuses, w as withIssueRecordLock, x as init_review_dispatch_decision, y as setReviewStatusSync } from "./review-status-BQjqQXZG.js";
|
|
8
|
+
import { d as init_agents, g as isTerminalIssueStage, h as getIssueStageSync, p as listAllAgentsSync } from "./briefing-freshness-CXhZdnB8.js";
|
|
9
|
+
import { An as getAgentDir, B as createOhmypiRuntimeSync, Bn as markAgentRunningState, D as init_context_overflow, Dn as clearAgentTroubledSync, Dt as captureTranscriptUserRecordSnapshot, E as resumeAgent, Fn as init_agent_state, G as init_termination, Hn as markAgentTroubled, Jn as saveAgentStateSync, K as stopAgent, Kn as resetAgentFailureCount, Mn as getAgentState, On as clearYieldForResumeSync, Ot as init_transcript_landing, Pn as getAgentStateSync, Q as listRunningAgentsSync, U as spawnAgent, Un as recordAgentFailure, V as init_ohmypi, X as listAgentStates, Xn as setAgentPausedSync, Y as init_queries, Z as listRunningAgents, Zn as setAgentYieldedSync, _t as init_config, at as init_concurrency, cn as determineModel, ct as resetPatrolDispatchBudget, dt as workResumeSlotsAvailable, en as init_pi_fifo, er as init_persistent_logger, et as countRunningAgents, gn as buildDefaultResumeContinueMessage, gr as saveAgentRuntimeState, hr as init_runtime_state, ht as DEFAULT_CLOISTER_CONFIG, it as getConcurrencyLimits, j as messageAgent, k as isContextOverflowTail, lt as tryReserveAdvancingSlot, mr as getAgentRuntimeStateSync, mt as setCachedMemoryVerdict, nr as logDeaconEventSync, nt as describeRunningAgents, ot as releaseAdvancingSlot, pr as getAgentRuntimeState, pt as init_memory_verdict_cache, qn as saveAgentState, t as init_agents$1, tr as logAgentLifecycleSync, vt as loadCloisterConfig, wt as deliverInitialPromptWithRetry, yt as loadCloisterConfigSync } from "./agents-DHvsjsuP.js";
|
|
10
|
+
import { t as init_behavior } from "./behavior-By-2Wipv.js";
|
|
11
|
+
import { a as init_tracker_config, t as getGitHubConfig } from "./tracker-config-C3hiPVAM.js";
|
|
12
|
+
import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-bpWs7Xyx.js";
|
|
13
13
|
import { n as mapGitHubStateToCanonical, t as init_state_mapping } from "./state-mapping-BvAgFK8n.js";
|
|
14
|
-
import { c as init_review_status_sync, l as markWorkspaceStuck } from "./review-status-sync-
|
|
15
|
-
import { f as init_config$1, m as loadConfigSync$1, p as loadConfig$1 } from "./config-
|
|
16
|
-
import { a as init_launcher_generator, n as init_state_home, t as findRecreatedLegacyStatePaths } from "./state-home-
|
|
17
|
-
import { i as createCodexRuntimeSync, l as init_codex } from "./codex-
|
|
18
|
-
import { T as stampBootReconciliation, f as isFlywheelGloballyPaused, h as setBootReconciliationDecision, i as getFlywheelActiveRunId, l as isDeaconGloballyPaused, r as getBootReconciliationState, s as init_control_settings } from "./control-settings-
|
|
19
|
-
import { c as init_docker_stats, s as DockerStatsCollector } from "./stack-health-
|
|
20
|
-
import { a as queryBeadsForIssue, o as queryReadyBeadsByIssueLabels, r as init_beads_query, s as resolveBeadsQueryRoot } from "./beads-query-
|
|
21
|
-
import { n as __filename, r as init_esm_shims } from "./esm-shims-
|
|
22
|
-
import { O as init_specialists, R as parseReviewerSessionName, T as getTmuxSessionName, at as init_jsonl_parser, d as getAllProjectSpecialistStatuses, it as getSessionFilesSync, rt as getProjectDirsSync, st as parseClaudeSessionSync } from "./specialists-
|
|
23
|
-
import { t as recordDeaconNudge } from "./deacon-nudge-log-
|
|
24
|
-
import { n as init_review_monitor, t as REVIEW_SUB_ROLES } from "./review-monitor-
|
|
25
|
-
import { a as inferBranchFromWorkspace, i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-
|
|
26
|
-
import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-
|
|
27
|
-
import { n as shouldSkipDispatchAsMerged, t as init_merge_verification } from "./merge-verification-
|
|
28
|
-
import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-
|
|
29
|
-
import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-
|
|
30
|
-
import {
|
|
31
|
-
import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-
|
|
32
|
-
import { n as reconcileClosedIssueAgents } from "./closed-issue-reaper-
|
|
33
|
-
import { a as RELEASED_LABEL, i as READY_LABEL, n as OBJECTION_LABEL, o as VETOED_LABEL, r as PARKED_LABEL, t as BLOCKS_MAIN_LABEL } from "./pickup-
|
|
34
|
-
import { n as pruneTerminalStoppedAgents } from "./agent-gc-
|
|
35
|
-
import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-
|
|
36
|
-
import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-
|
|
37
|
-
import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-
|
|
14
|
+
import { c as init_review_status_sync, l as markWorkspaceStuck } from "./review-status-sync-BWHnrq-k.js";
|
|
15
|
+
import { f as init_config$1, m as loadConfigSync$1, p as loadConfig$1 } from "./config-oWoKf5jO.js";
|
|
16
|
+
import { a as init_launcher_generator, n as init_state_home, t as findRecreatedLegacyStatePaths } from "./state-home-Bgj7i-C7.js";
|
|
17
|
+
import { i as createCodexRuntimeSync, l as init_codex } from "./codex-DcInrhok.js";
|
|
18
|
+
import { T as stampBootReconciliation, f as isFlywheelGloballyPaused, h as setBootReconciliationDecision, i as getFlywheelActiveRunId, l as isDeaconGloballyPaused, r as getBootReconciliationState, s as init_control_settings } from "./control-settings-BMqUkXmR.js";
|
|
19
|
+
import { c as init_docker_stats, s as DockerStatsCollector } from "./stack-health-BJVh1TCg.js";
|
|
20
|
+
import { a as queryBeadsForIssue, o as queryReadyBeadsByIssueLabels, r as init_beads_query, s as resolveBeadsQueryRoot } from "./beads-query-BrVNWoSL.js";
|
|
21
|
+
import { n as __filename, r as init_esm_shims } from "./esm-shims-DiV9jHa_.js";
|
|
22
|
+
import { O as init_specialists, R as parseReviewerSessionName, T as getTmuxSessionName, at as init_jsonl_parser, d as getAllProjectSpecialistStatuses, it as getSessionFilesSync, rt as getProjectDirsSync, st as parseClaudeSessionSync } from "./specialists-BYi0k8CZ.js";
|
|
23
|
+
import { t as recordDeaconNudge } from "./deacon-nudge-log-CJGA6aSQ.js";
|
|
24
|
+
import { n as init_review_monitor, t as REVIEW_SUB_ROLES } from "./review-monitor-BKG2ubt5.js";
|
|
25
|
+
import { a as inferBranchFromWorkspace, i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-zTvWWHG_.js";
|
|
26
|
+
import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-BO84g03t.js";
|
|
27
|
+
import { n as shouldSkipDispatchAsMerged, t as init_merge_verification } from "./merge-verification-DA9rvqsE.js";
|
|
28
|
+
import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-wqnikhMK.js";
|
|
29
|
+
import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-5EP1WS_Z.js";
|
|
30
|
+
import { _ as recordRecoveryFailure, b as listFeatureWorkspaces, g as decideAgentAutonomousRedrive, r as coordinateSwarmSlots } from "./deacon-swarm-DadWNi5J.js";
|
|
31
|
+
import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-yrPEQ_pC.js";
|
|
32
|
+
import { n as reconcileClosedIssueAgents } from "./closed-issue-reaper-DRqK5k39.js";
|
|
33
|
+
import { a as RELEASED_LABEL, i as READY_LABEL, n as OBJECTION_LABEL, o as VETOED_LABEL, r as PARKED_LABEL, t as BLOCKS_MAIN_LABEL } from "./pickup-KLRUhThD.js";
|
|
34
|
+
import { n as pruneTerminalStoppedAgents } from "./agent-gc-BtAzj8QN.js";
|
|
35
|
+
import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-Db8tUhce.js";
|
|
36
|
+
import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-DBKQ9SKu.js";
|
|
37
|
+
import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-D3Il7cBK.js";
|
|
38
38
|
import { createRequire } from "node:module";
|
|
39
39
|
import { Effect } from "effect";
|
|
40
40
|
import { appendFileSync, existsSync, mkdirSync, readFileSync, readdirSync, rmSync, statSync, unlinkSync, writeFileSync } from "fs";
|
|
@@ -23526,7 +23526,7 @@ async function checkInspectAgentTimeouts(now = /* @__PURE__ */ new Date()) {
|
|
|
23526
23526
|
console.warn(`[deacon] Failed to kill inspect session ${sessionName}: ${msg}`);
|
|
23527
23527
|
});
|
|
23528
23528
|
try {
|
|
23529
|
-
const { messageAgent } = await import("./agents-
|
|
23529
|
+
const { messageAgent } = await import("./agents-BIggLvi_.js");
|
|
23530
23530
|
await messageAgent(`agent-${issueId.toLowerCase()}`, verdict, "deacon:inspect-watchdog");
|
|
23531
23531
|
} catch (err) {
|
|
23532
23532
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -23701,7 +23701,7 @@ async function maybeProactivelyCompactContext(sessionName, now) {
|
|
|
23701
23701
|
if (!agentState?.workspace || !sessionId || !agentState.model) return null;
|
|
23702
23702
|
let usage = null;
|
|
23703
23703
|
try {
|
|
23704
|
-
const { computeContextUsage } = await import("./conversation-service-
|
|
23704
|
+
const { computeContextUsage } = await import("./conversation-service-WKl-sw58.js");
|
|
23705
23705
|
usage = await computeContextUsage(sessionFilePath(agentState.workspace, sessionId), agentState.model);
|
|
23706
23706
|
} catch {
|
|
23707
23707
|
return null;
|
|
@@ -23798,13 +23798,13 @@ async function checkApiErrorAgents() {
|
|
|
23798
23798
|
const st = getAgentStateSync(sessionName);
|
|
23799
23799
|
const sid = st?.sessionId ?? runtimeState?.claudeSessionId;
|
|
23800
23800
|
if (st?.workspace && sid && st.model) {
|
|
23801
|
-
const { computeContextUsage } = await import("./conversation-service-
|
|
23801
|
+
const { computeContextUsage } = await import("./conversation-service-WKl-sw58.js");
|
|
23802
23802
|
const usage = await computeContextUsage(sessionFilePath(st.workspace, sid), st.model);
|
|
23803
23803
|
if (usage && usage.percentUsed < 85) recoveredPct = usage.percentUsed;
|
|
23804
23804
|
}
|
|
23805
23805
|
} catch {}
|
|
23806
23806
|
if (recoveredPct !== null) {
|
|
23807
|
-
const { clearWorkspaceStuck } = await import("./review-status-sync-
|
|
23807
|
+
const { clearWorkspaceStuck } = await import("./review-status-sync-BxHBVH8s.js");
|
|
23808
23808
|
clearWorkspaceStuck(issueId);
|
|
23809
23809
|
stuckOverflowNativeRecoveryState.delete(sessionName);
|
|
23810
23810
|
actions.push(`Context overflow recovery: cleared stuck flag for ${sessionName} (context back to ${Math.round(recoveredPct)}%)`);
|
|
@@ -23820,7 +23820,7 @@ async function checkApiErrorAgents() {
|
|
|
23820
23820
|
rec.attempts += 1;
|
|
23821
23821
|
rec.lastAttempt = now;
|
|
23822
23822
|
stuckOverflowNativeRecoveryState.set(sessionName, rec);
|
|
23823
|
-
const { resumeAgent } = await import("./agents-
|
|
23823
|
+
const { resumeAgent } = await import("./agents-BIggLvi_.js");
|
|
23824
23824
|
const recovered = await resumeAgent(sessionName, void 0, { compact: true });
|
|
23825
23825
|
if (recovered.success) {
|
|
23826
23826
|
stuckOverflowNativeRecoveryState.delete(sessionName);
|
|
@@ -23868,7 +23868,7 @@ async function checkApiErrorAgents() {
|
|
|
23868
23868
|
}
|
|
23869
23869
|
const compactAttempts = (ov?.compactAttempts ?? 0) + 1;
|
|
23870
23870
|
if (issueId !== null) {
|
|
23871
|
-
const { resumeAgent } = await import("./agents-
|
|
23871
|
+
const { resumeAgent } = await import("./agents-BIggLvi_.js");
|
|
23872
23872
|
const resumeResult = await resumeAgent(sessionName, void 0, { compact: true });
|
|
23873
23873
|
contextOverflowRecoveryState.set(sessionName, {
|
|
23874
23874
|
lastAttempt: now,
|
|
@@ -24233,7 +24233,7 @@ function reviewConvoyLiveness(issueId) {
|
|
|
24233
24233
|
*/
|
|
24234
24234
|
async function recoverUnhealthyTestStack(issueId, workspacePath) {
|
|
24235
24235
|
const key = issueId.toUpperCase();
|
|
24236
|
-
const { getWorkspaceStackHealth } = await import("./stack-health-
|
|
24236
|
+
const { getWorkspaceStackHealth } = await import("./stack-health-Deel1mSW.js");
|
|
24237
24237
|
const health = await Effect.runPromise(getWorkspaceStackHealth(issueId, { workspacePath }));
|
|
24238
24238
|
if (health.healthy) {
|
|
24239
24239
|
testStackRebuildState.delete(key);
|
|
@@ -24265,7 +24265,7 @@ async function recoverUnhealthyTestStack(issueId, workspacePath) {
|
|
|
24265
24265
|
record.attempts += 1;
|
|
24266
24266
|
testStackRebuildState.set(key, record);
|
|
24267
24267
|
console.log(`[deacon] Test stack for ${key} unhealthy (${health.reasons.join("; ")}) — rebuilding (attempt ${record.attempts}/${TEST_STACK_REBUILD_MAX_ATTEMPTS})`);
|
|
24268
|
-
const { rebuildWorkspaceStack } = await import("./rebuild-stack-
|
|
24268
|
+
const { rebuildWorkspaceStack } = await import("./rebuild-stack-ByFCMqTK.js");
|
|
24269
24269
|
const result = await Effect.runPromise(rebuildWorkspaceStack(issueId, { onProgress: (m) => console.log(`[deacon] ${key} stack rebuild: ${m}`) }));
|
|
24270
24270
|
if (!result.success) {
|
|
24271
24271
|
console.warn(`[deacon] Test stack rebuild failed for ${key}: ${result.error}`);
|
|
@@ -24393,7 +24393,7 @@ async function handleReviewCoordinatorDied(issueId, _sessionName, _reason) {
|
|
|
24393
24393
|
return actions;
|
|
24394
24394
|
}
|
|
24395
24395
|
try {
|
|
24396
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
24396
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
|
|
24397
24397
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
24398
24398
|
issueId,
|
|
24399
24399
|
workspace,
|
|
@@ -24523,7 +24523,7 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus) {
|
|
|
24523
24523
|
const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
|
|
24524
24524
|
if (workspace && resolved && !tryReserveAdvancingSlot() && !await tryYieldForAdvancingDispatch("review", issueId)) actions.push(`Deferred review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
|
|
24525
24525
|
else if (workspace && resolved) try {
|
|
24526
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
24526
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
|
|
24527
24527
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
24528
24528
|
issueId,
|
|
24529
24529
|
workspace,
|
|
@@ -24548,8 +24548,8 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus) {
|
|
|
24548
24548
|
const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
|
|
24549
24549
|
if (workspace && resolved) {
|
|
24550
24550
|
const branch = `feature/${issueLower}`;
|
|
24551
|
-
const { spawnRun } = await import("./agents-
|
|
24552
|
-
const { buildTestRolePrompt } = await import("./test-agent-queue-
|
|
24551
|
+
const { spawnRun } = await import("./agents-BIggLvi_.js");
|
|
24552
|
+
const { buildTestRolePrompt } = await import("./test-agent-queue-qfsq6uaC.js");
|
|
24553
24553
|
const stackRecovery = await recoverUnhealthyTestStack(issueId, workspace);
|
|
24554
24554
|
if (stackRecovery === "cooldown" || stackRecovery === "exhausted") {
|
|
24555
24555
|
setReviewStatusSync(issueId, { testStatus: "dispatch_failed" });
|
|
@@ -24687,7 +24687,7 @@ async function recoverStalledReviewConvoys(getCanonicalState = getAutoCloseOutCa
|
|
|
24687
24687
|
record.lastAttempt = now;
|
|
24688
24688
|
record.attempts += 1;
|
|
24689
24689
|
stalledReviewConvoyRecoveryState.set(key, record);
|
|
24690
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
24690
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
|
|
24691
24691
|
try {
|
|
24692
24692
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
24693
24693
|
issueId,
|
|
@@ -24758,7 +24758,7 @@ async function checkMissingReviewStatuses() {
|
|
|
24758
24758
|
continue;
|
|
24759
24759
|
}
|
|
24760
24760
|
try {
|
|
24761
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
24761
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
|
|
24762
24762
|
await Effect.runPromise(spawnReviewRoleForIssue({
|
|
24763
24763
|
issueId,
|
|
24764
24764
|
workspace,
|
|
@@ -24809,7 +24809,7 @@ async function checkStuckReviewing() {
|
|
|
24809
24809
|
const actions = [];
|
|
24810
24810
|
const REVIEW_STUCK_THRESHOLD_MS = 1800 * 1e3;
|
|
24811
24811
|
try {
|
|
24812
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
24812
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-bBkqUj5i.js");
|
|
24813
24813
|
const statuses = loadReviewStatuses();
|
|
24814
24814
|
const now = Date.now();
|
|
24815
24815
|
const activeReviewIssues = /* @__PURE__ */ new Set();
|
|
@@ -24825,7 +24825,7 @@ async function checkStuckReviewing() {
|
|
|
24825
24825
|
if (rState?.state === "active" && rState.currentIssue) activeReviewIssues.add(rState.currentIssue.toUpperCase());
|
|
24826
24826
|
}
|
|
24827
24827
|
try {
|
|
24828
|
-
const { listRunningAgents } = await import("./agents-
|
|
24828
|
+
const { listRunningAgents } = await import("./agents-BIggLvi_.js");
|
|
24829
24829
|
const agents = await Effect.runPromise(listRunningAgents());
|
|
24830
24830
|
for (const agent of agents) {
|
|
24831
24831
|
if (agent.status === "stopped" || agent.status === "error") continue;
|
|
@@ -24958,7 +24958,7 @@ async function checkCompletedButUnsignaledReviews() {
|
|
|
24958
24958
|
}
|
|
24959
24959
|
const nudge = `Your review synthesis 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${`pan admin specialists done review ${issueId} --status ${verdict}${verdict === "blocked" || verdict === "failed" ? ` --notes "${topBlocker || "See synthesis.md"}"` : ""}`}\n\nRun this command NOW. Do not write any other response before executing it.`;
|
|
24960
24960
|
try {
|
|
24961
|
-
const { messageAgent } = await import("./agents-
|
|
24961
|
+
const { messageAgent } = await import("./agents-BIggLvi_.js");
|
|
24962
24962
|
await messageAgent(reviewSession, nudge);
|
|
24963
24963
|
unsignaledReviewNudges.set(latestDir, now);
|
|
24964
24964
|
actions.push(`Nudged ${reviewSession} to signal ${verdict} (synthesis written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
|
|
@@ -25014,6 +25014,11 @@ function synthesizeReviewFromReports(opts) {
|
|
|
25014
25014
|
path: report.path
|
|
25015
25015
|
})));
|
|
25016
25016
|
const verdict = blockers.length > 0 ? "blocked" : "passed";
|
|
25017
|
+
const reviewerVerdicts = {};
|
|
25018
|
+
for (const report of opts.reports) reviewerVerdicts[report.subRole] = {
|
|
25019
|
+
status: blockers.some((b) => b.subRole === report.subRole) ? "blocked" : "passed",
|
|
25020
|
+
findingsPath: report.path
|
|
25021
|
+
};
|
|
25017
25022
|
const topBlocker = blockers[0] ? `[${blockers[0].subRole}] ${blockers[0].title}` : "";
|
|
25018
25023
|
const blockerSection = blockers.length > 0 ? blockers.map((blocker) => `### [${blocker.subRole}] ${blocker.title}\nSource: ${blocker.path}`).join("\n\n") : "None";
|
|
25019
25024
|
const cleanSubRoles = opts.reports.filter((report) => !blockers.some((blocker) => blocker.subRole === report.subRole)).map((report) => `- ${report.subRole}`).join("\n") || "None";
|
|
@@ -25047,7 +25052,8 @@ function synthesizeReviewFromReports(opts) {
|
|
|
25047
25052
|
"## Clean Sub-roles",
|
|
25048
25053
|
cleanSubRoles,
|
|
25049
25054
|
""
|
|
25050
|
-
].join("\n")
|
|
25055
|
+
].join("\n"),
|
|
25056
|
+
reviewerVerdicts
|
|
25051
25057
|
};
|
|
25052
25058
|
}
|
|
25053
25059
|
/**
|
|
@@ -25073,7 +25079,7 @@ async function respawnIdleReviewer(state, agentId) {
|
|
|
25073
25079
|
return false;
|
|
25074
25080
|
}
|
|
25075
25081
|
try {
|
|
25076
|
-
const { spawnReviewSubRoleForIssue } = await import("./review-agent-
|
|
25082
|
+
const { spawnReviewSubRoleForIssue } = await import("./review-agent-DgySDb-G.js");
|
|
25077
25083
|
const contextManifestPath = join(dirname(outputPath), "context.json");
|
|
25078
25084
|
const result = await Effect.runPromise(spawnReviewSubRoleForIssue({
|
|
25079
25085
|
issueId: state.issueId,
|
|
@@ -25157,9 +25163,25 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
|
|
|
25157
25163
|
reports
|
|
25158
25164
|
});
|
|
25159
25165
|
writeFileSync(join(reviewDir, "synthesis.md"), synthesis.body);
|
|
25166
|
+
let fallbackHead;
|
|
25167
|
+
try {
|
|
25168
|
+
const { execFile } = await import("node:child_process");
|
|
25169
|
+
const { promisify } = await import("node:util");
|
|
25170
|
+
const { stdout } = await promisify(execFile)("git", ["rev-parse", "HEAD"], {
|
|
25171
|
+
cwd: state.workspace,
|
|
25172
|
+
encoding: "utf-8",
|
|
25173
|
+
timeout: 1e4
|
|
25174
|
+
});
|
|
25175
|
+
fallbackHead = stdout.trim() || void 0;
|
|
25176
|
+
} catch {}
|
|
25177
|
+
const anchoredVerdicts = Object.fromEntries(Object.entries(synthesis.reviewerVerdicts).map(([subRole, v]) => [subRole, {
|
|
25178
|
+
...v,
|
|
25179
|
+
...fallbackHead ? { atCommit: fallbackHead } : {}
|
|
25180
|
+
}]));
|
|
25160
25181
|
setReviewStatusSync(state.issueId, {
|
|
25161
25182
|
reviewStatus: synthesis.verdict,
|
|
25162
|
-
reviewNotes: synthesis.topBlocker || "Review approved by Deacon fallback from completed reviewer reports"
|
|
25183
|
+
reviewNotes: synthesis.topBlocker || "Review approved by Deacon fallback from completed reviewer reports",
|
|
25184
|
+
reviewerVerdicts: anchoredVerdicts
|
|
25163
25185
|
});
|
|
25164
25186
|
if (synthesis.verdict === "blocked") await Effect.runPromise(deliverReviewVerdictFeedback({
|
|
25165
25187
|
issueId: state.issueId,
|
|
@@ -25186,7 +25208,7 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
|
|
|
25186
25208
|
"Read the four reports, write synthesis.md, then signal review status exactly as roles/review.md instructs."
|
|
25187
25209
|
].join("\n");
|
|
25188
25210
|
try {
|
|
25189
|
-
const { messageAgent } = await import("./agents-
|
|
25211
|
+
const { messageAgent } = await import("./agents-BIggLvi_.js");
|
|
25190
25212
|
await messageAgent(state.id, message);
|
|
25191
25213
|
reviewReportsPresentNudges.set(nudgeKey, now);
|
|
25192
25214
|
const action = `Nudged ${state.id} to synthesize from ${REVIEW_SUB_ROLES.length} reviewer reports`;
|
|
@@ -25265,7 +25287,7 @@ async function monitorReviewConvoySignals() {
|
|
|
25265
25287
|
if (!signal) continue;
|
|
25266
25288
|
const message = signal === "ready" ? `REVIEWER_READY ${state.reviewSubRole} ${outputPath}` : signal === "timeout" ? `REVIEWER_TIMEOUT ${state.reviewSubRole} ${reason}` : `REVIEWER_FAILED ${state.reviewSubRole} ${reason}`;
|
|
25267
25289
|
try {
|
|
25268
|
-
const { messageAgent } = await import("./agents-
|
|
25290
|
+
const { messageAgent } = await import("./agents-BIggLvi_.js");
|
|
25269
25291
|
await messageAgent(state.reviewSynthesisAgentId, message);
|
|
25270
25292
|
state.reviewMonitorSignaled = signal;
|
|
25271
25293
|
saveAgentStateSync(state);
|
|
@@ -25273,7 +25295,7 @@ async function monitorReviewConvoySignals() {
|
|
|
25273
25295
|
actions.push(action);
|
|
25274
25296
|
logDeaconEventSync(`monitorReviewConvoySignals: ${action}`);
|
|
25275
25297
|
if (signal === "ready") try {
|
|
25276
|
-
const { notifyPipelineSync } = await import("./pipeline-notifier-
|
|
25298
|
+
const { notifyPipelineSync } = await import("./pipeline-notifier-lwMa--Gz.js");
|
|
25277
25299
|
notifyPipelineSync({
|
|
25278
25300
|
type: "reviewer_completed",
|
|
25279
25301
|
issueId: state.issueId,
|
|
@@ -25281,7 +25303,7 @@ async function monitorReviewConvoySignals() {
|
|
|
25281
25303
|
});
|
|
25282
25304
|
} catch {}
|
|
25283
25305
|
else if (signal === "timeout") try {
|
|
25284
|
-
const { notifyPipelineSync } = await import("./pipeline-notifier-
|
|
25306
|
+
const { notifyPipelineSync } = await import("./pipeline-notifier-lwMa--Gz.js");
|
|
25285
25307
|
notifyPipelineSync({
|
|
25286
25308
|
type: "reviewer_timed_out",
|
|
25287
25309
|
issueId: state.issueId,
|
|
@@ -25368,6 +25390,96 @@ async function cleanupOrphanedReviewSessions() {
|
|
|
25368
25390
|
else logDeaconEventSync(`cleanupOrphanedReviewSessions completed: no orphaned sessions found`);
|
|
25369
25391
|
return actions;
|
|
25370
25392
|
}
|
|
25393
|
+
/** How long after the fork to wait before judging cache hits from cost events. */
|
|
25394
|
+
const FORK_CACHE_CHECK_DELAY_MS = 180 * 1e3;
|
|
25395
|
+
/**
|
|
25396
|
+
* PAN-1862 (NFR-5 backstop): a discovery-mode review parent that never signals
|
|
25397
|
+
* discovery-ready (crashed, wedged, or just forgot) must not strand the review
|
|
25398
|
+
* at reviewing-with-no-convoy. After REVIEW_DISCOVERY_TIMEOUT_MS — or as soon
|
|
25399
|
+
* as the parent session is dead — force the discovery-ready handling: the fork
|
|
25400
|
+
* may miss the 5-minute cache TTL (the miss detector below reports that), but
|
|
25401
|
+
* the review itself always proceeds (NFR-2).
|
|
25402
|
+
*/
|
|
25403
|
+
async function checkStalledReviewDiscovery() {
|
|
25404
|
+
const actions = [];
|
|
25405
|
+
try {
|
|
25406
|
+
const { listAgentStates } = await import("./agents-BIggLvi_.js");
|
|
25407
|
+
const states = listAgentStates();
|
|
25408
|
+
const now = Date.now();
|
|
25409
|
+
for (const state of states) {
|
|
25410
|
+
if (state.role !== "review" || state.reviewSubRole || !state.reviewDiscoveryPending || !state.issueId) continue;
|
|
25411
|
+
const startedMs = Date.parse(state.lastResumeAt ?? state.startedAt);
|
|
25412
|
+
const aged = Number.isFinite(startedMs) && now - startedMs > 48e4;
|
|
25413
|
+
const dead = !await Effect.runPromise(sessionExists(state.id)).catch(() => false) || await Effect.runPromise(isPaneDead(state.id)).catch(() => true);
|
|
25414
|
+
if (!aged && !dead) continue;
|
|
25415
|
+
const { handleReviewDiscoveryReady } = await import("./review-agent-DgySDb-G.js");
|
|
25416
|
+
const result = await handleReviewDiscoveryReady(state.issueId, { source: dead ? "deacon-backstop (parent dead)" : "deacon-backstop (discovery timeout)" });
|
|
25417
|
+
actions.push(result.message);
|
|
25418
|
+
logDeaconEventSync(`checkStalledReviewDiscovery: ${result.message}`);
|
|
25419
|
+
}
|
|
25420
|
+
} catch (error) {
|
|
25421
|
+
console.error("[deacon] Error checking stalled review discovery:", error instanceof Error ? error.message : String(error));
|
|
25422
|
+
}
|
|
25423
|
+
return actions;
|
|
25424
|
+
}
|
|
25425
|
+
/**
|
|
25426
|
+
* PAN-1862 (FR-11/FR-12): detect a fork cache MISS — a forked reviewer's first
|
|
25427
|
+
* request reporting cacheRead == 0 when a warm hit was expected (TTL expired,
|
|
25428
|
+
* model mismatch, prefix drift). Purely observability: reviews are already
|
|
25429
|
+
* running correctly either way (NFR-2); the operator just learns the savings
|
|
25430
|
+
* didn't land, via a warn-level activity entry + a desktop notification.
|
|
25431
|
+
* Checked once per fork (reviewForkCacheChecked).
|
|
25432
|
+
*/
|
|
25433
|
+
async function checkReviewForkCacheMisses() {
|
|
25434
|
+
const actions = [];
|
|
25435
|
+
try {
|
|
25436
|
+
const { listAgentStates, saveAgentState } = await import("./agents-BIggLvi_.js");
|
|
25437
|
+
const { readEventsSync } = await import("./events-BlzVUyTx.js");
|
|
25438
|
+
const { emitActivityEntrySync } = await import("./activity-logger-DvYvFhwZ.js");
|
|
25439
|
+
const states = listAgentStates();
|
|
25440
|
+
const now = Date.now();
|
|
25441
|
+
for (const parent of states) {
|
|
25442
|
+
if (parent.role !== "review" || parent.reviewSubRole || !parent.reviewConvoyForkedAt || parent.reviewForkCacheChecked || !parent.issueId) continue;
|
|
25443
|
+
const forkedMs = Date.parse(parent.reviewConvoyForkedAt);
|
|
25444
|
+
if (!Number.isFinite(forkedMs) || now - forkedMs < FORK_CACHE_CHECK_DELAY_MS) continue;
|
|
25445
|
+
const forkedReviewers = states.filter((s) => s.issueId === parent.issueId && s.reviewSubRole && s.reviewForkedFromParent && s.reviewRunId === parent.reviewRunId);
|
|
25446
|
+
if (forkedReviewers.length === 0) {
|
|
25447
|
+
parent.reviewForkCacheChecked = true;
|
|
25448
|
+
await Effect.runPromise(saveAgentState(parent));
|
|
25449
|
+
continue;
|
|
25450
|
+
}
|
|
25451
|
+
const firstEvents = forkedReviewers.map((r) => ({
|
|
25452
|
+
id: r.id,
|
|
25453
|
+
event: readEventsSync({
|
|
25454
|
+
agentId: r.id,
|
|
25455
|
+
startDate: parent.reviewConvoyForkedAt,
|
|
25456
|
+
limit: 1
|
|
25457
|
+
})[0]
|
|
25458
|
+
}));
|
|
25459
|
+
if (firstEvents.some((fe) => !fe.event) && now - forkedMs < 5 * FORK_CACHE_CHECK_DELAY_MS) continue;
|
|
25460
|
+
const misses = firstEvents.filter((fe) => fe.event && (fe.event.cacheRead ?? 0) === 0);
|
|
25461
|
+
parent.reviewForkCacheChecked = true;
|
|
25462
|
+
await Effect.runPromise(saveAgentState(parent));
|
|
25463
|
+
const readyMs = parent.reviewDiscoveryReadyAt ? Date.parse(parent.reviewDiscoveryReadyAt) : NaN;
|
|
25464
|
+
const gapSeconds = Number.isFinite(readyMs) ? Math.round((forkedMs - readyMs) / 1e3) : void 0;
|
|
25465
|
+
if (misses.length > 0) {
|
|
25466
|
+
const message = `Review cache miss for ${parent.issueId} — ${misses.length}/${forkedReviewers.length} forked reviewer(s) got zero cache reads on their first request${gapSeconds !== void 0 ? ` (discovery→fork gap ${gapSeconds}s; cache TTL is 300s)` : ""}. Reviews proceed correctly at full input cost.`;
|
|
25467
|
+
emitActivityEntrySync({
|
|
25468
|
+
source: "review",
|
|
25469
|
+
level: "warn",
|
|
25470
|
+
message,
|
|
25471
|
+
issueId: parent.issueId,
|
|
25472
|
+
desktop: true
|
|
25473
|
+
});
|
|
25474
|
+
actions.push(message);
|
|
25475
|
+
logDeaconEventSync(`checkReviewForkCacheMisses: ${message}`);
|
|
25476
|
+
} else actions.push(`Fork cache HIT confirmed for ${parent.issueId} (${forkedReviewers.length} reviewer(s))`);
|
|
25477
|
+
}
|
|
25478
|
+
} catch (error) {
|
|
25479
|
+
console.error("[deacon] Error checking review fork cache misses:", error instanceof Error ? error.message : String(error));
|
|
25480
|
+
}
|
|
25481
|
+
return actions;
|
|
25482
|
+
}
|
|
25371
25483
|
//#endregion
|
|
25372
25484
|
//#region ../../lib/concurrency.ts
|
|
25373
25485
|
/**
|
|
@@ -25469,7 +25581,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
25469
25581
|
if (!project) continue;
|
|
25470
25582
|
let specStatus;
|
|
25471
25583
|
try {
|
|
25472
|
-
const { findSpecByIssue } = await import("./specs-
|
|
25584
|
+
const { findSpecByIssue } = await import("./specs-DeS98l_p.js");
|
|
25473
25585
|
const spec = await Effect.runPromise(findSpecByIssue(project.projectPath, issueId));
|
|
25474
25586
|
specStatus = spec?.status;
|
|
25475
25587
|
if (spec && (spec.status === "completed" || spec.status === "cancelled")) {
|
|
@@ -25484,7 +25596,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
25484
25596
|
if (branchTip.stdout.trim() === mainTip.stdout.trim()) console.log(`[deacon] ${issueId}: branch ${branch} points at main; not treating zero-commit branch as merged`);
|
|
25485
25597
|
} catch {}
|
|
25486
25598
|
if (!isMerged) {
|
|
25487
|
-
const { resolveGitHubIssueSync: _resolveGitHubIssue } = await import("./tracker-utils-
|
|
25599
|
+
const { resolveGitHubIssueSync: _resolveGitHubIssue } = await import("./tracker-utils-D6B8scEw.js");
|
|
25488
25600
|
const ghResolved = _resolveGitHubIssue(issueId);
|
|
25489
25601
|
if (ghResolved.isGitHub) try {
|
|
25490
25602
|
const { stdout } = await execFileAsync$4("gh", [
|
|
@@ -25521,7 +25633,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
25521
25633
|
actions.push(msg);
|
|
25522
25634
|
console.log(`[deacon] ${msg}`);
|
|
25523
25635
|
try {
|
|
25524
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
25636
|
+
const { postMergeLifecycle } = await import("./merge-agent-Dh8Y9PDO.js");
|
|
25525
25637
|
postMergeLifecycle(issueId, project.projectPath, branch, { skipDeploy: true }).catch((err) => console.warn(`[deacon] postMergeLifecycle (reconcile) failed for ${issueId}: ${err}`));
|
|
25526
25638
|
} catch (err) {
|
|
25527
25639
|
console.warn(`[deacon] Could not import postMergeLifecycle: ${err}`);
|
|
@@ -25546,7 +25658,7 @@ const falseMergedReset = /* @__PURE__ */ new Set();
|
|
|
25546
25658
|
async function reconcileFalseMerged() {
|
|
25547
25659
|
const actions = [];
|
|
25548
25660
|
try {
|
|
25549
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
25661
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-B5PDHMyn.js");
|
|
25550
25662
|
if (!isGitHubAppConfigured()) return actions;
|
|
25551
25663
|
const statuses = loadReviewStatuses();
|
|
25552
25664
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
@@ -25591,7 +25703,7 @@ const CLOSED_PR_RECONCILE_COOLDOWN_MS = 600 * 1e3;
|
|
|
25591
25703
|
async function reconcileClosedPrReadyForMerge() {
|
|
25592
25704
|
const actions = [];
|
|
25593
25705
|
try {
|
|
25594
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
25706
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-B5PDHMyn.js");
|
|
25595
25707
|
if (!isGitHubAppConfigured()) return actions;
|
|
25596
25708
|
const statuses = loadReviewStatuses();
|
|
25597
25709
|
const now = Date.now();
|
|
@@ -25663,7 +25775,7 @@ const STALE_MERGE_BLOCKER_COOLDOWN_MS = 120 * 1e3;
|
|
|
25663
25775
|
async function reconcileStaleMergeBlockers() {
|
|
25664
25776
|
const actions = [];
|
|
25665
25777
|
try {
|
|
25666
|
-
const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-
|
|
25778
|
+
const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-JdFuhKuF.js");
|
|
25667
25779
|
const statuses = loadReviewStatuses();
|
|
25668
25780
|
const now = Date.now();
|
|
25669
25781
|
const deps = buildRealConflictGateDeps();
|
|
@@ -25806,7 +25918,7 @@ async function checkFailedMergeRetry() {
|
|
|
25806
25918
|
if (ciEntry.count === 5) {
|
|
25807
25919
|
console.log(`[deacon] CI check failure for ${issueId} — retries exhausted, notifying work agent`);
|
|
25808
25920
|
const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
|
|
25809
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
25921
|
+
const { writeFeedbackFile } = await import("./feedback-writer-thrdxYpK.js");
|
|
25810
25922
|
const ciFileResult = await Effect.runPromise(writeFeedbackFile({
|
|
25811
25923
|
issueId,
|
|
25812
25924
|
specialist: "merge-agent",
|
|
@@ -25838,7 +25950,7 @@ async function checkFailedMergeRetry() {
|
|
|
25838
25950
|
ciRetryMap.set(issueId, ciEntry);
|
|
25839
25951
|
console.log(`[deacon] CI check failure for ${issueId} — notifying agent to re-submit (attempt ${ciEntry.count}/5)`);
|
|
25840
25952
|
const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
|
|
25841
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
25953
|
+
const { writeFeedbackFile } = await import("./feedback-writer-thrdxYpK.js");
|
|
25842
25954
|
const ciFileResult2 = await Effect.runPromise(writeFeedbackFile({
|
|
25843
25955
|
issueId,
|
|
25844
25956
|
specialist: "merge-agent",
|
|
@@ -25866,7 +25978,7 @@ async function checkFailedMergeRetry() {
|
|
|
25866
25978
|
const lastNudge = timeoutNudgeCooldowns.get(issueIdForFb);
|
|
25867
25979
|
if (!lastNudge || now - lastNudge >= TIMEOUT_NUDGE_COOLDOWN_MS) {
|
|
25868
25980
|
const timeoutNotes = status.mergeNotes;
|
|
25869
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
25981
|
+
const { writeFeedbackFile } = await import("./feedback-writer-thrdxYpK.js");
|
|
25870
25982
|
await Effect.runPromise(writeFeedbackFile({
|
|
25871
25983
|
issueId: issueIdForFb,
|
|
25872
25984
|
specialist: "merge-agent",
|
|
@@ -25971,7 +26083,7 @@ async function autoCloseOut(now = /* @__PURE__ */ new Date()) {
|
|
|
25971
26083
|
} } : {}
|
|
25972
26084
|
};
|
|
25973
26085
|
try {
|
|
25974
|
-
const { closeOut } = await import("./workflows-
|
|
26086
|
+
const { closeOut } = await import("./workflows-Cz8OtiB4.js");
|
|
25975
26087
|
const result = await Effect.runPromise(closeOut(ctx));
|
|
25976
26088
|
if (!result.success) {
|
|
25977
26089
|
const failed = result.steps.find((step) => !step.success && !step.skipped);
|
|
@@ -26533,7 +26645,7 @@ async function nudgeStalledResumeWorkAgents() {
|
|
|
26533
26645
|
const message = buildStalledResumePrompt(state);
|
|
26534
26646
|
if (!message) continue;
|
|
26535
26647
|
try {
|
|
26536
|
-
const { messageAgent } = await import("./agents-
|
|
26648
|
+
const { messageAgent } = await import("./agents-BIggLvi_.js");
|
|
26537
26649
|
await messageAgent(agentId, message);
|
|
26538
26650
|
recordCooldown(agentId, ".last-stalled-resume-nudge");
|
|
26539
26651
|
const action = `Re-sent stalled resume prompt to ${agentId} (${state.issueId})`;
|
|
@@ -26651,7 +26763,7 @@ async function nudgeIdleWorkAgentsWithOpenBeads() {
|
|
|
26651
26763
|
"Continue the per-bead workflow without asking — claim it (`bd update <bead-id> --claim`), implement, commit, close. 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."
|
|
26652
26764
|
].join("\n");
|
|
26653
26765
|
try {
|
|
26654
|
-
const { messageAgent } = await import("./agents-
|
|
26766
|
+
const { messageAgent } = await import("./agents-BIggLvi_.js");
|
|
26655
26767
|
await messageAgent(agentId, message);
|
|
26656
26768
|
writeFileSync(join(getAgentDir(agentId), ".last-bead-nudge"), String(Date.now()), "utf-8");
|
|
26657
26769
|
const action = `Nudged idle ${agentId} (${state.issueId}) — ${openBeads.length} open bead(s)`;
|
|
@@ -27426,7 +27538,7 @@ async function remediateFlywheelOrchestrator(agentId, now, actions, reason) {
|
|
|
27426
27538
|
now
|
|
27427
27539
|
});
|
|
27428
27540
|
if (decision.kind === "noop") return;
|
|
27429
|
-
const { resumeFlywheel, pauseFlywheel } = await import("./flywheel-
|
|
27541
|
+
const { resumeFlywheel, pauseFlywheel } = await import("./flywheel-BqDdGvrQ.js");
|
|
27430
27542
|
const prev = readStuckRemediationState(agentId);
|
|
27431
27543
|
const nowIso = new Date(now).toISOString();
|
|
27432
27544
|
if (decision.kind === "escalate") {
|
|
@@ -28442,8 +28554,8 @@ async function cleanupStaleAgentState() {
|
|
|
28442
28554
|
*/
|
|
28443
28555
|
async function cleanupAbandonedFeedback() {
|
|
28444
28556
|
const actions = [];
|
|
28445
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
28446
|
-
const { clearFeedbackFiles } = await import("./feedback-writer-
|
|
28557
|
+
const { getReviewStatusSync } = await import("./review-status-bBkqUj5i.js");
|
|
28558
|
+
const { clearFeedbackFiles } = await import("./feedback-writer-thrdxYpK.js");
|
|
28447
28559
|
for (const { issueId, workspacePath } of listFeatureWorkspaces()) {
|
|
28448
28560
|
const panFeedbackDir = join(workspacePath, ".pan", "feedback");
|
|
28449
28561
|
if (!existsSync(panFeedbackDir)) continue;
|
|
@@ -28514,7 +28626,7 @@ async function handleOrphanReviewerSession(sessionName, sessions, creationTimes,
|
|
|
28514
28626
|
if (!issueId) return null;
|
|
28515
28627
|
const agentSession = `agent-${issueId.toLowerCase()}`;
|
|
28516
28628
|
if (sessions.includes(agentSession)) return null;
|
|
28517
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
28629
|
+
const { getReviewStatusSync } = await import("./review-status-bBkqUj5i.js");
|
|
28518
28630
|
try {
|
|
28519
28631
|
if (getReviewStatusSync(issueId)?.reviewStatus === "reviewing") return null;
|
|
28520
28632
|
} catch {}
|
|
@@ -28634,7 +28746,7 @@ async function checkOrphanedCompletions() {
|
|
|
28634
28746
|
async function checkPendingTestDispatch() {
|
|
28635
28747
|
const actions = [];
|
|
28636
28748
|
try {
|
|
28637
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
28749
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-bBkqUj5i.js");
|
|
28638
28750
|
const statuses = loadReviewStatuses();
|
|
28639
28751
|
const now = Date.now();
|
|
28640
28752
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
@@ -28667,7 +28779,7 @@ async function checkPendingTestDispatch() {
|
|
|
28667
28779
|
console.log(`[deacon] ${issueId}: skipping test re-dispatch — issue is closed`);
|
|
28668
28780
|
continue;
|
|
28669
28781
|
}
|
|
28670
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28782
|
+
const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
|
|
28671
28783
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
28672
28784
|
if (!resolved) continue;
|
|
28673
28785
|
const issueLower = issueId.toLowerCase();
|
|
@@ -28682,8 +28794,8 @@ async function checkPendingTestDispatch() {
|
|
|
28682
28794
|
logDeaconEventSync(`checkPendingTestDispatch: deferred test for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
|
|
28683
28795
|
continue;
|
|
28684
28796
|
}
|
|
28685
|
-
const { spawnRun } = await import("./agents-
|
|
28686
|
-
const { buildTestRolePrompt } = await import("./test-agent-queue-
|
|
28797
|
+
const { spawnRun } = await import("./agents-BIggLvi_.js");
|
|
28798
|
+
const { buildTestRolePrompt } = await import("./test-agent-queue-qfsq6uaC.js");
|
|
28687
28799
|
try {
|
|
28688
28800
|
const run = await spawnRun(issueId, "test", {
|
|
28689
28801
|
workspace,
|
|
@@ -28806,7 +28918,7 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
28806
28918
|
const cmd = `pan admin specialists done test ${issueId} --status ${decision.status}${noteArg}`;
|
|
28807
28919
|
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.`;
|
|
28808
28920
|
try {
|
|
28809
|
-
const { messageAgent } = await import("./agents-
|
|
28921
|
+
const { messageAgent } = await import("./agents-BIggLvi_.js");
|
|
28810
28922
|
await messageAgent(testSession, nudge);
|
|
28811
28923
|
unsignaledTestNudges.set(testSession, now);
|
|
28812
28924
|
const msg = `Nudged ${testSession} to signal ${decision.status} (verdict artifact present)`;
|
|
@@ -28820,7 +28932,7 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
28820
28932
|
case "nudge-write": {
|
|
28821
28933
|
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.`;
|
|
28822
28934
|
try {
|
|
28823
|
-
const { messageAgent } = await import("./agents-
|
|
28935
|
+
const { messageAgent } = await import("./agents-BIggLvi_.js");
|
|
28824
28936
|
await messageAgent(testSession, nudge);
|
|
28825
28937
|
unsignaledTestNudges.set(testSession, now);
|
|
28826
28938
|
const msg = `Nudged ${testSession} to write+signal a test verdict (no artifact yet)`;
|
|
@@ -28843,8 +28955,8 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
28843
28955
|
async function checkVerificationReviewContradiction() {
|
|
28844
28956
|
const actions = [];
|
|
28845
28957
|
try {
|
|
28846
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
28847
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28958
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-bBkqUj5i.js");
|
|
28959
|
+
const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
|
|
28848
28960
|
const statuses = loadReviewStatuses();
|
|
28849
28961
|
for (const [issueId, status] of Object.entries(statuses)) if (status.verificationStatus === "passed" && status.reviewStatus === "reviewing" && status.stuckReason === "review_infrastructure_failure") {
|
|
28850
28962
|
let reviewedAtCommit;
|
|
@@ -28893,7 +29005,7 @@ async function checkPostReviewCommits() {
|
|
|
28893
29005
|
const actions = [];
|
|
28894
29006
|
try {
|
|
28895
29007
|
const statuses = loadReviewStatuses();
|
|
28896
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
29008
|
+
const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
|
|
28897
29009
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
28898
29010
|
if (status.mergeStatus === "merged") continue;
|
|
28899
29011
|
if (!status.reviewedAtCommit) continue;
|
|
@@ -28948,7 +29060,7 @@ async function checkPostReviewCommits() {
|
|
|
28948
29060
|
actions.push(`Deferred post-review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
|
|
28949
29061
|
logDeaconEventSync(`checkPostReviewCommits: deferred review for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
|
|
28950
29062
|
} else if (freshStatus?.reviewStatus === "pending") {
|
|
28951
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
29063
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
|
|
28952
29064
|
const branch = `feature/${issueId.toLowerCase()}`;
|
|
28953
29065
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
28954
29066
|
issueId,
|
|
@@ -29048,7 +29160,7 @@ async function checkReadyForMergeStuck() {
|
|
|
29048
29160
|
const testStatusGreenCiReconcileCooldowns = /* @__PURE__ */ new Map();
|
|
29049
29161
|
const TEST_STATUS_GREEN_CI_RECONCILE_COOLDOWN_MS = 300 * 1e3;
|
|
29050
29162
|
async function reconcileTestStatusFromGreenCi() {
|
|
29051
|
-
const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-
|
|
29163
|
+
const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-B5PDHMyn.js");
|
|
29052
29164
|
return reconcileTestStatusFromGreenCiWithDeps({
|
|
29053
29165
|
isGitHubAppConfigured,
|
|
29054
29166
|
loadReviewStatuses,
|
|
@@ -29069,7 +29181,7 @@ async function reconcileTestStatusFromGreenCi() {
|
|
|
29069
29181
|
*/
|
|
29070
29182
|
async function clearStaleCiFeedback(issueId) {
|
|
29071
29183
|
const { readdir, rm } = await import("fs/promises");
|
|
29072
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
29184
|
+
const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
|
|
29073
29185
|
const projectConfig = resolveProjectFromIssueSync(issueId);
|
|
29074
29186
|
if (!projectConfig) return;
|
|
29075
29187
|
const repoDir = projectConfig.projectPath;
|
|
@@ -29356,7 +29468,7 @@ async function checkWorkspaceContainerHealth(sharedState) {
|
|
|
29356
29468
|
console.warn(msg);
|
|
29357
29469
|
actions.push(msg);
|
|
29358
29470
|
try {
|
|
29359
|
-
await Effect.runPromise(sendKeys(agentId, `⚠️ Deacon alert: container "${name}" has crashed ${CONTAINER_RESTART_MAX_COUNT} times and auto-restart gave up. The UAT environment at feature-${issueLower}.
|
|
29471
|
+
await Effect.runPromise(sendKeys(agentId, `⚠️ Deacon alert: container "${name}" has crashed ${CONTAINER_RESTART_MAX_COUNT} times and auto-restart gave up. The UAT environment at feature-${issueLower}.overdeck.localhost may be broken. Manual intervention required — check docker logs or re-containerize.`, "deacon:container-gave-up"));
|
|
29360
29472
|
} catch {}
|
|
29361
29473
|
continue;
|
|
29362
29474
|
}
|
|
@@ -29369,7 +29481,7 @@ async function checkWorkspaceContainerHealth(sharedState) {
|
|
|
29369
29481
|
}
|
|
29370
29482
|
}
|
|
29371
29483
|
try {
|
|
29372
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
29484
|
+
const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
|
|
29373
29485
|
const resolved = resolveProjectFromIssueSync(issueLower.toUpperCase());
|
|
29374
29486
|
if (resolved) await killOrphanedWorkspaceProcesses(`${resolved.projectPath}/workspaces/feature-${issueLower}`);
|
|
29375
29487
|
} catch {}
|
|
@@ -29395,7 +29507,7 @@ async function checkWorkspaceContainerHealth(sharedState) {
|
|
|
29395
29507
|
} catch (restartErr) {
|
|
29396
29508
|
console.warn(`[deacon] Failed to restart ${name}: ${restartErr.message}`);
|
|
29397
29509
|
try {
|
|
29398
|
-
await Effect.runPromise(sendKeys(agentId, `⚠️ Deacon alert: container "${name}" crashed and restart failed (${restartErr.message}). The UAT environment at feature-${issueLower}.
|
|
29510
|
+
await Effect.runPromise(sendKeys(agentId, `⚠️ Deacon alert: container "${name}" crashed and restart failed (${restartErr.message}). The UAT environment at feature-${issueLower}.overdeck.localhost is likely broken.`, "deacon:container-restart-failed"));
|
|
29399
29511
|
} catch {}
|
|
29400
29512
|
}
|
|
29401
29513
|
}
|
|
@@ -29418,8 +29530,8 @@ async function checkWorkspaceContainerHealth(sharedState) {
|
|
|
29418
29530
|
async function checkMergedWorkSessions() {
|
|
29419
29531
|
const actions = [];
|
|
29420
29532
|
try {
|
|
29421
|
-
const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-
|
|
29422
|
-
const { setAgentPaused } = await import("./agents-
|
|
29533
|
+
const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-BwJb2DLJ.js");
|
|
29534
|
+
const { setAgentPaused } = await import("./agents-BIggLvi_.js");
|
|
29423
29535
|
const toKill = selectMergedWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
|
|
29424
29536
|
for (const session of toKill) try {
|
|
29425
29537
|
await Effect.runPromise(setAgentPaused(session, "merged — awaiting close-out (verify on main)", true));
|
|
@@ -29459,7 +29571,7 @@ const AWAITING_TEST_IDLE_REAP_MS = 600 * 1e3;
|
|
|
29459
29571
|
async function checkAwaitingTestWorkSessions() {
|
|
29460
29572
|
const actions = [];
|
|
29461
29573
|
try {
|
|
29462
|
-
const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-
|
|
29574
|
+
const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-BwJb2DLJ.js");
|
|
29463
29575
|
const candidates = selectAwaitingTestWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
|
|
29464
29576
|
const now = Date.now();
|
|
29465
29577
|
for (const session of candidates) {
|
|
@@ -29515,7 +29627,7 @@ async function runPatrol() {
|
|
|
29515
29627
|
const stuckRemediationActions = await checkStuckAgentRemediation();
|
|
29516
29628
|
actions.push(...stuckRemediationActions);
|
|
29517
29629
|
for (const a of stuckRemediationActions) addLog("action", a, state.patrolCycle);
|
|
29518
|
-
const { reconcileInFlightJournals } = await import("./advancing-selfheal-
|
|
29630
|
+
const { reconcileInFlightJournals } = await import("./advancing-selfheal-CMlGznKv.js");
|
|
29519
29631
|
const reconciledJournalActions = await reconcileInFlightJournals();
|
|
29520
29632
|
actions.push(...reconciledJournalActions);
|
|
29521
29633
|
for (const a of reconciledJournalActions) addLog("action", a, state.patrolCycle);
|
|
@@ -29527,7 +29639,7 @@ async function runPatrol() {
|
|
|
29527
29639
|
const age = Date.now() - (pending.timestamp ?? 0);
|
|
29528
29640
|
if (age < 3600 * 1e3) {
|
|
29529
29641
|
console.log(`[deacon] Processing pending post-merge lifecycle for ${pending.issueId} (age: ${Math.round(age / 1e3)}s)`);
|
|
29530
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
29642
|
+
const { postMergeLifecycle } = await import("./merge-agent-Dh8Y9PDO.js");
|
|
29531
29643
|
const { unlinkSync } = await import("fs");
|
|
29532
29644
|
unlinkSync(pendingFile);
|
|
29533
29645
|
await postMergeLifecycle(pending.issueId, pending.projectPath, pending.sourceBranch, { skipDeploy: true });
|
|
@@ -29572,7 +29684,7 @@ async function runPatrol() {
|
|
|
29572
29684
|
actions.push(...suspendActions);
|
|
29573
29685
|
for (const a of suspendActions) addLog("action", a, state.patrolCycle);
|
|
29574
29686
|
try {
|
|
29575
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
29687
|
+
const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
|
|
29576
29688
|
const allStatuses = loadReviewStatuses();
|
|
29577
29689
|
for (const [issueId, status] of Object.entries(allStatuses)) {
|
|
29578
29690
|
if (!status.readyForMerge || status.mergeStatus === "merged") continue;
|
|
@@ -29592,21 +29704,15 @@ async function runPatrol() {
|
|
|
29592
29704
|
} catch (err) {
|
|
29593
29705
|
console.warn(`[deacon] Failed to check workspace existence: ${err.message}`);
|
|
29594
29706
|
}
|
|
29595
|
-
const {
|
|
29596
|
-
const reapedTerminalActions = await checkTerminalAdvancingSessions();
|
|
29597
|
-
actions.push(...reapedTerminalActions);
|
|
29598
|
-
for (const a of reapedTerminalActions) addLog("action", a, state.patrolCycle);
|
|
29707
|
+
const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-CMlGznKv.js");
|
|
29599
29708
|
const reapedWorkActions = await checkMergedWorkSessions();
|
|
29600
29709
|
actions.push(...reapedWorkActions);
|
|
29601
29710
|
for (const a of reapedWorkActions) addLog("action", a, state.patrolCycle);
|
|
29602
29711
|
const reapedMergedAdvancingActions = await checkMergedAdvancingSessions();
|
|
29603
29712
|
actions.push(...reapedMergedAdvancingActions);
|
|
29604
29713
|
for (const a of reapedMergedAdvancingActions) addLog("action", a, state.patrolCycle);
|
|
29605
|
-
const reapedIdleTerminalAdvancingActions = await checkIdleTerminalAdvancingSessions();
|
|
29606
|
-
actions.push(...reapedIdleTerminalAdvancingActions);
|
|
29607
|
-
for (const a of reapedIdleTerminalAdvancingActions) addLog("action", a, state.patrolCycle);
|
|
29608
29714
|
try {
|
|
29609
|
-
const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-
|
|
29715
|
+
const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-Bklh6loJ.js");
|
|
29610
29716
|
const remoteCredentialActions = await refreshClaudeCredentialsForActiveRemoteAgents();
|
|
29611
29717
|
actions.push(...remoteCredentialActions);
|
|
29612
29718
|
for (const a of remoteCredentialActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
|
|
@@ -29614,7 +29720,7 @@ async function runPatrol() {
|
|
|
29614
29720
|
addLog("warn", `Remote credential refresh patrol failed: ${err.message}`, state.patrolCycle);
|
|
29615
29721
|
}
|
|
29616
29722
|
try {
|
|
29617
|
-
const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-
|
|
29723
|
+
const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-DNuaAgU6.js");
|
|
29618
29724
|
const heartbeatActions = await refreshHostHeartbeatForEphemeralVms();
|
|
29619
29725
|
actions.push(...heartbeatActions);
|
|
29620
29726
|
for (const a of heartbeatActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
|
|
@@ -29622,7 +29728,7 @@ async function runPatrol() {
|
|
|
29622
29728
|
addLog("warn", `Remote heartbeat refresh patrol failed: ${err.message}`, state.patrolCycle);
|
|
29623
29729
|
}
|
|
29624
29730
|
try {
|
|
29625
|
-
const { reapCompletedRemoteAgents } = await import("./remote-completion-
|
|
29731
|
+
const { reapCompletedRemoteAgents } = await import("./remote-completion-Bklh6loJ.js");
|
|
29626
29732
|
const remoteReap = await reapCompletedRemoteAgents();
|
|
29627
29733
|
for (const r of remoteReap) if (r.status === "handed-off" || r.status === "error") {
|
|
29628
29734
|
const msg = `Remote reap ${r.issueId}: ${r.status} (${r.details.join("; ")})`;
|
|
@@ -29677,6 +29783,12 @@ async function runPatrol() {
|
|
|
29677
29783
|
const planningCleanupActions = await cleanupOrphanedPlanningSessions();
|
|
29678
29784
|
actions.push(...planningCleanupActions);
|
|
29679
29785
|
for (const a of planningCleanupActions) addLog("action", a, state.patrolCycle);
|
|
29786
|
+
const stalledDiscoveryActions = await checkStalledReviewDiscovery();
|
|
29787
|
+
actions.push(...stalledDiscoveryActions);
|
|
29788
|
+
for (const a of stalledDiscoveryActions) addLog("action", a, state.patrolCycle);
|
|
29789
|
+
const forkCacheActions = await checkReviewForkCacheMisses();
|
|
29790
|
+
actions.push(...forkCacheActions);
|
|
29791
|
+
for (const a of forkCacheActions) addLog("action", a, state.patrolCycle);
|
|
29680
29792
|
const reviewerMonitorActions = await monitorReviewConvoySignals();
|
|
29681
29793
|
actions.push(...reviewerMonitorActions);
|
|
29682
29794
|
for (const a of reviewerMonitorActions) addLog("action", a, state.patrolCycle);
|
|
@@ -29791,7 +29903,7 @@ async function runPatrol() {
|
|
|
29791
29903
|
const issueId = runtimeState.currentIssue;
|
|
29792
29904
|
try {
|
|
29793
29905
|
if (getReviewStatusSync(issueId)?.mergeStatus === "merging") {
|
|
29794
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
29906
|
+
const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
|
|
29795
29907
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
29796
29908
|
if (resolved) {
|
|
29797
29909
|
const branch = `feature/${issueId.toLowerCase()}`;
|
|
@@ -29805,7 +29917,7 @@ async function runPatrol() {
|
|
|
29805
29917
|
mergeStatus: "merged",
|
|
29806
29918
|
readyForMerge: false
|
|
29807
29919
|
});
|
|
29808
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
29920
|
+
const { postMergeLifecycle } = await import("./merge-agent-Dh8Y9PDO.js");
|
|
29809
29921
|
postMergeLifecycle(issueId, resolved.projectPath).catch((err) => console.warn(`[deacon] postMergeLifecycle failed for ${issueId}: ${err}`));
|
|
29810
29922
|
actions.push(`Auto-completed stale merge for ${issueId}`);
|
|
29811
29923
|
} else {
|
|
@@ -29985,7 +30097,7 @@ function startDeacon() {
|
|
|
29985
30097
|
logDeaconEventSync(`startDeacon: health monitor starting (patrol every ${config.patrolIntervalMs / 1e3}s)`);
|
|
29986
30098
|
(async () => {
|
|
29987
30099
|
await reconcileAgentLiveness();
|
|
29988
|
-
const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-
|
|
30100
|
+
const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-CMlGznKv.js");
|
|
29989
30101
|
await runBootAdvancingSelfHeal();
|
|
29990
30102
|
runScheduledPatrol("startup");
|
|
29991
30103
|
})().catch((err) => {
|
|
@@ -30057,4 +30169,4 @@ function assessDeaconPatrolFreshness(params) {
|
|
|
30057
30169
|
//#endregion
|
|
30058
30170
|
export { isPreKickoffLaunchDeath as $, scanPendingInputsPromise as $t, reconcileAgentLiveness as A, stalledReviewConvoyRecoveryState as At, applyIssueBlocksMainLabel as B, formatUptime as Bt, getLastPatrolResult as C, isSynthesisForActiveReviewRun as Ct, isDeaconRunning as D, handleWorkCompleted as Dt, handleAgentStoppedForOrphanReviewerSessions as E, handleReviewCoordinatorDied as Et, setAgentStatusChangedNotifier as F, INSPECT_TIMEOUT_MS as Ft, applyIssueVetoedLabel as G, isSmeeConfiguredSync as Gt, applyIssueParkedLabel as H, getCurrentDockerStats as Ht, setAgentStoppedNotifier as I, checkInspectAgentTimeouts as It, removeIssueParkedLabel as J, countPendingAskUserQuestionsForAgent as Jt, removeIssueBlocksMainLabel as K, startSmeeProcessSync as Kt, setMergeReadyNotifier as L, getRuntimeForAgent as Lt, resetPatrolHeartbeatForStartup as M, contextOverflowRecoveryState as Mt, runPatrol as N, contextProactiveCompactState as Nt, loadConfig as O, recoverStalledReviewConvoys as Ot, saveState as P, stuckOverflowNativeRecoveryState as Pt, createInFlightGuard as Q, getAgentWorkspace as Qt, startDeacon as R, classifyMemoryPressure as Rt, getDeaconStatus as S, checkStuckReviewing as St, handleAgentStoppedEvent as T, checkOrphanedReviewStatuses as Tt, applyIssueReadyLabel as U, getResourceConfig as Ut, applyIssueObjectionLabel as V, getContainerHistory as Vt, applyIssueReleasedLabel as W, getSystemHealthSnapshot as Wt, removeIssueReleasedLabel as X, getAgentJsonlPath as Xt, removeIssueReadyLabel as Y, getAgentJsonlMtime as Yt, removeIssueVetoedLabel as Z, getAgentPendingQuestions as Zt, cleanupOrphanReviewerSessions as _, withConcurrencyLimit as _t, checkCompletedButUnsignaledTests as a, listBootReconciliationCandidates as at, containerRestartBackoffMs as b, synthesizeReviewFromReports as bt, checkMergedWorkSessions as c, checkFailedMergeRetry as ct, checkPostReviewCommits as d, reconcileClosedPrReadyForMerge as dt, detectAwaitingInputForAgent as en, isRapidPostResumeDeath as et, checkReadyForMergeStuck as f, reconcileFalseMerged as ft, cleanupAbandonedFeedback as g, reconcileStuckReadyForMerge as gt, checkWorkspaceContainerHealth as h, reconcileStaleMergeStatus as ht, checkAwaitingTestWorkSessions as i, isBootReconciliationCandidate as it, reconcileTestStatusFromGreenCi as j, checkApiErrorAgents as jt, loadState as k, reviewConvoyLiveness as kt, checkOrphanedCompletions as l, checkFirstCompletionAgents as lt, checkVerificationReviewContradiction as m, reconcileStaleMergeBlockers as mt, assessDeaconPatrolFreshness as n, normalizeAwaitingInputPrompt as nn, nudgeStalledResumeWorkAgents as nt, checkDeadEndAgents as o, startBootReconciliation as ot, checkStuckWorkAgents as p, reconcileMergedButReviewing as pt, removeIssueObjectionLabel as q, computeAgentEnrichment as qt, checkAndSuspendIdleAgents as r, parseCodexApprovalPrompt as rn, redeliverUndeliveredKickoffs as rt, checkMassDeath as s, autoCloseOut as st, applyBootReconciliationDecision as t, detectAwaitingInputFromPaneSync as tn, nudgeIdleWorkAgentsWithOpenBeads as tt, checkPendingTestDispatch as u, ciRetryMap as ut, cleanupOrphanedPlanningSessions as v, cleanupOrphanedReviewSessions as vt, handleAgentHeartbeatDeadEvent as w, checkMissingReviewStatuses as wt, getDeaconLogs as x, checkCompletedButUnsignaledReviews as xt, cleanupStaleAgentState as y, monitorReviewConvoySignals as yt, stopDeacon as z, getResourceStacks as zt };
|
|
30059
30171
|
|
|
30060
|
-
//# sourceMappingURL=deacon-
|
|
30172
|
+
//# sourceMappingURL=deacon-j3qSZ7--.js.map
|