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
@@ -20,9 +20,10 @@
20
20
  * subagent_start, subagent_progress, subagent_done, subagent_tool_start, subagent_tool_end,
21
21
  * team_start, team_progress, team_task, team_done
22
22
  */
23
+
23
24
  import { createServer } from "http";
24
25
  import { WebSocketServer, WebSocket } from "ws";
25
- import { runAgentLoop, setModel, setPermissionMode, resetSessionState, getModel, estimateCostUsd, AgentEventEmitter, } from "./services/agent-loop.js";
26
+ import { runAgentLoop, setModel, setPermissionMode, resetSessionState, getModel, estimateCostUsd, AgentEventEmitter } from "./services/agent-loop.js";
26
27
  import { resolveConfig } from "./services/config-store.js";
27
28
  import { createClient } from "@supabase/supabase-js";
28
29
  import { getValidToken, createAuthenticatedClient } from "./services/auth-service.js";
@@ -31,606 +32,690 @@ import { LOCAL_TOOL_DEFINITIONS } from "./services/local-tools.js";
31
32
  import { createRequire } from "module";
32
33
  const require = createRequire(import.meta.url);
33
34
  const PKG_VERSION = require("../../package.json").version;
35
+
36
+ // ============================================================================
37
+ // TYPES
38
+ // ============================================================================
39
+
34
40
  // ============================================================================
35
41
  // SUPABASE CLIENT (for conversation persistence)
36
42
  // ============================================================================
43
+
37
44
  let supabase = null;
38
45
  let supabaseCreatedAt = 0;
39
46
  const SUPABASE_TTL_MS = 45 * 60 * 1000; // Refresh client every 45 min (JWT expires ~60 min)
47
+
40
48
  async function getSupabase() {
41
- const now = Date.now();
42
- // Return cached client if still fresh
43
- if (supabase && (now - supabaseCreatedAt) < SUPABASE_TTL_MS)
44
- return supabase;
45
- // Invalidate stale client
46
- supabase = null;
47
- const config = resolveConfig();
48
- // Tier 1: Service role key (never expires)
49
- if (config.supabaseUrl && config.supabaseKey && process.env.SUPABASE_SERVICE_ROLE_KEY) {
50
- supabase = createClient(config.supabaseUrl, config.supabaseKey, {
51
- auth: { autoRefreshToken: false, persistSession: false },
52
- });
53
- supabaseCreatedAt = now;
54
- return supabase;
55
- }
56
- // Tier 2: User JWT — always get a fresh token
57
- try {
58
- const token = await getValidToken();
59
- if (token) {
60
- supabase = createAuthenticatedClient(token);
61
- supabaseCreatedAt = now;
62
- return supabase;
63
- }
64
- }
65
- catch {
66
- // Fall through
49
+ const now = Date.now();
50
+
51
+ // Return cached client if still fresh
52
+ if (supabase && now - supabaseCreatedAt < SUPABASE_TTL_MS) return supabase;
53
+
54
+ // Invalidate stale client
55
+ supabase = null;
56
+ const config = resolveConfig();
57
+
58
+ // Tier 1: Service role key (never expires)
59
+ if (config.supabaseUrl && config.supabaseKey && process.env.SUPABASE_SERVICE_ROLE_KEY) {
60
+ supabase = createClient(config.supabaseUrl, config.supabaseKey, {
61
+ auth: {
62
+ autoRefreshToken: false,
63
+ persistSession: false
64
+ }
65
+ });
66
+ supabaseCreatedAt = now;
67
+ return supabase;
68
+ }
69
+
70
+ // Tier 2: User JWT — always get a fresh token
71
+ try {
72
+ const token = await getValidToken();
73
+ if (token) {
74
+ supabase = createAuthenticatedClient(token);
75
+ supabaseCreatedAt = now;
76
+ return supabase;
67
77
  }
68
- return null;
78
+ } catch {
79
+ // Fall through
80
+ }
81
+ return null;
69
82
  }
83
+
70
84
  // ============================================================================
71
85
  // CONVERSATION PERSISTENCE
72
86
  // ============================================================================
87
+
73
88
  async function createConversation(storeId, title, agentName) {
74
- const db = await getSupabase();
75
- if (!db)
76
- return null;
77
- try {
78
- const { data, error } = await db
79
- .from("ai_conversations")
80
- .insert({
81
- store_id: storeId || null,
82
- title: title.substring(0, 100),
83
- metadata: {
84
- source: "whale-serve",
85
- agentName: agentName || "whale",
86
- },
87
- status: "active",
88
- })
89
- .select("id")
90
- .single();
91
- if (error) {
92
- console.error("[serve] Failed to create conversation:", error.message);
93
- return null;
94
- }
95
- return data?.id || null;
96
- }
97
- catch (err) {
98
- console.error("[serve] Conversation create error:", err);
99
- return null;
89
+ const db = await getSupabase();
90
+ if (!db) return null;
91
+ try {
92
+ const {
93
+ data,
94
+ error
95
+ } = await db.from("ai_conversations").insert({
96
+ store_id: storeId || null,
97
+ title: title.substring(0, 100),
98
+ metadata: {
99
+ source: "whale-serve",
100
+ agentName: agentName || "whale"
101
+ },
102
+ status: "active"
103
+ }).select("id").single();
104
+ if (error) {
105
+ console.error("[serve] Failed to create conversation:", error.message);
106
+ return null;
100
107
  }
108
+ return data?.id || null;
109
+ } catch (err) {
110
+ console.error("[serve] Conversation create error:", err);
111
+ return null;
112
+ }
101
113
  }
102
114
  async function appendMessage(conversationId, role, content, tokenCount, toolNames) {
103
- const db = await getSupabase();
104
- if (!db || !conversationId)
105
- return;
106
- try {
107
- // Insert into ai_messages for individual message tracking
108
- await db.from("ai_messages").insert({
109
- conversation_id: conversationId,
110
- role,
111
- content: [{ type: "text", text: content }],
112
- is_tool_use: (toolNames && toolNames.length > 0) || false,
113
- tool_names: toolNames || [],
114
- token_count: tokenCount || 0,
115
- });
116
- }
117
- catch {
118
- // Non-fatal — persistence is best-effort
119
- }
115
+ const db = await getSupabase();
116
+ if (!db || !conversationId) return;
117
+ try {
118
+ // Insert into ai_messages for individual message tracking
119
+ await db.from("ai_messages").insert({
120
+ conversation_id: conversationId,
121
+ role,
122
+ content: [{
123
+ type: "text",
124
+ text: content
125
+ }],
126
+ is_tool_use: toolNames && toolNames.length > 0 || false,
127
+ tool_names: toolNames || [],
128
+ token_count: tokenCount || 0
129
+ });
130
+ } catch {
131
+ // Non-fatal — persistence is best-effort
132
+ }
120
133
  }
121
134
  async function updateConversationMetadata(conversationId, metadata) {
122
- const db = await getSupabase();
123
- if (!db || !conversationId)
124
- return;
125
- try {
126
- // Fetch current metadata, merge, and update
127
- const { data } = await db
128
- .from("ai_conversations")
129
- .select("metadata")
130
- .eq("id", conversationId)
131
- .single();
132
- const existing = data?.metadata || {};
133
- await db
134
- .from("ai_conversations")
135
- .update({ metadata: { ...existing, ...metadata }, updated_at: new Date().toISOString() })
136
- .eq("id", conversationId);
137
- }
138
- catch {
139
- // Non-fatal
140
- }
135
+ const db = await getSupabase();
136
+ if (!db || !conversationId) return;
137
+ try {
138
+ // Fetch current metadata, merge, and update
139
+ const {
140
+ data
141
+ } = await db.from("ai_conversations").select("metadata").eq("id", conversationId).single();
142
+ const existing = data?.metadata || {};
143
+ await db.from("ai_conversations").update({
144
+ metadata: {
145
+ ...existing,
146
+ ...metadata
147
+ },
148
+ updated_at: new Date().toISOString()
149
+ }).eq("id", conversationId);
150
+ } catch {
151
+ // Non-fatal
152
+ }
141
153
  }
142
154
  async function loadConversation(conversationId) {
143
- const db = await getSupabase();
144
- if (!db)
145
- return null;
146
- try {
147
- const { data, error } = await db
148
- .from("ai_conversations")
149
- .select("id, title, messages")
150
- .eq("id", conversationId)
151
- .single();
152
- if (error || !data)
153
- return null;
154
- return {
155
- id: data.id,
156
- title: data.title || "Untitled",
157
- messages: data.messages || [],
158
- };
159
- }
160
- catch {
161
- return null;
162
- }
155
+ const db = await getSupabase();
156
+ if (!db) return null;
157
+ try {
158
+ const {
159
+ data,
160
+ error
161
+ } = await db.from("ai_conversations").select("id, title, messages").eq("id", conversationId).single();
162
+ if (error || !data) return null;
163
+ return {
164
+ id: data.id,
165
+ title: data.title || "Untitled",
166
+ messages: data.messages || []
167
+ };
168
+ } catch {
169
+ return null;
170
+ }
163
171
  }
164
172
  async function listConversations(storeId, limit = 20) {
165
- const db = await getSupabase();
166
- if (!db)
167
- return [];
168
- try {
169
- const { data, error } = await db
170
- .from("ai_conversations")
171
- .select("id, title, agent_id, metadata, turn_count, created_at, updated_at")
172
- .eq("store_id", storeId)
173
- .order("updated_at", { ascending: false })
174
- .limit(limit);
175
- if (error || !data)
176
- return [];
177
- return data.map((c) => ({
178
- id: c.id,
179
- title: c.title || "Untitled",
180
- agentId: c.agent_id || null,
181
- agentName: c.metadata?.agentName || null,
182
- messageCount: c.turn_count || 0,
183
- createdAt: c.created_at,
184
- updatedAt: c.updated_at,
185
- }));
186
- }
187
- catch {
188
- return [];
189
- }
173
+ const db = await getSupabase();
174
+ if (!db) return [];
175
+ try {
176
+ const {
177
+ data,
178
+ error
179
+ } = await db.from("ai_conversations").select("id, title, agent_id, metadata, turn_count, created_at, updated_at").eq("store_id", storeId).order("updated_at", {
180
+ ascending: false
181
+ }).limit(limit);
182
+ if (error || !data) return [];
183
+ return data.map(c => ({
184
+ id: c.id,
185
+ title: c.title || "Untitled",
186
+ agentId: c.agent_id || null,
187
+ agentName: c.metadata?.agentName || null,
188
+ messageCount: c.turn_count || 0,
189
+ createdAt: c.created_at,
190
+ updatedAt: c.updated_at
191
+ }));
192
+ } catch {
193
+ return [];
194
+ }
190
195
  }
196
+
191
197
  // ============================================================================
192
198
  // TOOL LIST (for ready/tools messages)
193
199
  // ============================================================================
200
+
194
201
  async function getToolList() {
195
- const tools = [];
196
- // Local tools
197
- for (const t of LOCAL_TOOL_DEFINITIONS) {
202
+ const tools = [];
203
+
204
+ // Local tools
205
+ for (const t of LOCAL_TOOL_DEFINITIONS) {
206
+ tools.push({
207
+ id: `local-${t.name}`,
208
+ name: t.name,
209
+ description: t.description,
210
+ category: "local"
211
+ });
212
+ }
213
+
214
+ // Server tools
215
+ try {
216
+ const serverTools = await loadServerToolDefinitions();
217
+ for (const t of serverTools) {
218
+ if (!tools.some(existing => existing.name === t.name)) {
198
219
  tools.push({
199
- id: `local-${t.name}`,
200
- name: t.name,
201
- description: t.description,
202
- category: "local",
220
+ id: `server-${t.name}`,
221
+ name: t.name,
222
+ description: t.description || "",
223
+ category: "server"
203
224
  });
225
+ }
204
226
  }
205
- // Server tools
206
- try {
207
- const serverTools = await loadServerToolDefinitions();
208
- for (const t of serverTools) {
209
- if (!tools.some((existing) => existing.name === t.name)) {
210
- tools.push({
211
- id: `server-${t.name}`,
212
- name: t.name,
213
- description: t.description || "",
214
- category: "server",
215
- });
216
- }
217
- }
218
- }
219
- catch {
220
- // Server tools unavailable — local-only mode
221
- }
222
- return tools;
227
+ } catch {
228
+ // Server tools unavailable — local-only mode
229
+ }
230
+ return tools;
223
231
  }
232
+
224
233
  // ============================================================================
225
234
  // WEBSOCKET MESSAGE HELPERS
226
235
  // ============================================================================
236
+
227
237
  function send(ws, message) {
228
- if (ws.readyState === WebSocket.OPEN) {
229
- ws.send(JSON.stringify(message));
230
- }
238
+ if (ws.readyState === WebSocket.OPEN) {
239
+ ws.send(JSON.stringify(message));
240
+ }
231
241
  }
232
242
  function sendDebug(ws, level, message, data) {
233
- send(ws, { type: "debug", level, message, data });
243
+ send(ws, {
244
+ type: "debug",
245
+ level,
246
+ message,
247
+ data
248
+ });
234
249
  }
250
+
235
251
  // ============================================================================
236
252
  // QUERY HANDLER — runs the full agent loop
237
253
  // ============================================================================
254
+
238
255
  async function handleQuery(session, msg, opts) {
239
- const { ws } = session;
240
- const prompt = msg.prompt;
241
- if (!prompt) {
242
- send(ws, { type: "error", error: "Missing 'prompt' field" });
243
- return;
244
- }
245
- // Extract image attachments sent by WhaleChat
246
- const rawAttachments = msg.attachments || [];
247
- const images = rawAttachments
248
- .filter(att => att.type === "image" && att.media_type && att.data)
249
- .map(att => ({ base64: att.data, mediaType: att.media_type }));
250
- const storeId = msg.storeId || resolveConfig().storeId || null;
251
- const config = msg.config || {};
252
- const requestedConvId = msg.conversationId || session.conversationId;
253
- // Restore conversation history from client if session is fresh (new WS connection)
254
- const clientHistory = msg.conversationHistory;
255
- if (session.conversationHistory.length === 0 && clientHistory && clientHistory.length > 0) {
256
- session.conversationHistory = clientHistory
257
- .filter((m) => m.content && m.content.trim().length > 0)
258
- .map((m) => ({
259
- role: m.role,
260
- content: m.content,
261
- }));
262
- }
263
- // Apply model from config or server defaults
264
- const model = config.model || opts.model;
265
- if (model)
266
- setModel(model);
267
- // Create or continue conversation
268
- let conversationId = requestedConvId;
269
- if (!conversationId) {
270
- conversationId = await createConversation(storeId, prompt, config.agentName);
271
- if (conversationId) {
272
- send(ws, {
273
- type: "conversation_created",
274
- conversation: {
275
- id: conversationId,
276
- title: prompt.substring(0, 100),
277
- agentId: config.agentId || null,
278
- agentName: config.agentName || "whale",
279
- messageCount: 0,
280
- createdAt: new Date().toISOString(),
281
- updatedAt: new Date().toISOString(),
282
- },
283
- });
284
- }
285
- }
286
- session.conversationId = conversationId;
287
- // Persist user message
288
- if (conversationId) {
289
- appendMessage(conversationId, "user", prompt);
290
- }
291
- // Signal started
256
+ const {
257
+ ws
258
+ } = session;
259
+ const prompt = msg.prompt;
260
+ if (!prompt) {
292
261
  send(ws, {
293
- type: "started",
294
- model: getModel(),
295
- conversationId,
262
+ type: "error",
263
+ error: "Missing 'prompt' field"
296
264
  });
297
- // Set up abort controller
298
- const abortController = new AbortController();
299
- session.abortController = abortController;
300
- let totalIn = 0;
301
- let totalOut = 0;
302
- let lastCostUsd = 0;
303
- let fullText = "";
304
- const toolsUsed = [];
305
- const startTime = Date.now();
306
- // Create event emitter for subagent/team events → forward to WebSocket
307
- const emitter = new AgentEventEmitter();
308
- const forwardTypes = new Set([
309
- "subagent_start", "subagent_progress", "subagent_done",
310
- "subagent_tool_start", "subagent_tool_end",
311
- "team_start", "team_progress", "team_task", "team_done",
312
- ]);
313
- const eventHandler = (event) => {
314
- if (event.type === "text") {
315
- // Emitter captures text events — forward them to WebSocket + accumulate
316
- const text = event.text;
317
- if (text) {
318
- fullText += text;
319
- send(ws, { type: "text", text });
320
- }
321
- }
322
- else if (forwardTypes.has(event.type)) {
323
- send(ws, event);
324
- }
325
- };
326
- emitter.on("event", eventHandler);
327
- try {
328
- const callbacks = {
329
- onText: (text) => {
330
- fullText += text;
331
- send(ws, { type: "text", text });
332
- },
333
- onToolStart: (name, input) => {
334
- if (!toolsUsed.includes(name))
335
- toolsUsed.push(name);
336
- send(ws, { type: "tool_start", tool: name, input: input || {} });
337
- },
338
- onToolResult: (name, success, result, _input, durationMs) => {
339
- // Truncate large results for the wire
340
- let wireResult = result;
341
- if (typeof result === "string" && result.length > 10000) {
342
- wireResult = result.substring(0, 10000) + "\n... (truncated)";
343
- }
344
- send(ws, {
345
- type: "tool_result",
346
- tool: name,
347
- success,
348
- result: wireResult,
349
- error: success ? undefined : (typeof result === "string" ? result : "Tool failed"),
350
- duration_ms: durationMs,
351
- });
352
- },
353
- onUsage: (input_tokens, output_tokens, _thinking_tokens, _model, costUsd) => {
354
- totalIn += input_tokens;
355
- totalOut += output_tokens;
356
- if (costUsd != null)
357
- lastCostUsd = costUsd;
358
- },
359
- onDone: (finalMessages) => {
360
- session.conversationHistory = finalMessages;
361
- },
362
- onError: (error) => {
363
- send(ws, { type: "error", error });
364
- },
365
- onAutoCompact: (before, after, tokensSaved) => {
366
- sendDebug(ws, "info", `Context compacted: ${before} → ${after} messages (saved ~${tokensSaved} tokens)`);
367
- },
368
- };
369
- const loopOpts = {
370
- message: prompt,
371
- images: images.length > 0 ? images : undefined,
372
- conversationHistory: session.conversationHistory,
373
- callbacks,
374
- abortSignal: abortController.signal,
375
- emitter,
376
- maxTurns: config.maxTurns || opts.maxTurns,
377
- maxBudgetUsd: opts.maxBudgetUsd,
378
- effort: (opts.effort || "medium"),
379
- allowedTools: config.enabledTools || opts.allowedTools,
380
- disallowedTools: opts.disallowedTools,
381
- fallbackModel: opts.fallbackModel,
382
- };
383
- await runAgentLoop(loopOpts);
384
- // Calculate cost
385
- session.totalInputTokens += totalIn;
386
- session.totalOutputTokens += totalOut;
387
- const totalCost = lastCostUsd || estimateCostUsd(session.totalInputTokens, session.totalOutputTokens);
388
- const durationMs = Date.now() - startTime;
389
- // Persist assistant response
390
- if (conversationId && fullText) {
391
- appendMessage(conversationId, "assistant", fullText, totalOut, toolsUsed);
392
- }
393
- // Update conversation metadata
394
- if (conversationId) {
395
- updateConversationMetadata(conversationId, {
396
- lastTurnTokens: { input: totalIn, output: totalOut },
397
- lastToolCalls: toolsUsed,
398
- lastDurationMs: durationMs,
399
- model: getModel(),
400
- });
265
+ return;
266
+ }
267
+
268
+ // Extract image attachments sent by WhaleChat
269
+ const rawAttachments = msg.attachments || [];
270
+ const images = rawAttachments.filter(att => att.type === "image" && att.media_type && att.data).map(att => ({
271
+ base64: att.data,
272
+ mediaType: att.media_type
273
+ }));
274
+ const storeId = msg.storeId || resolveConfig().storeId || null;
275
+ const config = msg.config || {};
276
+ const requestedConvId = msg.conversationId || session.conversationId;
277
+
278
+ // Restore conversation history from client if session is fresh (new WS connection)
279
+ const clientHistory = msg.conversationHistory;
280
+ if (session.conversationHistory.length === 0 && clientHistory && clientHistory.length > 0) {
281
+ session.conversationHistory = clientHistory.filter(m => m.content && m.content.trim().length > 0).map(m => ({
282
+ role: m.role,
283
+ content: m.content
284
+ }));
285
+ }
286
+
287
+ // Apply model from config or server defaults
288
+ const model = config.model || opts.model;
289
+ if (model) setModel(model);
290
+
291
+ // Create or continue conversation
292
+ let conversationId = requestedConvId;
293
+ if (!conversationId) {
294
+ conversationId = await createConversation(storeId, prompt, config.agentName);
295
+ if (conversationId) {
296
+ send(ws, {
297
+ type: "conversation_created",
298
+ conversation: {
299
+ id: conversationId,
300
+ title: prompt.substring(0, 100),
301
+ agentId: config.agentId || null,
302
+ agentName: config.agentName || "whale",
303
+ messageCount: 0,
304
+ createdAt: new Date().toISOString(),
305
+ updatedAt: new Date().toISOString()
401
306
  }
402
- // Send done
307
+ });
308
+ }
309
+ }
310
+ session.conversationId = conversationId;
311
+
312
+ // Persist user message
313
+ if (conversationId) {
314
+ appendMessage(conversationId, "user", prompt);
315
+ }
316
+
317
+ // Signal started
318
+ send(ws, {
319
+ type: "started",
320
+ model: getModel(),
321
+ conversationId
322
+ });
323
+
324
+ // Set up abort controller
325
+ const abortController = new AbortController();
326
+ session.abortController = abortController;
327
+ let totalIn = 0;
328
+ let totalOut = 0;
329
+ let lastCostUsd = 0;
330
+ let fullText = "";
331
+ const toolsUsed = [];
332
+ const startTime = Date.now();
333
+
334
+ // Create event emitter for subagent/team events → forward to WebSocket
335
+ const emitter = new AgentEventEmitter();
336
+ const forwardTypes = new Set(["subagent_start", "subagent_progress", "subagent_done", "subagent_tool_start", "subagent_tool_end", "team_start", "team_progress", "team_task", "team_done"]);
337
+ const eventHandler = event => {
338
+ if (event.type === "text") {
339
+ // Emitter captures text events — forward them to WebSocket + accumulate
340
+ const text = event.text;
341
+ if (text) {
342
+ fullText += text;
403
343
  send(ws, {
404
- type: "done",
405
- status: "complete",
406
- conversationId: conversationId || "",
407
- usage: {
408
- inputTokens: session.totalInputTokens,
409
- outputTokens: session.totalOutputTokens,
410
- totalCost,
411
- },
344
+ type: "text",
345
+ text
412
346
  });
347
+ }
348
+ } else if (forwardTypes.has(event.type)) {
349
+ send(ws, event);
413
350
  }
414
- catch (err) {
415
- const errorMsg = err instanceof Error ? err.message : String(err);
416
- if (abortController.signal.aborted) {
417
- send(ws, { type: "aborted" });
418
- }
419
- else {
420
- send(ws, { type: "error", error: errorMsg });
351
+ };
352
+ emitter.on("event", eventHandler);
353
+ try {
354
+ const callbacks = {
355
+ onText: text => {
356
+ fullText += text;
357
+ send(ws, {
358
+ type: "text",
359
+ text
360
+ });
361
+ },
362
+ onToolStart: (name, input) => {
363
+ if (!toolsUsed.includes(name)) toolsUsed.push(name);
364
+ send(ws, {
365
+ type: "tool_start",
366
+ tool: name,
367
+ input: input || {}
368
+ });
369
+ },
370
+ onToolResult: (name, success, result, _input, durationMs) => {
371
+ // Truncate large results for the wire
372
+ let wireResult = result;
373
+ if (typeof result === "string" && result.length > 10000) {
374
+ wireResult = result.substring(0, 10000) + "\n... (truncated)";
421
375
  }
376
+ send(ws, {
377
+ type: "tool_result",
378
+ tool: name,
379
+ success,
380
+ result: wireResult,
381
+ error: success ? undefined : typeof result === "string" ? result : "Tool failed",
382
+ duration_ms: durationMs
383
+ });
384
+ },
385
+ onUsage: (input_tokens, output_tokens, _thinking_tokens, _model, costUsd) => {
386
+ totalIn += input_tokens;
387
+ totalOut += output_tokens;
388
+ if (costUsd != null) lastCostUsd = costUsd;
389
+ },
390
+ onDone: finalMessages => {
391
+ session.conversationHistory = finalMessages;
392
+ },
393
+ onError: error => {
394
+ send(ws, {
395
+ type: "error",
396
+ error
397
+ });
398
+ },
399
+ onAutoCompact: (before, after, tokensSaved) => {
400
+ sendDebug(ws, "info", `Context compacted: ${before} → ${after} messages (saved ~${tokensSaved} tokens)`);
401
+ }
402
+ };
403
+ const loopOpts = {
404
+ message: prompt,
405
+ images: images.length > 0 ? images : undefined,
406
+ conversationHistory: session.conversationHistory,
407
+ callbacks,
408
+ abortSignal: abortController.signal,
409
+ emitter,
410
+ maxTurns: config.maxTurns || opts.maxTurns,
411
+ maxBudgetUsd: opts.maxBudgetUsd,
412
+ effort: opts.effort || "medium",
413
+ allowedTools: config.enabledTools || opts.allowedTools,
414
+ disallowedTools: opts.disallowedTools,
415
+ fallbackModel: opts.fallbackModel
416
+ };
417
+ await runAgentLoop(loopOpts);
418
+
419
+ // Calculate cost
420
+ session.totalInputTokens += totalIn;
421
+ session.totalOutputTokens += totalOut;
422
+ const totalCost = lastCostUsd || estimateCostUsd(session.totalInputTokens, session.totalOutputTokens);
423
+ const durationMs = Date.now() - startTime;
424
+
425
+ // Persist assistant response
426
+ if (conversationId && fullText) {
427
+ appendMessage(conversationId, "assistant", fullText, totalOut, toolsUsed);
422
428
  }
423
- finally {
424
- emitter.off("event", eventHandler);
425
- session.abortController = null;
429
+
430
+ // Update conversation metadata
431
+ if (conversationId) {
432
+ updateConversationMetadata(conversationId, {
433
+ lastTurnTokens: {
434
+ input: totalIn,
435
+ output: totalOut
436
+ },
437
+ lastToolCalls: toolsUsed,
438
+ lastDurationMs: durationMs,
439
+ model: getModel()
440
+ });
426
441
  }
442
+
443
+ // Send done
444
+ send(ws, {
445
+ type: "done",
446
+ status: "complete",
447
+ conversationId: conversationId || "",
448
+ usage: {
449
+ inputTokens: session.totalInputTokens,
450
+ outputTokens: session.totalOutputTokens,
451
+ totalCost
452
+ }
453
+ });
454
+ } catch (err) {
455
+ const errorMsg = err instanceof Error ? err.message : String(err);
456
+ if (abortController.signal.aborted) {
457
+ send(ws, {
458
+ type: "aborted"
459
+ });
460
+ } else {
461
+ send(ws, {
462
+ type: "error",
463
+ error: errorMsg
464
+ });
465
+ }
466
+ } finally {
467
+ emitter.off("event", eventHandler);
468
+ session.abortController = null;
469
+ }
427
470
  }
471
+
428
472
  // ============================================================================
429
473
  // CONNECTION HANDLER
430
474
  // ============================================================================
475
+
431
476
  async function handleConnection(ws, opts) {
432
- const session = {
433
- ws,
434
- abortController: null,
435
- conversationHistory: [],
436
- conversationId: null,
437
- totalInputTokens: 0,
438
- totalOutputTokens: 0,
439
- };
440
- // Send ready with tool list
441
- const tools = await getToolList();
442
- send(ws, {
443
- type: "ready",
444
- version: PKG_VERSION,
445
- tools,
446
- });
447
- if (opts.verbose) {
448
- console.log("[serve] Client connected, sent ready with", tools.length, "tools");
477
+ const session = {
478
+ ws,
479
+ abortController: null,
480
+ conversationHistory: [],
481
+ conversationId: null,
482
+ totalInputTokens: 0,
483
+ totalOutputTokens: 0
484
+ };
485
+
486
+ // Send ready with tool list
487
+ const tools = await getToolList();
488
+ send(ws, {
489
+ type: "ready",
490
+ version: PKG_VERSION,
491
+ tools
492
+ });
493
+ if (opts.verbose) {
494
+ console.log("[serve] Client connected, sent ready with", tools.length, "tools");
495
+ }
496
+ ws.on("message", async data => {
497
+ let msg;
498
+ try {
499
+ const text = typeof data === "string" ? data : data.toString("utf-8");
500
+ msg = JSON.parse(text);
501
+ } catch {
502
+ send(ws, {
503
+ type: "error",
504
+ error: "Invalid JSON"
505
+ });
506
+ return;
449
507
  }
450
- ws.on("message", async (data) => {
451
- let msg;
452
- try {
453
- const text = typeof data === "string" ? data : data.toString("utf-8");
454
- msg = JSON.parse(text);
508
+ const type = msg.type;
509
+ if (!type) {
510
+ send(ws, {
511
+ type: "error",
512
+ error: "Missing 'type' field"
513
+ });
514
+ return;
515
+ }
516
+ switch (type) {
517
+ case "query":
518
+ await handleQuery(session, msg, opts);
519
+ break;
520
+ case "abort":
521
+ if (session.abortController) {
522
+ session.abortController.abort();
523
+ // aborted message is sent by handleQuery's catch block
455
524
  }
456
- catch {
457
- send(ws, { type: "error", error: "Invalid JSON" });
458
- return;
525
+ break;
526
+ case "ping":
527
+ send(ws, {
528
+ type: "pong"
529
+ });
530
+ break;
531
+ case "get_tools":
532
+ {
533
+ const toolList = await getToolList();
534
+ send(ws, {
535
+ type: "tools",
536
+ tools: toolList
537
+ });
538
+ break;
459
539
  }
460
- const type = msg.type;
461
- if (!type) {
462
- send(ws, { type: "error", error: "Missing 'type' field" });
463
- return;
540
+ case "new_conversation":
541
+ session.conversationHistory = [];
542
+ session.conversationId = null;
543
+ session.totalInputTokens = 0;
544
+ session.totalOutputTokens = 0;
545
+ resetSessionState(); // Reset module-level token counters, caches
546
+ if (opts.verbose) {
547
+ console.log("[serve] New conversation started");
464
548
  }
465
- switch (type) {
466
- case "query":
467
- await handleQuery(session, msg, opts);
468
- break;
469
- case "abort":
470
- if (session.abortController) {
471
- session.abortController.abort();
472
- // aborted message is sent by handleQuery's catch block
473
- }
474
- break;
475
- case "ping":
476
- send(ws, { type: "pong" });
477
- break;
478
- case "get_tools": {
479
- const toolList = await getToolList();
480
- send(ws, { type: "tools", tools: toolList });
481
- break;
482
- }
483
- case "new_conversation":
484
- session.conversationHistory = [];
485
- session.conversationId = null;
486
- session.totalInputTokens = 0;
487
- session.totalOutputTokens = 0;
488
- resetSessionState(); // Reset module-level token counters, caches
489
- if (opts.verbose) {
490
- console.log("[serve] New conversation started");
491
- }
492
- break;
493
- case "get_conversations": {
494
- const storeId = msg.storeId;
495
- const limit = msg.limit || 20;
496
- if (!storeId) {
497
- send(ws, { type: "conversations", conversations: [] });
498
- break;
499
- }
500
- const convs = await listConversations(storeId, limit);
501
- send(ws, { type: "conversations", conversations: convs });
502
- break;
503
- }
504
- case "load_conversation": {
505
- const convId = msg.conversationId;
506
- if (!convId) {
507
- send(ws, { type: "error", error: "Missing conversationId" });
508
- break;
509
- }
510
- const conv = await loadConversation(convId);
511
- if (conv) {
512
- session.conversationId = conv.id;
513
- send(ws, {
514
- type: "conversation_loaded",
515
- conversationId: conv.id,
516
- title: conv.title,
517
- messages: conv.messages,
518
- });
519
- }
520
- else {
521
- send(ws, { type: "error", error: `Conversation not found: ${convId}` });
522
- }
523
- break;
524
- }
525
- default:
526
- if (opts.verbose) {
527
- console.log("[serve] Unknown message type:", type);
528
- }
529
- break;
549
+ break;
550
+ case "get_conversations":
551
+ {
552
+ const storeId = msg.storeId;
553
+ const limit = msg.limit || 20;
554
+ if (!storeId) {
555
+ send(ws, {
556
+ type: "conversations",
557
+ conversations: []
558
+ });
559
+ break;
560
+ }
561
+ const convs = await listConversations(storeId, limit);
562
+ send(ws, {
563
+ type: "conversations",
564
+ conversations: convs
565
+ });
566
+ break;
530
567
  }
531
- });
532
- ws.on("close", () => {
533
- // Abort any running query when client disconnects
534
- if (session.abortController) {
535
- session.abortController.abort();
568
+ case "load_conversation":
569
+ {
570
+ const convId = msg.conversationId;
571
+ if (!convId) {
572
+ send(ws, {
573
+ type: "error",
574
+ error: "Missing conversationId"
575
+ });
576
+ break;
577
+ }
578
+ const conv = await loadConversation(convId);
579
+ if (conv) {
580
+ session.conversationId = conv.id;
581
+ send(ws, {
582
+ type: "conversation_loaded",
583
+ conversationId: conv.id,
584
+ title: conv.title,
585
+ messages: conv.messages
586
+ });
587
+ } else {
588
+ send(ws, {
589
+ type: "error",
590
+ error: `Conversation not found: ${convId}`
591
+ });
592
+ }
593
+ break;
536
594
  }
595
+ default:
537
596
  if (opts.verbose) {
538
- console.log("[serve] Client disconnected");
539
- }
540
- });
541
- ws.on("error", (err) => {
542
- console.error("[serve] WebSocket error:", err.message);
543
- if (session.abortController) {
544
- session.abortController.abort();
597
+ console.log("[serve] Unknown message type:", type);
545
598
  }
546
- });
599
+ break;
600
+ }
601
+ });
602
+ ws.on("close", () => {
603
+ // Abort any running query when client disconnects
604
+ if (session.abortController) {
605
+ session.abortController.abort();
606
+ }
607
+ if (opts.verbose) {
608
+ console.log("[serve] Client disconnected");
609
+ }
610
+ });
611
+ ws.on("error", err => {
612
+ console.error("[serve] WebSocket error:", err.message);
613
+ if (session.abortController) {
614
+ session.abortController.abort();
615
+ }
616
+ });
547
617
  }
618
+
548
619
  // ============================================================================
549
620
  // SERVER STARTUP
550
621
  // ============================================================================
622
+
551
623
  export async function runServeMode(opts) {
552
- // Apply global settings
553
- if (opts.model)
554
- setModel(opts.model);
555
- setPermissionMode(opts.permissionMode || "yolo");
556
- const port = opts.port;
557
- const host = opts.host;
558
- // HTTP server for health check + WebSocket upgrade
559
- const server = createServer((req, res) => {
560
- // Health check endpoint
561
- if (req.method === "GET" && (req.url === "/health" || req.url === "/")) {
562
- res.writeHead(200, { "Content-Type": "application/json" });
563
- res.end(JSON.stringify({
564
- status: "ok",
565
- version: PKG_VERSION,
566
- model: getModel(),
567
- port,
568
- uptime: Math.floor(process.uptime()),
569
- }));
570
- return;
571
- }
572
- // Everything else: 404
573
- res.writeHead(404, { "Content-Type": "application/json" });
574
- res.end(JSON.stringify({ error: "Not found. Connect via WebSocket." }));
624
+ // Apply global settings
625
+ if (opts.model) setModel(opts.model);
626
+ setPermissionMode(opts.permissionMode || "yolo");
627
+ const port = opts.port;
628
+ const host = opts.host;
629
+
630
+ // HTTP server for health check + WebSocket upgrade
631
+ const server = createServer((req, res) => {
632
+ // Health check endpoint
633
+ if (req.method === "GET" && (req.url === "/health" || req.url === "/")) {
634
+ res.writeHead(200, {
635
+ "Content-Type": "application/json"
636
+ });
637
+ res.end(JSON.stringify({
638
+ status: "ok",
639
+ version: PKG_VERSION,
640
+ model: getModel(),
641
+ port,
642
+ uptime: Math.floor(process.uptime())
643
+ }));
644
+ return;
645
+ }
646
+
647
+ // Everything else: 404
648
+ res.writeHead(404, {
649
+ "Content-Type": "application/json"
575
650
  });
576
- // WebSocket server
577
- const wss = new WebSocketServer({ server });
578
- wss.on("connection", (ws) => {
579
- handleConnection(ws, opts);
651
+ res.end(JSON.stringify({
652
+ error: "Not found. Connect via WebSocket."
653
+ }));
654
+ });
655
+
656
+ // WebSocket server
657
+ const wss = new WebSocketServer({
658
+ server
659
+ });
660
+ wss.on("connection", ws => {
661
+ handleConnection(ws, opts);
662
+ });
663
+
664
+ // Graceful shutdown
665
+ const shutdown = () => {
666
+ console.log("\n[serve] Shutting down...");
667
+ wss.clients.forEach(client => {
668
+ if (client.readyState === WebSocket.OPEN) {
669
+ client.close(1001, "Server shutting down");
670
+ }
580
671
  });
581
- // Graceful shutdown
582
- const shutdown = () => {
583
- console.log("\n[serve] Shutting down...");
584
- wss.clients.forEach((client) => {
585
- if (client.readyState === WebSocket.OPEN) {
586
- client.close(1001, "Server shutting down");
587
- }
588
- });
589
- server.close(() => {
590
- console.log("[serve] Server stopped.");
591
- process.exit(0);
592
- });
593
- // Force exit after 3s
594
- setTimeout(() => process.exit(0), 3000);
595
- };
596
- process.on("SIGINT", shutdown);
597
- process.on("SIGTERM", shutdown);
598
- // Verify Supabase connectivity (non-blocking)
599
- getSupabase().then((db) => {
600
- if (db) {
601
- console.log("[serve] Supabase connected — conversation persistence enabled");
602
- }
603
- else {
604
- console.log("[serve] Supabase not configured — conversations are session-only");
605
- }
672
+ server.close(() => {
673
+ console.log("[serve] Server stopped.");
674
+ process.exit(0);
606
675
  });
607
- // Start listening
608
- return new Promise((resolve, reject) => {
609
- server.on("error", (err) => {
610
- if (err.code === "EADDRINUSE") {
611
- console.error(`[serve] Port ${port} is already in use.`);
612
- console.error(`[serve] Try: whale serve --port ${port + 1}`);
613
- process.exit(1);
614
- }
615
- reject(err);
616
- });
617
- server.listen(port, host, () => {
618
- const d = "\x1b[2m";
619
- const B = "\x1b[1m";
620
- const r = "\x1b[0m";
621
- const c = "\x1b[38;2;99;102;241m";
622
- console.log();
623
- console.log(` ${c}${B}◆ whale serve${r} ${d}v${PKG_VERSION}${r}`);
624
- console.log();
625
- console.log(` ${B}WebSocket${r} ${d}ws://${host}:${port}${r}`);
626
- console.log(` ${B}Health${r} ${d}http://${host}:${port}/health${r}`);
627
- console.log(` ${B}Model${r} ${d}${getModel()}${r}`);
628
- console.log(` ${B}Mode${r} ${d}yolo (local server trusts local client)${r}`);
629
- console.log();
630
- console.log(` ${d}WhaleChat will auto-connect on port 3847${r}`);
631
- console.log(` ${d}Press Ctrl+C to stop${r}`);
632
- console.log();
633
- resolve();
634
- });
676
+ // Force exit after 3s
677
+ setTimeout(() => process.exit(0), 3000);
678
+ };
679
+ process.on("SIGINT", shutdown);
680
+ process.on("SIGTERM", shutdown);
681
+
682
+ // Verify Supabase connectivity (non-blocking)
683
+ getSupabase().then(db => {
684
+ if (db) {
685
+ console.log("[serve] Supabase connected — conversation persistence enabled");
686
+ } else {
687
+ console.log("[serve] Supabase not configured — conversations are session-only");
688
+ }
689
+ });
690
+
691
+ // Start listening
692
+ return new Promise((resolve, reject) => {
693
+ server.on("error", err => {
694
+ if (err.code === "EADDRINUSE") {
695
+ console.error(`[serve] Port ${port} is already in use.`);
696
+ console.error(`[serve] Try: whale serve --port ${port + 1}`);
697
+ process.exit(1);
698
+ }
699
+ reject(err);
700
+ });
701
+ server.listen(port, host, () => {
702
+ const d = "\x1b[2m";
703
+ const B = "\x1b[1m";
704
+ const r = "\x1b[0m";
705
+ const c = "\x1b[38;2;99;102;241m";
706
+ console.log();
707
+ console.log(` ${c}${B}◆ whale serve${r} ${d}v${PKG_VERSION}${r}`);
708
+ console.log();
709
+ console.log(` ${B}WebSocket${r} ${d}ws://${host}:${port}${r}`);
710
+ console.log(` ${B}Health${r} ${d}http://${host}:${port}/health${r}`);
711
+ console.log(` ${B}Model${r} ${d}${getModel()}${r}`);
712
+ console.log(` ${B}Mode${r} ${d}yolo (local server trusts local client)${r}`);
713
+ console.log();
714
+ console.log(` ${d}WhaleChat will auto-connect on port 3847${r}`);
715
+ console.log(` ${d}Press Ctrl+C to stop${r}`);
716
+ console.log();
717
+ resolve();
635
718
  });
719
+ });
636
720
  }
721
+ //# sourceMappingURL=serve-mode.js.map