@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.
Files changed (444) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +59 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-Cd7ZGZCq.js → acceptance-criteria-DmtLDbtt.js} +2 -2
  4. package/server/{activity-logger-CyteR4JO.js → activity-logger-Co5qljIj.js} +55 -4
  5. package/server/activity-logger-K7FYGF_z.js +3 -0
  6. package/server/{advancing-selfheal-DieFp3qi.js → advancing-selfheal-8AR68Asf.js} +6 -6
  7. package/server/{agent-gc-BMcgTDl7.js → agent-gc-BmYeT6eH.js} +5 -5
  8. package/server/agent-state-Dq3s84-P.js +3 -0
  9. package/server/{agent-state-service-DFO6qvHp.js → agent-state-service-DK1Vay1E.js} +1 -1
  10. package/server/{agent-state-service-BOzQhLjU.js → agent-state-service-rjnzpHDx.js} +6 -6
  11. package/server/{agent-state-source-Ca_zCaII.js → agent-state-source-Ds968-j6.js} +1 -1
  12. package/server/{agents-CtACUuVG.js → agents-Dls7tfJH.js} +5 -5
  13. package/server/agents-IPSa5kzn.js +3 -0
  14. package/server/{archive-planning-Binfb99i.js → archive-planning-Cq7cyinS.js} +51 -24
  15. package/server/archive-planning-MbkGCBIY.js +2 -0
  16. package/server/{artifact-index-jobs-Jn7BGOtV.js → artifact-index-jobs-Dj_8kpTd.js} +3 -3
  17. package/server/{assemble-DsqK9OAq.js → assemble-BTCmbcfH.js} +20 -13
  18. package/server/{auto-spawn-consent-BooqhC3L.js → auto-spawn-consent-lXqRJ1Dr.js} +304 -121
  19. package/server/{backlog-auto-trigger-BADGPxov.js → backlog-auto-trigger-Dn-amzt6.js} +3 -3
  20. package/server/{behavior-B7biGtFT.js → behavior-DIMQMRzs.js} +2 -2
  21. package/server/{boot-reconciled-stop-events-bQUzU8ns.js → boot-reconciled-stop-events-D6SeUTIr.js} +1 -1
  22. package/server/{bridge-pool-patrol-DsPj6F7t.js → bridge-pool-patrol-BEjt-xF3.js} +2 -2
  23. package/server/{briefing-freshness-CUerZqWd.js → briefing-freshness-3PNmL_p3.js} +2 -2
  24. package/server/{build-info-D0q_i8WM.js → build-info-CJg813Hm.js} +3 -3
  25. package/server/{build-info-Du74MKiP.js → build-info-CXyeFsXu.js} +1 -1
  26. package/server/{checkpoint-manager-Cu-R5Uzg.js → checkpoint-manager-9t7G5c1V.js} +1 -1
  27. package/server/{checkpoint-manager-R5tnaxEY.js → checkpoint-manager-B2G38R3p.js} +3 -3
  28. package/server/checkpoint-worker.js +1 -1
  29. package/server/{checkpoints-wF84ubZ8.js → checkpoints-CuBgiXO-.js} +1 -1
  30. package/server/{checkpoints-DYtLu-PB.js → checkpoints-VTZMd4Qm.js} +2 -2
  31. package/server/{claude-hooks-provision-DXI3Wqlm.js → claude-hooks-provision-55SyQaPz.js} +2 -2
  32. package/server/{claude-hooks-provision-UKxCeOyj.js → claude-hooks-provision-CEUT-CZd.js} +1 -1
  33. package/server/{claude-permissions-DYVLnX9t.js → claude-permissions-Cn0dIu2i.js} +2 -2
  34. package/server/{claude-settings-overlay-DxP2F_gY.js → claude-settings-overlay-B19hdzSA.js} +1 -1
  35. package/server/{claude-settings-overlay-DsbpIq2d.js → claude-settings-overlay-Yg_ANh81.js} +2 -2
  36. package/server/{cli-DzRKxxP_.js → cli-C9S84iTy.js} +79 -22
  37. package/server/cli-M1cwZ__d.js +3 -0
  38. package/server/{cliproxy-CG4meRFc.js → cliproxy-CJq3KXU6.js} +2 -2
  39. package/server/{cliproxy-Cwzw39yN.js → cliproxy-DgEZlr7Y.js} +1 -1
  40. package/server/{close-issue-BX1bATJy.js → close-issue-DPxRddGR.js} +5 -5
  41. package/server/{closed-issue-reaper-hLt0W86J.js → closed-issue-reaper-C5Zn4GRS.js} +13 -13
  42. package/server/{closed-issue-reaper-DvnTSN6a.js → closed-issue-reaper-D-2B48Ri.js} +1 -1
  43. package/server/{codex-rnJN3v3_.js → codex-B3n_rkwn.js} +1 -1
  44. package/server/{codex-BYwi1uyW.js → codex-CjkD1PJu.js} +6 -6
  45. package/server/{codex-parser-Poyz29GE.js → codex-parser-DpB1Il-P.js} +2 -2
  46. package/server/{compaction-continuation-DtMfHN0f.js → compaction-continuation-DZD9ukSE.js} +3 -3
  47. package/server/{config-R793W0yA.js → config-C5saf4Ja.js} +1 -1
  48. package/server/{config-CX4vk1CV.js → config-DnLJATZk.js} +2 -2
  49. package/server/{config-ktAVnp4s.js → config-DvM8jtQK.js} +2 -2
  50. package/server/{config-yaml-CxdwhAIA.js → config-yaml-BSCqwmX0.js} +11299 -10972
  51. package/server/{conflict-gate-BSTlwCtF.js → conflict-gate-DXa_L28t.js} +1 -1
  52. package/server/{conflict-gate-BNv6UolH.js → conflict-gate-WfVqgalf.js} +4 -4
  53. package/server/{context-layers-DCdaGsRG.js → context-layers-D7UqH9Ab.js} +2 -2
  54. package/server/{context-layers-DlWsDiRF.js → context-layers-Dpz3Vd6d.js} +3 -3
  55. package/server/{control-settings-qYYHrIqy.js → control-settings-DVf6pKyv.js} +4 -4
  56. package/server/{conversation-compaction-BxUKObHb.js → conversation-compaction-5XuH6OBn.js} +1 -1
  57. package/server/{conversation-compaction-CXQrN3I_.js → conversation-compaction-COrbnX1J.js} +8 -8
  58. package/server/{conversation-service-CZiUE8Uw.js → conversation-service-BufdtnZF.js} +169 -10
  59. package/server/{conversation-service-CDnQ3ayN.js → conversation-service-DnUyIiLb.js} +1 -1
  60. package/server/{conversations-D7lR670u.js → conversations-B4rxz-Wl.js} +17 -10
  61. package/server/{conversations-DXl5YTf4.js → conversations-D1bwxQMy.js} +1 -1
  62. package/server/{cost-Aat8HfO_.js → cost-CpFDrJUS.js} +46 -2
  63. package/server/{cost-CWvN9FP2.js → cost-KLuwKCW9.js} +3 -3
  64. package/server/{cost-sync-DiUBXwl6.js → cost-sync-cesi9dp8.js} +3 -3
  65. package/server/{dag-5QlmH0oC.js → dag-BYiFMqpU.js} +2 -2
  66. package/server/{dangerous-git-ops-DWX6Og8c.js → dangerous-git-ops-BKvd3-Hk.js} +1 -1
  67. package/server/dashboard-db-worker.js +7 -7
  68. package/server/{deacon-PW_bg4uL.js → deacon-BbsWw8a6.js} +3 -3
  69. package/server/{deacon-B1LD5cJU.js → deacon-HdEh0Esp.js} +672 -181
  70. package/server/deacon-event-client-C93rvOT7.js +237 -0
  71. package/server/deacon-event-client-Ck5Ei7Mn.js +3 -0
  72. package/server/{deacon-nudge-log-DPHsO14z.js → deacon-nudge-log-BND_97Wo.js} +4 -3
  73. package/server/{deacon-pending-lifecycle-2ZflPxgo.js → deacon-pending-lifecycle-CD3YsiQK.js} +3 -3
  74. package/server/deacon-swarm-DgWADWd_.js +2 -0
  75. package/server/{deacon-swarm-DwGUgSVp.js → deacon-swarm-rqrl4TMs.js} +39 -18
  76. package/server/deacon.js +12 -210
  77. package/server/{dead-end-trip-B06RFIr2.js → dead-end-trip-DSF23CLX.js} +4 -3
  78. package/server/dead-end-trip-zKlS4v6f.js +2 -0
  79. package/server/delivery-CsbQdZkS.js +3 -0
  80. package/server/{deploy-patrol-BNjeCL8u.js → deploy-patrol-kARAkji4.js} +17 -21
  81. package/server/{deploy-queue-CKT_Ia9p.js → deploy-queue-Bj0HJT1i.js} +2 -2
  82. package/server/{deploy-queue-DMMYhFC8.js → deploy-queue-rjTUy1RM.js} +1 -1
  83. package/server/{deploy-window-DC8lze3d.js → deploy-window-B2IM-9G5.js} +10 -44
  84. package/server/{deploy-window-D_AimdNN.js → deploy-window-BNFWnA8D.js} +1 -1
  85. package/server/{dev-supervisor-C4F0vbno.js → dev-supervisor-B1mZYXz4.js} +2 -2
  86. package/server/{devcontainer-renderer-66sqMQIi.js → devcontainer-renderer-B-o68Z5B.js} +3 -3
  87. package/server/{dist-C5FT9lTG.js → dist-3W--cGMa.js} +1 -1
  88. package/server/dist-BR0QtwmS.js +3 -0
  89. package/server/{dist-src-B-AlGWSl.js → dist-src-C-Vk2jNk.js} +1 -1
  90. package/server/{docker-BxrFhTZ_.js → docker-DH3jUYg1.js} +1 -1
  91. package/server/{docker-CoAT8R0J.js → docker-meuLKLzV.js} +27 -20
  92. package/server/{dod-Bg6wsKTV.js → dod-D7-9dCOD.js} +1 -1
  93. package/server/{driver-CKVGi51s.js → driver-CmsY2RLl.js} +1 -1
  94. package/server/{durable-review-pipeline-D_DcfIGP.js → durable-review-pipeline-CStTgOAf.js} +1 -1
  95. package/server/{durable-review-pipeline-HkAgnx0L.js → durable-review-pipeline-Chq0lzjL.js} +1 -1
  96. package/server/{ensure-devcontainer-Bg5HJAcO.js → ensure-devcontainer-BE3llBWP.js} +1 -1
  97. package/server/{ensure-devcontainer-DTxChVuA.js → ensure-devcontainer-BXrY7C2Z.js} +4 -4
  98. package/server/{esm-shims-CaBWIR7f.js → esm-shims-Bzy4ZzNU.js} +1 -1
  99. package/server/event-store-COd2tOx8.js +3 -0
  100. package/server/{event-store-CrHcVC5_.js → event-store-D_AR-Y78.js} +184 -11
  101. package/server/{events-ChEFB7Jp.js → events-CCkFWa7X.js} +1 -1
  102. package/server/{events-DhRN-6vM.js → events-zjDQozet.js} +3 -3
  103. package/server/{factory-BezSPaTd.js → factory-DhavwKVc.js} +5 -5
  104. package/server/{feature-registry-population-DhswNiXx.js → feature-registry-population-DWGBKyWd.js} +4 -4
  105. package/server/{feature-registry-storage-CUVNpAso.js → feature-registry-storage-C5DkXmCM.js} +3 -3
  106. package/server/{features-B2CfNPFw.js → features-CC47YcCX.js} +2 -2
  107. package/server/{feedback-target-CMrEAoeA.js → feedback-target-D9Tex35_.js} +1 -1
  108. package/server/{feedback-target-VBr9gKgX.js → feedback-target-DoRCR3L-.js} +8 -8
  109. package/server/{feedback-writer-CY91ckuw.js → feedback-writer-CTSuA6lw.js} +1 -1
  110. package/server/{feedback-writer-xpFgU632.js → feedback-writer-DdsBdtNL.js} +5 -5
  111. package/server/{flywheel-DsICCjTR.js → flywheel-DHWHzaYK.js} +1 -1
  112. package/server/{flywheel-DQqsSm7P.js → flywheel-DJQa9az8.js} +14 -14
  113. package/server/{flywheel-CTVY3yCG.js → flywheel-TacAI9MA.js} +21 -17
  114. package/server/{flywheel-merge-order-C-TI4JGu.js → flywheel-merge-order-D2foPh88.js} +1 -1
  115. package/server/{flywheel-merge-order-CMGz-imq.js → flywheel-merge-order-DRtex2Dt.js} +7 -7
  116. package/server/forge-CdlCG9aS.js +3 -0
  117. package/server/{forge-RTNqJe6a.js → forge-c8LeC-tw.js} +2 -2
  118. package/server/{from-DxGcivc9.js → from-BogSwvr2.js} +1 -1
  119. package/server/{fs-lock-Bre3sGoz.js → fs-lock-D_GeJtXl.js} +3 -3
  120. package/server/{fts-operations-BuTdlZFA.js → fts-operations-DP9R-8Q3.js} +3 -3
  121. package/server/{git-utils-CedsVume.js → git-utils-C31x1lpE.js} +1 -1
  122. package/server/{git-utils-DtdoEXJk.js → git-utils-xQ74FoSn.js} +5 -4
  123. package/server/{github-app-DIE8BkHI.js → github-app-CpQSDlv8.js} +1 -1
  124. package/server/{github-app-gVnZcP9B.js → github-app-D2QuvZ3j.js} +3 -3
  125. package/server/{github-client-BrAC6ELh.js → github-client-D9YvJX5D.js} +3 -3
  126. package/server/{github-client-CBOkvBUl.js → github-client-Tpi3PmKX.js} +1 -1
  127. package/server/{github-pr-lookup-CgMULTPf.js → github-pr-lookup-DvBMv-IW.js} +2 -2
  128. package/server/{harness-binary-CnBHpd57.js → harness-binary-BHxWf_sX.js} +7 -6
  129. package/server/{harness-resolve-BVj6sI8m.js → harness-resolve-bj9WMABA.js} +4 -4
  130. package/server/{health-events-BBWO_Dh9.js → health-events-bCDPn59Z.js} +2 -2
  131. package/server/{health-events-Der6bOkm.js → health-events-qo7Ss34U.js} +1 -1
  132. package/server/{hooks-BOavco-e.js → hooks-Dyxtg5fk.js} +2 -2
  133. package/server/{hooks-BJNal-bs.js → hooks-X2XHBB2b.js} +1 -1
  134. package/server/{hume-DBocJFkA.js → hume-DrZEGpqc.js} +2 -2
  135. package/server/hume-YPsy4UA8.js +3 -0
  136. package/server/{idle-stack-reaper-DQFh8rDh.js → idle-stack-reaper-CJ1ygW0p.js} +37 -7
  137. package/server/{idle-stack-reaper-CyGxXOfC.js → idle-stack-reaper-uJGOb-vu.js} +1 -1
  138. package/server/{in-flight-guard-nXEKoxI7.js → in-flight-guard-CG2Eo-rr.js} +1 -1
  139. package/server/{infra-BDQDRopn.js → infra-CTrmVqc_.js} +111 -6
  140. package/server/{injection-DfFFEMKL.js → injection-BisQ0lpX.js} +1 -1
  141. package/server/{injection-CCopdUKz.js → injection-C9sxqbc2.js} +73 -193
  142. package/server/{inspect-agent-FCDlNT_i.js → inspect-agent-BoSO51YC.js} +12 -12
  143. package/server/inspect-agent-BykeOH4a.js +2 -0
  144. package/server/{internal-token-BG6yQKNL.js → internal-token-AvXePaQT.js} +2 -2
  145. package/server/{internal-token-BJZa40Ld.js → internal-token-Djkj-yqK.js} +1 -1
  146. package/server/{io-C0NV7y6C.js → io-mxOWMZ7I.js} +6 -6
  147. package/server/{issue-closed-CNNGbhWm.js → issue-closed-Bj_bCv_0.js} +7 -7
  148. package/server/{issue-lifecycle-DSH0GpWC.js → issue-lifecycle-A5YIpDZE.js} +1 -1
  149. package/server/{issue-lifecycle-BXfzxFCD.js → issue-lifecycle-BXUqaHzF.js} +32 -28
  150. package/server/{issue-service-singleton-F3A5VP6M.js → issue-service-singleton-BPNEXczv.js} +11 -11
  151. package/server/{issue-service-singleton-lwFJ4dHk.js → issue-service-singleton-CcaHjKPR.js} +1 -1
  152. package/server/{issues-DA-U_MpR.js → issues-AX-YBeAQ.js} +2 -2
  153. package/server/{jsonl-parser-BXiGANOh.js → jsonl-parser-CgYWQ20q.js} +7 -3
  154. package/server/kimi-code-BYbme0aV.js +579 -0
  155. package/server/kimi-code-D_Ppt82c.js +3 -0
  156. package/server/kimi-parser-B-JBg3Pv.js +147 -0
  157. package/server/{label-cleanup-BnxRk0Eo.js → label-cleanup-sXUlgdM0.js} +3 -3
  158. package/server/{lifecycle-DOgGnpIv.js → lifecycle-D2X3al0D.js} +2 -2
  159. package/server/{lifecycle-Di48-w4x.js → lifecycle-DjlljAZ1.js} +6 -6
  160. package/server/{lifecycle-io-eVG6v_8-.js → lifecycle-io-C5nVk55o.js} +1 -1
  161. package/server/{lifecycle-io-1XSeczTr.js → lifecycle-io-NPm1YtIG.js} +5 -5
  162. package/server/{linear-client-CvGo9n7M.js → linear-client--luYwCZg.js} +1 -1
  163. package/server/{linear-client-CYZRrcjp.js → linear-client-B8pLegW1.js} +3 -3
  164. package/server/{linear-mcp-auth-Cp0XaP96.js → linear-mcp-auth-BQVWV0I3.js} +6 -6
  165. package/server/{linear-mcp-auth-DoJnjdPZ.js → linear-mcp-auth-Dx81Zl4G.js} +1 -1
  166. package/server/memory-fts-worker.js +1 -1
  167. package/server/{merge-DO14mOr3.js → merge-Bx5Bh9pi.js} +3 -3
  168. package/server/{merge-ZF99ig6A.js → merge-Dqmh_zja.js} +1 -1
  169. package/server/{merge-agent-gpiRkcvj.js → merge-agent-DP9AUY29.js} +33 -33
  170. package/server/{merge-agent-C1-9zbP_.js → merge-agent-DWd0KfiS.js} +1 -1
  171. package/server/{merge-batch-C11ocNkO.js → merge-batch-BdmvTEAC.js} +1 -1
  172. package/server/{merge-completeness-CghMbyX7.js → merge-completeness-BfRwFjRx.js} +1 -1
  173. package/server/{merge-completeness-BUzPZy0E.js → merge-completeness-C1FevcDT.js} +4 -4
  174. package/server/merge-ops-B98tKc1e.js +2 -0
  175. package/server/merge-rebase-BLykMwPO.js +2 -0
  176. package/server/{merge-rebase-iwlUzZjr.js → merge-rebase-BX1xKsrE.js} +2 -2
  177. package/server/{merge-set-Dbnx4chw.js → merge-set-DsLjjLEV.js} +4 -4
  178. package/server/{merge-set-BymrheTj.js → merge-set-H6epHOsw.js} +1 -1
  179. package/server/{merge-sync-CM978zez.js → merge-sync-BEdfsQV4.js} +2 -2
  180. package/server/{merge-sync-CqEtqjI2.js → merge-sync-BebcWWGA.js} +1 -1
  181. package/server/{merge-train-DvLcAn1G.js → merge-train-D1I0lNOT.js} +4 -4
  182. package/server/{merge-train-deps-Cl_kcRbO.js → merge-train-deps-D_-C0Pk2.js} +4 -4
  183. package/server/{merge-verification-c9Y9mllw.js → merge-verification-DN1Ov9bU.js} +6 -6
  184. package/server/{merged-docker-cleanup-worker-CGiDOdv8.js → merged-docker-cleanup-worker-CfXSr2pA.js} +4 -4
  185. package/server/{merged-docker-cleanup-worker-DgsLOx3E.js → merged-docker-cleanup-worker-ybsPyHjB.js} +1 -1
  186. package/server/{multipart-parser-D0twwRjz.js → multipart-parser-CL5QG8iv.js} +2 -2
  187. package/server/{no-resume-mode-DZvP0M_S.js → no-resume-mode-DUR7Hi98.js} +1 -1
  188. package/server/node_modules/.package-lock.json +7 -7
  189. package/server/node_modules/brace-expansion/README.md +23 -1
  190. package/server/node_modules/brace-expansion/index.js +206 -85
  191. package/server/node_modules/brace-expansion/package.json +1 -1
  192. package/server/node_modules/msgpackr/dist/index-no-eval.cjs +34 -28
  193. package/server/node_modules/msgpackr/dist/index-no-eval.cjs.map +1 -1
  194. package/server/node_modules/msgpackr/dist/index-no-eval.min.js +1 -1
  195. package/server/node_modules/msgpackr/dist/index-no-eval.min.js.map +1 -1
  196. package/server/node_modules/msgpackr/dist/index.js +34 -28
  197. package/server/node_modules/msgpackr/dist/index.js.map +1 -1
  198. package/server/node_modules/msgpackr/dist/index.min.js +1 -1
  199. package/server/node_modules/msgpackr/dist/index.min.js.map +1 -1
  200. package/server/node_modules/msgpackr/dist/node.cjs +36 -29
  201. package/server/node_modules/msgpackr/dist/node.cjs.map +1 -1
  202. package/server/node_modules/msgpackr/dist/test.js +63 -32
  203. package/server/node_modules/msgpackr/dist/test.js.map +1 -1
  204. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs +34 -28
  205. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs.map +1 -1
  206. package/server/node_modules/msgpackr/package.json +1 -1
  207. package/server/node_modules/msgpackr/unpack.js +34 -28
  208. package/server/{orphan-proposed-reconciler-6r2OEfYd.js → orphan-proposed-reconciler-CEW1maPl.js} +1 -1
  209. package/server/{orphan-proposed-reconciler-DtQP6oE_.js → orphan-proposed-reconciler-DfqHZftT.js} +23 -22
  210. package/server/package-lock.json +8 -8
  211. package/server/package.json +1 -1
  212. package/server/{pan-dir-DAOb1V2-.js → pan-dir-DhgKfO86.js} +21 -6
  213. package/server/{paths-DuATV5iE.js → paths-BUuhi6jM.js} +17 -17
  214. package/server/{pending-lifecycle-claim-DQUHIDfX.js → pending-lifecycle-claim-DJlA1rTR.js} +2 -2
  215. package/server/{persistent-logger-CBj016pT.js → persistent-logger-s8cbpFNV.js} +2 -2
  216. package/server/{pickup-zXZl5lQI.js → pickup-2AxtB3dW.js} +1 -1
  217. package/server/{pipeline-membership-DHOXmvba.js → pipeline-membership-2_okL5bm.js} +1 -1
  218. package/server/{pipeline-membership-B2yUcBz7.js → pipeline-membership-Dqv6_0ig.js} +1 -1
  219. package/server/{pipeline-membership-gather-OkLXuvxR.js → pipeline-membership-gather-4F1-tXKI.js} +1 -1
  220. package/server/{pipeline-membership-gather-BIcJ-N0W.js → pipeline-membership-gather-CtJ_7aGf.js} +149 -17
  221. package/server/{pipeline-notifier-BmwrVKsO.js → pipeline-notifier-CO9rxJgB.js} +1 -1
  222. package/server/{pipeline-notifier-CxMes51i.js → pipeline-notifier-DDfVBJhJ.js} +2 -2
  223. package/server/{post-merge-lifecycle-worker-3u_rA4R0.js → post-merge-lifecycle-worker-DmSOkeNp.js} +3 -3
  224. package/server/{project-pipelines-C3SPFJ38.js → project-pipelines-72WE8GVK.js} +2 -2
  225. package/server/{project-repos-BOpBzkO6.js → project-repos-BAqDwtvi.js} +16 -11
  226. package/server/project-repos-Df90Zw7Y.js +3 -0
  227. package/server/projects-WqMWCdpa.js +3 -0
  228. package/server/{prompts-B0TtboFm.js → prompts-XkL10m8M.js} +2 -2
  229. package/server/{providers-O2smCvSz.js → providers-ClGPGkQ8.js} +15 -12
  230. package/server/providers-DFUOed8u.js +3 -0
  231. package/server/public/assets/{chunk-BO2N2NFS-D_pGACYN.js → chunk-BO2N2NFS-CeQUdPxr.js} +4 -4
  232. package/server/public/assets/{diagram-OG6HWLK6-BO6fe3hH.js → diagram-OG6HWLK6-B7rgk4yT.js} +1 -1
  233. package/server/public/assets/{dist-5zingMiA.js → dist-2RPazfXY.js} +3 -3
  234. package/server/public/assets/{dist-CVxhbI2E.js → dist-B9NInrVZ.js} +1 -1
  235. package/server/public/assets/{ganttDiagram-6RSMTGT7-Bgj4A7kp.js → ganttDiagram-6RSMTGT7-Bxp0gV14.js} +1 -1
  236. package/server/public/assets/{highlighted-body-OFNGDK62-DNPK7_cm.js → highlighted-body-OFNGDK62-CzoRTVlC.js} +1 -1
  237. package/server/public/assets/index-Cml-kHo6.css +1 -0
  238. package/server/public/assets/{index-DEpY-D1O.js → index-CvN8cEgs.js} +216 -215
  239. package/server/public/assets/{linear-BB0jQT16.js → linear-CFEEl3ND.js} +1 -1
  240. package/server/public/assets/mermaid-GHXKKRXX-CpV7nCBM.js +1 -0
  241. package/server/public/assets/{pieDiagram-4H26LBE5-DeGIzzpZ.js → pieDiagram-4H26LBE5-BeR8R0cr.js} +1 -1
  242. package/server/public/assets/{prod-XBLvikex.js → prod-CYjzjCrn.js} +4 -4
  243. package/server/public/assets/{quadrantDiagram-W4KKPZXB-BV9SLeWz.js → quadrantDiagram-W4KKPZXB-BpcTkFuW.js} +1 -1
  244. package/server/public/assets/{sankeyDiagram-5OEKKPKP-Dwja0gj8.js → sankeyDiagram-5OEKKPKP-Bx2ETEV5.js} +1 -1
  245. package/server/public/assets/{xychartDiagram-2RQKCTM6-DCB4qvfw.js → xychartDiagram-2RQKCTM6-BKgEAFaj.js} +1 -1
  246. package/server/public/index.html +2 -2
  247. package/server/{pull-requests-BonZ4WVG.js → pull-requests-B-KrUph5.js} +3 -3
  248. package/server/{pull-requests-DNcJUVWA.js → pull-requests-DK5k92B4.js} +1 -1
  249. package/server/{queries-DCX27GRr.js → queries-DVpl1vsU.js} +1212 -193
  250. package/server/{rally-Cxe7lKYX.js → rally-DbE561hD.js} +3 -3
  251. package/server/rally-O_st_X7n.js +3 -0
  252. package/server/{rally-api-CzkKenoi.js → rally-api-CZLeEd2C.js} +2 -2
  253. package/server/{rally-api-Cp50exEi.js → rally-api-DaHtn5QN.js} +1 -1
  254. package/server/{rally-client-Bu3Cekkw.js → rally-client-C-MAl8ur.js} +1 -1
  255. package/server/{rally-client-CyBBEDHu.js → rally-client-Ch3zRsBX.js} +5 -5
  256. package/server/{reap-terminal-sessions-CtAhr6L0.js → reap-terminal-sessions-C1n0ALRb.js} +2 -2
  257. package/server/{reap-terminal-sessions-DvFqQUnq.js → reap-terminal-sessions-DegFS2p1.js} +2 -2
  258. package/server/{rebuild-stack-hCQtprWC.js → rebuild-stack-C9Li44A3.js} +20 -10
  259. package/server/{rebuild-stack-BKYpIPDL.js → rebuild-stack-qC0jCNm6.js} +2 -2
  260. package/server/{reconstruct-cache-CF2avArx.js → reconstruct-cache-BHyiAg02.js} +7 -7
  261. package/server/record-aVzu-LGm.js +3 -0
  262. package/server/record-update-CZh46a2f.js +617 -0
  263. package/server/{record-update-DhI7eySG.js → record-update-DtdJK2Iw.js} +1 -1
  264. package/server/recovery-trip-CSNWSLDn.js +77 -0
  265. package/server/recovery-trip-_16hFKv4.js +3 -0
  266. package/server/{release-engine-_eO3VFth.js → release-engine-Be5MX5GP.js} +5 -5
  267. package/server/{release-set-vxgZwwZV.js → release-set-DJv_O6PS.js} +3 -3
  268. package/server/{remote-BienmcrZ.js → remote-BMM3uH2J.js} +3 -3
  269. package/server/{remote-CVPCc7Vy.js → remote-C0xVTHA5.js} +3 -3
  270. package/server/{remote-agents-kwsEZvXu.js → remote-agents-BIIoc5pD.js} +1 -1
  271. package/server/{remote-agents-kxraOCGT.js → remote-agents-EUiZ26bj.js} +7 -7
  272. package/server/{remote-completion-BtmZ42aP.js → remote-completion-BS4tJUn8.js} +13 -13
  273. package/server/resolver-BvHd6RE4.js +163 -0
  274. package/server/resume-9thEqAQR.js +3 -0
  275. package/server/{review-agent-CIRr0yYt.js → review-agent-BHGaBoBu.js} +29 -29
  276. package/server/{review-agent-UpAM4DmT.js → review-agent-CD3RQ-tc.js} +1 -1
  277. package/server/{review-artifacts-BCODM9ww.js → review-artifacts-DyhajWso.js} +6 -6
  278. package/server/{review-context-BBsNrDri.js → review-context-B-dlsPnx.js} +9 -9
  279. package/server/{review-convoy-liveness-l06_LYCt.js → review-convoy-liveness-D7M-s_nS.js} +2 -2
  280. package/server/{review-status-CacDM78F.js → review-status-B6wYcOtP.js} +1 -1
  281. package/server/{review-status-CwhA9wmd.js → review-status-CKLk5aZ-.js} +306 -59
  282. package/server/{review-status-emit-BPJwYcRy.js → review-status-emit-CJ7UmEVU.js} +3 -3
  283. package/server/{review-status-enrichment-DvyZAbGR.js → review-status-enrichment-DJRgGX7-.js} +3 -3
  284. package/server/review-status-limits-4EJDCGHO.js +7 -0
  285. package/server/{review-status-source-DWnFE0b6.js → review-status-source-7nU3Z2wL.js} +1 -1
  286. package/server/{review-status-source-B70ekARK.js → review-status-source-BsDYGfyv.js} +1 -1
  287. package/server/{review-status-sync-B0IS6Beh.js → review-status-sync-BLssMTEW.js} +1 -1
  288. package/server/{review-status-sync-h2CJX6ju.js → review-status-sync-BxBeHRde.js} +35 -11
  289. package/server/{review-verdict-feedback-yrrmgps_.js → review-verdict-feedback-5jWuzgpc.js} +22 -10
  290. package/server/{review-verdict-feedback-qRohbFG2.js → review-verdict-feedback-HRY9P4bN.js} +1 -1
  291. package/server/{rollup-CUoav0Op.js → rollup-BGIrCEkU.js} +79 -44
  292. package/server/rollup-CZB4UL9q.js +3 -0
  293. package/server/{scanner-ChURu_b-.js → scanner-DydjXPrz.js} +16 -9
  294. package/server/search-DdtIjAiu.js +395 -0
  295. package/server/{sequence-io-D9ITDxzq.js → sequence-io-Fw-cLyDs.js} +4 -4
  296. package/server/{sequencer-agent-m7gmaakW.js → sequencer-agent-BcpGMt5x.js} +15 -10
  297. package/server/server.js +1258 -438
  298. package/server/{service-BzFG0Us_.js → service-BFFkGsG4.js} +58 -58
  299. package/server/{session-fork-KBq4HIHF.js → session-fork-D0V-3e5P.js} +2 -2
  300. package/server/{session-history-C_EMhIIF.js → session-history-Bta5l9jY.js} +5 -5
  301. package/server/{settings-DejgzzLs.js → settings-Ce8B1daF.js} +2 -2
  302. package/server/{settings-BLbcDqUp.js → settings-E3FnEIUx.js} +3 -3
  303. package/server/settings-eOOJpxi_.js +2 -0
  304. package/server/{shadow-engineering-D8R9I8Yl.js → shadow-engineering-Mt9nJO4i.js} +3 -3
  305. package/server/{shadow-state-C0Af4clN.js → shadow-state-Bzj_AZCV.js} +1 -1
  306. package/server/{shadow-state-fzIqIMDD.js → shadow-state-DrkhoVSx.js} +2 -2
  307. package/server/{shadow-utils-Ugca_9ND.js → shadow-utils-H1GfqP06.js} +2 -2
  308. package/server/{ship-log-VAv-lHrF.js → ship-log-CFUIo4PR.js} +1 -1
  309. package/server/{smart-compaction-BcYY_Suf.js → smart-compaction-DSTq-Wua.js} +1 -1
  310. package/server/{smart-compaction-B2Xu5XEb.js → smart-compaction-Hzp3KCJX.js} +7 -7
  311. package/server/{spawn-planning-session-Dsv-350T.js → spawn-planning-session-C0uSA2SL.js} +2 -2
  312. package/server/{spawn-planning-session-DhCoBPct.js → spawn-planning-session-DN4son31.js} +23 -21
  313. package/server/{specialist-completion-z6v3ZqJE.js → specialist-completion-Cf6tpIh1.js} +1 -1
  314. package/server/{specialist-context-CrA5azkJ.js → specialist-context-DEUEkjIQ.js} +5 -5
  315. package/server/{specialist-handoff-logger-CmpZYJMB.js → specialist-handoff-logger-D_LmQDj3.js} +2 -2
  316. package/server/{specialist-logs-BorrIu0x.js → specialist-logs-7Ynue0R7.js} +3 -3
  317. package/server/{specialists-ZdrifiKx.js → specialists-CQwBEGlD.js} +1 -1
  318. package/server/{specialists-2yLmqph9.js → specialists-DAjPgYs_.js} +504 -238
  319. package/server/{specialists-Dfx9_Wzb.js → specialists-Hr6iW9fU.js} +18 -18
  320. package/server/{specialists-CH6ah6D-.js → specialists-MOoeB4A8.js} +1 -1
  321. package/server/specs-Dl88cbKY.js +3 -0
  322. package/server/{src-B948bGVR.js → src-BYdwL_n-.js} +668 -64
  323. package/server/{src-Dm_NV7f6.js → src-DQnkPN2i.js} +3 -3
  324. package/server/{src-B2e5rGu2.js → src-DhfDV0o4.js} +6 -6
  325. package/server/{stack-health-Bf2WdG4E.js → stack-health-D_iKwNRg.js} +107 -16
  326. package/server/stack-health-deVSdDwn.js +3 -0
  327. package/server/{stale-task-claims-D1Ll8fI5.js → stale-task-claims-BYJGqhLI.js} +5 -5
  328. package/server/{staleness-CuED1Psm.js → staleness-CopBDKnA.js} +1 -1
  329. package/server/{staleness-45qZ_a60.js → staleness-D8WeMUHd.js} +1 -1
  330. package/server/{state-home-B4EWfIxF.js → state-home-DjN8qduI.js} +24 -3
  331. package/server/{state-mapping-BEONzr8P.js → state-mapping-DlM7OYRW.js} +1 -1
  332. package/server/{state-migrate-Cd8BH33U.js → state-migrate-a2p1gtD7.js} +4 -4
  333. package/server/state-mirror-Cv_XgvT5.js +121 -0
  334. package/server/{stuck-remediation-ChcooZuk.js → stuck-remediation-CXJX_kki.js} +1 -1
  335. package/server/{stuck-remediation-DmY5UJLg.js → stuck-remediation-CbCRSz1v.js} +31 -732
  336. package/server/{substrate-bug-weights-service-BvTWrFUz.js → substrate-bug-weights-service-DxpopNd9.js} +3 -3
  337. package/server/{summary-fork--Jr8duYh.js → summary-fork-B61fjRJn.js} +2 -2
  338. package/server/{summary-fork-Ct514_Jl.js → summary-fork-B9pszUJN.js} +91 -10
  339. package/server/supervisor/{injection-budget-B3UyEONL.js → injection-budget-Ar7hgyJq.js} +1 -1
  340. package/server/supervisor/pty-supervisor.js +12 -3
  341. package/server/supervisor/{pty-token-CWRffcCa.js → pty-token-CXCFU0Z8.js} +1 -1
  342. package/server/{supervisor-B7BHGcNA.js → supervisor-BvnxbuuF.js} +6 -4
  343. package/server/supervisor-C69kpqvd.js +2 -0
  344. package/server/{swarm-readiness-MNE5O8hn.js → swarm-readiness-vTw1kqGa.js} +3 -3
  345. package/server/{system-prerequisites-Cin9ZgDx.js → system-prerequisites-LLzTEqsK.js} +3 -3
  346. package/server/{teardown-workspace-CvBpvc85.js → teardown-workspace-CqKKVJr1.js} +15 -15
  347. package/server/{test-agent-queue-DmSIqays.js → test-agent-queue-CWMq7oyG.js} +8 -7
  348. package/server/{test-verdict-BieVDAV1.js → test-verdict-NdtgRBuA.js} +1 -1
  349. package/server/{test-verdict-Cy2jJGTe.js → test-verdict-diIWE6hz.js} +15 -3
  350. package/server/{tldr-daemon-Ca0eovh3.js → tldr-daemon-B1Jhrtc8.js} +1 -1
  351. package/server/{tldr-daemon-IOssGwg7.js → tldr-daemon-Bpls1CJB.js} +2 -2
  352. package/server/{tmux-CfDHob9M.js → tmux-CImZaX4q.js} +10 -16
  353. package/server/tmux-Cjpx8L8u.js +4 -0
  354. package/server/{token-B10VFNOD.js → token-Bgpjo3tE.js} +2 -2
  355. package/server/token-util-BsjFll-k.js +3 -0
  356. package/server/{token-util-CZ8WPtdk.js → token-util-BymbpkJp.js} +1 -1
  357. package/server/{tracker-config-CHbrjg6m.js → tracker-config-4DaKVTfc.js} +2 -2
  358. package/server/{tracker-utils-DZZq_C0R.js → tracker-utils-BDeAXC-q.js} +2 -2
  359. package/server/{traefik-connect-GHomyBaD.js → traefik-connect-CC5FyxYj.js} +1 -1
  360. package/server/{tunnel-Dz7y434T.js → tunnel-CDWkeceJ.js} +1 -1
  361. package/server/{tunnel-Bdyb-sNq.js → tunnel-CPf5M-Pc.js} +3 -3
  362. package/server/{typed-errors-Bn_2WRU7.js → typed-errors-9K7Dq_Vn.js} +1 -1
  363. package/server/{typed-errors-BR_RmPS_.js → typed-errors-DrS5fb5z.js} +1 -1
  364. package/server/{types-D2ETIB8T.js → types-DzlUKiuf.js} +4 -3
  365. package/server/{types-Dh6RI5Vj.js → types-kI9ik8XO.js} +1 -1
  366. package/server/{uat-promote-verification-DyvQXvIn.js → uat-promote-verification-c_pxoxEc.js} +5 -5
  367. package/server/{uat-train-Dv0Bxer7.js → uat-train-CWGxBdJO.js} +0 -0
  368. package/server/{uat-train-diX_7shd.js → uat-train-CfCYd2ve.js} +1 -1
  369. package/server/{validate-606KcYZC.js → validate-f3ItVCfm.js} +3 -3
  370. package/server/{validation-Cf7aaV5A.js → validation-5G_wQtea.js} +1 -1
  371. package/server/{validation-CnrDul1x.js → validation-7tSiCM82.js} +4 -4
  372. package/server/{verification-artifact-GOaj8u2s.js → verification-artifact-9h9dH8uX.js} +1 -1
  373. package/server/{verification-artifact-D4b-bio9.js → verification-artifact-C_4WJnf6.js} +1 -1
  374. package/server/{verification-runner-DiPaUP-C.js → verification-runner-BV5F6wrA.js} +1 -1
  375. package/server/{verification-runner-B5MVxDvU.js → verification-runner-D58KmBhK.js} +18 -38
  376. package/server/{vtt-parser-CMU5EZ5R.js → vtt-parser-2iT9OHa9.js} +1 -1
  377. package/server/{work-agent-prompt-Csb3fbVR.js → work-agent-prompt-D03s4DD1.js} +9 -9
  378. package/server/{workflows-D87ajwV6.js → workflows-BMBwLYPV.js} +281 -98
  379. package/server/workflows-BOmWGpIh.js +2 -0
  380. package/server/{workspace-iD8oULqu.js → workspace-BgflNCH0.js} +3 -3
  381. package/server/{workspace-AIOM7n00.js → workspace-Cn9ywfSW.js} +1 -1
  382. package/server/{workspace-anchor-drift-19cJ1bH5.js → workspace-anchor-drift-C8Fy3shi.js} +1 -1
  383. package/server/{workspace-anchor-drift-C3mK5wNI.js → workspace-anchor-drift-CMiNncwq.js} +5 -8
  384. package/server/{workspace-config-CJ7RqQiP.js → workspace-config-aUc2nIz6.js} +1 -1
  385. package/server/{workspace-manager-CXfrw4rR.js → workspace-manager-Bem7ZBs9.js} +521 -292
  386. package/server/workspace-manager-C0CpNh3t.js +3 -0
  387. package/server/{workspace-metadata-BuMRco5P.js → workspace-metadata-C5iSlPRo.js} +1 -1
  388. package/server/{workspace-metadata-eHSj_NsP.js → workspace-metadata-UKmTYmDQ.js} +2 -2
  389. package/server/{workspaces-DbtMX2TM.js → workspaces-DqxgwDZ8.js} +143 -113
  390. package/sync-sources/hooks/notification-hook +12 -1
  391. package/sync-sources/hooks/pan-hook-lib.sh +226 -0
  392. package/sync-sources/hooks/session-start-hook +31 -4
  393. package/sync-sources/hooks/work-agent-stop-hook +23 -1
  394. package/sync-sources/skills/pan-memory/SKILL.md +19 -3
  395. package/sync-sources/skills/pan-projects/SKILL.md +9 -0
  396. package/sync-sources/skills/pan-restart/SKILL.md +26 -7
  397. package/sync-sources/skills/pan-workspace/SKILL.md +77 -0
  398. package/server/activity-logger-CMthG6Vd.js +0 -3
  399. package/server/agent-state-DyZJia9f.js +0 -3
  400. package/server/agents-Dnn4XgdB.js +0 -3
  401. package/server/archive-planning-BHCd_eL5.js +0 -2
  402. package/server/cli-D6mRfUE6.js +0 -3
  403. package/server/deacon-swarm-BkKR7SXu.js +0 -2
  404. package/server/delivery-C2M73sBg.js +0 -3
  405. package/server/dist-qcf9gAP0.js +0 -3
  406. package/server/event-store-5UKzh9Jf.js +0 -3
  407. package/server/forge-D647IMNa.js +0 -3
  408. package/server/fts-db-wROfFfje.js +0 -146
  409. package/server/hume-DtWN8oV5.js +0 -3
  410. package/server/inspect-agent-CPqXI81t.js +0 -2
  411. package/server/merge-ops-7QqziXAh.js +0 -2
  412. package/server/merge-rebase-B4pgzvQJ.js +0 -2
  413. package/server/node_modules/brace-expansion/.tap/coverage/8b906b8c-e21f-40b5-8c0d-214d8c2682c5.json +0 -757
  414. package/server/node_modules/brace-expansion/.tap/processinfo/8b906b8c-e21f-40b5-8c0d-214d8c2682c5.json +0 -719
  415. package/server/node_modules/brace-expansion/ADVISORY-CVE-2026-14257.md +0 -107
  416. package/server/node_modules/brace-expansion/dist/commonjs/index.d.ts +0 -8
  417. package/server/node_modules/brace-expansion/dist/commonjs/index.d.ts.map +0 -1
  418. package/server/node_modules/brace-expansion/dist/commonjs/index.js +0 -263
  419. package/server/node_modules/brace-expansion/dist/commonjs/index.js.map +0 -1
  420. package/server/node_modules/brace-expansion/dist/commonjs/package.json +0 -3
  421. package/server/node_modules/brace-expansion/dist/esm/index.d.ts +0 -8
  422. package/server/node_modules/brace-expansion/dist/esm/index.d.ts.map +0 -1
  423. package/server/node_modules/brace-expansion/dist/esm/index.js +0 -259
  424. package/server/node_modules/brace-expansion/dist/esm/index.js.map +0 -1
  425. package/server/node_modules/brace-expansion/dist/esm/package.json +0 -3
  426. package/server/project-repos-BgW4lcIa.js +0 -3
  427. package/server/projects-_n3Zui6K.js +0 -3
  428. package/server/providers-BI1mOBQ4.js +0 -3
  429. package/server/public/assets/index-Ddkcz3WT.css +0 -1
  430. package/server/public/assets/mermaid-GHXKKRXX-BzPfaQJ1.js +0 -1
  431. package/server/rally-x6ztTQo4.js +0 -3
  432. package/server/record-BTwWhtBb.js +0 -3
  433. package/server/record-update-DaOKS7Wb.js +0 -277
  434. package/server/recovery-trip-D-wM9EfB.js +0 -44
  435. package/server/resume-DXIIfJNk.js +0 -3
  436. package/server/rollup-DxCjJaAM.js +0 -3
  437. package/server/settings-9jSGHBPY.js +0 -2
  438. package/server/specs-DKV3jIEs.js +0 -3
  439. package/server/stack-health-CoWAhA99.js +0 -3
  440. package/server/supervisor-CyR_mW5B.js +0 -2
  441. package/server/tmux-Ctk6RV5l.js +0 -3
  442. package/server/token-util-CrfQ2FKf.js +0 -3
  443. package/server/workflows-DN6NyVGd.js +0 -2
  444. 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
@@ -0,0 +1,3 @@
1
+ import { n as init_deacon_event_client, t as createDeaconEventClient } from "./deacon-event-client-C93rvOT7.js";
2
+ init_deacon_event_client();
3
+ export { createDeaconEventClient };
@@ -1,6 +1,6 @@
1
- import { Hr as CONFIG_FILE, li as init_paths } from "./config-yaml-CxdwhAIA.js";
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-D0q_i8WM.js";
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-DPHsO14z.js.map
82
+ //# sourceMappingURL=deacon-nudge-log-BND_97Wo.js.map
@@ -1,4 +1,4 @@
1
- import { n as settlePendingLifecycleClaim, t as claimPendingLifecycleFile } from "./pending-lifecycle-claim-DQUHIDfX.js";
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-C1-9zbP_.js");
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-2ZflPxgo.js.map
33
+ //# sourceMappingURL=deacon-pending-lifecycle-CD3YsiQK.js.map
@@ -0,0 +1,2 @@
1
+ import { r as coordinateSwarmSlots } from "./deacon-swarm-rqrl4TMs.js";
2
+ export { coordinateSwarmSlots };
@@ -1,15 +1,15 @@
1
- import { D as resolveTieredExecutionEnabled, Gn as init_projects, Nt as getProjectConfigFromWorkspacePath, Pt as init_record, Rt as readIssueRecordForWorkspaceSync, T as init_tier_table, Vt as resolveProjectForIssue, Yn as listProjectsSync, ar as resolveProjectFromIssueSync, f as loadConfigSync, gn as isStatePlaneOnlyStatus, hn as init_state_plane, jt as getIssueRecordPathForWorkspace, t as init_config_yaml, zn as getProjectSync, zt as readIssueRecordSync } from "./config-yaml-CxdwhAIA.js";
2
- import { a as updateIssueRecordForWorkspace, i as updateIssueRecord, r as init_record_update } from "./record-update-DaOKS7Wb.js";
3
- import { A as listPaneValues, E as isPaneDead, H as sessionExists, M as listSessionNames, i as capturePane, w as init_tmux } from "./tmux-CfDHob9M.js";
4
- import { C as setReviewStatusSync, d as getReviewStatusSync, p as init_review_status } from "./review-status-CwhA9wmd.js";
5
- import { A as spawnTierSupervisor, D as init_tier_supervisor, Dt as getCachedMemoryVerdict, E as deliverCommitForReview, Hr as init_agent_runtime, I as init_slot_reconcile, Jt as init_spawn_prep, L as listSlotAssignments, M as broadcastCommit, N as init_tier_feed, O as loadPrdDraft, Ot as init_memory_verdict_cache, Qn as decideResumeGate, R as reconcileSlotState, St as releaseSwarmSlot, Tt as tryReserveSwarmSlot, Vr as getAgentRuntimeSnapshot, X as messageAgent, Y as init_messaging, bt as init_concurrency, dt as spawnRun, er as getAgentResumeGateBlockReason, ft as init_termination, gt as countRunningSwarmSlotsForIssue, in as resolveTier, ir as init_agent_state, j as supervisorAgentId, k as shouldSupervise, lt as init_spawn, pt as stopAgent, qt as defaultRunWorkspace, rn as init_resolve_tier, rr as getAgentStateSync, yt as getConcurrencyLimits } from "./queries-DCX27GRr.js";
6
- import { S as init_specs, d as readPlanSync, i as findPlanSync, n as applyStatusOverrides, o as init_io, v as init_types, x as findSpecByIssue, y as subItemsOf } from "./io-C0NV7y6C.js";
7
- import { c as init_control_settings, d as isDeaconGloballyPausedSync } from "./control-settings-qYYHrIqy.js";
8
- import { i as createActiveSlice, l as init_dag, n as blockingParentCount, o as getDispatchableItems } from "./dag-5QlmH0oC.js";
9
- import { a as loadCloisterConfigSync, r as init_config } from "./config-ktAVnp4s.js";
10
- import { r as init_swarm_readiness, t as analyzeSwarmReadiness } from "./swarm-readiness-MNE5O8hn.js";
11
- import { t as recordRecoveryFailure } from "./recovery-trip-D-wM9EfB.js";
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-UpAM4DmT.js");
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
- return decideAutonomousRedrive(state, {
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 admission = decideAutonomousRedrive(slot.agentId ? getAgentStateSync(slot.agentId) ?? {} : {}, { owesRework: true });
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 recordRecoveryFailure(workspacePath, issueId, "swarm-slot-requeue", slot.itemId);
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-DwGUgSVp.js.map
1497
+ //# sourceMappingURL=deacon-swarm-rqrl4TMs.js.map
package/server/deacon.js CHANGED
@@ -1,216 +1,18 @@
1
- import { ln as init_auto_commit, sn as flushAllPendingAutoCommits } from "./config-yaml-CxdwhAIA.js";
2
- import { o as init_activity_logger, s as setActivityEventStoreProvider } from "./activity-logger-CyteR4JO.js";
3
- import { d as getReviewStatusSync, p as init_review_status } from "./review-status-CwhA9wmd.js";
4
- import { b as init_agents, tr as getAgentState } from "./queries-DCX27GRr.js";
5
- import { r as setCloisterEventStoreProvider, t as getCloisterService } from "./service-BzFG0Us_.js";
6
- import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-BG6yQKNL.js";
7
- import { F as setAgentStoppedNotifier, I as setMergeReadyNotifier, M as runPatrol, P as setAgentStatusChangedNotifier, j as resetPatrolHeartbeatForStartup } from "./deacon-B1LD5cJU.js";
8
- import { t as emitReviewStatusChanged } from "./review-status-emit-BPJwYcRy.js";
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 ../../lib/cloister/deacon-event-client.ts
12
+ //#region deacon-main.ts
12
13
  init_activity_logger();
13
14
  init_agents();
14
- init_internal_token();
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-Cf7aaV5A.js");
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 { Gn as init_projects, ar as resolveProjectFromIssueSync } from "./config-yaml-CxdwhAIA.js";
2
- import { t as recordRecoveryFailure } from "./recovery-trip-D-wM9EfB.js";
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-B06RFIr2.js.map
14
+ //# sourceMappingURL=dead-end-trip-DSF23CLX.js.map