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
@@ -6,264 +6,241 @@
6
6
  * - Bold key-value pairs for single objects
7
7
  * - JSON fences for complex nested data
8
8
  */
9
+
9
10
  // ============================================================================
10
11
  // COLUMN PRIORITIES — per tool category
11
12
  // ============================================================================
13
+
12
14
  const PRIORITY_COLUMNS = {
13
- analytics: ["name", "revenue", "quantity", "total", "count", "average", "period"],
14
- products: ["name", "sku", "status", "category_name", "cost_price", "stock_quantity"],
15
- inventory: ["product_name", "quantity", "location_name", "product_sku", "product_id"],
16
- customers: ["first_name", "last_name", "email", "phone", "status", "loyalty_tier"],
17
- orders: ["order_number", "status", "total", "customer_name", "created_at"],
18
- supply_chain: ["name", "status", "quantity", "supplier", "location", "expected_delivery_date"],
19
- workflows: ["name", "status", "trigger_type", "created_at", "last_run"],
20
- email: ["subject", "to", "status", "sent_at", "category"],
21
- locations: ["name", "city", "state", "type", "is_active", "address_line1"],
22
- media: ["title", "file_name", "category", "tags", "file_type"],
23
- creations: ["name", "creation_type", "status", "visibility", "slug"],
24
- api_keys: ["name", "key_type", "is_active", "scopes"],
15
+ analytics: ["name", "revenue", "quantity", "total", "count", "average", "period"],
16
+ products: ["name", "sku", "status", "category_name", "cost_price", "stock_quantity"],
17
+ inventory: ["product_name", "quantity", "location_name", "product_sku", "product_id"],
18
+ customers: ["first_name", "last_name", "email", "phone", "status", "loyalty_tier"],
19
+ orders: ["order_number", "status", "total", "customer_name", "created_at"],
20
+ supply_chain: ["name", "status", "quantity", "supplier", "location", "expected_delivery_date"],
21
+ workflows: ["name", "status", "trigger_type", "created_at", "last_run"],
22
+ email: ["subject", "to", "status", "sent_at", "category"],
23
+ locations: ["name", "city", "state", "type", "is_active", "address_line1"],
24
+ media: ["title", "file_name", "category", "tags", "file_type"],
25
+ creations: ["name", "creation_type", "status", "visibility", "slug"],
26
+ api_keys: ["name", "key_type", "is_active", "scopes"]
25
27
  };
28
+
26
29
  // Keys that are always deprioritized (shown last or hidden)
27
- const LOW_PRIORITY_KEYS = new Set([
28
- "id", "store_id", "created_at", "updated_at", "deleted_at",
29
- "created_by", "updated_by", "metadata", "raw_data",
30
- ]);
30
+ const LOW_PRIORITY_KEYS = new Set(["id", "store_id", "created_at", "updated_at", "deleted_at", "created_by", "updated_by", "metadata", "raw_data"]);
31
+
31
32
  // ============================================================================
32
33
  // FORMATTERS
33
34
  // ============================================================================
35
+
34
36
  function truncateUuid(val) {
35
- // UUID pattern: 8-4-4-4-12 hex chars
36
- if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val)) {
37
- return val.slice(0, 8);
38
- }
39
- return val;
37
+ // UUID pattern: 8-4-4-4-12 hex chars
38
+ if (/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(val)) {
39
+ return val.slice(0, 8);
40
+ }
41
+ return val;
40
42
  }
41
43
  function formatValue(val, key) {
42
- if (val === null || val === undefined)
43
- return "";
44
- if (typeof val === "boolean")
45
- return val ? "\u2713" : "\u2715";
46
- if (typeof val === "number") {
47
- if (key && isPercentageKey(key))
48
- return `${val}%`;
49
- return val.toLocaleString();
50
- }
51
- if (typeof val === "string") {
52
- // Money detection
53
- if (/^\d+\.\d{2}$/.test(val) && parseFloat(val) > 0) {
54
- return `$${parseFloat(val).toLocaleString(undefined, { minimumFractionDigits: 2 })}`;
55
- }
56
- // Keys the LLM needs verbatim (IDs, file paths, URLs) — skip all truncation
57
- if (key && NEVER_TRUNCATE_KEYS.has(key))
58
- return val;
59
- // UUID truncation for display-only columns
60
- const truncated = truncateUuid(val);
61
- // Date formatting
62
- if (/^\d{4}-\d{2}-\d{2}T/.test(val)) {
63
- return val.slice(0, 10);
64
- }
65
- // Truncate long strings
66
- if (truncated.length > 200)
67
- return truncated.slice(0, 197) + "...";
68
- return truncated;
44
+ if (val === null || val === undefined) return "—";
45
+ if (typeof val === "boolean") return val ? "\u2713" : "\u2715";
46
+ if (typeof val === "number") {
47
+ if (key && isPercentageKey(key)) return `${val}%`;
48
+ return val.toLocaleString();
49
+ }
50
+ if (typeof val === "string") {
51
+ // Money detection
52
+ if (/^\d+\.\d{2}$/.test(val) && parseFloat(val) > 0) {
53
+ return `$${parseFloat(val).toLocaleString(undefined, {
54
+ minimumFractionDigits: 2
55
+ })}`;
69
56
  }
70
- if (Array.isArray(val)) {
71
- if (val.length === 0)
72
- return "—";
73
- // Extract names from array of objects for useful display
74
- if (typeof val[0] === "object" && val[0] !== null) {
75
- const names = val.slice(0, 3)
76
- .map(v => {
77
- const o = v;
78
- return o.name || o.location_name || o.title || o.label;
79
- })
80
- .filter(Boolean)
81
- .map(String);
82
- if (names.length > 0) {
83
- return names.join(", ") + (val.length > 3 ? ` +${val.length - 3} more` : "");
84
- }
85
- }
86
- return `[${val.length} items]`;
57
+ // Keys the LLM needs verbatim (IDs, file paths, URLs) — skip all truncation
58
+ if (key && NEVER_TRUNCATE_KEYS.has(key)) return val;
59
+ // UUID truncation for display-only columns
60
+ const truncated = truncateUuid(val);
61
+ // Date formatting
62
+ if (/^\d{4}-\d{2}-\d{2}T/.test(val)) {
63
+ return val.slice(0, 10);
87
64
  }
88
- if (typeof val === "object") {
89
- const obj = val;
90
- // Extract name/title from nested objects instead of showing {...}
91
- if (typeof obj.name === "string")
92
- return obj.name;
93
- if (typeof obj.title === "string")
94
- return obj.title;
95
- if (typeof obj.label === "string")
96
- return obj.label;
97
- if (typeof obj.id === "string")
98
- return obj.id;
99
- return "{...}";
65
+ // Truncate long strings
66
+ if (truncated.length > 200) return truncated.slice(0, 197) + "...";
67
+ return truncated;
68
+ }
69
+ if (Array.isArray(val)) {
70
+ if (val.length === 0) return "";
71
+ // Extract names from array of objects for useful display
72
+ if (typeof val[0] === "object" && val[0] !== null) {
73
+ const names = val.slice(0, 3).map(v => {
74
+ const o = v;
75
+ return o.name || o.location_name || o.title || o.label;
76
+ }).filter(Boolean).map(String);
77
+ if (names.length > 0) {
78
+ return names.join(", ") + (val.length > 3 ? ` +${val.length - 3} more` : "");
79
+ }
100
80
  }
101
- return String(val);
81
+ return `[${val.length} items]`;
82
+ }
83
+ if (typeof val === "object") {
84
+ const obj = val;
85
+ // Extract name/title from nested objects instead of showing {...}
86
+ if (typeof obj.name === "string") return obj.name;
87
+ if (typeof obj.title === "string") return obj.title;
88
+ if (typeof obj.label === "string") return obj.label;
89
+ if (typeof obj.id === "string") return obj.id;
90
+ return "{...}";
91
+ }
92
+ return String(val);
102
93
  }
94
+
103
95
  /** Keys whose values must never be truncated (file paths, URLs, IDs the LLM needs verbatim) */
104
- const NEVER_TRUNCATE_KEYS = new Set([
105
- "id", "product_id", "category_id", "location_id", "supplier_id", "customer_id",
106
- "store_id", "order_id", "workflow_id", "schema_id", "field_schema_id", "pricing_schema_id",
107
- "transfer_id", "run_id", "step_id", "audit_id", "media_id", "creation_id", "job_id",
108
- "collection_id", "source_id", "thread_id", "form_id", "template_id", "webhook_id",
109
- "rule_id", "subscription_id", "span_id", "trace_id", "ad_id", "ad_set_id", "campaign_id",
110
- "audience_id", "pixel_id", "key_id", "catalog_id", "purchase_order_id",
111
- "primary_category_id", "parent_id", "from_location_id", "to_location_id",
112
- "local_file", "file_url", "file_path", "download", "url",
113
- "preview_url", "thumbnail_url", "audio_file",
114
- "stdout", "stderr", "command", "output",
115
- ]);
96
+ const NEVER_TRUNCATE_KEYS = new Set(["id", "product_id", "category_id", "location_id", "supplier_id", "customer_id", "store_id", "order_id", "workflow_id", "schema_id", "field_schema_id", "pricing_schema_id", "transfer_id", "run_id", "step_id", "audit_id", "media_id", "creation_id", "job_id", "collection_id", "source_id", "thread_id", "form_id", "template_id", "webhook_id", "rule_id", "subscription_id", "span_id", "trace_id", "ad_id", "ad_set_id", "campaign_id", "audience_id", "pixel_id", "key_id", "catalog_id", "purchase_order_id", "primary_category_id", "parent_id", "from_location_id", "to_location_id", "local_file", "file_url", "file_path", "download", "url", "preview_url", "thumbnail_url", "audio_file", "stdout", "stderr", "command", "output"]);
116
97
  function formatMoneyValue(val) {
117
- if (typeof val === "number") {
118
- return `$${val.toLocaleString(undefined, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;
119
- }
120
- return formatValue(val);
98
+ if (typeof val === "number") {
99
+ return `$${val.toLocaleString(undefined, {
100
+ minimumFractionDigits: 2,
101
+ maximumFractionDigits: 2
102
+ })}`;
103
+ }
104
+ return formatValue(val);
121
105
  }
122
106
  function isPercentageKey(key) {
123
- return /percentage|_pct$|percent/i.test(key);
107
+ return /percentage|_pct$|percent/i.test(key);
124
108
  }
125
109
  function isMoneyKey(key) {
126
- // Bare "total" is almost always a count, not money. Only "total_revenue", "total_amount" etc. are money.
127
- if (key === "total")
128
- return false;
129
- // Exclude "total_" when followed by non-money qualifiers
130
- if (/^total[_](stock|products|items|orders|units|count|quantity|customers|runs|pages|results|employees)/i.test(key))
131
- return false;
132
- return /price|cost|revenue|total_revenue|total_amount|amount|subtotal|tax|discount|budget/i.test(key);
110
+ // Bare "total" is almost always a count, not money. Only "total_revenue", "total_amount" etc. are money.
111
+ if (key === "total") return false;
112
+ // Exclude "total_" when followed by non-money qualifiers
113
+ if (/^total[_](stock|products|items|orders|units|count|quantity|customers|runs|pages|results|employees)/i.test(key)) return false;
114
+ return /price|cost|revenue|total_revenue|total_amount|amount|subtotal|tax|discount|budget/i.test(key);
133
115
  }
134
116
  function prettifyKey(key) {
135
- return key
136
- .replace(/_/g, " ")
137
- .replace(/\bid\b/gi, "ID")
138
- .replace(/\b\w/g, c => c.toUpperCase());
117
+ return key.replace(/_/g, " ").replace(/\bid\b/gi, "ID").replace(/\b\w/g, c => c.toUpperCase());
139
118
  }
119
+
140
120
  // ============================================================================
141
121
  // COLUMN SELECTION
142
122
  // ============================================================================
123
+
143
124
  function selectColumns(rows, toolName) {
144
- if (rows.length === 0)
145
- return [];
146
- // Collect all keys from first few rows
147
- const allKeys = new Set();
148
- for (const row of rows.slice(0, 5)) {
149
- for (const key of Object.keys(row))
150
- allKeys.add(key);
125
+ if (rows.length === 0) return [];
126
+
127
+ // Collect all keys from first few rows
128
+ const allKeys = new Set();
129
+ for (const row of rows.slice(0, 5)) {
130
+ for (const key of Object.keys(row)) allKeys.add(key);
131
+ }
132
+
133
+ // Find matching priority list
134
+ const termWidth = process.stdout.columns || 80;
135
+ const maxCols = termWidth < 90 ? 4 : termWidth < 120 ? 6 : termWidth < 160 ? 8 : 10;
136
+ let priority = [];
137
+ if (toolName) {
138
+ // Match tool name to category
139
+ for (const [category, cols] of Object.entries(PRIORITY_COLUMNS)) {
140
+ if (toolName.toLowerCase().includes(category)) {
141
+ priority = cols;
142
+ break;
143
+ }
151
144
  }
152
- // Find matching priority list
153
- const termWidth = process.stdout.columns || 80;
154
- const maxCols = termWidth < 90 ? 4 : termWidth < 120 ? 6 : termWidth < 160 ? 8 : 10;
155
- let priority = [];
156
- if (toolName) {
157
- // Match tool name to category
158
- for (const [category, cols] of Object.entries(PRIORITY_COLUMNS)) {
159
- if (toolName.toLowerCase().includes(category)) {
160
- priority = cols;
161
- break;
162
- }
163
- }
164
- }
165
- // Build ordered column list: priority first, then remaining non-low-priority
166
- const selected = [];
167
- for (const col of priority) {
168
- if (allKeys.has(col) && selected.length < maxCols) {
169
- selected.push(col);
170
- }
171
- }
172
- // Fill remaining slots with non-priority, non-low-priority keys
173
- for (const key of allKeys) {
174
- if (selected.length >= maxCols)
175
- break;
176
- if (selected.includes(key))
177
- continue;
178
- if (LOW_PRIORITY_KEYS.has(key))
179
- continue;
180
- // Skip arrays and nested objects from table columns — they don't render well
181
- // in fixed-width tables. Nested objects show as "{...}" which is not useful.
182
- const sample = rows[0][key];
183
- if (Array.isArray(sample))
184
- continue;
185
- if (typeof sample === "object" && sample !== null)
186
- continue;
187
- selected.push(key);
145
+ }
146
+
147
+ // Build ordered column list: priority first, then remaining non-low-priority
148
+ const selected = [];
149
+ for (const col of priority) {
150
+ if (allKeys.has(col) && selected.length < maxCols) {
151
+ selected.push(col);
188
152
  }
189
- return selected;
153
+ }
154
+
155
+ // Fill remaining slots with non-priority, non-low-priority keys
156
+ for (const key of allKeys) {
157
+ if (selected.length >= maxCols) break;
158
+ if (selected.includes(key)) continue;
159
+ if (LOW_PRIORITY_KEYS.has(key)) continue;
160
+ // Skip arrays and nested objects from table columns — they don't render well
161
+ // in fixed-width tables. Nested objects show as "{...}" which is not useful.
162
+ const sample = rows[0][key];
163
+ if (Array.isArray(sample)) continue;
164
+ if (typeof sample === "object" && sample !== null) continue;
165
+ selected.push(key);
166
+ }
167
+ return selected;
190
168
  }
169
+
191
170
  // ============================================================================
192
171
  // TABLE BUILDER
193
172
  // ============================================================================
173
+
194
174
  function buildTable(rows, columns) {
195
- if (columns.length === 0 || rows.length === 0)
196
- return "";
197
- const headers = columns.map(prettifyKey);
198
- // Calculate column widths — dynamic cap based on terminal width and column count
199
- const termW = process.stdout.columns || 80;
200
- // Each column gets a fair share of available space (minus separators + borders)
201
- const overhead = columns.length * 3 + 4; // " | " between cols + "| " and " |"
202
- const cellCap = Math.min(Math.max(Math.floor((termW - overhead) / columns.length), 15), 50);
203
- const widths = columns.map((col, i) => {
204
- let max = headers[i].length;
205
- for (const row of rows) {
206
- const val = isMoneyKey(col) ? formatMoneyValue(row[col]) : formatValue(row[col], col);
207
- max = Math.max(max, val.length);
208
- }
209
- return Math.min(max, cellCap);
210
- });
211
- // Header row
212
- const headerRow = columns.map((_, i) => headers[i].padEnd(widths[i])).join(" | ");
213
- const separator = widths.map(w => "-".repeat(w)).join(" | ");
214
- // Data rows
215
- const dataRows = rows.map(row => columns.map((col, i) => {
216
- const val = isMoneyKey(col) ? formatMoneyValue(row[col]) : formatValue(row[col], col);
217
- // Right-align numbers and money
218
- const isNum = typeof row[col] === "number" || isMoneyKey(col);
219
- return isNum ? val.padStart(widths[i]) : val.padEnd(widths[i]);
220
- }).join(" | "));
221
- return [
222
- `| ${headerRow} |`,
223
- `| ${separator} |`,
224
- ...dataRows.map(r => `| ${r} |`),
225
- ].join("\n");
175
+ if (columns.length === 0 || rows.length === 0) return "";
176
+ const headers = columns.map(prettifyKey);
177
+
178
+ // Calculate column widths — dynamic cap based on terminal width and column count
179
+ const termW = process.stdout.columns || 80;
180
+ // Each column gets a fair share of available space (minus separators + borders)
181
+ const overhead = columns.length * 3 + 4; // " | " between cols + "| " and " |"
182
+ const cellCap = Math.min(Math.max(Math.floor((termW - overhead) / columns.length), 15), 50);
183
+ const widths = columns.map((col, i) => {
184
+ let max = headers[i].length;
185
+ for (const row of rows) {
186
+ const val = isMoneyKey(col) ? formatMoneyValue(row[col]) : formatValue(row[col], col);
187
+ max = Math.max(max, val.length);
188
+ }
189
+ return Math.min(max, cellCap);
190
+ });
191
+
192
+ // Header row
193
+ const headerRow = columns.map((_, i) => headers[i].padEnd(widths[i])).join(" | ");
194
+ const separator = widths.map(w => "-".repeat(w)).join(" | ");
195
+
196
+ // Data rows
197
+ const dataRows = rows.map(row => columns.map((col, i) => {
198
+ const val = isMoneyKey(col) ? formatMoneyValue(row[col]) : formatValue(row[col], col);
199
+ // Right-align numbers and money
200
+ const isNum = typeof row[col] === "number" || isMoneyKey(col);
201
+ return isNum ? val.padStart(widths[i]) : val.padEnd(widths[i]);
202
+ }).join(" | "));
203
+ return [`| ${headerRow} |`, `| ${separator} |`, ...dataRows.map(r => `| ${r} |`)].join("\n");
226
204
  }
205
+
227
206
  // ============================================================================
228
207
  // ID REFERENCE — gives the LLM full UUIDs for follow-up calls
229
208
  // ============================================================================
209
+
230
210
  /** After a table, append a compact name→UUID mapping so the LLM can reference IDs */
231
211
  function buildIdReference(rows) {
232
- if (rows.length === 0)
233
- return "";
234
- // Find the primary ID column — prefer 'id', fall back to 'product_id', 'customer_id', etc.
235
- const idKey = ["id", "product_id", "customer_id", "order_id", "workflow_id"]
236
- .find(k => rows.some(r => r[k] && typeof r[k] === "string"));
237
- if (!idKey)
238
- return "";
239
- // Find a human-readable label key
240
- const nameKey = ["name", "product_name", "first_name", "title", "subject", "label", "slug", "order_number"]
241
- .find(k => rows[0][k] !== undefined) || null;
242
- const entries = [];
243
- for (const row of rows) {
244
- const idVal = row[idKey];
245
- if (!idVal || typeof idVal !== "string")
246
- continue;
247
- const label = nameKey && row[nameKey] ? String(row[nameKey]) : String(idVal).slice(0, 8);
248
- entries.push(`${label}=${idVal}`);
249
- }
250
- if (entries.length === 0)
251
- return "";
252
- return `\nIDs: ${entries.join(", ")}`;
212
+ if (rows.length === 0) return "";
213
+
214
+ // Find the primary ID column — prefer 'id', fall back to 'product_id', 'customer_id', etc.
215
+ const idKey = ["id", "product_id", "customer_id", "order_id", "workflow_id"].find(k => rows.some(r => r[k] && typeof r[k] === "string"));
216
+ if (!idKey) return "";
217
+
218
+ // Find a human-readable label key
219
+ const nameKey = ["name", "product_name", "first_name", "title", "subject", "label", "slug", "order_number"].find(k => rows[0][k] !== undefined) || null;
220
+ const entries = [];
221
+ for (const row of rows) {
222
+ const idVal = row[idKey];
223
+ if (!idVal || typeof idVal !== "string") continue;
224
+ const label = nameKey && row[nameKey] ? String(row[nameKey]) : String(idVal).slice(0, 8);
225
+ entries.push(`${label}=${idVal}`);
226
+ }
227
+ if (entries.length === 0) return "";
228
+ return `\nIDs: ${entries.join(", ")}`;
253
229
  }
230
+
254
231
  // ============================================================================
255
232
  // MAIN FORMATTER
256
233
  // ============================================================================
234
+
257
235
  function detectToolCategory(toolName) {
258
- if (!toolName)
259
- return undefined;
260
- const name = toolName.toLowerCase();
261
- for (const category of Object.keys(PRIORITY_COLUMNS)) {
262
- if (name.includes(category))
263
- return category;
264
- }
265
- return undefined;
236
+ if (!toolName) return undefined;
237
+ const name = toolName.toLowerCase();
238
+ for (const category of Object.keys(PRIORITY_COLUMNS)) {
239
+ if (name.includes(category)) return category;
240
+ }
241
+ return undefined;
266
242
  }
243
+
267
244
  /**
268
245
  * Format a server tool response as readable markdown.
269
246
  *
@@ -272,175 +249,158 @@ function detectToolCategory(toolName) {
272
249
  * @returns Formatted markdown string
273
250
  */
274
251
  export function formatServerResponse(data, toolName) {
275
- // String passthrough
276
- if (typeof data === "string")
277
- return data;
278
- // Shell execution tools (local_agent, kali) — stdout is the main content
279
- if (toolName && (toolName === "local_agent" || toolName === "kali") && typeof data === "object" && data !== null && !Array.isArray(data)) {
280
- const obj = data;
281
- if ("stdout" in obj || "stderr" in obj || "exit_code" in obj) {
282
- const stdout = String(obj.stdout || "").trim();
283
- const stderr = String(obj.stderr || "").trim();
284
- const exitCode = obj.exit_code;
285
- const durationMs = obj.duration_ms;
286
- // For successful commands, show stdout as primary output (like bash tool)
287
- if (exitCode === 0 && stdout) {
288
- const parts = [stdout];
289
- if (stderr)
290
- parts.push(`\n**Stderr**: ${stderr}`);
291
- // Compact metadata footer
292
- const meta = [];
293
- if (durationMs !== undefined)
294
- meta.push(`${durationMs}ms`);
295
- if (obj.cwd)
296
- meta.push(`cwd: ${obj.cwd}`);
297
- if (meta.length > 0)
298
- parts.push(`\n*${meta.join(" | ")}*`);
299
- return parts.join("\n");
300
- }
301
- // For errors or no-stdout results, show structured output
302
- const lines = [];
303
- if (obj.error)
304
- lines.push(`**Error**: ${String(obj.error)}`);
305
- if (exitCode !== undefined && exitCode !== 0)
306
- lines.push(`**Exit Code**: ${exitCode}`);
307
- if (stdout)
308
- lines.push(stdout);
309
- if (stderr)
310
- lines.push(`**Stderr**: ${stderr}`);
311
- if (obj.killed)
312
- lines.push(`**Killed**: process was terminated`);
313
- if (durationMs !== undefined)
314
- lines.push(`*${durationMs}ms${obj.cwd ? ` | cwd: ${obj.cwd}` : ""}*`);
315
- return lines.join("\n") || "Command completed with no output.";
316
- }
252
+ // String passthrough
253
+ if (typeof data === "string") return data;
254
+
255
+ // Shell execution tools (local_agent, kali) — stdout is the main content
256
+ if (toolName && (toolName === "local_agent" || toolName === "kali") && typeof data === "object" && data !== null && !Array.isArray(data)) {
257
+ const obj = data;
258
+ if ("stdout" in obj || "stderr" in obj || "exit_code" in obj) {
259
+ const stdout = String(obj.stdout || "").trim();
260
+ const stderr = String(obj.stderr || "").trim();
261
+ const exitCode = obj.exit_code;
262
+ const durationMs = obj.duration_ms;
263
+
264
+ // For successful commands, show stdout as primary output (like bash tool)
265
+ if (exitCode === 0 && stdout) {
266
+ const parts = [stdout];
267
+ if (stderr) parts.push(`\n**Stderr**: ${stderr}`);
268
+ // Compact metadata footer
269
+ const meta = [];
270
+ if (durationMs !== undefined) meta.push(`${durationMs}ms`);
271
+ if (obj.cwd) meta.push(`cwd: ${obj.cwd}`);
272
+ if (meta.length > 0) parts.push(`\n*${meta.join(" | ")}*`);
273
+ return parts.join("\n");
274
+ }
275
+
276
+ // For errors or no-stdout results, show structured output
277
+ const lines = [];
278
+ if (obj.error) lines.push(`**Error**: ${String(obj.error)}`);
279
+ if (exitCode !== undefined && exitCode !== 0) lines.push(`**Exit Code**: ${exitCode}`);
280
+ if (stdout) lines.push(stdout);
281
+ if (stderr) lines.push(`**Stderr**: ${stderr}`);
282
+ if (obj.killed) lines.push(`**Killed**: process was terminated`);
283
+ if (durationMs !== undefined) lines.push(`*${durationMs}ms${obj.cwd ? ` | cwd: ${obj.cwd}` : ""}*`);
284
+ return lines.join("\n") || "Command completed with no output.";
317
285
  }
318
- // Null/undefined
319
- if (data === null || data === undefined)
320
- return "No data returned.";
321
- // Empty array
322
- if (Array.isArray(data) && data.length === 0)
323
- return "No results found.";
324
- // Array of flat objects markdown table
325
- if (Array.isArray(data) && data.length > 0 && typeof data[0] === "object" && data[0] !== null) {
326
- const rows = data;
327
- const columns = selectColumns(rows, toolName);
328
- if (columns.length > 0) {
329
- const category = detectToolCategory(toolName);
330
- const label = category ? prettifyKey(category) : "Results";
331
- const header = `**${label}** (${rows.length} result${rows.length !== 1 ? "s" : ""})`;
332
- const table = buildTable(rows, columns);
333
- const idRef = buildIdReference(rows);
334
- return `${header}\n\n${table}${idRef}`;
335
- }
286
+ }
287
+
288
+ // Null/undefined
289
+ if (data === null || data === undefined) return "No data returned.";
290
+
291
+ // Empty array
292
+ if (Array.isArray(data) && data.length === 0) return "No results found.";
293
+
294
+ // Array of flat objects → markdown table
295
+ if (Array.isArray(data) && data.length > 0 && typeof data[0] === "object" && data[0] !== null) {
296
+ const rows = data;
297
+ const columns = selectColumns(rows, toolName);
298
+ if (columns.length > 0) {
299
+ const category = detectToolCategory(toolName);
300
+ const label = category ? prettifyKey(category) : "Results";
301
+ const header = `**${label}** (${rows.length} result${rows.length !== 1 ? "s" : ""})`;
302
+ const table = buildTable(rows, columns);
303
+ const idRef = buildIdReference(rows);
304
+ return `${header}\n\n${table}${idRef}`;
336
305
  }
337
- // Single object → bold key-value pairs + expand nested arrays as sub-tables
338
- if (typeof data === "object" && data !== null && !Array.isArray(data)) {
339
- const obj = data;
340
- const scalarEntries = Object.entries(obj)
341
- .filter(([key, val]) => {
342
- if (LOW_PRIORITY_KEYS.has(key) && key !== "id")
343
- return false;
344
- return typeof val !== "object" || val === null;
306
+ }
307
+
308
+ // Single object → bold key-value pairs + expand nested arrays as sub-tables
309
+ if (typeof data === "object" && data !== null && !Array.isArray(data)) {
310
+ const obj = data;
311
+ const scalarEntries = Object.entries(obj).filter(([key, val]) => {
312
+ if (LOW_PRIORITY_KEYS.has(key) && key !== "id") return false;
313
+ return typeof val !== "object" || val === null;
314
+ });
315
+ // Nested objects (e.g. supplier, customer, profile joins) — extract their scalar fields
316
+ const nestedObjectEntries = Object.entries(obj).filter(([key, val]) => {
317
+ if (LOW_PRIORITY_KEYS.has(key)) return false;
318
+ return typeof val === "object" && val !== null && !Array.isArray(val);
319
+ });
320
+ const arrayEntries = Object.entries(obj).filter(([, val]) => Array.isArray(val) && val.length > 0 && typeof val[0] === "object");
321
+ if (scalarEntries.length > 0 || nestedObjectEntries.length > 0 || arrayEntries.length > 0) {
322
+ const parts = [];
323
+
324
+ // Scalar key-value pairs (with pagination awareness)
325
+ if (scalarEntries.length > 0 && scalarEntries.length <= 20) {
326
+ const hasPagination = typeof obj.total === "number" && typeof obj.count === "number";
327
+ const filteredScalars = scalarEntries.filter(([key]) => {
328
+ if (!hasPagination) return true;
329
+ // Skip raw pagination fields — shown as "Showing X of Y" instead
330
+ if (key === "count" || key === "offset" || key === "limit") return false;
331
+ return true;
345
332
  });
346
- // Nested objects (e.g. supplier, customer, profile joins) extract their scalar fields
347
- const nestedObjectEntries = Object.entries(obj)
348
- .filter(([key, val]) => {
349
- if (LOW_PRIORITY_KEYS.has(key))
350
- return false;
351
- return typeof val === "object" && val !== null && !Array.isArray(val);
333
+ const scalarLines = filteredScalars.map(([key, val]) => {
334
+ // Replace "total" with "Showing X of Y" when pagination data exists
335
+ if (hasPagination && key === "total" && typeof val === "number" && val > obj.count) {
336
+ return `**Showing**: ${obj.count} of ${val}`;
337
+ }
338
+ const fmtVal = isMoneyKey(key) ? formatMoneyValue(val) : formatValue(val, key);
339
+ return `**${prettifyKey(key)}**: ${fmtVal}`;
352
340
  });
353
- const arrayEntries = Object.entries(obj)
354
- .filter(([, val]) => Array.isArray(val) && val.length > 0 &&
355
- typeof val[0] === "object");
356
- if (scalarEntries.length > 0 || nestedObjectEntries.length > 0 || arrayEntries.length > 0) {
357
- const parts = [];
358
- // Scalar key-value pairs (with pagination awareness)
359
- if (scalarEntries.length > 0 && scalarEntries.length <= 20) {
360
- const hasPagination = typeof obj.total === "number" && typeof obj.count === "number";
361
- const filteredScalars = scalarEntries.filter(([key]) => {
362
- if (!hasPagination)
363
- return true;
364
- // Skip raw pagination fields — shown as "Showing X of Y" instead
365
- if (key === "count" || key === "offset" || key === "limit")
366
- return false;
367
- return true;
368
- });
369
- const scalarLines = filteredScalars.map(([key, val]) => {
370
- // Replace "total" with "Showing X of Y" when pagination data exists
371
- if (hasPagination && key === "total" && typeof val === "number" && val > obj.count) {
372
- return `**Showing**: ${obj.count} of ${val}`;
373
- }
374
- const fmtVal = isMoneyKey(key) ? formatMoneyValue(val) : formatValue(val, key);
375
- return `**${prettifyKey(key)}**: ${fmtVal}`;
376
- });
377
- if (scalarLines.length > 0)
378
- parts.push(scalarLines.join("\n"));
379
- }
380
- // Nested objects — expand their scalar fields with parent key prefix
381
- for (const [key, val] of nestedObjectEntries) {
382
- const nested = val;
383
- const nestedScalars = Object.entries(nested)
384
- .filter(([k, v]) => !LOW_PRIORITY_KEYS.has(k) && (typeof v !== "object" || v === null));
385
- if (nestedScalars.length > 0 && nestedScalars.length <= 10) {
386
- const prefix = prettifyKey(key);
387
- const lines = nestedScalars.map(([k, v]) => {
388
- const fmtVal = isMoneyKey(k) ? formatMoneyValue(v) : formatValue(v, k);
389
- return `**${prefix} ${prettifyKey(k)}**: ${fmtVal}`;
390
- });
391
- parts.push(lines.join("\n"));
392
- }
393
- }
394
- // Nested arrays as sub-tables (e.g. by_location, items, steps)
395
- for (const [key, val] of arrayEntries) {
396
- const rows = val;
397
- // Use toolName for priority matching when the key is generic ("data", "results", etc.)
398
- const colHint = ["data", "results", "items", "rows", "records"].includes(key) ? toolName : key;
399
- const columns = selectColumns(rows, colHint);
400
- if (columns.length > 0) {
401
- const table = buildTable(rows, columns);
402
- const idRef = buildIdReference(rows);
403
- parts.push(`\n**${prettifyKey(key)}** (${rows.length}):\n${table}${idRef}`);
404
- }
405
- }
406
- if (parts.length > 0)
407
- return parts.join("\n");
341
+ if (scalarLines.length > 0) parts.push(scalarLines.join("\n"));
342
+ }
343
+
344
+ // Nested objects expand their scalar fields with parent key prefix
345
+ for (const [key, val] of nestedObjectEntries) {
346
+ const nested = val;
347
+ const nestedScalars = Object.entries(nested).filter(([k, v]) => !LOW_PRIORITY_KEYS.has(k) && (typeof v !== "object" || v === null));
348
+ if (nestedScalars.length > 0 && nestedScalars.length <= 10) {
349
+ const prefix = prettifyKey(key);
350
+ const lines = nestedScalars.map(([k, v]) => {
351
+ const fmtVal = isMoneyKey(k) ? formatMoneyValue(v) : formatValue(v, k);
352
+ return `**${prefix} ${prettifyKey(k)}**: ${fmtVal}`;
353
+ });
354
+ parts.push(lines.join("\n"));
355
+ }
356
+ }
357
+
358
+ // Nested arrays as sub-tables (e.g. by_location, items, steps)
359
+ for (const [key, val] of arrayEntries) {
360
+ const rows = val;
361
+ // Use toolName for priority matching when the key is generic ("data", "results", etc.)
362
+ const colHint = ["data", "results", "items", "rows", "records"].includes(key) ? toolName : key;
363
+ const columns = selectColumns(rows, colHint);
364
+ if (columns.length > 0) {
365
+ const table = buildTable(rows, columns);
366
+ const idRef = buildIdReference(rows);
367
+ parts.push(`\n**${prettifyKey(key)}** (${rows.length}):\n${table}${idRef}`);
408
368
  }
369
+ }
370
+ if (parts.length > 0) return parts.join("\n");
409
371
  }
410
- // Object with a data/results/items array (common API wrapper pattern)
411
- if (typeof data === "object" && data !== null && !Array.isArray(data)) {
412
- const obj = data;
413
- for (const key of ["data", "results", "items", "rows", "records"]) {
414
- if (Array.isArray(obj[key]) && obj[key].length > 0) {
415
- // Format the nested array and prepend any summary fields
416
- const summaryFields = [];
417
- for (const [k, v] of Object.entries(obj)) {
418
- if (k === key)
419
- continue;
420
- if (typeof v !== "object" || v === null) {
421
- // Show total/offset/limit for pagination context
422
- if (k === "total" && typeof v === "number" && typeof obj.count === "number" && v > obj.count) {
423
- summaryFields.push(`**Showing**: ${obj.count} of ${v}`);
424
- }
425
- else if (k === "count" && obj.total !== undefined) {
426
- continue; // skip count when total is present (shown in "Showing X of Y")
427
- }
428
- else if (k === "offset" || k === "limit") {
429
- continue; // skip raw pagination params
430
- }
431
- else {
432
- summaryFields.push(`**${prettifyKey(k)}**: ${formatValue(v, k)}`);
433
- }
434
- }
435
- }
436
- const arrayResult = formatServerResponse(obj[key], toolName);
437
- return summaryFields.length > 0
438
- ? `${summaryFields.join(" | ")}\n\n${arrayResult}`
439
- : arrayResult;
372
+ }
373
+
374
+ // Object with a data/results/items array (common API wrapper pattern)
375
+ if (typeof data === "object" && data !== null && !Array.isArray(data)) {
376
+ const obj = data;
377
+ for (const key of ["data", "results", "items", "rows", "records"]) {
378
+ if (Array.isArray(obj[key]) && obj[key].length > 0) {
379
+ // Format the nested array and prepend any summary fields
380
+ const summaryFields = [];
381
+ for (const [k, v] of Object.entries(obj)) {
382
+ if (k === key) continue;
383
+ if (typeof v !== "object" || v === null) {
384
+ // Show total/offset/limit for pagination context
385
+ if (k === "total" && typeof v === "number" && typeof obj.count === "number" && v > obj.count) {
386
+ summaryFields.push(`**Showing**: ${obj.count} of ${v}`);
387
+ } else if (k === "count" && obj.total !== undefined) {
388
+ continue; // skip count when total is present (shown in "Showing X of Y")
389
+ } else if (k === "offset" || k === "limit") {
390
+ continue; // skip raw pagination params
391
+ } else {
392
+ summaryFields.push(`**${prettifyKey(k)}**: ${formatValue(v, k)}`);
440
393
  }
394
+ }
441
395
  }
396
+ const arrayResult = formatServerResponse(obj[key], toolName);
397
+ return summaryFields.length > 0 ? `${summaryFields.join(" | ")}\n\n${arrayResult}` : arrayResult;
398
+ }
442
399
  }
443
- // Fallback: JSON fence
444
- const json = JSON.stringify(data, null, 2);
445
- return "```json\n" + json + "\n```";
400
+ }
401
+
402
+ // Fallback: JSON fence
403
+ const json = JSON.stringify(data, null, 2);
404
+ return "```json\n" + json + "\n```";
446
405
  }
406
+ //# sourceMappingURL=format-server-response.js.map