@overdeck/desktop 0.49.2 → 0.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (455) 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-B_maCGZv.js} +2 -2
  4. package/server/{active-dashboard-bundle-Byh6sP-q.js → active-dashboard-bundle-CCqpFWiz.js} +2 -2
  5. package/server/{activity-logger-Ck8qoluj.js → activity-logger-B0X2JJwM.js} +1 -1
  6. package/server/{activity-logger-BWZhVphb.js → activity-logger-SlTXYCVf.js} +3 -3
  7. package/server/{advancing-selfheal-65W4yUQi.js → advancing-selfheal-BJAfiY-C.js} +11 -6
  8. package/server/{agent-gc-BNUudFnt.js → agent-gc-bhikjoJ_.js} +11 -11
  9. package/server/{agent-idle-ONBssBN_.js → agent-idle-D-UQ7gDv.js} +11 -11
  10. package/server/{agent-state-CM8iVw5B.js → agent-state-BrUPf_7Z.js} +1 -1
  11. package/server/{agent-state-BJhGIJZe.js → agent-state-FABw8neJ.js} +344 -402
  12. package/server/{agent-state-service-CzHfoqKQ.js → agent-state-service-BAQApt97.js} +1 -1
  13. package/server/{agent-state-service-CiIuwzIs.js → agent-state-service-rDenYSlD.js} +5 -5
  14. package/server/{agents-DpCuoF65.js → agents-DixZjXWm.js} +1 -1
  15. package/server/{agents-jXgqpHca.js → agents-DzpQidT8.js} +4 -4
  16. package/server/{archive-planning-CGkU6UeL.js → archive-planning-BL1ABtW0.js} +5 -5
  17. package/server/archive-planning-D3gw32U9.js +2 -0
  18. package/server/{artifact-index-jobs-Ck4NRRkY.js → artifact-index-jobs-Cjdme0jS.js} +2 -2
  19. package/server/{assemble-CyvEBmmq.js → assemble-B_JgnCbG.js} +2 -2
  20. package/server/{auto-spawn-consent-Dc4mtM-B.js → auto-spawn-consent-BesWchEi.js} +7 -7
  21. package/server/{backlog-auto-trigger-CCEpr4YT.js → backlog-auto-trigger-COLq639j.js} +3 -3
  22. package/server/{behavior-BiCQzqyT.js → behavior-DCg8CIWC.js} +3 -3
  23. package/server/{bridge-pool-patrol-Ce8rNPym.js → bridge-pool-patrol-BDohuMRt.js} +2 -2
  24. package/server/{briefing-freshness-e_OEYZEe.js → briefing-freshness-ENa_hW_V.js} +2 -2
  25. package/server/build-info-Dx2qrVhb.js +2 -0
  26. package/server/{build-info-BRw4QlYO.js → build-info-WuZT6xyi.js} +3 -3
  27. package/server/{checkpoint-manager-DOwRGFff.js → checkpoint-manager-CSZ7aVQF.js} +2 -2
  28. package/server/{checkpoint-manager-CKr42Usw.js → checkpoint-manager-DXhGRvg4.js} +1 -1
  29. package/server/checkpoint-worker.js +1 -1
  30. package/server/{checkpoints-Cszp_0Np.js → checkpoints-DUkUsPVS.js} +2 -2
  31. package/server/{checkpoints-Cb6CWT4S.js → checkpoints-tm_w6Y4V.js} +1 -1
  32. package/server/{claude-hooks-provision-C5JHpxTS.js → claude-hooks-provision-CTh9zxEi.js} +1 -1
  33. package/server/{claude-hooks-provision-Cer2eFfj.js → claude-hooks-provision-fRofvhTN.js} +2 -2
  34. package/server/{claude-permissions-Bc5kjX1q.js → claude-permissions-DLrb9ovz.js} +18 -3
  35. package/server/{claude-settings-overlay-m-VVZej1.js → claude-settings-overlay-BYnXaTVc.js} +2 -2
  36. package/server/{claude-settings-overlay-C7rWsnya.js → claude-settings-overlay-CMS5Jab5.js} +1 -1
  37. package/server/cli-BflmtEFM.js +2 -0
  38. package/server/{cli-BmczsfD6.js → cli-CoQou1t_.js} +11 -11
  39. package/server/{cliproxy-BpYpkogS.js → cliproxy-DXDQcR3I.js} +2 -2
  40. package/server/{cliproxy-_yUU0HRY.js → cliproxy-DdhFpcXU.js} +1 -1
  41. package/server/{close-issue-CxvRD0UI.js → close-issue-CpQ0BWg-.js} +5 -5
  42. package/server/{closed-issue-reaper-nMLRi5de.js → closed-issue-reaper-CdcJRvUx.js} +13 -13
  43. package/server/{closed-issue-reaper-omOcUDBl.js → closed-issue-reaper-TymtZM37.js} +1 -1
  44. package/server/{codex-DZhFfcWu.js → codex-BValsmtK.js} +1 -1
  45. package/server/{codex-KaSKE-R3.js → codex-DYyZL8JD.js} +6 -6
  46. package/server/{compaction-continuation-Bjfi70G-.js → compaction-continuation-CVjbdGKt.js} +3 -3
  47. package/server/{config-CH1AqqIQ.js → config-CvKH7r7W.js} +1 -1
  48. package/server/{config-ZGjvuR6J.js → config-NxI9Yl2f.js} +2 -2
  49. package/server/{config-Doq_tF-f.js → config-_qaa1UXH.js} +2 -2
  50. package/server/{config-yaml-D9nfpEx1.js → config-yaml-D60AnTIu.js} +24 -9
  51. package/server/{conflict-gate-D4XCtrm2.js → conflict-gate-0dD1kxjN.js} +1 -1
  52. package/server/{conflict-gate-DcUTY4Gb.js → conflict-gate-hAUCL-un.js} +5 -5
  53. package/server/{context-layers-BBTKP-Y4.js → context-layers-CdpabJj0.js} +3 -3
  54. package/server/{context-layers-BGj2Y9l3.js → context-layers-Ds1MnEFI.js} +2 -2
  55. package/server/{continue-i7Revg8D.js → continue-CnvrUfxw.js} +2 -2
  56. package/server/{control-settings-BMoDHY1G.js → control-settings-Db0uXgVM.js} +308 -5
  57. package/server/{conversation-compaction-D4VOmF7p.js → conversation-compaction-B-1KETG9.js} +8 -8
  58. package/server/{conversation-compaction-DzIjYMfg.js → conversation-compaction-DzMXGRiJ.js} +1 -1
  59. package/server/{conversation-service-CzZUJFEx.js → conversation-service-BL-asWPX.js} +1 -1
  60. package/server/{conversation-service-tQCIbBVZ.js → conversation-service-BxIOd5ay.js} +21 -7
  61. package/server/{conversations-bFDaD5YN.js → conversations-CEMfwMt-.js} +1 -1
  62. package/server/{conversations-C75EFFjf.js → conversations-nS6QgYpD.js} +5 -5
  63. package/server/cost-3FyqKK56.js +838 -0
  64. package/server/{cost-BCWEkvro.js → cost-Cctc-Q9M.js} +3 -3
  65. package/server/{cost-CiIwxH1D.js → cost-DTuIRE4y.js} +2 -2
  66. package/server/{cost-sync-DOkdE_yB.js → cost-sync-DfmvLT9L.js} +3 -3
  67. package/server/{dag-BPc74hwj.js → dag-o-dUpw1L.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-B24dNzr8.js → deacon-CsisLmPt.js} +125 -165
  71. package/server/{deacon-canonical-state-CkvxRPck.js → deacon-canonical-state-DkdkQS5p.js} +2 -2
  72. package/server/{deacon-CzSZMtb-.js → deacon-e6py3jkM.js} +3 -3
  73. package/server/{deacon-event-client-BYIQBu0T.js → deacon-event-client-BCjHiGAY.js} +1 -1
  74. package/server/{deacon-event-client-Do6Z2gKl.js → deacon-event-client-CMQswEHX.js} +2 -2
  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-BzaE76Xo.js} +3 -3
  77. package/server/deacon.js +11 -11
  78. package/server/{dead-end-trip-CnVmjnya.js → dead-end-trip-Bs3hxIn6.js} +3 -3
  79. package/server/dead-end-trip-DUbiRMtT.js +2 -0
  80. package/server/{delivery-gyce0vQ7.js → delivery-DhZGRShH.js} +1 -1
  81. package/server/{deploy-patrol-CEwwEYDM.js → deploy-patrol-B8sKkA8h.js} +8 -8
  82. package/server/deploy-queue--smqHLhe.js +2 -0
  83. package/server/{deploy-queue-r96ojDI3.js → deploy-queue-CCGWXFkp.js} +2 -2
  84. package/server/{deploy-window-D_3hhfxt.js → deploy-window-YuJewzmC.js} +4 -4
  85. package/server/{deploy-window-DeJK8mTK.js → deploy-window-hgsvZ3UZ.js} +1 -1
  86. package/server/{dev-supervisor-DZWwpENk.js → dev-supervisor-4SBloJHV.js} +2 -2
  87. package/server/{devcontainer-renderer-d-9dCV_2.js → devcontainer-renderer-BiJhwFNi.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-B2mUBzGk.js → docker-CWO7dcIP.js} +3 -3
  91. package/server/{docker-CRPHBylA.js → docker-DQzyMXkd.js} +1 -1
  92. package/server/{dod-DWtilRLx.js → dod-BAk5arLF.js} +1 -1
  93. package/server/{done-preflight-BDVdWed5.js → done-preflight-CGFA0M1b.js} +1 -1
  94. package/server/{done-preflight-D4ukUf-S.js → done-preflight-Cx9JGznT.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-Dk6ZMOUC.js} +1 -1
  98. package/server/{ensure-devcontainer-BUeBRjmm.js → ensure-devcontainer-DzYBBwnM.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-C50Qt-f1.js} +1 -1
  101. package/server/{event-store-BCSgMubf.js → event-store-DTns2XZP.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-B6xW8Cpm.js} +3 -3
  104. package/server/{factory-BrdqXBeK.js → factory-CWVKwKFE.js} +4 -4
  105. package/server/{feature-registry-storage-zh3ZXW6f.js → feature-registry-storage-vaxRN3WO.js} +2 -2
  106. package/server/{features-BGntOWdy.js → features-DXWwktJB.js} +2 -2
  107. package/server/{feedback-stuck-retirement-DpA5u1kt.js → feedback-stuck-retirement-CXAYe2rU.js} +2 -2
  108. package/server/{feedback-target-Ddqk93NF.js → feedback-target-DSVpi0gT.js} +1 -1
  109. package/server/{feedback-target-D7GxdUYG.js → feedback-target-yPD_wclF.js} +10 -10
  110. package/server/{feedback-writer-CH2846DP.js → feedback-writer-BzN4qvaP.js} +1 -1
  111. package/server/{feedback-writer-C1gCLFmp.js → feedback-writer-Ds1Wjsz4.js} +5 -5
  112. package/server/{flywheel-HJt7QdWP.js → flywheel-BCZS-FlW.js} +1 -1
  113. package/server/{flywheel-v1cCOBx-.js → flywheel-CC4gE_rx.js} +15 -15
  114. package/server/{flywheel-CjW2L7BS.js → flywheel-DWKd7bMc.js} +16 -16
  115. package/server/{flywheel-merge-order-4fNRN2F2.js → flywheel-merge-order-DDT3i57u.js} +1 -1
  116. package/server/{flywheel-merge-order-D_yyAlND.js → flywheel-merge-order-DJwH2KpL.js} +17 -15
  117. package/server/forge-4VVCRcF7.js +2 -0
  118. package/server/{forge-RVTCK_5X.js → forge-CHADjOFs.js} +2 -2
  119. package/server/{from-BnLgKYvw.js → from-C3dzmjSO.js} +1 -1
  120. package/server/{fs-lock-C7J-ugIf.js → fs-lock-DQ_gUxfq.js} +2 -2
  121. package/server/{fts-operations-CU0B5WUx.js → fts-operations-asZo2fh1.js} +2 -2
  122. package/server/{git-info-BSrI9owC.js → git-info-DMOSfJ9I.js} +1 -1
  123. package/server/{git-utils-CsKV0Dis.js → git-utils-BAMwn9Nf.js} +1 -1
  124. package/server/{git-utils-DW8-jIUJ.js → git-utils-BdHk8y7g.js} +4 -4
  125. package/server/{github-app-Oi5hdn1n.js → github-app-BWziYCf3.js} +1 -1
  126. package/server/{github-app-7ywLhuZO.js → github-app-BlMSzSTw.js} +2 -2
  127. package/server/{github-client-Cy0fSj1a.js → github-client-OK24qpol.js} +1 -1
  128. package/server/{github-client-DAbuXLuk.js → github-client-w6j5nVlz.js} +2 -2
  129. package/server/{github-pr-lookup-Dhh3ec1V.js → github-pr-lookup-bGcsEvLE.js} +2 -2
  130. package/server/{harness-binary-tMmgJfC1.js → harness-binary-DChiynaB.js} +2 -2
  131. package/server/{harness-resolve-DusNpVEe.js → harness-resolve-BplBEbwn.js} +4 -4
  132. package/server/{health-events-BYDZ9n2i.js → health-events-BTqsmunw.js} +1 -1
  133. package/server/{health-events-DNw9Mzw9.js → health-events-Bk3LjaJ9.js} +2 -2
  134. package/server/{hooks-BjBjxqNh.js → hooks-DJR1yR9w.js} +2 -2
  135. package/server/{hooks-B4wj32l2.js → hooks-EndRNrx9.js} +1 -1
  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-C3s8lyp0.js} +3 -3
  139. package/server/{idle-stack-reaper-Bw0rU9GC.js → idle-stack-reaper-CBelVOE3.js} +1 -1
  140. package/server/{idle-stack-reaper-BSxb1bln.js → idle-stack-reaper-DtoI4al6.js} +4 -4
  141. package/server/{in-flight-guard-DuxabAHT.js → in-flight-guard-B7khcBdQ.js} +1 -1
  142. package/server/{infra-CHIvOb9q.js → infra-CJRi_5Wu.js} +10 -4
  143. package/server/{injection-BYUt8ml1.js → injection-ADWQ3D0s.js} +8 -8
  144. package/server/{injection-BviePcm3.js → injection-BWsgHvrL.js} +1 -1
  145. package/server/{inspect-agent-sV_19NxZ.js → inspect-agent-CCfNJjKr.js} +12 -12
  146. package/server/inspect-agent-Dhp3hCGp.js +2 -0
  147. package/server/{internal-token-BOtIRJU7.js → internal-token-BCTEqUCX.js} +1 -1
  148. package/server/{internal-token-DoVzb4b7.js → internal-token-BeIWG_kT.js} +2 -2
  149. package/server/{io-DKrWd3gX.js → io-BCtZoXHo.js} +4 -4
  150. package/server/{issue-closed-6RQsAjDX.js → issue-closed-CiYAa6bX.js} +7 -7
  151. package/server/{issue-lifecycle-D9nLErvS.js → issue-lifecycle-BETNVVLq.js} +25 -25
  152. package/server/{issue-lifecycle-DOPVv7xz.js → issue-lifecycle-DaKN57sx.js} +1 -1
  153. package/server/{issue-service-singleton-CvgNAWqK.js → issue-service-singleton-1Q0ER8Yc.js} +1 -1
  154. package/server/{issue-service-singleton-B2xy-IS9.js → issue-service-singleton-C_sZ0HjP.js} +10 -10
  155. package/server/{issue-title-fallback-DTSCQVu0.js → issue-title-fallback-B91iD66g.js} +3 -3
  156. package/server/{issues-e_Ck1Ln2.js → issues-RGHQUKhB.js} +2 -2
  157. package/server/{jsonl-parser-DqxVCZ1k.js → jsonl-parser-Dfs1dlYE.js} +3 -3
  158. package/server/{jsonl-resolver-07OS3qOr.js → jsonl-resolver-bFtftCDd.js} +8 -8
  159. package/server/{kimi-code-vtXl2DR5.js → kimi-code-BxkDgaj4.js} +1 -1
  160. package/server/{kimi-code-BjtAHIz1.js → kimi-code-CNYRA8Dd.js} +11 -11
  161. package/server/{kimi-parser-B1lgy2Vt.js → kimi-parser-OcWwmOqF.js} +2 -2
  162. package/server/{label-cleanup-D2zUMasf.js → label-cleanup-CefxK9tL.js} +3 -3
  163. package/server/{lifecycle-DaCovZwn.js → lifecycle-DDZ7w-BY.js} +6 -6
  164. package/server/{lifecycle-0NOEzomy.js → lifecycle-DVXyUil2.js} +2 -2
  165. package/server/{lifecycle-io-BBMTaP7S.js → lifecycle-io-D1oBiMce.js} +1 -1
  166. package/server/{lifecycle-io-6WL46dsB.js → lifecycle-io-D7N0vQNj.js} +5 -5
  167. package/server/{linear-client-7fQThJTc.js → linear-client-DUN7zCeb.js} +2 -2
  168. package/server/{linear-client-BTGApNLo.js → linear-client-TL32snOy.js} +1 -1
  169. package/server/{linear-mcp-auth-B8pYRsiU.js → linear-mcp-auth-CtRKSHy5.js} +1 -1
  170. package/server/{linear-mcp-auth-Nk5s3L9M.js → linear-mcp-auth-bB0CPyjh.js} +5 -5
  171. package/server/memory-fts-worker.js +1 -1
  172. package/server/{memory-governor-Cqvbusr4.js → memory-governor-Cvv_9K0M.js} +87 -21
  173. package/server/{memory-pressure-patrol-DPb8foam.js → memory-pressure-patrol-C6DJJQRA.js} +38 -14
  174. package/server/{merge-BB_bjJ9a.js → merge-DOCR6pHi.js} +1 -1
  175. package/server/{merge-FZ78_cEz.js → merge-FTk4LsnM.js} +3 -3
  176. package/server/{merge-agent-B3jRrlS1.js → merge-agent-C-dsN9se.js} +31 -31
  177. package/server/{merge-agent-BuoC_PRZ.js → merge-agent-D-4_iQgy.js} +2 -2
  178. package/server/{merge-batch-B8bVjFWS.js → merge-batch-BJjzUUL7.js} +1 -1
  179. package/server/{merge-completeness-DQt7Qa7i.js → merge-completeness-BOtBUwTU.js} +4 -4
  180. package/server/{merge-completeness-DkdabVch.js → merge-completeness-CoLJxfUY.js} +1 -1
  181. package/server/merge-eligibility-C4rTS97F.js +3 -0
  182. package/server/merge-eligibility-D7wRnJbj.js +51 -0
  183. package/server/merge-ops-Cf02szJ5.js +2 -0
  184. package/server/merge-rebase-Bj7eJAG4.js +2 -0
  185. package/server/{merge-rebase-qq40s91P.js → merge-rebase-KBw4rdh3.js} +2 -2
  186. package/server/{merge-set-BTNYvxM3.js → merge-set-CVfEM57p.js} +1 -1
  187. package/server/{merge-set-BmRRflt0.js → merge-set-CyW-xSn4.js} +4 -4
  188. package/server/{merge-sync-0m2Q087q.js → merge-sync-CYGsJy0u.js} +1 -1
  189. package/server/{merge-sync-CJpOa0cZ.js → merge-sync-YLvOPAry.js} +2 -2
  190. package/server/{merge-train-iwKqjtCF.js → merge-train-VxLn8Ms4.js} +4 -4
  191. package/server/{merge-train-deps-CH5Mr3vN.js → merge-train-deps-D0y4hBB9.js} +4 -4
  192. package/server/{merge-verification-JJc5GC2t.js → merge-verification-BfJRNMiD.js} +6 -6
  193. package/server/{merged-docker-cleanup-worker-BOqWA373.js → merged-docker-cleanup-worker-Bh5fKG_b.js} +3 -3
  194. package/server/{merged-docker-cleanup-worker-CrhTdxZV.js → merged-docker-cleanup-worker-Ci9oeFAe.js} +1 -1
  195. package/server/{messaging-nuwStbdQ.js → messaging-Dfbhgjd6.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 +18 -18
  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 +5 -5
  211. package/server/node_modules/@types/node/crypto.d.ts +2 -2
  212. package/server/node_modules/@types/node/http.d.ts +16 -0
  213. package/server/node_modules/@types/node/http2.d.ts +10 -2
  214. package/server/node_modules/@types/node/package.json +2 -2
  215. package/server/node_modules/@types/node/process.d.ts +52 -0
  216. package/server/node_modules/@types/node/quic.d.ts +210 -28
  217. package/server/node_modules/@types/node/sqlite.d.ts +6 -2
  218. package/server/node_modules/@types/node/test.d.ts +36 -0
  219. package/server/node_modules/effect/node_modules/uuid/README.md +19 -19
  220. package/server/node_modules/effect/node_modules/uuid/dist/v1.js +7 -3
  221. package/server/node_modules/effect/node_modules/uuid/dist/v7.js +5 -2
  222. package/server/node_modules/effect/node_modules/uuid/dist-node/v1.js +7 -3
  223. package/server/node_modules/effect/node_modules/uuid/dist-node/v7.js +5 -2
  224. package/server/node_modules/effect/node_modules/uuid/package.json +4 -3
  225. package/server/node_modules/msgpackr/dist/index-no-eval.cjs +11 -5
  226. package/server/node_modules/msgpackr/dist/index-no-eval.cjs.map +1 -1
  227. package/server/node_modules/msgpackr/dist/index-no-eval.min.js +1 -1
  228. package/server/node_modules/msgpackr/dist/index-no-eval.min.js.map +1 -1
  229. package/server/node_modules/msgpackr/dist/index.js +11 -5
  230. package/server/node_modules/msgpackr/dist/index.js.map +1 -1
  231. package/server/node_modules/msgpackr/dist/index.min.js +1 -1
  232. package/server/node_modules/msgpackr/dist/index.min.js.map +1 -1
  233. package/server/node_modules/msgpackr/dist/node.cjs +11 -5
  234. package/server/node_modules/msgpackr/dist/node.cjs.map +1 -1
  235. package/server/node_modules/msgpackr/dist/test.js +11 -5
  236. package/server/node_modules/msgpackr/dist/test.js.map +1 -1
  237. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs +11 -5
  238. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs.map +1 -1
  239. package/server/node_modules/msgpackr/package.json +1 -1
  240. package/server/node_modules/msgpackr/unpack.js +11 -5
  241. package/server/node_modules/picomatch/lib/parse.js +10 -1
  242. package/server/node_modules/picomatch/lib/scan.js +30 -18
  243. package/server/node_modules/picomatch/package.json +1 -1
  244. package/server/{orphan-proposed-reconciler-gf4TxfZb.js → orphan-proposed-reconciler-CnP0K2v3.js} +2 -2
  245. package/server/{orphan-proposed-reconciler-Dmk0kO_p.js → orphan-proposed-reconciler-nFUlquZt.js} +21 -21
  246. package/server/package-lock.json +19 -19
  247. package/server/package.json +1 -1
  248. package/server/{pan-dir-BMda7tQj.js → pan-dir-B4NfzOf3.js} +4 -4
  249. package/server/{parked-residue-BiHb8cD7.js → parked-residue-8WbU0y1z.js} +68 -64
  250. package/server/{paths-DEe9j-kw.js → paths-rETQhTF2.js} +2 -2
  251. package/server/{pending-lifecycle-claim-J5uIIJPu.js → pending-lifecycle-claim-yAwDuGS4.js} +1 -1
  252. package/server/{pickup-D1UbSDPd.js → pickup-Dle6k9Xt.js} +1 -1
  253. package/server/{pipeline-agent-reader-D-6okryb.js → pipeline-agent-reader-CeWhQzXC.js} +3 -3
  254. package/server/{pipeline-membership-PGX3Pe8V.js → pipeline-membership-BV4hdkHm.js} +1 -1
  255. package/server/{pipeline-membership-CCbgBzNC.js → pipeline-membership-C9ykcjsn.js} +1 -1
  256. package/server/{pipeline-membership-gather-BK4dzh0X.js → pipeline-membership-gather-Ba0wJNCR.js} +10 -10
  257. package/server/{pipeline-membership-gather-BRhU7XPx.js → pipeline-membership-gather-C9E22B2W.js} +1 -1
  258. package/server/{pipeline-notifier-DvHLaXKb.js → pipeline-notifier-B5DPXvnr.js} +1 -1
  259. package/server/{pipeline-notifier-BNAV9kpa.js → pipeline-notifier-p190L97e.js} +2 -2
  260. package/server/{post-merge-lifecycle-worker-DAWgzXQA.js → post-merge-lifecycle-worker-OQoK8Ckg.js} +2 -2
  261. package/server/{post-merge-state-DC2_0t12.js → post-merge-state-DFaf7OI1.js} +4 -4
  262. package/server/{prd-locations-BbAvqQmT.js → prd-locations-F2oLSAhy.js} +3 -3
  263. package/server/{project-pipelines-By_5WcT4.js → project-pipelines-CUsa6U59.js} +2 -2
  264. package/server/{project-repos-3bI6t4fO.js → project-repos-BVdi9-ch.js} +1 -1
  265. package/server/{project-repos--QeCg7yQ.js → project-repos-CsfvLtmr.js} +2 -2
  266. package/server/{project-resource-refresh-queue-x-K9mvpP.js → project-resource-refresh-queue-BehrH4Ai.js} +17 -17
  267. package/server/{project-resource-refresh-queue-BaZC79S3.js → project-resource-refresh-queue-D2110Guc.js} +1 -1
  268. package/server/{projects-LftaVK99.js → projects-BMuEf14J.js} +1 -1
  269. package/server/{prompts-BotGu-6W.js → prompts-CKpDt8Jn.js} +2 -2
  270. package/server/{providers-Dqgz3MY5.js → providers-Buv2wmFU.js} +1 -1
  271. package/server/{providers-BL1I66sM.js → providers-CxPKmyif.js} +7 -7
  272. package/server/public/assets/{chunk-BO2N2NFS-D5Fz5jND.js → chunk-BO2N2NFS-DZOQVqV1.js} +4 -4
  273. package/server/public/assets/{diagram-OG6HWLK6-Eux0gWFq.js → diagram-OG6HWLK6-oKeXcbO1.js} +1 -1
  274. package/server/public/assets/{dist-D-JX_u7m.js → dist-2qPmeRzT.js} +3 -3
  275. package/server/public/assets/{dist-C3zShwhA.js → dist-ClBlE-Nm.js} +1 -1
  276. package/server/public/assets/{ganttDiagram-6RSMTGT7-UH3aweia.js → ganttDiagram-6RSMTGT7-BwdG9fQv.js} +1 -1
  277. package/server/public/assets/{highlighted-body-OFNGDK62-ccIQ-WXS.js → highlighted-body-OFNGDK62-BzGNdskQ.js} +1 -1
  278. package/server/public/assets/index-CdPveU3M.css +1 -0
  279. package/server/public/assets/{index-BTVcdPve.js → index-Cg6tdZoY.js} +149 -149
  280. package/server/public/assets/{linear-Cnnu4YQy.js → linear-DpEt1TJb.js} +1 -1
  281. package/server/public/assets/mermaid-GHXKKRXX-6KBD_3T_.js +1 -0
  282. package/server/public/assets/{pieDiagram-4H26LBE5-BD8-Tye6.js → pieDiagram-4H26LBE5-9BpM4oRJ.js} +1 -1
  283. package/server/public/assets/{prod-Ca6aKMts.js → prod-CzJiNNEG.js} +4 -4
  284. package/server/public/assets/{quadrantDiagram-W4KKPZXB-BmSrVyFD.js → quadrantDiagram-W4KKPZXB-BXWVAoZx.js} +1 -1
  285. package/server/public/assets/{sankeyDiagram-5OEKKPKP-CEGy8Das.js → sankeyDiagram-5OEKKPKP-5oxodGEw.js} +1 -1
  286. package/server/public/assets/{xychartDiagram-2RQKCTM6-VnQ8iY8s.js → xychartDiagram-2RQKCTM6-BChDrHxZ.js} +1 -1
  287. package/server/public/index.html +2 -2
  288. package/server/pull-requests-CmlandI7.js +2 -0
  289. package/server/{pull-requests-Cp_FDT8-.js → pull-requests-T0OV0Vn4.js} +3 -3
  290. package/server/{rally-bQpBzUNf.js → rally-CUqj2oIN.js} +3 -3
  291. package/server/rally-DYIn9R2U.js +3 -0
  292. package/server/{rally-api-CqAIJ8RX.js → rally-api-BFPb2oSq.js} +2 -2
  293. package/server/{rally-api-Ij1Zt0NI.js → rally-api-BoucQG1u.js} +1 -1
  294. package/server/{rally-client-qKbCNRVW.js → rally-client-16iObny7.js} +4 -4
  295. package/server/{rally-client-CN5vh4Ac.js → rally-client-CsqLjLLa.js} +1 -1
  296. package/server/{rebuild-stack-DrMyA_mA.js → rebuild-stack-BcBVFJp3.js} +2 -2
  297. package/server/{rebuild-stack-BNOMVh7C.js → rebuild-stack-CyXMrj6K.js} +6 -6
  298. package/server/reconciler-caYiRnPy.js +657 -0
  299. package/server/{reconstruct-cache-mxIYCnqs.js → reconstruct-cache-3JzPOune.js} +7 -7
  300. package/server/{record-Ug18Cp4V.js → record-DYOg97Iv.js} +1 -1
  301. package/server/{record-update-dBGxL9OC.js → record-update-BPqpBu3O.js} +5 -5
  302. package/server/{record-update-WyhsREoH.js → record-update-CDPEX7BH.js} +1 -1
  303. package/server/{recovery-trip-BKLrL6NX.js → recovery-trip-CpfW6LCJ.js} +3 -3
  304. package/server/{recovery-trip-wFAixKsg.js → recovery-trip-xqKC07Gy.js} +1 -1
  305. package/server/{release-engine-D9gaCBn9.js → release-engine-C_OOhCaK.js} +5 -5
  306. package/server/{release-set-DPHHzEGx.js → release-set-DOIDz2vw.js} +3 -3
  307. package/server/{remote-BUEeUic6.js → remote-BTh-sjpX.js} +3 -3
  308. package/server/{remote-agents-CSaTLi3u.js → remote-agents-DbbN7vSm.js} +6 -6
  309. package/server/{remote-agents-BVtASiOF.js → remote-agents-MuXx2gWm.js} +1 -1
  310. package/server/{remote-completion-CBV3b9TI.js → remote-completion-LcWCpAm2.js} +12 -12
  311. package/server/{remote-BU6ONLpv.js → remote-xY0B43Ho.js} +3 -3
  312. package/server/{resolver-gxv97jsQ.js → resolver-C2QKOf09.js} +2 -2
  313. package/server/{resolver-DvSMXty7.js → resolver-D4nsxfGo.js} +7 -7
  314. package/server/{resume-DvHuF-bm.js → resume-ByUrJUNX.js} +1 -1
  315. package/server/{review-agent-esZ0QXdY.js → review-agent-BRBTm1qE.js} +30 -30
  316. package/server/{review-agent-DgkUPRx0.js → review-agent-Caodi0PX.js} +2 -2
  317. package/server/{review-artifacts-DGGEobLp.js → review-artifacts-DgaDlbO4.js} +6 -6
  318. package/server/{review-convoy-liveness-DmO8dIBH.js → review-convoy-liveness-BBvyuRLC.js} +8 -8
  319. package/server/{review-run-recovery-DHiiw7d8.js → review-run-recovery-DCzWMMvE.js} +1 -1
  320. package/server/{review-run-recovery-Ct0q7FkE.js → review-run-recovery-THHMKlXJ.js} +2 -2
  321. package/server/{review-status-C_kQeeX0.js → review-status-Bge_3XTR.js} +1 -1
  322. package/server/{review-status-yOGD2MuK.js → review-status-DpniqzPT.js} +55 -45
  323. package/server/{review-status-emit-BZz1Y_22.js → review-status-emit-D7sM720S.js} +3 -3
  324. package/server/{review-status-enrichment-BWH0XW_m.js → review-status-enrichment-PDI4-faj.js} +3 -3
  325. package/server/{review-status-sync-2C9lk85r.js → review-status-sync-C6ZKTI8f.js} +11 -8
  326. package/server/{review-status-sync-Bq00Loey.js → review-status-sync-CvpHWyvR.js} +1 -1
  327. package/server/{review-verdict-feedback-CE_tr2iQ.js → review-verdict-feedback-B2ojHFH5.js} +7 -7
  328. package/server/{review-verdict-feedback-Brjaxoda.js → review-verdict-feedback-tyMoLT2L.js} +1 -1
  329. package/server/{review-verdict-writer-Ca2V7QSY.js → review-verdict-writer-Cy_1pnIj.js} +7 -7
  330. package/server/{review-verdict-writer-CD-4kDVx.js → review-verdict-writer-DjrJ64eS.js} +1 -1
  331. package/server/{rollup--g9ik1XQ.js → rollup-Cp0KEoOu.js} +1 -1
  332. package/server/{rollup-B6g9Nr6L.js → rollup-DU3xBQu2.js} +8 -8
  333. package/server/{scanner-YxIv-fG1.js → scanner-BFKG3Gxv.js} +7 -7
  334. package/server/{search-DqMN4__-.js → search-DhtKwbBC.js} +2 -2
  335. package/server/{sequence-io--b3_PsWq.js → sequence-io-C-Q19Jez.js} +4 -4
  336. package/server/{sequencer-agent-CqouKVZG.js → sequencer-agent-eN2P2lDz.js} +6 -6
  337. package/server/server.js +585 -282
  338. package/server/{service-CEp-3iow.js → service-CThO0Sar.js} +77 -772
  339. package/server/{session-fork-GtoeCh2H.js → session-fork-ZYTHtpBh.js} +2 -2
  340. package/server/settings-ByDRfuuE.js +2 -0
  341. package/server/{settings-CLQcdkoD.js → settings-CTywpFw5.js} +2 -2
  342. package/server/{settings-Ch2pCVtt.js → settings-nAT-eK56.js} +3 -3
  343. package/server/{shadow-engineering-BxiFrIKv.js → shadow-engineering-BHZKPJhq.js} +2 -2
  344. package/server/{shadow-state-CSA1vtxr.js → shadow-state-BTLi4Axs.js} +2 -2
  345. package/server/{shadow-state-nGhCNXT2.js → shadow-state-CZ_LnPsi.js} +1 -1
  346. package/server/{shadow-utils-7q5QDmMj.js → shadow-utils-CPLlPHdn.js} +2 -2
  347. package/server/{ship-log-ie0A_SqV.js → ship-log-D-CphNZx.js} +1 -1
  348. package/server/{ship-record-BM3oVvnL.js → ship-record-BaBla0l_.js} +5 -5
  349. package/server/{ship-record-DHWH1hLz.js → ship-record-BlvX8-xv.js} +1 -1
  350. package/server/{ship-status-BEkddXMT.js → ship-status-rQbPQBsF.js} +2 -2
  351. package/server/{smart-compaction-BkzjVpWL.js → smart-compaction-CUXn8mfX.js} +1 -1
  352. package/server/{smart-compaction-D0TE1lBD.js → smart-compaction-D1CNGdZx.js} +7 -7
  353. package/server/{spawn-planning-session-CkGweSCC.js → spawn-planning-session-DCmO6COk.js} +17 -17
  354. package/server/{spawn-planning-session-s406rw1N.js → spawn-planning-session-DfEWyrVV.js} +2 -2
  355. package/server/{specialist-completion-CTAjwH5j.js → specialist-completion-BMv3K54P.js} +1 -1
  356. package/server/{specialist-context-CKasRfYu.js → specialist-context-C1-CfYQb.js} +5 -5
  357. package/server/{specialist-handoff-logger-DrjrOmmn.js → specialist-handoff-logger-BDKoz5Z9.js} +2 -2
  358. package/server/{specialist-logs-Du6quZ0_.js → specialist-logs-BJQFkpdG.js} +3 -3
  359. package/server/{specialists-x-kPMhrL.js → specialists-CYt1U3Zm.js} +2 -2
  360. package/server/{specialists-CuDWiNdB.js → specialists-D6MUU31Q.js} +19 -19
  361. package/server/{specialists-b0dMMjWq.js → specialists-DhS79T9v.js} +333 -118
  362. package/server/{specialists-B-4zyE4Y.js → specialists-Dx0zRTxX.js} +1 -1
  363. package/server/{specialists-registry-1y6Rt_F1.js → specialists-registry-BRLCi61y.js} +1 -1
  364. package/server/{specialists-registry-BYjs04iK.js → specialists-registry-Bng0OFGH.js} +2 -2
  365. package/server/specs-oRGyfz6C.js +3 -0
  366. package/server/{src-CZsPs61V.js → src-C7gGe4KU.js} +6 -6
  367. package/server/{src-CY2Wl8IX.js → src-CdwN6WY6.js} +8 -2
  368. package/server/{src-DeQwpuh6.js → src-DMosbuSJ.js} +3 -3
  369. package/server/{stack-health-BQFSJc0l.js → stack-health-BKfNaqMm.js} +3 -3
  370. package/server/{stack-health-ypIKtkbE.js → stack-health-Bz711z1Y.js} +1 -1
  371. package/server/{stale-task-claims-C2e1zdMT.js → stale-task-claims-DMRLb5R2.js} +5 -5
  372. package/server/{staleness-Fzx_3_Hr.js → staleness-CxZaIhrn.js} +1 -1
  373. package/server/{staleness-CRDK6LFG.js → staleness-r_dkMyMG.js} +1 -1
  374. package/server/{stall-sweeper-QNk4h9m6.js → stall-sweeper-CBWqSWV2.js} +8 -8
  375. package/server/{state-home-DdG8erBI.js → state-home-DhsMqg8W.js} +2 -2
  376. package/server/{state-migrate-C6H3jfHE.js → state-migrate-C2Ouyd6e.js} +6 -6
  377. package/server/{state-mirror-DF4Lfxm0.js → state-mirror-BPXciz84.js} +3 -3
  378. package/server/{stuck-remediation-BVNd9txd.js → stuck-remediation-DALieAkx.js} +1 -1
  379. package/server/{stuck-remediation-BDa_tXgB.js → stuck-remediation-kta3KN7c.js} +13 -13
  380. package/server/{substrate-bug-weights-service-BbbCZEtJ.js → substrate-bug-weights-service-D_ICP7TI.js} +3 -3
  381. package/server/{summary-fork-DIQmtOuV.js → summary-fork-CojrFKb6.js} +2 -2
  382. package/server/{summary-fork-BvcW6bq0.js → summary-fork-DhhaFhxZ.js} +10 -10
  383. package/server/supervisor-DSSWo4M2.js +2 -0
  384. package/server/{supervisor-D3jC2c7A.js → supervisor-DqH-laVL.js} +4 -4
  385. package/server/{swarm-readiness-CMWAQuWM.js → swarm-readiness-LF8ZF_hc.js} +3 -3
  386. package/server/{synthesis-verdict-DVlrLF9A.js → synthesis-verdict-CGFF8uQI.js} +2 -2
  387. package/server/{synthesis-verdict-C-pJOPsn.js → synthesis-verdict-DSoOFUIV.js} +1 -1
  388. package/server/{system-prerequisites-QKtIYXI2.js → system-prerequisites-Lsx0jUUV.js} +2 -2
  389. package/server/{teardown-workspace-cJea1OLo.js → teardown-workspace-DMwomEG1.js} +16 -16
  390. package/server/{test-agent-queue-C5DI_gWX.js → test-agent-queue-Cu0D6BYe.js} +6 -6
  391. package/server/{test-verdict-C7kmd2_Y.js → test-verdict-9mvl7pQn.js} +1 -1
  392. package/server/{test-verdict-DUbDHqeD.js → test-verdict-oNSv1rVr.js} +2 -2
  393. package/server/{tldr-daemon-BNQHwblU.js → tldr-daemon-CRSAkhBx.js} +1 -1
  394. package/server/{tldr-daemon-CO08YlfQ.js → tldr-daemon-McqCk2X7.js} +2 -2
  395. package/server/{tmux-B8zsqD_6.js → tmux-CYucGrTl.js} +2 -2
  396. package/server/{tmux-DWEc4Ld9.js → tmux-wnT_hg-s.js} +2 -2
  397. package/server/{token-Bez-qCB2.js → token-BdfZLRg1.js} +1 -1
  398. package/server/{tracker-config-CJzPhSHv.js → tracker-config-tfAOWgng.js} +2 -2
  399. package/server/{tracker-utils-DJAOAuMN.js → tracker-utils-Dbg_pVZg.js} +2 -2
  400. package/server/{traefik-connect-D3H5I6b9.js → traefik-connect-DoQvQ6oJ.js} +1 -1
  401. package/server/{tunnel-BSdKnW0U.js → tunnel-B1MNIgkL.js} +1 -1
  402. package/server/{tunnel-Cr3ctqxp.js → tunnel-skW68j9B.js} +3 -3
  403. package/server/{types-fzBp9cYi.js → types-PW4zkxCM.js} +1 -1
  404. package/server/{uat-failure-feedback-IZQ-J8jt.js → uat-failure-feedback-ly8ZwtfC.js} +5 -5
  405. package/server/{uat-promote-verification-DXApKcc2.js → uat-promote-verification-BBaMwfdc.js} +5 -5
  406. package/server/{uat-train-IIZlz7r3.js → uat-train-BBEiYSep.js} +0 -0
  407. package/server/{uat-train-CycEzpbE.js → uat-train-D7Ran2FB.js} +1 -1
  408. package/server/{validate-Ur4xH5bN.js → validate-BYcBcBwg.js} +3 -3
  409. package/server/{validation-Dr6V4PXx.js → validation-BfG2jW5C.js} +4 -4
  410. package/server/{validation-CHovCoTT.js → validation-nSrYiYvA.js} +1 -1
  411. package/server/{verification-artifact-D3viYe_t.js → verification-artifact-Cmhgq4b_.js} +1 -1
  412. package/server/{verification-artifact-k5Ftpg0c.js → verification-artifact-DglwaHke.js} +1 -1
  413. package/server/{verification-runner-Dl13mmsI.js → verification-runner-BEq5ZF-h.js} +16 -16
  414. package/server/{verification-runner-BuqGwm2t.js → verification-runner-CFjAuv9u.js} +1 -1
  415. package/server/{vtt-parser-BSnAB-Og.js → vtt-parser-Va--tv27.js} +1 -1
  416. package/server/{work-agent-prompt-CJJ4tXci.js → work-agent-prompt-BnhKNAg7.js} +1 -1
  417. package/server/{work-agent-prompt-CioeOuM4.js → work-agent-prompt-CaD2ue8m.js} +10 -10
  418. package/server/{work-agent-start-B65Gqn9N.js → work-agent-start-0nJ-6UeA.js} +2 -2
  419. package/server/{work-agent-start-Ct1HVh6z.js → work-agent-start-D8NEN5KD.js} +1 -1
  420. package/server/workflows-BtHRlFIm.js +2 -0
  421. package/server/{workflows-AgFul1xc.js → workflows-C7mxM1qc.js} +28 -28
  422. package/server/{workspace-Cy4sDd3q.js → workspace-BAhMgMaO.js} +3 -3
  423. package/server/{workspace-Cu3XlMXt.js → workspace-Dbqv9ehn.js} +1 -1
  424. package/server/{workspace-anchor-drift-CMaqvizr.js → workspace-anchor-drift-B_3kyyxJ.js} +4 -4
  425. package/server/{workspace-anchor-drift-BI0Hz6zI.js → workspace-anchor-drift-Bpa3xoni.js} +1 -1
  426. package/server/{workspace-config-DRYDO7Zr.js → workspace-config-D-bNq2CF.js} +1 -1
  427. package/server/{workspace-manager-jfkKAEuO.js → workspace-manager-BrbX90Rm.js} +1 -1
  428. package/server/{workspace-manager-CgovxDrO.js → workspace-manager-CM8RCrSc.js} +16 -16
  429. package/server/{workspace-metadata-BDqXzGGK.js → workspace-metadata-BEOwJSdK.js} +1 -1
  430. package/server/{workspace-metadata-BNzODIv6.js → workspace-metadata-Cu6yfxBS.js} +2 -2
  431. package/server/{workspaces-BJdPqx_J.js → workspaces-C7LAuZfe.js} +123 -696
  432. package/sync-sources/rules/agent-message-delivery.md +21 -14
  433. package/sync-sources/rules/pan-handoff-focus-limit.md +3 -1
  434. package/sync-sources/skills/pan-gauntlet-loop/SKILL.md +94 -46
  435. package/sync-sources/skills/pan-handoff/SKILL.md +13 -2
  436. package/server/archive-planning-BW4MKNI7.js +0 -2
  437. package/server/build-info-Bj2vQEMh.js +0 -2
  438. package/server/cli-BRuzUT_I.js +0 -2
  439. package/server/dead-end-trip-6V_CwveT.js +0 -2
  440. package/server/deploy-queue-CjLErpgw.js +0 -2
  441. package/server/dist-fCA6y2bH.js +0 -3
  442. package/server/forge-bvak6vXJ.js +0 -2
  443. package/server/hume-TYTb6fDU.js +0 -3
  444. package/server/inspect-agent-JFEaYTRa.js +0 -2
  445. package/server/merge-ops-DabXHp2i.js +0 -2
  446. package/server/merge-rebase-CXq0qsgR.js +0 -2
  447. package/server/public/assets/index-2wV4ipy_.css +0 -1
  448. package/server/public/assets/mermaid-GHXKKRXX-Bjto8iJh.js +0 -1
  449. package/server/pull-requests-jVGcVq5G.js +0 -2
  450. package/server/rally-CxhVgIQ6.js +0 -3
  451. package/server/settings-DhtPDmmI.js +0 -2
  452. package/server/specs-IYsFlM-L.js +0 -3
  453. package/server/supervisor-v0cYN2Vp.js +0 -2
  454. package/server/workflows-CfHm8lVd.js +0 -2
  455. package/sync-sources/skills/pan-gauntlet-loop/references/lessons.md +0 -60
@@ -0,0 +1,657 @@
1
+ import { Qr as FsError, li as init_errors } from "./config-yaml-D60AnTIu.js";
2
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CJRi_5Wu.js";
3
+ import { o as getPricingSync, s as init_cost, t as calculateCostSync } from "./cost-DTuIRE4y.js";
4
+ import { i as CostWriter, o as lookupSkipVerdict, s as recordSkipVerdict, t as CostDoorLive } from "./cost-3FyqKK56.js";
5
+ import { A as init_conversations, st as findConversationForCostSessionSync } from "./conversations-nS6QgYpD.js";
6
+ import { Effect } from "effect";
7
+ import { closeSync, existsSync, fstatSync, openSync, readFileSync, readSync, readdirSync, statSync } from "fs";
8
+ import { basename, join } from "path";
9
+ import { homedir } from "os";
10
+ //#region ../../lib/costs/attribution.ts
11
+ init_errors();
12
+ init_cost();
13
+ init_conversations();
14
+ init_infra();
15
+ const NO_ISSUE_BUCKETS = {
16
+ conversations: "CONVERSATIONS",
17
+ flywheel: "FLYWHEEL",
18
+ unattributed: "UNATTRIBUTED"
19
+ };
20
+ function classifySessionBucket(input, lookup) {
21
+ const conversation = lookup(input);
22
+ if (!conversation) return NO_ISSUE_BUCKETS.unattributed;
23
+ if (conversation.name === "flywheel-orchestrator") return NO_ISSUE_BUCKETS.flywheel;
24
+ return NO_ISSUE_BUCKETS.conversations;
25
+ }
26
+ function reclassifyUnknownCostEventsSync() {
27
+ const db = getOverdeckDatabaseSync();
28
+ const rows = db.prepare(`SELECT DISTINCT session_id AS sessionId, agent_id AS agentId
29
+ FROM cost_events
30
+ WHERE issue_id = 'UNKNOWN'`).all();
31
+ let updated = 0;
32
+ const update = db.prepare(`UPDATE cost_events
33
+ SET issue_id = ?
34
+ WHERE issue_id = 'UNKNOWN'
35
+ AND session_id IS ?
36
+ AND agent_id IS ?`);
37
+ for (const row of rows) {
38
+ const bucket = classifySessionBucket(row, findConversationForCostSessionSync);
39
+ const result = update.run(bucket, row.sessionId, row.agentId);
40
+ updated += result.changes;
41
+ }
42
+ return { updated };
43
+ }
44
+ //#endregion
45
+ //#region ../../lib/costs/reconciler.ts
46
+ /**
47
+ * Cost Reconciler — Periodic catch-up sweep for cost tracking
48
+ *
49
+ * The live recording hook (heartbeat-hook → record-cost-event.js) captures costs
50
+ * in real time, but can miss events due to hook failures, process crashes, or
51
+ * system reboots. The reconciler ensures completeness by periodically sweeping
52
+ * ALL Claude transcript files and importing any events not yet in SQLite.
53
+ *
54
+ * v2 Architecture: Scans ~/.claude/projects/ directly instead of going through
55
+ * agent state.json files. This catches everything:
56
+ * - Work agent sessions (from worktree workspaces)
57
+ * - Planning agent sessions (from main project dirs)
58
+ * - Specialist sessions (review, test, merge)
59
+ * - Interactive/manual Claude sessions
60
+ *
61
+ * Key properties:
62
+ * - Idempotent: dedup on request_id — safe to run any number of times
63
+ * - Incremental: tracks byte offset per session — only reads new bytes
64
+ * - Non-destructive: never deletes from SQLite, append-only
65
+ * - Catches everything: scans all transcript files regardless of source
66
+ */
67
+ init_conversations();
68
+ /**
69
+ * Map a pi-reported provider string to the AIProvider union used by the pricing
70
+ * layer. zai/kimi/minimax/mimo and anything unknown collapse to 'custom' (which
71
+ * is how these providers are keyed in DEFAULT_PRICING).
72
+ */
73
+ function piProviderToAiProvider(provider) {
74
+ if (provider === "anthropic") return "anthropic";
75
+ if (provider === "openai") return "openai";
76
+ if (provider === "google") return "google";
77
+ return "custom";
78
+ }
79
+ function getAgentsDir() {
80
+ return join(process.env.HOME || homedir(), ".overdeck", "agents");
81
+ }
82
+ function getClaudeProjectsDir() {
83
+ return join(process.env.HOME || homedir(), ".claude", "projects");
84
+ }
85
+ /**
86
+ * Extract session UUID from a transcript filename.
87
+ * e.g., "678c8d8d-cefe-45ca-bebc-bafe602aff93.jsonl" → "678c8d8d-cefe-45ca-bebc-bafe602aff93"
88
+ */
89
+ function extractSessionId(filename) {
90
+ return basename(filename, ".jsonl");
91
+ }
92
+ function resolveUnmappedSessionIssueId(input, lookup = findConversationForCostSessionSync) {
93
+ return classifySessionBucket(input, lookup);
94
+ }
95
+ /**
96
+ * Decode a Claude projects directory name back to the original cwd path.
97
+ * e.g., "-home-eltmon-Projects-krux-workspaces-feature-krux-4" → "/home/eltmon/Projects/krux/workspaces/feature-krux-4"
98
+ */
99
+ function decodeClaudeDirName(dirName) {
100
+ return "/" + dirName.replace(/^-/, "").replace(/-/g, "/");
101
+ }
102
+ /**
103
+ * Build a reverse index: session UUID → agent context.
104
+ * Sources:
105
+ * 1. sessions.json files in agent directories (authoritative — written by heartbeat hook)
106
+ * 2. Agent state.json for issue/workspace context
107
+ */
108
+ function buildSessionIndex() {
109
+ const index = /* @__PURE__ */ new Map();
110
+ const agentsDir = getAgentsDir();
111
+ if (!existsSync(agentsDir)) return index;
112
+ let entries;
113
+ try {
114
+ entries = readdirSync(agentsDir);
115
+ } catch {
116
+ return index;
117
+ }
118
+ for (const agentDir of entries) {
119
+ const agentPath = join(agentsDir, agentDir);
120
+ const sessionsFile = join(agentPath, "sessions.json");
121
+ let sessionIds = [];
122
+ if (existsSync(sessionsFile)) try {
123
+ sessionIds = JSON.parse(readFileSync(sessionsFile, "utf-8"));
124
+ } catch {}
125
+ const stateFile = join(agentPath, "state.json");
126
+ let issueId = inferIssueId(agentDir);
127
+ let stateRole;
128
+ if (existsSync(stateFile)) try {
129
+ const state = JSON.parse(readFileSync(stateFile, "utf-8"));
130
+ if (state.issueId) issueId = state.issueId;
131
+ if (state.role) stateRole = state.role;
132
+ } catch {}
133
+ let sessionType = stateRole || "work";
134
+ const reviewSubRole = agentDir.match(/-review-(security|correctness|performance|requirements)$/i)?.[1]?.toLowerCase();
135
+ if (reviewSubRole) sessionType = `review.${reviewSubRole}`;
136
+ else if (agentDir.startsWith("planning-")) sessionType = "planning";
137
+ else if (agentDir.includes("review")) sessionType = "review";
138
+ else if (agentDir.includes("test")) sessionType = "test";
139
+ else if (agentDir.includes("merge")) sessionType = "merge";
140
+ for (const sid of sessionIds) index.set(sid, {
141
+ agentId: agentDir,
142
+ issueId: issueId ?? resolveUnmappedSessionIssueId({
143
+ sessionId: sid,
144
+ agentId: agentDir
145
+ }),
146
+ sessionType
147
+ });
148
+ }
149
+ return index;
150
+ }
151
+ /**
152
+ * Infer issue ID from a decoded path.
153
+ * Looks for patterns like "feature-min-787", "feature/pan-208", etc.
154
+ */
155
+ function inferIssueFromPath(decodedPath) {
156
+ const match = decodedPath.match(/(?:feature[-/])?(pan|min|aud|krux|cli)[-/](\d+)/i);
157
+ if (match) return `${match[1].toUpperCase()}-${match[2]}`;
158
+ return null;
159
+ }
160
+ /**
161
+ * Infer issue ID from agent directory name.
162
+ * e.g., 'agent-pan-105' → 'PAN-105', 'planning-min-663' → 'MIN-663'
163
+ */
164
+ function inferIssueId(agentDir) {
165
+ const match = agentDir.replace(/^(agent|planning|specialist)-/, "").match(/^(?:.*-)?(pan|min|aud|krux|cli)-(\d+)$/i);
166
+ if (match) return `${match[1].toUpperCase()}-${match[2]}`;
167
+ return null;
168
+ }
169
+ function getSessionOffset(_sessionId) {
170
+ return 0;
171
+ }
172
+ function saveSessionOffset(sessionId, byteOffset, newEvents, agentId, issueId, transcriptPath) {}
173
+ /**
174
+ * Read new bytes from a transcript file starting at the given offset.
175
+ */
176
+ function readNewBytes(filePath, fromOffset) {
177
+ let fd;
178
+ try {
179
+ fd = openSync(filePath, "r");
180
+ } catch {
181
+ return null;
182
+ }
183
+ try {
184
+ const stat = fstatSync(fd);
185
+ if (stat.size <= fromOffset) return {
186
+ content: "",
187
+ newSize: stat.size
188
+ };
189
+ const bytesToRead = stat.size - fromOffset;
190
+ const buffer = Buffer.alloc(bytesToRead);
191
+ readSync(fd, buffer, 0, bytesToRead, fromOffset);
192
+ return {
193
+ content: buffer.toString("utf-8"),
194
+ newSize: stat.size
195
+ };
196
+ } finally {
197
+ closeSync(fd);
198
+ }
199
+ }
200
+ /**
201
+ * Parse transcript content and extract cost events.
202
+ * Only processes assistant messages with usage data and a requestId.
203
+ */
204
+ function extractCostEvents(content, agentId, issueId, sessionType, sessionId) {
205
+ const events = [];
206
+ const lines = content.split("\n");
207
+ for (const line of lines) {
208
+ if (!line.trim()) continue;
209
+ try {
210
+ const entry = JSON.parse(line);
211
+ if (entry.type !== "assistant" || !entry.message?.usage) continue;
212
+ const requestId = entry.requestId ?? void 0;
213
+ const usage = entry.message.usage;
214
+ const model = entry.message.model || "claude-sonnet-4";
215
+ const inputTokens = usage.input_tokens || 0;
216
+ const outputTokens = usage.output_tokens || 0;
217
+ const cacheReadTokens = usage.cache_read_input_tokens || 0;
218
+ const cacheWriteTokens = usage.cache_creation_input_tokens || 0;
219
+ if (inputTokens === 0 && outputTokens === 0 && cacheReadTokens === 0 && cacheWriteTokens === 0) continue;
220
+ let provider = "anthropic";
221
+ if (model.includes("gpt")) provider = "openai";
222
+ else if (model.includes("gemini")) provider = "google";
223
+ else if (model.includes("kimi")) provider = "custom";
224
+ else if (model.toLowerCase().startsWith("minimax")) provider = "custom";
225
+ const pricingModel = model.replace(/^(?:oai|cx|go)@/, "");
226
+ const pricing = getPricingSync(provider, pricingModel);
227
+ if (!pricing) continue;
228
+ const cost = calculateCostSync({
229
+ inputTokens,
230
+ outputTokens,
231
+ cacheReadTokens,
232
+ cacheWriteTokens,
233
+ cacheTTL: "5m"
234
+ }, pricing);
235
+ const timestamp = entry.timestamp || entry.ts || entry.created_at || (/* @__PURE__ */ new Date()).toISOString();
236
+ events.push({
237
+ ts: timestamp,
238
+ type: "cost",
239
+ agentId,
240
+ issueId,
241
+ sessionType,
242
+ provider,
243
+ model,
244
+ input: inputTokens,
245
+ output: outputTokens,
246
+ cacheRead: cacheReadTokens,
247
+ cacheWrite: cacheWriteTokens,
248
+ cost,
249
+ requestId,
250
+ sessionId
251
+ });
252
+ } catch {}
253
+ }
254
+ return events;
255
+ }
256
+ /**
257
+ * Parse Pi/oh-my-pi transcript content and extract cost events (PAN-1935).
258
+ *
259
+ * Pi's `message.usage` uses short camelCase keys (`input`, `output`,
260
+ * `cacheRead`, `cacheWrite`) and the real model/provider live on `message`
261
+ * (not inferred from a Claude-style `model` field). Cost is always computed
262
+ * from tokens × pricing because pi reports `cost.total = 0` for non-Anthropic
263
+ * providers. Exported for unit testing.
264
+ */
265
+ function extractPiCostEvents(content, agentId, issueId, sessionType, sessionId) {
266
+ const events = [];
267
+ for (const line of content.split("\n")) {
268
+ if (!line.trim()) continue;
269
+ let entry;
270
+ try {
271
+ entry = JSON.parse(line);
272
+ } catch {
273
+ continue;
274
+ }
275
+ if (entry.type !== "message") continue;
276
+ const usage = entry.message?.usage;
277
+ if (!usage) continue;
278
+ const inputTokens = usage.input ?? 0;
279
+ const outputTokens = usage.output ?? 0;
280
+ const cacheReadTokens = usage.cacheRead ?? 0;
281
+ const cacheWriteTokens = usage.cacheWrite ?? 0;
282
+ if (inputTokens === 0 && outputTokens === 0 && cacheReadTokens === 0 && cacheWriteTokens === 0) continue;
283
+ const model = entry.message?.model || "unknown";
284
+ const provider = piProviderToAiProvider(entry.message?.provider);
285
+ const pricing = getPricingSync(provider, model.replace(/^(?:oai|cx|go)@/, ""));
286
+ if (!pricing) continue;
287
+ const cost = calculateCostSync({
288
+ inputTokens,
289
+ outputTokens,
290
+ cacheReadTokens,
291
+ cacheWriteTokens,
292
+ cacheTTL: "5m"
293
+ }, pricing);
294
+ const requestId = entry.message?.responseId ?? (entry.id ? `${sessionId}#${entry.id}` : void 0);
295
+ const timestamp = entry.timestamp || (/* @__PURE__ */ new Date()).toISOString();
296
+ events.push({
297
+ ts: timestamp,
298
+ type: "cost",
299
+ agentId,
300
+ issueId,
301
+ sessionType,
302
+ provider,
303
+ model,
304
+ input: inputTokens,
305
+ output: outputTokens,
306
+ cacheRead: cacheReadTokens,
307
+ cacheWrite: cacheWriteTokens,
308
+ cost,
309
+ requestId,
310
+ sessionId
311
+ });
312
+ }
313
+ return events;
314
+ }
315
+ function findPiTranscriptFiles(agentDir) {
316
+ let files;
317
+ try {
318
+ files = readdirSync(agentDir).filter((f) => f.endsWith(".jsonl"));
319
+ } catch {
320
+ return [];
321
+ }
322
+ const transcripts = [];
323
+ for (const f of files) {
324
+ if (f === "activity.jsonl" || f === "cost-events.jsonl" || f === "pending-events.jsonl") continue;
325
+ const full = join(agentDir, f);
326
+ try {
327
+ const stat = statSync(full);
328
+ const fd = openSync(full, "r");
329
+ const buf = Buffer.alloc(128);
330
+ const bytesRead = readSync(fd, buf, 0, 128, 0);
331
+ closeSync(fd);
332
+ const head = buf.toString("utf-8", 0, bytesRead);
333
+ if (/"type"\s*:\s*"session"/.test(head)) transcripts.push({
334
+ path: full,
335
+ mtimeMs: stat.mtimeMs,
336
+ size: stat.size
337
+ });
338
+ } catch {}
339
+ }
340
+ return transcripts;
341
+ }
342
+ /**
343
+ * Sweep pi session transcripts under the per-agent dirs (~/.overdeck/agents)
344
+ * and import their cost events through the same Overdeck cost writer the Claude
345
+ * path uses (PAN-1935).
346
+ * Independent of the pi extension hook, so it captures cost even when the
347
+ * extension emits null usage or the wrong model label.
348
+ */
349
+ async function collectPiCostEvents(opts = {}) {
350
+ const result = {
351
+ events: [],
352
+ verdicts: [],
353
+ stats: {
354
+ scanned: 0,
355
+ cacheSkipped: 0,
356
+ sessionsWithData: 0
357
+ },
358
+ errors: []
359
+ };
360
+ const agentsDir = getAgentsDir();
361
+ if (!existsSync(agentsDir)) return result;
362
+ let agentDirs;
363
+ try {
364
+ agentDirs = readdirSync(agentsDir);
365
+ } catch {
366
+ return result;
367
+ }
368
+ const candidates = [];
369
+ for (const agentDirName of agentDirs) {
370
+ const agentPath = join(agentsDir, agentDirName);
371
+ let issueId = inferIssueId(agentDirName);
372
+ let sessionType = "work";
373
+ const stateFile = join(agentPath, "state.json");
374
+ if (existsSync(stateFile)) try {
375
+ const st = JSON.parse(readFileSync(stateFile, "utf-8"));
376
+ if (st.issueId) issueId = st.issueId;
377
+ if (st.role) sessionType = st.role;
378
+ } catch {}
379
+ if (agentDirName.startsWith("planning-")) sessionType = "planning";
380
+ candidates.push(...findPiTranscriptFiles(agentPath).map((transcript) => ({
381
+ ...transcript,
382
+ agentDirName,
383
+ issueId,
384
+ sessionType
385
+ })));
386
+ }
387
+ candidates.sort((a, b) => a.path.localeCompare(b.path));
388
+ const maxEvents = opts.maxEvents ?? Number.POSITIVE_INFINITY;
389
+ const flush = async () => {
390
+ if (!opts.onBatch || result.events.length === 0 && result.verdicts.length === 0) return;
391
+ const batch = {
392
+ events: result.events,
393
+ verdicts: result.verdicts
394
+ };
395
+ result.events = [];
396
+ result.verdicts = [];
397
+ await opts.onBatch(batch);
398
+ };
399
+ for (const transcript of candidates) {
400
+ const transcriptPath = transcript.path;
401
+ const sessionId = basename(transcriptPath, ".jsonl");
402
+ const resolvedIssueId = transcript.issueId ?? resolveUnmappedSessionIssueId({
403
+ sessionId,
404
+ agentId: transcript.agentDirName
405
+ });
406
+ result.stats.scanned++;
407
+ if (lookupSkipVerdict(transcriptPath, transcript.mtimeMs, transcript.size)) {
408
+ result.stats.cacheSkipped++;
409
+ continue;
410
+ }
411
+ try {
412
+ const events = extractPiCostEvents(readFileSync(transcriptPath, "utf-8"), transcript.agentDirName, resolvedIssueId, transcript.sessionType, sessionId);
413
+ if (events.length === 0) {
414
+ result.verdicts.push({
415
+ path: transcriptPath,
416
+ mtimeMs: transcript.mtimeMs,
417
+ size: transcript.size,
418
+ verdict: "no-usage"
419
+ });
420
+ await flush();
421
+ continue;
422
+ }
423
+ result.stats.sessionsWithData++;
424
+ for (const event of events) {
425
+ result.events.push({
426
+ event,
427
+ sourceFile: `reconciler:${transcriptPath}`
428
+ });
429
+ if (result.events.length >= maxEvents) await flush();
430
+ }
431
+ result.verdicts.push({
432
+ path: transcriptPath,
433
+ mtimeMs: transcript.mtimeMs,
434
+ size: transcript.size,
435
+ verdict: "imported"
436
+ });
437
+ await flush();
438
+ } catch (err) {
439
+ result.errors.push({
440
+ path: transcriptPath,
441
+ error: err instanceof Error ? err.message : String(err)
442
+ });
443
+ }
444
+ }
445
+ await flush();
446
+ return result;
447
+ }
448
+ async function reconcilePiTranscripts() {
449
+ const collected = await collectPiCostEvents();
450
+ const result = {
451
+ sessionsScanned: collected.stats.scanned,
452
+ cacheSkipped: collected.stats.cacheSkipped,
453
+ sessionsWithNewData: collected.stats.sessionsWithData,
454
+ eventsImported: 0,
455
+ duplicatesSkipped: 0,
456
+ errors: collected.errors,
457
+ earliestEventTs: null,
458
+ latestEventTs: null
459
+ };
460
+ for (const { event, sourceFile } of collected.events) {
461
+ const recorded = await recordCostEventsThroughOverdeck([event], sourceFile);
462
+ result.eventsImported += recorded.inserted;
463
+ result.duplicatesSkipped += recorded.duplicates;
464
+ mergeCoverage(result, recorded);
465
+ }
466
+ for (const verdict of collected.verdicts) recordSkipVerdict(verdict.path, verdict.mtimeMs, verdict.size, verdict.verdict);
467
+ return result;
468
+ }
469
+ function toOverdeckCostEvent(event, sourceFile) {
470
+ return {
471
+ ts: new Date(event.ts),
472
+ issueId: event.issueId ? event.issueId : null,
473
+ agentId: event.agentId ?? null,
474
+ sessionId: event.sessionId ?? null,
475
+ sessionType: event.sessionType ?? null,
476
+ provider: event.provider ?? null,
477
+ model: event.model ?? null,
478
+ input: event.input ?? 0,
479
+ output: event.output ?? 0,
480
+ cacheRead: event.cacheRead ?? 0,
481
+ cacheWrite: event.cacheWrite ?? 0,
482
+ cost: event.cost ?? 0,
483
+ requestId: event.requestId ?? null,
484
+ sourceFile
485
+ };
486
+ }
487
+ async function recordCostEventsThroughOverdeck(events, sourceFile, opts = {}) {
488
+ let inserted = 0;
489
+ let duplicates = 0;
490
+ let earliestEventTs = null;
491
+ let latestEventTs = null;
492
+ for (const event of events) if (await Effect.runPromise(CostWriter.use((writer) => writer.record(toOverdeckCostEvent(event, sourceFile), { dryRun: opts.dryRun })).pipe(Effect.provide(CostDoorLive)))) {
493
+ inserted++;
494
+ const iso = new Date(event.ts).toISOString();
495
+ if (earliestEventTs == null || iso < earliestEventTs) earliestEventTs = iso;
496
+ if (latestEventTs == null || iso > latestEventTs) latestEventTs = iso;
497
+ } else duplicates++;
498
+ return {
499
+ inserted,
500
+ duplicates,
501
+ earliestEventTs,
502
+ latestEventTs
503
+ };
504
+ }
505
+ function mergeCoverage(result, coverage) {
506
+ if (coverage.earliestEventTs != null && (result.earliestEventTs == null || coverage.earliestEventTs < result.earliestEventTs)) result.earliestEventTs = coverage.earliestEventTs;
507
+ if (coverage.latestEventTs != null && (result.latestEventTs == null || coverage.latestEventTs > result.latestEventTs)) result.latestEventTs = coverage.latestEventTs;
508
+ }
509
+ async function reconcilePromise(opts = {}) {
510
+ const result = {
511
+ sessionsScanned: 0,
512
+ cacheSkipped: 0,
513
+ sessionsWithNewData: 0,
514
+ eventsImported: 0,
515
+ duplicatesSkipped: 0,
516
+ errors: [],
517
+ earliestEventTs: null,
518
+ latestEventTs: null
519
+ };
520
+ const claudeProjectsDir = getClaudeProjectsDir();
521
+ if (!existsSync(claudeProjectsDir)) return result;
522
+ const sessionIndex = buildSessionIndex();
523
+ let projectDirs;
524
+ try {
525
+ projectDirs = readdirSync(claudeProjectsDir);
526
+ } catch {
527
+ return result;
528
+ }
529
+ for (const dirName of projectDirs) {
530
+ const projectDir = join(claudeProjectsDir, dirName);
531
+ try {
532
+ fstatSync(openSync(projectDir, "r"));
533
+ } catch {}
534
+ const pathIssueId = inferIssueFromPath(decodeClaudeDirName(dirName));
535
+ let files;
536
+ try {
537
+ files = readdirSync(projectDir).filter((f) => f.endsWith(".jsonl"));
538
+ } catch {
539
+ continue;
540
+ }
541
+ for (const file of files) {
542
+ const sessionId = extractSessionId(file);
543
+ const transcriptPath = join(projectDir, file);
544
+ result.sessionsScanned++;
545
+ try {
546
+ const transcriptStat = statSync(transcriptPath);
547
+ if (lookupSkipVerdict(transcriptPath, transcriptStat.mtimeMs, transcriptStat.size)) {
548
+ result.cacheSkipped++;
549
+ continue;
550
+ }
551
+ const mapping = sessionIndex.get(sessionId);
552
+ const agentId = mapping?.agentId || "unattributed";
553
+ const issueId = mapping?.issueId || pathIssueId || resolveUnmappedSessionIssueId({
554
+ sessionId,
555
+ agentId
556
+ });
557
+ const sessionType = mapping?.sessionType || "implementation";
558
+ const lastOffset = getSessionOffset(sessionId);
559
+ const readResult = readNewBytes(transcriptPath, lastOffset);
560
+ if (!readResult || !readResult.content) {
561
+ if (!opts.dryRun && readResult && readResult.newSize > lastOffset) saveSessionOffset(sessionId, readResult.newSize, 0, agentId, issueId, transcriptPath);
562
+ if (!opts.dryRun) recordSkipVerdict(transcriptPath, transcriptStat.mtimeMs, transcriptStat.size, "no-usage");
563
+ continue;
564
+ }
565
+ const events = extractCostEvents(readResult.content, agentId, issueId, sessionType, sessionId);
566
+ if (events.length === 0) {
567
+ if (!opts.dryRun) saveSessionOffset(sessionId, readResult.newSize, 0, agentId, issueId, transcriptPath);
568
+ continue;
569
+ }
570
+ result.sessionsWithNewData++;
571
+ const { inserted, duplicates, earliestEventTs, latestEventTs } = await recordCostEventsThroughOverdeck(events, `reconciler:${transcriptPath}`, { dryRun: opts.dryRun });
572
+ result.eventsImported += inserted;
573
+ result.duplicatesSkipped += duplicates;
574
+ mergeCoverage(result, {
575
+ earliestEventTs,
576
+ latestEventTs
577
+ });
578
+ if (!opts.dryRun) {
579
+ saveSessionOffset(sessionId, readResult.newSize, inserted, agentId, issueId, transcriptPath);
580
+ recordSkipVerdict(transcriptPath, transcriptStat.mtimeMs, transcriptStat.size, "imported");
581
+ }
582
+ } catch (err) {
583
+ result.errors.push({
584
+ path: transcriptPath,
585
+ error: err instanceof Error ? err.message : String(err)
586
+ });
587
+ }
588
+ }
589
+ const subagentsDir = join(projectDir, "subagents");
590
+ if (existsSync(subagentsDir)) try {
591
+ const subFiles = readdirSync(subagentsDir).filter((f) => f.endsWith(".jsonl"));
592
+ for (const file of subFiles) {
593
+ const sessionId = `sub-${extractSessionId(file)}`;
594
+ const transcriptPath = join(subagentsDir, file);
595
+ result.sessionsScanned++;
596
+ try {
597
+ const mapping = sessionIndex.get(sessionId);
598
+ const agentId = mapping?.agentId || "unattributed-subagent";
599
+ const issueId = mapping?.issueId || pathIssueId || resolveUnmappedSessionIssueId({
600
+ sessionId,
601
+ agentId
602
+ });
603
+ const sessionType = mapping?.sessionType || "implementation";
604
+ const readResult = readNewBytes(transcriptPath, getSessionOffset(sessionId));
605
+ if (!readResult || !readResult.content) continue;
606
+ const events = extractCostEvents(readResult.content, agentId, issueId, sessionType, sessionId);
607
+ if (events.length === 0) {
608
+ if (!opts.dryRun) saveSessionOffset(sessionId, readResult.newSize, 0, agentId, issueId, transcriptPath);
609
+ continue;
610
+ }
611
+ result.sessionsWithNewData++;
612
+ const { inserted, duplicates, earliestEventTs, latestEventTs } = await recordCostEventsThroughOverdeck(events, `reconciler:${transcriptPath}`, { dryRun: opts.dryRun });
613
+ result.eventsImported += inserted;
614
+ result.duplicatesSkipped += duplicates;
615
+ mergeCoverage(result, {
616
+ earliestEventTs,
617
+ latestEventTs
618
+ });
619
+ if (!opts.dryRun) saveSessionOffset(sessionId, readResult.newSize, inserted, agentId, issueId, transcriptPath);
620
+ } catch (err) {
621
+ result.errors.push({
622
+ path: transcriptPath,
623
+ error: err instanceof Error ? err.message : String(err)
624
+ });
625
+ }
626
+ }
627
+ } catch {}
628
+ }
629
+ if (opts.includePi ?? true) {
630
+ const piResult = await reconcilePiTranscripts();
631
+ result.sessionsScanned += piResult.sessionsScanned;
632
+ result.cacheSkipped += piResult.cacheSkipped;
633
+ result.sessionsWithNewData += piResult.sessionsWithNewData;
634
+ result.eventsImported += piResult.eventsImported;
635
+ result.duplicatesSkipped += piResult.duplicatesSkipped;
636
+ result.errors.push(...piResult.errors);
637
+ mergeCoverage(result, piResult);
638
+ }
639
+ return result;
640
+ }
641
+ /**
642
+ * Effect variant of reconcile. Per-file errors are still surfaced via
643
+ * `result.errors`; only catastrophic failures (e.g. SQLite open failure)
644
+ * surface on the Effect error channel.
645
+ */
646
+ const reconcile = (opts = {}) => Effect.tryPromise({
647
+ try: () => reconcilePromise(opts),
648
+ catch: (cause) => new FsError({
649
+ path: "<reconciler>",
650
+ operation: "reconcile",
651
+ cause
652
+ })
653
+ });
654
+ //#endregion
655
+ export { reclassifyUnknownCostEventsSync as i, reconcile as n, recordCostEventsThroughOverdeck as r, collectPiCostEvents as t };
656
+
657
+ //# sourceMappingURL=reconciler-caYiRnPy.js.map
@@ -1,8 +1,8 @@
1
- import { $ as readIssueRecord, Y as init_record, fn as init_projects, rt as resolveProjectForIssue, vn as listProjectsSync } from "./config-yaml-D9nfpEx1.js";
2
- import { c as init_agents, i as backfillAgentsSync, u as listAllAgentsSync } from "./agents-jXgqpHca.js";
3
- import { q as init_agents$1, vn as listRunningAgents } from "./agent-state-BJhGIJZe.js";
4
- import { a as gatherProjectLensSignals, o as gatherProjectLensSignalsForProjects, s as init_pipeline_membership_gather } from "./pipeline-membership-gather-BK4dzh0X.js";
5
- import { n as init_pipeline_membership, r as resolvePipelineMembership } from "./pipeline-membership-PGX3Pe8V.js";
1
+ import { $ as readIssueRecord, Y as init_record, fn as init_projects, rt as resolveProjectForIssue, vn as listProjectsSync } from "./config-yaml-D60AnTIu.js";
2
+ import { c as init_agents, i as backfillAgentsSync, u as listAllAgentsSync } from "./agents-DzpQidT8.js";
3
+ import { q as init_agents$1, vn as listRunningAgents } from "./agent-state-FABw8neJ.js";
4
+ import { a as gatherProjectLensSignals, o as gatherProjectLensSignalsForProjects, s as init_pipeline_membership_gather } from "./pipeline-membership-gather-Ba0wJNCR.js";
5
+ import { n as init_pipeline_membership, r as resolvePipelineMembership } from "./pipeline-membership-BV4hdkHm.js";
6
6
  import { Effect } from "effect";
7
7
  //#region ../../lib/reconstruct/enumerate-in-flight.ts
8
8
  init_projects();
@@ -139,7 +139,7 @@ async function loadInFlightIssueIds(projects) {
139
139
  return enumerateInFlightIssuesFromSources(projects);
140
140
  }
141
141
  async function fetchPrState(issueId) {
142
- const { fetchIssuePullRequest } = await import("./pull-requests-jVGcVq5G.js");
142
+ const { fetchIssuePullRequest } = await import("./pull-requests-CmlandI7.js");
143
143
  const result = await fetchIssuePullRequest(issueId);
144
144
  if (!result.pr) return {
145
145
  hasPr: false,
@@ -263,4 +263,4 @@ function reconstructCacheAuto(opts) {
263
263
  //#endregion
264
264
  export { reconstructCache, reconstructCacheAuto };
265
265
 
266
- //# sourceMappingURL=reconstruct-cache-mxIYCnqs.js.map
266
+ //# sourceMappingURL=reconstruct-cache-3JzPOune.js.map
@@ -1,3 +1,3 @@
1
- import { $ as readIssueRecord, B as clearIssueOwner, F as appendSessionEntry, G as getIssueRecordPath, H as ensureIssueRecord, I as appendSessionEntrySync, J as getProjectConfigFromWorkspacePath, K as getIssueRecordPathForWorkspace, L as batchReadIssueRecords, M as RECORD_SCHEMA_VERSION, N as appendFeedbackEntry, P as appendFeedbackEntrySync, Q as queueIssueRecordCommit, R as buildOwnUri, U as ensureIssueRecordSync, V as clearRecordFeedbackSync, W as getIssueRecordBasePath, X as markRecordPipelineClosedOutSync, Y as init_record, Z as markRecordPipelineResidueClosedOutSync, _t as writeRecordTieredExecutionOverride, at as writeAgentHarnessModelSync, bt as writeStatusOverrideSync, ct as writeIssueRecordForWorkspaceSync, dt as writeRecordDecisionsSync, et as readIssueRecordForWorkspaceSync, ft as writeRecordHazards, gt as writeRecordScopeDriftSync, ht as writeRecordResumePointSync, it as writeAgentHarnessModel, j as RECORD_DIRNAME, lt as writeIssueRecordSync, mt as writeRecordResumePoint, nt as readRecordContinueViewSync, ot as writeCloseOutDodGate, pt as writeRecordHazardsSync, q as getIssueWorkspacePath, rt as resolveProjectForIssue, st as writeCloseOutDodGateSync, tt as readIssueRecordSync, ut as writeRecordDecisions, vt as writeRecordTieredExecutionOverrideSync, xt as writeStatusOverridesSync, yt as writeStatusOverride, z as claimIssueOwner } from "./config-yaml-D9nfpEx1.js";
1
+ import { $ as readIssueRecord, B as clearIssueOwner, F as appendSessionEntry, G as getIssueRecordPath, H as ensureIssueRecord, I as appendSessionEntrySync, J as getProjectConfigFromWorkspacePath, K as getIssueRecordPathForWorkspace, L as batchReadIssueRecords, M as RECORD_SCHEMA_VERSION, N as appendFeedbackEntry, P as appendFeedbackEntrySync, Q as queueIssueRecordCommit, R as buildOwnUri, U as ensureIssueRecordSync, V as clearRecordFeedbackSync, W as getIssueRecordBasePath, X as markRecordPipelineClosedOutSync, Y as init_record, Z as markRecordPipelineResidueClosedOutSync, _t as writeRecordTieredExecutionOverride, at as writeAgentHarnessModelSync, bt as writeStatusOverrideSync, ct as writeIssueRecordForWorkspaceSync, dt as writeRecordDecisionsSync, et as readIssueRecordForWorkspaceSync, ft as writeRecordHazards, gt as writeRecordScopeDriftSync, ht as writeRecordResumePointSync, it as writeAgentHarnessModel, j as RECORD_DIRNAME, lt as writeIssueRecordSync, mt as writeRecordResumePoint, nt as readRecordContinueViewSync, ot as writeCloseOutDodGate, pt as writeRecordHazardsSync, q as getIssueWorkspacePath, rt as resolveProjectForIssue, st as writeCloseOutDodGateSync, tt as readIssueRecordSync, ut as writeRecordDecisions, vt as writeRecordTieredExecutionOverrideSync, xt as writeStatusOverridesSync, yt as writeStatusOverride, z as claimIssueOwner } from "./config-yaml-D60AnTIu.js";
2
2
  init_record();
3
3
  export { RECORD_DIRNAME, RECORD_SCHEMA_VERSION, appendFeedbackEntry, appendFeedbackEntrySync, appendSessionEntry, appendSessionEntrySync, batchReadIssueRecords, buildOwnUri, claimIssueOwner, clearIssueOwner, clearRecordFeedbackSync, ensureIssueRecord, ensureIssueRecordSync, getIssueRecordBasePath, getIssueRecordPath, getIssueRecordPathForWorkspace, getIssueWorkspacePath, getProjectConfigFromWorkspacePath, markRecordPipelineClosedOutSync, markRecordPipelineResidueClosedOutSync, queueIssueRecordCommit, readIssueRecord, readIssueRecordForWorkspaceSync, readIssueRecordSync, readRecordContinueViewSync, resolveProjectForIssue, writeAgentHarnessModel, writeAgentHarnessModelSync, writeCloseOutDodGate, writeCloseOutDodGateSync, writeIssueRecordForWorkspaceSync, writeIssueRecordSync, writeRecordDecisions, writeRecordDecisionsSync, writeRecordHazards, writeRecordHazardsSync, writeRecordResumePoint, writeRecordResumePointSync, writeRecordScopeDriftSync, writeRecordTieredExecutionOverride, writeRecordTieredExecutionOverrideSync, writeStatusOverride, writeStatusOverrideSync, writeStatusOverridesSync };