agor-live 0.16.2 → 0.16.3

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 (186) hide show
  1. package/dist/cli/commands/board/add-session.js +4 -8
  2. package/dist/cli/commands/board/list.js +2 -4
  3. package/dist/cli/commands/mcp/list.js +1 -2
  4. package/dist/cli/commands/mcp/remove.js +1 -2
  5. package/dist/cli/commands/mcp/show.js +1 -2
  6. package/dist/cli/commands/repo/rm.js +1 -2
  7. package/dist/cli/commands/session/load-claude.js +1 -2
  8. package/dist/cli/commands/user/delete.js +1 -2
  9. package/dist/cli/commands/user/update.js +1 -2
  10. package/dist/cli/commands/worktree/add.js +1 -2
  11. package/dist/cli/commands/worktree/archive.js +1 -2
  12. package/dist/cli/commands/worktree/list.js +3 -6
  13. package/dist/cli/commands/worktree/rm.js +1 -2
  14. package/dist/cli/commands/worktree/show.js +1 -2
  15. package/dist/cli/commands/worktree/unarchive.js +1 -2
  16. package/dist/core/api/index.cjs +87 -2
  17. package/dist/core/api/index.d.cts +53 -10
  18. package/dist/core/api/index.d.ts +53 -10
  19. package/dist/core/api/index.js +85 -1
  20. package/dist/core/{feathers-CzuSOZgY.d.ts → feathers-CKfl55ut.d.ts} +10 -2
  21. package/dist/core/{feathers-CYAHFZ05.d.cts → feathers-NY8lH6YZ.d.cts} +10 -2
  22. package/dist/core/index.cjs +85 -0
  23. package/dist/core/index.d.cts +2 -2
  24. package/dist/core/index.d.ts +2 -2
  25. package/dist/core/index.js +84 -0
  26. package/dist/core/types/index.d.cts +1 -1
  27. package/dist/core/types/index.d.ts +1 -1
  28. package/dist/daemon/index.js +18 -1
  29. package/dist/daemon/register-routes.js +15 -0
  30. package/dist/daemon/register-services.js +3 -1
  31. package/dist/daemon/services/mcp-servers.d.ts +7 -2
  32. package/dist/executor/db/feathers-repositories.d.ts +1 -0
  33. package/dist/executor/db/feathers-repositories.d.ts.map +1 -1
  34. package/dist/executor/db/feathers-repositories.js +1 -0
  35. package/dist/executor/handlers/sdk/claude.d.ts.map +1 -1
  36. package/dist/executor/handlers/sdk/claude.js +1 -1
  37. package/dist/executor/handlers/sdk/codex.d.ts.map +1 -1
  38. package/dist/executor/handlers/sdk/codex.js +1 -1
  39. package/dist/executor/sdk-handlers/base/diff-enrichment.d.ts +4 -1
  40. package/dist/executor/sdk-handlers/base/diff-enrichment.d.ts.map +1 -1
  41. package/dist/executor/sdk-handlers/base/diff-enrichment.js +97 -24
  42. package/dist/executor/sdk-handlers/claude/claude-tool.d.ts +9 -1
  43. package/dist/executor/sdk-handlers/claude/claude-tool.d.ts.map +1 -1
  44. package/dist/executor/sdk-handlers/claude/claude-tool.js +17 -7
  45. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts +5 -2
  46. package/dist/executor/sdk-handlers/codex/codex-tool.d.ts.map +1 -1
  47. package/dist/executor/sdk-handlers/codex/codex-tool.js +122 -24
  48. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts +7 -1
  49. package/dist/executor/sdk-handlers/codex/prompt-service.d.ts.map +1 -1
  50. package/dist/executor/sdk-handlers/codex/prompt-service.js +111 -17
  51. package/dist/ui/assets/{_basePickBy-By_woBZB.js → _basePickBy-CM6p9_3C.js} +1 -1
  52. package/dist/ui/assets/_basePickBy-CM6p9_3C.js.gz +0 -0
  53. package/dist/ui/assets/{_baseUniq-C2jLj-Al.js → _baseUniq-CHMdQkaA.js} +1 -1
  54. package/dist/ui/assets/_baseUniq-CHMdQkaA.js.gz +0 -0
  55. package/dist/ui/assets/{arc-DADMFVbt.js → arc-Czp_Gn_m.js} +1 -1
  56. package/dist/ui/assets/arc-Czp_Gn_m.js.gz +0 -0
  57. package/dist/ui/assets/{architectureDiagram-VXUJARFQ-rNJ5lYJQ.js → architectureDiagram-VXUJARFQ-Cz-z2R4z.js} +1 -1
  58. package/dist/ui/assets/architectureDiagram-VXUJARFQ-Cz-z2R4z.js.gz +0 -0
  59. package/dist/ui/assets/{base-80a1f760-BVsv_T1S.js → base-80a1f760-DL2sFXEh.js} +1 -1
  60. package/dist/ui/assets/{blockDiagram-VD42YOAC-CezN66iB.js → blockDiagram-VD42YOAC-C62DfRc6.js} +1 -1
  61. package/dist/ui/assets/blockDiagram-VD42YOAC-C62DfRc6.js.gz +0 -0
  62. package/dist/ui/assets/{c4Diagram-YG6GDRKO-Dze59YuK.js → c4Diagram-YG6GDRKO-DGSWKqxL.js} +1 -1
  63. package/dist/ui/assets/c4Diagram-YG6GDRKO-DGSWKqxL.js.gz +0 -0
  64. package/dist/ui/assets/channel-CmfC29hp.js +1 -0
  65. package/dist/ui/assets/{chunk-4BX2VUAB-CXL-V_XA.js → chunk-4BX2VUAB-CuJEBfIh.js} +1 -1
  66. package/dist/ui/assets/{chunk-55IACEB6-CI3h0xTl.js → chunk-55IACEB6-DYgjRl-z.js} +1 -1
  67. package/dist/ui/assets/{chunk-B4BG7PRW-CFohiEqO.js → chunk-B4BG7PRW-rqPu7wjt.js} +1 -1
  68. package/dist/ui/assets/chunk-B4BG7PRW-rqPu7wjt.js.gz +0 -0
  69. package/dist/ui/assets/{chunk-DI55MBZ5-BbF4fGKj.js → chunk-DI55MBZ5-D7PtpA49.js} +1 -1
  70. package/dist/ui/assets/chunk-DI55MBZ5-D7PtpA49.js.gz +0 -0
  71. package/dist/ui/assets/{chunk-FMBD7UC4-C5x6cpDg.js → chunk-FMBD7UC4-1R4kh4IH.js} +1 -1
  72. package/dist/ui/assets/{chunk-QN33PNHL-CEDiC29y.js → chunk-QN33PNHL-qNBgj7JQ.js} +1 -1
  73. package/dist/ui/assets/{chunk-QZHKN3VN-DPo28cCF.js → chunk-QZHKN3VN-JUwZqL5s.js} +1 -1
  74. package/dist/ui/assets/{chunk-TZMSLE5B-C94jSlIG.js → chunk-TZMSLE5B-Bk4l2qq1.js} +1 -1
  75. package/dist/ui/assets/chunk-TZMSLE5B-Bk4l2qq1.js.gz +0 -0
  76. package/dist/ui/assets/classDiagram-2ON5EDUG-LD317OSr.js +1 -0
  77. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-LD317OSr.js +1 -0
  78. package/dist/ui/assets/clone-iT69LzXk.js +1 -0
  79. package/dist/ui/assets/{consoleHook-59e792cb-cpS6JVM4.js → consoleHook-59e792cb-BjB_4eqO.js} +1 -1
  80. package/dist/ui/assets/consoleHook-59e792cb-BjB_4eqO.js.gz +0 -0
  81. package/dist/ui/assets/{cose-bilkent-S5V4N54A-CcoEg_Ct.js → cose-bilkent-S5V4N54A-Db3GpSRP.js} +1 -1
  82. package/dist/ui/assets/cose-bilkent-S5V4N54A-Db3GpSRP.js.gz +0 -0
  83. package/dist/ui/assets/{dagre-6UL2VRFP-DWAyqs2B.js → dagre-6UL2VRFP-D9RUH_36.js} +1 -1
  84. package/dist/ui/assets/dagre-6UL2VRFP-D9RUH_36.js.gz +0 -0
  85. package/dist/ui/assets/{diagram-PSM6KHXK-C7J2MNfc.js → diagram-PSM6KHXK-C51S0t1m.js} +1 -1
  86. package/dist/ui/assets/diagram-PSM6KHXK-C51S0t1m.js.gz +0 -0
  87. package/dist/ui/assets/{diagram-QEK2KX5R-6KZjqziN.js → diagram-QEK2KX5R-Bl99kj4s.js} +1 -1
  88. package/dist/ui/assets/diagram-QEK2KX5R-Bl99kj4s.js.gz +0 -0
  89. package/dist/ui/assets/{diagram-S2PKOQOG-DIL01325.js → diagram-S2PKOQOG-Dm52PeWx.js} +1 -1
  90. package/dist/ui/assets/diagram-S2PKOQOG-Dm52PeWx.js.gz +0 -0
  91. package/dist/ui/assets/{erDiagram-Q2GNP2WA-D5j4CetG.js → erDiagram-Q2GNP2WA-K5D_GKDZ.js} +1 -1
  92. package/dist/ui/assets/erDiagram-Q2GNP2WA-K5D_GKDZ.js.gz +0 -0
  93. package/dist/ui/assets/{flowDiagram-NV44I4VS-Bxx2iEi-.js → flowDiagram-NV44I4VS-D7fCREXV.js} +1 -1
  94. package/dist/ui/assets/flowDiagram-NV44I4VS-D7fCREXV.js.gz +0 -0
  95. package/dist/ui/assets/{ganttDiagram-LVOFAZNH-BtBi1ZfT.js → ganttDiagram-LVOFAZNH-CNW9D2UF.js} +1 -1
  96. package/dist/ui/assets/ganttDiagram-LVOFAZNH-CNW9D2UF.js.gz +0 -0
  97. package/dist/ui/assets/{gitGraphDiagram-NY62KEGX-CY1TKvzA.js → gitGraphDiagram-NY62KEGX-CzSHwK4S.js} +1 -1
  98. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CzSHwK4S.js.gz +0 -0
  99. package/dist/ui/assets/{graph-DC6eH7AX.js → graph-iZG1PujV.js} +1 -1
  100. package/dist/ui/assets/graph-iZG1PujV.js.gz +0 -0
  101. package/dist/ui/assets/{index-599aeaf7-Dh_oObwY.js → index-599aeaf7-BSVvtdOR.js} +1 -1
  102. package/dist/ui/assets/index-599aeaf7-BSVvtdOR.js.gz +0 -0
  103. package/dist/ui/assets/{index-CxWOjjRu.js → index-Bv9iC_mb.js} +1 -1
  104. package/dist/ui/assets/index-Bv9iC_mb.js.gz +0 -0
  105. package/dist/ui/assets/{index-DJLnZ-9H.js → index-CmhCTwYo.js} +255 -257
  106. package/dist/ui/assets/index-CmhCTwYo.js.gz +0 -0
  107. package/dist/ui/assets/{index-DQn7RJ8z.js → index-DX9HbDkF.js} +1 -1
  108. package/dist/ui/assets/index-DX9HbDkF.js.gz +0 -0
  109. package/dist/ui/assets/{infoDiagram-ER5ION4S-COpJ37pc.js → infoDiagram-ER5ION4S-7UpJXgGv.js} +1 -1
  110. package/dist/ui/assets/{journeyDiagram-XKPGCS4Q-CpODBkng.js → journeyDiagram-XKPGCS4Q-B_u-rXxp.js} +1 -1
  111. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-B_u-rXxp.js.gz +0 -0
  112. package/dist/ui/assets/{kanban-definition-3W4ZIXB7-DWShJ5Su.js → kanban-definition-3W4ZIXB7-C60Ys_tG.js} +1 -1
  113. package/dist/ui/assets/kanban-definition-3W4ZIXB7-C60Ys_tG.js.gz +0 -0
  114. package/dist/ui/assets/{layout-ttMTfXMb.js → layout-2nOBwYEK.js} +1 -1
  115. package/dist/ui/assets/layout-2nOBwYEK.js.gz +0 -0
  116. package/dist/ui/assets/{linear-DD8VTncp.js → linear-BBfmsNEf.js} +1 -1
  117. package/dist/ui/assets/linear-BBfmsNEf.js.gz +0 -0
  118. package/dist/ui/assets/{mermaid.core-BlvxruUX.js → mermaid.core-BMmc28YS.js} +5 -5
  119. package/dist/ui/assets/mermaid.core-BMmc28YS.js.gz +0 -0
  120. package/dist/ui/assets/{mindmap-definition-VGOIOE7T-CR0ESdqM.js → mindmap-definition-VGOIOE7T-CUOfncA2.js} +1 -1
  121. package/dist/ui/assets/mindmap-definition-VGOIOE7T-CUOfncA2.js.gz +0 -0
  122. package/dist/ui/assets/{pieDiagram-ADFJNKIX-B94eVYhY.js → pieDiagram-ADFJNKIX-CYt5K7tI.js} +1 -1
  123. package/dist/ui/assets/pieDiagram-ADFJNKIX-CYt5K7tI.js.gz +0 -0
  124. package/dist/ui/assets/{quadrantDiagram-AYHSOK5B-C4tNKfCm.js → quadrantDiagram-AYHSOK5B-D3z7FGdo.js} +1 -1
  125. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-D3z7FGdo.js.gz +0 -0
  126. package/dist/ui/assets/{requirementDiagram-UZGBJVZJ-CuG3A95Q.js → requirementDiagram-UZGBJVZJ-DSmK1rXj.js} +1 -1
  127. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-DSmK1rXj.js.gz +0 -0
  128. package/dist/ui/assets/{sankeyDiagram-TZEHDZUN-BCfc7mLC.js → sankeyDiagram-TZEHDZUN-BVudlnpo.js} +1 -1
  129. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-BVudlnpo.js.gz +0 -0
  130. package/dist/ui/assets/{sequenceDiagram-WL72ISMW-D8tVuIkx.js → sequenceDiagram-WL72ISMW-DShMajjv.js} +1 -1
  131. package/dist/ui/assets/sequenceDiagram-WL72ISMW-DShMajjv.js.gz +0 -0
  132. package/dist/ui/assets/{stateDiagram-FKZM4ZOC-DvM8so2A.js → stateDiagram-FKZM4ZOC-9zK0uo4t.js} +1 -1
  133. package/dist/ui/assets/stateDiagram-FKZM4ZOC-9zK0uo4t.js.gz +0 -0
  134. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-BZEgBfav.js +1 -0
  135. package/dist/ui/assets/{timeline-definition-IT6M3QCI-CP2O8vqw.js → timeline-definition-IT6M3QCI-DQ4HYAMD.js} +1 -1
  136. package/dist/ui/assets/timeline-definition-IT6M3QCI-DQ4HYAMD.js.gz +0 -0
  137. package/dist/ui/assets/{treemap-KMMF4GRG-SGJAEegj.js → treemap-KMMF4GRG-Curv75AA.js} +1 -1
  138. package/dist/ui/assets/treemap-KMMF4GRG-Curv75AA.js.gz +0 -0
  139. package/dist/ui/assets/{xychartDiagram-PRI3JC2R-CpwYBSmP.js → xychartDiagram-PRI3JC2R-BJdTipk8.js} +1 -1
  140. package/dist/ui/assets/xychartDiagram-PRI3JC2R-BJdTipk8.js.gz +0 -0
  141. package/dist/ui/index.html +1 -1
  142. package/package.json +1 -1
  143. package/dist/ui/assets/_basePickBy-By_woBZB.js.gz +0 -0
  144. package/dist/ui/assets/_baseUniq-C2jLj-Al.js.gz +0 -0
  145. package/dist/ui/assets/arc-DADMFVbt.js.gz +0 -0
  146. package/dist/ui/assets/architectureDiagram-VXUJARFQ-rNJ5lYJQ.js.gz +0 -0
  147. package/dist/ui/assets/blockDiagram-VD42YOAC-CezN66iB.js.gz +0 -0
  148. package/dist/ui/assets/c4Diagram-YG6GDRKO-Dze59YuK.js.gz +0 -0
  149. package/dist/ui/assets/channel-B2nSdT47.js +0 -1
  150. package/dist/ui/assets/chunk-B4BG7PRW-CFohiEqO.js.gz +0 -0
  151. package/dist/ui/assets/chunk-DI55MBZ5-BbF4fGKj.js.gz +0 -0
  152. package/dist/ui/assets/chunk-TZMSLE5B-C94jSlIG.js.gz +0 -0
  153. package/dist/ui/assets/classDiagram-2ON5EDUG-lwQJA5v0.js +0 -1
  154. package/dist/ui/assets/classDiagram-v2-WZHVMYZB-lwQJA5v0.js +0 -1
  155. package/dist/ui/assets/clone-DmZ98vg9.js +0 -1
  156. package/dist/ui/assets/consoleHook-59e792cb-cpS6JVM4.js.gz +0 -0
  157. package/dist/ui/assets/cose-bilkent-S5V4N54A-CcoEg_Ct.js.gz +0 -0
  158. package/dist/ui/assets/dagre-6UL2VRFP-DWAyqs2B.js.gz +0 -0
  159. package/dist/ui/assets/diagram-PSM6KHXK-C7J2MNfc.js.gz +0 -0
  160. package/dist/ui/assets/diagram-QEK2KX5R-6KZjqziN.js.gz +0 -0
  161. package/dist/ui/assets/diagram-S2PKOQOG-DIL01325.js.gz +0 -0
  162. package/dist/ui/assets/erDiagram-Q2GNP2WA-D5j4CetG.js.gz +0 -0
  163. package/dist/ui/assets/flowDiagram-NV44I4VS-Bxx2iEi-.js.gz +0 -0
  164. package/dist/ui/assets/ganttDiagram-LVOFAZNH-BtBi1ZfT.js.gz +0 -0
  165. package/dist/ui/assets/gitGraphDiagram-NY62KEGX-CY1TKvzA.js.gz +0 -0
  166. package/dist/ui/assets/graph-DC6eH7AX.js.gz +0 -0
  167. package/dist/ui/assets/index-599aeaf7-Dh_oObwY.js.gz +0 -0
  168. package/dist/ui/assets/index-CxWOjjRu.js.gz +0 -0
  169. package/dist/ui/assets/index-DJLnZ-9H.js.gz +0 -0
  170. package/dist/ui/assets/index-DQn7RJ8z.js.gz +0 -0
  171. package/dist/ui/assets/journeyDiagram-XKPGCS4Q-CpODBkng.js.gz +0 -0
  172. package/dist/ui/assets/kanban-definition-3W4ZIXB7-DWShJ5Su.js.gz +0 -0
  173. package/dist/ui/assets/layout-ttMTfXMb.js.gz +0 -0
  174. package/dist/ui/assets/linear-DD8VTncp.js.gz +0 -0
  175. package/dist/ui/assets/mermaid.core-BlvxruUX.js.gz +0 -0
  176. package/dist/ui/assets/mindmap-definition-VGOIOE7T-CR0ESdqM.js.gz +0 -0
  177. package/dist/ui/assets/pieDiagram-ADFJNKIX-B94eVYhY.js.gz +0 -0
  178. package/dist/ui/assets/quadrantDiagram-AYHSOK5B-C4tNKfCm.js.gz +0 -0
  179. package/dist/ui/assets/requirementDiagram-UZGBJVZJ-CuG3A95Q.js.gz +0 -0
  180. package/dist/ui/assets/sankeyDiagram-TZEHDZUN-BCfc7mLC.js.gz +0 -0
  181. package/dist/ui/assets/sequenceDiagram-WL72ISMW-D8tVuIkx.js.gz +0 -0
  182. package/dist/ui/assets/stateDiagram-FKZM4ZOC-DvM8so2A.js.gz +0 -0
  183. package/dist/ui/assets/stateDiagram-v2-4FDKWEC3-kQ-gZX7K.js +0 -1
  184. package/dist/ui/assets/timeline-definition-IT6M3QCI-CP2O8vqw.js.gz +0 -0
  185. package/dist/ui/assets/treemap-KMMF4GRG-SGJAEegj.js.gz +0 -0
  186. package/dist/ui/assets/xychartDiagram-PRI3JC2R-CpwYBSmP.js.gz +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"diff-enrichment.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/base/diff-enrichment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAa5D,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAeD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,GAC5E,IAAI,CAIN;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI,CAoBrE;AAMD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI,CAuBvE"}
1
+ {"version":3,"file":"diff-enrichment.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/base/diff-enrichment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAa5D,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AA4ED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,GAC5E,IAAI,CAIN;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,YAAY,EAAE,GAAG,IAAI,CAoBrE;AAMD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,YAAY,EAAE,EAC7B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAuBN"}
@@ -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
  // ---------------------------------------------------------------------------
@@ -81,7 +135,7 @@ export function enrichToolResults(contentBlocks) {
81
135
  * Used by Codex, OpenCode, and Gemini handlers.
82
136
  * Mutates content blocks in-place. Best-effort.
83
137
  */
84
- export function enrichContentBlocks(contentBlocks) {
138
+ export function enrichContentBlocks(contentBlocks, context) {
85
139
  // Build local map from tool_use blocks in this array
86
140
  const localToolUses = new Map();
87
141
  for (const block of contentBlocks) {
@@ -101,7 +155,7 @@ export function enrichContentBlocks(contentBlocks) {
101
155
  const toolUse = localToolUses.get(toolUseId);
102
156
  if (!toolUse)
103
157
  continue;
104
- enrichBlock(block, toolUse.name, toolUse.input);
158
+ enrichBlock(block, toolUse.name, toolUse.input, context);
105
159
  }
106
160
  }
107
161
  // ---------------------------------------------------------------------------
@@ -111,7 +165,7 @@ export function enrichContentBlocks(contentBlocks) {
111
165
  * Enrich a single tool_result block with diff data.
112
166
  * Best-effort — swallows all errors.
113
167
  */
114
- function enrichBlock(block, toolName, toolInput) {
168
+ function enrichBlock(block, toolName, toolInput, context) {
115
169
  try {
116
170
  // Normalize tool names across SDKs (Claude: "Edit", Codex: "edit", etc.)
117
171
  const normalized = toolName.toLowerCase();
@@ -122,7 +176,7 @@ function enrichBlock(block, toolName, toolInput) {
122
176
  enrichWriteResult(block, toolInput);
123
177
  }
124
178
  else if (normalized === 'edit_files') {
125
- enrichEditFilesResult(block, toolInput);
179
+ enrichEditFilesResult(block, toolInput, context);
126
180
  }
127
181
  }
128
182
  catch {
@@ -234,16 +288,18 @@ function enrichWriteResult(block, input) {
234
288
  * No old/new content is provided — we reconstruct diffs by comparing
235
289
  * the current file (post-edit) against git HEAD.
236
290
  */
237
- function enrichEditFilesResult(block, input) {
291
+ function enrichEditFilesResult(block, input, context) {
238
292
  const changes = input.changes;
239
293
  if (!changes || changes.length === 0)
240
294
  return;
295
+ const workingDirectory = context?.workingDirectory;
241
296
  // Find git root once for relative path resolution
242
297
  let gitRoot;
243
298
  try {
244
299
  gitRoot = execSync('git rev-parse --show-toplevel', {
245
300
  encoding: 'utf-8',
246
301
  timeout: 5000,
302
+ ...(workingDirectory ? { cwd: workingDirectory } : {}),
247
303
  }).trim();
248
304
  }
249
305
  catch {
@@ -255,13 +311,16 @@ function enrichEditFilesResult(block, input) {
255
311
  continue;
256
312
  const kind = (change.kind || 'update');
257
313
  const filePath = change.path;
314
+ const resolvedPath = path.isAbsolute(filePath)
315
+ ? filePath
316
+ : path.resolve(workingDirectory || gitRoot, filePath);
258
317
  try {
259
318
  if (kind === 'add') {
260
319
  // New file — all additions
261
- const stat = fs.statSync(filePath);
320
+ const stat = fs.statSync(resolvedPath);
262
321
  if (stat.size > MAX_FILE_SIZE_BYTES)
263
322
  continue;
264
- const content = fs.readFileSync(filePath, 'utf-8');
323
+ const content = fs.readFileSync(resolvedPath, 'utf-8');
265
324
  const patch = structuredPatch(filePath, filePath, '', content, '', '', {
266
325
  context: 0,
267
326
  });
@@ -271,11 +330,12 @@ function enrichEditFilesResult(block, input) {
271
330
  }
272
331
  else if (kind === 'delete') {
273
332
  // 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
- });
333
+ const relativePath = resolveRepoRelativePath(gitRoot, resolvedPath);
334
+ if (!relativePath)
335
+ continue;
336
+ const oldContent = gitShowHeadFile(gitRoot, relativePath);
337
+ if (oldContent === null)
338
+ continue;
279
339
  const patch = structuredPatch(filePath, filePath, oldContent, '', '', '', {
280
340
  context: CONTEXT_LINES,
281
341
  });
@@ -285,19 +345,15 @@ function enrichEditFilesResult(block, input) {
285
345
  }
286
346
  else {
287
347
  // Update — diff git HEAD vs current file
288
- const stat = fs.statSync(filePath);
348
+ const stat = fs.statSync(resolvedPath);
289
349
  if (stat.size > MAX_FILE_SIZE_BYTES)
290
350
  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 {
351
+ const currentContent = fs.readFileSync(resolvedPath, 'utf-8');
352
+ const relativePath = resolveRepoRelativePath(gitRoot, resolvedPath);
353
+ if (!relativePath)
354
+ continue;
355
+ const oldContent = gitShowHeadFile(gitRoot, relativePath);
356
+ if (oldContent === null) {
301
357
  // File may be new (not in HEAD) — treat as addition
302
358
  const patch = structuredPatch(filePath, filePath, '', currentContent, '', '', {
303
359
  context: 0,
@@ -327,3 +383,20 @@ function enrichEditFilesResult(block, input) {
327
383
  };
328
384
  }
329
385
  }
386
+ function gitShowHeadFile(gitRoot, relativePath) {
387
+ // Ensure the ref path is safe and uses git's forward-slash separator.
388
+ const normalized = path.posix.normalize(relativePath.split(path.sep).join('/'));
389
+ if (!isSafeRepoRelativePath(normalized)) {
390
+ return null;
391
+ }
392
+ try {
393
+ return execFileSync('git', ['show', `HEAD:${normalized}`], {
394
+ encoding: 'utf-8',
395
+ timeout: 5000,
396
+ cwd: gitRoot,
397
+ });
398
+ }
399
+ catch {
400
+ return null;
401
+ }
402
+ }
@@ -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":"AAAA;;;;;;;GAOG;AAQH,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,0BAA0B,EAC1B,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAEzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAEd,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,MAAM,EAEZ,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA0E5F;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7D;AAED;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAE3B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAE9B,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAE9B,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACrD;AAED,qBAAa,UAAW,YAAW,KAAK;IAOpC,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,YAAY,CAAC;IAErB,OAAO,CAAC,eAAe,CAAC;IAIxB,OAAO,CAAC,YAAY,CAAC;IAbvB,QAAQ,CAAC,QAAQ,EAAG,aAAa,CAAU;IAC3C,QAAQ,CAAC,IAAI,iBAAiB;IAE9B,OAAO,CAAC,aAAa,CAAC,CAAsB;gBAGlC,YAAY,CAAC,EAAE,kBAAkB,YAAA,EACjC,YAAY,CAAC,EAAE,iBAAiB,YAAA,EACxC,MAAM,CAAC,EAAE,MAAM,EACP,eAAe,CAAC,EAAE,eAAe,YAAA,EACzC,cAAc,CAAC,EAAE,0BAA0B,EAC3C,aAAa,CAAC,EAAE,mBAAmB,EACnC,iBAAiB,CAAC,EAAE,iBAAiB,EAC7B,YAAY,CAAC,EAAE,YAAY,YAAA,EACnC,eAAe,CAAC,EAAE,eAAe,EACjC,aAAa,CAAC,EAAE,kBAAkB,EAClC,SAAS,CAAC,EAAE,cAAc,EAC1B,UAAU,CAAC,EAAE,OAAO,EACpB,cAAc,CAAC,EAAE,OAAO,EAAE,+EAA+E;IACzG,mBAAmB,CAAC,EAAE,OAAO,4CAA4C,EAAE,mBAAmB,EAC9F,SAAS,CAAC,EAAE,OAAO,gCAAgC,EAAE,eAAe;IAsBtE,eAAe,IAAI,gBAAgB;IAY7B,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAWlC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC;IA6BrF;;;;;;;;;;;;;;OAcG;IACG,0BAA0B,CAC9B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,cAAc,EAC/B,kBAAkB,CAAC,EAAE,OAAO,SAAS,EAAE,kBAAkB,EACzD,eAAe,CAAC,EAAE,eAAe,EACjC,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC;QACT,aAAa,EAAE,SAAS,CAAC;QACzB,mBAAmB,EAAE,SAAS,EAAE,CAAC;QACjC,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,cAAc,CAAC,EAAE,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;QAC3D,mFAAmF;QACnF,eAAe,CAAC,EAAE,OAAO,gBAAgB,EAAE,iCAAiC,CAAC;QAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,oGAAoG;QACpG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IA+lBF;;;OAGG;YACW,qBAAqB;IA0CnC;;;;;;;;OAQG;IACG,aAAa,CACjB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,EACf,cAAc,CAAC,EAAE,cAAc,EAC/B,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC;QACT,aAAa,EAAE,SAAS,CAAC;QACzB,mBAAmB,EAAE,SAAS,EAAE,CAAC;QACjC,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,cAAc,CAAC,EAAE,OAAO,gBAAgB,EAAE,gBAAgB,CAAC;QAC3D,mFAAmF;QACnF,eAAe,CAAC,EAAE,OAAO,gBAAgB,EAAE,iCAAiC,CAAC;QAC7E,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,oGAAoG;QACpG,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IA6PF;;;;;;;;OAQG;IACG,QAAQ,CACZ,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,OAAO,CAAC;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAA;SAAE,CAAC,CAAC;QAC1F,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IA2BF;;;;;OAKG;IACH,qBAAqB,CAAC,YAAY,EAAE,cAAc,GAAG,qBAAqB;IAM1E;;;;;;;;;;;;;;;;;;;OAmBG;IACH;;;;;;;;;;;;;;;OAeG;IACG,oBAAoB,CACxB,SAAS,EAAE,MAAM,EACjB,cAAc,CAAC,EAAE,MAAM,EACvB,sBAAsB,CAAC,EAAE,OAAO,GAC/B,OAAO,CAAC,MAAM,CAAC;CAMnB"}
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[];
@@ -28,12 +28,15 @@ export declare class CodexTool implements ITool {
28
28
  private promptService?;
29
29
  private messagesRepo?;
30
30
  private sessionsRepo?;
31
+ private worktreesRepo?;
31
32
  private messagesService?;
32
33
  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
34
+ private tasksStreamingService?;
35
+ 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
36
  mcpServerRepo?: MCPServerRepository, usersRepo?: UsersRepository);
35
37
  getCapabilities(): ToolCapabilities;
36
38
  checkInstalled(): Promise<boolean>;
39
+ private emitTaskEvent;
37
40
  /**
38
41
  * Execute a prompt against a session WITH real-time streaming
39
42
  *
@@ -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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"}
@@ -18,14 +18,18 @@ export class CodexTool {
18
18
  promptService;
19
19
  messagesRepo;
20
20
  sessionsRepo;
21
+ worktreesRepo;
21
22
  messagesService;
22
23
  tasksService;
23
- constructor(messagesRepo, sessionsRepo, sessionMCPServerRepo, worktreesRepo, reposRepo, apiKey, messagesService, tasksService, _useNativeAuth, // Codex doesn't have OAuth fallback, but accept for interface consistency
24
+ tasksStreamingService;
25
+ constructor(messagesRepo, sessionsRepo, sessionMCPServerRepo, worktreesRepo, reposRepo, apiKey, messagesService, tasksService, tasksStreamingService, _useNativeAuth, // Codex doesn't have OAuth fallback, but accept for interface consistency
24
26
  mcpServerRepo, usersRepo) {
25
27
  this.messagesRepo = messagesRepo;
26
28
  this.sessionsRepo = sessionsRepo;
29
+ this.worktreesRepo = worktreesRepo;
27
30
  this.messagesService = messagesService;
28
31
  this.tasksService = tasksService;
32
+ this.tasksStreamingService = tasksStreamingService;
29
33
  if (messagesRepo && sessionsRepo) {
30
34
  this.promptService = new CodexPromptService(messagesRepo, sessionsRepo, sessionMCPServerRepo, worktreesRepo, reposRepo, apiKey, mcpServerRepo, usersRepo);
31
35
  }
@@ -51,6 +55,14 @@ export class CodexTool {
51
55
  return false;
52
56
  }
53
57
  }
58
+ async emitTaskEvent(event, data) {
59
+ if (this.tasksStreamingService) {
60
+ await this.tasksStreamingService.create({ event, data });
61
+ return;
62
+ }
63
+ // Fallback for environments that don't expose /tasks/streaming.
64
+ this.tasksService?.emit(event, data);
65
+ }
54
66
  /**
55
67
  * Execute a prompt against a session WITH real-time streaming
56
68
  *
@@ -88,6 +100,15 @@ export class CodexTool {
88
100
  let rawSdkResponse;
89
101
  let streamStarted = false; // tracks whether onStreamStart succeeded (for safe onStreamEnd)
90
102
  let wasStopped = false;
103
+ let workingDirectory;
104
+ const pendingToolMessageIds = new Map();
105
+ if (this.sessionsRepo && this.worktreesRepo) {
106
+ const session = await this.sessionsRepo.findById(sessionId);
107
+ if (session) {
108
+ const worktree = await this.worktreesRepo.findById(session.worktree_id);
109
+ workingDirectory = worktree?.path;
110
+ }
111
+ }
91
112
  for await (const event of this.promptService.promptSessionStreaming(sessionId, prompt, taskId, permissionMode, abortController)) {
92
113
  // Detect if execution was stopped early
93
114
  if (event.type === 'stopped') {
@@ -104,6 +125,35 @@ export class CodexTool {
104
125
  resolvedModel = event.resolvedModel;
105
126
  }
106
127
  }
128
+ // Handle tool execution start (live UI indicator)
129
+ if (event.type === 'tool_start') {
130
+ if (taskId) {
131
+ await this.emitTaskEvent('tool:start', {
132
+ task_id: taskId,
133
+ session_id: sessionId,
134
+ tool_use_id: event.toolUse.id,
135
+ tool_name: event.toolUse.name,
136
+ });
137
+ }
138
+ // Create tool row immediately so UI shows "running" state.
139
+ const toolMessageId = generateId();
140
+ await this.createAssistantMessage(sessionId, toolMessageId, [
141
+ {
142
+ type: 'tool_use',
143
+ id: event.toolUse.id,
144
+ name: event.toolUse.name,
145
+ input: event.toolUse.input,
146
+ },
147
+ ], [
148
+ {
149
+ id: event.toolUse.id,
150
+ name: event.toolUse.name,
151
+ input: event.toolUse.input,
152
+ },
153
+ ], taskId, nextIndex++, resolvedModel);
154
+ assistantMessageIds.push(toolMessageId);
155
+ pendingToolMessageIds.set(event.toolUse.id, toolMessageId);
156
+ }
107
157
  if (event.type === 'complete' && event.usage) {
108
158
  tokenUsage = event.usage;
109
159
  }
@@ -169,8 +219,18 @@ export class CodexTool {
169
219
  }
170
220
  // Handle tool completion (create message immediately for live updates)
171
221
  else if (event.type === 'tool_complete') {
172
- // Create a message for this tool use immediately
173
- const toolMessageId = generateId();
222
+ if (taskId) {
223
+ await this.emitTaskEvent('tool:complete', {
224
+ task_id: taskId,
225
+ session_id: sessionId,
226
+ tool_use_id: event.toolUse.id,
227
+ });
228
+ }
229
+ const toolResultContent = event.toolUse.output !== undefined
230
+ ? event.toolUse.output
231
+ : event.toolUse.status
232
+ ? `[${event.toolUse.status}]`
233
+ : '';
174
234
  const toolContent = [
175
235
  {
176
236
  type: 'tool_use',
@@ -183,34 +243,50 @@ export class CodexTool {
183
243
  {
184
244
  type: 'tool_result',
185
245
  tool_use_id: event.toolUse.id,
186
- content: event.toolUse.output || `[${event.toolUse.status}]`,
246
+ content: toolResultContent,
187
247
  is_error: event.toolUse.status === 'failed' || event.toolUse.status === 'error',
188
248
  },
189
249
  ]
190
250
  : []),
191
251
  ];
192
252
  // Best-effort diff enrichment for Edit/Write tool results
193
- enrichContentBlocks(toolContent);
194
- await this.createAssistantMessage(sessionId, toolMessageId, toolContent, [
195
- {
196
- id: event.toolUse.id,
197
- name: event.toolUse.name,
198
- input: event.toolUse.input,
199
- },
200
- ], taskId, nextIndex++, resolvedModel);
201
- assistantMessageIds.push(toolMessageId);
253
+ enrichContentBlocks(toolContent, { workingDirectory });
254
+ const existingToolMessageId = pendingToolMessageIds.get(event.toolUse.id);
255
+ if (existingToolMessageId) {
256
+ await this.messagesService?.patch(existingToolMessageId, {
257
+ content: toolContent,
258
+ content_preview: typeof toolResultContent === 'string' ? toolResultContent.substring(0, 200) : '',
259
+ });
260
+ pendingToolMessageIds.delete(event.toolUse.id);
261
+ }
262
+ else {
263
+ // Fallback path if start event wasn't observed.
264
+ const toolMessageId = generateId();
265
+ await this.createAssistantMessage(sessionId, toolMessageId, toolContent, [
266
+ {
267
+ id: event.toolUse.id,
268
+ name: event.toolUse.name,
269
+ input: event.toolUse.input,
270
+ },
271
+ ], taskId, nextIndex++, resolvedModel);
272
+ assistantMessageIds.push(toolMessageId);
273
+ }
202
274
  }
203
275
  // Handle complete message (save to database)
204
276
  else if (event.type === 'complete' && event.content) {
205
277
  const usageForMessage = event.usage ?? tokenUsage;
206
- // Filter out tool_use and tool_result blocks (already saved via tool_complete events)
207
- // But KEEP text blocks - these contain the response
208
- const textOnlyContent = event.content.filter((block) => block.type === 'text' // Only keep text blocks
209
- );
210
- // Only create message if there's text content (not just tools)
211
- if (textOnlyContent.length > 0) {
278
+ // Filter out tool_use and tool_result blocks (already saved via tool_complete events),
279
+ // but keep text + thinking blocks so Codex reasoning is visible in the UI.
280
+ const nonToolContent = event.content.filter((block) => block.type === 'text' || block.type === 'thinking');
281
+ // Only create message if there's non-tool content (not just tools)
282
+ if (nonToolContent.length > 0) {
212
283
  // Extract full text for streaming callback
213
- const fullText = textOnlyContent
284
+ const fullText = nonToolContent
285
+ .filter((block) => block.type === 'text')
286
+ .map((block) => block.text || '')
287
+ .join('');
288
+ const fullThinking = nonToolContent
289
+ .filter((block) => block.type === 'thinking')
214
290
  .map((block) => block.text || '')
215
291
  .join('');
216
292
  // Use existing message ID from streaming (if any) or generate new
@@ -247,8 +323,26 @@ export class CodexTool {
247
323
  }
248
324
  }
249
325
  }
250
- // Create complete message in DB (text only, tools already saved)
251
- await this.createAssistantMessage(sessionId, assistantMessageId, textOnlyContent, undefined, // No tool uses in this message (already saved separately)
326
+ // Codex reasoning is not token-streamed by SDK. Emit a synthetic single
327
+ // thinking chunk so users see reasoning activity in real time.
328
+ if (streamingCallbacks && fullThinking && !fullText) {
329
+ try {
330
+ if (streamingCallbacks.onThinkingStart) {
331
+ await streamingCallbacks.onThinkingStart(assistantMessageId, {});
332
+ }
333
+ if (streamingCallbacks.onThinkingChunk) {
334
+ await streamingCallbacks.onThinkingChunk(assistantMessageId, fullThinking);
335
+ }
336
+ if (streamingCallbacks.onThinkingEnd) {
337
+ await streamingCallbacks.onThinkingEnd(assistantMessageId);
338
+ }
339
+ }
340
+ catch (err) {
341
+ console.error(`[Codex] Thinking callback failed for ${assistantMessageId}:`, err);
342
+ }
343
+ }
344
+ // Create complete message in DB (non-tool content only, tools already saved)
345
+ await this.createAssistantMessage(sessionId, assistantMessageId, nonToolContent, undefined, // No tool uses in this message (already saved separately)
252
346
  taskId, nextIndex++, resolvedModel, usageForMessage);
253
347
  assistantMessageIds.push(assistantMessageId);
254
348
  // Reset for next message
@@ -321,10 +415,14 @@ export class CodexTool {
321
415
  * @private
322
416
  */
323
417
  async createAssistantMessage(sessionId, messageId, content, toolUses, taskId, nextIndex, resolvedModel, tokenUsage) {
324
- // Extract text content for preview
418
+ // Extract preview text (prefer normal text, then thinking text)
325
419
  const textBlocks = content.filter((b) => b.type === 'text').map((b) => b.text || '');
326
420
  const fullTextContent = textBlocks.join('');
327
- const contentPreview = fullTextContent.substring(0, 200);
421
+ const fallbackThinking = content
422
+ .filter((b) => b.type === 'thinking')
423
+ .map((b) => b.text || '')
424
+ .join('');
425
+ const contentPreview = (fullTextContent || fallbackThinking).substring(0, 200);
328
426
  const message = {
329
427
  message_id: messageId,
330
428
  session_id: sessionId,
@@ -61,7 +61,7 @@ export type CodexStreamEvent = {
61
61
  id: string;
62
62
  name: string;
63
63
  input: Record<string, unknown>;
64
- output?: string;
64
+ output?: string | Array<Record<string, unknown>>;
65
65
  status?: string;
66
66
  };
67
67
  threadId?: string;
@@ -151,6 +151,12 @@ export declare class CodexPromptService {
151
151
  * @returns Number of MCP servers configured
152
152
  */
153
153
  private ensureCodexConfig;
154
+ /**
155
+ * Convert Codex todo_list items to TodoWrite-compatible payload.
156
+ * Codex only provides completed:boolean, so we infer a single in_progress
157
+ * item as the first remaining incomplete step for better UI parity.
158
+ */
159
+ private codexTodosToTodoWriteInput;
154
160
  /**
155
161
  * Convert Codex item to ToolUse format
156
162
  * Maps different Codex item types to Agor tool use schema
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-service.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/codex/prompt-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompt-service.d.ts","sourceRoot":"","sources":["../../../src/sdk-handlers/codex/prompt-service.ts"],"names":[],"mappings":"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"}