agor-live 0.16.2 → 0.16.4

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 (346) hide show
  1. package/bin/agor-daemon.js +1 -1
  2. package/dist/cli/base-command.d.ts +1 -1
  3. package/dist/cli/base-command.js +8 -7
  4. package/dist/cli/commands/auth/login.js +2 -2
  5. package/dist/cli/commands/board/add-session.d.ts +1 -1
  6. package/dist/cli/commands/board/add-session.js +15 -17
  7. package/dist/cli/commands/board/clone.d.ts +1 -1
  8. package/dist/cli/commands/board/clone.js +8 -7
  9. package/dist/cli/commands/board/export.d.ts +1 -1
  10. package/dist/cli/commands/board/export.js +8 -7
  11. package/dist/cli/commands/board/import.d.ts +1 -1
  12. package/dist/cli/commands/board/import.js +8 -7
  13. package/dist/cli/commands/board/list.d.ts +1 -1
  14. package/dist/cli/commands/board/list.js +15 -13
  15. package/dist/cli/commands/daemon/logs.js +71 -6
  16. package/dist/cli/commands/daemon/restart.js +43 -6
  17. package/dist/cli/commands/daemon/start.d.ts +6 -0
  18. package/dist/cli/commands/daemon/start.js +208 -133
  19. package/dist/cli/commands/daemon/status.js +5 -2
  20. package/dist/cli/commands/daemon/stop.js +3 -0
  21. package/dist/cli/commands/init.js +1 -1
  22. package/dist/cli/commands/login.js +2 -2
  23. package/dist/cli/commands/mcp/add.d.ts +1 -1
  24. package/dist/cli/commands/mcp/add.js +8 -7
  25. package/dist/cli/commands/mcp/list.d.ts +1 -1
  26. package/dist/cli/commands/mcp/list.js +9 -9
  27. package/dist/cli/commands/mcp/remove.d.ts +1 -1
  28. package/dist/cli/commands/mcp/remove.js +9 -9
  29. package/dist/cli/commands/mcp/show.d.ts +1 -1
  30. package/dist/cli/commands/mcp/show.js +9 -9
  31. package/dist/cli/commands/open.js +2 -2
  32. package/dist/cli/commands/repo/add-local.d.ts +1 -1
  33. package/dist/cli/commands/repo/add-local.js +8 -7
  34. package/dist/cli/commands/repo/add.d.ts +1 -1
  35. package/dist/cli/commands/repo/add.js +9 -8
  36. package/dist/cli/commands/repo/list.d.ts +1 -1
  37. package/dist/cli/commands/repo/list.js +9 -9
  38. package/dist/cli/commands/repo/rm.d.ts +1 -1
  39. package/dist/cli/commands/repo/rm.js +9 -9
  40. package/dist/cli/commands/session/list.d.ts +1 -1
  41. package/dist/cli/commands/session/list.js +9 -10
  42. package/dist/cli/commands/session/load-claude.d.ts +1 -1
  43. package/dist/cli/commands/session/load-claude.js +10 -10
  44. package/dist/cli/commands/user/create.d.ts +1 -1
  45. package/dist/cli/commands/user/create.js +8 -7
  46. package/dist/cli/commands/user/delete.d.ts +1 -1
  47. package/dist/cli/commands/user/delete.js +9 -9
  48. package/dist/cli/commands/user/update.d.ts +1 -1
  49. package/dist/cli/commands/user/update.js +9 -9
  50. package/dist/cli/commands/worktree/add.d.ts +1 -1
  51. package/dist/cli/commands/worktree/add.js +9 -9
  52. package/dist/cli/commands/worktree/archive.d.ts +1 -1
  53. package/dist/cli/commands/worktree/archive.js +10 -10
  54. package/dist/cli/commands/worktree/cd.d.ts +1 -1
  55. package/dist/cli/commands/worktree/cd.js +8 -7
  56. package/dist/cli/commands/worktree/env/restart.d.ts +1 -1
  57. package/dist/cli/commands/worktree/env/restart.js +9 -8
  58. package/dist/cli/commands/worktree/env/start.d.ts +1 -1
  59. package/dist/cli/commands/worktree/env/start.js +9 -8
  60. package/dist/cli/commands/worktree/env/status.d.ts +1 -1
  61. package/dist/cli/commands/worktree/env/status.js +9 -8
  62. package/dist/cli/commands/worktree/env/stop.d.ts +1 -1
  63. package/dist/cli/commands/worktree/env/stop.js +9 -8
  64. package/dist/cli/commands/worktree/list.d.ts +1 -1
  65. package/dist/cli/commands/worktree/list.js +12 -15
  66. package/dist/cli/commands/worktree/rm.d.ts +1 -1
  67. package/dist/cli/commands/worktree/rm.js +10 -10
  68. package/dist/cli/commands/worktree/show.d.ts +1 -1
  69. package/dist/cli/commands/worktree/show.js +10 -10
  70. package/dist/cli/commands/worktree/unarchive.d.ts +1 -1
  71. package/dist/cli/commands/worktree/unarchive.js +10 -10
  72. package/dist/cli/commands/worktree/update.d.ts +1 -1
  73. package/dist/cli/commands/worktree/update.js +9 -8
  74. package/dist/cli/lib/context.d.ts +7 -1
  75. package/dist/cli/lib/context.js +13 -0
  76. package/dist/cli/lib/daemon-manager.d.ts +15 -2
  77. package/dist/cli/lib/daemon-manager.js +106 -7
  78. package/dist/cli/lib/daemon-manager.test.d.ts +2 -0
  79. package/dist/cli/lib/daemon-manager.test.js +17355 -0
  80. package/dist/cli/lib/help.js +2 -2
  81. package/dist/core/{agentic-tool-1L19ixPC.d.ts → agentic-tool-B6RT-ZX5.d.ts} +1 -1
  82. package/dist/core/{agentic-tool-3oiAj9Lg.d.cts → agentic-tool-Cs4nK-CC.d.cts} +1 -1
  83. package/dist/core/api/index.cjs +90 -4
  84. package/dist/core/api/index.d.cts +61 -18
  85. package/dist/core/api/index.d.ts +61 -18
  86. package/dist/core/api/index.js +88 -3
  87. package/dist/core/{artifact-B5MFR79G.d.ts → artifact-CIQzxjNP.d.ts} +2 -2
  88. package/dist/core/{artifact-Bi-1jifF.d.cts → artifact-DaHQPZVX.d.cts} +2 -2
  89. package/dist/core/{board-B9Xnux_i.d.ts → board-DG--dAS_.d.ts} +2 -2
  90. package/dist/core/{board-CPZGf5wF.d.cts → board-DogjFoWy.d.cts} +2 -2
  91. package/dist/core/{board-comment-BoDqwrnL.d.ts → board-comment-9ORrSlA1.d.ts} +1 -1
  92. package/dist/core/{board-comment-BQKnob6r.d.cts → board-comment-WzJC3SuF.d.cts} +1 -1
  93. package/dist/core/claude/index.cjs +9 -8
  94. package/dist/core/claude/index.d.cts +3 -3
  95. package/dist/core/claude/index.d.ts +3 -3
  96. package/dist/core/claude/index.js +9 -8
  97. package/dist/core/{client-HEOUNaCs.d.ts → client-NFCS0H8T.d.ts} +5 -5
  98. package/dist/core/{client-BC_18M7T.d.cts → client-XpghdMQL.d.cts} +5 -5
  99. package/dist/core/config/browser.d.cts +7 -7
  100. package/dist/core/config/browser.d.ts +7 -7
  101. package/dist/core/config/index.cjs +1 -0
  102. package/dist/core/config/index.d.cts +13 -13
  103. package/dist/core/config/index.d.ts +13 -13
  104. package/dist/core/config/index.js +1 -0
  105. package/dist/core/{config-manager-DK1LMXEc.d.cts → config-manager-BbMvB3Lz.d.cts} +1 -1
  106. package/dist/core/{config-manager-YrO9mG5j.d.ts → config-manager-etFWO6Wo.d.ts} +1 -1
  107. package/dist/core/{config-services-DrHSgUEm.d.ts → config-services-C848cfbD.d.ts} +4 -4
  108. package/dist/core/{config-services-CuhBWSs_.d.cts → config-services-CDhfaNpd.d.cts} +4 -4
  109. package/dist/core/db/index.cjs +13 -10
  110. package/dist/core/db/index.d.cts +16 -16
  111. package/dist/core/db/index.d.ts +16 -16
  112. package/dist/core/db/index.js +13 -10
  113. package/dist/core/db/session-guard.d.cts +8 -8
  114. package/dist/core/db/session-guard.d.ts +8 -8
  115. package/dist/core/environment/variable-resolver.d.cts +2 -2
  116. package/dist/core/environment/variable-resolver.d.ts +2 -2
  117. package/dist/core/{feathers-CzuSOZgY.d.ts → feathers--R3ml98e.d.cts} +12 -4
  118. package/dist/core/{feathers-CYAHFZ05.d.cts → feathers-C8PkF35p.d.ts} +12 -4
  119. package/dist/core/gateway/index.d.cts +5 -5
  120. package/dist/core/gateway/index.d.ts +5 -5
  121. package/dist/core/{gateway-Ci8LcUxK.d.ts → gateway-BYCTTJVJ.d.ts} +4 -4
  122. package/dist/core/{gateway-gHbaS6qt.d.cts → gateway-D5me_jjo.d.cts} +4 -4
  123. package/dist/core/git/index.d.cts +8 -8
  124. package/dist/core/git/index.d.ts +8 -8
  125. package/dist/core/{id-Cv3ntaTJ.d.cts → id-2oR2NdLp.d.cts} +17 -1
  126. package/dist/core/{id-Cv3ntaTJ.d.ts → id-2oR2NdLp.d.ts} +17 -1
  127. package/dist/core/index.cjs +95 -4
  128. package/dist/core/index.d.cts +19 -19
  129. package/dist/core/index.d.ts +19 -19
  130. package/dist/core/index.js +93 -4
  131. package/dist/core/mcp/index.d.cts +2 -2
  132. package/dist/core/mcp/index.d.ts +2 -2
  133. package/dist/core/{mcp-VhU-PMHo.d.ts → mcp-D7eTnVUO.d.ts} +1 -1
  134. package/dist/core/{mcp-CtC1DFEm.d.cts → mcp-DUrvGUDS.d.cts} +1 -1
  135. package/dist/core/{message-CbD99EwO.d.cts → message-BbDSJvyl.d.cts} +1 -1
  136. package/dist/core/{message-Cwhx2ItQ.d.ts → message-C4Bb-L6c.d.ts} +1 -1
  137. package/dist/core/permissions/index.d.cts +2 -2
  138. package/dist/core/permissions/index.d.ts +2 -2
  139. package/dist/core/{repo-j12tCmyK.d.ts → repo-DaP4omZL.d.ts} +1 -1
  140. package/dist/core/{repo-CcvhnJDf.d.cts → repo-zg1xnWQQ.d.cts} +1 -1
  141. package/dist/core/seed/index.cjs +13 -10
  142. package/dist/core/seed/index.d.cts +1 -1
  143. package/dist/core/seed/index.d.ts +1 -1
  144. package/dist/core/seed/index.js +13 -10
  145. package/dist/core/{session-DEU5FS0N.d.cts → session-C7mvs-rD.d.cts} +2 -2
  146. package/dist/core/{session-Bw8_FN2l.d.ts → session-elEYFVev.d.ts} +2 -2
  147. package/dist/core/{session-guard-CJ7sfOF1.d.ts → session-guard-D7hUa4D2.d.ts} +3 -3
  148. package/dist/core/{session-guard-BjHxMpvV.d.cts → session-guard-DOQgVFL6.d.cts} +3 -3
  149. package/dist/core/{task-CKHC1gPj.d.ts → task-C8SPRSHg.d.ts} +8 -1
  150. package/dist/core/{task-DCPYEXlG.d.cts → task-DJMxZTv4.d.cts} +8 -1
  151. package/dist/core/templates/session-context.d.cts +5 -5
  152. package/dist/core/templates/session-context.d.ts +5 -5
  153. package/dist/core/tools/mcp/jwt-auth.d.cts +2 -2
  154. package/dist/core/tools/mcp/jwt-auth.d.ts +2 -2
  155. package/dist/core/types/index.cjs +7 -0
  156. package/dist/core/types/index.d.cts +16 -16
  157. package/dist/core/types/index.d.ts +16 -16
  158. package/dist/core/types/index.js +6 -0
  159. package/dist/core/{types-BE6DTpRe.d.cts → types-BQRGoDkg.d.cts} +1 -1
  160. package/dist/core/{types-BvYoeNhO.d.ts → types-CvXKxTNP.d.ts} +1 -1
  161. package/dist/core/unix/index.cjs +5 -2
  162. package/dist/core/unix/index.d.cts +8 -8
  163. package/dist/core/unix/index.d.ts +8 -8
  164. package/dist/core/unix/index.js +5 -2
  165. package/dist/core/{user-pO3lB_da.d.ts → user-C9UDwwtA.d.ts} +3 -3
  166. package/dist/core/{user-BpKIlt04.d.cts → user-wScngdUE.d.cts} +3 -3
  167. package/dist/core/utils/board-placement.d.cts +3 -3
  168. package/dist/core/utils/board-placement.d.ts +3 -3
  169. package/dist/core/utils/permission-mode-mapper.d.cts +3 -3
  170. package/dist/core/utils/permission-mode-mapper.d.ts +3 -3
  171. package/dist/core/utils/url.cjs +8 -2
  172. package/dist/core/utils/url.d.cts +1 -1
  173. package/dist/core/utils/url.d.ts +1 -1
  174. package/dist/core/utils/url.js +8 -2
  175. package/dist/daemon/index.d.ts +34 -1
  176. package/dist/daemon/index.js +36 -13
  177. package/dist/daemon/main.d.ts +2 -0
  178. package/dist/daemon/main.js +32581 -0
  179. package/dist/daemon/register-routes.js +15 -0
  180. package/dist/daemon/register-services.js +4 -1
  181. package/dist/daemon/startup.d.ts +2 -0
  182. package/dist/daemon/startup.js +8 -4
  183. package/dist/executor/db/feathers-repositories.d.ts +1 -0
  184. package/dist/executor/db/feathers-repositories.d.ts.map +1 -1
  185. package/dist/executor/db/feathers-repositories.js +1 -0
  186. package/dist/executor/handlers/sdk/base-executor.d.ts.map +1 -1
  187. package/dist/executor/handlers/sdk/base-executor.js +33 -21
  188. package/dist/executor/handlers/sdk/claude.d.ts.map +1 -1
  189. package/dist/executor/handlers/sdk/claude.js +1 -1
  190. package/dist/executor/handlers/sdk/codex.d.ts.map +1 -1
  191. package/dist/executor/handlers/sdk/codex.js +1 -1
  192. package/dist/executor/sdk-handlers/base/diff-enrichment.d.ts +20 -1
  193. package/dist/executor/sdk-handlers/base/diff-enrichment.d.ts.map +1 -1
  194. package/dist/executor/sdk-handlers/base/diff-enrichment.js +264 -26
  195. package/dist/executor/sdk-handlers/claude/claude-tool.d.ts +9 -1
  196. package/dist/executor/sdk-handlers/claude/claude-tool.d.ts.map +1 -1
  197. package/dist/executor/sdk-handlers/claude/claude-tool.js +17 -7
  198. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts +19 -7
  199. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts.map +1 -1
  200. package/dist/executor/sdk-handlers/codex/codex-tool.js +166 -38
  201. package/dist/executor/sdk-handlers/codex/context-window-fallback.d.ts +12 -0
  202. package/dist/executor/sdk-handlers/codex/context-window-fallback.d.ts.map +1 -0
  203. package/dist/executor/sdk-handlers/codex/context-window-fallback.js +72 -0
  204. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts +12 -1
  205. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +1 -1
  206. package/dist/executor/sdk-handlers/codex/prompt-service.js +124 -18
  207. package/dist/executor/sdk-handlers/codex/usage.d.ts +35 -0
  208. package/dist/executor/sdk-handlers/codex/usage.d.ts.map +1 -1
  209. package/dist/executor/sdk-handlers/codex/usage.js +90 -0
  210. package/dist/ui/assets/{_basePickBy-By_woBZB.js → _basePickBy-CQZh_v13.js} +1 -1
  211. package/dist/ui/assets/_basePickBy-CQZh_v13.js.gz +0 -0
  212. package/dist/ui/assets/{_baseUniq-C2jLj-Al.js → _baseUniq-Cgf5LtCM.js} +1 -1
  213. package/dist/ui/assets/_baseUniq-Cgf5LtCM.js.gz +0 -0
  214. package/dist/ui/assets/{arc-DADMFVbt.js → arc-DnTl2a4f.js} +1 -1
  215. package/dist/ui/assets/arc-DnTl2a4f.js.gz +0 -0
  216. package/dist/ui/assets/{architectureDiagram-VXUJARFQ-rNJ5lYJQ.js → architectureDiagram-VXUJARFQ-DZHKQxRL.js} +1 -1
  217. package/dist/ui/assets/{architectureDiagram-VXUJARFQ-rNJ5lYJQ.js.gz → architectureDiagram-VXUJARFQ-DZHKQxRL.js.gz} +0 -0
  218. package/dist/ui/assets/{base-80a1f760-BVsv_T1S.js → base-80a1f760-pDLzaKJY.js} +1 -1
  219. package/dist/ui/assets/{blockDiagram-VD42YOAC-CezN66iB.js → blockDiagram-VD42YOAC-BAOUMLja.js} +1 -1
  220. package/dist/ui/assets/blockDiagram-VD42YOAC-BAOUMLja.js.gz +0 -0
  221. package/dist/ui/assets/{c4Diagram-YG6GDRKO-Dze59YuK.js → c4Diagram-YG6GDRKO-C0xcWHxz.js} +1 -1
  222. package/dist/ui/assets/c4Diagram-YG6GDRKO-C0xcWHxz.js.gz +0 -0
  223. package/dist/ui/assets/channel-DpHH4gqH.js +1 -0
  224. package/dist/ui/assets/{chunk-4BX2VUAB-CXL-V_XA.js → chunk-4BX2VUAB-DCYNUaJZ.js} +1 -1
  225. package/dist/ui/assets/{chunk-55IACEB6-CI3h0xTl.js → chunk-55IACEB6-DU3b1X7p.js} +1 -1
  226. package/dist/ui/assets/{chunk-B4BG7PRW-CFohiEqO.js → chunk-B4BG7PRW-BJlNsfTo.js} +1 -1
  227. package/dist/ui/assets/chunk-B4BG7PRW-BJlNsfTo.js.gz +0 -0
  228. package/dist/ui/assets/{chunk-DI55MBZ5-BbF4fGKj.js → chunk-DI55MBZ5-CKQY-IiF.js} +1 -1
  229. package/dist/ui/assets/chunk-DI55MBZ5-CKQY-IiF.js.gz +0 -0
  230. package/dist/ui/assets/{chunk-FMBD7UC4-C5x6cpDg.js → chunk-FMBD7UC4-DmjQ-Dzu.js} +1 -1
  231. package/dist/ui/assets/{chunk-QN33PNHL-CEDiC29y.js → chunk-QN33PNHL-Bps50N51.js} +1 -1
  232. package/dist/ui/assets/{chunk-QZHKN3VN-DPo28cCF.js → chunk-QZHKN3VN-CNDKr6Xh.js} +1 -1
  233. package/dist/ui/assets/{chunk-TZMSLE5B-C94jSlIG.js → chunk-TZMSLE5B-R2Vz5IHZ.js} +1 -1
  234. package/dist/ui/assets/chunk-TZMSLE5B-R2Vz5IHZ.js.gz +0 -0
  235. package/dist/ui/assets/classDiagram-2ON5EDUG-CbDCU4XU.js +1 -0
  236. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-CbDCU4XU.js +1 -0
  237. package/dist/ui/assets/clone-DSMLFNzW.js +1 -0
  238. package/dist/ui/assets/{consoleHook-59e792cb-cpS6JVM4.js → consoleHook-59e792cb-MfGBgEJx.js} +1 -1
  239. package/dist/ui/assets/consoleHook-59e792cb-MfGBgEJx.js.gz +0 -0
  240. package/dist/ui/assets/{cose-bilkent-S5V4N54A-CcoEg_Ct.js → cose-bilkent-S5V4N54A-Bkbv_h_w.js} +1 -1
  241. package/dist/ui/assets/cose-bilkent-S5V4N54A-Bkbv_h_w.js.gz +0 -0
  242. package/dist/ui/assets/{dagre-6UL2VRFP-DWAyqs2B.js → dagre-6UL2VRFP-DUoxEnB9.js} +1 -1
  243. package/dist/ui/assets/dagre-6UL2VRFP-DUoxEnB9.js.gz +0 -0
  244. package/dist/ui/assets/{diagram-PSM6KHXK-C7J2MNfc.js → diagram-PSM6KHXK-BUdRu7ma.js} +1 -1
  245. package/dist/ui/assets/diagram-PSM6KHXK-BUdRu7ma.js.gz +0 -0
  246. package/dist/ui/assets/{diagram-QEK2KX5R-6KZjqziN.js → diagram-QEK2KX5R-DEoZ3bpF.js} +1 -1
  247. package/dist/ui/assets/diagram-QEK2KX5R-DEoZ3bpF.js.gz +0 -0
  248. package/dist/ui/assets/{diagram-S2PKOQOG-DIL01325.js → diagram-S2PKOQOG-CxM9wSuL.js} +1 -1
  249. package/dist/ui/assets/diagram-S2PKOQOG-CxM9wSuL.js.gz +0 -0
  250. package/dist/ui/assets/{erDiagram-Q2GNP2WA-D5j4CetG.js → erDiagram-Q2GNP2WA-D5VuZpBE.js} +1 -1
  251. package/dist/ui/assets/erDiagram-Q2GNP2WA-D5VuZpBE.js.gz +0 -0
  252. package/dist/ui/assets/{flowDiagram-NV44I4VS-Bxx2iEi-.js → flowDiagram-NV44I4VS-uuzmVpS4.js} +1 -1
  253. package/dist/ui/assets/flowDiagram-NV44I4VS-uuzmVpS4.js.gz +0 -0
  254. package/dist/ui/assets/{ganttDiagram-LVOFAZNH-BtBi1ZfT.js → ganttDiagram-LVOFAZNH-7spsgOUT.js} +1 -1
  255. package/dist/ui/assets/ganttDiagram-LVOFAZNH-7spsgOUT.js.gz +0 -0
  256. package/dist/ui/assets/{gitGraphDiagram-NY62KEGX-CY1TKvzA.js → gitGraphDiagram-NY62KEGX-DJDE3D90.js} +1 -1
  257. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-DJDE3D90.js.gz +0 -0
  258. package/dist/ui/assets/{graph-DC6eH7AX.js → graph-BmWYHUOg.js} +1 -1
  259. package/dist/ui/assets/graph-BmWYHUOg.js.gz +0 -0
  260. package/dist/ui/assets/{index-599aeaf7-Dh_oObwY.js → index-599aeaf7-C76CG5K3.js} +1 -1
  261. package/dist/ui/assets/index-599aeaf7-C76CG5K3.js.gz +0 -0
  262. package/dist/ui/assets/index-B0lOKf7g.js +4 -0
  263. package/dist/ui/assets/index-B0lOKf7g.js.gz +0 -0
  264. package/dist/ui/assets/{index-DJLnZ-9H.js → index-CMrDOI5G.js} +294 -298
  265. package/dist/ui/assets/index-CMrDOI5G.js.gz +0 -0
  266. package/dist/ui/assets/{index-DQn7RJ8z.js → index-CuMJFr7K.js} +1 -1
  267. package/dist/ui/assets/index-CuMJFr7K.js.gz +0 -0
  268. package/dist/ui/assets/{index-CxWOjjRu.js → index-fQo-B6L6.js} +1 -1
  269. package/dist/ui/assets/index-fQo-B6L6.js.gz +0 -0
  270. package/dist/ui/assets/{infoDiagram-ER5ION4S-COpJ37pc.js → infoDiagram-ER5ION4S--dZLWvYP.js} +1 -1
  271. package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-CpODBkng.js → journeyDiagram-XKPGCS4Q-C-Mzd3Ky.js} +1 -1
  272. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-C-Mzd3Ky.js.gz +0 -0
  273. package/dist/ui/assets/{kanban-definition-3W4ZIXB7-DWShJ5Su.js → kanban-definition-3W4ZIXB7-DoDzQCSc.js} +1 -1
  274. package/dist/ui/assets/kanban-definition-3W4ZIXB7-DoDzQCSc.js.gz +0 -0
  275. package/dist/ui/assets/{layout-ttMTfXMb.js → layout-BmSvKYXZ.js} +1 -1
  276. package/dist/ui/assets/layout-BmSvKYXZ.js.gz +0 -0
  277. package/dist/ui/assets/{linear-DD8VTncp.js → linear-BnPF1K20.js} +1 -1
  278. package/dist/ui/assets/linear-BnPF1K20.js.gz +0 -0
  279. package/dist/ui/assets/{mermaid.core-BlvxruUX.js → mermaid.core-Suk7MkfT.js} +5 -5
  280. package/dist/ui/assets/mermaid.core-Suk7MkfT.js.gz +0 -0
  281. package/dist/ui/assets/{mindmap-definition-VGOIOE7T-CR0ESdqM.js → mindmap-definition-VGOIOE7T-Bj9HZQA9.js} +1 -1
  282. package/dist/ui/assets/mindmap-definition-VGOIOE7T-Bj9HZQA9.js.gz +0 -0
  283. package/dist/ui/assets/{pieDiagram-ADFJNKIX-B94eVYhY.js → pieDiagram-ADFJNKIX-BIcJ5ee8.js} +1 -1
  284. package/dist/ui/assets/pieDiagram-ADFJNKIX-BIcJ5ee8.js.gz +0 -0
  285. package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-C4tNKfCm.js → quadrantDiagram-AYHSOK5B-CJm5QQ8N.js} +1 -1
  286. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-CJm5QQ8N.js.gz +0 -0
  287. package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-CuG3A95Q.js → requirementDiagram-UZGBJVZJ-Bg6r943V.js} +1 -1
  288. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-Bg6r943V.js.gz +0 -0
  289. package/dist/ui/assets/{sankeyDiagram-TZEHDZUN-BCfc7mLC.js → sankeyDiagram-TZEHDZUN-C2XnZZZp.js} +1 -1
  290. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-C2XnZZZp.js.gz +0 -0
  291. package/dist/ui/assets/{sequenceDiagram-WL72ISMW-D8tVuIkx.js → sequenceDiagram-WL72ISMW-DOg-bBN1.js} +1 -1
  292. package/dist/ui/assets/sequenceDiagram-WL72ISMW-DOg-bBN1.js.gz +0 -0
  293. package/dist/ui/assets/{stateDiagram-FKZM4ZOC-DvM8so2A.js → stateDiagram-FKZM4ZOC-DgZgPM-o.js} +1 -1
  294. package/dist/ui/assets/stateDiagram-FKZM4ZOC-DgZgPM-o.js.gz +0 -0
  295. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-C_0TAQGU.js +1 -0
  296. package/dist/ui/assets/{timeline-definition-IT6M3QCI-CP2O8vqw.js → timeline-definition-IT6M3QCI-CmkWt6nL.js} +1 -1
  297. package/dist/ui/assets/timeline-definition-IT6M3QCI-CmkWt6nL.js.gz +0 -0
  298. package/dist/ui/assets/{treemap-KMMF4GRG-SGJAEegj.js → treemap-KMMF4GRG-CV8wwXTM.js} +1 -1
  299. package/dist/ui/assets/treemap-KMMF4GRG-CV8wwXTM.js.gz +0 -0
  300. package/dist/ui/assets/{xychartDiagram-PRI3JC2R-CpwYBSmP.js → xychartDiagram-PRI3JC2R-CvuPvlyn.js} +1 -1
  301. package/dist/ui/assets/xychartDiagram-PRI3JC2R-CvuPvlyn.js.gz +0 -0
  302. package/dist/ui/index.html +1 -1
  303. package/package.json +2 -1
  304. package/dist/ui/assets/_basePickBy-By_woBZB.js.gz +0 -0
  305. package/dist/ui/assets/_baseUniq-C2jLj-Al.js.gz +0 -0
  306. package/dist/ui/assets/arc-DADMFVbt.js.gz +0 -0
  307. package/dist/ui/assets/blockDiagram-VD42YOAC-CezN66iB.js.gz +0 -0
  308. package/dist/ui/assets/c4Diagram-YG6GDRKO-Dze59YuK.js.gz +0 -0
  309. package/dist/ui/assets/channel-B2nSdT47.js +0 -1
  310. package/dist/ui/assets/chunk-B4BG7PRW-CFohiEqO.js.gz +0 -0
  311. package/dist/ui/assets/chunk-DI55MBZ5-BbF4fGKj.js.gz +0 -0
  312. package/dist/ui/assets/chunk-TZMSLE5B-C94jSlIG.js.gz +0 -0
  313. package/dist/ui/assets/classDiagram-2ON5EDUG-lwQJA5v0.js +0 -1
  314. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-lwQJA5v0.js +0 -1
  315. package/dist/ui/assets/clone-DmZ98vg9.js +0 -1
  316. package/dist/ui/assets/consoleHook-59e792cb-cpS6JVM4.js.gz +0 -0
  317. package/dist/ui/assets/cose-bilkent-S5V4N54A-CcoEg_Ct.js.gz +0 -0
  318. package/dist/ui/assets/dagre-6UL2VRFP-DWAyqs2B.js.gz +0 -0
  319. package/dist/ui/assets/diagram-PSM6KHXK-C7J2MNfc.js.gz +0 -0
  320. package/dist/ui/assets/diagram-QEK2KX5R-6KZjqziN.js.gz +0 -0
  321. package/dist/ui/assets/diagram-S2PKOQOG-DIL01325.js.gz +0 -0
  322. package/dist/ui/assets/erDiagram-Q2GNP2WA-D5j4CetG.js.gz +0 -0
  323. package/dist/ui/assets/flowDiagram-NV44I4VS-Bxx2iEi-.js.gz +0 -0
  324. package/dist/ui/assets/ganttDiagram-LVOFAZNH-BtBi1ZfT.js.gz +0 -0
  325. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CY1TKvzA.js.gz +0 -0
  326. package/dist/ui/assets/graph-DC6eH7AX.js.gz +0 -0
  327. package/dist/ui/assets/index-599aeaf7-Dh_oObwY.js.gz +0 -0
  328. package/dist/ui/assets/index-CxWOjjRu.js.gz +0 -0
  329. package/dist/ui/assets/index-DJLnZ-9H.js.gz +0 -0
  330. package/dist/ui/assets/index-DQn7RJ8z.js.gz +0 -0
  331. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CpODBkng.js.gz +0 -0
  332. package/dist/ui/assets/kanban-definition-3W4ZIXB7-DWShJ5Su.js.gz +0 -0
  333. package/dist/ui/assets/layout-ttMTfXMb.js.gz +0 -0
  334. package/dist/ui/assets/linear-DD8VTncp.js.gz +0 -0
  335. package/dist/ui/assets/mermaid.core-BlvxruUX.js.gz +0 -0
  336. package/dist/ui/assets/mindmap-definition-VGOIOE7T-CR0ESdqM.js.gz +0 -0
  337. package/dist/ui/assets/pieDiagram-ADFJNKIX-B94eVYhY.js.gz +0 -0
  338. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-C4tNKfCm.js.gz +0 -0
  339. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-CuG3A95Q.js.gz +0 -0
  340. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-BCfc7mLC.js.gz +0 -0
  341. package/dist/ui/assets/sequenceDiagram-WL72ISMW-D8tVuIkx.js.gz +0 -0
  342. package/dist/ui/assets/stateDiagram-FKZM4ZOC-DvM8so2A.js.gz +0 -0
  343. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-kQ-gZX7K.js +0 -1
  344. package/dist/ui/assets/timeline-definition-IT6M3QCI-CP2O8vqw.js.gz +0 -0
  345. package/dist/ui/assets/treemap-KMMF4GRG-SGJAEegj.js.gz +0 -0
  346. package/dist/ui/assets/xychartDiagram-PRI3JC2R-CpwYBSmP.js.gz +0 -0
@@ -17,7 +17,7 @@
17
17
  * Call `enrichContentBlocks()` which finds tool_use blocks and uses their input
18
18
  * to enrich adjacent tool_result blocks in one pass.
19
19
  */
20
- import { execSync } from 'node:child_process';
20
+ import { execFileSync, execSync } from 'node:child_process';
21
21
  import * as fs from 'node:fs';
22
22
  import * as path from 'node:path';
23
23
  import { structuredPatch } from 'diff';
@@ -25,6 +25,60 @@ import { structuredPatch } from 'diff';
25
25
  const MAX_FILE_SIZE_BYTES = 1_048_576;
26
26
  /** Context lines around changes (same as Claude Code CLI) */
27
27
  const CONTEXT_LINES = 3;
28
+ function isSafeRepoRelativePath(relativePath) {
29
+ const normalized = path.posix.normalize(relativePath.split(path.sep).join('/'));
30
+ return !(!normalized ||
31
+ normalized.startsWith('/') ||
32
+ normalized === '..' ||
33
+ normalized.startsWith('../') ||
34
+ normalized.includes('\0') ||
35
+ normalized.includes('\n') ||
36
+ normalized.includes('\r'));
37
+ }
38
+ function tryRealpath(p) {
39
+ try {
40
+ return fs.realpathSync(p);
41
+ }
42
+ catch {
43
+ return null;
44
+ }
45
+ }
46
+ /**
47
+ * Resolve a path to a git-repo-relative path, tolerating symlink prefix drift.
48
+ *
49
+ * In production we may receive absolute tool paths under a symlinked mount
50
+ * while git reports a canonical root under a different prefix. This helper
51
+ * tries lexical and canonicalized candidates and returns a safe repo-relative path.
52
+ */
53
+ function resolveRepoRelativePath(gitRoot, absolutePath) {
54
+ const lexicalRelative = path.relative(gitRoot, absolutePath);
55
+ if (isSafeRepoRelativePath(lexicalRelative)) {
56
+ return lexicalRelative;
57
+ }
58
+ const gitRootReal = tryRealpath(gitRoot);
59
+ if (!gitRootReal)
60
+ return null;
61
+ const candidates = new Set();
62
+ candidates.add(absolutePath);
63
+ const absoluteReal = tryRealpath(absolutePath);
64
+ if (absoluteReal) {
65
+ candidates.add(absoluteReal);
66
+ }
67
+ else {
68
+ // File may not exist (e.g., delete). Resolve through parent directory.
69
+ const parentReal = tryRealpath(path.dirname(absolutePath));
70
+ if (parentReal) {
71
+ candidates.add(path.join(parentReal, path.basename(absolutePath)));
72
+ }
73
+ }
74
+ for (const candidate of candidates) {
75
+ const relativePath = path.relative(gitRootReal, candidate);
76
+ if (isSafeRepoRelativePath(relativePath)) {
77
+ return relativePath;
78
+ }
79
+ }
80
+ return null;
81
+ }
28
82
  // ---------------------------------------------------------------------------
29
83
  // Pattern 1: Split messages (Claude)
30
84
  // ---------------------------------------------------------------------------
@@ -36,6 +90,8 @@ const CONTEXT_LINES = 3;
36
90
  * Entries are deleted after consumption to avoid unbounded growth.
37
91
  */
38
92
  const pendingToolUses = new Map();
93
+ const pendingEditFilesSnapshots = new Map();
94
+ const MAX_PENDING_EDIT_FILES_SNAPSHOTS = 400;
39
95
  /**
40
96
  * Register tool uses from an assistant message for later enrichment lookup.
41
97
  * Used when tool_use and tool_result are in separate messages (Claude pattern).
@@ -45,6 +101,80 @@ export function registerToolUses(toolUses) {
45
101
  pendingToolUses.set(tu.id, { name: tu.name, input: tu.input });
46
102
  }
47
103
  }
104
+ /**
105
+ * Register a pre-edit snapshot for tools that need true pre/post diffs.
106
+ * Currently used for Codex edit_files at tool-start time so completion does not
107
+ * rely on git HEAD state.
108
+ */
109
+ export function registerToolInvocationStart(toolUseId, toolName, toolInput, context) {
110
+ try {
111
+ if (toolName.toLowerCase() !== 'edit_files')
112
+ return;
113
+ const changes = toolInput.changes;
114
+ if (!changes || changes.length === 0)
115
+ return;
116
+ const workingDirectory = context?.workingDirectory;
117
+ let gitRoot;
118
+ try {
119
+ gitRoot = execSync('git rev-parse --show-toplevel', {
120
+ encoding: 'utf-8',
121
+ timeout: 5000,
122
+ ...(workingDirectory ? { cwd: workingDirectory } : {}),
123
+ }).trim();
124
+ }
125
+ catch {
126
+ return;
127
+ }
128
+ const snapshots = [];
129
+ for (const change of changes) {
130
+ if (!change?.path)
131
+ continue;
132
+ const kind = normalizeChangeKind(change.kind);
133
+ const absolutePath = path.isAbsolute(change.path)
134
+ ? change.path
135
+ : path.resolve(workingDirectory || gitRoot, change.path);
136
+ // Only snapshot files inside the repo.
137
+ if (!resolveRepoRelativePath(gitRoot, absolutePath))
138
+ continue;
139
+ let beforeExists = false;
140
+ let beforeContent;
141
+ try {
142
+ const stat = fs.statSync(absolutePath);
143
+ if (stat.size <= MAX_FILE_SIZE_BYTES) {
144
+ beforeContent = fs.readFileSync(absolutePath, 'utf-8');
145
+ }
146
+ beforeExists = true;
147
+ }
148
+ catch {
149
+ beforeExists = false;
150
+ }
151
+ snapshots.push({
152
+ path: change.path,
153
+ kind,
154
+ absolutePath,
155
+ beforeExists,
156
+ beforeContent,
157
+ });
158
+ }
159
+ if (snapshots.length > 0) {
160
+ pendingEditFilesSnapshots.set(getSnapshotKey(toolUseId, context), {
161
+ snapshots,
162
+ createdAt: Date.now(),
163
+ });
164
+ }
165
+ pruneOldestEditFilesSnapshots();
166
+ }
167
+ catch {
168
+ // Best effort — swallow any errors
169
+ }
170
+ }
171
+ /**
172
+ * Clear pending per-invocation snapshot state for a specific tool use.
173
+ * Used on terminal paths (stop/abort/error) to prevent stale cache buildup.
174
+ */
175
+ export function clearToolInvocationState(toolUseId, context) {
176
+ pendingEditFilesSnapshots.delete(getSnapshotKey(toolUseId, context));
177
+ }
48
178
  /**
49
179
  * Enrich tool_result content blocks using previously registered tool_use data.
50
180
  * Used when tool_use and tool_result are in separate messages (Claude pattern).
@@ -64,7 +194,7 @@ export function enrichToolResults(contentBlocks) {
64
194
  continue;
65
195
  // Consume the entry — we no longer need it
66
196
  pendingToolUses.delete(toolUseId);
67
- enrichBlock(block, toolUse.name, toolUse.input);
197
+ enrichBlock(block, toolUse.name, toolUse.input, undefined, toolUseId);
68
198
  }
69
199
  // GC: clear any stale entries older than expected
70
200
  if (pendingToolUses.size > 200) {
@@ -81,7 +211,7 @@ export function enrichToolResults(contentBlocks) {
81
211
  * Used by Codex, OpenCode, and Gemini handlers.
82
212
  * Mutates content blocks in-place. Best-effort.
83
213
  */
84
- export function enrichContentBlocks(contentBlocks) {
214
+ export function enrichContentBlocks(contentBlocks, context) {
85
215
  // Build local map from tool_use blocks in this array
86
216
  const localToolUses = new Map();
87
217
  for (const block of contentBlocks) {
@@ -101,7 +231,7 @@ export function enrichContentBlocks(contentBlocks) {
101
231
  const toolUse = localToolUses.get(toolUseId);
102
232
  if (!toolUse)
103
233
  continue;
104
- enrichBlock(block, toolUse.name, toolUse.input);
234
+ enrichBlock(block, toolUse.name, toolUse.input, context, toolUseId);
105
235
  }
106
236
  }
107
237
  // ---------------------------------------------------------------------------
@@ -111,7 +241,7 @@ export function enrichContentBlocks(contentBlocks) {
111
241
  * Enrich a single tool_result block with diff data.
112
242
  * Best-effort — swallows all errors.
113
243
  */
114
- function enrichBlock(block, toolName, toolInput) {
244
+ function enrichBlock(block, toolName, toolInput, context, toolUseId) {
115
245
  try {
116
246
  // Normalize tool names across SDKs (Claude: "Edit", Codex: "edit", etc.)
117
247
  const normalized = toolName.toLowerCase();
@@ -122,7 +252,7 @@ function enrichBlock(block, toolName, toolInput) {
122
252
  enrichWriteResult(block, toolInput);
123
253
  }
124
254
  else if (normalized === 'edit_files') {
125
- enrichEditFilesResult(block, toolInput);
255
+ enrichEditFilesResult(block, toolInput, context, toolUseId);
126
256
  }
127
257
  }
128
258
  catch {
@@ -234,16 +364,35 @@ function enrichWriteResult(block, input) {
234
364
  * No old/new content is provided — we reconstruct diffs by comparing
235
365
  * the current file (post-edit) against git HEAD.
236
366
  */
237
- function enrichEditFilesResult(block, input) {
367
+ function enrichEditFilesResult(block, input, context, toolUseId) {
238
368
  const changes = input.changes;
239
369
  if (!changes || changes.length === 0)
240
370
  return;
371
+ const workingDirectory = context?.workingDirectory;
372
+ const snapshotEntry = toolUseId
373
+ ? pendingEditFilesSnapshots.get(getSnapshotKey(toolUseId, context))
374
+ : undefined;
375
+ if (toolUseId) {
376
+ pendingEditFilesSnapshots.delete(getSnapshotKey(toolUseId, context));
377
+ }
378
+ const snapshots = snapshotEntry?.snapshots;
379
+ if (snapshots?.length) {
380
+ const snapshotDiffs = enrichFromEditFilesSnapshots(snapshots);
381
+ if (snapshotDiffs.length > 0) {
382
+ block.diff = {
383
+ structuredPatch: snapshotDiffs[0].structuredPatch,
384
+ files: snapshotDiffs,
385
+ };
386
+ return;
387
+ }
388
+ }
241
389
  // Find git root once for relative path resolution
242
390
  let gitRoot;
243
391
  try {
244
392
  gitRoot = execSync('git rev-parse --show-toplevel', {
245
393
  encoding: 'utf-8',
246
394
  timeout: 5000,
395
+ ...(workingDirectory ? { cwd: workingDirectory } : {}),
247
396
  }).trim();
248
397
  }
249
398
  catch {
@@ -253,15 +402,18 @@ function enrichEditFilesResult(block, input) {
253
402
  for (const change of changes) {
254
403
  if (!change.path)
255
404
  continue;
256
- const kind = (change.kind || 'update');
405
+ const kind = normalizeChangeKind(change.kind);
257
406
  const filePath = change.path;
407
+ const resolvedPath = path.isAbsolute(filePath)
408
+ ? filePath
409
+ : path.resolve(workingDirectory || gitRoot, filePath);
258
410
  try {
259
411
  if (kind === 'add') {
260
412
  // New file — all additions
261
- const stat = fs.statSync(filePath);
413
+ const stat = fs.statSync(resolvedPath);
262
414
  if (stat.size > MAX_FILE_SIZE_BYTES)
263
415
  continue;
264
- const content = fs.readFileSync(filePath, 'utf-8');
416
+ const content = fs.readFileSync(resolvedPath, 'utf-8');
265
417
  const patch = structuredPatch(filePath, filePath, '', content, '', '', {
266
418
  context: 0,
267
419
  });
@@ -271,11 +423,12 @@ function enrichEditFilesResult(block, input) {
271
423
  }
272
424
  else if (kind === 'delete') {
273
425
  // Deleted file — get old content from git
274
- const relativePath = path.relative(gitRoot, filePath);
275
- const oldContent = execSync(`git show HEAD:${relativePath}`, {
276
- encoding: 'utf-8',
277
- timeout: 5000,
278
- });
426
+ const relativePath = resolveRepoRelativePath(gitRoot, resolvedPath);
427
+ if (!relativePath)
428
+ continue;
429
+ const oldContent = gitShowHeadFile(gitRoot, relativePath);
430
+ if (oldContent === null)
431
+ continue;
279
432
  const patch = structuredPatch(filePath, filePath, oldContent, '', '', '', {
280
433
  context: CONTEXT_LINES,
281
434
  });
@@ -285,19 +438,15 @@ function enrichEditFilesResult(block, input) {
285
438
  }
286
439
  else {
287
440
  // Update — diff git HEAD vs current file
288
- const stat = fs.statSync(filePath);
441
+ const stat = fs.statSync(resolvedPath);
289
442
  if (stat.size > MAX_FILE_SIZE_BYTES)
290
443
  continue;
291
- const currentContent = fs.readFileSync(filePath, 'utf-8');
292
- const relativePath = path.relative(gitRoot, filePath);
293
- let oldContent;
294
- try {
295
- oldContent = execSync(`git show HEAD:${relativePath}`, {
296
- encoding: 'utf-8',
297
- timeout: 5000,
298
- });
299
- }
300
- catch {
444
+ const currentContent = fs.readFileSync(resolvedPath, 'utf-8');
445
+ const relativePath = resolveRepoRelativePath(gitRoot, resolvedPath);
446
+ if (!relativePath)
447
+ continue;
448
+ const oldContent = gitShowHeadFile(gitRoot, relativePath);
449
+ if (oldContent === null) {
301
450
  // File may be new (not in HEAD) — treat as addition
302
451
  const patch = structuredPatch(filePath, filePath, '', currentContent, '', '', {
303
452
  context: 0,
@@ -327,3 +476,92 @@ function enrichEditFilesResult(block, input) {
327
476
  };
328
477
  }
329
478
  }
479
+ function gitShowHeadFile(gitRoot, relativePath) {
480
+ // Ensure the ref path is safe and uses git's forward-slash separator.
481
+ const normalized = path.posix.normalize(relativePath.split(path.sep).join('/'));
482
+ if (!isSafeRepoRelativePath(normalized)) {
483
+ return null;
484
+ }
485
+ try {
486
+ return execFileSync('git', ['show', `HEAD:${normalized}`], {
487
+ encoding: 'utf-8',
488
+ timeout: 5000,
489
+ cwd: gitRoot,
490
+ });
491
+ }
492
+ catch {
493
+ return null;
494
+ }
495
+ }
496
+ function normalizeChangeKind(kind) {
497
+ if (kind === 'add' || kind === 'delete' || kind === 'update') {
498
+ return kind;
499
+ }
500
+ return 'update';
501
+ }
502
+ function getSnapshotKey(toolUseId, context) {
503
+ return `${context?.snapshotScope ?? 'global'}:${toolUseId}`;
504
+ }
505
+ function pruneOldestEditFilesSnapshots() {
506
+ if (pendingEditFilesSnapshots.size <= MAX_PENDING_EDIT_FILES_SNAPSHOTS)
507
+ return;
508
+ const overflowCount = pendingEditFilesSnapshots.size - MAX_PENDING_EDIT_FILES_SNAPSHOTS;
509
+ const oldestKeys = [...pendingEditFilesSnapshots.entries()]
510
+ .sort((a, b) => a[1].createdAt - b[1].createdAt)
511
+ .slice(0, overflowCount)
512
+ .map(([key]) => key);
513
+ for (const key of oldestKeys) {
514
+ pendingEditFilesSnapshots.delete(key);
515
+ }
516
+ }
517
+ function enrichFromEditFilesSnapshots(snapshots) {
518
+ const fileDiffs = [];
519
+ for (const snapshot of snapshots) {
520
+ try {
521
+ let afterExists = false;
522
+ let afterContent = '';
523
+ try {
524
+ const stat = fs.statSync(snapshot.absolutePath);
525
+ if (stat.size <= MAX_FILE_SIZE_BYTES) {
526
+ afterContent = fs.readFileSync(snapshot.absolutePath, 'utf-8');
527
+ }
528
+ afterExists = true;
529
+ }
530
+ catch {
531
+ afterExists = false;
532
+ }
533
+ const beforeContent = snapshot.beforeExists ? (snapshot.beforeContent ?? '') : '';
534
+ const beforeForDiff = snapshot.beforeExists ? beforeContent : '';
535
+ const afterForDiff = afterExists ? afterContent : '';
536
+ if (!snapshot.beforeExists && !afterExists)
537
+ continue;
538
+ if (beforeForDiff === afterForDiff)
539
+ continue;
540
+ let resultKind = snapshot.kind;
541
+ if (!snapshot.beforeExists && afterExists) {
542
+ resultKind = 'add';
543
+ }
544
+ else if (snapshot.beforeExists && !afterExists) {
545
+ resultKind = 'delete';
546
+ }
547
+ else {
548
+ resultKind = 'update';
549
+ }
550
+ const patch = structuredPatch(snapshot.path, snapshot.path, beforeForDiff, afterForDiff, '', '', {
551
+ context: resultKind === 'add' ? 0 : CONTEXT_LINES,
552
+ });
553
+ if (patch.hunks.length > 0) {
554
+ fileDiffs.push({
555
+ path: snapshot.path,
556
+ kind: resultKind,
557
+ structuredPatch: patch.hunks,
558
+ });
559
+ }
560
+ }
561
+ catch {
562
+ // Best effort — skip files that fail
563
+ }
564
+ }
565
+ // Keep fallback path in calling method if this yields no diffs.
566
+ return fileDiffs;
567
+ }
@@ -30,6 +30,12 @@ export interface TasksService {
30
30
  patch(id: string, data: Partial<any>): Promise<any>;
31
31
  emit(event: string, data: unknown): void;
32
32
  }
33
+ export interface TasksStreamingService {
34
+ create(data: {
35
+ event: 'tool:start' | 'tool:complete' | 'thinking:chunk';
36
+ data: Record<string, unknown>;
37
+ }): Promise<unknown>;
38
+ }
33
39
  /**
34
40
  * Service interface for updating sessions via FeathersJS
35
41
  * This ensures WebSocket events are emitted when sessions are updated (e.g., permission config)
@@ -42,13 +48,15 @@ export declare class ClaudeTool implements ITool {
42
48
  private sessionsRepo?;
43
49
  private messagesService?;
44
50
  private tasksService?;
51
+ private tasksStreamingService?;
45
52
  readonly toolType: "claude-code";
46
53
  readonly name = "Claude Code";
47
54
  private promptService?;
48
- constructor(messagesRepo?: MessagesRepository | undefined, sessionsRepo?: SessionRepository | undefined, apiKey?: string, messagesService?: MessagesService | undefined, sessionMCPRepo?: SessionMCPServerRepository, mcpServerRepo?: MCPServerRepository, permissionService?: PermissionService, tasksService?: TasksService | undefined, sessionsService?: SessionsService, worktreesRepo?: WorktreeRepository, reposRepo?: RepoRepository, mcpEnabled?: boolean, _useNativeAuth?: boolean, // Claude supports `claude login` OAuth, but no special handling needed in tool
55
+ constructor(messagesRepo?: MessagesRepository | undefined, sessionsRepo?: SessionRepository | undefined, apiKey?: string, messagesService?: MessagesService | undefined, sessionMCPRepo?: SessionMCPServerRepository, mcpServerRepo?: MCPServerRepository, permissionService?: PermissionService, tasksService?: TasksService | undefined, tasksStreamingService?: TasksStreamingService | undefined, sessionsService?: SessionsService, worktreesRepo?: WorktreeRepository, reposRepo?: RepoRepository, mcpEnabled?: boolean, _useNativeAuth?: boolean, // Claude supports `claude login` OAuth, but no special handling needed in tool
49
56
  inputRequestService?: import('../../input-requests/input-request-service').InputRequestService, usersRepo?: import('../../db/feathers-repositories').UsersRepository);
50
57
  getCapabilities(): ToolCapabilities;
51
58
  checkInstalled(): Promise<boolean>;
59
+ private emitTaskEvent;
52
60
  importSession(sessionId: string, options?: ImportOptions): Promise<SessionData>;
53
61
  /**
54
62
  * Execute a prompt against a session WITH real-time streaming
@@ -1 +1 @@
1
- {"version":3,"file":"claude-tool.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/claude/claude-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-tool.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/claude/claude-tool.ts"],"names":[],"mappings":"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"}
@@ -70,15 +70,17 @@ export class ClaudeTool {
70
70
  sessionsRepo;
71
71
  messagesService;
72
72
  tasksService;
73
+ tasksStreamingService;
73
74
  toolType = 'claude-code';
74
75
  name = 'Claude Code';
75
76
  promptService;
76
- constructor(messagesRepo, sessionsRepo, apiKey, messagesService, sessionMCPRepo, mcpServerRepo, permissionService, tasksService, sessionsService, worktreesRepo, reposRepo, mcpEnabled, _useNativeAuth, // Claude supports `claude login` OAuth, but no special handling needed in tool
77
+ constructor(messagesRepo, sessionsRepo, apiKey, messagesService, sessionMCPRepo, mcpServerRepo, permissionService, tasksService, tasksStreamingService, sessionsService, worktreesRepo, reposRepo, mcpEnabled, _useNativeAuth, // Claude supports `claude login` OAuth, but no special handling needed in tool
77
78
  inputRequestService, usersRepo) {
78
79
  this.messagesRepo = messagesRepo;
79
80
  this.sessionsRepo = sessionsRepo;
80
81
  this.messagesService = messagesService;
81
82
  this.tasksService = tasksService;
83
+ this.tasksStreamingService = tasksStreamingService;
82
84
  if (messagesRepo && sessionsRepo) {
83
85
  this.promptService = new ClaudePromptService(messagesRepo, sessionsRepo, apiKey, sessionMCPRepo, mcpServerRepo, permissionService, tasksService, sessionsService, worktreesRepo, reposRepo, messagesService, mcpEnabled, inputRequestService, usersRepo);
84
86
  }
@@ -105,6 +107,14 @@ export class ClaudeTool {
105
107
  return false;
106
108
  }
107
109
  }
110
+ async emitTaskEvent(event, data) {
111
+ if (this.tasksStreamingService) {
112
+ await this.tasksStreamingService.create({ event, data });
113
+ return;
114
+ }
115
+ // Fallback for environments that don't expose /tasks/streaming.
116
+ this.tasksService?.emit(event, data);
117
+ }
108
118
  async importSession(sessionId, options) {
109
119
  // Load session using existing transcript parser
110
120
  const session = await loadClaudeSession(sessionId, options?.projectDir);
@@ -240,8 +250,8 @@ export class ClaudeTool {
240
250
  }
241
251
  // Handle tool execution start
242
252
  if (event.type === 'tool_start') {
243
- if (this.tasksService && taskId) {
244
- this.tasksService.emit('tool:start', {
253
+ if (taskId) {
254
+ await this.emitTaskEvent('tool:start', {
245
255
  task_id: taskId,
246
256
  session_id: sessionId,
247
257
  tool_use_id: event.toolUseId,
@@ -251,8 +261,8 @@ export class ClaudeTool {
251
261
  }
252
262
  // Handle tool execution complete
253
263
  if (event.type === 'tool_complete') {
254
- if (this.tasksService && taskId) {
255
- this.tasksService.emit('tool:complete', {
264
+ if (taskId) {
265
+ await this.emitTaskEvent('tool:complete', {
256
266
  task_id: taskId,
257
267
  session_id: sessionId,
258
268
  tool_use_id: event.toolUseId,
@@ -305,8 +315,8 @@ export class ClaudeTool {
305
315
  // Handle thinking partial (streaming)
306
316
  if (event.type === 'thinking_partial') {
307
317
  // Emit to tasks service for task-level tracking
308
- if (this.tasksService && taskId) {
309
- this.tasksService.emit('thinking:chunk', {
318
+ if (taskId) {
319
+ await this.emitTaskEvent('thinking:chunk', {
310
320
  task_id: taskId,
311
321
  session_id: sessionId,
312
322
  chunk: event.thinkingChunk,
@@ -11,7 +11,7 @@ import type { NormalizedSdkResponse, RawSdkResponse } from '../../types/sdk-resp
11
11
  import type { TokenUsage } from '../../types/token-usage.js';
12
12
  import { type MessageID, type MessageSource, type PermissionMode, type SessionID, type TaskID } from '../../types.js';
13
13
  import type { ITool, StreamingCallbacks, ToolCapabilities } from '../base/index.js';
14
- import type { MessagesService, TasksService } from '../claude/claude-tool.js';
14
+ import type { MessagesService, TasksService, TasksStreamingService } from '../claude/claude-tool.js';
15
15
  interface CodexExecutionResult {
16
16
  userMessageId: MessageID;
17
17
  assistantMessageIds: MessageID[];
@@ -20,6 +20,11 @@ interface CodexExecutionResult {
20
20
  contextWindowLimit?: number;
21
21
  model?: string;
22
22
  rawSdkResponse?: unknown;
23
+ rawContextUsage?: {
24
+ totalTokens: number;
25
+ maxTokens: number;
26
+ percentage: number;
27
+ };
23
28
  wasStopped?: boolean;
24
29
  }
25
30
  export declare class CodexTool implements ITool {
@@ -28,12 +33,15 @@ export declare class CodexTool implements ITool {
28
33
  private promptService?;
29
34
  private messagesRepo?;
30
35
  private sessionsRepo?;
36
+ private worktreesRepo?;
31
37
  private messagesService?;
32
38
  private tasksService?;
33
- constructor(messagesRepo?: MessagesRepository, sessionsRepo?: SessionRepository, sessionMCPServerRepo?: SessionMCPServerRepository, worktreesRepo?: WorktreeRepository, reposRepo?: RepoRepository, apiKey?: string, messagesService?: MessagesService, tasksService?: TasksService, _useNativeAuth?: boolean, // Codex doesn't have OAuth fallback, but accept for interface consistency
39
+ private tasksStreamingService?;
40
+ constructor(messagesRepo?: MessagesRepository, sessionsRepo?: SessionRepository, sessionMCPServerRepo?: SessionMCPServerRepository, worktreesRepo?: WorktreeRepository, reposRepo?: RepoRepository, apiKey?: string, messagesService?: MessagesService, tasksService?: TasksService, tasksStreamingService?: TasksStreamingService, _useNativeAuth?: boolean, // Codex doesn't have OAuth fallback, but accept for interface consistency
34
41
  mcpServerRepo?: MCPServerRepository, usersRepo?: UsersRepository);
35
42
  getCapabilities(): ToolCapabilities;
36
43
  checkInstalled(): Promise<boolean>;
44
+ private emitTaskEvent;
37
45
  /**
38
46
  * Execute a prompt against a session WITH real-time streaming
39
47
  *
@@ -103,16 +111,20 @@ export declare class CodexTool implements ITool {
103
111
  */
104
112
  normalizedSdkResponse(_rawResponse: RawSdkResponse): NormalizedSdkResponse;
105
113
  /**
106
- * Compute cumulative context window usage for a Codex session
114
+ * Compute context window usage for a Codex session
107
115
  *
108
- * For Codex, the SDK already provides cumulative token counts in each task's response.
109
- * The inputTokens field includes the full conversation history up to that point.
110
- * We just need to extract and return the contextWindow from the current task's SDK response.
116
+ * Codex SDK usage is reported per turn (not cumulative across tasks).
117
+ * For context occupancy, use input-side tokens only:
118
+ * - usage.input_tokens
119
+ * - usage.cached_input_tokens
120
+ *
121
+ * Output tokens are excluded because they are generated during the turn and
122
+ * are not prompt-side context occupancy.
111
123
  *
112
124
  * @param sessionId - Session ID to compute context for
113
125
  * @param currentTaskId - Optional current task ID (not used for Codex, kept for interface consistency)
114
126
  * @param currentRawSdkResponse - Optional raw SDK response from current task (if available in memory)
115
- * @returns Promise resolving to computed context window usage in tokens
127
+ * @returns Promise resolving to context usage in tokens
116
128
  */
117
129
  computeContextWindow(sessionId: string, _currentTaskId?: string, currentRawSdkResponse?: unknown): Promise<number>;
118
130
  }
@@ -1 +1 @@
1
- {"version":3,"file":"codex-tool.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/codex/codex-tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-tool.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/codex/codex-tool.ts"],"names":[],"mappings":"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"}