@nanocollective/nanocoder 1.22.4 → 1.23.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 (308) hide show
  1. package/README.md +93 -30
  2. package/assets/nanocoder-vscode.vsix +0 -0
  3. package/dist/ai-sdk-client/chat/chat-handler.js +1 -1
  4. package/dist/ai-sdk-client/chat/chat-handler.js.map +1 -1
  5. package/dist/ai-sdk-client/chat/tool-processor.d.ts +1 -1
  6. package/dist/ai-sdk-client/chat/tool-processor.d.ts.map +1 -1
  7. package/dist/ai-sdk-client/chat/tool-processor.js +8 -3
  8. package/dist/ai-sdk-client/chat/tool-processor.js.map +1 -1
  9. package/dist/ai-sdk-client/error-handling/error-parser.d.ts.map +1 -1
  10. package/dist/ai-sdk-client/error-handling/error-parser.js +4 -1
  11. package/dist/ai-sdk-client/error-handling/error-parser.js.map +1 -1
  12. package/dist/app/App.d.ts.map +1 -1
  13. package/dist/app/App.js +106 -11
  14. package/dist/app/App.js.map +1 -1
  15. package/dist/app/components/chat-input.d.ts +6 -1
  16. package/dist/app/components/chat-input.d.ts.map +1 -1
  17. package/dist/app/components/chat-input.js +9 -7
  18. package/dist/app/components/chat-input.js.map +1 -1
  19. package/dist/app/utils/app-util.d.ts +5 -0
  20. package/dist/app/utils/app-util.d.ts.map +1 -1
  21. package/dist/app/utils/app-util.js +265 -0
  22. package/dist/app/utils/app-util.js.map +1 -1
  23. package/dist/client-factory.d.ts.map +1 -1
  24. package/dist/client-factory.js +3 -2
  25. package/dist/client-factory.js.map +1 -1
  26. package/dist/commands/context-max.d.ts +15 -0
  27. package/dist/commands/context-max.d.ts.map +1 -0
  28. package/dist/commands/context-max.js +22 -0
  29. package/dist/commands/context-max.js.map +1 -0
  30. package/dist/commands/custom-commands.d.ts.map +1 -1
  31. package/dist/commands/custom-commands.js +88 -4
  32. package/dist/commands/custom-commands.js.map +1 -1
  33. package/dist/commands/exit.d.ts.map +1 -1
  34. package/dist/commands/exit.js +5 -8
  35. package/dist/commands/exit.js.map +1 -1
  36. package/dist/commands/ide.d.ts +3 -0
  37. package/dist/commands/ide.d.ts.map +1 -0
  38. package/dist/commands/ide.js +10 -0
  39. package/dist/commands/ide.js.map +1 -0
  40. package/dist/commands/index.d.ts +3 -0
  41. package/dist/commands/index.d.ts.map +1 -1
  42. package/dist/commands/index.js +3 -0
  43. package/dist/commands/index.js.map +1 -1
  44. package/dist/commands/schedule.d.ts +3 -0
  45. package/dist/commands/schedule.d.ts.map +1 -0
  46. package/dist/commands/schedule.js +177 -0
  47. package/dist/commands/schedule.js.map +1 -0
  48. package/dist/commands/usage.d.ts.map +1 -1
  49. package/dist/commands/usage.js +4 -3
  50. package/dist/commands/usage.js.map +1 -1
  51. package/dist/components/development-mode-indicator.d.ts +3 -2
  52. package/dist/components/development-mode-indicator.d.ts.map +1 -1
  53. package/dist/components/development-mode-indicator.js +23 -9
  54. package/dist/components/development-mode-indicator.js.map +1 -1
  55. package/dist/components/ide-selector.d.ts +7 -0
  56. package/dist/components/ide-selector.d.ts.map +1 -0
  57. package/dist/components/ide-selector.js +17 -0
  58. package/dist/components/ide-selector.js.map +1 -0
  59. package/dist/components/question-prompt.d.ts +8 -0
  60. package/dist/components/question-prompt.d.ts.map +1 -0
  61. package/dist/components/question-prompt.js +58 -0
  62. package/dist/components/question-prompt.js.map +1 -0
  63. package/dist/components/scheduler-view.d.ts +14 -0
  64. package/dist/components/scheduler-view.d.ts.map +1 -0
  65. package/dist/components/scheduler-view.js +17 -0
  66. package/dist/components/scheduler-view.js.map +1 -0
  67. package/dist/components/text-input.d.ts +13 -0
  68. package/dist/components/text-input.d.ts.map +1 -0
  69. package/dist/components/text-input.js +175 -0
  70. package/dist/components/text-input.js.map +1 -0
  71. package/dist/components/user-input.d.ts +2 -1
  72. package/dist/components/user-input.d.ts.map +1 -1
  73. package/dist/components/user-input.js +8 -15
  74. package/dist/components/user-input.js.map +1 -1
  75. package/dist/config/themes.d.ts.map +1 -1
  76. package/dist/config/themes.js +20 -0
  77. package/dist/config/themes.js.map +1 -1
  78. package/dist/constants.d.ts +2 -0
  79. package/dist/constants.d.ts.map +1 -1
  80. package/dist/constants.js +55 -0
  81. package/dist/constants.js.map +1 -1
  82. package/dist/custom-commands/command-integration.d.ts +24 -0
  83. package/dist/custom-commands/command-integration.d.ts.map +1 -0
  84. package/dist/custom-commands/command-integration.js +68 -0
  85. package/dist/custom-commands/command-integration.js.map +1 -0
  86. package/dist/custom-commands/executor.d.ts.map +1 -1
  87. package/dist/custom-commands/executor.js +12 -2
  88. package/dist/custom-commands/executor.js.map +1 -1
  89. package/dist/custom-commands/loader.d.ts +33 -5
  90. package/dist/custom-commands/loader.d.ts.map +1 -1
  91. package/dist/custom-commands/loader.js +191 -18
  92. package/dist/custom-commands/loader.js.map +1 -1
  93. package/dist/custom-commands/parser.d.ts.map +1 -1
  94. package/dist/custom-commands/parser.js +115 -48
  95. package/dist/custom-commands/parser.js.map +1 -1
  96. package/dist/hooks/chat-handler/conversation/conversation-loop.d.ts +1 -1
  97. package/dist/hooks/chat-handler/conversation/conversation-loop.d.ts.map +1 -1
  98. package/dist/hooks/chat-handler/conversation/conversation-loop.js +37 -5
  99. package/dist/hooks/chat-handler/conversation/conversation-loop.js.map +1 -1
  100. package/dist/hooks/chat-handler/conversation/tool-executor.js +1 -1
  101. package/dist/hooks/chat-handler/conversation/tool-executor.js.map +1 -1
  102. package/dist/hooks/chat-handler/types.d.ts +3 -1
  103. package/dist/hooks/chat-handler/types.d.ts.map +1 -1
  104. package/dist/hooks/chat-handler/useChatHandler.d.ts +1 -1
  105. package/dist/hooks/chat-handler/useChatHandler.d.ts.map +1 -1
  106. package/dist/hooks/chat-handler/useChatHandler.js +13 -5
  107. package/dist/hooks/chat-handler/useChatHandler.js.map +1 -1
  108. package/dist/hooks/useAppHandlers.d.ts +2 -0
  109. package/dist/hooks/useAppHandlers.d.ts.map +1 -1
  110. package/dist/hooks/useAppHandlers.js +5 -0
  111. package/dist/hooks/useAppHandlers.js.map +1 -1
  112. package/dist/hooks/useAppInitialization.d.ts.map +1 -1
  113. package/dist/hooks/useAppInitialization.js +4 -1
  114. package/dist/hooks/useAppInitialization.js.map +1 -1
  115. package/dist/hooks/useAppState.d.ts +15 -0
  116. package/dist/hooks/useAppState.d.ts.map +1 -1
  117. package/dist/hooks/useAppState.js +23 -0
  118. package/dist/hooks/useAppState.js.map +1 -1
  119. package/dist/hooks/useContextPercentage.d.ts +17 -0
  120. package/dist/hooks/useContextPercentage.d.ts.map +1 -0
  121. package/dist/hooks/useContextPercentage.js +71 -0
  122. package/dist/hooks/useContextPercentage.js.map +1 -0
  123. package/dist/hooks/useModeHandlers.d.ts +4 -1
  124. package/dist/hooks/useModeHandlers.d.ts.map +1 -1
  125. package/dist/hooks/useModeHandlers.js +11 -1
  126. package/dist/hooks/useModeHandlers.js.map +1 -1
  127. package/dist/hooks/useNonInteractiveMode.d.ts.map +1 -1
  128. package/dist/hooks/useNonInteractiveMode.js +3 -1
  129. package/dist/hooks/useNonInteractiveMode.js.map +1 -1
  130. package/dist/hooks/useSchedulerMode.d.ts +30 -0
  131. package/dist/hooks/useSchedulerMode.d.ts.map +1 -0
  132. package/dist/hooks/useSchedulerMode.js +99 -0
  133. package/dist/hooks/useSchedulerMode.js.map +1 -0
  134. package/dist/lsp/lsp-manager.d.ts.map +1 -1
  135. package/dist/lsp/lsp-manager.js +10 -0
  136. package/dist/lsp/lsp-manager.js.map +1 -1
  137. package/dist/mcp/mcp-client.d.ts.map +1 -1
  138. package/dist/mcp/mcp-client.js +20 -1
  139. package/dist/mcp/mcp-client.js.map +1 -1
  140. package/dist/models/index.d.ts +1 -1
  141. package/dist/models/index.d.ts.map +1 -1
  142. package/dist/models/index.js +1 -1
  143. package/dist/models/index.js.map +1 -1
  144. package/dist/models/models-dev-client.d.ts +8 -1
  145. package/dist/models/models-dev-client.d.ts.map +1 -1
  146. package/dist/models/models-dev-client.js +116 -88
  147. package/dist/models/models-dev-client.js.map +1 -1
  148. package/dist/schedule/cron.d.ts +14 -0
  149. package/dist/schedule/cron.d.ts.map +1 -0
  150. package/dist/schedule/cron.js +107 -0
  151. package/dist/schedule/cron.js.map +1 -0
  152. package/dist/schedule/index.d.ts +4 -0
  153. package/dist/schedule/index.d.ts.map +1 -0
  154. package/dist/schedule/index.js +4 -0
  155. package/dist/schedule/index.js.map +1 -0
  156. package/dist/schedule/runner.d.ts +42 -0
  157. package/dist/schedule/runner.d.ts.map +1 -0
  158. package/dist/schedule/runner.js +136 -0
  159. package/dist/schedule/runner.js.map +1 -0
  160. package/dist/schedule/storage.d.ts +9 -0
  161. package/dist/schedule/storage.d.ts.map +1 -0
  162. package/dist/schedule/storage.js +68 -0
  163. package/dist/schedule/storage.js.map +1 -0
  164. package/dist/schedule/types.d.ts +24 -0
  165. package/dist/schedule/types.d.ts.map +1 -0
  166. package/dist/schedule/types.js +2 -0
  167. package/dist/schedule/types.js.map +1 -0
  168. package/dist/services/bash-executor.d.ts.map +1 -1
  169. package/dist/services/bash-executor.js +5 -0
  170. package/dist/services/bash-executor.js.map +1 -1
  171. package/dist/tool-calling/json-parser.d.ts +7 -3
  172. package/dist/tool-calling/json-parser.d.ts.map +1 -1
  173. package/dist/tool-calling/json-parser.js +59 -23
  174. package/dist/tool-calling/json-parser.js.map +1 -1
  175. package/dist/tool-calling/tool-parser.d.ts +2 -2
  176. package/dist/tool-calling/tool-parser.d.ts.map +1 -1
  177. package/dist/tool-calling/tool-parser.js +27 -23
  178. package/dist/tool-calling/tool-parser.js.map +1 -1
  179. package/dist/tool-calling/xml-parser.d.ts +8 -4
  180. package/dist/tool-calling/xml-parser.d.ts.map +1 -1
  181. package/dist/tool-calling/xml-parser.js +15 -5
  182. package/dist/tool-calling/xml-parser.js.map +1 -1
  183. package/dist/tools/ask-question.d.ts +3 -0
  184. package/dist/tools/ask-question.d.ts.map +1 -0
  185. package/dist/tools/ask-question.js +66 -0
  186. package/dist/tools/ask-question.js.map +1 -0
  187. package/dist/tools/execute-bash.js +1 -1
  188. package/dist/tools/execute-bash.js.map +1 -1
  189. package/dist/tools/file-ops/copy-file.d.ts +3 -0
  190. package/dist/tools/file-ops/copy-file.d.ts.map +1 -0
  191. package/dist/tools/file-ops/copy-file.js +126 -0
  192. package/dist/tools/file-ops/copy-file.js.map +1 -0
  193. package/dist/tools/file-ops/create-directory.d.ts +3 -0
  194. package/dist/tools/file-ops/create-directory.d.ts.map +1 -0
  195. package/dist/tools/file-ops/create-directory.js +76 -0
  196. package/dist/tools/file-ops/create-directory.js.map +1 -0
  197. package/dist/tools/file-ops/delete-file.d.ts +3 -0
  198. package/dist/tools/file-ops/delete-file.d.ts.map +1 -0
  199. package/dist/tools/file-ops/delete-file.js +88 -0
  200. package/dist/tools/file-ops/delete-file.js.map +1 -0
  201. package/dist/tools/file-ops/index.d.ts +3 -0
  202. package/dist/tools/file-ops/index.d.ts.map +1 -0
  203. package/dist/tools/file-ops/index.js +8 -0
  204. package/dist/tools/file-ops/index.js.map +1 -0
  205. package/dist/tools/file-ops/move-file.d.ts +3 -0
  206. package/dist/tools/file-ops/move-file.d.ts.map +1 -0
  207. package/dist/tools/file-ops/move-file.js +126 -0
  208. package/dist/tools/file-ops/move-file.js.map +1 -0
  209. package/dist/tools/file-ops/string-replace.d.ts +3 -0
  210. package/dist/tools/file-ops/string-replace.d.ts.map +1 -0
  211. package/dist/tools/{string-replace.js → file-ops/string-replace.js} +17 -17
  212. package/dist/tools/file-ops/string-replace.js.map +1 -0
  213. package/dist/tools/file-ops/write-file.d.ts +3 -0
  214. package/dist/tools/file-ops/write-file.d.ts.map +1 -0
  215. package/dist/tools/{write-file.js → file-ops/write-file.js} +31 -17
  216. package/dist/tools/file-ops/write-file.js.map +1 -0
  217. package/dist/tools/git/git-reset.js +1 -1
  218. package/dist/tools/git/git-reset.js.map +1 -1
  219. package/dist/tools/git/index.js +3 -3
  220. package/dist/tools/git/index.js.map +1 -1
  221. package/dist/tools/git/utils.d.ts +4 -0
  222. package/dist/tools/git/utils.d.ts.map +1 -1
  223. package/dist/tools/git/utils.js +12 -0
  224. package/dist/tools/git/utils.js.map +1 -1
  225. package/dist/tools/index.d.ts.map +1 -1
  226. package/dist/tools/index.js +8 -2
  227. package/dist/tools/index.js.map +1 -1
  228. package/dist/tools/search-file-contents.d.ts.map +1 -1
  229. package/dist/tools/search-file-contents.js +59 -10
  230. package/dist/tools/search-file-contents.js.map +1 -1
  231. package/dist/tools/tool-manager.d.ts.map +1 -1
  232. package/dist/tools/tool-manager.js +9 -0
  233. package/dist/tools/tool-manager.js.map +1 -1
  234. package/dist/types/app.d.ts +2 -0
  235. package/dist/types/app.d.ts.map +1 -1
  236. package/dist/types/commands.d.ts +20 -0
  237. package/dist/types/commands.d.ts.map +1 -1
  238. package/dist/types/core.d.ts +2 -1
  239. package/dist/types/core.d.ts.map +1 -1
  240. package/dist/types/core.js +7 -0
  241. package/dist/types/core.js.map +1 -1
  242. package/dist/types/ui.d.ts +1 -1
  243. package/dist/types/ui.d.ts.map +1 -1
  244. package/dist/utils/auto-compact.d.ts.map +1 -1
  245. package/dist/utils/auto-compact.js +13 -7
  246. package/dist/utils/auto-compact.js.map +1 -1
  247. package/dist/utils/file-content-loader.d.ts.map +1 -1
  248. package/dist/utils/file-content-loader.js +58 -1
  249. package/dist/utils/file-content-loader.js.map +1 -1
  250. package/dist/utils/logging/index.d.ts.map +1 -1
  251. package/dist/utils/logging/index.js +18 -30
  252. package/dist/utils/logging/index.js.map +1 -1
  253. package/dist/utils/question-queue.d.ts +15 -0
  254. package/dist/utils/question-queue.d.ts.map +1 -0
  255. package/dist/utils/question-queue.js +25 -0
  256. package/dist/utils/question-queue.js.map +1 -0
  257. package/dist/utils/response-formatter.d.ts +108 -0
  258. package/dist/utils/response-formatter.d.ts.map +1 -0
  259. package/dist/utils/response-formatter.js +387 -0
  260. package/dist/utils/response-formatter.js.map +1 -0
  261. package/dist/utils/shutdown/index.d.ts +7 -0
  262. package/dist/utils/shutdown/index.d.ts.map +1 -0
  263. package/dist/utils/shutdown/index.js +6 -0
  264. package/dist/utils/shutdown/index.js.map +1 -0
  265. package/dist/utils/shutdown/shutdown-manager.d.ts +19 -0
  266. package/dist/utils/shutdown/shutdown-manager.d.ts.map +1 -0
  267. package/dist/utils/shutdown/shutdown-manager.js +100 -0
  268. package/dist/utils/shutdown/shutdown-manager.js.map +1 -0
  269. package/dist/utils/shutdown/types.d.ts +9 -0
  270. package/dist/utils/shutdown/types.d.ts.map +1 -0
  271. package/dist/utils/shutdown/types.js +2 -0
  272. package/dist/utils/shutdown/types.js.map +1 -0
  273. package/dist/utils/type-helpers.d.ts +140 -0
  274. package/dist/utils/type-helpers.d.ts.map +1 -0
  275. package/dist/utils/type-helpers.js +220 -0
  276. package/dist/utils/type-helpers.js.map +1 -0
  277. package/dist/utils/url-utils.d.ts +6 -0
  278. package/dist/utils/url-utils.d.ts.map +1 -0
  279. package/dist/utils/url-utils.js +22 -0
  280. package/dist/utils/url-utils.js.map +1 -0
  281. package/dist/vscode/vscode-server.d.ts.map +1 -1
  282. package/dist/vscode/vscode-server.js +10 -0
  283. package/dist/vscode/vscode-server.js.map +1 -1
  284. package/dist/wizards/steps/mcp-step.js +1 -1
  285. package/dist/wizards/steps/mcp-step.js.map +1 -1
  286. package/dist/wizards/steps/provider-step.js +1 -1
  287. package/dist/wizards/steps/provider-step.js.map +1 -1
  288. package/dist/wizards/templates/mcp-templates.d.ts.map +1 -1
  289. package/dist/wizards/templates/mcp-templates.js +8 -6
  290. package/dist/wizards/templates/mcp-templates.js.map +1 -1
  291. package/dist/wizards/templates/provider-templates.d.ts.map +1 -1
  292. package/dist/wizards/templates/provider-templates.js +35 -2
  293. package/dist/wizards/templates/provider-templates.js.map +1 -1
  294. package/dist/wizards/validation.d.ts.map +1 -1
  295. package/dist/wizards/validation.js +2 -3
  296. package/dist/wizards/validation.js.map +1 -1
  297. package/package.json +9 -18
  298. package/source/app/prompts/main-prompt.md +21 -3
  299. package/dist/hooks/chat-handler/utils/context-checker.d.ts +0 -15
  300. package/dist/hooks/chat-handler/utils/context-checker.d.ts.map +0 -1
  301. package/dist/hooks/chat-handler/utils/context-checker.js +0 -68
  302. package/dist/hooks/chat-handler/utils/context-checker.js.map +0 -1
  303. package/dist/tools/string-replace.d.ts +0 -3
  304. package/dist/tools/string-replace.d.ts.map +0 -1
  305. package/dist/tools/string-replace.js.map +0 -1
  306. package/dist/tools/write-file.d.ts +0 -3
  307. package/dist/tools/write-file.d.ts.map +0 -1
  308. package/dist/tools/write-file.js.map +0 -1
package/README.md CHANGED
@@ -414,6 +414,7 @@ Nanocoder looks for configuration in the following order (first found wins):
414
414
  Keep API keys out of version control using environment variables. Variables are loaded from shell environment (`.bashrc`, `.zshrc`) or `.env` file in your working directory.
415
415
 
416
416
  - `NANOCODER_CONFIG_DIR`: Override the global configuration directory.
417
+ - `NANOCODER_CONTEXT_LIMIT`: Set a default context limit (in tokens) for models not found on models.dev. This is used as a fallback when the model's context window is unknown, enabling auto-compact and `/usage` to work correctly.
417
418
  - `NANOCODER_DATA_DIR`: Override the application data directory used for internal data like usage statistics.
418
419
 
419
420
  **Syntax:** `$VAR_NAME`, `${VAR_NAME}`, or `${VAR_NAME:-default}`
@@ -594,18 +595,22 @@ You can override this directory using `NANOCODER_DATA_DIR`.
594
595
  - `/model` - Switch between available models
595
596
  - `/provider` - Switch between configured AI providers
596
597
  - `/status` - Display current status (CWD, provider, model, theme, available updates, AGENTS setup)
598
+ - `/tasks` - Manage task list for tracking complex work (see [Task Management](#task-management) section)
597
599
  - `/model-database` - Browse coding models from OpenRouter (searchable, filterable by open/proprietary)
598
600
  - `/settings` - Interactive menu to access Nanocoder theme settings (theme, title-shape, nanocoder-shape) and commands
599
601
  - `/mcp` - Show connected MCP servers and their tools
600
602
  - `/custom-commands` - List all custom commands
601
603
  - `/checkpoint` - Save and restore conversation snapshots (see [Checkpointing](#checkpointing) section)
602
604
  - `/compact` - Compress message history to reduce context usage (see [Context Compression](docs/context-compression.md))
605
+ - `/context-max` - Set maximum context length for the current session (useful for models not listed on models.dev)
603
606
  - `/exit` - Exit the application
604
607
  - `/export` - Export current session to markdown file
605
608
  - `/update` - Update Nanocoder to the latest version
606
609
  - `/usage` – Get current model context usage visually
607
610
  - `/lsp` – List connected LSP servers
611
+ - `/schedule` – Schedule recurring AI tasks (see [Scheduled Tasks](#scheduled-tasks) section)
608
612
  - `/explorer` - Interactive file browser to navigate, preview, and select files for context
613
+ - `/ide` - Connect to an IDE for live integration (e.g., VS Code diff previews)
609
614
  - `!command` - Execute bash commands directly without leaving Nanocoder (output becomes context for the LLM)
610
615
  - `@file` - Include file contents in messages automatically via fuzzy search as you type
611
616
 
@@ -669,6 +674,73 @@ Nanocoder supports conversation checkpointing, allowing you to save snapshots of
669
674
  /checkpoint list
670
675
  ```
671
676
 
677
+ #### Task Management
678
+
679
+ Nanocoder provides a task management system for tracking complex multi-step work. Tasks persist in `.nanocoder/tasks.json` and are useful for both users and AI models to track progress on involved tasks.
680
+
681
+ The LLM has access to task management tools (`create_task`, `list_tasks`, `update_task`, `delete_task`) and will automatically use them to track progress on complex work. You don't need to manually create tasks if you don't want to - the AI will manage them for you.
682
+
683
+ **Task Commands:**
684
+
685
+ - `/tasks` - Show all tasks with their status
686
+ - `/tasks add <title>` - Add a new task (also works: `/tasks <title>`)
687
+ - `/tasks remove <number>` - Remove a task by number (alias: `/tasks rm <number>`)
688
+ - `/tasks clear` - Clear all tasks
689
+
690
+ **Examples:**
691
+
692
+ ```bash
693
+ # View current tasks
694
+ /tasks
695
+
696
+ # Add a new task
697
+ /tasks add Implement user authentication
698
+
699
+ # Or simply type the task title
700
+ /tasks Implement user authentication
701
+
702
+ # Remove a task (note the number)
703
+ /tasks remove 1
704
+
705
+ # Clear all tasks
706
+ /tasks clear
707
+ ```
708
+
709
+ **Storage:**
710
+
711
+ - Tasks are stored in `.nanocoder/tasks.json` in your project directory
712
+ - Tasks are automatically cleared when Nanocoder starts (to keep the task list fresh)
713
+ - Tasks are also cleared when using the `/clear` command
714
+ - Consider adding `.nanocoder/tasks.json` to your `.gitignore` if you want to exclude it from version control
715
+
716
+ #### Scheduled Tasks
717
+
718
+ Nanocoder supports scheduling recurring AI tasks using cron expressions. This is useful for automating routine coding tasks like dependency updates, code reviews, or daily standup summaries.
719
+
720
+ **Quick Start:**
721
+
722
+ ```bash
723
+ # Create a new scheduled task file
724
+ /schedule create deps-update
725
+
726
+ # Add a schedule for it (every Monday at 9am)
727
+ /schedule add "0 9 * * MON" deps-update
728
+
729
+ # Start the scheduler
730
+ /schedule start
731
+ ```
732
+
733
+ **Commands:**
734
+
735
+ - `/schedule create <name>` - Create a new scheduled task file
736
+ - `/schedule add "<cron>" <name>` - Add a schedule for a task (`.md` extension inferred)
737
+ - `/schedule list` - Show all configured schedules
738
+ - `/schedule remove <id>` - Remove a schedule by ID
739
+ - `/schedule logs [id]` - Show execution logs
740
+ - `/schedule start` - Enter scheduler mode to run scheduled tasks
741
+
742
+ > **Full documentation**: See the [Scheduled Tasks Guide](docs/scheduler.md) for detailed usage, examples, and tips.
743
+
672
744
  #### File Explorer
673
745
 
674
746
  The `/explorer` command opens an interactive file browser for navigating your project, previewing files with syntax highlighting, and selecting multiple files to add as context.
@@ -715,44 +787,34 @@ The `/explorer` command opens an interactive file browser for navigating your pr
715
787
 
716
788
  #### Custom Commands
717
789
 
718
- Nanocoder supports custom commands defined as markdown files in the `.nanocoder/commands` directory. Like `agents.config.json`, this directory is created per codebase, allowing you to create reusable prompts with parameters and organize them by category specific to each project.
790
+ Nanocoder supports custom commands defined as markdown files in `.nanocoder/commands/`. Define reusable AI prompts with parameters, aliases, and auto-injection support, organized per project.
791
+
792
+ ```bash
793
+ # Create a command with AI assistance
794
+ /commands create review-code
795
+
796
+ # Or create the file manually in .nanocoder/commands/review-code.md
797
+ ```
719
798
 
720
- **Example custom command** (`.nanocoder/commands/test.md`):
799
+ **Example** (`.nanocoder/commands/test.md`):
721
800
 
722
801
  ```markdown
723
802
  ---
724
- description: 'Generate comprehensive unit tests for the specified component'
725
- aliases: ['testing', 'spec']
726
- parameters:
727
- - name: 'component'
728
- description: 'The component or function to test'
729
- required: true
803
+ description: Generate comprehensive unit tests
804
+ aliases: [unittest, test-gen]
805
+ parameters: [filename]
730
806
  ---
731
807
 
732
- Generate comprehensive unit tests for {{component}}. Include:
733
-
734
- - Happy path scenarios
735
- - Edge cases and error handling
736
- - Mock dependencies where appropriate
737
- - Clear test descriptions
808
+ Generate comprehensive unit tests for {{filename}}.
738
809
  ```
739
810
 
740
- **Usage**: `/test component="UserService"`
741
-
742
- **Features**:
811
+ **Usage**: `/test src/utils.ts`
743
812
 
744
- - YAML frontmatter for metadata (description, aliases, parameters)
745
- - Template variable substitution with `{{parameter}}` syntax
746
- - Namespace support through directories (e.g., `/refactor:dry`)
747
- - Autocomplete integration for command discovery
748
- - Parameter validation and prompting
813
+ **Commands**: `/commands` (list), `/commands show <name>`, `/commands refresh`, `/commands create <name>`
749
814
 
750
- **Pre-installed Commands**:
815
+ **Pre-installed**: `/test`, `/review`, `/refactor:dry`, `/refactor:solid`
751
816
 
752
- - `/test` - Generate comprehensive unit tests for components
753
- - `/review` - Perform thorough code reviews with suggestions
754
- - `/refactor:dry` - Apply DRY (Don't Repeat Yourself) principle
755
- - `/refactor:solid` - Apply SOLID design principles
817
+ > **Full documentation**: See the [Custom Commands Guide](docs/custom-commands.md) for frontmatter reference, auto-injection, resources, namespaces, and more.
756
818
 
757
819
  ## Features
758
820
 
@@ -775,10 +837,11 @@ Generate comprehensive unit tests for {{component}}. Include:
775
837
  ### Custom Command System
776
838
 
777
839
  - **Markdown-based commands**: Define reusable prompts in `.nanocoder/commands/`
840
+ - **AI-assisted creation**: `/commands create <name>` scaffolds a command and helps you write it
778
841
  - **Template variables**: Use `{{parameter}}` syntax for dynamic content
779
- - **Namespace organization**: Organize commands in folders (e.g., `refactor/dry.md`)
780
- - **Autocomplete support**: Tab completion for command discovery
781
- - **Rich metadata**: YAML frontmatter for descriptions, aliases, and parameters
842
+ - **Auto-injection**: Commands with tags/triggers are automatically injected into context when relevant
843
+ - **Namespace organization**: Organize commands in folders (e.g., `refactor/dry.md` becomes `/refactor:dry`)
844
+ - **Rich metadata**: YAML frontmatter for descriptions, aliases, parameters, and [more](docs/custom-commands.md)
782
845
 
783
846
  ### Enhanced User Experience
784
847
 
Binary file
@@ -158,7 +158,7 @@ export async function handleChat(params) {
158
158
  }
159
159
  // Check for XML tool calls if no native ones
160
160
  let content = fullText;
161
- const xmlResult = processXMLToolCalls(content, tools, callbacks);
161
+ const xmlResult = await processXMLToolCalls(content, tools, callbacks);
162
162
  if (xmlResult.toolCalls.length > 0) {
163
163
  toolCalls.push(...xmlResult.toolCalls);
164
164
  content = xmlResult.cleanedContent;
@@ -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":"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"}
@@ -6,5 +6,5 @@ export interface XMLToolProcessingResult {
6
6
  /**
7
7
  * Processes XML tool calls from response content
8
8
  */
9
- export declare function processXMLToolCalls(content: string, tools: Record<string, AISDKCoreTool>, callbacks: StreamCallbacks): XMLToolProcessingResult;
9
+ export declare function processXMLToolCalls(response: unknown, tools: Record<string, AISDKCoreTool>, callbacks: StreamCallbacks): Promise<XMLToolProcessingResult>;
10
10
  //# sourceMappingURL=tool-processor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-processor.d.ts","sourceRoot":"","sources":["../../../source/ai-sdk-client/chat/tool-processor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,aAAa,EAAE,eAAe,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAG5E,MAAM,WAAW,uBAAuB;IACvC,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACpC,SAAS,EAAE,eAAe,GACxB,uBAAuB,CAqDzB"}
1
+ {"version":3,"file":"tool-processor.d.ts","sourceRoot":"","sources":["../../../source/ai-sdk-client/chat/tool-processor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,aAAa,EAAE,eAAe,EAAE,QAAQ,EAAC,MAAM,eAAe,CAAC;AAI5E,MAAM,WAAW,uBAAuB;IACvC,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACxC,QAAQ,EAAE,OAAO,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,EACpC,SAAS,EAAE,eAAe,GACxB,OAAO,CAAC,uBAAuB,CAAC,CA2DlC"}
@@ -1,17 +1,22 @@
1
1
  import { XMLToolCallParser } from '../../tool-calling/xml-parser.js';
2
2
  import { getLogger } from '../../utils/logging/index.js';
3
+ import { normalizeLLMResponse } from '../../utils/response-formatter.js';
3
4
  /**
4
5
  * Processes XML tool calls from response content
5
6
  */
6
- export function processXMLToolCalls(content, tools, callbacks) {
7
+ export async function processXMLToolCalls(response, tools, callbacks) {
7
8
  const logger = getLogger();
8
9
  const toolCalls = [];
9
- let cleanedContent = content;
10
+ // NEW: Normalize response before processing
11
+ const normalized = await normalizeLLMResponse(response);
12
+ const content = normalized.content;
10
13
  // Only process if tools are available and no native tool calls were found
11
14
  if (Object.keys(tools).length === 0 || !content) {
12
- return { toolCalls, cleanedContent };
15
+ return { toolCalls, cleanedContent: content };
13
16
  }
14
17
  logger.debug('Checking for XML tool calls in response content');
18
+ // Initialize cleanedContent with original content (preserved if no tool calls found)
19
+ let cleanedContent = content;
15
20
  // First check for malformed XML tool calls
16
21
  const malformedError = XMLToolCallParser.detectMalformedToolCall(content);
17
22
  if (malformedError) {
@@ -1 +1 @@
1
- {"version":3,"file":"tool-processor.js","sourceRoot":"","sources":["../../../source/ai-sdk-client/chat/tool-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAO1C;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAClC,OAAe,EACf,KAAoC,EACpC,SAA0B;IAE1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,IAAI,cAAc,GAAG,OAAO,CAAC;IAE7B,0EAA0E;IAC1E,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjD,OAAO,EAAC,SAAS,EAAE,cAAc,EAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAEhE,2CAA2C;IAC3C,MAAM,cAAc,GAAG,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC1E,IAAI,cAAc,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE;YAC/C,KAAK,EAAE,cAAc,CAAC,KAAK;SAC3B,CAAC,CAAC;QAEH,mDAAmD;QACnD,2EAA2E;QAC3E,MAAM,aAAa,GAAa;YAC/B,EAAE,EAAE,0BAA0B;YAC9B,QAAQ,EAAE;gBACT,IAAI,EAAE,0BAA0B;gBAChC,SAAS,EAAE;oBACV,KAAK,EAAE,cAAc,CAAC,KAAK;iBAC3B;aACD;SACD,CAAC;QACF,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9B,SAAS,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,CAAC;QACtC,cAAc,GAAG,EAAE,CAAC,CAAC,uCAAuC;IAC7D,CAAC;SAAM,IAAI,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAEpD,0CAA0C;QAC1C,MAAM,eAAe,GAAG,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAC3E,cAAc,GAAG,iBAAiB,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAEvE,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;YACrC,aAAa,EAAE,YAAY,CAAC,MAAM;YAClC,aAAa,EAAE,cAAc,CAAC,MAAM;SACpC,CAAC,CAAC;QAEH,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC/B,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnB,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,OAAO,EAAC,SAAS,EAAE,cAAc,EAAC,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"tool-processor.js","sourceRoot":"","sources":["../../../source/ai-sdk-client/chat/tool-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,iBAAiB,EAAC,MAAM,2BAA2B,CAAC;AAE5D,OAAO,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAC,oBAAoB,EAAC,MAAM,4BAA4B,CAAC;AAOhE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,QAAiB,EACjB,KAAoC,EACpC,SAA0B;IAE1B,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAe,EAAE,CAAC;IAEjC,4CAA4C;IAC5C,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;IAEnC,0EAA0E;IAC1E,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjD,OAAO,EAAC,SAAS,EAAE,cAAc,EAAE,OAAO,EAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAEhE,qFAAqF;IACrF,IAAI,cAAc,GAAG,OAAO,CAAC;IAE7B,2CAA2C;IAC3C,MAAM,cAAc,GAAG,iBAAiB,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAC1E,IAAI,cAAc,EAAE,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE;YAC/C,KAAK,EAAE,cAAc,CAAC,KAAK;SAC3B,CAAC,CAAC;QAEH,mDAAmD;QACnD,2EAA2E;QAC3E,MAAM,aAAa,GAAa;YAC/B,EAAE,EAAE,0BAA0B;YAC9B,QAAQ,EAAE;gBACT,IAAI,EAAE,0BAA0B;gBAChC,SAAS,EAAE;oBACV,KAAK,EAAE,cAAc,CAAC,KAAK;iBAC3B;aACD;SACD,CAAC;QACF,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9B,SAAS,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC,CAAC;QACtC,cAAc,GAAG,EAAE,CAAC,CAAC,uCAAuC;IAC7D,CAAC;SAAM,IAAI,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAEpD,0CAA0C;QAC1C,MAAM,eAAe,GAAG,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAClE,MAAM,YAAY,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAC3E,cAAc,GAAG,iBAAiB,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAEvE,MAAM,CAAC,KAAK,CAAC,uBAAuB,EAAE;YACrC,aAAa,EAAE,YAAY,CAAC,MAAM;YAClC,aAAa,EAAE,cAAc,CAAC,MAAM;SACpC,CAAC,CAAC;QAEH,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YAC/B,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnB,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5B,CAAC;IACF,CAAC;IAED,OAAO,EAAC,SAAS,EAAE,cAAc,EAAC,CAAC;AACpC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"error-parser.d.ts","sourceRoot":"","sources":["../../../source/ai-sdk-client/error-handling/error-parser.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAyJpD"}
1
+ {"version":3,"file":"error-parser.d.ts","sourceRoot":"","sources":["../../../source/ai-sdk-client/error-handling/error-parser.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CA4JpD"}
@@ -113,7 +113,10 @@ export function parseAPIError(error) {
113
113
  }
114
114
  // Handle network errors
115
115
  if (errorMessage.includes('ECONNREFUSED') ||
116
- errorMessage.includes('connect')) {
116
+ errorMessage.includes('ECONNRESET') ||
117
+ errorMessage.includes('ENOTFOUND') ||
118
+ errorMessage.includes('connect ETIMEDOUT') ||
119
+ errorMessage.includes('Failed to fetch')) {
117
120
  return 'Connection failed: Unable to reach the model server';
118
121
  }
119
122
  // Handle context length errors
@@ -1 +1 @@
1
- {"version":3,"file":"error-parser.js","sourceRoot":"","sources":["../../../source/ai-sdk-client/error-handling/error-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"error-parser.js","sourceRoot":"","sources":["../../../source/ai-sdk-client/error-handling/error-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,IAAI,CAAC;AAChC,OAAO,EAAC,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAEtD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC3C,iDAAiD;IACjD,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAE1C,IAAI,CAAC,CAAC,SAAS,YAAY,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,8DAA8D,CAAC;IACvE,CAAC;IAED,kEAAkE;IAClE,IAAI,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;QACxC,4EAA4E;QAC5E,IAAI,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC;QAErC,wDAAwD;QACxD,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACJ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAG7C,CAAC;gBACF,IAAI,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;oBACzB,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;gBACnC,CAAC;qBAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBACzB,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC;gBAC7B,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,4DAA4D;gBAC5D,MAAM,QAAQ,GAAG,SAAS,CAAC,YAAY,CAAC,KAAK,CAC5C,8CAA8C,CAC9C,CAAC;gBACF,IAAI,QAAQ,EAAE,CAAC;oBACd,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC5B,CAAC;YACF,CAAC;QACF,CAAC;QAED,8BAA8B;QAC9B,IAAI,UAAU,EAAE,CAAC;YAChB,QAAQ,UAAU,EAAE,CAAC;gBACpB,KAAK,GAAG;oBACP,OAAO,gBAAgB,YAAY,EAAE,CAAC;gBACvC,KAAK,GAAG;oBACP,OAAO,uDAAuD,CAAC;gBAChE,KAAK,GAAG;oBACP,OAAO,8CAA8C,CAAC;gBACvD,KAAK,GAAG;oBACP,OAAO,sEAAsE,CAAC;gBAC/E,KAAK,GAAG;oBACP,IACC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC;wBACpC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC7B,CAAC;wBACF,OAAO,eAAe,YAAY,EAAE,CAAC;oBACtC,CAAC;oBACD,OAAO,mEAAmE,CAAC;gBAC5E,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG,CAAC;gBACT,KAAK,GAAG;oBACP,OAAO,iBAAiB,YAAY,EAAE,CAAC;gBACxC;oBACC,OAAO,mBAAmB,UAAU,MAAM,YAAY,EAAE,CAAC;YAC3D,CAAC;QACF,CAAC;IACF,CAAC;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC;IAEvC,yEAAyE;IACzE,4EAA4E;IAC5E,iEAAiE;IACjE,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CACrC,mEAAmE,CACnE,CAAC;IACF,IAAI,WAAW,EAAE,CAAC;QACjB,MAAM,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,WAAW,CAAC;QAC5C,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAEpC,QAAQ,UAAU,EAAE,CAAC;YACpB,KAAK,KAAK;gBACT,OAAO,gBAAgB,YAAY,EAAE,CAAC;YACvC,KAAK,KAAK;gBACT,OAAO,uDAAuD,CAAC;YAChE,KAAK,KAAK;gBACT,OAAO,8CAA8C,CAAC;YACvD,KAAK,KAAK;gBACT,OAAO,sEAAsE,CAAC;YAC/E,KAAK,KAAK;gBACT,wDAAwD;gBACxD,IACC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC;oBACpC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC7B,CAAC;oBACF,OAAO,eAAe,YAAY,EAAE,CAAC;gBACtC,CAAC;gBACD,OAAO,mEAAmE,CAAC;YAC5E,KAAK,KAAK,CAAC;YACX,KAAK,KAAK,CAAC;YACX,KAAK,KAAK;gBACT,OAAO,iBAAiB,YAAY,EAAE,CAAC;YACxC;gBACC,OAAO,mBAAmB,UAAU,MAAM,YAAY,EAAE,CAAC;QAC3D,CAAC;IACF,CAAC;IAED,uDAAuD;IACvD,0EAA0E;IAC1E,kEAAkE;IAClE,IACC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC;QAClC,CAAC,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC;YAC1C,YAAY,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC,EAC/C,CAAC;QACF,OAAO,CACN,0DAA0D;YAC1D,mEAAmE;YACnE,QAAQ;YACR,mFAAmF;YACnF,oDAAoD;YACpD,2CAA2C;YAC3C,oEAAoE;YACpE,mBAAmB,YAAY,EAAE,CACjC,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5E,OAAO,uDAAuD,CAAC;IAChE,CAAC;IAED,wBAAwB;IACxB,IACC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC;QACrC,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC;QACnC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC;QAClC,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC1C,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EACvC,CAAC;QACF,OAAO,qDAAqD,CAAC;IAC9D,CAAC;IAED,+BAA+B;IAC/B,IACC,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACvC,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EACvC,CAAC;QACF,OAAO,0EAA0E,CAAC;IACnF,CAAC;IAED,4BAA4B;IAC5B,IAAI,YAAY,CAAC,QAAQ,CAAC,6BAA6B,CAAC,EAAE,CAAC;QAC1D,OAAO,4EAA4E,CAAC;IACrF,CAAC;IAED,oDAAoD;IACpD,OAAO,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC"}
@@ -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;AAgC1C,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,EAC3B,UAAkB,EAClB,UAAU,EACV,oBAAoB,EACpB,kBAA0B,GAC1B,EAAE,QAAQ,2CAomBV"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../source/app/App.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,aAAa,CAAC;AAwC1C,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,EAC3B,UAAkB,EAClB,UAAU,EACV,oBAAoB,EACpB,kBAA0B,GAC1B,EAAE,QAAQ,2CAuvBV"}
package/dist/app/App.js CHANGED
@@ -8,8 +8,11 @@ import { ChatInput } from '../app/components/chat-input.js';
8
8
  import { ModalSelectors } from '../app/components/modal-selectors.js';
9
9
  import { shouldRenderWelcome } from '../app/helpers.js';
10
10
  import { FileExplorer } from '../components/file-explorer.js';
11
+ import { IdeSelector } from '../components/ide-selector.js';
12
+ import { SuccessMessage } from '../components/message-box.js';
13
+ import { SchedulerView } from '../components/scheduler-view.js';
11
14
  import SecurityDisclaimer from '../components/security-disclaimer.js';
12
- import { shouldPromptExtensionInstall, VSCodeExtensionPrompt, } from '../components/vscode-extension-prompt.js';
15
+ import { VSCodeExtensionPrompt } from '../components/vscode-extension-prompt.js';
13
16
  import WelcomeMessage from '../components/welcome-message.js';
14
17
  import { updateSelectedTheme } from '../config/preferences.js';
15
18
  import { getThemeColors } from '../config/themes.js';
@@ -18,9 +21,11 @@ import { useChatHandler } from '../hooks/chat-handler/index.js';
18
21
  import { useAppHandlers } from '../hooks/useAppHandlers.js';
19
22
  import { useAppInitialization } from '../hooks/useAppInitialization.js';
20
23
  import { useAppState } from '../hooks/useAppState.js';
24
+ import { useContextPercentage } from '../hooks/useContextPercentage.js';
21
25
  import { useDirectoryTrust } from '../hooks/useDirectoryTrust.js';
22
26
  import { useModeHandlers } from '../hooks/useModeHandlers.js';
23
27
  import { useNonInteractiveMode } from '../hooks/useNonInteractiveMode.js';
28
+ import { useSchedulerMode } from '../hooks/useSchedulerMode.js';
24
29
  import { ThemeContext } from '../hooks/useTheme.js';
25
30
  import { TitleShapeContext, updateTitleShape } from '../hooks/useTitleShape.js';
26
31
  import { useToolHandler } from '../hooks/useToolHandler.js';
@@ -29,6 +34,9 @@ import { useVSCodeServer } from '../hooks/useVSCodeServer.js';
29
34
  import { generateCorrelationId, withNewCorrelationContext, } from '../utils/logging/index.js';
30
35
  import { createPinoLogger } from '../utils/logging/pino-logger.js';
31
36
  import { setGlobalMessageQueue } from '../utils/message-queue.js';
37
+ import { setGlobalQuestionHandler, } from '../utils/question-queue.js';
38
+ import { getShutdownManager } from '../utils/shutdown/index.js';
39
+ import { isExtensionInstalled } from '../vscode/extension-installer.js';
32
40
  export default function App({ vscodeMode = false, vscodePort, nonInteractivePrompt, nonInteractiveMode = false, }) {
33
41
  // Memoize the logger to prevent recreation on every render
34
42
  const logger = useMemo(() => createPinoLogger(), []);
@@ -62,13 +70,11 @@ export default function App({ vscodeMode = false, vscodePort, nonInteractiveProm
62
70
  });
63
71
  }, [appState.developmentMode, logger]);
64
72
  // VS Code extension installation prompt state
65
- const [showExtensionPrompt, setShowExtensionPrompt] = React.useState(() => vscodeMode && shouldPromptExtensionInstall());
73
+ const [showExtensionPrompt, setShowExtensionPrompt] = React.useState(() => vscodeMode && !isExtensionInstalled());
66
74
  const [extensionPromptComplete, setExtensionPromptComplete] = React.useState(false);
67
75
  const handleExit = () => {
68
76
  exit();
69
- // Force exit - at security disclaimer stage, no services need cleanup
70
- // TODO: Replace with ShutdownManager.gracefulShutdown() once #239 is implemented
71
- process.exit(0);
77
+ void getShutdownManager().gracefulShutdown(0);
72
78
  };
73
79
  // VS Code server integration
74
80
  // Reference to handleMessageSubmit that will be set after appHandlers is created
@@ -108,8 +114,9 @@ export default function App({ vscodeMode = false, vscodePort, nonInteractiveProm
108
114
  });
109
115
  }
110
116
  }, [logger]);
117
+ const effectiveVscodeEnabled = vscodeMode || appState.isVscodeEnabled;
111
118
  const vscodeServer = useVSCodeServer({
112
- enabled: vscodeMode,
119
+ enabled: effectiveVscodeEnabled,
113
120
  port: vscodePort,
114
121
  currentModel: appState.currentModel,
115
122
  currentProvider: appState.currentProvider,
@@ -139,6 +146,27 @@ export default function App({ vscodeMode = false, vscodePort, nonInteractiveProm
139
146
  chatQueueFunction: 'addToChatQueue',
140
147
  });
141
148
  }, [appState.addToChatQueue, logger]);
149
+ // Question handler - ref holds the resolver for the pending question promise
150
+ const questionResolverRef = React.useRef(null);
151
+ // Initialize global question handler
152
+ React.useEffect(() => {
153
+ setGlobalQuestionHandler((question) => {
154
+ return new Promise(resolve => {
155
+ questionResolverRef.current = resolve;
156
+ appState.setPendingQuestion(question);
157
+ appState.setIsQuestionMode(true);
158
+ });
159
+ });
160
+ }, [appState.setPendingQuestion, appState.setIsQuestionMode, appState]);
161
+ // Handle user answering a question
162
+ const handleQuestionAnswer = React.useCallback((answer) => {
163
+ if (questionResolverRef.current) {
164
+ questionResolverRef.current(answer);
165
+ questionResolverRef.current = null;
166
+ }
167
+ appState.setIsQuestionMode(false);
168
+ appState.setPendingQuestion(null);
169
+ }, [appState.setIsQuestionMode, appState.setPendingQuestion, appState]);
142
170
  // Log important application state changes
143
171
  React.useEffect(() => {
144
172
  if (appState.client) {
@@ -176,6 +204,7 @@ export default function App({ vscodeMode = false, vscodePort, nonInteractiveProm
176
204
  const chatHandler = useChatHandler({
177
205
  client: appState.client,
178
206
  toolManager: appState.toolManager,
207
+ customCommandLoader: appState.customCommandLoader,
179
208
  messages: appState.messages,
180
209
  setMessages: appState.updateMessages,
181
210
  currentProvider: appState.currentProvider,
@@ -202,6 +231,18 @@ export default function App({ vscodeMode = false, vscodePort, nonInteractiveProm
202
231
  appState.setIsConversationComplete(true);
203
232
  },
204
233
  });
234
+ // Track context window usage percentage
235
+ useContextPercentage({
236
+ currentModel: appState.currentModel,
237
+ messages: appState.messages,
238
+ tokenizer: appState.tokenizer,
239
+ getMessageTokens: appState.getMessageTokens,
240
+ toolManager: appState.toolManager,
241
+ streamingTokenCount: chatHandler.tokenCount,
242
+ contextLimit: appState.contextLimit,
243
+ setContextPercentUsed: appState.setContextPercentUsed,
244
+ setContextLimit: appState.setContextLimit,
245
+ });
205
246
  // Setup tool handler
206
247
  const toolHandler = useToolHandler({
207
248
  pendingToolCalls: appState.pendingToolCalls,
@@ -298,10 +339,47 @@ export default function App({ vscodeMode = false, vscodePort, nonInteractiveProm
298
339
  setIsSettingsMode: appState.setIsSettingsMode,
299
340
  setIsMcpWizardMode: appState.setIsMcpWizardMode,
300
341
  setIsExplorerMode: appState.setIsExplorerMode,
342
+ setIsIdeSelectionMode: appState.setIsIdeSelectionMode,
301
343
  addToChatQueue: appState.addToChatQueue,
302
344
  getNextComponentKey: appState.getNextComponentKey,
303
345
  reinitializeMCPServers: appInitialization.reinitializeMCPServers,
304
346
  });
347
+ // Scheduler mode enter handler
348
+ const enterSchedulerMode = React.useCallback(() => {
349
+ appState.setIsSchedulerMode(true);
350
+ }, [appState.setIsSchedulerMode, appState]);
351
+ // Scheduler mode exit handler
352
+ const exitSchedulerMode = React.useCallback(() => {
353
+ appState.setIsSchedulerMode(false);
354
+ }, [appState.setIsSchedulerMode, appState]);
355
+ // IDE selection handler
356
+ const handleIdeSelect = React.useCallback((ide) => {
357
+ appState.setIsIdeSelectionMode(false);
358
+ if (ide === 'vscode') {
359
+ appState.setIsVscodeEnabled(true);
360
+ // Check if extension needs installing
361
+ if (!isExtensionInstalled()) {
362
+ setShowExtensionPrompt(true);
363
+ setExtensionPromptComplete(false);
364
+ }
365
+ else {
366
+ appState.addToChatQueue(_jsx(SuccessMessage, { message: "VS Code integration enabled. Starting server...", hideBox: true }, `ide-vscode-enabled-${appState.getNextComponentKey()}`));
367
+ }
368
+ }
369
+ }, [appState]);
370
+ // Show confirmation once VS Code server is ready with its port
371
+ const prevVscodePortRef = React.useRef(vscodeServer.actualPort);
372
+ React.useEffect(() => {
373
+ const prevPort = prevVscodePortRef.current;
374
+ prevVscodePortRef.current = vscodeServer.actualPort;
375
+ // Only show message when port transitions from null to a value
376
+ // and it was triggered by /ide (not the --vscode CLI flag)
377
+ if (prevPort === null &&
378
+ vscodeServer.actualPort !== null &&
379
+ appState.isVscodeEnabled) {
380
+ appState.addToChatQueue(_jsx(SuccessMessage, { message: `VS Code server listening on port ${vscodeServer.actualPort}`, hideBox: true }, `ide-vscode-ready-${appState.getNextComponentKey()}`));
381
+ }
382
+ }, [vscodeServer.actualPort, appState]);
305
383
  // Setup app handlers
306
384
  const appHandlers = useAppHandlers({
307
385
  messages: appState.messages,
@@ -336,6 +414,8 @@ export default function App({ vscodeMode = false, vscodePort, nonInteractiveProm
336
414
  enterSettingsMode: modeHandlers.enterSettingsMode,
337
415
  enterMcpWizardMode: modeHandlers.enterMcpWizardMode,
338
416
  enterExplorerMode: modeHandlers.enterExplorerMode,
417
+ enterIdeSelectionMode: modeHandlers.enterIdeSelectionMode,
418
+ enterSchedulerMode,
339
419
  handleChatMessage: chatHandler.handleChatMessage,
340
420
  });
341
421
  // Update the ref so VS Code prompts can be submitted
@@ -357,6 +437,19 @@ export default function App({ vscodeMode = false, vscodePort, nonInteractiveProm
357
437
  setDevelopmentMode: appState.setDevelopmentMode,
358
438
  handleMessageSubmit: appHandlers.handleMessageSubmit,
359
439
  });
440
+ // Setup scheduler mode
441
+ const schedulerMode = useSchedulerMode({
442
+ isSchedulerMode: appState.isSchedulerMode,
443
+ mcpInitialized: appState.mcpInitialized,
444
+ setDevelopmentMode: appState.setDevelopmentMode,
445
+ handleMessageSubmit: appHandlers.handleMessageSubmit,
446
+ clearMessages: appHandlers.clearMessages,
447
+ isConversationComplete: appState.isConversationComplete,
448
+ isToolExecuting: appState.isToolExecuting,
449
+ isToolConfirmationMode: appState.isToolConfirmationMode,
450
+ messages: appState.messages,
451
+ addToChatQueue: appState.addToChatQueue,
452
+ });
360
453
  const shouldShowWelcome = shouldRenderWelcome(nonInteractiveMode);
361
454
  // Memoize static components
362
455
  const staticComponents = React.useMemo(() => createStaticComponents({
@@ -369,7 +462,7 @@ export default function App({ vscodeMode = false, vscodePort, nonInteractiveProm
369
462
  lspServersStatus: appState.lspServersStatus,
370
463
  preferencesLoaded: appState.preferencesLoaded,
371
464
  customCommandsCount: appState.customCommandsCount,
372
- vscodeMode,
465
+ vscodeMode: effectiveVscodeEnabled,
373
466
  vscodePort: vscodeServer.actualPort,
374
467
  vscodeRequestedPort: vscodeServer.requestedPort,
375
468
  }), [
@@ -382,7 +475,7 @@ export default function App({ vscodeMode = false, vscodePort, nonInteractiveProm
382
475
  appState.lspServersStatus,
383
476
  appState.preferencesLoaded,
384
477
  appState.customCommandsCount,
385
- vscodeMode,
478
+ effectiveVscodeEnabled,
386
479
  vscodeServer.actualPort,
387
480
  vscodeServer.requestedPort,
388
481
  ]);
@@ -423,13 +516,14 @@ export default function App({ vscodeMode = false, vscodePort, nonInteractiveProm
423
516
  } })] }) }) }));
424
517
  }
425
518
  // Main application render
426
- return (_jsx(ThemeContext.Provider, { value: themeContextValue, children: _jsx(TitleShapeContext.Provider, { value: titleShapeContextValue, children: _jsx(UIStateProvider, { children: _jsxs(Box, { flexDirection: "column", padding: 1, width: "100%", children: [_jsx(ChatHistory, { startChat: appState.startChat, staticComponents: staticComponents, queuedComponents: appState.chatComponents, liveComponent: appState.liveComponent }), appState.isExplorerMode && (_jsx(Box, { marginLeft: -1, flexDirection: "column", children: _jsx(FileExplorer, { onClose: modeHandlers.handleExplorerCancel }) })), (appState.isModelSelectionMode ||
519
+ return (_jsx(ThemeContext.Provider, { value: themeContextValue, children: _jsx(TitleShapeContext.Provider, { value: titleShapeContextValue, children: _jsx(UIStateProvider, { children: _jsxs(Box, { flexDirection: "column", padding: 1, width: "100%", children: [_jsx(ChatHistory, { startChat: appState.startChat, staticComponents: staticComponents, queuedComponents: appState.chatComponents, liveComponent: appState.liveComponent }), appState.isExplorerMode && (_jsx(Box, { marginLeft: -1, flexDirection: "column", children: _jsx(FileExplorer, { onClose: modeHandlers.handleExplorerCancel }) })), appState.isIdeSelectionMode && (_jsx(Box, { marginLeft: -1, flexDirection: "column", children: _jsx(IdeSelector, { onSelect: handleIdeSelect, onCancel: modeHandlers.handleIdeSelectionCancel }) })), (appState.isModelSelectionMode ||
427
520
  appState.isProviderSelectionMode ||
428
521
  appState.isModelDatabaseMode ||
429
522
  appState.isConfigWizardMode ||
430
523
  appState.isMcpWizardMode ||
431
524
  appState.isSettingsMode ||
432
- appState.isCheckpointLoadMode) && (_jsx(Box, { marginLeft: -1, flexDirection: "column", children: _jsx(ModalSelectors, { isModelSelectionMode: appState.isModelSelectionMode, isProviderSelectionMode: appState.isProviderSelectionMode, isModelDatabaseMode: appState.isModelDatabaseMode, isConfigWizardMode: appState.isConfigWizardMode, isMcpWizardMode: appState.isMcpWizardMode, isSettingsMode: appState.isSettingsMode, isCheckpointLoadMode: appState.isCheckpointLoadMode, client: appState.client, currentModel: appState.currentModel, currentProvider: appState.currentProvider, checkpointLoadData: appState.checkpointLoadData, onModelSelect: modeHandlers.handleModelSelect, onModelSelectionCancel: modeHandlers.handleModelSelectionCancel, onProviderSelect: modeHandlers.handleProviderSelect, onProviderSelectionCancel: modeHandlers.handleProviderSelectionCancel, onModelDatabaseCancel: modeHandlers.handleModelDatabaseCancel, onConfigWizardComplete: modeHandlers.handleConfigWizardComplete, onConfigWizardCancel: modeHandlers.handleConfigWizardCancel, onMcpWizardComplete: modeHandlers.handleMcpWizardComplete, onMcpWizardCancel: modeHandlers.handleMcpWizardCancel, onSettingsCancel: modeHandlers.handleSettingsCancel, onCheckpointSelect: appHandlers.handleCheckpointSelect, onCheckpointCancel: appHandlers.handleCheckpointCancel }) })), appState.startChat &&
525
+ appState.isCheckpointLoadMode) && (_jsx(Box, { marginLeft: -1, flexDirection: "column", children: _jsx(ModalSelectors, { isModelSelectionMode: appState.isModelSelectionMode, isProviderSelectionMode: appState.isProviderSelectionMode, isModelDatabaseMode: appState.isModelDatabaseMode, isConfigWizardMode: appState.isConfigWizardMode, isMcpWizardMode: appState.isMcpWizardMode, isSettingsMode: appState.isSettingsMode, isCheckpointLoadMode: appState.isCheckpointLoadMode, client: appState.client, currentModel: appState.currentModel, currentProvider: appState.currentProvider, checkpointLoadData: appState.checkpointLoadData, onModelSelect: modeHandlers.handleModelSelect, onModelSelectionCancel: modeHandlers.handleModelSelectionCancel, onProviderSelect: modeHandlers.handleProviderSelect, onProviderSelectionCancel: modeHandlers.handleProviderSelectionCancel, onModelDatabaseCancel: modeHandlers.handleModelDatabaseCancel, onConfigWizardComplete: modeHandlers.handleConfigWizardComplete, onConfigWizardCancel: modeHandlers.handleConfigWizardCancel, onMcpWizardComplete: modeHandlers.handleMcpWizardComplete, onMcpWizardCancel: modeHandlers.handleMcpWizardCancel, onSettingsCancel: modeHandlers.handleSettingsCancel, onCheckpointSelect: appHandlers.handleCheckpointSelect, onCheckpointCancel: appHandlers.handleCheckpointCancel }) })), appState.isSchedulerMode && (_jsx(SchedulerView, { activeJobCount: schedulerMode.activeJobCount, queueLength: schedulerMode.queueLength, isProcessing: schedulerMode.isProcessing, currentJobCommand: schedulerMode.currentJobCommand, developmentMode: appState.developmentMode, contextPercentUsed: appState.contextPercentUsed, onExit: exitSchedulerMode })), appState.startChat &&
526
+ !appState.isSchedulerMode &&
433
527
  !(appState.isModelSelectionMode ||
434
528
  appState.isProviderSelectionMode ||
435
529
  appState.isModelDatabaseMode ||
@@ -437,6 +531,7 @@ export default function App({ vscodeMode = false, vscodePort, nonInteractiveProm
437
531
  appState.isSettingsMode ||
438
532
  appState.isMcpWizardMode ||
439
533
  appState.isCheckpointLoadMode ||
440
- appState.isExplorerMode) && (_jsx(ChatInput, { isCancelling: appState.isCancelling, isToolExecuting: appState.isToolExecuting, isToolConfirmationMode: appState.isToolConfirmationMode, pendingToolCalls: appState.pendingToolCalls, currentToolIndex: appState.currentToolIndex, mcpInitialized: appState.mcpInitialized, client: appState.client, nonInteractivePrompt: nonInteractivePrompt, nonInteractiveLoadingMessage: nonInteractiveLoadingMessage, customCommands: Array.from(appState.customCommandCache.keys()), inputDisabled: chatHandler.isGenerating || appState.isToolExecuting, developmentMode: appState.developmentMode, onToolConfirm: toolHandler.handleToolConfirmation, onToolCancel: toolHandler.handleToolConfirmationCancel, onSubmit: appHandlers.handleMessageSubmit, onCancel: appHandlers.handleCancel, onToggleMode: appHandlers.handleToggleDevelopmentMode }))] }) }) }) }));
534
+ appState.isExplorerMode ||
535
+ appState.isIdeSelectionMode) && (_jsx(ChatInput, { isCancelling: appState.isCancelling, isToolExecuting: appState.isToolExecuting, isToolConfirmationMode: appState.isToolConfirmationMode, isQuestionMode: appState.isQuestionMode, pendingToolCalls: appState.pendingToolCalls, currentToolIndex: appState.currentToolIndex, pendingQuestion: appState.pendingQuestion, onQuestionAnswer: handleQuestionAnswer, mcpInitialized: appState.mcpInitialized, client: appState.client, nonInteractivePrompt: nonInteractivePrompt, nonInteractiveLoadingMessage: nonInteractiveLoadingMessage, customCommands: Array.from(appState.customCommandCache.keys()), inputDisabled: chatHandler.isGenerating || appState.isToolExecuting, developmentMode: appState.developmentMode, contextPercentUsed: appState.contextPercentUsed, onToolConfirm: toolHandler.handleToolConfirmation, onToolCancel: toolHandler.handleToolConfirmationCancel, onSubmit: appHandlers.handleMessageSubmit, onCancel: appHandlers.handleCancel, onToggleMode: appHandlers.handleToggleDevelopmentMode }))] }) }) }) }));
441
536
  }
442
537
  //# sourceMappingURL=App.js.map