@overdeck/desktop 0.45.16 → 0.45.19
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-DQqRIuQ-.js +62 -0
- package/server/{advancing-selfheal-DJYAvGv-.js → advancing-selfheal-BYidNkmp.js} +6 -6
- package/server/{agent-gc-D0wDIeV1.js → agent-gc-ClNQLl_V.js} +3 -3
- package/server/agent-state-BMrpX7kU.js +3 -0
- package/server/{agent-state-service-DFslS5go.js → agent-state-service-BpAKmodj.js} +5 -5
- package/server/{agent-state-service-CZrayD_G.js → agent-state-service-CC9NMIWn.js} +1 -1
- package/server/{briefing-freshness-DESTCWo-.js → agents--ljN-wVY.js} +5 -131
- package/server/agents-DAUyr_Z1.js +3 -0
- package/server/{archive-planning-CoyIbgGK.js → archive-planning-2w8WQaeJ.js} +1 -1
- package/server/{archive-planning-CbghE9-o.js → archive-planning-BW3te5Vw.js} +5 -10
- package/server/{artifact-index-jobs-CcSrUoSE.js → artifact-index-jobs-DFO3eceF.js} +2 -2
- package/server/{backlog-auto-trigger-BfgDsII0.js → backlog-auto-trigger-DECBMxLq.js} +2 -2
- package/server/{behavior-BTpYbAv4.js → behavior-CWqNMqE5.js} +2 -2
- package/server/briefing-freshness-B1delh4l.js +131 -0
- package/server/{checkpoint-manager-DWSXooZV.js → checkpoint-manager-CjLY6A4r.js} +1 -1
- package/server/{checkpoint-manager-BwFdegJF.js → checkpoint-manager-D6_71Rpb.js} +3 -3
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-BtUonbs3.js → checkpoints-BYrLxVle.js} +2 -2
- package/server/{checkpoints-fjadfOKF.js → checkpoints-xSuv4v4I.js} +1 -1
- package/server/{claude-hooks-provision-DiK62u0k.js → claude-hooks-provision-DL6yfJB_.js} +1 -1
- package/server/{claude-hooks-provision-DAtxutOs.js → claude-hooks-provision-DvfVZbbT.js} +2 -2
- package/server/{claude-permissions-CThLgf8d.js → claude-permissions-CcncrTNF.js} +2 -2
- package/server/{claude-settings-overlay-BF9MPIwx.js → claude-settings-overlay-1IfYetv2.js} +2 -2
- package/server/{claude-settings-overlay-Dx_Uqcmv.js → claude-settings-overlay-Ca3LXjAC.js} +1 -1
- package/server/cli-BxZHwgRK.js +3 -0
- package/server/{cli-ByKIIMfT.js → cli-DGZWYXio.js} +9 -9
- package/server/{cliproxy-B4c1BUvs.js → cliproxy-Dw42Xy3t.js} +2 -2
- package/server/{cliproxy-C_GuT5DU.js → cliproxy-DziJLbfo.js} +1 -1
- package/server/{close-issue-BOuLKr6e.js → close-issue-DEGjxifn.js} +5 -5
- package/server/{closed-issue-reaper-DCAYzNXW.js → closed-issue-reaper-BsJ3JqQy.js} +9 -9
- package/server/{closed-issue-reaper-CksfuiFD.js → closed-issue-reaper-CNr7X4MB.js} +1 -1
- package/server/codex-C8OlW-dN.js +3 -0
- package/server/{codex-BbqIRZjd.js → codex-D5RyWzNL.js} +43 -18
- package/server/{codex-parser-mFYZh8vR.js → codex-parser-BRxvUkk8.js} +2 -2
- package/server/{config-Dj6N8EP9.js → config-CQ2u44iP.js} +1 -1
- package/server/{config-DVLdmnMJ.js → config-Cntj_tFu.js} +2 -2
- package/server/{config-yaml-cNOZcEww.js → config-yaml-BQs6GbD_.js} +75 -74
- package/server/{conflict-gate-CuXUv-bP.js → conflict-gate-BE6JdfkO.js} +1 -1
- package/server/{conflict-gate-BMKm_5DV.js → conflict-gate-DdfwKgy0.js} +3 -3
- package/server/{context-layers-c0JqYHcS.js → context-layers-DFucrVVG.js} +17 -3
- package/server/{context-layers-CeAwSYNt.js → context-layers-DO0Eyq2E.js} +2 -2
- package/server/{control-settings-D4EFsRBd.js → control-settings-bxOCLsuE.js} +4 -4
- package/server/{conversation-compaction-BCggyih4.js → conversation-compaction-Dq6MfZdL.js} +8 -8
- package/server/{conversation-compaction-kHVfVRg3.js → conversation-compaction-lSlUb-cU.js} +1 -1
- package/server/{conversation-service-BTzObqGi.js → conversation-service-BVt4MQ1_.js} +1 -1
- package/server/{conversation-service-B8LFQQm1.js → conversation-service-TZsQjkjT.js} +6 -6
- package/server/{conversations-B-lcHv-5.js → conversations-CxOWHNzv.js} +4 -4
- package/server/{conversations-BM7zlXjr.js → conversations-DaF6elGK.js} +1 -1
- package/server/{cost-BcpRQ-7o.js → cost-Dlh0IEiv.js} +3 -3
- package/server/{cost-D9kPIY_5.js → cost-oinpUqvE.js} +2 -2
- package/server/{cost-sync-DF6odxK9.js → cost-sync-CVIAsrhB.js} +3 -3
- package/server/{dag-DKI3sOmX.js → dag-ClFr7Bah.js} +7 -243
- package/server/{dangerous-git-ops-Bn18PEcN.js → dangerous-git-ops-q5OPtXMd.js} +1 -1
- package/server/dashboard-db-worker.js +6 -6
- package/server/{deacon-DONuopff.js → deacon-B8ygB3e8.js} +3 -3
- package/server/{deacon-DdARMjZq.js → deacon-D2-xTesT.js} +233 -162
- package/server/{deacon-nudge-log-B-naf89q.js → deacon-nudge-log-ilDfxrhK.js} +1 -1
- package/server/deacon-swarm-1vPLuj_l.js +2 -0
- package/server/{deacon-swarm-BNGkmYR_.js → deacon-swarm-yWKQhxiX.js} +298 -72
- package/server/deacon.js +14 -7
- package/server/{devcontainer-renderer-C-34Sxyz.js → devcontainer-renderer-xPhZHCrx.js} +3 -3
- package/server/{dist-BMXvKiZP.js → dist-BwlEiLCU.js} +1 -1
- package/server/dist-Bx4KkgYL.js +3 -0
- package/server/{dist-src-BgGUblXg.js → dist-src-BE0Denfs.js} +1 -1
- package/server/{docker-apZ9pBYw.js → docker-DPEglAwA.js} +2 -2
- package/server/{ensure-devcontainer-Bqi1EF1P.js → ensure-devcontainer-SzSvEdKq.js} +4 -4
- package/server/{ensure-devcontainer-Dq3KoOIl.js → ensure-devcontainer-wU3ym1b5.js} +1 -1
- package/server/{esm-shims-BEjvINX3.js → esm-shims-Cso7IGBC.js} +1 -1
- package/server/{event-store-CqDgfbAs.js → event-store-BZoXexYS.js} +1 -1
- package/server/{event-store-D89fMfXS.js → event-store-D4s6eQ6o.js} +3 -3
- package/server/{events-rIGncmP1.js → events-Bn-wdUBF.js} +1 -1
- package/server/{events-S_C0pvl6.js → events-D1hMLl2a.js} +3 -3
- package/server/{factory-DV18m0rc.js → factory-ltWnu0V_.js} +20 -17
- package/server/{feature-registry-population-CqZSnqQi.js → feature-registry-population-xj-J1Wm7.js} +4 -4
- package/server/{feature-registry-storage-BeXmNBwK.js → feature-registry-storage-CQZukiLm.js} +2 -2
- package/server/{features-u5XeMaOK.js → features-Dyqi6N8f.js} +2 -2
- package/server/{feedback-target-DDG1PWl3.js → feedback-target-Ba0zhSYI.js} +1 -1
- package/server/{feedback-target-CwyWf0Dg.js → feedback-target-Chd5dm-Q.js} +9 -7
- package/server/{feedback-writer-BsJiw5aT.js → feedback-writer-BtaoJGl2.js} +1 -1
- package/server/{feedback-writer-D20HSXre.js → feedback-writer-BujzReaQ.js} +4 -4
- package/server/{flywheel-Dczmgchd.js → flywheel-FTInS73X.js} +15 -28
- package/server/{flywheel-RCnHAgc4.js → flywheel-bTImiVrk.js} +1 -1
- package/server/{flywheel-merge-order-CtCYsFJP.js → flywheel-merge-order-DuenRJLZ.js} +6 -6
- package/server/{flywheel-merge-order-DEtEd3aK.js → flywheel-merge-order-O5Zu8iPw.js} +1 -1
- package/server/{flywheel-9Y1X7IM-.js → flywheel-rmYbW-lh.js} +13 -13
- package/server/{forge-DFDThFil.js → forge-OWm99lie.js} +22 -12
- package/server/forge-x5lszTd0.js +2 -0
- package/server/{from-NSJypkI8.js → from-B2tOYhYV.js} +1 -1
- package/server/{fts-db-C5A_TTOM.js → fts-db-BRfS5ukG.js} +2 -2
- package/server/{fts-operations-DvCSimfU.js → fts-operations-L5sNLoHl.js} +2 -2
- package/server/{git-utils-C0neHvQx.js → git-utils-BIEzv2Zp.js} +1 -1
- package/server/{git-utils-Dr0L7mFk.js → git-utils-CP-bg-aM.js} +2 -2
- package/server/{github-app-u9-SX7Gc.js → github-app-CRUIvHuM.js} +8 -3
- package/server/{github-app-Bwt9lK4A.js → github-app-Dtn4ib6M.js} +1 -1
- package/server/{github-client-Btyy3uan.js → github-client-CWEFlCqL.js} +3 -3
- package/server/{github-client-Do3k-N1W.js → github-client-DSVv6wX8.js} +1 -1
- package/server/{github-pr-lookup-DOF1U2WW.js → github-pr-lookup-D6CS9vtG.js} +2 -2
- package/server/{harness-resolve-C6g2R0Cd.js → harness-resolve-ScD6rV47.js} +3 -3
- package/server/{health-events-Bos3sk5g.js → health-events-DbcJmYmd.js} +1 -1
- package/server/{health-events-B4u-2a9m.js → health-events-Dm1Vcvqe.js} +2 -2
- package/server/{hooks-uEr8WTx_.js → hooks-B6gaI6Kg.js} +1 -1
- package/server/{hooks-BCoOjL_R.js → hooks-VXuCnzCv.js} +3 -3
- package/server/hume-B4seN95Y.js +3 -0
- package/server/{hume-BqxYKbUf.js → hume-BRhNKyXQ.js} +2 -2
- package/server/{idle-stack-reaper-H0W6XtHh.js → idle-stack-reaper-Gv32ZCrQ.js} +1 -1
- package/server/{idle-stack-reaper-DbZ8ukMd.js → idle-stack-reaper-po700Lfg.js} +2 -2
- package/server/{infra-Ba9mS6e6.js → infra-DYwIXlK5.js} +9 -4
- package/server/{injection-C1DKXeIZ.js → injection-CTfFnpsG.js} +1 -1
- package/server/{injection-yrMBxzVq.js → injection-DPsUoCJp.js} +7 -7
- package/server/inspect-agent-B25IP-0O.js +2 -0
- package/server/{inspect-agent-B-mnb4uh.js → inspect-agent-CLkwfLRx.js} +35 -67
- package/server/{internal-token-BtqSbKTx.js → internal-token--50JhWP7.js} +2 -2
- package/server/{internal-token-BPYEaXFh.js → internal-token-BOgxXMGy.js} +1 -1
- package/server/{io-VEGSAqsd.js → io-Cv9xQTks.js} +36 -43
- package/server/{issue-closed-BxcePXL-.js → issue-closed-CyqtoFUj.js} +41 -6
- package/server/{issue-lifecycle-CdMUauyb.js → issue-lifecycle-Cm7ydBGK.js} +1 -1
- package/server/{issue-lifecycle--8MRxrG1.js → issue-lifecycle-DR6n40bh.js} +22 -37
- package/server/{issue-service-singleton-MZsDhAob.js → issue-service-singleton--LQ5c2zT.js} +1 -1
- package/server/{issue-service-singleton-CkTUI-eu.js → issue-service-singleton-DKKPneH4.js} +29 -29
- package/server/{issues-CBAsuoAO.js → issues-Cr-BLFLO.js} +2 -2
- package/server/{jsonl-parser-BUW5_sSK.js → jsonl-parser-Bp_xCkX4.js} +3 -3
- package/server/{label-cleanup-htK6fBRU.js → label-cleanup-BbLy2FZe.js} +3 -3
- package/server/{state-home-CEvD_v5F.js → launcher-generator-C-FU4PNT.js} +7 -127
- package/server/{layers-jjL16At6.js → layers-C-6lBDUE.js} +2 -2
- package/server/lifecycle-Bmw8yU_A.js +12 -0
- package/server/{lifecycle-io-DXv8Utct.js → lifecycle-io-B150XprC.js} +1 -1
- package/server/{lifecycle-io-IehcRt2v.js → lifecycle-io-Dcu-_ktz.js} +4 -4
- package/server/{linear-client-D9cSQfvD.js → linear-client-BHjs0luk.js} +3 -3
- package/server/{linear-client-By7hjwuN.js → linear-client-s65LNmlG.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-BLcEZNXz.js → merge-CM8swd2V.js} +1 -1
- package/server/{merge-BN8FGJ2q.js → merge-CS0b-E3u.js} +3 -3
- package/server/{merge-agent-B3u2szOL.js → merge-agent-Bu1hw9cz.js} +64 -51
- package/server/{merge-agent-ejC7Wos8.js → merge-agent-D6LRIW63.js} +1 -1
- package/server/{merge-batch-DyqlgYGp.js → merge-batch-Bv6Z5K2H.js} +1 -1
- package/server/{merge-blockers-cq-aS2KG.js → merge-blockers-Dt43hJiW.js} +2 -2
- package/server/merge-ops-DwYi3U_x.js +2 -0
- package/server/{merge-rebase-Dl7yIxtV.js → merge-rebase-B3vQcTq1.js} +2 -2
- package/server/{merge-set-Dy0D0r3i.js → merge-set-BMEGEKQg.js} +1 -1
- package/server/{merge-set-CZ9Nbay0.js → merge-set-Pe3spe8k.js} +3 -3
- package/server/{merge-sync-CG9kDCdT.js → merge-sync-CpxFRIQ7.js} +1 -1
- package/server/{merge-sync-D7jWLgCC.js → merge-sync-STpg1hk3.js} +2 -2
- package/server/{merge-train-CH33XJOH.js → merge-train-DLw2hDk0.js} +3 -3
- package/server/{merge-train-deps-JoVdGnOg.js → merge-train-deps-BlCGLqwy.js} +4 -4
- package/server/{merge-verification-D4wTChdX.js → merge-verification-C4WMP40D.js} +4 -4
- package/server/{multipart-parser-Csn8U-K9.js → multipart-parser-9DhuAkPd.js} +2 -2
- 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-BIcNu4tl.js → orphan-proposed-reconciler-eetUXmmt.js} +1 -1
- package/server/{orphan-proposed-reconciler-DI_IS1p_.js → orphan-proposed-reconciler-k9eydM1E.js} +14 -24
- package/server/package-lock.json +12 -12
- package/server/package.json +1 -1
- package/server/{pan-dir-CQIfKG8c.js → pan-dir-D3vABXMs.js} +4 -4
- package/server/{paths-Blj6A9AJ.js → paths-DIoslfsu.js} +2 -2
- package/server/{pipeline-notifier-BH4PAi-w.js → pipeline-notifier-Bgidcelx.js} +1 -1
- package/server/{pipeline-notifier-D_WYtEwl.js → pipeline-notifier-CuBONomU.js} +2 -2
- package/server/{project-pipelines-jMTitpeO.js → project-pipelines-B9b_JVTS.js} +2 -2
- package/server/projects-DxMUi2eI.js +3 -0
- package/server/{prompts-B3njaImU.js → prompts-CY1xnHS-.js} +2 -2
- package/server/{providers-DnPxkHoG.js → providers-B7BNcK_j.js} +1 -1
- package/server/{providers-BbEyFhPX.js → providers-CAlK2If5.js} +7 -7
- package/server/public/assets/{chunk-BO2N2NFS-3qh9TUJi.js → chunk-BO2N2NFS-DzKZyoKY.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-D8UVTPj7.js → diagram-OG6HWLK6-Cx8mWUb8.js} +1 -1
- package/server/public/assets/{dist-BvLLn1YC.js → dist-BqccLhaw.js} +3 -3
- package/server/public/assets/{dist-CyubL7Wj.js → dist-rC3nAs_O.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-BI4E1LbQ.js → ganttDiagram-6RSMTGT7-DLYPLf5T.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-D_bapWkF.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-CEdobObr.js → linear-yqcXkDfj.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-CWdZ_heB.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-DT79L01f.js → pieDiagram-4H26LBE5-DhraIOaV.js} +1 -1
- package/server/public/assets/{prod-CR_K2DFV.js → prod-DKUunUdN.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-BEkKXXrL.js → quadrantDiagram-W4KKPZXB-DPiRcToa.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-BxSCqn-j.js → sankeyDiagram-5OEKKPKP-3An5HNkZ.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-DicwJGG_.js → xychartDiagram-2RQKCTM6-lbEOjfqQ.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-43LPDfM8.js → pull-requests-Cs4VLxiY.js} +1 -1
- package/server/{pull-requests-DyUkQl4W.js → pull-requests-CxfrQiWX.js} +3 -3
- package/server/{agents-B9GwfCyp.js → queries-srgusoi8.js} +710 -325
- package/server/{rally-BtWjybOa.js → rally-AKkjuGdi.js} +3 -3
- package/server/rally-BOza5j3_.js +3 -0
- package/server/{rally-api-B-osULNL.js → rally-api-BGxATnyr.js} +2 -2
- package/server/{rally-api-B-YA_oXx.js → rally-api-Dbqw1YW9.js} +1 -1
- package/server/{rally-client-CzFymP7P.js → rally-client-B1U5ewpO.js} +1 -1
- package/server/{rally-client-sErNQBO0.js → rally-client-D8h73ei_.js} +5 -5
- package/server/{reap-terminal-sessions-DnDQ7pf9.js → reap-terminal-sessions-BR39qflC.js} +1 -1
- package/server/{reap-terminal-sessions-2s-fvilz.js → reap-terminal-sessions-CFkuquQj.js} +1 -1
- package/server/{rebuild-stack-CoU-HqZj.js → rebuild-stack-BYdtwS6f.js} +5 -5
- package/server/{rebuild-stack-nGD_nPZo.js → rebuild-stack-Dsm9WjKv.js} +1 -1
- package/server/{reconstruct-cache-Wj8GrYB0.js → reconstruct-cache-D7oM1lNv.js} +6 -6
- package/server/record-BeXdn9Ue.js +3 -0
- package/server/record-update-Cb_pPM-F.js +168 -0
- package/server/record-update-KFiISAmu.js +3 -0
- package/server/recovery-trip-DwbsONZf.js +44 -0
- package/server/{release-engine-CBLQXDlH.js → release-engine-CAai5W0V.js} +5 -5
- package/server/{release-set-BNiqi7hy.js → release-set-vNEAfyDH.js} +3 -3
- package/server/{remote-DW_TWQnr.js → remote-8HlOfuF1.js} +3 -3
- package/server/{remote-DcO9An_f.js → remote-RQMKOL_R.js} +3 -3
- package/server/{remote-agents-C4cyxHQS.js → remote-agents-C4a4DdTj.js} +6 -33
- package/server/{remote-agents-Cv-U-_V8.js → remote-agents-_Z1SAaSK.js} +1 -1
- package/server/{remote-completion-PhXGGFQy.js → remote-completion-CH3igKY8.js} +13 -13
- package/server/resume-Cr34JAXO.js +3 -0
- package/server/{review-agent-Dn-yn7Zj.js → review-agent-CQ7oRh_G.js} +31 -23
- package/server/{review-agent-u5q3ip7H.js → review-agent-CUVj54v0.js} +1 -1
- package/server/{review-artifacts-D4T04aYI.js → review-artifacts-CC3yGv7o.js} +5 -19
- package/server/{review-context-Rc0VDLG_.js → review-context-BuxaAgAd.js} +8 -8
- package/server/{review-monitor-BC--miCO.js → review-monitor-uogOppaW.js} +2 -2
- package/server/{review-status-CG0iDuWa.js → review-status-BoJdyvUQ.js} +1 -1
- package/server/{review-status-Dc1l4dVz.js → review-status-By86XA6Z.js} +38 -62
- package/server/{review-status-enrichment-C1a1OG_1.js → review-status-enrichment-CRQAO27G.js} +3 -3
- package/server/{review-status-sync-CfSixhhX.js → review-status-sync-BI4WhUkF.js} +1 -1
- package/server/{review-status-sync-CAr-hfnJ.js → review-status-sync-DUQmrLkK.js} +2 -2
- package/server/{review-verdict-feedback-CVDbIDBe.js → review-verdict-feedback-BNcGkBRD.js} +8 -8
- package/server/{review-verdict-feedback-D2Q960wX.js → review-verdict-feedback-CWz9_9Kp.js} +1 -1
- package/server/{rollup-CakjztPl.js → rollup-B-K6PCbm.js} +1 -1
- package/server/{rollup-DctoIu-A.js → rollup-CqiFgtBp.js} +8 -8
- package/server/{scanner-BTM1jc_u.js → scanner-BZmDUjyD.js} +7 -7
- package/server/{sequence-io-pnoIDGv4.js → sequence-io-BuUx1ZAY.js} +4 -4
- package/server/{sequencer-agent-9Soi-WL-.js → sequencer-agent-2uWOA_BC.js} +6 -17
- package/server/server.js +4700 -4096
- package/server/{service-DfTVoqJg.js → service-COB19Uhm.js} +116 -90
- package/server/{session-fork-C4jAFHj8.js → session-fork-D18TscUZ.js} +2 -2
- package/server/{session-history-DanhhiCw.js → session-history-DbWnzfo-.js} +4 -4
- package/server/settings-C3w2std9.js +2 -0
- package/server/{settings-Cuc12oP_.js → settings-CFEdfovT.js} +2 -2
- package/server/{settings-DfT3f86D.js → settings-DNPAf2X_.js} +3 -3
- package/server/{shadow-engineering-bKuKTCn-.js → shadow-engineering-D8xTtraU.js} +3 -3
- package/server/{shadow-state-DJz6_pb_.js → shadow-state-CTgub0ME.js} +2 -2
- package/server/{shadow-state-CVHpRWlb.js → shadow-state-fRDYhcyx.js} +1 -1
- package/server/shadow-utils-DqMLnRgQ.js +39 -0
- package/server/{ship-log-CwqPFfqx.js → ship-log-BRQQi2lU.js} +1 -1
- package/server/{smart-compaction-B4KlpZGN.js → smart-compaction-CL6yaFpc.js} +1 -1
- package/server/{smart-compaction-CiWfGfRZ.js → smart-compaction-CsJDKM-N.js} +7 -7
- package/server/{spawn-planning-session-D5N3RuLG.js → spawn-planning-session-C_wIQ-Zg.js} +1 -1
- package/server/{spawn-planning-session-CU-DwyDl.js → spawn-planning-session-D0-NlNK1.js} +16 -16
- package/server/{specialist-completion-CJcv-NXH.js → specialist-completion-pJtESo7m.js} +1 -1
- package/server/{specialist-context-B2HlbNxS.js → specialist-context-DXj5Itg8.js} +5 -5
- package/server/{specialist-handoff-logger-CQyF1ygu.js → specialist-handoff-logger-BFH-IB0n.js} +2 -2
- package/server/{specialist-logs-CdcUpfjj.js → specialist-logs-B-rldhNg.js} +3 -3
- package/server/{specialists-CFgw_0Q6.js → specialists-C6-b3YZb.js} +161 -448
- package/server/{specialists-D7AcFi1u.js → specialists-CI_eqHAz.js} +1 -1
- package/server/{specialists-CwzFdapR.js → specialists-Dp8ABxVh.js} +18 -18
- package/server/{specialists-k22_Btaq.js → specialists-Hq3EojmD.js} +1 -1
- package/server/specs-DPGNVh51.js +3 -0
- package/server/{src-B4TTzNSr.js → src-By3D85Ry.js} +6 -1
- package/server/{src-BvpMg4EB.js → src-CqyFg52C.js} +5 -5
- package/server/{src-D4YUZrwR.js → src-DhxM-eCb.js} +6 -6
- package/server/{stack-health-DVN7zRnL.js → stack-health-Bxt-oGE6.js} +1 -1
- package/server/{stack-health-CSgcYcr8.js → stack-health-FtNYSTCS.js} +2 -2
- package/server/stale-task-claims-DnCHCATD.js +69 -0
- package/server/state-home-BzzKVh_C.js +213 -0
- package/server/{state-mapping-C13UaCL7.js → state-mapping-Ci0pkac4.js} +1 -1
- package/server/state-migrate-BS4IybIS.js +362 -0
- package/server/{stuck-remediation-nTIvhGOR.js → stuck-remediation-CTNT4LUC.js} +1 -1
- package/server/{stuck-remediation-CxsyxwFO.js → stuck-remediation-DbwhGg3g.js} +36 -41
- package/server/{summary-fork-CnRMPCYd.js → summary-fork-CloCB8dV.js} +2 -2
- package/server/{summary-fork-gKSoFAnK.js → summary-fork-DaCs0tCq.js} +8 -8
- package/server/supervisor/{paths-3R6b989k.js → paths-C1yU0jq4.js} +5 -3
- package/server/supervisor/pty-supervisor.js +2 -2
- package/server/supervisor/{pty-token-CScQ32Rj.js → pty-token-CSryb8Mb.js} +2 -2
- package/server/{supervisor-CZMs8s0M.js → supervisor-CRED6PD6.js} +2 -2
- package/server/supervisor-DHwuClN_.js +2 -0
- package/server/{swarm-readiness-h6-pwY8w.js → swarm-readiness-CEOrP9rE.js} +3 -3
- package/server/{system-prerequisites-DZZTi2G6.js → system-prerequisites-Bz6KdkFJ.js} +1 -13
- package/server/{teardown-workspace-B4D-oCVg.js → teardown-workspace-Ckn7HGhp.js} +14 -71
- package/server/{test-agent-queue-CnuYku4B.js → test-agent-queue-C8lE8r2j.js} +5 -5
- package/server/{tldr-daemon-CgZQ3jmZ.js → tldr-daemon-BE5rqR90.js} +1 -1
- package/server/{tldr-daemon-CuA8hz21.js → tldr-daemon-CGwDr28O.js} +2 -2
- package/server/{tmux-C3g9VFcg.js → tmux-C3X2XmV0.js} +92 -4
- package/server/tmux-DNaD06Gc.js +3 -0
- package/server/{token-g_sJ19g3.js → token-Dsa-i36o.js} +2 -2
- package/server/{token-util-DiwnnbJo.js → token-util-BWNpH96m.js} +1 -1
- package/server/token-util-DRt0j2nQ.js +3 -0
- package/server/{tracker-config-dQxC15vH.js → tracker-config-5Cabf1MU.js} +2 -2
- package/server/{tracker-utils--z8FLSWn.js → tracker-utils-Cl-Eaqrv.js} +2 -2
- package/server/{tracker-utils-DkKyRT0H.js → tracker-utils-FexeJhyf.js} +1 -1
- package/server/{tunnel-CN2px87h.js → tunnel-D4px7sKc.js} +1 -1
- package/server/{tunnel-BpWZs0Jy.js → tunnel-KId6Z59z.js} +3 -3
- package/server/typed-errors-CH4roFIj.js +3 -0
- package/server/{typed-errors-sLpGfegz.js → typed-errors-n_Tnb4Fh.js} +3 -4
- package/server/{types-BLS_Zbmd.js → types-DOjWNv3Z.js} +1 -1
- package/server/{types-tlXf80x3.js → types-DXBMm4mX.js} +1 -1
- package/server/{uat-train-BRo6DM7p.js → uat-train-B16skN7L.js} +24 -25
- package/server/{uat-train-utGVmqdm.js → uat-train-BBMrnecu.js} +1 -1
- package/server/validation-Zc4kAmqa.js +3 -0
- package/server/{validation-CsPVsoA0.js → validation-xAD7y5vW.js} +70 -23
- package/server/verification-artifact-DK1xb1zG.js +56 -0
- package/server/verification-artifact-JD_edpZ9.js +2 -0
- package/server/{verification-runner-CMT5WRMS.js → verification-runner-32y8NRfL.js} +338 -58
- package/server/verification-runner-DAat1p1u.js +2 -0
- package/server/{vtt-parser-C_XPlifj.js → vtt-parser-QnRfcjiU.js} +1 -1
- package/server/{work-agent-prompt-ZTAb2Hyf.js → work-agent-prompt-S3Fe1kpV.js} +12 -88
- package/server/{workflows-CXRwhw_o.js → workflows-BNvk5gbE.js} +17 -24
- package/server/workflows-Cw2-a_hn.js +2 -0
- package/server/{workspace-CNfuj1-5.js → workspace-BhUnCpcq.js} +3 -3
- package/server/{workspace-9UEsKuiP.js → workspace-C-gP6JAz.js} +1 -1
- package/server/{workspace-config-ChWOECy0.js → workspace-config-C77NKnsV.js} +1 -1
- package/server/{workspace-manager-D8AByFIT.js → workspace-manager-BKiMmb0c.js} +23 -48
- package/server/{workspace-manager-BO-6k3sP.js → workspace-manager-DD6PDqV8.js} +1 -1
- package/server/{workspace-metadata-CvC268MN.js → workspace-metadata-Cnq0snrf.js} +2 -2
- package/server/{workspace-metadata-DZiJtnuF.js → workspace-metadata-D5gNR61G.js} +1 -1
- package/server/{workspaces-D-uIoqbg.js → workspaces-DiAwBsb9.js} +182 -152
- package/sync-sources/hooks/codex-notify-hook +64 -8
- package/sync-sources/hooks/record-cost-event.js +1110 -37
- 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-BZ_nQS1f.js +0 -33
- package/server/agent-state-lGvgPP4m.js +0 -3
- package/server/agents-CEcaxSkR.js +0 -3
- package/server/auto-commit-IW-eik_b.js +0 -3
- package/server/bd-process-lock-XAXAet9O.js +0 -390
- package/server/beads-B1u04n3o.js +0 -2
- package/server/beads-BeSMEjGT.js +0 -649
- package/server/beads-query-Dl4FhT8J.js +0 -95
- package/server/beads-restore-BUItPOjI.js +0 -23
- package/server/cli-D9cUTbBr.js +0 -3
- package/server/codex-BYPz6ZdF.js +0 -3
- package/server/compact-beads-CyJtoXJi.js +0 -94
- package/server/compact-beads-N00E4EVa.js +0 -3
- package/server/deacon-swarm-CvdFekIO.js +0 -2
- package/server/dist-BNwrgsUO.js +0 -3
- package/server/export-BJHSVwKP.js +0 -87
- package/server/forge-8y6aEPTB.js +0 -2
- package/server/hume-CerGi2RH.js +0 -3
- package/server/inspect-agent-CWkeAB7J.js +0 -2
- package/server/lifecycle-Ck2UR27D.js +0 -14
- package/server/merge-ops-CFkQtXEj.js +0 -2
- package/server/projects-CrBE6IhN.js +0 -3
- package/server/public/assets/index-BAZxZ-8I.js +0 -796
- package/server/public/assets/index-FBG3JBfq.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-BYP8MI37.js +0 -1
- package/server/rally-oggyp4cs.js +0 -3
- package/server/record-lEYK__LD.js +0 -3
- package/server/recovery-trip-BT7nb9OV.js +0 -98
- package/server/resolver-C7dLn8OK.js +0 -158
- package/server/resume-BYZBIab-.js +0 -3
- package/server/settings-Cy7SCFO9.js +0 -2
- package/server/specs-RzcDgozr.js +0 -3
- package/server/supervisor-CfX192ma.js +0 -2
- package/server/tmux-By8E_Yv_.js +0 -3
- package/server/token-util-C9u4An3K.js +0 -3
- package/server/tracker-config-BzfVj41Z.js +0 -3
- package/server/typed-errors-CrN1AByg.js +0 -3
- package/server/validation-Dq_wwcw3.js +0 -3
- package/server/verification-runner-D0Uh-9jc.js +0 -2
- package/server/workflows-BLwxUMP7.js +0 -2
- package/server/writer-BUweuRPx.js +0 -3
- package/server/writer-CrP2xuBn.js +0 -251
|
@@ -1,38 +1,40 @@
|
|
|
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-BQs6GbD_.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 {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import { t as
|
|
21
|
-
import { n as
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import { n as
|
|
4
|
+
import { n as updateIssueRecord, t as init_record_update } from "./record-update-Cb_pPM-F.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-C3X2XmV0.js";
|
|
6
|
+
import { a as init_event_store, i as initEventStore } from "./event-store-D4s6eQ6o.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-By86XA6Z.js";
|
|
8
|
+
import { c as listAllAgentsSync, d as isTerminalIssueStage, o as init_agents, u as getIssueStageSync } from "./agents--ljN-wVY.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-srgusoi8.js";
|
|
10
|
+
import { c as logDeaconEventSync, o as init_persistent_logger, s as logAgentLifecycleSync } from "./session-history-DbWnzfo-.js";
|
|
11
|
+
import { i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-Cl-Eaqrv.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-DUQmrLkK.js";
|
|
14
|
+
import { m as readWorkspacePlanSync, o as init_io } from "./io-Cv9xQTks.js";
|
|
15
|
+
import { f as init_config$1, m as loadConfigSync$1, p as loadConfig$1 } from "./config-Cntj_tFu.js";
|
|
16
|
+
import { T as stampBootReconciliation, h as setBootReconciliationDecision, l as isDeaconGloballyPaused, r as getBootReconciliationState, s as init_control_settings } from "./control-settings-bxOCLsuE.js";
|
|
17
|
+
import { c as init_docker_stats, s as DockerStatsCollector } from "./stack-health-FtNYSTCS.js";
|
|
18
|
+
import { l as init_dag, o as getDispatchableItems } from "./dag-ClFr7Bah.js";
|
|
19
|
+
import { a as findRecreatedLegacyStatePaths, o as init_state_home } from "./state-home-BzzKVh_C.js";
|
|
20
|
+
import { a as isAgentIdleForNudge, t as checkStuckAgentRemediation } from "./stuck-remediation-DbwhGg3g.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-uogOppaW.js";
|
|
24
|
+
import { O as init_specialists, R as parseReviewerSessionName, T as getTmuxSessionName, d as getAllProjectSpecialistStatuses } from "./specialists-Dp8ABxVh.js";
|
|
25
|
+
import { a as inferBranchFromWorkspace, i as findWorkspacePath, o as init_archive_planning } from "./archive-planning-BW3te5Vw.js";
|
|
26
|
+
import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-CyqtoFUj.js";
|
|
27
|
+
import { n as shouldSkipDispatchAsMerged, t as init_merge_verification } from "./merge-verification-C4WMP40D.js";
|
|
28
|
+
import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-BNcGkBRD.js";
|
|
27
29
|
import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-CZYB3dlm.js";
|
|
28
|
-
import { g as decideAgentAutonomousRedrive, r as coordinateSwarmSlots, y as listFeatureWorkspaces } from "./deacon-swarm-
|
|
29
|
-
import { t as recordRecoveryFailure } from "./recovery-trip-
|
|
30
|
+
import { g as decideAgentAutonomousRedrive, r as coordinateSwarmSlots, y as listFeatureWorkspaces } from "./deacon-swarm-yWKQhxiX.js";
|
|
31
|
+
import { t as recordRecoveryFailure } from "./recovery-trip-DwbsONZf.js";
|
|
30
32
|
import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-Gh5R_YLF.js";
|
|
31
|
-
import { n as reconcileClosedIssueAgents } from "./closed-issue-reaper-
|
|
33
|
+
import { n as reconcileClosedIssueAgents } from "./closed-issue-reaper-BsJ3JqQy.js";
|
|
32
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";
|
|
33
|
-
import { n as pruneTerminalStoppedAgents } from "./agent-gc-
|
|
34
|
-
import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-
|
|
35
|
-
import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-
|
|
35
|
+
import { n as pruneTerminalStoppedAgents } from "./agent-gc-ClNQLl_V.js";
|
|
36
|
+
import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-k9eydM1E.js";
|
|
37
|
+
import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-po700Lfg.js";
|
|
36
38
|
import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-CXMLATGc.js";
|
|
37
39
|
import { createRequire } from "node:module";
|
|
38
40
|
import { join } from "node:path";
|
|
@@ -21641,16 +21643,17 @@ init_persistent_logger();
|
|
|
21641
21643
|
init_review_status_sync();
|
|
21642
21644
|
init_review_dispatch_decision();
|
|
21643
21645
|
init_review_status();
|
|
21646
|
+
init_codex_auth();
|
|
21644
21647
|
init_runtime_state();
|
|
21645
21648
|
init_agent_state();
|
|
21646
21649
|
init_transcript_landing();
|
|
21647
21650
|
init_config();
|
|
21648
21651
|
init_memory_verdict_cache();
|
|
21649
21652
|
init_concurrency();
|
|
21650
|
-
init_queries();
|
|
21651
21653
|
init_termination();
|
|
21652
21654
|
init_context_overflow();
|
|
21653
21655
|
init_agents$1();
|
|
21656
|
+
init_queries();
|
|
21654
21657
|
new (require_undici()).EnvHttpProxyAgent();
|
|
21655
21658
|
//#endregion
|
|
21656
21659
|
//#region ../../lib/smee.ts
|
|
@@ -22504,8 +22507,8 @@ init_tmux();
|
|
|
22504
22507
|
* forever for a verdict that will not arrive.
|
|
22505
22508
|
*/
|
|
22506
22509
|
const INSPECT_TIMEOUT_MS = 12 * 6e4;
|
|
22507
|
-
function inspectSessionName(issueId,
|
|
22508
|
-
return `inspect-${issueId.toLowerCase()}-${
|
|
22510
|
+
function inspectSessionName(issueId, itemId) {
|
|
22511
|
+
return `inspect-${issueId.toLowerCase()}-${itemId.replace(/[^a-z0-9-]/gi, "-").toLowerCase().slice(0, 24)}`;
|
|
22509
22512
|
}
|
|
22510
22513
|
function formatInspectElapsed(elapsedMs) {
|
|
22511
22514
|
return `${Math.max(0, Math.round(elapsedMs / 6e4))}m`;
|
|
@@ -22517,16 +22520,16 @@ async function checkInspectAgentTimeouts(now = /* @__PURE__ */ new Date()) {
|
|
|
22517
22520
|
for (const [rawIssueId, status] of Object.entries(statuses)) {
|
|
22518
22521
|
if (status.inspectStatus !== "inspecting") continue;
|
|
22519
22522
|
const issueId = rawIssueId.toUpperCase();
|
|
22520
|
-
const
|
|
22523
|
+
const itemId = status.inspectBeadId;
|
|
22521
22524
|
const startedMs = status.inspectStartedAt ? Date.parse(status.inspectStartedAt) : NaN;
|
|
22522
22525
|
const hasStartedAt = Number.isFinite(startedMs);
|
|
22523
22526
|
const elapsedMs = hasStartedAt ? nowMs - startedMs : Number.POSITIVE_INFINITY;
|
|
22524
22527
|
const timedOut = elapsedMs > INSPECT_TIMEOUT_MS;
|
|
22525
|
-
const sessionName =
|
|
22528
|
+
const sessionName = itemId ? inspectSessionName(issueId, itemId) : void 0;
|
|
22526
22529
|
const sessionAlive = sessionName ? await Effect.runPromise(sessionExists(sessionName)).catch(() => false) : false;
|
|
22527
22530
|
if (!timedOut && !(!!sessionName && !sessionAlive)) continue;
|
|
22528
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`;
|
|
22529
|
-
const effectiveBeadId =
|
|
22532
|
+
const effectiveBeadId = itemId ?? "unknown";
|
|
22530
22533
|
const notes = `Inspection error for bead ${effectiveBeadId}: ${reason}. No verdict was produced.`;
|
|
22531
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.`;
|
|
22532
22535
|
setReviewStatusSync(issueId, {
|
|
@@ -22538,7 +22541,7 @@ async function checkInspectAgentTimeouts(now = /* @__PURE__ */ new Date()) {
|
|
|
22538
22541
|
console.warn(`[deacon] Failed to kill inspect session ${sessionName}: ${msg}`);
|
|
22539
22542
|
});
|
|
22540
22543
|
try {
|
|
22541
|
-
const { messageAgent } = await import("./agents-
|
|
22544
|
+
const { messageAgent } = await import("./agents-DAUyr_Z1.js");
|
|
22542
22545
|
await messageAgent(`agent-${issueId.toLowerCase()}`, verdict, "deacon:inspect-watchdog");
|
|
22543
22546
|
} catch (err) {
|
|
22544
22547
|
const msg = err instanceof Error ? err.message : String(err);
|
|
@@ -22558,6 +22561,15 @@ const KNOWN_AGENT_MODALS = [{
|
|
|
22558
22561
|
matches: (pane) => /rate limit/i.test(pane) && /keep current model/i.test(pane),
|
|
22559
22562
|
keys: ["Down", "Enter"]
|
|
22560
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
|
+
}
|
|
22561
22573
|
/** Rollout JSONL is launch/turn attribution only until a captured switch proves otherwise. */
|
|
22562
22574
|
const MODEL_SHAPED_TOKEN = /^(?:gpt|o\d|claude|kimi|glm|gemini|deepseek|qwen|minimax|grok)[\w.-]*$/i;
|
|
22563
22575
|
function paneShowsModelSwitch(pane, launchModel) {
|
|
@@ -22681,7 +22693,7 @@ async function maybeProactivelyCompactContext(sessionName, now) {
|
|
|
22681
22693
|
if (!agentState?.workspace || !sessionId || !agentState.model) return null;
|
|
22682
22694
|
let usage = null;
|
|
22683
22695
|
try {
|
|
22684
|
-
const { computeContextUsage } = await import("./conversation-service-
|
|
22696
|
+
const { computeContextUsage } = await import("./conversation-service-BVt4MQ1_.js");
|
|
22685
22697
|
usage = await computeContextUsage(sessionFilePath(agentState.workspace, sessionId), agentState.model);
|
|
22686
22698
|
} catch {
|
|
22687
22699
|
return null;
|
|
@@ -22730,6 +22742,19 @@ async function checkApiErrorAgents() {
|
|
|
22730
22742
|
if (!tmuxOutput.trim()) continue;
|
|
22731
22743
|
const agentState = getAgentStateSync(sessionName);
|
|
22732
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
|
+
}
|
|
22733
22758
|
if (paneShowsModelSwitch(tmuxOutput, agentState.model)) {
|
|
22734
22759
|
const reason = `needs-you: live Codex pane indicates a model switch from launch model ${agentState.model}`;
|
|
22735
22760
|
setAgentPausedSync(sessionName, reason, true);
|
|
@@ -22778,13 +22803,13 @@ async function checkApiErrorAgents() {
|
|
|
22778
22803
|
const st = getAgentStateSync(sessionName);
|
|
22779
22804
|
const sid = st?.sessionId ?? runtimeState?.claudeSessionId;
|
|
22780
22805
|
if (st?.workspace && sid && st.model) {
|
|
22781
|
-
const { computeContextUsage } = await import("./conversation-service-
|
|
22806
|
+
const { computeContextUsage } = await import("./conversation-service-BVt4MQ1_.js");
|
|
22782
22807
|
const usage = await computeContextUsage(sessionFilePath(st.workspace, sid), st.model);
|
|
22783
22808
|
if (usage && usage.percentUsed < 85) recoveredPct = usage.percentUsed;
|
|
22784
22809
|
}
|
|
22785
22810
|
} catch {}
|
|
22786
22811
|
if (recoveredPct !== null) {
|
|
22787
|
-
const { clearWorkspaceStuck } = await import("./review-status-sync-
|
|
22812
|
+
const { clearWorkspaceStuck } = await import("./review-status-sync-BI4WhUkF.js");
|
|
22788
22813
|
clearWorkspaceStuck(issueId);
|
|
22789
22814
|
stuckOverflowNativeRecoveryState.delete(sessionName);
|
|
22790
22815
|
actions.push(`Context overflow recovery: cleared stuck flag for ${sessionName} (context back to ${Math.round(recoveredPct)}%)`);
|
|
@@ -22800,7 +22825,7 @@ async function checkApiErrorAgents() {
|
|
|
22800
22825
|
rec.attempts += 1;
|
|
22801
22826
|
rec.lastAttempt = now;
|
|
22802
22827
|
stuckOverflowNativeRecoveryState.set(sessionName, rec);
|
|
22803
|
-
const { resumeAgent } = await import("./agents-
|
|
22828
|
+
const { resumeAgent } = await import("./agents-DAUyr_Z1.js");
|
|
22804
22829
|
const recovered = await resumeAgent(sessionName, void 0, { compact: true });
|
|
22805
22830
|
if (recovered.success) {
|
|
22806
22831
|
stuckOverflowNativeRecoveryState.delete(sessionName);
|
|
@@ -22848,7 +22873,7 @@ async function checkApiErrorAgents() {
|
|
|
22848
22873
|
}
|
|
22849
22874
|
const compactAttempts = (ov?.compactAttempts ?? 0) + 1;
|
|
22850
22875
|
if (issueId !== null) {
|
|
22851
|
-
const { resumeAgent } = await import("./agents-
|
|
22876
|
+
const { resumeAgent } = await import("./agents-DAUyr_Z1.js");
|
|
22852
22877
|
const resumeResult = await resumeAgent(sessionName, void 0, { compact: true });
|
|
22853
22878
|
contextOverflowRecoveryState.set(sessionName, {
|
|
22854
22879
|
lastAttempt: now,
|
|
@@ -23215,7 +23240,7 @@ function reviewConvoyLiveness(issueId) {
|
|
|
23215
23240
|
*/
|
|
23216
23241
|
async function recoverUnhealthyTestStack(issueId, workspacePath) {
|
|
23217
23242
|
const key = issueId.toUpperCase();
|
|
23218
|
-
const { getWorkspaceStackHealth } = await import("./stack-health-
|
|
23243
|
+
const { getWorkspaceStackHealth } = await import("./stack-health-Bxt-oGE6.js");
|
|
23219
23244
|
const health = await Effect.runPromise(getWorkspaceStackHealth(issueId, { workspacePath }));
|
|
23220
23245
|
if (health.healthy) {
|
|
23221
23246
|
testStackRebuildState.delete(key);
|
|
@@ -23247,7 +23272,7 @@ async function recoverUnhealthyTestStack(issueId, workspacePath) {
|
|
|
23247
23272
|
record.attempts += 1;
|
|
23248
23273
|
testStackRebuildState.set(key, record);
|
|
23249
23274
|
console.log(`[deacon] Test stack for ${key} unhealthy (${health.reasons.join("; ")}) — rebuilding (attempt ${record.attempts}/${TEST_STACK_REBUILD_MAX_ATTEMPTS})`);
|
|
23250
|
-
const { rebuildWorkspaceStack } = await import("./rebuild-stack-
|
|
23275
|
+
const { rebuildWorkspaceStack } = await import("./rebuild-stack-Dsm9WjKv.js");
|
|
23251
23276
|
const result = await Effect.runPromise(rebuildWorkspaceStack(issueId, { onProgress: (m) => console.log(`[deacon] ${key} stack rebuild: ${m}`) }));
|
|
23252
23277
|
if (!result.success) {
|
|
23253
23278
|
console.warn(`[deacon] Test stack rebuild failed for ${key}: ${result.error}`);
|
|
@@ -23278,6 +23303,29 @@ function latestHistoryByType(history, type) {
|
|
|
23278
23303
|
if (!history || history.length === 0) return void 0;
|
|
23279
23304
|
for (let i = history.length - 1; i >= 0; i--) if (history[i].type === type) return history[i].status;
|
|
23280
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
|
+
}
|
|
23281
23329
|
async function isReviewAgentActiveForIssue(issueId) {
|
|
23282
23330
|
try {
|
|
23283
23331
|
const agents = await Effect.runPromise(listRunningAgents());
|
|
@@ -23352,6 +23400,20 @@ async function handleReviewCoordinatorDied(issueId, _sessionName, _reason) {
|
|
|
23352
23400
|
logDeaconEventSync(`handleReviewCoordinatorDied: ${issueId} skipped — issue closed`);
|
|
23353
23401
|
return actions;
|
|
23354
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
|
+
}
|
|
23355
23417
|
if (status.reviewStatus !== "reviewing" && status.reviewStatus !== "pending") {
|
|
23356
23418
|
logDeaconEventSync(`handleReviewCoordinatorDied: ${issueId} skipped — reviewStatus=${status.reviewStatus}`);
|
|
23357
23419
|
return actions;
|
|
@@ -23375,7 +23437,7 @@ async function handleReviewCoordinatorDied(issueId, _sessionName, _reason) {
|
|
|
23375
23437
|
return actions;
|
|
23376
23438
|
}
|
|
23377
23439
|
try {
|
|
23378
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
23440
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-CUVj54v0.js");
|
|
23379
23441
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
23380
23442
|
issueId,
|
|
23381
23443
|
workspace,
|
|
@@ -23505,7 +23567,7 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus) {
|
|
|
23505
23567
|
const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
|
|
23506
23568
|
if (workspace && resolved && !tryReserveAdvancingSlot() && !await tryYieldForAdvancingDispatch("review", issueId)) actions.push(`Deferred review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
|
|
23507
23569
|
else if (workspace && resolved) try {
|
|
23508
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
23570
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-CUVj54v0.js");
|
|
23509
23571
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
23510
23572
|
issueId,
|
|
23511
23573
|
workspace,
|
|
@@ -23530,8 +23592,8 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus) {
|
|
|
23530
23592
|
const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
|
|
23531
23593
|
if (workspace && resolved) {
|
|
23532
23594
|
const branch = `feature/${issueLower}`;
|
|
23533
|
-
const { spawnRun } = await import("./agents-
|
|
23534
|
-
const { buildTestRolePrompt } = await import("./test-agent-queue-
|
|
23595
|
+
const { spawnRun } = await import("./agents-DAUyr_Z1.js");
|
|
23596
|
+
const { buildTestRolePrompt } = await import("./test-agent-queue-C8lE8r2j.js");
|
|
23535
23597
|
const stackRecovery = await recoverUnhealthyTestStack(issueId, workspace);
|
|
23536
23598
|
if (stackRecovery === "cooldown" || stackRecovery === "exhausted") {
|
|
23537
23599
|
setReviewStatusSync(issueId, { testStatus: "dispatch_failed" });
|
|
@@ -23669,7 +23731,7 @@ async function recoverStalledReviewConvoys(getCanonicalState = getAutoCloseOutCa
|
|
|
23669
23731
|
record.lastAttempt = now;
|
|
23670
23732
|
record.attempts += 1;
|
|
23671
23733
|
stalledReviewConvoyRecoveryState.set(key, record);
|
|
23672
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
23734
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-CUVj54v0.js");
|
|
23673
23735
|
try {
|
|
23674
23736
|
const result = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
23675
23737
|
issueId,
|
|
@@ -23740,7 +23802,7 @@ async function checkMissingReviewStatuses() {
|
|
|
23740
23802
|
continue;
|
|
23741
23803
|
}
|
|
23742
23804
|
try {
|
|
23743
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
23805
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-CUVj54v0.js");
|
|
23744
23806
|
await Effect.runPromise(spawnReviewRoleForIssue({
|
|
23745
23807
|
issueId,
|
|
23746
23808
|
workspace,
|
|
@@ -23791,7 +23853,7 @@ async function checkStuckReviewing() {
|
|
|
23791
23853
|
const actions = [];
|
|
23792
23854
|
const REVIEW_STUCK_THRESHOLD_MS = 1800 * 1e3;
|
|
23793
23855
|
try {
|
|
23794
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
23856
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-BoJdyvUQ.js");
|
|
23795
23857
|
const statuses = loadReviewStatuses();
|
|
23796
23858
|
const now = Date.now();
|
|
23797
23859
|
const activeReviewIssues = /* @__PURE__ */ new Set();
|
|
@@ -23807,7 +23869,7 @@ async function checkStuckReviewing() {
|
|
|
23807
23869
|
if (rState?.state === "active" && rState.currentIssue) activeReviewIssues.add(rState.currentIssue.toUpperCase());
|
|
23808
23870
|
}
|
|
23809
23871
|
try {
|
|
23810
|
-
const { listRunningAgents } = await import("./agents-
|
|
23872
|
+
const { listRunningAgents } = await import("./agents-DAUyr_Z1.js");
|
|
23811
23873
|
const agents = await Effect.runPromise(listRunningAgents());
|
|
23812
23874
|
for (const agent of agents) {
|
|
23813
23875
|
if (agent.status === "stopped" || agent.status === "error") continue;
|
|
@@ -23940,7 +24002,7 @@ async function checkCompletedButUnsignaledReviews() {
|
|
|
23940
24002
|
}
|
|
23941
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.`;
|
|
23942
24004
|
try {
|
|
23943
|
-
const { messageAgent } = await import("./agents-
|
|
24005
|
+
const { messageAgent } = await import("./agents-DAUyr_Z1.js");
|
|
23944
24006
|
await messageAgent(reviewSession, nudge);
|
|
23945
24007
|
unsignaledReviewNudges.set(latestDir, now);
|
|
23946
24008
|
actions.push(`Nudged ${reviewSession} to signal ${verdict} (synthesis written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
|
|
@@ -23973,6 +24035,7 @@ init_review_status();
|
|
|
23973
24035
|
init_persistent_logger();
|
|
23974
24036
|
init_review_monitor();
|
|
23975
24037
|
init_tmux();
|
|
24038
|
+
init_codex_auth();
|
|
23976
24039
|
const REVIEWER_IDLE_FAILURE_MS = 180 * 1e3;
|
|
23977
24040
|
const REVIEW_REPORTS_PRESENT_NUDGE_COOLDOWN_MS = 60 * 1e3;
|
|
23978
24041
|
const reviewReportsPresentNudges = /* @__PURE__ */ new Map();
|
|
@@ -24061,7 +24124,7 @@ async function respawnIdleReviewer(state, agentId) {
|
|
|
24061
24124
|
return false;
|
|
24062
24125
|
}
|
|
24063
24126
|
try {
|
|
24064
|
-
const { spawnReviewSubRoleForIssue } = await import("./review-agent-
|
|
24127
|
+
const { spawnReviewSubRoleForIssue } = await import("./review-agent-CUVj54v0.js");
|
|
24065
24128
|
const contextManifestPath = join$1(dirname$1(outputPath), "context.json");
|
|
24066
24129
|
const result = await Effect.runPromise(spawnReviewSubRoleForIssue({
|
|
24067
24130
|
issueId: state.issueId,
|
|
@@ -24190,7 +24253,7 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
|
|
|
24190
24253
|
"Read the four reports, write synthesis.md, then signal review status exactly as roles/review.md instructs."
|
|
24191
24254
|
].join("\n");
|
|
24192
24255
|
try {
|
|
24193
|
-
const { messageAgent } = await import("./agents-
|
|
24256
|
+
const { messageAgent } = await import("./agents-DAUyr_Z1.js");
|
|
24194
24257
|
await messageAgent(state.id, message);
|
|
24195
24258
|
reviewReportsPresentNudges.set(nudgeKey, now);
|
|
24196
24259
|
const action = `Nudged ${state.id} to synthesize from ${REVIEW_SUB_ROLES.length} reviewer reports`;
|
|
@@ -24242,7 +24305,14 @@ async function monitorReviewConvoySignals() {
|
|
|
24242
24305
|
const runtimeIdleAgeMs = runtimeState?.state === "idle" ? Date.now() - new Date(runtimeState.lastActivity).getTime() : 0;
|
|
24243
24306
|
const idleAndNoOutput = reviewerSessionAlive && !outputWrittenForThisRun && runtimeIdleAgeMs > REVIEWER_IDLE_FAILURE_MS;
|
|
24244
24307
|
let contextOverflowDetected = false;
|
|
24245
|
-
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
|
+
}
|
|
24246
24316
|
let signal = null;
|
|
24247
24317
|
let reason = "";
|
|
24248
24318
|
if (outputWrittenForThisRun) signal = "ready";
|
|
@@ -24269,7 +24339,7 @@ async function monitorReviewConvoySignals() {
|
|
|
24269
24339
|
if (!signal) continue;
|
|
24270
24340
|
const message = signal === "ready" ? `REVIEWER_READY ${state.reviewSubRole} ${outputPath}` : signal === "timeout" ? `REVIEWER_TIMEOUT ${state.reviewSubRole} ${reason}` : `REVIEWER_FAILED ${state.reviewSubRole} ${reason}`;
|
|
24271
24341
|
try {
|
|
24272
|
-
const { messageAgent } = await import("./agents-
|
|
24342
|
+
const { messageAgent } = await import("./agents-DAUyr_Z1.js");
|
|
24273
24343
|
await messageAgent(state.reviewSynthesisAgentId, message);
|
|
24274
24344
|
state.reviewMonitorSignaled = signal;
|
|
24275
24345
|
saveAgentStateSync(state);
|
|
@@ -24277,7 +24347,7 @@ async function monitorReviewConvoySignals() {
|
|
|
24277
24347
|
actions.push(action);
|
|
24278
24348
|
logDeaconEventSync(`monitorReviewConvoySignals: ${action}`);
|
|
24279
24349
|
if (signal === "ready") try {
|
|
24280
|
-
const { notifyPipelineSync } = await import("./pipeline-notifier-
|
|
24350
|
+
const { notifyPipelineSync } = await import("./pipeline-notifier-Bgidcelx.js");
|
|
24281
24351
|
notifyPipelineSync({
|
|
24282
24352
|
type: "reviewer_completed",
|
|
24283
24353
|
issueId: state.issueId,
|
|
@@ -24285,7 +24355,7 @@ async function monitorReviewConvoySignals() {
|
|
|
24285
24355
|
});
|
|
24286
24356
|
} catch {}
|
|
24287
24357
|
else if (signal === "timeout") try {
|
|
24288
|
-
const { notifyPipelineSync } = await import("./pipeline-notifier-
|
|
24358
|
+
const { notifyPipelineSync } = await import("./pipeline-notifier-Bgidcelx.js");
|
|
24289
24359
|
notifyPipelineSync({
|
|
24290
24360
|
type: "reviewer_timed_out",
|
|
24291
24361
|
issueId: state.issueId,
|
|
@@ -24385,7 +24455,7 @@ const FORK_CACHE_CHECK_DELAY_MS = 180 * 1e3;
|
|
|
24385
24455
|
async function checkStalledReviewDiscovery() {
|
|
24386
24456
|
const actions = [];
|
|
24387
24457
|
try {
|
|
24388
|
-
const { listAgentStates } = await import("./agents-
|
|
24458
|
+
const { listAgentStates } = await import("./agents-DAUyr_Z1.js");
|
|
24389
24459
|
const states = listAgentStates();
|
|
24390
24460
|
const now = Date.now();
|
|
24391
24461
|
for (const state of states) {
|
|
@@ -24394,7 +24464,7 @@ async function checkStalledReviewDiscovery() {
|
|
|
24394
24464
|
const aged = Number.isFinite(startedMs) && now - startedMs > 48e4;
|
|
24395
24465
|
const dead = !await Effect.runPromise(sessionExists(state.id)).catch(() => false) || await Effect.runPromise(isPaneDead(state.id)).catch(() => true);
|
|
24396
24466
|
if (!aged && !dead) continue;
|
|
24397
|
-
const { handleReviewDiscoveryReady } = await import("./review-agent-
|
|
24467
|
+
const { handleReviewDiscoveryReady } = await import("./review-agent-CUVj54v0.js");
|
|
24398
24468
|
const result = await handleReviewDiscoveryReady(state.issueId, { source: dead ? "deacon-backstop (parent dead)" : "deacon-backstop (discovery timeout)" });
|
|
24399
24469
|
actions.push(result.message);
|
|
24400
24470
|
logDeaconEventSync(`checkStalledReviewDiscovery: ${result.message}`);
|
|
@@ -24417,8 +24487,8 @@ async function checkStalledReviewDiscovery() {
|
|
|
24417
24487
|
async function checkStalledReviewParents() {
|
|
24418
24488
|
const actions = [];
|
|
24419
24489
|
try {
|
|
24420
|
-
const { listAgentStates, markAgentStoppedState } = await import("./agents-
|
|
24421
|
-
const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-
|
|
24490
|
+
const { listAgentStates, markAgentStoppedState } = await import("./agents-DAUyr_Z1.js");
|
|
24491
|
+
const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-CUVj54v0.js");
|
|
24422
24492
|
const states = listAgentStates();
|
|
24423
24493
|
const now = Date.now();
|
|
24424
24494
|
for (const state of states) {
|
|
@@ -24467,8 +24537,8 @@ async function checkStalledReviewParents() {
|
|
|
24467
24537
|
async function checkReviewForkCacheMisses() {
|
|
24468
24538
|
const actions = [];
|
|
24469
24539
|
try {
|
|
24470
|
-
const { listAgentStates, saveAgentState } = await import("./agents-
|
|
24471
|
-
const { readEventsSync } = await import("./events-
|
|
24540
|
+
const { listAgentStates, saveAgentState } = await import("./agents-DAUyr_Z1.js");
|
|
24541
|
+
const { readEventsSync } = await import("./events-Bn-wdUBF.js");
|
|
24472
24542
|
const { emitActivityEntrySync } = await import("./activity-logger-DvYvFhwZ.js");
|
|
24473
24543
|
const states = listAgentStates();
|
|
24474
24544
|
const now = Date.now();
|
|
@@ -24615,7 +24685,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
24615
24685
|
if (!project) continue;
|
|
24616
24686
|
let specStatus;
|
|
24617
24687
|
try {
|
|
24618
|
-
const { findSpecByIssue } = await import("./specs-
|
|
24688
|
+
const { findSpecByIssue } = await import("./specs-DPGNVh51.js");
|
|
24619
24689
|
const spec = await Effect.runPromise(findSpecByIssue(project.projectPath, issueId));
|
|
24620
24690
|
specStatus = spec?.status;
|
|
24621
24691
|
if (spec && (spec.status === "completed" || spec.status === "cancelled")) {
|
|
@@ -24630,7 +24700,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
24630
24700
|
if (branchTip.stdout.trim() === mainTip.stdout.trim()) console.log(`[deacon] ${issueId}: branch ${branch} points at main; not treating zero-commit branch as merged`);
|
|
24631
24701
|
} catch {}
|
|
24632
24702
|
if (!isMerged) {
|
|
24633
|
-
const { resolveGitHubIssueSync: _resolveGitHubIssue } = await import("./tracker-utils-
|
|
24703
|
+
const { resolveGitHubIssueSync: _resolveGitHubIssue } = await import("./tracker-utils-FexeJhyf.js");
|
|
24634
24704
|
const ghResolved = _resolveGitHubIssue(issueId);
|
|
24635
24705
|
if (ghResolved.isGitHub) try {
|
|
24636
24706
|
const { stdout } = await execFileAsync$4("gh", [
|
|
@@ -24667,7 +24737,7 @@ async function reconcileStaleMergeStatus() {
|
|
|
24667
24737
|
actions.push(msg);
|
|
24668
24738
|
console.log(`[deacon] ${msg}`);
|
|
24669
24739
|
try {
|
|
24670
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
24740
|
+
const { postMergeLifecycle } = await import("./merge-agent-D6LRIW63.js");
|
|
24671
24741
|
postMergeLifecycle(issueId, project.projectPath, branch, { skipDeploy: true }).catch((err) => console.warn(`[deacon] postMergeLifecycle (reconcile) failed for ${issueId}: ${err}`));
|
|
24672
24742
|
} catch (err) {
|
|
24673
24743
|
console.warn(`[deacon] Could not import postMergeLifecycle: ${err}`);
|
|
@@ -24692,7 +24762,7 @@ const falseMergedReset = /* @__PURE__ */ new Set();
|
|
|
24692
24762
|
async function reconcileFalseMerged() {
|
|
24693
24763
|
const actions = [];
|
|
24694
24764
|
try {
|
|
24695
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
24765
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-Dtn4ib6M.js");
|
|
24696
24766
|
if (!isGitHubAppConfigured()) return actions;
|
|
24697
24767
|
const statuses = loadReviewStatuses();
|
|
24698
24768
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
@@ -24737,7 +24807,7 @@ const CLOSED_PR_RECONCILE_COOLDOWN_MS = 600 * 1e3;
|
|
|
24737
24807
|
async function reconcileClosedPrReadyForMerge() {
|
|
24738
24808
|
const actions = [];
|
|
24739
24809
|
try {
|
|
24740
|
-
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-
|
|
24810
|
+
const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-Dtn4ib6M.js");
|
|
24741
24811
|
if (!isGitHubAppConfigured()) return actions;
|
|
24742
24812
|
const statuses = loadReviewStatuses();
|
|
24743
24813
|
const now = Date.now();
|
|
@@ -24809,7 +24879,7 @@ const STALE_MERGE_BLOCKER_COOLDOWN_MS = 120 * 1e3;
|
|
|
24809
24879
|
async function reconcileStaleMergeBlockers() {
|
|
24810
24880
|
const actions = [];
|
|
24811
24881
|
try {
|
|
24812
|
-
const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-
|
|
24882
|
+
const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-BE6JdfkO.js");
|
|
24813
24883
|
const statuses = loadReviewStatuses();
|
|
24814
24884
|
const now = Date.now();
|
|
24815
24885
|
const deps = buildRealConflictGateDeps();
|
|
@@ -24952,7 +25022,7 @@ async function checkFailedMergeRetry() {
|
|
|
24952
25022
|
if (ciEntry.count === 5) {
|
|
24953
25023
|
console.log(`[deacon] CI check failure for ${issueId} — retries exhausted, notifying work agent`);
|
|
24954
25024
|
const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
|
|
24955
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
25025
|
+
const { writeFeedbackFile } = await import("./feedback-writer-BtaoJGl2.js");
|
|
24956
25026
|
const ciFileResult = await Effect.runPromise(writeFeedbackFile({
|
|
24957
25027
|
issueId,
|
|
24958
25028
|
specialist: "merge-agent",
|
|
@@ -24984,7 +25054,7 @@ async function checkFailedMergeRetry() {
|
|
|
24984
25054
|
ciRetryMap.set(issueId, ciEntry);
|
|
24985
25055
|
console.log(`[deacon] CI check failure for ${issueId} — notifying agent to re-submit (attempt ${ciEntry.count}/5)`);
|
|
24986
25056
|
const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
|
|
24987
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
25057
|
+
const { writeFeedbackFile } = await import("./feedback-writer-BtaoJGl2.js");
|
|
24988
25058
|
const ciFileResult2 = await Effect.runPromise(writeFeedbackFile({
|
|
24989
25059
|
issueId,
|
|
24990
25060
|
specialist: "merge-agent",
|
|
@@ -25012,7 +25082,7 @@ async function checkFailedMergeRetry() {
|
|
|
25012
25082
|
const lastNudge = timeoutNudgeCooldowns.get(issueIdForFb);
|
|
25013
25083
|
if (!lastNudge || now - lastNudge >= TIMEOUT_NUDGE_COOLDOWN_MS) {
|
|
25014
25084
|
const timeoutNotes = status.mergeNotes;
|
|
25015
|
-
const { writeFeedbackFile } = await import("./feedback-writer-
|
|
25085
|
+
const { writeFeedbackFile } = await import("./feedback-writer-BtaoJGl2.js");
|
|
25016
25086
|
await Effect.runPromise(writeFeedbackFile({
|
|
25017
25087
|
issueId: issueIdForFb,
|
|
25018
25088
|
specialist: "merge-agent",
|
|
@@ -25117,7 +25187,7 @@ async function autoCloseOut(now = /* @__PURE__ */ new Date()) {
|
|
|
25117
25187
|
} } : {}
|
|
25118
25188
|
};
|
|
25119
25189
|
try {
|
|
25120
|
-
const { closeOut } = await import("./workflows-
|
|
25190
|
+
const { closeOut } = await import("./workflows-Cw2-a_hn.js");
|
|
25121
25191
|
const result = await Effect.runPromise(closeOut(ctx));
|
|
25122
25192
|
if (!result.success) {
|
|
25123
25193
|
const failed = result.steps.find((step) => !step.success && !step.skipped);
|
|
@@ -25421,7 +25491,8 @@ init_review_status();
|
|
|
25421
25491
|
init_control_settings();
|
|
25422
25492
|
init_agents$1();
|
|
25423
25493
|
init_tmux();
|
|
25424
|
-
|
|
25494
|
+
init_io();
|
|
25495
|
+
init_dag();
|
|
25425
25496
|
const orphanFailureRecordedForAutoResume = /* @__PURE__ */ new Set();
|
|
25426
25497
|
const appliedBootReconciliationDecisions = /* @__PURE__ */ new Set();
|
|
25427
25498
|
const emptyBootReconciliationApplyResult = () => ({
|
|
@@ -25615,7 +25686,7 @@ async function cleanupOrphanedPlanningSessions$1(deps) {
|
|
|
25615
25686
|
* - phase === 'implementation' or 'review-response'
|
|
25616
25687
|
* - tmux session exists (not orphaned)
|
|
25617
25688
|
* - isAgentIdleForNudge() returns true (Stop hook authoritative)
|
|
25618
|
-
* -
|
|
25689
|
+
* - pan task next -l <issueLabel> has ≥1 ready bead (work remaining)
|
|
25619
25690
|
* - last nudge older than NUDGE_COOLDOWN_MS (don't spam)
|
|
25620
25691
|
*
|
|
25621
25692
|
* Action: send `pan tell` with a concrete imperative pointing at the next
|
|
@@ -25658,8 +25729,8 @@ function buildStalledResumePrompt(state) {
|
|
|
25658
25729
|
}
|
|
25659
25730
|
return buildDefaultResumeContinueMessage(state.issueId);
|
|
25660
25731
|
}
|
|
25661
|
-
function
|
|
25662
|
-
return `${
|
|
25732
|
+
function readyTaskLine(item) {
|
|
25733
|
+
return `${item.id} ${item.title}`.trim();
|
|
25663
25734
|
}
|
|
25664
25735
|
async function nudgeStalledResumeWorkAgents() {
|
|
25665
25736
|
const actions = [];
|
|
@@ -25681,7 +25752,7 @@ async function nudgeStalledResumeWorkAgents() {
|
|
|
25681
25752
|
const message = buildStalledResumePrompt(state);
|
|
25682
25753
|
if (!message) continue;
|
|
25683
25754
|
try {
|
|
25684
|
-
const { messageAgent } = await import("./agents-
|
|
25755
|
+
const { messageAgent } = await import("./agents-DAUyr_Z1.js");
|
|
25685
25756
|
await messageAgent(agentId, message);
|
|
25686
25757
|
recordCooldown(agentId, ".last-stalled-resume-nudge");
|
|
25687
25758
|
const action = `Re-sent stalled resume prompt to ${agentId} (${state.issueId})`;
|
|
@@ -25761,7 +25832,7 @@ async function nudgeIdleWorkAgentsWithOpenBeads() {
|
|
|
25761
25832
|
status: "running",
|
|
25762
25833
|
role: "work"
|
|
25763
25834
|
});
|
|
25764
|
-
const
|
|
25835
|
+
const eligible = [];
|
|
25765
25836
|
for (const state of states) {
|
|
25766
25837
|
const agentId = state.id;
|
|
25767
25838
|
if (await isIssueClosed(state.issueId)) {
|
|
@@ -25775,39 +25846,34 @@ async function nudgeIdleWorkAgentsWithOpenBeads() {
|
|
|
25775
25846
|
const last = parseInt(readFileSync(cooldownFile, "utf-8").trim(), 10);
|
|
25776
25847
|
if (!Number.isNaN(last) && Date.now() - last < BEAD_NUDGE_COOLDOWN_MS) continue;
|
|
25777
25848
|
} catch {}
|
|
25778
|
-
|
|
25779
|
-
|
|
25780
|
-
|
|
25781
|
-
|
|
25782
|
-
|
|
25783
|
-
|
|
25784
|
-
const
|
|
25785
|
-
|
|
25786
|
-
|
|
25787
|
-
|
|
25788
|
-
|
|
25789
|
-
|
|
25790
|
-
|
|
25791
|
-
|
|
25792
|
-
|
|
25793
|
-
|
|
25794
|
-
|
|
25795
|
-
|
|
25796
|
-
|
|
25797
|
-
|
|
25798
|
-
|
|
25799
|
-
|
|
25800
|
-
|
|
25801
|
-
|
|
25802
|
-
|
|
25803
|
-
|
|
25804
|
-
|
|
25805
|
-
|
|
25806
|
-
actions.push(action);
|
|
25807
|
-
logDeaconEventSync(`nudgeIdleWorkAgentsWithOpenBeads: ${action}`);
|
|
25808
|
-
} catch (err) {
|
|
25809
|
-
logDeaconEventSync(`nudgeIdleWorkAgentsWithOpenBeads: ${agentId} messageAgent failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
25810
|
-
}
|
|
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-DAUyr_Z1.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)}`);
|
|
25811
25877
|
}
|
|
25812
25878
|
}
|
|
25813
25879
|
return actions;
|
|
@@ -26097,6 +26163,9 @@ async function reconcileAgentLiveness$1(deps) {
|
|
|
26097
26163
|
}
|
|
26098
26164
|
//#endregion
|
|
26099
26165
|
//#region ../../lib/cloister/in-flight-guard.ts
|
|
26166
|
+
init_state_plane();
|
|
26167
|
+
init_auto_commit();
|
|
26168
|
+
init_record();
|
|
26100
26169
|
function createInFlightGuard() {
|
|
26101
26170
|
const inFlight = /* @__PURE__ */ new Set();
|
|
26102
26171
|
return {
|
|
@@ -26121,7 +26190,6 @@ function createInFlightGuard() {
|
|
|
26121
26190
|
}
|
|
26122
26191
|
//#endregion
|
|
26123
26192
|
//#region ../../lib/pipeline-state-paths.ts
|
|
26124
|
-
init_state_plane();
|
|
26125
26193
|
const execFileAsync$3 = promisify$1(execFile$1);
|
|
26126
26194
|
const STATE_PLANE_DIFF_EXCLUDES = STATE_PLANE_PATHS.map((path) => `:(exclude)${path.replace(/\/$/, "")}`);
|
|
26127
26195
|
function isPipelineStatePath(relativePath) {
|
|
@@ -26231,14 +26299,12 @@ async function gitStdout(workspacePath, args) {
|
|
|
26231
26299
|
}
|
|
26232
26300
|
//#endregion
|
|
26233
26301
|
//#region ../../lib/cloister/state-plane-patrol.ts
|
|
26234
|
-
|
|
26302
|
+
init_record_update();
|
|
26235
26303
|
init_state_home();
|
|
26236
|
-
init_auto_commit();
|
|
26237
26304
|
async function reconcileProjectStatePlanes(projects) {
|
|
26238
26305
|
const actions = [];
|
|
26239
26306
|
for (const { config } of projects) {
|
|
26240
26307
|
if (!config.path) continue;
|
|
26241
|
-
queueBeadsAutoCommit(config.path);
|
|
26242
26308
|
const write = await Effect.runPromise(reconcileStatePlaneDrift(config.path));
|
|
26243
26309
|
if (!write.committed) continue;
|
|
26244
26310
|
actions.push({
|
|
@@ -26261,7 +26327,6 @@ async function recreatedStateWarnings(projects) {
|
|
|
26261
26327
|
}
|
|
26262
26328
|
//#endregion
|
|
26263
26329
|
//#region ../../lib/cloister/deacon-main-divergence.ts
|
|
26264
|
-
init_record_lock();
|
|
26265
26330
|
init_projects();
|
|
26266
26331
|
init_state_plane();
|
|
26267
26332
|
async function recordMainDivergenceHealth(state, projects = listProjectsSync(), measure = getMainDivergence) {
|
|
@@ -26396,10 +26461,10 @@ function shouldRunRecoveryJanitor(janitor, patrolCycle) {
|
|
|
26396
26461
|
//#endregion
|
|
26397
26462
|
//#region ../../lib/cloister/dead-end-trip.ts
|
|
26398
26463
|
init_projects();
|
|
26399
|
-
function recordDeadEndNeedsYou(issueId, recoveryPath, generation, message) {
|
|
26464
|
+
async function recordDeadEndNeedsYou(issueId, recoveryPath, generation, message) {
|
|
26400
26465
|
const project = resolveProjectFromIssueSync(issueId);
|
|
26401
26466
|
if (!project) return void 0;
|
|
26402
|
-
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;
|
|
26403
26468
|
}
|
|
26404
26469
|
//#endregion
|
|
26405
26470
|
//#region ../../lib/cloister/test-status-green-ci-reconciler.ts
|
|
@@ -26920,7 +26985,7 @@ init_config();
|
|
|
26920
26985
|
init_concurrency();
|
|
26921
26986
|
init_review_status();
|
|
26922
26987
|
init_record();
|
|
26923
|
-
|
|
26988
|
+
init_io();
|
|
26924
26989
|
init_control_settings();
|
|
26925
26990
|
init_archive_planning();
|
|
26926
26991
|
init_projects();
|
|
@@ -27192,8 +27257,8 @@ async function cleanupStaleAgentState() {
|
|
|
27192
27257
|
*/
|
|
27193
27258
|
async function cleanupAbandonedFeedback() {
|
|
27194
27259
|
const actions = [];
|
|
27195
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
27196
|
-
const { clearFeedbackFiles } = await import("./feedback-writer-
|
|
27260
|
+
const { getReviewStatusSync } = await import("./review-status-BoJdyvUQ.js");
|
|
27261
|
+
const { clearFeedbackFiles } = await import("./feedback-writer-BtaoJGl2.js");
|
|
27197
27262
|
for (const { issueId, workspacePath } of listFeatureWorkspaces()) {
|
|
27198
27263
|
const panFeedbackDir = join$1(workspacePath, ".pan", "feedback");
|
|
27199
27264
|
if (!existsSync(panFeedbackDir)) continue;
|
|
@@ -27264,7 +27329,7 @@ async function handleOrphanReviewerSession(sessionName, sessions, creationTimes,
|
|
|
27264
27329
|
if (!issueId) return null;
|
|
27265
27330
|
const agentSession = `agent-${issueId.toLowerCase()}`;
|
|
27266
27331
|
if (sessions.includes(agentSession)) return null;
|
|
27267
|
-
const { getReviewStatusSync } = await import("./review-status-
|
|
27332
|
+
const { getReviewStatusSync } = await import("./review-status-BoJdyvUQ.js");
|
|
27268
27333
|
try {
|
|
27269
27334
|
if (getReviewStatusSync(issueId)?.reviewStatus === "reviewing") return null;
|
|
27270
27335
|
} catch {}
|
|
@@ -27343,9 +27408,9 @@ async function checkOrphanedCompletions() {
|
|
|
27343
27408
|
const issueLower = issueId.toLowerCase();
|
|
27344
27409
|
const workspacePath = findWorkspacePath(resolved.projectPath, issueLower);
|
|
27345
27410
|
if (!workspacePath || !existsSync(workspacePath)) continue;
|
|
27346
|
-
const
|
|
27347
|
-
if (
|
|
27348
|
-
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;
|
|
27349
27414
|
const { stdout } = await execAsync(`gh pr list --head feature/${issueLower} --state open --json url --jq '.[0].url'`, {
|
|
27350
27415
|
encoding: "utf-8",
|
|
27351
27416
|
timeout: 15e3
|
|
@@ -27356,10 +27421,12 @@ async function checkOrphanedCompletions() {
|
|
|
27356
27421
|
reviewRequestedAt: now,
|
|
27357
27422
|
prUrl
|
|
27358
27423
|
});
|
|
27359
|
-
await
|
|
27360
|
-
|
|
27361
|
-
|
|
27362
|
-
|
|
27424
|
+
await updateIssueRecord(project, issueId, (nextRecord) => {
|
|
27425
|
+
Object.assign(nextRecord.pipeline, {
|
|
27426
|
+
reviewRequestedAt: now,
|
|
27427
|
+
prUrl,
|
|
27428
|
+
panDoneRecoveredAt: now
|
|
27429
|
+
});
|
|
27363
27430
|
});
|
|
27364
27431
|
const action = `checkOrphanedCompletions: recovered ${issueId} (PR open but review never dispatched)`;
|
|
27365
27432
|
logDeaconEventSync(action);
|
|
@@ -27384,7 +27451,7 @@ async function checkOrphanedCompletions() {
|
|
|
27384
27451
|
async function checkPendingTestDispatch() {
|
|
27385
27452
|
const actions = [];
|
|
27386
27453
|
try {
|
|
27387
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
27454
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-BoJdyvUQ.js");
|
|
27388
27455
|
const statuses = loadReviewStatuses();
|
|
27389
27456
|
const now = Date.now();
|
|
27390
27457
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
@@ -27417,7 +27484,7 @@ async function checkPendingTestDispatch() {
|
|
|
27417
27484
|
console.log(`[deacon] ${issueId}: skipping test re-dispatch — issue is closed`);
|
|
27418
27485
|
continue;
|
|
27419
27486
|
}
|
|
27420
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
27487
|
+
const { resolveProjectFromIssueSync } = await import("./projects-DxMUi2eI.js");
|
|
27421
27488
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
27422
27489
|
if (!resolved) continue;
|
|
27423
27490
|
const issueLower = issueId.toLowerCase();
|
|
@@ -27432,8 +27499,8 @@ async function checkPendingTestDispatch() {
|
|
|
27432
27499
|
logDeaconEventSync(`checkPendingTestDispatch: deferred test for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
|
|
27433
27500
|
continue;
|
|
27434
27501
|
}
|
|
27435
|
-
const { spawnRun } = await import("./agents-
|
|
27436
|
-
const { buildTestRolePrompt } = await import("./test-agent-queue-
|
|
27502
|
+
const { spawnRun } = await import("./agents-DAUyr_Z1.js");
|
|
27503
|
+
const { buildTestRolePrompt } = await import("./test-agent-queue-C8lE8r2j.js");
|
|
27437
27504
|
try {
|
|
27438
27505
|
const run = await spawnRun(issueId, "test", {
|
|
27439
27506
|
workspace,
|
|
@@ -27556,7 +27623,7 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
27556
27623
|
const cmd = `pan admin specialists done test ${issueId} --status ${decision.status}${noteArg}`;
|
|
27557
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.`;
|
|
27558
27625
|
try {
|
|
27559
|
-
const { messageAgent } = await import("./agents-
|
|
27626
|
+
const { messageAgent } = await import("./agents-DAUyr_Z1.js");
|
|
27560
27627
|
await messageAgent(testSession, nudge);
|
|
27561
27628
|
unsignaledTestNudges.set(testSession, now);
|
|
27562
27629
|
const msg = `Nudged ${testSession} to signal ${decision.status} (verdict artifact present)`;
|
|
@@ -27570,7 +27637,7 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
27570
27637
|
case "nudge-write": {
|
|
27571
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.`;
|
|
27572
27639
|
try {
|
|
27573
|
-
const { messageAgent } = await import("./agents-
|
|
27640
|
+
const { messageAgent } = await import("./agents-DAUyr_Z1.js");
|
|
27574
27641
|
await messageAgent(testSession, nudge);
|
|
27575
27642
|
unsignaledTestNudges.set(testSession, now);
|
|
27576
27643
|
const msg = `Nudged ${testSession} to write+signal a test verdict (no artifact yet)`;
|
|
@@ -27593,8 +27660,8 @@ async function checkCompletedButUnsignaledTests() {
|
|
|
27593
27660
|
async function checkVerificationReviewContradiction() {
|
|
27594
27661
|
const actions = [];
|
|
27595
27662
|
try {
|
|
27596
|
-
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-
|
|
27597
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
27663
|
+
const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-BoJdyvUQ.js");
|
|
27664
|
+
const { resolveProjectFromIssueSync } = await import("./projects-DxMUi2eI.js");
|
|
27598
27665
|
const statuses = loadReviewStatuses();
|
|
27599
27666
|
for (const [issueId, status] of Object.entries(statuses)) if (status.verificationStatus === "passed" && status.reviewStatus === "reviewing" && status.stuckReason === "review_infrastructure_failure") {
|
|
27600
27667
|
let reviewedAtCommit;
|
|
@@ -27643,7 +27710,7 @@ async function checkPostReviewCommits() {
|
|
|
27643
27710
|
const actions = [];
|
|
27644
27711
|
try {
|
|
27645
27712
|
const statuses = loadReviewStatuses();
|
|
27646
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
27713
|
+
const { resolveProjectFromIssueSync } = await import("./projects-DxMUi2eI.js");
|
|
27647
27714
|
for (const [issueId, status] of Object.entries(statuses)) {
|
|
27648
27715
|
if (status.mergeStatus === "merged") continue;
|
|
27649
27716
|
if (!status.reviewedAtCommit) continue;
|
|
@@ -27698,7 +27765,7 @@ async function checkPostReviewCommits() {
|
|
|
27698
27765
|
actions.push(`Deferred post-review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
|
|
27699
27766
|
logDeaconEventSync(`checkPostReviewCommits: deferred review for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
|
|
27700
27767
|
} else if (freshStatus?.reviewStatus === "pending") {
|
|
27701
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
27768
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-CUVj54v0.js");
|
|
27702
27769
|
const branch = `feature/${issueId.toLowerCase()}`;
|
|
27703
27770
|
const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
|
|
27704
27771
|
issueId,
|
|
@@ -27798,7 +27865,7 @@ async function checkReadyForMergeStuck() {
|
|
|
27798
27865
|
const testStatusGreenCiReconcileCooldowns = /* @__PURE__ */ new Map();
|
|
27799
27866
|
const TEST_STATUS_GREEN_CI_RECONCILE_COOLDOWN_MS = 300 * 1e3;
|
|
27800
27867
|
async function reconcileTestStatusFromGreenCi() {
|
|
27801
|
-
const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-
|
|
27868
|
+
const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-Dtn4ib6M.js");
|
|
27802
27869
|
return reconcileTestStatusFromGreenCiWithDeps({
|
|
27803
27870
|
isGitHubAppConfigured,
|
|
27804
27871
|
loadReviewStatuses,
|
|
@@ -27819,7 +27886,7 @@ async function reconcileTestStatusFromGreenCi() {
|
|
|
27819
27886
|
*/
|
|
27820
27887
|
async function clearStaleCiFeedback(issueId) {
|
|
27821
27888
|
const { readdir, rm } = await import("fs/promises");
|
|
27822
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
27889
|
+
const { resolveProjectFromIssueSync } = await import("./projects-DxMUi2eI.js");
|
|
27823
27890
|
const projectConfig = resolveProjectFromIssueSync(issueId);
|
|
27824
27891
|
if (!projectConfig) return;
|
|
27825
27892
|
const repoDir = projectConfig.projectPath;
|
|
@@ -27875,7 +27942,7 @@ async function checkDeadEndAgents() {
|
|
|
27875
27942
|
const autoRequeueCount = status.autoRequeueCount || 0;
|
|
27876
27943
|
if (autoRequeueCount >= 25) {
|
|
27877
27944
|
console.log(`[deacon] Dead-end detected for ${key} but circuit breaker active (${autoRequeueCount}/25 requeues used)`);
|
|
27878
|
-
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`);
|
|
27879
27946
|
if (trip) actions.push(trip);
|
|
27880
27947
|
continue;
|
|
27881
27948
|
}
|
|
@@ -27896,7 +27963,7 @@ async function checkDeadEndAgents() {
|
|
|
27896
27963
|
const gateDecision = decideAgentAutonomousRedrive(agentState ?? {}, getAgentDir(agentSessionName), true);
|
|
27897
27964
|
if (gateDecision.decision === "defer") {
|
|
27898
27965
|
console.log(`[deacon] PAN-2209: ${issueId} (${statusType}) re-drive deferred — ${gateDecision.reason}`);
|
|
27899
|
-
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`);
|
|
27900
27967
|
if (trip) actions.push(trip);
|
|
27901
27968
|
} else {
|
|
27902
27969
|
if (gateDecision.gateDecision.clearStoppedByUser && agentState) {
|
|
@@ -28119,7 +28186,7 @@ async function checkWorkspaceContainerHealth(sharedState) {
|
|
|
28119
28186
|
}
|
|
28120
28187
|
}
|
|
28121
28188
|
try {
|
|
28122
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28189
|
+
const { resolveProjectFromIssueSync } = await import("./projects-DxMUi2eI.js");
|
|
28123
28190
|
const resolved = resolveProjectFromIssueSync(issueLower.toUpperCase());
|
|
28124
28191
|
if (resolved) await killOrphanedWorkspaceProcesses(`${resolved.projectPath}/workspaces/feature-${issueLower}`);
|
|
28125
28192
|
} catch {}
|
|
@@ -28168,8 +28235,8 @@ async function checkWorkspaceContainerHealth(sharedState) {
|
|
|
28168
28235
|
async function checkMergedWorkSessions() {
|
|
28169
28236
|
const actions = [];
|
|
28170
28237
|
try {
|
|
28171
|
-
const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-
|
|
28172
|
-
const { setAgentPaused } = await import("./agents-
|
|
28238
|
+
const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-BR39qflC.js");
|
|
28239
|
+
const { setAgentPaused } = await import("./agents-DAUyr_Z1.js");
|
|
28173
28240
|
const toKill = selectMergedWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
|
|
28174
28241
|
for (const session of toKill) try {
|
|
28175
28242
|
await Effect.runPromise(setAgentPaused(session, "merged — awaiting close-out (verify on main)", true));
|
|
@@ -28209,7 +28276,7 @@ const AWAITING_TEST_IDLE_REAP_MS = 600 * 1e3;
|
|
|
28209
28276
|
async function checkAwaitingTestWorkSessions() {
|
|
28210
28277
|
const actions = [];
|
|
28211
28278
|
try {
|
|
28212
|
-
const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-
|
|
28279
|
+
const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-BR39qflC.js");
|
|
28213
28280
|
const candidates = selectAwaitingTestWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
|
|
28214
28281
|
const now = Date.now();
|
|
28215
28282
|
for (const session of candidates) {
|
|
@@ -28262,10 +28329,14 @@ async function runPatrol() {
|
|
|
28262
28329
|
hasLoggedGlobalPauseSkip = false;
|
|
28263
28330
|
addLog("info", `Patrol cycle ${state.patrolCycle} — checking per-project specialists`, state.patrolCycle);
|
|
28264
28331
|
console.log(`[deacon] Patrol cycle ${state.patrolCycle} - checking per-project specialists`);
|
|
28332
|
+
for (const a of await (await import("./stale-task-claims-DnCHCATD.js")).patrolStaleTaskClaims()) {
|
|
28333
|
+
actions.push(a);
|
|
28334
|
+
addLog("action", a, state.patrolCycle);
|
|
28335
|
+
}
|
|
28265
28336
|
const stuckRemediationActions = await checkStuckAgentRemediation();
|
|
28266
28337
|
actions.push(...stuckRemediationActions);
|
|
28267
28338
|
for (const a of stuckRemediationActions) addLog("action", a, state.patrolCycle);
|
|
28268
|
-
const { reconcileInFlightJournals } = await import("./advancing-selfheal-
|
|
28339
|
+
const { reconcileInFlightJournals } = await import("./advancing-selfheal-BYidNkmp.js");
|
|
28269
28340
|
const reconciledJournalActions = await reconcileInFlightJournals();
|
|
28270
28341
|
actions.push(...reconciledJournalActions);
|
|
28271
28342
|
for (const a of reconciledJournalActions) addLog("action", a, state.patrolCycle);
|
|
@@ -28277,7 +28348,7 @@ async function runPatrol() {
|
|
|
28277
28348
|
const age = Date.now() - (pending.timestamp ?? 0);
|
|
28278
28349
|
if (age < 3600 * 1e3) {
|
|
28279
28350
|
console.log(`[deacon] Processing pending post-merge lifecycle for ${pending.issueId} (age: ${Math.round(age / 1e3)}s)`);
|
|
28280
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
28351
|
+
const { postMergeLifecycle } = await import("./merge-agent-D6LRIW63.js");
|
|
28281
28352
|
const { unlinkSync } = await import("fs");
|
|
28282
28353
|
unlinkSync(pendingFile);
|
|
28283
28354
|
await postMergeLifecycle(pending.issueId, pending.projectPath, pending.sourceBranch, { skipDeploy: true });
|
|
@@ -28322,7 +28393,7 @@ async function runPatrol() {
|
|
|
28322
28393
|
actions.push(...suspendActions);
|
|
28323
28394
|
for (const a of suspendActions) addLog("action", a, state.patrolCycle);
|
|
28324
28395
|
try {
|
|
28325
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28396
|
+
const { resolveProjectFromIssueSync } = await import("./projects-DxMUi2eI.js");
|
|
28326
28397
|
const allStatuses = loadReviewStatuses();
|
|
28327
28398
|
for (const [issueId, status] of Object.entries(allStatuses)) {
|
|
28328
28399
|
if (!status.readyForMerge || status.mergeStatus === "merged") continue;
|
|
@@ -28342,7 +28413,7 @@ async function runPatrol() {
|
|
|
28342
28413
|
} catch (err) {
|
|
28343
28414
|
console.warn(`[deacon] Failed to check workspace existence: ${err.message}`);
|
|
28344
28415
|
}
|
|
28345
|
-
const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-
|
|
28416
|
+
const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-BYidNkmp.js");
|
|
28346
28417
|
const reapedWorkActions = await checkMergedWorkSessions();
|
|
28347
28418
|
actions.push(...reapedWorkActions);
|
|
28348
28419
|
for (const a of reapedWorkActions) addLog("action", a, state.patrolCycle);
|
|
@@ -28350,7 +28421,7 @@ async function runPatrol() {
|
|
|
28350
28421
|
actions.push(...reapedMergedAdvancingActions);
|
|
28351
28422
|
for (const a of reapedMergedAdvancingActions) addLog("action", a, state.patrolCycle);
|
|
28352
28423
|
try {
|
|
28353
|
-
const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-
|
|
28424
|
+
const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-CH3igKY8.js");
|
|
28354
28425
|
const remoteCredentialActions = await refreshClaudeCredentialsForActiveRemoteAgents();
|
|
28355
28426
|
actions.push(...remoteCredentialActions);
|
|
28356
28427
|
for (const a of remoteCredentialActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
|
|
@@ -28358,7 +28429,7 @@ async function runPatrol() {
|
|
|
28358
28429
|
addLog("warn", `Remote credential refresh patrol failed: ${err.message}`, state.patrolCycle);
|
|
28359
28430
|
}
|
|
28360
28431
|
try {
|
|
28361
|
-
const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-
|
|
28432
|
+
const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-_Z1SAaSK.js");
|
|
28362
28433
|
const heartbeatActions = await refreshHostHeartbeatForEphemeralVms();
|
|
28363
28434
|
actions.push(...heartbeatActions);
|
|
28364
28435
|
for (const a of heartbeatActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
|
|
@@ -28366,7 +28437,7 @@ async function runPatrol() {
|
|
|
28366
28437
|
addLog("warn", `Remote heartbeat refresh patrol failed: ${err.message}`, state.patrolCycle);
|
|
28367
28438
|
}
|
|
28368
28439
|
try {
|
|
28369
|
-
const { reapCompletedRemoteAgents } = await import("./remote-completion-
|
|
28440
|
+
const { reapCompletedRemoteAgents } = await import("./remote-completion-CH3igKY8.js");
|
|
28370
28441
|
const remoteReap = await reapCompletedRemoteAgents();
|
|
28371
28442
|
for (const r of remoteReap) if (r.status === "handed-off" || r.status === "error") {
|
|
28372
28443
|
const msg = `Remote reap ${r.issueId}: ${r.status} (${r.details.join("; ")})`;
|
|
@@ -28547,7 +28618,7 @@ async function runPatrol() {
|
|
|
28547
28618
|
const issueId = runtimeState.currentIssue;
|
|
28548
28619
|
try {
|
|
28549
28620
|
if (getReviewStatusSync(issueId)?.mergeStatus === "merging") {
|
|
28550
|
-
const { resolveProjectFromIssueSync } = await import("./projects-
|
|
28621
|
+
const { resolveProjectFromIssueSync } = await import("./projects-DxMUi2eI.js");
|
|
28551
28622
|
const resolved = resolveProjectFromIssueSync(issueId);
|
|
28552
28623
|
if (resolved) {
|
|
28553
28624
|
const branch = `feature/${issueId.toLowerCase()}`;
|
|
@@ -28561,7 +28632,7 @@ async function runPatrol() {
|
|
|
28561
28632
|
mergeStatus: "merged",
|
|
28562
28633
|
readyForMerge: false
|
|
28563
28634
|
});
|
|
28564
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
28635
|
+
const { postMergeLifecycle } = await import("./merge-agent-D6LRIW63.js");
|
|
28565
28636
|
postMergeLifecycle(issueId, resolved.projectPath).catch((err) => console.warn(`[deacon] postMergeLifecycle failed for ${issueId}: ${err}`));
|
|
28566
28637
|
actions.push(`Auto-completed stale merge for ${issueId}`);
|
|
28567
28638
|
} else {
|
|
@@ -28741,7 +28812,7 @@ function startDeacon() {
|
|
|
28741
28812
|
logDeaconEventSync(`startDeacon: health monitor starting (patrol every ${config.patrolIntervalMs / 1e3}s)`);
|
|
28742
28813
|
(async () => {
|
|
28743
28814
|
await reconcileAgentLiveness();
|
|
28744
|
-
const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-
|
|
28815
|
+
const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-BYidNkmp.js");
|
|
28745
28816
|
await runBootAdvancingSelfHeal();
|
|
28746
28817
|
runScheduledPatrol("startup");
|
|
28747
28818
|
})().catch((err) => {
|
|
@@ -28811,6 +28882,6 @@ function assessDeaconPatrolFreshness(params) {
|
|
|
28811
28882
|
};
|
|
28812
28883
|
}
|
|
28813
28884
|
//#endregion
|
|
28814
|
-
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 };
|
|
28815
28886
|
|
|
28816
|
-
//# sourceMappingURL=deacon-
|
|
28887
|
+
//# sourceMappingURL=deacon-D2-xTesT.js.map
|