@overdeck/desktop 0.45.15 → 0.45.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-electron/main.js +149 -158
- package/dist-electron/main.js.map +1 -1
- package/dist-electron/preload.js +17 -2
- package/dist-electron/preload.js.map +1 -1
- package/package.json +5 -4
- package/server/acceptance-criteria-aQFKQf-J.js +62 -0
- package/server/{advancing-selfheal-CSuZ31bB.js → advancing-selfheal-DgwQgm4D.js} +6 -5
- package/server/{agent-gc-D_DxfBHR.js → agent-gc-kpzxqT7P.js} +3 -3
- package/server/agent-state-C_6TG-Ad.js +3 -0
- package/server/{agent-state-service-C_2ZAQRP.js → agent-state-service-BUfovFfB.js} +1 -1
- package/server/{agent-state-service-BZkvgQf4.js → agent-state-service-nUD3qfob.js} +9 -52
- package/server/agents-BA15AQqo.js +3 -0
- package/server/{briefing-freshness-Kh5V8RTh.js → agents-BHBxr8c9.js} +5 -131
- package/server/{archive-planning-DkivCk1A.js → archive-planning-CzCW9Ifl.js} +5 -10
- package/server/{archive-planning-CTILQRnV.js → archive-planning-D-QsBufn.js} +1 -1
- package/server/{artifact-index-jobs-CmsvQ1ey.js → artifact-index-jobs-qqa51B2Z.js} +2 -2
- package/server/{backlog-auto-trigger-ueRaT8Dy.js → backlog-auto-trigger-B7Bi0bvY.js} +3 -3
- package/server/behavior-CWqNMqE5.js +10 -0
- package/server/briefing-freshness-DuxIE1yr.js +131 -0
- package/server/{checkpoint-manager-fu9oVsR-.js → checkpoint-manager-DF6hb9Jw.js} +3 -3
- package/server/{checkpoint-manager-CAFos8e1.js → checkpoint-manager-DixkLus7.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-DvhGi8P_.js → checkpoints-B1Z42tJE.js} +1 -1
- package/server/{checkpoints-1BqOlS4q.js → checkpoints-BiviJqei.js} +2 -2
- package/server/claude-hooks-provision-BeMGi4ty.js +3 -0
- package/server/{claude-hooks-provision-s_wdpeVj.js → claude-hooks-provision-Du_PkMsp.js} +132 -114
- package/server/{claude-permissions-CaWqysff.js → claude-permissions-BB6agcOZ.js} +2 -2
- package/server/{claude-settings-overlay-CcTf0xzG.js → claude-settings-overlay-CAq2oFSK.js} +2 -2
- package/server/{claude-settings-overlay-BbA4FbVI.js → claude-settings-overlay-DUWWLd6M.js} +1 -1
- package/server/cli-BFgrSWKV.js +3 -0
- package/server/{cli-BwCvCUBK.js → cli-C33xPZNm.js} +9 -9
- package/server/{cliproxy-C2xC-3vH.js → cliproxy-BQX1TL6N.js} +1 -1
- package/server/{cliproxy-BsoNNDAj.js → cliproxy-CGBA1GzA.js} +2 -2
- package/server/{close-issue-BleIwP3f.js → close-issue-DNv8npc1.js} +5 -5
- package/server/{closed-issue-reaper-BwUUvjEW.js → closed-issue-reaper-DrqgBJlr.js} +1 -1
- package/server/{closed-issue-reaper-mC5pujeb.js → closed-issue-reaper-LoMnnjtJ.js} +9 -9
- package/server/codex-DxLivxri.js +3 -0
- package/server/{behavior-Cpj03N4v.js → codex-parser-DboQnEXN.js} +3 -9
- package/server/{codex-DW60_5j2.js → codex-sgWVCGUd.js} +43 -17
- package/server/{config-BRNQJXhA.js → config-6MCHOZ2N.js} +1 -1
- package/server/{config-ZNnMpIlh.js → config-DfaUXr6r.js} +2 -2
- package/server/{config-yaml-Dcz-8uit.js → config-yaml-CqaAyn8y.js} +149 -80
- package/server/{conflict-gate-DTje2Ll7.js → conflict-gate-BF_zhcmb.js} +3 -3
- package/server/{conflict-gate-DGT8jCLp.js → conflict-gate-BubJprtD.js} +1 -1
- package/server/{context-layers-BdUCQ-cl.js → context-layers-BFrxfl0l.js} +17 -3
- package/server/{context-layers-ByOWUjUg.js → context-layers-DWL_8HhY.js} +2 -2
- package/server/{control-settings-DwkAeooY.js → control-settings-BguNQ1F_.js} +4 -4
- package/server/{conversation-compaction-WYQZUVDm.js → conversation-compaction-CRKAf2qP.js} +1 -1
- package/server/{conversation-compaction-OTYgd6eg.js → conversation-compaction-DxSXl0pT.js} +8 -8
- package/server/{conversation-service-C_kNZPLx.js → conversation-service-DzuY9qoH.js} +1 -1
- package/server/{conversation-service-BR1OgvxO.js → conversation-service-mFVFdDQK.js} +6 -5
- package/server/{conversations-DG2M8WnT.js → conversations-BX5aD-6F.js} +4 -4
- package/server/{conversations-izHvSoAR.js → conversations-BajHQ60c.js} +1 -1
- package/server/{cost-DQ2ajr_m.js → cost-BoqD1Pxz.js} +2 -2
- package/server/{cost-B2mj17iG.js → cost-DuZ5vlv-.js} +3 -3
- package/server/{cost-sync-gTayEuWP.js → cost-sync-BYnmnMkY.js} +3 -3
- package/server/{dag-CqTehWpY.js → dag-C6kYyF17.js} +7 -243
- package/server/{dangerous-git-ops-DDWQlPC3.js → dangerous-git-ops-q5OPtXMd.js} +1 -1
- package/server/dashboard-db-worker.js +6 -6
- package/server/{deacon-BqW9HMew.js → deacon-CwCiNuEZ.js} +3 -3
- package/server/{deacon-DrKDBeJL.js → deacon-Dru5onpk.js} +258 -167
- package/server/{deacon-nudge-log-D1wEK6zF.js → deacon-nudge-log-ilDfxrhK.js} +1 -1
- package/server/{deacon-swarm-CO_A7xyd.js → deacon-swarm-BPmBmSoU.js} +298 -72
- package/server/deacon-swarm-CKyGJng1.js +2 -0
- package/server/deacon.js +14 -7
- package/server/{devcontainer-renderer-BQolp_qZ.js → devcontainer-renderer-BqGNCzvN.js} +3 -3
- package/server/{dist-Bc32rWJB.js → dist-BwlEiLCU.js} +1 -1
- package/server/dist-Bx4KkgYL.js +3 -0
- package/server/{dist-src-Byxt1ifL.js → dist-src-BE0Denfs.js} +1 -1
- package/server/{docker-s-esqZ__.js → docker-CNjXS72x.js} +2 -2
- package/server/{ensure-devcontainer-DA4-jF6R.js → ensure-devcontainer-5e9xOve4.js} +4 -4
- package/server/{ensure-devcontainer-pUVaT0h3.js → ensure-devcontainer-C6gyUQdE.js} +1 -1
- package/server/{esm-shims-CJHy8CZY.js → esm-shims-Cso7IGBC.js} +1 -1
- package/server/{event-store-CcJAhKCl.js → event-store-D9UhQyMS.js} +1 -1
- package/server/{event-store-DRte2Rwt.js → event-store-KZnWUKWh.js} +3 -3
- package/server/{events-Bej1w_k8.js → events-2eFUPdqz.js} +3 -3
- package/server/{events-CtsLScn8.js → events-BYbvqZky.js} +1 -1
- package/server/{factory-FN727tWr.js → factory-BtaRsHFC.js} +20 -17
- package/server/{feature-registry-population-ie-yBcQC.js → feature-registry-population-Ca2UaV0U.js} +4 -4
- package/server/{feature-registry-storage-CkZTFSsn.js → feature-registry-storage-DaP-bQxO.js} +2 -2
- package/server/{features-Dtm9ABuz.js → features-DqvaoQoa.js} +2 -2
- package/server/{feedback-target-BYtpyt1i.js → feedback-target-BXWdOiYI.js} +9 -7
- package/server/{feedback-target-DVJQDiE4.js → feedback-target-BblmMe9P.js} +1 -1
- package/server/{feedback-writer-DOUhyIW2.js → feedback-writer-CULeOOY4.js} +1 -1
- package/server/{feedback-writer-fdE1BzeL.js → feedback-writer-Dn8o9ZyE.js} +4 -4
- package/server/{flywheel-Bi82iiNl.js → flywheel-BUWdcfhq.js} +1 -1
- package/server/{flywheel-Bv3wv2S6.js → flywheel-CqkO3cDj.js} +15 -28
- package/server/{flywheel-CUErLAyN.js → flywheel-D9r1mw2U.js} +13 -13
- package/server/{flywheel-merge-order-DXjeBnJ1.js → flywheel-merge-order-LDzQDwSg.js} +1 -1
- package/server/{flywheel-merge-order-BaEN3iyN.js → flywheel-merge-order-VtjUweEb.js} +7 -7
- package/server/forge-DJy3Zx4s.js +2 -0
- package/server/{forge-ButEdJ31.js → forge-wEollMCi.js} +22 -12
- package/server/{from-CbtTxftl.js → from-B2tOYhYV.js} +1 -1
- package/server/{fts-db-CBgBLZcL.js → fts-db-Bgzn2RO7.js} +2 -2
- package/server/{fts-operations-CI9Xuo_1.js → fts-operations-Bj8yutnR.js} +2 -2
- package/server/{git-utils-ClfpP47N.js → git-utils-GxlL0tmt.js} +2 -2
- package/server/{git-utils-BCLRWQ-y.js → git-utils-q8jNoBts.js} +1 -1
- package/server/{github-app-DRD2woO0.js → github-app-BrYwK_Gb.js} +1 -1
- package/server/{github-app-DscZ0_B6.js → github-app-tUbb8Ldr.js} +8 -3
- package/server/{github-client-DpiZnxGH.js → github-client-BwBU41jK.js} +3 -3
- package/server/{github-client-iFRw8f7e.js → github-client-D6CNsftm.js} +1 -1
- package/server/{github-pr-lookup-D-EBexxC.js → github-pr-lookup-BS5PqkJb.js} +2 -2
- package/server/{harness-resolve-iMjyNUJ2.js → harness-resolve-Dx8hUsvC.js} +3 -3
- package/server/{health-events-CRdxDFN2.js → health-events-2DLp-5Xp.js} +2 -2
- package/server/{health-events-B_WsQyYm.js → health-events-B0mj6Iae.js} +1 -1
- package/server/{hooks-C1ScyVxP.js → hooks-BDcQJDUe.js} +1 -1
- package/server/{hooks-C9b7Vqpw.js → hooks-BS_JrvYP.js} +3 -3
- package/server/hume-B4seN95Y.js +3 -0
- package/server/{hume-TQ5pvOZ_.js → hume-BRhNKyXQ.js} +2 -2
- package/server/{idle-stack-reaper-B1kG7B_X.js → idle-stack-reaper-BCITXNW5.js} +2 -2
- package/server/{idle-stack-reaper-iFVOAoJy.js → idle-stack-reaper-C1ymihno.js} +1 -1
- package/server/{infra-bpq1MHKU.js → infra-_Kx1m9pm.js} +9 -4
- package/server/{injection-BLWfwTVZ.js → injection-Bvhyg_MV.js} +1 -1
- package/server/{injection-DJqWld1v.js → injection-CCaYkofq.js} +7 -7
- package/server/{inspect-agent-DytCsltn.js → inspect-agent-BqyZ4pCo.js} +35 -67
- package/server/inspect-agent-DCJQm9Wu.js +2 -0
- package/server/{internal-token-CjlhdufS.js → internal-token-Cl-1IxaE.js} +2 -2
- package/server/{internal-token-CCaWaTwE.js → internal-token-D-t28de5.js} +1 -1
- package/server/{io-BiQ2Cs3k.js → io-DkC4sFSy.js} +42 -56
- package/server/{issue-closed-FApNiOOs.js → issue-closed-Cpl4VDUM.js} +41 -6
- package/server/{issue-lifecycle-C-K53ASY.js → issue-lifecycle-CFR8TJ22.js} +22 -37
- package/server/{issue-lifecycle-BkFWNjlD.js → issue-lifecycle-YNTy3OT3.js} +1 -1
- package/server/{issue-service-singleton-bG1WdSdQ.js → issue-service-singleton-D81mCts_.js} +1 -1
- package/server/{issue-service-singleton-CuHGpJJP.js → issue-service-singleton-ldvUUXi3.js} +29 -29
- package/server/{issues-CwQMphDH.js → issues-DIEHt9sq.js} +2 -2
- package/server/{jsonl-parser-dNIjHgym.js → jsonl-parser-Cd5jIqh7.js} +3 -3
- package/server/{label-cleanup-DYvAZknd.js → label-cleanup-Btny6Gyo.js} +3 -3
- package/server/{state-home-CRowbXqU.js → launcher-generator-BXLM9f4b.js} +7 -127
- package/server/{layers-CD6FysRU.js → layers-gCJlK62m.js} +2 -2
- package/server/lifecycle-D7aQUnTO.js +12 -0
- package/server/{lifecycle-io-C_Wu0_i-.js → lifecycle-io-DQBF-GHO.js} +1 -1
- package/server/{lifecycle-io-CeYxP3cE.js → lifecycle-io-FfPUtz-y.js} +36 -47
- package/server/{linear-client-EtVyblVz.js → linear-client-CDH2D6Qy.js} +3 -3
- package/server/{linear-client-4qoKnuQu.js → linear-client-WrYrUIAH.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-7rqkTUm2.js → merge-BsDgUxFz.js} +3 -3
- package/server/{merge-brm721Es.js → merge-Dervs4BF.js} +1 -1
- package/server/{merge-agent-4Zhlgvqp.js → merge-agent-D6DNhe9j.js} +64 -51
- package/server/{merge-agent-36wfYm2u.js → merge-agent-DMQTJMP0.js} +1 -1
- package/server/{merge-batch-itfnwdsT.js → merge-batch-Bv6Z5K2H.js} +1 -1
- package/server/{merge-blockers-Bto_Oe_o.js → merge-blockers-WWWi6Ur2.js} +2 -2
- package/server/merge-ops-h9OCnIVz.js +2 -0
- package/server/{merge-rebase-Czfqfe4q.js → merge-rebase-Czth9ggm.js} +2 -2
- package/server/{merge-set-BIkGQL9j.js → merge-set-DNc4zBqd.js} +3 -3
- package/server/{merge-set-G1RHcu3D.js → merge-set-vuE3MEVt.js} +1 -1
- package/server/{merge-sync-B43Dybea.js → merge-sync-B2KSk54U.js} +2 -2
- package/server/{merge-sync-DIrmlZUr.js → merge-sync-B9nHdUGx.js} +1 -1
- package/server/{merge-train-DGqVuNZV.js → merge-train-DJgr81tF.js} +3 -3
- package/server/{merge-train-deps-q15XLnAS.js → merge-train-deps-B2OWS0k9.js} +4 -4
- package/server/{merge-verification-Cqfxx6bE.js → merge-verification-BBIXUEqa.js} +4 -4
- package/server/{multipart-parser-CiPxxfUH.js → multipart-parser-9DhuAkPd.js} +2 -2
- package/server/{no-resume-mode-yrPEQ_pC.js → no-resume-mode-Gh5R_YLF.js} +1 -1
- package/server/node_modules/.package-lock.json +11 -11
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
- package/server/node_modules/toml/README.md +54 -0
- package/server/node_modules/toml/index.d.ts +42 -1
- package/server/node_modules/toml/index.js +3 -3
- package/server/node_modules/toml/lib/compiler.js +35 -3
- package/server/node_modules/toml/lib/parser.js +224 -143
- package/server/node_modules/toml/package.json +3 -1
- package/server/node_modules/ws/lib/receiver.js +15 -32
- package/server/node_modules/ws/lib/websocket-server.js +4 -4
- package/server/node_modules/ws/lib/websocket.js +4 -4
- package/server/node_modules/ws/package.json +5 -1
- package/server/{orphan-proposed-reconciler-BWWHn4Lr.js → orphan-proposed-reconciler-B8H41C4a.js} +14 -24
- package/server/{orphan-proposed-reconciler-DAD9FJtQ.js → orphan-proposed-reconciler-DbTmT7qy.js} +1 -1
- package/server/package-lock.json +12 -12
- package/server/package.json +1 -1
- package/server/{pan-dir-Bj7Hy8iu.js → pan-dir-BTw4MdSe.js} +4 -4
- package/server/{paths-C9DkhIOT.js → paths-Btkc8mzp.js} +2 -2
- package/server/{pickup-CKRuGDsB.js → pickup-BtvRBbvI.js} +1 -1
- package/server/{pipeline-notifier-BkKbQ8ji.js → pipeline-notifier-3frIvSi3.js} +1 -1
- package/server/{pipeline-notifier-CAurUste.js → pipeline-notifier-DTd19f18.js} +2 -2
- package/server/{project-pipelines-BRWaGmI4.js → project-pipelines-B95fcAek.js} +2 -2
- package/server/projects-Dc9aoVoG.js +3 -0
- package/server/{prompts-DfI5qbTW.js → prompts-CIVmjHxn.js} +2 -2
- package/server/{providers-D-5txBRc.js → providers-BLLk5IIb.js} +1 -1
- package/server/{providers-CWDXoaMA.js → providers-C-yWibCk.js} +7 -7
- package/server/public/assets/chunk-BO2N2NFS-DzKZyoKY.js +103 -0
- package/server/public/assets/{diagram-OG6HWLK6-Avtvq2qI.js → diagram-OG6HWLK6-Cx8mWUb8.js} +1 -1
- package/server/public/assets/{dist-BEHQuasD.js → dist-BqccLhaw.js} +3 -3
- package/server/public/assets/{dist-BvmY-qb1.js → dist-rC3nAs_O.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-7KhCd0fH.js → ganttDiagram-6RSMTGT7-DLYPLf5T.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-iQoBMTf0.js → highlighted-body-OFNGDK62-D4DqixbV.js} +1 -1
- package/server/public/assets/index-CPcysUHk.js +796 -0
- package/server/public/assets/index-H5M0yhM4.css +1 -0
- package/server/public/assets/{linear-CiJHW9g5.js → linear-yqcXkDfj.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-CWdZ_heB.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-BOhmvUhW.js → pieDiagram-4H26LBE5-DhraIOaV.js} +1 -1
- package/server/public/assets/{prod-DmLBBqat.js → prod-DKUunUdN.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-Cjku660G.js → quadrantDiagram-W4KKPZXB-DPiRcToa.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-D52w5oPh.js → sankeyDiagram-5OEKKPKP-3An5HNkZ.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-BTO07_Iv.js → xychartDiagram-2RQKCTM6-lbEOjfqQ.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-CKZPWhjD.js → pull-requests-D7AL5woD.js} +1 -1
- package/server/{pull-requests-Bmre-Xlz.js → pull-requests-NDDNtqNq.js} +3 -3
- package/server/{agents-CsOzAmRg.js → queries-C0LCGG21.js} +743 -399
- package/server/{rally-BBd9tQ__.js → rally-4oKvnxLG.js} +3 -3
- package/server/rally-DF5a3ioP.js +3 -0
- package/server/{rally-api-DxZFObI_.js → rally-api-41tT6ikZ.js} +2 -2
- package/server/{rally-api-DDc85HIz.js → rally-api-BsaQ8Vnz.js} +1 -1
- package/server/{rally-client-DvvLiAQP.js → rally-client-Bo4hNcCZ.js} +5 -5
- package/server/{rally-client-BADHn0m_.js → rally-client-b5PT1x5L.js} +1 -1
- package/server/{reap-terminal-sessions-D_xvy-Mk.js → reap-terminal-sessions-BR39qflC.js} +1 -1
- package/server/{reap-terminal-sessions-D6JDJsqF.js → reap-terminal-sessions-CFkuquQj.js} +1 -1
- package/server/{rebuild-stack-GOsWqXi3.js → rebuild-stack-C7JPUom6.js} +1 -1
- package/server/{rebuild-stack-D19i080j.js → rebuild-stack-Ddv6W017.js} +6 -6
- package/server/{reconstruct-cache-lQrG4xGg.js → reconstruct-cache-Gqhm---K.js} +6 -6
- package/server/record-DLOqfbkI.js +3 -0
- package/server/record-update-BltEmPge.js +168 -0
- package/server/record-update-CDp7aTaT.js +3 -0
- package/server/recovery-trip-Cn7KJVkS.js +44 -0
- package/server/{release-engine-DxcMWRuK.js → release-engine-BYzmIBf9.js} +5 -5
- package/server/{release-set-BYsgX7o6.js → release-set-7pnxFOWR.js} +3 -3
- package/server/{remote-DmeL21dF.js → remote-Cvu4CSDk.js} +3 -3
- package/server/{remote-agents-BfQBE6MN.js → remote-agents-C2C6z9tj.js} +6 -33
- package/server/{remote-agents-DlvbzO7m.js → remote-agents-DYY5fFpd.js} +1 -1
- package/server/{remote-completion-BgkiSQmx.js → remote-completion-2Kb4IDg_.js} +13 -13
- package/server/{remote-8W2Yhygw.js → remote-rN0ecjHE.js} +3 -3
- package/server/resume-BFLl-yLn.js +3 -0
- package/server/{review-agent-D025Wt7w.js → review-agent-BZvk0N5G.js} +31 -23
- package/server/{review-agent-Rub0OpZc.js → review-agent-CpSHLzed.js} +1 -1
- package/server/{review-artifacts-CX951jTU.js → review-artifacts-PCo53YMn.js} +5 -19
- package/server/{review-context-DGGGR_w5.js → review-context-M7QtJlJq.js} +8 -8
- package/server/{review-monitor-0_qqMcnS.js → review-monitor-BLC5mTTg.js} +2 -2
- package/server/{review-status-Br6lAFGO.js → review-status-77N3PoZr.js} +1 -1
- package/server/{review-status-4qqLkRMu.js → review-status-DANr0t-v.js} +33 -59
- package/server/{review-status-enrichment-Cr8m3uVL.js → review-status-enrichment-DwOg4UfL.js} +3 -3
- package/server/{review-status-sync-D3KUhsdA.js → review-status-sync-Bd08OOFA.js} +1 -1
- package/server/{review-status-sync-OC-l1lNt.js → review-status-sync-BjTUJ5fx.js} +2 -2
- package/server/{review-verdict-feedback-YOzmsq9G.js → review-verdict-feedback-BsFLjN_6.js} +1 -1
- package/server/{review-verdict-feedback-DrWMuRaj.js → review-verdict-feedback-CBf-J_wS.js} +8 -8
- package/server/{rollup-CnxbwaLH.js → rollup-Bu0f2EyN.js} +8 -8
- package/server/{rollup-DmazRY0j.js → rollup-DTCCdEy4.js} +1 -1
- package/server/{scanner-DE1MqAaF.js → scanner-BlZ2vB7j.js} +7 -7
- package/server/{sequence-io-C0uoqfGx.js → sequence-io-ylyDtz2J.js} +4 -4
- package/server/{sequencer-agent-i-b2u4SJ.js → sequencer-agent-DsWQ-87H.js} +6 -17
- package/server/server.js +5670 -6392
- package/server/{service-D0_gh2tl.js → service-CLVBC_1Y.js} +116 -90
- package/server/{session-fork-DZ12vipL.js → session-fork-DlEIAhRy.js} +2 -2
- package/server/session-history-bnOFKMwf.js +168 -0
- package/server/settings-CP3GGon2.js +2 -0
- package/server/{settings-ByqjPtFO.js → settings-Cqa-8nyj.js} +2 -2
- package/server/{settings-DCC4BAqj.js → settings-gJrdLZy2.js} +3 -3
- package/server/{shadow-engineering-BhnmtW5m.js → shadow-engineering-fq1YEKV3.js} +3 -3
- package/server/{shadow-state-ByXZehsy.js → shadow-state-BqeFAygK.js} +1 -1
- package/server/{shadow-state-CKm8xWX9.js → shadow-state-RptE9Cau.js} +2 -2
- package/server/shadow-utils-BMWr5tRT.js +39 -0
- package/server/{ship-log-DE_0Cv_i.js → ship-log-BRQQi2lU.js} +1 -1
- package/server/{smart-compaction-D5Zen3AA.js → smart-compaction-CmoXpjeU.js} +7 -7
- package/server/{smart-compaction-h4_ca6Uk.js → smart-compaction-DldUel4B.js} +1 -1
- package/server/{spawn-planning-session-Dueit4WX.js → spawn-planning-session-CoS6LTc6.js} +16 -16
- package/server/{spawn-planning-session-Bgi7Ub02.js → spawn-planning-session-DT2tSMxo.js} +1 -1
- package/server/{specialist-completion-BZ8M-WZ0.js → specialist-completion-pJtESo7m.js} +1 -1
- package/server/{specialist-context-BMq83C58.js → specialist-context-CspI4Eog.js} +5 -5
- package/server/{specialist-handoff-logger-BxX1YefH.js → specialist-handoff-logger-Duz9RGvk.js} +2 -2
- package/server/{specialist-logs-BWZYcJ6P.js → specialist-logs-DtSkPJZK.js} +3 -3
- package/server/{specialists-ZkW4Mb7U.js → specialists-CywEMwxk.js} +1 -1
- package/server/{specialists-8ZAguXef.js → specialists-D9-dMUtI.js} +1 -1
- package/server/{specialists-BudKrjOu.js → specialists-Dax7tqXC.js} +1817 -560
- package/server/{specialists-DrPrC9Y9.js → specialists-GF42OOqd.js} +18 -18
- package/server/specs-VwcFtEDi.js +3 -0
- package/server/{src-DHn4Rd2F.js → src-By3D85Ry.js} +77 -1
- package/server/{src-Dv6L03vW.js → src-CqyFg52C.js} +5 -5
- package/server/{src-DNUUqkec.js → src-DhxM-eCb.js} +6 -6
- package/server/{stack-health-Dclm7_tu.js → stack-health-BsEVrJZ6.js} +1 -1
- package/server/{stack-health-DxsTx7II.js → stack-health-C-SnpRHh.js} +2 -2
- package/server/stale-task-claims-vTxmRzLi.js +69 -0
- package/server/state-home-Bur1y4oH.js +213 -0
- package/server/{state-mapping-BvAgFK8n.js → state-mapping-Ci0pkac4.js} +1 -1
- package/server/state-migrate-D3VveYfO.js +362 -0
- package/server/{stuck-remediation-CFWUP8_I.js → stuck-remediation-B699-p8v.js} +63 -46
- package/server/{stuck-remediation-CLHd-lrF.js → stuck-remediation-CaFYYTQW.js} +1 -1
- package/server/{summary-fork-CKc01Our.js → summary-fork-BxnF8Xh0.js} +2 -2
- package/server/{summary-fork-CtCwBJ2Z.js → summary-fork-COqYpVa3.js} +8 -8
- package/server/supervisor/{paths-3R6b989k.js → paths-Bk6hJRH9.js} +4 -3
- package/server/supervisor/pty-supervisor.js +2 -2
- package/server/supervisor/{pty-token-CScQ32Rj.js → pty-token-BZS5GYdG.js} +2 -2
- package/server/supervisor-eWAAmXKu.js +2 -0
- package/server/{supervisor-BA5D72Qa.js → supervisor-liMgIPDF.js} +2 -2
- package/server/{swarm-readiness-CL5sM9B1.js → swarm-readiness-sXB1vhzo.js} +3 -3
- package/server/{system-prerequisites-DmFSXIE5.js → system-prerequisites-Bz6KdkFJ.js} +1 -13
- package/server/{teardown-workspace-DWmFJzTw.js → teardown-workspace-DvzqnmUF.js} +14 -71
- package/server/{test-agent-queue-DjsQoV5X.js → test-agent-queue-hAU1Ah08.js} +6 -6
- package/server/{test-verdict-BSqsQp3G.js → test-verdict-CRsPpByy.js} +1 -1
- package/server/{test-verdict-D1AmZ2c0.js → test-verdict-CXMLATGc.js} +1 -1
- package/server/{tldr-daemon-C-MGomL8.js → tldr-daemon-Bam7Xhoo.js} +2 -2
- package/server/{tldr-daemon-DD9rI5gA.js → tldr-daemon-DhGwd88s.js} +1 -1
- package/server/tmux-C-rgxRDA.js +3 -0
- package/server/{tmux-C_d-lSIq.js → tmux-U55cNGFG.js} +92 -4
- package/server/{token-DfBf1bsd.js → token-Dsa-i36o.js} +2 -2
- package/server/{token-util-CROoF5ic.js → token-util-BWNpH96m.js} +1 -1
- package/server/token-util-DRt0j2nQ.js +3 -0
- package/server/{tracker-config-CNODpd11.js → tracker-config-OkdbaUCm.js} +2 -2
- package/server/{tracker-utils-Ch2_5GGf.js → tracker-utils-CghXMF3q.js} +2 -2
- package/server/{tracker-utils-B9ZoVA9b.js → tracker-utils-DdzUiPNU.js} +1 -1
- package/server/{traefik-connect-BF4x_LUQ.js → traefik-connect-CZYB3dlm.js} +1 -1
- package/server/{tunnel-r_5nHAI6.js → tunnel-D1YxesBL.js} +3 -3
- package/server/{tunnel-YD80_IHr.js → tunnel-DjlzgTl3.js} +1 -1
- package/server/typed-errors-CH4roFIj.js +3 -0
- package/server/{typed-errors-BEJhbjJg.js → typed-errors-n_Tnb4Fh.js} +3 -4
- package/server/{types-CE1m_daD.js → types-DOjWNv3Z.js} +1 -1
- package/server/{types-33JEP4LZ.js → types-DXBMm4mX.js} +1 -1
- package/server/{uat-train-DDI00aqD.js → uat-train-CaaWs9Rp.js} +1 -1
- package/server/{uat-train-DjkFWXge.js → uat-train-CqN34zFx.js} +24 -25
- package/server/{validation-DUTiJnyz.js → validation-4-z2Cw4z.js} +70 -23
- package/server/validation-DpTNakM6.js +3 -0
- package/server/verification-artifact-DK1xb1zG.js +56 -0
- package/server/verification-artifact-JD_edpZ9.js +2 -0
- package/server/{verification-runner-inLgeQux.js → verification-runner-BjHN80pJ.js} +338 -58
- package/server/verification-runner-ShYu5Ph3.js +2 -0
- package/server/{work-agent-prompt-fZljjA1_.js → work-agent-prompt-BiJ43Der.js} +12 -88
- package/server/workflows-B4C3lY9E.js +2 -0
- package/server/{workflows-oBnJ7Tm0.js → workflows-DkTotz_m.js} +17 -24
- package/server/{workspace-CNuW2j41.js → workspace-CuN0ev4Z.js} +3 -3
- package/server/{workspace-B2WOW9Hw.js → workspace-DQ4vVivd.js} +1 -1
- package/server/{workspace-config-CBgMGhWs.js → workspace-config-C77NKnsV.js} +1 -1
- package/server/{workspace-manager-DjUAJCSs.js → workspace-manager-B1mYn0lN.js} +1 -1
- package/server/{workspace-manager-CB-R07R3.js → workspace-manager-Beeo2aKF.js} +23 -48
- package/server/{workspace-metadata-9Nn5kgRl.js → workspace-metadata-BZC5BmoP.js} +2 -2
- package/server/{workspace-metadata-Fd58uUQG.js → workspace-metadata-Cy7_ZACL.js} +1 -1
- package/server/{workspaces-BjWXntty.js → workspaces-CGuzW1Ia.js} +191 -153
- package/sync-sources/hooks/ask-user-question-hook +7 -1
- package/sync-sources/hooks/codex-notify-hook +64 -8
- package/sync-sources/hooks/record-cost-event.js +1109 -36
- package/sync-sources/hooks/record-cost-event.js.map +1 -1
- package/sync-sources/hooks/statusline.sh +2 -2
- package/sync-sources/hooks/work-agent-stop-hook +1 -2
- package/server/acceptance-criteria-DHZk2ceV.js +0 -33
- package/server/agent-runtime-mirror-DrWxopNA.js +0 -37
- package/server/agent-state-EP2QFV9n.js +0 -3
- package/server/agents-DCvyTXNU.js +0 -3
- package/server/auto-commit-QAfsu3Sb.js +0 -3
- package/server/bd-process-lock-D3S4T4o-.js +0 -390
- package/server/beads-BGGxrkZ5.js +0 -649
- package/server/beads-CYsLiyIM.js +0 -2
- package/server/beads-query-B1DlJVp9.js +0 -95
- package/server/beads-restore-CyygSmmn.js +0 -23
- package/server/cli-ClIQwgMI.js +0 -3
- package/server/codex-B7DTpwEw.js +0 -3
- package/server/compact-beads-CK_hHEnB.js +0 -3
- package/server/compact-beads-DKL54y6j.js +0 -94
- package/server/deacon-swarm-BY5hKNaU.js +0 -2
- package/server/dist-DGTwcZhI.js +0 -3
- package/server/export-Dx_qJ3h8.js +0 -87
- package/server/forge-XlDgPQWs.js +0 -2
- package/server/hume-K1pi8jC4.js +0 -3
- package/server/inspect-agent-477VxQim.js +0 -2
- package/server/lifecycle-C_73gi-C.js +0 -14
- package/server/merge-ops-PzqsW69V.js +0 -2
- package/server/projects-KJ94e50I.js +0 -3
- package/server/public/assets/chunk-BO2N2NFS-ClukPsZQ.js +0 -103
- package/server/public/assets/index-DUFDmvmH.css +0 -1
- package/server/public/assets/index-DnTZ2QeN.js +0 -796
- package/server/public/assets/mermaid-GHXKKRXX-DZJOwgBG.js +0 -1
- package/server/rally-Dc2Wnxw2.js +0 -3
- package/server/record-pyB6VA32.js +0 -3
- package/server/recovery-trip-Dfh1tNHn.js +0 -98
- package/server/resolver-dTpSSzaH.js +0 -158
- package/server/resume-DhcIqsTm.js +0 -3
- package/server/settings-yydgaqhv.js +0 -2
- package/server/specs-DwoAEGrW.js +0 -3
- package/server/supervisor-DHjumXlL.js +0 -2
- package/server/tmux-x291Gjjb.js +0 -3
- package/server/token-util-xNaV-00f.js +0 -3
- package/server/tracker-config-DItsdelv.js +0 -3
- package/server/typed-errors-DSPn_xWP.js +0 -3
- package/server/validation-ict8hnXk.js +0 -3
- package/server/verification-runner-ATaLbpr5.js +0 -2
- package/server/workflows-tU7KKxQi.js +0 -2
- package/server/writer-CQMGzEkw.js +0 -3
- package/server/writer-fe1-8iGc.js +0 -251
|
@@ -1,38 +1,41 @@
|
|
|
1
1
|
import { i as __require, t as __commonJSMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import {
|
|
2
|
+
import { $r as sessionFilePath, Cr as AGENTS_DIR, En as getIssuePrefix, Fn as init_projects, Mr as OVERDECK_HOME, Nt as readIssueRecordForWorkspaceSync, Pt as readIssueRecordSync, Sr as init_errors, Yr as init_paths, cn as init_state_plane, f as loadConfigSync, in as reconcileStatePlaneDrift, kn as getProjectSync, kt as init_record, nn as init_auto_commit, on as STATE_PLANE_PATHS, qn as resolveProjectFromIssueSync, s as init_load, sn as getMainDivergence, un as isStatePlanePath, zn as listProjectsSync } from "./config-yaml-CqaAyn8y.js";
|
|
3
3
|
import { a as init_activity_logger, n as emitActivityEntrySync, r as emitActivityTtsSync } from "./activity-logger-pcbf-e30.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import { i as
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import { n as
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import { n as
|
|
27
|
-
import {
|
|
28
|
-
import { t as
|
|
29
|
-
import { n as
|
|
30
|
-
import {
|
|
31
|
-
import {
|
|
32
|
-
import { n as
|
|
33
|
-
import {
|
|
34
|
-
import { n as
|
|
35
|
-
import {
|
|
4
|
+
import { n as updateIssueRecord, t as init_record_update } from "./record-update-BltEmPge.js";
|
|
5
|
+
import { A as listSessions, D as listPaneValues, F as sendKeys, I as sendKeysAsync, R as sessionExists, S as init_tmux, T as killSession, i as capturePane, k as listSessionNames, w as isPaneDead, z as sessionExistsSync } from "./tmux-U55cNGFG.js";
|
|
6
|
+
import { a as init_event_store, i as initEventStore } from "./event-store-KZnWUKWh.js";
|
|
7
|
+
import { S as needsReviewDispatch, c as init_review_status, h as reviewGatesPassedSync, s as getReviewStatusSync, u as loadReviewStatuses, x as init_review_dispatch_decision, y as setReviewStatusSync } from "./review-status-DANr0t-v.js";
|
|
8
|
+
import { c as listAllAgentsSync, d as isTerminalIssueStage, o as init_agents, u as getIssueStageSync } from "./agents-BHBxr8c9.js";
|
|
9
|
+
import { Dt as captureTranscriptUserRecordSnapshot, F as isContextOverflowTail, Fn as getAgentStateSync, In as init_agent_state, Jn as saveAgentState, M as resumeAgent, N as init_context_overflow, Nn as getAgentState, On as clearAgentTroubledSync, Ot as init_transcript_landing, Q as stopAgent, Qn as setAgentYieldedSync, Sr as paneShowsCodexAuthBurn, Vn as markAgentRunningState, Wn as recordAgentFailure, Yn as saveAgentStateSync, Z as init_termination, Zn as setAgentPausedSync, _n as buildDefaultResumeContinueMessage, _t as init_config, a as listRunningAgentsSync, at as init_concurrency, ct as resetPatrolDispatchBudget, dt as workResumeSlotsAvailable, et as countRunningAgents, gr as saveAgentRuntimeState, hr as init_runtime_state, i as listRunningAgents, it as getConcurrencyLimits, jn as getAgentDir, kn as clearYieldForResumeSync, lt as tryReserveAdvancingSlot, mr as getAgentRuntimeStateSync, mt as setCachedMemoryVerdict, n as init_queries, nt as describeRunningAgents, ot as releaseAdvancingSlot, pr as getAgentRuntimeState, pt as init_memory_verdict_cache, qn as resetAgentFailureCount, r as listAgentStates, s as init_agents$1, vt as loadCloisterConfig, wt as deliverInitialPromptWithRetry, xr as init_codex_auth, yr as applyCodexAuthBurnFlag, yt as loadCloisterConfigSync } from "./queries-C0LCGG21.js";
|
|
10
|
+
import { c as logDeaconEventSync, o as init_persistent_logger, s as logAgentLifecycleSync } from "./session-history-bnOFKMwf.js";
|
|
11
|
+
import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-CghXMF3q.js";
|
|
12
|
+
import { n as mapGitHubStateToCanonical, t as init_state_mapping } from "./state-mapping-Ci0pkac4.js";
|
|
13
|
+
import { c as init_review_status_sync, l as markWorkspaceStuck } from "./review-status-sync-BjTUJ5fx.js";
|
|
14
|
+
import { m as readWorkspacePlanSync, o as init_io } from "./io-DkC4sFSy.js";
|
|
15
|
+
import { f as init_config$1, m as loadConfigSync$1, p as loadConfig$1 } from "./config-DfaUXr6r.js";
|
|
16
|
+
import { T as stampBootReconciliation, h as setBootReconciliationDecision, l as isDeaconGloballyPaused, r as getBootReconciliationState, s as init_control_settings } from "./control-settings-BguNQ1F_.js";
|
|
17
|
+
import { c as init_docker_stats, s as DockerStatsCollector } from "./stack-health-C-SnpRHh.js";
|
|
18
|
+
import { l as init_dag, o as getDispatchableItems } from "./dag-C6kYyF17.js";
|
|
19
|
+
import { a as findRecreatedLegacyStatePaths, o as init_state_home } from "./state-home-Bur1y4oH.js";
|
|
20
|
+
import { a as isAgentIdleForNudge, t as checkStuckAgentRemediation } from "./stuck-remediation-B699-p8v.js";
|
|
21
|
+
import { n as __filename, r as init_esm_shims } from "./esm-shims-Cso7IGBC.js";
|
|
22
|
+
import { t as recordDeaconNudge } from "./deacon-nudge-log-ilDfxrhK.js";
|
|
23
|
+
import { n as init_review_monitor, t as REVIEW_SUB_ROLES } from "./review-monitor-BLC5mTTg.js";
|
|
24
|
+
import { O as init_specialists, R as parseReviewerSessionName, T as getTmuxSessionName, d as getAllProjectSpecialistStatuses } from "./specialists-GF42OOqd.js";
|
|
25
|
+
import { a as inferBranchFromWorkspace, i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-CzCW9Ifl.js";
|
|
26
|
+
import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-Cpl4VDUM.js";
|
|
27
|
+
import { n as shouldSkipDispatchAsMerged, t as init_merge_verification } from "./merge-verification-BBIXUEqa.js";
|
|
28
|
+
import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-CBf-J_wS.js";
|
|
29
|
+
import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-CZYB3dlm.js";
|
|
30
|
+
import { g as decideAgentAutonomousRedrive, r as coordinateSwarmSlots, y as listFeatureWorkspaces } from "./deacon-swarm-BPmBmSoU.js";
|
|
31
|
+
import { t as recordRecoveryFailure } from "./recovery-trip-Cn7KJVkS.js";
|
|
32
|
+
import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-Gh5R_YLF.js";
|
|
33
|
+
import { n as reconcileClosedIssueAgents } from "./closed-issue-reaper-LoMnnjtJ.js";
|
|
34
|
+
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-BtvRBbvI.js";
|
|
35
|
+
import { n as pruneTerminalStoppedAgents } from "./agent-gc-kpzxqT7P.js";
|
|
36
|
+
import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-B8H41C4a.js";
|
|
37
|
+
import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-BCITXNW5.js";
|
|
38
|
+
import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-CXMLATGc.js";
|
|
36
39
|
import { createRequire } from "node:module";
|
|
37
40
|
import { join } from "node:path";
|
|
38
41
|
import { Effect } from "effect";
|
|
@@ -21636,20 +21639,21 @@ init_activity_logger();
|
|
|
21636
21639
|
init_projects();
|
|
21637
21640
|
init_tmux();
|
|
21638
21641
|
init_agents();
|
|
21642
|
+
init_persistent_logger();
|
|
21639
21643
|
init_review_status_sync();
|
|
21640
21644
|
init_review_dispatch_decision();
|
|
21641
21645
|
init_review_status();
|
|
21646
|
+
init_codex_auth();
|
|
21642
21647
|
init_runtime_state();
|
|
21643
|
-
init_persistent_logger();
|
|
21644
21648
|
init_agent_state();
|
|
21645
21649
|
init_transcript_landing();
|
|
21646
21650
|
init_config();
|
|
21647
21651
|
init_memory_verdict_cache();
|
|
21648
21652
|
init_concurrency();
|
|
21649
|
-
init_queries();
|
|
21650
21653
|
init_termination();
|
|
21651
21654
|
init_context_overflow();
|
|
21652
21655
|
init_agents$1();
|
|
21656
|
+
init_queries();
|
|
21653
21657
|
new (require_undici()).EnvHttpProxyAgent();
|
|
21654
21658
|
//#endregion
|
|
21655
21659
|
//#region ../../lib/smee.ts
|
|
@@ -22503,8 +22507,8 @@ init_tmux();
|
|
|
22503
22507
|
* forever for a verdict that will not arrive.
|
|
22504
22508
|
*/
|
|
22505
22509
|
const INSPECT_TIMEOUT_MS = 12 * 6e4;
|
|
22506
|
-
function inspectSessionName(issueId,
|
|
22507
|
-
return `inspect-${issueId.toLowerCase()}-${
|
|
22510
|
+
function inspectSessionName(issueId, itemId) {
|
|
22511
|
+
return `inspect-${issueId.toLowerCase()}-${itemId.replace(/[^a-z0-9-]/gi, "-").toLowerCase().slice(0, 24)}`;
|
|
22508
22512
|
}
|
|
22509
22513
|
function formatInspectElapsed(elapsedMs) {
|
|
22510
22514
|
return `${Math.max(0, Math.round(elapsedMs / 6e4))}m`;
|
|
@@ -22516,16 +22520,16 @@ async function checkInspectAgentTimeouts(now = /* @__PURE__ */ new Date()) {
|
|
|
22516
22520
|
for (const [rawIssueId, status] of Object.entries(statuses)) {
|
|
22517
22521
|
if (status.inspectStatus !== "inspecting") continue;
|
|
22518
22522
|
const issueId = rawIssueId.toUpperCase();
|
|
22519
|
-
const
|
|
22523
|
+
const itemId = status.inspectBeadId;
|
|
22520
22524
|
const startedMs = status.inspectStartedAt ? Date.parse(status.inspectStartedAt) : NaN;
|
|
22521
22525
|
const hasStartedAt = Number.isFinite(startedMs);
|
|
22522
22526
|
const elapsedMs = hasStartedAt ? nowMs - startedMs : Number.POSITIVE_INFINITY;
|
|
22523
22527
|
const timedOut = elapsedMs > INSPECT_TIMEOUT_MS;
|
|
22524
|
-
const sessionName =
|
|
22528
|
+
const sessionName = itemId ? inspectSessionName(issueId, itemId) : void 0;
|
|
22525
22529
|
const sessionAlive = sessionName ? await Effect.runPromise(sessionExists(sessionName)).catch(() => false) : false;
|
|
22526
22530
|
if (!timedOut && !(!!sessionName && !sessionAlive)) continue;
|
|
22527
22531
|
const reason = !hasStartedAt ? "missing inspectStartedAt metadata" : timedOut ? `timed out after ${formatInspectElapsed(elapsedMs)} (limit ${formatInspectElapsed(INSPECT_TIMEOUT_MS)})` : `tmux session ${sessionName} exited before producing a verdict`;
|
|
22528
|
-
const effectiveBeadId =
|
|
22532
|
+
const effectiveBeadId = itemId ?? "unknown";
|
|
22529
22533
|
const notes = `Inspection error for bead ${effectiveBeadId}: ${reason}. No verdict was produced.`;
|
|
22530
22534
|
const verdict = `INSPECTION ERROR for bead ${effectiveBeadId}: inspection could not complete (${reason}) — no verdict was produced. Treat as infrastructure failure: do not silently proceed.`;
|
|
22531
22535
|
setReviewStatusSync(issueId, {
|
|
@@ -22537,7 +22541,7 @@ async function checkInspectAgentTimeouts(now = /* @__PURE__ */ new Date()) {
|
|
|
22537
22541
|
console.warn(`[deacon] Failed to kill inspect session ${sessionName}: ${msg}`);
|
|
22538
22542
|
});
|
|
22539
22543
|
try {
|
|
22540
|
-
const { messageAgent } = await import("./agents-
|
|
22544
|
+
const { messageAgent } = await import("./agents-BA15AQqo.js");
|
|
22541
22545
|
await messageAgent(`agent-${issueId.toLowerCase()}`, verdict, "deacon:inspect-watchdog");
|
|
22542
22546
|
} catch (err) {
|
|
22543
22547
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -22557,6 +22561,15 @@ const KNOWN_AGENT_MODALS = [{
|
|
|
22557
22561
|
matches: (pane) => /rate limit/i.test(pane) && /keep current model/i.test(pane),
|
|
22558
22562
|
keys: ["Down", "Enter"]
|
|
22559
22563
|
}];
|
|
22564
|
+
const CLAUDE_BOOT_SCREEN_PATTERNS = [
|
|
22565
|
+
/Choose the text style that looks best with your terminal/i,
|
|
22566
|
+
/Select login method:/i,
|
|
22567
|
+
/Do you trust the files in this (?:folder|directory)\?/i,
|
|
22568
|
+
/Paste code here if prompted/i
|
|
22569
|
+
];
|
|
22570
|
+
function paneShowsClaudeBootBlockingScreen(pane) {
|
|
22571
|
+
return CLAUDE_BOOT_SCREEN_PATTERNS.some((pattern) => pattern.test(pane));
|
|
22572
|
+
}
|
|
22560
22573
|
/** Rollout JSONL is launch/turn attribution only until a captured switch proves otherwise. */
|
|
22561
22574
|
const MODEL_SHAPED_TOKEN = /^(?:gpt|o\d|claude|kimi|glm|gemini|deepseek|qwen|minimax|grok)[\w.-]*$/i;
|
|
22562
22575
|
function paneShowsModelSwitch(pane, launchModel) {
|
|
@@ -22680,7 +22693,7 @@ async function maybeProactivelyCompactContext(sessionName, now) {
|
|
|
22680
22693
|
if (!agentState?.workspace || !sessionId || !agentState.model) return null;
|
|
22681
22694
|
let usage = null;
|
|
22682
22695
|
try {
|
|
22683
|
-
const { computeContextUsage } = await import("./conversation-service-
|
|
22696
|
+
const { computeContextUsage } = await import("./conversation-service-DzuY9qoH.js");
|
|
22684
22697
|
usage = await computeContextUsage(sessionFilePath(agentState.workspace, sessionId), agentState.model);
|
|
22685
22698
|
} catch {
|
|
22686
22699
|
return null;
|
|
@@ -22729,6 +22742,19 @@ async function checkApiErrorAgents() {
|
|
|
22729
22742
|
if (!tmuxOutput.trim()) continue;
|
|
22730
22743
|
const agentState = getAgentStateSync(sessionName);
|
|
22731
22744
|
if (agentState?.harness === "codex") {
|
|
22745
|
+
if (paneShowsCodexAuthBurn(tmuxOutput)) {
|
|
22746
|
+
if (applyCodexAuthBurnFlag(agentState)) {
|
|
22747
|
+
saveAgentStateSync(agentState);
|
|
22748
|
+
emitActivityEntrySync({
|
|
22749
|
+
source: "cloister",
|
|
22750
|
+
level: "error",
|
|
22751
|
+
message: `${sessionName} marked troubled: Codex refresh token revoked (401 token_invalidated). Re-authenticate Codex — the dashboard banner has a Re-authenticate button, or run \`codex login\` on the host.`,
|
|
22752
|
+
issueId: agentState.issueId
|
|
22753
|
+
});
|
|
22754
|
+
actions.push(`Codex-auth-burned halt: ${sessionName} marked troubled — needs re-authentication`);
|
|
22755
|
+
}
|
|
22756
|
+
continue;
|
|
22757
|
+
}
|
|
22732
22758
|
if (paneShowsModelSwitch(tmuxOutput, agentState.model)) {
|
|
22733
22759
|
const reason = `needs-you: live Codex pane indicates a model switch from launch model ${agentState.model}`;
|
|
22734
22760
|
setAgentPausedSync(sessionName, reason, true);
|
|
@@ -22777,13 +22803,13 @@ async function checkApiErrorAgents() {
|
|
|
22777
22803
|
const st = getAgentStateSync(sessionName);
|
|
22778
22804
|
const sid = st?.sessionId ?? runtimeState?.claudeSessionId;
|
|
22779
22805
|
if (st?.workspace && sid && st.model) {
|
|
22780
|
-
const { computeContextUsage } = await import("./conversation-service-
|
|
22806
|
+
const { computeContextUsage } = await import("./conversation-service-DzuY9qoH.js");
|
|
22781
22807
|
const usage = await computeContextUsage(sessionFilePath(st.workspace, sid), st.model);
|
|
22782
22808
|
if (usage && usage.percentUsed < 85) recoveredPct = usage.percentUsed;
|
|
22783
22809
|
}
|
|
22784
22810
|
} catch {}
|
|
22785
22811
|
if (recoveredPct !== null) {
|
|
22786
|
-
const { clearWorkspaceStuck } = await import("./review-status-sync-
|
|
22812
|
+
const { clearWorkspaceStuck } = await import("./review-status-sync-Bd08OOFA.js");
|
|
22787
22813
|
clearWorkspaceStuck(issueId);
|
|
22788
22814
|
stuckOverflowNativeRecoveryState.delete(sessionName);
|
|
22789
22815
|
actions.push(`Context overflow recovery: cleared stuck flag for ${sessionName} (context back to ${Math.round(recoveredPct)}%)`);
|
|
@@ -22799,7 +22825,7 @@ async function checkApiErrorAgents() {
|
|
|
22799
22825
|
rec.attempts += 1;
|
|
22800
22826
|
rec.lastAttempt = now;
|
|
22801
22827
|
stuckOverflowNativeRecoveryState.set(sessionName, rec);
|
|
22802
|
-
const { resumeAgent } = await import("./agents-
|
|
22828
|
+
const { resumeAgent } = await import("./agents-BA15AQqo.js");
|
|
22803
22829
|
const recovered = await resumeAgent(sessionName, void 0, { compact: true });
|
|
22804
22830
|
if (recovered.success) {
|
|
22805
22831
|
stuckOverflowNativeRecoveryState.delete(sessionName);
|
|
@@ -22847,7 +22873,7 @@ async function checkApiErrorAgents() {
|
|
|
22847
22873
|
}
|
|
22848
22874
|
const compactAttempts = (ov?.compactAttempts ?? 0) + 1;
|
|
22849
22875
|
if (issueId !== null) {
|
|
22850
|
-
const { resumeAgent } = await import("./agents-
|
|
22876
|
+
const { resumeAgent } = await import("./agents-BA15AQqo.js");
|
|
22851
22877
|
const resumeResult = await resumeAgent(sessionName, void 0, { compact: true });
|
|
22852
22878
|
contextOverflowRecoveryState.set(sessionName, {
|
|
22853
22879
|
lastAttempt: now,
|
|
@@ -23214,7 +23240,7 @@ function reviewConvoyLiveness(issueId) {
|
|
|
23214
23240
|
*/
|
|
23215
23241
|
async function recoverUnhealthyTestStack(issueId, workspacePath) {
|
|
23216
23242
|
const key = issueId.toUpperCase();
|
|
23217
|
-
const { getWorkspaceStackHealth } = await import("./stack-health-
|
|
23243
|
+
const { getWorkspaceStackHealth } = await import("./stack-health-BsEVrJZ6.js");
|
|
23218
23244
|
const health = await Effect.runPromise(getWorkspaceStackHealth(issueId, { workspacePath }));
|
|
23219
23245
|
if (health.healthy) {
|
|
23220
23246
|
testStackRebuildState.delete(key);
|
|
@@ -23246,7 +23272,7 @@ async function recoverUnhealthyTestStack(issueId, workspacePath) {
|
|
|
23246
23272
|
record.attempts += 1;
|
|
23247
23273
|
testStackRebuildState.set(key, record);
|
|
23248
23274
|
console.log(`[deacon] Test stack for ${key} unhealthy (${health.reasons.join("; ")}) — rebuilding (attempt ${record.attempts}/${TEST_STACK_REBUILD_MAX_ATTEMPTS})`);
|
|
23249
|
-
const { rebuildWorkspaceStack } = await import("./rebuild-stack-
|
|
23275
|
+
const { rebuildWorkspaceStack } = await import("./rebuild-stack-C7JPUom6.js");
|
|
23250
23276
|
const result = await Effect.runPromise(rebuildWorkspaceStack(issueId, { onProgress: (m) => console.log(`[deacon] ${key} stack rebuild: ${m}`) }));
|
|
23251
23277
|
if (!result.success) {
|
|
23252
23278
|
console.warn(`[deacon] Test stack rebuild failed for ${key}: ${result.error}`);
|
|
@@ -23277,6 +23303,29 @@ function latestHistoryByType(history, type) {
|
|
|
23277
23303
|
if (!history || history.length === 0) return void 0;
|
|
23278
23304
|
for (let i = history.length - 1; i >= 0; i--) if (history[i].type === type) return history[i].status;
|
|
23279
23305
|
}
|
|
23306
|
+
function completedReviewSnapshotAfterCoordinatorExit(status) {
|
|
23307
|
+
const review = latestHistoryEntry(status.history, "review", [
|
|
23308
|
+
"passed",
|
|
23309
|
+
"failed",
|
|
23310
|
+
"blocked"
|
|
23311
|
+
]);
|
|
23312
|
+
if (review?.status !== "passed") return null;
|
|
23313
|
+
const test = latestHistoryEntry(status.history, "test", [
|
|
23314
|
+
"passed",
|
|
23315
|
+
"failed",
|
|
23316
|
+
"skipped"
|
|
23317
|
+
]);
|
|
23318
|
+
return {
|
|
23319
|
+
reviewStatus: "passed",
|
|
23320
|
+
reviewNotes: review.notes,
|
|
23321
|
+
...test ? {
|
|
23322
|
+
testStatus: test.status,
|
|
23323
|
+
testNotes: test.notes
|
|
23324
|
+
} : {},
|
|
23325
|
+
reviewRetryCount: 0,
|
|
23326
|
+
recoveryStartedAt: void 0
|
|
23327
|
+
};
|
|
23328
|
+
}
|
|
23280
23329
|
async function isReviewAgentActiveForIssue(issueId) {
|
|
23281
23330
|
try {
|
|
23282
23331
|
const agents = await Effect.runPromise(listRunningAgents());
|
|
@@ -23351,6 +23400,20 @@ async function handleReviewCoordinatorDied(issueId, _sessionName, _reason) {
|
|
|
23351
23400
|
logDeaconEventSync(`handleReviewCoordinatorDied: ${issueId} skipped — issue closed`);
|
|
23352
23401
|
return actions;
|
|
23353
23402
|
}
|
|
23403
|
+
const completedSnapshot = completedReviewSnapshotAfterCoordinatorExit(status);
|
|
23404
|
+
if (completedSnapshot) {
|
|
23405
|
+
setReviewStatusSync(issueId, completedSnapshot);
|
|
23406
|
+
actions.push(`Restored completed review for ${issueId} after coordinator exit; no re-dispatch`);
|
|
23407
|
+
return actions;
|
|
23408
|
+
}
|
|
23409
|
+
if ((status.reviewRetryCount ?? 0) >= REVIEW_INFRA_BREAKER_THRESHOLD) {
|
|
23410
|
+
markWorkspaceStuck(issueId, "review_infrastructure_failure", {
|
|
23411
|
+
reviewRetryCount: status.reviewRetryCount ?? 0,
|
|
23412
|
+
recoveryStartedAt: status.recoveryStartedAt
|
|
23413
|
+
});
|
|
23414
|
+
actions.push(`Review recovery stopped for ${issueId} after ${status.reviewRetryCount} retries`);
|
|
23415
|
+
return actions;
|
|
23416
|
+
}
|
|
23354
23417
|
if (status.reviewStatus !== "reviewing" && status.reviewStatus !== "pending") {
|
|
23355
23418
|
logDeaconEventSync(`handleReviewCoordinatorDied: ${issueId} skipped — reviewStatus=${status.reviewStatus}`);
|
|
23356
23419
|
return actions;
|
|
@@ -23374,7 +23437,7 @@ async function handleReviewCoordinatorDied(issueId, _sessionName, _reason) {
|
|
|
23374
23437
|
return actions;
|
|
23375
23438
|
}
|
|
23376
23439
|
try {
|
|
23377
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
23440
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
|
|
23378
23441
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
23379
23442
|
issueId,
|
|
23380
23443
|
workspace,
|
|
@@ -23504,7 +23567,7 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus) {
|
|
|
23504
23567
|
const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
|
|
23505
23568
|
if (workspace && resolved && !tryReserveAdvancingSlot() && !await tryYieldForAdvancingDispatch("review", issueId)) actions.push(`Deferred review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
|
|
23506
23569
|
else if (workspace && resolved) try {
|
|
23507
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
23570
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
|
|
23508
23571
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
23509
23572
|
issueId,
|
|
23510
23573
|
workspace,
|
|
@@ -23529,8 +23592,8 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus) {
|
|
|
23529
23592
|
const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
|
|
23530
23593
|
if (workspace && resolved) {
|
|
23531
23594
|
const branch = `feature/${issueLower}`;
|
|
23532
|
-
const { spawnRun } = await import("./agents-
|
|
23533
|
-
const { buildTestRolePrompt } = await import("./test-agent-queue-
|
|
23595
|
+
const { spawnRun } = await import("./agents-BA15AQqo.js");
|
|
23596
|
+
const { buildTestRolePrompt } = await import("./test-agent-queue-hAU1Ah08.js");
|
|
23534
23597
|
const stackRecovery = await recoverUnhealthyTestStack(issueId, workspace);
|
|
23535
23598
|
if (stackRecovery === "cooldown" || stackRecovery === "exhausted") {
|
|
23536
23599
|
setReviewStatusSync(issueId, { testStatus: "dispatch_failed" });
|
|
@@ -23668,7 +23731,7 @@ async function recoverStalledReviewConvoys(getCanonicalState = getAutoCloseOutCa
|
|
|
23668
23731
|
record.lastAttempt = now;
|
|
23669
23732
|
record.attempts += 1;
|
|
23670
23733
|
stalledReviewConvoyRecoveryState.set(key, record);
|
|
23671
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
23734
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
|
|
23672
23735
|
try {
|
|
23673
23736
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
23674
23737
|
issueId,
|
|
@@ -23739,7 +23802,7 @@ async function checkMissingReviewStatuses() {
|
|
|
23739
23802
|
continue;
|
|
23740
23803
|
}
|
|
23741
23804
|
try {
|
|
23742
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
23805
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
|
|
23743
23806
|
await Effect.runPromise(spawnReviewRoleForIssue({
|
|
23744
23807
|
issueId,
|
|
23745
23808
|
workspace,
|
|
@@ -23790,7 +23853,7 @@ async function checkStuckReviewing() {
|
|
|
23790
23853
|
const actions = [];
|
|
23791
23854
|
const REVIEW_STUCK_THRESHOLD_MS = 1800 * 1e3;
|
|
23792
23855
|
try {
|
|
23793
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
23856
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-77N3PoZr.js");
|
|
23794
23857
|
const statuses = loadReviewStatuses();
|
|
23795
23858
|
const now = Date.now();
|
|
23796
23859
|
const activeReviewIssues = /* @__PURE__ */ new Set();
|
|
@@ -23806,7 +23869,7 @@ async function checkStuckReviewing() {
|
|
|
23806
23869
|
if (rState?.state === "active" && rState.currentIssue) activeReviewIssues.add(rState.currentIssue.toUpperCase());
|
|
23807
23870
|
}
|
|
23808
23871
|
try {
|
|
23809
|
-
const { listRunningAgents } = await import("./agents-
|
|
23872
|
+
const { listRunningAgents } = await import("./agents-BA15AQqo.js");
|
|
23810
23873
|
const agents = await Effect.runPromise(listRunningAgents());
|
|
23811
23874
|
for (const agent of agents) {
|
|
23812
23875
|
if (agent.status === "stopped" || agent.status === "error") continue;
|
|
@@ -23939,7 +24002,7 @@ async function checkCompletedButUnsignaledReviews() {
|
|
|
23939
24002
|
}
|
|
23940
24003
|
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.`;
|
|
23941
24004
|
try {
|
|
23942
|
-
const { messageAgent } = await import("./agents-
|
|
24005
|
+
const { messageAgent } = await import("./agents-BA15AQqo.js");
|
|
23943
24006
|
await messageAgent(reviewSession, nudge);
|
|
23944
24007
|
unsignaledReviewNudges.set(latestDir, now);
|
|
23945
24008
|
actions.push(`Nudged ${reviewSession} to signal ${verdict} (synthesis written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
|
|
@@ -23972,6 +24035,7 @@ init_review_status();
|
|
|
23972
24035
|
init_persistent_logger();
|
|
23973
24036
|
init_review_monitor();
|
|
23974
24037
|
init_tmux();
|
|
24038
|
+
init_codex_auth();
|
|
23975
24039
|
const REVIEWER_IDLE_FAILURE_MS = 180 * 1e3;
|
|
23976
24040
|
const REVIEW_REPORTS_PRESENT_NUDGE_COOLDOWN_MS = 60 * 1e3;
|
|
23977
24041
|
const reviewReportsPresentNudges = /* @__PURE__ */ new Map();
|
|
@@ -24060,7 +24124,7 @@ async function respawnIdleReviewer(state, agentId) {
|
|
|
24060
24124
|
return false;
|
|
24061
24125
|
}
|
|
24062
24126
|
try {
|
|
24063
|
-
const { spawnReviewSubRoleForIssue } = await import("./review-agent-
|
|
24127
|
+
const { spawnReviewSubRoleForIssue } = await import("./review-agent-CpSHLzed.js");
|
|
24064
24128
|
const contextManifestPath = join$1(dirname$1(outputPath), "context.json");
|
|
24065
24129
|
const result = await Effect.runPromise(spawnReviewSubRoleForIssue({
|
|
24066
24130
|
issueId: state.issueId,
|
|
@@ -24189,7 +24253,7 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
|
|
|
24189
24253
|
"Read the four reports, write synthesis.md, then signal review status exactly as roles/review.md instructs."
|
|
24190
24254
|
].join("\n");
|
|
24191
24255
|
try {
|
|
24192
|
-
const { messageAgent } = await import("./agents-
|
|
24256
|
+
const { messageAgent } = await import("./agents-BA15AQqo.js");
|
|
24193
24257
|
await messageAgent(state.id, message);
|
|
24194
24258
|
reviewReportsPresentNudges.set(nudgeKey, now);
|
|
24195
24259
|
const action = `Nudged ${state.id} to synthesize from ${REVIEW_SUB_ROLES.length} reviewer reports`;
|
|
@@ -24241,7 +24305,14 @@ async function monitorReviewConvoySignals() {
|
|
|
24241
24305
|
const runtimeIdleAgeMs = runtimeState?.state === "idle" ? Date.now() - new Date(runtimeState.lastActivity).getTime() : 0;
|
|
24242
24306
|
const idleAndNoOutput = reviewerSessionAlive && !outputWrittenForThisRun && runtimeIdleAgeMs > REVIEWER_IDLE_FAILURE_MS;
|
|
24243
24307
|
let contextOverflowDetected = false;
|
|
24244
|
-
if (!outputWrittenForThisRun && runtimeState?.state === "idle")
|
|
24308
|
+
if (!outputWrittenForThisRun && runtimeState?.state === "idle") {
|
|
24309
|
+
const tail = await Effect.runPromise(capturePane(agentId, 100)).catch(() => "");
|
|
24310
|
+
contextOverflowDetected = isContextOverflowTail(tail);
|
|
24311
|
+
if (paneShowsCodexAuthBurn(tail) && applyCodexAuthBurnFlag(state)) {
|
|
24312
|
+
saveAgentStateSync(state);
|
|
24313
|
+
logDeaconEventSync(`review-monitor: ${agentId} marked troubled — Codex refresh token revoked (codex-auth-burned)`);
|
|
24314
|
+
}
|
|
24315
|
+
}
|
|
24245
24316
|
let signal = null;
|
|
24246
24317
|
let reason = "";
|
|
24247
24318
|
if (outputWrittenForThisRun) signal = "ready";
|
|
@@ -24268,7 +24339,7 @@ async function monitorReviewConvoySignals() {
|
|
|
24268
24339
|
if (!signal) continue;
|
|
24269
24340
|
const message = signal === "ready" ? `REVIEWER_READY ${state.reviewSubRole} ${outputPath}` : signal === "timeout" ? `REVIEWER_TIMEOUT ${state.reviewSubRole} ${reason}` : `REVIEWER_FAILED ${state.reviewSubRole} ${reason}`;
|
|
24270
24341
|
try {
|
|
24271
|
-
const { messageAgent } = await import("./agents-
|
|
24342
|
+
const { messageAgent } = await import("./agents-BA15AQqo.js");
|
|
24272
24343
|
await messageAgent(state.reviewSynthesisAgentId, message);
|
|
24273
24344
|
state.reviewMonitorSignaled = signal;
|
|
24274
24345
|
saveAgentStateSync(state);
|
|
@@ -24276,7 +24347,7 @@ async function monitorReviewConvoySignals() {
|
|
|
24276
24347
|
actions.push(action);
|
|
24277
24348
|
logDeaconEventSync(`monitorReviewConvoySignals: ${action}`);
|
|
24278
24349
|
if (signal === "ready") try {
|
|
24279
|
-
const { notifyPipelineSync } = await import("./pipeline-notifier-
|
|
24350
|
+
const { notifyPipelineSync } = await import("./pipeline-notifier-3frIvSi3.js");
|
|
24280
24351
|
notifyPipelineSync({
|
|
24281
24352
|
type: "reviewer_completed",
|
|
24282
24353
|
issueId: state.issueId,
|
|
@@ -24284,7 +24355,7 @@ async function monitorReviewConvoySignals() {
|
|
|
24284
24355
|
});
|
|
24285
24356
|
} catch {}
|
|
24286
24357
|
else if (signal === "timeout") try {
|
|
24287
|
-
const { notifyPipelineSync } = await import("./pipeline-notifier-
|
|
24358
|
+
const { notifyPipelineSync } = await import("./pipeline-notifier-3frIvSi3.js");
|
|
24288
24359
|
notifyPipelineSync({
|
|
24289
24360
|
type: "reviewer_timed_out",
|
|
24290
24361
|
issueId: state.issueId,
|
|
@@ -24384,7 +24455,7 @@ const FORK_CACHE_CHECK_DELAY_MS = 180 * 1e3;
|
|
|
24384
24455
|
async function checkStalledReviewDiscovery() {
|
|
24385
24456
|
const actions = [];
|
|
24386
24457
|
try {
|
|
24387
|
-
const { listAgentStates } = await import("./agents-
|
|
24458
|
+
const { listAgentStates } = await import("./agents-BA15AQqo.js");
|
|
24388
24459
|
const states = listAgentStates();
|
|
24389
24460
|
const now = Date.now();
|
|
24390
24461
|
for (const state of states) {
|
|
@@ -24393,7 +24464,7 @@ async function checkStalledReviewDiscovery() {
|
|
|
24393
24464
|
const aged = Number.isFinite(startedMs) && now - startedMs > 48e4;
|
|
24394
24465
|
const dead = !await Effect.runPromise(sessionExists(state.id)).catch(() => false) || await Effect.runPromise(isPaneDead(state.id)).catch(() => true);
|
|
24395
24466
|
if (!aged && !dead) continue;
|
|
24396
|
-
const { handleReviewDiscoveryReady } = await import("./review-agent-
|
|
24467
|
+
const { handleReviewDiscoveryReady } = await import("./review-agent-CpSHLzed.js");
|
|
24397
24468
|
const result = await handleReviewDiscoveryReady(state.issueId, { source: dead ? "deacon-backstop (parent dead)" : "deacon-backstop (discovery timeout)" });
|
|
24398
24469
|
actions.push(result.message);
|
|
24399
24470
|
logDeaconEventSync(`checkStalledReviewDiscovery: ${result.message}`);
|
|
@@ -24416,8 +24487,8 @@ async function checkStalledReviewDiscovery() {
|
|
|
24416
24487
|
async function checkStalledReviewParents() {
|
|
24417
24488
|
const actions = [];
|
|
24418
24489
|
try {
|
|
24419
|
-
const { listAgentStates, markAgentStoppedState } = await import("./agents-
|
|
24420
|
-
const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-
|
|
24490
|
+
const { listAgentStates, markAgentStoppedState } = await import("./agents-BA15AQqo.js");
|
|
24491
|
+
const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-CpSHLzed.js");
|
|
24421
24492
|
const states = listAgentStates();
|
|
24422
24493
|
const now = Date.now();
|
|
24423
24494
|
for (const state of states) {
|
|
@@ -24466,8 +24537,8 @@ async function checkStalledReviewParents() {
|
|
|
24466
24537
|
async function checkReviewForkCacheMisses() {
|
|
24467
24538
|
const actions = [];
|
|
24468
24539
|
try {
|
|
24469
|
-
const { listAgentStates, saveAgentState } = await import("./agents-
|
|
24470
|
-
const { readEventsSync } = await import("./events-
|
|
24540
|
+
const { listAgentStates, saveAgentState } = await import("./agents-BA15AQqo.js");
|
|
24541
|
+
const { readEventsSync } = await import("./events-BYbvqZky.js");
|
|
24471
24542
|
const { emitActivityEntrySync } = await import("./activity-logger-DvYvFhwZ.js");
|
|
24472
24543
|
const states = listAgentStates();
|
|
24473
24544
|
const now = Date.now();
|
|
@@ -24614,7 +24685,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
24614
24685
|
if (!project) continue;
|
|
24615
24686
|
let specStatus;
|
|
24616
24687
|
try {
|
|
24617
|
-
const { findSpecByIssue } = await import("./specs-
|
|
24688
|
+
const { findSpecByIssue } = await import("./specs-VwcFtEDi.js");
|
|
24618
24689
|
const spec = await Effect.runPromise(findSpecByIssue(project.projectPath, issueId));
|
|
24619
24690
|
specStatus = spec?.status;
|
|
24620
24691
|
if (spec && (spec.status === "completed" || spec.status === "cancelled")) {
|
|
@@ -24629,7 +24700,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
24629
24700
|
if (branchTip.stdout.trim() === mainTip.stdout.trim()) console.log(`[deacon] ${issueId}: branch ${branch} points at main; not treating zero-commit branch as merged`);
|
|
24630
24701
|
} catch {}
|
|
24631
24702
|
if (!isMerged) {
|
|
24632
|
-
const { resolveGitHubIssueSync: _resolveGitHubIssue } = await import("./tracker-utils-
|
|
24703
|
+
const { resolveGitHubIssueSync: _resolveGitHubIssue } = await import("./tracker-utils-DdzUiPNU.js");
|
|
24633
24704
|
const ghResolved = _resolveGitHubIssue(issueId);
|
|
24634
24705
|
if (ghResolved.isGitHub) try {
|
|
24635
24706
|
const { stdout } = await execFileAsync$4("gh", [
|
|
@@ -24666,7 +24737,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
24666
24737
|
actions.push(msg);
|
|
24667
24738
|
console.log(`[deacon] ${msg}`);
|
|
24668
24739
|
try {
|
|
24669
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
24740
|
+
const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
|
|
24670
24741
|
postMergeLifecycle(issueId, project.projectPath, branch, { skipDeploy: true }).catch((err) => console.warn(`[deacon] postMergeLifecycle (reconcile) failed for ${issueId}: ${err}`));
|
|
24671
24742
|
} catch (err) {
|
|
24672
24743
|
console.warn(`[deacon] Could not import postMergeLifecycle: ${err}`);
|
|
@@ -24691,7 +24762,7 @@ const falseMergedReset = /* @__PURE__ */ new Set();
|
|
|
24691
24762
|
async function reconcileFalseMerged() {
|
|
24692
24763
|
const actions = [];
|
|
24693
24764
|
try {
|
|
24694
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
24765
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
|
|
24695
24766
|
if (!isGitHubAppConfigured()) return actions;
|
|
24696
24767
|
const statuses = loadReviewStatuses();
|
|
24697
24768
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
@@ -24736,7 +24807,7 @@ const CLOSED_PR_RECONCILE_COOLDOWN_MS = 600 * 1e3;
|
|
|
24736
24807
|
async function reconcileClosedPrReadyForMerge() {
|
|
24737
24808
|
const actions = [];
|
|
24738
24809
|
try {
|
|
24739
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
24810
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
|
|
24740
24811
|
if (!isGitHubAppConfigured()) return actions;
|
|
24741
24812
|
const statuses = loadReviewStatuses();
|
|
24742
24813
|
const now = Date.now();
|
|
@@ -24808,7 +24879,7 @@ const STALE_MERGE_BLOCKER_COOLDOWN_MS = 120 * 1e3;
|
|
|
24808
24879
|
async function reconcileStaleMergeBlockers() {
|
|
24809
24880
|
const actions = [];
|
|
24810
24881
|
try {
|
|
24811
|
-
const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-
|
|
24882
|
+
const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-BubJprtD.js");
|
|
24812
24883
|
const statuses = loadReviewStatuses();
|
|
24813
24884
|
const now = Date.now();
|
|
24814
24885
|
const deps = buildRealConflictGateDeps();
|
|
@@ -24951,7 +25022,7 @@ async function checkFailedMergeRetry() {
|
|
|
24951
25022
|
if (ciEntry.count === 5) {
|
|
24952
25023
|
console.log(`[deacon] CI check failure for ${issueId} — retries exhausted, notifying work agent`);
|
|
24953
25024
|
const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
|
|
24954
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
25025
|
+
const { writeFeedbackFile } = await import("./feedback-writer-CULeOOY4.js");
|
|
24955
25026
|
const ciFileResult = await Effect.runPromise(writeFeedbackFile({
|
|
24956
25027
|
issueId,
|
|
24957
25028
|
specialist: "merge-agent",
|
|
@@ -24983,7 +25054,7 @@ async function checkFailedMergeRetry() {
|
|
|
24983
25054
|
ciRetryMap.set(issueId, ciEntry);
|
|
24984
25055
|
console.log(`[deacon] CI check failure for ${issueId} — notifying agent to re-submit (attempt ${ciEntry.count}/5)`);
|
|
24985
25056
|
const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
|
|
24986
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
25057
|
+
const { writeFeedbackFile } = await import("./feedback-writer-CULeOOY4.js");
|
|
24987
25058
|
const ciFileResult2 = await Effect.runPromise(writeFeedbackFile({
|
|
24988
25059
|
issueId,
|
|
24989
25060
|
specialist: "merge-agent",
|
|
@@ -25011,7 +25082,7 @@ async function checkFailedMergeRetry() {
|
|
|
25011
25082
|
const lastNudge = timeoutNudgeCooldowns.get(issueIdForFb);
|
|
25012
25083
|
if (!lastNudge || now - lastNudge >= TIMEOUT_NUDGE_COOLDOWN_MS) {
|
|
25013
25084
|
const timeoutNotes = status.mergeNotes;
|
|
25014
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
25085
|
+
const { writeFeedbackFile } = await import("./feedback-writer-CULeOOY4.js");
|
|
25015
25086
|
await Effect.runPromise(writeFeedbackFile({
|
|
25016
25087
|
issueId: issueIdForFb,
|
|
25017
25088
|
specialist: "merge-agent",
|
|
@@ -25116,7 +25187,7 @@ async function autoCloseOut(now = /* @__PURE__ */ new Date()) {
|
|
|
25116
25187
|
} } : {}
|
|
25117
25188
|
};
|
|
25118
25189
|
try {
|
|
25119
|
-
const { closeOut } = await import("./workflows-
|
|
25190
|
+
const { closeOut } = await import("./workflows-B4C3lY9E.js");
|
|
25120
25191
|
const result = await Effect.runPromise(closeOut(ctx));
|
|
25121
25192
|
if (!result.success) {
|
|
25122
25193
|
const failed = result.steps.find((step) => !step.success && !step.skipped);
|
|
@@ -25420,7 +25491,8 @@ init_review_status();
|
|
|
25420
25491
|
init_control_settings();
|
|
25421
25492
|
init_agents$1();
|
|
25422
25493
|
init_tmux();
|
|
25423
|
-
|
|
25494
|
+
init_io();
|
|
25495
|
+
init_dag();
|
|
25424
25496
|
const orphanFailureRecordedForAutoResume = /* @__PURE__ */ new Set();
|
|
25425
25497
|
const appliedBootReconciliationDecisions = /* @__PURE__ */ new Set();
|
|
25426
25498
|
const emptyBootReconciliationApplyResult = () => ({
|
|
@@ -25614,7 +25686,7 @@ async function cleanupOrphanedPlanningSessions$1(deps) {
|
|
|
25614
25686
|
* - phase === 'implementation' or 'review-response'
|
|
25615
25687
|
* - tmux session exists (not orphaned)
|
|
25616
25688
|
* - isAgentIdleForNudge() returns true (Stop hook authoritative)
|
|
25617
|
-
* -
|
|
25689
|
+
* - pan task next -l <issueLabel> has ≥1 ready bead (work remaining)
|
|
25618
25690
|
* - last nudge older than NUDGE_COOLDOWN_MS (don't spam)
|
|
25619
25691
|
*
|
|
25620
25692
|
* Action: send `pan tell` with a concrete imperative pointing at the next
|
|
@@ -25657,8 +25729,8 @@ function buildStalledResumePrompt(state) {
|
|
|
25657
25729
|
}
|
|
25658
25730
|
return buildDefaultResumeContinueMessage(state.issueId);
|
|
25659
25731
|
}
|
|
25660
|
-
function
|
|
25661
|
-
return `${
|
|
25732
|
+
function readyTaskLine(item) {
|
|
25733
|
+
return `${item.id} ${item.title}`.trim();
|
|
25662
25734
|
}
|
|
25663
25735
|
async function nudgeStalledResumeWorkAgents() {
|
|
25664
25736
|
const actions = [];
|
|
@@ -25680,7 +25752,7 @@ async function nudgeStalledResumeWorkAgents() {
|
|
|
25680
25752
|
const message = buildStalledResumePrompt(state);
|
|
25681
25753
|
if (!message) continue;
|
|
25682
25754
|
try {
|
|
25683
|
-
const { messageAgent } = await import("./agents-
|
|
25755
|
+
const { messageAgent } = await import("./agents-BA15AQqo.js");
|
|
25684
25756
|
await messageAgent(agentId, message);
|
|
25685
25757
|
recordCooldown(agentId, ".last-stalled-resume-nudge");
|
|
25686
25758
|
const action = `Re-sent stalled resume prompt to ${agentId} (${state.issueId})`;
|
|
@@ -25760,7 +25832,7 @@ async function nudgeIdleWorkAgentsWithOpenBeads() {
|
|
|
25760
25832
|
status: "running",
|
|
25761
25833
|
role: "work"
|
|
25762
25834
|
});
|
|
25763
|
-
const
|
|
25835
|
+
const eligible = [];
|
|
25764
25836
|
for (const state of states) {
|
|
25765
25837
|
const agentId = state.id;
|
|
25766
25838
|
if (await isIssueClosed(state.issueId)) {
|
|
@@ -25774,39 +25846,34 @@ async function nudgeIdleWorkAgentsWithOpenBeads() {
|
|
|
25774
25846
|
const last = parseInt(readFileSync(cooldownFile, "utf-8").trim(), 10);
|
|
25775
25847
|
if (!Number.isNaN(last) && Date.now() - last < BEAD_NUDGE_COOLDOWN_MS) continue;
|
|
25776
25848
|
} catch {}
|
|
25777
|
-
|
|
25778
|
-
|
|
25779
|
-
|
|
25780
|
-
|
|
25781
|
-
|
|
25782
|
-
|
|
25783
|
-
const
|
|
25784
|
-
|
|
25785
|
-
|
|
25786
|
-
|
|
25787
|
-
|
|
25788
|
-
|
|
25789
|
-
|
|
25790
|
-
|
|
25791
|
-
|
|
25792
|
-
|
|
25793
|
-
|
|
25794
|
-
|
|
25795
|
-
|
|
25796
|
-
|
|
25797
|
-
|
|
25798
|
-
|
|
25799
|
-
|
|
25800
|
-
|
|
25801
|
-
|
|
25802
|
-
|
|
25803
|
-
|
|
25804
|
-
|
|
25805
|
-
actions.push(action);
|
|
25806
|
-
logDeaconEventSync(`nudgeIdleWorkAgentsWithOpenBeads: ${action}`);
|
|
25807
|
-
} catch (err) {
|
|
25808
|
-
logDeaconEventSync(`nudgeIdleWorkAgentsWithOpenBeads: ${agentId} messageAgent failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
25809
|
-
}
|
|
25849
|
+
eligible.push(state);
|
|
25850
|
+
}
|
|
25851
|
+
for (const state of eligible) {
|
|
25852
|
+
const agentId = state.id;
|
|
25853
|
+
const plan = readWorkspacePlanSync(state.workspace);
|
|
25854
|
+
if (!plan) continue;
|
|
25855
|
+
const openTasks = getDispatchableItems(plan, /* @__PURE__ */ new Set());
|
|
25856
|
+
if (openTasks.length === 0) continue;
|
|
25857
|
+
const firstTask = readyTaskLine(openTasks[0]).slice(0, 200);
|
|
25858
|
+
const briefPath = join$1(getAgentDir(agentId), "initial-prompt.md");
|
|
25859
|
+
const message = [
|
|
25860
|
+
`Deacon idle-nudge: your tmux is alive but the agent is idle and you have ${openTasks.length} ready task(s) for ${state.issueId}.`,
|
|
25861
|
+
``,
|
|
25862
|
+
`Next ready task: ${firstTask}`,
|
|
25863
|
+
``,
|
|
25864
|
+
`If you don't already have your full brief for ${state.issueId} in context (work-agent role instructions, the vBRIEF plan, recorded decisions & hazards), re-read it now — it is on disk at ${briefPath}, plus .pan/continue.json and .pan/spec.vbrief.json in your workspace. Startup kickoff delivery can silently fail on large briefs, so do not assume you received it.`,
|
|
25865
|
+
``,
|
|
25866
|
+
"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."
|
|
25867
|
+
].join("\n");
|
|
25868
|
+
try {
|
|
25869
|
+
const { messageAgent } = await import("./agents-BA15AQqo.js");
|
|
25870
|
+
await messageAgent(agentId, message);
|
|
25871
|
+
writeFileSync(join$1(getAgentDir(agentId), ".last-bead-nudge"), String(Date.now()), "utf-8");
|
|
25872
|
+
const action = `Nudged idle ${agentId} (${state.issueId}) — ${openTasks.length} ready task(s)`;
|
|
25873
|
+
actions.push(action);
|
|
25874
|
+
logDeaconEventSync(`nudgeIdleWorkAgentsWithOpenBeads: ${action}`);
|
|
25875
|
+
} catch (err) {
|
|
25876
|
+
logDeaconEventSync(`nudgeIdleWorkAgentsWithOpenBeads: ${agentId} messageAgent failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
25810
25877
|
}
|
|
25811
25878
|
}
|
|
25812
25879
|
return actions;
|
|
@@ -26096,6 +26163,9 @@ async function reconcileAgentLiveness$1(deps) {
|
|
|
26096
26163
|
}
|
|
26097
26164
|
//#endregion
|
|
26098
26165
|
//#region ../../lib/cloister/in-flight-guard.ts
|
|
26166
|
+
init_state_plane();
|
|
26167
|
+
init_auto_commit();
|
|
26168
|
+
init_record();
|
|
26099
26169
|
function createInFlightGuard() {
|
|
26100
26170
|
const inFlight = /* @__PURE__ */ new Set();
|
|
26101
26171
|
return {
|
|
@@ -26120,7 +26190,6 @@ function createInFlightGuard() {
|
|
|
26120
26190
|
}
|
|
26121
26191
|
//#endregion
|
|
26122
26192
|
//#region ../../lib/pipeline-state-paths.ts
|
|
26123
|
-
init_state_plane();
|
|
26124
26193
|
const execFileAsync$3 = promisify$1(execFile$1);
|
|
26125
26194
|
const STATE_PLANE_DIFF_EXCLUDES = STATE_PLANE_PATHS.map((path) => `:(exclude)${path.replace(/\/$/, "")}`);
|
|
26126
26195
|
function isPipelineStatePath(relativePath) {
|
|
@@ -26229,10 +26298,24 @@ async function gitStdout(workspacePath, args) {
|
|
|
26229
26298
|
return String(result.stdout ?? "");
|
|
26230
26299
|
}
|
|
26231
26300
|
//#endregion
|
|
26232
|
-
//#region ../../lib/cloister/state-
|
|
26233
|
-
|
|
26234
|
-
init_record();
|
|
26301
|
+
//#region ../../lib/cloister/state-plane-patrol.ts
|
|
26302
|
+
init_record_update();
|
|
26235
26303
|
init_state_home();
|
|
26304
|
+
async function reconcileProjectStatePlanes(projects) {
|
|
26305
|
+
const actions = [];
|
|
26306
|
+
for (const { config } of projects) {
|
|
26307
|
+
if (!config.path) continue;
|
|
26308
|
+
const write = await Effect.runPromise(reconcileStatePlaneDrift(config.path));
|
|
26309
|
+
if (!write.committed) continue;
|
|
26310
|
+
actions.push({
|
|
26311
|
+
message: `Reconciled pending spec/record state for ${config.name ?? config.path}`,
|
|
26312
|
+
level: write.pushed === false ? "warn" : "action"
|
|
26313
|
+
});
|
|
26314
|
+
}
|
|
26315
|
+
return actions;
|
|
26316
|
+
}
|
|
26317
|
+
//#endregion
|
|
26318
|
+
//#region ../../lib/cloister/state-recreation-patrol.ts
|
|
26236
26319
|
async function recreatedStateWarnings(projects) {
|
|
26237
26320
|
const warnings = [];
|
|
26238
26321
|
for (const { config } of projects) {
|
|
@@ -26244,7 +26327,6 @@ async function recreatedStateWarnings(projects) {
|
|
|
26244
26327
|
}
|
|
26245
26328
|
//#endregion
|
|
26246
26329
|
//#region ../../lib/cloister/deacon-main-divergence.ts
|
|
26247
|
-
init_record_lock();
|
|
26248
26330
|
init_projects();
|
|
26249
26331
|
init_state_plane();
|
|
26250
26332
|
async function recordMainDivergenceHealth(state, projects = listProjectsSync(), measure = getMainDivergence) {
|
|
@@ -26379,10 +26461,10 @@ function shouldRunRecoveryJanitor(janitor, patrolCycle) {
|
|
|
26379
26461
|
//#endregion
|
|
26380
26462
|
//#region ../../lib/cloister/dead-end-trip.ts
|
|
26381
26463
|
init_projects();
|
|
26382
|
-
function recordDeadEndNeedsYou(issueId, recoveryPath, generation, message) {
|
|
26464
|
+
async function recordDeadEndNeedsYou(issueId, recoveryPath, generation, message) {
|
|
26383
26465
|
const project = resolveProjectFromIssueSync(issueId);
|
|
26384
26466
|
if (!project) return void 0;
|
|
26385
|
-
return recordRecoveryFailure(project.projectPath, issueId, recoveryPath, generation, 1).emitNeedsYou ? message : void 0;
|
|
26467
|
+
return (await recordRecoveryFailure(project.projectPath, issueId, recoveryPath, generation, 1)).emitNeedsYou ? message : void 0;
|
|
26386
26468
|
}
|
|
26387
26469
|
//#endregion
|
|
26388
26470
|
//#region ../../lib/cloister/test-status-green-ci-reconciler.ts
|
|
@@ -26903,7 +26985,7 @@ init_config();
|
|
|
26903
26985
|
init_concurrency();
|
|
26904
26986
|
init_review_status();
|
|
26905
26987
|
init_record();
|
|
26906
|
-
|
|
26988
|
+
init_io();
|
|
26907
26989
|
init_control_settings();
|
|
26908
26990
|
init_archive_planning();
|
|
26909
26991
|
init_projects();
|
|
@@ -27175,8 +27257,8 @@ async function cleanupStaleAgentState() {
|
|
|
27175
27257
|
*/
|
|
27176
27258
|
async function cleanupAbandonedFeedback() {
|
|
27177
27259
|
const actions = [];
|
|
27178
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
27179
|
-
const { clearFeedbackFiles } = await import("./feedback-writer-
|
|
27260
|
+
const { getReviewStatusSync } = await import("./review-status-77N3PoZr.js");
|
|
27261
|
+
const { clearFeedbackFiles } = await import("./feedback-writer-CULeOOY4.js");
|
|
27180
27262
|
for (const { issueId, workspacePath } of listFeatureWorkspaces()) {
|
|
27181
27263
|
const panFeedbackDir = join$1(workspacePath, ".pan", "feedback");
|
|
27182
27264
|
if (!existsSync(panFeedbackDir)) continue;
|
|
@@ -27247,7 +27329,7 @@ async function handleOrphanReviewerSession(sessionName, sessions, creationTimes,
|
|
|
27247
27329
|
if (!issueId) return null;
|
|
27248
27330
|
const agentSession = `agent-${issueId.toLowerCase()}`;
|
|
27249
27331
|
if (sessions.includes(agentSession)) return null;
|
|
27250
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
27332
|
+
const { getReviewStatusSync } = await import("./review-status-77N3PoZr.js");
|
|
27251
27333
|
try {
|
|
27252
27334
|
if (getReviewStatusSync(issueId)?.reviewStatus === "reviewing") return null;
|
|
27253
27335
|
} catch {}
|
|
@@ -27326,9 +27408,9 @@ async function checkOrphanedCompletions() {
|
|
|
27326
27408
|
const issueLower = issueId.toLowerCase();
|
|
27327
27409
|
const workspacePath = findWorkspacePath(resolved.projectPath, issueLower);
|
|
27328
27410
|
if (!workspacePath || !existsSync(workspacePath)) continue;
|
|
27329
|
-
const
|
|
27330
|
-
if (
|
|
27331
|
-
if (
|
|
27411
|
+
const plan = readWorkspacePlanSync(workspacePath);
|
|
27412
|
+
if (!plan || plan.plan.items.length === 0) continue;
|
|
27413
|
+
if (plan.plan.items.some((item) => !["completed", "cancelled"].includes(item.status))) continue;
|
|
27332
27414
|
const { stdout } = await execAsync(`gh pr list --head feature/${issueLower} --state open --json url --jq '.[0].url'`, {
|
|
27333
27415
|
encoding: "utf-8",
|
|
27334
27416
|
timeout: 15e3
|
|
@@ -27339,10 +27421,12 @@ async function checkOrphanedCompletions() {
|
|
|
27339
27421
|
reviewRequestedAt: now,
|
|
27340
27422
|
prUrl
|
|
27341
27423
|
});
|
|
27342
|
-
await
|
|
27343
|
-
|
|
27344
|
-
|
|
27345
|
-
|
|
27424
|
+
await updateIssueRecord(project, issueId, (nextRecord) => {
|
|
27425
|
+
Object.assign(nextRecord.pipeline, {
|
|
27426
|
+
reviewRequestedAt: now,
|
|
27427
|
+
prUrl,
|
|
27428
|
+
panDoneRecoveredAt: now
|
|
27429
|
+
});
|
|
27346
27430
|
});
|
|
27347
27431
|
const action = `checkOrphanedCompletions: recovered ${issueId} (PR open but review never dispatched)`;
|
|
27348
27432
|
logDeaconEventSync(action);
|
|
@@ -27367,7 +27451,7 @@ async function checkOrphanedCompletions() {
|
|
|
27367
27451
|
async function checkPendingTestDispatch() {
|
|
27368
27452
|
const actions = [];
|
|
27369
27453
|
try {
|
|
27370
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
27454
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-77N3PoZr.js");
|
|
27371
27455
|
const statuses = loadReviewStatuses();
|
|
27372
27456
|
const now = Date.now();
|
|
27373
27457
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
@@ -27400,7 +27484,7 @@ async function checkPendingTestDispatch() {
|
|
|
27400
27484
|
console.log(`[deacon] ${issueId}: skipping test re-dispatch — issue is closed`);
|
|
27401
27485
|
continue;
|
|
27402
27486
|
}
|
|
27403
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
27487
|
+
const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
|
|
27404
27488
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
27405
27489
|
if (!resolved) continue;
|
|
27406
27490
|
const issueLower = issueId.toLowerCase();
|
|
@@ -27415,8 +27499,8 @@ async function checkPendingTestDispatch() {
|
|
|
27415
27499
|
logDeaconEventSync(`checkPendingTestDispatch: deferred test for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
|
|
27416
27500
|
continue;
|
|
27417
27501
|
}
|
|
27418
|
-
const { spawnRun } = await import("./agents-
|
|
27419
|
-
const { buildTestRolePrompt } = await import("./test-agent-queue-
|
|
27502
|
+
const { spawnRun } = await import("./agents-BA15AQqo.js");
|
|
27503
|
+
const { buildTestRolePrompt } = await import("./test-agent-queue-hAU1Ah08.js");
|
|
27420
27504
|
try {
|
|
27421
27505
|
const run = await spawnRun(issueId, "test", {
|
|
27422
27506
|
workspace,
|
|
@@ -27539,7 +27623,7 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
27539
27623
|
const cmd = `pan admin specialists done test ${issueId} --status ${decision.status}${noteArg}`;
|
|
27540
27624
|
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.`;
|
|
27541
27625
|
try {
|
|
27542
|
-
const { messageAgent } = await import("./agents-
|
|
27626
|
+
const { messageAgent } = await import("./agents-BA15AQqo.js");
|
|
27543
27627
|
await messageAgent(testSession, nudge);
|
|
27544
27628
|
unsignaledTestNudges.set(testSession, now);
|
|
27545
27629
|
const msg = `Nudged ${testSession} to signal ${decision.status} (verdict artifact present)`;
|
|
@@ -27553,7 +27637,7 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
27553
27637
|
case "nudge-write": {
|
|
27554
27638
|
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.`;
|
|
27555
27639
|
try {
|
|
27556
|
-
const { messageAgent } = await import("./agents-
|
|
27640
|
+
const { messageAgent } = await import("./agents-BA15AQqo.js");
|
|
27557
27641
|
await messageAgent(testSession, nudge);
|
|
27558
27642
|
unsignaledTestNudges.set(testSession, now);
|
|
27559
27643
|
const msg = `Nudged ${testSession} to write+signal a test verdict (no artifact yet)`;
|
|
@@ -27576,8 +27660,8 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
27576
27660
|
async function checkVerificationReviewContradiction() {
|
|
27577
27661
|
const actions = [];
|
|
27578
27662
|
try {
|
|
27579
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
27580
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
27663
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-77N3PoZr.js");
|
|
27664
|
+
const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
|
|
27581
27665
|
const statuses = loadReviewStatuses();
|
|
27582
27666
|
for (const [issueId, status] of Object.entries(statuses)) if (status.verificationStatus === "passed" && status.reviewStatus === "reviewing" && status.stuckReason === "review_infrastructure_failure") {
|
|
27583
27667
|
let reviewedAtCommit;
|
|
@@ -27626,7 +27710,7 @@ async function checkPostReviewCommits() {
|
|
|
27626
27710
|
const actions = [];
|
|
27627
27711
|
try {
|
|
27628
27712
|
const statuses = loadReviewStatuses();
|
|
27629
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
27713
|
+
const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
|
|
27630
27714
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
27631
27715
|
if (status.mergeStatus === "merged") continue;
|
|
27632
27716
|
if (!status.reviewedAtCommit) continue;
|
|
@@ -27681,7 +27765,7 @@ async function checkPostReviewCommits() {
|
|
|
27681
27765
|
actions.push(`Deferred post-review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
|
|
27682
27766
|
logDeaconEventSync(`checkPostReviewCommits: deferred review for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
|
|
27683
27767
|
} else if (freshStatus?.reviewStatus === "pending") {
|
|
27684
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
27768
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-CpSHLzed.js");
|
|
27685
27769
|
const branch = `feature/${issueId.toLowerCase()}`;
|
|
27686
27770
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
27687
27771
|
issueId,
|
|
@@ -27781,7 +27865,7 @@ async function checkReadyForMergeStuck() {
|
|
|
27781
27865
|
const testStatusGreenCiReconcileCooldowns = /* @__PURE__ */ new Map();
|
|
27782
27866
|
const TEST_STATUS_GREEN_CI_RECONCILE_COOLDOWN_MS = 300 * 1e3;
|
|
27783
27867
|
async function reconcileTestStatusFromGreenCi() {
|
|
27784
|
-
const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-
|
|
27868
|
+
const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-BrYwK_Gb.js");
|
|
27785
27869
|
return reconcileTestStatusFromGreenCiWithDeps({
|
|
27786
27870
|
isGitHubAppConfigured,
|
|
27787
27871
|
loadReviewStatuses,
|
|
@@ -27802,7 +27886,7 @@ async function reconcileTestStatusFromGreenCi() {
|
|
|
27802
27886
|
*/
|
|
27803
27887
|
async function clearStaleCiFeedback(issueId) {
|
|
27804
27888
|
const { readdir, rm } = await import("fs/promises");
|
|
27805
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
27889
|
+
const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
|
|
27806
27890
|
const projectConfig = resolveProjectFromIssueSync(issueId);
|
|
27807
27891
|
if (!projectConfig) return;
|
|
27808
27892
|
const repoDir = projectConfig.projectPath;
|
|
@@ -27858,7 +27942,7 @@ async function checkDeadEndAgents() {
|
|
|
27858
27942
|
const autoRequeueCount = status.autoRequeueCount || 0;
|
|
27859
27943
|
if (autoRequeueCount >= 25) {
|
|
27860
27944
|
console.log(`[deacon] Dead-end detected for ${key} but circuit breaker active (${autoRequeueCount}/25 requeues used)`);
|
|
27861
|
-
const trip = recordDeadEndNeedsYou(key, "dead-end-rebuild", status.updatedAt ?? "rework", `Dead-end recovery needs-you: ${key} exhausted 25 requeues`);
|
|
27945
|
+
const trip = await recordDeadEndNeedsYou(key, "dead-end-rebuild", status.updatedAt ?? "rework", `Dead-end recovery needs-you: ${key} exhausted 25 requeues`);
|
|
27862
27946
|
if (trip) actions.push(trip);
|
|
27863
27947
|
continue;
|
|
27864
27948
|
}
|
|
@@ -27879,7 +27963,7 @@ async function checkDeadEndAgents() {
|
|
|
27879
27963
|
const gateDecision = decideAgentAutonomousRedrive(agentState ?? {}, getAgentDir(agentSessionName), true);
|
|
27880
27964
|
if (gateDecision.decision === "defer") {
|
|
27881
27965
|
console.log(`[deacon] PAN-2209: ${issueId} (${statusType}) re-drive deferred — ${gateDecision.reason}`);
|
|
27882
|
-
const trip = gateDecision.needsYou && recordDeadEndNeedsYou(issueId, "operator-stopped-rework", status.updatedAt ?? statusType, `Dead-end recovery needs-you: ${issueId} was explicitly stopped before handoff`);
|
|
27966
|
+
const trip = gateDecision.needsYou && await recordDeadEndNeedsYou(issueId, "operator-stopped-rework", status.updatedAt ?? statusType, `Dead-end recovery needs-you: ${issueId} was explicitly stopped before handoff`);
|
|
27883
27967
|
if (trip) actions.push(trip);
|
|
27884
27968
|
} else {
|
|
27885
27969
|
if (gateDecision.gateDecision.clearStoppedByUser && agentState) {
|
|
@@ -28102,7 +28186,7 @@ async function checkWorkspaceContainerHealth(sharedState) {
|
|
|
28102
28186
|
}
|
|
28103
28187
|
}
|
|
28104
28188
|
try {
|
|
28105
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28189
|
+
const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
|
|
28106
28190
|
const resolved = resolveProjectFromIssueSync(issueLower.toUpperCase());
|
|
28107
28191
|
if (resolved) await killOrphanedWorkspaceProcesses(`${resolved.projectPath}/workspaces/feature-${issueLower}`);
|
|
28108
28192
|
} catch {}
|
|
@@ -28151,8 +28235,8 @@ async function checkWorkspaceContainerHealth(sharedState) {
|
|
|
28151
28235
|
async function checkMergedWorkSessions() {
|
|
28152
28236
|
const actions = [];
|
|
28153
28237
|
try {
|
|
28154
|
-
const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-
|
|
28155
|
-
const { setAgentPaused } = await import("./agents-
|
|
28238
|
+
const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-BR39qflC.js");
|
|
28239
|
+
const { setAgentPaused } = await import("./agents-BA15AQqo.js");
|
|
28156
28240
|
const toKill = selectMergedWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
|
|
28157
28241
|
for (const session of toKill) try {
|
|
28158
28242
|
await Effect.runPromise(setAgentPaused(session, "merged — awaiting close-out (verify on main)", true));
|
|
@@ -28192,7 +28276,7 @@ const AWAITING_TEST_IDLE_REAP_MS = 600 * 1e3;
|
|
|
28192
28276
|
async function checkAwaitingTestWorkSessions() {
|
|
28193
28277
|
const actions = [];
|
|
28194
28278
|
try {
|
|
28195
|
-
const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-
|
|
28279
|
+
const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-BR39qflC.js");
|
|
28196
28280
|
const candidates = selectAwaitingTestWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
|
|
28197
28281
|
const now = Date.now();
|
|
28198
28282
|
for (const session of candidates) {
|
|
@@ -28245,10 +28329,14 @@ async function runPatrol() {
|
|
|
28245
28329
|
hasLoggedGlobalPauseSkip = false;
|
|
28246
28330
|
addLog("info", `Patrol cycle ${state.patrolCycle} — checking per-project specialists`, state.patrolCycle);
|
|
28247
28331
|
console.log(`[deacon] Patrol cycle ${state.patrolCycle} - checking per-project specialists`);
|
|
28332
|
+
for (const a of await (await import("./stale-task-claims-vTxmRzLi.js")).patrolStaleTaskClaims()) {
|
|
28333
|
+
actions.push(a);
|
|
28334
|
+
addLog("action", a, state.patrolCycle);
|
|
28335
|
+
}
|
|
28248
28336
|
const stuckRemediationActions = await checkStuckAgentRemediation();
|
|
28249
28337
|
actions.push(...stuckRemediationActions);
|
|
28250
28338
|
for (const a of stuckRemediationActions) addLog("action", a, state.patrolCycle);
|
|
28251
|
-
const { reconcileInFlightJournals } = await import("./advancing-selfheal-
|
|
28339
|
+
const { reconcileInFlightJournals } = await import("./advancing-selfheal-DgwQgm4D.js");
|
|
28252
28340
|
const reconciledJournalActions = await reconcileInFlightJournals();
|
|
28253
28341
|
actions.push(...reconciledJournalActions);
|
|
28254
28342
|
for (const a of reconciledJournalActions) addLog("action", a, state.patrolCycle);
|
|
@@ -28260,7 +28348,7 @@ async function runPatrol() {
|
|
|
28260
28348
|
const age = Date.now() - (pending.timestamp ?? 0);
|
|
28261
28349
|
if (age < 3600 * 1e3) {
|
|
28262
28350
|
console.log(`[deacon] Processing pending post-merge lifecycle for ${pending.issueId} (age: ${Math.round(age / 1e3)}s)`);
|
|
28263
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
28351
|
+
const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
|
|
28264
28352
|
const { unlinkSync } = await import("fs");
|
|
28265
28353
|
unlinkSync(pendingFile);
|
|
28266
28354
|
await postMergeLifecycle(pending.issueId, pending.projectPath, pending.sourceBranch, { skipDeploy: true });
|
|
@@ -28305,7 +28393,7 @@ async function runPatrol() {
|
|
|
28305
28393
|
actions.push(...suspendActions);
|
|
28306
28394
|
for (const a of suspendActions) addLog("action", a, state.patrolCycle);
|
|
28307
28395
|
try {
|
|
28308
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28396
|
+
const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
|
|
28309
28397
|
const allStatuses = loadReviewStatuses();
|
|
28310
28398
|
for (const [issueId, status] of Object.entries(allStatuses)) {
|
|
28311
28399
|
if (!status.readyForMerge || status.mergeStatus === "merged") continue;
|
|
@@ -28325,7 +28413,7 @@ async function runPatrol() {
|
|
|
28325
28413
|
} catch (err) {
|
|
28326
28414
|
console.warn(`[deacon] Failed to check workspace existence: ${err.message}`);
|
|
28327
28415
|
}
|
|
28328
|
-
const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-
|
|
28416
|
+
const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-DgwQgm4D.js");
|
|
28329
28417
|
const reapedWorkActions = await checkMergedWorkSessions();
|
|
28330
28418
|
actions.push(...reapedWorkActions);
|
|
28331
28419
|
for (const a of reapedWorkActions) addLog("action", a, state.patrolCycle);
|
|
@@ -28333,7 +28421,7 @@ async function runPatrol() {
|
|
|
28333
28421
|
actions.push(...reapedMergedAdvancingActions);
|
|
28334
28422
|
for (const a of reapedMergedAdvancingActions) addLog("action", a, state.patrolCycle);
|
|
28335
28423
|
try {
|
|
28336
|
-
const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-
|
|
28424
|
+
const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-2Kb4IDg_.js");
|
|
28337
28425
|
const remoteCredentialActions = await refreshClaudeCredentialsForActiveRemoteAgents();
|
|
28338
28426
|
actions.push(...remoteCredentialActions);
|
|
28339
28427
|
for (const a of remoteCredentialActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
|
|
@@ -28341,7 +28429,7 @@ async function runPatrol() {
|
|
|
28341
28429
|
addLog("warn", `Remote credential refresh patrol failed: ${err.message}`, state.patrolCycle);
|
|
28342
28430
|
}
|
|
28343
28431
|
try {
|
|
28344
|
-
const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-
|
|
28432
|
+
const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-DYY5fFpd.js");
|
|
28345
28433
|
const heartbeatActions = await refreshHostHeartbeatForEphemeralVms();
|
|
28346
28434
|
actions.push(...heartbeatActions);
|
|
28347
28435
|
for (const a of heartbeatActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
|
|
@@ -28349,7 +28437,7 @@ async function runPatrol() {
|
|
|
28349
28437
|
addLog("warn", `Remote heartbeat refresh patrol failed: ${err.message}`, state.patrolCycle);
|
|
28350
28438
|
}
|
|
28351
28439
|
try {
|
|
28352
|
-
const { reapCompletedRemoteAgents } = await import("./remote-completion-
|
|
28440
|
+
const { reapCompletedRemoteAgents } = await import("./remote-completion-2Kb4IDg_.js");
|
|
28353
28441
|
const remoteReap = await reapCompletedRemoteAgents();
|
|
28354
28442
|
for (const r of remoteReap) if (r.status === "handed-off" || r.status === "error") {
|
|
28355
28443
|
const msg = `Remote reap ${r.issueId}: ${r.status} (${r.details.join("; ")})`;
|
|
@@ -28484,7 +28572,10 @@ async function runPatrol() {
|
|
|
28484
28572
|
for (const a of playwrightActions) addLog("action", a, state.patrolCycle);
|
|
28485
28573
|
}
|
|
28486
28574
|
const projectConfigs = listProjectsSync();
|
|
28487
|
-
for (const
|
|
28575
|
+
for (const result of await reconcileProjectStatePlanes(projectConfigs)) {
|
|
28576
|
+
actions.push(result.message);
|
|
28577
|
+
addLog(result.level, result.message, state.patrolCycle);
|
|
28578
|
+
}
|
|
28488
28579
|
for (const warning of await recreatedStateWarnings(projectConfigs)) addLog("error", warning, state.patrolCycle);
|
|
28489
28580
|
const divergenceWarnings = await recordMainDivergenceHealth(state, projectConfigs);
|
|
28490
28581
|
for (const warning of divergenceWarnings) addLog("warn", warning, state.patrolCycle);
|
|
@@ -28527,7 +28618,7 @@ async function runPatrol() {
|
|
|
28527
28618
|
const issueId = runtimeState.currentIssue;
|
|
28528
28619
|
try {
|
|
28529
28620
|
if (getReviewStatusSync(issueId)?.mergeStatus === "merging") {
|
|
28530
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28621
|
+
const { resolveProjectFromIssueSync } = await import("./projects-Dc9aoVoG.js");
|
|
28531
28622
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
28532
28623
|
if (resolved) {
|
|
28533
28624
|
const branch = `feature/${issueId.toLowerCase()}`;
|
|
@@ -28541,7 +28632,7 @@ async function runPatrol() {
|
|
|
28541
28632
|
mergeStatus: "merged",
|
|
28542
28633
|
readyForMerge: false
|
|
28543
28634
|
});
|
|
28544
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
28635
|
+
const { postMergeLifecycle } = await import("./merge-agent-DMQTJMP0.js");
|
|
28545
28636
|
postMergeLifecycle(issueId, resolved.projectPath).catch((err) => console.warn(`[deacon] postMergeLifecycle failed for ${issueId}: ${err}`));
|
|
28546
28637
|
actions.push(`Auto-completed stale merge for ${issueId}`);
|
|
28547
28638
|
} else {
|
|
@@ -28721,7 +28812,7 @@ function startDeacon() {
|
|
|
28721
28812
|
logDeaconEventSync(`startDeacon: health monitor starting (patrol every ${config.patrolIntervalMs / 1e3}s)`);
|
|
28722
28813
|
(async () => {
|
|
28723
28814
|
await reconcileAgentLiveness();
|
|
28724
|
-
const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-
|
|
28815
|
+
const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-DgwQgm4D.js");
|
|
28725
28816
|
await runBootAdvancingSelfHeal();
|
|
28726
28817
|
runScheduledPatrol("startup");
|
|
28727
28818
|
})().catch((err) => {
|
|
@@ -28791,6 +28882,6 @@ function assessDeaconPatrolFreshness(params) {
|
|
|
28791
28882
|
};
|
|
28792
28883
|
}
|
|
28793
28884
|
//#endregion
|
|
28794
|
-
export { isPreKickoffLaunchDeath as $, reconcileAgentLiveness as A, stalledReviewConvoyRecoveryState as At, applyIssueBlocksMainLabel as B,
|
|
28885
|
+
export { isPreKickoffLaunchDeath as $, 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, paneShowsClaudeBootBlockingScreen as Ft, applyIssueVetoedLabel as G, isSmeeConfiguredSync as Gt, applyIssueParkedLabel as H, getCurrentDockerStats as Ht, setAgentStoppedNotifier as I, INSPECT_TIMEOUT_MS as It, removeIssueParkedLabel as J, removeIssueBlocksMainLabel as K, startSmeeProcessSync as Kt, setMergeReadyNotifier as L, checkInspectAgentTimeouts 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, 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, removeIssueReadyLabel as Y, removeIssueVetoedLabel as Z, 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, 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, nudgeStalledResumeWorkAgents as nt, checkDeadEndAgents as o, startBootReconciliation as ot, checkStuckWorkAgents as p, reconcileMergedButReviewing as pt, removeIssueObjectionLabel as q, checkAndSuspendIdleAgents as r, redeliverUndeliveredKickoffs as rt, checkMassDeath as s, autoCloseOut as st, applyBootReconciliationDecision as t, 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 };
|
|
28795
28886
|
|
|
28796
|
-
//# sourceMappingURL=deacon-
|
|
28887
|
+
//# sourceMappingURL=deacon-Dru5onpk.js.map
|