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
@@ -3,393 +3,440 @@
3
3
  *
4
4
  * Extracted from local-tools.ts for single-responsibility.
5
5
  */
6
+
6
7
  import { lookup } from "node:dns/promises";
7
8
  import { getValidToken, createAuthenticatedClient } from "../auth-service.js";
8
9
  import { resolveConfig } from "../config-store.js";
9
10
  // ============================================================================
10
11
  // SSRF PROTECTION
11
12
  // ============================================================================
13
+
12
14
  export function isBlockedUrl(urlStr) {
13
- try {
14
- const u = new URL(urlStr);
15
- const host = u.hostname.toLowerCase();
16
- // Block localhost
17
- if (host === "localhost" || host === "127.0.0.1" || host === "::1" || host === "[::1]" || host === "0.0.0.0")
18
- return true;
19
- // Block private IPv4 ranges
20
- if (/^10\./.test(host))
21
- return true;
22
- if (/^172\.(1[6-9]|2\d|3[01])\./.test(host))
23
- return true;
24
- if (/^192\.168\./.test(host))
25
- return true;
26
- // Block IPv6 private
27
- if (/^fe80:/i.test(host) || /^\[fe80:/i.test(host))
28
- return true;
29
- if (/^fc00:/i.test(host) || /^\[fc00:/i.test(host))
30
- return true;
31
- if (/^fd/i.test(host) || /^\[fd/i.test(host))
32
- return true;
33
- // Block cloud metadata
34
- if (host === "169.254.169.254" || /^169\.254\./.test(host))
35
- return true;
36
- // Block IPv6-mapped IPv4 (e.g. ::ffff:127.0.0.1, ::ffff:169.254.169.254)
37
- if (host.includes("::ffff:"))
38
- return true;
39
- // Block decimal/hex IP representations (e.g. 2130706433 = 127.0.0.1, 0x7f000001)
40
- if (/^\d+$/.test(host) || /^0x[0-9a-f]+$/i.test(host))
41
- return true;
42
- // Block octal IPs (e.g., 0177.0.0.1 = 127.0.0.1)
43
- if (/^0\d+\./.test(host))
44
- return true;
45
- // Block short zero address forms (e.g. 0, 0.0, 0.0.0)
46
- if (/^0(\.0)*$/.test(host))
47
- return true;
48
- // Block internal TLDs
49
- if (host.endsWith(".internal") || host.endsWith(".local"))
50
- return true;
51
- // Block non-HTTP(S)
52
- if (u.protocol !== "http:" && u.protocol !== "https:")
53
- return true;
54
- return false;
55
- }
56
- catch {
57
- return true;
58
- }
15
+ try {
16
+ const u = new URL(urlStr);
17
+ const host = u.hostname.toLowerCase();
18
+
19
+ // Block localhost
20
+ if (host === "localhost" || host === "127.0.0.1" || host === "::1" || host === "[::1]" || host === "0.0.0.0") return true;
21
+
22
+ // Block private IPv4 ranges
23
+ if (/^10\./.test(host)) return true;
24
+ if (/^172\.(1[6-9]|2\d|3[01])\./.test(host)) return true;
25
+ if (/^192\.168\./.test(host)) return true;
26
+
27
+ // Block IPv6 private
28
+ if (/^fe80:/i.test(host) || /^\[fe80:/i.test(host)) return true;
29
+ if (/^fc00:/i.test(host) || /^\[fc00:/i.test(host)) return true;
30
+ if (/^fd/i.test(host) || /^\[fd/i.test(host)) return true;
31
+
32
+ // Block cloud metadata
33
+ if (host === "169.254.169.254" || /^169\.254\./.test(host)) return true;
34
+
35
+ // Block IPv6-mapped IPv4 (e.g. ::ffff:127.0.0.1, ::ffff:169.254.169.254)
36
+ if (host.includes("::ffff:")) return true;
37
+
38
+ // Block decimal/hex IP representations (e.g. 2130706433 = 127.0.0.1, 0x7f000001)
39
+ if (/^\d+$/.test(host) || /^0x[0-9a-f]+$/i.test(host)) return true;
40
+
41
+ // Block octal IPs (e.g., 0177.0.0.1 = 127.0.0.1)
42
+ if (/^0\d+\./.test(host)) return true;
43
+
44
+ // Block short zero address forms (e.g. 0, 0.0, 0.0.0)
45
+ if (/^0(\.0)*$/.test(host)) return true;
46
+
47
+ // Block internal TLDs
48
+ if (host.endsWith(".internal") || host.endsWith(".local")) return true;
49
+
50
+ // Block non-HTTP(S)
51
+ if (u.protocol !== "http:" && u.protocol !== "https:") return true;
52
+ return false;
53
+ } catch {
54
+ return true;
55
+ }
59
56
  }
60
57
  async function resolveAndCheckUrl(url) {
61
- if (isBlockedUrl(url))
62
- return true;
63
- try {
64
- const { hostname } = new URL(url);
65
- // Skip IP-based hostnames (already checked by isBlockedUrl)
66
- if (/^[\d.]+$/.test(hostname) || hostname.includes(":"))
67
- return false;
68
- const { address } = await lookup(hostname);
69
- // IPv6 private/loopback detection
70
- if (address.includes(":")) {
71
- const lower = address.toLowerCase();
72
- if (lower === "::1" || lower === "::" || lower.startsWith("fe80") ||
73
- lower.startsWith("fc") || lower.startsWith("fd") ||
74
- lower.startsWith("::ffff:"))
75
- return true;
76
- return false;
77
- }
78
- // IPv4 private/internal ranges
79
- const parts = address.split(".").map(Number);
80
- if (parts[0] === 10)
81
- return true; // 10.0.0.0/8
82
- if (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31)
83
- return true; // 172.16.0.0/12
84
- if (parts[0] === 192 && parts[1] === 168)
85
- return true; // 192.168.0.0/16
86
- if (parts[0] === 127)
87
- return true; // 127.0.0.0/8
88
- if (parts[0] === 169 && parts[1] === 254)
89
- return true; // link-local
90
- if (address === "0.0.0.0")
91
- return true;
92
- return false;
93
- }
94
- catch {
95
- return false; // DNS resolution failed, allow (will fail at fetch anyway)
58
+ if (isBlockedUrl(url)) return true;
59
+ try {
60
+ const {
61
+ hostname
62
+ } = new URL(url);
63
+ // Skip IP-based hostnames (already checked by isBlockedUrl)
64
+ if (/^[\d.]+$/.test(hostname) || hostname.includes(":")) return false;
65
+ const {
66
+ address
67
+ } = await lookup(hostname);
68
+ // IPv6 private/loopback detection
69
+ if (address.includes(":")) {
70
+ const lower = address.toLowerCase();
71
+ if (lower === "::1" || lower === "::" || lower.startsWith("fe80") || lower.startsWith("fc") || lower.startsWith("fd") || lower.startsWith("::ffff:")) return true;
72
+ return false;
96
73
  }
74
+ // IPv4 private/internal ranges
75
+ const parts = address.split(".").map(Number);
76
+ if (parts[0] === 10) return true; // 10.0.0.0/8
77
+ if (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31) return true; // 172.16.0.0/12
78
+ if (parts[0] === 192 && parts[1] === 168) return true; // 192.168.0.0/16
79
+ if (parts[0] === 127) return true; // 127.0.0.0/8
80
+ if (parts[0] === 169 && parts[1] === 254) return true; // link-local
81
+ if (address === "0.0.0.0") return true;
82
+ return false;
83
+ } catch {
84
+ return false; // DNS resolution failed, allow (will fail at fetch anyway)
85
+ }
97
86
  }
87
+
98
88
  // ============================================================================
99
89
  // WEB FETCH
100
90
  // ============================================================================
91
+
101
92
  export async function webFetch(input) {
102
- const url = input.url;
103
- if (!url)
104
- return { success: false, output: "url is required" };
105
- if (await resolveAndCheckUrl(url)) {
106
- return { success: false, output: "URL blocked: cannot fetch localhost, private IPs, or internal addresses" };
93
+ const url = input.url;
94
+ if (!url) return {
95
+ success: false,
96
+ output: "url is required"
97
+ };
98
+ if (await resolveAndCheckUrl(url)) {
99
+ return {
100
+ success: false,
101
+ output: "URL blocked: cannot fetch localhost, private IPs, or internal addresses"
102
+ };
103
+ }
104
+ try {
105
+ const controller = new AbortController();
106
+ const fetchTimer = setTimeout(() => controller.abort(), 30000); // 30s timeout
107
+ let response = await fetch(url, {
108
+ headers: {
109
+ "User-Agent": "WhaleCode/3.0 (CLI Agent)",
110
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
111
+ },
112
+ signal: controller.signal,
113
+ redirect: "manual"
114
+ });
115
+ clearTimeout(fetchTimer);
116
+
117
+ // Handle redirects manually to prevent SSRF via redirect to internal addresses
118
+ if (response.status >= 300 && response.status < 400) {
119
+ const location = response.headers.get("location");
120
+ if (!location) {
121
+ return {
122
+ success: false,
123
+ output: `Redirect ${response.status} with no Location header`
124
+ };
125
+ }
126
+ // Resolve relative redirects against the original URL
127
+ const resolvedLocation = new URL(location, url).toString();
128
+ if (await resolveAndCheckUrl(resolvedLocation)) {
129
+ return {
130
+ success: false,
131
+ output: "Redirect target is a blocked address"
132
+ };
133
+ }
134
+ const redirectController = new AbortController();
135
+ const redirectTimer = setTimeout(() => redirectController.abort(), 30000);
136
+ response = await fetch(resolvedLocation, {
137
+ headers: {
138
+ "User-Agent": "WhaleCode/3.0 (CLI Agent)",
139
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
140
+ },
141
+ signal: redirectController.signal,
142
+ redirect: "manual"
143
+ });
144
+ clearTimeout(redirectTimer);
145
+ // If still redirecting, give up rather than following an unbounded chain
146
+ if (response.status >= 300 && response.status < 400) {
147
+ return {
148
+ success: false,
149
+ output: "Too many redirects"
150
+ };
151
+ }
107
152
  }
108
- try {
109
- const controller = new AbortController();
110
- const fetchTimer = setTimeout(() => controller.abort(), 30000); // 30s timeout
111
- let response = await fetch(url, {
112
- headers: {
113
- "User-Agent": "WhaleCode/3.0 (CLI Agent)",
114
- "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
115
- },
116
- signal: controller.signal,
117
- redirect: "manual",
118
- });
119
- clearTimeout(fetchTimer);
120
- // Handle redirects manually to prevent SSRF via redirect to internal addresses
121
- if (response.status >= 300 && response.status < 400) {
122
- const location = response.headers.get("location");
123
- if (!location) {
124
- return { success: false, output: `Redirect ${response.status} with no Location header` };
125
- }
126
- // Resolve relative redirects against the original URL
127
- const resolvedLocation = new URL(location, url).toString();
128
- if (await resolveAndCheckUrl(resolvedLocation)) {
129
- return { success: false, output: "Redirect target is a blocked address" };
130
- }
131
- const redirectController = new AbortController();
132
- const redirectTimer = setTimeout(() => redirectController.abort(), 30000);
133
- response = await fetch(resolvedLocation, {
134
- headers: {
135
- "User-Agent": "WhaleCode/3.0 (CLI Agent)",
136
- "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
137
- },
138
- signal: redirectController.signal,
139
- redirect: "manual",
140
- });
141
- clearTimeout(redirectTimer);
142
- // If still redirecting, give up rather than following an unbounded chain
143
- if (response.status >= 300 && response.status < 400) {
144
- return { success: false, output: "Too many redirects" };
145
- }
146
- }
147
- if (!response.ok) {
148
- return { success: false, output: `HTTP ${response.status}: ${response.statusText}` };
149
- }
150
- const contentType = response.headers.get("content-type") || "";
151
- const body = await response.text();
152
- // JSON — return as-is (pretty-printed)
153
- if (contentType.includes("application/json")) {
154
- try {
155
- const parsed = JSON.parse(body);
156
- const pretty = JSON.stringify(parsed, null, 2);
157
- return { success: true, output: pretty.slice(0, 80000) };
158
- }
159
- catch {
160
- return { success: true, output: body.slice(0, 80000) };
161
- }
162
- }
163
- // Plain text — return as-is
164
- if (contentType.includes("text/plain")) {
165
- return { success: true, output: body.slice(0, 80000) };
166
- }
167
- // HTML — convert to readable text
168
- const text = htmlToText(body);
169
- const truncated = text.length > 500_000 ? text.slice(0, 500_000) + "\n\n... (safety truncated)" : text;
170
- return { success: true, output: `# ${url}\n\n${truncated}` };
153
+ if (!response.ok) {
154
+ return {
155
+ success: false,
156
+ output: `HTTP ${response.status}: ${response.statusText}`
157
+ };
171
158
  }
172
- catch (err) {
173
- return { success: false, output: `Fetch error: ${err.message || err}` };
159
+ const contentType = response.headers.get("content-type") || "";
160
+ const body = await response.text();
161
+
162
+ // JSON — return as-is (pretty-printed)
163
+ if (contentType.includes("application/json")) {
164
+ try {
165
+ const parsed = JSON.parse(body);
166
+ const pretty = JSON.stringify(parsed, null, 2);
167
+ return {
168
+ success: true,
169
+ output: pretty.slice(0, 80000)
170
+ };
171
+ } catch {
172
+ return {
173
+ success: true,
174
+ output: body.slice(0, 80000)
175
+ };
176
+ }
174
177
  }
178
+
179
+ // Plain text — return as-is
180
+ if (contentType.includes("text/plain")) {
181
+ return {
182
+ success: true,
183
+ output: body.slice(0, 80000)
184
+ };
185
+ }
186
+
187
+ // HTML — convert to readable text
188
+ const text = htmlToText(body);
189
+ const truncated = text.length > 500_000 ? text.slice(0, 500_000) + "\n\n... (safety truncated)" : text;
190
+ return {
191
+ success: true,
192
+ output: `# ${url}\n\n${truncated}`
193
+ };
194
+ } catch (err) {
195
+ return {
196
+ success: false,
197
+ output: `Fetch error: ${err.message || err}`
198
+ };
199
+ }
175
200
  }
201
+
176
202
  // ============================================================================
177
203
  // HTML TO TEXT
178
204
  // ============================================================================
205
+
179
206
  /** Remove all instances of a tag and its content, handling nesting (innermost first) */
180
207
  function removeNestedTag(html, tag) {
181
- const pattern = new RegExp(`<${tag}[^>]*>(?:(?!<${tag}[\\s>/])[\\s\\S])*?<\\/${tag}>`, "gi");
182
- let result = html;
183
- let prev = "";
184
- let safety = 0;
185
- while (result !== prev && safety++ < 50) {
186
- prev = result;
187
- result = result.replace(pattern, "");
188
- }
189
- result = result.replace(new RegExp(`<${tag}[^>]*>`, "gi"), "");
190
- return result;
208
+ const pattern = new RegExp(`<${tag}[^>]*>(?:(?!<${tag}[\\s>/])[\\s\\S])*?<\\/${tag}>`, "gi");
209
+ let result = html;
210
+ let prev = "";
211
+ let safety = 0;
212
+ while (result !== prev && safety++ < 50) {
213
+ prev = result;
214
+ result = result.replace(pattern, "");
215
+ }
216
+ result = result.replace(new RegExp(`<${tag}[^>]*>`, "gi"), "");
217
+ return result;
191
218
  }
192
219
  function stripTags(html) {
193
- return html.replace(/<[^>]+>/g, "");
220
+ return html.replace(/<[^>]+>/g, "");
194
221
  }
195
222
  function decodeEntities(text) {
196
- return text
197
- .replace(/&nbsp;/g, " ")
198
- .replace(/&amp;/g, "&")
199
- .replace(/&lt;/g, "<")
200
- .replace(/&gt;/g, ">")
201
- .replace(/&quot;/g, '"')
202
- .replace(/&#39;/g, "'")
203
- .replace(/&#x27;/g, "'")
204
- .replace(/&#x([0-9a-fA-F]+);/g, (_, hex) => String.fromCharCode(parseInt(hex, 16)))
205
- .replace(/&#(\d+);/g, (_, code) => String.fromCharCode(parseInt(code)));
223
+ return text.replace(/&nbsp;/g, " ").replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&quot;/g, '"').replace(/&#39;/g, "'").replace(/&#x27;/g, "'").replace(/&#x([0-9a-fA-F]+);/g, (_, hex) => String.fromCharCode(parseInt(hex, 16))).replace(/&#(\d+);/g, (_, code) => String.fromCharCode(parseInt(code)));
206
224
  }
225
+
207
226
  /** Enhanced HTML -> readable text/markdown converter */
208
227
  export function htmlToText(html) {
209
- let c = html;
210
- // 1. Extract main content area (skips nav, sidebar, footer automatically)
211
- const mainMatch = c.match(/<main[^>]*>([\s\S]*)<\/main>/i)
212
- || c.match(/<article[^>]*>([\s\S]*)<\/article>/i);
213
- if (mainMatch) {
214
- c = mainMatch[1];
215
- }
216
- else {
217
- const bodyMatch = c.match(/<body[^>]*>([\s\S]*)<\/body>/i);
218
- if (bodyMatch)
219
- c = bodyMatch[1];
220
- }
221
- // 2. Remove non-content elements (nesting-aware)
222
- for (const tag of [
223
- "script", "style", "nav", "footer", "aside", "header",
224
- "form", "svg", "iframe", "select", "button", "noscript",
225
- ]) {
226
- c = removeNestedTag(c, tag);
227
- }
228
- // 3. Remove HTML comments
229
- c = c.replace(/<!--[\s\S]*?-->/g, "");
230
- // 4. Convert semantic elements -> markdown
231
- // Code blocks first (preserve contents)
232
- c = c.replace(/<pre[^>]*>([\s\S]*?)<\/pre>/gi, (_, inner) => "\n```\n" + stripTags(inner).trim() + "\n```\n");
233
- c = c.replace(/<code[^>]*>([\s\S]*?)<\/code>/gi, "`$1`");
234
- // Headings
235
- c = c.replace(/<h([1-6])[^>]*>([\s\S]*?)<\/h\1>/gi, (_, level, text) => "\n" + "#".repeat(parseInt(level)) + " " + stripTags(text).trim() + "\n\n");
236
- // Links — skip empty, anchor-only, and javascript: hrefs
237
- c = c.replace(/<a[^>]*href="([^"]*)"[^>]*>([\s\S]*?)<\/a>/gi, (_, href, text) => {
238
- const linkText = stripTags(text).trim();
239
- if (!linkText)
240
- return "";
241
- if (href.startsWith("#") || href.startsWith("javascript:"))
242
- return linkText;
243
- return `[${linkText}](${href})`;
244
- });
245
- // Tables -> pipe-delimited markdown
246
- c = c.replace(/<table[^>]*>([\s\S]*?)<\/table>/gi, (_, tableContent) => {
247
- const rows = [];
248
- const rowRegex = /<tr[^>]*>([\s\S]*?)<\/tr>/gi;
249
- let rowMatch;
250
- let isFirstRow = true;
251
- while ((rowMatch = rowRegex.exec(tableContent)) !== null) {
252
- const cells = [];
253
- const cellRegex = /<(?:td|th)[^>]*>([\s\S]*?)<\/(?:td|th)>/gi;
254
- let cellMatch;
255
- while ((cellMatch = cellRegex.exec(rowMatch[1])) !== null) {
256
- cells.push(stripTags(cellMatch[1]).trim());
257
- }
258
- if (cells.length > 0) {
259
- rows.push("| " + cells.join(" | ") + " |");
260
- if (isFirstRow) {
261
- rows.push("| " + cells.map(() => "---").join(" | ") + " |");
262
- isFirstRow = false;
263
- }
264
- }
228
+ let c = html;
229
+
230
+ // 1. Extract main content area (skips nav, sidebar, footer automatically)
231
+ const mainMatch = c.match(/<main[^>]*>([\s\S]*)<\/main>/i) || c.match(/<article[^>]*>([\s\S]*)<\/article>/i);
232
+ if (mainMatch) {
233
+ c = mainMatch[1];
234
+ } else {
235
+ const bodyMatch = c.match(/<body[^>]*>([\s\S]*)<\/body>/i);
236
+ if (bodyMatch) c = bodyMatch[1];
237
+ }
238
+
239
+ // 2. Remove non-content elements (nesting-aware)
240
+ for (const tag of ["script", "style", "nav", "footer", "aside", "header", "form", "svg", "iframe", "select", "button", "noscript"]) {
241
+ c = removeNestedTag(c, tag);
242
+ }
243
+
244
+ // 3. Remove HTML comments
245
+ c = c.replace(/<!--[\s\S]*?-->/g, "");
246
+
247
+ // 4. Convert semantic elements -> markdown
248
+
249
+ // Code blocks first (preserve contents)
250
+ c = c.replace(/<pre[^>]*>([\s\S]*?)<\/pre>/gi, (_, inner) => "\n```\n" + stripTags(inner).trim() + "\n```\n");
251
+ c = c.replace(/<code[^>]*>([\s\S]*?)<\/code>/gi, "`$1`");
252
+
253
+ // Headings
254
+ c = c.replace(/<h([1-6])[^>]*>([\s\S]*?)<\/h\1>/gi, (_, level, text) => "\n" + "#".repeat(parseInt(level)) + " " + stripTags(text).trim() + "\n\n");
255
+
256
+ // Links skip empty, anchor-only, and javascript: hrefs
257
+ c = c.replace(/<a[^>]*href="([^"]*)"[^>]*>([\s\S]*?)<\/a>/gi, (_, href, text) => {
258
+ const linkText = stripTags(text).trim();
259
+ if (!linkText) return "";
260
+ if (href.startsWith("#") || href.startsWith("javascript:")) return linkText;
261
+ return `[${linkText}](${href})`;
262
+ });
263
+
264
+ // Tables -> pipe-delimited markdown
265
+ c = c.replace(/<table[^>]*>([\s\S]*?)<\/table>/gi, (_, tableContent) => {
266
+ const rows = [];
267
+ const rowRegex = /<tr[^>]*>([\s\S]*?)<\/tr>/gi;
268
+ let rowMatch;
269
+ let isFirstRow = true;
270
+ while ((rowMatch = rowRegex.exec(tableContent)) !== null) {
271
+ const cells = [];
272
+ const cellRegex = /<(?:td|th)[^>]*>([\s\S]*?)<\/(?:td|th)>/gi;
273
+ let cellMatch;
274
+ while ((cellMatch = cellRegex.exec(rowMatch[1])) !== null) {
275
+ cells.push(stripTags(cellMatch[1]).trim());
276
+ }
277
+ if (cells.length > 0) {
278
+ rows.push("| " + cells.join(" | ") + " |");
279
+ if (isFirstRow) {
280
+ rows.push("| " + cells.map(() => "---").join(" | ") + " |");
281
+ isFirstRow = false;
265
282
  }
266
- return "\n" + rows.join("\n") + "\n";
267
- });
268
- // List items
269
- c = c.replace(/<li[^>]*>([\s\S]*?)<\/li>/gi, (_, text) => "- " + stripTags(text).trim() + "\n");
270
- // Bold, italic
271
- c = c.replace(/<(strong|b)[^>]*>([\s\S]*?)<\/\1>/gi, "**$2**");
272
- c = c.replace(/<(em|i)[^>]*>([\s\S]*?)<\/\1>/gi, "*$2*");
273
- // Images -> alt text
274
- c = c.replace(/<img[^>]*alt="([^"]*)"[^>]*>/gi, "[$1]");
275
- c = c.replace(/<img[^>]*>/gi, "");
276
- // Horizontal rules
277
- c = c.replace(/<hr\s*\/?>/gi, "\n---\n");
278
- // 5. Block elements -> newlines (replace tags independently, NOT as pairs)
279
- c = c.replace(/<\/(?:p|div|section|article|main|blockquote|dd|dt|figcaption|figure|details|summary)>/gi, "\n\n");
280
- c = c.replace(/<(?:p|div|section|article|main|blockquote|dd|dt|figcaption|figure|details|summary)[^>]*>/gi, "");
281
- c = c.replace(/<br\s*\/?>/gi, "\n");
282
- c = c.replace(/<\/(?:li|tr|thead|tbody|tfoot|ul|ol|dl)>/gi, "\n");
283
- // 6. Strip all remaining tags
284
- c = c.replace(/<[^>]+>/g, "");
285
- // 7. Decode HTML entities
286
- c = decodeEntities(c);
287
- // 8. Clean whitespace
288
- c = c
289
- .replace(/[ \t]+/g, " ")
290
- .replace(/ *\n */g, "\n")
291
- .replace(/\n{3,}/g, "\n\n")
292
- .trim();
293
- return c;
283
+ }
284
+ }
285
+ return "\n" + rows.join("\n") + "\n";
286
+ });
287
+
288
+ // List items
289
+ c = c.replace(/<li[^>]*>([\s\S]*?)<\/li>/gi, (_, text) => "- " + stripTags(text).trim() + "\n");
290
+
291
+ // Bold, italic
292
+ c = c.replace(/<(strong|b)[^>]*>([\s\S]*?)<\/\1>/gi, "**$2**");
293
+ c = c.replace(/<(em|i)[^>]*>([\s\S]*?)<\/\1>/gi, "*$2*");
294
+
295
+ // Images -> alt text
296
+ c = c.replace(/<img[^>]*alt="([^"]*)"[^>]*>/gi, "[$1]");
297
+ c = c.replace(/<img[^>]*>/gi, "");
298
+
299
+ // Horizontal rules
300
+ c = c.replace(/<hr\s*\/?>/gi, "\n---\n");
301
+
302
+ // 5. Block elements -> newlines (replace tags independently, NOT as pairs)
303
+ c = c.replace(/<\/(?:p|div|section|article|main|blockquote|dd|dt|figcaption|figure|details|summary)>/gi, "\n\n");
304
+ c = c.replace(/<(?:p|div|section|article|main|blockquote|dd|dt|figcaption|figure|details|summary)[^>]*>/gi, "");
305
+ c = c.replace(/<br\s*\/?>/gi, "\n");
306
+ c = c.replace(/<\/(?:li|tr|thead|tbody|tfoot|ul|ol|dl)>/gi, "\n");
307
+
308
+ // 6. Strip all remaining tags
309
+ c = c.replace(/<[^>]+>/g, "");
310
+
311
+ // 7. Decode HTML entities
312
+ c = decodeEntities(c);
313
+
314
+ // 8. Clean whitespace
315
+ c = c.replace(/[ \t]+/g, " ").replace(/ *\n */g, "\n").replace(/\n{3,}/g, "\n\n").trim();
316
+ return c;
294
317
  }
318
+
295
319
  // ============================================================================
296
320
  // WEB SEARCH (Exa API)
297
321
  // ============================================================================
322
+
298
323
  // Cache the Exa API key within a session
299
324
  let cachedExaKey = null;
300
325
  async function getExaApiKey() {
301
- if (cachedExaKey)
302
- return cachedExaKey;
303
- try {
304
- const config = resolveConfig();
305
- // Tier 1: Service role key (MCP server mode)
306
- if (config.supabaseUrl && config.supabaseKey) {
307
- const { createClient } = await import("@supabase/supabase-js");
308
- const client = createClient(config.supabaseUrl, config.supabaseKey, {
309
- auth: { persistSession: false, autoRefreshToken: false },
310
- });
311
- const { data } = await client.from("platform_secrets").select("value").eq("key", "exa_api_key").single();
312
- if (data?.value) {
313
- cachedExaKey = data.value;
314
- return cachedExaKey;
315
- }
316
- }
317
- // Tier 2: User JWT
318
- const token = await getValidToken();
319
- if (token) {
320
- const client = createAuthenticatedClient(token);
321
- const { data } = await client.from("platform_secrets").select("value").eq("key", "exa_api_key").single();
322
- if (data?.value) {
323
- cachedExaKey = data.value;
324
- return cachedExaKey;
325
- }
326
+ if (cachedExaKey) return cachedExaKey;
327
+ try {
328
+ const config = resolveConfig();
329
+
330
+ // Tier 1: Service role key (MCP server mode)
331
+ if (config.supabaseUrl && config.supabaseKey) {
332
+ const {
333
+ createClient
334
+ } = await import("@supabase/supabase-js");
335
+ const client = createClient(config.supabaseUrl, config.supabaseKey, {
336
+ auth: {
337
+ persistSession: false,
338
+ autoRefreshToken: false
326
339
  }
340
+ });
341
+ const {
342
+ data
343
+ } = await client.from("platform_secrets").select("value").eq("key", "exa_api_key").single();
344
+ if (data?.value) {
345
+ cachedExaKey = data.value;
346
+ return cachedExaKey;
347
+ }
327
348
  }
328
- catch { /* swallow */ }
329
- // Tier 3: Environment variable fallback
330
- const envKey = process.env["EXA_API_KEY"];
331
- if (envKey) {
332
- cachedExaKey = envKey;
349
+
350
+ // Tier 2: User JWT
351
+ const token = await getValidToken();
352
+ if (token) {
353
+ const client = createAuthenticatedClient(token);
354
+ const {
355
+ data
356
+ } = await client.from("platform_secrets").select("value").eq("key", "exa_api_key").single();
357
+ if (data?.value) {
358
+ cachedExaKey = data.value;
333
359
  return cachedExaKey;
360
+ }
334
361
  }
335
- return null;
362
+ } catch {/* swallow */}
363
+
364
+ // Tier 3: Environment variable fallback
365
+ const envKey = process.env["EXA_API_KEY"];
366
+ if (envKey) {
367
+ cachedExaKey = envKey;
368
+ return cachedExaKey;
369
+ }
370
+ return null;
336
371
  }
337
372
  export async function webSearch(input) {
338
- const query = input.query;
339
- if (!query)
340
- return { success: false, output: "query is required" };
341
- const allowedDomains = input.allowed_domains;
342
- const blockedDomains = input.blocked_domains;
343
- const apiKey = await getExaApiKey();
344
- if (!apiKey) {
345
- return { success: false, output: "Exa API key not configured. Add 'exa_api_key' to platform_secrets table." };
346
- }
347
- try {
348
- const searchBody = {
349
- query,
350
- numResults: 10,
351
- type: "auto",
352
- contents: { text: { maxCharacters: 1200, includeHtmlTags: false } },
353
- };
354
- if (allowedDomains?.length)
355
- searchBody.includeDomains = allowedDomains;
356
- if (blockedDomains?.length)
357
- searchBody.excludeDomains = blockedDomains;
358
- const response = await fetch("https://api.exa.ai/search", {
359
- method: "POST",
360
- headers: {
361
- "x-api-key": apiKey,
362
- "Content-Type": "application/json",
363
- "Accept": "application/json",
364
- },
365
- body: JSON.stringify(searchBody),
366
- signal: AbortSignal.timeout(15000),
367
- });
368
- if (!response.ok) {
369
- const errBody = await response.text();
370
- return { success: false, output: `Exa API error (${response.status}): ${errBody}` };
373
+ const query = input.query;
374
+ if (!query) return {
375
+ success: false,
376
+ output: "query is required"
377
+ };
378
+ const allowedDomains = input.allowed_domains;
379
+ const blockedDomains = input.blocked_domains;
380
+ const apiKey = await getExaApiKey();
381
+ if (!apiKey) {
382
+ return {
383
+ success: false,
384
+ output: "Exa API key not configured. Add 'exa_api_key' to platform_secrets table."
385
+ };
386
+ }
387
+ try {
388
+ const searchBody = {
389
+ query,
390
+ numResults: 10,
391
+ type: "auto",
392
+ contents: {
393
+ text: {
394
+ maxCharacters: 1200,
395
+ includeHtmlTags: false
371
396
  }
372
- const data = await response.json();
373
- const results = (data.results || []).map((r, i) => {
374
- const parts = [
375
- `${i + 1}. **${r.title || "Untitled"}**`,
376
- ` ${r.url}`,
377
- ];
378
- if (r.publishedDate)
379
- parts.push(` Published: ${r.publishedDate}`);
380
- if (r.text)
381
- parts.push(` ${r.text.slice(0, 500)}`);
382
- return parts.join("\n");
383
- });
384
- return {
385
- success: true,
386
- output: `Found ${results.length} results for "${query}":\n\n${results.join("\n\n")}`,
387
- };
397
+ }
398
+ };
399
+ if (allowedDomains?.length) searchBody.includeDomains = allowedDomains;
400
+ if (blockedDomains?.length) searchBody.excludeDomains = blockedDomains;
401
+ const response = await fetch("https://api.exa.ai/search", {
402
+ method: "POST",
403
+ headers: {
404
+ "x-api-key": apiKey,
405
+ "Content-Type": "application/json",
406
+ "Accept": "application/json"
407
+ },
408
+ body: JSON.stringify(searchBody),
409
+ signal: AbortSignal.timeout(15000)
410
+ });
411
+ if (!response.ok) {
412
+ const errBody = await response.text();
413
+ return {
414
+ success: false,
415
+ output: `Exa API error (${response.status}): ${errBody}`
416
+ };
388
417
  }
389
- catch (err) {
390
- if (err.name === "TimeoutError" || err.message?.includes("timeout")) {
391
- return { success: false, output: "Exa search timed out (15s)" };
392
- }
393
- return { success: false, output: `Web search error: ${err.message || err}` };
418
+ const data = await response.json();
419
+ const results = (data.results || []).map((r, i) => {
420
+ const parts = [`${i + 1}. **${r.title || "Untitled"}**`, ` ${r.url}`];
421
+ if (r.publishedDate) parts.push(` Published: ${r.publishedDate}`);
422
+ if (r.text) parts.push(` ${r.text.slice(0, 500)}`);
423
+ return parts.join("\n");
424
+ });
425
+ return {
426
+ success: true,
427
+ output: `Found ${results.length} results for "${query}":\n\n${results.join("\n\n")}`
428
+ };
429
+ } catch (err) {
430
+ if (err.name === "TimeoutError" || err.message?.includes("timeout")) {
431
+ return {
432
+ success: false,
433
+ output: "Exa search timed out (15s)"
434
+ };
394
435
  }
436
+ return {
437
+ success: false,
438
+ output: `Web search error: ${err.message || err}`
439
+ };
440
+ }
395
441
  }
442
+ //# sourceMappingURL=web-tools.js.map