@overdeck/desktop 0.47.1 → 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-Cd7ZGZCq.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-DieFp3qi.js → advancing-selfheal-8AR68Asf.js} +6 -6
- package/server/{agent-gc-BMcgTDl7.js → agent-gc-BmYeT6eH.js} +5 -5
- package/server/agent-state-Dq3s84-P.js +3 -0
- package/server/{agent-state-service-DFO6qvHp.js → agent-state-service-DK1Vay1E.js} +1 -1
- package/server/{agent-state-service-BOzQhLjU.js → agent-state-service-rjnzpHDx.js} +6 -6
- package/server/{agent-state-source-Ca_zCaII.js → agent-state-source-Ds968-j6.js} +1 -1
- package/server/{agents-CtACUuVG.js → agents-Dls7tfJH.js} +5 -5
- package/server/agents-IPSa5kzn.js +3 -0
- package/server/{archive-planning-Binfb99i.js → archive-planning-Cq7cyinS.js} +51 -24
- package/server/archive-planning-MbkGCBIY.js +2 -0
- package/server/{artifact-index-jobs-Jn7BGOtV.js → artifact-index-jobs-Dj_8kpTd.js} +3 -3
- package/server/{assemble-DsqK9OAq.js → assemble-BTCmbcfH.js} +20 -13
- package/server/{auto-spawn-consent-BooqhC3L.js → auto-spawn-consent-lXqRJ1Dr.js} +304 -121
- package/server/{backlog-auto-trigger-BADGPxov.js → backlog-auto-trigger-Dn-amzt6.js} +3 -3
- package/server/{behavior-B7biGtFT.js → behavior-DIMQMRzs.js} +2 -2
- package/server/{boot-reconciled-stop-events-bQUzU8ns.js → boot-reconciled-stop-events-D6SeUTIr.js} +1 -1
- package/server/{bridge-pool-patrol-DsPj6F7t.js → bridge-pool-patrol-BEjt-xF3.js} +2 -2
- package/server/{briefing-freshness-CUerZqWd.js → briefing-freshness-3PNmL_p3.js} +2 -2
- package/server/{build-info-D0q_i8WM.js → build-info-CJg813Hm.js} +3 -3
- package/server/{build-info-Du74MKiP.js → build-info-CXyeFsXu.js} +1 -1
- package/server/{checkpoint-manager-Cu-R5Uzg.js → checkpoint-manager-9t7G5c1V.js} +1 -1
- package/server/{checkpoint-manager-R5tnaxEY.js → checkpoint-manager-B2G38R3p.js} +3 -3
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-wF84ubZ8.js → checkpoints-CuBgiXO-.js} +1 -1
- package/server/{checkpoints-DYtLu-PB.js → checkpoints-VTZMd4Qm.js} +2 -2
- package/server/{claude-hooks-provision-DXI3Wqlm.js → claude-hooks-provision-55SyQaPz.js} +2 -2
- package/server/{claude-hooks-provision-UKxCeOyj.js → claude-hooks-provision-CEUT-CZd.js} +1 -1
- package/server/{claude-permissions-DYVLnX9t.js → claude-permissions-Cn0dIu2i.js} +2 -2
- package/server/{claude-settings-overlay-DxP2F_gY.js → claude-settings-overlay-B19hdzSA.js} +1 -1
- package/server/{claude-settings-overlay-DsbpIq2d.js → claude-settings-overlay-Yg_ANh81.js} +2 -2
- package/server/{cli-DzRKxxP_.js → cli-C9S84iTy.js} +79 -22
- package/server/cli-M1cwZ__d.js +3 -0
- package/server/{cliproxy-CG4meRFc.js → cliproxy-CJq3KXU6.js} +2 -2
- package/server/{cliproxy-Cwzw39yN.js → cliproxy-DgEZlr7Y.js} +1 -1
- package/server/{close-issue-BX1bATJy.js → close-issue-DPxRddGR.js} +5 -5
- package/server/{closed-issue-reaper-hLt0W86J.js → closed-issue-reaper-C5Zn4GRS.js} +13 -13
- package/server/{closed-issue-reaper-DvnTSN6a.js → closed-issue-reaper-D-2B48Ri.js} +1 -1
- package/server/{codex-rnJN3v3_.js → codex-B3n_rkwn.js} +1 -1
- package/server/{codex-BYwi1uyW.js → codex-CjkD1PJu.js} +6 -6
- package/server/{codex-parser-Poyz29GE.js → codex-parser-DpB1Il-P.js} +2 -2
- package/server/{compaction-continuation-DtMfHN0f.js → compaction-continuation-DZD9ukSE.js} +3 -3
- package/server/{config-R793W0yA.js → config-C5saf4Ja.js} +1 -1
- package/server/{config-CX4vk1CV.js → config-DnLJATZk.js} +2 -2
- package/server/{config-ktAVnp4s.js → config-DvM8jtQK.js} +2 -2
- package/server/{config-yaml-CxdwhAIA.js → config-yaml-BSCqwmX0.js} +11299 -10972
- package/server/{conflict-gate-BSTlwCtF.js → conflict-gate-DXa_L28t.js} +1 -1
- package/server/{conflict-gate-BNv6UolH.js → conflict-gate-WfVqgalf.js} +4 -4
- package/server/{context-layers-DCdaGsRG.js → context-layers-D7UqH9Ab.js} +2 -2
- package/server/{context-layers-DlWsDiRF.js → context-layers-Dpz3Vd6d.js} +3 -3
- package/server/{control-settings-qYYHrIqy.js → control-settings-DVf6pKyv.js} +4 -4
- package/server/{conversation-compaction-BxUKObHb.js → conversation-compaction-5XuH6OBn.js} +1 -1
- package/server/{conversation-compaction-CXQrN3I_.js → conversation-compaction-COrbnX1J.js} +8 -8
- package/server/{conversation-service-CZiUE8Uw.js → conversation-service-BufdtnZF.js} +169 -10
- package/server/{conversation-service-CDnQ3ayN.js → conversation-service-DnUyIiLb.js} +1 -1
- package/server/{conversations-D7lR670u.js → conversations-B4rxz-Wl.js} +17 -10
- package/server/{conversations-DXl5YTf4.js → conversations-D1bwxQMy.js} +1 -1
- package/server/{cost-Aat8HfO_.js → cost-CpFDrJUS.js} +46 -2
- package/server/{cost-CWvN9FP2.js → cost-KLuwKCW9.js} +3 -3
- package/server/{cost-sync-DiUBXwl6.js → cost-sync-cesi9dp8.js} +3 -3
- package/server/{dag-5QlmH0oC.js → dag-BYiFMqpU.js} +2 -2
- package/server/{dangerous-git-ops-DWX6Og8c.js → dangerous-git-ops-BKvd3-Hk.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/{deacon-PW_bg4uL.js → deacon-BbsWw8a6.js} +3 -3
- package/server/{deacon-B1LD5cJU.js → deacon-HdEh0Esp.js} +672 -181
- package/server/deacon-event-client-C93rvOT7.js +237 -0
- package/server/deacon-event-client-Ck5Ei7Mn.js +3 -0
- package/server/{deacon-nudge-log-DPHsO14z.js → deacon-nudge-log-BND_97Wo.js} +4 -3
- package/server/{deacon-pending-lifecycle-2ZflPxgo.js → deacon-pending-lifecycle-CD3YsiQK.js} +3 -3
- package/server/deacon-swarm-DgWADWd_.js +2 -0
- package/server/{deacon-swarm-DwGUgSVp.js → deacon-swarm-rqrl4TMs.js} +39 -18
- package/server/deacon.js +12 -210
- package/server/{dead-end-trip-B06RFIr2.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-BNjeCL8u.js → deploy-patrol-kARAkji4.js} +17 -21
- package/server/{deploy-queue-CKT_Ia9p.js → deploy-queue-Bj0HJT1i.js} +2 -2
- package/server/{deploy-queue-DMMYhFC8.js → deploy-queue-rjTUy1RM.js} +1 -1
- package/server/{deploy-window-DC8lze3d.js → deploy-window-B2IM-9G5.js} +10 -44
- package/server/{deploy-window-D_AimdNN.js → deploy-window-BNFWnA8D.js} +1 -1
- package/server/{dev-supervisor-C4F0vbno.js → dev-supervisor-B1mZYXz4.js} +2 -2
- package/server/{devcontainer-renderer-66sqMQIi.js → devcontainer-renderer-B-o68Z5B.js} +3 -3
- package/server/{dist-C5FT9lTG.js → dist-3W--cGMa.js} +1 -1
- package/server/dist-BR0QtwmS.js +3 -0
- package/server/{dist-src-B-AlGWSl.js → dist-src-C-Vk2jNk.js} +1 -1
- package/server/{docker-BxrFhTZ_.js → docker-DH3jUYg1.js} +1 -1
- package/server/{docker-CoAT8R0J.js → docker-meuLKLzV.js} +27 -20
- package/server/{dod-Bg6wsKTV.js → dod-D7-9dCOD.js} +1 -1
- package/server/{driver-CKVGi51s.js → driver-CmsY2RLl.js} +1 -1
- package/server/{durable-review-pipeline-D_DcfIGP.js → durable-review-pipeline-CStTgOAf.js} +1 -1
- package/server/{durable-review-pipeline-HkAgnx0L.js → durable-review-pipeline-Chq0lzjL.js} +1 -1
- package/server/{ensure-devcontainer-Bg5HJAcO.js → ensure-devcontainer-BE3llBWP.js} +1 -1
- package/server/{ensure-devcontainer-DTxChVuA.js → ensure-devcontainer-BXrY7C2Z.js} +4 -4
- package/server/{esm-shims-CaBWIR7f.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-ChEFB7Jp.js → events-CCkFWa7X.js} +1 -1
- package/server/{events-DhRN-6vM.js → events-zjDQozet.js} +3 -3
- package/server/{factory-BezSPaTd.js → factory-DhavwKVc.js} +5 -5
- package/server/{feature-registry-population-DhswNiXx.js → feature-registry-population-DWGBKyWd.js} +4 -4
- package/server/{feature-registry-storage-CUVNpAso.js → feature-registry-storage-C5DkXmCM.js} +3 -3
- package/server/{features-B2CfNPFw.js → features-CC47YcCX.js} +2 -2
- package/server/{feedback-target-CMrEAoeA.js → feedback-target-D9Tex35_.js} +1 -1
- package/server/{feedback-target-VBr9gKgX.js → feedback-target-DoRCR3L-.js} +8 -8
- package/server/{feedback-writer-CY91ckuw.js → feedback-writer-CTSuA6lw.js} +1 -1
- package/server/{feedback-writer-xpFgU632.js → feedback-writer-DdsBdtNL.js} +5 -5
- package/server/{flywheel-DsICCjTR.js → flywheel-DHWHzaYK.js} +1 -1
- package/server/{flywheel-DQqsSm7P.js → flywheel-DJQa9az8.js} +14 -14
- package/server/{flywheel-CTVY3yCG.js → flywheel-TacAI9MA.js} +21 -17
- package/server/{flywheel-merge-order-C-TI4JGu.js → flywheel-merge-order-D2foPh88.js} +1 -1
- package/server/{flywheel-merge-order-CMGz-imq.js → flywheel-merge-order-DRtex2Dt.js} +7 -7
- package/server/forge-CdlCG9aS.js +3 -0
- package/server/{forge-RTNqJe6a.js → forge-c8LeC-tw.js} +2 -2
- package/server/{from-DxGcivc9.js → from-BogSwvr2.js} +1 -1
- package/server/{fs-lock-Bre3sGoz.js → fs-lock-D_GeJtXl.js} +3 -3
- package/server/{fts-operations-BuTdlZFA.js → fts-operations-DP9R-8Q3.js} +3 -3
- package/server/{git-utils-CedsVume.js → git-utils-C31x1lpE.js} +1 -1
- package/server/{git-utils-DtdoEXJk.js → git-utils-xQ74FoSn.js} +5 -4
- package/server/{github-app-DIE8BkHI.js → github-app-CpQSDlv8.js} +1 -1
- package/server/{github-app-gVnZcP9B.js → github-app-D2QuvZ3j.js} +3 -3
- package/server/{github-client-BrAC6ELh.js → github-client-D9YvJX5D.js} +3 -3
- package/server/{github-client-CBOkvBUl.js → github-client-Tpi3PmKX.js} +1 -1
- package/server/{github-pr-lookup-CgMULTPf.js → github-pr-lookup-DvBMv-IW.js} +2 -2
- package/server/{harness-binary-CnBHpd57.js → harness-binary-BHxWf_sX.js} +7 -6
- package/server/{harness-resolve-BVj6sI8m.js → harness-resolve-bj9WMABA.js} +4 -4
- package/server/{health-events-BBWO_Dh9.js → health-events-bCDPn59Z.js} +2 -2
- package/server/{health-events-Der6bOkm.js → health-events-qo7Ss34U.js} +1 -1
- package/server/{hooks-BOavco-e.js → hooks-Dyxtg5fk.js} +2 -2
- package/server/{hooks-BJNal-bs.js → hooks-X2XHBB2b.js} +1 -1
- package/server/{hume-DBocJFkA.js → hume-DrZEGpqc.js} +2 -2
- package/server/hume-YPsy4UA8.js +3 -0
- package/server/{idle-stack-reaper-DQFh8rDh.js → idle-stack-reaper-CJ1ygW0p.js} +37 -7
- package/server/{idle-stack-reaper-CyGxXOfC.js → idle-stack-reaper-uJGOb-vu.js} +1 -1
- package/server/{in-flight-guard-nXEKoxI7.js → in-flight-guard-CG2Eo-rr.js} +1 -1
- package/server/{infra-BDQDRopn.js → infra-CTrmVqc_.js} +111 -6
- package/server/{injection-DfFFEMKL.js → injection-BisQ0lpX.js} +1 -1
- package/server/{injection-CCopdUKz.js → injection-C9sxqbc2.js} +73 -193
- package/server/{inspect-agent-FCDlNT_i.js → inspect-agent-BoSO51YC.js} +12 -12
- package/server/inspect-agent-BykeOH4a.js +2 -0
- package/server/{internal-token-BG6yQKNL.js → internal-token-AvXePaQT.js} +2 -2
- package/server/{internal-token-BJZa40Ld.js → internal-token-Djkj-yqK.js} +1 -1
- package/server/{io-C0NV7y6C.js → io-mxOWMZ7I.js} +6 -6
- package/server/{issue-closed-CNNGbhWm.js → issue-closed-Bj_bCv_0.js} +7 -7
- package/server/{issue-lifecycle-DSH0GpWC.js → issue-lifecycle-A5YIpDZE.js} +1 -1
- package/server/{issue-lifecycle-BXfzxFCD.js → issue-lifecycle-BXUqaHzF.js} +32 -28
- package/server/{issue-service-singleton-F3A5VP6M.js → issue-service-singleton-BPNEXczv.js} +11 -11
- package/server/{issue-service-singleton-lwFJ4dHk.js → issue-service-singleton-CcaHjKPR.js} +1 -1
- package/server/{issues-DA-U_MpR.js → issues-AX-YBeAQ.js} +2 -2
- package/server/{jsonl-parser-BXiGANOh.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-BnxRk0Eo.js → label-cleanup-sXUlgdM0.js} +3 -3
- package/server/{lifecycle-DOgGnpIv.js → lifecycle-D2X3al0D.js} +2 -2
- package/server/{lifecycle-Di48-w4x.js → lifecycle-DjlljAZ1.js} +6 -6
- package/server/{lifecycle-io-eVG6v_8-.js → lifecycle-io-C5nVk55o.js} +1 -1
- package/server/{lifecycle-io-1XSeczTr.js → lifecycle-io-NPm1YtIG.js} +5 -5
- package/server/{linear-client-CvGo9n7M.js → linear-client--luYwCZg.js} +1 -1
- package/server/{linear-client-CYZRrcjp.js → linear-client-B8pLegW1.js} +3 -3
- package/server/{linear-mcp-auth-Cp0XaP96.js → linear-mcp-auth-BQVWV0I3.js} +6 -6
- package/server/{linear-mcp-auth-DoJnjdPZ.js → linear-mcp-auth-Dx81Zl4G.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-DO14mOr3.js → merge-Bx5Bh9pi.js} +3 -3
- package/server/{merge-ZF99ig6A.js → merge-Dqmh_zja.js} +1 -1
- package/server/{merge-agent-gpiRkcvj.js → merge-agent-DP9AUY29.js} +33 -33
- package/server/{merge-agent-C1-9zbP_.js → merge-agent-DWd0KfiS.js} +1 -1
- package/server/{merge-batch-C11ocNkO.js → merge-batch-BdmvTEAC.js} +1 -1
- package/server/{merge-completeness-CghMbyX7.js → merge-completeness-BfRwFjRx.js} +1 -1
- package/server/{merge-completeness-BUzPZy0E.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-iwlUzZjr.js → merge-rebase-BX1xKsrE.js} +2 -2
- package/server/{merge-set-Dbnx4chw.js → merge-set-DsLjjLEV.js} +4 -4
- package/server/{merge-set-BymrheTj.js → merge-set-H6epHOsw.js} +1 -1
- package/server/{merge-sync-CM978zez.js → merge-sync-BEdfsQV4.js} +2 -2
- package/server/{merge-sync-CqEtqjI2.js → merge-sync-BebcWWGA.js} +1 -1
- package/server/{merge-train-DvLcAn1G.js → merge-train-D1I0lNOT.js} +4 -4
- package/server/{merge-train-deps-Cl_kcRbO.js → merge-train-deps-D_-C0Pk2.js} +4 -4
- package/server/{merge-verification-c9Y9mllw.js → merge-verification-DN1Ov9bU.js} +6 -6
- package/server/{merged-docker-cleanup-worker-CGiDOdv8.js → merged-docker-cleanup-worker-CfXSr2pA.js} +4 -4
- package/server/{merged-docker-cleanup-worker-DgsLOx3E.js → merged-docker-cleanup-worker-ybsPyHjB.js} +1 -1
- package/server/{multipart-parser-D0twwRjz.js → multipart-parser-CL5QG8iv.js} +2 -2
- package/server/{no-resume-mode-DZvP0M_S.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-6r2OEfYd.js → orphan-proposed-reconciler-CEW1maPl.js} +1 -1
- package/server/{orphan-proposed-reconciler-DtQP6oE_.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-DAOb1V2-.js → pan-dir-DhgKfO86.js} +21 -6
- package/server/{paths-DuATV5iE.js → paths-BUuhi6jM.js} +17 -17
- package/server/{pending-lifecycle-claim-DQUHIDfX.js → pending-lifecycle-claim-DJlA1rTR.js} +2 -2
- package/server/{persistent-logger-CBj016pT.js → persistent-logger-s8cbpFNV.js} +2 -2
- package/server/{pickup-zXZl5lQI.js → pickup-2AxtB3dW.js} +1 -1
- package/server/{pipeline-membership-DHOXmvba.js → pipeline-membership-2_okL5bm.js} +1 -1
- package/server/{pipeline-membership-B2yUcBz7.js → pipeline-membership-Dqv6_0ig.js} +1 -1
- package/server/{pipeline-membership-gather-OkLXuvxR.js → pipeline-membership-gather-4F1-tXKI.js} +1 -1
- package/server/{pipeline-membership-gather-BIcJ-N0W.js → pipeline-membership-gather-CtJ_7aGf.js} +149 -17
- package/server/{pipeline-notifier-BmwrVKsO.js → pipeline-notifier-CO9rxJgB.js} +1 -1
- package/server/{pipeline-notifier-CxMes51i.js → pipeline-notifier-DDfVBJhJ.js} +2 -2
- package/server/{post-merge-lifecycle-worker-3u_rA4R0.js → post-merge-lifecycle-worker-DmSOkeNp.js} +3 -3
- package/server/{project-pipelines-C3SPFJ38.js → project-pipelines-72WE8GVK.js} +2 -2
- package/server/{project-repos-BOpBzkO6.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-B0TtboFm.js → prompts-XkL10m8M.js} +2 -2
- package/server/{providers-O2smCvSz.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-BonZ4WVG.js → pull-requests-B-KrUph5.js} +3 -3
- package/server/{pull-requests-DNcJUVWA.js → pull-requests-DK5k92B4.js} +1 -1
- package/server/{queries-DCX27GRr.js → queries-DVpl1vsU.js} +1212 -193
- package/server/{rally-Cxe7lKYX.js → rally-DbE561hD.js} +3 -3
- package/server/rally-O_st_X7n.js +3 -0
- package/server/{rally-api-CzkKenoi.js → rally-api-CZLeEd2C.js} +2 -2
- package/server/{rally-api-Cp50exEi.js → rally-api-DaHtn5QN.js} +1 -1
- package/server/{rally-client-Bu3Cekkw.js → rally-client-C-MAl8ur.js} +1 -1
- package/server/{rally-client-CyBBEDHu.js → rally-client-Ch3zRsBX.js} +5 -5
- package/server/{reap-terminal-sessions-CtAhr6L0.js → reap-terminal-sessions-C1n0ALRb.js} +2 -2
- package/server/{reap-terminal-sessions-DvFqQUnq.js → reap-terminal-sessions-DegFS2p1.js} +2 -2
- package/server/{rebuild-stack-hCQtprWC.js → rebuild-stack-C9Li44A3.js} +20 -10
- package/server/{rebuild-stack-BKYpIPDL.js → rebuild-stack-qC0jCNm6.js} +2 -2
- package/server/{reconstruct-cache-CF2avArx.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-_eO3VFth.js → release-engine-Be5MX5GP.js} +5 -5
- package/server/{release-set-vxgZwwZV.js → release-set-DJv_O6PS.js} +3 -3
- package/server/{remote-BienmcrZ.js → remote-BMM3uH2J.js} +3 -3
- package/server/{remote-CVPCc7Vy.js → remote-C0xVTHA5.js} +3 -3
- package/server/{remote-agents-kwsEZvXu.js → remote-agents-BIIoc5pD.js} +1 -1
- package/server/{remote-agents-kxraOCGT.js → remote-agents-EUiZ26bj.js} +7 -7
- package/server/{remote-completion-BtmZ42aP.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-CIRr0yYt.js → review-agent-BHGaBoBu.js} +29 -29
- package/server/{review-agent-UpAM4DmT.js → review-agent-CD3RQ-tc.js} +1 -1
- package/server/{review-artifacts-BCODM9ww.js → review-artifacts-DyhajWso.js} +6 -6
- package/server/{review-context-BBsNrDri.js → review-context-B-dlsPnx.js} +9 -9
- package/server/{review-convoy-liveness-l06_LYCt.js → review-convoy-liveness-D7M-s_nS.js} +2 -2
- package/server/{review-status-CacDM78F.js → review-status-B6wYcOtP.js} +1 -1
- package/server/{review-status-CwhA9wmd.js → review-status-CKLk5aZ-.js} +306 -59
- package/server/{review-status-emit-BPJwYcRy.js → review-status-emit-CJ7UmEVU.js} +3 -3
- package/server/{review-status-enrichment-DvyZAbGR.js → review-status-enrichment-DJRgGX7-.js} +3 -3
- package/server/review-status-limits-4EJDCGHO.js +7 -0
- package/server/{review-status-source-DWnFE0b6.js → review-status-source-7nU3Z2wL.js} +1 -1
- package/server/{review-status-source-B70ekARK.js → review-status-source-BsDYGfyv.js} +1 -1
- package/server/{review-status-sync-B0IS6Beh.js → review-status-sync-BLssMTEW.js} +1 -1
- package/server/{review-status-sync-h2CJX6ju.js → review-status-sync-BxBeHRde.js} +35 -11
- package/server/{review-verdict-feedback-yrrmgps_.js → review-verdict-feedback-5jWuzgpc.js} +22 -10
- package/server/{review-verdict-feedback-qRohbFG2.js → review-verdict-feedback-HRY9P4bN.js} +1 -1
- package/server/{rollup-CUoav0Op.js → rollup-BGIrCEkU.js} +79 -44
- package/server/rollup-CZB4UL9q.js +3 -0
- package/server/{scanner-ChURu_b-.js → scanner-DydjXPrz.js} +16 -9
- package/server/search-DdtIjAiu.js +395 -0
- package/server/{sequence-io-D9ITDxzq.js → sequence-io-Fw-cLyDs.js} +4 -4
- package/server/{sequencer-agent-m7gmaakW.js → sequencer-agent-BcpGMt5x.js} +15 -10
- package/server/server.js +1258 -438
- package/server/{service-BzFG0Us_.js → service-BFFkGsG4.js} +58 -58
- package/server/{session-fork-KBq4HIHF.js → session-fork-D0V-3e5P.js} +2 -2
- package/server/{session-history-C_EMhIIF.js → session-history-Bta5l9jY.js} +5 -5
- package/server/{settings-DejgzzLs.js → settings-Ce8B1daF.js} +2 -2
- package/server/{settings-BLbcDqUp.js → settings-E3FnEIUx.js} +3 -3
- package/server/settings-eOOJpxi_.js +2 -0
- package/server/{shadow-engineering-D8R9I8Yl.js → shadow-engineering-Mt9nJO4i.js} +3 -3
- package/server/{shadow-state-C0Af4clN.js → shadow-state-Bzj_AZCV.js} +1 -1
- package/server/{shadow-state-fzIqIMDD.js → shadow-state-DrkhoVSx.js} +2 -2
- package/server/{shadow-utils-Ugca_9ND.js → shadow-utils-H1GfqP06.js} +2 -2
- package/server/{ship-log-VAv-lHrF.js → ship-log-CFUIo4PR.js} +1 -1
- package/server/{smart-compaction-BcYY_Suf.js → smart-compaction-DSTq-Wua.js} +1 -1
- package/server/{smart-compaction-B2Xu5XEb.js → smart-compaction-Hzp3KCJX.js} +7 -7
- package/server/{spawn-planning-session-Dsv-350T.js → spawn-planning-session-C0uSA2SL.js} +2 -2
- package/server/{spawn-planning-session-DhCoBPct.js → spawn-planning-session-DN4son31.js} +23 -21
- package/server/{specialist-completion-z6v3ZqJE.js → specialist-completion-Cf6tpIh1.js} +1 -1
- package/server/{specialist-context-CrA5azkJ.js → specialist-context-DEUEkjIQ.js} +5 -5
- package/server/{specialist-handoff-logger-CmpZYJMB.js → specialist-handoff-logger-D_LmQDj3.js} +2 -2
- package/server/{specialist-logs-BorrIu0x.js → specialist-logs-7Ynue0R7.js} +3 -3
- package/server/{specialists-ZdrifiKx.js → specialists-CQwBEGlD.js} +1 -1
- package/server/{specialists-2yLmqph9.js → specialists-DAjPgYs_.js} +504 -238
- package/server/{specialists-Dfx9_Wzb.js → specialists-Hr6iW9fU.js} +18 -18
- package/server/{specialists-CH6ah6D-.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-Dm_NV7f6.js → src-DQnkPN2i.js} +3 -3
- package/server/{src-B2e5rGu2.js → src-DhfDV0o4.js} +6 -6
- package/server/{stack-health-Bf2WdG4E.js → stack-health-D_iKwNRg.js} +107 -16
- package/server/stack-health-deVSdDwn.js +3 -0
- package/server/{stale-task-claims-D1Ll8fI5.js → stale-task-claims-BYJGqhLI.js} +5 -5
- package/server/{staleness-CuED1Psm.js → staleness-CopBDKnA.js} +1 -1
- package/server/{staleness-45qZ_a60.js → staleness-D8WeMUHd.js} +1 -1
- package/server/{state-home-B4EWfIxF.js → state-home-DjN8qduI.js} +24 -3
- package/server/{state-mapping-BEONzr8P.js → state-mapping-DlM7OYRW.js} +1 -1
- package/server/{state-migrate-Cd8BH33U.js → state-migrate-a2p1gtD7.js} +4 -4
- package/server/state-mirror-Cv_XgvT5.js +121 -0
- package/server/{stuck-remediation-ChcooZuk.js → stuck-remediation-CXJX_kki.js} +1 -1
- package/server/{stuck-remediation-DmY5UJLg.js → stuck-remediation-CbCRSz1v.js} +31 -732
- package/server/{substrate-bug-weights-service-BvTWrFUz.js → substrate-bug-weights-service-DxpopNd9.js} +3 -3
- package/server/{summary-fork--Jr8duYh.js → summary-fork-B61fjRJn.js} +2 -2
- package/server/{summary-fork-Ct514_Jl.js → summary-fork-B9pszUJN.js} +91 -10
- package/server/supervisor/{injection-budget-B3UyEONL.js → injection-budget-Ar7hgyJq.js} +1 -1
- package/server/supervisor/pty-supervisor.js +12 -3
- package/server/supervisor/{pty-token-CWRffcCa.js → pty-token-CXCFU0Z8.js} +1 -1
- package/server/{supervisor-B7BHGcNA.js → supervisor-BvnxbuuF.js} +6 -4
- package/server/supervisor-C69kpqvd.js +2 -0
- package/server/{swarm-readiness-MNE5O8hn.js → swarm-readiness-vTw1kqGa.js} +3 -3
- package/server/{system-prerequisites-Cin9ZgDx.js → system-prerequisites-LLzTEqsK.js} +3 -3
- package/server/{teardown-workspace-CvBpvc85.js → teardown-workspace-CqKKVJr1.js} +15 -15
- package/server/{test-agent-queue-DmSIqays.js → test-agent-queue-CWMq7oyG.js} +8 -7
- package/server/{test-verdict-BieVDAV1.js → test-verdict-NdtgRBuA.js} +1 -1
- package/server/{test-verdict-Cy2jJGTe.js → test-verdict-diIWE6hz.js} +15 -3
- package/server/{tldr-daemon-Ca0eovh3.js → tldr-daemon-B1Jhrtc8.js} +1 -1
- package/server/{tldr-daemon-IOssGwg7.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-B10VFNOD.js → token-Bgpjo3tE.js} +2 -2
- package/server/token-util-BsjFll-k.js +3 -0
- package/server/{token-util-CZ8WPtdk.js → token-util-BymbpkJp.js} +1 -1
- package/server/{tracker-config-CHbrjg6m.js → tracker-config-4DaKVTfc.js} +2 -2
- package/server/{tracker-utils-DZZq_C0R.js → tracker-utils-BDeAXC-q.js} +2 -2
- package/server/{traefik-connect-GHomyBaD.js → traefik-connect-CC5FyxYj.js} +1 -1
- package/server/{tunnel-Dz7y434T.js → tunnel-CDWkeceJ.js} +1 -1
- package/server/{tunnel-Bdyb-sNq.js → tunnel-CPf5M-Pc.js} +3 -3
- package/server/{typed-errors-Bn_2WRU7.js → typed-errors-9K7Dq_Vn.js} +1 -1
- package/server/{typed-errors-BR_RmPS_.js → typed-errors-DrS5fb5z.js} +1 -1
- package/server/{types-D2ETIB8T.js → types-DzlUKiuf.js} +4 -3
- package/server/{types-Dh6RI5Vj.js → types-kI9ik8XO.js} +1 -1
- package/server/{uat-promote-verification-DyvQXvIn.js → uat-promote-verification-c_pxoxEc.js} +5 -5
- package/server/{uat-train-Dv0Bxer7.js → uat-train-CWGxBdJO.js} +0 -0
- package/server/{uat-train-diX_7shd.js → uat-train-CfCYd2ve.js} +1 -1
- package/server/{validate-606KcYZC.js → validate-f3ItVCfm.js} +3 -3
- package/server/{validation-Cf7aaV5A.js → validation-5G_wQtea.js} +1 -1
- package/server/{validation-CnrDul1x.js → validation-7tSiCM82.js} +4 -4
- package/server/{verification-artifact-GOaj8u2s.js → verification-artifact-9h9dH8uX.js} +1 -1
- package/server/{verification-artifact-D4b-bio9.js → verification-artifact-C_4WJnf6.js} +1 -1
- package/server/{verification-runner-DiPaUP-C.js → verification-runner-BV5F6wrA.js} +1 -1
- package/server/{verification-runner-B5MVxDvU.js → verification-runner-D58KmBhK.js} +18 -38
- package/server/{vtt-parser-CMU5EZ5R.js → vtt-parser-2iT9OHa9.js} +1 -1
- package/server/{work-agent-prompt-Csb3fbVR.js → work-agent-prompt-D03s4DD1.js} +9 -9
- package/server/{workflows-D87ajwV6.js → workflows-BMBwLYPV.js} +281 -98
- package/server/workflows-BOmWGpIh.js +2 -0
- package/server/{workspace-iD8oULqu.js → workspace-BgflNCH0.js} +3 -3
- package/server/{workspace-AIOM7n00.js → workspace-Cn9ywfSW.js} +1 -1
- package/server/{workspace-anchor-drift-19cJ1bH5.js → workspace-anchor-drift-C8Fy3shi.js} +1 -1
- package/server/{workspace-anchor-drift-C3mK5wNI.js → workspace-anchor-drift-CMiNncwq.js} +5 -8
- package/server/{workspace-config-CJ7RqQiP.js → workspace-config-aUc2nIz6.js} +1 -1
- package/server/{workspace-manager-CXfrw4rR.js → workspace-manager-Bem7ZBs9.js} +521 -292
- package/server/workspace-manager-C0CpNh3t.js +3 -0
- package/server/{workspace-metadata-BuMRco5P.js → workspace-metadata-C5iSlPRo.js} +1 -1
- package/server/{workspace-metadata-eHSj_NsP.js → workspace-metadata-UKmTYmDQ.js} +2 -2
- package/server/{workspaces-DbtMX2TM.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-DyZJia9f.js +0 -3
- package/server/agents-Dnn4XgdB.js +0 -3
- package/server/archive-planning-BHCd_eL5.js +0 -2
- package/server/cli-D6mRfUE6.js +0 -3
- package/server/deacon-swarm-BkKR7SXu.js +0 -2
- package/server/delivery-C2M73sBg.js +0 -3
- package/server/dist-qcf9gAP0.js +0 -3
- package/server/event-store-5UKzh9Jf.js +0 -3
- package/server/forge-D647IMNa.js +0 -3
- package/server/fts-db-wROfFfje.js +0 -146
- package/server/hume-DtWN8oV5.js +0 -3
- package/server/inspect-agent-CPqXI81t.js +0 -2
- package/server/merge-ops-7QqziXAh.js +0 -2
- package/server/merge-rebase-B4pgzvQJ.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-BgW4lcIa.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-x6ztTQo4.js +0 -3
- package/server/record-BTwWhtBb.js +0 -3
- package/server/record-update-DaOKS7Wb.js +0 -277
- package/server/recovery-trip-D-wM9EfB.js +0 -44
- package/server/resume-DXIIfJNk.js +0 -3
- package/server/rollup-DxCjJaAM.js +0 -3
- package/server/settings-9jSGHBPY.js +0 -2
- package/server/specs-DKV3jIEs.js +0 -3
- package/server/stack-health-CoWAhA99.js +0 -3
- package/server/supervisor-CyR_mW5B.js +0 -2
- package/server/tmux-Ctk6RV5l.js +0 -3
- package/server/token-util-CrfQ2FKf.js +0 -3
- package/server/workflows-DN6NyVGd.js +0 -2
- package/server/workspace-manager-B38rFWA1.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-2ZflPxgo.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
|