@overdeck/desktop 0.45.7 → 0.45.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +10 -3
- package/server/{acceptance-criteria-DYffaKI9.js → acceptance-criteria-l0DSvFFS.js} +2 -2
- package/server/{activity-logger-DO27GsPa.js → activity-logger-DvYvFhwZ.js} +1 -1
- package/server/{activity-logger-Dm95Ua07.js → activity-logger-pcbf-e30.js} +3 -2
- package/server/{advancing-selfheal-n8tAeFwE.js → advancing-selfheal-CMlGznKv.js} +11 -66
- package/server/{agent-gc-CIFaa2vJ.js → agent-gc-BtAzj8QN.js} +3 -3
- package/server/{agent-state-service-BqVDA9b8.js → agent-state-service-5ge9xxhx.js} +5 -5
- package/server/{agent-state-service-CLifyinO.js → agent-state-service-C1iUF9Ft.js} +1 -1
- package/server/agent-state-xk_G8t90.js +3 -0
- package/server/{agents-KaEsWZ8D.js → agents-BIggLvi_.js} +1 -1
- package/server/{agents-D_x5BSZM.js → agents-DHvsjsuP.js} +129 -61
- package/server/{archive-planning-CFxmeFKh.js → archive-planning-B4Qi02bk.js} +1 -1
- package/server/{archive-planning-DVUXlRBs.js → archive-planning-zTvWWHG_.js} +4 -4
- package/server/{artifact-index-jobs-ChUgzZah.js → artifact-index-jobs-BrByqVkB.js} +2 -2
- package/server/{auto-commit-2KiBFh-K.js → auto-commit-DoIPFoEs.js} +1 -1
- package/server/{backlog-auto-trigger-DoTEMZMl.js → backlog-auto-trigger-COm_R96V.js} +3 -3
- package/server/{bd-mutex-CE6P_MlD.js → bd-mutex-BItGvLQ8.js} +2 -2
- package/server/{bd-process-lock-Ch3WNHS9.js → bd-process-lock-CJkoG7hW.js} +2 -2
- package/server/{beads-B43pgBIy.js → beads-AmCXEv_E.js} +1 -1
- package/server/{beads-BugPvtWp.js → beads-DlZm-vrG.js} +5 -5
- package/server/{beads-query-CtqWakL6.js → beads-query-BrVNWoSL.js} +2 -2
- package/server/{beads-restore-BqTMSQi-.js → beads-restore-CMbDSB5R.js} +1 -1
- package/server/{behavior-vk1sixby.js → behavior-By-2Wipv.js} +3 -3
- package/server/{briefing-freshness-B3YxHQ-L.js → briefing-freshness-CXhZdnB8.js} +4 -4
- package/server/{checkpoint-manager-CdrwLsQh.js → checkpoint-manager-CPw51H2n.js} +1 -1
- package/server/{checkpoint-manager-Dg6cWZz3.js → checkpoint-manager-CfNpHOp4.js} +11 -2
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-DDd-0doa.js → checkpoints-BbfH1EIy.js} +2 -2
- package/server/{checkpoints-dBCJr0dC.js → checkpoints-BjlBWOA8.js} +1 -1
- package/server/{claude-permissions-BpwIcIR7.js → claude-permissions-DrRAs_0F.js} +3 -3
- package/server/{claude-settings-overlay-DnraWcz6.js → claude-settings-overlay-BSeS7Ki3.js} +2 -2
- package/server/{claude-settings-overlay-xD_Vu420.js → claude-settings-overlay-CEWlIFL-.js} +1 -1
- package/server/cli-CJDWXE_Y.js +3 -0
- package/server/{cli-BmzYZZKi.js → cli-CvK9xuSS.js} +9 -9
- package/server/{cliproxy-DYWdJKZ1.js → cliproxy-BOcmOK6l.js} +1 -1
- package/server/{cliproxy-CE2GDY7x.js → cliproxy-J-_1iIXe.js} +2 -2
- package/server/{close-issue-CpJd4SOL.js → close-issue-BnpErnD1.js} +5 -5
- package/server/{closed-issue-reaper-QpcvCDeE.js → closed-issue-reaper-BLCQwTpF.js} +1 -1
- package/server/{closed-issue-reaper-DubXY9Zg.js → closed-issue-reaper-DRqK5k39.js} +10 -10
- package/server/{codex-j8aVgRou.js → codex-BUZjrnqH.js} +1 -1
- package/server/{codex-B3J1TXo7.js → codex-DcInrhok.js} +5 -5
- package/server/{compact-beads-CqhLqG-k.js → compact-beads-RFwdZFPA.js} +4 -4
- package/server/{compact-beads-BeilHCdj.js → compact-beads-omhUgj5b.js} +1 -1
- package/server/{config-DHU0j_pS.js → config-CzcWQ24p.js} +1 -1
- package/server/{config-DkEhJM0h.js → config-oWoKf5jO.js} +4 -4
- package/server/{config-yaml-DbdN9Fuq.js → config-yaml-DPAieL_G.js} +3 -2
- package/server/{conflict-gate-CgOtMo8i.js → conflict-gate-BhKvrPxn.js} +4 -4
- package/server/{conflict-gate-D00zFjeu.js → conflict-gate-JdFuhKuF.js} +1 -1
- package/server/{context-layers-BHEjT8Cn.js → context-layers-CTjQwcEQ.js} +3 -3
- package/server/{context-layers-0Lgq-SE_.js → context-layers-DxKsseHI.js} +2 -2
- package/server/{control-settings-CYv732Gs.js → control-settings-BMqUkXmR.js} +4 -4
- package/server/{conversation-compaction-Dbw03b-X.js → conversation-compaction-Ba5aZdrb.js} +1 -1
- package/server/{conversation-compaction-DKXvmX50.js → conversation-compaction-C5o_eKEm.js} +8 -8
- package/server/{conversation-service-BwKUeEvn.js → conversation-service-DvG8vZSV.js} +5 -5
- package/server/{conversation-service-kYYeRp9B.js → conversation-service-WKl-sw58.js} +1 -1
- package/server/{conversations-Dwr1jHrO.js → conversations-DL_BAWVk.js} +4 -4
- package/server/{conversations-D-uOnA8T.js → conversations-Dcx6LeIh.js} +1 -1
- package/server/{cost-DiSDkYe7.js → cost-C2CuA66z.js} +2 -2
- package/server/{cost-DNIyZH1X.js → cost-DaOG8sUB.js} +3 -3
- package/server/{cost-sync-CfXu-3TF.js → cost-sync-8lkDeL9g.js} +3 -3
- package/server/{dag-DZBowTd2.js → dag-jH8ZkewR.js} +3 -3
- package/server/{dangerous-git-ops-Pongxg2d.js → dangerous-git-ops-Dcw7PbYo.js} +1 -1
- package/server/dashboard-db-worker.js +6 -6
- package/server/{deacon-DT0BsVyE.js → deacon-Cv2RMfHs.js} +3 -3
- package/server/{deacon-f0yvsG5S.js → deacon-j3qSZ7--.js} +222 -110
- package/server/{deacon-nudge-log-Cmcch2Av.js → deacon-nudge-log-CJGA6aSQ.js} +1 -1
- package/server/deacon-swarm-D1iAUX-P.js +2 -0
- package/server/{deacon-swarm-BBGnhvD2.js → deacon-swarm-DadWNi5J.js} +88 -43
- package/server/deacon.js +8 -8
- package/server/{devcontainer-renderer-Cpz7XBj0.js → devcontainer-renderer-DUJYYRQB.js} +3 -3
- package/server/{dist-DypOkJv9.js → dist-BIC8spJ0.js} +1 -1
- package/server/dist-BUplB3Od.js +3 -0
- package/server/{docker-DARVx0OZ.js → docker-Q4bphryk.js} +2 -2
- package/server/{ensure-devcontainer-Dmdw4BxF.js → ensure-devcontainer-BCB6fHp9.js} +1 -1
- package/server/{ensure-devcontainer-BJssuBG6.js → ensure-devcontainer-XLL0vtgV.js} +4 -4
- package/server/{esm-shims-Crmvo9Ln.js → esm-shims-DiV9jHa_.js} +1 -1
- package/server/{event-store-BeEE8pW5.js → event-store-DIk9wvnS.js} +1 -1
- package/server/{event-store-DrfTJZ1_.js → event-store-DTJXZjCl.js} +4 -4
- package/server/events-BlzVUyTx.js +3 -0
- package/server/{events-BbClwoM-.js → events-DGWZzye2.js} +4 -4
- package/server/{factory-DVv9cpG5.js → factory-rG4T40su.js} +4 -4
- package/server/{feature-registry-population-C6eVdq4J.js → feature-registry-population-Dwyj9gEM.js} +4 -4
- package/server/{feature-registry-storage-ByBosRId.js → feature-registry-storage-CnGyNgAq.js} +2 -2
- package/server/{features-EZfSwuqq.js → features-CYY2_Eeh.js} +2 -2
- package/server/{feedback-target-DENaINE6.js → feedback-target-C4DaDSZ8.js} +1 -1
- package/server/{feedback-target-Dv4VnbQl.js → feedback-target-oE4-Esxl.js} +48 -17
- package/server/{feedback-writer-Dxg8qM8i.js → feedback-writer-DMaO0XXa.js} +4 -4
- package/server/{feedback-writer-BvHE1I-3.js → feedback-writer-thrdxYpK.js} +1 -1
- package/server/{flywheel-Akbd9VNM.js → flywheel-BqDdGvrQ.js} +1 -1
- package/server/{flywheel-B4KN9BmW.js → flywheel-ClMjGW_u.js} +11 -11
- package/server/{flywheel-ByZyAv3P.js → flywheel-DefHRzY4.js} +13 -13
- package/server/{flywheel-merge-order-DPFZbt-w.js → flywheel-merge-order-B6YDSElh.js} +1 -1
- package/server/{flywheel-merge-order-BYUPxqgx.js → flywheel-merge-order-CuDcqTRJ.js} +7 -7
- package/server/forge-BfP7OJwK.js +2 -0
- package/server/{forge-BnTExkbK.js → forge-BixzckB0.js} +2 -2
- package/server/{from-B2i_NgIH.js → from-D4xmArTA.js} +1 -1
- package/server/{fts-db-dnCj-PD3.js → fts-db-DPtxOAjp.js} +2 -2
- package/server/{fts-operations-CAAofsTQ.js → fts-operations-VrGjsT0w.js} +2 -2
- package/server/{git-utils-CB3gDSM-.js → git-utils-D_cax3fD.js} +2 -2
- package/server/{git-utils-Bk7sJZru.js → git-utils-RAmTwjFB.js} +1 -1
- package/server/{github-app-CIhMNI4C.js → github-app-B5PDHMyn.js} +1 -1
- package/server/{github-app-BIU8a93o.js → github-app-FMXgo3vK.js} +2 -2
- package/server/{github-client-DmZgsnYP.js → github-client-VRiB6N-4.js} +1 -1
- package/server/{github-client-zREpj5HA.js → github-client-yjbXaqpR.js} +2 -2
- package/server/{github-pr-lookup-CPri6JR1.js → github-pr-lookup-t8X8R0c0.js} +2 -2
- package/server/{harness-resolve-TzYAiXzZ.js → harness-resolve-DKeSVsJL.js} +3 -3
- package/server/{health-events-CDWk8Oz4.js → health-events-CD6q47ub.js} +1 -1
- package/server/{health-events-Dd0FuKrE.js → health-events-DaLX4-0a.js} +2 -2
- package/server/{hooks-C6HBXlVm.js → hooks-CmHFSj_Z.js} +2 -2
- package/server/{hooks-DRLzoFof.js → hooks-D-cbMUzQ.js} +1 -1
- package/server/{hume-Bb91r_2I.js → hume-DkVOs1Qi.js} +2 -2
- package/server/hume-x9voULey.js +3 -0
- package/server/{idle-stack-reaper-BPHnItVj.js → idle-stack-reaper-DBKQ9SKu.js} +3 -3
- package/server/{idle-stack-reaper-D5bwmuwX.js → idle-stack-reaper-DdnERp3G.js} +1 -1
- package/server/{infra-CCTzpcuJ.js → infra-CpKlYZA9.js} +3 -3
- package/server/{injection-D6L7D_w0.js → injection-CszhePD2.js} +7 -7
- package/server/{injection-CBrN8UxB.js → injection-DKzL2Axk.js} +1 -1
- package/server/{inspect-agent-CSYyFWqP.js → inspect-agent-BKKc0XnB.js} +9 -9
- package/server/inspect-agent-vm88mLYr.js +2 -0
- package/server/{internal-token-DWhBqgIk.js → internal-token-CQUx9YLc.js} +2 -2
- package/server/{internal-token-DCrCAG_M.js → internal-token-DrGdpLFo.js} +1 -1
- package/server/{io-DtAQ_2hp.js → io-Wy8YpFeP.js} +2 -2
- package/server/{issue-closed-0Zx72zXf.js → issue-closed-BO84g03t.js} +4 -4
- package/server/{issue-lifecycle-ZTt6kP_K.js → issue-lifecycle-DnhQgddB.js} +22 -22
- package/server/{issue-lifecycle-CJ7-D4XX.js → issue-lifecycle-nY4esZn8.js} +1 -1
- package/server/{issue-service-singleton-DNh4RRI7.js → issue-service-singleton-Bnqv1uaa.js} +1 -1
- package/server/{issue-service-singleton-DRE7S-Zg.js → issue-service-singleton-_AquSBTl.js} +8 -8
- package/server/{issues-CGc8Aaxm.js → issues-ChNcfHta.js} +2 -2
- package/server/{label-cleanup-CNsPlXy6.js → label-cleanup-bVXCGWBM.js} +3 -3
- package/server/{layers-CO_VLcSv.js → layers-vdvlpFki.js} +2 -2
- package/server/{lifecycle-B_NFvTj9.js → lifecycle-CGKm7doE.js} +7 -7
- package/server/{lifecycle-io-D0FftBLy.js → lifecycle-io-CdqPkCyk.js} +1 -1
- package/server/{lifecycle-io-WDGwa1vV.js → lifecycle-io-DSrv9xGh.js} +4 -4
- package/server/{linear-client-MvjflCXs.js → linear-client-BxKvL6U8.js} +1 -1
- package/server/{linear-client-CSgH24Ym.js → linear-client-E0HdXtWs.js} +2 -2
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-DltB-RGV.js → merge-D3wEbmUJ.js} +1 -1
- package/server/{merge-Ce9DHBXM.js → merge-UlAwCk80.js} +4 -4
- package/server/{merge-agent-Rv0bNQNU.js → merge-agent-BcgAYStl.js} +27 -27
- package/server/{merge-agent-DRXwKxmb.js → merge-agent-Dh8Y9PDO.js} +1 -1
- package/server/{merge-batch-LLp_cXUR.js → merge-batch-BwhGdlh4.js} +1 -1
- package/server/{merge-blockers-BqYUtLBd.js → merge-blockers-DwdQNsYD.js} +2 -2
- package/server/merge-ops-QdBiQ8XB.js +2 -0
- package/server/{merge-rebase-AiSEs4QB.js → merge-rebase-CH12_ufi.js} +2 -2
- package/server/{merge-set-CUY9msG9.js → merge-set-TRxJwR-w.js} +3 -3
- package/server/{merge-set-CSJoIpKB.js → merge-set-rXK3ehnB.js} +1 -1
- package/server/{merge-sync-CAjbJeTp.js → merge-sync-BKLKu9kz.js} +1 -1
- package/server/{merge-sync-CuyWzzZK.js → merge-sync-CaLRt2cB.js} +2 -2
- package/server/{merge-train-DndZCAiv.js → merge-train-DmxlYbEo.js} +3 -3
- package/server/{merge-train-deps-Bsy90Q7t.js → merge-train-deps-DBHsOWt9.js} +4 -4
- package/server/{merge-verification-Kvh4WViS.js → merge-verification-DA9rvqsE.js} +4 -4
- package/server/{multipart-parser-BWnfyoyz.js → multipart-parser-DtIEUW2B.js} +2 -2
- package/server/{no-resume-mode-CKy2bwZL.js → no-resume-mode-yrPEQ_pC.js} +1 -1
- package/server/{orphan-proposed-reconciler-Cg5_uVy1.js → orphan-proposed-reconciler-Db8tUhce.js} +10 -10
- package/server/{orphan-proposed-reconciler-CjUuBs6J.js → orphan-proposed-reconciler-mXV--tcB.js} +1 -1
- package/server/{pan-dir-Cn3NUnxU.js → pan-dir-BgBeeZDX.js} +3 -3
- package/server/{paths-Bo-kA9ta.js → paths-TE1GOZDr.js} +2 -2
- package/server/{pickup-DRn-XNXS.js → pickup-KLRUhThD.js} +1 -1
- package/server/{pipeline-notifier-BbGQtvKM.js → pipeline-notifier-aX_5EqQO.js} +2 -2
- package/server/{pipeline-notifier-DQsOtdjZ.js → pipeline-notifier-lwMa--Gz.js} +1 -1
- package/server/{projects-CKTA6Klk.js → projects-BNmVxnNt.js} +1 -1
- package/server/{prompts-CVncQg4P.js → prompts-CelsUdrx.js} +2 -2
- package/server/{providers-uPI9uU7Q.js → providers-4-xOzHQu.js} +7 -7
- package/server/{providers-CapuDkKX.js → providers-BOnRq5XK.js} +1 -1
- package/server/public/assets/{chunk-BO2N2NFS-CaAvtgHW.js → chunk-BO2N2NFS-jJsbVwoD.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-C4flU2X9.js → diagram-OG6HWLK6-Cp1aNi3v.js} +1 -1
- package/server/public/assets/{dist-DXAnG2e9.js → dist-B2-Oc7J1.js} +1 -1
- package/server/public/assets/{dist-DygIHsen.js → dist-Dbb8vdyE.js} +3 -3
- package/server/public/assets/{ganttDiagram-6RSMTGT7-BJY25etK.js → ganttDiagram-6RSMTGT7-rujV2mSn.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-DIEQLSG_.js → highlighted-body-OFNGDK62-Df3Exbbt.js} +1 -1
- package/server/public/assets/{index-BsKNi2y5.js → index-rQPa7qlV.js} +88 -88
- package/server/public/assets/{linear-CRa2o9KP.js → linear-Ctp3LAJ5.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-BnC2HrDq.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-Cb6OrK_c.js → pieDiagram-4H26LBE5-K-m6VCum.js} +1 -1
- package/server/public/assets/{prod-DWpuiL-y.js → prod-jqZ3zqVg.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-DhZzzcAO.js → quadrantDiagram-W4KKPZXB-DXcFax_1.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-CVe6lE5A.js → sankeyDiagram-5OEKKPKP-DnD_J_rB.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-zukUz5pI.js → xychartDiagram-2RQKCTM6-Dx25iKVp.js} +1 -1
- package/server/public/index.html +1 -1
- package/server/{pull-requests-C3csHJsc.js → pull-requests-CH4iBFLl.js} +3 -3
- package/server/{pull-requests-MeAgb3Ax.js → pull-requests-DL_4klIb.js} +1 -1
- package/server/{rally-nalS21zz.js → rally-D0mKv2t8.js} +3 -3
- package/server/rally-DffLLIdl.js +3 -0
- package/server/{rally-api-DzQryQi8.js → rally-api-CcCdecF-.js} +1 -1
- package/server/{rally-api-DdY4ebu3.js → rally-api-DgAt6FbN.js} +2 -2
- package/server/{rally-client-9duSds1_.js → rally-client-DYjtgTOu.js} +4 -4
- package/server/{rally-client-B16-bZk9.js → rally-client-X0bEEN2B.js} +1 -1
- package/server/reap-terminal-sessions-BwJb2DLJ.js +3 -0
- package/server/{reap-terminal-sessions-C6rD1pDT.js → reap-terminal-sessions-CAmURC2h.js} +12 -62
- package/server/{rebuild-stack-D9qBmVcM.js → rebuild-stack-BLG3rlWa.js} +6 -6
- package/server/{rebuild-stack-DrWMHxoY.js → rebuild-stack-ByFCMqTK.js} +1 -1
- package/server/{reconstruct-cache--H2QBooC.js → reconstruct-cache-_tDZ2D72.js} +6 -6
- package/server/{record-fn7uPjsl.js → record-DjPikotp.js} +1 -1
- package/server/{remote-BEkHf2HO.js → remote-B1Trmr0N.js} +3 -3
- package/server/{remote-Dl6Hn0zz.js → remote-TN0cV8k-.js} +3 -3
- package/server/{remote-agents-DNdP4sew.js → remote-agents-CmbIKw7E.js} +5 -5
- package/server/{remote-agents-OB4zwVHz.js → remote-agents-DNuaAgU6.js} +1 -1
- package/server/{remote-completion-BINc1Y8c.js → remote-completion-Bklh6loJ.js} +12 -12
- package/server/resume-DnIsmIgC.js +3 -0
- package/server/review-agent-DgySDb-G.js +3 -0
- package/server/{review-agent-C-A6IgXc.js → review-agent-phzqNqIs.js} +599 -197
- package/server/{review-artifacts-DTTdAYsU.js → review-artifacts-BGc69epg.js} +7 -7
- package/server/{review-context-De14xPtc.js → review-context-CCq56O_Y.js} +7 -7
- package/server/{review-monitor-BNV3kjLq.js → review-monitor-BKG2ubt5.js} +2 -2
- package/server/{review-status-DWAsTqfJ.js → review-status-BQjqQXZG.js} +160 -52
- package/server/{review-status-mo3tyc8L.js → review-status-bBkqUj5i.js} +1 -1
- package/server/{review-status-enrichment-C6sr9wOI.js → review-status-enrichment-CGlcApSn.js} +3 -3
- package/server/{review-status-sync-D-p7TQit.js → review-status-sync-BWHnrq-k.js} +3 -3
- package/server/{review-status-sync-MvYGQLDD.js → review-status-sync-BxHBVH8s.js} +1 -1
- package/server/{review-verdict-feedback-BbIfN5Vg.js → review-verdict-feedback-cZh9Wi9G.js} +1 -1
- package/server/{review-verdict-feedback-Cfc-THvz.js → review-verdict-feedback-wqnikhMK.js} +16 -36
- package/server/{rollup-DgWlrSBc.js → rollup-BJE-Vc7H.js} +8 -8
- package/server/{rollup-CxR6GMTe.js → rollup-DBNy1yFB.js} +1 -1
- package/server/{scanner-6OmIn5XE.js → scanner-CUGpdp4i.js} +7 -7
- package/server/{sequence-io-CxiPMMKM.js → sequence-io-B2GmilSI.js} +4 -4
- package/server/{sequencer-agent--xPlSfR2.js → sequencer-agent-D8pW2aU_.js} +5 -5
- package/server/server.js +166 -162
- package/server/{service-CXje28KS.js → service-CILd-uOt.js} +46 -45
- package/server/session-fork-DDSDVoIK.js +99 -0
- package/server/{settings-ChvoXExM.js → settings-CBrei_kx.js} +2 -2
- package/server/{settings-DZq_bi-B.js → settings-D2wt4nku.js} +3 -3
- package/server/settings-vLoKyghx.js +2 -0
- package/server/{shadow-engineering-BHeyD5bL.js → shadow-engineering-Ba1D0QUN.js} +2 -2
- package/server/{shadow-state-p3YTxrJ5.js → shadow-state-BOaq8BrD.js} +1 -1
- package/server/{shadow-state-3L0eHQNE.js → shadow-state-DTC7AMHc.js} +2 -2
- package/server/{ship-log-B2EEH__n.js → ship-log-CMWH3H5-.js} +1 -1
- package/server/{smart-compaction-DRXK5_io.js → smart-compaction-Bgp_gwcA.js} +1 -1
- package/server/{smart-compaction-DMB4hv07.js → smart-compaction-CrP90OFE.js} +7 -7
- package/server/{spawn-planning-session-BZfVvIi3.js → spawn-planning-session-BmJWHSCu.js} +15 -15
- package/server/{spawn-planning-session-BBUzeHJQ.js → spawn-planning-session-D15KbPOy.js} +1 -1
- package/server/{specialist-completion-BAZHHbmp.js → specialist-completion-BiEXUHfD.js} +1 -1
- package/server/{specialist-context-DgdhI7rm.js → specialist-context-CwKkcXL9.js} +5 -5
- package/server/{specialist-handoff-logger-CH1nC8fq.js → specialist-handoff-logger-B_2VsWli.js} +2 -2
- package/server/{specialist-logs-DynFhFXg.js → specialist-logs-CvDxquV_.js} +3 -3
- package/server/{specialists-LJ9MZMCz.js → specialists-BCjcG4uE.js} +1 -1
- package/server/{specialists-BUKBHtmQ.js → specialists-BYi0k8CZ.js} +18 -18
- package/server/{specialists-e0Jmecc1.js → specialists-D07ybnam.js} +78 -85
- package/server/{specialists-CF02f9p2.js → specialists-F2uMO4QS.js} +1 -1
- package/server/specs-DeS98l_p.js +3 -0
- package/server/{src-CNLON0co.js → src-BswtmojL.js} +6 -6
- package/server/{src-DhJeCV1p.js → src-Dp0WHgDZ.js} +3 -3
- package/server/{src-AXK4mjue.js → src-fgbU-jJ-.js} +6 -3
- package/server/{stack-health-8jZH0Lgk.js → stack-health-BJVh1TCg.js} +3 -3
- package/server/{stack-health-CXYHwv5D.js → stack-health-Deel1mSW.js} +1 -1
- package/server/{state-home-XkLSsJCD.js → state-home-Bgj7i-C7.js} +8 -7
- package/server/{summary-fork-shfA2XOf.js → summary-fork-DedqguZb.js} +2 -2
- package/server/{summary-fork-BWa0ECGL.js → summary-fork-EjvOkEPl.js} +12 -91
- package/server/{supervisor-owMkHcx8.js → supervisor-0oXvLwyC.js} +3 -3
- package/server/supervisor-D1-XwmZ7.js +2 -0
- package/server/{swarm-readiness-BACUsKOx.js → swarm-readiness-OBgamRql.js} +3 -3
- package/server/{teardown-workspace-CYt_PBaq.js → teardown-workspace-5LCVbjfq.js} +14 -14
- package/server/{test-agent-queue-C1s6mB8C.js → test-agent-queue-qfsq6uaC.js} +6 -6
- package/server/{test-verdict-CmxX3KEf.js → test-verdict-BkubHtti.js} +1 -1
- package/server/{test-verdict-njEv9ZY2.js → test-verdict-D3Il7cBK.js} +1 -1
- package/server/{tldr-daemon-CEUflKr2.js → tldr-daemon-CJW_P4On.js} +2 -2
- package/server/{tldr-daemon-HIo0dwDB.js → tldr-daemon-CJqGsDFh.js} +1 -1
- package/server/tmux-CeDD14p1.js +3 -0
- package/server/{tmux-CBYZ5lKF.js → tmux-ePNhMIMU.js} +2 -2
- package/server/{token-CiS3w6Ma.js → token-_qujO3JZ.js} +1 -1
- package/server/{tracker-config-CVCoeaaL.js → tracker-config-C3hiPVAM.js} +2 -2
- package/server/{tracker-config-Bx50plWp.js → tracker-config-Drt_tx4D.js} +1 -1
- package/server/{tracker-utils-C2Lg4RoB.js → tracker-utils-D6B8scEw.js} +1 -1
- package/server/{tracker-utils-mI4d-vh8.js → tracker-utils-bpWs7Xyx.js} +2 -2
- package/server/{traefik-connect-D21-YEyX.js → traefik-connect-5EP1WS_Z.js} +1 -1
- package/server/{tunnel-BK4PVyb0.js → tunnel-3Ve8BS4H.js} +3 -3
- package/server/{tunnel-CcHkuRIS.js → tunnel-AporWhoi.js} +1 -1
- package/server/{types-DoPMvws2.js → types-B5u3NxMl.js} +1 -1
- package/server/{uat-train-BLFPxqLx.js → uat-train-C3hWXtip.js} +1 -1
- package/server/{uat-train-CQ_E-2ei.js → uat-train-CtNGgXxj.js} +27 -27
- package/server/{validation-Dab3bnSN.js → validation-BmUB-26g.js} +4 -4
- package/server/{validation-1QnjDMc0.js → validation-CbqP_dze.js} +1 -1
- package/server/{verification-runner-BO8TgZWA.js → verification-runner-BPAhPWR7.js} +11 -11
- package/server/{verification-runner-UhAAqOio.js → verification-runner-DuZRHjPU.js} +1 -1
- package/server/{vtt-parser-D-q5-8il.js → vtt-parser-CKc-smWM.js} +1 -1
- package/server/{work-agent-prompt-D_7T1xw5.js → work-agent-prompt-DCdHsm-V.js} +11 -11
- package/server/workflows-Cz8OtiB4.js +2 -0
- package/server/{workflows-CB5SWd0B.js → workflows-H-COJ84X.js} +14 -14
- package/server/{workspace-C4Avf_Tp.js → workspace-4ZufqeMe.js} +3 -3
- package/server/{workspace--XWYPbn1.js → workspace-DYv9kBg6.js} +1 -1
- package/server/{workspace-config-BwJB-bLH.js → workspace-config-DA8U97k9.js} +1 -1
- package/server/{workspace-manager-_6zbrhNF.js → workspace-manager-B3PqQQSM.js} +1 -1
- package/server/{workspace-manager-BE3OznLY.js → workspace-manager-CEWK-OXd.js} +12 -12
- package/server/{workspace-metadata-BCgODi1j.js → workspace-metadata-1eu1RvAT.js} +2 -2
- package/server/{workspace-metadata-wKPgY8PN.js → workspace-metadata-C0I-nIDL.js} +1 -1
- package/server/{workspaces-DpMiZ9BP.js → workspaces-CRU9_vRn.js} +154 -106
- package/server/agent-state-DTZCqWx5.js +0 -3
- package/server/cli-wyiCmp7b.js +0 -3
- package/server/deacon-swarm-jDiQ0kKk.js +0 -2
- package/server/dist-CnkaBMG-.js +0 -3
- package/server/forge-D2QLGWK9.js +0 -2
- package/server/hume-sCsuupWb.js +0 -3
- package/server/inspect-agent-DnspoIls.js +0 -2
- package/server/merge-ops-B6xc_Irj.js +0 -2
- package/server/public/assets/mermaid-GHXKKRXX-uIkd-n0c.js +0 -1
- package/server/rally-BJiyvz3w.js +0 -3
- package/server/reap-terminal-sessions-mW7SPDtP.js +0 -2
- package/server/resume-Pur3Z2e8.js +0 -3
- package/server/review-agent-BRSSFv7e.js +0 -3
- package/server/settings-D0XXIUQ0.js +0 -2
- package/server/specs-COn3zZ2Q.js +0 -3
- package/server/supervisor-DwGIhpXk.js +0 -2
- package/server/tmux-DNmHGMEv.js +0 -3
- package/server/workflows-Plo_VxeO.js +0 -2
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { C as resolveTieredExecutionEnabled, Ln as listProjectsSync, Mt as readIssueRecordForWorkspaceSync, Nn as init_projects, Ot as init_record, Rt as writeIssueRecordForWorkspaceSync, S as init_tier_table, Tt as getIssueRecordPathForWorkspace, f as loadConfigSync, ln as init_state_plane, t as init_config_yaml, un as isStatePlaneOnlyStatus } from "./config-yaml-
|
|
2
|
-
import { C as isPaneDead, E as listPaneValues, L as sessionExists, O as listSessionNames, i as capturePane, x as init_tmux } from "./tmux-
|
|
3
|
-
import { c as init_review_status, s as getReviewStatusSync, y as setReviewStatusSync } from "./review-status-
|
|
4
|
-
import { A as init_messaging, Fn as init_agent_state, Ft as init_spawn_prep, G as init_termination, H as init_spawn, Ht as resolveTier, K as stopAgent, Pn as getAgentStateSync, Pt as defaultRunWorkspace, Vt as init_resolve_tier, W as spawnRun, _ as init_slot_reconcile, _r as getAgentRuntimeSnapshot, _t as init_config, at as init_concurrency, c as init_tier_supervisor, d as spawnTierSupervisor, f as supervisorAgentId, ft as getCachedMemoryVerdict, it as getConcurrencyLimits, j as messageAgent, jn as getAgentResumeGateBlockReason, kn as decideResumeGate, l as loadPrdDraft, m as init_tier_feed, p as broadcastCommit, pt as init_memory_verdict_cache, s as deliverCommitForReview, st as releaseSwarmSlot, tt as countRunningSwarmSlotsForIssue, u as shouldSupervise, ut as tryReserveSwarmSlot, v as listSlotAssignments, vr as init_agent_runtime, y as reconcileSlotState, yt as loadCloisterConfigSync } from "./agents-
|
|
5
|
-
import { C as findSpecByIssue, T as init_specs, n as applyStatusOverrides, o as init_io } from "./io-
|
|
6
|
-
import { s as init_control_settings, u as isDeaconGloballyPausedSync } from "./control-settings-
|
|
7
|
-
import { a as createActiveSlice, n as applyTaskOperationToPlanFile, r as blockingParentCount, s as getDispatchableItems, u as init_dag } from "./dag-
|
|
8
|
-
import { r as init_swarm_readiness, t as analyzeSwarmReadiness } from "./swarm-readiness-
|
|
1
|
+
import { C as resolveTieredExecutionEnabled, Ln as listProjectsSync, Mt as readIssueRecordForWorkspaceSync, Nn as init_projects, Ot as init_record, Rt as writeIssueRecordForWorkspaceSync, S as init_tier_table, Tt as getIssueRecordPathForWorkspace, f as loadConfigSync, ln as init_state_plane, t as init_config_yaml, un as isStatePlaneOnlyStatus } from "./config-yaml-DPAieL_G.js";
|
|
2
|
+
import { C as isPaneDead, E as listPaneValues, L as sessionExists, O as listSessionNames, i as capturePane, x as init_tmux } from "./tmux-ePNhMIMU.js";
|
|
3
|
+
import { c as init_review_status, s as getReviewStatusSync, y as setReviewStatusSync } from "./review-status-BQjqQXZG.js";
|
|
4
|
+
import { A as init_messaging, Fn as init_agent_state, Ft as init_spawn_prep, G as init_termination, H as init_spawn, Ht as resolveTier, K as stopAgent, Pn as getAgentStateSync, Pt as defaultRunWorkspace, Vt as init_resolve_tier, W as spawnRun, _ as init_slot_reconcile, _r as getAgentRuntimeSnapshot, _t as init_config, at as init_concurrency, c as init_tier_supervisor, d as spawnTierSupervisor, f as supervisorAgentId, ft as getCachedMemoryVerdict, it as getConcurrencyLimits, j as messageAgent, jn as getAgentResumeGateBlockReason, kn as decideResumeGate, l as loadPrdDraft, m as init_tier_feed, p as broadcastCommit, pt as init_memory_verdict_cache, s as deliverCommitForReview, st as releaseSwarmSlot, tt as countRunningSwarmSlotsForIssue, u as shouldSupervise, ut as tryReserveSwarmSlot, v as listSlotAssignments, vr as init_agent_runtime, y as reconcileSlotState, yt as loadCloisterConfigSync } from "./agents-DHvsjsuP.js";
|
|
5
|
+
import { C as findSpecByIssue, T as init_specs, n as applyStatusOverrides, o as init_io } from "./io-Wy8YpFeP.js";
|
|
6
|
+
import { s as init_control_settings, u as isDeaconGloballyPausedSync } from "./control-settings-BMqUkXmR.js";
|
|
7
|
+
import { a as createActiveSlice, n as applyTaskOperationToPlanFile, r as blockingParentCount, s as getDispatchableItems, u as init_dag } from "./dag-jH8ZkewR.js";
|
|
8
|
+
import { r as init_swarm_readiness, t as analyzeSwarmReadiness } from "./swarm-readiness-OBgamRql.js";
|
|
9
9
|
import { Effect } from "effect";
|
|
10
10
|
import { existsSync, readdirSync } from "fs";
|
|
11
11
|
import { join } from "path";
|
|
@@ -303,7 +303,7 @@ async function defaultRequestIssueReview(issueId, workspacePath) {
|
|
|
303
303
|
autoRequeueCount: 0,
|
|
304
304
|
reviewRequestedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
305
305
|
});
|
|
306
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
306
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
|
|
307
307
|
return Effect.runPromise(spawnReviewRoleForIssue({
|
|
308
308
|
issueId,
|
|
309
309
|
workspace: workspacePath,
|
|
@@ -645,10 +645,14 @@ async function archiveFailedSwarmSlot(issueId, workspacePath, slot, deps, now =
|
|
|
645
645
|
deps.clearSlotAssignment(workspacePath, normalized, slot.slotIndex, slot.itemId);
|
|
646
646
|
return attempt;
|
|
647
647
|
}
|
|
648
|
-
async function requeueFailedSwarmSlots(issueId, workspacePath, classified, doc, reconciled, deps) {
|
|
648
|
+
async function requeueFailedSwarmSlots(issueId, workspacePath, classified, doc, reconciled, deps, blockedSlotIndexes = /* @__PURE__ */ new Set()) {
|
|
649
649
|
let nextDoc = doc;
|
|
650
650
|
const actions = [];
|
|
651
651
|
for (const slot of classified.filter((candidate) => candidate.lifecycle === "failed")) {
|
|
652
|
+
if (blockedSlotIndexes.has(slot.slotIndex)) {
|
|
653
|
+
actions.push(`[swarm] skipped requeue slot ${slot.slotIndex} (item ${slot.itemId}) for ${issueId}: failed-merge block — awaiting operator recovery`);
|
|
654
|
+
continue;
|
|
655
|
+
}
|
|
652
656
|
const admission = decideAutonomousRedrive(slot.agentId ? getAgentStateSync(slot.agentId) ?? {} : {}, { owesRework: true });
|
|
653
657
|
if (admission.decision === "defer") {
|
|
654
658
|
actions.push(`[swarm] deferred failed slot ${slot.slotIndex}: ${admission.reason}`);
|
|
@@ -802,10 +806,12 @@ async function coordinateSwarmSlots(opts = {}, deps = defaultDeps) {
|
|
|
802
806
|
actions.push(`[swarm] deferred ${issueId}: advance backoff active`);
|
|
803
807
|
continue;
|
|
804
808
|
}
|
|
805
|
-
const
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
+
const failedMergeBlocks = getFailedMergeBlocks(issueId, workspace.workspacePath);
|
|
810
|
+
const blockedSlotIndexes = new Set(failedMergeBlocks.map((block) => block.slotIndex));
|
|
811
|
+
const blockedItemIds = new Set(failedMergeBlocks.map((block) => block.itemId));
|
|
812
|
+
if (failedMergeBlocks.length > 0) {
|
|
813
|
+
const slots = failedMergeBlocks.map((block) => `slot ${block.slotIndex} (item ${block.itemId})`).join(", ");
|
|
814
|
+
actions.push(`[swarm] blocked slots for ${issueId}: ${slots} — other slots continue; run \`pan swarm recover ${issueId} <slot>\``);
|
|
809
815
|
}
|
|
810
816
|
try {
|
|
811
817
|
const spec = await Effect.runPromise(findSpecByIssue(workspace.projectPath, issueId));
|
|
@@ -836,14 +842,14 @@ async function coordinateSwarmSlots(opts = {}, deps = defaultDeps) {
|
|
|
836
842
|
actions.push(`[swarm] ${issueId} slot ${slot.slotIndex} ${slot.lifecycle}${slot.signal ? ` signal: ${slot.signal}` : ""}`);
|
|
837
843
|
if (slot.actions) actions.push(...slot.actions);
|
|
838
844
|
}
|
|
839
|
-
const requeue = await requeueFailedSwarmSlots(issueId, workspace.workspacePath, classified, doc, reconciled, deps);
|
|
845
|
+
const requeue = await requeueFailedSwarmSlots(issueId, workspace.workspacePath, classified, doc, reconciled, deps, blockedSlotIndexes);
|
|
840
846
|
actions.push(...requeue.actions);
|
|
841
847
|
actions.push(...recordStalledSlotRecovery(issueId, classified, workspace.workspacePath));
|
|
842
|
-
actions.push(...await mergeReadySlots(issueId, workspace.workspacePath, doc, classified, deps));
|
|
848
|
+
actions.push(...await mergeReadySlots(issueId, workspace.workspacePath, doc, classified, deps, blockedSlotIndexes));
|
|
843
849
|
actions.push(...await gcMergedSlots(issueId, workspace.workspacePath, reconciled.merged, deps));
|
|
844
850
|
actions.push(...await gcOrphanedSlots(issueId, workspace.workspacePath, reconciled, deps));
|
|
845
851
|
actions.push(...await finalizeSwarmIssueIfComplete(issueId, workspace.workspacePath, spec.document, deps));
|
|
846
|
-
if (dispatchEligible) actions.push(...await dispatchNextWave(issueId, workspace.workspacePath, requeue.doc, reconciled, analyzeSwarmReadiness(requeue.doc), deps));
|
|
852
|
+
if (dispatchEligible) actions.push(...await dispatchNextWave(issueId, workspace.workspacePath, requeue.doc, reconciled, analyzeSwarmReadiness(requeue.doc), deps, blockedSlotIndexes, blockedItemIds));
|
|
847
853
|
recordSwarmAdvanceSuccess(issueId);
|
|
848
854
|
} catch (err) {
|
|
849
855
|
recordSwarmAdvanceFailure(issueId);
|
|
@@ -975,12 +981,16 @@ function swarmStallThresholdMs() {
|
|
|
975
981
|
const parsed = Number(raw);
|
|
976
982
|
return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_SWARM_STALL_THRESHOLD_MS;
|
|
977
983
|
}
|
|
978
|
-
async function mergeReadySlots(issueId, workspacePath, doc, slots, deps = defaultDeps) {
|
|
984
|
+
async function mergeReadySlots(issueId, workspacePath, doc, slots, deps = defaultDeps, blockedSlotIndexes = /* @__PURE__ */ new Set()) {
|
|
979
985
|
const actions = [];
|
|
980
986
|
const itemsById = new Map(doc.plan.items.map((item) => [item.id, item]));
|
|
981
987
|
const planPath = join(workspacePath, ".pan", "spec.vbrief.json");
|
|
982
988
|
for (const slot of slots) {
|
|
983
989
|
if (slot.lifecycle !== "ready-to-merge") continue;
|
|
990
|
+
if (blockedSlotIndexes.has(slot.slotIndex)) {
|
|
991
|
+
actions.push(`[swarm] skipped merge slot ${slot.slotIndex} (item ${slot.itemId}) for ${issueId}: failed-merge block — awaiting \`pan swarm recover\``);
|
|
992
|
+
continue;
|
|
993
|
+
}
|
|
984
994
|
const item = itemsById.get(slot.itemId);
|
|
985
995
|
if (!item) {
|
|
986
996
|
actions.push(`[swarm] cannot merge slot ${slot.slotIndex} for ${issueId}: itemId "${slot.itemId}" not in the current plan (spec drift?) — needs operator attention`);
|
|
@@ -1047,16 +1057,42 @@ function isSwarmAdvanceCoolingDown(issueId, now = Date.now()) {
|
|
|
1047
1057
|
const record = issueAdvanceFailures.get(issueId.toUpperCase());
|
|
1048
1058
|
return record !== void 0 && record.cooldownUntil > now;
|
|
1049
1059
|
}
|
|
1050
|
-
function getFailedMergeBlock(issueId, workspacePath) {
|
|
1060
|
+
function getFailedMergeBlock(issueId, slotIndex, workspacePath) {
|
|
1051
1061
|
const normalized = issueId.toUpperCase();
|
|
1052
1062
|
if (workspacePath) {
|
|
1053
|
-
const
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1063
|
+
const swarm = readIssueRecordForWorkspaceSync(workspacePath, normalized)?.swarm;
|
|
1064
|
+
const keyed = swarm?.failedMergeBlocks?.[String(slotIndex)];
|
|
1065
|
+
if (keyed) return {
|
|
1066
|
+
...keyed,
|
|
1067
|
+
issueId: keyed.issueId.toUpperCase()
|
|
1068
|
+
};
|
|
1069
|
+
const legacy = swarm?.failedMergeBlock;
|
|
1070
|
+
if (legacy && legacy.slotIndex === slotIndex) return {
|
|
1071
|
+
...legacy,
|
|
1072
|
+
issueId: legacy.issueId.toUpperCase()
|
|
1057
1073
|
};
|
|
1058
1074
|
}
|
|
1059
|
-
return failedMergeBlocks.get(normalized);
|
|
1075
|
+
return failedMergeBlocks.get(`${normalized}:${slotIndex}`);
|
|
1076
|
+
}
|
|
1077
|
+
function getFailedMergeBlocks(issueId, workspacePath) {
|
|
1078
|
+
const normalized = issueId.toUpperCase();
|
|
1079
|
+
const bySlot = /* @__PURE__ */ new Map();
|
|
1080
|
+
if (workspacePath) {
|
|
1081
|
+
const swarm = readIssueRecordForWorkspaceSync(workspacePath, normalized)?.swarm;
|
|
1082
|
+
if (swarm?.failedMergeBlock) {
|
|
1083
|
+
const legacy = swarm.failedMergeBlock;
|
|
1084
|
+
bySlot.set(legacy.slotIndex, {
|
|
1085
|
+
...legacy,
|
|
1086
|
+
issueId: legacy.issueId.toUpperCase()
|
|
1087
|
+
});
|
|
1088
|
+
}
|
|
1089
|
+
if (swarm?.failedMergeBlocks) for (const [key, block] of Object.entries(swarm.failedMergeBlocks)) bySlot.set(Number(key), {
|
|
1090
|
+
...block,
|
|
1091
|
+
issueId: block.issueId.toUpperCase()
|
|
1092
|
+
});
|
|
1093
|
+
}
|
|
1094
|
+
for (const [key, block] of failedMergeBlocks.entries()) if (key.startsWith(`${normalized}:`) && !bySlot.has(block.slotIndex)) bySlot.set(block.slotIndex, { ...block });
|
|
1095
|
+
return [...bySlot.values()].sort((a, b) => a.slotIndex - b.slotIndex);
|
|
1060
1096
|
}
|
|
1061
1097
|
function getSwarmFinalizedAt(issueId, workspacePath) {
|
|
1062
1098
|
return workspacePath ? readIssueRecordForWorkspaceSync(workspacePath, issueId.toUpperCase())?.swarm?.finalizedAt : void 0;
|
|
@@ -1069,33 +1105,40 @@ function recordFailedMergeBlock(block, workspacePath) {
|
|
|
1069
1105
|
...block,
|
|
1070
1106
|
issueId: block.issueId.toUpperCase()
|
|
1071
1107
|
};
|
|
1072
|
-
failedMergeBlocks.set(normalizedBlock.issueId
|
|
1073
|
-
if (workspacePath) writeSwarmFailedMergeBlock(workspacePath, normalizedBlock.issueId, normalizedBlock);
|
|
1108
|
+
failedMergeBlocks.set(`${normalizedBlock.issueId}:${normalizedBlock.slotIndex}`, normalizedBlock);
|
|
1109
|
+
if (workspacePath) writeSwarmFailedMergeBlock(workspacePath, normalizedBlock.issueId, normalizedBlock.slotIndex, normalizedBlock);
|
|
1074
1110
|
}
|
|
1075
1111
|
function recordStalledSlotRecovery(issueId, slots, workspacePath) {
|
|
1076
1112
|
const actions = [];
|
|
1077
1113
|
const normalizedIssueId = issueId.toUpperCase();
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1114
|
+
for (const slot of slots.filter((s) => s.lifecycle === "stalled")) {
|
|
1115
|
+
if (getFailedMergeBlock(normalizedIssueId, slot.slotIndex, workspacePath)) continue;
|
|
1116
|
+
recordFailedMergeBlock({
|
|
1117
|
+
issueId: normalizedIssueId,
|
|
1118
|
+
itemId: slot.itemId,
|
|
1119
|
+
slotIndex: slot.slotIndex,
|
|
1120
|
+
branch: slot.branch,
|
|
1121
|
+
note: `Slot ${slot.slotIndex} stalled with no branch commit or pane output progress`
|
|
1122
|
+
}, workspacePath);
|
|
1123
|
+
actions.push(`[swarm] stalled slot ${slot.slotIndex} (item ${slot.itemId}) for ${normalizedIssueId}: recovery required`);
|
|
1124
|
+
}
|
|
1089
1125
|
return actions;
|
|
1090
1126
|
}
|
|
1091
|
-
function writeSwarmFailedMergeBlock(workspacePath, issueId, block) {
|
|
1127
|
+
function writeSwarmFailedMergeBlock(workspacePath, issueId, slotIndex, block) {
|
|
1092
1128
|
const normalizedIssueId = issueId.toUpperCase();
|
|
1093
1129
|
const record = readIssueRecordForWorkspaceSync(workspacePath, normalizedIssueId) ?? createMinimalIssueRecord(normalizedIssueId);
|
|
1130
|
+
const existingSwarm = record.swarm ?? {};
|
|
1131
|
+
const foldedBlocks = { ...existingSwarm.failedMergeBlocks ?? {} };
|
|
1132
|
+
if (existingSwarm.failedMergeBlock) foldedBlocks[String(existingSwarm.failedMergeBlock.slotIndex)] = existingSwarm.failedMergeBlock;
|
|
1133
|
+
const nextBlocks = { ...foldedBlocks };
|
|
1134
|
+
if (block) nextBlocks[String(slotIndex)] = block;
|
|
1135
|
+
else delete nextBlocks[String(slotIndex)];
|
|
1094
1136
|
writeIssueRecordForWorkspaceSync(workspacePath, normalizedIssueId, {
|
|
1095
1137
|
...record,
|
|
1096
1138
|
swarm: {
|
|
1097
|
-
...
|
|
1098
|
-
|
|
1139
|
+
...existingSwarm,
|
|
1140
|
+
failedMergeBlocks: nextBlocks,
|
|
1141
|
+
failedMergeBlock: void 0
|
|
1099
1142
|
}
|
|
1100
1143
|
});
|
|
1101
1144
|
}
|
|
@@ -1109,12 +1152,13 @@ function isSlotMergeCoolingDown(branchKey, now = Date.now()) {
|
|
|
1109
1152
|
recentSlotMergeFires.delete(branchKey);
|
|
1110
1153
|
return false;
|
|
1111
1154
|
}
|
|
1112
|
-
async function dispatchNextWave(issueId, workspacePath, doc, reconciled, readiness, deps = defaultDeps) {
|
|
1155
|
+
async function dispatchNextWave(issueId, workspacePath, doc, reconciled, readiness, deps = defaultDeps, blockedSlotIndexes = /* @__PURE__ */ new Set(), blockedItemIds = /* @__PURE__ */ new Set()) {
|
|
1113
1156
|
const actions = [];
|
|
1114
1157
|
const mergedItemIds = new Set(reconciled.merged.map((slot) => slot.itemId));
|
|
1115
1158
|
const slotEligibleIds = new Set(readiness.items.filter((item) => item.slotEligible).map((item) => item.id));
|
|
1116
1159
|
const configuredMaxSlotIndex = Math.max(1, Math.floor((deps.getMaxSlotIndex ?? defaultGetMaxSlotIndex)()));
|
|
1117
1160
|
const occupiedSlotIndexes = new Set([
|
|
1161
|
+
...blockedSlotIndexes,
|
|
1118
1162
|
...reconciled.inFlight.map((slot) => slot.slotIndex),
|
|
1119
1163
|
...reconciled.branches.map((branch) => branch.slotIndex),
|
|
1120
1164
|
...reconciled.agents.map((agent) => agent.slotIndex),
|
|
@@ -1130,6 +1174,7 @@ async function dispatchNextWave(issueId, workspacePath, doc, reconciled, readine
|
|
|
1130
1174
|
const selectedItemIds = [];
|
|
1131
1175
|
const planPath = join(workspacePath, ".pan", "spec.vbrief.json");
|
|
1132
1176
|
for (const item of getDispatchableItems(doc, mergedItemIds)) {
|
|
1177
|
+
if (blockedItemIds.has(item.id)) continue;
|
|
1133
1178
|
if (!slotEligibleIds.has(item.id)) continue;
|
|
1134
1179
|
if (inFlightItemIds.has(item.id)) continue;
|
|
1135
1180
|
const overlapItemId = firstOverlappingItemId(item.id, [...inFlightItemIds, ...selectedItemIds], readiness);
|
|
@@ -1291,6 +1336,6 @@ function registeredSlotCapacityAvailable(issueId, selectedCount, liveSlotCount =
|
|
|
1291
1336
|
return liveSlotCount + selectedCount < limits.reservedSwarmSlots;
|
|
1292
1337
|
}
|
|
1293
1338
|
//#endregion
|
|
1294
|
-
export {
|
|
1339
|
+
export { recordRecoveryFailure as _, getFailedMergeBlock as a, listFeatureWorkspaces as b, isSwarmAdvanceCoolingDown as c, recordStalledSlotRecovery as d, recordSwarmAdvanceFailure as f, decideAgentAutonomousRedrive as g, registeredSlotCapacityAvailable as h, dispatchNextWave as i, mergeReadySlots as l, recordSwarmFinalizedAt as m, classifyInFlightSlots as n, getFailedMergeBlocks as o, recordSwarmAdvanceSuccess as p, coordinateSwarmSlots as r, getSwarmFinalizedAt as s, allocateSlotIndex as t, recordFailedMergeBlock as u, gcMergedSlots as v, gcOrphanedSlots as y };
|
|
1295
1340
|
|
|
1296
|
-
//# sourceMappingURL=deacon-swarm-
|
|
1341
|
+
//# sourceMappingURL=deacon-swarm-DadWNi5J.js.map
|
package/server/deacon.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { rn as init_auto_commit, tn as flushAllPendingAutoCommits } from "./config-yaml-
|
|
2
|
-
import { a as init_activity_logger, o as setActivityEventStoreProvider } from "./activity-logger-
|
|
3
|
-
import { c as init_review_status, s as getReviewStatusSync } from "./review-status-
|
|
4
|
-
import { Mn as getAgentState, t as init_agents } from "./agents-
|
|
5
|
-
import { r as setCloisterEventStoreProvider, t as getCloisterService } from "./service-
|
|
6
|
-
import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-
|
|
7
|
-
import { F as setAgentStatusChangedNotifier, I as setAgentStoppedNotifier, L as setMergeReadyNotifier, M as resetPatrolHeartbeatForStartup, N as runPatrol } from "./deacon-
|
|
8
|
-
import { t as enrichReviewStatus } from "./review-status-enrichment-
|
|
1
|
+
import { rn as init_auto_commit, tn as flushAllPendingAutoCommits } from "./config-yaml-DPAieL_G.js";
|
|
2
|
+
import { a as init_activity_logger, o as setActivityEventStoreProvider } from "./activity-logger-pcbf-e30.js";
|
|
3
|
+
import { c as init_review_status, s as getReviewStatusSync } from "./review-status-BQjqQXZG.js";
|
|
4
|
+
import { Mn as getAgentState, t as init_agents } from "./agents-DHvsjsuP.js";
|
|
5
|
+
import { r as setCloisterEventStoreProvider, t as getCloisterService } from "./service-CILd-uOt.js";
|
|
6
|
+
import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-CQUx9YLc.js";
|
|
7
|
+
import { F as setAgentStatusChangedNotifier, I as setAgentStoppedNotifier, L as setMergeReadyNotifier, M as resetPatrolHeartbeatForStartup, N as runPatrol } from "./deacon-j3qSZ7--.js";
|
|
8
|
+
import { t as enrichReviewStatus } from "./review-status-enrichment-CGlcApSn.js";
|
|
9
9
|
import { Effect } from "effect";
|
|
10
10
|
import { randomUUID } from "node:crypto";
|
|
11
11
|
//#region ../../lib/cloister/deacon-event-client.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { vr as init_errors } from "./config-yaml-
|
|
3
|
-
import { n as init_workspace_config, r as replacePlaceholdersSync } from "./workspace-config-
|
|
2
|
+
import { vr as init_errors } from "./config-yaml-DPAieL_G.js";
|
|
3
|
+
import { n as init_workspace_config, r as replacePlaceholdersSync } from "./workspace-config-DA8U97k9.js";
|
|
4
4
|
import "effect";
|
|
5
5
|
import { chmodSync, copyFileSync, existsSync, mkdirSync, readFileSync, readdirSync, symlinkSync, writeFileSync } from "fs";
|
|
6
6
|
import { basename, dirname, join } from "path";
|
|
@@ -166,4 +166,4 @@ var init_devcontainer_renderer = __esmMin((() => {
|
|
|
166
166
|
//#endregion
|
|
167
167
|
export { renderDevcontainerSync as a, processTemplatesSync as i, createWorkspacePlaceholdersSync as n, sanitizeComposeFileSync as o, init_devcontainer_renderer as r, DEVCONTAINER_DIRNAME as t };
|
|
168
168
|
|
|
169
|
-
//# sourceMappingURL=devcontainer-renderer-
|
|
169
|
+
//# sourceMappingURL=devcontainer-renderer-DUJYYRQB.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-
|
|
2
|
+
import { r as init_devcontainer_renderer, t as DEVCONTAINER_DIRNAME } from "./devcontainer-renderer-DUJYYRQB.js";
|
|
3
3
|
import { existsSync, readFileSync } from "fs";
|
|
4
4
|
import { join } from "path";
|
|
5
5
|
import { exec } from "child_process";
|
|
@@ -156,4 +156,4 @@ var init_docker = __esmMin((() => {
|
|
|
156
156
|
//#endregion
|
|
157
157
|
export { teardownWorkspaceDockerByNamePromise as i, init_docker as n, stopWorkspaceDockerPromise as r, getContainersReferencingWorkspacePathPromise as t };
|
|
158
158
|
|
|
159
|
-
//# sourceMappingURL=docker-
|
|
159
|
+
//# sourceMappingURL=docker-Q4bphryk.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as ensureDevcontainerSync, r as init_ensure_devcontainer, t as ensureDevcontainer } from "./ensure-devcontainer-
|
|
1
|
+
import { n as ensureDevcontainerSync, r as init_ensure_devcontainer, t as ensureDevcontainer } from "./ensure-devcontainer-XLL0vtgV.js";
|
|
2
2
|
init_ensure_devcontainer();
|
|
3
3
|
export { ensureDevcontainer, ensureDevcontainerSync };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { Dn as getProjectSync, Gn as resolveProjectFromIssueSync, Nn as init_projects } from "./config-yaml-
|
|
3
|
-
import { a as renderDevcontainerSync, r as init_devcontainer_renderer } from "./devcontainer-renderer-
|
|
4
|
-
import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed } from "./types-
|
|
2
|
+
import { Dn as getProjectSync, Gn as resolveProjectFromIssueSync, Nn as init_projects } from "./config-yaml-DPAieL_G.js";
|
|
3
|
+
import { a as renderDevcontainerSync, r as init_devcontainer_renderer } from "./devcontainer-renderer-DUJYYRQB.js";
|
|
4
|
+
import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed } from "./types-B5u3NxMl.js";
|
|
5
5
|
import { Effect } from "effect";
|
|
6
6
|
import { existsSync } from "fs";
|
|
7
7
|
import { basename, join } from "path";
|
|
@@ -107,4 +107,4 @@ var init_ensure_devcontainer = __esmMin((() => {
|
|
|
107
107
|
//#endregion
|
|
108
108
|
export { ensureDevcontainerSync as n, init_ensure_devcontainer as r, ensureDevcontainer as t };
|
|
109
109
|
|
|
110
|
-
//# sourceMappingURL=ensure-devcontainer-
|
|
110
|
+
//# sourceMappingURL=ensure-devcontainer-XLL0vtgV.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as init_event_store, i as initEventStore, n as getEventStore, o as openEventDb, r as getSharedDb, t as createEventStore } from "./event-store-
|
|
1
|
+
import { a as init_event_store, i as initEventStore, n as getEventStore, o as openEventDb, r as getSharedDb, t as createEventStore } from "./event-store-DTJXZjCl.js";
|
|
2
2
|
init_event_store();
|
|
3
3
|
export { createEventStore, getEventStore, getSharedDb, initEventStore, openEventDb };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { Br as getOverdeckHome, Vr as init_paths } from "./config-yaml-
|
|
3
|
-
import { a as init_activity_logger, o as setActivityEventStoreProvider } from "./activity-logger-
|
|
4
|
-
import { A as init_paths$1, d as getOverdeckDatabaseSync, f as init_infra, k as getOverdeckDatabasePath } from "./infra-
|
|
2
|
+
import { Br as getOverdeckHome, Vr as init_paths } from "./config-yaml-DPAieL_G.js";
|
|
3
|
+
import { a as init_activity_logger, o as setActivityEventStoreProvider } from "./activity-logger-pcbf-e30.js";
|
|
4
|
+
import { A as init_paths$1, d as getOverdeckDatabaseSync, f as init_infra, k as getOverdeckDatabasePath } from "./infra-CpKlYZA9.js";
|
|
5
5
|
import { existsSync } from "node:fs";
|
|
6
6
|
import { EventEmitter } from "node:events";
|
|
7
7
|
import { mkdir } from "node:fs/promises";
|
|
@@ -236,4 +236,4 @@ var init_event_store = __esmMin((() => {
|
|
|
236
236
|
//#endregion
|
|
237
237
|
export { init_event_store as a, initEventStore as i, getEventStore as n, openEventDb as o, getSharedDb as r, createEventStore as t };
|
|
238
238
|
|
|
239
|
-
//# sourceMappingURL=event-store-
|
|
239
|
+
//# sourceMappingURL=event-store-DTJXZjCl.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { $n as extractPrefixSync, Ln as listProjectsSync, Nn as init_projects, er as init_issue_id, vr as init_errors } from "./config-yaml-
|
|
3
|
-
import { d as init_cost_sync, f as insertCostEventSync } from "./cost-sync-
|
|
2
|
+
import { $n as extractPrefixSync, Ln as listProjectsSync, Nn as init_projects, er as init_issue_id, vr as init_errors } from "./config-yaml-DPAieL_G.js";
|
|
3
|
+
import { d as init_cost_sync, f as insertCostEventSync } from "./cost-sync-8lkDeL9g.js";
|
|
4
4
|
import "effect";
|
|
5
5
|
import { appendFileSync, existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "fs";
|
|
6
6
|
import { join } from "path";
|
|
@@ -243,6 +243,6 @@ var init_events = __esmMin((() => {
|
|
|
243
243
|
init_errors();
|
|
244
244
|
}));
|
|
245
245
|
//#endregion
|
|
246
|
-
export { readEventsFromLineSync as a,
|
|
246
|
+
export { readEventsFromLineSync as a, tailEventsSync as c, init_events as i, init_wal as l, deduplicateEventsSync as n, readEventsSync as o, getLastEventMetadataSync as r, replaceEventsFileSync as s, appendCostEventSync as t };
|
|
247
247
|
|
|
248
|
-
//# sourceMappingURL=events-
|
|
248
|
+
//# sourceMappingURL=events-DGWZzye2.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { f as loadConfigSync, fr as LinearApiError, t as init_config_yaml, ur as GitHubApiError, vr as init_errors } from "./config-yaml-
|
|
2
|
+
import { f as loadConfigSync, fr as LinearApiError, t as init_config_yaml, ur as GitHubApiError, vr as init_errors } from "./config-yaml-DPAieL_G.js";
|
|
3
3
|
import { n as init_dist_src, t as Octokit } from "./dist-src-Byxt1ifL.js";
|
|
4
|
-
import { a as TrackerAuthError, i as NotImplementedError, o as init_interface, r as IssueNotFoundError } from "./rally-api-
|
|
5
|
-
import { n as init_rally, t as RallyTracker } from "./rally-
|
|
4
|
+
import { a as TrackerAuthError, i as NotImplementedError, o as init_interface, r as IssueNotFoundError } from "./rally-api-DgAt6FbN.js";
|
|
5
|
+
import { n as init_rally, t as RallyTracker } from "./rally-D0mKv2t8.js";
|
|
6
6
|
import { Effect } from "effect";
|
|
7
7
|
import { LinearClient } from "@linear/sdk";
|
|
8
8
|
//#region ../../lib/tracker/linear.ts
|
|
@@ -679,4 +679,4 @@ var init_factory = __esmMin((() => {
|
|
|
679
679
|
//#endregion
|
|
680
680
|
export { createTrackerFromConfig as n, init_factory as r, createTracker as t };
|
|
681
681
|
|
|
682
|
-
//# sourceMappingURL=factory-
|
|
682
|
+
//# sourceMappingURL=factory-rG4T40su.js.map
|
package/server/{feature-registry-population-C6eVdq4J.js → feature-registry-population-Dwyj9gEM.js}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { t as init_config_yaml } from "./config-yaml-
|
|
3
|
-
import { r as updateFeatureRegistryOwnership, t as init_feature_registry_storage } from "./feature-registry-storage-
|
|
4
|
-
import { t as init_providers } from "./providers-
|
|
2
|
+
import { t as init_config_yaml } from "./config-yaml-DPAieL_G.js";
|
|
3
|
+
import { r as updateFeatureRegistryOwnership, t as init_feature_registry_storage } from "./feature-registry-storage-CnGyNgAq.js";
|
|
4
|
+
import { t as init_providers } from "./providers-4-xOzHQu.js";
|
|
5
5
|
import { Schema } from "effect";
|
|
6
6
|
import { basename } from "node:path";
|
|
7
7
|
//#region ../../lib/registry/feature-registry-population.ts
|
|
@@ -40,4 +40,4 @@ var init_feature_registry_population = __esmMin((() => {
|
|
|
40
40
|
//#endregion
|
|
41
41
|
export { recordFeatureRegistryLifecycle as n, init_feature_registry_population as t };
|
|
42
42
|
|
|
43
|
-
//# sourceMappingURL=feature-registry-population-
|
|
43
|
+
//# sourceMappingURL=feature-registry-population-Dwyj9gEM.js.map
|
package/server/{feature-registry-storage-ByBosRId.js → feature-registry-storage-CnGyNgAq.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { Br as getOverdeckHome, Vr as init_paths } from "./config-yaml-
|
|
2
|
+
import { Br as getOverdeckHome, Vr as init_paths } from "./config-yaml-DPAieL_G.js";
|
|
3
3
|
import { n as openDatabase, t as init_driver } from "./driver-D-HBOQa_.js";
|
|
4
4
|
import { mkdirSync } from "node:fs";
|
|
5
5
|
import { dirname, join } from "node:path";
|
|
@@ -263,4 +263,4 @@ var init_feature_registry_storage = __esmMin((() => {
|
|
|
263
263
|
//#endregion
|
|
264
264
|
export { listFeatureRegistryEntries as n, updateFeatureRegistryOwnership as r, init_feature_registry_storage as t };
|
|
265
265
|
|
|
266
|
-
//# sourceMappingURL=feature-registry-storage-
|
|
266
|
+
//# sourceMappingURL=feature-registry-storage-CnGyNgAq.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { f as loadConfigSync, t as init_config_yaml } from "./config-yaml-
|
|
2
|
+
import { f as loadConfigSync, t as init_config_yaml } from "./config-yaml-DPAieL_G.js";
|
|
3
3
|
//#region ../../lib/background-ai/features.ts
|
|
4
4
|
/**
|
|
5
5
|
* The single gate every background AI caller must consult before invoking a
|
|
@@ -18,4 +18,4 @@ var init_features = __esmMin((() => {
|
|
|
18
18
|
//#endregion
|
|
19
19
|
export { isBackgroundFeatureEnabled as n, init_features as t };
|
|
20
20
|
|
|
21
|
-
//# sourceMappingURL=features-
|
|
21
|
+
//# sourceMappingURL=features-CYY2_Eeh.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-
|
|
1
|
+
import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-oE4-Esxl.js";
|
|
2
2
|
init_feedback_target();
|
|
3
3
|
export { resolveIssueFeedbackTarget, surfaceIssueFeedbackNeedsYou };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { Dn as getProjectSync, Gn as resolveProjectFromIssueSync, Nn as init_projects, Nt as readIssueRecordSync, Ot as init_record, zt as writeIssueRecordSync } from "./config-yaml-
|
|
3
|
-
import { L as sessionExists, O as listSessionNames, x as init_tmux } from "./tmux-
|
|
2
|
+
import { Dn as getProjectSync, Gn as resolveProjectFromIssueSync, Nn as init_projects, Nt as readIssueRecordSync, Ot as init_record, zt as writeIssueRecordSync } from "./config-yaml-DPAieL_G.js";
|
|
3
|
+
import { L as sessionExists, O as listSessionNames, x as init_tmux } from "./tmux-ePNhMIMU.js";
|
|
4
4
|
import { Effect } from "effect";
|
|
5
5
|
//#region ../../lib/cloister/feedback-target.ts
|
|
6
6
|
async function isLiveSession(agentId) {
|
|
@@ -73,40 +73,71 @@ async function resolveIssueFeedbackTarget(issueId, opts = {}) {
|
|
|
73
73
|
return { agentId: fallback.agentId };
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
-
|
|
76
|
+
const revive = opts.revivePipelinePausedAgent ?? resurrectAgentForFeedback;
|
|
77
|
+
const candidates = [wholeIssueAgentId];
|
|
78
|
+
if (requestedItemId) {
|
|
79
|
+
const assigned = assignments.find((a) => a.itemId === requestedItemId);
|
|
80
|
+
if (assigned) candidates.push(slotAgentId(normalizedIssue, assigned.slotIndex, assigned.agentId));
|
|
81
|
+
}
|
|
82
|
+
for (const assignment of assignments) candidates.push(slotAgentId(normalizedIssue, assignment.slotIndex, assignment.agentId));
|
|
83
|
+
const attempted = /* @__PURE__ */ new Set();
|
|
84
|
+
for (const candidate of candidates) {
|
|
85
|
+
if (attempted.has(candidate)) continue;
|
|
86
|
+
attempted.add(candidate);
|
|
87
|
+
if (await revive(candidate, normalizedIssue)) return { agentId: candidate };
|
|
88
|
+
}
|
|
77
89
|
return {
|
|
78
90
|
needsYou: true,
|
|
79
|
-
reason: `No live feedback target for ${normalizedIssue}${requestedItemId ? ` for item ${requestedItemId}` : ""}: ${wholeIssueAgentId} is not running
|
|
91
|
+
reason: `No live feedback target for ${normalizedIssue}${requestedItemId ? ` for item ${requestedItemId}` : ""}: ${wholeIssueAgentId} is not running, no assigned swarm slot has a live tmux session, and resurrection of ${attempted.size} candidate agent(s) failed.`
|
|
80
92
|
};
|
|
81
93
|
}
|
|
82
94
|
/**
|
|
83
|
-
* PAN-2461:
|
|
84
|
-
*
|
|
85
|
-
*
|
|
95
|
+
* PAN-2209 + PAN-2461: bring a non-running agent back to life so feedback can be
|
|
96
|
+
* delivered to it. Returns true when the agent is live again. Gate handling:
|
|
97
|
+
*
|
|
98
|
+
* - Pipeline pauses (`needs-you:*`, `[governor-slot]*`, scheduler yields) → unpause +
|
|
99
|
+
* resume. A gate the pipeline set must never deadlock the pipeline's own delivery
|
|
100
|
+
* (PAN-2461); the operator explicitly prefers briefly exceeding memory targets over
|
|
101
|
+
* undelivered work↔review feedback.
|
|
102
|
+
* - Troubled / failure-backoff → clear the gate loudly and attempt ONE resume. The
|
|
103
|
+
* failure-tracking machinery re-trips the gate if the agent crashes again, so this
|
|
104
|
+
* cannot loop unboundedly.
|
|
105
|
+
* - Plain stopped/completed/crashed → resume.
|
|
106
|
+
* - OPERATOR pauses (pan pause, any non-pipeline pausedReason) are never overridden.
|
|
86
107
|
*/
|
|
87
|
-
async function
|
|
108
|
+
async function resurrectAgentForFeedback(agentId, issueId) {
|
|
88
109
|
try {
|
|
89
|
-
const { getAgentStateSync, clearAgentPausedSync } = await import("./agent-state-
|
|
110
|
+
const { getAgentStateSync, clearAgentPausedSync, clearAgentTroubledSync } = await import("./agent-state-xk_G8t90.js");
|
|
90
111
|
const state = getAgentStateSync(agentId);
|
|
91
112
|
if (!state) return false;
|
|
92
|
-
if (state.paused
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
113
|
+
if (state.paused === true) {
|
|
114
|
+
const reason = state.pausedReason ?? "";
|
|
115
|
+
if (!(reason.startsWith("needs-you:") || reason.startsWith("[governor-slot]") || state.yieldedByScheduler === true)) {
|
|
116
|
+
console.log(`[feedback-target] ${agentId} is operator-paused (${reason || "no reason"}) — not overriding to deliver ${issueId} feedback`);
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
console.log(`[feedback-target] ${agentId} is pipeline-paused (${reason || "scheduler yield"}) — unpausing to deliver feedback for ${issueId}`);
|
|
120
|
+
clearAgentPausedSync(agentId);
|
|
121
|
+
}
|
|
122
|
+
if (state.troubled === true || (state.consecutiveFailures ?? 0) > 0) {
|
|
123
|
+
console.warn(`[feedback-target] ${agentId} is gated (troubled=${state.troubled === true}, failures=${state.consecutiveFailures ?? 0}) — clearing for one resurrection attempt to deliver ${issueId} feedback; failure tracking re-trips the gate on another crash`);
|
|
124
|
+
clearAgentTroubledSync(agentId);
|
|
125
|
+
}
|
|
126
|
+
const { resumeAgent } = await import("./resume-DnIsmIgC.js");
|
|
96
127
|
const result = await resumeAgent(agentId);
|
|
97
128
|
if (!result.success) {
|
|
98
|
-
console.warn(`[feedback-target] Failed to
|
|
129
|
+
console.warn(`[feedback-target] Failed to resurrect ${agentId} for ${issueId} feedback: ${result.error}`);
|
|
99
130
|
return false;
|
|
100
131
|
}
|
|
101
132
|
return isLiveSession(agentId);
|
|
102
133
|
} catch (err) {
|
|
103
|
-
console.warn(`[feedback-target]
|
|
134
|
+
console.warn(`[feedback-target] resurrectAgentForFeedback(${agentId}) failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
104
135
|
return false;
|
|
105
136
|
}
|
|
106
137
|
}
|
|
107
138
|
async function surfaceIssueFeedbackNeedsYou(issueId, reason, details = {}) {
|
|
108
139
|
try {
|
|
109
|
-
const { markWorkspaceStuck } = await import("./review-status-
|
|
140
|
+
const { markWorkspaceStuck } = await import("./review-status-bBkqUj5i.js");
|
|
110
141
|
markWorkspaceStuck(issueId, "feedback_delivery_needs_you", {
|
|
111
142
|
reason,
|
|
112
143
|
...details
|
|
@@ -124,4 +155,4 @@ var init_feedback_target = __esmMin((() => {
|
|
|
124
155
|
//#endregion
|
|
125
156
|
export { resolveIssueFeedbackTarget as n, surfaceIssueFeedbackNeedsYou as r, init_feedback_target as t };
|
|
126
157
|
|
|
127
|
-
//# sourceMappingURL=feedback-target-
|
|
158
|
+
//# sourceMappingURL=feedback-target-oE4-Esxl.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { Gn as resolveProjectFromIssueSync, Nn as init_projects } from "./config-yaml-
|
|
3
|
-
import { a as clearFeedback, o as readFeedback, s as writeFeedback, t as init_pan_dir, u as getWorkspacePanPaths } from "./pan-dir-
|
|
4
|
-
import { a as init_lifecycle_io, n as appendFeedbackEntryForIssue, o as readContinueStateForIssue, r as clearFeedbackForIssue, t as appendContinueSessionEntryForIssue } from "./lifecycle-io-
|
|
2
|
+
import { Gn as resolveProjectFromIssueSync, Nn as init_projects } from "./config-yaml-DPAieL_G.js";
|
|
3
|
+
import { a as clearFeedback, o as readFeedback, s as writeFeedback, t as init_pan_dir, u as getWorkspacePanPaths } from "./pan-dir-BgBeeZDX.js";
|
|
4
|
+
import { a as init_lifecycle_io, n as appendFeedbackEntryForIssue, o as readContinueStateForIssue, r as clearFeedbackForIssue, t as appendContinueSessionEntryForIssue } from "./lifecycle-io-DSrv9xGh.js";
|
|
5
5
|
import { Data, Effect } from "effect";
|
|
6
6
|
import { existsSync } from "fs";
|
|
7
7
|
import { join } from "path";
|
|
@@ -148,4 +148,4 @@ var init_feedback_writer = __esmMin((() => {
|
|
|
148
148
|
//#endregion
|
|
149
149
|
export { writeFeedbackFile as a, init_feedback_writer as i, archiveFeedbackFiles as n, clearFeedbackFiles as r, FeedbackWriteError as t };
|
|
150
150
|
|
|
151
|
-
//# sourceMappingURL=feedback-writer-
|
|
151
|
+
//# sourceMappingURL=feedback-writer-DMaO0XXa.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { a as writeFeedbackFile, i as init_feedback_writer, n as archiveFeedbackFiles, r as clearFeedbackFiles, t as FeedbackWriteError } from "./feedback-writer-
|
|
1
|
+
import { a as writeFeedbackFile, i as init_feedback_writer, n as archiveFeedbackFiles, r as clearFeedbackFiles, t as FeedbackWriteError } from "./feedback-writer-DMaO0XXa.js";
|
|
2
2
|
init_feedback_writer();
|
|
3
3
|
export { FeedbackWriteError, archiveFeedbackFiles, clearFeedbackFiles, writeFeedbackFile };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as pauseFlywheel, o as resumeFlywheel } from "./flywheel-
|
|
1
|
+
import { a as pauseFlywheel, o as resumeFlywheel } from "./flywheel-ClMjGW_u.js";
|
|
2
2
|
export { pauseFlywheel, resumeFlywheel };
|