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
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * SwagManager MCP Server
3
+ * Whale Code MCP Server
4
4
  *
5
5
  * Thin proxy that connects any MCP client (Claude Code, Cursor, etc.)
6
- * to the SwagManager platform.
6
+ * to the WhaleTools platform.
7
7
  *
8
8
  * - Tool DEFINITIONS loaded from ai_tool_registry (database-driven)
9
9
  * - Tool EXECUTION proxied to the Fly.io server (server-driven)
@@ -14,7 +14,7 @@
14
14
  */
15
15
  import { Server } from "@modelcontextprotocol/sdk/server/index.js";
16
16
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
17
- import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
17
+ import { CallToolRequestSchema, ListToolsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
18
18
  import { createClient } from "@supabase/supabase-js";
19
19
  import { createRequire } from "module";
20
20
  import { startUpdateLoop } from "./updater.js";
@@ -25,499 +25,612 @@ import { LocalAgentConnection } from "./local-agent/connection.js";
25
25
  import { initErrorLogger, setErrorLoggerUser, captureError } from "./cli/services/error-logger.js";
26
26
  const require = createRequire(import.meta.url);
27
27
  const PKG_VERSION = require("../package.json").version;
28
+
28
29
  // ============================================================================
29
- // CONFIGURATION — env vars → ~/.swagmanager/config.json (set by `whale login`)
30
+ // CONFIGURATION — env vars → ~/.whaletools/session.json (set by `whale login`)
30
31
  // ============================================================================
32
+
31
33
  let config = resolveConfig();
32
34
  let rawConfig = loadConfig();
33
35
  const SUPABASE_URL = config.supabaseUrl;
34
36
  let INITIAL_SUPABASE_KEY = config.supabaseKey;
35
37
  let STORE_ID = config.storeId;
36
38
  const IS_SERVICE_ROLE = !!process.env.SUPABASE_SERVICE_ROLE_KEY;
39
+
37
40
  // User identity — loaded from config (set by `whale login`)
38
41
  let USER_ID = rawConfig.user_id || null;
39
42
  let USER_EMAIL = rawConfig.email || null;
43
+
40
44
  // ============================================================================
41
45
  // AUTH STATE — auto-refresh expired tokens before connecting
42
46
  // ============================================================================
47
+
43
48
  // If using a user JWT (not service role), check if it needs refreshing
44
49
  if (!IS_SERVICE_ROLE && rawConfig.access_token && rawConfig.refresh_token) {
45
- const now = Math.floor(Date.now() / 1000);
46
- if (!rawConfig.expires_at || rawConfig.expires_at - 300 < now) {
47
- console.error("[MCP] Access token expired, refreshing...");
48
- try {
49
- const freshToken = await getValidToken();
50
- if (freshToken) {
51
- INITIAL_SUPABASE_KEY = freshToken;
52
- // Reload config to get updated values
53
- rawConfig = loadConfig();
54
- USER_ID = rawConfig.user_id || USER_ID;
55
- USER_EMAIL = rawConfig.email || USER_EMAIL;
56
- STORE_ID = rawConfig.store_id || STORE_ID;
57
- console.error("[MCP] Token refreshed successfully");
58
- }
59
- else {
60
- console.error("[MCP] Token refresh failed — run `whale login` to re-authenticate");
61
- }
62
- }
63
- catch (e) {
64
- console.error("[MCP] Token refresh error:", e.message);
65
- }
66
- }
50
+ const now = Math.floor(Date.now() / 1000);
51
+ if (!rawConfig.expires_at || rawConfig.expires_at - 300 < now) {
52
+ console.error("[MCP] Access token expired, refreshing...");
53
+ try {
54
+ const freshToken = await getValidToken();
55
+ if (freshToken) {
56
+ INITIAL_SUPABASE_KEY = freshToken;
57
+ // Reload config to get updated values
58
+ rawConfig = loadConfig();
59
+ USER_ID = rawConfig.user_id || USER_ID;
60
+ USER_EMAIL = rawConfig.email || USER_EMAIL;
61
+ STORE_ID = rawConfig.store_id || STORE_ID;
62
+ console.error("[MCP] Token refreshed successfully");
63
+ } else {
64
+ console.error("[MCP] Token refresh failed — run `whale login` to re-authenticate");
65
+ }
66
+ } catch (e) {
67
+ console.error("[MCP] Token refresh error:", e.message);
68
+ }
69
+ }
67
70
  }
68
71
  let isAuthenticated = !!(SUPABASE_URL && INITIAL_SUPABASE_KEY);
69
72
  let supabase = null;
70
73
  if (isAuthenticated) {
71
- if (IS_SERVICE_ROLE) {
72
- // Service role key — use directly as apiKey (full access)
73
- supabase = createClient(SUPABASE_URL, INITIAL_SUPABASE_KEY, {
74
- auth: { persistSession: false, autoRefreshToken: false },
75
- });
76
- if (!USER_ID) {
77
- console.error("[MCP] WARNING: Using service role key without user login. Tools will work but store scoping is disabled.");
74
+ if (IS_SERVICE_ROLE) {
75
+ // Service role key — use directly as apiKey (full access)
76
+ supabase = createClient(SUPABASE_URL, INITIAL_SUPABASE_KEY, {
77
+ auth: {
78
+ persistSession: false,
79
+ autoRefreshToken: false
80
+ }
81
+ });
82
+ if (!USER_ID) {
83
+ console.error("[MCP] WARNING: Using service role key without user login. Tools will work but store scoping is disabled.");
84
+ }
85
+ } else {
86
+ // User JWT — use anon key as apiKey, pass JWT via Authorization header
87
+ supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY, {
88
+ auth: {
89
+ persistSession: false,
90
+ autoRefreshToken: false
91
+ },
92
+ global: {
93
+ headers: {
94
+ Authorization: `Bearer ${INITIAL_SUPABASE_KEY}`
78
95
  }
79
- }
80
- else {
81
- // User JWT — use anon key as apiKey, pass JWT via Authorization header
82
- supabase = createClient(SUPABASE_URL, SUPABASE_ANON_KEY, {
83
- auth: { persistSession: false, autoRefreshToken: false },
84
- global: { headers: { Authorization: `Bearer ${INITIAL_SUPABASE_KEY}` } },
85
- });
86
- }
87
- }
88
- else {
89
- console.error("[MCP] Not authenticated. Use the whale_login tool to sign in, or run `whale login` in a terminal.");
96
+ }
97
+ });
98
+ }
99
+ } else {
100
+ console.error("[MCP] Not authenticated. Use the whale_login tool to sign in, or run `whale login` in a terminal.");
90
101
  }
102
+
91
103
  /** Reload config from disk and update in-memory state */
92
104
  function reloadConfig() {
93
- config = resolveConfig();
94
- rawConfig = loadConfig();
95
- INITIAL_SUPABASE_KEY = config.supabaseKey;
96
- STORE_ID = config.storeId;
97
- USER_ID = rawConfig.user_id || null;
98
- USER_EMAIL = rawConfig.email || null;
99
- if (config.supabaseUrl && config.supabaseKey) {
100
- supabase = createClient(config.supabaseUrl, config.supabaseKey);
101
- isAuthenticated = true;
102
- }
105
+ config = resolveConfig();
106
+ rawConfig = loadConfig();
107
+ INITIAL_SUPABASE_KEY = config.supabaseKey;
108
+ STORE_ID = config.storeId;
109
+ USER_ID = rawConfig.user_id || null;
110
+ USER_EMAIL = rawConfig.email || null;
111
+ if (config.supabaseUrl && config.supabaseKey) {
112
+ supabase = createClient(config.supabaseUrl, config.supabaseKey);
113
+ isAuthenticated = true;
114
+ }
103
115
  }
116
+
104
117
  /** Get a fresh auth token — service role keys are static, JWTs auto-refresh */
105
118
  async function getAuthToken() {
106
- if (IS_SERVICE_ROLE)
107
- return INITIAL_SUPABASE_KEY;
108
- // JWT user refresh if needed
109
- const token = await getValidToken();
110
- return token || INITIAL_SUPABASE_KEY;
119
+ if (IS_SERVICE_ROLE) return INITIAL_SUPABASE_KEY;
120
+ // JWT user — refresh if needed
121
+ const token = await getValidToken();
122
+ return token || INITIAL_SUPABASE_KEY;
111
123
  }
124
+
112
125
  // Fly.io server URL for tool execution
113
126
  const SERVER_URL = config.serverUrl;
127
+
114
128
  // Session ID for tracing — links all tool calls in one conversation
115
129
  const SESSION_ID = crypto.randomUUID();
130
+
131
+ // ============================================================================
132
+ // LOCAL TOOL DEFINITIONS (whale_login, whale_status, whale_stores)
133
+ // ============================================================================
134
+
116
135
  const WHALE_LOGIN_TOOL = {
117
- name: "whale_login",
118
- description: "Log in to your WhaleTools account. Opens a browser for secure authentication. Use this when you see 'not authenticated' errors.",
119
- inputSchema: { type: "object", properties: {} },
136
+ name: "whale_login",
137
+ description: "Log in to your WhaleTools account. Opens a browser for secure authentication. Use this when you see 'not authenticated' errors.",
138
+ inputSchema: {
139
+ type: "object",
140
+ properties: {}
141
+ }
120
142
  };
121
143
  const WHALE_STATUS_TOOL = {
122
- name: "whale_status",
123
- description: "Check current authentication status, active store, and account info.",
124
- inputSchema: { type: "object", properties: {} },
144
+ name: "whale_status",
145
+ description: "Check current authentication status, active store, and account info.",
146
+ inputSchema: {
147
+ type: "object",
148
+ properties: {}
149
+ }
125
150
  };
126
151
  const WHALE_STORES_TOOL = {
127
- name: "whale_stores",
128
- description: "List your stores or switch the active store.",
129
- inputSchema: {
130
- type: "object",
131
- properties: {
132
- store_id: {
133
- type: "string",
134
- description: "Store ID to switch to. Omit to list all available stores.",
135
- },
136
- },
137
- },
152
+ name: "whale_stores",
153
+ description: "List your stores or switch the active store.",
154
+ inputSchema: {
155
+ type: "object",
156
+ properties: {
157
+ store_id: {
158
+ type: "string",
159
+ description: "Store ID to switch to. Omit to list all available stores."
160
+ }
161
+ }
162
+ }
138
163
  };
139
164
  const LOCAL_TOOLS = [WHALE_LOGIN_TOOL, WHALE_STATUS_TOOL, WHALE_STORES_TOOL];
165
+
140
166
  // ============================================================================
141
167
  // REMOTE TOOL DEFINITIONS (loaded from database)
142
168
  // ============================================================================
169
+
143
170
  let toolDefinitions = [];
144
171
  let toolsLoadedAt = 0;
145
172
  const TOOL_CACHE_TTL = 300_000; // 5 minutes — tool defs rarely change mid-session
173
+
146
174
  async function loadToolDefinitions(force = false) {
147
- if (!isAuthenticated || !supabase)
148
- return [];
149
- if (!force && toolDefinitions.length > 0 && Date.now() - toolsLoadedAt < TOOL_CACHE_TTL) {
150
- return toolDefinitions;
151
- }
152
- try {
153
- const { data, error } = await supabase
154
- .from("ai_tool_registry")
155
- .select("name, description, definition")
156
- .eq("is_active", true)
157
- .neq("tool_mode", "code");
158
- if (error) {
159
- console.error("[MCP] Failed to load tools from registry:", error.message);
160
- return toolDefinitions; // Return stale cache on error
161
- }
162
- toolDefinitions = (data || []).map(t => ({
163
- name: t.name,
164
- description: t.description || t.definition?.description || `Execute ${t.name}`,
165
- inputSchema: t.definition?.input_schema || { type: "object", properties: {} }
166
- }));
167
- toolsLoadedAt = Date.now();
168
- return toolDefinitions;
169
- }
170
- catch (err) {
171
- console.error("[MCP] Error loading tool definitions:", err);
172
- return toolDefinitions;
173
- }
175
+ if (!isAuthenticated || !supabase) return [];
176
+ if (!force && toolDefinitions.length > 0 && Date.now() - toolsLoadedAt < TOOL_CACHE_TTL) {
177
+ return toolDefinitions;
178
+ }
179
+ try {
180
+ const {
181
+ data,
182
+ error
183
+ } = await supabase.from("ai_tool_registry").select("name, description, definition").eq("is_active", true).neq("tool_mode", "code");
184
+ if (error) {
185
+ console.error("[MCP] Failed to load tools from registry:", error.message);
186
+ return toolDefinitions; // Return stale cache on error
187
+ }
188
+ toolDefinitions = (data || []).map(t => ({
189
+ name: t.name,
190
+ description: t.description || t.definition?.description || `Execute ${t.name}`,
191
+ inputSchema: t.definition?.input_schema || {
192
+ type: "object",
193
+ properties: {}
194
+ }
195
+ }));
196
+ toolsLoadedAt = Date.now();
197
+ return toolDefinitions;
198
+ } catch (err) {
199
+ console.error("[MCP] Error loading tool definitions:", err);
200
+ return toolDefinitions;
201
+ }
174
202
  }
203
+
204
+ // ============================================================================
205
+ // TOOL EXECUTION (proxied to Fly.io server)
206
+ // ============================================================================
207
+
175
208
  async function executeToolRemote(toolName, args, storeId, traceId) {
176
- try {
177
- const token = await getAuthToken();
178
- const response = await fetch(SERVER_URL, {
179
- method: "POST",
180
- headers: {
181
- "Content-Type": "application/json",
182
- "Authorization": `Bearer ${token}`,
183
- },
184
- body: JSON.stringify({
185
- mode: "tool",
186
- tool_name: toolName,
187
- args,
188
- store_id: storeId,
189
- conversation_id: SESSION_ID,
190
- trace_id: traceId,
191
- userId: USER_ID,
192
- userEmail: USER_EMAIL,
193
- source: "whale-code-mcp",
194
- }),
195
- });
196
- const result = await response.json();
197
- return result;
198
- }
199
- catch (err) {
200
- return {
201
- success: false,
202
- error: `Server tool call failed: ${err.message}`,
203
- };
204
- }
209
+ try {
210
+ const token = await getAuthToken();
211
+ const response = await fetch(SERVER_URL, {
212
+ method: "POST",
213
+ headers: {
214
+ "Content-Type": "application/json",
215
+ "Authorization": `Bearer ${token}`
216
+ },
217
+ body: JSON.stringify({
218
+ mode: "tool",
219
+ tool_name: toolName,
220
+ args,
221
+ store_id: storeId,
222
+ conversation_id: SESSION_ID,
223
+ trace_id: traceId,
224
+ userId: USER_ID,
225
+ userEmail: USER_EMAIL,
226
+ source: "whale-code-mcp"
227
+ })
228
+ });
229
+ const result = await response.json();
230
+ return result;
231
+ } catch (err) {
232
+ return {
233
+ success: false,
234
+ error: `Server tool call failed: ${err.message}`
235
+ };
236
+ }
205
237
  }
238
+
206
239
  // ============================================================================
207
240
  // LOCAL TOOL HANDLERS
208
241
  // ============================================================================
242
+
209
243
  async function handleWhaleLogin() {
210
- try {
211
- const result = await signInWithBrowser(config.platformUrl, {
212
- onBrowserOpening: (url) => {
213
- console.error(`[MCP] Opening browser for login: ${url}`);
214
- },
215
- onWaitingForCallback: () => {
216
- console.error("[MCP] Waiting for browser login...");
217
- },
218
- onExchangingCode: () => {
219
- console.error("[MCP] Exchanging auth code...");
220
- },
221
- });
222
- if (!result.success) {
223
- return {
224
- content: [{ type: "text", text: `Login failed: ${result.error}\n\nYou can also try running \`whale login\` in a terminal.` }],
225
- isError: true,
226
- };
227
- }
228
- // Reload config after successful login
229
- reloadConfig();
230
- // Force-reload tool definitions
231
- const tools = await loadToolDefinitions(true);
232
- // Notify MCP client that tools have changed
233
- server.notification({ method: "notifications/tools/list_changed" });
234
- const cfg = result.config;
235
- let msg = `Logged in as ${cfg.email || "unknown"}`;
236
- if (cfg.store_name || cfg.store_id) {
237
- msg += `\nActive store: ${cfg.store_name || cfg.store_id}`;
238
- }
239
- msg += `\n${tools.length} tools now available.`;
240
- if (result.stores && result.stores.length > 1) {
241
- msg += `\n\nYou have ${result.stores.length} stores. Use whale_stores to switch:`;
242
- for (const s of result.stores) {
243
- msg += `\n - ${s.name} (${s.id})`;
244
- }
245
- }
246
- return { content: [{ type: "text", text: msg }] };
247
- }
248
- catch (err) {
249
- return {
250
- content: [{ type: "text", text: `Login error: ${err instanceof Error ? err.message : String(err)}` }],
251
- isError: true,
252
- };
244
+ try {
245
+ const result = await signInWithBrowser(config.platformUrl, {
246
+ onBrowserOpening: url => {
247
+ console.error(`[MCP] Opening browser for login: ${url}`);
248
+ },
249
+ onWaitingForCallback: () => {
250
+ console.error("[MCP] Waiting for browser login...");
251
+ },
252
+ onExchangingCode: () => {
253
+ console.error("[MCP] Exchanging auth code...");
254
+ }
255
+ });
256
+ if (!result.success) {
257
+ return {
258
+ content: [{
259
+ type: "text",
260
+ text: `Login failed: ${result.error}\n\nYou can also try running \`whale login\` in a terminal.`
261
+ }],
262
+ isError: true
263
+ };
264
+ }
265
+
266
+ // Reload config after successful login
267
+ reloadConfig();
268
+
269
+ // Force-reload tool definitions
270
+ const tools = await loadToolDefinitions(true);
271
+
272
+ // Notify MCP client that tools have changed
273
+ server.notification({
274
+ method: "notifications/tools/list_changed"
275
+ });
276
+ const cfg = result.config;
277
+ let msg = `Logged in as ${cfg.email || "unknown"}`;
278
+ if (cfg.store_name || cfg.store_id) {
279
+ msg += `\nActive store: ${cfg.store_name || cfg.store_id}`;
280
+ }
281
+ msg += `\n${tools.length} tools now available.`;
282
+ if (result.stores && result.stores.length > 1) {
283
+ msg += `\n\nYou have ${result.stores.length} stores. Use whale_stores to switch:`;
284
+ for (const s of result.stores) {
285
+ msg += `\n - ${s.name} (${s.id})`;
286
+ }
253
287
  }
288
+ return {
289
+ content: [{
290
+ type: "text",
291
+ text: msg
292
+ }]
293
+ };
294
+ } catch (err) {
295
+ return {
296
+ content: [{
297
+ type: "text",
298
+ text: `Login error: ${err instanceof Error ? err.message : String(err)}`
299
+ }],
300
+ isError: true
301
+ };
302
+ }
254
303
  }
255
304
  function handleWhaleStatus() {
256
- const cfg = loadConfig();
257
- const lines = [];
258
- if (isAuthenticated) {
259
- lines.push("Authenticated: yes");
260
- lines.push(`User: ${cfg.email || "(unknown)"}`);
261
- lines.push(`User ID: ${cfg.user_id || "(unknown)"}`);
262
- lines.push(`Store: ${cfg.store_name || cfg.store_id || "(none selected)"}`);
263
- lines.push(`Auth method: ${IS_SERVICE_ROLE ? "service role key (env var)" : "user JWT (whale login)"}`);
264
- if (cfg.expires_at) {
265
- const exp = new Date(cfg.expires_at * 1000);
266
- lines.push(`Token expires: ${exp.toISOString()}`);
267
- }
268
- }
269
- else {
270
- lines.push("Authenticated: no");
271
- lines.push("Use whale_login to sign in.");
272
- }
273
- lines.push(`MCP version: ${PKG_VERSION}`);
274
- lines.push(`Server: ${SERVER_URL}`);
275
- lines.push(`Tools loaded: ${toolDefinitions.length}`);
276
- return { content: [{ type: "text", text: lines.join("\n") }] };
305
+ const cfg = loadConfig();
306
+ const lines = [];
307
+ if (isAuthenticated) {
308
+ lines.push("Authenticated: yes");
309
+ lines.push(`User: ${cfg.email || "(unknown)"}`);
310
+ lines.push(`User ID: ${cfg.user_id || "(unknown)"}`);
311
+ lines.push(`Store: ${cfg.store_name || cfg.store_id || "(none selected)"}`);
312
+ lines.push(`Auth method: ${IS_SERVICE_ROLE ? "service role key (env var)" : "user JWT (whale login)"}`);
313
+ if (cfg.expires_at) {
314
+ const exp = new Date(cfg.expires_at * 1000);
315
+ lines.push(`Token expires: ${exp.toISOString()}`);
316
+ }
317
+ } else {
318
+ lines.push("Authenticated: no");
319
+ lines.push("Use whale_login to sign in.");
320
+ }
321
+ lines.push(`MCP version: ${PKG_VERSION}`);
322
+ lines.push(`Server: ${SERVER_URL}`);
323
+ lines.push(`Tools loaded: ${toolDefinitions.length}`);
324
+ return {
325
+ content: [{
326
+ type: "text",
327
+ text: lines.join("\n")
328
+ }]
329
+ };
277
330
  }
278
331
  async function handleWhaleStores(args) {
279
- if (!isAuthenticated) {
280
- return {
281
- content: [{ type: "text", text: "Not authenticated. Use whale_login first." }],
282
- isError: true,
283
- };
284
- }
285
- const switchToId = args.store_id;
286
- if (switchToId) {
287
- // Switch store
288
- // Verify the store exists for this user
289
- const token = await getAuthToken();
290
- const stores = await getStoresForUser(token, USER_ID || "");
291
- const target = stores.find(s => s.id === switchToId);
292
- if (!target) {
293
- return {
294
- content: [{ type: "text", text: `Store not found: ${switchToId}\nAvailable stores: ${stores.map(s => `${s.name} (${s.id})`).join(", ")}` }],
295
- isError: true,
296
- };
297
- }
298
- selectStore(target.id, target.name);
299
- reloadConfig();
300
- // Notify MCP client that tools may have changed context
301
- server.notification({ method: "notifications/tools/list_changed" });
302
- return {
303
- content: [{ type: "text", text: `Switched to store: ${target.name} (${target.id})` }],
304
- };
305
- }
306
- // List stores
332
+ if (!isAuthenticated) {
333
+ return {
334
+ content: [{
335
+ type: "text",
336
+ text: "Not authenticated. Use whale_login first."
337
+ }],
338
+ isError: true
339
+ };
340
+ }
341
+ const switchToId = args.store_id;
342
+ if (switchToId) {
343
+ // Switch store
344
+ // Verify the store exists for this user
307
345
  const token = await getAuthToken();
308
346
  const stores = await getStoresForUser(token, USER_ID || "");
309
- if (stores.length === 0) {
310
- return { content: [{ type: "text", text: "No stores found for your account." }] };
311
- }
312
- const cfg = loadConfig();
313
- const lines = ["Your stores:"];
314
- for (const s of stores) {
315
- const active = s.id === cfg.store_id ? " (active)" : "";
316
- lines.push(` - ${s.name}${s.slug ? ` [${s.slug}]` : ""}: ${s.id}${active}`);
317
- }
318
- lines.push("\nTo switch: use whale_stores with store_id parameter");
319
- return { content: [{ type: "text", text: lines.join("\n") }] };
347
+ const target = stores.find(s => s.id === switchToId);
348
+ if (!target) {
349
+ return {
350
+ content: [{
351
+ type: "text",
352
+ text: `Store not found: ${switchToId}\nAvailable stores: ${stores.map(s => `${s.name} (${s.id})`).join(", ")}`
353
+ }],
354
+ isError: true
355
+ };
356
+ }
357
+ selectStore(target.id, target.name);
358
+ reloadConfig();
359
+
360
+ // Notify MCP client that tools may have changed context
361
+ server.notification({
362
+ method: "notifications/tools/list_changed"
363
+ });
364
+ return {
365
+ content: [{
366
+ type: "text",
367
+ text: `Switched to store: ${target.name} (${target.id})`
368
+ }]
369
+ };
370
+ }
371
+
372
+ // List stores
373
+ const token = await getAuthToken();
374
+ const stores = await getStoresForUser(token, USER_ID || "");
375
+ if (stores.length === 0) {
376
+ return {
377
+ content: [{
378
+ type: "text",
379
+ text: "No stores found for your account."
380
+ }]
381
+ };
382
+ }
383
+ const cfg = loadConfig();
384
+ const lines = ["Your stores:"];
385
+ for (const s of stores) {
386
+ const active = s.id === cfg.store_id ? " (active)" : "";
387
+ lines.push(` - ${s.name}${s.slug ? ` [${s.slug}]` : ""}: ${s.id}${active}`);
388
+ }
389
+ lines.push("\nTo switch: use whale_stores with store_id parameter");
390
+ return {
391
+ content: [{
392
+ type: "text",
393
+ text: lines.join("\n")
394
+ }]
395
+ };
320
396
  }
397
+
321
398
  // ============================================================================
322
399
  // MCP SERVER
323
400
  // ============================================================================
324
- const server = new Server({ name: "whale", version: PKG_VERSION }, { capabilities: { tools: {} } });
401
+
402
+ const server = new Server({
403
+ name: "whale",
404
+ version: PKG_VERSION
405
+ }, {
406
+ capabilities: {
407
+ tools: {}
408
+ }
409
+ });
410
+
325
411
  // List available tools — local auth tools always present; remote tools when authenticated
326
412
  server.setRequestHandler(ListToolsRequestSchema, async () => {
327
- if (!isAuthenticated) {
328
- console.error(`[MCP] Returning ${LOCAL_TOOLS.length} tools (not authenticated)`);
329
- return {
330
- tools: LOCAL_TOOLS.map(t => ({
331
- name: t.name,
332
- description: t.description,
333
- inputSchema: t.inputSchema,
334
- })),
335
- };
336
- }
337
- const remoteTools = await loadToolDefinitions();
338
- const allTools = [...LOCAL_TOOLS, ...remoteTools];
339
- console.error(`[MCP] Returning ${allTools.length} tools (${LOCAL_TOOLS.length} local + ${remoteTools.length} remote)`);
413
+ if (!isAuthenticated) {
414
+ console.error(`[MCP] Returning ${LOCAL_TOOLS.length} tools (not authenticated)`);
340
415
  return {
341
- tools: allTools.map(t => ({
342
- name: t.name,
343
- description: t.description,
344
- inputSchema: t.inputSchema,
345
- })),
416
+ tools: LOCAL_TOOLS.map(t => ({
417
+ name: t.name,
418
+ description: t.description,
419
+ inputSchema: t.inputSchema
420
+ }))
346
421
  };
422
+ }
423
+ const remoteTools = await loadToolDefinitions();
424
+ const allTools = [...LOCAL_TOOLS, ...remoteTools];
425
+ console.error(`[MCP] Returning ${allTools.length} tools (${LOCAL_TOOLS.length} local + ${remoteTools.length} remote)`);
426
+ return {
427
+ tools: allTools.map(t => ({
428
+ name: t.name,
429
+ description: t.description,
430
+ inputSchema: t.inputSchema
431
+ }))
432
+ };
347
433
  });
434
+
348
435
  // Execute a tool — local auth tools handled here, everything else proxied to Fly.io
349
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
350
- const toolName = request.params.name;
351
- const toolArgs = (request.params.arguments || {});
352
- // ── Local tools (handled in-process) ──
353
- if (toolName === "whale_login") {
354
- return handleWhaleLogin();
355
- }
356
- if (toolName === "whale_status") {
357
- return handleWhaleStatus();
358
- }
359
- if (toolName === "whale_stores") {
360
- return handleWhaleStores(toolArgs);
361
- }
362
- // ── Auth gate for remote tools ──
363
- if (!isAuthenticated) {
364
- return {
365
- content: [{
366
- type: "text",
367
- text: "Not authenticated. Please use the whale_login tool first to sign in to your WhaleTools account.",
368
- }],
369
- isError: true,
370
- };
371
- }
372
- // ── Remote tool execution ──
373
- const traceId = crypto.randomUUID();
374
- // Allow tool-level store_id override (e.g. multi-store users switching context)
375
- const effectiveStoreId = toolArgs.store_id || STORE_ID || undefined;
376
- if (toolArgs.store_id) {
377
- delete toolArgs.store_id; // Don't send as a tool arg — it's a routing param
378
- }
379
- console.error(`[MCP] Executing: ${toolName} → Fly.io [${traceId.slice(0, 8)}] store=${effectiveStoreId?.slice(0, 8) || "none"}`);
380
- const result = await executeToolRemote(toolName, toolArgs, effectiveStoreId, traceId);
381
- if (result.success) {
382
- return {
383
- content: [{
384
- type: "text",
385
- text: typeof result.data === "string"
386
- ? result.data
387
- : JSON.stringify(result.data, null, 2),
388
- }],
389
- };
390
- }
391
- else {
392
- return {
393
- content: [{
394
- type: "text",
395
- text: JSON.stringify({ error: result.error }),
396
- }],
397
- isError: true,
398
- };
399
- }
436
+ server.setRequestHandler(CallToolRequestSchema, async request => {
437
+ const toolName = request.params.name;
438
+ const toolArgs = request.params.arguments || {};
439
+
440
+ // ── Local tools (handled in-process) ──
441
+
442
+ if (toolName === "whale_login") {
443
+ return handleWhaleLogin();
444
+ }
445
+ if (toolName === "whale_status") {
446
+ return handleWhaleStatus();
447
+ }
448
+ if (toolName === "whale_stores") {
449
+ return handleWhaleStores(toolArgs);
450
+ }
451
+
452
+ // ── Auth gate for remote tools ──
453
+
454
+ if (!isAuthenticated) {
455
+ return {
456
+ content: [{
457
+ type: "text",
458
+ text: "Not authenticated. Please use the whale_login tool first to sign in to your WhaleTools account."
459
+ }],
460
+ isError: true
461
+ };
462
+ }
463
+
464
+ // ── Remote tool execution ──
465
+
466
+ const traceId = crypto.randomUUID();
467
+
468
+ // Allow tool-level store_id override (e.g. multi-store users switching context)
469
+ const effectiveStoreId = toolArgs.store_id || STORE_ID || undefined;
470
+ if (toolArgs.store_id) {
471
+ delete toolArgs.store_id; // Don't send as a tool arg — it's a routing param
472
+ }
473
+ console.error(`[MCP] Executing: ${toolName} → Fly.io [${traceId.slice(0, 8)}] store=${effectiveStoreId?.slice(0, 8) || "none"}`);
474
+ const result = await executeToolRemote(toolName, toolArgs, effectiveStoreId, traceId);
475
+ if (result.success) {
476
+ return {
477
+ content: [{
478
+ type: "text",
479
+ text: typeof result.data === "string" ? result.data : JSON.stringify(result.data, null, 2)
480
+ }]
481
+ };
482
+ } else {
483
+ return {
484
+ content: [{
485
+ type: "text",
486
+ text: JSON.stringify({
487
+ error: result.error
488
+ })
489
+ }],
490
+ isError: true
491
+ };
492
+ }
400
493
  });
494
+
401
495
  // ============================================================================
402
496
  // LOCAL AGENT (auto-spawned — shares this process with MCP server)
403
497
  // ============================================================================
498
+
404
499
  let localAgent = null;
500
+
405
501
  /**
406
502
  * Get or create a store API key for the local agent WebSocket connection.
407
- * Persisted to ~/.swagmanager/config.json so we reuse across restarts.
503
+ * Persisted to ~/.whaletools/session.json so we reuse across restarts.
408
504
  */
409
505
  async function getOrCreateAgentApiKey() {
410
- const rawConfig = loadConfig();
411
- if (rawConfig.agent_api_key)
412
- return rawConfig.agent_api_key;
413
- // Auto-generate via the server's api_keys tool
414
- try {
415
- const result = await executeToolRemote("api_keys", {
416
- action: "generate",
417
- name: "local-agent-auto",
418
- scopes: ["*"],
419
- key_type: "live",
420
- }, STORE_ID || undefined);
421
- if (result.success && result.data) {
422
- const data = result.data;
423
- const key = data.key_value || data.api_key || data.key;
424
- if (key) {
425
- updateConfig({ agent_api_key: key });
426
- console.error("[MCP] Auto-generated local agent API key");
427
- return key;
428
- }
429
- }
430
- console.error("[MCP] Failed to auto-generate agent API key:", result.error);
431
- return null;
432
- }
433
- catch (err) {
434
- console.error("[MCP] Error generating agent API key:", err.message);
435
- return null;
436
- }
506
+ const rawConfig = loadConfig();
507
+ if (rawConfig.agent_api_key) return rawConfig.agent_api_key;
508
+
509
+ // Auto-generate via the server's api_keys tool
510
+ try {
511
+ const result = await executeToolRemote("api_keys", {
512
+ action: "generate",
513
+ name: "local-agent-auto",
514
+ scopes: ["*"],
515
+ key_type: "live"
516
+ }, STORE_ID || undefined);
517
+ if (result.success && result.data) {
518
+ const data = result.data;
519
+ const key = data.key_value || data.api_key || data.key;
520
+ if (key) {
521
+ updateConfig({
522
+ agent_api_key: key
523
+ });
524
+ console.error("[MCP] Auto-generated local agent API key");
525
+ return key;
526
+ }
527
+ }
528
+ console.error("[MCP] Failed to auto-generate agent API key:", result.error);
529
+ return null;
530
+ } catch (err) {
531
+ console.error("[MCP] Error generating agent API key:", err.message);
532
+ return null;
533
+ }
437
534
  }
535
+
438
536
  /**
439
537
  * Derive WebSocket URL from the HTTP server URL.
440
538
  * https://whale-agent.fly.dev → wss://whale-agent.fly.dev/agent/ws
441
539
  */
442
540
  function getAgentWsUrl() {
443
- const base = SERVER_URL.replace(/\/$/, "");
444
- const wsBase = base.replace(/^https:/, "wss:").replace(/^http:/, "ws:");
445
- return `${wsBase}/agent/ws`;
541
+ const base = SERVER_URL.replace(/\/$/, "");
542
+ const wsBase = base.replace(/^https:/, "wss:").replace(/^http:/, "ws:");
543
+ return `${wsBase}/agent/ws`;
446
544
  }
545
+
447
546
  /**
448
547
  * Start the local agent WebSocket connection in the background.
449
548
  * Non-blocking — MCP server continues even if this fails.
450
549
  */
451
550
  async function startLocalAgent() {
452
- const apiKey = await getOrCreateAgentApiKey();
453
- if (!apiKey) {
454
- console.error("[MCP] Skipping local agent — no API key available");
455
- return;
456
- }
457
- const wsUrl = getAgentWsUrl();
458
- console.error(`[MCP] Starting local agent → ${wsUrl}`);
459
- localAgent = new LocalAgentConnection({
460
- apiKey,
461
- serverUrl: wsUrl,
462
- onConnected: () => console.error("[MCP] Local agent connected — WhaleChat can now use local tools"),
463
- onDisconnected: (reason) => console.error(`[MCP] Local agent disconnected: ${reason}`),
464
- onError: (err) => console.error(`[MCP] Local agent error: ${err.message}`),
465
- onLog: (msg) => console.error(msg),
466
- });
467
- try {
468
- await localAgent.connect();
469
- }
470
- catch (err) {
471
- console.error(`[MCP] Local agent failed to connect: ${err.message} (non-fatal)`);
472
- }
551
+ const apiKey = await getOrCreateAgentApiKey();
552
+ if (!apiKey) {
553
+ console.error("[MCP] Skipping local agent — no API key available");
554
+ return;
555
+ }
556
+ const wsUrl = getAgentWsUrl();
557
+ console.error(`[MCP] Starting local agent → ${wsUrl}`);
558
+ localAgent = new LocalAgentConnection({
559
+ apiKey,
560
+ serverUrl: wsUrl,
561
+ onConnected: () => console.error("[MCP] Local agent connected — WhaleChat can now use local tools"),
562
+ onDisconnected: reason => console.error(`[MCP] Local agent disconnected: ${reason}`),
563
+ onError: err => console.error(`[MCP] Local agent error: ${err.message}`),
564
+ onLog: msg => console.error(msg)
565
+ });
566
+ try {
567
+ await localAgent.connect();
568
+ } catch (err) {
569
+ console.error(`[MCP] Local agent failed to connect: ${err.message} (non-fatal)`);
570
+ }
473
571
  }
572
+
474
573
  // ============================================================================
475
574
  // STARTUP
476
575
  // ============================================================================
576
+
477
577
  async function main() {
478
- // Initialize error logging for MCP mode
479
- initErrorLogger({ serviceName: "whale-code-mcp" });
480
- if (USER_ID || USER_EMAIL) {
481
- setErrorLoggerUser(USER_ID || undefined, USER_EMAIL || undefined, STORE_ID || undefined);
482
- }
483
- console.error(`[MCP] Whale MCP Server v${PKG_VERSION}`);
484
- console.error(`[MCP] Supabase: ${SUPABASE_URL}`);
485
- console.error(`[MCP] Server: ${SERVER_URL}`);
486
- console.error(`[MCP] Store: ${STORE_ID || "(default)"}`);
487
- console.error(`[MCP] User: ${USER_EMAIL || "(unknown)"} [${USER_ID?.slice(0, 8) || "no-id"}]`);
488
- console.error(`[MCP] Session: ${SESSION_ID}`);
489
- console.error(`[MCP] Authenticated: ${isAuthenticated ? "yes" : "no use whale_login tool"}`);
490
- // Pre-load tools from database (only if authenticated)
491
- if (isAuthenticated) {
492
- const tools = await loadToolDefinitions(true);
493
- console.error(`[MCP] Loaded ${tools.length} tools from registry`);
494
- }
495
- else {
496
- console.error(`[MCP] Skipping tool load — not authenticated. ${LOCAL_TOOLS.length} auth tools available.`);
497
- }
498
- // Start OTA update checker (non-blocking, runs in background)
499
- startUpdateLoop(true);
500
- // Connect via stdio
501
- const transport = new StdioServerTransport();
502
- await server.connect(transport);
503
- console.error("[MCP] Ready");
504
- // Start local agent in background — only if authenticated
505
- if (isAuthenticated) {
506
- startLocalAgent().catch((err) => {
507
- console.error("[MCP] Local agent startup error:", err.message);
508
- });
509
- }
578
+ // Initialize error logging for MCP mode
579
+ initErrorLogger({
580
+ serviceName: "whale-code-mcp"
581
+ });
582
+ if (USER_ID || USER_EMAIL) {
583
+ setErrorLoggerUser(USER_ID || undefined, USER_EMAIL || undefined, STORE_ID || undefined);
584
+ }
585
+ console.error(`[MCP] Whale MCP Server v${PKG_VERSION}`);
586
+ console.error(`[MCP] Supabase: ${SUPABASE_URL}`);
587
+ console.error(`[MCP] Server: ${SERVER_URL}`);
588
+ console.error(`[MCP] Store: ${STORE_ID || "(default)"}`);
589
+ console.error(`[MCP] User: ${USER_EMAIL || "(unknown)"} [${USER_ID?.slice(0, 8) || "no-id"}]`);
590
+ console.error(`[MCP] Session: ${SESSION_ID}`);
591
+ console.error(`[MCP] Authenticated: ${isAuthenticated ? "yes" : "no — use whale_login tool"}`);
592
+
593
+ // Pre-load tools from database (only if authenticated)
594
+ if (isAuthenticated) {
595
+ const tools = await loadToolDefinitions(true);
596
+ console.error(`[MCP] Loaded ${tools.length} tools from registry`);
597
+ } else {
598
+ console.error(`[MCP] Skipping tool load not authenticated. ${LOCAL_TOOLS.length} auth tools available.`);
599
+ }
600
+
601
+ // Start OTA update checker (non-blocking, runs in background)
602
+ startUpdateLoop(true);
603
+
604
+ // Connect via stdio
605
+ const transport = new StdioServerTransport();
606
+ await server.connect(transport);
607
+ console.error("[MCP] Ready");
608
+
609
+ // Start local agent in background — only if authenticated
610
+ if (isAuthenticated) {
611
+ startLocalAgent().catch(err => {
612
+ console.error("[MCP] Local agent startup error:", err.message);
613
+ });
614
+ }
510
615
  }
616
+
511
617
  // Graceful shutdown — disconnect local agent
512
618
  process.on("SIGINT", () => {
513
- localAgent?.disconnect();
619
+ localAgent?.disconnect();
514
620
  });
515
621
  process.on("SIGTERM", () => {
516
- localAgent?.disconnect();
622
+ localAgent?.disconnect();
517
623
  });
518
- main().catch((err) => {
519
- console.error("[MCP] Fatal:", err);
520
- captureError({ error: err instanceof Error ? err : new Error(String(err)), severity: "fatal", tags: { source: "mcp_main" } });
521
- // Give error logger a moment to flush before exit
522
- setTimeout(() => process.exit(1), 500);
624
+ main().catch(err => {
625
+ console.error("[MCP] Fatal:", err);
626
+ captureError({
627
+ error: err instanceof Error ? err : new Error(String(err)),
628
+ severity: "fatal",
629
+ tags: {
630
+ source: "mcp_main"
631
+ }
632
+ });
633
+ // Give error logger a moment to flush before exit
634
+ setTimeout(() => process.exit(1), 500);
523
635
  });
636
+ //# sourceMappingURL=index.js.map