newcraw 1.0.2 → 1.0.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 (220) hide show
  1. package/dist/REPL-DECTPCL5.js +50 -0
  2. package/dist/{acp-J4WDYGRX.js → acp-HA476EHW.js} +69 -40
  3. package/dist/acp-HA476EHW.js.map +7 -0
  4. package/dist/{agentsValidate-UBOER2IN.js → agentsValidate-EDPFUUMG.js} +13 -10
  5. package/dist/{agentsValidate-UBOER2IN.js.map → agentsValidate-EDPFUUMG.js.map} +1 -1
  6. package/dist/{ask-MGUO3L35.js → ask-5SP4YYRD.js} +62 -52
  7. package/dist/ask-5SP4YYRD.js.map +7 -0
  8. package/dist/{autoUpdater-2GS6LRPK.js → autoUpdater-FFMM2DR7.js} +5 -4
  9. package/dist/chunk-2BVCVKKB.js +135 -0
  10. package/dist/chunk-2BVCVKKB.js.map +7 -0
  11. package/dist/{chunk-2C43OXE7.js → chunk-2JCTO2EY.js} +38 -59
  12. package/dist/chunk-2JCTO2EY.js.map +7 -0
  13. package/dist/{chunk-OJIMOLIC.js → chunk-3CKC4ABU.js} +3631 -7464
  14. package/dist/chunk-3CKC4ABU.js.map +7 -0
  15. package/dist/chunk-ARCEUG3V.js +88 -0
  16. package/dist/chunk-ARCEUG3V.js.map +7 -0
  17. package/dist/{chunk-RUXIBQ3B.js → chunk-BJYXLCRS.js} +4 -4
  18. package/dist/{chunk-VKI7ORIO.js → chunk-BMKE6FT5.js} +37 -18
  19. package/dist/{chunk-VKI7ORIO.js.map → chunk-BMKE6FT5.js.map} +1 -1
  20. package/dist/chunk-BQCOSNM3.js +93 -0
  21. package/dist/chunk-BQCOSNM3.js.map +7 -0
  22. package/dist/chunk-CHB5K4GI.js +107 -0
  23. package/dist/chunk-CHB5K4GI.js.map +7 -0
  24. package/dist/chunk-D4OZACS2.js +35 -0
  25. package/dist/chunk-EHQ2M5B4.js +166 -0
  26. package/dist/{chunk-ZYSVG4X3.js.map → chunk-EHQ2M5B4.js.map} +2 -2
  27. package/dist/chunk-EUBZGAIN.js +372 -0
  28. package/dist/chunk-EUBZGAIN.js.map +7 -0
  29. package/dist/{chunk-UYRR6F5S.js → chunk-FIMCETCB.js} +9 -3
  30. package/dist/{chunk-UYRR6F5S.js.map → chunk-FIMCETCB.js.map} +1 -1
  31. package/dist/{chunk-DEF3KFP7.js → chunk-GVLJUD6R.js} +4 -2
  32. package/dist/{chunk-DEF3KFP7.js.map → chunk-GVLJUD6R.js.map} +1 -1
  33. package/dist/chunk-HLBLZKZH.js +45 -0
  34. package/dist/chunk-HLBLZKZH.js.map +7 -0
  35. package/dist/{chunk-XS6PU75S.js → chunk-IVWPPTDM.js} +1 -1
  36. package/dist/{chunk-A7X6OCZE.js → chunk-IXFBUXQW.js} +1 -1
  37. package/dist/{chunk-HSJ6HYAO.js → chunk-IZZTKEZH.js} +18 -10
  38. package/dist/chunk-IZZTKEZH.js.map +7 -0
  39. package/dist/{chunk-2EFL22PV.js → chunk-JI4HCLK7.js} +7 -3
  40. package/dist/chunk-JI4HCLK7.js.map +7 -0
  41. package/dist/chunk-JLVECHVJ.js +36 -0
  42. package/dist/chunk-JLVECHVJ.js.map +7 -0
  43. package/dist/{chunk-XXU2NVOE.js → chunk-KJTPUTU7.js} +30 -6
  44. package/dist/chunk-KJTPUTU7.js.map +7 -0
  45. package/dist/{chunk-V5U6BHT2.js → chunk-KS646CDL.js} +7 -3
  46. package/dist/{chunk-V5U6BHT2.js.map → chunk-KS646CDL.js.map} +1 -1
  47. package/dist/{chunk-53A4JHFW.js → chunk-MJ3MLGVB.js} +23 -4
  48. package/dist/chunk-MJ3MLGVB.js.map +7 -0
  49. package/dist/chunk-MJLWBVZP.js +822 -0
  50. package/dist/chunk-MJLWBVZP.js.map +7 -0
  51. package/dist/chunk-MMF5RMLU.js +65 -0
  52. package/dist/chunk-MMF5RMLU.js.map +7 -0
  53. package/dist/{chunk-QH2M65BR.js → chunk-MUW3J7CP.js} +7 -3
  54. package/dist/{chunk-QH2M65BR.js.map → chunk-MUW3J7CP.js.map} +1 -1
  55. package/dist/{chunk-3LMXSKZ7.js → chunk-NFXLN6FJ.js} +1 -1
  56. package/dist/chunk-NT7RDVDA.js +33 -0
  57. package/dist/{chunk-KQSHIOZK.js.map → chunk-NT7RDVDA.js.map} +1 -1
  58. package/dist/{chunk-OZHBEG7U.js → chunk-O4EKE3YR.js} +15 -5
  59. package/dist/{chunk-OZHBEG7U.js.map → chunk-O4EKE3YR.js.map} +1 -1
  60. package/dist/chunk-Q2OBTLBI.js +5473 -0
  61. package/dist/chunk-Q2OBTLBI.js.map +7 -0
  62. package/dist/{chunk-WWDVA4NV.js → chunk-QJ7MQIHN.js} +22 -6
  63. package/dist/{chunk-WWDVA4NV.js.map → chunk-QJ7MQIHN.js.map} +1 -1
  64. package/dist/{chunk-N5OHRWG2.js → chunk-QSRXXZO7.js} +4 -2
  65. package/dist/{chunk-N5OHRWG2.js.map → chunk-QSRXXZO7.js.map} +1 -1
  66. package/dist/{chunk-GZTCXXSS.js → chunk-QT5GS374.js} +57 -46
  67. package/dist/{chunk-GZTCXXSS.js.map → chunk-QT5GS374.js.map} +1 -1
  68. package/dist/chunk-QX5Y5CE5.js +683 -0
  69. package/dist/{chunk-F3COCCAE.js.map → chunk-QX5Y5CE5.js.map} +1 -1
  70. package/dist/{chunk-IIFUDVGS.js → chunk-U6IF5D3J.js} +310 -177
  71. package/dist/chunk-U6IF5D3J.js.map +7 -0
  72. package/dist/{chunk-VQSCECTS.js → chunk-UPRKGNBR.js} +6 -4
  73. package/dist/{chunk-VQSCECTS.js.map → chunk-UPRKGNBR.js.map} +1 -1
  74. package/dist/chunk-UUCRNFMH.js +62 -0
  75. package/dist/chunk-UUCRNFMH.js.map +7 -0
  76. package/dist/chunk-UYWZQVH5.js +35 -0
  77. package/dist/chunk-UYWZQVH5.js.map +7 -0
  78. package/dist/{chunk-XMGUQHMF.js → chunk-VSSVN6WG.js} +11 -1
  79. package/dist/chunk-VSSVN6WG.js.map +7 -0
  80. package/dist/{chunk-VHS2MZQS.js → chunk-W7Q3VYAB.js} +9 -6
  81. package/dist/{chunk-VHS2MZQS.js.map → chunk-W7Q3VYAB.js.map} +1 -1
  82. package/dist/{chunk-JWXQNBBA.js → chunk-WAXMRSVR.js} +7 -1
  83. package/dist/{chunk-JWXQNBBA.js.map → chunk-WAXMRSVR.js.map} +1 -1
  84. package/dist/{chunk-BWYKUDJR.js → chunk-X3NER6FY.js} +14 -8
  85. package/dist/{chunk-BWYKUDJR.js.map → chunk-X3NER6FY.js.map} +1 -1
  86. package/dist/{chunk-IM33F5CM.js → chunk-XYQZLDRB.js} +1668 -1623
  87. package/dist/chunk-XYQZLDRB.js.map +7 -0
  88. package/dist/{chunk-LOIZNQOU.js → chunk-ZM5FMRLS.js} +9 -3
  89. package/dist/{chunk-LOIZNQOU.js.map → chunk-ZM5FMRLS.js.map} +1 -1
  90. package/dist/{chunk-755HIAI3.js → chunk-ZMO4E7IW.js} +3 -42
  91. package/dist/chunk-ZMO4E7IW.js.map +7 -0
  92. package/dist/{cli-KZGF3FV5.js → cli-4KO6TA5J.js} +251 -485
  93. package/dist/cli-4KO6TA5J.js.map +7 -0
  94. package/dist/commands-JSY7CGSU.js +54 -0
  95. package/dist/{config-GTJWCNPF.js → config-DQEFVW3Y.js} +9 -6
  96. package/dist/{context-WF3TTXQU.js → context-HVQCTO5R.js} +8 -7
  97. package/dist/{costTracker-2G3ZI2JF.js → costTracker-VSWW7SRT.js} +3 -2
  98. package/dist/{customCommands-QOWK57EX.js → customCommands-XCINU5TG.js} +6 -5
  99. package/dist/{env-37BAP7QF.js → env-ZOPEXWMF.js} +10 -7
  100. package/dist/{gateway-IZYO6YFJ.js → gateway-SUXSILQL.js} +542 -96
  101. package/dist/gateway-SUXSILQL.js.map +7 -0
  102. package/dist/identity-3KZQQVBG.js +16 -0
  103. package/dist/index.js +8 -6
  104. package/dist/index.js.map +1 -1
  105. package/dist/{kodeAgentSessionId-KTGFX2BE.js → kodeAgentSessionId-4SH24DVH.js} +1 -1
  106. package/dist/{kodeAgentSessionLoad-6F7SJXBC.js → kodeAgentSessionLoad-HB3BYVNG.js} +6 -5
  107. package/dist/{kodeAgentSessionResume-UEEDRJ3N.js → kodeAgentSessionResume-IGSZZY3G.js} +6 -5
  108. package/dist/{kodeAgentStreamJson-VIXFTYL5.js → kodeAgentStreamJson-4ZKIWKS3.js} +4 -2
  109. package/dist/{kodeAgentStreamJsonSession-XC3IPREZ.js → kodeAgentStreamJsonSession-4L76UC75.js} +15 -4
  110. package/dist/kodeAgentStreamJsonSession-4L76UC75.js.map +7 -0
  111. package/dist/{kodeAgentStructuredStdio-SI5C7AAD.js → kodeAgentStructuredStdio-5DCUC6V6.js} +3 -3
  112. package/dist/{kodeHooks-V36SHCTC.js → kodeHooks-H6DMC3XX.js} +6 -5
  113. package/dist/{llm-CYUDKJNR.js → llm-OJZ6DZVC.js} +306 -60
  114. package/dist/llm-OJZ6DZVC.js.map +7 -0
  115. package/dist/{llmLazy-IXVVBRTN.js → llmLazy-TDLZZDPL.js} +2 -2
  116. package/dist/{loader-OEJ6C3TN.js → loader-MOVYZ76M.js} +6 -5
  117. package/dist/{mcp-KE3SILMX.js → mcp-DUYSIR5L.js} +10 -9
  118. package/dist/{mentionProcessor-GAU2WAYB.js → mentionProcessor-EKVLXJN4.js} +14 -7
  119. package/dist/{mentionProcessor-GAU2WAYB.js.map → mentionProcessor-EKVLXJN4.js.map} +1 -1
  120. package/dist/{messages-WCSGGSEU.js → messages-23ICFVMC.js} +2 -2
  121. package/dist/{model-4TQIV5J2.js → model-FUBCTRTV.js} +10 -7
  122. package/dist/{openai-KTZV6F7N.js → openai-SMYIAIO4.js} +8 -7
  123. package/dist/{outputStyles-WX5RYQOA.js → outputStyles-HBOYJFBE.js} +6 -5
  124. package/dist/{pluginRuntime-JXMJZ2LC.js → pluginRuntime-ATZMDZA7.js} +11 -8
  125. package/dist/{pluginRuntime-JXMJZ2LC.js.map → pluginRuntime-ATZMDZA7.js.map} +1 -1
  126. package/dist/{pluginValidation-JNQZYLUP.js → pluginValidation-7CGOMT6F.js} +8 -7
  127. package/dist/prompts-MFESKNYZ.js +58 -0
  128. package/dist/query-BFEFOX4S.js +58 -0
  129. package/dist/{responsesStreaming-2AIT6GHG.js → responsesStreaming-JORGEFQC.js} +1 -1
  130. package/dist/{ripgrep-KDPQAMB2.js → ripgrep-KNJBCJIQ.js} +5 -4
  131. package/dist/sandbox-P3FR4G4D.js +63 -0
  132. package/dist/{skillMarketplace-IXAGP3Q2.js → skillMarketplace-PCMKVV4O.js} +5 -4
  133. package/dist/{state-MSCYLB6Y.js → state-XBYIQ7R4.js} +6 -3
  134. package/dist/structuredOutput-KAVFUV2Z.js +9 -0
  135. package/dist/theme-4ZSXUILR.js +15 -0
  136. package/dist/thinking-TTNUZUB3.js +18 -0
  137. package/dist/{toolPermissionContext-I3IXPVED.js → toolPermissionContext-JCQ5MFUT.js} +1 -1
  138. package/dist/toolPermissionContext-JCQ5MFUT.js.map +7 -0
  139. package/dist/toolPermissionContextState-R6ZGMKP6.js +24 -0
  140. package/dist/toolPermissionContextState-R6ZGMKP6.js.map +7 -0
  141. package/dist/{toolPermissionSettings-EUZKGZU2.js → toolPermissionSettings-GMEYTJEA.js} +9 -8
  142. package/dist/toolPermissionSettings-GMEYTJEA.js.map +7 -0
  143. package/dist/tools-7FVKB7BG.js +55 -0
  144. package/dist/tools-7FVKB7BG.js.map +7 -0
  145. package/dist/{userInput-LJL4CVOB.js → userInput-SZEUY5J6.js} +49 -34
  146. package/dist/{userInput-LJL4CVOB.js.map → userInput-SZEUY5J6.js.map} +1 -1
  147. package/dist/{uuid-VA3KVASX.js → uuid-RQH3OZ3W.js} +1 -1
  148. package/dist/uuid-RQH3OZ3W.js.map +7 -0
  149. package/dist/workspace-EP63OB5S.js +21 -0
  150. package/dist/workspace-EP63OB5S.js.map +7 -0
  151. package/package.json +2 -2
  152. package/web/dist/assets/index-XuLVvSQF.js +251 -0
  153. package/web/dist/assets/index-pSid9IlY.css +10 -0
  154. package/web/dist/index.html +2 -2
  155. package/dist/REPL-IAK7ZN2Z.js +0 -42
  156. package/dist/acp-J4WDYGRX.js.map +0 -7
  157. package/dist/ask-MGUO3L35.js.map +0 -7
  158. package/dist/chunk-2C43OXE7.js.map +0 -7
  159. package/dist/chunk-2EFL22PV.js.map +0 -7
  160. package/dist/chunk-53A4JHFW.js.map +0 -7
  161. package/dist/chunk-755HIAI3.js.map +0 -7
  162. package/dist/chunk-AXWJI6N5.js +0 -11
  163. package/dist/chunk-F3COCCAE.js +0 -654
  164. package/dist/chunk-HSJ6HYAO.js.map +0 -7
  165. package/dist/chunk-IIFUDVGS.js.map +0 -7
  166. package/dist/chunk-IM33F5CM.js.map +0 -7
  167. package/dist/chunk-KQSHIOZK.js +0 -24
  168. package/dist/chunk-OJIMOLIC.js.map +0 -7
  169. package/dist/chunk-XMGUQHMF.js.map +0 -7
  170. package/dist/chunk-XXU2NVOE.js.map +0 -7
  171. package/dist/chunk-ZYSVG4X3.js +0 -151
  172. package/dist/cli-KZGF3FV5.js.map +0 -7
  173. package/dist/commands-AVEBLFVS.js +0 -46
  174. package/dist/gateway-IZYO6YFJ.js.map +0 -7
  175. package/dist/kodeAgentStreamJsonSession-XC3IPREZ.js.map +0 -7
  176. package/dist/llm-CYUDKJNR.js.map +0 -7
  177. package/dist/prompts-LE6GK75N.js +0 -48
  178. package/dist/query-GGIP6PWG.js +0 -50
  179. package/dist/theme-GAMFOLBW.js +0 -14
  180. package/dist/tools-3HOUIDM3.js +0 -47
  181. package/web/dist/assets/index-COAJqX1Z.css +0 -1
  182. package/web/dist/assets/index-CzS_4LmC.js +0 -179
  183. /package/dist/{REPL-IAK7ZN2Z.js.map → REPL-DECTPCL5.js.map} +0 -0
  184. /package/dist/{autoUpdater-2GS6LRPK.js.map → autoUpdater-FFMM2DR7.js.map} +0 -0
  185. /package/dist/{chunk-RUXIBQ3B.js.map → chunk-BJYXLCRS.js.map} +0 -0
  186. /package/dist/{chunk-AXWJI6N5.js.map → chunk-D4OZACS2.js.map} +0 -0
  187. /package/dist/{chunk-XS6PU75S.js.map → chunk-IVWPPTDM.js.map} +0 -0
  188. /package/dist/{chunk-A7X6OCZE.js.map → chunk-IXFBUXQW.js.map} +0 -0
  189. /package/dist/{chunk-3LMXSKZ7.js.map → chunk-NFXLN6FJ.js.map} +0 -0
  190. /package/dist/{commands-AVEBLFVS.js.map → commands-JSY7CGSU.js.map} +0 -0
  191. /package/dist/{config-GTJWCNPF.js.map → config-DQEFVW3Y.js.map} +0 -0
  192. /package/dist/{context-WF3TTXQU.js.map → context-HVQCTO5R.js.map} +0 -0
  193. /package/dist/{costTracker-2G3ZI2JF.js.map → costTracker-VSWW7SRT.js.map} +0 -0
  194. /package/dist/{customCommands-QOWK57EX.js.map → customCommands-XCINU5TG.js.map} +0 -0
  195. /package/dist/{env-37BAP7QF.js.map → env-ZOPEXWMF.js.map} +0 -0
  196. /package/dist/{kodeAgentSessionId-KTGFX2BE.js.map → identity-3KZQQVBG.js.map} +0 -0
  197. /package/dist/{kodeAgentSessionLoad-6F7SJXBC.js.map → kodeAgentSessionId-4SH24DVH.js.map} +0 -0
  198. /package/dist/{kodeAgentSessionResume-UEEDRJ3N.js.map → kodeAgentSessionLoad-HB3BYVNG.js.map} +0 -0
  199. /package/dist/{kodeAgentStreamJson-VIXFTYL5.js.map → kodeAgentSessionResume-IGSZZY3G.js.map} +0 -0
  200. /package/dist/{kodeAgentStructuredStdio-SI5C7AAD.js.map → kodeAgentStreamJson-4ZKIWKS3.js.map} +0 -0
  201. /package/dist/{kodeHooks-V36SHCTC.js.map → kodeAgentStructuredStdio-5DCUC6V6.js.map} +0 -0
  202. /package/dist/{llmLazy-IXVVBRTN.js.map → kodeHooks-H6DMC3XX.js.map} +0 -0
  203. /package/dist/{loader-OEJ6C3TN.js.map → llmLazy-TDLZZDPL.js.map} +0 -0
  204. /package/dist/{mcp-KE3SILMX.js.map → loader-MOVYZ76M.js.map} +0 -0
  205. /package/dist/{messages-WCSGGSEU.js.map → mcp-DUYSIR5L.js.map} +0 -0
  206. /package/dist/{model-4TQIV5J2.js.map → messages-23ICFVMC.js.map} +0 -0
  207. /package/dist/{openai-KTZV6F7N.js.map → model-FUBCTRTV.js.map} +0 -0
  208. /package/dist/{outputStyles-WX5RYQOA.js.map → openai-SMYIAIO4.js.map} +0 -0
  209. /package/dist/{pluginValidation-JNQZYLUP.js.map → outputStyles-HBOYJFBE.js.map} +0 -0
  210. /package/dist/{prompts-LE6GK75N.js.map → pluginValidation-7CGOMT6F.js.map} +0 -0
  211. /package/dist/{query-GGIP6PWG.js.map → prompts-MFESKNYZ.js.map} +0 -0
  212. /package/dist/{responsesStreaming-2AIT6GHG.js.map → query-BFEFOX4S.js.map} +0 -0
  213. /package/dist/{ripgrep-KDPQAMB2.js.map → responsesStreaming-JORGEFQC.js.map} +0 -0
  214. /package/dist/{skillMarketplace-IXAGP3Q2.js.map → ripgrep-KNJBCJIQ.js.map} +0 -0
  215. /package/dist/{state-MSCYLB6Y.js.map → sandbox-P3FR4G4D.js.map} +0 -0
  216. /package/dist/{theme-GAMFOLBW.js.map → skillMarketplace-PCMKVV4O.js.map} +0 -0
  217. /package/dist/{toolPermissionContext-I3IXPVED.js.map → state-XBYIQ7R4.js.map} +0 -0
  218. /package/dist/{toolPermissionSettings-EUZKGZU2.js.map → structuredOutput-KAVFUV2Z.js.map} +0 -0
  219. /package/dist/{tools-3HOUIDM3.js.map → theme-4ZSXUILR.js.map} +0 -0
  220. /package/dist/{uuid-VA3KVASX.js.map → thinking-TTNUZUB3.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/sessions/manager.ts", "../src/gateway/agentCore.ts", "../src/gateway/middleware.ts", "../src/channels/http.ts", "../src/gateway/openaiCompat.ts", "../src/gateway/gateway.ts", "../src/channels/websocket.ts", "../src/channels/cli.ts", "../src/sessions/storage.ts", "../src/entrypoints/gateway.ts"],
4
+ "sourcesContent": ["import type { Session, SessionStorage } from './types'\r\n\r\nexport class SessionManager {\r\n constructor(private storage: SessionStorage) {}\r\n\r\n async getOrCreate(key: string): Promise<Session> {\r\n const existing = await this.storage.load(key)\r\n if (existing) return existing\r\n return this.createNew(key)\r\n }\r\n\r\n async save(session: Session): Promise<void> {\r\n await this.storage.save(session.key, session)\r\n }\r\n\r\n async get(key: string): Promise<Session | null> {\r\n return this.storage.load(key)\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n await this.storage.delete(key)\r\n }\r\n\r\n async listKeys(): Promise<string[]> {\r\n return this.storage.list()\r\n }\r\n\r\n private createNew(key: string): Session {\r\n return {\r\n key,\r\n messages: [],\r\n createdAt: Date.now(),\r\n updatedAt: Date.now(),\r\n metadata: {},\r\n }\r\n }\r\n}\r\n", "import { cwd as processCwd } from 'process'\r\nimport type { Tool } from '@tool'\r\nimport type { CanUseToolFn } from '@newcraw-types/canUseTool'\r\nimport type { Message, ReasoningEvent } from '@query'\r\nimport { createUserMessage, createAssistantMessage } from '@utils/messages'\r\nimport { getIdentity } from '../core/identity'\r\nimport { createQueryOptions } from '../core/queryOptionsFactory'\r\nimport { matchSkillForPrompt, buildSkillMatchDirective } from '../core/skillMatcher'\r\nimport type { SessionMessage } from '../sessions/types'\r\n\r\nexport interface GatewayQueryOptions {\r\n prompt: string\r\n domain?: string\r\n cwd?: string\r\n safeMode?: boolean\r\n tools?: Tool[]\r\n sessionMessages?: Message[]\r\n}\r\n\r\nexport interface GatewayQueryResult {\r\n resultText: string\r\n messages: Message[]\r\n totalCost: number\r\n}\r\n\r\nconst gatewayPermissionHandler: CanUseToolFn = async (\r\n tool,\r\n _input,\r\n _context,\r\n _assistantMessage,\r\n) => {\r\n return { result: true }\r\n}\r\n\r\nexport function convertSessionHistory(history: SessionMessage[]): Message[] {\r\n return history.map(msg =>\r\n msg.role === 'user'\r\n ? createUserMessage(msg.content)\r\n : createAssistantMessage(msg.content),\r\n )\r\n}\r\n\r\nexport async function gatewayQuery(options: GatewayQueryOptions): Promise<GatewayQueryResult> {\r\n const { query } = await import('@query')\r\n const { getSystemPrompt } = await import('@constants/prompts')\r\n const { getContext } = await import('@context')\r\n const { setCwd } = await import('@utils/state')\r\n\r\n const identity = getIdentity()\r\n const domainId = options.domain ?? identity.domain\r\n const cwd = options.cwd ?? processCwd()\r\n\r\n await setCwd(cwd)\r\n\r\n const userMessage = createUserMessage(options.prompt)\r\n const messages: Message[] = [...(options.sessionMessages ?? []), userMessage]\r\n const messageLogName = `gateway-${Date.now()}`\r\n\r\n const [systemPrompt, context, queryOpts, skillMatch] = await Promise.all([\r\n getSystemPrompt({ domain: domainId }),\r\n getContext(),\r\n createQueryOptions({\r\n messages,\r\n safeMode: options.safeMode,\r\n messageLogName,\r\n verbose: false,\r\n persistSession: false,\r\n }),\r\n matchSkillForPrompt(options.prompt),\r\n ])\r\n\r\n if (skillMatch) {\r\n systemPrompt.unshift(buildSkillMatchDirective(skillMatch))\r\n }\r\n\r\n const abortController = new AbortController()\r\n\r\n for await (const m of query(\r\n messages,\r\n systemPrompt,\r\n context,\r\n gatewayPermissionHandler,\r\n {\r\n ...queryOpts,\r\n abortController,\r\n },\r\n )) {\r\n messages.push(m)\r\n }\r\n\r\n const last = messages[messages.length - 1]\r\n const resultText =\r\n last?.type === 'assistant'\r\n ? (last.message.content.find((c: any) => c.type === 'text') as any)?.text ?? ''\r\n : ''\r\n\r\n return {\r\n resultText,\r\n messages: [],\r\n totalCost: 0,\r\n }\r\n}\r\n\r\nexport type StreamChunkType = 'text' | 'tool_call' | 'tool_result' | 'thinking' | 'reasoning' | 'status' | 'usage' | 'done'\r\n\r\nexport async function* gatewayQueryStream(options: GatewayQueryOptions): AsyncGenerator<{\r\n type: StreamChunkType\r\n content: string\r\n}> {\r\n const { query } = await import('@query')\r\n const { getSystemPrompt } = await import('@constants/prompts')\r\n const { getContext } = await import('@context')\r\n const { setCwd } = await import('@utils/state')\r\n\r\n const identity = getIdentity()\r\n const domainId = options.domain ?? identity.domain\r\n const cwd = options.cwd ?? processCwd()\r\n\r\n await setCwd(cwd)\r\n\r\n const userMessage = createUserMessage(options.prompt)\r\n const messages: Message[] = [...(options.sessionMessages ?? []), userMessage]\r\n const messageLogName = `gateway-${Date.now()}`\r\n\r\n const [systemPrompt, context, queryOpts, skillMatch] = await Promise.all([\r\n getSystemPrompt({ domain: domainId }),\r\n getContext(),\r\n createQueryOptions({\r\n messages,\r\n safeMode: options.safeMode,\r\n messageLogName,\r\n verbose: false,\r\n persistSession: false,\r\n }),\r\n matchSkillForPrompt(options.prompt),\r\n ])\r\n\r\n if (skillMatch) {\r\n systemPrompt.unshift(buildSkillMatchDirective(skillMatch))\r\n }\r\n\r\n const abortController = new AbortController()\r\n const seenToolUseIds = new Set<string>()\r\n const toolTrace: { name: string; input: string; succeeded: boolean }[] = []\r\n const reasoningEvents: ReasoningEvent[] = []\r\n\r\n let modelName = 'unknown'\r\n try {\r\n const { getModelManager } = await import('@utils/model')\r\n const manager = getModelManager()\r\n modelName = manager.getModelName('main') ?? 'unknown'\r\n } catch { /* model info unavailable */ }\r\n\r\n yield {\r\n type: 'status',\r\n content: JSON.stringify({\r\n model: modelName,\r\n state: 'started',\r\n iteration: 0,\r\n timestamp: Date.now(),\r\n }),\r\n }\r\n\r\n let iterationCount = 0\r\n let totalInputTokens = 0\r\n let totalOutputTokens = 0\r\n let totalCacheReadTokens = 0\r\n let totalCacheCreationTokens = 0\r\n\r\n for await (const msg of query(\r\n messages,\r\n systemPrompt,\r\n context,\r\n gatewayPermissionHandler,\r\n {\r\n ...queryOpts,\r\n abortController,\r\n reasoningEvents,\r\n },\r\n )) {\r\n while (reasoningEvents.length > 0) {\r\n const event = reasoningEvents.shift()!\r\n yield { type: 'reasoning', content: JSON.stringify(event) }\r\n }\r\n\r\n if (msg.type === 'assistant') {\r\n iterationCount++\r\n\r\n const usage = (msg.message as any).usage\r\n if (usage) {\r\n const input = usage.input_tokens ?? 0\r\n const output = usage.output_tokens ?? 0\r\n const cacheRead = usage.cache_read_input_tokens ?? 0\r\n const cacheCreation = usage.cache_creation_input_tokens ?? 0\r\n totalInputTokens += input\r\n totalOutputTokens += output\r\n totalCacheReadTokens += cacheRead\r\n totalCacheCreationTokens += cacheCreation\r\n\r\n yield {\r\n type: 'usage',\r\n content: JSON.stringify({\r\n inputTokens: input,\r\n outputTokens: output,\r\n cacheReadTokens: cacheRead,\r\n cacheCreationTokens: cacheCreation,\r\n totalInputTokens,\r\n totalOutputTokens,\r\n totalCacheReadTokens,\r\n totalCacheCreationTokens,\r\n costUSD: msg.costUSD ?? 0,\r\n iteration: iterationCount,\r\n }),\r\n }\r\n }\r\n\r\n yield {\r\n type: 'status',\r\n content: JSON.stringify({\r\n model: modelName,\r\n state: 'thinking',\r\n iteration: iterationCount,\r\n toolCallCount: toolTrace.length,\r\n timestamp: Date.now(),\r\n }),\r\n }\r\n\r\n for (const block of msg.message.content) {\r\n if (block.type === 'text' && block.text) {\r\n yield { type: 'text', content: block.text }\r\n } else if (block.type === 'thinking' && (block as any).thinking) {\r\n yield { type: 'thinking', content: (block as any).thinking }\r\n } else if (block.type === 'tool_use') {\r\n seenToolUseIds.add(block.id)\r\n const inputBrief = JSON.stringify(block.input).slice(0, 200)\r\n toolTrace.push({ name: block.name, input: inputBrief, succeeded: true })\r\n yield { type: 'tool_call', content: `${block.name}(${inputBrief})` }\r\n }\r\n }\r\n } else if (msg.type === 'progress') {\r\n for (const block of msg.content.message.content) {\r\n if (block.type === 'tool_use' && !seenToolUseIds.has(block.id)) {\r\n seenToolUseIds.add(block.id)\r\n const inputBrief = JSON.stringify(block.input).slice(0, 200)\r\n toolTrace.push({ name: block.name, input: inputBrief, succeeded: true })\r\n yield { type: 'tool_call', content: `${block.name}(${inputBrief})` }\r\n }\r\n }\r\n } else if (msg.type === 'user') {\r\n const content = msg.message.content\r\n if (Array.isArray(content)) {\r\n for (const block of content as any[]) {\r\n if (block.type === 'tool_result') {\r\n const raw = typeof block.content === 'string'\r\n ? block.content\r\n : JSON.stringify(block.content)\r\n const isError = (block as any).is_error === true\r\n || raw.includes('error')\r\n || raw.includes('Error')\r\n || raw.includes('REDIRECT')\r\n if (isError && toolTrace.length > 0) {\r\n toolTrace[toolTrace.length - 1].succeeded = false\r\n }\r\n yield { type: 'tool_result', content: raw.slice(0, 500) }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n while (reasoningEvents.length > 0) {\r\n const event = reasoningEvents.shift()!\r\n yield { type: 'reasoning', content: JSON.stringify(event) }\r\n }\r\n\r\n if (toolTrace.length > 0) {\r\n const steps = toolTrace.map((t, i) => {\r\n const status = t.succeeded ? '\u2713' : '\u2717'\r\n return `${i + 1}. ${status} ${t.name}`\r\n })\r\n const summary = `\\n\\n---\\n**\u83B7\u53D6\u8DEF\u5F84**: ${steps.join(' \u2192 ')}`\r\n yield { type: 'text', content: summary }\r\n }\r\n\r\n yield {\r\n type: 'status',\r\n content: JSON.stringify({\r\n model: modelName,\r\n state: 'completed',\r\n iteration: iterationCount,\r\n toolCallCount: toolTrace.length,\r\n totalInputTokens,\r\n totalOutputTokens,\r\n timestamp: Date.now(),\r\n }),\r\n }\r\n\r\n yield { type: 'done', content: '' }\r\n}\r\n", "import type { UnifiedMessage, AgentResponse } from '../channels/types'\r\n\r\nexport interface MiddlewareContext {\r\n message: UnifiedMessage\r\n channelId: string\r\n startTime: number\r\n metadata: Record<string, unknown>\r\n}\r\n\r\nexport type NextFn = () => Promise<void>\r\nexport type Middleware = (ctx: MiddlewareContext, next: NextFn) => Promise<void>\r\n\r\nexport function composeMiddleware(middlewares: Middleware[]): Middleware {\r\n return async (ctx, next) => {\r\n let index = -1\r\n async function dispatch(i: number): Promise<void> {\r\n if (i <= index) throw new Error('next() called multiple times')\r\n index = i\r\n const fn = i < middlewares.length ? middlewares[i] : next\r\n await fn(ctx, () => dispatch(i + 1))\r\n }\r\n await dispatch(0)\r\n }\r\n}\r\n\r\nexport function loggingMiddleware(): Middleware {\r\n return async (ctx, next) => {\r\n const { channelId, message } = ctx\r\n const preview = message.text.length > 80\r\n ? message.text.slice(0, 80) + '...'\r\n : message.text\r\n console.log(`[${new Date().toISOString()}] ${channelId}:${message.sessionKey} \u2190 \"${preview}\"`)\r\n\r\n await next()\r\n\r\n const elapsed = Date.now() - ctx.startTime\r\n console.log(`[${new Date().toISOString()}] ${channelId}:${message.sessionKey} \u2192 done (${elapsed}ms)`)\r\n }\r\n}\r\n\r\nexport function rateLimitMiddleware(options: {\r\n windowMs?: number\r\n maxRequests?: number\r\n} = {}): Middleware {\r\n const windowMs = options.windowMs ?? 60_000\r\n const maxRequests = options.maxRequests ?? 30\r\n const hits = new Map<string, number[]>()\r\n\r\n return async (ctx, next) => {\r\n const key = `${ctx.message.sessionKey}`\r\n const now = Date.now()\r\n const timestamps = hits.get(key) ?? []\r\n\r\n const windowStart = now - windowMs\r\n const recent = timestamps.filter(t => t > windowStart)\r\n\r\n if (recent.length >= maxRequests) {\r\n ctx.metadata.rateLimited = true\r\n throw new Error(`Rate limit exceeded: ${maxRequests} requests per ${windowMs / 1000}s`)\r\n }\r\n\r\n recent.push(now)\r\n hits.set(key, recent)\r\n\r\n if (hits.size > 10_000) {\r\n for (const [k, v] of hits) {\r\n const filtered = v.filter(t => t > windowStart)\r\n if (filtered.length === 0) hits.delete(k)\r\n else hits.set(k, filtered)\r\n }\r\n }\r\n\r\n await next()\r\n }\r\n}\r\n\r\nexport function maxConcurrencyMiddleware(options: {\r\n maxPerSession?: number\r\n} = {}): Middleware {\r\n const max = options.maxPerSession ?? 1\r\n const active = new Map<string, number>()\r\n\r\n return async (ctx, next) => {\r\n const key = ctx.message.sessionKey\r\n const current = active.get(key) ?? 0\r\n\r\n if (current >= max) {\r\n throw new Error('Another request is already in progress for this session')\r\n }\r\n\r\n active.set(key, current + 1)\r\n try {\r\n await next()\r\n } finally {\r\n const val = active.get(key) ?? 1\r\n if (val <= 1) active.delete(key)\r\n else active.set(key, val - 1)\r\n }\r\n }\r\n}\r\n", "import { createServer, type IncomingMessage, type ServerResponse } from 'http'\r\nimport { randomUUID } from 'crypto'\r\nimport { resolve, join, extname } from 'path'\r\nimport { readFile, stat } from 'fs/promises'\r\nimport type { Channel, AgentResponse, MessageHandler } from './types'\r\nimport {\r\n convertOpenAIRequestToGateway,\r\n buildCompletionResponse,\r\n buildChunk,\r\n buildDoneChunk,\r\n type OpenAIChatCompletionRequest,\r\n} from '../gateway/openaiCompat'\r\n\r\nconst MIME_TYPES: Record<string, string> = {\r\n '.html': 'text/html; charset=utf-8',\r\n '.js': 'application/javascript; charset=utf-8',\r\n '.css': 'text/css; charset=utf-8',\r\n '.json': 'application/json; charset=utf-8',\r\n '.png': 'image/png',\r\n '.jpg': 'image/jpeg',\r\n '.jpeg': 'image/jpeg',\r\n '.gif': 'image/gif',\r\n '.svg': 'image/svg+xml',\r\n '.ico': 'image/x-icon',\r\n '.woff': 'font/woff',\r\n '.woff2': 'font/woff2',\r\n '.ttf': 'font/ttf',\r\n '.webp': 'image/webp',\r\n}\r\n\r\nexport interface HttpChannelConfig {\r\n port: number\r\n host?: string\r\n authToken?: string\r\n corsOrigin?: string\r\n webDistDir?: string\r\n}\r\n\r\ntype StreamHandler = (msg: import('./types').UnifiedMessage, res: ServerResponse) => Promise<void>\r\n\r\nexport class HttpChannel implements Channel {\r\n readonly id = 'http'\r\n readonly name = 'HTTP API'\r\n\r\n private server: ReturnType<typeof createServer> | null = null\r\n private handler: MessageHandler | null = null\r\n private streamHandler: StreamHandler | null = null\r\n private pendingResponses = new Map<string, AgentResponse[]>()\r\n\r\n constructor(private config: HttpChannelConfig) {}\r\n\r\n onMessage(handler: MessageHandler): void {\r\n this.handler = handler\r\n }\r\n\r\n onStreamMessage(handler: StreamHandler): void {\r\n this.streamHandler = handler\r\n }\r\n\r\n async start(): Promise<void> {\r\n this.server = createServer((req, res) => this.handleRequest(req, res))\r\n await new Promise<void>((resolve) => {\r\n this.server!.listen(this.config.port, this.config.host ?? '0.0.0.0', resolve)\r\n })\r\n console.log(`[HTTP] Listening on ${this.config.host ?? '0.0.0.0'}:${this.config.port}`)\r\n }\r\n\r\n async stop(): Promise<void> {\r\n if (this.server) {\r\n await new Promise<void>((resolve) => this.server!.close(() => resolve()))\r\n this.server = null\r\n }\r\n }\r\n\r\n async sendResponse(requestId: string, response: AgentResponse): Promise<void> {\r\n const pending = this.pendingResponses.get(requestId)\r\n if (pending) {\r\n pending.push(response)\r\n }\r\n }\r\n\r\n private setCorsHeaders(res: ServerResponse): void {\r\n const origin = this.config.corsOrigin ?? '*'\r\n res.setHeader('Access-Control-Allow-Origin', origin)\r\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')\r\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization')\r\n }\r\n\r\n private checkAuth(req: IncomingMessage, res: ServerResponse): boolean {\r\n if (!this.config.authToken) return true\r\n const auth = req.headers.authorization\r\n if (auth !== `Bearer ${this.config.authToken}`) {\r\n res.writeHead(401, { 'Content-Type': 'application/json' })\r\n res.end(JSON.stringify({ error: 'Unauthorized' }))\r\n return false\r\n }\r\n return true\r\n }\r\n\r\n private async handleRequest(req: IncomingMessage, res: ServerResponse): Promise<void> {\r\n this.setCorsHeaders(res)\r\n\r\n if (req.method === 'OPTIONS') {\r\n res.writeHead(204)\r\n res.end()\r\n return\r\n }\r\n\r\n if (req.method === 'GET' && req.url === '/health') {\r\n res.setHeader('Content-Type', 'application/json')\r\n res.writeHead(200)\r\n res.end(JSON.stringify({ status: 'ok', timestamp: Date.now() }))\r\n return\r\n }\r\n\r\n if (req.method === 'POST' && req.url === '/api/chat') {\r\n await this.handleChat(req, res)\r\n return\r\n }\r\n\r\n if (req.method === 'POST' && req.url === '/api/chat/stream') {\r\n await this.handleChatStream(req, res)\r\n return\r\n }\r\n\r\n if (req.method === 'POST' && (req.url === '/v1/chat/completions' || req.url === '/chat/completions')) {\r\n await this.handleOpenAICompat(req, res)\r\n return\r\n }\r\n\r\n if (req.method === 'GET' && req.url === '/v1/models') {\r\n await this.handleOpenAIModels(req, res)\r\n return\r\n }\r\n\r\n // Static file serving for web UI (SPA fallback)\r\n if (req.method === 'GET' && this.config.webDistDir) {\r\n const served = await this.serveStatic(req, res)\r\n if (served) return\r\n }\r\n\r\n res.setHeader('Content-Type', 'application/json')\r\n res.writeHead(404)\r\n res.end(JSON.stringify({ error: 'Not found' }))\r\n }\r\n\r\n private async serveStatic(req: IncomingMessage, res: ServerResponse): Promise<boolean> {\r\n const distDir = this.config.webDistDir\r\n if (!distDir) return false\r\n\r\n const urlPath = new URL(req.url ?? '/', `http://${req.headers.host}`).pathname\r\n const safePath = urlPath.replace(/\\.\\./g, '').replace(/\\/+/g, '/')\r\n\r\n // Try the exact file first, then fallback to index.html (SPA)\r\n const candidates = [\r\n join(distDir, safePath),\r\n join(distDir, safePath, 'index.html'),\r\n ]\r\n\r\n for (const filePath of candidates) {\r\n const resolved = resolve(filePath)\r\n if (!resolved.startsWith(resolve(distDir))) continue\r\n\r\n try {\r\n const fileStat = await stat(resolved)\r\n if (fileStat.isFile()) {\r\n const ext = extname(resolved)\r\n const mime = MIME_TYPES[ext] ?? 'application/octet-stream'\r\n const content = await readFile(resolved)\r\n res.setHeader('Content-Type', mime)\r\n if (ext !== '.html') {\r\n res.setHeader('Cache-Control', 'public, max-age=31536000, immutable')\r\n }\r\n res.writeHead(200)\r\n res.end(content)\r\n return true\r\n }\r\n } catch {\r\n // file not found, continue\r\n }\r\n }\r\n\r\n // SPA fallback: serve index.html for non-file paths\r\n try {\r\n const indexPath = join(distDir, 'index.html')\r\n const content = await readFile(indexPath)\r\n res.setHeader('Content-Type', 'text/html; charset=utf-8')\r\n res.writeHead(200)\r\n res.end(content)\r\n return true\r\n } catch {\r\n return false\r\n }\r\n }\r\n\r\n private async handleChat(req: IncomingMessage, res: ServerResponse): Promise<void> {\r\n res.setHeader('Content-Type', 'application/json')\r\n if (!this.checkAuth(req, res)) return\r\n\r\n try {\r\n const body = await readBody(req)\r\n const { message, userId = 'default', sessionKey } = JSON.parse(body)\r\n\r\n if (!message || typeof message !== 'string') {\r\n res.writeHead(400)\r\n res.end(JSON.stringify({ error: 'Missing \"message\" field' }))\r\n return\r\n }\r\n\r\n if (!this.handler) {\r\n res.writeHead(503)\r\n res.end(JSON.stringify({ error: 'No handler registered' }))\r\n return\r\n }\r\n\r\n const requestId = randomUUID()\r\n this.pendingResponses.set(requestId, [])\r\n\r\n await this.handler({\r\n channelId: 'http',\r\n userId: requestId,\r\n sessionKey: sessionKey ?? `http:${userId}`,\r\n text: message,\r\n metadata: { originalUserId: userId, requestId },\r\n })\r\n\r\n const responses = this.pendingResponses.get(requestId) ?? []\r\n this.pendingResponses.delete(requestId)\r\n\r\n const textParts = responses\r\n .filter(r => r.type === 'text')\r\n .map(r => r.content)\r\n\r\n res.writeHead(200)\r\n res.end(JSON.stringify({\r\n response: textParts.join('\\n'),\r\n details: responses.filter(r => r.type !== 'done'),\r\n }))\r\n } catch (err: any) {\r\n res.writeHead(500)\r\n res.end(JSON.stringify({ error: err.message ?? 'Internal server error' }))\r\n }\r\n }\r\n\r\n private async handleChatStream(req: IncomingMessage, res: ServerResponse): Promise<void> {\r\n if (!this.checkAuth(req, res)) return\r\n\r\n try {\r\n const body = await readBody(req)\r\n const { message, userId = 'default', sessionKey } = JSON.parse(body)\r\n\r\n if (!message || typeof message !== 'string') {\r\n res.setHeader('Content-Type', 'application/json')\r\n res.writeHead(400)\r\n res.end(JSON.stringify({ error: 'Missing \"message\" field' }))\r\n return\r\n }\r\n\r\n if (!this.streamHandler) {\r\n res.setHeader('Content-Type', 'application/json')\r\n res.writeHead(503)\r\n res.end(JSON.stringify({ error: 'Streaming not available' }))\r\n return\r\n }\r\n\r\n res.writeHead(200, {\r\n 'Content-Type': 'text/event-stream',\r\n 'Cache-Control': 'no-cache',\r\n 'Connection': 'keep-alive',\r\n 'X-Accel-Buffering': 'no',\r\n })\r\n\r\n const unifiedMsg: import('./types').UnifiedMessage = {\r\n channelId: 'http',\r\n userId,\r\n sessionKey: sessionKey ?? `http:${userId}`,\r\n text: message,\r\n metadata: { requestId: randomUUID() },\r\n }\r\n\r\n await this.streamHandler(unifiedMsg, res)\r\n } catch (err: any) {\r\n if (!res.headersSent) {\r\n res.setHeader('Content-Type', 'application/json')\r\n res.writeHead(500)\r\n res.end(JSON.stringify({ error: err.message ?? 'Internal server error' }))\r\n } else {\r\n writeSseEvent(res, 'error', { error: err.message ?? 'Internal server error' })\r\n res.end()\r\n }\r\n }\r\n }\r\n\r\n private async handleOpenAICompat(req: IncomingMessage, res: ServerResponse): Promise<void> {\r\n if (!this.checkAuth(req, res)) return\r\n\r\n try {\r\n const raw = await readBody(req)\r\n const body: OpenAIChatCompletionRequest = JSON.parse(raw)\r\n const model = body.model ?? 'kode-agent'\r\n const isStream = body.stream === true\r\n\r\n const gatewayOpts = convertOpenAIRequestToGateway(body, `openai:${randomUUID().slice(0, 8)}`)\r\n\r\n if (!gatewayOpts.prompt) {\r\n res.setHeader('Content-Type', 'application/json')\r\n res.writeHead(400)\r\n res.end(JSON.stringify({\r\n error: { message: 'No user message found in messages array', type: 'invalid_request_error', code: 'missing_user_message' },\r\n }))\r\n return\r\n }\r\n\r\n if (isStream) {\r\n res.writeHead(200, {\r\n 'Content-Type': 'text/event-stream',\r\n 'Cache-Control': 'no-cache',\r\n 'Connection': 'keep-alive',\r\n 'X-Accel-Buffering': 'no',\r\n })\r\n\r\n const completionId = `chatcmpl-${randomUUID().replace(/-/g, '').slice(0, 24)}`\r\n let streamEnded = false\r\n\r\n const safeWrite = (data: string): boolean => {\r\n if (streamEnded || res.writableEnded || res.destroyed) return false\r\n try {\r\n return res.write(data)\r\n } catch {\r\n return false\r\n }\r\n }\r\n\r\n safeWrite(`data: ${JSON.stringify(buildChunk(completionId, model, { role: 'assistant', content: '' }))}\\n\\n`)\r\n\r\n if (this.streamHandler) {\r\n const unifiedMsg: import('./types').UnifiedMessage = {\r\n channelId: 'http',\r\n userId: 'openai-compat',\r\n sessionKey: `openai:${randomUUID().slice(0, 8)}`,\r\n text: gatewayOpts.prompt,\r\n metadata: { requestId: randomUUID(), openaiCompat: true },\r\n }\r\n\r\n const interceptRes = Object.create(res) as ServerResponse\r\n interceptRes.write = ((data: any) => {\r\n if (typeof data === 'string' && data.startsWith('event:')) {\r\n const lines = data.split('\\n')\r\n for (const line of lines) {\r\n if (line.startsWith('data: ')) {\r\n try {\r\n const parsed = JSON.parse(line.slice(6))\r\n if (parsed.type === 'text' || (parsed.content && typeof parsed.content === 'string')) {\r\n const textContent = parsed.content ?? parsed.text ?? ''\r\n if (textContent) {\r\n safeWrite(`data: ${JSON.stringify(buildChunk(completionId, model, { content: textContent }))}\\n\\n`)\r\n }\r\n }\r\n } catch {\r\n // non-JSON SSE line, skip\r\n }\r\n }\r\n }\r\n return true\r\n }\r\n return safeWrite(data)\r\n }) as any\r\n interceptRes.end = (() => {}) as any\r\n\r\n await this.streamHandler(unifiedMsg, interceptRes)\r\n }\r\n\r\n safeWrite(`data: ${JSON.stringify(buildDoneChunk(completionId, model))}\\n\\n`)\r\n safeWrite('data: [DONE]\\n\\n')\r\n streamEnded = true\r\n res.end()\r\n } else {\r\n if (!this.handler) {\r\n res.setHeader('Content-Type', 'application/json')\r\n res.writeHead(503)\r\n res.end(JSON.stringify({\r\n error: { message: 'Service unavailable', type: 'server_error' },\r\n }))\r\n return\r\n }\r\n\r\n const requestId = randomUUID()\r\n this.pendingResponses.set(requestId, [])\r\n\r\n await this.handler({\r\n channelId: 'http',\r\n userId: requestId,\r\n sessionKey: `openai:${requestId.slice(0, 8)}`,\r\n text: gatewayOpts.prompt,\r\n metadata: { requestId, openaiCompat: true },\r\n })\r\n\r\n const responses = this.pendingResponses.get(requestId) ?? []\r\n this.pendingResponses.delete(requestId)\r\n\r\n const textContent = responses\r\n .filter(r => r.type === 'text')\r\n .map(r => r.content)\r\n .join('')\r\n\r\n const completion = buildCompletionResponse(model, textContent)\r\n res.setHeader('Content-Type', 'application/json')\r\n res.writeHead(200)\r\n res.end(JSON.stringify(completion))\r\n }\r\n } catch (err: any) {\r\n if (!res.headersSent) {\r\n res.setHeader('Content-Type', 'application/json')\r\n res.writeHead(500)\r\n res.end(JSON.stringify({\r\n error: { message: err.message ?? 'Internal server error', type: 'server_error' },\r\n }))\r\n } else if (!res.writableEnded && !res.destroyed) {\r\n try {\r\n res.write(`data: ${JSON.stringify({ error: { message: err.message } })}\\n\\n`)\r\n res.write('data: [DONE]\\n\\n')\r\n res.end()\r\n } catch {\r\n // response already closed\r\n }\r\n }\r\n }\r\n }\r\n\r\n private async handleOpenAIModels(_req: IncomingMessage, res: ServerResponse): Promise<void> {\r\n res.setHeader('Content-Type', 'application/json')\r\n res.writeHead(200)\r\n res.end(JSON.stringify({\r\n object: 'list',\r\n data: [\r\n {\r\n id: 'kode-agent',\r\n object: 'model',\r\n created: Math.floor(Date.now() / 1000),\r\n owned_by: 'kode',\r\n },\r\n ],\r\n }))\r\n }\r\n}\r\n\r\nexport function writeSseEvent(res: ServerResponse, event: string, data: unknown): void {\r\n res.write(`event: ${event}\\ndata: ${JSON.stringify(data)}\\n\\n`)\r\n}\r\n\r\nfunction readBody(req: IncomingMessage): Promise<string> {\r\n return new Promise((resolve, reject) => {\r\n const chunks: Buffer[] = []\r\n let size = 0\r\n const MAX_BODY_SIZE = 1024 * 1024\r\n\r\n req.on('data', (chunk: Buffer) => {\r\n size += chunk.length\r\n if (size > MAX_BODY_SIZE) {\r\n req.destroy()\r\n reject(new Error('Request body too large'))\r\n return\r\n }\r\n chunks.push(chunk)\r\n })\r\n req.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')))\r\n req.on('error', reject)\r\n })\r\n}\r\n", "import { randomUUID } from 'crypto'\r\nimport type { GatewayQueryOptions } from './agentCore'\r\n\r\nexport interface OpenAIChatCompletionRequest {\r\n model?: string\r\n messages: OpenAIChatMessage[]\r\n stream?: boolean\r\n temperature?: number\r\n max_tokens?: number\r\n tools?: OpenAIToolDef[]\r\n tool_choice?: string | object\r\n top_p?: number\r\n n?: number\r\n stop?: string | string[]\r\n}\r\n\r\nexport interface OpenAIChatMessage {\r\n role: 'system' | 'user' | 'assistant' | 'tool'\r\n content: string | null\r\n name?: string\r\n tool_calls?: OpenAIToolCall[]\r\n tool_call_id?: string\r\n}\r\n\r\nexport interface OpenAIToolDef {\r\n type: 'function'\r\n function: {\r\n name: string\r\n description?: string\r\n parameters?: Record<string, unknown>\r\n strict?: boolean\r\n }\r\n}\r\n\r\nexport interface OpenAIToolCall {\r\n id: string\r\n type: 'function'\r\n function: {\r\n name: string\r\n arguments: string\r\n }\r\n}\r\n\r\nexport interface OpenAIChatCompletionResponse {\r\n id: string\r\n object: 'chat.completion'\r\n created: number\r\n model: string\r\n choices: OpenAIChatCompletionChoice[]\r\n usage: {\r\n prompt_tokens: number\r\n completion_tokens: number\r\n total_tokens: number\r\n }\r\n}\r\n\r\nexport interface OpenAIChatCompletionChoice {\r\n index: number\r\n message: {\r\n role: 'assistant'\r\n content: string | null\r\n tool_calls?: OpenAIToolCall[]\r\n }\r\n finish_reason: 'stop' | 'tool_calls' | 'length' | null\r\n}\r\n\r\nexport interface OpenAIChatCompletionChunk {\r\n id: string\r\n object: 'chat.completion.chunk'\r\n created: number\r\n model: string\r\n choices: OpenAIChatCompletionChunkChoice[]\r\n usage?: {\r\n prompt_tokens: number\r\n completion_tokens: number\r\n total_tokens: number\r\n } | null\r\n}\r\n\r\nexport interface OpenAIChatCompletionChunkChoice {\r\n index: number\r\n delta: {\r\n role?: 'assistant'\r\n content?: string | null\r\n tool_calls?: Partial<OpenAIToolCall>[]\r\n }\r\n finish_reason: 'stop' | 'tool_calls' | 'length' | null\r\n}\r\n\r\nexport interface OpenAICompatGatewayResult extends GatewayQueryOptions {\r\n systemPrompt?: string\r\n conversationHistory?: OpenAIChatMessage[]\r\n openaiTools?: OpenAIToolDef[]\r\n}\r\n\r\nexport function convertOpenAIRequestToGateway(\r\n body: OpenAIChatCompletionRequest,\r\n sessionKey: string,\r\n): OpenAICompatGatewayResult {\r\n const messages = body.messages ?? []\r\n let prompt = ''\r\n let systemPrompt = ''\r\n\r\n const systemMessages = messages.filter(m => m.role === 'system')\r\n if (systemMessages.length > 0) {\r\n systemPrompt = systemMessages\r\n .map(m => m.content ?? '')\r\n .filter(Boolean)\r\n .join('\\n\\n')\r\n }\r\n\r\n for (let i = messages.length - 1; i >= 0; i--) {\r\n if (messages[i].role === 'user' && messages[i].content) {\r\n prompt = messages[i].content as string\r\n break\r\n }\r\n }\r\n\r\n const conversationHistory = messages.filter(m => m.role !== 'system')\r\n\r\n const contextParts: string[] = []\r\n\r\n if (systemPrompt) {\r\n contextParts.push(`<system_context>\\n${systemPrompt}\\n</system_context>`)\r\n }\r\n\r\n const priorMessages = conversationHistory.slice(0, -1)\r\n if (priorMessages.length > 0) {\r\n const historyLines = priorMessages\r\n .map(m => {\r\n if (m.role === 'assistant') {\r\n if (m.tool_calls && m.tool_calls.length > 0) {\r\n const toolDescs = m.tool_calls\r\n .map(tc => `[tool_call: ${tc.function.name}(${tc.function.arguments})]`)\r\n .join(' ')\r\n return `Assistant: ${m.content ?? ''} ${toolDescs}`\r\n }\r\n return `Assistant: ${m.content ?? ''}`\r\n }\r\n if (m.role === 'tool') {\r\n return `Tool(${m.tool_call_id ?? m.name ?? ''}): ${m.content ?? ''}`\r\n }\r\n if (m.role === 'user') {\r\n return `User: ${m.content ?? ''}`\r\n }\r\n return ''\r\n })\r\n .filter(Boolean)\r\n if (historyLines.length > 0) {\r\n contextParts.push(`<conversation_history>\\n${historyLines.join('\\n')}\\n</conversation_history>`)\r\n }\r\n }\r\n\r\n if (body.tools && body.tools.length > 0) {\r\n const toolDescriptions = body.tools\r\n .map(t => `- ${t.function.name}: ${t.function.description ?? '(no description)'}`)\r\n .join('\\n')\r\n contextParts.push(`<available_tools>\\n${toolDescriptions}\\n</available_tools>`)\r\n }\r\n\r\n if (contextParts.length > 0 && prompt) {\r\n prompt = `${contextParts.join('\\n\\n')}\\n\\n${prompt}`\r\n }\r\n\r\n return {\r\n prompt,\r\n domain: 'coding',\r\n safeMode: false,\r\n systemPrompt,\r\n conversationHistory,\r\n openaiTools: body.tools,\r\n }\r\n}\r\n\r\nexport function buildCompletionResponse(\r\n model: string,\r\n content: string,\r\n): OpenAIChatCompletionResponse {\r\n return {\r\n id: `chatcmpl-${randomUUID().replace(/-/g, '').slice(0, 24)}`,\r\n object: 'chat.completion',\r\n created: Math.floor(Date.now() / 1000),\r\n model,\r\n choices: [\r\n {\r\n index: 0,\r\n message: {\r\n role: 'assistant',\r\n content,\r\n },\r\n finish_reason: 'stop',\r\n },\r\n ],\r\n usage: {\r\n prompt_tokens: 0,\r\n completion_tokens: 0,\r\n total_tokens: 0,\r\n },\r\n }\r\n}\r\n\r\nexport function buildChunk(\r\n completionId: string,\r\n model: string,\r\n delta: OpenAIChatCompletionChunkChoice['delta'],\r\n finishReason: OpenAIChatCompletionChunkChoice['finish_reason'] = null,\r\n): OpenAIChatCompletionChunk {\r\n return {\r\n id: completionId,\r\n object: 'chat.completion.chunk',\r\n created: Math.floor(Date.now() / 1000),\r\n model,\r\n choices: [\r\n {\r\n index: 0,\r\n delta,\r\n finish_reason: finishReason,\r\n },\r\n ],\r\n }\r\n}\r\n\r\nexport function buildToolCallChunk(\r\n completionId: string,\r\n model: string,\r\n toolCallIndex: number,\r\n toolCallId: string,\r\n functionName: string,\r\n argumentsChunk: string,\r\n): OpenAIChatCompletionChunk {\r\n return buildChunk(completionId, model, {\r\n tool_calls: [\r\n {\r\n id: toolCallId,\r\n type: 'function',\r\n function: {\r\n name: functionName,\r\n arguments: argumentsChunk,\r\n },\r\n },\r\n ],\r\n })\r\n}\r\n\r\nexport function buildDoneChunk(\r\n completionId: string,\r\n model: string,\r\n): OpenAIChatCompletionChunk {\r\n return {\r\n id: completionId,\r\n object: 'chat.completion.chunk',\r\n created: Math.floor(Date.now() / 1000),\r\n model,\r\n choices: [\r\n {\r\n index: 0,\r\n delta: {},\r\n finish_reason: 'stop',\r\n },\r\n ],\r\n usage: {\r\n prompt_tokens: 0,\r\n completion_tokens: 0,\r\n total_tokens: 0,\r\n },\r\n }\r\n}\r\n", "import type { ServerResponse } from 'http'\r\nimport type { Channel, UnifiedMessage, AgentResponse } from '../channels/types'\r\nimport { SessionManager } from '../sessions/manager'\r\nimport type { Session, SessionStorage } from '../sessions/types'\r\nimport { getIdentity } from '../core/identity'\r\nimport { gatewayQuery, gatewayQueryStream, convertSessionHistory } from './agentCore'\r\nimport { type Middleware, type MiddlewareContext, composeMiddleware } from './middleware'\r\nimport { HttpChannel, writeSseEvent } from '../channels/http'\r\n\r\nexport interface GatewayConfig {\r\n storage: SessionStorage\r\n domain?: string\r\n cwd?: string\r\n safeMode?: boolean\r\n middleware?: Middleware[]\r\n onError?: (error: Error, context?: string) => void\r\n}\r\n\r\nexport class Gateway {\r\n private channels = new Map<string, Channel>()\r\n private sessions: SessionManager\r\n private config: GatewayConfig\r\n private middlewareChain: Middleware | null = null\r\n\r\n constructor(config: GatewayConfig) {\r\n this.config = config\r\n this.sessions = new SessionManager(config.storage)\r\n if (config.middleware && config.middleware.length > 0) {\r\n this.middlewareChain = composeMiddleware(config.middleware)\r\n }\r\n }\r\n\r\n registerChannel(channel: Channel): void {\r\n if (this.channels.has(channel.id)) {\r\n throw new Error(`Channel \"${channel.id}\" is already registered`)\r\n }\r\n this.channels.set(channel.id, channel)\r\n channel.onMessage((msg) => this.handleMessage(channel, msg))\r\n\r\n if (channel instanceof HttpChannel) {\r\n channel.onStreamMessage((msg, res) => this.handleSseStream(msg, res))\r\n }\r\n }\r\n\r\n getChannel(id: string): Channel | undefined {\r\n return this.channels.get(id)\r\n }\r\n\r\n listChannels(): Channel[] {\r\n return [...this.channels.values()]\r\n }\r\n\r\n getSessionManager(): SessionManager {\r\n return this.sessions\r\n }\r\n\r\n private async runWithMiddleware(\r\n channel: Channel,\r\n msg: UnifiedMessage,\r\n handler: () => Promise<void>,\r\n ): Promise<void> {\r\n if (!this.middlewareChain) {\r\n await handler()\r\n return\r\n }\r\n\r\n const ctx: MiddlewareContext = {\r\n message: msg,\r\n channelId: channel.id,\r\n startTime: Date.now(),\r\n metadata: {},\r\n }\r\n\r\n await this.middlewareChain(ctx, handler)\r\n }\r\n\r\n private async handleMessage(channel: Channel, msg: UnifiedMessage): Promise<void> {\r\n try {\r\n await this.runWithMiddleware(channel, msg, async () => {\r\n const session = await this.sessions.getOrCreate(msg.sessionKey)\r\n const domainId = this.config.domain ?? getIdentity().domain\r\n\r\n session.messages.push({\r\n role: 'user',\r\n content: msg.text,\r\n timestamp: Date.now(),\r\n })\r\n\r\n const isStreamCapable = !(channel instanceof HttpChannel)\r\n\r\n if (isStreamCapable) {\r\n await this.handleStreamingChannel(channel, msg, domainId, session)\r\n } else {\r\n await this.handleBlockingChannel(channel, msg, domainId, session)\r\n }\r\n })\r\n } catch (err: any) {\r\n this.config.onError?.(err, `channel=${channel.id} user=${msg.userId}`)\r\n await channel.sendResponse(msg.userId, {\r\n type: 'error',\r\n content: err.message ?? 'Internal error',\r\n })\r\n }\r\n }\r\n\r\n private async handleBlockingChannel(\r\n channel: Channel,\r\n msg: UnifiedMessage,\r\n domainId: string,\r\n session: Session,\r\n ): Promise<void> {\r\n const history = session.messages.slice(0, -1)\r\n const result = await gatewayQuery({\r\n prompt: msg.text,\r\n domain: domainId,\r\n cwd: this.config.cwd,\r\n safeMode: this.config.safeMode,\r\n sessionMessages: convertSessionHistory(history),\r\n })\r\n\r\n session.messages.push({\r\n role: 'assistant',\r\n content: result.resultText,\r\n timestamp: Date.now(),\r\n })\r\n await this.sessions.save(session)\r\n\r\n await channel.sendResponse(msg.userId, {\r\n type: 'text',\r\n content: result.resultText,\r\n })\r\n await channel.sendResponse(msg.userId, { type: 'done', content: '' })\r\n }\r\n\r\n private async handleStreamingChannel(\r\n channel: Channel,\r\n msg: UnifiedMessage,\r\n domainId: string,\r\n session: Session,\r\n ): Promise<void> {\r\n const chunks: string[] = []\r\n const history = session.messages.slice(0, -1)\r\n\r\n for await (const chunk of gatewayQueryStream({\r\n prompt: msg.text,\r\n domain: domainId,\r\n cwd: this.config.cwd,\r\n safeMode: this.config.safeMode,\r\n sessionMessages: convertSessionHistory(history),\r\n })) {\r\n if (chunk.type === 'text') {\r\n chunks.push(chunk.content)\r\n }\r\n await channel.sendResponse(msg.userId, {\r\n type: chunk.type as AgentResponse['type'],\r\n content: chunk.content,\r\n })\r\n }\r\n\r\n session.messages.push({\r\n role: 'assistant',\r\n content: chunks.join(''),\r\n timestamp: Date.now(),\r\n })\r\n await this.sessions.save(session)\r\n }\r\n\r\n private async handleSseStream(msg: UnifiedMessage, res: ServerResponse): Promise<void> {\r\n const domainId = this.config.domain ?? getIdentity().domain\r\n const session = await this.sessions.getOrCreate(msg.sessionKey)\r\n\r\n session.messages.push({\r\n role: 'user',\r\n content: msg.text,\r\n timestamp: Date.now(),\r\n })\r\n\r\n const chunks: string[] = []\r\n\r\n const history = session.messages.slice(0, -1)\r\n\r\n try {\r\n for await (const chunk of gatewayQueryStream({\r\n prompt: msg.text,\r\n domain: domainId,\r\n cwd: this.config.cwd,\r\n safeMode: this.config.safeMode,\r\n sessionMessages: convertSessionHistory(history),\r\n })) {\r\n if (chunk.type === 'text') {\r\n chunks.push(chunk.content)\r\n }\r\n writeSseEvent(res, chunk.type, { content: chunk.content })\r\n }\r\n\r\n session.messages.push({\r\n role: 'assistant',\r\n content: chunks.join(''),\r\n timestamp: Date.now(),\r\n })\r\n await this.sessions.save(session)\r\n } catch (err: any) {\r\n writeSseEvent(res, 'error', { error: err.message ?? 'Internal error' })\r\n this.config.onError?.(err, `sse user=${msg.userId}`)\r\n } finally {\r\n res.end()\r\n }\r\n }\r\n\r\n async start(): Promise<void> {\r\n const startPromises = [...this.channels.values()].map(ch => ch.start())\r\n await Promise.all(startPromises)\r\n const identity = getIdentity()\r\n console.log(`[Gateway] Started with ${this.channels.size} channel(s) \u2014 identity: ${identity.name}, domain: ${this.config.domain ?? identity.domain}`)\r\n }\r\n\r\n async stop(): Promise<void> {\r\n const stopPromises = [...this.channels.values()].map(ch => ch.stop())\r\n await Promise.all(stopPromises)\r\n console.log('[Gateway] Stopped')\r\n }\r\n}\r\n", "import { createServer, type Server as HttpServer } from 'http'\r\nimport { WebSocketServer, type WebSocket } from 'ws'\r\nimport { randomUUID } from 'crypto'\r\nimport type { Channel, AgentResponse, MessageHandler, UnifiedMessage } from './types'\r\n\r\nexport interface WebSocketChannelConfig {\r\n port: number\r\n host?: string\r\n authToken?: string\r\n /** Attach to an existing HTTP server instead of creating one */\r\n server?: HttpServer\r\n}\r\n\r\ninterface WsClient {\r\n ws: WebSocket\r\n userId: string\r\n sessionKey: string\r\n}\r\n\r\nexport class WebSocketChannel implements Channel {\r\n readonly id = 'websocket'\r\n readonly name = 'WebSocket'\r\n\r\n private wss: WebSocketServer | null = null\r\n private ownServer: HttpServer | null = null\r\n private handler: MessageHandler | null = null\r\n private clients = new Map<string, WsClient>()\r\n private pendingResponses = new Map<string, AgentResponse[]>()\r\n\r\n constructor(private config: WebSocketChannelConfig) {}\r\n\r\n onMessage(handler: MessageHandler): void {\r\n this.handler = handler\r\n }\r\n\r\n async start(): Promise<void> {\r\n if (this.config.server) {\r\n this.wss = new WebSocketServer({ server: this.config.server })\r\n } else {\r\n this.ownServer = createServer()\r\n this.wss = new WebSocketServer({ server: this.ownServer })\r\n await new Promise<void>((resolve) => {\r\n this.ownServer!.listen(this.config.port, this.config.host ?? '0.0.0.0', resolve)\r\n })\r\n console.log(`[WebSocket] Listening on ${this.config.host ?? '0.0.0.0'}:${this.config.port}`)\r\n }\r\n\r\n this.wss.on('connection', (ws, req) => this.handleConnection(ws, req))\r\n }\r\n\r\n async stop(): Promise<void> {\r\n if (this.wss) {\r\n for (const client of this.clients.values()) {\r\n client.ws.close(1001, 'Server shutting down')\r\n }\r\n this.clients.clear()\r\n this.wss.close()\r\n this.wss = null\r\n }\r\n if (this.ownServer) {\r\n await new Promise<void>((resolve) => this.ownServer!.close(() => resolve()))\r\n this.ownServer = null\r\n }\r\n }\r\n\r\n async sendResponse(clientId: string, response: AgentResponse): Promise<void> {\r\n const client = this.clients.get(clientId)\r\n if (client && client.ws.readyState === 1 /* OPEN */) {\r\n client.ws.send(JSON.stringify({\r\n type: 'response',\r\n data: response,\r\n }))\r\n }\r\n\r\n const pending = this.pendingResponses.get(clientId)\r\n if (pending) {\r\n pending.push(response)\r\n }\r\n }\r\n\r\n private handleConnection(ws: WebSocket, req: import('http').IncomingMessage): void {\r\n if (this.config.authToken) {\r\n const url = new URL(req.url ?? '/', `http://${req.headers.host}`)\r\n const token = url.searchParams.get('token')\r\n if (token !== this.config.authToken) {\r\n ws.close(4001, 'Unauthorized')\r\n return\r\n }\r\n }\r\n\r\n const clientId = randomUUID()\r\n this.clients.set(clientId, {\r\n ws,\r\n userId: clientId,\r\n sessionKey: `ws:${clientId}`,\r\n })\r\n\r\n ws.on('message', (raw) => this.handleWsMessage(clientId, raw))\r\n ws.on('close', () => {\r\n this.clients.delete(clientId)\r\n })\r\n ws.on('error', (err) => {\r\n console.error(`[WebSocket] Client ${clientId} error:`, err.message)\r\n this.clients.delete(clientId)\r\n })\r\n\r\n ws.send(JSON.stringify({\r\n type: 'connected',\r\n data: { clientId },\r\n }))\r\n }\r\n\r\n private async handleWsMessage(clientId: string, raw: import('ws').RawData): Promise<void> {\r\n let parsed: any\r\n try {\r\n parsed = JSON.parse(String(raw))\r\n } catch {\r\n this.sendToClient(clientId, {\r\n type: 'error',\r\n data: { error: 'Invalid JSON' },\r\n })\r\n return\r\n }\r\n\r\n const { type, message, userId, sessionKey } = parsed\r\n\r\n if (type === 'ping') {\r\n this.sendToClient(clientId, { type: 'pong', data: {} })\r\n return\r\n }\r\n\r\n if (type !== 'chat' || !message || typeof message !== 'string') {\r\n this.sendToClient(clientId, {\r\n type: 'error',\r\n data: { error: 'Expected { type: \"chat\", message: \"...\" }' },\r\n })\r\n return\r\n }\r\n\r\n if (!this.handler) {\r\n this.sendToClient(clientId, {\r\n type: 'error',\r\n data: { error: 'No handler registered' },\r\n })\r\n return\r\n }\r\n\r\n const resolvedUserId = userId ?? clientId\r\n const resolvedSessionKey = sessionKey ?? `ws:${resolvedUserId}`\r\n\r\n const client = this.clients.get(clientId)\r\n if (client) {\r\n client.userId = resolvedUserId\r\n client.sessionKey = resolvedSessionKey\r\n }\r\n\r\n try {\r\n await this.handler({\r\n channelId: 'websocket',\r\n userId: clientId,\r\n sessionKey: resolvedSessionKey,\r\n text: message,\r\n metadata: { originalUserId: resolvedUserId },\r\n })\r\n } catch (err: any) {\r\n this.sendToClient(clientId, {\r\n type: 'error',\r\n data: { error: err.message ?? 'Internal error' },\r\n })\r\n }\r\n }\r\n\r\n private sendToClient(clientId: string, msg: { type: string; data: unknown }): void {\r\n const client = this.clients.get(clientId)\r\n if (client && client.ws.readyState === 1) {\r\n client.ws.send(JSON.stringify(msg))\r\n }\r\n }\r\n\r\n}\r\n", "import { createInterface, type Interface as ReadlineInterface } from 'readline'\nimport type { Channel, AgentResponse, MessageHandler } from './types'\n\nexport interface CliChannelOptions {\n userId?: string\n prompt?: string\n input?: NodeJS.ReadableStream\n output?: NodeJS.WritableStream\n}\n\nexport class CliChannel implements Channel {\n readonly id = 'cli'\n readonly name = 'CLI'\n\n private handler: MessageHandler | null = null\n private rl: ReadlineInterface | null = null\n private userId: string\n private promptStr: string\n private input: NodeJS.ReadableStream\n private output: NodeJS.WritableStream\n private active = false\n\n constructor(options: CliChannelOptions = {}) {\n this.userId = options.userId ?? 'cli-user'\n this.promptStr = options.prompt ?? '> '\n this.input = options.input ?? process.stdin\n this.output = options.output ?? process.stdout\n }\n\n onMessage(handler: MessageHandler): void {\n this.handler = handler\n }\n\n async start(): Promise<void> {\n this.active = true\n this.rl = createInterface({\n input: this.input,\n output: this.output,\n prompt: this.promptStr,\n })\n\n this.rl.on('line', async (line: string) => {\n const text = line.trim()\n if (!text) {\n this.rl?.prompt()\n return\n }\n\n if (text === '/exit' || text === '/quit') {\n await this.stop()\n return\n }\n\n if (!this.handler) {\n this.rl?.prompt()\n return\n }\n\n this.rl?.pause()\n try {\n await this.handler({\n channelId: this.id,\n userId: this.userId,\n sessionKey: `cli:${this.userId}`,\n text,\n })\n } finally {\n if (this.active) {\n this.rl?.resume()\n this.rl?.prompt()\n }\n }\n })\n\n this.rl.on('close', () => {\n this.active = false\n })\n\n setTimeout(() => {\n if (this.active) {\n this.output.write('\\n')\n this.rl?.prompt()\n }\n }, 100)\n }\n\n async stop(): Promise<void> {\n this.active = false\n this.rl?.close()\n this.rl = null\n }\n\n async sendResponse(_userId: string, response: AgentResponse): Promise<void> {\n if (!this.active) return\n\n switch (response.type) {\n case 'text':\n this.write(response.content)\n break\n case 'thinking':\n this.write(`[thinking] ${response.content}`)\n break\n case 'error':\n this.write(`[error] ${response.content}`)\n break\n case 'tool_call':\n this.write(`[tool] ${response.content}`)\n break\n case 'tool_result':\n this.write(`[result] ${response.content}`)\n break\n case 'done':\n this.write('')\n break\n }\n }\n\n async requestPermission(_userId: string, description: string): Promise<boolean> {\n if (!this.rl) return false\n\n return new Promise((resolve) => {\n this.write(`\\n[Permission] ${description}`)\n this.rl!.question('Allow? (y/n) ', (answer: string) => {\n resolve(answer.trim().toLowerCase().startsWith('y'))\n })\n })\n }\n\n private write(text: string): void {\n this.output.write(`${text}\\n`)\n }\n}\n", "import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync, unlinkSync } from 'fs'\r\nimport { join } from 'path'\r\nimport type { Session, SessionStorage } from './types'\r\n\r\nexport class FileSessionStorage implements SessionStorage {\r\n constructor(private dir: string) {\r\n if (!existsSync(dir)) {\r\n mkdirSync(dir, { recursive: true })\r\n }\r\n }\r\n\r\n private filePath(key: string): string {\r\n const safeKey = key.replace(/[^a-zA-Z0-9_-]/g, '_')\r\n return join(this.dir, `${safeKey}.json`)\r\n }\r\n\r\n async load(key: string): Promise<Session | null> {\r\n const path = this.filePath(key)\r\n if (!existsSync(path)) return null\r\n try {\r\n return JSON.parse(readFileSync(path, 'utf-8'))\r\n } catch {\r\n return null\r\n }\r\n }\r\n\r\n async save(key: string, session: Session): Promise<void> {\r\n session.updatedAt = Date.now()\r\n writeFileSync(this.filePath(key), JSON.stringify(session, null, 2), 'utf-8')\r\n }\r\n\r\n async list(): Promise<string[]> {\r\n if (!existsSync(this.dir)) return []\r\n return readdirSync(this.dir)\r\n .filter(f => f.endsWith('.json'))\r\n .map(f => f.replace('.json', ''))\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n const path = this.filePath(key)\r\n if (existsSync(path)) unlinkSync(path)\r\n }\r\n}\r\n", "#!/usr/bin/env bun\r\n\r\nimport { Gateway } from '../gateway/gateway'\r\nimport { HttpChannel } from '../channels/http'\r\nimport { WebSocketChannel } from '../channels/websocket'\r\nimport { CliChannel } from '../channels/cli'\r\nimport { FileSessionStorage } from '../sessions/storage'\r\nimport { setIdentity } from '../core/identity'\r\nimport { loggingMiddleware, rateLimitMiddleware, maxConcurrencyMiddleware } from '../gateway/middleware'\r\nimport { join, dirname } from 'path'\r\nimport { homedir } from 'os'\r\nimport { existsSync } from 'fs'\r\nimport { fileURLToPath } from 'url'\r\nimport { enableConfigs, getGlobalConfig } from '@utils/config'\r\nimport { showSetupScreens } from './cli/setupScreens'\r\nimport { logError } from '@utils/log'\r\nimport { tryInitSandboxPool, shutdownSandboxPool } from '@services/sandbox'\r\nimport {\r\n registerHealthProbe,\r\n startPeriodicHealthCheck,\r\n stopPeriodicHealthCheck,\r\n} from '@services/ai/healthCheck'\r\n\r\ninterface GatewayCliOptions {\r\n port: number\r\n wsPort?: number\r\n host: string\r\n domain: string\r\n authToken?: string\r\n corsOrigin?: string\r\n sessionDir?: string\r\n cwd?: string\r\n safeMode: boolean\r\n enableLogging: boolean\r\n rateLimit?: number\r\n name?: string\r\n description?: string\r\n cli?: boolean\r\n webDir?: string\r\n}\r\n\r\nfunction parseArgs(argv: string[]): GatewayCliOptions {\r\n const opts: GatewayCliOptions = {\r\n port: 3000,\r\n host: '0.0.0.0',\r\n domain: 'general',\r\n safeMode: false,\r\n enableLogging: true,\r\n }\r\n\r\n for (let i = 2; i < argv.length; i++) {\r\n const arg = argv[i]\r\n const next = argv[i + 1]\r\n\r\n switch (arg) {\r\n case '--port':\r\n opts.port = parseInt(next, 10); i++; break\r\n case '--ws-port':\r\n opts.wsPort = parseInt(next, 10); i++; break\r\n case '--host':\r\n opts.host = next; i++; break\r\n case '--domain':\r\n opts.domain = next; i++; break\r\n case '--auth-token':\r\n opts.authToken = next; i++; break\r\n case '--cors-origin':\r\n opts.corsOrigin = next; i++; break\r\n case '--session-dir':\r\n opts.sessionDir = next; i++; break\r\n case '--cwd':\r\n opts.cwd = next; i++; break\r\n case '--safe-mode':\r\n opts.safeMode = true; break\r\n case '--no-logging':\r\n opts.enableLogging = false; break\r\n case '--rate-limit':\r\n opts.rateLimit = parseInt(next, 10); i++; break\r\n case '--name':\r\n opts.name = next; i++; break\r\n case '--description':\r\n opts.description = next; i++; break\r\n case '--cli':\r\n opts.cli = true; break\r\n case '--web-dir':\r\n opts.webDir = next; i++; break\r\n case '--help':\r\n printHelp(); process.exit(0)\r\n }\r\n }\r\n\r\n return opts\r\n}\r\n\r\nfunction printHelp(): void {\r\n console.log(`\r\nUsage: newcraw gateway [options]\r\n\r\nOptions:\r\n --port <number> HTTP port (default: 3000)\r\n --ws-port <number> WebSocket port (if omitted, WS is disabled)\r\n --host <string> Bind host (default: 0.0.0.0)\r\n --domain <string> Domain: coding | general (default: general)\r\n --auth-token <string> Bearer token for API / WS auth\r\n --cors-origin <string> CORS origin (default: *)\r\n --session-dir <path> Session storage directory\r\n --cwd <path> Working directory for agent\r\n --safe-mode Enable safe mode (restrict dangerous operations)\r\n --no-logging Disable request logging\r\n --rate-limit <number> Max requests per minute per session (default: 30)\r\n --name <string> Agent name\r\n --description <string> Agent description\r\n --cli Enable interactive CLI channel (stdin/stdout REPL)\r\n --web-dir <path> Serve web UI from directory (default: auto-detect web/dist)\r\n --help Show this help\r\n\r\nEndpoints:\r\n GET /health Health check\r\n POST /api/chat Blocking JSON response\r\n POST /api/chat/stream SSE streaming response\r\n WS ws://host:ws-port WebSocket (bidirectional streaming)\r\n`)\r\n}\r\n\r\nfunction resolveWebDir(explicit?: string): string | undefined {\r\n if (explicit) {\r\n return existsSync(explicit) ? explicit : undefined\r\n }\r\n const thisDir = dirname(fileURLToPath(import.meta.url))\r\n const candidates = [\r\n join(process.cwd(), 'web', 'dist'),\r\n // Built output lives in dist/ \u2014 one level up reaches package root\r\n join(thisDir, '..', 'web', 'dist'),\r\n // Source layout lives in src/entrypoints/ \u2014 two levels up reaches project root\r\n join(thisDir, '..', '..', 'web', 'dist'),\r\n ]\r\n for (const candidate of candidates) {\r\n if (existsSync(join(candidate, 'index.html'))) {\r\n return candidate\r\n }\r\n }\r\n return undefined\r\n}\r\n\r\nasync function main(): Promise<void> {\r\n const opts = parseArgs(process.argv)\r\n\r\n try {\r\n enableConfigs()\r\n } catch (e) {\r\n logError(e)\r\n }\r\n\r\n const config = getGlobalConfig()\r\n if (!config.hasCompletedOnboarding) {\r\n await showSetupScreens(opts.safeMode)\r\n }\r\n\r\n if (opts.name || opts.description) {\r\n setIdentity({\r\n ...(opts.name ? { name: opts.name } : {}),\r\n ...(opts.description ? { description: opts.description } : {}),\r\n domain: opts.domain,\r\n })\r\n }\r\n\r\n const sessionDir = opts.sessionDir ?? join(homedir(), '.newcraw', 'gateway-sessions')\r\n const storage = new FileSessionStorage(sessionDir)\r\n\r\n const middleware = []\r\n if (opts.enableLogging) middleware.push(loggingMiddleware())\r\n middleware.push(rateLimitMiddleware({ maxRequests: opts.rateLimit ?? 30 }))\r\n middleware.push(maxConcurrencyMiddleware())\r\n\r\n const gateway = new Gateway({\r\n storage,\r\n domain: opts.domain,\r\n cwd: opts.cwd,\r\n safeMode: opts.safeMode,\r\n middleware,\r\n onError: (err, ctx) => console.error(`[Gateway Error] ${ctx}:`, err.message),\r\n })\r\n\r\n const webDistDir = resolveWebDir(opts.webDir)\r\n if (webDistDir) {\r\n console.log(`[Gateway] Serving web UI from ${webDistDir}`)\r\n }\r\n\r\n const httpChannel = new HttpChannel({\r\n port: opts.port,\r\n host: opts.host,\r\n authToken: opts.authToken,\r\n corsOrigin: opts.corsOrigin,\r\n webDistDir,\r\n })\r\n gateway.registerChannel(httpChannel)\r\n\r\n if (opts.wsPort) {\r\n const wsChannel = new WebSocketChannel({\r\n port: opts.wsPort,\r\n host: opts.host,\r\n authToken: opts.authToken,\r\n })\r\n gateway.registerChannel(wsChannel)\r\n }\r\n\r\n if (opts.cli) {\r\n const cliChannel = new CliChannel({ prompt: `[${opts.name ?? 'NewCraw'}] > ` })\r\n gateway.registerChannel(cliChannel)\r\n }\r\n\r\n const { pool: sandboxPool, capabilities: sandboxCaps } = await tryInitSandboxPool()\r\n if (sandboxPool) {\r\n console.log(`[Gateway] Container sandbox ready: ${sandboxCaps.name} (${sandboxCaps.version ?? 'unknown'})${sandboxCaps.rootless ? ' [rootless]' : ''}`)\r\n } else {\r\n console.log(`[Gateway] Container sandbox not available (bwrap/sandbox-exec fallback active)`)\r\n }\r\n\r\n registerHealthProbe(async (provider: string) => {\r\n try {\r\n const { getModelManager } = await import('@utils/model')\r\n const manager = getModelManager()\r\n const profiles = [\r\n manager.getModel('main'),\r\n manager.getModel('task'),\r\n manager.getModel('quick'),\r\n ].filter(Boolean)\r\n const match = profiles.find((p: any) => p?.provider === provider)\r\n if (!match) return true\r\n const OpenAI = (await import('openai')).default\r\n const client = new OpenAI({\r\n apiKey: (match as any).apiKey ?? process.env.OPENAI_API_KEY ?? 'sk-probe',\r\n baseURL: (match as any).baseUrl,\r\n timeout: 10_000,\r\n })\r\n await client.models.list()\r\n return true\r\n } catch {\r\n return false\r\n }\r\n })\r\n\r\n try {\r\n const { getModelManager } = await import('@utils/model')\r\n const manager = getModelManager()\r\n const providerSet = new Set<string>()\r\n for (const role of ['main', 'task', 'quick'] as const) {\r\n const profile = manager.getModel(role)\r\n if (profile && (profile as any).provider) {\r\n providerSet.add((profile as any).provider)\r\n }\r\n }\r\n if (providerSet.size > 0) {\r\n startPeriodicHealthCheck([...providerSet])\r\n }\r\n } catch {\r\n // model manager not ready yet\r\n }\r\n\r\n process.on('SIGINT', async () => {\r\n stopPeriodicHealthCheck()\r\n await shutdownSandboxPool()\r\n await gateway.stop()\r\n process.exit(0)\r\n })\r\n\r\n process.on('SIGTERM', async () => {\r\n stopPeriodicHealthCheck()\r\n await shutdownSandboxPool()\r\n await gateway.stop()\r\n process.exit(0)\r\n })\r\n\r\n await gateway.start()\r\n}\r\n\r\nmain().catch((err) => {\r\n console.error('Fatal:', err)\r\n process.exit(1)\r\n})\r\n"],
5
+ "mappings": "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",
6
+ "names": ["randomUUID", "resolve", "randomUUID", "createServer", "randomUUID", "resolve", "resolve", "join", "join", "existsSync", "existsSync", "join"]
7
+ }
@@ -0,0 +1,16 @@
1
+ import { createRequire as __newcrawCreateRequire } from "node:module";
2
+ const require = __newcrawCreateRequire(import.meta.url);
3
+ import {
4
+ getIdentity,
5
+ getIdentityPrompt,
6
+ resetIdentity,
7
+ setIdentity
8
+ } from "./chunk-JLVECHVJ.js";
9
+ import "./chunk-UYWZQVH5.js";
10
+ import "./chunk-D4OZACS2.js";
11
+ export {
12
+ getIdentity,
13
+ getIdentityPrompt,
14
+ resetIdentity,
15
+ setIdentity
16
+ };
package/dist/index.js CHANGED
@@ -1,11 +1,13 @@
1
1
  import { createRequire as __newcrawCreateRequire } from "node:module";
2
2
  const require = __newcrawCreateRequire(import.meta.url);
3
3
  import {
4
- MACRO
5
- } from "./chunk-ZYSVG4X3.js";
6
- import "./chunk-AXWJI6N5.js";
4
+ MACRO,
5
+ init_macros
6
+ } from "./chunk-EHQ2M5B4.js";
7
+ import "./chunk-D4OZACS2.js";
7
8
 
8
9
  // src/entrypoints/index.ts
10
+ init_macros();
9
11
  function hasFlag(...flags) {
10
12
  return process.argv.some((arg) => flags.includes(arg));
11
13
  }
@@ -28,9 +30,9 @@ Common options:
28
30
  process.exit(0);
29
31
  }
30
32
  if (hasFlag("--acp")) {
31
- await import("./acp-J4WDYGRX.js");
33
+ await import("./acp-HA476EHW.js");
32
34
  } else if (process.argv[2] === "gateway") {
33
- await import("./gateway-IZYO6YFJ.js");
35
+ await import("./gateway-SUXSILQL.js");
34
36
  } else {
35
- await import("./cli-KZGF3FV5.js");
37
+ await import("./cli-4KO6TA5J.js");
36
38
  }
package/dist/index.js.map CHANGED
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/entrypoints/index.ts"],
4
4
  "sourcesContent": ["import { MACRO } from '../constants/macros'\r\n\r\nfunction hasFlag(...flags: string[]): boolean {\r\n return process.argv.some(arg => flags.includes(arg))\r\n}\r\n\r\nif (hasFlag('--version', '-v')) {\r\n process.stdout.write(`${MACRO.VERSION || ''}\\n`)\r\n process.exit(0)\r\n}\r\n\r\nif (hasFlag('--help-lite')) {\r\n process.stdout.write(\r\n `Usage: newcraw [options] [command] [prompt]\\n\\n` +\r\n `Common options:\\n` +\r\n ` -h, --help Show full help\\n` +\r\n ` -v, --version Show version\\n` +\r\n ` -p, --print Print response and exit (non-interactive)\\n` +\r\n ` -c, --cwd <cwd> Set working directory\\n`,\r\n )\r\n process.exit(0)\r\n}\r\n\r\nif (hasFlag('--acp')) {\r\n await import('./acp.js')\r\n} else if (process.argv[2] === 'gateway') {\r\n await import('./gateway.js')\r\n} else {\r\n await import('./cli.js')\r\n}\r\n"],
5
- "mappings": ";;;;;;;;AAEA,SAAS,WAAW,OAA0B;AAC5C,SAAO,QAAQ,KAAK,KAAK,SAAO,MAAM,SAAS,GAAG,CAAC;AACrD;AAEA,IAAI,QAAQ,aAAa,IAAI,GAAG;AAC9B,UAAQ,OAAO,MAAM,GAAG,MAAM,WAAW,EAAE;AAAA,CAAI;AAC/C,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAI,QAAQ,aAAa,GAAG;AAC1B,UAAQ,OAAO;AAAA,IACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMF;AACA,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAI,QAAQ,OAAO,GAAG;AACpB,QAAM,OAAO,mBAAU;AACzB,WAAW,QAAQ,KAAK,CAAC,MAAM,WAAW;AACxC,QAAM,OAAO,uBAAc;AAC7B,OAAO;AACL,QAAM,OAAO,mBAAU;AACzB;",
5
+ "mappings": ";;;;;;;;;AAAA;AAEA,SAAS,WAAW,OAA0B;AAC5C,SAAO,QAAQ,KAAK,KAAK,SAAO,MAAM,SAAS,GAAG,CAAC;AACrD;AAEA,IAAI,QAAQ,aAAa,IAAI,GAAG;AAC9B,UAAQ,OAAO,MAAM,GAAG,MAAM,WAAW,EAAE;AAAA,CAAI;AAC/C,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAI,QAAQ,aAAa,GAAG;AAC1B,UAAQ,OAAO;AAAA,IACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMF;AACA,UAAQ,KAAK,CAAC;AAChB;AAEA,IAAI,QAAQ,OAAO,GAAG;AACpB,QAAM,OAAO,mBAAU;AACzB,WAAW,QAAQ,KAAK,CAAC,MAAM,WAAW;AACxC,QAAM,OAAO,uBAAc;AAC7B,OAAO;AACL,QAAM,OAAO,mBAAU;AACzB;",
6
6
  "names": []
7
7
  }
@@ -5,7 +5,7 @@ import {
5
5
  resetKodeAgentSessionIdForTests,
6
6
  setKodeAgentSessionId
7
7
  } from "./chunk-7ZFLZNOW.js";
8
- import "./chunk-AXWJI6N5.js";
8
+ import "./chunk-D4OZACS2.js";
9
9
  export {
10
10
  getKodeAgentSessionId,
11
11
  resetKodeAgentSessionIdForTests,
@@ -4,13 +4,14 @@ import {
4
4
  findMostRecentKodeAgentSessionId,
5
5
  loadKodeAgentSessionLogData,
6
6
  loadKodeAgentSessionMessages
7
- } from "./chunk-3LMXSKZ7.js";
8
- import "./chunk-XXU2NVOE.js";
7
+ } from "./chunk-NFXLN6FJ.js";
8
+ import "./chunk-KJTPUTU7.js";
9
9
  import "./chunk-JX5ZQYTQ.js";
10
10
  import "./chunk-7ZFLZNOW.js";
11
- import "./chunk-IM33F5CM.js";
12
- import "./chunk-ZYSVG4X3.js";
13
- import "./chunk-AXWJI6N5.js";
11
+ import "./chunk-XYQZLDRB.js";
12
+ import "./chunk-UYWZQVH5.js";
13
+ import "./chunk-EHQ2M5B4.js";
14
+ import "./chunk-D4OZACS2.js";
14
15
  export {
15
16
  findMostRecentKodeAgentSessionId,
16
17
  loadKodeAgentSessionLogData,
@@ -3,13 +3,14 @@ const require = __newcrawCreateRequire(import.meta.url);
3
3
  import {
4
4
  listKodeAgentSessions,
5
5
  resolveResumeSessionIdentifier
6
- } from "./chunk-XS6PU75S.js";
7
- import "./chunk-XXU2NVOE.js";
6
+ } from "./chunk-IVWPPTDM.js";
7
+ import "./chunk-KJTPUTU7.js";
8
8
  import "./chunk-JX5ZQYTQ.js";
9
9
  import "./chunk-7ZFLZNOW.js";
10
- import "./chunk-IM33F5CM.js";
11
- import "./chunk-ZYSVG4X3.js";
12
- import "./chunk-AXWJI6N5.js";
10
+ import "./chunk-XYQZLDRB.js";
11
+ import "./chunk-UYWZQVH5.js";
12
+ import "./chunk-EHQ2M5B4.js";
13
+ import "./chunk-D4OZACS2.js";
13
14
  export {
14
15
  listKodeAgentSessions,
15
16
  resolveResumeSessionIdentifier
@@ -3,11 +3,13 @@ const require = __newcrawCreateRequire(import.meta.url);
3
3
  import {
4
4
  kodeMessageToSdkMessage,
5
5
  makeSdkInitMessage,
6
+ makeSdkReasoningMessage,
6
7
  makeSdkResultMessage
7
- } from "./chunk-XMGUQHMF.js";
8
- import "./chunk-AXWJI6N5.js";
8
+ } from "./chunk-VSSVN6WG.js";
9
+ import "./chunk-D4OZACS2.js";
9
10
  export {
10
11
  kodeMessageToSdkMessage,
11
12
  makeSdkInitMessage,
13
+ makeSdkReasoningMessage,
12
14
  makeSdkResultMessage
13
15
  };
@@ -2,12 +2,13 @@ import { createRequire as __newcrawCreateRequire } from "node:module";
2
2
  const require = __newcrawCreateRequire(import.meta.url);
3
3
  import {
4
4
  kodeMessageToSdkMessage,
5
+ makeSdkReasoningMessage,
5
6
  makeSdkResultMessage
6
- } from "./chunk-XMGUQHMF.js";
7
+ } from "./chunk-VSSVN6WG.js";
7
8
  import {
8
9
  createUserMessage
9
- } from "./chunk-A7X6OCZE.js";
10
- import "./chunk-AXWJI6N5.js";
10
+ } from "./chunk-IXFBUXQW.js";
11
+ import "./chunk-D4OZACS2.js";
11
12
 
12
13
  // src/utils/protocol/kodeAgentStreamJsonSession.ts
13
14
  async function runKodeAgentStreamJsonSession(args) {
@@ -47,6 +48,7 @@ async function runKodeAgentStreamJsonSession(args) {
47
48
  let lastAssistant = null;
48
49
  let queryError = null;
49
50
  const toAppend = [];
51
+ const reasoningEvents = [];
50
52
  try {
51
53
  const inputForTurn = [...conversation];
52
54
  for await (const m of args.query(
@@ -56,9 +58,14 @@ async function runKodeAgentStreamJsonSession(args) {
56
58
  args.canUseTool,
57
59
  {
58
60
  ...args.toolUseContextBase,
59
- abortController: turnAbortController
61
+ abortController: turnAbortController,
62
+ reasoningEvents
60
63
  }
61
64
  )) {
65
+ while (reasoningEvents.length > 0) {
66
+ const event = reasoningEvents.shift();
67
+ args.writeSdkLine(makeSdkReasoningMessage(event, args.sessionId));
68
+ }
62
69
  if (m.type === "assistant") lastAssistant = m;
63
70
  if (m.type !== "progress") {
64
71
  toAppend.push(m);
@@ -66,6 +73,10 @@ async function runKodeAgentStreamJsonSession(args) {
66
73
  const sdk = kodeMessageToSdkMessage(m, args.sessionId);
67
74
  if (sdk) args.writeSdkLine(sdk);
68
75
  }
76
+ while (reasoningEvents.length > 0) {
77
+ const event = reasoningEvents.shift();
78
+ args.writeSdkLine(makeSdkReasoningMessage(event, args.sessionId));
79
+ }
69
80
  } catch (e) {
70
81
  queryError = e;
71
82
  try {
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/utils/protocol/kodeAgentStreamJsonSession.ts"],
4
+ "sourcesContent": ["import type { Message, ReasoningEvent } from '@query'\r\nimport type { CanUseToolFn } from '@newcraw-types/canUseTool'\r\nimport type { ToolUseContext } from '@tool'\r\nimport { createUserMessage } from '@utils/messages'\r\nimport {\r\n kodeMessageToSdkMessage,\r\n makeSdkReasoningMessage,\r\n makeSdkResultMessage,\r\n type SdkMessage,\r\n} from './kodeAgentStreamJson'\r\nimport type { KodeAgentStructuredStdio } from './kodeAgentStructuredStdio'\r\n\r\ntype QueryFn = (\r\n messages: Message[],\r\n systemPrompt: string[],\r\n context: { [k: string]: string },\r\n canUseTool: CanUseToolFn,\r\n toolUseContext: ToolUseContext & { setToolJSX: (jsx: any) => void },\r\n) => AsyncGenerator<Message, void>\r\n\r\nexport async function runKodeAgentStreamJsonSession(args: {\r\n structured: KodeAgentStructuredStdio\r\n query: QueryFn\r\n writeSdkLine: (obj: SdkMessage) => void\r\n sessionId: string\r\n systemPrompt: string[]\r\n jsonSchema?: Record<string, unknown> | null\r\n context: { [k: string]: string }\r\n canUseTool: CanUseToolFn\r\n toolUseContextBase: Omit<ToolUseContext, 'abortController'> & {\r\n abortController?: never\r\n setToolJSX: (jsx: any) => void\r\n }\r\n replayUserMessages: boolean\r\n getTotalCostUsd: () => number\r\n onActiveTurnAbortControllerChanged?: (\r\n controller: AbortController | null,\r\n ) => void\r\n initialMessages?: Message[]\r\n}): Promise<void> {\r\n const conversation: Message[] = [...(args.initialMessages ?? [])]\r\n const seenUserUuids = new Set<string>()\r\n\r\n while (true) {\r\n let sdkUser: any\r\n try {\r\n sdkUser = await args.structured.nextUserMessage()\r\n } catch {\r\n return\r\n }\r\n\r\n const sdkMessage = sdkUser?.message\r\n const sdkContent = sdkMessage?.content\r\n if (typeof sdkContent !== 'string' && !Array.isArray(sdkContent)) {\r\n throw new Error('Error: Invalid stream-json user message content')\r\n }\r\n\r\n const providedUuid =\r\n typeof sdkUser?.uuid === 'string' && sdkUser.uuid\r\n ? String(sdkUser.uuid)\r\n : null\r\n\r\n const userMsg = createUserMessage(sdkContent as any) as any\r\n if (providedUuid) {\r\n userMsg.uuid = providedUuid\r\n }\r\n\r\n const isDuplicate = Boolean(providedUuid && seenUserUuids.has(providedUuid))\r\n\r\n if (args.replayUserMessages) {\r\n const sdkUserOut = kodeMessageToSdkMessage(userMsg, args.sessionId)\r\n if (sdkUserOut) args.writeSdkLine(sdkUserOut)\r\n }\r\n\r\n if (isDuplicate) {\r\n continue\r\n }\r\n\r\n if (providedUuid) seenUserUuids.add(providedUuid)\r\n\r\n conversation.push(userMsg)\r\n\r\n const costBefore = args.getTotalCostUsd()\r\n const startedAt = Date.now()\r\n const turnAbortController = new AbortController()\r\n args.onActiveTurnAbortControllerChanged?.(turnAbortController)\r\n\r\n let lastAssistant: any | null = null\r\n let queryError: unknown = null\r\n const toAppend: Message[] = []\r\n const reasoningEvents: ReasoningEvent[] = []\r\n\r\n try {\r\n const inputForTurn = [...conversation]\r\n for await (const m of args.query(\r\n inputForTurn,\r\n args.systemPrompt,\r\n args.context,\r\n args.canUseTool,\r\n {\r\n ...args.toolUseContextBase,\r\n abortController: turnAbortController,\r\n reasoningEvents,\r\n } as any,\r\n )) {\r\n while (reasoningEvents.length > 0) {\r\n const event = reasoningEvents.shift()!\r\n args.writeSdkLine(makeSdkReasoningMessage(event, args.sessionId))\r\n }\r\n\r\n if (m.type === 'assistant') lastAssistant = m as any\r\n if (m.type !== 'progress') {\r\n toAppend.push(m)\r\n }\r\n\r\n const sdk = kodeMessageToSdkMessage(m as any, args.sessionId)\r\n if (sdk) args.writeSdkLine(sdk)\r\n }\r\n\r\n while (reasoningEvents.length > 0) {\r\n const event = reasoningEvents.shift()!\r\n args.writeSdkLine(makeSdkReasoningMessage(event, args.sessionId))\r\n }\r\n } catch (e) {\r\n queryError = e\r\n try {\r\n turnAbortController.abort()\r\n } catch {}\r\n } finally {\r\n args.onActiveTurnAbortControllerChanged?.(null)\r\n }\r\n\r\n conversation.push(...toAppend)\r\n\r\n const textFromAssistant = lastAssistant?.message?.content?.find(\r\n (c: any) => c.type === 'text',\r\n )?.text\r\n const resultText =\r\n typeof textFromAssistant === 'string'\r\n ? textFromAssistant\r\n : queryError instanceof Error\r\n ? queryError.message\r\n : queryError\r\n ? String(queryError)\r\n : ''\r\n\r\n let structuredOutput: Record<string, unknown> | undefined\r\n if (args.jsonSchema && !queryError) {\r\n try {\r\n const fenced = String(resultText).trim()\r\n const unfenced = (() => {\r\n const m = fenced.match(/^```(?:json)?\\\\s*([\\\\s\\\\S]*?)\\\\s*```$/i)\r\n return m ? m[1]!.trim() : fenced\r\n })()\r\n\r\n const parsed = JSON.parse(unfenced)\r\n const Ajv = (await import('ajv')).default as any\r\n const ajv = new Ajv({ allErrors: true, strict: false })\r\n const validate = ajv.compile(args.jsonSchema)\r\n const ok = validate(parsed)\r\n if (!ok) {\r\n const errorText =\r\n typeof ajv.errorsText === 'function'\r\n ? ajv.errorsText(validate.errors, { separator: '; ' })\r\n : JSON.stringify(validate.errors ?? [])\r\n throw new Error(\r\n `Structured output failed JSON schema validation: ${errorText}`,\r\n )\r\n }\r\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\r\n throw new Error('Structured output must be a JSON object')\r\n }\r\n structuredOutput = parsed as Record<string, unknown>\r\n } catch (e) {\r\n queryError = e\r\n }\r\n }\r\n\r\n const usage = lastAssistant?.message?.usage\r\n const durationMs = Date.now() - startedAt\r\n const totalCostUsd = Math.max(0, args.getTotalCostUsd() - costBefore)\r\n const isError = Boolean(queryError) || turnAbortController.signal.aborted\r\n\r\n args.writeSdkLine(\r\n makeSdkResultMessage({\r\n sessionId: args.sessionId,\r\n result: String(resultText),\r\n structuredOutput,\r\n numTurns: 1,\r\n usage,\r\n totalCostUsd,\r\n durationMs,\r\n durationApiMs: 0,\r\n isError,\r\n }) as any,\r\n )\r\n }\r\n}\r\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -2,9 +2,9 @@ import { createRequire as __newcrawCreateRequire } from "node:module";
2
2
  const require = __newcrawCreateRequire(import.meta.url);
3
3
  import {
4
4
  KodeAgentStructuredStdio
5
- } from "./chunk-N5OHRWG2.js";
6
- import "./chunk-KQSHIOZK.js";
7
- import "./chunk-AXWJI6N5.js";
5
+ } from "./chunk-QSRXXZO7.js";
6
+ import "./chunk-NT7RDVDA.js";
7
+ import "./chunk-D4OZACS2.js";
8
8
  export {
9
9
  KodeAgentStructuredStdio
10
10
  };
@@ -13,13 +13,14 @@ import {
13
13
  runStopHooks,
14
14
  runUserPromptSubmitHooks,
15
15
  updateHookTranscriptForMessages
16
- } from "./chunk-V5U6BHT2.js";
16
+ } from "./chunk-KS646CDL.js";
17
17
  import "./chunk-7ZFLZNOW.js";
18
- import "./chunk-2EFL22PV.js";
18
+ import "./chunk-JI4HCLK7.js";
19
19
  import "./chunk-2UO3BFZH.js";
20
- import "./chunk-IM33F5CM.js";
21
- import "./chunk-ZYSVG4X3.js";
22
- import "./chunk-AXWJI6N5.js";
20
+ import "./chunk-XYQZLDRB.js";
21
+ import "./chunk-UYWZQVH5.js";
22
+ import "./chunk-EHQ2M5B4.js";
23
+ import "./chunk-D4OZACS2.js";
23
24
  export {
24
25
  __resetKodeHooksCacheForTests,
25
26
  drainHookSystemPromptAdditions,