@nanocollective/nanocoder 1.20.3 → 1.21.0

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 (248) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +100 -70
  3. package/assets/nanocoder-vscode.vsix +0 -0
  4. package/dist/ai-sdk-client/chat/chat-handler.d.ts +1 -0
  5. package/dist/ai-sdk-client/chat/chat-handler.d.ts.map +1 -1
  6. package/dist/ai-sdk-client/chat/chat-handler.js +65 -7
  7. package/dist/ai-sdk-client/chat/chat-handler.js.map +1 -1
  8. package/dist/ai-sdk-client/error-handling/tool-error-detector.d.ts +8 -0
  9. package/dist/ai-sdk-client/error-handling/tool-error-detector.d.ts.map +1 -0
  10. package/dist/ai-sdk-client/error-handling/tool-error-detector.js +52 -0
  11. package/dist/ai-sdk-client/error-handling/tool-error-detector.js.map +1 -0
  12. package/dist/ai-sdk-client/tools/tool-prompt-formatter.d.ts +8 -0
  13. package/dist/ai-sdk-client/tools/tool-prompt-formatter.d.ts.map +1 -0
  14. package/dist/ai-sdk-client/tools/tool-prompt-formatter.js +97 -0
  15. package/dist/ai-sdk-client/tools/tool-prompt-formatter.js.map +1 -0
  16. package/dist/app/App.d.ts.map +1 -1
  17. package/dist/app/App.js +11 -1
  18. package/dist/app/App.js.map +1 -1
  19. package/dist/app/components/modal-selectors.d.ts +7 -1
  20. package/dist/app/components/modal-selectors.d.ts.map +1 -1
  21. package/dist/app/components/modal-selectors.js +11 -3
  22. package/dist/app/components/modal-selectors.js.map +1 -1
  23. package/dist/app/utils/app-util.d.ts.map +1 -1
  24. package/dist/app/utils/app-util.js +174 -4
  25. package/dist/app/utils/app-util.js.map +1 -1
  26. package/dist/cli.js +22 -0
  27. package/dist/cli.js.map +1 -1
  28. package/dist/client-factory.d.ts.map +1 -1
  29. package/dist/client-factory.js +19 -20
  30. package/dist/client-factory.js.map +1 -1
  31. package/dist/commands/compact.d.ts +24 -0
  32. package/dist/commands/compact.d.ts.map +1 -0
  33. package/dist/commands/compact.js +31 -0
  34. package/dist/commands/compact.js.map +1 -0
  35. package/dist/commands/exit.d.ts +1 -0
  36. package/dist/commands/exit.d.ts.map +1 -1
  37. package/dist/commands/exit.js +14 -0
  38. package/dist/commands/exit.js.map +1 -1
  39. package/dist/commands/help.js +1 -1
  40. package/dist/commands/help.js.map +1 -1
  41. package/dist/commands/index.d.ts +4 -1
  42. package/dist/commands/index.d.ts.map +1 -1
  43. package/dist/commands/index.js +4 -1
  44. package/dist/commands/index.js.map +1 -1
  45. package/dist/commands/mcp.d.ts.map +1 -1
  46. package/dist/commands/mcp.js +15 -21
  47. package/dist/commands/mcp.js.map +1 -1
  48. package/dist/commands/nanocoder-shape.d.ts +3 -0
  49. package/dist/commands/nanocoder-shape.d.ts.map +1 -0
  50. package/dist/commands/nanocoder-shape.js +46 -0
  51. package/dist/commands/nanocoder-shape.js.map +1 -0
  52. package/dist/commands/setup-mcp.d.ts +3 -0
  53. package/dist/commands/setup-mcp.d.ts.map +1 -0
  54. package/dist/commands/setup-mcp.js +15 -0
  55. package/dist/commands/setup-mcp.js.map +1 -0
  56. package/dist/commands/setup-providers.d.ts +3 -0
  57. package/dist/commands/setup-providers.d.ts.map +1 -0
  58. package/dist/commands/{setup-config.js → setup-providers.js} +4 -4
  59. package/dist/commands/setup-providers.js.map +1 -0
  60. package/dist/components/nanocoder-shape-selector.d.ts +8 -0
  61. package/dist/components/nanocoder-shape-selector.d.ts.map +1 -0
  62. package/dist/components/nanocoder-shape-selector.js +61 -0
  63. package/dist/components/nanocoder-shape-selector.js.map +1 -0
  64. package/dist/components/status.d.ts +11 -0
  65. package/dist/components/status.d.ts.map +1 -1
  66. package/dist/components/status.js +3 -3
  67. package/dist/components/status.js.map +1 -1
  68. package/dist/components/user-input.d.ts.map +1 -1
  69. package/dist/components/user-input.js +1 -14
  70. package/dist/components/user-input.js.map +1 -1
  71. package/dist/components/welcome-message.d.ts.map +1 -1
  72. package/dist/components/welcome-message.js +6 -2
  73. package/dist/components/welcome-message.js.map +1 -1
  74. package/dist/config/index.d.ts +7 -1
  75. package/dist/config/index.d.ts.map +1 -1
  76. package/dist/config/index.js +100 -16
  77. package/dist/config/index.js.map +1 -1
  78. package/dist/config/mcp-config-loader.d.ts +31 -0
  79. package/dist/config/mcp-config-loader.d.ts.map +1 -0
  80. package/dist/config/mcp-config-loader.js +341 -0
  81. package/dist/config/mcp-config-loader.js.map +1 -0
  82. package/dist/config/nanocoder-tools-config.d.ts +7 -0
  83. package/dist/config/nanocoder-tools-config.d.ts.map +1 -0
  84. package/dist/config/nanocoder-tools-config.js +14 -0
  85. package/dist/config/nanocoder-tools-config.js.map +1 -0
  86. package/dist/config/preferences.d.ts +3 -0
  87. package/dist/config/preferences.d.ts.map +1 -1
  88. package/dist/config/preferences.js +9 -0
  89. package/dist/config/preferences.js.map +1 -1
  90. package/dist/config/validation.d.ts +11 -0
  91. package/dist/config/validation.d.ts.map +1 -0
  92. package/dist/config/validation.js +71 -0
  93. package/dist/config/validation.js.map +1 -0
  94. package/dist/hooks/chat-handler/conversation/conversation-loop.d.ts +2 -1
  95. package/dist/hooks/chat-handler/conversation/conversation-loop.d.ts.map +1 -1
  96. package/dist/hooks/chat-handler/conversation/conversation-loop.js +43 -18
  97. package/dist/hooks/chat-handler/conversation/conversation-loop.js.map +1 -1
  98. package/dist/hooks/chat-handler/useChatHandler.d.ts.map +1 -1
  99. package/dist/hooks/chat-handler/useChatHandler.js +2 -0
  100. package/dist/hooks/chat-handler/useChatHandler.js.map +1 -1
  101. package/dist/hooks/useAppHandlers.d.ts +2 -0
  102. package/dist/hooks/useAppHandlers.d.ts.map +1 -1
  103. package/dist/hooks/useAppHandlers.js +66 -2
  104. package/dist/hooks/useAppHandlers.js.map +1 -1
  105. package/dist/hooks/useAppInitialization.d.ts.map +1 -1
  106. package/dist/hooks/useAppInitialization.js +9 -2
  107. package/dist/hooks/useAppInitialization.js.map +1 -1
  108. package/dist/hooks/useAppState.d.ts +4 -0
  109. package/dist/hooks/useAppState.d.ts.map +1 -1
  110. package/dist/hooks/useAppState.js +6 -0
  111. package/dist/hooks/useAppState.js.map +1 -1
  112. package/dist/hooks/useModeHandlers.d.ts +10 -2
  113. package/dist/hooks/useModeHandlers.d.ts.map +1 -1
  114. package/dist/hooks/useModeHandlers.js +50 -2
  115. package/dist/hooks/useModeHandlers.js.map +1 -1
  116. package/dist/hooks/useTerminalWidth.d.ts +1 -1
  117. package/dist/hooks/useTerminalWidth.d.ts.map +1 -1
  118. package/dist/hooks/useTerminalWidth.js +2 -2
  119. package/dist/hooks/useTerminalWidth.js.map +1 -1
  120. package/dist/mcp/mcp-client.d.ts +2 -0
  121. package/dist/mcp/mcp-client.d.ts.map +1 -1
  122. package/dist/mcp/mcp-client.js +13 -1
  123. package/dist/mcp/mcp-client.js.map +1 -1
  124. package/dist/mcp/transport-factory.d.ts.map +1 -1
  125. package/dist/mcp/transport-factory.js +7 -1
  126. package/dist/mcp/transport-factory.js.map +1 -1
  127. package/dist/models/models-dev-client.d.ts.map +1 -1
  128. package/dist/models/models-dev-client.js +4 -0
  129. package/dist/models/models-dev-client.js.map +1 -1
  130. package/dist/services/bash-executor.d.ts.map +1 -1
  131. package/dist/services/bash-executor.js +7 -0
  132. package/dist/services/bash-executor.js.map +1 -1
  133. package/dist/test-utils/cli-test-harness.d.ts +181 -0
  134. package/dist/test-utils/cli-test-harness.d.ts.map +1 -0
  135. package/dist/test-utils/cli-test-harness.js +413 -0
  136. package/dist/test-utils/cli-test-harness.js.map +1 -0
  137. package/dist/tools/execute-bash.d.ts.map +1 -1
  138. package/dist/tools/execute-bash.js +10 -2
  139. package/dist/tools/execute-bash.js.map +1 -1
  140. package/dist/tools/string-replace.d.ts.map +1 -1
  141. package/dist/tools/string-replace.js +6 -1
  142. package/dist/tools/string-replace.js.map +1 -1
  143. package/dist/tools/tool-manager.d.ts +1 -0
  144. package/dist/tools/tool-manager.d.ts.map +1 -1
  145. package/dist/tools/write-file.d.ts.map +1 -1
  146. package/dist/tools/write-file.js +6 -1
  147. package/dist/tools/write-file.js.map +1 -1
  148. package/dist/types/app.d.ts +2 -0
  149. package/dist/types/app.d.ts.map +1 -1
  150. package/dist/types/config.d.ts +48 -27
  151. package/dist/types/config.d.ts.map +1 -1
  152. package/dist/types/mcp.d.ts +1 -0
  153. package/dist/types/mcp.d.ts.map +1 -1
  154. package/dist/types/ui.d.ts +1 -0
  155. package/dist/types/ui.d.ts.map +1 -1
  156. package/dist/utils/auto-compact.d.ts +23 -0
  157. package/dist/utils/auto-compact.d.ts.map +1 -0
  158. package/dist/utils/auto-compact.js +149 -0
  159. package/dist/utils/auto-compact.js.map +1 -0
  160. package/dist/utils/compression-backup.d.ts +14 -0
  161. package/dist/utils/compression-backup.d.ts.map +1 -0
  162. package/dist/utils/compression-backup.js +31 -0
  163. package/dist/utils/compression-backup.js.map +1 -0
  164. package/dist/utils/logging/config.d.ts +11 -0
  165. package/dist/utils/logging/config.d.ts.map +1 -1
  166. package/dist/utils/logging/config.js +19 -4
  167. package/dist/utils/logging/config.js.map +1 -1
  168. package/dist/utils/logging/logger-provider.d.ts +15 -0
  169. package/dist/utils/logging/logger-provider.d.ts.map +1 -1
  170. package/dist/utils/logging/logger-provider.js +48 -24
  171. package/dist/utils/logging/logger-provider.js.map +1 -1
  172. package/dist/utils/message-compression.d.ts +55 -0
  173. package/dist/utils/message-compression.d.ts.map +1 -0
  174. package/dist/utils/message-compression.js +401 -0
  175. package/dist/utils/message-compression.js.map +1 -0
  176. package/dist/wizards/mcp-wizard.d.ts +8 -0
  177. package/dist/wizards/mcp-wizard.d.ts.map +1 -0
  178. package/dist/wizards/mcp-wizard.js +256 -0
  179. package/dist/wizards/mcp-wizard.js.map +1 -0
  180. package/dist/wizards/provider-wizard.d.ts +8 -0
  181. package/dist/wizards/provider-wizard.d.ts.map +1 -0
  182. package/dist/wizards/provider-wizard.js +254 -0
  183. package/dist/wizards/provider-wizard.js.map +1 -0
  184. package/dist/wizards/steps/location-step.d.ts +10 -0
  185. package/dist/wizards/steps/location-step.d.ts.map +1 -0
  186. package/dist/{wizard → wizards}/steps/location-step.js +7 -10
  187. package/dist/wizards/steps/location-step.js.map +1 -0
  188. package/dist/{wizard → wizards}/steps/mcp-step.d.ts +3 -1
  189. package/dist/wizards/steps/mcp-step.d.ts.map +1 -0
  190. package/dist/{wizard → wizards}/steps/mcp-step.js +14 -11
  191. package/dist/wizards/steps/mcp-step.js.map +1 -0
  192. package/dist/wizards/steps/provider-step.d.ts +11 -0
  193. package/dist/wizards/steps/provider-step.d.ts.map +1 -0
  194. package/dist/{wizard → wizards}/steps/provider-step.js +12 -10
  195. package/dist/wizards/steps/provider-step.js.map +1 -0
  196. package/dist/{wizard → wizards}/steps/summary-step.d.ts +3 -2
  197. package/dist/wizards/steps/summary-step.d.ts.map +1 -0
  198. package/dist/{wizard → wizards}/steps/summary-step.js +2 -2
  199. package/dist/wizards/steps/summary-step.js.map +1 -0
  200. package/dist/{wizard → wizards}/templates/mcp-templates.d.ts +1 -0
  201. package/dist/wizards/templates/mcp-templates.d.ts.map +1 -0
  202. package/dist/wizards/templates/mcp-templates.js.map +1 -0
  203. package/dist/wizards/templates/provider-templates.d.ts.map +1 -0
  204. package/dist/{wizard → wizards}/templates/provider-templates.js +3 -14
  205. package/dist/wizards/templates/provider-templates.js.map +1 -0
  206. package/dist/wizards/utils/fetch-cloud-models.d.ts.map +1 -0
  207. package/dist/wizards/utils/fetch-cloud-models.js.map +1 -0
  208. package/dist/wizards/utils/fetch-local-models.d.ts.map +1 -0
  209. package/dist/wizards/utils/fetch-local-models.js.map +1 -0
  210. package/dist/wizards/validation.d.ts +70 -0
  211. package/dist/wizards/validation.d.ts.map +1 -0
  212. package/dist/{wizard → wizards}/validation.js +58 -1
  213. package/dist/wizards/validation.js.map +1 -0
  214. package/package.json +19 -7
  215. package/dist/commands/setup-config.d.ts +0 -3
  216. package/dist/commands/setup-config.d.ts.map +0 -1
  217. package/dist/commands/setup-config.js.map +0 -1
  218. package/dist/wizard/config-wizard.d.ts +0 -8
  219. package/dist/wizard/config-wizard.d.ts.map +0 -1
  220. package/dist/wizard/config-wizard.js +0 -212
  221. package/dist/wizard/config-wizard.js.map +0 -1
  222. package/dist/wizard/steps/location-step.d.ts +0 -9
  223. package/dist/wizard/steps/location-step.d.ts.map +0 -1
  224. package/dist/wizard/steps/location-step.js.map +0 -1
  225. package/dist/wizard/steps/mcp-step.d.ts.map +0 -1
  226. package/dist/wizard/steps/mcp-step.js.map +0 -1
  227. package/dist/wizard/steps/provider-step.d.ts +0 -9
  228. package/dist/wizard/steps/provider-step.d.ts.map +0 -1
  229. package/dist/wizard/steps/provider-step.js.map +0 -1
  230. package/dist/wizard/steps/summary-step.d.ts.map +0 -1
  231. package/dist/wizard/steps/summary-step.js.map +0 -1
  232. package/dist/wizard/templates/mcp-templates.d.ts.map +0 -1
  233. package/dist/wizard/templates/mcp-templates.js.map +0 -1
  234. package/dist/wizard/templates/provider-templates.d.ts.map +0 -1
  235. package/dist/wizard/templates/provider-templates.js.map +0 -1
  236. package/dist/wizard/utils/fetch-cloud-models.d.ts.map +0 -1
  237. package/dist/wizard/utils/fetch-cloud-models.js.map +0 -1
  238. package/dist/wizard/utils/fetch-local-models.d.ts.map +0 -1
  239. package/dist/wizard/utils/fetch-local-models.js.map +0 -1
  240. package/dist/wizard/validation.d.ts +0 -64
  241. package/dist/wizard/validation.d.ts.map +0 -1
  242. package/dist/wizard/validation.js.map +0 -1
  243. /package/dist/{wizard → wizards}/templates/mcp-templates.js +0 -0
  244. /package/dist/{wizard → wizards}/templates/provider-templates.d.ts +0 -0
  245. /package/dist/{wizard → wizards}/utils/fetch-cloud-models.d.ts +0 -0
  246. /package/dist/{wizard → wizards}/utils/fetch-cloud-models.js +0 -0
  247. /package/dist/{wizard → wizards}/utils/fetch-local-models.d.ts +0 -0
  248. /package/dist/{wizard → wizards}/utils/fetch-local-models.js +0 -0
package/LICENSE.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  MIT License with Attribution
4
4
 
5
- Copyright (c) 2025 Nano Collective
5
+ Copyright (c) 2026 Nano Collective
6
6
 
7
7
  Permission is hereby granted, free of charge, to any person obtaining a copy
8
8
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -37,6 +37,7 @@ A local-first CLI coding agent that brings the power of agentic coding tools lik
37
37
  - [Advanced Tool System](#advanced-tool-system)
38
38
  - [Custom Command System](#custom-command-system)
39
39
  - [Enhanced User Experience](#enhanced-user-experience)
40
+ - [Keyboard Shortcuts](#keyboard-shortcuts)
40
41
  - [Developer Features](#developer-features)
41
42
  - [VS Code Extension](#vs-code-extension)
42
43
  - [Community](#community)
@@ -181,6 +182,46 @@ pnpm run dev
181
182
 
182
183
  ## Usage
183
184
 
185
+ ### CLI Options
186
+
187
+ Nanocoder supports standard CLI arguments for quick information and help:
188
+
189
+ ```bash
190
+ # Show version information
191
+ nanocoder --version
192
+ nanocoder -v
193
+
194
+ # Show help and available options
195
+ nanocoder --help
196
+ nanocoder -h
197
+ ```
198
+
199
+ **CLI Options Reference:**
200
+
201
+ | Option | Short | Description |
202
+ |--------|-------|-------------|
203
+ | `--version` | `-v` | Display the installed version number |
204
+ | `--help` | `-h` | Show usage information and available options |
205
+ | `--vscode` | | Run in VS Code mode (for extension) |
206
+ | `--vscode-port` | | Specify VS Code server port |
207
+ | `run` | | Run in non-interactive mode |
208
+
209
+ **Common Use Cases:**
210
+
211
+ ```bash
212
+ # Check version in scripts
213
+ echo "Nanocoder version: $(nanocoder --version)"
214
+
215
+ # Get help in CI/CD pipelines
216
+ nanocoder --help
217
+
218
+ # Quick version check
219
+ nanocoder -v
220
+
221
+ # Discover available options
222
+ nanocoder -h
223
+ ```
224
+
184
225
  ### Interactive Mode
185
226
 
186
227
  To start Nanocoder in interactive mode (the default), simply run:
@@ -243,9 +284,16 @@ Nanocoder supports any OpenAI-compatible API through a unified provider configur
243
284
 
244
285
  **Configuration Methods:**
245
286
 
246
- 1. **Interactive Setup (Recommended for new users)**: Run `/setup-config` inside Nanocoder for a guided wizard with provider templates
287
+ 1. **Interactive Setup (Recommended for new users)**: Run `/setup-providers` inside Nanocoder for a guided wizard with provider templates. The wizard allows you to:
288
+ - Choose between project-level or global configuration
289
+ - Select from common provider templates (Ollama, OpenRouter, LM Studio, etc.)
290
+ - Add custom OpenAI-compatible providers manually
291
+ - Edit or delete existing providers
292
+ - Fetch available models automatically from your provider
247
293
  2. **Manual Configuration**: Create an `agents.config.json` file (see below for locations)
248
294
 
295
+ > **Note**: The `/setup-providers` wizard requires at least one provider to be configured before saving. You cannot exit without adding a provider.
296
+
249
297
  **Configuration File Locations:**
250
298
 
251
299
  Nanocoder looks for configuration in the following order (first found wins):
@@ -346,6 +394,7 @@ Nanocoder looks for configuration in the following order (first found wins):
346
394
  - `baseUrl`: OpenAI-compatible API endpoint
347
395
  - `apiKey`: API key (optional, may not be required)
348
396
  - `models`: Available model list for `/model` command
397
+ - `disableToolModels`: List of model names to disable tool calling for (optional)
349
398
 
350
399
  **Environment Variables:**
351
400
 
@@ -355,7 +404,7 @@ Keep API keys out of version control using environment variables. Variables are
355
404
  - `NANOCODER_DATA_DIR`: Override the application data directory used for internal data like usage statistics.
356
405
 
357
406
  **Syntax:** `$VAR_NAME`, `${VAR_NAME}`, or `${VAR_NAME:-default}`
358
- **Supported in:** `baseUrl`, `apiKey`, `models`, MCP server `command`, `args`, `env`
407
+ **Supported in:** `baseUrl`, `apiKey`, `models`, `disableToolModels`, `MCP server`, `command`, `args`, `env`
359
408
 
360
409
  See `.env.example` for setup instructions
361
410
 
@@ -441,84 +490,47 @@ For complete documentation, see [Pino Logging Guide](docs/pino-logging.md).
441
490
 
442
491
  ### MCP (Model Context Protocol) Servers
443
492
 
444
- Nanocoder supports connecting to MCP servers to extend its capabilities with additional tools. Configure MCP servers in your `agents.config.json`:
493
+ Nanocoder supports MCP servers to extend its capabilities with additional tools. Configure servers using `.mcp.json` files at project or global level.
494
+
495
+ **Quick Start:**
496
+
497
+ 1. Run `/setup-mcp` for an interactive wizard with templates
498
+ 2. Or create `.mcp.json` in your project root:
445
499
 
446
500
  ```json
447
501
  {
448
- "nanocoder": {
449
- "mcpServers": [
450
- {
451
- "name": "filesystem",
452
- "transport": "stdio",
453
- "command": "npx",
454
- "args": [
455
- "@modelcontextprotocol/server-filesystem",
456
- "/path/to/allowed/directory"
457
- ]
458
- },
459
- {
460
- "name": "github",
461
- "transport": "stdio",
462
- "command": "npx",
463
- "args": ["@modelcontextprotocol/server-github"],
464
- "env": {
465
- "GITHUB_TOKEN": "your-github-token"
466
- }
467
- },
468
- {
469
- "name": "remote-search",
470
- "transport": "http",
471
- "url": "https://api.example.com/mcp",
472
- "timeout": 30000
473
- },
474
- {
475
- "name": "websocket-server",
476
- "transport": "websocket",
477
- "url": "wss://ws.example.com/mcp",
478
- "timeout": 60000
479
- }
480
- ]
481
- }
502
+ "mcpServers": {
503
+ "filesystem": {
504
+ "transport": "stdio",
505
+ "command": "npx",
506
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "./src"],
507
+ "alwaysAllow": ["list_directory", "read_file"]
508
+ },
509
+ "github": {
510
+ "transport": "stdio",
511
+ "command": "npx",
512
+ "args": ["-y", "@modelcontextprotocol/server-github"],
513
+ "env": { "GITHUB_TOKEN": "$GITHUB_TOKEN" }
514
+ }
515
+ }
482
516
  }
483
517
  ```
484
518
 
485
- **MCP Server Configuration:**
486
-
487
- - `name`: Display name for the MCP server
488
- - `transport`: Transport type (`stdio`, `http`, `websocket`)
489
- - **For stdio transport:**
490
- - `command`: Executable command to start the server
491
- - `args`: Array of command-line arguments
492
- - `env`: Environment variables for the server process
493
- - **For http/websocket transport:**
494
- - `url`: Server endpoint URL
495
- - `timeout`: Connection timeout in milliseconds (optional)
496
-
497
- **Transport Types:**
519
+ **Key Features:**
498
520
 
499
- - **stdio**: Local command-line servers (most common)
500
- - **http**: Remote HTTP API endpoints
501
- - **websocket**: Real-time WebSocket connections
521
+ - **Transport types**: `stdio` (local), `http`, `websocket` (remote)
522
+ - **Auto-approve tools**: Use `alwaysAllow` to skip confirmation for trusted tools
523
+ - **Environment variables**: Use `$VAR` or `${VAR:-default}` syntax
524
+ - **Hierarchical config**: Project-level (`.mcp.json`) overrides global (`~/.config/nanocoder/.mcp.json`)
502
525
 
503
- When MCP servers are configured, Nanocoder will:
526
+ **Commands:**
504
527
 
505
- - Automatically connect to all configured servers on startup
506
- - Make all server tools available to the AI model
507
- - Show connected servers and their tools with the `/mcp` command
508
- - Display transport type and connection details in configuration summary
528
+ - `/setup-mcp` - Interactive configuration wizard (supports `Ctrl+E` for manual editing)
529
+ - `/mcp` - Show connected servers and their tools
509
530
 
510
- Popular MCP servers:
531
+ Popular MCP servers: Filesystem, GitHub, Brave Search, Context7, DeepWiki, and [many more](https://github.com/modelcontextprotocol/servers).
511
532
 
512
- - **Filesystem**: Enhanced file operations (stdio)
513
- - **GitHub**: Repository management (stdio)
514
- - **Brave Search**: Web search capabilities (http)
515
- - **Memory**: Persistent context storage
516
- - **Context7**: Documentation lookup (http)
517
- - **DeepWiki**: Wikipedia search (http)
518
- - **Sequential Thinking**: Advanced reasoning (http)
519
- - [View more MCP servers](https://github.com/modelcontextprotocol/servers)
520
-
521
- > **Note**: MCP server configuration follows the same location hierarchy as AI provider setup above. Use `/setup-config` for an interactive configuration wizard with templates for both local and remote MCP servers, or manually edit `agents.config.json` at the project level (current directory) or user level (platform-specific paths listed above).
533
+ > **Full documentation**: See the [MCP Configuration Guide](docs/mcp-configuration.md) for detailed setup, examples, and troubleshooting.
522
534
 
523
535
  ### User Preferences
524
536
 
@@ -563,7 +575,8 @@ You can override this directory using `NANOCODER_DATA_DIR`.
563
575
 
564
576
  - `/help` - Show available commands
565
577
  - `/init` - Initialize project with intelligent analysis, create AGENTS.md and configuration files. Use `/init --force` to regenerate AGENTS.md if it already exists.
566
- - `/setup-config` - Interactive wizard for configuring AI providers and MCP servers with templates
578
+ - `/setup-providers` - Interactive wizard for configuring AI providers with templates
579
+ - `/setup-mcp` - Interactive wizard for configuring MCP servers with templates
567
580
  - `/clear` - Clear chat history
568
581
  - `/model` - Switch between available models
569
582
  - `/provider` - Switch between configured AI providers
@@ -572,10 +585,12 @@ You can override this directory using `NANOCODER_DATA_DIR`.
572
585
  - `/mcp` - Show connected MCP servers and their tools
573
586
  - `/custom-commands` - List all custom commands
574
587
  - `/checkpoint` - Save and restore conversation snapshots (see [Checkpointing](#checkpointing) section)
588
+ - `/compact` - Compress message history to reduce context usage (see [Context Compression](docs/context-compression.md))
575
589
  - `/exit` - Exit the application
576
590
  - `/export` - Export current session to markdown file
577
591
  - `/theme` - Select a theme for the Nanocoder CLI
578
592
  - `/title-shape` - Select a title shape style for the Nanocoder CLI (real-time preview)
593
+ - `/nanocoder-shape` - Select a branding font style for the Nanocoder welcome banner (real-time preview)
579
594
  - `/update` - Update Nanocoder to the latest version
580
595
  - `/usage` – Get current model context usage visually
581
596
  - `/lsp` – List connected LSP servers
@@ -722,6 +737,21 @@ Generate comprehensive unit tests for {{component}}. Include:
722
737
  - **Auto-accept mode**: Automatically accepts more tool calls without confirmation for faster workflows
723
738
  - **Plan mode**: AI suggests actions but doesn't execute tools - useful for planning and exploration
724
739
 
740
+ ### Keyboard Shortcuts
741
+
742
+ | Action | Shortcut | Notes |
743
+ |--------|----------|-------|
744
+ | Submit prompt | Enter | |
745
+ | New line (multi-line input) | Ctrl+J | Most reliable across terminals |
746
+ | New line (multi-line input) | Shift+Enter | Terminal-dependent |
747
+ | New line (multi-line input) | Option/Alt+Enter | VS Code integrated terminal |
748
+ | Toggle development mode | Shift+Tab | Cycles through normal/auto-accept/plan |
749
+ | Cancel AI response | Esc | While AI is processing |
750
+ | Clear input | Esc (twice) | Press Esc twice to clear current input |
751
+ | History navigation | ↑/↓ | Navigate through prompt history |
752
+
753
+ > **Note on multi-line input**: Terminal support for Shift+Enter / Option/Alt+Enter varies in terminals and operating systems. If one of these shortcuts doesn't work in your terminal, try and use Ctrl+J which sends a literal newline character and works more reliably across platforms and software.
754
+
725
755
  ### Developer Features
726
756
 
727
757
  - **TypeScript-first**: Full type safety and IntelliSense support
Binary file
@@ -9,6 +9,7 @@ export interface ChatHandlerParams {
9
9
  callbacks: StreamCallbacks;
10
10
  signal?: AbortSignal;
11
11
  maxRetries: number;
12
+ skipTools?: boolean;
12
13
  }
13
14
  /**
14
15
  * Main chat handler - orchestrates the entire chat flow
@@ -1 +1 @@
1
- {"version":3,"file":"chat-handler.d.ts","sourceRoot":"","sources":["../../../source/ai-sdk-client/chat/chat-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,IAAI,CAAC;AAStC,OAAO,KAAK,EACX,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,OAAO,EACP,eAAe,EAEf,MAAM,eAAe,CAAC;AAwBvB,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,aAAa,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,gBAAgB,CAAC;IACjC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACrC,SAAS,EAAE,eAAe,CAAC;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC/B,MAAM,EAAE,iBAAiB,GACvB,OAAO,CAAC,eAAe,CAAC,CAuR1B"}
1
+ {"version":3,"file":"chat-handler.d.ts","sourceRoot":"","sources":["../../../source/ai-sdk-client/chat/chat-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,IAAI,CAAC;AAStC,OAAO,KAAK,EACX,gBAAgB,EAChB,aAAa,EACb,eAAe,EACf,OAAO,EACP,eAAe,EAEf,MAAM,eAAe,CAAC;AA0BvB,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,aAAa,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,gBAAgB,CAAC;IACjC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACrC,SAAS,EAAE,eAAe,CAAC;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC/B,MAAM,EAAE,iBAAiB,GACvB,OAAO,CAAC,eAAe,CAAC,CAuV1B"}
@@ -5,35 +5,79 @@ import { convertToModelMessages } from '../converters/message-converter.js';
5
5
  import { convertAISDKToolCalls, generateToolCallId, getToolResultOutput, } from '../converters/tool-converter.js';
6
6
  import { extractRootError } from '../error-handling/error-extractor.js';
7
7
  import { parseAPIError } from '../error-handling/error-parser.js';
8
+ import { isToolSupportError } from '../error-handling/tool-error-detector.js';
9
+ import { formatToolsForPrompt } from '../tools/tool-prompt-formatter.js';
8
10
  import { createOnStepFinishHandler, createPrepareStepHandler, } from './streaming-handler.js';
9
11
  import { processXMLToolCalls } from './tool-processor.js';
10
12
  /**
11
13
  * Main chat handler - orchestrates the entire chat flow
12
14
  */
13
15
  export async function handleChat(params) {
14
- const { model, currentModel, providerConfig, messages, tools, callbacks, signal, maxRetries, } = params;
16
+ const { model, currentModel, providerConfig, messages, tools, callbacks, signal, maxRetries, skipTools = false, } = params;
15
17
  const logger = getLogger();
16
18
  // Check if already aborted before starting
17
19
  if (signal?.aborted) {
18
20
  logger.debug('Chat request already aborted');
19
21
  throw new Error('Operation was cancelled');
20
22
  }
23
+ // Check if tools should be disabled
24
+ const shouldDisableTools = skipTools ||
25
+ providerConfig.disableTools ||
26
+ (providerConfig.disableToolModels &&
27
+ providerConfig.disableToolModels.includes(currentModel));
21
28
  // Start performance tracking
22
29
  const metrics = startMetrics();
23
30
  const correlationId = getCorrelationId() || generateCorrelationId();
31
+ if (shouldDisableTools) {
32
+ logger.info('Tools disabled for request', {
33
+ model: currentModel,
34
+ reason: skipTools
35
+ ? 'retry without tools'
36
+ : providerConfig.disableTools
37
+ ? 'provider configuration'
38
+ : 'model configuration',
39
+ correlationId,
40
+ });
41
+ }
24
42
  logger.info('Chat request starting', {
25
43
  model: currentModel,
26
44
  messageCount: messages.length,
27
- toolCount: Object.keys(tools).length,
45
+ toolCount: shouldDisableTools ? 0 : Object.keys(tools).length,
28
46
  correlationId,
29
47
  provider: providerConfig.name,
30
48
  });
31
49
  return await withNewCorrelationContext(async (_context) => {
32
50
  try {
33
51
  // Tools are already in AI SDK format - use directly
34
- const aiTools = Object.keys(tools).length > 0 ? tools : undefined;
52
+ const aiTools = shouldDisableTools
53
+ ? undefined
54
+ : Object.keys(tools).length > 0
55
+ ? tools
56
+ : undefined;
57
+ // When native tools are disabled but we have tools, inject definitions into system prompt
58
+ // This allows the model to still use tools via XML format
59
+ let messagesWithToolPrompt = messages;
60
+ if (shouldDisableTools && Object.keys(tools).length > 0) {
61
+ const toolPrompt = formatToolsForPrompt(tools);
62
+ if (toolPrompt) {
63
+ // Find and augment the system message with tool definitions
64
+ messagesWithToolPrompt = messages.map((msg, index) => {
65
+ if (msg.role === 'system' && index === 0) {
66
+ return {
67
+ ...msg,
68
+ content: msg.content + toolPrompt,
69
+ };
70
+ }
71
+ return msg;
72
+ });
73
+ logger.debug('Injected tool definitions into system prompt', {
74
+ toolCount: Object.keys(tools).length,
75
+ promptLength: toolPrompt.length,
76
+ });
77
+ }
78
+ }
35
79
  // Convert messages to AI SDK v5 ModelMessage format
36
- const modelMessages = convertToModelMessages(messages);
80
+ const modelMessages = convertToModelMessages(messagesWithToolPrompt);
37
81
  logger.debug('AI SDK request prepared', {
38
82
  messageCount: modelMessages.length,
39
83
  hasTools: !!aiTools,
@@ -157,6 +201,20 @@ export async function handleChat(params) {
157
201
  });
158
202
  throw new Error('Operation was cancelled');
159
203
  }
204
+ // Check if error indicates tool support issue and we haven't retried
205
+ if (!skipTools && isToolSupportError(error)) {
206
+ logger.warn('Tool support error detected, retrying without tools', {
207
+ model: currentModel,
208
+ error: error instanceof Error ? error.message : error,
209
+ correlationId,
210
+ provider: providerConfig.name,
211
+ });
212
+ // Retry without tools
213
+ return await handleChat({
214
+ ...params,
215
+ skipTools: true, // Mark that we're retrying
216
+ });
217
+ }
160
218
  // Handle tool-specific errors - NoSuchToolError
161
219
  if (error instanceof NoSuchToolError) {
162
220
  logger.error('Tool not found', {
@@ -168,8 +226,8 @@ export async function handleChat(params) {
168
226
  // Provide helpful error message with available tools
169
227
  const availableTools = Object.keys(tools).join(', ');
170
228
  const errorMessage = availableTools
171
- ? `Tool "$\{error.toolName\}" does not exist. Available tools: $\{availableTools\}`
172
- : `Tool "$\{error.toolName\}" does not exist and no tools are currently loaded.`;
229
+ ? `Tool "${error.toolName}" does not exist. Available tools: ${availableTools}`
230
+ : `Tool "${error.toolName}" does not exist and no tools are currently loaded.`;
173
231
  throw new Error(errorMessage);
174
232
  }
175
233
  // Handle tool-specific errors - InvalidToolInputError
@@ -182,7 +240,7 @@ export async function handleChat(params) {
182
240
  validationError: error.message,
183
241
  });
184
242
  // Provide clear validation error
185
- throw new Error(`Invalid arguments for tool "$\{error.toolName\}": $\{error.message\}`);
243
+ throw new Error(`Invalid arguments for tool "${error.toolName}": ${error.message}`);
186
244
  }
187
245
  // Handle tool-specific errors - ToolCallRepairError
188
246
  if (error instanceof ToolCallRepairError) {
@@ -1 +1 @@
1
- {"version":3,"file":"chat-handler.js","sourceRoot":"","sources":["../../../source/ai-sdk-client/chat/chat-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-handler.js","sourceRoot":"","sources":["../../../source/ai-sdk-client/chat/chat-handler.ts"],"names":[],"mappings":"AACA,OAAO,EACN,YAAY,EACZ,qBAAqB,EACrB,eAAe,EACf,WAAW,EACX,mBAAmB,GACnB,MAAM,IAAI,CAAC;AACZ,OAAO,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AAS3C,OAAO,EACN,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,yBAAyB,GACzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAC,sBAAsB,EAAC,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EACN,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,GACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAC,gBAAgB,EAAC,MAAM,sCAAsC,CAAC;AACtE,OAAO,EAAC,aAAa,EAAC,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAC,kBAAkB,EAAC,MAAM,0CAA0C,CAAC;AAC5E,OAAO,EAAC,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AACvE,OAAO,EACN,yBAAyB,EACzB,wBAAwB,GACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AAcxD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,MAAyB;IAEzB,MAAM,EACL,KAAK,EACL,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,KAAK,EACL,SAAS,EACT,MAAM,EACN,UAAU,EACV,SAAS,GAAG,KAAK,GACjB,GAAG,MAAM,CAAC;IACX,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAE3B,2CAA2C;IAC3C,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC5C,CAAC;IAED,oCAAoC;IACpC,MAAM,kBAAkB,GACvB,SAAS;QACT,cAAc,CAAC,YAAY;QAC3B,CAAC,cAAc,CAAC,iBAAiB;YAChC,cAAc,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAE3D,6BAA6B;IAC7B,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAC/B,MAAM,aAAa,GAAG,gBAAgB,EAAE,IAAI,qBAAqB,EAAE,CAAC;IAEpE,IAAI,kBAAkB,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;YACzC,KAAK,EAAE,YAAY;YACnB,MAAM,EAAE,SAAS;gBAChB,CAAC,CAAC,qBAAqB;gBACvB,CAAC,CAAC,cAAc,CAAC,YAAY;oBAC5B,CAAC,CAAC,wBAAwB;oBAC1B,CAAC,CAAC,qBAAqB;YACzB,aAAa;SACb,CAAC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE;QACpC,KAAK,EAAE,YAAY;QACnB,YAAY,EAAE,QAAQ,CAAC,MAAM;QAC7B,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;QAC7D,aAAa;QACb,QAAQ,EAAE,cAAc,CAAC,IAAI;KAC7B,CAAC,CAAC;IAEH,OAAO,MAAM,yBAAyB,CAAC,KAAK,EAAC,QAAQ,EAAC,EAAE;QACvD,IAAI,CAAC;YACJ,oDAAoD;YACpD,MAAM,OAAO,GAAG,kBAAkB;gBACjC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC;oBAC9B,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,SAAS,CAAC;YAEd,0FAA0F;YAC1F,0DAA0D;YAC1D,IAAI,sBAAsB,GAAG,QAAQ,CAAC;YACtC,IAAI,kBAAkB,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzD,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,UAAU,EAAE,CAAC;oBAChB,4DAA4D;oBAC5D,sBAAsB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;wBACpD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;4BAC1C,OAAO;gCACN,GAAG,GAAG;gCACN,OAAO,EAAE,GAAG,CAAC,OAAO,GAAG,UAAU;6BACjC,CAAC;wBACH,CAAC;wBACD,OAAO,GAAG,CAAC;oBACZ,CAAC,CAAC,CAAC;oBAEH,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE;wBAC5D,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;wBACpC,YAAY,EAAE,UAAU,CAAC,MAAM;qBAC/B,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;YAED,oDAAoD;YACpD,MAAM,aAAa,GAAG,sBAAsB,CAAC,sBAAsB,CAAC,CAAC;YAErE,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;gBACvC,YAAY,EAAE,aAAa,CAAC,MAAM;gBAClC,QAAQ,EAAE,CAAC,CAAC,OAAO;gBACnB,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACpD,CAAC,CAAC;YAEH,2DAA2D;YAC3D,yEAAyE;YACzE,wEAAwE;YACxE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;gBACjC,KAAK;gBACL,QAAQ,EAAE,aAAa;gBACvB,KAAK,EAAE,OAAO;gBACd,WAAW,EAAE,MAAM;gBACnB,UAAU;gBACV,QAAQ,EAAE,WAAW,CAAC,cAAc,CAAC,EAAE,kDAAkD;gBACzF,+DAA+D;gBAC/D,YAAY,EAAE,yBAAyB,CAAC,SAAS,CAAC;gBAClD,WAAW,EAAE,wBAAwB,EAAE;aACvC,CAAC,CAAC;YAEH,oCAAoC;YACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;YAE7B,MAAM,CAAC,KAAK,CAAC,0BAA0B,EAAE;gBACxC,cAAc,EAAE,QAAQ,CAAC,MAAM;gBAC/B,YAAY,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;gBACjE,aAAa,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;aAC5C,CAAC,CAAC;YAEH,yCAAyC;YACzC,IAAI,QAAQ,EAAE,CAAC;gBACd,SAAS,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC;YAED,6BAA6B;YAC7B,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC;YAEzC,uEAAuE;YACvE,gFAAgF;YAChF,MAAM,oBAAoB,GAAmB,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBAC1B,IACC,IAAI,CAAC,SAAS;oBACd,IAAI,CAAC,WAAW;oBAChB,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,EAChD,CAAC;oBACF,mDAAmD;oBACnD,4CAA4C;oBAC5C,MAAM,aAAa,GAAe,qBAAqB,CACtD,IAAI,CAAC,SAAS,CACd,CAAC;oBAEF,oBAAoB,CAAC,IAAI,CAAC;wBACzB,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;wBACxB,UAAU,EAAE,aAAa;qBACzB,CAAC,CAAC;oBAEH,+BAA+B;oBAC/B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;wBACxC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;wBACzC,MAAM,SAAS,GAAG,mBAAmB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;wBAEzD,oBAAoB,CAAC,IAAI,CAAC;4BACzB,IAAI,EAAE,MAAe;4BACrB,OAAO,EAAE,SAAS;4BAClB,YAAY,EAAE,QAAQ,CAAC,UAAU,IAAI,kBAAkB,EAAE;4BACzD,IAAI,EAAE,QAAQ,CAAC,QAAQ;yBACvB,CAAC,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;YAED,qBAAqB;YACrB,MAAM,SAAS,GAAe,EAAE,CAAC;YACjC,IAAI,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnD,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE;oBACnD,aAAa,EAAE,eAAe,CAAC,MAAM;iBACrC,CAAC,CAAC;gBAEH,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;oBACxC,MAAM,EAAE,GAAa,qBAAqB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1D,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAEnB,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE;wBACnC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;wBAC1B,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS;qBACrC,CAAC,CAAC;oBAEH,yEAAyE;gBAC1E,CAAC;YACF,CAAC;YAED,6CAA6C;YAC7C,IAAI,OAAO,GAAG,QAAQ,CAAC;YACvB,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YACjE,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;gBACvC,OAAO,GAAG,SAAS,CAAC,cAAc,CAAC;YACpC,CAAC;YAED,gCAAgC;YAChC,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;YAEzC,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE;gBAClD,KAAK,EAAE,YAAY;gBACnB,QAAQ,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;gBACjD,cAAc,EAAE,OAAO,CAAC,MAAM;gBAC9B,cAAc,EAAE,SAAS,CAAC,MAAM;gBAChC,WAAW,EAAE,iBAAiB,CAC7B,YAAY,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,CACjD;gBACD,aAAa;gBACb,QAAQ,EAAE,cAAc,CAAC,IAAI;aAC7B,CAAC,CAAC;YAEH,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC;YAEvB,OAAO;gBACN,OAAO,EAAE;oBACR;wBACC,OAAO,EAAE;4BACR,IAAI,EAAE,WAAW;4BACjB,OAAO;4BACP,UAAU,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;yBACxD;qBACD;iBACD;gBACD,yEAAyE;gBACzE,oBAAoB,EACnB,oBAAoB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS;aACnE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,gDAAgD;YAChD,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;YAEzC,kDAAkD;YAClD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC3D,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE;oBAC7C,KAAK,EAAE,YAAY;oBACnB,QAAQ,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;oBACjD,aAAa;oBACb,QAAQ,EAAE,cAAc,CAAC,IAAI;iBAC7B,CAAC,CAAC;gBACH,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC5C,CAAC;YAED,qEAAqE;YACrE,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7C,MAAM,CAAC,IAAI,CAAC,qDAAqD,EAAE;oBAClE,KAAK,EAAE,YAAY;oBACnB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;oBACrD,aAAa;oBACb,QAAQ,EAAE,cAAc,CAAC,IAAI;iBAC7B,CAAC,CAAC;gBAEH,sBAAsB;gBACtB,OAAO,MAAM,UAAU,CAAC;oBACvB,GAAG,MAAM;oBACT,SAAS,EAAE,IAAI,EAAE,2BAA2B;iBAC5C,CAAC,CAAC;YACJ,CAAC;YAED,gDAAgD;YAChD,IAAI,KAAK,YAAY,eAAe,EAAE,CAAC;gBACtC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE;oBAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,KAAK,EAAE,YAAY;oBACnB,aAAa;oBACb,QAAQ,EAAE,cAAc,CAAC,IAAI;iBAC7B,CAAC,CAAC;gBAEH,qDAAqD;gBACrD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrD,MAAM,YAAY,GAAG,cAAc;oBAClC,CAAC,CAAC,SAAS,KAAK,CAAC,QAAQ,sCAAsC,cAAc,EAAE;oBAC/E,CAAC,CAAC,SAAS,KAAK,CAAC,QAAQ,qDAAqD,CAAC;gBAEhF,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YAC/B,CAAC;YAED,sDAAsD;YACtD,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;gBAC5C,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE;oBAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,KAAK,EAAE,YAAY;oBACnB,aAAa;oBACb,QAAQ,EAAE,cAAc,CAAC,IAAI;oBAC7B,eAAe,EAAE,KAAK,CAAC,OAAO;iBAC9B,CAAC,CAAC;gBAEH,iCAAiC;gBACjC,MAAM,IAAI,KAAK,CACd,+BAA+B,KAAK,CAAC,QAAQ,MAAM,KAAK,CAAC,OAAO,EAAE,CAClE,CAAC;YACH,CAAC;YAED,oDAAoD;YACpD,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;gBAC1C,MAAM,CAAC,KAAK,CAAC,yBAAyB,EAAE;oBACvC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,QAAQ;oBACtC,KAAK,EAAE,YAAY;oBACnB,aAAa;oBACb,QAAQ,EAAE,cAAc,CAAC,IAAI;oBAC7B,WAAW,EAAE,KAAK,CAAC,OAAO;iBAC1B,CAAC,CAAC;gBAEH,yCAAyC;gBACzC,6DAA6D;YAC9D,CAAC;YAED,yCAAyC;YACzC,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE;gBACnC,KAAK,EAAE,YAAY;gBACnB,QAAQ,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;gBACjD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;gBACrD,SAAS,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;gBAC1D,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,IAAI,SAAS;gBAChD,aAAa;gBACb,QAAQ,EAAE,cAAc,CAAC,IAAI;gBAC7B,WAAW,EAAE,iBAAiB,CAC7B,YAAY,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,CACjD;aACD,CAAC,CAAC;YAEH,qEAAqE;YACrE,+DAA+D;YAC/D,IACC,KAAK,YAAY,KAAK;gBACtB,CAAC,KAAK,CAAC,IAAI,KAAK,2BAA2B;oBAC1C,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC,EAC9C,CAAC;gBACF,gEAAgE;gBAChE,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC1C,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;oBACzB,yDAAyD;oBACzD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;wBACrB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;oBAC5C,CAAC;oBACD,qDAAqD;oBACrD,MAAM,IAAI,KAAK,CACd,mHAAmH,CACnH,CAAC;gBACH,CAAC;gBACD,4CAA4C;gBAC5C,MAAM,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;gBAC7C,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;YAC9B,CAAC;YAED,gEAAgE;YAChE,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC;IACF,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,mCAAmC;AACvD,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Detects if an error indicates the model doesn't support tool calling
3
+ *
4
+ * This is used to automatically retry requests without tools when a model
5
+ * rejects tool definitions (common with some local models like deepseek-r1 via Ollama)
6
+ */
7
+ export declare function isToolSupportError(error: unknown): boolean;
8
+ //# sourceMappingURL=tool-error-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-error-detector.d.ts","sourceRoot":"","sources":["../../../source/ai-sdk-client/error-handling/tool-error-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAqD1D"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Detects if an error indicates the model doesn't support tool calling
3
+ *
4
+ * This is used to automatically retry requests without tools when a model
5
+ * rejects tool definitions (common with some local models like deepseek-r1 via Ollama)
6
+ */
7
+ export function isToolSupportError(error) {
8
+ if (!(error instanceof Error)) {
9
+ return false;
10
+ }
11
+ const message = error.message.toLowerCase();
12
+ // Pattern 1: 400 Bad Request with tool-related messages
13
+ if (message.includes('400') && message.includes('bad request')) {
14
+ const toolPatterns = [
15
+ /tool/i,
16
+ /function/i,
17
+ /invalid.*parameter/i,
18
+ /unexpected.*field/i,
19
+ /unrecognized/i,
20
+ ];
21
+ for (const pattern of toolPatterns) {
22
+ if (pattern.test(message)) {
23
+ return true;
24
+ }
25
+ }
26
+ }
27
+ // Pattern 2: Direct mentions of tool/function not supported
28
+ const directPatterns = [
29
+ /tool.*not.*support/i,
30
+ /function.*not.*support/i,
31
+ /tool.*unsupported/i,
32
+ /function.*unsupported/i,
33
+ /invalid.*tool/i,
34
+ /invalid.*function/i,
35
+ /tool.*parameter.*invalid/i,
36
+ /function.*parameter.*invalid/i,
37
+ ];
38
+ for (const pattern of directPatterns) {
39
+ if (pattern.test(message)) {
40
+ return true;
41
+ }
42
+ }
43
+ // Pattern 3: Ollama-specific error messages
44
+ // Ollama may return errors like: "invalid character 't' looking for beginning of value"
45
+ // when it encounters the 'tools' field in JSON
46
+ if (message.includes('invalid character') &&
47
+ message.includes('after top-level value')) {
48
+ return true;
49
+ }
50
+ return false;
51
+ }
52
+ //# sourceMappingURL=tool-error-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-error-detector.js","sourceRoot":"","sources":["../../../source/ai-sdk-client/error-handling/tool-error-detector.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAChD,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAE5C,wDAAwD;IACxD,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAChE,MAAM,YAAY,GAAG;YACpB,OAAO;YACP,WAAW;YACX,qBAAqB;YACrB,oBAAoB;YACpB,eAAe;SACf,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;YACpC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,CAAC;YACb,CAAC;QACF,CAAC;IACF,CAAC;IAED,4DAA4D;IAC5D,MAAM,cAAc,GAAG;QACtB,qBAAqB;QACrB,yBAAyB;QACzB,oBAAoB;QACpB,wBAAwB;QACxB,gBAAgB;QAChB,oBAAoB;QACpB,2BAA2B;QAC3B,+BAA+B;KAC/B,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IAED,4CAA4C;IAC5C,wFAAwF;IACxF,+CAA+C;IAC/C,IACC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACrC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EACxC,CAAC;QACF,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AISDKCoreTool } from '../../types/index.js';
2
+ /**
3
+ * Formats tool definitions for injection into the system prompt
4
+ * Used when native tool calling is disabled but we still want the model
5
+ * to be able to call tools via XML format
6
+ */
7
+ export declare function formatToolsForPrompt(tools: Record<string, AISDKCoreTool>): string;
8
+ //# sourceMappingURL=tool-prompt-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-prompt-formatter.d.ts","sourceRoot":"","sources":["../../../source/ai-sdk-client/tools/tool-prompt-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,eAAe,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAClC,MAAM,CAyBR"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Formats tool definitions for injection into the system prompt
3
+ * Used when native tool calling is disabled but we still want the model
4
+ * to be able to call tools via XML format
5
+ */
6
+ export function formatToolsForPrompt(tools) {
7
+ const toolNames = Object.keys(tools);
8
+ if (toolNames.length === 0) {
9
+ return '';
10
+ }
11
+ let prompt = '\n\n## AVAILABLE TOOLS\n\n';
12
+ prompt +=
13
+ 'You have access to the following tools. To use a tool, output an XML block in this exact format:\n\n';
14
+ prompt +=
15
+ '```xml\n<tool_name>\n<param1>value1</param1>\n<param2>value2</param2>\n</tool_name>\n```\n\n';
16
+ prompt += 'IMPORTANT:\n';
17
+ prompt += '- Use the exact tool name as the outer XML tag\n';
18
+ prompt += '- Each parameter should be its own XML tag inside\n';
19
+ prompt +=
20
+ '- Do NOT use attributes like <function=name> or <parameter=name>\n';
21
+ prompt += '- You may call multiple tools in sequence\n\n';
22
+ for (const name of toolNames) {
23
+ const tool = tools[name];
24
+ prompt += formatSingleTool(name, tool);
25
+ }
26
+ return prompt;
27
+ }
28
+ /**
29
+ * Formats a single tool definition
30
+ */
31
+ function formatSingleTool(name, tool) {
32
+ let output = `### ${name}\n\n`;
33
+ // Extract description from tool
34
+ const description = extractDescription(tool);
35
+ if (description) {
36
+ output += `${description}\n\n`;
37
+ }
38
+ // Extract and format parameters
39
+ const schema = extractInputSchema(tool);
40
+ if (schema && schema.properties) {
41
+ output += '**Parameters:**\n';
42
+ const properties = schema.properties;
43
+ const required = schema.required || [];
44
+ for (const [paramName, paramSchema] of Object.entries(properties)) {
45
+ const isRequired = required.includes(paramName);
46
+ const typeStr = paramSchema.type || 'any';
47
+ const reqStr = isRequired ? '(required)' : '(optional)';
48
+ const descStr = paramSchema.description || '';
49
+ output += `- \`${paramName}\` (${typeStr}) ${reqStr}: ${descStr}\n`;
50
+ }
51
+ output += '\n';
52
+ // Add example usage
53
+ output += '**Example:**\n```xml\n';
54
+ output += `<${name}>\n`;
55
+ for (const paramName of required.slice(0, 2)) {
56
+ // Show first 2 required params
57
+ output += `<${paramName}>value</${paramName}>\n`;
58
+ }
59
+ output += `</${name}>\n`;
60
+ output += '```\n\n';
61
+ }
62
+ return output;
63
+ }
64
+ /**
65
+ * Extracts description from AI SDK tool
66
+ */
67
+ function extractDescription(tool) {
68
+ // AI SDK tools have description at the top level
69
+ if ('description' in tool && typeof tool.description === 'string') {
70
+ return tool.description;
71
+ }
72
+ return undefined;
73
+ }
74
+ /**
75
+ * Extracts input schema from AI SDK tool
76
+ */
77
+ function extractInputSchema(tool) {
78
+ // AI SDK v6 tools use inputSchema (from jsonSchema())
79
+ if ('inputSchema' in tool && tool.inputSchema) {
80
+ const schema = tool.inputSchema;
81
+ // jsonSchema() wraps the schema, so we need to unwrap it
82
+ if (schema.jsonSchema) {
83
+ return schema.jsonSchema;
84
+ }
85
+ return schema;
86
+ }
87
+ // Fallback: check for parameters (older format)
88
+ if ('parameters' in tool && tool.parameters) {
89
+ const params = tool.parameters;
90
+ if (params.jsonSchema) {
91
+ return params.jsonSchema;
92
+ }
93
+ return params;
94
+ }
95
+ return undefined;
96
+ }
97
+ //# sourceMappingURL=tool-prompt-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-prompt-formatter.js","sourceRoot":"","sources":["../../../source/ai-sdk-client/tools/tool-prompt-formatter.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../source/app/App.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AA6B1C,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,EAC3B,UAAkB,EAClB,UAAU,EACV,oBAAoB,EACpB,kBAA0B,GAC1B,EAAE,QAAQ,2CAklBV"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../source/app/App.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AA6B1C,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,EAC3B,UAAkB,EAClB,UAAU,EACV,oBAAoB,EACpB,kBAA0B,GAC1B,EAAE,QAAQ,2CAumBV"}