@overdeck/desktop 0.47.0 → 0.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/drizzle/overdeck/0000_overdeck_init.sql +59 -0
- package/package.json +1 -1
- package/server/{acceptance-criteria-10Ur5Dne.js → acceptance-criteria-DmtLDbtt.js} +2 -2
- package/server/{activity-logger-CyteR4JO.js → activity-logger-Co5qljIj.js} +55 -4
- package/server/activity-logger-K7FYGF_z.js +3 -0
- package/server/{advancing-selfheal-BNwqxseD.js → advancing-selfheal-8AR68Asf.js} +6 -6
- package/server/{agent-gc-C3h9Or3a.js → agent-gc-BmYeT6eH.js} +5 -5
- package/server/agent-state-Dq3s84-P.js +3 -0
- package/server/{agent-state-service-C63p_ftq.js → agent-state-service-DK1Vay1E.js} +1 -1
- package/server/{agent-state-service-Ds6OeFvo.js → agent-state-service-rjnzpHDx.js} +6 -6
- package/server/agent-state-source-Ds968-j6.js +21 -0
- package/server/{agents-J5mEnekq.js → agents-Dls7tfJH.js} +5 -5
- package/server/agents-IPSa5kzn.js +3 -0
- package/server/{archive-planning-BwhxeP7C.js → archive-planning-Cq7cyinS.js} +51 -24
- package/server/archive-planning-MbkGCBIY.js +2 -0
- package/server/{artifact-index-jobs-D1q_vR3V.js → artifact-index-jobs-Dj_8kpTd.js} +3 -3
- package/server/{assemble-Bgwqv-Ro.js → assemble-BTCmbcfH.js} +20 -13
- package/server/{auto-spawn-consent-CQ9Bi9q6.js → auto-spawn-consent-lXqRJ1Dr.js} +304 -121
- package/server/{backlog-auto-trigger-n1lzPgN4.js → backlog-auto-trigger-Dn-amzt6.js} +3 -3
- package/server/{behavior-td6-xhQk.js → behavior-DIMQMRzs.js} +2 -2
- package/server/{boot-reconciled-stop-events-C7gGe3oB.js → boot-reconciled-stop-events-D6SeUTIr.js} +1 -1
- package/server/{bridge-pool-patrol-CYH2OLb5.js → bridge-pool-patrol-BEjt-xF3.js} +2 -2
- package/server/{briefing-freshness-DRqZ8lAz.js → briefing-freshness-3PNmL_p3.js} +2 -2
- package/server/{build-info-7yiEpl6u.js → build-info-CJg813Hm.js} +3 -3
- package/server/{build-info-CpG__c63.js → build-info-CXyeFsXu.js} +1 -1
- package/server/{checkpoint-manager-CkKmB0wZ.js → checkpoint-manager-9t7G5c1V.js} +1 -1
- package/server/{checkpoint-manager-DBcyNR8w.js → checkpoint-manager-B2G38R3p.js} +3 -3
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-Wm963lm8.js → checkpoints-CuBgiXO-.js} +1 -1
- package/server/{checkpoints-D95apurL.js → checkpoints-VTZMd4Qm.js} +2 -2
- package/server/{claude-hooks-provision-Bjitl9aI.js → claude-hooks-provision-55SyQaPz.js} +2 -2
- package/server/{claude-hooks-provision-4RPxNkE8.js → claude-hooks-provision-CEUT-CZd.js} +1 -1
- package/server/{claude-permissions-CpbpvUQ2.js → claude-permissions-Cn0dIu2i.js} +2 -2
- package/server/{claude-settings-overlay-BzkHYDwR.js → claude-settings-overlay-B19hdzSA.js} +1 -1
- package/server/{claude-settings-overlay-_H9Yrzab.js → claude-settings-overlay-Yg_ANh81.js} +2 -2
- package/server/{cli-Cte9ZFGn.js → cli-C9S84iTy.js} +79 -22
- package/server/cli-M1cwZ__d.js +3 -0
- package/server/{cliproxy-C5fMJ7rY.js → cliproxy-CJq3KXU6.js} +2 -2
- package/server/{cliproxy-DaAbWMjC.js → cliproxy-DgEZlr7Y.js} +1 -1
- package/server/{close-issue-BPh1ARCF.js → close-issue-DPxRddGR.js} +5 -5
- package/server/{closed-issue-reaper-DoOZqGFK.js → closed-issue-reaper-C5Zn4GRS.js} +13 -13
- package/server/{closed-issue-reaper-DHRfRMrp.js → closed-issue-reaper-D-2B48Ri.js} +1 -1
- package/server/{codex-o8FJwzmy.js → codex-B3n_rkwn.js} +1 -1
- package/server/{codex-BzGDW_d3.js → codex-CjkD1PJu.js} +6 -6
- package/server/{codex-parser-Dt-ycU8L.js → codex-parser-DpB1Il-P.js} +2 -2
- package/server/{compaction-continuation-CvXpbZ4w.js → compaction-continuation-DZD9ukSE.js} +3 -3
- package/server/{config-CL3Gyvja.js → config-C5saf4Ja.js} +1 -1
- package/server/{config-BvLe652W.js → config-DnLJATZk.js} +2 -2
- package/server/{config-Bi3u1VK7.js → config-DvM8jtQK.js} +2 -2
- package/server/{config-yaml-CxdwhAIA.js → config-yaml-BSCqwmX0.js} +11299 -10972
- package/server/{conflict-gate-CX80JYYS.js → conflict-gate-DXa_L28t.js} +1 -1
- package/server/{conflict-gate-E4nt7ZeS.js → conflict-gate-WfVqgalf.js} +4 -4
- package/server/{context-layers-DAG83UZt.js → context-layers-D7UqH9Ab.js} +2 -2
- package/server/{context-layers-C_IIysnm.js → context-layers-Dpz3Vd6d.js} +3 -3
- package/server/{control-settings-CiqGxXnc.js → control-settings-DVf6pKyv.js} +4 -4
- package/server/{conversation-compaction-BE3CNtHF.js → conversation-compaction-5XuH6OBn.js} +1 -1
- package/server/{conversation-compaction-D6-yLtqt.js → conversation-compaction-COrbnX1J.js} +8 -8
- package/server/{conversation-service-DBxoYMDl.js → conversation-service-BufdtnZF.js} +169 -10
- package/server/{conversation-service-D_TS2b1r.js → conversation-service-DnUyIiLb.js} +1 -1
- package/server/{conversations-D0UEdLtk.js → conversations-B4rxz-Wl.js} +17 -10
- package/server/{conversations-BKDVpB-3.js → conversations-D1bwxQMy.js} +1 -1
- package/server/{cost-DpgYmYqR.js → cost-CpFDrJUS.js} +46 -2
- package/server/{cost-DS1s0DbG.js → cost-KLuwKCW9.js} +3 -3
- package/server/{cost-sync-tOCCGnEt.js → cost-sync-cesi9dp8.js} +3 -3
- package/server/{dag-BtkgLeqY.js → dag-BYiFMqpU.js} +2 -2
- package/server/{dangerous-git-ops-CFLykHWt.js → dangerous-git-ops-BKvd3-Hk.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/{deacon-BIblC-WX.js → deacon-BbsWw8a6.js} +3 -3
- package/server/{deacon-pLRLbPvR.js → deacon-HdEh0Esp.js} +863 -214
- package/server/deacon-event-client-C93rvOT7.js +237 -0
- package/server/deacon-event-client-Ck5Ei7Mn.js +3 -0
- package/server/{deacon-nudge-log-B08gF0mh.js → deacon-nudge-log-BND_97Wo.js} +4 -3
- package/server/{deacon-pending-lifecycle-B-Io84AP.js → deacon-pending-lifecycle-CD3YsiQK.js} +3 -3
- package/server/deacon-swarm-DgWADWd_.js +2 -0
- package/server/{deacon-swarm-v5PMun-m.js → deacon-swarm-rqrl4TMs.js} +39 -18
- package/server/deacon.js +12 -210
- package/server/{dead-end-trip-D8A3msX9.js → dead-end-trip-DSF23CLX.js} +4 -3
- package/server/dead-end-trip-zKlS4v6f.js +2 -0
- package/server/delivery-CsbQdZkS.js +3 -0
- package/server/{deploy-patrol-sYgOxLeb.js → deploy-patrol-kARAkji4.js} +17 -21
- package/server/{deploy-queue-VfohaPN_.js → deploy-queue-Bj0HJT1i.js} +2 -2
- package/server/{deploy-queue-gHJBycaF.js → deploy-queue-rjTUy1RM.js} +1 -1
- package/server/{deploy-window-D4DQb8VP.js → deploy-window-B2IM-9G5.js} +10 -44
- package/server/{deploy-window-CFRZ0-kt.js → deploy-window-BNFWnA8D.js} +1 -1
- package/server/{dev-supervisor-DiOBDM1c.js → dev-supervisor-B1mZYXz4.js} +2 -2
- package/server/{devcontainer-renderer-BUOIlfgD.js → devcontainer-renderer-B-o68Z5B.js} +3 -3
- package/server/{dist-C3A8B8wM.js → dist-3W--cGMa.js} +1 -1
- package/server/dist-BR0QtwmS.js +3 -0
- package/server/{dist-src-C0adpegX.js → dist-src-C-Vk2jNk.js} +1 -1
- package/server/{docker-Y3PElJb0.js → docker-DH3jUYg1.js} +1 -1
- package/server/{docker-BJzlkqYB.js → docker-meuLKLzV.js} +27 -20
- package/server/{dod-DlNtcH6n.js → dod-D7-9dCOD.js} +1 -1
- package/server/{driver-CKVGi51s.js → driver-CmsY2RLl.js} +1 -1
- package/server/{durable-review-pipeline-DP6bIcOY.js → durable-review-pipeline-CStTgOAf.js} +1 -1
- package/server/{durable-review-pipeline-Cibps-Rg.js → durable-review-pipeline-Chq0lzjL.js} +1 -1
- package/server/{ensure-devcontainer-DMAbWqtQ.js → ensure-devcontainer-BE3llBWP.js} +1 -1
- package/server/{ensure-devcontainer-BAofzBPv.js → ensure-devcontainer-BXrY7C2Z.js} +4 -4
- package/server/{esm-shims-BeObUkaw.js → esm-shims-Bzy4ZzNU.js} +1 -1
- package/server/event-store-COd2tOx8.js +3 -0
- package/server/{event-store-CrHcVC5_.js → event-store-D_AR-Y78.js} +184 -11
- package/server/{events-CF8QDbuV.js → events-CCkFWa7X.js} +1 -1
- package/server/{events-BNrvchBg.js → events-zjDQozet.js} +3 -3
- package/server/{factory-Cmm9Hsho.js → factory-DhavwKVc.js} +5 -5
- package/server/{feature-registry-population-B6HpNWRy.js → feature-registry-population-DWGBKyWd.js} +4 -4
- package/server/{feature-registry-storage-DJEFx1Pf.js → feature-registry-storage-C5DkXmCM.js} +3 -3
- package/server/{features-D5km80UI.js → features-CC47YcCX.js} +2 -2
- package/server/{feedback-target-BJ5ZADsu.js → feedback-target-D9Tex35_.js} +1 -1
- package/server/{feedback-target-DSxEL6lP.js → feedback-target-DoRCR3L-.js} +18 -7
- package/server/{feedback-writer-CoB9Z6aU.js → feedback-writer-CTSuA6lw.js} +1 -1
- package/server/{feedback-writer-C27Hak8a.js → feedback-writer-DdsBdtNL.js} +5 -5
- package/server/{flywheel-DZZdtiOL.js → flywheel-DHWHzaYK.js} +1 -1
- package/server/{flywheel-f662Q-y2.js → flywheel-DJQa9az8.js} +14 -14
- package/server/{flywheel-BHx8XuMr.js → flywheel-TacAI9MA.js} +21 -17
- package/server/{flywheel-merge-order-Dil0LmdN.js → flywheel-merge-order-D2foPh88.js} +1 -1
- package/server/{flywheel-merge-order-D_xLMbJU.js → flywheel-merge-order-DRtex2Dt.js} +7 -7
- package/server/forge-CdlCG9aS.js +3 -0
- package/server/{forge-BaKGCya6.js → forge-c8LeC-tw.js} +2 -2
- package/server/{from-B3tZbB55.js → from-BogSwvr2.js} +1 -1
- package/server/{fs-lock-Bre3sGoz.js → fs-lock-D_GeJtXl.js} +3 -3
- package/server/{fts-operations-B9jG8wa3.js → fts-operations-DP9R-8Q3.js} +3 -3
- package/server/{git-utils-Xg4PFN45.js → git-utils-C31x1lpE.js} +1 -1
- package/server/{git-utils-CsvYfJU3.js → git-utils-xQ74FoSn.js} +5 -4
- package/server/{github-app-Bmg4R9mv.js → github-app-CpQSDlv8.js} +1 -1
- package/server/{github-app-CmNk0zLU.js → github-app-D2QuvZ3j.js} +3 -3
- package/server/{github-client-qazkPrg0.js → github-client-D9YvJX5D.js} +3 -3
- package/server/{github-client-B6KM9_wA.js → github-client-Tpi3PmKX.js} +1 -1
- package/server/{github-pr-lookup-DAcVeRLK.js → github-pr-lookup-DvBMv-IW.js} +2 -2
- package/server/{harness-binary-BSpiXaLw.js → harness-binary-BHxWf_sX.js} +7 -6
- package/server/{harness-resolve-BAJu5MX8.js → harness-resolve-bj9WMABA.js} +4 -4
- package/server/{health-events-BwX32k8d.js → health-events-bCDPn59Z.js} +2 -2
- package/server/{health-events-2Z6Wa9SM.js → health-events-qo7Ss34U.js} +1 -1
- package/server/{hooks-DbtbimEf.js → hooks-Dyxtg5fk.js} +2 -2
- package/server/{hooks-D1g1jKLI.js → hooks-X2XHBB2b.js} +1 -1
- package/server/{hume-DXNiu6nQ.js → hume-DrZEGpqc.js} +2 -2
- package/server/hume-YPsy4UA8.js +3 -0
- package/server/{idle-stack-reaper-Cy-dQzW4.js → idle-stack-reaper-CJ1ygW0p.js} +37 -7
- package/server/{idle-stack-reaper-CRA1e0jr.js → idle-stack-reaper-uJGOb-vu.js} +1 -1
- package/server/{in-flight-guard-D-sSkADM.js → in-flight-guard-CG2Eo-rr.js} +1 -1
- package/server/{infra-BDQDRopn.js → infra-CTrmVqc_.js} +111 -6
- package/server/{injection-Bl8d_jHZ.js → injection-BisQ0lpX.js} +1 -1
- package/server/{injection-6AGnXxlj.js → injection-C9sxqbc2.js} +73 -193
- package/server/{inspect-agent-nXdIptyh.js → inspect-agent-BoSO51YC.js} +12 -12
- package/server/inspect-agent-BykeOH4a.js +2 -0
- package/server/{internal-token-DzK385vD.js → internal-token-AvXePaQT.js} +2 -2
- package/server/{internal-token-Ias7N8Kg.js → internal-token-Djkj-yqK.js} +1 -1
- package/server/{io-B00PBNku.js → io-mxOWMZ7I.js} +6 -6
- package/server/{issue-closed-BehTG1be.js → issue-closed-Bj_bCv_0.js} +7 -7
- package/server/{issue-lifecycle-BqSuQvbn.js → issue-lifecycle-A5YIpDZE.js} +1 -1
- package/server/{issue-lifecycle-Birk-ifu.js → issue-lifecycle-BXUqaHzF.js} +32 -28
- package/server/{issue-service-singleton-C6ZduvuY.js → issue-service-singleton-BPNEXczv.js} +11 -11
- package/server/{issue-service-singleton-B2wXiIlw.js → issue-service-singleton-CcaHjKPR.js} +1 -1
- package/server/{issues-DQ5-LatB.js → issues-AX-YBeAQ.js} +2 -2
- package/server/{jsonl-parser-BDpnGFCl.js → jsonl-parser-CgYWQ20q.js} +7 -3
- package/server/kimi-code-BYbme0aV.js +579 -0
- package/server/kimi-code-D_Ppt82c.js +3 -0
- package/server/kimi-parser-B-JBg3Pv.js +147 -0
- package/server/{label-cleanup-Dwnky8FG.js → label-cleanup-sXUlgdM0.js} +3 -3
- package/server/{lifecycle-B4Xdb4cY.js → lifecycle-D2X3al0D.js} +2 -2
- package/server/{lifecycle-B3s4sM1G.js → lifecycle-DjlljAZ1.js} +6 -6
- package/server/{lifecycle-io-CzTHEooc.js → lifecycle-io-C5nVk55o.js} +1 -1
- package/server/{lifecycle-io-DCo6s6ks.js → lifecycle-io-NPm1YtIG.js} +5 -5
- package/server/{linear-client-CnbtHiic.js → linear-client--luYwCZg.js} +1 -1
- package/server/{linear-client-9uq7fhiV.js → linear-client-B8pLegW1.js} +3 -3
- package/server/{linear-mcp-auth-BxUOzswy.js → linear-mcp-auth-BQVWV0I3.js} +6 -6
- package/server/{linear-mcp-auth-D46fBCLf.js → linear-mcp-auth-Dx81Zl4G.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-DiW9RdSB.js → merge-Bx5Bh9pi.js} +3 -3
- package/server/{merge-sr8Nrnmi.js → merge-Dqmh_zja.js} +1 -1
- package/server/{merge-agent-BLUgRsz3.js → merge-agent-DP9AUY29.js} +33 -33
- package/server/{merge-agent-DQTXZk8z.js → merge-agent-DWd0KfiS.js} +1 -1
- package/server/{merge-batch-Cp_j9BGk.js → merge-batch-BdmvTEAC.js} +1 -1
- package/server/{merge-completeness-BLbB5-6n.js → merge-completeness-BfRwFjRx.js} +1 -1
- package/server/{merge-completeness-B46KqhtY.js → merge-completeness-C1FevcDT.js} +4 -4
- package/server/merge-ops-B98tKc1e.js +2 -0
- package/server/merge-rebase-BLykMwPO.js +2 -0
- package/server/{merge-rebase-DIkBjgwq.js → merge-rebase-BX1xKsrE.js} +2 -2
- package/server/{merge-set-CBgHfwM0.js → merge-set-DsLjjLEV.js} +4 -4
- package/server/{merge-set-DeUxFsC3.js → merge-set-H6epHOsw.js} +1 -1
- package/server/{merge-sync-kr4vqyjM.js → merge-sync-BEdfsQV4.js} +2 -2
- package/server/{merge-sync-CpGmk6Ch.js → merge-sync-BebcWWGA.js} +1 -1
- package/server/{merge-train-Dmrcus12.js → merge-train-D1I0lNOT.js} +4 -4
- package/server/{merge-train-deps-D_uGX91G.js → merge-train-deps-D_-C0Pk2.js} +4 -4
- package/server/{merge-verification-NvaAd8CZ.js → merge-verification-DN1Ov9bU.js} +6 -6
- package/server/{merged-docker-cleanup-worker-Y1R06TEl.js → merged-docker-cleanup-worker-CfXSr2pA.js} +4 -4
- package/server/{merged-docker-cleanup-worker-DH_hrGPI.js → merged-docker-cleanup-worker-ybsPyHjB.js} +1 -1
- package/server/{multipart-parser-R-oC8dQg.js → multipart-parser-CL5QG8iv.js} +2 -2
- package/server/{no-resume-mode-BgD0JUmM.js → no-resume-mode-DUR7Hi98.js} +1 -1
- package/server/node_modules/.package-lock.json +7 -7
- package/server/node_modules/brace-expansion/README.md +23 -1
- package/server/node_modules/brace-expansion/index.js +206 -85
- package/server/node_modules/brace-expansion/package.json +1 -1
- package/server/node_modules/msgpackr/dist/index-no-eval.cjs +34 -28
- package/server/node_modules/msgpackr/dist/index-no-eval.cjs.map +1 -1
- package/server/node_modules/msgpackr/dist/index-no-eval.min.js +1 -1
- package/server/node_modules/msgpackr/dist/index-no-eval.min.js.map +1 -1
- package/server/node_modules/msgpackr/dist/index.js +34 -28
- package/server/node_modules/msgpackr/dist/index.js.map +1 -1
- package/server/node_modules/msgpackr/dist/index.min.js +1 -1
- package/server/node_modules/msgpackr/dist/index.min.js.map +1 -1
- package/server/node_modules/msgpackr/dist/node.cjs +36 -29
- package/server/node_modules/msgpackr/dist/node.cjs.map +1 -1
- package/server/node_modules/msgpackr/dist/test.js +63 -32
- package/server/node_modules/msgpackr/dist/test.js.map +1 -1
- package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs +34 -28
- package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs.map +1 -1
- package/server/node_modules/msgpackr/package.json +1 -1
- package/server/node_modules/msgpackr/unpack.js +34 -28
- package/server/{orphan-proposed-reconciler-DcgTPPFY.js → orphan-proposed-reconciler-CEW1maPl.js} +1 -1
- package/server/{orphan-proposed-reconciler-B6vJHxtX.js → orphan-proposed-reconciler-DfqHZftT.js} +23 -22
- package/server/package-lock.json +8 -8
- package/server/package.json +1 -1
- package/server/{pan-dir-DMzF5wne.js → pan-dir-DhgKfO86.js} +21 -6
- package/server/{paths-sJBSb7Ul.js → paths-BUuhi6jM.js} +17 -17
- package/server/{pending-lifecycle-claim-DilzGfgk.js → pending-lifecycle-claim-DJlA1rTR.js} +2 -2
- package/server/{persistent-logger-H_VjuOu7.js → persistent-logger-s8cbpFNV.js} +2 -2
- package/server/{pickup-DWhqzliO.js → pickup-2AxtB3dW.js} +1 -1
- package/server/{pipeline-membership-C88VBnhJ.js → pipeline-membership-2_okL5bm.js} +1 -1
- package/server/{pipeline-membership-D9SBvItj.js → pipeline-membership-Dqv6_0ig.js} +1 -1
- package/server/{pipeline-membership-gather-4eR-7Tqy.js → pipeline-membership-gather-4F1-tXKI.js} +1 -1
- package/server/{pipeline-membership-gather-CeVGnNJ2.js → pipeline-membership-gather-CtJ_7aGf.js} +149 -17
- package/server/{pipeline-notifier-DT6xLFao.js → pipeline-notifier-CO9rxJgB.js} +1 -1
- package/server/{pipeline-notifier-D0ALV6Nw.js → pipeline-notifier-DDfVBJhJ.js} +2 -2
- package/server/{post-merge-lifecycle-worker-8HIeS_J6.js → post-merge-lifecycle-worker-DmSOkeNp.js} +3 -3
- package/server/{project-pipelines-9SKt2bEc.js → project-pipelines-72WE8GVK.js} +2 -2
- package/server/{project-repos-B5pIphKg.js → project-repos-BAqDwtvi.js} +16 -11
- package/server/project-repos-Df90Zw7Y.js +3 -0
- package/server/projects-WqMWCdpa.js +3 -0
- package/server/{prompts-CgzMBvQF.js → prompts-XkL10m8M.js} +2 -2
- package/server/{providers-BJQSnAAp.js → providers-ClGPGkQ8.js} +15 -12
- package/server/providers-DFUOed8u.js +3 -0
- package/server/public/assets/{chunk-BO2N2NFS-D_pGACYN.js → chunk-BO2N2NFS-CeQUdPxr.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-BO6fe3hH.js → diagram-OG6HWLK6-B7rgk4yT.js} +1 -1
- package/server/public/assets/{dist-5zingMiA.js → dist-2RPazfXY.js} +3 -3
- package/server/public/assets/{dist-CVxhbI2E.js → dist-B9NInrVZ.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-Bgj4A7kp.js → ganttDiagram-6RSMTGT7-Bxp0gV14.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-DNPK7_cm.js → highlighted-body-OFNGDK62-CzoRTVlC.js} +1 -1
- package/server/public/assets/index-Cml-kHo6.css +1 -0
- package/server/public/assets/{index-DEpY-D1O.js → index-CvN8cEgs.js} +216 -215
- package/server/public/assets/{linear-BB0jQT16.js → linear-CFEEl3ND.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-CpV7nCBM.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-DeGIzzpZ.js → pieDiagram-4H26LBE5-BeR8R0cr.js} +1 -1
- package/server/public/assets/{prod-XBLvikex.js → prod-CYjzjCrn.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-BV9SLeWz.js → quadrantDiagram-W4KKPZXB-BpcTkFuW.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-Dwja0gj8.js → sankeyDiagram-5OEKKPKP-Bx2ETEV5.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-DCB4qvfw.js → xychartDiagram-2RQKCTM6-BKgEAFaj.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-7BgLDsIo.js → pull-requests-B-KrUph5.js} +3 -3
- package/server/{pull-requests-Dq0y6IxE.js → pull-requests-DK5k92B4.js} +1 -1
- package/server/{queries-C-MUZaIy.js → queries-DVpl1vsU.js} +1212 -193
- package/server/{rally-CPysR4T_.js → rally-DbE561hD.js} +3 -3
- package/server/rally-O_st_X7n.js +3 -0
- package/server/{rally-api-8Ptlp2os.js → rally-api-CZLeEd2C.js} +2 -2
- package/server/{rally-api-CgosKdKL.js → rally-api-DaHtn5QN.js} +1 -1
- package/server/{rally-client-CCX0hADj.js → rally-client-C-MAl8ur.js} +1 -1
- package/server/{rally-client-iYMHWQD7.js → rally-client-Ch3zRsBX.js} +5 -5
- package/server/{reap-terminal-sessions-Qf-9LVQc.js → reap-terminal-sessions-C1n0ALRb.js} +2 -2
- package/server/{reap-terminal-sessions-4Xg9NGA8.js → reap-terminal-sessions-DegFS2p1.js} +2 -2
- package/server/{rebuild-stack-CMdgaylx.js → rebuild-stack-C9Li44A3.js} +20 -10
- package/server/{rebuild-stack-DqcOVmJO.js → rebuild-stack-qC0jCNm6.js} +2 -2
- package/server/{reconstruct-cache-CMZJ_Vjq.js → reconstruct-cache-BHyiAg02.js} +7 -7
- package/server/record-aVzu-LGm.js +3 -0
- package/server/record-update-CZh46a2f.js +617 -0
- package/server/{record-update-DhI7eySG.js → record-update-DtdJK2Iw.js} +1 -1
- package/server/recovery-trip-CSNWSLDn.js +77 -0
- package/server/recovery-trip-_16hFKv4.js +3 -0
- package/server/{release-engine-B2X9AfFC.js → release-engine-Be5MX5GP.js} +5 -5
- package/server/{release-set-G4XKyQ8K.js → release-set-DJv_O6PS.js} +3 -3
- package/server/{remote-BXarMvqf.js → remote-BMM3uH2J.js} +3 -3
- package/server/{remote-CUhyqjXk.js → remote-C0xVTHA5.js} +3 -3
- package/server/{remote-agents-CLZB3Coc.js → remote-agents-BIIoc5pD.js} +1 -1
- package/server/{remote-agents-Bba-MgSA.js → remote-agents-EUiZ26bj.js} +7 -7
- package/server/{remote-completion-CwAp79EC.js → remote-completion-BS4tJUn8.js} +13 -13
- package/server/resolver-BvHd6RE4.js +163 -0
- package/server/resume-9thEqAQR.js +3 -0
- package/server/{review-agent--pOptAEV.js → review-agent-BHGaBoBu.js} +29 -29
- package/server/{review-agent-BTCNkq2h.js → review-agent-CD3RQ-tc.js} +1 -1
- package/server/{review-artifacts-BNmw8dWE.js → review-artifacts-DyhajWso.js} +6 -6
- package/server/{review-context-DFxYOOJW.js → review-context-B-dlsPnx.js} +9 -9
- package/server/{review-convoy-liveness-BgU_1jJf.js → review-convoy-liveness-D7M-s_nS.js} +2 -2
- package/server/{review-status-Dma9SFaN.js → review-status-B6wYcOtP.js} +1 -1
- package/server/{review-status-CGvlA4o_.js → review-status-CKLk5aZ-.js} +308 -58
- package/server/{review-status-emit-DURrmGYX.js → review-status-emit-CJ7UmEVU.js} +3 -3
- package/server/{review-status-enrichment-8NiNXi5W.js → review-status-enrichment-DJRgGX7-.js} +3 -3
- package/server/review-status-limits-4EJDCGHO.js +7 -0
- package/server/{review-status-source-DIk1JSow.js → review-status-source-7nU3Z2wL.js} +1 -1
- package/server/{review-status-source-BLx_1siH.js → review-status-source-BsDYGfyv.js} +1 -1
- package/server/{review-status-sync-muT-EBp2.js → review-status-sync-BLssMTEW.js} +1 -1
- package/server/{review-status-sync-0GxOqeqF.js → review-status-sync-BxBeHRde.js} +35 -11
- package/server/{review-verdict-feedback-xJNdqBnX.js → review-verdict-feedback-5jWuzgpc.js} +90 -16
- package/server/{review-verdict-feedback-HwF6ODFy.js → review-verdict-feedback-HRY9P4bN.js} +1 -1
- package/server/{rollup-BQaol5TX.js → rollup-BGIrCEkU.js} +79 -44
- package/server/rollup-CZB4UL9q.js +3 -0
- package/server/{scanner-C-D2cFdX.js → scanner-DydjXPrz.js} +16 -9
- package/server/search-DdtIjAiu.js +395 -0
- package/server/{sequence-io-Bmf1EZM5.js → sequence-io-Fw-cLyDs.js} +4 -4
- package/server/{sequencer-agent-CigMyKh2.js → sequencer-agent-BcpGMt5x.js} +15 -10
- package/server/server.js +1258 -438
- package/server/{service-CD0DvFvD.js → service-BFFkGsG4.js} +58 -58
- package/server/{session-fork-B6cQ5eya.js → session-fork-D0V-3e5P.js} +2 -2
- package/server/{session-history-3ON_IJjm.js → session-history-Bta5l9jY.js} +5 -5
- package/server/{settings-PilbFZAM.js → settings-Ce8B1daF.js} +2 -2
- package/server/{settings-VN0qOh4U.js → settings-E3FnEIUx.js} +3 -3
- package/server/settings-eOOJpxi_.js +2 -0
- package/server/{shadow-engineering-DXvx77oE.js → shadow-engineering-Mt9nJO4i.js} +3 -3
- package/server/{shadow-state-CZBp7pwq.js → shadow-state-Bzj_AZCV.js} +1 -1
- package/server/{shadow-state-BBk_zacw.js → shadow-state-DrkhoVSx.js} +2 -2
- package/server/{shadow-utils-DdZ05AJS.js → shadow-utils-H1GfqP06.js} +2 -2
- package/server/{ship-log-7kJfjUX2.js → ship-log-CFUIo4PR.js} +1 -1
- package/server/{smart-compaction-8fA5k5XN.js → smart-compaction-DSTq-Wua.js} +1 -1
- package/server/{smart-compaction-ByhL9cRS.js → smart-compaction-Hzp3KCJX.js} +7 -7
- package/server/{spawn-planning-session-vLUJoFjy.js → spawn-planning-session-C0uSA2SL.js} +2 -2
- package/server/{spawn-planning-session-pcF-YeFE.js → spawn-planning-session-DN4son31.js} +23 -21
- package/server/{specialist-completion-B07XjWD2.js → specialist-completion-Cf6tpIh1.js} +1 -1
- package/server/{specialist-context-DJ-zFyL3.js → specialist-context-DEUEkjIQ.js} +5 -5
- package/server/{specialist-handoff-logger-aKSxbIgD.js → specialist-handoff-logger-D_LmQDj3.js} +2 -2
- package/server/{specialist-logs-Dae-n52_.js → specialist-logs-7Ynue0R7.js} +3 -3
- package/server/{specialists-KR3pKulN.js → specialists-CQwBEGlD.js} +1 -1
- package/server/{specialists-6PWdtWcg.js → specialists-DAjPgYs_.js} +504 -238
- package/server/{specialists-DUiExaxb.js → specialists-Hr6iW9fU.js} +18 -18
- package/server/{specialists-Bz-wFT7R.js → specialists-MOoeB4A8.js} +1 -1
- package/server/specs-Dl88cbKY.js +3 -0
- package/server/{src-B948bGVR.js → src-BYdwL_n-.js} +668 -64
- package/server/{src-vHy2-oCv.js → src-DQnkPN2i.js} +3 -3
- package/server/{src-rac0Mepv.js → src-DhfDV0o4.js} +6 -6
- package/server/{stack-health-DqLTiEu4.js → stack-health-D_iKwNRg.js} +107 -16
- package/server/stack-health-deVSdDwn.js +3 -0
- package/server/{stale-task-claims-Cab_Fo_Z.js → stale-task-claims-BYJGqhLI.js} +5 -5
- package/server/{staleness-CGTZyp6V.js → staleness-CopBDKnA.js} +1 -1
- package/server/{staleness-C-a5rBxF.js → staleness-D8WeMUHd.js} +1 -1
- package/server/{state-home-722Dkx92.js → state-home-DjN8qduI.js} +24 -3
- package/server/{state-mapping-CybR81Uf.js → state-mapping-DlM7OYRW.js} +1 -1
- package/server/{state-migrate-2u8wIpoL.js → state-migrate-a2p1gtD7.js} +4 -4
- package/server/state-mirror-Cv_XgvT5.js +121 -0
- package/server/{stuck-remediation-r1TJu68G.js → stuck-remediation-CXJX_kki.js} +1 -1
- package/server/{stuck-remediation-CC6q3eqQ.js → stuck-remediation-CbCRSz1v.js} +31 -732
- package/server/{substrate-bug-weights-service-CzIyyWFT.js → substrate-bug-weights-service-DxpopNd9.js} +3 -3
- package/server/{summary-fork-BqgmgPDt.js → summary-fork-B61fjRJn.js} +2 -2
- package/server/{summary-fork-Df2WFijM.js → summary-fork-B9pszUJN.js} +91 -10
- package/server/supervisor/{injection-budget-Cg_KIb3o.js → injection-budget-Ar7hgyJq.js} +1 -1
- package/server/supervisor/pty-supervisor.js +12 -3
- package/server/supervisor/{pty-token-BbjwEUUM.js → pty-token-CXCFU0Z8.js} +1 -1
- package/server/{supervisor-BxqSpjcN.js → supervisor-BvnxbuuF.js} +6 -4
- package/server/supervisor-C69kpqvd.js +2 -0
- package/server/{swarm-readiness-DfFxa9-n.js → swarm-readiness-vTw1kqGa.js} +3 -3
- package/server/{system-prerequisites-ICLSkhhZ.js → system-prerequisites-LLzTEqsK.js} +3 -3
- package/server/{teardown-workspace-DRdi_CPa.js → teardown-workspace-CqKKVJr1.js} +15 -15
- package/server/{test-agent-queue-A_-p-i0I.js → test-agent-queue-CWMq7oyG.js} +8 -7
- package/server/{test-verdict-BHgTAwIG.js → test-verdict-NdtgRBuA.js} +1 -1
- package/server/{test-verdict-C4i9aqEP.js → test-verdict-diIWE6hz.js} +15 -3
- package/server/{tldr-daemon-CvWXBhX1.js → tldr-daemon-B1Jhrtc8.js} +1 -1
- package/server/{tldr-daemon-wvsU6bKv.js → tldr-daemon-Bpls1CJB.js} +2 -2
- package/server/{tmux-CfDHob9M.js → tmux-CImZaX4q.js} +10 -16
- package/server/tmux-Cjpx8L8u.js +4 -0
- package/server/{token-DrxwytsZ.js → token-Bgpjo3tE.js} +2 -2
- package/server/token-util-BsjFll-k.js +3 -0
- package/server/{token-util-B48BlCba.js → token-util-BymbpkJp.js} +1 -1
- package/server/{tracker-config-BcPMElRB.js → tracker-config-4DaKVTfc.js} +2 -2
- package/server/{tracker-utils-CJ6BHjcD.js → tracker-utils-BDeAXC-q.js} +2 -2
- package/server/{traefik-connect-DZ6nMYMj.js → traefik-connect-CC5FyxYj.js} +1 -1
- package/server/{tunnel-Bp-dRHZz.js → tunnel-CDWkeceJ.js} +1 -1
- package/server/{tunnel-DUbUPElU.js → tunnel-CPf5M-Pc.js} +3 -3
- package/server/{typed-errors-DyjseiB6.js → typed-errors-9K7Dq_Vn.js} +1 -1
- package/server/{typed-errors-CKeoDdU3.js → typed-errors-DrS5fb5z.js} +1 -1
- package/server/{types-Cm5ASJbq.js → types-DzlUKiuf.js} +4 -3
- package/server/{types-Di8wdakq.js → types-kI9ik8XO.js} +1 -1
- package/server/{uat-promote-verification-CoJuh7XO.js → uat-promote-verification-c_pxoxEc.js} +5 -5
- package/server/{uat-train-4Q0k06CQ.js → uat-train-CWGxBdJO.js} +0 -0
- package/server/{uat-train-Dewoatps.js → uat-train-CfCYd2ve.js} +1 -1
- package/server/{validate-B0C8p66t.js → validate-f3ItVCfm.js} +3 -3
- package/server/{validation-hVOwQk8T.js → validation-5G_wQtea.js} +1 -1
- package/server/{validation-B_kIRfNe.js → validation-7tSiCM82.js} +4 -4
- package/server/{verification-artifact-BxlxTiYK.js → verification-artifact-9h9dH8uX.js} +1 -1
- package/server/{verification-artifact-D70AtckY.js → verification-artifact-C_4WJnf6.js} +1 -1
- package/server/{verification-runner-Bc3cJvpC.js → verification-runner-BV5F6wrA.js} +1 -1
- package/server/{verification-runner-KZTz6u72.js → verification-runner-D58KmBhK.js} +18 -38
- package/server/{vtt-parser-CE_i3Bcw.js → vtt-parser-2iT9OHa9.js} +1 -1
- package/server/{work-agent-prompt-ByrPAzOy.js → work-agent-prompt-D03s4DD1.js} +9 -9
- package/server/{workflows-D0vP1WrK.js → workflows-BMBwLYPV.js} +281 -98
- package/server/workflows-BOmWGpIh.js +2 -0
- package/server/{workspace-DQkRPLlQ.js → workspace-BgflNCH0.js} +3 -3
- package/server/{workspace-COWvdibH.js → workspace-Cn9ywfSW.js} +1 -1
- package/server/{workspace-anchor-drift-pwz23TI1.js → workspace-anchor-drift-C8Fy3shi.js} +1 -1
- package/server/{workspace-anchor-drift-DXYIAHzr.js → workspace-anchor-drift-CMiNncwq.js} +5 -8
- package/server/{workspace-config-BdZM4PvZ.js → workspace-config-aUc2nIz6.js} +1 -1
- package/server/{workspace-manager-BPgTrG66.js → workspace-manager-Bem7ZBs9.js} +521 -292
- package/server/workspace-manager-C0CpNh3t.js +3 -0
- package/server/{workspace-metadata-CdjzAP8x.js → workspace-metadata-C5iSlPRo.js} +1 -1
- package/server/{workspace-metadata-DkO_iTLo.js → workspace-metadata-UKmTYmDQ.js} +2 -2
- package/server/{workspaces-CRBJikLp.js → workspaces-DqxgwDZ8.js} +143 -113
- package/sync-sources/hooks/notification-hook +12 -1
- package/sync-sources/hooks/pan-hook-lib.sh +226 -0
- package/sync-sources/hooks/session-start-hook +31 -4
- package/sync-sources/hooks/work-agent-stop-hook +23 -1
- package/sync-sources/skills/pan-memory/SKILL.md +19 -3
- package/sync-sources/skills/pan-projects/SKILL.md +9 -0
- package/sync-sources/skills/pan-restart/SKILL.md +26 -7
- package/sync-sources/skills/pan-workspace/SKILL.md +77 -0
- package/server/activity-logger-CMthG6Vd.js +0 -3
- package/server/agent-state-CYXJVG72.js +0 -3
- package/server/agents-ePFVoZbu.js +0 -3
- package/server/archive-planning-B2XplFzT.js +0 -2
- package/server/cli-CjOCSnfj.js +0 -3
- package/server/deacon-swarm-B1XkIvfr.js +0 -2
- package/server/delivery-BX9HR4wQ.js +0 -3
- package/server/dist-B3YPQa5A.js +0 -3
- package/server/event-store-5UKzh9Jf.js +0 -3
- package/server/forge-B5o319qI.js +0 -3
- package/server/fts-db-IVc4_M3f.js +0 -146
- package/server/hume-VUCNbTgn.js +0 -3
- package/server/inspect-agent-CUwVmr2h.js +0 -2
- package/server/merge-ops-1abz6O_P.js +0 -2
- package/server/merge-rebase-CJJVAJuz.js +0 -2
- package/server/node_modules/brace-expansion/.tap/coverage/8b906b8c-e21f-40b5-8c0d-214d8c2682c5.json +0 -757
- package/server/node_modules/brace-expansion/.tap/processinfo/8b906b8c-e21f-40b5-8c0d-214d8c2682c5.json +0 -719
- package/server/node_modules/brace-expansion/ADVISORY-CVE-2026-14257.md +0 -107
- package/server/node_modules/brace-expansion/dist/commonjs/index.d.ts +0 -8
- package/server/node_modules/brace-expansion/dist/commonjs/index.d.ts.map +0 -1
- package/server/node_modules/brace-expansion/dist/commonjs/index.js +0 -263
- package/server/node_modules/brace-expansion/dist/commonjs/index.js.map +0 -1
- package/server/node_modules/brace-expansion/dist/commonjs/package.json +0 -3
- package/server/node_modules/brace-expansion/dist/esm/index.d.ts +0 -8
- package/server/node_modules/brace-expansion/dist/esm/index.d.ts.map +0 -1
- package/server/node_modules/brace-expansion/dist/esm/index.js +0 -259
- package/server/node_modules/brace-expansion/dist/esm/index.js.map +0 -1
- package/server/node_modules/brace-expansion/dist/esm/package.json +0 -3
- package/server/project-repos-DPjOdfPa.js +0 -3
- package/server/projects-_n3Zui6K.js +0 -3
- package/server/providers-BI1mOBQ4.js +0 -3
- package/server/public/assets/index-Ddkcz3WT.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-BzPfaQJ1.js +0 -1
- package/server/rally-D_VW4bJv.js +0 -3
- package/server/record-BTwWhtBb.js +0 -3
- package/server/record-update-DaOKS7Wb.js +0 -277
- package/server/recovery-trip-DDH-02ng.js +0 -44
- package/server/resume-mOREjlYu.js +0 -3
- package/server/rollup-BR4t_wck.js +0 -3
- package/server/settings-CVmWiJ-r.js +0 -2
- package/server/specs--enInima.js +0 -3
- package/server/stack-health-BikqHSjn.js +0 -3
- package/server/supervisor-B4anCCSm.js +0 -2
- package/server/tmux-Ctk6RV5l.js +0 -3
- package/server/token-util-D411CAq9.js +0 -3
- package/server/workflows-DtDX08ed.js +0 -2
- package/server/workspace-manager-C1F3XsnS.js +0 -3
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
+
import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-AvXePaQT.js";
|
|
3
|
+
//#region ../../lib/cloister/deacon-event-client.ts
|
|
4
|
+
function internalDashboardOrigin() {
|
|
5
|
+
const port = Number.parseInt(process.env["API_PORT"] ?? process.env["PORT"] ?? "3011", 10);
|
|
6
|
+
return process.env["OVERDECK_INTERNAL_DASHBOARD_URL"] ?? `http://127.0.0.1:${port}`;
|
|
7
|
+
}
|
|
8
|
+
function createDeaconEventClient(options = {}) {
|
|
9
|
+
const dashboardUrl = options.dashboardUrl ?? internalDashboardOrigin();
|
|
10
|
+
const fetchImpl = options.fetchImpl ?? fetch;
|
|
11
|
+
const warn = options.warn ?? ((message) => console.warn(message));
|
|
12
|
+
const batchSize = options.batchSize ?? DEFAULT_BATCH_SIZE;
|
|
13
|
+
const debounceMs = options.debounceMs ?? DEFAULT_DEBOUNCE_MS;
|
|
14
|
+
const maxBufferSize = options.maxBufferSize ?? DEFAULT_MAX_BUFFER_SIZE;
|
|
15
|
+
const baseRetryMs = options.baseRetryMs ?? DEFAULT_BASE_RETRY_MS;
|
|
16
|
+
const maxRetryMs = options.maxRetryMs ?? DEFAULT_MAX_RETRY_MS;
|
|
17
|
+
const appendOnceTimeoutMs = options.appendOnceTimeoutMs ?? DEFAULT_APPEND_ONCE_TIMEOUT_MS;
|
|
18
|
+
const queue = [];
|
|
19
|
+
let timer = null;
|
|
20
|
+
let inFlight = false;
|
|
21
|
+
let retryMs = baseRetryMs;
|
|
22
|
+
let dropped = 0;
|
|
23
|
+
const schedule = (delayMs) => {
|
|
24
|
+
if (timer) clearTimeout(timer);
|
|
25
|
+
timer = setTimeout(() => {
|
|
26
|
+
timer = null;
|
|
27
|
+
flushNow();
|
|
28
|
+
}, delayMs);
|
|
29
|
+
};
|
|
30
|
+
const enqueue = (event) => {
|
|
31
|
+
while (queue.length >= maxBufferSize) {
|
|
32
|
+
queue.shift();
|
|
33
|
+
dropped++;
|
|
34
|
+
}
|
|
35
|
+
if (dropped > 0) {
|
|
36
|
+
warn(`[deacon-event-client] buffer overflow: dropped ${dropped} oldest event${dropped === 1 ? "" : "s"}`);
|
|
37
|
+
dropped = 0;
|
|
38
|
+
}
|
|
39
|
+
queue.push(event);
|
|
40
|
+
if (queue.length >= batchSize) schedule(0);
|
|
41
|
+
else if (!timer) schedule(debounceMs);
|
|
42
|
+
};
|
|
43
|
+
async function flushNow() {
|
|
44
|
+
if (inFlight || queue.length === 0) return;
|
|
45
|
+
inFlight = true;
|
|
46
|
+
const batch = queue.slice(0, batchSize);
|
|
47
|
+
try {
|
|
48
|
+
const token = options.token ?? ensureInternalTokenSync();
|
|
49
|
+
const response = await fetchImpl(new URL("/api/internal/events", dashboardUrl), {
|
|
50
|
+
method: "POST",
|
|
51
|
+
headers: {
|
|
52
|
+
"content-type": "application/json",
|
|
53
|
+
origin: dashboardUrl,
|
|
54
|
+
[INTERNAL_TOKEN_HEADER]: token
|
|
55
|
+
},
|
|
56
|
+
body: JSON.stringify({ events: batch })
|
|
57
|
+
});
|
|
58
|
+
if (!response.ok) throw new Error(`HTTP ${response.status}`);
|
|
59
|
+
queue.splice(0, batch.length);
|
|
60
|
+
retryMs = baseRetryMs;
|
|
61
|
+
if (queue.length > 0) schedule(queue.length >= batchSize ? 0 : debounceMs);
|
|
62
|
+
} catch (error) {
|
|
63
|
+
warn(`[deacon-event-client] failed to flush events: ${error instanceof Error ? error.message : String(error)}; retrying in ${retryMs}ms`);
|
|
64
|
+
schedule(retryMs);
|
|
65
|
+
retryMs = Math.min(retryMs * 2, maxRetryMs);
|
|
66
|
+
} finally {
|
|
67
|
+
inFlight = false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async function fetchJson(url, signal) {
|
|
71
|
+
const token = options.token ?? ensureInternalTokenSync();
|
|
72
|
+
const response = await fetchImpl(url, {
|
|
73
|
+
signal,
|
|
74
|
+
headers: {
|
|
75
|
+
[INTERNAL_TOKEN_HEADER]: token,
|
|
76
|
+
origin: dashboardUrl
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
if (!response.ok) throw new Error(`HTTP ${response.status}`);
|
|
80
|
+
return response.json();
|
|
81
|
+
}
|
|
82
|
+
async function fetchLatestSequence(signal) {
|
|
83
|
+
const body = await fetchJson(new URL("/api/internal/events/latest", dashboardUrl), signal);
|
|
84
|
+
return typeof body.latestSequence === "number" && Number.isFinite(body.latestSequence) && body.latestSequence >= 0 ? body.latestSequence : 0;
|
|
85
|
+
}
|
|
86
|
+
function parseStreamFrame(frame) {
|
|
87
|
+
const dataLines = [];
|
|
88
|
+
for (const line of frame.split(/\r?\n/)) {
|
|
89
|
+
if (!line.startsWith("data:")) continue;
|
|
90
|
+
dataLines.push(line.slice(5).replace(/^\s/, ""));
|
|
91
|
+
}
|
|
92
|
+
if (dataLines.length === 0) return null;
|
|
93
|
+
try {
|
|
94
|
+
const parsed = JSON.parse(dataLines.join("\n"));
|
|
95
|
+
if (!parsed || typeof parsed !== "object") return null;
|
|
96
|
+
const record = parsed;
|
|
97
|
+
if (typeof record.sequence !== "number" || typeof record.type !== "string" || typeof record.timestamp !== "string") return null;
|
|
98
|
+
return {
|
|
99
|
+
sequence: record.sequence,
|
|
100
|
+
type: record.type,
|
|
101
|
+
timestamp: record.timestamp,
|
|
102
|
+
payload: record.payload
|
|
103
|
+
};
|
|
104
|
+
} catch {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
append(event) {
|
|
110
|
+
enqueue(event);
|
|
111
|
+
return 0;
|
|
112
|
+
},
|
|
113
|
+
appendAsync(event) {
|
|
114
|
+
enqueue(event);
|
|
115
|
+
return Promise.resolve(0);
|
|
116
|
+
},
|
|
117
|
+
async appendOnce(event, idempotencyKey) {
|
|
118
|
+
const controller = new AbortController();
|
|
119
|
+
const deadline = setTimeout(() => controller.abort(), appendOnceTimeoutMs);
|
|
120
|
+
try {
|
|
121
|
+
const token = options.token ?? ensureInternalTokenSync();
|
|
122
|
+
const response = await fetchImpl(new URL("/api/internal/events/append-once", dashboardUrl), {
|
|
123
|
+
method: "POST",
|
|
124
|
+
headers: {
|
|
125
|
+
"content-type": "application/json",
|
|
126
|
+
origin: dashboardUrl,
|
|
127
|
+
[INTERNAL_TOKEN_HEADER]: token
|
|
128
|
+
},
|
|
129
|
+
body: JSON.stringify({
|
|
130
|
+
event,
|
|
131
|
+
idempotencyKey
|
|
132
|
+
}),
|
|
133
|
+
signal: controller.signal
|
|
134
|
+
});
|
|
135
|
+
if (!response.ok) return "failed";
|
|
136
|
+
const body = await response.json();
|
|
137
|
+
return body.outcome === "appended" || body.outcome === "duplicate" ? body.outcome : "failed";
|
|
138
|
+
} catch {
|
|
139
|
+
return "failed";
|
|
140
|
+
} finally {
|
|
141
|
+
clearTimeout(deadline);
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
subscribe(fn) {
|
|
145
|
+
let active = true;
|
|
146
|
+
let cursor = -1;
|
|
147
|
+
let pollTimer = null;
|
|
148
|
+
let connectInFlight = false;
|
|
149
|
+
let reconnectMs = baseRetryMs;
|
|
150
|
+
let abortController = null;
|
|
151
|
+
const clearPollTimer = () => {
|
|
152
|
+
if (pollTimer) clearTimeout(pollTimer);
|
|
153
|
+
pollTimer = null;
|
|
154
|
+
};
|
|
155
|
+
const schedulePoll = (delayMs) => {
|
|
156
|
+
if (!active) return;
|
|
157
|
+
clearPollTimer();
|
|
158
|
+
pollTimer = setTimeout(() => {
|
|
159
|
+
pollTimer = null;
|
|
160
|
+
connect();
|
|
161
|
+
}, delayMs);
|
|
162
|
+
};
|
|
163
|
+
const connect = async () => {
|
|
164
|
+
if (!active || connectInFlight) return;
|
|
165
|
+
connectInFlight = true;
|
|
166
|
+
abortController?.abort();
|
|
167
|
+
abortController = new AbortController();
|
|
168
|
+
try {
|
|
169
|
+
if (cursor < 0) cursor = await fetchLatestSequence(abortController.signal);
|
|
170
|
+
const url = new URL("/api/internal/events/stream", dashboardUrl);
|
|
171
|
+
url.searchParams.set("since", String(cursor));
|
|
172
|
+
const response = await fetchImpl(url, {
|
|
173
|
+
signal: abortController.signal,
|
|
174
|
+
headers: {
|
|
175
|
+
[INTERNAL_TOKEN_HEADER]: options.token ?? ensureInternalTokenSync(),
|
|
176
|
+
origin: dashboardUrl
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
if (!response.ok) throw new Error(`HTTP ${response.status}`);
|
|
180
|
+
if (!response.body) throw new Error("missing response body");
|
|
181
|
+
reconnectMs = baseRetryMs;
|
|
182
|
+
const reader = response.body.getReader();
|
|
183
|
+
const decoder = new TextDecoder();
|
|
184
|
+
let buffer = "";
|
|
185
|
+
while (active) {
|
|
186
|
+
const { value, done } = await reader.read();
|
|
187
|
+
if (done) break;
|
|
188
|
+
buffer += decoder.decode(value, { stream: true });
|
|
189
|
+
let frameEnd = buffer.indexOf("\n\n");
|
|
190
|
+
while (frameEnd >= 0) {
|
|
191
|
+
const frame = buffer.slice(0, frameEnd);
|
|
192
|
+
buffer = buffer.slice(frameEnd + 2);
|
|
193
|
+
const event = parseStreamFrame(frame);
|
|
194
|
+
if (event) {
|
|
195
|
+
fn(event);
|
|
196
|
+
if (event.sequence > cursor) cursor = event.sequence;
|
|
197
|
+
}
|
|
198
|
+
frameEnd = buffer.indexOf("\n\n");
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
if (!active) return;
|
|
202
|
+
schedulePoll(debounceMs);
|
|
203
|
+
} catch (error) {
|
|
204
|
+
if (!active) return;
|
|
205
|
+
warn(`[deacon-event-client] failed to subscribe to events: ${error instanceof Error ? error.message : String(error)}; retrying in ${reconnectMs}ms`);
|
|
206
|
+
schedulePoll(reconnectMs);
|
|
207
|
+
reconnectMs = Math.min(reconnectMs * 2, maxRetryMs);
|
|
208
|
+
} finally {
|
|
209
|
+
connectInFlight = false;
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
connect();
|
|
213
|
+
return () => {
|
|
214
|
+
active = false;
|
|
215
|
+
clearPollTimer();
|
|
216
|
+
abortController?.abort();
|
|
217
|
+
abortController = null;
|
|
218
|
+
};
|
|
219
|
+
},
|
|
220
|
+
flushNow,
|
|
221
|
+
bufferedCount: () => queue.length
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
var DEFAULT_BATCH_SIZE, DEFAULT_DEBOUNCE_MS, DEFAULT_MAX_BUFFER_SIZE, DEFAULT_BASE_RETRY_MS, DEFAULT_MAX_RETRY_MS, DEFAULT_APPEND_ONCE_TIMEOUT_MS;
|
|
225
|
+
var init_deacon_event_client = __esmMin((() => {
|
|
226
|
+
init_internal_token();
|
|
227
|
+
DEFAULT_BATCH_SIZE = 50;
|
|
228
|
+
DEFAULT_DEBOUNCE_MS = 250;
|
|
229
|
+
DEFAULT_MAX_BUFFER_SIZE = 1e3;
|
|
230
|
+
DEFAULT_BASE_RETRY_MS = 1e3;
|
|
231
|
+
DEFAULT_MAX_RETRY_MS = 3e4;
|
|
232
|
+
DEFAULT_APPEND_ONCE_TIMEOUT_MS = 1e4;
|
|
233
|
+
}));
|
|
234
|
+
//#endregion
|
|
235
|
+
export { init_deacon_event_client as n, createDeaconEventClient as t };
|
|
236
|
+
|
|
237
|
+
//# sourceMappingURL=deacon-event-client-C93rvOT7.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Jr as CONFIG_FILE, hi as init_paths } from "./config-yaml-BSCqwmX0.js";
|
|
2
2
|
import { t as require_toml } from "./toml-CeLDATih.js";
|
|
3
|
-
import { n as init_build_info, t as getBuildInfo } from "./build-info-
|
|
3
|
+
import { n as init_build_info, t as getBuildInfo } from "./build-info-CJg813Hm.js";
|
|
4
4
|
import { dirname, join, relative, resolve, sep } from "node:path";
|
|
5
5
|
import { homedir } from "node:os";
|
|
6
6
|
import { appendFileSync, existsSync, mkdirSync, readFileSync, statSync } from "node:fs";
|
|
@@ -13,6 +13,7 @@ function getDashboardIdentity() {
|
|
|
13
13
|
return {
|
|
14
14
|
repoRoot: resolve(cwd()),
|
|
15
15
|
mode: process.env.OVERDECK_DISABLE_DEACON === "1" ? "peer" : "primary",
|
|
16
|
+
pid: process.pid,
|
|
16
17
|
...getBuildInfo()
|
|
17
18
|
};
|
|
18
19
|
}
|
|
@@ -78,4 +79,4 @@ function recordDeaconNudge(nudge) {
|
|
|
78
79
|
//#endregion
|
|
79
80
|
export { shouldRefuseHostDashboardPort as a, readHostDashboardApiPort as i, getDashboardIdentity as n, isNonPrimaryCheckoutRoot as r, recordDeaconNudge as t };
|
|
80
81
|
|
|
81
|
-
//# sourceMappingURL=deacon-nudge-log-
|
|
82
|
+
//# sourceMappingURL=deacon-nudge-log-BND_97Wo.js.map
|
package/server/{deacon-pending-lifecycle-B-Io84AP.js → deacon-pending-lifecycle-CD3YsiQK.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as settlePendingLifecycleClaim, t as claimPendingLifecycleFile } from "./pending-lifecycle-claim-
|
|
1
|
+
import { n as settlePendingLifecycleClaim, t as claimPendingLifecycleFile } from "./pending-lifecycle-claim-DJlA1rTR.js";
|
|
2
2
|
//#region ../../lib/cloister/deacon-pending-lifecycle.ts
|
|
3
3
|
async function processPendingLifecycleForPatrol(pendingFile) {
|
|
4
4
|
const claim = await claimPendingLifecycleFile(pendingFile);
|
|
@@ -18,7 +18,7 @@ async function processPendingLifecycleForPatrol(pendingFile) {
|
|
|
18
18
|
}
|
|
19
19
|
console.log(`[deacon] Processing pending post-merge lifecycle for ${pending.issueId} (age: ${Math.round(age / 1e3)}s)`);
|
|
20
20
|
try {
|
|
21
|
-
const { postMergeLifecycle } = await import("./merge-agent-
|
|
21
|
+
const { postMergeLifecycle } = await import("./merge-agent-DWd0KfiS.js");
|
|
22
22
|
await postMergeLifecycle(pending.issueId, pending.projectPath, pending.sourceBranch, { skipDeploy: true });
|
|
23
23
|
await settlePendingLifecycleClaim(claim, pending.issueId, true);
|
|
24
24
|
return `Processed pending post-merge lifecycle for ${pending.issueId}`;
|
|
@@ -30,4 +30,4 @@ async function processPendingLifecycleForPatrol(pendingFile) {
|
|
|
30
30
|
//#endregion
|
|
31
31
|
export { processPendingLifecycleForPatrol };
|
|
32
32
|
|
|
33
|
-
//# sourceMappingURL=deacon-pending-lifecycle-
|
|
33
|
+
//# sourceMappingURL=deacon-pending-lifecycle-CD3YsiQK.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { D as resolveTieredExecutionEnabled,
|
|
2
|
-
import { a as updateIssueRecordForWorkspace, i as updateIssueRecord, r as init_record_update } from "./record-update-
|
|
3
|
-
import {
|
|
4
|
-
import { C as setReviewStatusSync, d as getReviewStatusSync, p as init_review_status } from "./review-status-
|
|
5
|
-
import { A as spawnTierSupervisor, D as init_tier_supervisor, Dt as
|
|
6
|
-
import {
|
|
7
|
-
import { c as init_control_settings, d as isDeaconGloballyPausedSync } from "./control-settings-
|
|
8
|
-
import { i as createActiveSlice, l as init_dag, n as blockingParentCount, o as getDispatchableItems } from "./dag-
|
|
9
|
-
import { a as loadCloisterConfigSync, r as init_config } from "./config-
|
|
10
|
-
import { r as init_swarm_readiness, t as analyzeSwarmReadiness } from "./swarm-readiness-
|
|
11
|
-
import {
|
|
12
|
-
import { join } from "node:path";
|
|
1
|
+
import { D as resolveTieredExecutionEnabled, K as getProjectConfigFromWorkspacePath, Nt as isStatePlaneOnlyStatus, Q as readIssueRecordSync, Sn as resolveProjectFromIssueSync, T as init_tier_table, W as getIssueRecordPathForWorkspace, Z as readIssueRecordForWorkspaceSync, cn as init_projects, et as resolveProjectForIssue, f as loadConfigSync, fn as listProjectsSync, kt as init_state_plane, nn as getProjectSync, q as init_record, t as init_config_yaml } from "./config-yaml-BSCqwmX0.js";
|
|
2
|
+
import { a as updateIssueRecordForWorkspace, i as updateIssueRecord, r as init_record_update } from "./record-update-CZh46a2f.js";
|
|
3
|
+
import { C as init_tmux, T as isPaneDead, V as sessionExists, j as listSessionNames, k as listPaneValues, r as capturePane } from "./tmux-CImZaX4q.js";
|
|
4
|
+
import { C as setReviewStatusSync, d as getReviewStatusSync, p as init_review_status } from "./review-status-CKLk5aZ-.js";
|
|
5
|
+
import { A as spawnTierSupervisor, Bt as tryReserveSwarmSlot, D as init_tier_supervisor, Dt as init_termination, E as deliverCommitForReview, Et as spawnRun, Ft as init_concurrency, Ht as getCachedMemoryVerdict, I as init_slot_reconcile, L as listSlotAssignments, Lt as releaseSwarmSlot, M as broadcastCommit, N as init_tier_feed, O as loadPrdDraft, Ot as stopAgent, Pt as getConcurrencyLimits, R as reconcileSlotState, U as detectPendingOperatorDecision, Ut as init_memory_verdict_cache, W as init_pending_decision_gate, _r as getAgentResumeGateBlockReason, ai as init_agent_runtime, bn as resolveTier, br as getAgentStateSync, dt as init_messaging, ft as messageAgent, gr as getAgentDir, hr as decideResumeGate, ii as getAgentRuntimeSnapshot, j as supervisorAgentId, jt as countRunningSwarmSlotsForIssue, k as shouldSupervise, ln as defaultRunWorkspace, un as init_spawn_prep, wt as init_spawn, xr as init_agent_state, yn as init_resolve_tier } from "./queries-DVpl1vsU.js";
|
|
6
|
+
import { C as init_specs, S as findSpecByIssue, b as subItemsOf, f as readPlanSync, i as findPlanSync, n as applyStatusOverrides, s as init_io, y as init_types } from "./io-mxOWMZ7I.js";
|
|
7
|
+
import { c as init_control_settings, d as isDeaconGloballyPausedSync } from "./control-settings-DVf6pKyv.js";
|
|
8
|
+
import { i as createActiveSlice, l as init_dag, n as blockingParentCount, o as getDispatchableItems } from "./dag-BYiFMqpU.js";
|
|
9
|
+
import { a as loadCloisterConfigSync, r as init_config } from "./config-DvM8jtQK.js";
|
|
10
|
+
import { r as init_swarm_readiness, t as analyzeSwarmReadiness } from "./swarm-readiness-vTw1kqGa.js";
|
|
11
|
+
import { i as recordRecoveryFailure, r as init_recovery_trip, t as acknowledgeRecoveryTrip } from "./recovery-trip-CSNWSLDn.js";
|
|
12
|
+
import { basename, join } from "node:path";
|
|
13
13
|
import { Effect } from "effect";
|
|
14
14
|
import { existsSync, readdirSync } from "fs";
|
|
15
15
|
import { join as join$1 } from "path";
|
|
@@ -488,7 +488,7 @@ async function defaultRequestIssueReview(issueId, workspacePath) {
|
|
|
488
488
|
autoRequeueCount: 0,
|
|
489
489
|
reviewRequestedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
490
490
|
});
|
|
491
|
-
const { spawnReviewRoleForIssue } = await import("./review-agent-
|
|
491
|
+
const { spawnReviewRoleForIssue } = await import("./review-agent-CD3RQ-tc.js");
|
|
492
492
|
return Effect.runPromise(spawnReviewRoleForIssue({
|
|
493
493
|
issueId,
|
|
494
494
|
workspace: workspacePath,
|
|
@@ -707,6 +707,7 @@ async function fireTieredCommitHooks(options, deps = defaultDeps$1) {
|
|
|
707
707
|
}
|
|
708
708
|
//#endregion
|
|
709
709
|
//#region ../../lib/cloister/redrive-gate.ts
|
|
710
|
+
init_recovery_trip();
|
|
710
711
|
/**
|
|
711
712
|
* PAN-2543 shared autonomous re-drive gate.
|
|
712
713
|
*
|
|
@@ -715,6 +716,7 @@ async function fireTieredCommitHooks(options, deps = defaultDeps$1) {
|
|
|
715
716
|
* Callers still reserve their role-specific concurrency slot after admission.
|
|
716
717
|
*/
|
|
717
718
|
init_agent_state();
|
|
719
|
+
init_pending_decision_gate();
|
|
718
720
|
function decideAutonomousRedrive(state, context = {}) {
|
|
719
721
|
const gateDecision = decideResumeGate(getAgentResumeGateBlockReason(state), "autonomous", context);
|
|
720
722
|
if (gateDecision.decision !== "proceed") return {
|
|
@@ -732,11 +734,20 @@ function decideAutonomousRedrive(state, context = {}) {
|
|
|
732
734
|
gateDecision
|
|
733
735
|
};
|
|
734
736
|
}
|
|
735
|
-
function decideAgentAutonomousRedrive(state, agentDir, owesRework) {
|
|
736
|
-
|
|
737
|
+
async function decideAgentAutonomousRedrive(state, agentDir, owesRework, deps = {}) {
|
|
738
|
+
const admission = decideAutonomousRedrive(state, {
|
|
737
739
|
hasCompletedHandoff: existsSync$1(join(agentDir, "completed")) || existsSync$1(join(agentDir, "completed.processed")),
|
|
738
740
|
owesRework
|
|
739
741
|
});
|
|
742
|
+
if (admission.decision === "defer") return admission;
|
|
743
|
+
const agentId = basename(agentDir);
|
|
744
|
+
const pendingDecision = await (deps.detectPendingOperatorDecision ?? detectPendingOperatorDecision)(agentId);
|
|
745
|
+
if (pendingDecision) return {
|
|
746
|
+
decision: "defer",
|
|
747
|
+
reason: `agent is waiting on an operator decision (${pendingDecision.reason})`,
|
|
748
|
+
needsYou: true
|
|
749
|
+
};
|
|
750
|
+
return admission;
|
|
740
751
|
}
|
|
741
752
|
//#endregion
|
|
742
753
|
//#region ../../lib/cloister/swarm-failed-slot.ts
|
|
@@ -776,16 +787,26 @@ async function archiveFailedSwarmSlot(issueId, workspacePath, slot, deps, now =
|
|
|
776
787
|
async function requeueFailedSwarmSlots(issueId, workspacePath, classified, doc, reconciled, deps, blockedSlotIndexes = /* @__PURE__ */ new Set()) {
|
|
777
788
|
let nextDoc = doc;
|
|
778
789
|
const actions = [];
|
|
790
|
+
const decideAgentRedrive = deps.decideAgentAutonomousRedrive ?? decideAgentAutonomousRedrive;
|
|
791
|
+
const decideUnownedRedrive = deps.decideAutonomousRedrive ?? decideAutonomousRedrive;
|
|
792
|
+
const recordFailure = deps.recordRecoveryFailure ?? recordRecoveryFailure;
|
|
793
|
+
const acknowledgeTrip = deps.acknowledgeRecoveryTrip ?? acknowledgeRecoveryTrip;
|
|
779
794
|
for (const slot of classified.filter((candidate) => candidate.lifecycle === "failed")) {
|
|
780
795
|
if (blockedSlotIndexes.has(slot.slotIndex)) {
|
|
781
796
|
actions.push(`[swarm] skipped requeue slot ${slot.slotIndex} (item ${slot.itemId}) for ${issueId}: failed-merge block — awaiting operator recovery`);
|
|
782
797
|
continue;
|
|
783
798
|
}
|
|
784
|
-
const
|
|
799
|
+
const pendingDecisionRecoveryPath = "swarm-slot-pending-operator-decision";
|
|
800
|
+
const pendingDecisionGeneration = `${slot.itemId}:${slot.agentId ?? `slot-${slot.slotIndex}`}`;
|
|
801
|
+
const admission = slot.agentId ? await decideAgentRedrive(getAgentStateSync(slot.agentId) ?? {}, getAgentDir(slot.agentId), true) : decideUnownedRedrive({}, { owesRework: true });
|
|
785
802
|
if (admission.decision === "defer") {
|
|
803
|
+
if (admission.needsYou) {
|
|
804
|
+
if ((await recordFailure(workspacePath, issueId, pendingDecisionRecoveryPath, pendingDecisionGeneration, 1)).emitNeedsYou) actions.push(`[swarm] needs-you ${issueId}: failed slot ${slot.slotIndex} ${admission.reason}`);
|
|
805
|
+
}
|
|
786
806
|
actions.push(`[swarm] deferred failed slot ${slot.slotIndex}: ${admission.reason}`);
|
|
787
807
|
continue;
|
|
788
808
|
}
|
|
809
|
+
await acknowledgeTrip(workspacePath, issueId, pendingDecisionRecoveryPath, pendingDecisionGeneration);
|
|
789
810
|
const attempt = await archiveFailedSwarmSlot(issueId, workspacePath, slot, deps);
|
|
790
811
|
await deps.applyTaskOperationToPlanFile(issueId, {
|
|
791
812
|
type: "unblock",
|
|
@@ -806,7 +827,7 @@ async function requeueFailedSwarmSlots(issueId, workspacePath, classified, doc,
|
|
|
806
827
|
}
|
|
807
828
|
};
|
|
808
829
|
actions.push(`[swarm] archived failed slot ${slot.slotIndex} (item ${slot.itemId}) for ${issueId}`);
|
|
809
|
-
const failure = await
|
|
830
|
+
const failure = await recordFailure(workspacePath, issueId, "swarm-slot-requeue", slot.itemId);
|
|
810
831
|
if (failure.emitNeedsYou) actions.push(`[swarm] needs-you ${issueId}: slot item ${slot.itemId} failed ${failure.trip.tripCount} times`);
|
|
811
832
|
}
|
|
812
833
|
return {
|
|
@@ -1473,4 +1494,4 @@ function registeredSlotCapacityAvailable(issueId, selectedCount, liveSlotCount =
|
|
|
1473
1494
|
//#endregion
|
|
1474
1495
|
export { gcMergedSlots as _, getFailedMergeBlock as a, resolveSwarmPolicy 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, gcOrphanedSlots as v, listFeatureWorkspaces as y };
|
|
1475
1496
|
|
|
1476
|
-
//# sourceMappingURL=deacon-swarm-
|
|
1497
|
+
//# sourceMappingURL=deacon-swarm-rqrl4TMs.js.map
|
package/server/deacon.js
CHANGED
|
@@ -1,216 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { d as getReviewStatusSync, p as init_review_status } from "./review-status-
|
|
4
|
-
import { b as init_agents,
|
|
5
|
-
import { r as setCloisterEventStoreProvider, t as getCloisterService } from "./service-
|
|
6
|
-
import { i as ensureInternalTokenSync, s as init_internal_token
|
|
7
|
-
import { F as setAgentStoppedNotifier, I as setMergeReadyNotifier, M as runPatrol, P as setAgentStatusChangedNotifier, j as resetPatrolHeartbeatForStartup } from "./deacon-
|
|
8
|
-
import { t as emitReviewStatusChanged } from "./review-status-emit-
|
|
1
|
+
import { St as init_auto_commit, bt as flushAllPendingAutoCommits } from "./config-yaml-BSCqwmX0.js";
|
|
2
|
+
import { c as init_activity_logger, l as setActivityEventStoreProvider } from "./activity-logger-Co5qljIj.js";
|
|
3
|
+
import { d as getReviewStatusSync, p as init_review_status } from "./review-status-CKLk5aZ-.js";
|
|
4
|
+
import { b as init_agents, vr as getAgentState } from "./queries-DVpl1vsU.js";
|
|
5
|
+
import { r as setCloisterEventStoreProvider, t as getCloisterService } from "./service-BFFkGsG4.js";
|
|
6
|
+
import { i as ensureInternalTokenSync, s as init_internal_token } from "./internal-token-AvXePaQT.js";
|
|
7
|
+
import { F as setAgentStoppedNotifier, I as setMergeReadyNotifier, M as runPatrol, P as setAgentStatusChangedNotifier, j as resetPatrolHeartbeatForStartup } from "./deacon-HdEh0Esp.js";
|
|
8
|
+
import { t as emitReviewStatusChanged } from "./review-status-emit-CJ7UmEVU.js";
|
|
9
|
+
import { n as init_deacon_event_client, t as createDeaconEventClient } from "./deacon-event-client-C93rvOT7.js";
|
|
9
10
|
import { Effect } from "effect";
|
|
10
11
|
import { randomUUID } from "node:crypto";
|
|
11
|
-
//#region
|
|
12
|
+
//#region deacon-main.ts
|
|
12
13
|
init_activity_logger();
|
|
13
14
|
init_agents();
|
|
14
|
-
|
|
15
|
-
const DEFAULT_BATCH_SIZE = 50;
|
|
16
|
-
const DEFAULT_DEBOUNCE_MS = 250;
|
|
17
|
-
const DEFAULT_MAX_BUFFER_SIZE = 1e3;
|
|
18
|
-
const DEFAULT_BASE_RETRY_MS = 1e3;
|
|
19
|
-
const DEFAULT_MAX_RETRY_MS = 3e4;
|
|
20
|
-
function internalDashboardOrigin() {
|
|
21
|
-
const port = Number.parseInt(process.env["API_PORT"] ?? process.env["PORT"] ?? "3011", 10);
|
|
22
|
-
return process.env["OVERDECK_INTERNAL_DASHBOARD_URL"] ?? `http://127.0.0.1:${port}`;
|
|
23
|
-
}
|
|
24
|
-
function createDeaconEventClient(options = {}) {
|
|
25
|
-
const dashboardUrl = options.dashboardUrl ?? internalDashboardOrigin();
|
|
26
|
-
const fetchImpl = options.fetchImpl ?? fetch;
|
|
27
|
-
const warn = options.warn ?? ((message) => console.warn(message));
|
|
28
|
-
const batchSize = options.batchSize ?? DEFAULT_BATCH_SIZE;
|
|
29
|
-
const debounceMs = options.debounceMs ?? DEFAULT_DEBOUNCE_MS;
|
|
30
|
-
const maxBufferSize = options.maxBufferSize ?? DEFAULT_MAX_BUFFER_SIZE;
|
|
31
|
-
const baseRetryMs = options.baseRetryMs ?? DEFAULT_BASE_RETRY_MS;
|
|
32
|
-
const maxRetryMs = options.maxRetryMs ?? DEFAULT_MAX_RETRY_MS;
|
|
33
|
-
const queue = [];
|
|
34
|
-
let timer = null;
|
|
35
|
-
let inFlight = false;
|
|
36
|
-
let retryMs = baseRetryMs;
|
|
37
|
-
let dropped = 0;
|
|
38
|
-
const schedule = (delayMs) => {
|
|
39
|
-
if (timer) clearTimeout(timer);
|
|
40
|
-
timer = setTimeout(() => {
|
|
41
|
-
timer = null;
|
|
42
|
-
flushNow();
|
|
43
|
-
}, delayMs);
|
|
44
|
-
};
|
|
45
|
-
const enqueue = (event) => {
|
|
46
|
-
while (queue.length >= maxBufferSize) {
|
|
47
|
-
queue.shift();
|
|
48
|
-
dropped++;
|
|
49
|
-
}
|
|
50
|
-
if (dropped > 0) {
|
|
51
|
-
warn(`[deacon-event-client] buffer overflow: dropped ${dropped} oldest event${dropped === 1 ? "" : "s"}`);
|
|
52
|
-
dropped = 0;
|
|
53
|
-
}
|
|
54
|
-
queue.push(event);
|
|
55
|
-
if (queue.length >= batchSize) schedule(0);
|
|
56
|
-
else if (!timer) schedule(debounceMs);
|
|
57
|
-
};
|
|
58
|
-
async function flushNow() {
|
|
59
|
-
if (inFlight || queue.length === 0) return;
|
|
60
|
-
inFlight = true;
|
|
61
|
-
const batch = queue.slice(0, batchSize);
|
|
62
|
-
try {
|
|
63
|
-
const token = options.token ?? ensureInternalTokenSync();
|
|
64
|
-
const response = await fetchImpl(new URL("/api/internal/events", dashboardUrl), {
|
|
65
|
-
method: "POST",
|
|
66
|
-
headers: {
|
|
67
|
-
"content-type": "application/json",
|
|
68
|
-
origin: dashboardUrl,
|
|
69
|
-
[INTERNAL_TOKEN_HEADER]: token
|
|
70
|
-
},
|
|
71
|
-
body: JSON.stringify({ events: batch })
|
|
72
|
-
});
|
|
73
|
-
if (!response.ok) throw new Error(`HTTP ${response.status}`);
|
|
74
|
-
queue.splice(0, batch.length);
|
|
75
|
-
retryMs = baseRetryMs;
|
|
76
|
-
if (queue.length > 0) schedule(queue.length >= batchSize ? 0 : debounceMs);
|
|
77
|
-
} catch (error) {
|
|
78
|
-
warn(`[deacon-event-client] failed to flush events: ${error instanceof Error ? error.message : String(error)}; retrying in ${retryMs}ms`);
|
|
79
|
-
schedule(retryMs);
|
|
80
|
-
retryMs = Math.min(retryMs * 2, maxRetryMs);
|
|
81
|
-
} finally {
|
|
82
|
-
inFlight = false;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
async function fetchJson(url, signal) {
|
|
86
|
-
const token = options.token ?? ensureInternalTokenSync();
|
|
87
|
-
const response = await fetchImpl(url, {
|
|
88
|
-
signal,
|
|
89
|
-
headers: {
|
|
90
|
-
[INTERNAL_TOKEN_HEADER]: token,
|
|
91
|
-
origin: dashboardUrl
|
|
92
|
-
}
|
|
93
|
-
});
|
|
94
|
-
if (!response.ok) throw new Error(`HTTP ${response.status}`);
|
|
95
|
-
return response.json();
|
|
96
|
-
}
|
|
97
|
-
async function fetchLatestSequence(signal) {
|
|
98
|
-
const body = await fetchJson(new URL("/api/internal/events/latest", dashboardUrl), signal);
|
|
99
|
-
return typeof body.latestSequence === "number" && Number.isFinite(body.latestSequence) && body.latestSequence >= 0 ? body.latestSequence : 0;
|
|
100
|
-
}
|
|
101
|
-
function parseStreamFrame(frame) {
|
|
102
|
-
const dataLines = [];
|
|
103
|
-
for (const line of frame.split(/\r?\n/)) {
|
|
104
|
-
if (!line.startsWith("data:")) continue;
|
|
105
|
-
dataLines.push(line.slice(5).replace(/^\s/, ""));
|
|
106
|
-
}
|
|
107
|
-
if (dataLines.length === 0) return null;
|
|
108
|
-
try {
|
|
109
|
-
const parsed = JSON.parse(dataLines.join("\n"));
|
|
110
|
-
if (!parsed || typeof parsed !== "object") return null;
|
|
111
|
-
const record = parsed;
|
|
112
|
-
if (typeof record.sequence !== "number" || typeof record.type !== "string" || typeof record.timestamp !== "string") return null;
|
|
113
|
-
return {
|
|
114
|
-
sequence: record.sequence,
|
|
115
|
-
type: record.type,
|
|
116
|
-
timestamp: record.timestamp,
|
|
117
|
-
payload: record.payload
|
|
118
|
-
};
|
|
119
|
-
} catch {
|
|
120
|
-
return null;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
return {
|
|
124
|
-
append(event) {
|
|
125
|
-
enqueue(event);
|
|
126
|
-
return 0;
|
|
127
|
-
},
|
|
128
|
-
appendAsync(event) {
|
|
129
|
-
enqueue(event);
|
|
130
|
-
return Promise.resolve(0);
|
|
131
|
-
},
|
|
132
|
-
subscribe(fn) {
|
|
133
|
-
let active = true;
|
|
134
|
-
let cursor = -1;
|
|
135
|
-
let pollTimer = null;
|
|
136
|
-
let connectInFlight = false;
|
|
137
|
-
let reconnectMs = baseRetryMs;
|
|
138
|
-
let abortController = null;
|
|
139
|
-
const clearPollTimer = () => {
|
|
140
|
-
if (pollTimer) clearTimeout(pollTimer);
|
|
141
|
-
pollTimer = null;
|
|
142
|
-
};
|
|
143
|
-
const schedulePoll = (delayMs) => {
|
|
144
|
-
if (!active) return;
|
|
145
|
-
clearPollTimer();
|
|
146
|
-
pollTimer = setTimeout(() => {
|
|
147
|
-
pollTimer = null;
|
|
148
|
-
connect();
|
|
149
|
-
}, delayMs);
|
|
150
|
-
};
|
|
151
|
-
const connect = async () => {
|
|
152
|
-
if (!active || connectInFlight) return;
|
|
153
|
-
connectInFlight = true;
|
|
154
|
-
abortController?.abort();
|
|
155
|
-
abortController = new AbortController();
|
|
156
|
-
try {
|
|
157
|
-
if (cursor < 0) cursor = await fetchLatestSequence(abortController.signal);
|
|
158
|
-
const url = new URL("/api/internal/events/stream", dashboardUrl);
|
|
159
|
-
url.searchParams.set("since", String(cursor));
|
|
160
|
-
const response = await fetchImpl(url, {
|
|
161
|
-
signal: abortController.signal,
|
|
162
|
-
headers: {
|
|
163
|
-
[INTERNAL_TOKEN_HEADER]: options.token ?? ensureInternalTokenSync(),
|
|
164
|
-
origin: dashboardUrl
|
|
165
|
-
}
|
|
166
|
-
});
|
|
167
|
-
if (!response.ok) throw new Error(`HTTP ${response.status}`);
|
|
168
|
-
if (!response.body) throw new Error("missing response body");
|
|
169
|
-
reconnectMs = baseRetryMs;
|
|
170
|
-
const reader = response.body.getReader();
|
|
171
|
-
const decoder = new TextDecoder();
|
|
172
|
-
let buffer = "";
|
|
173
|
-
while (active) {
|
|
174
|
-
const { value, done } = await reader.read();
|
|
175
|
-
if (done) break;
|
|
176
|
-
buffer += decoder.decode(value, { stream: true });
|
|
177
|
-
let frameEnd = buffer.indexOf("\n\n");
|
|
178
|
-
while (frameEnd >= 0) {
|
|
179
|
-
const frame = buffer.slice(0, frameEnd);
|
|
180
|
-
buffer = buffer.slice(frameEnd + 2);
|
|
181
|
-
const event = parseStreamFrame(frame);
|
|
182
|
-
if (event) {
|
|
183
|
-
fn(event);
|
|
184
|
-
if (event.sequence > cursor) cursor = event.sequence;
|
|
185
|
-
}
|
|
186
|
-
frameEnd = buffer.indexOf("\n\n");
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
if (!active) return;
|
|
190
|
-
schedulePoll(debounceMs);
|
|
191
|
-
} catch (error) {
|
|
192
|
-
if (!active) return;
|
|
193
|
-
warn(`[deacon-event-client] failed to subscribe to events: ${error instanceof Error ? error.message : String(error)}; retrying in ${reconnectMs}ms`);
|
|
194
|
-
schedulePoll(reconnectMs);
|
|
195
|
-
reconnectMs = Math.min(reconnectMs * 2, maxRetryMs);
|
|
196
|
-
} finally {
|
|
197
|
-
connectInFlight = false;
|
|
198
|
-
}
|
|
199
|
-
};
|
|
200
|
-
connect();
|
|
201
|
-
return () => {
|
|
202
|
-
active = false;
|
|
203
|
-
clearPollTimer();
|
|
204
|
-
abortController?.abort();
|
|
205
|
-
abortController = null;
|
|
206
|
-
};
|
|
207
|
-
},
|
|
208
|
-
flushNow,
|
|
209
|
-
bufferedCount: () => queue.length
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
//#endregion
|
|
213
|
-
//#region deacon-main.ts
|
|
15
|
+
init_deacon_event_client();
|
|
214
16
|
init_review_status();
|
|
215
17
|
init_internal_token();
|
|
216
18
|
init_auto_commit();
|
|
@@ -315,7 +117,7 @@ async function shutdown(signal) {
|
|
|
315
117
|
console.error("[deacon-child] Cloister stop failed:", err);
|
|
316
118
|
}
|
|
317
119
|
try {
|
|
318
|
-
const { killAllGateProcessGroups } = await import("./validation-
|
|
120
|
+
const { killAllGateProcessGroups } = await import("./validation-5G_wQtea.js");
|
|
319
121
|
const reaped = killAllGateProcessGroups();
|
|
320
122
|
if (reaped > 0) console.log(`[deacon-child] reaped ${reaped} in-flight gate process group(s)`);
|
|
321
123
|
} catch (err) {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Sn as resolveProjectFromIssueSync, cn as init_projects } from "./config-yaml-BSCqwmX0.js";
|
|
2
|
+
import { i as recordRecoveryFailure, r as init_recovery_trip } from "./recovery-trip-CSNWSLDn.js";
|
|
3
3
|
//#region ../../lib/cloister/dead-end-trip.ts
|
|
4
4
|
init_projects();
|
|
5
|
+
init_recovery_trip();
|
|
5
6
|
async function recordDeadEndNeedsYou(issueId, recoveryPath, generation, message) {
|
|
6
7
|
const project = resolveProjectFromIssueSync(issueId);
|
|
7
8
|
if (!project) return void 0;
|
|
@@ -10,4 +11,4 @@ async function recordDeadEndNeedsYou(issueId, recoveryPath, generation, message)
|
|
|
10
11
|
//#endregion
|
|
11
12
|
export { recordDeadEndNeedsYou as t };
|
|
12
13
|
|
|
13
|
-
//# sourceMappingURL=dead-end-trip-
|
|
14
|
+
//# sourceMappingURL=dead-end-trip-DSF23CLX.js.map
|