whale-code 6.5.5 → 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 (847) 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 +5 -1
  73. package/dist/cli/services/agent-config.js +66 -36
  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 +976 -688
  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.js +187 -169
  107. package/dist/cli/services/error-logger.js.map +1 -0
  108. package/dist/cli/services/file-history.d.ts +1 -1
  109. package/dist/cli/services/file-history.js +50 -54
  110. package/dist/cli/services/file-history.js.map +1 -0
  111. package/dist/cli/services/format-server-response.js +332 -372
  112. package/dist/cli/services/format-server-response.js.map +1 -0
  113. package/dist/cli/services/git-context.js +61 -45
  114. package/dist/cli/services/git-context.js.map +1 -0
  115. package/dist/cli/services/hooks.d.ts +2 -2
  116. package/dist/cli/services/hooks.js +195 -180
  117. package/dist/cli/services/hooks.js.map +1 -0
  118. package/dist/cli/services/ink-incremental.d.ts +19 -0
  119. package/dist/cli/services/ink-incremental.js +59 -0
  120. package/dist/cli/services/ink-incremental.js.map +1 -0
  121. package/dist/cli/services/ink-resize-fix.js +54 -44
  122. package/dist/cli/services/ink-resize-fix.js.map +1 -0
  123. package/dist/cli/services/ink-sync-output.d.ts +12 -0
  124. package/dist/cli/services/ink-sync-output.js +16 -0
  125. package/dist/cli/services/ink-sync-output.js.map +1 -0
  126. package/dist/cli/services/interactive-tools.js +268 -212
  127. package/dist/cli/services/interactive-tools.js.map +1 -0
  128. package/dist/cli/services/keybinding-manager.d.ts +11 -1
  129. package/dist/cli/services/keybinding-manager.js +126 -63
  130. package/dist/cli/services/keybinding-manager.js.map +1 -0
  131. package/dist/cli/services/local-tools.d.ts +1 -1
  132. package/dist/cli/services/local-tools.js +939 -656
  133. package/dist/cli/services/local-tools.js.map +1 -0
  134. package/dist/cli/services/lsp-manager.js +757 -594
  135. package/dist/cli/services/lsp-manager.js.map +1 -0
  136. package/dist/cli/services/mcp-client.d.ts +1 -1
  137. package/dist/cli/services/mcp-client.js +173 -134
  138. package/dist/cli/services/mcp-client.js.map +1 -0
  139. package/dist/cli/services/memory-manager.js +53 -40
  140. package/dist/cli/services/memory-manager.js.map +1 -0
  141. package/dist/cli/services/model-manager.js +55 -40
  142. package/dist/cli/services/model-manager.js.map +1 -0
  143. package/dist/cli/services/model-router.js +115 -85
  144. package/dist/cli/services/model-router.js.map +1 -0
  145. package/dist/cli/services/paths.d.ts +30 -0
  146. package/dist/cli/services/paths.js +81 -0
  147. package/dist/cli/services/paths.js.map +1 -0
  148. package/dist/cli/services/permission-modes.js +32 -25
  149. package/dist/cli/services/permission-modes.js.map +1 -0
  150. package/dist/cli/services/rewind.js +182 -168
  151. package/dist/cli/services/rewind.js.map +1 -0
  152. package/dist/cli/services/ripgrep.js +115 -115
  153. package/dist/cli/services/ripgrep.js.map +1 -0
  154. package/dist/cli/services/sandbox.d.ts +1 -1
  155. package/dist/cli/services/sandbox.js +58 -37
  156. package/dist/cli/services/sandbox.js.map +1 -0
  157. package/dist/cli/services/server-tools.js +738 -565
  158. package/dist/cli/services/server-tools.js.map +1 -0
  159. package/dist/cli/services/session-persistence.js +69 -74
  160. package/dist/cli/services/session-persistence.js.map +1 -0
  161. package/dist/cli/services/subagent-worker.js +42 -27
  162. package/dist/cli/services/subagent-worker.js.map +1 -0
  163. package/dist/cli/services/subagent.d.ts +2 -0
  164. package/dist/cli/services/subagent.js +605 -433
  165. package/dist/cli/services/subagent.js.map +1 -0
  166. package/dist/cli/services/system-prompt.js +86 -78
  167. package/dist/cli/services/system-prompt.js.map +1 -0
  168. package/dist/cli/services/task-decomposer.d.ts +1 -1
  169. package/dist/cli/services/task-decomposer.js +172 -139
  170. package/dist/cli/services/task-decomposer.js.map +1 -0
  171. package/dist/cli/services/team-lead.d.ts +2 -2
  172. package/dist/cli/services/team-lead.js +727 -529
  173. package/dist/cli/services/team-lead.js.map +1 -0
  174. package/dist/cli/services/team-state.js +319 -319
  175. package/dist/cli/services/team-state.js.map +1 -0
  176. package/dist/cli/services/teammate.d.ts +8 -2
  177. package/dist/cli/services/teammate.js +857 -569
  178. package/dist/cli/services/teammate.js.map +1 -0
  179. package/dist/cli/services/telemetry.d.ts +6 -1
  180. package/dist/cli/services/telemetry.js +180 -157
  181. package/dist/cli/services/telemetry.js.map +1 -0
  182. package/dist/cli/services/tools/agent-tools.d.ts +3 -3
  183. package/dist/cli/services/tools/agent-tools.js +480 -322
  184. package/dist/cli/services/tools/agent-tools.js.map +1 -0
  185. package/dist/cli/services/tools/file-ops.js +563 -450
  186. package/dist/cli/services/tools/file-ops.js.map +1 -0
  187. package/dist/cli/services/tools/search-tools.js +231 -162
  188. package/dist/cli/services/tools/search-tools.js.map +1 -0
  189. package/dist/cli/services/tools/shell-exec.js +197 -151
  190. package/dist/cli/services/tools/shell-exec.js.map +1 -0
  191. package/dist/cli/services/tools/task-manager.js +206 -173
  192. package/dist/cli/services/tools/task-manager.js.map +1 -0
  193. package/dist/cli/services/tools/web-tools.js +388 -341
  194. package/dist/cli/services/tools/web-tools.js.map +1 -0
  195. package/dist/cli/setup/SetupApp.d.ts +2 -2
  196. package/dist/cli/setup/SetupApp.js +608 -160
  197. package/dist/cli/setup/SetupApp.js.map +1 -0
  198. package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
  199. package/dist/cli/shared/ErrorBoundary.js +73 -0
  200. package/dist/cli/shared/ErrorBoundary.js.map +1 -0
  201. package/dist/cli/shared/MatrixIntro.js +66 -69
  202. package/dist/cli/shared/MatrixIntro.js.map +1 -0
  203. package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
  204. package/dist/cli/shared/SpinnerSlot.js +63 -0
  205. package/dist/cli/shared/SpinnerSlot.js.map +1 -0
  206. package/dist/cli/shared/Theme.d.ts +1 -1
  207. package/dist/cli/shared/Theme.js +136 -92
  208. package/dist/cli/shared/Theme.js.map +1 -0
  209. package/dist/cli/shared/WhaleBanner.js +99 -11
  210. package/dist/cli/shared/WhaleBanner.js.map +1 -0
  211. package/dist/cli/shared/markdown.d.ts +3 -1
  212. package/dist/cli/shared/markdown.js +736 -674
  213. package/dist/cli/shared/markdown.js.map +1 -0
  214. package/dist/cli/shared/marked-terminal.d.js +2 -0
  215. package/dist/cli/shared/marked-terminal.d.js.map +1 -0
  216. package/dist/cli/shared/theme-manager.js +99 -90
  217. package/dist/cli/shared/theme-manager.js.map +1 -0
  218. package/dist/cli/shared/theme-presets.js +256 -254
  219. package/dist/cli/shared/theme-presets.js.map +1 -0
  220. package/dist/cli/status/StatusApp.js +235 -86
  221. package/dist/cli/status/StatusApp.js.map +1 -0
  222. package/dist/cli/stores/StoreApp.js +275 -65
  223. package/dist/cli/stores/StoreApp.js.map +1 -0
  224. package/dist/index.d.ts +2 -2
  225. package/dist/index.js +509 -396
  226. package/dist/index.js.map +1 -0
  227. package/dist/local-agent/connection.d.ts +2 -2
  228. package/dist/local-agent/connection.js +352 -293
  229. package/dist/local-agent/connection.js.map +1 -0
  230. package/dist/local-agent/discovery.js +259 -122
  231. package/dist/local-agent/discovery.js.map +1 -0
  232. package/dist/local-agent/executor.js +216 -193
  233. package/dist/local-agent/executor.js.map +1 -0
  234. package/dist/local-agent/index.d.ts +2 -2
  235. package/dist/local-agent/index.js +156 -156
  236. package/dist/local-agent/index.js.map +1 -0
  237. package/dist/node/adapters/base.js +18 -8
  238. package/dist/node/adapters/base.js.map +1 -0
  239. package/dist/node/adapters/discord.js +286 -275
  240. package/dist/node/adapters/discord.js.map +1 -0
  241. package/dist/node/adapters/email.js +189 -202
  242. package/dist/node/adapters/email.js.map +1 -0
  243. package/dist/node/adapters/imessage.js +145 -142
  244. package/dist/node/adapters/imessage.js.map +1 -0
  245. package/dist/node/adapters/slack.js +237 -236
  246. package/dist/node/adapters/slack.js.map +1 -0
  247. package/dist/node/adapters/sms.js +149 -151
  248. package/dist/node/adapters/sms.js.map +1 -0
  249. package/dist/node/adapters/telegram.js +88 -92
  250. package/dist/node/adapters/telegram.js.map +1 -0
  251. package/dist/node/adapters/webchat.js +160 -136
  252. package/dist/node/adapters/webchat.js.map +1 -0
  253. package/dist/node/adapters/whatsapp.js +212 -215
  254. package/dist/node/adapters/whatsapp.js.map +1 -0
  255. package/dist/node/cli.js +884 -653
  256. package/dist/node/cli.js.map +1 -0
  257. package/dist/node/config.js +20 -18
  258. package/dist/node/config.js.map +1 -0
  259. package/dist/node/gateway-client.js +191 -181
  260. package/dist/node/gateway-client.js.map +1 -0
  261. package/dist/node/portal/clipboard.js +161 -130
  262. package/dist/node/portal/clipboard.js.map +1 -0
  263. package/dist/node/portal/discovery.js +51 -45
  264. package/dist/node/portal/discovery.js.map +1 -0
  265. package/dist/node/portal/forward.js +64 -58
  266. package/dist/node/portal/forward.js.map +1 -0
  267. package/dist/node/portal/index.js +246 -221
  268. package/dist/node/portal/index.js.map +1 -0
  269. package/dist/node/portal/multiplexer.js +192 -182
  270. package/dist/node/portal/multiplexer.js.map +1 -0
  271. package/dist/node/portal/permissions.js +102 -70
  272. package/dist/node/portal/permissions.js.map +1 -0
  273. package/dist/node/portal/protocol.js +153 -116
  274. package/dist/node/portal/protocol.js.map +1 -0
  275. package/dist/node/portal/screen.js +80 -69
  276. package/dist/node/portal/screen.js.map +1 -0
  277. package/dist/node/portal/session.js +124 -117
  278. package/dist/node/portal/session.js.map +1 -0
  279. package/dist/node/portal/shell.js +140 -113
  280. package/dist/node/portal/shell.js.map +1 -0
  281. package/dist/node/portal/stream.js +77 -75
  282. package/dist/node/portal/stream.js.map +1 -0
  283. package/dist/node/portal/transfer.js +190 -167
  284. package/dist/node/portal/transfer.js.map +1 -0
  285. package/dist/node/portal/ui.js +124 -99
  286. package/dist/node/portal/ui.js.map +1 -0
  287. package/dist/node/remote-desktop/compile-helper.js +50 -45
  288. package/dist/node/remote-desktop/compile-helper.js.map +1 -0
  289. package/dist/node/remote-desktop/index.js +215 -187
  290. package/dist/node/remote-desktop/index.js.map +1 -0
  291. package/dist/node/remote-desktop/protocol.js +45 -29
  292. package/dist/node/remote-desktop/protocol.js.map +1 -0
  293. package/dist/node/runtime.js +493 -410
  294. package/dist/node/runtime.js.map +1 -0
  295. package/dist/server/handlers/__test-utils__/test-db.js +39 -89
  296. package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
  297. package/dist/server/handlers/analytics.js +467 -261
  298. package/dist/server/handlers/analytics.js.map +1 -0
  299. package/dist/server/handlers/api-docs.js +1030 -895
  300. package/dist/server/handlers/api-docs.js.map +1 -0
  301. package/dist/server/handlers/api-keys.js +291 -242
  302. package/dist/server/handlers/api-keys.js.map +1 -0
  303. package/dist/server/handlers/billing.js +330 -239
  304. package/dist/server/handlers/billing.js.map +1 -0
  305. package/dist/server/handlers/browser.js +468 -395
  306. package/dist/server/handlers/browser.js.map +1 -0
  307. package/dist/server/handlers/catalog.js +1377 -978
  308. package/dist/server/handlers/catalog.js.map +1 -0
  309. package/dist/server/handlers/clickhouse.js +157 -109
  310. package/dist/server/handlers/clickhouse.js.map +1 -0
  311. package/dist/server/handlers/comms.js +1439 -984
  312. package/dist/server/handlers/comms.js.map +1 -0
  313. package/dist/server/handlers/creations.js +461 -394
  314. package/dist/server/handlers/creations.js.map +1 -0
  315. package/dist/server/handlers/crm.js +1082 -791
  316. package/dist/server/handlers/crm.js.map +1 -0
  317. package/dist/server/handlers/discovery.js +251 -232
  318. package/dist/server/handlers/discovery.js.map +1 -0
  319. package/dist/server/handlers/embeddings.js +241 -164
  320. package/dist/server/handlers/embeddings.js.map +1 -0
  321. package/dist/server/handlers/enrichment.js +887 -718
  322. package/dist/server/handlers/enrichment.js.map +1 -0
  323. package/dist/server/handlers/image-gen.js +467 -376
  324. package/dist/server/handlers/image-gen.js.map +1 -0
  325. package/dist/server/handlers/inventory.js +797 -424
  326. package/dist/server/handlers/inventory.js.map +1 -0
  327. package/dist/server/handlers/kali.js +272 -230
  328. package/dist/server/handlers/kali.js.map +1 -0
  329. package/dist/server/handlers/llm-providers.js +803 -580
  330. package/dist/server/handlers/llm-providers.js.map +1 -0
  331. package/dist/server/handlers/local-agent.js +133 -105
  332. package/dist/server/handlers/local-agent.js.map +1 -0
  333. package/dist/server/handlers/media.js +1179 -857
  334. package/dist/server/handlers/media.js.map +1 -0
  335. package/dist/server/handlers/meta-ads.js +2669 -2093
  336. package/dist/server/handlers/meta-ads.js.map +1 -0
  337. package/dist/server/handlers/nodes.js +1321 -913
  338. package/dist/server/handlers/nodes.js.map +1 -0
  339. package/dist/server/handlers/operations.js +183 -157
  340. package/dist/server/handlers/operations.js.map +1 -0
  341. package/dist/server/handlers/platform.js +346 -210
  342. package/dist/server/handlers/platform.js.map +1 -0
  343. package/dist/server/handlers/remove-bg.js +118 -86
  344. package/dist/server/handlers/remove-bg.js.map +1 -0
  345. package/dist/server/handlers/storefront.js +586 -446
  346. package/dist/server/handlers/storefront.js.map +1 -0
  347. package/dist/server/handlers/supply-chain.js +546 -326
  348. package/dist/server/handlers/supply-chain.js.map +1 -0
  349. package/dist/server/handlers/transcription.js +106 -97
  350. package/dist/server/handlers/transcription.js.map +1 -0
  351. package/dist/server/handlers/video-gen.js +593 -424
  352. package/dist/server/handlers/video-gen.js.map +1 -0
  353. package/dist/server/handlers/voice.js +1458 -1039
  354. package/dist/server/handlers/voice.js.map +1 -0
  355. package/dist/server/handlers/workflow-steps.js +2837 -2116
  356. package/dist/server/handlers/workflow-steps.js.map +1 -0
  357. package/dist/server/handlers/workflows.js +1630 -933
  358. package/dist/server/handlers/workflows.js.map +1 -0
  359. package/dist/server/index.js +3167 -2422
  360. package/dist/server/index.js.map +1 -0
  361. package/dist/server/lib/batch-client.js +471 -409
  362. package/dist/server/lib/batch-client.js.map +1 -0
  363. package/dist/server/lib/clickhouse-buffer.js +118 -104
  364. package/dist/server/lib/clickhouse-buffer.js.map +1 -0
  365. package/dist/server/lib/clickhouse-client.js +107 -107
  366. package/dist/server/lib/clickhouse-client.js.map +1 -0
  367. package/dist/server/lib/coa-renderer.js +1786 -356
  368. package/dist/server/lib/coa-renderer.js.map +1 -0
  369. package/dist/server/lib/code-worker-pool.js +227 -177
  370. package/dist/server/lib/code-worker-pool.js.map +1 -0
  371. package/dist/server/lib/code-worker.js +174 -164
  372. package/dist/server/lib/code-worker.js.map +1 -0
  373. package/dist/server/lib/compaction-service.d.ts +2 -12
  374. package/dist/server/lib/compaction-service.js +74 -184
  375. package/dist/server/lib/compaction-service.js.map +1 -0
  376. package/dist/server/lib/logger.js +36 -24
  377. package/dist/server/lib/logger.js.map +1 -0
  378. package/dist/server/lib/otel.js +101 -80
  379. package/dist/server/lib/otel.js.map +1 -0
  380. package/dist/server/lib/pdf-renderer.js +952 -788
  381. package/dist/server/lib/pdf-renderer.js.map +1 -0
  382. package/dist/server/lib/prompt-sanitizer.js +188 -108
  383. package/dist/server/lib/prompt-sanitizer.js.map +1 -0
  384. package/dist/server/lib/provider-capabilities.js +136 -138
  385. package/dist/server/lib/provider-capabilities.js.map +1 -0
  386. package/dist/server/lib/provider-failover.js +190 -168
  387. package/dist/server/lib/provider-failover.js.map +1 -0
  388. package/dist/server/lib/rate-limiter.js +186 -117
  389. package/dist/server/lib/rate-limiter.js.map +1 -0
  390. package/dist/server/lib/react-pdf-layout.js +551 -382
  391. package/dist/server/lib/react-pdf-layout.js.map +1 -0
  392. package/dist/server/lib/server-agent-loop.d.ts +4 -1
  393. package/dist/server/lib/server-agent-loop.js +906 -634
  394. package/dist/server/lib/server-agent-loop.js.map +1 -0
  395. package/dist/server/lib/server-subagent.js +260 -164
  396. package/dist/server/lib/server-subagent.js.map +1 -0
  397. package/dist/server/lib/session-checkpoint.js +105 -96
  398. package/dist/server/lib/session-checkpoint.js.map +1 -0
  399. package/dist/server/lib/ssrf-guard.js +193 -184
  400. package/dist/server/lib/ssrf-guard.js.map +1 -0
  401. package/dist/server/lib/supabase-client.js +94 -82
  402. package/dist/server/lib/supabase-client.js.map +1 -0
  403. package/dist/server/lib/template-resolver.js +154 -176
  404. package/dist/server/lib/template-resolver.js.map +1 -0
  405. package/dist/server/lib/utils.js +242 -133
  406. package/dist/server/lib/utils.js.map +1 -0
  407. package/dist/server/local-agent-gateway.d.ts +2 -2
  408. package/dist/server/local-agent-gateway.js +785 -627
  409. package/dist/server/local-agent-gateway.js.map +1 -0
  410. package/dist/server/providers/anthropic.js +250 -172
  411. package/dist/server/providers/anthropic.js.map +1 -0
  412. package/dist/server/providers/bedrock.js +217 -158
  413. package/dist/server/providers/bedrock.js.map +1 -0
  414. package/dist/server/providers/gemini.js +548 -418
  415. package/dist/server/providers/gemini.js.map +1 -0
  416. package/dist/server/providers/openai.js +571 -437
  417. package/dist/server/providers/openai.js.map +1 -0
  418. package/dist/server/providers/registry.js +23 -18
  419. package/dist/server/providers/registry.js.map +1 -0
  420. package/dist/server/providers/shared.js +123 -95
  421. package/dist/server/providers/shared.js.map +1 -0
  422. package/dist/server/providers/types.js +1 -11
  423. package/dist/server/providers/types.js.map +1 -0
  424. package/dist/server/proxy-handlers.js +209 -165
  425. package/dist/server/proxy-handlers.js.map +1 -0
  426. package/dist/server/tool-router.js +959 -599
  427. package/dist/server/tool-router.js.map +1 -0
  428. package/dist/server/validation.js +248 -188
  429. package/dist/server/validation.js.map +1 -0
  430. package/dist/server/worker.js +202 -133
  431. package/dist/server/worker.js.map +1 -0
  432. package/dist/setup.d.ts +2 -2
  433. package/dist/setup.js +151 -147
  434. package/dist/setup.js.map +1 -0
  435. package/dist/shared/agent-core.d.ts +115 -26
  436. package/dist/shared/agent-core.js +956 -522
  437. package/dist/shared/agent-core.js.map +1 -0
  438. package/dist/shared/anthropic-types.js +1 -6
  439. package/dist/shared/anthropic-types.js.map +1 -0
  440. package/dist/shared/api-client.d.ts +16 -9
  441. package/dist/shared/api-client.js +419 -327
  442. package/dist/shared/api-client.js.map +1 -0
  443. package/dist/shared/compaction.d.ts +36 -0
  444. package/dist/shared/compaction.js +138 -0
  445. package/dist/shared/compaction.js.map +1 -0
  446. package/dist/shared/constants.js +67 -64
  447. package/dist/shared/constants.js.map +1 -0
  448. package/dist/shared/sse-parser.js +221 -219
  449. package/dist/shared/sse-parser.js.map +1 -0
  450. package/dist/shared/tool-dispatch.d.ts +4 -0
  451. package/dist/shared/tool-dispatch.js +226 -165
  452. package/dist/shared/tool-dispatch.js.map +1 -0
  453. package/dist/shared/types.js +1 -6
  454. package/dist/shared/types.js.map +1 -0
  455. package/dist/types/cli-highlight.d.js +2 -0
  456. package/dist/types/cli-highlight.d.js.map +1 -0
  457. package/dist/types/diff.d.js +2 -0
  458. package/dist/types/diff.d.js.map +1 -0
  459. package/dist/types/pdf-parse.d.js +2 -0
  460. package/dist/types/pdf-parse.d.js.map +1 -0
  461. package/dist/updater.d.ts +1 -1
  462. package/dist/updater.js +118 -92
  463. package/dist/updater.js.map +1 -0
  464. package/dist/webchat/widget.js +227 -380
  465. package/dist/webchat/widget.js.map +1 -0
  466. package/package.json +22 -10
  467. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  468. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  469. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  470. package/vendor/ink/build/apply-styles.js +175 -0
  471. package/vendor/ink/build/build-layout.js +77 -0
  472. package/vendor/ink/build/calculate-wrapped-text.js +53 -0
  473. package/vendor/ink/build/colorize.d.ts +3 -0
  474. package/vendor/ink/build/colorize.js +48 -0
  475. package/vendor/ink/build/colorize.js.map +1 -0
  476. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  477. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  478. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  479. package/vendor/ink/build/components/App.d.ts +18 -0
  480. package/vendor/ink/build/components/App.js +351 -0
  481. package/vendor/ink/build/components/App.js.map +1 -0
  482. package/vendor/ink/build/components/AppContext.d.ts +15 -0
  483. package/vendor/ink/build/components/AppContext.js +11 -0
  484. package/vendor/ink/build/components/AppContext.js.map +1 -0
  485. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  486. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  487. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  488. package/vendor/ink/build/components/Box.d.ts +117 -0
  489. package/vendor/ink/build/components/Box.js +34 -0
  490. package/vendor/ink/build/components/Box.js.map +1 -0
  491. package/vendor/ink/build/components/Color.js +62 -0
  492. package/vendor/ink/build/components/Cursor.d.ts +83 -0
  493. package/vendor/ink/build/components/Cursor.js +53 -0
  494. package/vendor/ink/build/components/Cursor.js.map +1 -0
  495. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  496. package/vendor/ink/build/components/CursorContext.js +8 -0
  497. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  498. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  499. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  500. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  501. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  502. package/vendor/ink/build/components/ErrorOverview.js +84 -0
  503. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  504. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  505. package/vendor/ink/build/components/FocusContext.js +17 -0
  506. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  507. package/vendor/ink/build/components/Newline.d.ts +13 -0
  508. package/vendor/ink/build/components/Newline.js +8 -0
  509. package/vendor/ink/build/components/Newline.js.map +1 -0
  510. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  511. package/vendor/ink/build/components/Spacer.js +11 -0
  512. package/vendor/ink/build/components/Spacer.js.map +1 -0
  513. package/vendor/ink/build/components/Static.d.ts +24 -0
  514. package/vendor/ink/build/components/Static.js +28 -0
  515. package/vendor/ink/build/components/Static.js.map +1 -0
  516. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  517. package/vendor/ink/build/components/StderrContext.js +13 -0
  518. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  519. package/vendor/ink/build/components/StdinContext.d.ts +22 -0
  520. package/vendor/ink/build/components/StdinContext.js +19 -0
  521. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  522. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  523. package/vendor/ink/build/components/StdoutContext.js +13 -0
  524. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  525. package/vendor/ink/build/components/Text.d.ts +55 -0
  526. package/vendor/ink/build/components/Text.js +50 -0
  527. package/vendor/ink/build/components/Text.js.map +1 -0
  528. package/vendor/ink/build/components/Transform.d.ts +16 -0
  529. package/vendor/ink/build/components/Transform.js +15 -0
  530. package/vendor/ink/build/components/Transform.js.map +1 -0
  531. package/vendor/ink/build/cursor-helpers.d.ts +38 -0
  532. package/vendor/ink/build/cursor-helpers.js +56 -0
  533. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  534. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  535. package/vendor/ink/build/devtools-window-polyfill.js +65 -0
  536. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  537. package/vendor/ink/build/devtools.d.ts +1 -0
  538. package/vendor/ink/build/devtools.js +11 -0
  539. package/vendor/ink/build/devtools.js.map +1 -0
  540. package/vendor/ink/build/dom.d.ts +56 -0
  541. package/vendor/ink/build/dom.js +124 -0
  542. package/vendor/ink/build/dom.js.map +1 -0
  543. package/vendor/ink/build/experimental/apply-style.js +140 -0
  544. package/vendor/ink/build/experimental/dom.js +123 -0
  545. package/vendor/ink/build/experimental/output.js +91 -0
  546. package/vendor/ink/build/experimental/reconciler.js +141 -0
  547. package/vendor/ink/build/experimental/renderer.js +81 -0
  548. package/vendor/ink/build/get-max-width.d.ts +3 -0
  549. package/vendor/ink/build/get-max-width.js +10 -0
  550. package/vendor/ink/build/get-max-width.js.map +1 -0
  551. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  552. package/vendor/ink/build/hooks/use-app.js +8 -0
  553. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  554. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  555. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  556. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  557. package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
  558. package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
  559. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  560. package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
  561. package/vendor/ink/build/hooks/use-focus.js +42 -0
  562. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  563. package/vendor/ink/build/hooks/use-input.d.ts +131 -0
  564. package/vendor/ink/build/hooks/use-input.js +124 -0
  565. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  566. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  567. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  568. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  569. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  570. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  571. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  572. package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
  573. package/vendor/ink/build/hooks/use-stdin.js +8 -0
  574. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  575. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  576. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  577. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  578. package/vendor/ink/build/hooks/useInput.js +38 -0
  579. package/vendor/ink/build/index.d.ts +34 -0
  580. package/vendor/ink/build/index.js +20 -0
  581. package/vendor/ink/build/index.js.map +1 -0
  582. package/vendor/ink/build/ink.d.ts +90 -0
  583. package/vendor/ink/build/ink.js +654 -0
  584. package/vendor/ink/build/ink.js.map +1 -0
  585. package/vendor/ink/build/input-parser.d.ts +7 -0
  586. package/vendor/ink/build/input-parser.js +154 -0
  587. package/vendor/ink/build/input-parser.js.map +1 -0
  588. package/vendor/ink/build/instance.js +205 -0
  589. package/vendor/ink/build/instances.d.ts +3 -0
  590. package/vendor/ink/build/instances.js +8 -0
  591. package/vendor/ink/build/instances.js.map +1 -0
  592. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  593. package/vendor/ink/build/kitty-keyboard.js +32 -0
  594. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  595. package/vendor/ink/build/layout.d.ts +7 -0
  596. package/vendor/ink/build/layout.js +33 -0
  597. package/vendor/ink/build/layout.js.map +1 -0
  598. package/vendor/ink/build/log-update.d.ts +19 -0
  599. package/vendor/ink/build/log-update.js +243 -0
  600. package/vendor/ink/build/log-update.js.map +1 -0
  601. package/vendor/ink/build/measure-element.d.ts +16 -0
  602. package/vendor/ink/build/measure-element.js +9 -0
  603. package/vendor/ink/build/measure-element.js.map +1 -0
  604. package/vendor/ink/build/measure-text.d.ts +6 -0
  605. package/vendor/ink/build/measure-text.js +21 -0
  606. package/vendor/ink/build/measure-text.js.map +1 -0
  607. package/vendor/ink/build/options.d.ts +52 -0
  608. package/vendor/ink/build/options.js +2 -0
  609. package/vendor/ink/build/options.js.map +1 -0
  610. package/vendor/ink/build/output.d.ts +35 -0
  611. package/vendor/ink/build/output.js +183 -0
  612. package/vendor/ink/build/output.js.map +1 -0
  613. package/vendor/ink/build/parse-keypress.d.ts +22 -0
  614. package/vendor/ink/build/parse-keypress.js +493 -0
  615. package/vendor/ink/build/parse-keypress.js.map +1 -0
  616. package/vendor/ink/build/reconciler.d.ts +4 -0
  617. package/vendor/ink/build/reconciler.js +274 -0
  618. package/vendor/ink/build/reconciler.js.map +1 -0
  619. package/vendor/ink/build/render-background.d.ts +4 -0
  620. package/vendor/ink/build/render-background.js +25 -0
  621. package/vendor/ink/build/render-background.js.map +1 -0
  622. package/vendor/ink/build/render-border.d.ts +4 -0
  623. package/vendor/ink/build/render-border.js +73 -0
  624. package/vendor/ink/build/render-border.js.map +1 -0
  625. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  626. package/vendor/ink/build/render-node-to-output.js +147 -0
  627. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  628. package/vendor/ink/build/render-to-string.d.ts +38 -0
  629. package/vendor/ink/build/render-to-string.js +115 -0
  630. package/vendor/ink/build/render-to-string.js.map +1 -0
  631. package/vendor/ink/build/render.d.ts +121 -0
  632. package/vendor/ink/build/render.js +55 -0
  633. package/vendor/ink/build/render.js.map +1 -0
  634. package/vendor/ink/build/renderer.d.ts +8 -0
  635. package/vendor/ink/build/renderer.js +55 -0
  636. package/vendor/ink/build/renderer.js.map +1 -0
  637. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  638. package/vendor/ink/build/sanitize-ansi.js +27 -0
  639. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  640. package/vendor/ink/build/screen-reader-update.d.ts +13 -0
  641. package/vendor/ink/build/screen-reader-update.js +38 -0
  642. package/vendor/ink/build/screen-reader-update.js.map +1 -0
  643. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  644. package/vendor/ink/build/squash-text-nodes.js +36 -0
  645. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  646. package/vendor/ink/build/styles.d.ts +240 -0
  647. package/vendor/ink/build/styles.js +232 -0
  648. package/vendor/ink/build/styles.js.map +1 -0
  649. package/vendor/ink/build/utils.d.ts +2 -0
  650. package/vendor/ink/build/utils.js +4 -0
  651. package/vendor/ink/build/utils.js.map +1 -0
  652. package/vendor/ink/build/wrap-text.d.ts +3 -0
  653. package/vendor/ink/build/wrap-text.js +31 -0
  654. package/vendor/ink/build/wrap-text.js.map +1 -0
  655. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  656. package/vendor/ink/build/write-synchronized.js +7 -0
  657. package/vendor/ink/build/write-synchronized.js.map +1 -0
  658. package/vendor/ink/license +10 -0
  659. package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
  660. package/vendor/ink/node_modules/@types/node/README.md +15 -0
  661. package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
  662. package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
  663. package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
  664. package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  665. package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
  666. package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
  667. package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
  668. package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  669. package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
  670. package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
  671. package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
  672. package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
  673. package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  674. package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
  675. package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
  676. package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
  677. package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
  678. package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
  679. package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
  680. package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
  681. package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  682. package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
  683. package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
  684. package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
  685. package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
  686. package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
  687. package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
  688. package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  689. package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
  690. package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
  691. package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
  692. package/vendor/ink/node_modules/@types/node/package.json +155 -0
  693. package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
  694. package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
  695. package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
  696. package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
  697. package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
  698. package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
  699. package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
  700. package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
  701. package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
  702. package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
  703. package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
  704. package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
  705. package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
  706. package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
  707. package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
  708. package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
  709. package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
  710. package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
  711. package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
  712. package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
  713. package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
  714. package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
  715. package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
  716. package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
  717. package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  718. package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  719. package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  720. package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  721. package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  722. package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  723. package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
  724. package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
  725. package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
  726. package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
  727. package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
  728. package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
  729. package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
  730. package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  731. package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  732. package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
  733. package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  734. package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  735. package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  736. package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
  737. package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  738. package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  739. package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  740. package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  741. package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  742. package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  743. package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  744. package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  745. package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
  746. package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
  747. package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
  748. package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
  749. package/vendor/ink/node_modules/node-pty/README.md +164 -0
  750. package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
  751. package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  752. package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  753. package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
  754. package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
  755. package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
  756. package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
  757. package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
  758. package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
  759. package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
  760. package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  761. package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
  762. package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
  763. package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  764. package/vendor/ink/node_modules/node-pty/package.json +65 -0
  765. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  766. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  767. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  768. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  769. package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  770. package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  771. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  772. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  773. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  774. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  775. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  776. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  777. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  778. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  779. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  780. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  781. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  782. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  783. package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
  784. package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
  785. package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
  786. package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  787. package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
  788. package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
  789. package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  790. package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
  791. package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
  792. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  793. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  794. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  795. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  796. package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  797. package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
  798. package/vendor/ink/node_modules/undici-types/README.md +6 -0
  799. package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
  800. package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
  801. package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
  802. package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  803. package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
  804. package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
  805. package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
  806. package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
  807. package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
  808. package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
  809. package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  810. package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
  811. package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  812. package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
  813. package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
  814. package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
  815. package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
  816. package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  817. package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
  818. package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
  819. package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
  820. package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
  821. package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
  822. package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
  823. package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
  824. package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
  825. package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
  826. package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
  827. package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  828. package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
  829. package/vendor/ink/node_modules/undici-types/package.json +55 -0
  830. package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
  831. package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
  832. package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
  833. package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
  834. package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
  835. package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
  836. package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
  837. package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  838. package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  839. package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
  840. package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
  841. package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
  842. package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
  843. package/vendor/ink/package.json +201 -0
  844. package/vendor/ink/readme.md +2636 -0
  845. package/bin/swag-agent.js +0 -9
  846. package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
  847. 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