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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-manager.js","names":["readFileSync","writeFileSync","existsSync","mkdirSync","MEMORY_DIR","MEMORY_FILE","ensureDataDir","ensureMemoryDir","recursive","loadMemory","trim","addMemory","fact","existing","entry","includes","success","message","updated","removeMemory","pattern","content","lines","split","lower","toLowerCase","filtered","filter","line","length","removed","join","listMemories","l","startsWith","map","replace"],"sources":["../../../src/cli/services/memory-manager.ts"],"sourcesContent":["/**\n * Memory Manager — persistent /remember and /forget across sessions\n *\n * Extracted from agent-loop.ts for single-responsibility.\n * All consumers should import from agent-loop.ts (re-export facade).\n */\n\nimport { readFileSync, writeFileSync, existsSync, mkdirSync } from \"fs\";\nimport { MEMORY_DIR, MEMORY_FILE, ensureDataDir } from \"./paths.js\";\n\nfunction ensureMemoryDir(): void {\n ensureDataDir();\n if (!existsSync(MEMORY_DIR)) mkdirSync(MEMORY_DIR, { recursive: true });\n}\n\nexport function loadMemory(): string {\n if (!existsSync(MEMORY_FILE)) return \"\";\n try {\n return readFileSync(MEMORY_FILE, \"utf-8\").trim();\n } catch { return \"\"; }\n}\n\nexport function addMemory(fact: string): { success: boolean; message: string } {\n ensureMemoryDir();\n const existing = loadMemory();\n const entry = `- ${fact}`;\n\n // Check for duplicate\n if (existing.includes(fact)) {\n return { success: false, message: \"Already remembered.\" };\n }\n\n const updated = existing ? existing + \"\\n\" + entry : entry;\n writeFileSync(MEMORY_FILE, updated + \"\\n\", \"utf-8\");\n return { success: true, message: `Remembered: ${fact}` };\n}\n\nexport function removeMemory(pattern: string): { success: boolean; message: string } {\n if (!existsSync(MEMORY_FILE)) return { success: false, message: \"No memories stored.\" };\n\n const content = readFileSync(MEMORY_FILE, \"utf-8\");\n const lines = content.split(\"\\n\");\n const lower = pattern.toLowerCase();\n const filtered = lines.filter(line => !line.toLowerCase().includes(lower));\n\n if (filtered.length === lines.length) {\n return { success: false, message: `No memory matching \"${pattern}\" found.` };\n }\n\n const removed = lines.length - filtered.length;\n writeFileSync(MEMORY_FILE, filtered.join(\"\\n\"), \"utf-8\");\n return { success: true, message: `Forgot ${removed} memor${removed === 1 ? \"y\" : \"ies\"} matching \"${pattern}\".` };\n}\n\nexport function listMemories(): string[] {\n const content = loadMemory();\n if (!content) return [];\n return content.split(\"\\n\").filter(l => l.trim().startsWith(\"- \")).map(l => l.replace(/^- /, \"\").trim());\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,68 +4,83 @@
4
4
  * Extracted from agent-loop.ts for single-responsibility.
5
5
  * All consumers should import from agent-loop.ts (re-export facade).
6
6
  */
7
+
7
8
  import { MODEL_MAP } from "../../shared/constants.js";
8
9
  import { estimateCostUsd as coreEstimateCostUsd } from "../../shared/agent-core.js";
9
10
  import { loadConfig, updateConfig } from "./config-store.js";
11
+
10
12
  /** CLI-only: current model ID for the active session */
11
13
  let activeModel = "claude-opus-4-6";
14
+
12
15
  // Load persisted default model on import
13
16
  try {
14
- const cfg = loadConfig();
15
- if (cfg.default_model) {
16
- const id = MODEL_MAP[cfg.default_model.toLowerCase()];
17
- if (id)
18
- activeModel = id;
19
- }
20
- }
21
- catch { /* use default */ }
17
+ const cfg = loadConfig();
18
+ if (cfg.default_model) {
19
+ const id = MODEL_MAP[cfg.default_model.toLowerCase()];
20
+ if (id) activeModel = id;
21
+ }
22
+ } catch {/* use default */}
23
+
22
24
  /** Reverse map: full model ID → short key */
23
25
  const REVERSE_MAP = {};
24
26
  for (const [key, id] of Object.entries(MODEL_MAP)) {
25
- REVERSE_MAP[id] = key;
27
+ REVERSE_MAP[id] = key;
26
28
  }
27
29
  export function setModel(name, persist = true) {
28
- // Try direct key match first (e.g. "opus", "bedrock-sonnet", "gemini-pro")
29
- const directId = MODEL_MAP[name.toLowerCase()];
30
- if (directId) {
31
- activeModel = directId;
32
- if (persist)
33
- try {
34
- updateConfig({ default_model: name.toLowerCase() });
35
- }
36
- catch { /* best effort */ }
37
- return { success: true, model: activeModel };
38
- }
39
- // Legacy: strip "claude-" prefix for backward compat (e.g. "claude-opus" → "opus")
40
- const legacy = name.toLowerCase().replace(/^claude-?/, "").replace(/-.*/, "");
41
- const legacyId = MODEL_MAP[legacy];
42
- if (legacyId) {
43
- activeModel = legacyId;
44
- if (persist)
45
- try {
46
- updateConfig({ default_model: legacy });
47
- }
48
- catch { /* best effort */ }
49
- return { success: true, model: activeModel };
50
- }
51
- return { success: false, model: activeModel, error: `Unknown model: "${name}". Valid: ${Object.keys(MODEL_MAP).join(", ")}` };
30
+ // Try direct key match first (e.g. "opus", "bedrock-sonnet", "gemini-pro")
31
+ const directId = MODEL_MAP[name.toLowerCase()];
32
+ if (directId) {
33
+ activeModel = directId;
34
+ if (persist) try {
35
+ updateConfig({
36
+ default_model: name.toLowerCase()
37
+ });
38
+ } catch {/* best effort */}
39
+ return {
40
+ success: true,
41
+ model: activeModel
42
+ };
43
+ }
44
+
45
+ // Legacy: strip "claude-" prefix for backward compat (e.g. "claude-opus" → "opus")
46
+ const legacy = name.toLowerCase().replace(/^claude-?/, "").replace(/-.*/, "");
47
+ const legacyId = MODEL_MAP[legacy];
48
+ if (legacyId) {
49
+ activeModel = legacyId;
50
+ if (persist) try {
51
+ updateConfig({
52
+ default_model: legacy
53
+ });
54
+ } catch {/* best effort */}
55
+ return {
56
+ success: true,
57
+ model: activeModel
58
+ };
59
+ }
60
+ return {
61
+ success: false,
62
+ model: activeModel,
63
+ error: `Unknown model: "${name}". Valid: ${Object.keys(MODEL_MAP).join(", ")}`
64
+ };
52
65
  }
66
+
53
67
  /** Internal: set model by full ID (used for restoring after fallback) */
54
68
  export function setModelById(modelId) {
55
- activeModel = modelId;
69
+ activeModel = modelId;
56
70
  }
57
71
  export function getModel() {
58
- return activeModel;
72
+ return activeModel;
59
73
  }
60
74
  export function getModelShortName() {
61
- if (activeModel === "auto")
62
- return "auto";
63
- return REVERSE_MAP[activeModel] || "sonnet";
75
+ if (activeModel === "auto") return "auto";
76
+ return REVERSE_MAP[activeModel] || "sonnet";
64
77
  }
78
+
65
79
  /** Check if the current model is set to auto-routing */
66
80
  export function isAutoRouting() {
67
- return activeModel === "auto";
81
+ return activeModel === "auto";
68
82
  }
69
83
  export function estimateCostUsd(inputTokens, outputTokens, model, thinkingTokens = 0, cacheReadTokens = 0, cacheCreationTokens = 0) {
70
- return coreEstimateCostUsd(inputTokens, outputTokens, model || activeModel, thinkingTokens, cacheReadTokens, cacheCreationTokens);
84
+ return coreEstimateCostUsd(inputTokens, outputTokens, model || activeModel, thinkingTokens, cacheReadTokens, cacheCreationTokens);
71
85
  }
86
+ //# sourceMappingURL=model-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-manager.js","names":["MODEL_MAP","estimateCostUsd","coreEstimateCostUsd","loadConfig","updateConfig","activeModel","cfg","default_model","id","toLowerCase","REVERSE_MAP","key","Object","entries","setModel","name","persist","directId","success","model","legacy","replace","legacyId","error","keys","join","setModelById","modelId","getModel","getModelShortName","isAutoRouting","inputTokens","outputTokens","thinkingTokens","cacheReadTokens","cacheCreationTokens"],"sources":["../../../src/cli/services/model-manager.ts"],"sourcesContent":["/**\n * Model Manager — CLI model selection and cost tracking\n *\n * Extracted from agent-loop.ts for single-responsibility.\n * All consumers should import from agent-loop.ts (re-export facade).\n */\n\nimport { MODEL_MAP } from \"../../shared/constants.js\";\nimport { estimateCostUsd as coreEstimateCostUsd } from \"../../shared/agent-core.js\";\nimport { loadConfig, updateConfig } from \"./config-store.js\";\n\n/** CLI-only: current model ID for the active session */\nlet activeModel = \"claude-opus-4-6\";\n\n// Load persisted default model on import\ntry {\n const cfg = loadConfig();\n if (cfg.default_model) {\n const id = MODEL_MAP[cfg.default_model.toLowerCase()];\n if (id) activeModel = id;\n }\n} catch { /* use default */ }\n\n/** Reverse map: full model ID → short key */\nconst REVERSE_MAP: Record<string, string> = {};\nfor (const [key, id] of Object.entries(MODEL_MAP)) {\n REVERSE_MAP[id] = key;\n}\n\nexport function setModel(name: string, persist = true): { success: boolean; model: string; error?: string } {\n // Try direct key match first (e.g. \"opus\", \"bedrock-sonnet\", \"gemini-pro\")\n const directId = MODEL_MAP[name.toLowerCase()];\n if (directId) {\n activeModel = directId;\n if (persist) try { updateConfig({ default_model: name.toLowerCase() }); } catch { /* best effort */ }\n return { success: true, model: activeModel };\n }\n\n // Legacy: strip \"claude-\" prefix for backward compat (e.g. \"claude-opus\" → \"opus\")\n const legacy = name.toLowerCase().replace(/^claude-?/, \"\").replace(/-.*/, \"\");\n const legacyId = MODEL_MAP[legacy];\n if (legacyId) {\n activeModel = legacyId;\n if (persist) try { updateConfig({ default_model: legacy }); } catch { /* best effort */ }\n return { success: true, model: activeModel };\n }\n\n return { success: false, model: activeModel, error: `Unknown model: \"${name}\". Valid: ${Object.keys(MODEL_MAP).join(\", \")}` };\n}\n\n/** Internal: set model by full ID (used for restoring after fallback) */\nexport function setModelById(modelId: string): void {\n activeModel = modelId;\n}\n\nexport function getModel(): string {\n return activeModel;\n}\n\nexport function getModelShortName(): string {\n if (activeModel === \"auto\") return \"auto\";\n return REVERSE_MAP[activeModel] || \"sonnet\";\n}\n\n/** Check if the current model is set to auto-routing */\nexport function isAutoRouting(): boolean {\n return activeModel === \"auto\";\n}\n\nexport function estimateCostUsd(inputTokens: number, outputTokens: number, model?: string, thinkingTokens = 0, cacheReadTokens = 0, cacheCreationTokens = 0): number {\n return coreEstimateCostUsd(inputTokens, outputTokens, model || activeModel, thinkingTokens, cacheReadTokens, cacheCreationTokens);\n}\n"],"mappings":"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","ignoreList":[]}
@@ -5,11 +5,18 @@
5
5
  * by Haiku to determine the optimal model (haiku/sonnet/opus) based on task
6
6
  * complexity. Matches Gemini CLI's auto-routing feature.
7
7
  */
8
+
8
9
  import { MODELS } from "../../shared/constants.js";
9
10
  import { callServerProxy } from "../../shared/api-client.js";
11
+
12
+ // ============================================================================
13
+ // TYPES
14
+ // ============================================================================
15
+
10
16
  // ============================================================================
11
17
  // CONSTANTS
12
18
  // ============================================================================
19
+
13
20
  const CLASSIFIER_MODEL = MODELS.HAIKU;
14
21
  const CLASSIFIER_PROMPT = `Classify this user request by complexity. Respond with ONLY a JSON object.
15
22
 
@@ -22,128 +29,151 @@ User request: {message}
22
29
 
23
30
  Respond: {"model": "haiku"|"sonnet"|"opus", "reasoning": "brief reason", "confidence": 0.0-1.0}`;
24
31
  const MODEL_ID_MAP = {
25
- haiku: MODELS.HAIKU,
26
- sonnet: MODELS.SONNET,
27
- opus: MODELS.OPUS,
32
+ haiku: MODELS.HAIKU,
33
+ sonnet: MODELS.SONNET,
34
+ opus: MODELS.OPUS
28
35
  };
29
36
  const DEFAULT_ROUTE = {
30
- model: "sonnet",
31
- reasoning: "default fallback",
32
- confidence: 0.5,
37
+ model: "sonnet",
38
+ reasoning: "default fallback",
39
+ confidence: 0.5
33
40
  };
41
+
34
42
  // ============================================================================
35
43
  // CLASSIFIER
36
44
  // ============================================================================
45
+
37
46
  /**
38
47
  * Classify a user message to determine the best model.
39
48
  * Uses Haiku via server proxy for fast, cheap classification.
40
49
  */
41
50
  export async function classifyAndRoute(userMessage, serverUrl, authToken) {
42
- try {
43
- const prompt = CLASSIFIER_PROMPT.replace("{message}", userMessage);
44
- const apiConfig = {
45
- betas: [],
46
- contextManagement: { edits: [] },
47
- maxTokens: 256,
48
- };
49
- const stream = await callServerProxy({
50
- proxyUrl: `${serverUrl}/proxy`,
51
- token: authToken,
52
- model: CLASSIFIER_MODEL,
53
- system: [{ type: "text", text: "You are a task complexity classifier. Respond with only valid JSON." }],
54
- messages: [{ role: "user", content: prompt }],
55
- tools: [],
56
- apiConfig,
57
- timeoutMs: 5000,
58
- });
59
- // Collect the full text response from the SSE stream
60
- const text = await collectText(stream);
61
- return parseClassifierResponse(text);
62
- }
63
- catch {
64
- // On any error (network, timeout, parse), fall back to sonnet
65
- return DEFAULT_ROUTE;
66
- }
51
+ try {
52
+ const prompt = CLASSIFIER_PROMPT.replace("{message}", userMessage);
53
+ const apiConfig = {
54
+ betas: [],
55
+ contextManagement: {
56
+ edits: []
57
+ },
58
+ maxTokens: 256
59
+ };
60
+ const stream = await callServerProxy({
61
+ proxyUrl: `${serverUrl}/proxy`,
62
+ token: authToken,
63
+ model: CLASSIFIER_MODEL,
64
+ system: [{
65
+ type: "text",
66
+ text: "You are a task complexity classifier. Respond with only valid JSON."
67
+ }],
68
+ messages: [{
69
+ role: "user",
70
+ content: prompt
71
+ }],
72
+ tools: [],
73
+ apiConfig,
74
+ timeoutMs: 5000
75
+ });
76
+
77
+ // Collect the full text response from the SSE stream
78
+ const text = await collectText(stream);
79
+ return parseClassifierResponse(text);
80
+ } catch {
81
+ // On any error (network, timeout, parse), fall back to sonnet
82
+ return DEFAULT_ROUTE;
83
+ }
67
84
  }
85
+
68
86
  /**
69
87
  * Check if auto-routing is enabled for this model string.
70
88
  */
71
89
  export function isAutoModel(model) {
72
- return model === "auto";
90
+ return model === "auto";
73
91
  }
92
+
74
93
  /**
75
94
  * Resolve "auto" to an actual model ID based on classification.
76
95
  */
77
96
  export async function resolveAutoModel(userMessage, serverUrl, authToken) {
78
- const result = await classifyAndRoute(userMessage, serverUrl, authToken);
79
- return MODEL_ID_MAP[result.model];
97
+ const result = await classifyAndRoute(userMessage, serverUrl, authToken);
98
+ return MODEL_ID_MAP[result.model];
80
99
  }
100
+
81
101
  // ============================================================================
82
102
  // INTERNAL HELPERS
83
103
  // ============================================================================
104
+
84
105
  /**
85
106
  * Collect all text from an SSE stream body.
86
107
  * Lightweight extraction — only reads text_delta events.
87
108
  */
88
109
  async function collectText(body) {
89
- const reader = body.getReader();
90
- const decoder = new TextDecoder();
91
- let buffer = "";
92
- let text = "";
93
- try {
94
- while (true) {
95
- const { done, value } = await reader.read();
96
- if (done)
97
- break;
98
- buffer += decoder.decode(value, { stream: true });
99
- const lines = buffer.split("\n");
100
- buffer = lines.pop() || "";
101
- for (const line of lines) {
102
- const trimmed = line.trim();
103
- if (!trimmed || !trimmed.startsWith("data: "))
104
- continue;
105
- const payload = trimmed.slice(6);
106
- if (payload === "[DONE]")
107
- return text;
108
- try {
109
- const event = JSON.parse(payload);
110
- if (event.type === "content_block_delta" && event.delta?.type === "text_delta") {
111
- text += event.delta.text;
112
- }
113
- }
114
- catch { /* skip malformed JSON */ }
115
- }
116
- }
117
- }
118
- finally {
119
- reader.releaseLock();
110
+ const reader = body.getReader();
111
+ const decoder = new TextDecoder();
112
+ let buffer = "";
113
+ let text = "";
114
+ try {
115
+ while (true) {
116
+ const {
117
+ done,
118
+ value
119
+ } = await reader.read();
120
+ if (done) break;
121
+ buffer += decoder.decode(value, {
122
+ stream: true
123
+ });
124
+ const lines = buffer.split("\n");
125
+ buffer = lines.pop() || "";
126
+ for (const line of lines) {
127
+ const trimmed = line.trim();
128
+ if (!trimmed || !trimmed.startsWith("data: ")) continue;
129
+ const payload = trimmed.slice(6);
130
+ if (payload === "[DONE]") return text;
131
+ try {
132
+ const event = JSON.parse(payload);
133
+ if (event.type === "content_block_delta" && event.delta?.type === "text_delta") {
134
+ text += event.delta.text;
135
+ }
136
+ } catch {/* skip malformed JSON */}
137
+ }
120
138
  }
121
- return text;
139
+ } finally {
140
+ reader.releaseLock();
141
+ }
142
+ return text;
122
143
  }
144
+
123
145
  /**
124
146
  * Parse the classifier's JSON response into a RouteResult.
125
147
  * Falls back to sonnet on any parse failure or low confidence.
126
148
  */
127
149
  function parseClassifierResponse(text) {
128
- try {
129
- // Extract JSON from response (handle markdown fences or extra text)
130
- const jsonMatch = text.match(/\{[\s\S]*\}/);
131
- if (!jsonMatch)
132
- return DEFAULT_ROUTE;
133
- const parsed = JSON.parse(jsonMatch[0]);
134
- const model = parsed.model;
135
- if (model !== "haiku" && model !== "sonnet" && model !== "opus") {
136
- return DEFAULT_ROUTE;
137
- }
138
- const confidence = typeof parsed.confidence === "number" ? parsed.confidence : 0;
139
- const reasoning = typeof parsed.reasoning === "string" ? parsed.reasoning : "";
140
- // Low confidence defaults to sonnet (safe middle ground)
141
- if (confidence < 0.3) {
142
- return { model: "sonnet", reasoning: reasoning || "low confidence fallback", confidence };
143
- }
144
- return { model: model, reasoning, confidence };
150
+ try {
151
+ // Extract JSON from response (handle markdown fences or extra text)
152
+ const jsonMatch = text.match(/\{[\s\S]*\}/);
153
+ if (!jsonMatch) return DEFAULT_ROUTE;
154
+ const parsed = JSON.parse(jsonMatch[0]);
155
+ const model = parsed.model;
156
+ if (model !== "haiku" && model !== "sonnet" && model !== "opus") {
157
+ return DEFAULT_ROUTE;
145
158
  }
146
- catch {
147
- return DEFAULT_ROUTE;
159
+ const confidence = typeof parsed.confidence === "number" ? parsed.confidence : 0;
160
+ const reasoning = typeof parsed.reasoning === "string" ? parsed.reasoning : "";
161
+
162
+ // Low confidence defaults to sonnet (safe middle ground)
163
+ if (confidence < 0.3) {
164
+ return {
165
+ model: "sonnet",
166
+ reasoning: reasoning || "low confidence fallback",
167
+ confidence
168
+ };
148
169
  }
170
+ return {
171
+ model: model,
172
+ reasoning,
173
+ confidence
174
+ };
175
+ } catch {
176
+ return DEFAULT_ROUTE;
177
+ }
149
178
  }
179
+ //# sourceMappingURL=model-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-router.js","names":["MODELS","callServerProxy","CLASSIFIER_MODEL","HAIKU","CLASSIFIER_PROMPT","MODEL_ID_MAP","haiku","sonnet","SONNET","opus","OPUS","DEFAULT_ROUTE","model","reasoning","confidence","classifyAndRoute","userMessage","serverUrl","authToken","prompt","replace","apiConfig","betas","contextManagement","edits","maxTokens","stream","proxyUrl","token","system","type","text","messages","role","content","tools","timeoutMs","collectText","parseClassifierResponse","isAutoModel","resolveAutoModel","result","body","reader","getReader","decoder","TextDecoder","buffer","done","value","read","decode","lines","split","pop","line","trimmed","trim","startsWith","payload","slice","event","JSON","parse","delta","releaseLock","jsonMatch","match","parsed"],"sources":["../../../src/cli/services/model-router.ts"],"sourcesContent":["/**\n * Model Router — auto-routing via Haiku classifier.\n *\n * When the user selects \"auto\" as their model, each user message is classified\n * by Haiku to determine the optimal model (haiku/sonnet/opus) based on task\n * complexity. Matches Gemini CLI's auto-routing feature.\n */\n\nimport { MODELS } from \"../../shared/constants.js\";\nimport { callServerProxy } from \"../../shared/api-client.js\";\nimport type { APIRequestConfig } from \"../../shared/types.js\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport type RoutedModel = \"haiku\" | \"sonnet\" | \"opus\";\n\nexport interface RouteResult {\n model: RoutedModel;\n reasoning: string;\n confidence: number; // 0-1\n}\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst CLASSIFIER_MODEL = MODELS.HAIKU;\n\nconst CLASSIFIER_PROMPT = `Classify this user request by complexity. Respond with ONLY a JSON object.\n\nCategories:\n- \"haiku\": Simple lookups, single-step tasks, quick questions, status checks, simple edits (1-2 files)\n- \"sonnet\": Multi-step tasks, code refactoring, moderate analysis, 3-5 file changes, debugging\n- \"opus\": Complex architecture, large refactors, planning, creative problem solving, 5+ files, ambiguous requirements\n\nUser request: {message}\n\nRespond: {\"model\": \"haiku\"|\"sonnet\"|\"opus\", \"reasoning\": \"brief reason\", \"confidence\": 0.0-1.0}`;\n\nconst MODEL_ID_MAP: Record<RoutedModel, string> = {\n haiku: MODELS.HAIKU,\n sonnet: MODELS.SONNET,\n opus: MODELS.OPUS,\n};\n\nconst DEFAULT_ROUTE: RouteResult = {\n model: \"sonnet\",\n reasoning: \"default fallback\",\n confidence: 0.5,\n};\n\n// ============================================================================\n// CLASSIFIER\n// ============================================================================\n\n/**\n * Classify a user message to determine the best model.\n * Uses Haiku via server proxy for fast, cheap classification.\n */\nexport async function classifyAndRoute(\n userMessage: string,\n serverUrl: string,\n authToken: string,\n): Promise<RouteResult> {\n try {\n const prompt = CLASSIFIER_PROMPT.replace(\"{message}\", userMessage);\n\n const apiConfig: APIRequestConfig = {\n betas: [],\n contextManagement: { edits: [] },\n maxTokens: 256,\n };\n\n const stream = await callServerProxy({\n proxyUrl: `${serverUrl}/proxy`,\n token: authToken,\n model: CLASSIFIER_MODEL,\n system: [{ type: \"text\", text: \"You are a task complexity classifier. Respond with only valid JSON.\" }],\n messages: [{ role: \"user\", content: prompt }],\n tools: [],\n apiConfig,\n timeoutMs: 5000,\n });\n\n // Collect the full text response from the SSE stream\n const text = await collectText(stream);\n\n return parseClassifierResponse(text);\n } catch {\n // On any error (network, timeout, parse), fall back to sonnet\n return DEFAULT_ROUTE;\n }\n}\n\n/**\n * Check if auto-routing is enabled for this model string.\n */\nexport function isAutoModel(model: string): boolean {\n return model === \"auto\";\n}\n\n/**\n * Resolve \"auto\" to an actual model ID based on classification.\n */\nexport async function resolveAutoModel(\n userMessage: string,\n serverUrl: string,\n authToken: string,\n): Promise<string> {\n const result = await classifyAndRoute(userMessage, serverUrl, authToken);\n return MODEL_ID_MAP[result.model];\n}\n\n// ============================================================================\n// INTERNAL HELPERS\n// ============================================================================\n\n/**\n * Collect all text from an SSE stream body.\n * Lightweight extraction — only reads text_delta events.\n */\nasync function collectText(body: ReadableStream<Uint8Array>): Promise<string> {\n const reader = body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let text = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() || \"\";\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || !trimmed.startsWith(\"data: \")) continue;\n const payload = trimmed.slice(6);\n if (payload === \"[DONE]\") return text;\n try {\n const event = JSON.parse(payload);\n if (event.type === \"content_block_delta\" && event.delta?.type === \"text_delta\") {\n text += event.delta.text;\n }\n } catch { /* skip malformed JSON */ }\n }\n }\n } finally {\n reader.releaseLock();\n }\n\n return text;\n}\n\n/**\n * Parse the classifier's JSON response into a RouteResult.\n * Falls back to sonnet on any parse failure or low confidence.\n */\nfunction parseClassifierResponse(text: string): RouteResult {\n try {\n // Extract JSON from response (handle markdown fences or extra text)\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (!jsonMatch) return DEFAULT_ROUTE;\n\n const parsed = JSON.parse(jsonMatch[0]);\n\n const model = parsed.model as string;\n if (model !== \"haiku\" && model !== \"sonnet\" && model !== \"opus\") {\n return DEFAULT_ROUTE;\n }\n\n const confidence = typeof parsed.confidence === \"number\" ? parsed.confidence : 0;\n const reasoning = typeof parsed.reasoning === \"string\" ? parsed.reasoning : \"\";\n\n // Low confidence defaults to sonnet (safe middle ground)\n if (confidence < 0.3) {\n return { model: \"sonnet\", reasoning: reasoning || \"low confidence fallback\", confidence };\n }\n\n return { model: model as RoutedModel, reasoning, confidence };\n } catch {\n return DEFAULT_ROUTE;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Centralized path constants for the Whale Code CLI.
3
+ *
4
+ * Single source of truth for all filesystem paths. Every module that needs
5
+ * a path under the user's home directory imports from here instead of
6
+ * constructing join(homedir(), ".whale", ...) locally.
7
+ *
8
+ * Migration: The legacy directory was ~/.swagmanager. On first access,
9
+ * migrateDataDir() copies the old directory to ~/.whale if needed.
10
+ */
11
+ /** Primary data directory — all CLI state lives here */
12
+ export declare const APP_DATA_DIR: string;
13
+ export declare const AGENTS_DIR: string;
14
+ export declare const COMMANDS_DIR: string;
15
+ export declare const DEBUG_DIR: string;
16
+ export declare const FILE_HISTORY_DIR: string;
17
+ export declare const HOOKS_PATH: string;
18
+ export declare const KEYBINDINGS_PATH: string;
19
+ export declare const MEMORY_DIR: string;
20
+ export declare const MEMORY_FILE: string;
21
+ export declare const SANDBOX_DIR: string;
22
+ export declare const SESSIONS_DIR: string;
23
+ export declare const TEAMS_DIR: string;
24
+ export declare const THEME_PATH: string;
25
+ export declare const TODOS_DIR: string;
26
+ /**
27
+ * Ensure data directory exists and migrate from legacy path if needed.
28
+ * Safe to call multiple times — migration runs at most once per process.
29
+ */
30
+ export declare function ensureDataDir(): void;
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Centralized path constants for the Whale Code CLI.
3
+ *
4
+ * Single source of truth for all filesystem paths. Every module that needs
5
+ * a path under the user's home directory imports from here instead of
6
+ * constructing join(homedir(), ".whale", ...) locally.
7
+ *
8
+ * Migration: The legacy directory was ~/.swagmanager. On first access,
9
+ * migrateDataDir() copies the old directory to ~/.whale if needed.
10
+ */
11
+
12
+ import { existsSync, mkdirSync, cpSync } from "fs";
13
+ import { join } from "path";
14
+ import { homedir } from "os";
15
+
16
+ // ============================================================================
17
+ // BASE DIRECTORIES
18
+ // ============================================================================
19
+
20
+ /** Primary data directory — all CLI state lives here */
21
+ export const APP_DATA_DIR = join(homedir(), ".whale");
22
+
23
+ /** Legacy directory — checked for migration only */
24
+ const LEGACY_DATA_DIR = join(homedir(), ".swagmanager");
25
+
26
+ // ============================================================================
27
+ // SUB-PATHS (alphabetical)
28
+ // ============================================================================
29
+
30
+ export const AGENTS_DIR = join(APP_DATA_DIR, "agents");
31
+ export const COMMANDS_DIR = join(APP_DATA_DIR, "commands");
32
+ export const DEBUG_DIR = join(APP_DATA_DIR, "debug");
33
+ export const FILE_HISTORY_DIR = join(APP_DATA_DIR, "file-history");
34
+ export const HOOKS_PATH = join(APP_DATA_DIR, "hooks.json");
35
+ export const KEYBINDINGS_PATH = join(APP_DATA_DIR, "keybindings.json");
36
+ export const MEMORY_DIR = join(APP_DATA_DIR, "memory");
37
+ export const MEMORY_FILE = join(MEMORY_DIR, "MEMORY.md");
38
+ export const SANDBOX_DIR = join(APP_DATA_DIR, "sandbox");
39
+ export const SESSIONS_DIR = join(APP_DATA_DIR, "sessions");
40
+ export const TEAMS_DIR = join(APP_DATA_DIR, "teams");
41
+ export const THEME_PATH = join(APP_DATA_DIR, "theme.json");
42
+ export const TODOS_DIR = join(APP_DATA_DIR, "todos");
43
+
44
+ // ============================================================================
45
+ // MIGRATION — ~/.swagmanager → ~/.whale (one-time, idempotent)
46
+ // ============================================================================
47
+
48
+ let migrationDone = false;
49
+
50
+ /**
51
+ * Ensure data directory exists and migrate from legacy path if needed.
52
+ * Safe to call multiple times — migration runs at most once per process.
53
+ */
54
+ export function ensureDataDir() {
55
+ if (migrationDone) return;
56
+ migrationDone = true;
57
+
58
+ // Already exists — nothing to do
59
+ if (existsSync(APP_DATA_DIR)) return;
60
+
61
+ // Migrate from legacy directory
62
+ if (existsSync(LEGACY_DATA_DIR)) {
63
+ try {
64
+ cpSync(LEGACY_DATA_DIR, APP_DATA_DIR, {
65
+ recursive: true
66
+ });
67
+ } catch {
68
+ // If copy fails (permissions, etc.), create fresh
69
+ mkdirSync(APP_DATA_DIR, {
70
+ recursive: true
71
+ });
72
+ }
73
+ return;
74
+ }
75
+
76
+ // Fresh install
77
+ mkdirSync(APP_DATA_DIR, {
78
+ recursive: true
79
+ });
80
+ }
81
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","names":["existsSync","mkdirSync","cpSync","join","homedir","APP_DATA_DIR","LEGACY_DATA_DIR","AGENTS_DIR","COMMANDS_DIR","DEBUG_DIR","FILE_HISTORY_DIR","HOOKS_PATH","KEYBINDINGS_PATH","MEMORY_DIR","MEMORY_FILE","SANDBOX_DIR","SESSIONS_DIR","TEAMS_DIR","THEME_PATH","TODOS_DIR","migrationDone","ensureDataDir","recursive"],"sources":["../../../src/cli/services/paths.ts"],"sourcesContent":["/**\n * Centralized path constants for the Whale Code CLI.\n *\n * Single source of truth for all filesystem paths. Every module that needs\n * a path under the user's home directory imports from here instead of\n * constructing join(homedir(), \".whale\", ...) locally.\n *\n * Migration: The legacy directory was ~/.swagmanager. On first access,\n * migrateDataDir() copies the old directory to ~/.whale if needed.\n */\n\nimport { existsSync, mkdirSync, cpSync } from \"fs\";\nimport { join } from \"path\";\nimport { homedir } from \"os\";\n\n// ============================================================================\n// BASE DIRECTORIES\n// ============================================================================\n\n/** Primary data directory — all CLI state lives here */\nexport const APP_DATA_DIR = join(homedir(), \".whale\");\n\n/** Legacy directory — checked for migration only */\nconst LEGACY_DATA_DIR = join(homedir(), \".swagmanager\");\n\n// ============================================================================\n// SUB-PATHS (alphabetical)\n// ============================================================================\n\nexport const AGENTS_DIR = join(APP_DATA_DIR, \"agents\");\nexport const COMMANDS_DIR = join(APP_DATA_DIR, \"commands\");\nexport const DEBUG_DIR = join(APP_DATA_DIR, \"debug\");\nexport const FILE_HISTORY_DIR = join(APP_DATA_DIR, \"file-history\");\nexport const HOOKS_PATH = join(APP_DATA_DIR, \"hooks.json\");\nexport const KEYBINDINGS_PATH = join(APP_DATA_DIR, \"keybindings.json\");\nexport const MEMORY_DIR = join(APP_DATA_DIR, \"memory\");\nexport const MEMORY_FILE = join(MEMORY_DIR, \"MEMORY.md\");\nexport const SANDBOX_DIR = join(APP_DATA_DIR, \"sandbox\");\nexport const SESSIONS_DIR = join(APP_DATA_DIR, \"sessions\");\nexport const TEAMS_DIR = join(APP_DATA_DIR, \"teams\");\nexport const THEME_PATH = join(APP_DATA_DIR, \"theme.json\");\nexport const TODOS_DIR = join(APP_DATA_DIR, \"todos\");\n\n// ============================================================================\n// MIGRATION — ~/.swagmanager → ~/.whale (one-time, idempotent)\n// ============================================================================\n\nlet migrationDone = false;\n\n/**\n * Ensure data directory exists and migrate from legacy path if needed.\n * Safe to call multiple times — migration runs at most once per process.\n */\nexport function ensureDataDir(): void {\n if (migrationDone) return;\n migrationDone = true;\n\n // Already exists — nothing to do\n if (existsSync(APP_DATA_DIR)) return;\n\n // Migrate from legacy directory\n if (existsSync(LEGACY_DATA_DIR)) {\n try {\n cpSync(LEGACY_DATA_DIR, APP_DATA_DIR, { recursive: true });\n } catch {\n // If copy fails (permissions, etc.), create fresh\n mkdirSync(APP_DATA_DIR, { recursive: true });\n }\n return;\n }\n\n // Fresh install\n mkdirSync(APP_DATA_DIR, { recursive: true });\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,UAAU,EAAEC,SAAS,EAAEC,MAAM,QAAQ,IAAI;AAClD,SAASC,IAAI,QAAQ,MAAM;AAC3B,SAASC,OAAO,QAAQ,IAAI;;AAE5B;AACA;AACA;;AAEA;AACA,OAAO,MAAMC,YAAY,GAAGF,IAAI,CAACC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC;;AAErD;AACA,MAAME,eAAe,GAAGH,IAAI,CAACC,OAAO,CAAC,CAAC,EAAE,cAAc,CAAC;;AAEvD;AACA;AACA;;AAEA,OAAO,MAAMG,UAAU,GAAQJ,IAAI,CAACE,YAAY,EAAE,QAAQ,CAAC;AAC3D,OAAO,MAAMG,YAAY,GAAML,IAAI,CAACE,YAAY,EAAE,UAAU,CAAC;AAC7D,OAAO,MAAMI,SAAS,GAASN,IAAI,CAACE,YAAY,EAAE,OAAO,CAAC;AAC1D,OAAO,MAAMK,gBAAgB,GAAGP,IAAI,CAACE,YAAY,EAAE,cAAc,CAAC;AAClE,OAAO,MAAMM,UAAU,GAAQR,IAAI,CAACE,YAAY,EAAE,YAAY,CAAC;AAC/D,OAAO,MAAMO,gBAAgB,GAAGT,IAAI,CAACE,YAAY,EAAE,kBAAkB,CAAC;AACtE,OAAO,MAAMQ,UAAU,GAAQV,IAAI,CAACE,YAAY,EAAE,QAAQ,CAAC;AAC3D,OAAO,MAAMS,WAAW,GAAOX,IAAI,CAACU,UAAU,EAAE,WAAW,CAAC;AAC5D,OAAO,MAAME,WAAW,GAAOZ,IAAI,CAACE,YAAY,EAAE,SAAS,CAAC;AAC5D,OAAO,MAAMW,YAAY,GAAMb,IAAI,CAACE,YAAY,EAAE,UAAU,CAAC;AAC7D,OAAO,MAAMY,SAAS,GAASd,IAAI,CAACE,YAAY,EAAE,OAAO,CAAC;AAC1D,OAAO,MAAMa,UAAU,GAAQf,IAAI,CAACE,YAAY,EAAE,YAAY,CAAC;AAC/D,OAAO,MAAMc,SAAS,GAAShB,IAAI,CAACE,YAAY,EAAE,OAAO,CAAC;;AAE1D;AACA;AACA;;AAEA,IAAIe,aAAa,GAAG,KAAK;;AAEzB;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAAA,EAAS;EACpC,IAAID,aAAa,EAAE;EACnBA,aAAa,GAAG,IAAI;;EAEpB;EACA,IAAIpB,UAAU,CAACK,YAAY,CAAC,EAAE;;EAE9B;EACA,IAAIL,UAAU,CAACM,eAAe,CAAC,EAAE;IAC/B,IAAI;MACFJ,MAAM,CAACI,eAAe,EAAED,YAAY,EAAE;QAAEiB,SAAS,EAAE;MAAK,CAAC,CAAC;IAC5D,CAAC,CAAC,MAAM;MACN;MACArB,SAAS,CAACI,YAAY,EAAE;QAAEiB,SAAS,EAAE;MAAK,CAAC,CAAC;IAC9C;IACA;EACF;;EAEA;EACArB,SAAS,CAACI,YAAY,EAAE;IAAEiB,SAAS,EAAE;EAAK,CAAC,CAAC;AAC9C","ignoreList":[]}
@@ -4,40 +4,47 @@
4
4
  * Extracted from agent-loop.ts for single-responsibility.
5
5
  * All consumers should import from agent-loop.ts (re-export facade).
6
6
  */
7
+
7
8
  import { loadConfig, updateConfig } from "./config-store.js";
8
9
  /** CLI-only: current permission mode */
9
10
  let activePermissionMode = "default";
11
+
10
12
  // Load persisted permission mode on import
11
13
  try {
12
- const cfg = loadConfig();
13
- if (cfg.permission_mode && ["default", "plan", "yolo"].includes(cfg.permission_mode)) {
14
- activePermissionMode = cfg.permission_mode;
15
- }
16
- }
17
- catch { /* use default */ }
14
+ const cfg = loadConfig();
15
+ if (cfg.permission_mode && ["default", "plan", "yolo"].includes(cfg.permission_mode)) {
16
+ activePermissionMode = cfg.permission_mode;
17
+ }
18
+ } catch {/* use default */}
19
+
18
20
  // Tools allowed in plan mode
19
- const PLAN_MODE_TOOLS = new Set([
20
- "read_file", "list_directory", "search_files", "search_content",
21
- "glob", "grep", "web_fetch", "web_search", "task", "task_output",
22
- "bash_output", "list_shells", "tasks", "config", "ask_user",
23
- // Interactive tools (read-only by nature)
24
- "ask_user_question", "enter_plan_mode", "exit_plan_mode",
25
- ]);
21
+ const PLAN_MODE_TOOLS = new Set(["read_file", "list_directory", "search_files", "search_content", "glob", "grep", "web_fetch", "web_search", "task", "task_output", "bash_output", "list_shells", "tasks", "config", "ask_user",
22
+ // Interactive tools (read-only by nature)
23
+ "ask_user_question", "enter_plan_mode", "exit_plan_mode"]);
26
24
  export function setPermissionMode(mode) {
27
- activePermissionMode = mode;
28
- try {
29
- updateConfig({ permission_mode: mode });
30
- }
31
- catch { /* best effort */ }
32
- return { success: true, message: `Permission mode: ${mode}` };
25
+ activePermissionMode = mode;
26
+ try {
27
+ updateConfig({
28
+ permission_mode: mode
29
+ });
30
+ } catch {/* best effort */}
31
+ return {
32
+ success: true,
33
+ message: `Permission mode: ${mode}`
34
+ };
33
35
  }
34
36
  export function getPermissionMode() {
35
- return activePermissionMode;
37
+ return activePermissionMode;
36
38
  }
37
39
  export function isToolAllowedByPermission(toolName) {
38
- switch (activePermissionMode) {
39
- case "yolo": return true;
40
- case "plan": return PLAN_MODE_TOOLS.has(toolName);
41
- case "default": return true; // Default allows all — UI can prompt for confirmation
42
- }
40
+ switch (activePermissionMode) {
41
+ case "yolo":
42
+ return true;
43
+ case "plan":
44
+ return PLAN_MODE_TOOLS.has(toolName);
45
+ case "default":
46
+ return true;
47
+ // Default allows all — UI can prompt for confirmation
48
+ }
43
49
  }
50
+ //# sourceMappingURL=permission-modes.js.map