@overdeck/desktop 0.49.2 → 0.50.1

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 (554) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +1 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-CHtDkHEL.js → acceptance-criteria-DFyrgxW5.js} +2 -2
  4. package/server/{active-dashboard-bundle-Byh6sP-q.js → active-dashboard-bundle-DbfgP8TS.js} +2 -2
  5. package/server/{activity-logger-Ck8qoluj.js → activity-logger-DtdKxzPh.js} +1 -1
  6. package/server/{activity-logger-BWZhVphb.js → activity-logger-ru8ggv-d.js} +3 -3
  7. package/server/{advancing-selfheal-65W4yUQi.js → advancing-selfheal-BdZ1iFJf.js} +11 -6
  8. package/server/{agent-gc-BNUudFnt.js → agent-gc-DBMg1vIc.js} +11 -11
  9. package/server/{agent-idle-ONBssBN_.js → agent-idle-CQlwmcRR.js} +11 -11
  10. package/server/{agent-state-CM8iVw5B.js → agent-state-B0v3fvGI.js} +1 -1
  11. package/server/{agent-state-BJhGIJZe.js → agent-state-BnyNoDWQ.js} +345 -402
  12. package/server/{agent-state-service-CiIuwzIs.js → agent-state-service-D95wBjA3.js} +5 -5
  13. package/server/{agent-state-service-CzHfoqKQ.js → agent-state-service-GK2Uy8zc.js} +1 -1
  14. package/server/{agents-DpCuoF65.js → agents-BdkVgjxC.js} +1 -1
  15. package/server/{agents-jXgqpHca.js → agents-DMs1aLRU.js} +4 -4
  16. package/server/{archive-planning-CGkU6UeL.js → archive-planning-CFf5FVHQ.js} +5 -5
  17. package/server/archive-planning-CNSWQPvz.js +2 -0
  18. package/server/{artifact-index-jobs-Ck4NRRkY.js → artifact-index-jobs-BdeB5RIY.js} +2 -2
  19. package/server/{assemble-CyvEBmmq.js → assemble-D88iFkP-.js} +2 -2
  20. package/server/{auto-spawn-consent-Dc4mtM-B.js → auto-spawn-consent-C1avLtkk.js} +7 -7
  21. package/server/{backlog-auto-trigger-CCEpr4YT.js → backlog-auto-trigger-oKIGNBzZ.js} +3 -3
  22. package/server/{behavior-BiCQzqyT.js → behavior-CPX0E2Fj.js} +49 -7
  23. package/server/{bridge-pool-patrol-Ce8rNPym.js → bridge-pool-patrol-DstxbANA.js} +2 -2
  24. package/server/{briefing-freshness-e_OEYZEe.js → briefing-freshness-FF0WLPMc.js} +2 -2
  25. package/server/build-info-Df2tkRrB.js +2 -0
  26. package/server/{build-info-BRw4QlYO.js → build-info-DiA6h4T6.js} +3 -3
  27. package/server/{checkpoint-manager-DOwRGFff.js → checkpoint-manager-CkXA-F6Z.js} +2 -2
  28. package/server/{checkpoint-manager-CKr42Usw.js → checkpoint-manager-D74ueYZp.js} +1 -1
  29. package/server/checkpoint-worker.js +1 -1
  30. package/server/{checkpoints-Cszp_0Np.js → checkpoints-Ds83fUb1.js} +2 -2
  31. package/server/{checkpoints-Cb6CWT4S.js → checkpoints-JIKy0UFv.js} +1 -1
  32. package/server/{claude-hooks-provision-C5JHpxTS.js → claude-hooks-provision-BJ8LNIAe.js} +1 -1
  33. package/server/{claude-hooks-provision-Cer2eFfj.js → claude-hooks-provision-D7Z8kANm.js} +2 -2
  34. package/server/{claude-permissions-Bc5kjX1q.js → claude-permissions-Bn53HCXr.js} +18 -3
  35. package/server/{claude-settings-overlay-m-VVZej1.js → claude-settings-overlay-CqJZjFqv.js} +2 -2
  36. package/server/{claude-settings-overlay-C7rWsnya.js → claude-settings-overlay-QByq1SQa.js} +1 -1
  37. package/server/{cli-BmczsfD6.js → cli-BXmAb7vN.js} +11 -11
  38. package/server/cli-BjznnCC3.js +2 -0
  39. package/server/{cliproxy-BpYpkogS.js → cliproxy-L_2OxNJf.js} +2 -2
  40. package/server/{cliproxy-_yUU0HRY.js → cliproxy-ltFu5xfR.js} +1 -1
  41. package/server/{close-issue-CxvRD0UI.js → close-issue-BZAf0Ii-.js} +5 -5
  42. package/server/{closed-issue-reaper-nMLRi5de.js → closed-issue-reaper-BJa8SbvQ.js} +13 -13
  43. package/server/{closed-issue-reaper-omOcUDBl.js → closed-issue-reaper-DVtyOI4C.js} +1 -1
  44. package/server/{codex-DZhFfcWu.js → codex-BqLZKVNm.js} +1 -1
  45. package/server/{codex-KaSKE-R3.js → codex-DSs-3aOm.js} +6 -6
  46. package/server/{compaction-continuation-Bjfi70G-.js → compaction-continuation-TG0HYkOq.js} +3 -3
  47. package/server/{config-ZGjvuR6J.js → config-Cx3N6gWz.js} +2 -2
  48. package/server/{config-Doq_tF-f.js → config-DP0VV7rX.js} +2 -2
  49. package/server/{config-CH1AqqIQ.js → config-DURnId0k.js} +1 -1
  50. package/server/{config-yaml-D9nfpEx1.js → config-yaml-OoH-ZpTb.js} +48 -9
  51. package/server/{conflict-gate-DcUTY4Gb.js → conflict-gate-SgOELW84.js} +5 -5
  52. package/server/{conflict-gate-D4XCtrm2.js → conflict-gate-pMfhBEVB.js} +1 -1
  53. package/server/{context-layers-BGj2Y9l3.js → context-layers-D0QBOPJJ.js} +2 -2
  54. package/server/{context-layers-BBTKP-Y4.js → context-layers-LY5zt0da.js} +3 -3
  55. package/server/{continue-i7Revg8D.js → continue-Cmzd6leL.js} +2 -2
  56. package/server/{control-settings-BMoDHY1G.js → control-settings-Bdud_B1j.js} +308 -5
  57. package/server/{conversation-compaction-DzIjYMfg.js → conversation-compaction-BX9UR8nl.js} +1 -1
  58. package/server/{conversation-compaction-D4VOmF7p.js → conversation-compaction-dFx_2wpa.js} +8 -8
  59. package/server/{conversation-service-CzZUJFEx.js → conversation-service-B3h1erHm.js} +1 -1
  60. package/server/{conversation-service-tQCIbBVZ.js → conversation-service-zgLM2g2D.js} +37 -13
  61. package/server/{conversations-bFDaD5YN.js → conversations-Ch7UGi0F.js} +1 -1
  62. package/server/{conversations-C75EFFjf.js → conversations-JyrMSeOh.js} +5 -5
  63. package/server/{cost-CiIwxH1D.js → cost-CxXv7ei-.js} +10 -2
  64. package/server/cost-DR57uJFP.js +838 -0
  65. package/server/{cost-BCWEkvro.js → cost-MZ7EZFDc.js} +3 -3
  66. package/server/{cost-sync-DOkdE_yB.js → cost-sync-Bq_dyq9k.js} +3 -3
  67. package/server/{dag-BPc74hwj.js → dag-CKUsr8wB.js} +2 -2
  68. package/server/{dangerous-git-ops-By9iguTP.js → dangerous-git-ops-BOtXCFkT.js} +1 -1
  69. package/server/dashboard-db-worker.js +61 -11
  70. package/server/{deacon-CzSZMtb-.js → deacon-BUOpTnmQ.js} +3 -3
  71. package/server/{deacon-B24dNzr8.js → deacon-C7qZxRuW.js} +125 -165
  72. package/server/{deacon-canonical-state-CkvxRPck.js → deacon-canonical-state-hcaZgjoT.js} +2 -2
  73. package/server/{deacon-event-client-Do6Z2gKl.js → deacon-event-client-Coiopt4u.js} +2 -2
  74. package/server/{deacon-event-client-BYIQBu0T.js → deacon-event-client-DJ71Tifg.js} +1 -1
  75. package/server/{deacon-nudge-log-CzM9JA9t.js → deacon-nudge-log-pcliw8Dr.js} +1 -1
  76. package/server/{deacon-pending-lifecycle-BObEdT-L.js → deacon-pending-lifecycle-Dv0-8bZG.js} +3 -3
  77. package/server/deacon.js +11 -11
  78. package/server/dead-end-trip-B91w2PGV.js +2 -0
  79. package/server/{dead-end-trip-CnVmjnya.js → dead-end-trip-DH_hA7yS.js} +3 -3
  80. package/server/{delivery-gyce0vQ7.js → delivery-zJM4aIkf.js} +1 -1
  81. package/server/{deploy-patrol-CEwwEYDM.js → deploy-patrol-Cv96N0s6.js} +8 -8
  82. package/server/deploy-queue-2cN86Lg4.js +2 -0
  83. package/server/{deploy-queue-r96ojDI3.js → deploy-queue-EcksuKE2.js} +2 -2
  84. package/server/{deploy-window-D_3hhfxt.js → deploy-window-BXbzS0zN.js} +4 -4
  85. package/server/{deploy-window-DeJK8mTK.js → deploy-window-CHgL_TTN.js} +1 -1
  86. package/server/{dev-supervisor-DZWwpENk.js → dev-supervisor-lNaYB136.js} +2 -2
  87. package/server/{devcontainer-renderer-d-9dCV_2.js → devcontainer-renderer-q8q9aXRd.js} +3 -3
  88. package/server/{dist-DsLAsFSh.js → dist-CoR2sivG.js} +1 -1
  89. package/server/dist-FHv1s5ez.js +3 -0
  90. package/server/{docker-CRPHBylA.js → docker-BNd0tMdS.js} +1 -1
  91. package/server/{docker-B2mUBzGk.js → docker-Dk-shfga.js} +3 -3
  92. package/server/{dod-DWtilRLx.js → dod-BAk5arLF.js} +1 -1
  93. package/server/{done-preflight-BDVdWed5.js → done-preflight-AiXnYYAy.js} +1 -1
  94. package/server/{done-preflight-D4ukUf-S.js → done-preflight-CukR3Br8.js} +5 -5
  95. package/server/{durable-review-pipeline-CaCbEJSt.js → durable-review-pipeline-BOEZ0chh.js} +1 -1
  96. package/server/{durable-review-pipeline-B3OS2_He.js → durable-review-pipeline-Djx_lvFd.js} +1 -1
  97. package/server/{ensure-devcontainer-rGSh0JHK.js → ensure-devcontainer-BjMV_gdX.js} +1 -1
  98. package/server/{ensure-devcontainer-BUeBRjmm.js → ensure-devcontainer-YXncXZ5Q.js} +4 -4
  99. package/server/{esm-shims-oAaKIa-a.js → esm-shims-deFq5Hhl.js} +1 -1
  100. package/server/{event-store-Db4w4YIY.js → event-store-CFnLP8w-.js} +1 -1
  101. package/server/{event-store-BCSgMubf.js → event-store-DbjldlXW.js} +5 -5
  102. package/server/{event-store-provider-DlSQND3V.js → event-store-provider-Bu1Qrg6v.js} +1 -1
  103. package/server/{events-B6zioJA_.js → events-Bb2x5ijT.js} +3 -3
  104. package/server/{factory-BrdqXBeK.js → factory-DfIQG-qW.js} +4 -4
  105. package/server/{feature-registry-storage-zh3ZXW6f.js → feature-registry-storage-BzAGS4DA.js} +2 -2
  106. package/server/{features-BGntOWdy.js → features-KxOILHX8.js} +2 -2
  107. package/server/{feedback-stuck-retirement-DpA5u1kt.js → feedback-stuck-retirement-BqTHm-1Z.js} +2 -2
  108. package/server/{feedback-target-D7GxdUYG.js → feedback-target-BjLidX0M.js} +10 -10
  109. package/server/{feedback-target-Ddqk93NF.js → feedback-target-D2CIZFwc.js} +1 -1
  110. package/server/{feedback-writer-CH2846DP.js → feedback-writer-BrSQ4fC-.js} +1 -1
  111. package/server/{feedback-writer-C1gCLFmp.js → feedback-writer-Dgrma-L1.js} +5 -5
  112. package/server/{flywheel-CjW2L7BS.js → flywheel-D5FchYg4.js} +16 -16
  113. package/server/{flywheel-HJt7QdWP.js → flywheel-Ds0eOd1P.js} +1 -1
  114. package/server/{flywheel-v1cCOBx-.js → flywheel-X6kvGnf2.js} +15 -15
  115. package/server/{flywheel-merge-order-D_yyAlND.js → flywheel-merge-order-BTY73Efv.js} +17 -15
  116. package/server/{flywheel-merge-order-4fNRN2F2.js → flywheel-merge-order-PTHnouQS.js} +1 -1
  117. package/server/{forge-RVTCK_5X.js → forge-B08cRXEb.js} +2 -2
  118. package/server/forge-egNLsjVi.js +2 -0
  119. package/server/{from-BnLgKYvw.js → from-C3dzmjSO.js} +1 -1
  120. package/server/{fs-lock-C7J-ugIf.js → fs-lock-DfiYlr5u.js} +2 -2
  121. package/server/{fts-operations-CU0B5WUx.js → fts-operations-Do1SP0w4.js} +2 -2
  122. package/server/{git-info-BSrI9owC.js → git-info-DMOSfJ9I.js} +1 -1
  123. package/server/{git-utils-DW8-jIUJ.js → git-utils-DfpFkvwk.js} +4 -4
  124. package/server/{git-utils-CsKV0Dis.js → git-utils-fcK3ZRNj.js} +1 -1
  125. package/server/{github-app-7ywLhuZO.js → github-app-Co8ZhyUJ.js} +2 -2
  126. package/server/{github-app-Oi5hdn1n.js → github-app-HAqQZZRD.js} +1 -1
  127. package/server/{github-client-Cy0fSj1a.js → github-client-C7MUxFzX.js} +1 -1
  128. package/server/{github-client-DAbuXLuk.js → github-client-wqbDCmlL.js} +2 -2
  129. package/server/{github-pr-lookup-Dhh3ec1V.js → github-pr-lookup-DdLCDdu9.js} +2 -2
  130. package/server/{harness-binary-tMmgJfC1.js → harness-binary-BuakhXkB.js} +2 -2
  131. package/server/{harness-resolve-DusNpVEe.js → harness-resolve-CISjc9FR.js} +4 -4
  132. package/server/{health-events-BYDZ9n2i.js → health-events-9RhRGZK1.js} +1 -1
  133. package/server/{health-events-DNw9Mzw9.js → health-events-CIE7gy34.js} +2 -2
  134. package/server/{hooks-B4wj32l2.js → hooks-CmL3TXla.js} +1 -1
  135. package/server/{hooks-BjBjxqNh.js → hooks-D55VTdQS.js} +2 -2
  136. package/server/{hume-BP9YbxaE.js → hume-1FJmNDTq.js} +2 -2
  137. package/server/hume-gXLmRhmN.js +3 -0
  138. package/server/{identity-C23uY8dZ.js → identity-CZbJ0xpl.js} +3 -3
  139. package/server/{idle-stack-reaper-BSxb1bln.js → idle-stack-reaper-CjovDCet.js} +4 -4
  140. package/server/{idle-stack-reaper-Bw0rU9GC.js → idle-stack-reaper-DhbFdkWv.js} +1 -1
  141. package/server/{in-flight-guard-DuxabAHT.js → in-flight-guard-B7khcBdQ.js} +1 -1
  142. package/server/{infra-CHIvOb9q.js → infra-BbSWNOpH.js} +10 -4
  143. package/server/{injection-BYUt8ml1.js → injection-BSnn_10a.js} +8 -8
  144. package/server/{injection-BviePcm3.js → injection-DsQDBSEi.js} +1 -1
  145. package/server/inspect-agent-BuSYgRQs.js +2 -0
  146. package/server/{inspect-agent-sV_19NxZ.js → inspect-agent-DS8j2v6U.js} +12 -12
  147. package/server/{internal-token-DoVzb4b7.js → internal-token-CUKcTWSG.js} +2 -2
  148. package/server/{internal-token-BOtIRJU7.js → internal-token-CkrMLCLU.js} +1 -1
  149. package/server/{io-DKrWd3gX.js → io-BgzG56av.js} +4 -4
  150. package/server/{issue-closed-6RQsAjDX.js → issue-closed-DZEwD3ol.js} +7 -7
  151. package/server/{issue-lifecycle-DOPVv7xz.js → issue-lifecycle-Bnfbpkmk.js} +1 -1
  152. package/server/{issue-lifecycle-D9nLErvS.js → issue-lifecycle-LgYeE1o2.js} +25 -25
  153. package/server/{issue-service-singleton-B2xy-IS9.js → issue-service-singleton-Bsb0GaY8.js} +10 -10
  154. package/server/{issue-service-singleton-CvgNAWqK.js → issue-service-singleton-COEqWNKE.js} +1 -1
  155. package/server/{issue-title-fallback-DTSCQVu0.js → issue-title-fallback-D4_b2XwP.js} +3 -3
  156. package/server/{issues-e_Ck1Ln2.js → issues-DYAEUW45.js} +2 -2
  157. package/server/{jsonl-parser-DqxVCZ1k.js → jsonl-parser-1IqHI9Yb.js} +3 -3
  158. package/server/{jsonl-resolver-07OS3qOr.js → jsonl-resolver-BJ8Hg-yD.js} +8 -8
  159. package/server/{kimi-code-vtXl2DR5.js → kimi-code-Cdkk9vRU.js} +1 -1
  160. package/server/{kimi-code-BjtAHIz1.js → kimi-code-DwqLCWFw.js} +11 -11
  161. package/server/{kimi-parser-B1lgy2Vt.js → kimi-parser-DFsZQArz.js} +2 -2
  162. package/server/{label-cleanup-D2zUMasf.js → label-cleanup-Bej6xDZK.js} +3 -3
  163. package/server/{lifecycle-0NOEzomy.js → lifecycle-BibLMHBH.js} +2 -2
  164. package/server/{lifecycle-DaCovZwn.js → lifecycle-CMpSB9sn.js} +6 -6
  165. package/server/{lifecycle-io-6WL46dsB.js → lifecycle-io-CCCAMefe.js} +5 -5
  166. package/server/{lifecycle-io-BBMTaP7S.js → lifecycle-io-CLWwYZaR.js} +1 -1
  167. package/server/{linear-client-BTGApNLo.js → linear-client-BtYl16Cy.js} +1 -1
  168. package/server/{linear-client-7fQThJTc.js → linear-client-fpL-qJEa.js} +2 -2
  169. package/server/{linear-mcp-auth-B8pYRsiU.js → linear-mcp-auth-CQ7ROT1X.js} +1 -1
  170. package/server/{linear-mcp-auth-Nk5s3L9M.js → linear-mcp-auth-nAYWoUbH.js} +5 -5
  171. package/server/memory-fts-worker.js +1 -1
  172. package/server/{memory-governor-Cqvbusr4.js → memory-governor-Mi5zF5zw.js} +87 -21
  173. package/server/{memory-pressure-patrol-DPb8foam.js → memory-pressure-patrol-CDeDh46A.js} +38 -14
  174. package/server/{merge-BB_bjJ9a.js → merge-DCuDLiy9.js} +1 -1
  175. package/server/{merge-FZ78_cEz.js → merge-_XIivhkq.js} +3 -3
  176. package/server/{merge-agent-BuoC_PRZ.js → merge-agent-svBDRWB6.js} +2 -2
  177. package/server/{merge-agent-B3jRrlS1.js → merge-agent-zF9vqWqY.js} +31 -31
  178. package/server/{merge-batch-B8bVjFWS.js → merge-batch-BJjzUUL7.js} +1 -1
  179. package/server/{merge-completeness-DQt7Qa7i.js → merge-completeness-CQPqu-pI.js} +4 -4
  180. package/server/{merge-completeness-DkdabVch.js → merge-completeness-CeQheehh.js} +1 -1
  181. package/server/merge-eligibility-CJrBhQQe.js +3 -0
  182. package/server/merge-eligibility-DhxVE8qU.js +51 -0
  183. package/server/merge-ops-CUzpOPtO.js +2 -0
  184. package/server/{merge-rebase-qq40s91P.js → merge-rebase-Bjo45m3k.js} +2 -2
  185. package/server/merge-rebase-DkfcUT60.js +2 -0
  186. package/server/{merge-set-BmRRflt0.js → merge-set-COZvz2nx.js} +4 -4
  187. package/server/{merge-set-BTNYvxM3.js → merge-set-ChxZgjBB.js} +1 -1
  188. package/server/{merge-sync-CJpOa0cZ.js → merge-sync-CCi1Esdx.js} +2 -2
  189. package/server/{merge-sync-0m2Q087q.js → merge-sync-DuJ6Vkl3.js} +1 -1
  190. package/server/{merge-train-iwKqjtCF.js → merge-train-DTJXF8ph.js} +4 -4
  191. package/server/{merge-train-deps-CH5Mr3vN.js → merge-train-deps-C0P0qGKe.js} +4 -4
  192. package/server/{merge-verification-JJc5GC2t.js → merge-verification-C5FexOBZ.js} +6 -6
  193. package/server/{merged-docker-cleanup-worker-CrhTdxZV.js → merged-docker-cleanup-worker-0SEDG3Ao.js} +1 -1
  194. package/server/{merged-docker-cleanup-worker-BOqWA373.js → merged-docker-cleanup-worker-C-kSp_jw.js} +3 -3
  195. package/server/{messaging-nuwStbdQ.js → messaging-DQi-WEFB.js} +1 -1
  196. package/server/{multipart-parser-DxuW_rZV.js → multipart-parser-BYwfKOVU.js} +2 -2
  197. package/server/{no-resume-mode-xuYLFhLw.js → no-resume-mode-DjMQRkId.js} +1 -1
  198. package/server/node_modules/.package-lock.json +28 -28
  199. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/package.json +2 -2
  200. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/70_cli/10_basics.ts +4 -2
  201. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeClusterSocket.d.ts.map +1 -1
  202. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeClusterSocket.js +12 -9
  203. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeClusterSocket.js.map +1 -1
  204. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeSocket.js +1 -1
  205. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeSocket.js.map +1 -1
  206. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +6 -6
  207. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeClusterSocket.ts +15 -12
  208. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeSocket.ts +1 -1
  209. package/server/node_modules/@types/node/README.md +1 -1
  210. package/server/node_modules/@types/node/buffer.buffer.d.ts +10 -5
  211. package/server/node_modules/@types/node/buffer.d.ts +1 -0
  212. package/server/node_modules/@types/node/crypto.d.ts +2 -4
  213. package/server/node_modules/@types/node/dgram.d.ts +119 -4
  214. package/server/node_modules/@types/node/diagnostics_channel.d.ts +4 -4
  215. package/server/node_modules/@types/node/ffi.d.ts +1 -1
  216. package/server/node_modules/@types/node/fs/promises.d.ts +61 -65
  217. package/server/node_modules/@types/node/fs.d.ts +86 -76
  218. package/server/node_modules/@types/node/http.d.ts +18 -2
  219. package/server/node_modules/@types/node/http2.d.ts +12 -4
  220. package/server/node_modules/@types/node/index.d.ts +1 -0
  221. package/server/node_modules/@types/node/inspector.d.ts +2 -1
  222. package/server/node_modules/@types/node/net.d.ts +108 -16
  223. package/server/node_modules/@types/node/package.json +3 -3
  224. package/server/node_modules/@types/node/perf_hooks.d.ts +31 -19
  225. package/server/node_modules/@types/node/process.d.ts +52 -0
  226. package/server/node_modules/@types/node/quic.d.ts +252 -42
  227. package/server/node_modules/@types/node/sqlite.d.ts +6 -2
  228. package/server/node_modules/@types/node/stream/iter.d.ts +4 -4
  229. package/server/node_modules/@types/node/stream/web.d.ts +20 -0
  230. package/server/node_modules/@types/node/test.d.ts +36 -0
  231. package/server/node_modules/@types/node/tls.d.ts +50 -15
  232. package/server/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +5 -0
  233. package/server/node_modules/@types/node/ts5.6/index.d.ts +1 -0
  234. package/server/node_modules/@types/node/ts5.7/index.d.ts +1 -0
  235. package/server/node_modules/@types/node/tty.d.ts +4 -3
  236. package/server/node_modules/@types/node/vfs.d.ts +211 -0
  237. package/server/node_modules/@types/node/vm.d.ts +1 -1
  238. package/server/node_modules/@types/node/zlib.d.ts +17 -0
  239. package/server/node_modules/effect/node_modules/uuid/README.md +19 -19
  240. package/server/node_modules/effect/node_modules/uuid/dist/v1.js +7 -3
  241. package/server/node_modules/effect/node_modules/uuid/dist/v7.js +5 -2
  242. package/server/node_modules/effect/node_modules/uuid/dist-node/v1.js +7 -3
  243. package/server/node_modules/effect/node_modules/uuid/dist-node/v7.js +5 -2
  244. package/server/node_modules/effect/node_modules/uuid/package.json +4 -3
  245. package/server/node_modules/msgpackr/README.md +1 -0
  246. package/server/node_modules/msgpackr/dist/index-no-eval.cjs +13 -7
  247. package/server/node_modules/msgpackr/dist/index-no-eval.cjs.map +1 -1
  248. package/server/node_modules/msgpackr/dist/index-no-eval.min.js +1 -1
  249. package/server/node_modules/msgpackr/dist/index-no-eval.min.js.map +1 -1
  250. package/server/node_modules/msgpackr/dist/index.js +13 -7
  251. package/server/node_modules/msgpackr/dist/index.js.map +1 -1
  252. package/server/node_modules/msgpackr/dist/index.min.js +1 -1
  253. package/server/node_modules/msgpackr/dist/index.min.js.map +1 -1
  254. package/server/node_modules/msgpackr/dist/node.cjs +13 -7
  255. package/server/node_modules/msgpackr/dist/node.cjs.map +1 -1
  256. package/server/node_modules/msgpackr/dist/test.js +63 -7
  257. package/server/node_modules/msgpackr/dist/test.js.map +1 -1
  258. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs +11 -5
  259. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs.map +1 -1
  260. package/server/node_modules/msgpackr/index.d.cts +1 -0
  261. package/server/node_modules/msgpackr/index.d.ts +1 -0
  262. package/server/node_modules/msgpackr/pack.js +2 -2
  263. package/server/node_modules/msgpackr/package.json +1 -1
  264. package/server/node_modules/msgpackr/unpack.js +11 -5
  265. package/server/node_modules/picomatch/lib/parse.js +10 -1
  266. package/server/node_modules/picomatch/lib/scan.js +30 -18
  267. package/server/node_modules/picomatch/package.json +1 -1
  268. package/server/node_modules/protobufjs/dist/light/protobuf.js +59 -6
  269. package/server/node_modules/protobufjs/dist/light/protobuf.js.map +1 -1
  270. package/server/node_modules/protobufjs/dist/light/protobuf.min.js +3 -3
  271. package/server/node_modules/protobufjs/dist/light/protobuf.min.js.map +1 -1
  272. package/server/node_modules/protobufjs/dist/minimal/protobuf.js +22 -2
  273. package/server/node_modules/protobufjs/dist/minimal/protobuf.js.map +1 -1
  274. package/server/node_modules/protobufjs/dist/minimal/protobuf.min.js +3 -3
  275. package/server/node_modules/protobufjs/dist/minimal/protobuf.min.js.map +1 -1
  276. package/server/node_modules/protobufjs/dist/protobuf.js +59 -6
  277. package/server/node_modules/protobufjs/dist/protobuf.js.map +1 -1
  278. package/server/node_modules/protobufjs/dist/protobuf.min.js +3 -3
  279. package/server/node_modules/protobufjs/dist/protobuf.min.js.map +1 -1
  280. package/server/node_modules/protobufjs/package.json +1 -1
  281. package/server/node_modules/protobufjs/src/decoder.js +32 -3
  282. package/server/node_modules/protobufjs/src/reader.js +20 -0
  283. package/server/node_modules/protobufjs/src/wrappers.js +5 -1
  284. package/server/node_modules/undici/docs/docs/api/Client.md +4 -0
  285. package/server/node_modules/undici/docs/docs/api/EnvHttpProxyAgent.md +3 -2
  286. package/server/node_modules/undici/docs/docs/api/EventSource.md +4 -0
  287. package/server/node_modules/undici/docs/docs/api/Interceptors.md +7 -3
  288. package/server/node_modules/undici/docs/docs/api/Socks5ProxyAgent.md +7 -1
  289. package/server/node_modules/undici/lib/cache/memory-cache-store.js +2 -2
  290. package/server/node_modules/undici/lib/core/symbols.js +2 -0
  291. package/server/node_modules/undici/lib/dispatcher/agent.js +7 -2
  292. package/server/node_modules/undici/lib/dispatcher/balanced-pool.js +7 -4
  293. package/server/node_modules/undici/lib/dispatcher/client-h1.js +12 -4
  294. package/server/node_modules/undici/lib/dispatcher/client-h2.js +43 -3
  295. package/server/node_modules/undici/lib/dispatcher/client.js +3 -2
  296. package/server/node_modules/undici/lib/dispatcher/dispatcher-base.js +13 -1
  297. package/server/node_modules/undici/lib/dispatcher/dispatcher.js +15 -1
  298. package/server/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -0
  299. package/server/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +10 -3
  300. package/server/node_modules/undici/lib/dispatcher/proxy-agent.js +18 -1
  301. package/server/node_modules/undici/lib/dispatcher/retry-agent.js +3 -0
  302. package/server/node_modules/undici/lib/dispatcher/round-robin-pool.js +1 -1
  303. package/server/node_modules/undici/lib/dispatcher/socks5-proxy-agent.js +91 -21
  304. package/server/node_modules/undici/lib/handler/cache-handler.js +29 -5
  305. package/server/node_modules/undici/lib/handler/decorator-handler.js +7 -1
  306. package/server/node_modules/undici/lib/handler/deduplication-handler.js +12 -6
  307. package/server/node_modules/undici/lib/handler/redirect-handler.js +21 -4
  308. package/server/node_modules/undici/lib/handler/retry-handler.js +148 -30
  309. package/server/node_modules/undici/lib/interceptor/cache.js +65 -12
  310. package/server/node_modules/undici/lib/interceptor/decompress.js +115 -13
  311. package/server/node_modules/undici/lib/interceptor/deduplicate.js +5 -4
  312. package/server/node_modules/undici/lib/interceptor/dns.js +7 -0
  313. package/server/node_modules/undici/lib/interceptor/dump.js +10 -23
  314. package/server/node_modules/undici/lib/mock/mock-agent.js +13 -1
  315. package/server/node_modules/undici/lib/mock/mock-utils.js +11 -10
  316. package/server/node_modules/undici/lib/util/cache.js +45 -3
  317. package/server/node_modules/undici/lib/web/cookies/parse.js +150 -147
  318. package/server/node_modules/undici/lib/web/eventsource/eventsource-stream.js +28 -1
  319. package/server/node_modules/undici/lib/web/eventsource/eventsource.js +13 -3
  320. package/server/node_modules/undici/lib/web/fetch/index.js +6 -0
  321. package/server/node_modules/undici/lib/web/fetch/request.js +2 -3
  322. package/server/node_modules/undici/lib/web/fetch/util.js +6 -1
  323. package/server/node_modules/undici/lib/web/webidl/index.js +3 -3
  324. package/server/node_modules/undici/lib/web/websocket/connection.js +1 -1
  325. package/server/node_modules/undici/lib/web/websocket/permessage-deflate.js +5 -0
  326. package/server/node_modules/undici/lib/web/websocket/stream/websocketstream.js +8 -10
  327. package/server/node_modules/undici/package.json +3 -3
  328. package/server/node_modules/undici/types/client.d.ts +10 -0
  329. package/server/node_modules/undici/types/interceptors.d.ts +2 -0
  330. package/server/node_modules/undici/types/mock-agent.d.ts +11 -10
  331. package/server/node_modules/undici/types/socks5-proxy-agent.d.ts +2 -0
  332. package/server/node_modules/undici-types/client.d.ts +8 -3
  333. package/server/node_modules/undici-types/connector.d.ts +1 -0
  334. package/server/node_modules/undici-types/cookies.d.ts +1 -1
  335. package/server/node_modules/undici-types/dispatcher.d.ts +3 -3
  336. package/server/node_modules/undici-types/errors.d.ts +10 -0
  337. package/server/node_modules/undici-types/fetch.d.ts +5 -1
  338. package/server/node_modules/undici-types/handlers.d.ts +2 -0
  339. package/server/node_modules/undici-types/interceptors.d.ts +1 -1
  340. package/server/node_modules/undici-types/mock-interceptor.d.ts +5 -1
  341. package/server/node_modules/undici-types/package.json +1 -1
  342. package/server/node_modules/undici-types/proxy-agent.d.ts +7 -0
  343. package/server/{orphan-proposed-reconciler-gf4TxfZb.js → orphan-proposed-reconciler--V8GIzmY.js} +2 -2
  344. package/server/{orphan-proposed-reconciler-Dmk0kO_p.js → orphan-proposed-reconciler-BSsKWmsB.js} +21 -21
  345. package/server/package-lock.json +29 -29
  346. package/server/package.json +1 -1
  347. package/server/{pan-dir-BMda7tQj.js → pan-dir-COaYhZel.js} +4 -4
  348. package/server/{parked-residue-BiHb8cD7.js → parked-residue-Dvr4W9P6.js} +68 -64
  349. package/server/{paths-DEe9j-kw.js → paths-Cm1Q7Old.js} +2 -2
  350. package/server/{pending-lifecycle-claim-J5uIIJPu.js → pending-lifecycle-claim-yAwDuGS4.js} +1 -1
  351. package/server/{pickup-D1UbSDPd.js → pickup-Dle6k9Xt.js} +1 -1
  352. package/server/{pipeline-agent-reader-D-6okryb.js → pipeline-agent-reader-DCCwbUj8.js} +3 -3
  353. package/server/{pipeline-membership-PGX3Pe8V.js → pipeline-membership-BV4hdkHm.js} +1 -1
  354. package/server/{pipeline-membership-CCbgBzNC.js → pipeline-membership-C9ykcjsn.js} +1 -1
  355. package/server/{pipeline-membership-gather-BRhU7XPx.js → pipeline-membership-gather-DGoDOfKO.js} +1 -1
  356. package/server/{pipeline-membership-gather-BK4dzh0X.js → pipeline-membership-gather-UN7kHpCD.js} +10 -10
  357. package/server/{pipeline-notifier-BNAV9kpa.js → pipeline-notifier-DfH2i_zP.js} +2 -2
  358. package/server/{pipeline-notifier-DvHLaXKb.js → pipeline-notifier-DsCfxoSU.js} +1 -1
  359. package/server/{post-merge-lifecycle-worker-DAWgzXQA.js → post-merge-lifecycle-worker-V51p8tSm.js} +2 -2
  360. package/server/{post-merge-state-DC2_0t12.js → post-merge-state-Cym5NVlB.js} +4 -4
  361. package/server/{prd-locations-BbAvqQmT.js → prd-locations-CPuMD55x.js} +3 -3
  362. package/server/{project-pipelines-By_5WcT4.js → project-pipelines-DdDKdXrG.js} +2 -2
  363. package/server/{project-repos-3bI6t4fO.js → project-repos-CNrLxJDg.js} +1 -1
  364. package/server/{project-repos--QeCg7yQ.js → project-repos-DqAT7YV6.js} +2 -2
  365. package/server/{project-resource-refresh-queue-BaZC79S3.js → project-resource-refresh-queue-C-umDazS.js} +1 -1
  366. package/server/{project-resource-refresh-queue-x-K9mvpP.js → project-resource-refresh-queue-Dh8k2SB7.js} +17 -17
  367. package/server/{projects-LftaVK99.js → projects-Crur9uCa.js} +1 -1
  368. package/server/{prompts-BotGu-6W.js → prompts-CvtVJUpG.js} +2 -2
  369. package/server/{providers-BL1I66sM.js → providers-1BlEh5x1.js} +7 -7
  370. package/server/{providers-Dqgz3MY5.js → providers-Bun8zer5.js} +1 -1
  371. package/server/public/assets/{chunk-BO2N2NFS-D5Fz5jND.js → chunk-BO2N2NFS-DzUNVdeo.js} +4 -4
  372. package/server/public/assets/{diagram-OG6HWLK6-Eux0gWFq.js → diagram-OG6HWLK6-D5iThVwA.js} +1 -1
  373. package/server/public/assets/{dist-D-JX_u7m.js → dist-BLq-IR2D.js} +3 -3
  374. package/server/public/assets/{dist-C3zShwhA.js → dist-RyrOs5EF.js} +1 -1
  375. package/server/public/assets/{ganttDiagram-6RSMTGT7-UH3aweia.js → ganttDiagram-6RSMTGT7-n8bUPXAS.js} +1 -1
  376. package/server/public/assets/{highlighted-body-OFNGDK62-ccIQ-WXS.js → highlighted-body-OFNGDK62-1npo3yiG.js} +1 -1
  377. package/server/public/assets/{index-BTVcdPve.js → index-BvN8bWpz.js} +149 -149
  378. package/server/public/assets/index-DgoS288w.css +1 -0
  379. package/server/public/assets/{linear-Cnnu4YQy.js → linear-Dd96gky1.js} +1 -1
  380. package/server/public/assets/mermaid-GHXKKRXX-fP93Za-W.js +1 -0
  381. package/server/public/assets/{pieDiagram-4H26LBE5-BD8-Tye6.js → pieDiagram-4H26LBE5-CynZvpYP.js} +1 -1
  382. package/server/public/assets/{prod-Ca6aKMts.js → prod-DBuCX9g-.js} +4 -4
  383. package/server/public/assets/{quadrantDiagram-W4KKPZXB-BmSrVyFD.js → quadrantDiagram-W4KKPZXB-BNlEKLKN.js} +1 -1
  384. package/server/public/assets/{sankeyDiagram-5OEKKPKP-CEGy8Das.js → sankeyDiagram-5OEKKPKP-Cq0AMnkD.js} +1 -1
  385. package/server/public/assets/{xychartDiagram-2RQKCTM6-VnQ8iY8s.js → xychartDiagram-2RQKCTM6-D7GXcBy2.js} +1 -1
  386. package/server/public/index.html +2 -2
  387. package/server/pull-requests-DV_rJ-1u.js +2 -0
  388. package/server/{pull-requests-Cp_FDT8-.js → pull-requests-DrhWU9MW.js} +3 -3
  389. package/server/{rally-bQpBzUNf.js → rally-D5QkIZeb.js} +3 -3
  390. package/server/rally-DlXjOIAG.js +3 -0
  391. package/server/{rally-api-Ij1Zt0NI.js → rally-api-BdNfpNGk.js} +1 -1
  392. package/server/{rally-api-CqAIJ8RX.js → rally-api-CNlcoTFM.js} +2 -2
  393. package/server/{rally-client-CN5vh4Ac.js → rally-client-BCU7mVWE.js} +1 -1
  394. package/server/{rally-client-qKbCNRVW.js → rally-client-C3eB9TM-.js} +4 -4
  395. package/server/{rebuild-stack-DrMyA_mA.js → rebuild-stack-BupKggo5.js} +2 -2
  396. package/server/{rebuild-stack-BNOMVh7C.js → rebuild-stack-CNknXJHL.js} +6 -6
  397. package/server/reconciler-ComAOr_F.js +657 -0
  398. package/server/{reconstruct-cache-mxIYCnqs.js → reconstruct-cache-DbjgwKRi.js} +7 -7
  399. package/server/{record-Ug18Cp4V.js → record-C4JJCL2f.js} +1 -1
  400. package/server/{record-update-WyhsREoH.js → record-update-CWwZsp9Y.js} +1 -1
  401. package/server/{record-update-dBGxL9OC.js → record-update-Cl56NqoQ.js} +5 -5
  402. package/server/{recovery-trip-BKLrL6NX.js → recovery-trip-DA7tCXbp.js} +3 -3
  403. package/server/{recovery-trip-wFAixKsg.js → recovery-trip-DFtSA8h5.js} +1 -1
  404. package/server/{release-engine-D9gaCBn9.js → release-engine-Dk99C48O.js} +5 -5
  405. package/server/{release-set-DPHHzEGx.js → release-set-x8KH3nrE.js} +3 -3
  406. package/server/{remote-BUEeUic6.js → remote-BMZmJC5E.js} +3 -3
  407. package/server/{remote-BU6ONLpv.js → remote-DyZIg94K.js} +3 -3
  408. package/server/{remote-agents-CSaTLi3u.js → remote-agents-Blb0vO_M.js} +6 -6
  409. package/server/{remote-agents-BVtASiOF.js → remote-agents-MbWzm5Fh.js} +1 -1
  410. package/server/{remote-completion-CBV3b9TI.js → remote-completion-Bcd13o-J.js} +12 -12
  411. package/server/{resolver-DvSMXty7.js → resolver-CZVWKCx0.js} +7 -7
  412. package/server/{resolver-gxv97jsQ.js → resolver-tJeEkPK5.js} +2 -2
  413. package/server/{resume-DvHuF-bm.js → resume-DmF2andq.js} +1 -1
  414. package/server/{review-agent-esZ0QXdY.js → review-agent-CmJeQc0K.js} +30 -30
  415. package/server/{review-agent-DgkUPRx0.js → review-agent-DM9S22BL.js} +2 -2
  416. package/server/{review-artifacts-DGGEobLp.js → review-artifacts-DCiaejJK.js} +6 -6
  417. package/server/{review-convoy-liveness-DmO8dIBH.js → review-convoy-liveness-C9F1Q1LN.js} +8 -8
  418. package/server/{review-run-recovery-Ct0q7FkE.js → review-run-recovery-C5TEICtx.js} +2 -2
  419. package/server/{review-run-recovery-DHiiw7d8.js → review-run-recovery-CRGBh7xs.js} +1 -1
  420. package/server/{review-status-yOGD2MuK.js → review-status-C3PJkfjv.js} +55 -45
  421. package/server/{review-status-C_kQeeX0.js → review-status-CDs0jQV6.js} +1 -1
  422. package/server/{review-status-emit-BZz1Y_22.js → review-status-emit-De6PF3ZH.js} +3 -3
  423. package/server/{review-status-enrichment-BWH0XW_m.js → review-status-enrichment-CclcG8jk.js} +3 -3
  424. package/server/{review-status-sync-Bq00Loey.js → review-status-sync-B3GKewT_.js} +1 -1
  425. package/server/{review-status-sync-2C9lk85r.js → review-status-sync-wvgdR1yZ.js} +11 -8
  426. package/server/{review-verdict-feedback-CE_tr2iQ.js → review-verdict-feedback-20s9pG0w.js} +7 -7
  427. package/server/{review-verdict-feedback-Brjaxoda.js → review-verdict-feedback-DkMx_cKj.js} +1 -1
  428. package/server/{review-verdict-writer-Ca2V7QSY.js → review-verdict-writer-BcG5RBWF.js} +7 -7
  429. package/server/{review-verdict-writer-CD-4kDVx.js → review-verdict-writer-CaJPCD-q.js} +1 -1
  430. package/server/{rollup-B6g9Nr6L.js → rollup-C-GXHbTG.js} +8 -8
  431. package/server/{rollup--g9ik1XQ.js → rollup-DR250WyW.js} +1 -1
  432. package/server/{scanner-YxIv-fG1.js → scanner-BEAzmMNs.js} +18 -11
  433. package/server/{search-DqMN4__-.js → search-BN0MYpZW.js} +2 -2
  434. package/server/{sequence-io--b3_PsWq.js → sequence-io-BmVO0K-_.js} +4 -4
  435. package/server/{sequencer-agent-CqouKVZG.js → sequencer-agent-CuA9PA_R.js} +6 -6
  436. package/server/server.js +599 -290
  437. package/server/{service-CEp-3iow.js → service-D1SZCxH8.js} +77 -772
  438. package/server/{session-fork-GtoeCh2H.js → session-fork--SMYFKVu.js} +2 -2
  439. package/server/{settings-Ch2pCVtt.js → settings-CETdzCl6.js} +3 -3
  440. package/server/{settings-CLQcdkoD.js → settings-CFi7CdJo.js} +2 -2
  441. package/server/settings-EGNbGKpP.js +2 -0
  442. package/server/{shadow-engineering-BxiFrIKv.js → shadow-engineering-CNTXaC9O.js} +2 -2
  443. package/server/{shadow-state-nGhCNXT2.js → shadow-state-6jSyeXQ7.js} +1 -1
  444. package/server/{shadow-state-CSA1vtxr.js → shadow-state-CtYJGNXt.js} +2 -2
  445. package/server/{shadow-utils-7q5QDmMj.js → shadow-utils-Cq5eMfwI.js} +2 -2
  446. package/server/{ship-log-ie0A_SqV.js → ship-log-D-CphNZx.js} +1 -1
  447. package/server/{ship-record-BM3oVvnL.js → ship-record-STA0P11l.js} +5 -5
  448. package/server/{ship-record-DHWH1hLz.js → ship-record-neN0oUI9.js} +1 -1
  449. package/server/{ship-status-BEkddXMT.js → ship-status-DzDpufmj.js} +2 -2
  450. package/server/{smart-compaction-BkzjVpWL.js → smart-compaction-CdtKIcDk.js} +1 -1
  451. package/server/{smart-compaction-D0TE1lBD.js → smart-compaction-tndAhwoc.js} +7 -7
  452. package/server/{spawn-planning-session-s406rw1N.js → spawn-planning-session-1XLgDLjR.js} +2 -2
  453. package/server/{spawn-planning-session-CkGweSCC.js → spawn-planning-session-CAncCBLX.js} +17 -17
  454. package/server/{specialist-completion-CTAjwH5j.js → specialist-completion-BMv3K54P.js} +1 -1
  455. package/server/{specialist-context-CKasRfYu.js → specialist-context-B054OP_a.js} +5 -5
  456. package/server/{specialist-handoff-logger-DrjrOmmn.js → specialist-handoff-logger-B7jzypoX.js} +2 -2
  457. package/server/{specialist-logs-Du6quZ0_.js → specialist-logs-DVhOLpwy.js} +3 -3
  458. package/server/{specialists-x-kPMhrL.js → specialists-8Pc--yZI.js} +2 -2
  459. package/server/{specialists-B-4zyE4Y.js → specialists-BVBIMc4L.js} +1 -1
  460. package/server/{specialists-b0dMMjWq.js → specialists-CC_Mnc47.js} +333 -118
  461. package/server/{specialists-CuDWiNdB.js → specialists-ChvCD2a-.js} +19 -19
  462. package/server/{specialists-registry-BYjs04iK.js → specialists-registry-Cim1fPcM.js} +2 -2
  463. package/server/{specialists-registry-1y6Rt_F1.js → specialists-registry-CoPNlhud.js} +1 -1
  464. package/server/specs-Dvq4sOy6.js +3 -0
  465. package/server/{src-CZsPs61V.js → src-C7gGe4KU.js} +6 -6
  466. package/server/{src-CY2Wl8IX.js → src-CdwN6WY6.js} +8 -2
  467. package/server/{src-DeQwpuh6.js → src-DMosbuSJ.js} +3 -3
  468. package/server/{stack-health-ypIKtkbE.js → stack-health-CvdnSVBV.js} +1 -1
  469. package/server/{stack-health-BQFSJc0l.js → stack-health-DPXaoAus.js} +3 -3
  470. package/server/{stale-task-claims-C2e1zdMT.js → stale-task-claims-UoNLemTn.js} +5 -5
  471. package/server/{staleness-Fzx_3_Hr.js → staleness-CxZaIhrn.js} +1 -1
  472. package/server/{staleness-CRDK6LFG.js → staleness-r_dkMyMG.js} +1 -1
  473. package/server/{stall-sweeper-QNk4h9m6.js → stall-sweeper-C9S8FYKz.js} +8 -8
  474. package/server/{state-home-DdG8erBI.js → state-home-BhI8O5lU.js} +2 -2
  475. package/server/{state-migrate-C6H3jfHE.js → state-migrate-DtFHcOVZ.js} +6 -6
  476. package/server/{state-mirror-DF4Lfxm0.js → state-mirror-CpuHFxHb.js} +3 -3
  477. package/server/{stuck-remediation-BDa_tXgB.js → stuck-remediation-B4nKm7B2.js} +13 -13
  478. package/server/{stuck-remediation-BVNd9txd.js → stuck-remediation-hSOOYB9B.js} +1 -1
  479. package/server/{substrate-bug-weights-service-BbbCZEtJ.js → substrate-bug-weights-service-B9f0063E.js} +3 -3
  480. package/server/{summary-fork-BvcW6bq0.js → summary-fork-CUyEqFyc.js} +14 -15
  481. package/server/{summary-fork-DIQmtOuV.js → summary-fork-DZcsOvDD.js} +2 -2
  482. package/server/{supervisor-D3jC2c7A.js → supervisor-CGtOs9Em.js} +4 -4
  483. package/server/supervisor-DoJpD33i.js +2 -0
  484. package/server/{swarm-readiness-CMWAQuWM.js → swarm-readiness-0N2p9d2C.js} +3 -3
  485. package/server/{synthesis-verdict-C-pJOPsn.js → synthesis-verdict-CJdseCuz.js} +1 -1
  486. package/server/{synthesis-verdict-DVlrLF9A.js → synthesis-verdict-CQdLbK1-.js} +2 -2
  487. package/server/{system-prerequisites-QKtIYXI2.js → system-prerequisites-DkDOEjQP.js} +2 -2
  488. package/server/{teardown-workspace-cJea1OLo.js → teardown-workspace-BxFMcWu7.js} +16 -16
  489. package/server/{test-agent-queue-C5DI_gWX.js → test-agent-queue-Dxeae55k.js} +6 -6
  490. package/server/{test-verdict-C7kmd2_Y.js → test-verdict-CJ-to_Hc.js} +1 -1
  491. package/server/{test-verdict-DUbDHqeD.js → test-verdict-hW5kILg7.js} +2 -2
  492. package/server/{tldr-daemon-BNQHwblU.js → tldr-daemon-DKCumqHU.js} +1 -1
  493. package/server/{tldr-daemon-CO08YlfQ.js → tldr-daemon-caxXegkF.js} +2 -2
  494. package/server/{tmux-B8zsqD_6.js → tmux-C-hxv71f.js} +2 -2
  495. package/server/{tmux-DWEc4Ld9.js → tmux-CvAEO9yo.js} +2 -2
  496. package/server/{token-Bez-qCB2.js → token-BdfZLRg1.js} +1 -1
  497. package/server/{tracker-config-CJzPhSHv.js → tracker-config-BjqwtkcT.js} +2 -2
  498. package/server/{tracker-utils-DJAOAuMN.js → tracker-utils-0cDe6yil.js} +2 -2
  499. package/server/{traefik-connect-D3H5I6b9.js → traefik-connect-DoQvQ6oJ.js} +1 -1
  500. package/server/{tunnel-BSdKnW0U.js → tunnel-BEM7-jgE.js} +1 -1
  501. package/server/{tunnel-Cr3ctqxp.js → tunnel-SgALz_Pi.js} +3 -3
  502. package/server/{types-fzBp9cYi.js → types-PW4zkxCM.js} +1 -1
  503. package/server/{uat-failure-feedback-IZQ-J8jt.js → uat-failure-feedback-BQzpUFQ6.js} +5 -5
  504. package/server/{uat-promote-verification-DXApKcc2.js → uat-promote-verification-BUltWC-b.js} +5 -5
  505. package/server/{uat-train-CycEzpbE.js → uat-train-B71QG16n.js} +1 -1
  506. package/server/{uat-train-IIZlz7r3.js → uat-train-BLJ0AAIc.js} +0 -0
  507. package/server/{validate-Ur4xH5bN.js → validate-DqEp2Yb9.js} +3 -3
  508. package/server/{validation-Dr6V4PXx.js → validation-DHEsL3RP.js} +4 -4
  509. package/server/{validation-CHovCoTT.js → validation-k4EpMHm0.js} +1 -1
  510. package/server/{verification-artifact-D3viYe_t.js → verification-artifact-Cmhgq4b_.js} +1 -1
  511. package/server/{verification-artifact-k5Ftpg0c.js → verification-artifact-DglwaHke.js} +1 -1
  512. package/server/{verification-runner-Dl13mmsI.js → verification-runner-BC_zNOq5.js} +16 -16
  513. package/server/{verification-runner-BuqGwm2t.js → verification-runner-Bbc-8BbR.js} +1 -1
  514. package/server/{vtt-parser-BSnAB-Og.js → vtt-parser-Va--tv27.js} +1 -1
  515. package/server/{work-agent-prompt-CJJ4tXci.js → work-agent-prompt-CQWlmw_y.js} +1 -1
  516. package/server/{work-agent-prompt-CioeOuM4.js → work-agent-prompt-DM3uza0_.js} +10 -10
  517. package/server/{work-agent-start-Ct1HVh6z.js → work-agent-start-BColr1oI.js} +1 -1
  518. package/server/{work-agent-start-B65Gqn9N.js → work-agent-start-cKf7rly8.js} +2 -2
  519. package/server/workflows-CLrEiTds.js +2 -0
  520. package/server/{workflows-AgFul1xc.js → workflows-DrC85n8j.js} +28 -28
  521. package/server/{workspace-Cy4sDd3q.js → workspace-ChRFy_F9.js} +3 -3
  522. package/server/{workspace-Cu3XlMXt.js → workspace-G3Cus8e9.js} +1 -1
  523. package/server/{workspace-anchor-drift-BI0Hz6zI.js → workspace-anchor-drift-DBbyK_Mf.js} +1 -1
  524. package/server/{workspace-anchor-drift-CMaqvizr.js → workspace-anchor-drift-z7TjOORC.js} +4 -4
  525. package/server/{workspace-config-DRYDO7Zr.js → workspace-config-D-bNq2CF.js} +1 -1
  526. package/server/{workspace-manager-CgovxDrO.js → workspace-manager-Db3pCmr7.js} +16 -16
  527. package/server/{workspace-manager-jfkKAEuO.js → workspace-manager-gz9Amovn.js} +1 -1
  528. package/server/{workspace-metadata-BNzODIv6.js → workspace-metadata-C5Ie2FMZ.js} +2 -2
  529. package/server/{workspace-metadata-BDqXzGGK.js → workspace-metadata-Do-L6GFP.js} +1 -1
  530. package/server/{workspaces-BJdPqx_J.js → workspaces-D0MWw7Mx.js} +123 -696
  531. package/sync-sources/rules/agent-message-delivery.md +21 -14
  532. package/sync-sources/rules/pan-handoff-focus-limit.md +3 -1
  533. package/sync-sources/skills/pan-gauntlet-loop/SKILL.md +94 -46
  534. package/sync-sources/skills/pan-handoff/SKILL.md +13 -2
  535. package/server/archive-planning-BW4MKNI7.js +0 -2
  536. package/server/build-info-Bj2vQEMh.js +0 -2
  537. package/server/cli-BRuzUT_I.js +0 -2
  538. package/server/dead-end-trip-6V_CwveT.js +0 -2
  539. package/server/deploy-queue-CjLErpgw.js +0 -2
  540. package/server/dist-fCA6y2bH.js +0 -3
  541. package/server/forge-bvak6vXJ.js +0 -2
  542. package/server/hume-TYTb6fDU.js +0 -3
  543. package/server/inspect-agent-JFEaYTRa.js +0 -2
  544. package/server/merge-ops-DabXHp2i.js +0 -2
  545. package/server/merge-rebase-CXq0qsgR.js +0 -2
  546. package/server/public/assets/index-2wV4ipy_.css +0 -1
  547. package/server/public/assets/mermaid-GHXKKRXX-Bjto8iJh.js +0 -1
  548. package/server/pull-requests-jVGcVq5G.js +0 -2
  549. package/server/rally-CxhVgIQ6.js +0 -3
  550. package/server/settings-DhtPDmmI.js +0 -2
  551. package/server/specs-IYsFlM-L.js +0 -3
  552. package/server/supervisor-v0cYN2Vp.js +0 -2
  553. package/server/workflows-CfHm8lVd.js +0 -2
  554. package/sync-sources/skills/pan-gauntlet-loop/references/lessons.md +0 -60
@@ -1,744 +1,50 @@
1
1
  import { a as __toCommonJS } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Er as derefWorkhorse, J as getProjectConfigFromWorkspacePath, Li as getOverdeckHome, On as resolveProjectFromIssueSync, Ri as init_paths, Y as init_record, ci as init_errors, fn as init_projects, li as AGENTS_DIR, nt as readRecordContinueViewSync, p as loadConfigSync, rt as resolveProjectForIssue, t as init_config_yaml, vi as OVERDECK_HOME } from "./config-yaml-D9nfpEx1.js";
3
- import { l as init_activity_logger, o as emitActivityEntrySync } from "./activity-logger-BWZhVphb.js";
4
- import { D as sql, E as like, S as gte, _ as integer, a as EventBus, b as and, f as init_infra, g as real, h as text, i as DbLive, m as sqliteTable, n as CostArchiveLive, o as EventBusLive, p as init_sqlite_core, r as Db, t as CostArchive, v as init_drizzle_orm, x as eq, y as desc } from "./infra-CHIvOb9q.js";
5
- import { C as init_tmux, E as killSession, U as sessionExists, W as sessionExistsSync, p as exactPaneTarget, r as capturePane, v as getManagedTmuxSocketName } from "./tmux-DWEc4Ld9.js";
6
- import { n as init_issues, t as IssueId } from "./issues-e_Ck1Ln2.js";
7
- import { a as getAllBudgetsSync, i as deleteBudgetSync, n as checkBudgetSync, r as createBudgetSync, s as init_cost } from "./cost-CiIwxH1D.js";
8
- import { A as saveAgentStateSync, Hi as init_ohmypi_parser, K as saveAgentRuntimeState, Ui as parseOhmypiSessionCostResultSync, W as getAgentRuntimeStateSync, f as getAgentDir, g as getAgentStateSync, m as getAgentState, mn as stopAgentSync, on as spawnAgent, q as init_agents, yn as listRunningAgentsSync, zt as init_context_overflow } from "./agent-state-BJhGIJZe.js";
9
- import { i as parseCodexSessionSync, n as init_codex_parser, r as parseCodexSessionCostEventsSync } from "./behavior-BiCQzqyT.js";
10
- import { _ as init_tier_metrics, c as getDailyTrendsSync, d as init_cost_sync, h as deriveTieredAgentCostRole, t as getAgentDailyCostSync } from "./cost-sync-DOkdE_yB.js";
11
- import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-DoVzb4b7.js";
12
- import { E as init_model_validation, O as requireModelOverrideSync } from "./auto-spawn-consent-Dc4mtM-B.js";
13
- import { C as setFlywheelGloballyPaused, c as init_control_settings, f as isFlywheelAutoPickupBacklog, l as isCloisterSpawnsPausedSync, v as setCloisterSpawnsPausedSync, y as setDeaconGloballyPaused } from "./control-settings-BMoDHY1G.js";
2
+ import { Er as derefWorkhorse, J as getProjectConfigFromWorkspacePath, On as resolveProjectFromIssueSync, Y as init_record, fn as init_projects, li as init_errors, nt as readRecordContinueViewSync, p as loadConfigSync, rt as resolveProjectForIssue, t as init_config_yaml, ui as AGENTS_DIR, yi as OVERDECK_HOME, zi as init_paths } from "./config-yaml-OoH-ZpTb.js";
3
+ import { l as init_activity_logger, o as emitActivityEntrySync } from "./activity-logger-ru8ggv-d.js";
4
+ import { C as init_tmux, E as killSession, U as sessionExists, W as sessionExistsSync, p as exactPaneTarget, r as capturePane, v as getManagedTmuxSocketName } from "./tmux-CvAEO9yo.js";
5
+ import { C as setFlywheelGloballyPaused, c as init_control_settings, f as isFlywheelAutoPickupBacklog, l as isCloisterSpawnsPausedSync, v as setCloisterSpawnsPausedSync, y as setDeaconGloballyPaused } from "./control-settings-Bdud_B1j.js";
6
+ import { c as getDailyTrendsSync, d as init_cost_sync, t as getAgentDailyCostSync } from "./cost-sync-Bq_dyq9k.js";
7
+ import { i as CostWriter, t as CostDoorLive } from "./cost-DR57uJFP.js";
8
+ import { A as saveAgentStateSync, K as saveAgentRuntimeState, W as getAgentRuntimeStateSync, f as getAgentDir, g as getAgentStateSync, m as getAgentState, mn as stopAgentSync, on as spawnAgent, q as init_agents, yn as listRunningAgentsSync, zt as init_context_overflow } from "./agent-state-BnyNoDWQ.js";
9
+ import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-CUKcTWSG.js";
10
+ import { E as init_model_validation, O as requireModelOverrideSync } from "./auto-spawn-consent-C1avLtkk.js";
14
11
  import { r as isRoleTerminal } from "./review-status-source-Jq0BXmn3.js";
15
- import { h as readWorkspacePlanSync, s as init_io } from "./io-DKrWd3gX.js";
16
- import { n as checkHookSync, p as init_hooks } from "./hooks-BjBjxqNh.js";
17
- import { a as loadCloisterConfigSync, n as getHealthThresholdsMs, r as init_config } from "./config-Doq_tF-f.js";
12
+ import { h as readWorkspacePlanSync, s as init_io } from "./io-BgzG56av.js";
13
+ import { n as checkHookSync, p as init_hooks } from "./hooks-D55VTdQS.js";
14
+ import { a as loadCloisterConfigSync, n as getHealthThresholdsMs, r as init_config } from "./config-DP0VV7rX.js";
18
15
  import { t as init_reap_terminal_sessions } from "./reap-terminal-sessions-BaDSNR-k.js";
19
- import { i as issue_service_singleton_exports, n as init_issue_service_singleton } from "./issue-service-singleton-B2xy-IS9.js";
20
- import { h as loadReviewStatuses, p as init_review_status, w as setReviewStatusSync } from "./review-status-yOGD2MuK.js";
21
- import { h as init_pickup, r as LEGACY_PARKED_LABELS } from "./pickup-D1UbSDPd.js";
22
- import "./flywheel-CjW2L7BS.js";
23
- import { C as getLastPatrolResult, D as isDeaconRunning, N as runPatrol, R as startDeacon, S as getDeaconStatus, r as assessDeaconPatrolFreshness, x as getDeaconLogs, z as stopDeacon } from "./deacon-B24dNzr8.js";
24
- import { n as renderPrompt, t as init_prompts } from "./prompts-BotGu-6W.js";
25
- import { t as getCloisterEventStore } from "./event-store-provider-DlSQND3V.js";
26
- import { i as getRuntimeForAgent } from "./agent-idle-ONBssBN_.js";
27
- import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-6RQsAjDX.js";
28
- import { t as init_specialists } from "./specialists-CuDWiNdB.js";
29
- import { s as getTmuxSessionName } from "./specialists-registry-BYjs04iK.js";
30
- import { n as shouldSkipDispatchAsMerged } from "./merge-verification-JJc5GC2t.js";
31
- import { t as recordDeadEndNeedsYou } from "./dead-end-trip-CnVmjnya.js";
32
- import { o as decideAutonomousWorkDispatch, s as gatherAutonomousWorkDispatchInput } from "./orphan-proposed-reconciler-Dmk0kO_p.js";
33
- import { r as writeHealthEvent } from "./health-events-DNw9Mzw9.js";
34
- import { join } from "node:path";
35
- import { Context, Data, Effect, Layer, Schema } from "effect";
16
+ import { i as issue_service_singleton_exports, n as init_issue_service_singleton } from "./issue-service-singleton-Bsb0GaY8.js";
17
+ import { h as loadReviewStatuses, p as init_review_status, w as setReviewStatusSync } from "./review-status-C3PJkfjv.js";
18
+ import { h as init_pickup, r as LEGACY_PARKED_LABELS } from "./pickup-Dle6k9Xt.js";
19
+ import "./flywheel-D5FchYg4.js";
20
+ import { C as getLastPatrolResult, D as isDeaconRunning, N as runPatrol, R as startDeacon, S as getDeaconStatus, r as assessDeaconPatrolFreshness, x as getDeaconLogs, z as stopDeacon } from "./deacon-C7qZxRuW.js";
21
+ import { n as renderPrompt, t as init_prompts } from "./prompts-CvtVJUpG.js";
22
+ import { t as getCloisterEventStore } from "./event-store-provider-Bu1Qrg6v.js";
23
+ import { i as getRuntimeForAgent } from "./agent-idle-CQlwmcRR.js";
24
+ import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-DZEwD3ol.js";
25
+ import { t as init_specialists } from "./specialists-ChvCD2a-.js";
26
+ import { s as getTmuxSessionName } from "./specialists-registry-Cim1fPcM.js";
27
+ import { n as shouldSkipDispatchAsMerged } from "./merge-verification-C5FexOBZ.js";
28
+ import { t as recordDeadEndNeedsYou } from "./dead-end-trip-DH_hA7yS.js";
29
+ import { o as decideAutonomousWorkDispatch, s as gatherAutonomousWorkDispatchInput } from "./orphan-proposed-reconciler-BSsKWmsB.js";
30
+ import { r as writeHealthEvent } from "./health-events-CIE7gy34.js";
31
+ import { Data, Effect } from "effect";
36
32
  import { appendFileSync, existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync, unlinkSync, writeFileSync } from "fs";
37
- import { dirname as dirname$1, join as join$1 } from "path";
38
- import { existsSync as existsSync$1, readdirSync as readdirSync$1 } from "node:fs";
33
+ import { dirname, join } from "path";
39
34
  import { createHash } from "crypto";
40
35
  import { rm } from "fs/promises";
41
36
  import { exec, execFile } from "node:child_process";
42
37
  import { promisify } from "node:util";
43
38
  import { exec as exec$1 } from "child_process";
44
39
  import { promisify as promisify$1 } from "util";
45
- import { HttpApiEndpoint, HttpApiGroup } from "effect/unstable/httpapi";
46
- //#region ../../lib/overdeck/cost.ts
40
+ //#region ../../lib/cloister/health.ts
41
+ init_paths();
47
42
  init_errors();
48
43
  init_projects();
49
44
  init_record();
50
45
  init_config_yaml();
51
46
  init_activity_logger();
52
47
  init_tmux();
53
- init_drizzle_orm();
54
- init_sqlite_core();
55
- init_infra();
56
- init_issues();
57
- init_cost();
58
- init_ohmypi_parser();
59
- init_codex_parser();
60
- init_paths();
61
- init_tier_metrics();
62
- function walkJsonl(dir) {
63
- if (!existsSync$1(dir)) return [];
64
- const result = [];
65
- for (const entry of readdirSync$1(dir, { withFileTypes: true })) {
66
- const full = join(dir, entry.name);
67
- if (entry.isDirectory()) result.push(...walkJsonl(full));
68
- else if (entry.name.endsWith(".jsonl")) result.push(full);
69
- }
70
- return result;
71
- }
72
- const costEventsTable = sqliteTable("cost_events", {
73
- id: integer("id").primaryKey({ autoIncrement: true }),
74
- ts: integer("ts", { mode: "timestamp_ms" }).notNull(),
75
- issueId: text("issue_id"),
76
- agentId: text("agent_id"),
77
- sessionId: text("session_id"),
78
- sessionType: text("session_type"),
79
- provider: text("provider"),
80
- model: text("model"),
81
- input: integer("input"),
82
- output: integer("output"),
83
- cacheRead: integer("cache_read"),
84
- cacheWrite: integer("cache_write"),
85
- cost: real("cost"),
86
- requestId: text("request_id"),
87
- sourceFile: text("source_file")
88
- });
89
- const Tokens = Schema.Struct({
90
- input: Schema.Number,
91
- output: Schema.Number,
92
- cacheRead: Schema.Number,
93
- cacheWrite: Schema.Number
94
- });
95
- const CostEvent = Schema.Struct({
96
- ts: Schema.Date,
97
- issueId: Schema.NullOr(IssueId),
98
- agentId: Schema.NullOr(Schema.String),
99
- sessionId: Schema.NullOr(Schema.String),
100
- sessionType: Schema.NullOr(Schema.String),
101
- provider: Schema.NullOr(Schema.String),
102
- model: Schema.NullOr(Schema.String),
103
- input: Schema.Number,
104
- output: Schema.Number,
105
- cacheRead: Schema.Number,
106
- cacheWrite: Schema.Number,
107
- cost: Schema.Number,
108
- requestId: Schema.NullOr(Schema.String),
109
- sourceFile: Schema.NullOr(Schema.String),
110
- warnings: Schema.optional(Schema.Array(Schema.Struct({
111
- type: Schema.String,
112
- provider: Schema.NullOr(Schema.String),
113
- model: Schema.String,
114
- reason: Schema.String
115
- })))
116
- });
117
- const Rollup = Schema.Struct({
118
- key: Schema.String,
119
- role: Schema.optional(Schema.String),
120
- cost: Schema.Number,
121
- tokens: Tokens
122
- });
123
- const Window = Schema.Literals([
124
- "day",
125
- "week",
126
- "month"
127
- ]);
128
- const WindowSummary = Schema.Struct({
129
- project: Schema.NullOr(Schema.String),
130
- window: Window,
131
- totalCost: Schema.Number,
132
- totalTokens: Schema.Number,
133
- entryCount: Schema.Number,
134
- byModel: Schema.Record(Schema.String, Schema.Number)
135
- });
136
- const IssueCost = Schema.Struct({
137
- issueId: IssueId,
138
- totalCost: Schema.Number,
139
- tokens: Tokens,
140
- byModel: Schema.Record(Schema.String, Rollup),
141
- byStage: Schema.Record(Schema.String, Schema.Record(Schema.String, Tokens))
142
- });
143
- const BudgetSpec = Schema.Struct({
144
- name: Schema.String,
145
- type: Schema.Literals([
146
- "daily",
147
- "monthly",
148
- "project",
149
- "issue",
150
- "feature"
151
- ]),
152
- limit: Schema.Number,
153
- currency: Schema.String,
154
- alertThreshold: Schema.Number
155
- });
156
- const Budget = Schema.Struct({
157
- ...BudgetSpec.fields,
158
- id: Schema.String,
159
- spent: Schema.Number,
160
- enabled: Schema.Boolean
161
- });
162
- const BudgetStatus = Schema.Struct({
163
- budget: Budget,
164
- percentUsed: Schema.Number,
165
- remaining: Schema.Number,
166
- alert: Schema.Boolean,
167
- exceeded: Schema.Boolean
168
- });
169
- var CostIngestError = class extends Schema.TaggedErrorClass()("CostIngestError", { reason: Schema.String }) {};
170
- var BudgetNotFound = class extends Schema.TaggedErrorClass()("BudgetNotFound", { id: Schema.String }) {};
171
- function mapBudget(b) {
172
- return {
173
- id: b.id,
174
- name: b.name,
175
- type: b.type,
176
- limit: b.limit,
177
- currency: b.currency,
178
- alertThreshold: b.alertThreshold,
179
- spent: b.spent,
180
- enabled: b.enabled
181
- };
182
- }
183
- function toTokens(r) {
184
- return {
185
- input: r.input ?? 0,
186
- output: r.output ?? 0,
187
- cacheRead: r.cacheRead ?? 0,
188
- cacheWrite: r.cacheWrite ?? 0
189
- };
190
- }
191
- function toRollup(key, r, role) {
192
- return {
193
- key,
194
- ...role ? { role } : {},
195
- cost: r.cost ?? 0,
196
- tokens: toTokens(r)
197
- };
198
- }
199
- function issueIdFromAgentName(agentName) {
200
- const match = agentName.match(/(?:^|-)((?:pan|min|aud|krux|cli)-\d+)(?:-|$)/i);
201
- return match ? match[1].toUpperCase() : null;
202
- }
203
- function inferIssueFromPath(path) {
204
- if (!path) return null;
205
- const match = path.match(/(?:feature[-/])?(pan|min|aud|krux|cli)[-/](\d+)/i);
206
- return match ? `${match[1].toUpperCase()}-${match[2]}` : null;
207
- }
208
- function inferIssueFromPiEncodedRootName(name) {
209
- return inferIssueFromPath(name.replace(/--+/g, "/"));
210
- }
211
- function inferPiProvider(model, provider) {
212
- if (provider) return provider;
213
- const lower = model.toLowerCase();
214
- if (lower.includes("kimi") || lower.startsWith("minimax")) return "custom";
215
- if (lower.includes("claude")) return "anthropic";
216
- if (lower.includes("gpt")) return "openai";
217
- if (lower.includes("gemini")) return "google";
218
- return null;
219
- }
220
- var CostResolver = class extends Context.Service()("overdeck/CostResolver") {};
221
- const CostResolverLive = Layer.effect(CostResolver, Effect.gen(function* () {
222
- const { q } = yield* Db;
223
- const groupBySelect = {
224
- cost: sql`SUM(${costEventsTable.cost})`,
225
- input: sql`SUM(${costEventsTable.input})`,
226
- output: sql`SUM(${costEventsTable.output})`,
227
- cacheRead: sql`SUM(${costEventsTable.cacheRead})`,
228
- cacheWrite: sql`SUM(${costEventsTable.cacheWrite})`
229
- };
230
- const summary = (window, project) => Effect.promise(async () => {
231
- const days = {
232
- day: 1,
233
- week: 7,
234
- month: 30
235
- }[window];
236
- const cutoff = /* @__PURE__ */ new Date(Date.now() - days * 864e5);
237
- const where = project ? and(gte(costEventsTable.ts, cutoff), like(costEventsTable.issueId, `${project}-%`)) : gte(costEventsTable.ts, cutoff);
238
- const [agg] = await q.select({
239
- totalCost: sql`COALESCE(SUM(${costEventsTable.cost}), 0)`,
240
- totalTokens: sql`COALESCE(SUM(COALESCE(${costEventsTable.input},0) + COALESCE(${costEventsTable.output},0) + COALESCE(${costEventsTable.cacheRead},0) + COALESCE(${costEventsTable.cacheWrite},0)), 0)`,
241
- entryCount: sql`COUNT(*)`
242
- }).from(costEventsTable).where(where);
243
- const modelRows = await q.select({
244
- model: costEventsTable.model,
245
- cost: sql`COALESCE(SUM(${costEventsTable.cost}), 0)`
246
- }).from(costEventsTable).where(where).groupBy(costEventsTable.model);
247
- const byModel = {};
248
- for (const r of modelRows) byModel[r.model ?? "unknown"] = r.cost ?? 0;
249
- return {
250
- project: project ?? null,
251
- window,
252
- totalCost: agg?.totalCost ?? 0,
253
- totalTokens: agg?.totalTokens ?? 0,
254
- entryCount: agg?.entryCount ?? 0,
255
- byModel
256
- };
257
- });
258
- const byIssue = () => Effect.promise(async () => {
259
- return (await q.select({
260
- key: costEventsTable.issueId,
261
- ...groupBySelect
262
- }).from(costEventsTable).groupBy(costEventsTable.issueId)).map((r) => toRollup(r.key ?? "unattributed", r));
263
- });
264
- const issueDetail = (id) => Effect.promise(async () => {
265
- const modelRows = await q.select({
266
- model: costEventsTable.model,
267
- ...groupBySelect
268
- }).from(costEventsTable).where(eq(costEventsTable.issueId, id)).groupBy(costEventsTable.model);
269
- const byModel = {};
270
- let totalCost = 0;
271
- let totalInput = 0, totalOutput = 0, totalCacheRead = 0, totalCacheWrite = 0;
272
- for (const r of modelRows) {
273
- const key = r.model ?? "unknown";
274
- const t = toTokens(r);
275
- byModel[key] = {
276
- key,
277
- cost: r.cost ?? 0,
278
- tokens: t
279
- };
280
- totalCost += r.cost ?? 0;
281
- totalInput += t.input;
282
- totalOutput += t.output;
283
- totalCacheRead += t.cacheRead;
284
- totalCacheWrite += t.cacheWrite;
285
- }
286
- const tokens = {
287
- input: totalInput,
288
- output: totalOutput,
289
- cacheRead: totalCacheRead,
290
- cacheWrite: totalCacheWrite
291
- };
292
- const stageRows = await q.select({
293
- stage: costEventsTable.sessionType,
294
- model: costEventsTable.model,
295
- input: sql`SUM(${costEventsTable.input})`,
296
- output: sql`SUM(${costEventsTable.output})`,
297
- cacheRead: sql`SUM(${costEventsTable.cacheRead})`,
298
- cacheWrite: sql`SUM(${costEventsTable.cacheWrite})`
299
- }).from(costEventsTable).where(eq(costEventsTable.issueId, id)).groupBy(costEventsTable.sessionType, costEventsTable.model);
300
- const byStage = {};
301
- for (const r of stageRows) {
302
- const stage = r.stage ?? "unknown";
303
- const model = r.model ?? "unknown";
304
- if (!byStage[stage]) byStage[stage] = {};
305
- byStage[stage][model] = toTokens(r);
306
- }
307
- return {
308
- issueId: id,
309
- totalCost,
310
- tokens,
311
- byModel,
312
- byStage
313
- };
314
- });
315
- const byDay = (days, issue) => Effect.promise(async () => {
316
- const cutoff = /* @__PURE__ */ new Date(Date.now() - days * 864e5);
317
- const dayExpr = sql`DATE(${costEventsTable.ts}, 'unixepoch')`;
318
- const where = issue ? and(gte(costEventsTable.ts, cutoff), eq(costEventsTable.issueId, issue)) : gte(costEventsTable.ts, cutoff);
319
- return (await q.select({
320
- key: dayExpr,
321
- ...groupBySelect
322
- }).from(costEventsTable).where(where).groupBy(dayExpr).orderBy(sql`DATE(${costEventsTable.ts}, 'unixepoch') DESC`)).map((r) => toRollup(r.key ?? "", r));
323
- });
324
- const byModel = (issue) => Effect.promise(async () => {
325
- return (await q.select({
326
- key: costEventsTable.model,
327
- ...groupBySelect
328
- }).from(costEventsTable).where(issue ? eq(costEventsTable.issueId, issue) : void 0).groupBy(costEventsTable.model)).map((r) => toRollup(r.key ?? "unknown", r));
329
- });
330
- const byAgent = (issue) => Effect.promise(async () => {
331
- return (await q.select({
332
- key: costEventsTable.agentId,
333
- ...groupBySelect
334
- }).from(costEventsTable).where(issue ? eq(costEventsTable.issueId, issue) : void 0).groupBy(costEventsTable.agentId)).map((r) => {
335
- const key = r.key ?? "unattributed";
336
- return toRollup(key, r, deriveTieredAgentCostRole(key, issue));
337
- });
338
- });
339
- const byBackgroundSource = (hours) => Effect.promise(async () => {
340
- const cutoff = /* @__PURE__ */ new Date(Date.now() - hours * 36e5);
341
- return (await q.select({
342
- key: costEventsTable.sourceFile,
343
- ...groupBySelect
344
- }).from(costEventsTable).where(and(gte(costEventsTable.ts, cutoff), sql`${costEventsTable.sourceFile} IS NOT NULL`)).groupBy(costEventsTable.sourceFile)).map((r) => toRollup(r.key ?? "unknown", r));
345
- });
346
- const byProject = () => Effect.promise(async () => {
347
- const projExpr = sql`UPPER(SUBSTR(${costEventsTable.issueId}, 1, INSTR(${costEventsTable.issueId}, '-') - 1))`;
348
- return (await q.select({
349
- key: projExpr,
350
- ...groupBySelect
351
- }).from(costEventsTable).where(sql`${costEventsTable.issueId} IS NOT NULL`).groupBy(projExpr)).map((r) => toRollup(r.key ?? "unknown", r));
352
- });
353
- const recent = (limit, since) => Effect.promise(async () => {
354
- return (await q.select().from(costEventsTable).where(since ? gte(costEventsTable.ts, since) : void 0).orderBy(desc(costEventsTable.ts)).limit(limit)).map((r) => ({
355
- ts: r.ts,
356
- issueId: r.issueId ?? null,
357
- agentId: r.agentId ?? null,
358
- sessionId: r.sessionId ?? null,
359
- sessionType: r.sessionType ?? null,
360
- provider: r.provider ?? null,
361
- model: r.model ?? null,
362
- input: r.input ?? 0,
363
- output: r.output ?? 0,
364
- cacheRead: r.cacheRead ?? 0,
365
- cacheWrite: r.cacheWrite ?? 0,
366
- cost: r.cost ?? 0,
367
- requestId: r.requestId ?? null,
368
- sourceFile: r.sourceFile ?? null
369
- }));
370
- });
371
- const listBudgets = () => Effect.sync(() => getAllBudgetsSync().map(mapBudget));
372
- const checkBudget = (id) => Effect.gen(function* () {
373
- const result = yield* Effect.sync(() => checkBudgetSync(id));
374
- if (!result.budget) return yield* Effect.fail(new BudgetNotFound({ id }));
375
- return {
376
- budget: mapBudget(result.budget),
377
- percentUsed: result.percentUsed,
378
- remaining: result.remaining,
379
- alert: result.alert,
380
- exceeded: result.exceeded
381
- };
382
- });
383
- return CostResolver.of({
384
- summary,
385
- byIssue,
386
- issueDetail,
387
- byDay,
388
- byModel,
389
- byAgent,
390
- byBackgroundSource,
391
- byProject,
392
- recent,
393
- listBudgets,
394
- checkBudget
395
- });
396
- }));
397
- var CostWriter = class extends Context.Service()("overdeck/CostWriter") {};
398
- const CostDoorLive = Layer.effect(CostWriter, Effect.gen(function* () {
399
- const { q } = yield* Db;
400
- const archive = yield* CostArchive;
401
- const bus = yield* EventBus;
402
- const checkDuplicate = (e) => Effect.gen(function* () {
403
- if (e.requestId == null && e.sourceFile == null) return false;
404
- const condition = e.requestId != null ? eq(costEventsTable.requestId, e.requestId) : eq(costEventsTable.sourceFile, e.sourceFile);
405
- return (yield* Effect.promise(() => q.select({ id: costEventsTable.id }).from(costEventsTable).where(condition).limit(1))).length > 0;
406
- });
407
- const record = (event, opts) => Effect.gen(function* () {
408
- if (opts?.dryRun) {
409
- if (yield* checkDuplicate(event)) return false;
410
- return true;
411
- }
412
- yield* archive.append(event);
413
- if (yield* checkDuplicate(event)) return false;
414
- yield* Effect.promise(() => q.insert(costEventsTable).values({
415
- ts: event.ts,
416
- issueId: event.issueId,
417
- agentId: event.agentId,
418
- sessionId: event.sessionId,
419
- sessionType: event.sessionType,
420
- provider: event.provider,
421
- model: event.model,
422
- input: event.input,
423
- output: event.output,
424
- cacheRead: event.cacheRead,
425
- cacheWrite: event.cacheWrite,
426
- cost: event.cost,
427
- requestId: event.requestId,
428
- sourceFile: event.sourceFile
429
- }).onConflictDoNothing());
430
- yield* bus.emit({
431
- type: "cost.recorded",
432
- payload: {
433
- issueId: event.issueId,
434
- cost: event.cost
435
- }
436
- });
437
- return true;
438
- });
439
- const reconcile = (opts) => Effect.gen(function* () {
440
- const source = opts?.source ?? "claude";
441
- const empty = {
442
- imported: 0,
443
- skipped: [],
444
- sessionsScanned: 0,
445
- eventsImported: 0,
446
- duplicatesSkipped: 0,
447
- errors: [],
448
- earliestEventTs: null,
449
- latestEventTs: null,
450
- warnings: []
451
- };
452
- if (source !== "ohmypi" && source !== "codex") return empty;
453
- const agentsDir = join(getOverdeckHome(), "agents");
454
- const agentNames = yield* Effect.sync(() => {
455
- if (!existsSync$1(agentsDir)) return [];
456
- return readdirSync$1(agentsDir, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => e.name);
457
- });
458
- let imported = 0;
459
- const skipped = [];
460
- let duplicatesSkipped = 0;
461
- let sessionsScanned = 0;
462
- let earliestEventTs = null;
463
- let latestEventTs = null;
464
- const errors = [];
465
- const warnings = [];
466
- const markSkipped = (file, reason) => {
467
- skipped.push({
468
- file,
469
- reason
470
- });
471
- console.warn(`[cost-reconcile] skipped ${file}: ${reason}`);
472
- };
473
- const markWarning = (warning) => {
474
- warnings.push(warning);
475
- console.warn(`[cost-reconcile] warning ${warning.file}: ${warning.reason} provider=${warning.provider ?? "unknown"} model=${warning.model}`);
476
- };
477
- const noteImportedTimestamp = (ts) => {
478
- const iso = ts.toISOString();
479
- if (earliestEventTs == null || iso < earliestEventTs) earliestEventTs = iso;
480
- if (latestEventTs == null || iso > latestEventTs) latestEventTs = iso;
481
- };
482
- const roots = agentNames.map((agentName) => ({
483
- root: source === "ohmypi" ? join(agentsDir, agentName, "sessions") : join(agentsDir, agentName, "codex-home", "sessions"),
484
- agentName,
485
- issueId: issueIdFromAgentName(agentName),
486
- sessionType: source
487
- }));
488
- if (source === "codex") for (const root of opts?.extraRoots ?? []) roots.push({
489
- root,
490
- agentName: "codex-global",
491
- issueId: null,
492
- sessionType: "codex",
493
- inferIssueFromCwd: true
494
- });
495
- for (const extra of opts?.extraRootSpecs ?? []) {
496
- if (source === "codex" && extra.kind === "codex-global") roots.push({
497
- root: extra.root,
498
- agentName: "codex-global",
499
- issueId: null,
500
- sessionType: "codex",
501
- inferIssueFromCwd: true
502
- });
503
- if (source === "ohmypi" && extra.kind === "ohmypi-global") {
504
- const encodedRoots = yield* Effect.sync(() => {
505
- if (!existsSync$1(extra.root)) return [];
506
- return readdirSync$1(extra.root, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => ({
507
- root: join(extra.root, e.name),
508
- agentName: "pi-global",
509
- issueId: inferIssueFromPiEncodedRootName(e.name) ?? "UNKNOWN",
510
- sessionType: "ohmypi"
511
- }));
512
- });
513
- roots.push(...encodedRoots);
514
- }
515
- if (source === "ohmypi" && extra.kind === "ohmypi-legacy-agents") {
516
- const legacyRoots = yield* Effect.sync(() => {
517
- if (!existsSync$1(extra.root)) return [];
518
- return readdirSync$1(extra.root, { withFileTypes: true }).filter((e) => e.isDirectory()).map((e) => ({
519
- root: join(extra.root, e.name, "sessions"),
520
- agentName: e.name,
521
- issueId: issueIdFromAgentName(e.name),
522
- sessionType: "ohmypi"
523
- }));
524
- });
525
- roots.push(...legacyRoots);
526
- }
527
- }
528
- for (const root of roots) {
529
- const sessionFiles = yield* Effect.sync(() => walkJsonl(root.root));
530
- for (const sessionFile of sessionFiles) {
531
- sessionsScanned++;
532
- if (source === "ohmypi") {
533
- const parsed = yield* Effect.sync(() => {
534
- try {
535
- return parseOhmypiSessionCostResultSync(sessionFile);
536
- } catch (cause) {
537
- const reason = cause instanceof Error ? cause.message : String(cause);
538
- errors.push(`${sessionFile}: ${reason}`);
539
- return {
540
- ok: false,
541
- reason
542
- };
543
- }
544
- });
545
- if (!parsed.ok) {
546
- markSkipped(sessionFile, parsed.reason ?? "unreadable");
547
- continue;
548
- }
549
- const events = parsed.usageEvents ?? [];
550
- if (events.length === 0) {
551
- markSkipped(sessionFile, "no-usage");
552
- continue;
553
- }
554
- const unpricedWarnings = parsed.unpricedModels ?? [];
555
- if (unpricedWarnings.length) markSkipped(sessionFile, "unpriced-model");
556
- for (const usage of events) {
557
- const derivedWarnings = unpricedWarnings.filter((warning) => warning.model === usage.model && warning.provider === usage.provider).map((warning) => ({
558
- type: "unpriced-model",
559
- ...warning
560
- }));
561
- const eventWarnings = usage.warnings?.length ? usage.warnings : derivedWarnings;
562
- for (const warning of eventWarnings) markWarning({
563
- file: sessionFile,
564
- reason: warning.reason,
565
- provider: warning.provider,
566
- model: warning.model
567
- });
568
- const ts = new Date(usage.timestamp);
569
- if (yield* record({
570
- ts,
571
- issueId: root.issueId,
572
- agentId: root.agentName,
573
- sessionId: usage.sessionId,
574
- sessionType: root.sessionType,
575
- provider: inferPiProvider(usage.model, usage.provider),
576
- model: usage.model,
577
- input: usage.input,
578
- output: usage.output,
579
- cacheRead: usage.cacheRead,
580
- cacheWrite: usage.cacheWrite,
581
- cost: usage.cost,
582
- requestId: usage.requestId,
583
- sourceFile: sessionFile,
584
- warnings: eventWarnings.length > 0 ? eventWarnings : void 0
585
- }, { dryRun: opts?.dryRun })) {
586
- imported++;
587
- noteImportedTimestamp(ts);
588
- } else duplicatesSkipped++;
589
- }
590
- continue;
591
- }
592
- const events = yield* Effect.sync(() => {
593
- try {
594
- return parseCodexSessionCostEventsSync(sessionFile);
595
- } catch (cause) {
596
- errors.push(`${sessionFile}: ${cause instanceof Error ? cause.message : String(cause)}`);
597
- return [];
598
- }
599
- });
600
- if (events.length === 0) {
601
- markSkipped(sessionFile, "no-usage");
602
- continue;
603
- }
604
- if (events.some((event) => event.model === "unknown")) markSkipped(sessionFile, "unknown-model");
605
- const codexSession = root.inferIssueFromCwd ? yield* Effect.sync(() => parseCodexSessionSync(sessionFile)) : null;
606
- const issueId = root.inferIssueFromCwd ? inferIssueFromPath(codexSession?.cwd) ?? "UNKNOWN" : root.issueId;
607
- for (const usage of events) {
608
- const ts = new Date(usage.timestamp);
609
- if (yield* record({
610
- ts,
611
- issueId,
612
- agentId: root.agentName,
613
- sessionId: usage.sessionId,
614
- sessionType: root.sessionType,
615
- provider: usage.provider,
616
- model: usage.model,
617
- input: usage.input,
618
- output: usage.output,
619
- cacheRead: usage.cacheRead,
620
- cacheWrite: usage.cacheWrite,
621
- cost: usage.cost,
622
- requestId: usage.requestId,
623
- sourceFile: sessionFile
624
- }, { dryRun: opts?.dryRun })) {
625
- imported++;
626
- noteImportedTimestamp(ts);
627
- } else duplicatesSkipped++;
628
- }
629
- }
630
- }
631
- return {
632
- imported,
633
- skipped,
634
- sessionsScanned,
635
- eventsImported: imported,
636
- duplicatesSkipped,
637
- errors,
638
- earliestEventTs,
639
- latestEventTs,
640
- warnings
641
- };
642
- });
643
- const rebuild = () => Effect.gen(function* () {
644
- return { events: 0 };
645
- });
646
- const createBudget = (spec) => Effect.gen(function* () {
647
- return mapBudget(yield* Effect.sync(() => createBudgetSync({
648
- ...spec,
649
- enabled: true
650
- })));
651
- });
652
- const deleteBudget = (id) => Effect.gen(function* () {
653
- if (!(yield* Effect.sync(() => deleteBudgetSync(id)))) return yield* Effect.fail(new BudgetNotFound({ id }));
654
- });
655
- return CostWriter.of({
656
- record,
657
- reconcile,
658
- rebuild,
659
- createBudget,
660
- deleteBudget
661
- });
662
- })).pipe(Layer.provide(Layer.mergeAll(DbLive, EventBusLive.pipe(Layer.provide(DbLive)), CostArchiveLive)));
663
- HttpApiGroup.make("costs").add(HttpApiEndpoint.get("summary", "/costs/summary", {
664
- query: {
665
- window: Schema.optional(Window),
666
- project: Schema.optional(Schema.String)
667
- },
668
- success: WindowSummary
669
- })).add(HttpApiEndpoint.get("byIssue", "/costs/by-issue", { success: Schema.Array(Rollup) })).add(HttpApiEndpoint.get("issueDetail", "/costs/issue/:id", {
670
- params: { id: IssueId },
671
- success: IssueCost
672
- })).add(HttpApiEndpoint.get("byDay", "/costs/trends", {
673
- query: {
674
- days: Schema.optional(Schema.NumberFromString),
675
- issueId: Schema.optional(IssueId)
676
- },
677
- success: Schema.Array(Rollup)
678
- })).add(HttpApiEndpoint.get("byModel", "/costs/by-model", {
679
- query: { issueId: Schema.optional(IssueId) },
680
- success: Schema.Array(Rollup)
681
- })).add(HttpApiEndpoint.get("byAgent", "/costs/by-agent", {
682
- query: { issueId: Schema.optional(IssueId) },
683
- success: Schema.Array(Rollup)
684
- })).add(HttpApiEndpoint.get("byBackgroundSource", "/costs/background", {
685
- query: { hours: Schema.optional(Schema.NumberFromString) },
686
- success: Schema.Array(Rollup)
687
- })).add(HttpApiEndpoint.get("byProject", "/costs/by-project", { success: Schema.Array(Rollup) })).add(HttpApiEndpoint.get("recent", "/costs/stream", {
688
- query: {
689
- limit: Schema.optional(Schema.NumberFromString),
690
- since: Schema.optional(Schema.String)
691
- },
692
- success: Schema.Array(CostEvent)
693
- })).add(HttpApiEndpoint.get("listBudgets", "/costs/budget", { success: Schema.Array(Budget) })).add(HttpApiEndpoint.get("checkBudget", "/costs/budget/:id", {
694
- params: { id: Schema.String },
695
- success: BudgetStatus,
696
- error: BudgetNotFound
697
- })).add(HttpApiEndpoint.post("reconcile", "/costs/reconcile", {
698
- payload: Schema.Struct({
699
- source: Schema.optional(Schema.Literals([
700
- "claude",
701
- "ohmypi",
702
- "codex",
703
- "acp",
704
- "wal"
705
- ])),
706
- dryRun: Schema.optional(Schema.Boolean),
707
- extraRoots: Schema.optional(Schema.Array(Schema.String))
708
- }),
709
- success: Schema.Struct({
710
- imported: Schema.Number,
711
- skipped: Schema.Array(Schema.Struct({
712
- file: Schema.String,
713
- reason: Schema.String
714
- })),
715
- sessionsScanned: Schema.Number,
716
- eventsImported: Schema.Number,
717
- duplicatesSkipped: Schema.Number,
718
- errors: Schema.Array(Schema.String),
719
- earliestEventTs: Schema.NullOr(Schema.String),
720
- latestEventTs: Schema.NullOr(Schema.String),
721
- warnings: Schema.Array(Schema.Struct({
722
- file: Schema.String,
723
- reason: Schema.String,
724
- provider: Schema.NullOr(Schema.String),
725
- model: Schema.String
726
- }))
727
- }),
728
- error: CostIngestError
729
- })).add(HttpApiEndpoint.post("rebuild", "/costs/rebuild", {
730
- success: Schema.Struct({ events: Schema.Number }),
731
- error: CostIngestError
732
- })).add(HttpApiEndpoint.post("createBudget", "/costs/budget", {
733
- payload: BudgetSpec,
734
- success: Budget,
735
- error: CostIngestError
736
- })).add(HttpApiEndpoint["delete"]("deleteBudget", "/costs/budget/:id", {
737
- params: { id: Schema.String },
738
- error: BudgetNotFound
739
- }));
740
- //#endregion
741
- //#region ../../lib/cloister/health.ts
742
48
  init_cost_sync();
743
49
  init_control_settings();
744
50
  init_io();
@@ -883,7 +189,7 @@ async function captureFiles(context, workspace, issueId) {
883
189
  const recordView = readRecordContinueViewSync(resolveProjectForIssue(issueId) ?? getProjectConfigFromWorkspacePath(workspace), issueId);
884
190
  if (recordView) context.continueState = recordView;
885
191
  } catch {}
886
- const claudeMd = join$1(workspace, "CLAUDE.md");
192
+ const claudeMd = join(workspace, "CLAUDE.md");
887
193
  if (existsSync(claudeMd)) context.claudeMd = readFileSync(claudeMd, "utf-8");
888
194
  } catch (error) {
889
195
  console.error("Error capturing files:", error);
@@ -1120,9 +426,9 @@ async function performKillAndSpawn(state, options) {
1120
426
  const context = await Effect.runPromise(captureHandoffContext(state, options.targetModel, options.reason));
1121
427
  stopAgentSync(state.id);
1122
428
  const prompt = buildHandoffPrompt(context, options.additionalInstructions);
1123
- const handoffDir = join$1(getAgentDir(state.id), "handoffs");
429
+ const handoffDir = join(getAgentDir(state.id), "handoffs");
1124
430
  mkdirSync(handoffDir, { recursive: true });
1125
- writeFileSync(join$1(handoffDir, `handoff-${Date.now()}.md`), prompt);
431
+ writeFileSync(join(handoffDir, `handoff-${Date.now()}.md`), prompt);
1126
432
  const newState = await spawnAgent({
1127
433
  issueId: state.issueId,
1128
434
  workspace: state.workspace,
@@ -1195,12 +501,11 @@ const performHandoff = (agentId, options) => Effect.tryPromise({
1195
501
  * Monitors agent costs against configured limits and emits alerts.
1196
502
  * Does NOT automatically stop agents - just provides visibility and warnings.
1197
503
  */
1198
- init_paths();
1199
504
  init_config();
1200
505
  /**
1201
506
  * Path to cost data file
1202
507
  */
1203
- const COST_DATA_FILE = join$1(OVERDECK_HOME, "cost-data.json");
508
+ const COST_DATA_FILE = join(OVERDECK_HOME, "cost-data.json");
1204
509
  /**
1205
510
  * Load cost data from file
1206
511
  */
@@ -1235,7 +540,7 @@ function loadCostData() {
1235
540
  */
1236
541
  function saveCostData(data) {
1237
542
  try {
1238
- const dir = dirname$1(COST_DATA_FILE);
543
+ const dir = dirname(COST_DATA_FILE);
1239
544
  if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
1240
545
  const persisted = {
1241
546
  perAgent: Object.fromEntries(data.perAgent),
@@ -1547,7 +852,7 @@ async function activeRoleRunExists(issueId, role, workspacePath) {
1547
852
  if (stateRole === role && state.status === "starting" && !await Effect.runPromise(sessionExists(candidateId))) return isFreshStarting(state);
1548
853
  if (!(stateRole === role && state.status !== "stopped" && state.status !== "error")) return false;
1549
854
  if (workspacePath && state.roleRunHead) try {
1550
- const { formatAnchorShort, snapshotWorkspaceHeadsPromise } = await import("./git-utils-CsKV0Dis.js");
855
+ const { formatAnchorShort, snapshotWorkspaceHeadsPromise } = await import("./git-utils-fcK3ZRNj.js");
1551
856
  const currentHead = await snapshotWorkspaceHeadsPromise(issueId, workspacePath);
1552
857
  if (currentHead && currentHead !== state.roleRunHead) {
1553
858
  console.log(`[cloister] ${issueId}: ${role} session ${candidateId} is stale (ran against ${formatAnchorShort(state.roleRunHead)}, HEAD is now ${formatAnchorShort(currentHead)}) — not active`);
@@ -1600,7 +905,7 @@ async function onIssueStateChangePromise(issueId, newState) {
1600
905
  });
1601
906
  return;
1602
907
  }
1603
- const { getReviewStatusSync } = await import("./review-status-C_kQeeX0.js");
908
+ const { getReviewStatusSync } = await import("./review-status-CDs0jQV6.js");
1604
909
  if (getReviewStatusSync(normalizedIssueId)?.mergeStatus === "merged") {
1605
910
  const message = `${normalizedIssueId}: skipping ${role} dispatch — merge already landed (merge_status='merged' is terminal)`;
1606
911
  console.log(`[cloister] ${message}`);
@@ -1667,7 +972,7 @@ async function onIssueStateChangePromise(issueId, newState) {
1667
972
  return;
1668
973
  }
1669
974
  const branch = `feature/${normalizedIssueId.toLowerCase()}`;
1670
- const { spawnReviewRoleForIssue } = await import("./review-agent-DgkUPRx0.js");
975
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DM9S22BL.js");
1671
976
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
1672
977
  issueId: normalizedIssueId,
1673
978
  workspace,
@@ -1685,7 +990,7 @@ async function onIssueStateChangePromise(issueId, newState) {
1685
990
  }
1686
991
  if (role === "test") {
1687
992
  const branch = `feature/${normalizedIssueId.toLowerCase()}`;
1688
- const { dispatchTestAgentAndNotify } = await import("./test-agent-queue-C5DI_gWX.js");
993
+ const { dispatchTestAgentAndNotify } = await import("./test-agent-queue-Dxeae55k.js");
1689
994
  await Effect.runPromise(dispatchTestAgentAndNotify(normalizedIssueId, workspace ?? void 0, branch));
1690
995
  const message = `${normalizedIssueId}: test role dispatched from lifecycle state '${newState}'`;
1691
996
  console.log(`[cloister] ${message}`);
@@ -1697,7 +1002,7 @@ async function onIssueStateChangePromise(issueId, newState) {
1697
1002
  });
1698
1003
  return;
1699
1004
  }
1700
- const { spawnRun } = await import("./agents-DpCuoF65.js");
1005
+ const { spawnRun } = await import("./agents-BdkVgjxC.js");
1701
1006
  if (role === "plan") {
1702
1007
  const decision = decideAutonomousPlanDispatch(await gatherAutonomousPlanDispatchInput(normalizedIssueId));
1703
1008
  if (!decision.allow) {
@@ -1825,9 +1130,9 @@ async function handleCloisterDomainEventPromise(event) {
1825
1130
  const payload = payloadRecord(event);
1826
1131
  const agentId = typeof payload["agentId"] === "string" ? payload["agentId"] : void 0;
1827
1132
  if (agentId && payload["hookName"] === "PostCompact" && !agentId.startsWith("conv-")) try {
1828
- const { continueCompactedAgentAfterHook } = await import("./compaction-continuation-Bjfi70G-.js");
1829
- const { findLastCompactBoundary } = await import("./conversation-service-CzZUJFEx.js");
1830
- const { deliverAgentMessage, getAgentStateSync } = await import("./agents-DpCuoF65.js");
1133
+ const { continueCompactedAgentAfterHook } = await import("./compaction-continuation-TG0HYkOq.js");
1134
+ const { findLastCompactBoundary } = await import("./conversation-service-B3h1erHm.js");
1135
+ const { deliverAgentMessage, getAgentStateSync } = await import("./agents-BdkVgjxC.js");
1831
1136
  const continued = await continueCompactedAgentAfterHook({
1832
1137
  agentId,
1833
1138
  capturePane: (target) => Effect.runPromise(capturePane(target, 80)),
@@ -1849,34 +1154,34 @@ async function handleCloisterDomainEventPromise(event) {
1849
1154
  return;
1850
1155
  }
1851
1156
  if (event.type === "linear_mcp_auth.healthy") {
1852
- const { processLinearMcpAuthWake } = await import("./linear-mcp-auth-B8pYRsiU.js");
1157
+ const { processLinearMcpAuthWake } = await import("./linear-mcp-auth-CQ7ROT1X.js");
1853
1158
  await processLinearMcpAuthWake();
1854
1159
  return;
1855
1160
  }
1856
1161
  if (event.type === "agent.stopped") {
1857
1162
  const agentId = event.payload?.agentId;
1858
1163
  if (agentId) {
1859
- const { handleAgentStoppedEvent, handleAgentStoppedForOrphanReviewerSessions } = await import("./deacon-CzSZMtb-.js");
1860
- const { handleAgentLifecycleEventForIdleStack } = await import("./idle-stack-reaper-Bw0rU9GC.js");
1164
+ const { handleAgentStoppedEvent, handleAgentStoppedForOrphanReviewerSessions } = await import("./deacon-BUOpTnmQ.js");
1165
+ const { handleAgentLifecycleEventForIdleStack } = await import("./idle-stack-reaper-DhbFdkWv.js");
1861
1166
  handleAgentLifecycleEventForIdleStack(agentId);
1862
1167
  const slotMatch = /^agent-(.+)-slot-\d+$/.exec(agentId);
1863
1168
  await Promise.all([
1864
1169
  handleAgentStoppedEvent(agentId),
1865
1170
  handleAgentStoppedForOrphanReviewerSessions(agentId),
1866
- slotMatch ? (await import("./messaging-nuwStbdQ.js")).messageAgent(`agent-${slotMatch[1].toLowerCase()}`, `[swarm-event] ${agentId} stopped; run pan swarm status ${slotMatch[1].toUpperCase()} --json`, "reactive:swarm-event") : Promise.resolve()
1171
+ slotMatch ? (await import("./messaging-DQi-WEFB.js")).messageAgent(`agent-${slotMatch[1].toLowerCase()}`, `[swarm-event] ${agentId} stopped; run pan swarm status ${slotMatch[1].toUpperCase()} --json`, "reactive:swarm-event") : Promise.resolve()
1867
1172
  ]);
1868
1173
  }
1869
1174
  return;
1870
1175
  }
1871
1176
  if (event.type === "agent.started") {
1872
1177
  const agentId = event.payload?.agentId;
1873
- if (agentId) (await import("./idle-stack-reaper-Bw0rU9GC.js")).handleAgentLifecycleEventForIdleStack(agentId);
1178
+ if (agentId) (await import("./idle-stack-reaper-DhbFdkWv.js")).handleAgentLifecycleEventForIdleStack(agentId);
1874
1179
  return;
1875
1180
  }
1876
1181
  if (event.type === "agent.heartbeat_dead") {
1877
1182
  const agentId = event.payload?.agentId;
1878
1183
  if (agentId) {
1879
- const { handleAgentHeartbeatDeadEvent } = await import("./deacon-CzSZMtb-.js");
1184
+ const { handleAgentHeartbeatDeadEvent } = await import("./deacon-BUOpTnmQ.js");
1880
1185
  await handleAgentHeartbeatDeadEvent(agentId, "event");
1881
1186
  }
1882
1187
  return;
@@ -1885,7 +1190,7 @@ async function handleCloisterDomainEventPromise(event) {
1885
1190
  const payload = event.payload;
1886
1191
  const issueId = payload?.issueId;
1887
1192
  if (issueId) {
1888
- const { handleReviewCoordinatorDied } = await import("./deacon-CzSZMtb-.js");
1193
+ const { handleReviewCoordinatorDied } = await import("./deacon-BUOpTnmQ.js");
1889
1194
  await handleReviewCoordinatorDied(issueId, payload?.sessionName ?? "", payload?.reason ?? "");
1890
1195
  }
1891
1196
  return;
@@ -1893,7 +1198,7 @@ async function handleCloisterDomainEventPromise(event) {
1893
1198
  if (event.type === "work.completed") {
1894
1199
  const issueId = event.payload?.issueId;
1895
1200
  if (issueId) {
1896
- const { handleWorkCompleted } = await import("./deacon-CzSZMtb-.js");
1201
+ const { handleWorkCompleted } = await import("./deacon-BUOpTnmQ.js");
1897
1202
  await handleWorkCompleted(issueId);
1898
1203
  }
1899
1204
  }
@@ -1904,12 +1209,12 @@ async function handleCloisterDomainEventPromise(event) {
1904
1209
  const status = payload?.status?.toLowerCase();
1905
1210
  if (issueId) {
1906
1211
  if (canonicalStatus === "closed" || status === "closed") {
1907
- const { handleIssueStatusChangedClosed } = await import("./closed-issue-reaper-omOcUDBl.js");
1212
+ const { handleIssueStatusChangedClosed } = await import("./closed-issue-reaper-DVtyOI4C.js");
1908
1213
  await handleIssueStatusChangedClosed(issueId);
1909
1214
  return;
1910
1215
  }
1911
1216
  if (canonicalStatus === "todo" || status === "planned" || status === "todo") {
1912
- const { handleOrphanProposedSpec } = await import("./orphan-proposed-reconciler-gf4TxfZb.js");
1217
+ const { handleOrphanProposedSpec } = await import("./orphan-proposed-reconciler--V8GIzmY.js");
1913
1218
  await handleOrphanProposedSpec(issueId);
1914
1219
  }
1915
1220
  }
@@ -1956,7 +1261,7 @@ const DEFAULT_FPP_CONFIG = {
1956
1261
  /**
1957
1262
  * Path to violations data file
1958
1263
  */
1959
- const VIOLATIONS_DATA_FILE = join$1(OVERDECK_HOME, "fpp-violations.json");
1264
+ const VIOLATIONS_DATA_FILE = join(OVERDECK_HOME, "fpp-violations.json");
1960
1265
  /**
1961
1266
  * Load violations from file
1962
1267
  */
@@ -1976,7 +1281,7 @@ function loadViolations() {
1976
1281
  */
1977
1282
  function saveViolations(violations) {
1978
1283
  try {
1979
- const dir = dirname$1(VIOLATIONS_DATA_FILE);
1284
+ const dir = dirname(VIOLATIONS_DATA_FILE);
1980
1285
  if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
1981
1286
  const persisted = { violations: Array.from(violations.entries()) };
1982
1287
  const tempFile = `${VIOLATIONS_DATA_FILE}.tmp`;
@@ -2102,12 +1407,12 @@ init_paths();
2102
1407
  /**
2103
1408
  * Handoff log file path
2104
1409
  */
2105
- const HANDOFF_LOG_FILE = join$1(OVERDECK_HOME, "logs", "handoffs.jsonl");
1410
+ const HANDOFF_LOG_FILE = join(OVERDECK_HOME, "logs", "handoffs.jsonl");
2106
1411
  /**
2107
1412
  * Ensure log directory exists
2108
1413
  */
2109
1414
  function ensureLogDir() {
2110
- const logDir = join$1(OVERDECK_HOME, "logs");
1415
+ const logDir = join(OVERDECK_HOME, "logs");
2111
1416
  if (!existsSync(logDir)) mkdirSync(logDir, { recursive: true });
2112
1417
  }
2113
1418
  /**
@@ -2302,7 +1607,7 @@ async function rotateSpecialistSessionPromise(specialistName, workingDir) {
2302
1607
  let memoryFile;
2303
1608
  if (specialistName === "merge-agent" && workingDir) {
2304
1609
  memoryContent = await Effect.runPromise(buildMergeAgentMemory(workingDir));
2305
- memoryFile = join$1(OVERDECK_HOME, `merge-agent-memory-${Date.now()}.md`);
1610
+ memoryFile = join(OVERDECK_HOME, `merge-agent-memory-${Date.now()}.md`);
2306
1611
  writeFileSync(memoryFile, memoryContent);
2307
1612
  console.log(`Built memory file: ${memoryFile}`);
2308
1613
  }
@@ -2607,7 +1912,7 @@ async function performHealthCheck(host) {
2607
1912
  for (const health of needsAttention) {
2608
1913
  const idleAgentState = getAgentStateSync(health.agentId);
2609
1914
  if (idleAgentState?.role === "sequencer") continue;
2610
- const { shouldSkipIdlePokeForAgent } = await import("./stuck-remediation-BVNd9txd.js");
1915
+ const { shouldSkipIdlePokeForAgent } = await import("./stuck-remediation-hSOOYB9B.js");
2611
1916
  if (shouldSkipIdlePokeForAgent(idleAgentState)) {
2612
1917
  host.pokeProgress.delete(health.agentId);
2613
1918
  continue;
@@ -2822,8 +2127,8 @@ async function checkCompletionMarkers(host) {
2822
2127
  if (!existsSync(AGENTS_DIR)) return;
2823
2128
  const agentDirs = readdirSync(AGENTS_DIR, { withFileTypes: true }).filter((d) => d.isDirectory() && d.name.startsWith("agent-"));
2824
2129
  for (const dir of agentDirs) {
2825
- const completedFile = join$1(AGENTS_DIR, dir.name, "completed");
2826
- const processedFile = join$1(AGENTS_DIR, dir.name, "completed.processed");
2130
+ const completedFile = join(AGENTS_DIR, dir.name, "completed");
2131
+ const processedFile = join(AGENTS_DIR, dir.name, "completed.processed");
2827
2132
  if (!existsSync(completedFile)) continue;
2828
2133
  if (existsSync(processedFile)) try {
2829
2134
  if (statSync(completedFile).mtimeMs > statSync(processedFile).mtimeMs) {
@@ -2855,7 +2160,7 @@ async function checkCompletionMarkers(host) {
2855
2160
  if (retryCount === Infinity) host.processedCompletions.delete(dir.name);
2856
2161
  else if (retryCount >= 3) continue;
2857
2162
  const issueId = dir.name.replace("agent-", "").toUpperCase();
2858
- const { getReviewStatusSync } = await import("./review-status-C_kQeeX0.js");
2163
+ const { getReviewStatusSync } = await import("./review-status-CDs0jQV6.js");
2859
2164
  const existingReview = getReviewStatusSync(issueId);
2860
2165
  if (existingReview && ["reviewing", "passed"].includes(existingReview.reviewStatus || "")) {
2861
2166
  console.log(`🔔 Cloister: Completion marker for ${issueId} — review already ${existingReview.reviewStatus}, marking processed`);
@@ -2980,7 +2285,7 @@ async function progressFingerprint(_host, agentId) {
2980
2285
  let head = "";
2981
2286
  if (state?.workspace) try {
2982
2287
  if (state.issueId) {
2983
- const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-CsKV0Dis.js");
2288
+ const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-fcK3ZRNj.js");
2984
2289
  head = await snapshotWorkspaceHeadsPromise(state.issueId, state.workspace) ?? "";
2985
2290
  } else {
2986
2291
  const { stdout } = await execAsync("git rev-parse HEAD", {
@@ -3022,7 +2327,7 @@ async function pokeAgentWithEscalation(host, agentId) {
3022
2327
  ineffective
3023
2328
  });
3024
2329
  if (ineffective >= 4) {
3025
- const { setAgentPausedSync } = await import("./agent-state-CM8iVw5B.js");
2330
+ const { setAgentPausedSync } = await import("./agent-state-B0v3fvGI.js");
3026
2331
  try {
3027
2332
  setAgentPausedSync(agentId, `needs-you: idle-alive — no observable progress across ${ineffective + 1} pokes (idle-alive escalation)`);
3028
2333
  host.emit({
@@ -3095,7 +2400,7 @@ async function handleAgentCrash(host, agentId) {
3095
2400
  if (skipReason) {
3096
2401
  let recoverUnfinishedOneShot = false;
3097
2402
  if (ONE_SHOT_ROLES.has(agentState.role) && agentState.sessionId && agentState.issueId) try {
3098
- const { getReviewStatusSync } = await import("./review-status-C_kQeeX0.js");
2403
+ const { getReviewStatusSync } = await import("./review-status-CDs0jQV6.js");
3099
2404
  const status = getReviewStatusSync(agentState.issueId);
3100
2405
  recoverUnfinishedOneShot = !(status ? isRoleTerminal(agentState.role, {
3101
2406
  reviewStatus: status.reviewStatus,
@@ -3303,8 +2608,8 @@ init_control_settings();
3303
2608
  init_paths();
3304
2609
  init_tmux();
3305
2610
  init_activity_logger();
3306
- const CLOISTER_STATE_FILE = join$1(OVERDECK_HOME, "cloister.state");
3307
- const LEGACY_SPECIALISTS_DIR = join$1(OVERDECK_HOME, "specialists");
2611
+ const CLOISTER_STATE_FILE = join(OVERDECK_HOME, "cloister.state");
2612
+ const LEGACY_SPECIALISTS_DIR = join(OVERDECK_HOME, "specialists");
3308
2613
  async function cleanupLegacySpecialistsDirectory() {
3309
2614
  await rm(LEGACY_SPECIALISTS_DIR, {
3310
2615
  recursive: true,
@@ -3532,7 +2837,7 @@ var CloisterService = class {
3532
2837
  let clearedSpecialistCount = 0;
3533
2838
  try {
3534
2839
  if (existsSync(AGENTS_DIR)) {
3535
- const { isRunning: isSpecialistRunning } = await import("./specialists-x-kPMhrL.js");
2840
+ const { isRunning: isSpecialistRunning } = await import("./specialists-8Pc--yZI.js");
3536
2841
  const entries = readdirSync(AGENTS_DIR, { withFileTypes: true });
3537
2842
  for (const entry of entries) {
3538
2843
  if (!entry.isDirectory()) continue;
@@ -3567,8 +2872,8 @@ var CloisterService = class {
3567
2872
  }
3568
2873
  try {
3569
2874
  const reviewStatuses = loadReviewStatuses();
3570
- const { resolveProjectFromIssueSync } = await import("./projects-LftaVK99.js");
3571
- const { getTmuxSessionName, getAllProjectSpecialistStatuses } = await import("./specialists-x-kPMhrL.js");
2875
+ const { resolveProjectFromIssueSync } = await import("./projects-Crur9uCa.js");
2876
+ const { getTmuxSessionName, getAllProjectSpecialistStatuses } = await import("./specialists-8Pc--yZI.js");
3572
2877
  const activeReviewIssues = /* @__PURE__ */ new Set();
3573
2878
  try {
3574
2879
  const projSpecs = await getAllProjectSpecialistStatuses();
@@ -3579,7 +2884,7 @@ var CloisterService = class {
3579
2884
  }
3580
2885
  const globalRs = getAgentRuntimeStateSync(getTmuxSessionName("review-agent"));
3581
2886
  if (globalRs?.state === "active" && globalRs.currentIssue) activeReviewIssues.add(globalRs.currentIssue.toUpperCase());
3582
- const { listRunningAgents } = await import("./agents-DpCuoF65.js");
2887
+ const { listRunningAgents } = await import("./agents-BdkVgjxC.js");
3583
2888
  const agents = await Effect.runPromise(listRunningAgents());
3584
2889
  for (const agent of agents) {
3585
2890
  if (agent.status === "stopped" || agent.status === "error") continue;
@@ -3622,7 +2927,7 @@ var CloisterService = class {
3622
2927
  continue;
3623
2928
  }
3624
2929
  const branch = `feature/${issueId.toLowerCase()}`;
3625
- const { spawnReviewRoleForIssue } = await import("./review-agent-DgkUPRx0.js");
2930
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DM9S22BL.js");
3626
2931
  const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
3627
2932
  issueId,
3628
2933
  workspace,
@@ -3690,7 +2995,7 @@ var CloisterService = class {
3690
2995
  });
3691
2996
  await this.subscribeToDomainEvents();
3692
2997
  try {
3693
- const { processLinearMcpAuthWake } = await import("./linear-mcp-auth-B8pYRsiU.js");
2998
+ const { processLinearMcpAuthWake } = await import("./linear-mcp-auth-CQ7ROT1X.js");
3694
2999
  await processLinearMcpAuthWake();
3695
3000
  console.log(" ✓ Reconciled pending Linear MCP auth wakes");
3696
3001
  } catch (error) {
@@ -3717,7 +3022,7 @@ var CloisterService = class {
3717
3022
  console.log(" ✓ Cloister event store provider installed");
3718
3023
  return;
3719
3024
  }
3720
- const { initEventStore } = await import("./event-store-Db4w4YIY.js");
3025
+ const { initEventStore } = await import("./event-store-CFnLP8w-.js");
3721
3026
  const store = await initEventStore();
3722
3027
  this.eventStore = store;
3723
3028
  this.domainEventUnsubscribe = store.subscribe((event) => {
@@ -4065,6 +3370,6 @@ function getCloisterService() {
4065
3370
  return globalService;
4066
3371
  }
4067
3372
  //#endregion
4068
- export { generateHealthSummary as a, CostDoorLive as c, CostWriter as d, performHandoff as i, CostResolver as l, readCloisterStateFile as n, getAgentHealth as o, checkAllTriggers as r, getAgentsNeedingAttention as s, getCloisterService as t, CostResolverLive as u };
3373
+ export { generateHealthSummary as a, performHandoff as i, readCloisterStateFile as n, getAgentHealth as o, checkAllTriggers as r, getAgentsNeedingAttention as s, getCloisterService as t };
4069
3374
 
4070
- //# sourceMappingURL=service-CEp-3iow.js.map
3375
+ //# sourceMappingURL=service-D1SZCxH8.js.map