whale-code 6.5.4 → 6.5.6

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 (853) hide show
  1. package/README.md +39 -31
  2. package/bin/{swagmanager-mcp.js → whale-code.js} +17 -2
  3. package/dist/cli/app.js +148 -72
  4. package/dist/cli/app.js.map +1 -0
  5. package/dist/cli/chat/AgentSelector.js +105 -10
  6. package/dist/cli/chat/AgentSelector.js.map +1 -0
  7. package/dist/cli/chat/ChatApp.d.ts +31 -0
  8. package/dist/cli/chat/ChatApp.js +539 -286
  9. package/dist/cli/chat/ChatApp.js.map +1 -0
  10. package/dist/cli/chat/ChatInput.js +1088 -770
  11. package/dist/cli/chat/ChatInput.js.map +1 -0
  12. package/dist/cli/chat/MarkdownText.js +39 -14
  13. package/dist/cli/chat/MarkdownText.js.map +1 -0
  14. package/dist/cli/chat/MemoryManager.js +181 -46
  15. package/dist/cli/chat/MemoryManager.js.map +1 -0
  16. package/dist/cli/chat/MessageList.d.ts +2 -3
  17. package/dist/cli/chat/MessageList.js +186 -45
  18. package/dist/cli/chat/MessageList.js.map +1 -0
  19. package/dist/cli/chat/ModelSelector.js +282 -63
  20. package/dist/cli/chat/ModelSelector.js.map +1 -0
  21. package/dist/cli/chat/NodeManager.js +165 -75
  22. package/dist/cli/chat/NodeManager.js.map +1 -0
  23. package/dist/cli/chat/NodeSelector.js +171 -30
  24. package/dist/cli/chat/NodeSelector.js.map +1 -0
  25. package/dist/cli/chat/PlanApproval.js +281 -57
  26. package/dist/cli/chat/PlanApproval.js.map +1 -0
  27. package/dist/cli/chat/RewindViewer.js +559 -144
  28. package/dist/cli/chat/RewindViewer.js.map +1 -0
  29. package/dist/cli/chat/SessionManager.js +137 -30
  30. package/dist/cli/chat/SessionManager.js.map +1 -0
  31. package/dist/cli/chat/SlashMenu.js +293 -164
  32. package/dist/cli/chat/SlashMenu.js.map +1 -0
  33. package/dist/cli/chat/StatusBar.js +172 -9
  34. package/dist/cli/chat/StatusBar.js.map +1 -0
  35. package/dist/cli/chat/StoreSelector.js +147 -18
  36. package/dist/cli/chat/StoreSelector.js.map +1 -0
  37. package/dist/cli/chat/StreamingText.d.ts +1 -5
  38. package/dist/cli/chat/StreamingText.js +22 -7
  39. package/dist/cli/chat/StreamingText.js.map +1 -0
  40. package/dist/cli/chat/SubagentPanel.d.ts +1 -2
  41. package/dist/cli/chat/SubagentPanel.js +612 -72
  42. package/dist/cli/chat/SubagentPanel.js.map +1 -0
  43. package/dist/cli/chat/TeamPanel.d.ts +1 -0
  44. package/dist/cli/chat/TeamPanel.js +230 -30
  45. package/dist/cli/chat/TeamPanel.js.map +1 -0
  46. package/dist/cli/chat/ThemeSelector.js +84 -24
  47. package/dist/cli/chat/ThemeSelector.js.map +1 -0
  48. package/dist/cli/chat/ToolIndicator.js +1476 -371
  49. package/dist/cli/chat/ToolIndicator.js.map +1 -0
  50. package/dist/cli/chat/hooks/useAgentLoop.d.ts +1 -0
  51. package/dist/cli/chat/hooks/useAgentLoop.js +481 -367
  52. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -0
  53. package/dist/cli/chat/hooks/useSlashCommands.d.ts +3 -14
  54. package/dist/cli/chat/hooks/useSlashCommands.js +744 -572
  55. package/dist/cli/chat/hooks/useSlashCommands.js.map +1 -0
  56. package/dist/cli/commands/config-cmd.js +56 -57
  57. package/dist/cli/commands/config-cmd.js.map +1 -0
  58. package/dist/cli/commands/db.js +184 -169
  59. package/dist/cli/commands/db.js.map +1 -0
  60. package/dist/cli/commands/doctor.js +212 -122
  61. package/dist/cli/commands/doctor.js.map +1 -0
  62. package/dist/cli/commands/init.js +211 -244
  63. package/dist/cli/commands/init.js.map +1 -0
  64. package/dist/cli/commands/mcp.js +127 -122
  65. package/dist/cli/commands/mcp.js.map +1 -0
  66. package/dist/cli/login/LoginApp.js +355 -141
  67. package/dist/cli/login/LoginApp.js.map +1 -0
  68. package/dist/cli/print-mode.js +196 -177
  69. package/dist/cli/print-mode.js.map +1 -0
  70. package/dist/cli/serve-mode.js +615 -530
  71. package/dist/cli/serve-mode.js.map +1 -0
  72. package/dist/cli/services/agent-config.d.ts +29 -0
  73. package/dist/cli/services/agent-config.js +91 -0
  74. package/dist/cli/services/agent-config.js.map +1 -0
  75. package/dist/cli/services/agent-definitions.d.ts +4 -1
  76. package/dist/cli/services/agent-definitions.js +97 -56
  77. package/dist/cli/services/agent-definitions.js.map +1 -0
  78. package/dist/cli/services/agent-events.js +225 -162
  79. package/dist/cli/services/agent-events.js.map +1 -0
  80. package/dist/cli/services/agent-loop.js +978 -669
  81. package/dist/cli/services/agent-loop.js.map +1 -0
  82. package/dist/cli/services/agent-worker-base.d.ts +35 -5
  83. package/dist/cli/services/agent-worker-base.js +337 -153
  84. package/dist/cli/services/agent-worker-base.js.map +1 -0
  85. package/dist/cli/services/api-retry.js +69 -64
  86. package/dist/cli/services/api-retry.js.map +1 -0
  87. package/dist/cli/services/auth-service.d.ts +3 -3
  88. package/dist/cli/services/auth-service.js +209 -132
  89. package/dist/cli/services/auth-service.js.map +1 -0
  90. package/dist/cli/services/background-processes.js +343 -267
  91. package/dist/cli/services/background-processes.js.map +1 -0
  92. package/dist/cli/services/browser-auth.d.ts +2 -2
  93. package/dist/cli/services/browser-auth.js +159 -118
  94. package/dist/cli/services/browser-auth.js.map +1 -0
  95. package/dist/cli/services/claude-md-loader.js +40 -36
  96. package/dist/cli/services/claude-md-loader.js.map +1 -0
  97. package/dist/cli/services/config-store.d.ts +9 -4
  98. package/dist/cli/services/config-store.js +164 -117
  99. package/dist/cli/services/config-store.js.map +1 -0
  100. package/dist/cli/services/debug-log.d.ts +1 -1
  101. package/dist/cli/services/debug-log.js +34 -35
  102. package/dist/cli/services/debug-log.js.map +1 -0
  103. package/dist/cli/services/env-detect.d.ts +7 -0
  104. package/dist/cli/services/env-detect.js +9 -0
  105. package/dist/cli/services/env-detect.js.map +1 -0
  106. package/dist/cli/services/error-logger.d.ts +2 -3
  107. package/dist/cli/services/error-logger.js +189 -180
  108. package/dist/cli/services/error-logger.js.map +1 -0
  109. package/dist/cli/services/file-history.d.ts +1 -1
  110. package/dist/cli/services/file-history.js +50 -54
  111. package/dist/cli/services/file-history.js.map +1 -0
  112. package/dist/cli/services/format-server-response.js +332 -372
  113. package/dist/cli/services/format-server-response.js.map +1 -0
  114. package/dist/cli/services/git-context.js +61 -45
  115. package/dist/cli/services/git-context.js.map +1 -0
  116. package/dist/cli/services/hooks.d.ts +2 -2
  117. package/dist/cli/services/hooks.js +195 -180
  118. package/dist/cli/services/hooks.js.map +1 -0
  119. package/dist/cli/services/ink-incremental.d.ts +19 -0
  120. package/dist/cli/services/ink-incremental.js +59 -0
  121. package/dist/cli/services/ink-incremental.js.map +1 -0
  122. package/dist/cli/services/ink-resize-fix.js +54 -44
  123. package/dist/cli/services/ink-resize-fix.js.map +1 -0
  124. package/dist/cli/services/ink-sync-output.d.ts +12 -0
  125. package/dist/cli/services/ink-sync-output.js +16 -0
  126. package/dist/cli/services/ink-sync-output.js.map +1 -0
  127. package/dist/cli/services/interactive-tools.js +268 -212
  128. package/dist/cli/services/interactive-tools.js.map +1 -0
  129. package/dist/cli/services/keybinding-manager.d.ts +11 -1
  130. package/dist/cli/services/keybinding-manager.js +126 -63
  131. package/dist/cli/services/keybinding-manager.js.map +1 -0
  132. package/dist/cli/services/local-tools.d.ts +1 -1
  133. package/dist/cli/services/local-tools.js +939 -656
  134. package/dist/cli/services/local-tools.js.map +1 -0
  135. package/dist/cli/services/lsp-manager.js +757 -594
  136. package/dist/cli/services/lsp-manager.js.map +1 -0
  137. package/dist/cli/services/mcp-client.d.ts +1 -1
  138. package/dist/cli/services/mcp-client.js +173 -134
  139. package/dist/cli/services/mcp-client.js.map +1 -0
  140. package/dist/cli/services/memory-manager.js +53 -40
  141. package/dist/cli/services/memory-manager.js.map +1 -0
  142. package/dist/cli/services/model-manager.js +55 -40
  143. package/dist/cli/services/model-manager.js.map +1 -0
  144. package/dist/cli/services/model-router.js +115 -85
  145. package/dist/cli/services/model-router.js.map +1 -0
  146. package/dist/cli/services/paths.d.ts +30 -0
  147. package/dist/cli/services/paths.js +81 -0
  148. package/dist/cli/services/paths.js.map +1 -0
  149. package/dist/cli/services/permission-modes.js +32 -25
  150. package/dist/cli/services/permission-modes.js.map +1 -0
  151. package/dist/cli/services/rewind.js +182 -168
  152. package/dist/cli/services/rewind.js.map +1 -0
  153. package/dist/cli/services/ripgrep.js +115 -115
  154. package/dist/cli/services/ripgrep.js.map +1 -0
  155. package/dist/cli/services/sandbox.d.ts +1 -1
  156. package/dist/cli/services/sandbox.js +58 -37
  157. package/dist/cli/services/sandbox.js.map +1 -0
  158. package/dist/cli/services/server-tools.js +738 -565
  159. package/dist/cli/services/server-tools.js.map +1 -0
  160. package/dist/cli/services/session-persistence.js +69 -74
  161. package/dist/cli/services/session-persistence.js.map +1 -0
  162. package/dist/cli/services/subagent-worker.js +42 -27
  163. package/dist/cli/services/subagent-worker.js.map +1 -0
  164. package/dist/cli/services/subagent.d.ts +2 -0
  165. package/dist/cli/services/subagent.js +606 -430
  166. package/dist/cli/services/subagent.js.map +1 -0
  167. package/dist/cli/services/system-prompt.js +86 -78
  168. package/dist/cli/services/system-prompt.js.map +1 -0
  169. package/dist/cli/services/task-decomposer.d.ts +1 -1
  170. package/dist/cli/services/task-decomposer.js +172 -139
  171. package/dist/cli/services/task-decomposer.js.map +1 -0
  172. package/dist/cli/services/team-lead.d.ts +2 -2
  173. package/dist/cli/services/team-lead.js +727 -529
  174. package/dist/cli/services/team-lead.js.map +1 -0
  175. package/dist/cli/services/team-state.js +319 -319
  176. package/dist/cli/services/team-state.js.map +1 -0
  177. package/dist/cli/services/teammate.d.ts +8 -2
  178. package/dist/cli/services/teammate.js +862 -560
  179. package/dist/cli/services/teammate.js.map +1 -0
  180. package/dist/cli/services/telemetry.d.ts +6 -1
  181. package/dist/cli/services/telemetry.js +180 -157
  182. package/dist/cli/services/telemetry.js.map +1 -0
  183. package/dist/cli/services/tools/agent-tools.d.ts +3 -3
  184. package/dist/cli/services/tools/agent-tools.js +480 -322
  185. package/dist/cli/services/tools/agent-tools.js.map +1 -0
  186. package/dist/cli/services/tools/file-ops.js +563 -450
  187. package/dist/cli/services/tools/file-ops.js.map +1 -0
  188. package/dist/cli/services/tools/search-tools.js +231 -162
  189. package/dist/cli/services/tools/search-tools.js.map +1 -0
  190. package/dist/cli/services/tools/shell-exec.js +197 -151
  191. package/dist/cli/services/tools/shell-exec.js.map +1 -0
  192. package/dist/cli/services/tools/task-manager.js +206 -173
  193. package/dist/cli/services/tools/task-manager.js.map +1 -0
  194. package/dist/cli/services/tools/web-tools.js +388 -341
  195. package/dist/cli/services/tools/web-tools.js.map +1 -0
  196. package/dist/cli/setup/SetupApp.d.ts +2 -2
  197. package/dist/cli/setup/SetupApp.js +608 -160
  198. package/dist/cli/setup/SetupApp.js.map +1 -0
  199. package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
  200. package/dist/cli/shared/ErrorBoundary.js +73 -0
  201. package/dist/cli/shared/ErrorBoundary.js.map +1 -0
  202. package/dist/cli/shared/MatrixIntro.js +66 -69
  203. package/dist/cli/shared/MatrixIntro.js.map +1 -0
  204. package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
  205. package/dist/cli/shared/SpinnerSlot.js +63 -0
  206. package/dist/cli/shared/SpinnerSlot.js.map +1 -0
  207. package/dist/cli/shared/Theme.d.ts +1 -1
  208. package/dist/cli/shared/Theme.js +136 -92
  209. package/dist/cli/shared/Theme.js.map +1 -0
  210. package/dist/cli/shared/WhaleBanner.js +99 -11
  211. package/dist/cli/shared/WhaleBanner.js.map +1 -0
  212. package/dist/cli/shared/markdown.d.ts +3 -1
  213. package/dist/cli/shared/markdown.js +736 -674
  214. package/dist/cli/shared/markdown.js.map +1 -0
  215. package/dist/cli/shared/marked-terminal.d.js +2 -0
  216. package/dist/cli/shared/marked-terminal.d.js.map +1 -0
  217. package/dist/cli/shared/theme-manager.js +99 -90
  218. package/dist/cli/shared/theme-manager.js.map +1 -0
  219. package/dist/cli/shared/theme-presets.js +256 -254
  220. package/dist/cli/shared/theme-presets.js.map +1 -0
  221. package/dist/cli/status/StatusApp.js +235 -86
  222. package/dist/cli/status/StatusApp.js.map +1 -0
  223. package/dist/cli/stores/StoreApp.js +275 -65
  224. package/dist/cli/stores/StoreApp.js.map +1 -0
  225. package/dist/index.d.ts +2 -2
  226. package/dist/index.js +509 -396
  227. package/dist/index.js.map +1 -0
  228. package/dist/local-agent/connection.d.ts +2 -2
  229. package/dist/local-agent/connection.js +352 -293
  230. package/dist/local-agent/connection.js.map +1 -0
  231. package/dist/local-agent/discovery.js +259 -122
  232. package/dist/local-agent/discovery.js.map +1 -0
  233. package/dist/local-agent/executor.js +216 -193
  234. package/dist/local-agent/executor.js.map +1 -0
  235. package/dist/local-agent/index.d.ts +2 -2
  236. package/dist/local-agent/index.js +156 -156
  237. package/dist/local-agent/index.js.map +1 -0
  238. package/dist/node/adapters/base.js +18 -8
  239. package/dist/node/adapters/base.js.map +1 -0
  240. package/dist/node/adapters/discord.js +286 -275
  241. package/dist/node/adapters/discord.js.map +1 -0
  242. package/dist/node/adapters/email.js +189 -202
  243. package/dist/node/adapters/email.js.map +1 -0
  244. package/dist/node/adapters/imessage.js +145 -142
  245. package/dist/node/adapters/imessage.js.map +1 -0
  246. package/dist/node/adapters/slack.js +237 -236
  247. package/dist/node/adapters/slack.js.map +1 -0
  248. package/dist/node/adapters/sms.js +149 -151
  249. package/dist/node/adapters/sms.js.map +1 -0
  250. package/dist/node/adapters/telegram.js +88 -92
  251. package/dist/node/adapters/telegram.js.map +1 -0
  252. package/dist/node/adapters/webchat.js +160 -136
  253. package/dist/node/adapters/webchat.js.map +1 -0
  254. package/dist/node/adapters/whatsapp.js +212 -215
  255. package/dist/node/adapters/whatsapp.js.map +1 -0
  256. package/dist/node/cli.js +884 -653
  257. package/dist/node/cli.js.map +1 -0
  258. package/dist/node/config.js +20 -18
  259. package/dist/node/config.js.map +1 -0
  260. package/dist/node/gateway-client.js +191 -181
  261. package/dist/node/gateway-client.js.map +1 -0
  262. package/dist/node/portal/clipboard.js +161 -130
  263. package/dist/node/portal/clipboard.js.map +1 -0
  264. package/dist/node/portal/discovery.js +51 -45
  265. package/dist/node/portal/discovery.js.map +1 -0
  266. package/dist/node/portal/forward.js +64 -58
  267. package/dist/node/portal/forward.js.map +1 -0
  268. package/dist/node/portal/index.js +246 -221
  269. package/dist/node/portal/index.js.map +1 -0
  270. package/dist/node/portal/multiplexer.js +192 -182
  271. package/dist/node/portal/multiplexer.js.map +1 -0
  272. package/dist/node/portal/permissions.js +102 -70
  273. package/dist/node/portal/permissions.js.map +1 -0
  274. package/dist/node/portal/protocol.js +153 -116
  275. package/dist/node/portal/protocol.js.map +1 -0
  276. package/dist/node/portal/screen.js +80 -69
  277. package/dist/node/portal/screen.js.map +1 -0
  278. package/dist/node/portal/session.js +124 -117
  279. package/dist/node/portal/session.js.map +1 -0
  280. package/dist/node/portal/shell.js +140 -113
  281. package/dist/node/portal/shell.js.map +1 -0
  282. package/dist/node/portal/stream.js +77 -75
  283. package/dist/node/portal/stream.js.map +1 -0
  284. package/dist/node/portal/transfer.js +190 -167
  285. package/dist/node/portal/transfer.js.map +1 -0
  286. package/dist/node/portal/ui.js +124 -99
  287. package/dist/node/portal/ui.js.map +1 -0
  288. package/dist/node/remote-desktop/compile-helper.js +50 -45
  289. package/dist/node/remote-desktop/compile-helper.js.map +1 -0
  290. package/dist/node/remote-desktop/index.js +215 -187
  291. package/dist/node/remote-desktop/index.js.map +1 -0
  292. package/dist/node/remote-desktop/protocol.js +45 -29
  293. package/dist/node/remote-desktop/protocol.js.map +1 -0
  294. package/dist/node/runtime.js +493 -410
  295. package/dist/node/runtime.js.map +1 -0
  296. package/dist/server/handlers/__test-utils__/test-db.js +39 -89
  297. package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
  298. package/dist/server/handlers/analytics.js +467 -261
  299. package/dist/server/handlers/analytics.js.map +1 -0
  300. package/dist/server/handlers/api-docs.d.ts +6 -0
  301. package/dist/server/handlers/api-docs.js +1613 -0
  302. package/dist/server/handlers/api-docs.js.map +1 -0
  303. package/dist/server/handlers/api-keys.js +295 -232
  304. package/dist/server/handlers/api-keys.js.map +1 -0
  305. package/dist/server/handlers/billing.js +330 -239
  306. package/dist/server/handlers/billing.js.map +1 -0
  307. package/dist/server/handlers/browser.js +468 -395
  308. package/dist/server/handlers/browser.js.map +1 -0
  309. package/dist/server/handlers/catalog.js +1377 -978
  310. package/dist/server/handlers/catalog.js.map +1 -0
  311. package/dist/server/handlers/clickhouse.js +157 -109
  312. package/dist/server/handlers/clickhouse.js.map +1 -0
  313. package/dist/server/handlers/comms.d.ts +0 -53
  314. package/dist/server/handlers/comms.js +1443 -970
  315. package/dist/server/handlers/comms.js.map +1 -0
  316. package/dist/server/handlers/creations.js +461 -394
  317. package/dist/server/handlers/creations.js.map +1 -0
  318. package/dist/server/handlers/crm.js +1082 -791
  319. package/dist/server/handlers/crm.js.map +1 -0
  320. package/dist/server/handlers/discovery.js +251 -232
  321. package/dist/server/handlers/discovery.js.map +1 -0
  322. package/dist/server/handlers/embeddings.js +241 -164
  323. package/dist/server/handlers/embeddings.js.map +1 -0
  324. package/dist/server/handlers/enrichment.js +887 -718
  325. package/dist/server/handlers/enrichment.js.map +1 -0
  326. package/dist/server/handlers/image-gen.js +467 -376
  327. package/dist/server/handlers/image-gen.js.map +1 -0
  328. package/dist/server/handlers/inventory.js +797 -424
  329. package/dist/server/handlers/inventory.js.map +1 -0
  330. package/dist/server/handlers/kali.js +272 -230
  331. package/dist/server/handlers/kali.js.map +1 -0
  332. package/dist/server/handlers/llm-providers.js +803 -580
  333. package/dist/server/handlers/llm-providers.js.map +1 -0
  334. package/dist/server/handlers/local-agent.js +133 -105
  335. package/dist/server/handlers/local-agent.js.map +1 -0
  336. package/dist/server/handlers/media.js +1179 -857
  337. package/dist/server/handlers/media.js.map +1 -0
  338. package/dist/server/handlers/meta-ads.js +2669 -2093
  339. package/dist/server/handlers/meta-ads.js.map +1 -0
  340. package/dist/server/handlers/nodes.js +1321 -913
  341. package/dist/server/handlers/nodes.js.map +1 -0
  342. package/dist/server/handlers/operations.js +183 -157
  343. package/dist/server/handlers/operations.js.map +1 -0
  344. package/dist/server/handlers/platform.js +346 -210
  345. package/dist/server/handlers/platform.js.map +1 -0
  346. package/dist/server/handlers/remove-bg.js +118 -86
  347. package/dist/server/handlers/remove-bg.js.map +1 -0
  348. package/dist/server/handlers/storefront.js +586 -446
  349. package/dist/server/handlers/storefront.js.map +1 -0
  350. package/dist/server/handlers/supply-chain.js +546 -326
  351. package/dist/server/handlers/supply-chain.js.map +1 -0
  352. package/dist/server/handlers/transcription.js +106 -97
  353. package/dist/server/handlers/transcription.js.map +1 -0
  354. package/dist/server/handlers/video-gen.js +593 -424
  355. package/dist/server/handlers/video-gen.js.map +1 -0
  356. package/dist/server/handlers/voice.js +1458 -1017
  357. package/dist/server/handlers/voice.js.map +1 -0
  358. package/dist/server/handlers/workflow-steps.js +2837 -2116
  359. package/dist/server/handlers/workflow-steps.js.map +1 -0
  360. package/dist/server/handlers/workflows.js +1630 -933
  361. package/dist/server/handlers/workflows.js.map +1 -0
  362. package/dist/server/index.js +3166 -2390
  363. package/dist/server/index.js.map +1 -0
  364. package/dist/server/lib/batch-client.js +471 -409
  365. package/dist/server/lib/batch-client.js.map +1 -0
  366. package/dist/server/lib/clickhouse-buffer.js +118 -104
  367. package/dist/server/lib/clickhouse-buffer.js.map +1 -0
  368. package/dist/server/lib/clickhouse-client.js +107 -107
  369. package/dist/server/lib/clickhouse-client.js.map +1 -0
  370. package/dist/server/lib/coa-renderer.js +1786 -356
  371. package/dist/server/lib/coa-renderer.js.map +1 -0
  372. package/dist/server/lib/code-worker-pool.js +227 -177
  373. package/dist/server/lib/code-worker-pool.js.map +1 -0
  374. package/dist/server/lib/code-worker.js +174 -164
  375. package/dist/server/lib/code-worker.js.map +1 -0
  376. package/dist/server/lib/compaction-service.d.ts +2 -12
  377. package/dist/server/lib/compaction-service.js +74 -184
  378. package/dist/server/lib/compaction-service.js.map +1 -0
  379. package/dist/server/lib/logger.js +36 -24
  380. package/dist/server/lib/logger.js.map +1 -0
  381. package/dist/server/lib/otel.js +101 -80
  382. package/dist/server/lib/otel.js.map +1 -0
  383. package/dist/server/lib/pdf-renderer.d.ts +1 -1
  384. package/dist/server/lib/pdf-renderer.js +954 -776
  385. package/dist/server/lib/pdf-renderer.js.map +1 -0
  386. package/dist/server/lib/prompt-sanitizer.js +188 -108
  387. package/dist/server/lib/prompt-sanitizer.js.map +1 -0
  388. package/dist/server/lib/provider-capabilities.js +136 -138
  389. package/dist/server/lib/provider-capabilities.js.map +1 -0
  390. package/dist/server/lib/provider-failover.js +190 -168
  391. package/dist/server/lib/provider-failover.js.map +1 -0
  392. package/dist/server/lib/rate-limiter.js +186 -117
  393. package/dist/server/lib/rate-limiter.js.map +1 -0
  394. package/dist/server/lib/react-pdf-layout.js +551 -382
  395. package/dist/server/lib/react-pdf-layout.js.map +1 -0
  396. package/dist/server/lib/server-agent-loop.d.ts +9 -0
  397. package/dist/server/lib/server-agent-loop.js +906 -624
  398. package/dist/server/lib/server-agent-loop.js.map +1 -0
  399. package/dist/server/lib/server-subagent.d.ts +2 -0
  400. package/dist/server/lib/server-subagent.js +260 -162
  401. package/dist/server/lib/server-subagent.js.map +1 -0
  402. package/dist/server/lib/session-checkpoint.js +105 -96
  403. package/dist/server/lib/session-checkpoint.js.map +1 -0
  404. package/dist/server/lib/ssrf-guard.js +193 -184
  405. package/dist/server/lib/ssrf-guard.js.map +1 -0
  406. package/dist/server/lib/supabase-client.js +94 -82
  407. package/dist/server/lib/supabase-client.js.map +1 -0
  408. package/dist/server/lib/template-resolver.js +154 -176
  409. package/dist/server/lib/template-resolver.js.map +1 -0
  410. package/dist/server/lib/utils.js +242 -133
  411. package/dist/server/lib/utils.js.map +1 -0
  412. package/dist/server/local-agent-gateway.d.ts +2 -2
  413. package/dist/server/local-agent-gateway.js +785 -627
  414. package/dist/server/local-agent-gateway.js.map +1 -0
  415. package/dist/server/providers/anthropic.js +254 -176
  416. package/dist/server/providers/anthropic.js.map +1 -0
  417. package/dist/server/providers/bedrock.js +221 -162
  418. package/dist/server/providers/bedrock.js.map +1 -0
  419. package/dist/server/providers/gemini.js +548 -418
  420. package/dist/server/providers/gemini.js.map +1 -0
  421. package/dist/server/providers/openai.js +571 -437
  422. package/dist/server/providers/openai.js.map +1 -0
  423. package/dist/server/providers/registry.js +23 -18
  424. package/dist/server/providers/registry.js.map +1 -0
  425. package/dist/server/providers/shared.js +123 -95
  426. package/dist/server/providers/shared.js.map +1 -0
  427. package/dist/server/providers/types.js +1 -11
  428. package/dist/server/providers/types.js.map +1 -0
  429. package/dist/server/proxy-handlers.js +209 -165
  430. package/dist/server/proxy-handlers.js.map +1 -0
  431. package/dist/server/tool-router.d.ts +13 -0
  432. package/dist/server/tool-router.js +960 -598
  433. package/dist/server/tool-router.js.map +1 -0
  434. package/dist/server/validation.js +248 -188
  435. package/dist/server/validation.js.map +1 -0
  436. package/dist/server/worker.js +202 -133
  437. package/dist/server/worker.js.map +1 -0
  438. package/dist/setup.d.ts +2 -2
  439. package/dist/setup.js +151 -147
  440. package/dist/setup.js.map +1 -0
  441. package/dist/shared/agent-core.d.ts +191 -24
  442. package/dist/shared/agent-core.js +971 -462
  443. package/dist/shared/agent-core.js.map +1 -0
  444. package/dist/shared/anthropic-types.js +1 -6
  445. package/dist/shared/anthropic-types.js.map +1 -0
  446. package/dist/shared/api-client.d.ts +17 -9
  447. package/dist/shared/api-client.js +419 -327
  448. package/dist/shared/api-client.js.map +1 -0
  449. package/dist/shared/compaction.d.ts +36 -0
  450. package/dist/shared/compaction.js +138 -0
  451. package/dist/shared/compaction.js.map +1 -0
  452. package/dist/shared/constants.js +67 -64
  453. package/dist/shared/constants.js.map +1 -0
  454. package/dist/shared/sse-parser.js +221 -219
  455. package/dist/shared/sse-parser.js.map +1 -0
  456. package/dist/shared/tool-dispatch.d.ts +4 -2
  457. package/dist/shared/tool-dispatch.js +226 -165
  458. package/dist/shared/tool-dispatch.js.map +1 -0
  459. package/dist/shared/types.js +1 -6
  460. package/dist/shared/types.js.map +1 -0
  461. package/dist/types/cli-highlight.d.js +2 -0
  462. package/dist/types/cli-highlight.d.js.map +1 -0
  463. package/dist/types/diff.d.js +2 -0
  464. package/dist/types/diff.d.js.map +1 -0
  465. package/dist/types/pdf-parse.d.js +2 -0
  466. package/dist/types/pdf-parse.d.js.map +1 -0
  467. package/dist/updater.d.ts +1 -1
  468. package/dist/updater.js +118 -92
  469. package/dist/updater.js.map +1 -0
  470. package/dist/webchat/widget.js +227 -380
  471. package/dist/webchat/widget.js.map +1 -0
  472. package/package.json +22 -10
  473. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  474. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  475. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  476. package/vendor/ink/build/apply-styles.js +175 -0
  477. package/vendor/ink/build/build-layout.js +77 -0
  478. package/vendor/ink/build/calculate-wrapped-text.js +53 -0
  479. package/vendor/ink/build/colorize.d.ts +3 -0
  480. package/vendor/ink/build/colorize.js +48 -0
  481. package/vendor/ink/build/colorize.js.map +1 -0
  482. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  483. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  484. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  485. package/vendor/ink/build/components/App.d.ts +18 -0
  486. package/vendor/ink/build/components/App.js +351 -0
  487. package/vendor/ink/build/components/App.js.map +1 -0
  488. package/vendor/ink/build/components/AppContext.d.ts +15 -0
  489. package/vendor/ink/build/components/AppContext.js +11 -0
  490. package/vendor/ink/build/components/AppContext.js.map +1 -0
  491. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  492. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  493. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  494. package/vendor/ink/build/components/Box.d.ts +117 -0
  495. package/vendor/ink/build/components/Box.js +34 -0
  496. package/vendor/ink/build/components/Box.js.map +1 -0
  497. package/vendor/ink/build/components/Color.js +62 -0
  498. package/vendor/ink/build/components/Cursor.d.ts +83 -0
  499. package/vendor/ink/build/components/Cursor.js +53 -0
  500. package/vendor/ink/build/components/Cursor.js.map +1 -0
  501. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  502. package/vendor/ink/build/components/CursorContext.js +8 -0
  503. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  504. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  505. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  506. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  507. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  508. package/vendor/ink/build/components/ErrorOverview.js +84 -0
  509. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  510. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  511. package/vendor/ink/build/components/FocusContext.js +17 -0
  512. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  513. package/vendor/ink/build/components/Newline.d.ts +13 -0
  514. package/vendor/ink/build/components/Newline.js +8 -0
  515. package/vendor/ink/build/components/Newline.js.map +1 -0
  516. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  517. package/vendor/ink/build/components/Spacer.js +11 -0
  518. package/vendor/ink/build/components/Spacer.js.map +1 -0
  519. package/vendor/ink/build/components/Static.d.ts +24 -0
  520. package/vendor/ink/build/components/Static.js +28 -0
  521. package/vendor/ink/build/components/Static.js.map +1 -0
  522. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  523. package/vendor/ink/build/components/StderrContext.js +13 -0
  524. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  525. package/vendor/ink/build/components/StdinContext.d.ts +22 -0
  526. package/vendor/ink/build/components/StdinContext.js +19 -0
  527. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  528. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  529. package/vendor/ink/build/components/StdoutContext.js +13 -0
  530. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  531. package/vendor/ink/build/components/Text.d.ts +55 -0
  532. package/vendor/ink/build/components/Text.js +50 -0
  533. package/vendor/ink/build/components/Text.js.map +1 -0
  534. package/vendor/ink/build/components/Transform.d.ts +16 -0
  535. package/vendor/ink/build/components/Transform.js +15 -0
  536. package/vendor/ink/build/components/Transform.js.map +1 -0
  537. package/vendor/ink/build/cursor-helpers.d.ts +38 -0
  538. package/vendor/ink/build/cursor-helpers.js +56 -0
  539. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  540. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  541. package/vendor/ink/build/devtools-window-polyfill.js +65 -0
  542. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  543. package/vendor/ink/build/devtools.d.ts +1 -0
  544. package/vendor/ink/build/devtools.js +11 -0
  545. package/vendor/ink/build/devtools.js.map +1 -0
  546. package/vendor/ink/build/dom.d.ts +56 -0
  547. package/vendor/ink/build/dom.js +124 -0
  548. package/vendor/ink/build/dom.js.map +1 -0
  549. package/vendor/ink/build/experimental/apply-style.js +140 -0
  550. package/vendor/ink/build/experimental/dom.js +123 -0
  551. package/vendor/ink/build/experimental/output.js +91 -0
  552. package/vendor/ink/build/experimental/reconciler.js +141 -0
  553. package/vendor/ink/build/experimental/renderer.js +81 -0
  554. package/vendor/ink/build/get-max-width.d.ts +3 -0
  555. package/vendor/ink/build/get-max-width.js +10 -0
  556. package/vendor/ink/build/get-max-width.js.map +1 -0
  557. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  558. package/vendor/ink/build/hooks/use-app.js +8 -0
  559. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  560. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  561. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  562. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  563. package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
  564. package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
  565. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  566. package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
  567. package/vendor/ink/build/hooks/use-focus.js +42 -0
  568. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  569. package/vendor/ink/build/hooks/use-input.d.ts +131 -0
  570. package/vendor/ink/build/hooks/use-input.js +124 -0
  571. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  572. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  573. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  574. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  575. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  576. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  577. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  578. package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
  579. package/vendor/ink/build/hooks/use-stdin.js +8 -0
  580. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  581. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  582. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  583. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  584. package/vendor/ink/build/hooks/useInput.js +38 -0
  585. package/vendor/ink/build/index.d.ts +34 -0
  586. package/vendor/ink/build/index.js +20 -0
  587. package/vendor/ink/build/index.js.map +1 -0
  588. package/vendor/ink/build/ink.d.ts +90 -0
  589. package/vendor/ink/build/ink.js +654 -0
  590. package/vendor/ink/build/ink.js.map +1 -0
  591. package/vendor/ink/build/input-parser.d.ts +7 -0
  592. package/vendor/ink/build/input-parser.js +154 -0
  593. package/vendor/ink/build/input-parser.js.map +1 -0
  594. package/vendor/ink/build/instance.js +205 -0
  595. package/vendor/ink/build/instances.d.ts +3 -0
  596. package/vendor/ink/build/instances.js +8 -0
  597. package/vendor/ink/build/instances.js.map +1 -0
  598. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  599. package/vendor/ink/build/kitty-keyboard.js +32 -0
  600. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  601. package/vendor/ink/build/layout.d.ts +7 -0
  602. package/vendor/ink/build/layout.js +33 -0
  603. package/vendor/ink/build/layout.js.map +1 -0
  604. package/vendor/ink/build/log-update.d.ts +19 -0
  605. package/vendor/ink/build/log-update.js +243 -0
  606. package/vendor/ink/build/log-update.js.map +1 -0
  607. package/vendor/ink/build/measure-element.d.ts +16 -0
  608. package/vendor/ink/build/measure-element.js +9 -0
  609. package/vendor/ink/build/measure-element.js.map +1 -0
  610. package/vendor/ink/build/measure-text.d.ts +6 -0
  611. package/vendor/ink/build/measure-text.js +21 -0
  612. package/vendor/ink/build/measure-text.js.map +1 -0
  613. package/vendor/ink/build/options.d.ts +52 -0
  614. package/vendor/ink/build/options.js +2 -0
  615. package/vendor/ink/build/options.js.map +1 -0
  616. package/vendor/ink/build/output.d.ts +35 -0
  617. package/vendor/ink/build/output.js +183 -0
  618. package/vendor/ink/build/output.js.map +1 -0
  619. package/vendor/ink/build/parse-keypress.d.ts +22 -0
  620. package/vendor/ink/build/parse-keypress.js +493 -0
  621. package/vendor/ink/build/parse-keypress.js.map +1 -0
  622. package/vendor/ink/build/reconciler.d.ts +4 -0
  623. package/vendor/ink/build/reconciler.js +274 -0
  624. package/vendor/ink/build/reconciler.js.map +1 -0
  625. package/vendor/ink/build/render-background.d.ts +4 -0
  626. package/vendor/ink/build/render-background.js +25 -0
  627. package/vendor/ink/build/render-background.js.map +1 -0
  628. package/vendor/ink/build/render-border.d.ts +4 -0
  629. package/vendor/ink/build/render-border.js +73 -0
  630. package/vendor/ink/build/render-border.js.map +1 -0
  631. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  632. package/vendor/ink/build/render-node-to-output.js +147 -0
  633. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  634. package/vendor/ink/build/render-to-string.d.ts +38 -0
  635. package/vendor/ink/build/render-to-string.js +115 -0
  636. package/vendor/ink/build/render-to-string.js.map +1 -0
  637. package/vendor/ink/build/render.d.ts +121 -0
  638. package/vendor/ink/build/render.js +55 -0
  639. package/vendor/ink/build/render.js.map +1 -0
  640. package/vendor/ink/build/renderer.d.ts +8 -0
  641. package/vendor/ink/build/renderer.js +55 -0
  642. package/vendor/ink/build/renderer.js.map +1 -0
  643. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  644. package/vendor/ink/build/sanitize-ansi.js +27 -0
  645. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  646. package/vendor/ink/build/screen-reader-update.d.ts +13 -0
  647. package/vendor/ink/build/screen-reader-update.js +38 -0
  648. package/vendor/ink/build/screen-reader-update.js.map +1 -0
  649. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  650. package/vendor/ink/build/squash-text-nodes.js +36 -0
  651. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  652. package/vendor/ink/build/styles.d.ts +240 -0
  653. package/vendor/ink/build/styles.js +232 -0
  654. package/vendor/ink/build/styles.js.map +1 -0
  655. package/vendor/ink/build/utils.d.ts +2 -0
  656. package/vendor/ink/build/utils.js +4 -0
  657. package/vendor/ink/build/utils.js.map +1 -0
  658. package/vendor/ink/build/wrap-text.d.ts +3 -0
  659. package/vendor/ink/build/wrap-text.js +31 -0
  660. package/vendor/ink/build/wrap-text.js.map +1 -0
  661. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  662. package/vendor/ink/build/write-synchronized.js +7 -0
  663. package/vendor/ink/build/write-synchronized.js.map +1 -0
  664. package/vendor/ink/license +10 -0
  665. package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
  666. package/vendor/ink/node_modules/@types/node/README.md +15 -0
  667. package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
  668. package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
  669. package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
  670. package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  671. package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
  672. package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
  673. package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
  674. package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  675. package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
  676. package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
  677. package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
  678. package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
  679. package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  680. package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
  681. package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
  682. package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
  683. package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
  684. package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
  685. package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
  686. package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
  687. package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  688. package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
  689. package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
  690. package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
  691. package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
  692. package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
  693. package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
  694. package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  695. package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
  696. package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
  697. package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
  698. package/vendor/ink/node_modules/@types/node/package.json +155 -0
  699. package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
  700. package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
  701. package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
  702. package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
  703. package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
  704. package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
  705. package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
  706. package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
  707. package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
  708. package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
  709. package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
  710. package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
  711. package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
  712. package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
  713. package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
  714. package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
  715. package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
  716. package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
  717. package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
  718. package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
  719. package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
  720. package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
  721. package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
  722. package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
  723. package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  724. package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  725. package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  726. package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  727. package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  728. package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  729. package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
  730. package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
  731. package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
  732. package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
  733. package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
  734. package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
  735. package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
  736. package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  737. package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  738. package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
  739. package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  740. package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  741. package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  742. package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
  743. package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  744. package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  745. package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  746. package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  747. package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  748. package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  749. package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  750. package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  751. package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
  752. package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
  753. package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
  754. package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
  755. package/vendor/ink/node_modules/node-pty/README.md +164 -0
  756. package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
  757. package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  758. package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  759. package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
  760. package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
  761. package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
  762. package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
  763. package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
  764. package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
  765. package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
  766. package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  767. package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
  768. package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
  769. package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  770. package/vendor/ink/node_modules/node-pty/package.json +65 -0
  771. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  772. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  773. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  774. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  775. package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  776. package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  777. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  778. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  779. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  780. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  781. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  782. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  783. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  784. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  785. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  786. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  787. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  788. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  789. package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
  790. package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
  791. package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
  792. package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  793. package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
  794. package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
  795. package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  796. package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
  797. package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
  798. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  799. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  800. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  801. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  802. package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  803. package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
  804. package/vendor/ink/node_modules/undici-types/README.md +6 -0
  805. package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
  806. package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
  807. package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
  808. package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  809. package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
  810. package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
  811. package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
  812. package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
  813. package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
  814. package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
  815. package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  816. package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
  817. package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  818. package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
  819. package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
  820. package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
  821. package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
  822. package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  823. package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
  824. package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
  825. package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
  826. package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
  827. package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
  828. package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
  829. package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
  830. package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
  831. package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
  832. package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
  833. package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  834. package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
  835. package/vendor/ink/node_modules/undici-types/package.json +55 -0
  836. package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
  837. package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
  838. package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
  839. package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
  840. package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
  841. package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
  842. package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
  843. package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  844. package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  845. package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
  846. package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
  847. package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
  848. package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
  849. package/vendor/ink/package.json +201 -0
  850. package/vendor/ink/readme.md +2636 -0
  851. package/bin/swag-agent.js +0 -9
  852. package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
  853. package/dist/server/lib/pg-rate-limiter.js +0 -86
@@ -2,258 +2,300 @@
2
2
  // Proxies commands to a dedicated Fly.io Kali machine via internal network.
3
3
  // Pattern: same as browser.ts — external execution environment, handler is a thin proxy.
4
4
  // Supports NDJSON streaming for exec actions via exec_stream on kali-box.
5
+
5
6
  const KALI_BOX_URL = process.env.KALI_BOX_URL || "http://kali-box.internal:8080";
6
7
  const KALI_AUTH_TOKEN = process.env.KALI_AUTH_TOKEN || "";
7
8
  const MAX_OUTPUT_CHARS = 500 * 1024; // 500KB safety cap — context_management handles limits
9
+
8
10
  /** Detect the current phase of a command based on output patterns */
9
11
  function detectPhase(stdout, stderr) {
10
- const combined = (stderr + "\n" + stdout).toLowerCase();
11
- if (combined.includes("compiling") || combined.includes("building"))
12
- return "compiling";
13
- if (combined.includes("scanning") || combined.includes("nmap"))
14
- return "scanning";
15
- if (combined.includes("downloading") || combined.includes("fetching"))
16
- return "downloading";
17
- if (combined.includes("installing") || combined.includes("apt"))
18
- return "installing";
19
- if (combined.includes("testing") || combined.includes("exploit"))
20
- return "testing";
21
- if (combined.includes("cracking") || combined.includes("hashcat") || combined.includes("john"))
22
- return "cracking";
23
- if (combined.includes("enumerating") || combined.includes("enum"))
24
- return "enumerating";
25
- return undefined;
12
+ const combined = (stderr + "\n" + stdout).toLowerCase();
13
+ if (combined.includes("compiling") || combined.includes("building")) return "compiling";
14
+ if (combined.includes("scanning") || combined.includes("nmap")) return "scanning";
15
+ if (combined.includes("downloading") || combined.includes("fetching")) return "downloading";
16
+ if (combined.includes("installing") || combined.includes("apt")) return "installing";
17
+ if (combined.includes("testing") || combined.includes("exploit")) return "testing";
18
+ if (combined.includes("cracking") || combined.includes("hashcat") || combined.includes("john")) return "cracking";
19
+ if (combined.includes("enumerating") || combined.includes("enum")) return "enumerating";
20
+ return undefined;
26
21
  }
27
- const VALID_ACTIONS = new Set([
28
- "exec", "exec_stream", "exec_bg", "bg_status", "bg_kill", "bg_list",
29
- "upload", "download", "info", "sessions", "reset",
30
- ]);
31
- const FORWARD_KEYS = [
32
- "command", "session_id", "timeout", "job_id",
33
- "path", "content", "encoding", "tail",
34
- ];
22
+ const VALID_ACTIONS = new Set(["exec", "exec_stream", "exec_bg", "bg_status", "bg_kill", "bg_list", "upload", "download", "info", "sessions", "reset"]);
23
+ const FORWARD_KEYS = ["command", "session_id", "timeout", "job_id", "path", "content", "encoding", "tail"];
35
24
  function truncate(text) {
36
- if (!text || text.length <= MAX_OUTPUT_CHARS)
37
- return text;
38
- return text.substring(0, MAX_OUTPUT_CHARS) + `\n...[truncated, ${text.length} total chars]`;
25
+ if (!text || text.length <= MAX_OUTPUT_CHARS) return text;
26
+ return text.substring(0, MAX_OUTPUT_CHARS) + `\n...[truncated, ${text.length} total chars]`;
39
27
  }
28
+
40
29
  /**
41
30
  * Read NDJSON lines from a ReadableStream (Node.js or web).
42
31
  * Yields parsed JSON objects, one per newline-delimited line.
43
32
  */
44
33
  async function* readNDJSON(body) {
45
- const reader = body.getReader();
46
- const decoder = new TextDecoder();
47
- let buffer = "";
48
- try {
49
- while (true) {
50
- const { done, value } = await reader.read();
51
- if (done)
52
- break;
53
- buffer += decoder.decode(value, { stream: true });
54
- // Process complete lines
55
- let newlineIdx;
56
- while ((newlineIdx = buffer.indexOf("\n")) !== -1) {
57
- const line = buffer.substring(0, newlineIdx).trim();
58
- buffer = buffer.substring(newlineIdx + 1);
59
- if (line) {
60
- try {
61
- yield JSON.parse(line);
62
- }
63
- catch {
64
- // Skip malformed JSON lines
65
- }
66
- }
67
- }
68
- }
69
- // Process any remaining buffer
70
- const remaining = buffer.trim();
71
- if (remaining) {
72
- try {
73
- yield JSON.parse(remaining);
74
- }
75
- catch {
76
- // Skip malformed final fragment
77
- }
34
+ const reader = body.getReader();
35
+ const decoder = new TextDecoder();
36
+ let buffer = "";
37
+ try {
38
+ while (true) {
39
+ const {
40
+ done,
41
+ value
42
+ } = await reader.read();
43
+ if (done) break;
44
+ buffer += decoder.decode(value, {
45
+ stream: true
46
+ });
47
+
48
+ // Process complete lines
49
+ let newlineIdx;
50
+ while ((newlineIdx = buffer.indexOf("\n")) !== -1) {
51
+ const line = buffer.substring(0, newlineIdx).trim();
52
+ buffer = buffer.substring(newlineIdx + 1);
53
+ if (line) {
54
+ try {
55
+ yield JSON.parse(line);
56
+ } catch {
57
+ // Skip malformed JSON lines
58
+ }
78
59
  }
60
+ }
79
61
  }
80
- finally {
81
- reader.releaseLock();
62
+
63
+ // Process any remaining buffer
64
+ const remaining = buffer.trim();
65
+ if (remaining) {
66
+ try {
67
+ yield JSON.parse(remaining);
68
+ } catch {
69
+ // Skip malformed final fragment
70
+ }
82
71
  }
72
+ } finally {
73
+ reader.releaseLock();
74
+ }
83
75
  }
84
76
  export async function handleKali(_sb, args, _storeId, onToolProgress, onStructuredProgress) {
85
- const action = args.action;
86
- if (!action) {
87
- return { success: false, error: "action is required" };
88
- }
89
- if (!VALID_ACTIONS.has(action)) {
90
- return { success: false, error: `Unknown action: ${action}. Valid: ${[...VALID_ACTIONS].join(", ")}` };
91
- }
92
- if ((action === "exec" || action === "exec_stream" || action === "exec_bg") && !args.command) {
93
- return { success: false, error: "command is required for exec/exec_bg" };
94
- }
95
- if (!KALI_AUTH_TOKEN) {
96
- return { success: false, error: "KALI_AUTH_TOKEN not configured on whale-agent" };
97
- }
98
- // Build payload only forward recognized keys
99
- const payload = { action };
100
- for (const key of FORWARD_KEYS) {
101
- if (args[key] !== undefined)
102
- payload[key] = args[key];
103
- }
104
- // Command timeout + HTTP buffer
105
- const cmdTimeout = Math.min(args.timeout || 30000, 600000);
106
- const httpTimeout = cmdTimeout + 10000; // 10s buffer over command timeout
107
- // ── Streaming path: exec actions use exec_stream on kali-box ──────
108
- if ((action === "exec" || action === "exec_stream") && onToolProgress) {
109
- payload.action = "exec_stream";
110
- payload.timeout = cmdTimeout;
111
- try {
112
- const controller = new AbortController();
113
- const timer = setTimeout(() => controller.abort(), httpTimeout);
114
- const resp = await fetch(KALI_BOX_URL, {
115
- method: "POST",
116
- headers: {
117
- "Content-Type": "application/json",
118
- Authorization: `Bearer ${KALI_AUTH_TOKEN}`,
119
- },
120
- body: JSON.stringify(payload),
121
- signal: controller.signal,
77
+ const action = args.action;
78
+ if (!action) {
79
+ return {
80
+ success: false,
81
+ error: "action is required"
82
+ };
83
+ }
84
+ if (!VALID_ACTIONS.has(action)) {
85
+ return {
86
+ success: false,
87
+ error: `Unknown action: ${action}. Valid: ${[...VALID_ACTIONS].join(", ")}`
88
+ };
89
+ }
90
+ if ((action === "exec" || action === "exec_stream" || action === "exec_bg") && !args.command) {
91
+ return {
92
+ success: false,
93
+ error: "command is required for exec/exec_bg"
94
+ };
95
+ }
96
+ if (!KALI_AUTH_TOKEN) {
97
+ return {
98
+ success: false,
99
+ error: "KALI_AUTH_TOKEN not configured on whale-agent"
100
+ };
101
+ }
102
+
103
+ // Build payload — only forward recognized keys
104
+ const payload = {
105
+ action
106
+ };
107
+ for (const key of FORWARD_KEYS) {
108
+ if (args[key] !== undefined) payload[key] = args[key];
109
+ }
110
+
111
+ // Command timeout + HTTP buffer
112
+ const cmdTimeout = Math.min(args.timeout || 30000, 600000);
113
+ const httpTimeout = cmdTimeout + 10000; // 10s buffer over command timeout
114
+
115
+ // ── Streaming path: exec actions use exec_stream on kali-box ──────
116
+ if ((action === "exec" || action === "exec_stream") && onToolProgress) {
117
+ payload.action = "exec_stream";
118
+ payload.timeout = cmdTimeout;
119
+ try {
120
+ const controller = new AbortController();
121
+ const timer = setTimeout(() => controller.abort(), httpTimeout);
122
+ const resp = await fetch(KALI_BOX_URL, {
123
+ method: "POST",
124
+ headers: {
125
+ "Content-Type": "application/json",
126
+ Authorization: `Bearer ${KALI_AUTH_TOKEN}`
127
+ },
128
+ body: JSON.stringify(payload),
129
+ signal: controller.signal
130
+ });
131
+ clearTimeout(timer);
132
+ if (!resp.ok) {
133
+ const text = await resp.text().catch(() => "");
134
+ return {
135
+ success: false,
136
+ error: `Kali box HTTP ${resp.status}: ${text.substring(0, 500)}`
137
+ };
138
+ }
139
+ if (!resp.body) {
140
+ return {
141
+ success: false,
142
+ error: "Kali box returned no response body for exec_stream"
143
+ };
144
+ }
145
+
146
+ // Read NDJSON stream — emit progress for each chunk, accumulate for final result
147
+ let stdout = "";
148
+ let stderr = "";
149
+ let stdoutLines = 0;
150
+ let stderrLines = 0;
151
+ let lastLine = "";
152
+ let doneEvent = null;
153
+ const streamStart = Date.now();
154
+ let lastStatusEmit = 0;
155
+ const STATUS_INTERVAL_MS = 3000;
156
+ for await (const line of readNDJSON(resp.body)) {
157
+ if (line.type === "stdout") {
158
+ const data = String(line.data || "");
159
+ stdout += data;
160
+ stdoutLines += data.split("\n").filter(l => l.trim()).length;
161
+ const trimmed = data.trim();
162
+ if (trimmed) lastLine = trimmed.split("\n").pop() || lastLine;
163
+ // Filter out the CWD marker line from progress events
164
+ if (!data.includes("__KALI_END_")) {
165
+ onToolProgress({
166
+ type: "stdout",
167
+ data
122
168
  });
123
- clearTimeout(timer);
124
- if (!resp.ok) {
125
- const text = await resp.text().catch(() => "");
126
- return { success: false, error: `Kali box HTTP ${resp.status}: ${text.substring(0, 500)}` };
127
- }
128
- if (!resp.body) {
129
- return { success: false, error: "Kali box returned no response body for exec_stream" };
130
- }
131
- // Read NDJSON stream — emit progress for each chunk, accumulate for final result
132
- let stdout = "";
133
- let stderr = "";
134
- let stdoutLines = 0;
135
- let stderrLines = 0;
136
- let lastLine = "";
137
- let doneEvent = null;
138
- const streamStart = Date.now();
139
- let lastStatusEmit = 0;
140
- const STATUS_INTERVAL_MS = 3000;
141
- for await (const line of readNDJSON(resp.body)) {
142
- if (line.type === "stdout") {
143
- const data = String(line.data || "");
144
- stdout += data;
145
- stdoutLines += data.split("\n").filter(l => l.trim()).length;
146
- const trimmed = data.trim();
147
- if (trimmed)
148
- lastLine = trimmed.split("\n").pop() || lastLine;
149
- // Filter out the CWD marker line from progress events
150
- if (!data.includes("__KALI_END_")) {
151
- onToolProgress({ type: "stdout", data });
152
- }
153
- }
154
- else if (line.type === "stderr") {
155
- const data = String(line.data || "");
156
- stderr += data;
157
- stderrLines += data.split("\n").filter(l => l.trim()).length;
158
- onToolProgress({ type: "stderr", data });
159
- }
160
- else if (line.type === "done") {
161
- doneEvent = line;
162
- }
163
- // Emit structured status every 3 seconds
164
- const now = Date.now();
165
- if (now - lastStatusEmit >= STATUS_INTERVAL_MS) {
166
- lastStatusEmit = now;
167
- const structuredProgress = {
168
- phase: detectPhase(stdout, stderr),
169
- elapsed_s: Math.round((now - streamStart) / 1000),
170
- stdout_lines: stdoutLines,
171
- stderr_lines: stderrLines,
172
- stdout_bytes: stdout.length,
173
- last_line: lastLine.length > 120 ? lastLine.slice(0, 117) + "..." : lastLine || undefined,
174
- };
175
- if (onStructuredProgress) {
176
- onStructuredProgress(structuredProgress);
177
- }
178
- // Also emit as a special "status" event through the standard progress callback
179
- // so the NDJSON streaming path can relay it to the CLI
180
- onToolProgress({ type: "status", progress: structuredProgress });
181
- }
182
- }
183
- // Strip CWD marker from accumulated stdout (same as non-streaming path)
184
- const markerIdx = stdout.lastIndexOf("__KALI_END_");
185
- if (markerIdx !== -1) {
186
- stdout = stdout.substring(0, markerIdx);
187
- }
188
- // Build final result (same shape as non-streaming exec)
189
- const exitCode = doneEvent ? doneEvent.exit_code ?? -1 : -1;
190
- const result = {
191
- success: exitCode === 0,
192
- stdout: truncate(stdout.replace(/\s+$/, "")),
193
- stderr: truncate(stderr.replace(/\s+$/, "")),
194
- exit_code: exitCode,
195
- killed: doneEvent?.killed ?? false,
196
- cwd: doneEvent?.cwd ?? "",
197
- duration_ms: doneEvent?.duration_ms ?? 0,
198
- };
199
- return { success: exitCode === 0, data: result };
169
+ }
170
+ } else if (line.type === "stderr") {
171
+ const data = String(line.data || "");
172
+ stderr += data;
173
+ stderrLines += data.split("\n").filter(l => l.trim()).length;
174
+ onToolProgress({
175
+ type: "stderr",
176
+ data
177
+ });
178
+ } else if (line.type === "done") {
179
+ doneEvent = line;
200
180
  }
201
- catch (err) {
202
- if (err instanceof Error && err.name === "AbortError") {
203
- return { success: false, error: `Kali box streaming request timed out after ${httpTimeout}ms` };
204
- }
205
- const msg = err instanceof Error ? err.message : String(err);
206
- if (msg.includes("ECONNREFUSED") || msg.includes("ENOTFOUND") || msg.includes("fetch failed")) {
207
- return {
208
- success: false,
209
- error: `Cannot reach kali-box at ${KALI_BOX_URL}. Ensure the kali-box Fly.io app is running (fly status -a kali-box).`,
210
- };
211
- }
212
- return { success: false, error: `Kali box streaming error: ${msg}` };
181
+
182
+ // Emit structured status every 3 seconds
183
+ const now = Date.now();
184
+ if (now - lastStatusEmit >= STATUS_INTERVAL_MS) {
185
+ lastStatusEmit = now;
186
+ const structuredProgress = {
187
+ phase: detectPhase(stdout, stderr),
188
+ elapsed_s: Math.round((now - streamStart) / 1000),
189
+ stdout_lines: stdoutLines,
190
+ stderr_lines: stderrLines,
191
+ stdout_bytes: stdout.length,
192
+ last_line: lastLine.length > 120 ? lastLine.slice(0, 117) + "..." : lastLine || undefined
193
+ };
194
+ if (onStructuredProgress) {
195
+ onStructuredProgress(structuredProgress);
196
+ }
197
+ // Also emit as a special "status" event through the standard progress callback
198
+ // so the NDJSON streaming path can relay it to the CLI
199
+ onToolProgress({
200
+ type: "status",
201
+ progress: structuredProgress
202
+ });
213
203
  }
204
+ }
205
+
206
+ // Strip CWD marker from accumulated stdout (same as non-streaming path)
207
+ const markerIdx = stdout.lastIndexOf("__KALI_END_");
208
+ if (markerIdx !== -1) {
209
+ stdout = stdout.substring(0, markerIdx);
210
+ }
211
+
212
+ // Build final result (same shape as non-streaming exec)
213
+ const exitCode = doneEvent ? doneEvent.exit_code ?? -1 : -1;
214
+ const result = {
215
+ success: exitCode === 0,
216
+ stdout: truncate(stdout.replace(/\s+$/, "")),
217
+ stderr: truncate(stderr.replace(/\s+$/, "")),
218
+ exit_code: exitCode,
219
+ killed: doneEvent?.killed ?? false,
220
+ cwd: doneEvent?.cwd ?? "",
221
+ duration_ms: doneEvent?.duration_ms ?? 0
222
+ };
223
+ return {
224
+ success: exitCode === 0,
225
+ data: result
226
+ };
227
+ } catch (err) {
228
+ if (err instanceof Error && err.name === "AbortError") {
229
+ return {
230
+ success: false,
231
+ error: `Kali box streaming request timed out after ${httpTimeout}ms`
232
+ };
233
+ }
234
+ const msg = err instanceof Error ? err.message : String(err);
235
+ if (msg.includes("ECONNREFUSED") || msg.includes("ENOTFOUND") || msg.includes("fetch failed")) {
236
+ return {
237
+ success: false,
238
+ error: `Cannot reach kali-box at ${KALI_BOX_URL}. Ensure the kali-box Fly.io app is running (fly status -a kali-box).`
239
+ };
240
+ }
241
+ return {
242
+ success: false,
243
+ error: `Kali box streaming error: ${msg}`
244
+ };
214
245
  }
215
- // ── Standard path: non-exec actions or no progress callback ───────
216
- if (action === "exec")
217
- payload.timeout = cmdTimeout;
218
- try {
219
- const controller = new AbortController();
220
- const timer = setTimeout(() => controller.abort(), httpTimeout);
221
- const resp = await fetch(KALI_BOX_URL, {
222
- method: "POST",
223
- headers: {
224
- "Content-Type": "application/json",
225
- Authorization: `Bearer ${KALI_AUTH_TOKEN}`,
226
- },
227
- body: JSON.stringify(payload),
228
- signal: controller.signal,
229
- });
230
- clearTimeout(timer);
231
- if (!resp.ok) {
232
- const text = await resp.text().catch(() => "");
233
- return { success: false, error: `Kali box HTTP ${resp.status}: ${text.substring(0, 500)}` };
234
- }
235
- const result = (await resp.json());
236
- // Truncate large text fields before returning to agent
237
- if (typeof result.stdout === "string")
238
- result.stdout = truncate(result.stdout);
239
- if (typeof result.stderr === "string")
240
- result.stderr = truncate(result.stderr);
241
- if (typeof result.content === "string")
242
- result.content = truncate(result.content);
243
- return { success: result.success !== false, data: result };
246
+ }
247
+
248
+ // ── Standard path: non-exec actions or no progress callback ───────
249
+ if (action === "exec") payload.timeout = cmdTimeout;
250
+ try {
251
+ const controller = new AbortController();
252
+ const timer = setTimeout(() => controller.abort(), httpTimeout);
253
+ const resp = await fetch(KALI_BOX_URL, {
254
+ method: "POST",
255
+ headers: {
256
+ "Content-Type": "application/json",
257
+ Authorization: `Bearer ${KALI_AUTH_TOKEN}`
258
+ },
259
+ body: JSON.stringify(payload),
260
+ signal: controller.signal
261
+ });
262
+ clearTimeout(timer);
263
+ if (!resp.ok) {
264
+ const text = await resp.text().catch(() => "");
265
+ return {
266
+ success: false,
267
+ error: `Kali box HTTP ${resp.status}: ${text.substring(0, 500)}`
268
+ };
244
269
  }
245
- catch (err) {
246
- if (err instanceof Error && err.name === "AbortError") {
247
- return { success: false, error: `Kali box request timed out after ${httpTimeout}ms` };
248
- }
249
- const msg = err instanceof Error ? err.message : String(err);
250
- // Friendly message for connection failures
251
- if (msg.includes("ECONNREFUSED") || msg.includes("ENOTFOUND") || msg.includes("fetch failed")) {
252
- return {
253
- success: false,
254
- error: `Cannot reach kali-box at ${KALI_BOX_URL}. Ensure the kali-box Fly.io app is running (fly status -a kali-box).`,
255
- };
256
- }
257
- return { success: false, error: `Kali box error: ${msg}` };
270
+ const result = await resp.json();
271
+
272
+ // Truncate large text fields before returning to agent
273
+ if (typeof result.stdout === "string") result.stdout = truncate(result.stdout);
274
+ if (typeof result.stderr === "string") result.stderr = truncate(result.stderr);
275
+ if (typeof result.content === "string") result.content = truncate(result.content);
276
+ return {
277
+ success: result.success !== false,
278
+ data: result
279
+ };
280
+ } catch (err) {
281
+ if (err instanceof Error && err.name === "AbortError") {
282
+ return {
283
+ success: false,
284
+ error: `Kali box request timed out after ${httpTimeout}ms`
285
+ };
286
+ }
287
+ const msg = err instanceof Error ? err.message : String(err);
288
+ // Friendly message for connection failures
289
+ if (msg.includes("ECONNREFUSED") || msg.includes("ENOTFOUND") || msg.includes("fetch failed")) {
290
+ return {
291
+ success: false,
292
+ error: `Cannot reach kali-box at ${KALI_BOX_URL}. Ensure the kali-box Fly.io app is running (fly status -a kali-box).`
293
+ };
258
294
  }
295
+ return {
296
+ success: false,
297
+ error: `Kali box error: ${msg}`
298
+ };
299
+ }
259
300
  }
301
+ //# sourceMappingURL=kali.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kali.js","names":["KALI_BOX_URL","process","env","KALI_AUTH_TOKEN","MAX_OUTPUT_CHARS","detectPhase","stdout","stderr","combined","toLowerCase","includes","undefined","VALID_ACTIONS","Set","FORWARD_KEYS","truncate","text","length","substring","readNDJSON","body","reader","getReader","decoder","TextDecoder","buffer","done","value","read","decode","stream","newlineIdx","indexOf","line","trim","JSON","parse","remaining","releaseLock","handleKali","_sb","args","_storeId","onToolProgress","onStructuredProgress","action","success","error","has","join","command","payload","key","cmdTimeout","Math","min","timeout","httpTimeout","controller","AbortController","timer","setTimeout","abort","resp","fetch","method","headers","Authorization","stringify","signal","clearTimeout","ok","catch","status","stdoutLines","stderrLines","lastLine","doneEvent","streamStart","Date","now","lastStatusEmit","STATUS_INTERVAL_MS","type","data","String","split","filter","l","trimmed","pop","structuredProgress","phase","elapsed_s","round","stdout_lines","stderr_lines","stdout_bytes","last_line","slice","progress","markerIdx","lastIndexOf","exitCode","exit_code","result","replace","killed","cwd","duration_ms","err","Error","name","msg","message","json","content"],"sources":["../../../src/server/handlers/kali.ts"],"sourcesContent":["// server/handlers/kali.ts — Kali Linux remote execution\n// Proxies commands to a dedicated Fly.io Kali machine via internal network.\n// Pattern: same as browser.ts — external execution environment, handler is a thin proxy.\n// Supports NDJSON streaming for exec actions via exec_stream on kali-box.\n\nimport type { SupabaseClient } from \"@supabase/supabase-js\";\n\nconst KALI_BOX_URL = process.env.KALI_BOX_URL || \"http://kali-box.internal:8080\";\nconst KALI_AUTH_TOKEN = process.env.KALI_AUTH_TOKEN || \"\";\nconst MAX_OUTPUT_CHARS = 500 * 1024; // 500KB safety cap — context_management handles limits\n\nexport interface KaliProgressEvent {\n type: \"stdout\" | \"stderr\";\n data: string;\n}\n\nexport interface KaliStructuredProgress {\n phase?: string;\n elapsed_s: number;\n stdout_lines: number;\n stderr_lines: number;\n stdout_bytes: number;\n last_line?: string;\n}\n\n/** Detect the current phase of a command based on output patterns */\nfunction detectPhase(stdout: string, stderr: string): string | undefined {\n const combined = (stderr + \"\\n\" + stdout).toLowerCase();\n if (combined.includes(\"compiling\") || combined.includes(\"building\")) return \"compiling\";\n if (combined.includes(\"scanning\") || combined.includes(\"nmap\")) return \"scanning\";\n if (combined.includes(\"downloading\") || combined.includes(\"fetching\")) return \"downloading\";\n if (combined.includes(\"installing\") || combined.includes(\"apt\")) return \"installing\";\n if (combined.includes(\"testing\") || combined.includes(\"exploit\")) return \"testing\";\n if (combined.includes(\"cracking\") || combined.includes(\"hashcat\") || combined.includes(\"john\")) return \"cracking\";\n if (combined.includes(\"enumerating\") || combined.includes(\"enum\")) return \"enumerating\";\n return undefined;\n}\n\nconst VALID_ACTIONS = new Set([\n \"exec\", \"exec_stream\", \"exec_bg\", \"bg_status\", \"bg_kill\", \"bg_list\",\n \"upload\", \"download\", \"info\", \"sessions\", \"reset\",\n]);\n\nconst FORWARD_KEYS = [\n \"command\", \"session_id\", \"timeout\", \"job_id\",\n \"path\", \"content\", \"encoding\", \"tail\",\n];\n\nfunction truncate(text: string): string {\n if (!text || text.length <= MAX_OUTPUT_CHARS) return text;\n return text.substring(0, MAX_OUTPUT_CHARS) + `\\n...[truncated, ${text.length} total chars]`;\n}\n\n/**\n * Read NDJSON lines from a ReadableStream (Node.js or web).\n * Yields parsed JSON objects, one per newline-delimited line.\n */\nasync function* readNDJSON(body: ReadableStream<Uint8Array>): AsyncGenerator<Record<string, unknown>> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n // Process complete lines\n let newlineIdx: number;\n while ((newlineIdx = buffer.indexOf(\"\\n\")) !== -1) {\n const line = buffer.substring(0, newlineIdx).trim();\n buffer = buffer.substring(newlineIdx + 1);\n if (line) {\n try {\n yield JSON.parse(line);\n } catch {\n // Skip malformed JSON lines\n }\n }\n }\n }\n\n // Process any remaining buffer\n const remaining = buffer.trim();\n if (remaining) {\n try {\n yield JSON.parse(remaining);\n } catch {\n // Skip malformed final fragment\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport async function handleKali(\n _sb: SupabaseClient,\n args: Record<string, unknown>,\n _storeId?: string,\n onToolProgress?: (progress: KaliProgressEvent) => void,\n onStructuredProgress?: (progress: KaliStructuredProgress) => void,\n): Promise<{ success: boolean; data?: unknown; error?: string }> {\n const action = args.action as string;\n\n if (!action) {\n return { success: false, error: \"action is required\" };\n }\n if (!VALID_ACTIONS.has(action)) {\n return { success: false, error: `Unknown action: ${action}. Valid: ${[...VALID_ACTIONS].join(\", \")}` };\n }\n if ((action === \"exec\" || action === \"exec_stream\" || action === \"exec_bg\") && !args.command) {\n return { success: false, error: \"command is required for exec/exec_bg\" };\n }\n if (!KALI_AUTH_TOKEN) {\n return { success: false, error: \"KALI_AUTH_TOKEN not configured on whale-agent\" };\n }\n\n // Build payload — only forward recognized keys\n const payload: Record<string, unknown> = { action };\n for (const key of FORWARD_KEYS) {\n if (args[key] !== undefined) payload[key] = args[key];\n }\n\n // Command timeout + HTTP buffer\n const cmdTimeout = Math.min((args.timeout as number) || 30000, 600000);\n const httpTimeout = cmdTimeout + 10000; // 10s buffer over command timeout\n\n // ── Streaming path: exec actions use exec_stream on kali-box ──────\n if ((action === \"exec\" || action === \"exec_stream\") && onToolProgress) {\n payload.action = \"exec_stream\";\n payload.timeout = cmdTimeout;\n\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), httpTimeout);\n\n const resp = await fetch(KALI_BOX_URL, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${KALI_AUTH_TOKEN}`,\n },\n body: JSON.stringify(payload),\n signal: controller.signal,\n });\n clearTimeout(timer);\n\n if (!resp.ok) {\n const text = await resp.text().catch(() => \"\");\n return { success: false, error: `Kali box HTTP ${resp.status}: ${text.substring(0, 500)}` };\n }\n\n if (!resp.body) {\n return { success: false, error: \"Kali box returned no response body for exec_stream\" };\n }\n\n // Read NDJSON stream — emit progress for each chunk, accumulate for final result\n let stdout = \"\";\n let stderr = \"\";\n let stdoutLines = 0;\n let stderrLines = 0;\n let lastLine = \"\";\n let doneEvent: Record<string, unknown> | null = null;\n const streamStart = Date.now();\n let lastStatusEmit = 0;\n const STATUS_INTERVAL_MS = 3000;\n\n for await (const line of readNDJSON(resp.body)) {\n if (line.type === \"stdout\") {\n const data = String(line.data || \"\");\n stdout += data;\n stdoutLines += data.split(\"\\n\").filter(l => l.trim()).length;\n const trimmed = data.trim();\n if (trimmed) lastLine = trimmed.split(\"\\n\").pop() || lastLine;\n // Filter out the CWD marker line from progress events\n if (!data.includes(\"__KALI_END_\")) {\n onToolProgress({ type: \"stdout\", data });\n }\n } else if (line.type === \"stderr\") {\n const data = String(line.data || \"\");\n stderr += data;\n stderrLines += data.split(\"\\n\").filter(l => l.trim()).length;\n onToolProgress({ type: \"stderr\", data });\n } else if (line.type === \"done\") {\n doneEvent = line;\n }\n\n // Emit structured status every 3 seconds\n const now = Date.now();\n if (now - lastStatusEmit >= STATUS_INTERVAL_MS) {\n lastStatusEmit = now;\n const structuredProgress: KaliStructuredProgress = {\n phase: detectPhase(stdout, stderr),\n elapsed_s: Math.round((now - streamStart) / 1000),\n stdout_lines: stdoutLines,\n stderr_lines: stderrLines,\n stdout_bytes: stdout.length,\n last_line: lastLine.length > 120 ? lastLine.slice(0, 117) + \"...\" : lastLine || undefined,\n };\n if (onStructuredProgress) {\n onStructuredProgress(structuredProgress);\n }\n // Also emit as a special \"status\" event through the standard progress callback\n // so the NDJSON streaming path can relay it to the CLI\n onToolProgress({ type: \"status\" as any, progress: structuredProgress } as any);\n }\n }\n\n // Strip CWD marker from accumulated stdout (same as non-streaming path)\n const markerIdx = stdout.lastIndexOf(\"__KALI_END_\");\n if (markerIdx !== -1) {\n stdout = stdout.substring(0, markerIdx);\n }\n\n // Build final result (same shape as non-streaming exec)\n const exitCode = doneEvent ? (doneEvent.exit_code as number) ?? -1 : -1;\n const result: Record<string, unknown> = {\n success: exitCode === 0,\n stdout: truncate(stdout.replace(/\\s+$/, \"\")),\n stderr: truncate(stderr.replace(/\\s+$/, \"\")),\n exit_code: exitCode,\n killed: doneEvent?.killed ?? false,\n cwd: doneEvent?.cwd ?? \"\",\n duration_ms: doneEvent?.duration_ms ?? 0,\n };\n\n return { success: exitCode === 0, data: result };\n } catch (err: unknown) {\n if (err instanceof Error && err.name === \"AbortError\") {\n return { success: false, error: `Kali box streaming request timed out after ${httpTimeout}ms` };\n }\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes(\"ECONNREFUSED\") || msg.includes(\"ENOTFOUND\") || msg.includes(\"fetch failed\")) {\n return {\n success: false,\n error: `Cannot reach kali-box at ${KALI_BOX_URL}. Ensure the kali-box Fly.io app is running (fly status -a kali-box).`,\n };\n }\n return { success: false, error: `Kali box streaming error: ${msg}` };\n }\n }\n\n // ── Standard path: non-exec actions or no progress callback ───────\n if (action === \"exec\") payload.timeout = cmdTimeout;\n\n try {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), httpTimeout);\n\n const resp = await fetch(KALI_BOX_URL, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${KALI_AUTH_TOKEN}`,\n },\n body: JSON.stringify(payload),\n signal: controller.signal,\n });\n clearTimeout(timer);\n\n if (!resp.ok) {\n const text = await resp.text().catch(() => \"\");\n return { success: false, error: `Kali box HTTP ${resp.status}: ${text.substring(0, 500)}` };\n }\n\n const result = (await resp.json()) as Record<string, unknown>;\n\n // Truncate large text fields before returning to agent\n if (typeof result.stdout === \"string\") result.stdout = truncate(result.stdout);\n if (typeof result.stderr === \"string\") result.stderr = truncate(result.stderr);\n if (typeof result.content === \"string\") result.content = truncate(result.content);\n\n return { success: result.success !== false, data: result };\n } catch (err: unknown) {\n if (err instanceof Error && err.name === \"AbortError\") {\n return { success: false, error: `Kali box request timed out after ${httpTimeout}ms` };\n }\n const msg = err instanceof Error ? err.message : String(err);\n // Friendly message for connection failures\n if (msg.includes(\"ECONNREFUSED\") || msg.includes(\"ENOTFOUND\") || msg.includes(\"fetch failed\")) {\n return {\n success: false,\n error: `Cannot reach kali-box at ${KALI_BOX_URL}. Ensure the kali-box Fly.io app is running (fly status -a kali-box).`,\n };\n }\n return { success: false, error: `Kali box error: ${msg}` };\n }\n}\n"],"mappings":"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","ignoreList":[]}