@within-7/minto 0.1.7 → 0.2.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 (481) hide show
  1. package/cli.js +155 -37
  2. package/dist/Tool.js +38 -0
  3. package/dist/Tool.js.map +3 -3
  4. package/dist/commands/agents/AgentsCommand.js +52 -26
  5. package/dist/commands/agents/AgentsCommand.js.map +2 -2
  6. package/dist/commands/agents/constants.js +1 -1
  7. package/dist/commands/agents/constants.js.map +1 -1
  8. package/dist/commands/agents/index.js +1 -1
  9. package/dist/commands/bug.js +74 -7
  10. package/dist/commands/bug.js.map +3 -3
  11. package/dist/commands/clear.js +3 -0
  12. package/dist/commands/clear.js.map +2 -2
  13. package/dist/commands/compact.js +37 -0
  14. package/dist/commands/compact.js.map +2 -2
  15. package/dist/commands/context.js +84 -0
  16. package/dist/commands/context.js.map +7 -0
  17. package/dist/commands/ctx_viz.js +18 -10
  18. package/dist/commands/ctx_viz.js.map +2 -2
  19. package/dist/commands/doctor.js +158 -12
  20. package/dist/commands/doctor.js.map +2 -2
  21. package/dist/commands/export.js +156 -0
  22. package/dist/commands/export.js.map +7 -0
  23. package/dist/commands/mcp-interactive.js +21 -12
  24. package/dist/commands/mcp-interactive.js.map +2 -2
  25. package/dist/commands/model.js +6 -5
  26. package/dist/commands/model.js.map +2 -2
  27. package/dist/commands/permissions.js +86 -0
  28. package/dist/commands/permissions.js.map +7 -0
  29. package/dist/commands/quit.js +3 -1
  30. package/dist/commands/quit.js.map +2 -2
  31. package/dist/commands/sandbox.js +104 -0
  32. package/dist/commands/sandbox.js.map +7 -0
  33. package/dist/commands/status.js +58 -0
  34. package/dist/commands/status.js.map +7 -0
  35. package/dist/commands/tasks.js +108 -0
  36. package/dist/commands/tasks.js.map +7 -0
  37. package/dist/commands/todos.js +123 -0
  38. package/dist/commands/todos.js.map +7 -0
  39. package/dist/commands.js +20 -2
  40. package/dist/commands.js.map +2 -2
  41. package/dist/components/AgentThinkingBlock.js +10 -18
  42. package/dist/components/AgentThinkingBlock.js.map +2 -2
  43. package/dist/components/BackgroundTasksPanel.js +78 -29
  44. package/dist/components/BackgroundTasksPanel.js.map +2 -2
  45. package/dist/components/BashStreamingProgress.js +24 -0
  46. package/dist/components/BashStreamingProgress.js.map +7 -0
  47. package/dist/components/CollapsibleHint.js +14 -0
  48. package/dist/components/CollapsibleHint.js.map +7 -0
  49. package/dist/components/FileEditToolUpdatedMessage.js +1 -1
  50. package/dist/components/FileEditToolUpdatedMessage.js.map +2 -2
  51. package/dist/components/HotkeyHelpPanel.js +137 -0
  52. package/dist/components/HotkeyHelpPanel.js.map +7 -0
  53. package/dist/components/Logo.js +5 -5
  54. package/dist/components/Logo.js.map +2 -2
  55. package/dist/components/Message.js +23 -7
  56. package/dist/components/Message.js.map +3 -3
  57. package/dist/components/ModelConfig.js +16 -3
  58. package/dist/components/ModelConfig.js.map +2 -2
  59. package/dist/components/ModelListManager.js +3 -3
  60. package/dist/components/ModelListManager.js.map +2 -2
  61. package/dist/components/ModelSelector/ModelSelector.js +1 -1
  62. package/dist/components/Onboarding.js +19 -14
  63. package/dist/components/Onboarding.js.map +2 -2
  64. package/dist/components/ProgressBar.js +74 -0
  65. package/dist/components/ProgressBar.js.map +7 -0
  66. package/dist/components/PromptInput.js +156 -46
  67. package/dist/components/PromptInput.js.map +2 -2
  68. package/dist/components/RequestStatusIndicator.js +194 -0
  69. package/dist/components/RequestStatusIndicator.js.map +7 -0
  70. package/dist/components/Spinner.js +92 -27
  71. package/dist/components/Spinner.js.map +2 -2
  72. package/dist/components/SpinnerSymbol.js +21 -27
  73. package/dist/components/SpinnerSymbol.js.map +2 -2
  74. package/dist/components/StreamingBashOutput.js +9 -8
  75. package/dist/components/StreamingBashOutput.js.map +2 -2
  76. package/dist/components/SubagentBlock.js +1 -1
  77. package/dist/components/SubagentBlock.js.map +1 -1
  78. package/dist/components/SubagentProgress.js +10 -11
  79. package/dist/components/SubagentProgress.js.map +2 -2
  80. package/dist/components/TaskCard.js +16 -13
  81. package/dist/components/TaskCard.js.map +2 -2
  82. package/dist/components/TodoChangeBlock.js +1 -1
  83. package/dist/components/TodoChangeBlock.js.map +2 -2
  84. package/dist/components/TodoPanel.js +120 -29
  85. package/dist/components/TodoPanel.js.map +3 -3
  86. package/dist/components/TokenCounter.js +74 -0
  87. package/dist/components/TokenCounter.js.map +7 -0
  88. package/dist/components/TokenWarning.js +2 -1
  89. package/dist/components/TokenWarning.js.map +2 -2
  90. package/dist/components/TreeConnector.js +25 -0
  91. package/dist/components/TreeConnector.js.map +7 -0
  92. package/dist/components/TurnCompletionIndicator.js +18 -0
  93. package/dist/components/TurnCompletionIndicator.js.map +7 -0
  94. package/dist/components/messages/AssistantTextMessage.js +5 -2
  95. package/dist/components/messages/AssistantTextMessage.js.map +2 -2
  96. package/dist/components/messages/AssistantThinkingMessage.js +18 -3
  97. package/dist/components/messages/AssistantThinkingMessage.js.map +2 -2
  98. package/dist/components/messages/AssistantToolUseMessage.js +11 -8
  99. package/dist/components/messages/AssistantToolUseMessage.js.map +2 -2
  100. package/dist/components/messages/GroupRenderer.js +53 -0
  101. package/dist/components/messages/GroupRenderer.js.map +7 -0
  102. package/dist/components/messages/NestedTasksPreview.js +12 -0
  103. package/dist/components/messages/NestedTasksPreview.js.map +7 -0
  104. package/dist/components/messages/ParallelTasksGroupView.js +92 -0
  105. package/dist/components/messages/ParallelTasksGroupView.js.map +7 -0
  106. package/dist/components/messages/TaskInModuleView.js +198 -0
  107. package/dist/components/messages/TaskInModuleView.js.map +7 -0
  108. package/dist/components/messages/TaskOutputContent.js +53 -0
  109. package/dist/components/messages/TaskOutputContent.js.map +7 -0
  110. package/dist/components/messages/UserPromptMessage.js +1 -1
  111. package/dist/components/messages/UserPromptMessage.js.map +2 -2
  112. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +2 -3
  113. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +2 -2
  114. package/dist/components/permissions/FallbackPermissionRequest.js +4 -4
  115. package/dist/components/permissions/FallbackPermissionRequest.js.map +2 -2
  116. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +4 -4
  117. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +2 -2
  118. package/dist/constants/colors.js +48 -0
  119. package/dist/constants/colors.js.map +2 -2
  120. package/dist/constants/formatRules.js +102 -0
  121. package/dist/constants/formatRules.js.map +7 -0
  122. package/dist/constants/prompts.js +12 -34
  123. package/dist/constants/prompts.js.map +2 -2
  124. package/dist/constants/symbols.js +64 -6
  125. package/dist/constants/symbols.js.map +2 -2
  126. package/dist/constants/timing.js +5 -0
  127. package/dist/constants/timing.js.map +2 -2
  128. package/dist/core/config/defaults.js +84 -0
  129. package/dist/core/config/defaults.js.map +7 -0
  130. package/dist/core/config/index.js +111 -0
  131. package/dist/core/config/index.js.map +7 -0
  132. package/dist/core/config/loader.js +221 -0
  133. package/dist/core/config/loader.js.map +7 -0
  134. package/dist/core/config/migrations.js +128 -0
  135. package/dist/core/config/migrations.js.map +7 -0
  136. package/dist/core/config/schema.js +178 -0
  137. package/dist/core/config/schema.js.map +7 -0
  138. package/dist/core/costTracker.js +138 -0
  139. package/dist/core/costTracker.js.map +7 -0
  140. package/dist/core/index.js +5 -0
  141. package/dist/core/index.js.map +7 -0
  142. package/dist/core/permissions/auditLog.js +204 -0
  143. package/dist/core/permissions/auditLog.js.map +7 -0
  144. package/dist/core/permissions/engine/index.js +3 -0
  145. package/dist/core/permissions/engine/index.js.map +7 -0
  146. package/dist/core/permissions/engine/permissionEngine.js +106 -0
  147. package/dist/core/permissions/engine/permissionEngine.js.map +7 -0
  148. package/dist/core/permissions/engine/types.js +1 -0
  149. package/dist/core/permissions/engine/types.js.map +7 -0
  150. package/dist/core/permissions/index.js +84 -0
  151. package/dist/core/permissions/index.js.map +7 -0
  152. package/dist/core/permissions/ruleEngine.js +259 -0
  153. package/dist/core/permissions/ruleEngine.js.map +7 -0
  154. package/dist/core/permissions/rules/allowedToolsRule.js +62 -0
  155. package/dist/core/permissions/rules/allowedToolsRule.js.map +7 -0
  156. package/dist/core/permissions/rules/autoEscalationRule.js +291 -0
  157. package/dist/core/permissions/rules/autoEscalationRule.js.map +7 -0
  158. package/dist/core/permissions/rules/index.js +46 -0
  159. package/dist/core/permissions/rules/index.js.map +7 -0
  160. package/dist/core/permissions/rules/planModeRule.js +55 -0
  161. package/dist/core/permissions/rules/planModeRule.js.map +7 -0
  162. package/dist/core/permissions/rules/projectBoundaryRule.js +168 -0
  163. package/dist/core/permissions/rules/projectBoundaryRule.js.map +7 -0
  164. package/dist/core/permissions/rules/safeModeRule.js +65 -0
  165. package/dist/core/permissions/rules/safeModeRule.js.map +7 -0
  166. package/dist/core/permissions/rules/sensitivePathsRule.js +340 -0
  167. package/dist/core/permissions/rules/sensitivePathsRule.js.map +7 -0
  168. package/dist/core/permissions/types.js +127 -0
  169. package/dist/core/permissions/types.js.map +7 -0
  170. package/dist/core/tools/executor.js +143 -0
  171. package/dist/core/tools/executor.js.map +7 -0
  172. package/dist/core/tools/index.js +15 -0
  173. package/dist/core/tools/index.js.map +7 -0
  174. package/dist/core/tools/registry.js +183 -0
  175. package/dist/core/tools/registry.js.map +7 -0
  176. package/dist/core/tools/types.js +1 -0
  177. package/dist/core/tools/types.js.map +7 -0
  178. package/dist/cost-tracker.js +23 -15
  179. package/dist/cost-tracker.js.map +2 -2
  180. package/dist/entrypoints/cli.js +43 -43
  181. package/dist/entrypoints/cli.js.map +2 -2
  182. package/dist/entrypoints/mcp.js +12 -4
  183. package/dist/entrypoints/mcp.js.map +2 -2
  184. package/dist/history.js +14 -3
  185. package/dist/history.js.map +2 -2
  186. package/dist/hooks/useAgentTranscripts.js +116 -0
  187. package/dist/hooks/useAgentTranscripts.js.map +7 -0
  188. package/dist/hooks/useAnimationSync.js +53 -0
  189. package/dist/hooks/useAnimationSync.js.map +7 -0
  190. package/dist/hooks/useArrowKeyHistory.js +4 -2
  191. package/dist/hooks/useArrowKeyHistory.js.map +2 -2
  192. package/dist/hooks/useCanUseTool.js +3 -1
  193. package/dist/hooks/useCanUseTool.js.map +2 -2
  194. package/dist/hooks/useCancelRequest.js +4 -1
  195. package/dist/hooks/useCancelRequest.js.map +2 -2
  196. package/dist/hooks/useExitOnCtrlCD.js +9 -5
  197. package/dist/hooks/useExitOnCtrlCD.js.map +2 -2
  198. package/dist/hooks/useHookStatus.js +40 -0
  199. package/dist/hooks/useHookStatus.js.map +7 -0
  200. package/dist/hooks/useLogMessages.js +17 -1
  201. package/dist/hooks/useLogMessages.js.map +2 -2
  202. package/dist/hooks/useMessageGroups.js +43 -0
  203. package/dist/hooks/useMessageGroups.js.map +7 -0
  204. package/dist/hooks/useTerminalSize.js +62 -6
  205. package/dist/hooks/useTerminalSize.js.map +2 -2
  206. package/dist/hooks/useUnifiedCompletion.js +69 -0
  207. package/dist/hooks/useUnifiedCompletion.js.map +2 -2
  208. package/dist/i18n/index.js +109 -0
  209. package/dist/i18n/index.js.map +7 -0
  210. package/dist/i18n/locales/en.js +347 -0
  211. package/dist/i18n/locales/en.js.map +7 -0
  212. package/dist/i18n/locales/index.js +7 -0
  213. package/dist/i18n/locales/index.js.map +7 -0
  214. package/dist/i18n/locales/zh-CN.js +347 -0
  215. package/dist/i18n/locales/zh-CN.js.map +7 -0
  216. package/dist/i18n/types.js +8 -0
  217. package/dist/i18n/types.js.map +7 -0
  218. package/dist/query.js +175 -17
  219. package/dist/query.js.map +3 -3
  220. package/dist/screens/REPL.js +501 -192
  221. package/dist/screens/REPL.js.map +3 -3
  222. package/dist/services/adapters/chatCompletions.js +3 -1
  223. package/dist/services/adapters/chatCompletions.js.map +2 -2
  224. package/dist/services/adapters/messageNormalizer.js +354 -0
  225. package/dist/services/adapters/messageNormalizer.js.map +7 -0
  226. package/dist/services/adapters/responsesAPI.js +6 -3
  227. package/dist/services/adapters/responsesAPI.js.map +2 -2
  228. package/dist/services/checkpointManager.js +386 -0
  229. package/dist/services/checkpointManager.js.map +7 -0
  230. package/dist/services/claude.js +138 -11
  231. package/dist/services/claude.js.map +3 -3
  232. package/dist/services/compressionService.js +50 -1
  233. package/dist/services/compressionService.js.map +2 -2
  234. package/dist/services/contextMonitor.js +162 -0
  235. package/dist/services/contextMonitor.js.map +7 -0
  236. package/dist/services/customCommands.js +60 -41
  237. package/dist/services/customCommands.js.map +2 -2
  238. package/dist/services/hookExecutor.js +173 -1
  239. package/dist/services/hookExecutor.js.map +2 -2
  240. package/dist/services/intelligentCompactor.js +281 -0
  241. package/dist/services/intelligentCompactor.js.map +7 -0
  242. package/dist/services/lspConfig.js +109 -0
  243. package/dist/services/lspConfig.js.map +7 -0
  244. package/dist/services/mcpClient.js +273 -34
  245. package/dist/services/mcpClient.js.map +2 -2
  246. package/dist/services/modelOrchestrator.js +310 -0
  247. package/dist/services/modelOrchestrator.js.map +7 -0
  248. package/dist/services/openai.js +8 -1
  249. package/dist/services/openai.js.map +2 -2
  250. package/dist/services/outputStyles.js +138 -0
  251. package/dist/services/outputStyles.js.map +7 -0
  252. package/dist/services/plugins/index.js +5 -0
  253. package/dist/services/plugins/index.js.map +7 -0
  254. package/dist/services/plugins/lspServers.js +188 -0
  255. package/dist/services/plugins/lspServers.js.map +7 -0
  256. package/dist/services/plugins/pluginRuntime.js +229 -0
  257. package/dist/services/plugins/pluginRuntime.js.map +7 -0
  258. package/dist/services/plugins/pluginValidation.js +219 -0
  259. package/dist/services/plugins/pluginValidation.js.map +7 -0
  260. package/dist/services/plugins/skillMarketplace.js +556 -0
  261. package/dist/services/plugins/skillMarketplace.js.map +7 -0
  262. package/dist/services/responseStateManager.js +37 -3
  263. package/dist/services/responseStateManager.js.map +2 -2
  264. package/dist/services/sandbox/filesystemBoundary.js +300 -0
  265. package/dist/services/sandbox/filesystemBoundary.js.map +7 -0
  266. package/dist/services/sandbox/index.js +14 -0
  267. package/dist/services/sandbox/index.js.map +7 -0
  268. package/dist/services/sandbox/networkProxy.js +293 -0
  269. package/dist/services/sandbox/networkProxy.js.map +7 -0
  270. package/dist/services/sandbox/sandboxController.js +574 -0
  271. package/dist/services/sandbox/sandboxController.js.map +7 -0
  272. package/dist/services/sandbox/types.js +50 -0
  273. package/dist/services/sandbox/types.js.map +7 -0
  274. package/dist/services/sessionMemory.js +266 -0
  275. package/dist/services/sessionMemory.js.map +7 -0
  276. package/dist/services/taskRouter.js +324 -0
  277. package/dist/services/taskRouter.js.map +7 -0
  278. package/dist/tools/ArchitectTool/ArchitectTool.js +7 -1
  279. package/dist/tools/ArchitectTool/ArchitectTool.js.map +2 -2
  280. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +3 -0
  281. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +2 -2
  282. package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js.map +2 -2
  283. package/dist/tools/BaseTool.js +72 -0
  284. package/dist/tools/BaseTool.js.map +7 -0
  285. package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js +3 -0
  286. package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js.map +2 -2
  287. package/dist/tools/BashTool/BashTool.js +60 -3
  288. package/dist/tools/BashTool/BashTool.js.map +2 -2
  289. package/dist/tools/BashTool/BashToolResultMessage.js +3 -0
  290. package/dist/tools/BashTool/BashToolResultMessage.js.map +2 -2
  291. package/dist/tools/BashTool/OutputLine.js +54 -0
  292. package/dist/tools/BashTool/OutputLine.js.map +2 -2
  293. package/dist/tools/BashTool/prompt.js +192 -3
  294. package/dist/tools/BashTool/prompt.js.map +2 -2
  295. package/dist/tools/FileEditTool/FileEditTool.js +29 -4
  296. package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
  297. package/dist/tools/FileWriteTool/FileWriteTool.js +5 -5
  298. package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
  299. package/dist/tools/GlobTool/GlobTool.js +4 -2
  300. package/dist/tools/GlobTool/GlobTool.js.map +2 -2
  301. package/dist/tools/GrepTool/GrepTool.js +36 -7
  302. package/dist/tools/GrepTool/GrepTool.js.map +2 -2
  303. package/dist/tools/KillShellTool/KillShellToolResultMessage.js +3 -0
  304. package/dist/tools/KillShellTool/KillShellToolResultMessage.js.map +2 -2
  305. package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js +109 -0
  306. package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js.map +7 -0
  307. package/dist/tools/ListMcpResourcesTool/prompt.js +19 -0
  308. package/dist/tools/ListMcpResourcesTool/prompt.js.map +7 -0
  309. package/dist/tools/LspTool/LspTool.js +664 -0
  310. package/dist/tools/LspTool/LspTool.js.map +7 -0
  311. package/dist/tools/LspTool/prompt.js +27 -0
  312. package/dist/tools/LspTool/prompt.js.map +7 -0
  313. package/dist/tools/MCPTool/MCPTool.js +9 -1
  314. package/dist/tools/MCPTool/MCPTool.js.map +2 -2
  315. package/dist/tools/MemoryReadTool/MemoryReadTool.js +19 -6
  316. package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +2 -2
  317. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +6 -6
  318. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +2 -2
  319. package/dist/tools/MultiEditTool/MultiEditTool.js +19 -2
  320. package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
  321. package/dist/tools/NotebookEditTool/NotebookEditTool.js +5 -1
  322. package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
  323. package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +2 -2
  324. package/dist/tools/PlanModeTool/EnterPlanModeTool.js +74 -0
  325. package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +7 -0
  326. package/dist/tools/PlanModeTool/ExitPlanModeTool.js +108 -0
  327. package/dist/tools/PlanModeTool/ExitPlanModeTool.js.map +7 -0
  328. package/dist/tools/PlanModeTool/prompt.js +94 -0
  329. package/dist/tools/PlanModeTool/prompt.js.map +7 -0
  330. package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js +130 -0
  331. package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js.map +7 -0
  332. package/dist/tools/ReadMcpResourceTool/prompt.js +17 -0
  333. package/dist/tools/ReadMcpResourceTool/prompt.js.map +7 -0
  334. package/dist/tools/SkillTool/SkillTool.js +6 -1
  335. package/dist/tools/SkillTool/SkillTool.js.map +2 -2
  336. package/dist/tools/SlashCommandTool/SlashCommandTool.js +260 -0
  337. package/dist/tools/SlashCommandTool/SlashCommandTool.js.map +7 -0
  338. package/dist/tools/SlashCommandTool/prompt.js +35 -0
  339. package/dist/tools/SlashCommandTool/prompt.js.map +7 -0
  340. package/dist/tools/TaskOutputTool/TaskOutputTool.js +189 -0
  341. package/dist/tools/TaskOutputTool/TaskOutputTool.js.map +7 -0
  342. package/dist/tools/TaskOutputTool/prompt.js +15 -0
  343. package/dist/tools/TaskOutputTool/prompt.js.map +7 -0
  344. package/dist/tools/TaskTool/TaskTool.js +302 -104
  345. package/dist/tools/TaskTool/TaskTool.js.map +2 -2
  346. package/dist/tools/TaskTool/prompt.js.map +2 -2
  347. package/dist/tools/TodoWriteTool/TodoWriteTool.js +42 -77
  348. package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +2 -2
  349. package/dist/tools/URLFetcherTool/URLFetcherTool.js +4 -1
  350. package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +2 -2
  351. package/dist/tools/URLFetcherTool/cache.js +55 -8
  352. package/dist/tools/URLFetcherTool/cache.js.map +2 -2
  353. package/dist/tools.js +31 -2
  354. package/dist/tools.js.map +2 -2
  355. package/dist/types/hooks.js +4 -0
  356. package/dist/types/hooks.js.map +2 -2
  357. package/dist/types/marketplace.js.map +2 -2
  358. package/dist/types/messageGroup.js +36 -0
  359. package/dist/types/messageGroup.js.map +7 -0
  360. package/dist/types/plugin.js.map +2 -2
  361. package/dist/types/thinking.js +1 -0
  362. package/dist/types/thinking.js.map +7 -0
  363. package/dist/utils/BackgroundShellManager.js +136 -39
  364. package/dist/utils/BackgroundShellManager.js.map +2 -2
  365. package/dist/utils/MessageBatchBuffer.js +102 -0
  366. package/dist/utils/MessageBatchBuffer.js.map +7 -0
  367. package/dist/utils/PersistentShell.js +151 -1
  368. package/dist/utils/PersistentShell.js.map +2 -2
  369. package/dist/utils/agentLoader.js +1 -23
  370. package/dist/utils/agentLoader.js.map +2 -2
  371. package/dist/utils/agentTranscripts.js +641 -0
  372. package/dist/utils/agentTranscripts.js.map +7 -0
  373. package/dist/utils/animationManager.js +213 -0
  374. package/dist/utils/animationManager.js.map +7 -0
  375. package/dist/utils/animationSync.js +110 -0
  376. package/dist/utils/animationSync.js.map +7 -0
  377. package/dist/utils/asyncFile.js +215 -0
  378. package/dist/utils/asyncFile.js.map +7 -0
  379. package/dist/utils/backgroundAgentManager.js +231 -0
  380. package/dist/utils/backgroundAgentManager.js.map +7 -0
  381. package/dist/utils/config.js +63 -7
  382. package/dist/utils/config.js.map +2 -2
  383. package/dist/utils/conversationRecovery.js +19 -0
  384. package/dist/utils/conversationRecovery.js.map +2 -2
  385. package/dist/utils/exit.js +73 -0
  386. package/dist/utils/exit.js.map +7 -0
  387. package/dist/utils/format.js +73 -5
  388. package/dist/utils/format.js.map +2 -2
  389. package/dist/utils/generators.js +76 -6
  390. package/dist/utils/generators.js.map +2 -2
  391. package/dist/utils/globalErrorHandler.js +149 -0
  392. package/dist/utils/globalErrorHandler.js.map +7 -0
  393. package/dist/utils/groupHandlers/index.js +8 -0
  394. package/dist/utils/groupHandlers/index.js.map +7 -0
  395. package/dist/utils/groupHandlers/parallelTasksHandler.js +140 -0
  396. package/dist/utils/groupHandlers/parallelTasksHandler.js.map +7 -0
  397. package/dist/utils/groupHandlers/taskHandler.js +104 -0
  398. package/dist/utils/groupHandlers/taskHandler.js.map +7 -0
  399. package/dist/utils/groupHandlers/types.js +1 -0
  400. package/dist/utils/groupHandlers/types.js.map +7 -0
  401. package/dist/utils/logRotation.js +224 -0
  402. package/dist/utils/logRotation.js.map +7 -0
  403. package/dist/utils/marketplaceManager.js +3 -5
  404. package/dist/utils/marketplaceManager.js.map +2 -2
  405. package/dist/utils/memSafety.js +264 -0
  406. package/dist/utils/memSafety.js.map +7 -0
  407. package/dist/utils/messageGroupManager.js +274 -0
  408. package/dist/utils/messageGroupManager.js.map +7 -0
  409. package/dist/utils/messages.js +13 -4
  410. package/dist/utils/messages.js.map +2 -2
  411. package/dist/utils/model.js +119 -15
  412. package/dist/utils/model.js.map +3 -3
  413. package/dist/utils/permissions/filesystem.js +157 -5
  414. package/dist/utils/permissions/filesystem.js.map +2 -2
  415. package/dist/utils/plan/planMode.js +143 -0
  416. package/dist/utils/plan/planMode.js.map +7 -0
  417. package/dist/utils/pluginLoader.js +17 -21
  418. package/dist/utils/pluginLoader.js.map +2 -2
  419. package/dist/utils/ripgrep.js +55 -2
  420. package/dist/utils/ripgrep.js.map +2 -2
  421. package/dist/utils/sanitizeInput.js +32 -0
  422. package/dist/utils/sanitizeInput.js.map +7 -0
  423. package/dist/utils/secureKeyStorage.js +312 -0
  424. package/dist/utils/secureKeyStorage.js.map +7 -0
  425. package/dist/utils/session/sessionPlugins.js +67 -0
  426. package/dist/utils/session/sessionPlugins.js.map +7 -0
  427. package/dist/utils/taskDisplayUtils.js +257 -0
  428. package/dist/utils/taskDisplayUtils.js.map +7 -0
  429. package/dist/utils/teamConfig.js +2 -1
  430. package/dist/utils/teamConfig.js.map +2 -2
  431. package/dist/utils/todoStorage.js +92 -2
  432. package/dist/utils/todoStorage.js.map +2 -2
  433. package/dist/utils/toolTimeout.js +136 -0
  434. package/dist/utils/toolTimeout.js.map +7 -0
  435. package/dist/utils/tooling/safeRender.js +115 -0
  436. package/dist/utils/tooling/safeRender.js.map +7 -0
  437. package/dist/utils/userFriendlyError.js +346 -0
  438. package/dist/utils/userFriendlyError.js.map +7 -0
  439. package/dist/utils/vendor/ripgrep/arm64-darwin/rg +0 -0
  440. package/dist/version.js +2 -2
  441. package/dist/version.js.map +1 -1
  442. package/package.json +14 -4
  443. package/scripts/postinstall.js +128 -38
  444. package/dist/commands/agents.js +0 -2086
  445. package/dist/commands/agents.js.map +0 -7
  446. package/dist/commands/build.js +0 -74
  447. package/dist/commands/build.js.map +0 -7
  448. package/dist/commands/compression.js +0 -57
  449. package/dist/commands/compression.js.map +0 -7
  450. package/dist/commands/listen.js +0 -37
  451. package/dist/commands/listen.js.map +0 -7
  452. package/dist/commands/login.js +0 -37
  453. package/dist/commands/login.js.map +0 -7
  454. package/dist/commands/logout.js +0 -33
  455. package/dist/commands/logout.js.map +0 -7
  456. package/dist/commands/mcp.js +0 -40
  457. package/dist/commands/mcp.js.map +0 -7
  458. package/dist/commands/mcp_refresh.js +0 -40
  459. package/dist/commands/mcp_refresh.js.map +0 -7
  460. package/dist/commands/modelstatus.js +0 -21
  461. package/dist/commands/modelstatus.js.map +0 -7
  462. package/dist/commands/onboarding.js +0 -36
  463. package/dist/commands/onboarding.js.map +0 -7
  464. package/dist/commands/plugin-interactive.js +0 -446
  465. package/dist/commands/plugin-interactive.js.map +0 -7
  466. package/dist/commands/pr_comments.js +0 -61
  467. package/dist/commands/pr_comments.js.map +0 -7
  468. package/dist/commands/release-notes.js +0 -30
  469. package/dist/commands/release-notes.js.map +0 -7
  470. package/dist/commands/review.js +0 -51
  471. package/dist/commands/review.js.map +0 -7
  472. package/dist/components/Bug.js +0 -147
  473. package/dist/components/Bug.js.map +0 -7
  474. package/dist/components/ModelSelector.js +0 -2062
  475. package/dist/components/ModelSelector.js.map +0 -7
  476. package/dist/components/ModelStatusDisplay.js +0 -87
  477. package/dist/components/ModelStatusDisplay.js.map +0 -7
  478. package/dist/entrypoints/cli-wrapper.js +0 -61
  479. package/dist/entrypoints/cli-wrapper.js.map +0 -7
  480. package/dist/screens/Doctor.js +0 -22
  481. package/dist/screens/Doctor.js.map +0 -7
@@ -0,0 +1,84 @@
1
+ const DEFAULT_PROJECT_CONFIG = {
2
+ allowedTools: [],
3
+ context: {},
4
+ history: [],
5
+ dontCrawlDirectory: false,
6
+ enableArchitectTool: false,
7
+ mcpContextUris: [],
8
+ mcpServers: {},
9
+ approvedMcprcServers: [],
10
+ rejectedMcprcServers: [],
11
+ hasTrustDialogAccepted: false
12
+ };
13
+ const DEFAULT_MODEL_POINTERS = {
14
+ main: "",
15
+ task: "",
16
+ reasoning: "",
17
+ quick: ""
18
+ };
19
+ const DEFAULT_GLOBAL_CONFIG = {
20
+ numStartups: 0,
21
+ autoUpdaterStatus: "not_configured",
22
+ theme: "dark",
23
+ preferredNotifChannel: "iterm2",
24
+ verbose: false,
25
+ primaryProvider: "anthropic",
26
+ customApiKeyResponses: {
27
+ approved: [],
28
+ rejected: []
29
+ },
30
+ stream: true,
31
+ modelProfiles: [],
32
+ modelPointers: DEFAULT_MODEL_POINTERS,
33
+ lastDismissedUpdateVersion: void 0,
34
+ compressionMode: "business",
35
+ thinking: false,
36
+ configVersion: 1
37
+ // Current config version
38
+ };
39
+ function defaultConfigForProject(projectPath, homeDir) {
40
+ const config = { ...DEFAULT_PROJECT_CONFIG };
41
+ if (projectPath === homeDir) {
42
+ config.dontCrawlDirectory = true;
43
+ }
44
+ return config;
45
+ }
46
+ const CURRENT_CONFIG_VERSION = 1;
47
+ const GLOBAL_CONFIG_KEYS = [
48
+ "autoUpdaterStatus",
49
+ "theme",
50
+ "hasCompletedOnboarding",
51
+ "lastOnboardingVersion",
52
+ "lastReleaseNotesSeen",
53
+ "verbose",
54
+ "customApiKeyResponses",
55
+ "primaryProvider",
56
+ "preferredNotifChannel",
57
+ "shiftEnterKeyBindingInstalled",
58
+ "maxTokens",
59
+ "compressionMode"
60
+ ];
61
+ const PROJECT_CONFIG_KEYS = [
62
+ "dontCrawlDirectory",
63
+ "enableArchitectTool",
64
+ "hasTrustDialogAccepted",
65
+ "hasCompletedProjectOnboarding"
66
+ ];
67
+ function isGlobalConfigKey(key) {
68
+ return GLOBAL_CONFIG_KEYS.includes(key);
69
+ }
70
+ function isProjectConfigKey(key) {
71
+ return PROJECT_CONFIG_KEYS.includes(key);
72
+ }
73
+ export {
74
+ CURRENT_CONFIG_VERSION,
75
+ DEFAULT_GLOBAL_CONFIG,
76
+ DEFAULT_MODEL_POINTERS,
77
+ DEFAULT_PROJECT_CONFIG,
78
+ GLOBAL_CONFIG_KEYS,
79
+ PROJECT_CONFIG_KEYS,
80
+ defaultConfigForProject,
81
+ isGlobalConfigKey,
82
+ isProjectConfigKey
83
+ };
84
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/core/config/defaults.ts"],
4
+ "sourcesContent": ["/**\n * Configuration Default Values\n *\n * Centralized default values for all configuration types.\n */\n\nimport type { GlobalConfig, ProjectConfig, ModelPointers } from './schema'\n\n/**\n * Default project configuration\n */\nexport const DEFAULT_PROJECT_CONFIG: ProjectConfig = {\n allowedTools: [],\n context: {},\n history: [],\n dontCrawlDirectory: false,\n enableArchitectTool: false,\n mcpContextUris: [],\n mcpServers: {},\n approvedMcprcServers: [],\n rejectedMcprcServers: [],\n hasTrustDialogAccepted: false,\n}\n\n/**\n * Default model pointers\n */\nexport const DEFAULT_MODEL_POINTERS: ModelPointers = {\n main: '',\n task: '',\n reasoning: '',\n quick: '',\n}\n\n/**\n * Default global configuration\n */\nexport const DEFAULT_GLOBAL_CONFIG: GlobalConfig = {\n numStartups: 0,\n autoUpdaterStatus: 'not_configured',\n theme: 'dark',\n preferredNotifChannel: 'iterm2',\n verbose: false,\n primaryProvider: 'anthropic',\n customApiKeyResponses: {\n approved: [],\n rejected: [],\n },\n stream: true,\n modelProfiles: [],\n modelPointers: DEFAULT_MODEL_POINTERS,\n lastDismissedUpdateVersion: undefined,\n compressionMode: 'business',\n thinking: false,\n configVersion: 1, // Current config version\n}\n\n/**\n * Get default project config, optionally adjusted for home directory\n */\nexport function defaultConfigForProject(\n projectPath: string,\n homeDir: string,\n): ProjectConfig {\n const config = { ...DEFAULT_PROJECT_CONFIG }\n if (projectPath === homeDir) {\n config.dontCrawlDirectory = true\n }\n return config\n}\n\n/**\n * Current configuration version\n * Increment this when making breaking changes to config structure\n */\nexport const CURRENT_CONFIG_VERSION = 1\n\n/**\n * Modifiable global config keys (exposed to CLI)\n */\nexport const GLOBAL_CONFIG_KEYS = [\n 'autoUpdaterStatus',\n 'theme',\n 'hasCompletedOnboarding',\n 'lastOnboardingVersion',\n 'lastReleaseNotesSeen',\n 'verbose',\n 'customApiKeyResponses',\n 'primaryProvider',\n 'preferredNotifChannel',\n 'shiftEnterKeyBindingInstalled',\n 'maxTokens',\n 'compressionMode',\n] as const\n\nexport type GlobalConfigKey = (typeof GLOBAL_CONFIG_KEYS)[number]\n\n/**\n * Modifiable project config keys (exposed to CLI)\n */\nexport const PROJECT_CONFIG_KEYS = [\n 'dontCrawlDirectory',\n 'enableArchitectTool',\n 'hasTrustDialogAccepted',\n 'hasCompletedProjectOnboarding',\n] as const\n\nexport type ProjectConfigKey = (typeof PROJECT_CONFIG_KEYS)[number]\n\n/**\n * Type guards for config keys\n */\nexport function isGlobalConfigKey(key: string): key is GlobalConfigKey {\n return GLOBAL_CONFIG_KEYS.includes(key as GlobalConfigKey)\n}\n\nexport function isProjectConfigKey(key: string): key is ProjectConfigKey {\n return PROJECT_CONFIG_KEYS.includes(key as ProjectConfigKey)\n}\n"],
5
+ "mappings": "AAWO,MAAM,yBAAwC;AAAA,EACnD,cAAc,CAAC;AAAA,EACf,SAAS,CAAC;AAAA,EACV,SAAS,CAAC;AAAA,EACV,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,gBAAgB,CAAC;AAAA,EACjB,YAAY,CAAC;AAAA,EACb,sBAAsB,CAAC;AAAA,EACvB,sBAAsB,CAAC;AAAA,EACvB,wBAAwB;AAC1B;AAKO,MAAM,yBAAwC;AAAA,EACnD,MAAM;AAAA,EACN,MAAM;AAAA,EACN,WAAW;AAAA,EACX,OAAO;AACT;AAKO,MAAM,wBAAsC;AAAA,EACjD,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB,OAAO;AAAA,EACP,uBAAuB;AAAA,EACvB,SAAS;AAAA,EACT,iBAAiB;AAAA,EACjB,uBAAuB;AAAA,IACrB,UAAU,CAAC;AAAA,IACX,UAAU,CAAC;AAAA,EACb;AAAA,EACA,QAAQ;AAAA,EACR,eAAe,CAAC;AAAA,EAChB,eAAe;AAAA,EACf,4BAA4B;AAAA,EAC5B,iBAAiB;AAAA,EACjB,UAAU;AAAA,EACV,eAAe;AAAA;AACjB;AAKO,SAAS,wBACd,aACA,SACe;AACf,QAAM,SAAS,EAAE,GAAG,uBAAuB;AAC3C,MAAI,gBAAgB,SAAS;AAC3B,WAAO,qBAAqB;AAAA,EAC9B;AACA,SAAO;AACT;AAMO,MAAM,yBAAyB;AAK/B,MAAM,qBAAqB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAOO,MAAM,sBAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAOO,SAAS,kBAAkB,KAAqC;AACrE,SAAO,mBAAmB,SAAS,GAAsB;AAC3D;AAEO,SAAS,mBAAmB,KAAsC;AACvE,SAAO,oBAAoB,SAAS,GAAuB;AAC7D;",
6
+ "names": []
7
+ }
@@ -0,0 +1,111 @@
1
+ import {
2
+ McpStdioServerConfigSchema,
3
+ McpSSEServerConfigSchema,
4
+ McpServerConfigSchema,
5
+ AutoUpdaterStatusSchema,
6
+ NotificationChannelSchema,
7
+ ProviderTypeSchema,
8
+ CompressionModeSchema,
9
+ ReasoningEffortSchema,
10
+ ModelProfileSchema,
11
+ ModelPointerTypeSchema,
12
+ ModelPointersSchema,
13
+ AccountInfoSchema,
14
+ ProjectConfigSchema,
15
+ GlobalConfigSchema,
16
+ validateGlobalConfig,
17
+ validateProjectConfig,
18
+ safeValidateGlobalConfig,
19
+ safeValidateProjectConfig
20
+ } from "./schema.js";
21
+ import {
22
+ DEFAULT_PROJECT_CONFIG,
23
+ DEFAULT_GLOBAL_CONFIG,
24
+ DEFAULT_MODEL_POINTERS,
25
+ CURRENT_CONFIG_VERSION,
26
+ GLOBAL_CONFIG_KEYS,
27
+ PROJECT_CONFIG_KEYS,
28
+ defaultConfigForProject,
29
+ isGlobalConfigKey,
30
+ isProjectConfigKey
31
+ } from "./defaults.js";
32
+ import {
33
+ migrations,
34
+ getConfigVersion,
35
+ migrateConfig,
36
+ needsMigration,
37
+ getMigrationPath
38
+ } from "./migrations.js";
39
+ import {
40
+ GLOBAL_CONFIG_PATH,
41
+ enableConfigReading,
42
+ isConfigReadingAllowed,
43
+ loadConfig,
44
+ saveConfigToFile,
45
+ loadGlobalConfig,
46
+ saveGlobalConfig,
47
+ loadProjectConfig,
48
+ saveProjectConfig,
49
+ loadMcprcConfig,
50
+ getConfigValueForCLI,
51
+ setConfigValueForCLI,
52
+ deleteConfigValueForCLI,
53
+ listConfigForCLI,
54
+ setTestGlobalConfig,
55
+ setTestProjectConfig,
56
+ setTestMcprcConfig,
57
+ clearTestMcprcConfig
58
+ } from "./loader.js";
59
+ export {
60
+ AccountInfoSchema,
61
+ AutoUpdaterStatusSchema,
62
+ CURRENT_CONFIG_VERSION,
63
+ CompressionModeSchema,
64
+ DEFAULT_GLOBAL_CONFIG,
65
+ DEFAULT_MODEL_POINTERS,
66
+ DEFAULT_PROJECT_CONFIG,
67
+ GLOBAL_CONFIG_KEYS,
68
+ GLOBAL_CONFIG_PATH,
69
+ GlobalConfigSchema,
70
+ McpSSEServerConfigSchema,
71
+ McpServerConfigSchema,
72
+ McpStdioServerConfigSchema,
73
+ ModelPointerTypeSchema,
74
+ ModelPointersSchema,
75
+ ModelProfileSchema,
76
+ NotificationChannelSchema,
77
+ PROJECT_CONFIG_KEYS,
78
+ ProjectConfigSchema,
79
+ ProviderTypeSchema,
80
+ ReasoningEffortSchema,
81
+ clearTestMcprcConfig,
82
+ defaultConfigForProject,
83
+ deleteConfigValueForCLI,
84
+ enableConfigReading,
85
+ getConfigValueForCLI,
86
+ getConfigVersion,
87
+ getMigrationPath,
88
+ isConfigReadingAllowed,
89
+ isGlobalConfigKey,
90
+ isProjectConfigKey,
91
+ listConfigForCLI,
92
+ loadConfig,
93
+ loadGlobalConfig,
94
+ loadMcprcConfig,
95
+ loadProjectConfig,
96
+ migrateConfig,
97
+ migrations,
98
+ needsMigration,
99
+ safeValidateGlobalConfig,
100
+ safeValidateProjectConfig,
101
+ saveConfigToFile,
102
+ saveGlobalConfig,
103
+ saveProjectConfig,
104
+ setConfigValueForCLI,
105
+ setTestGlobalConfig,
106
+ setTestMcprcConfig,
107
+ setTestProjectConfig,
108
+ validateGlobalConfig,
109
+ validateProjectConfig
110
+ };
111
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/core/config/index.ts"],
4
+ "sourcesContent": ["/**\n * Core Configuration Module\n *\n * Centralized configuration management with schema validation,\n * version migrations, and type-safe access.\n */\n\n// Schema and types\nexport {\n // Schemas\n McpStdioServerConfigSchema,\n McpSSEServerConfigSchema,\n McpServerConfigSchema,\n AutoUpdaterStatusSchema,\n NotificationChannelSchema,\n ProviderTypeSchema,\n CompressionModeSchema,\n ReasoningEffortSchema,\n ModelProfileSchema,\n ModelPointerTypeSchema,\n ModelPointersSchema,\n AccountInfoSchema,\n ProjectConfigSchema,\n GlobalConfigSchema,\n // Types\n type McpStdioServerConfig,\n type McpSSEServerConfig,\n type McpServerConfig,\n type AutoUpdaterStatus,\n type NotificationChannel,\n type ProviderType,\n type CompressionMode,\n type ReasoningEffort,\n type ModelProfile,\n type ModelPointerType,\n type ModelPointers,\n type AccountInfo,\n type ProjectConfig,\n type GlobalConfig,\n // Validation utilities\n validateGlobalConfig,\n validateProjectConfig,\n safeValidateGlobalConfig,\n safeValidateProjectConfig,\n} from './schema'\n\n// Defaults\nexport {\n DEFAULT_PROJECT_CONFIG,\n DEFAULT_GLOBAL_CONFIG,\n DEFAULT_MODEL_POINTERS,\n CURRENT_CONFIG_VERSION,\n GLOBAL_CONFIG_KEYS,\n PROJECT_CONFIG_KEYS,\n type GlobalConfigKey,\n type ProjectConfigKey,\n defaultConfigForProject,\n isGlobalConfigKey,\n isProjectConfigKey,\n} from './defaults'\n\n// Migrations\nexport {\n type Migration,\n migrations,\n getConfigVersion,\n migrateConfig,\n needsMigration,\n getMigrationPath,\n} from './migrations'\n\n// Loader\nexport {\n GLOBAL_CONFIG_PATH,\n enableConfigReading,\n isConfigReadingAllowed,\n loadConfig,\n saveConfigToFile,\n loadGlobalConfig,\n saveGlobalConfig,\n loadProjectConfig,\n saveProjectConfig,\n loadMcprcConfig,\n getConfigValueForCLI,\n setConfigValueForCLI,\n deleteConfigValueForCLI,\n listConfigForCLI,\n // Test utilities\n setTestGlobalConfig,\n setTestProjectConfig,\n setTestMcprcConfig,\n clearTestMcprcConfig,\n} from './loader'\n"],
5
+ "mappings": "AAQA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAiBA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;",
6
+ "names": []
7
+ }
@@ -0,0 +1,221 @@
1
+ import { existsSync, readFileSync, writeFileSync } from "fs";
2
+ import { resolve, join } from "path";
3
+ import { homedir } from "os";
4
+ import { cloneDeep, pick } from "lodash-es";
5
+ import {
6
+ DEFAULT_GLOBAL_CONFIG,
7
+ DEFAULT_PROJECT_CONFIG,
8
+ defaultConfigForProject,
9
+ GLOBAL_CONFIG_KEYS,
10
+ PROJECT_CONFIG_KEYS
11
+ } from "./defaults.js";
12
+ import {
13
+ migrateConfig,
14
+ needsMigration,
15
+ CURRENT_CONFIG_VERSION
16
+ } from "./migrations.js";
17
+ const GLOBAL_CONFIG_PATH = join(homedir(), ".minto.json");
18
+ const TEST_GLOBAL_CONFIG = {
19
+ ...DEFAULT_GLOBAL_CONFIG,
20
+ autoUpdaterStatus: "disabled"
21
+ };
22
+ const TEST_PROJECT_CONFIG = { ...DEFAULT_PROJECT_CONFIG };
23
+ const TEST_MCPRC_CONFIG = {};
24
+ let configReadingAllowed = false;
25
+ function enableConfigReading() {
26
+ configReadingAllowed = true;
27
+ }
28
+ function isConfigReadingAllowed() {
29
+ return configReadingAllowed;
30
+ }
31
+ function loadConfig(filePath, defaultConfig) {
32
+ if (!existsSync(filePath)) {
33
+ return cloneDeep(defaultConfig);
34
+ }
35
+ try {
36
+ const content = readFileSync(filePath, "utf-8");
37
+ const parsed = JSON.parse(content);
38
+ let config = parsed;
39
+ if (needsMigration(config)) {
40
+ config = migrateConfig(config);
41
+ saveConfigToFile(filePath, config);
42
+ }
43
+ return {
44
+ ...cloneDeep(defaultConfig),
45
+ ...config
46
+ };
47
+ } catch {
48
+ return cloneDeep(defaultConfig);
49
+ }
50
+ }
51
+ function saveConfigToFile(filePath, config) {
52
+ try {
53
+ const configWithVersion = {
54
+ ...config,
55
+ configVersion: config.configVersion ?? CURRENT_CONFIG_VERSION
56
+ };
57
+ writeFileSync(filePath, JSON.stringify(configWithVersion, null, 2), "utf-8");
58
+ } catch (error) {
59
+ const err = error;
60
+ if (err?.code === "EACCES" || err?.code === "EPERM" || err?.code === "EROFS") {
61
+ return;
62
+ }
63
+ throw error;
64
+ }
65
+ }
66
+ function loadGlobalConfig(configPath = GLOBAL_CONFIG_PATH) {
67
+ if (process.env.NODE_ENV === "test") {
68
+ return TEST_GLOBAL_CONFIG;
69
+ }
70
+ return loadConfig(configPath, DEFAULT_GLOBAL_CONFIG);
71
+ }
72
+ function saveGlobalConfig(config, configPath = GLOBAL_CONFIG_PATH) {
73
+ if (process.env.NODE_ENV === "test") {
74
+ Object.assign(TEST_GLOBAL_CONFIG, config);
75
+ return;
76
+ }
77
+ const existing = loadGlobalConfig(configPath);
78
+ const filteredConfig = Object.fromEntries(
79
+ Object.entries({
80
+ ...config,
81
+ projects: existing.projects
82
+ }).filter(([key, value]) => {
83
+ const defaultValue = DEFAULT_GLOBAL_CONFIG[key];
84
+ return JSON.stringify(value) !== JSON.stringify(defaultValue);
85
+ })
86
+ );
87
+ saveConfigToFile(configPath, filteredConfig);
88
+ }
89
+ function loadProjectConfig(projectPath, configPath = GLOBAL_CONFIG_PATH) {
90
+ if (process.env.NODE_ENV === "test") {
91
+ return TEST_PROJECT_CONFIG;
92
+ }
93
+ const absolutePath = resolve(projectPath);
94
+ const globalConfig = loadGlobalConfig(configPath);
95
+ if (!globalConfig.projects) {
96
+ return defaultConfigForProject(absolutePath, homedir());
97
+ }
98
+ const projectConfig = globalConfig.projects[absolutePath] ?? defaultConfigForProject(absolutePath, homedir());
99
+ if (typeof projectConfig.allowedTools === "string") {
100
+ try {
101
+ projectConfig.allowedTools = JSON.parse(projectConfig.allowedTools);
102
+ } catch {
103
+ projectConfig.allowedTools = [];
104
+ }
105
+ }
106
+ return projectConfig;
107
+ }
108
+ function saveProjectConfig(projectPath, projectConfig, configPath = GLOBAL_CONFIG_PATH) {
109
+ if (process.env.NODE_ENV === "test") {
110
+ Object.assign(TEST_PROJECT_CONFIG, projectConfig);
111
+ return;
112
+ }
113
+ const absolutePath = resolve(projectPath);
114
+ const globalConfig = loadGlobalConfig(configPath);
115
+ saveConfigToFile(configPath, {
116
+ ...globalConfig,
117
+ projects: {
118
+ ...globalConfig.projects,
119
+ [absolutePath]: projectConfig
120
+ }
121
+ });
122
+ }
123
+ function loadMcprcConfig(projectPath) {
124
+ if (process.env.NODE_ENV === "test") {
125
+ return TEST_MCPRC_CONFIG;
126
+ }
127
+ const mcprcPath = join(projectPath, ".mcprc");
128
+ if (!existsSync(mcprcPath)) {
129
+ return {};
130
+ }
131
+ try {
132
+ const content = readFileSync(mcprcPath, "utf-8");
133
+ const config = JSON.parse(content);
134
+ if (config && typeof config === "object") {
135
+ return config;
136
+ }
137
+ } catch {
138
+ }
139
+ return {};
140
+ }
141
+ function getConfigValueForCLI(key, projectPath, isGlobal, configPath = GLOBAL_CONFIG_PATH) {
142
+ if (isGlobal) {
143
+ const config = loadGlobalConfig(configPath);
144
+ return config[key];
145
+ } else {
146
+ const config = loadProjectConfig(projectPath, configPath);
147
+ return config[key];
148
+ }
149
+ }
150
+ function setConfigValueForCLI(key, value, projectPath, isGlobal, configPath = GLOBAL_CONFIG_PATH) {
151
+ if (isGlobal) {
152
+ const config = loadGlobalConfig(configPath);
153
+ saveGlobalConfig({ ...config, [key]: value }, configPath);
154
+ } else {
155
+ const config = loadProjectConfig(projectPath, configPath);
156
+ saveProjectConfig(projectPath, { ...config, [key]: value }, configPath);
157
+ }
158
+ }
159
+ function deleteConfigValueForCLI(key, projectPath, isGlobal, configPath = GLOBAL_CONFIG_PATH) {
160
+ if (isGlobal) {
161
+ const config = loadGlobalConfig(configPath);
162
+ delete config[key];
163
+ saveGlobalConfig(config, configPath);
164
+ } else {
165
+ const config = loadProjectConfig(projectPath, configPath);
166
+ delete config[key];
167
+ saveProjectConfig(projectPath, config, configPath);
168
+ }
169
+ }
170
+ function listConfigForCLI(projectPath, isGlobal, configPath = GLOBAL_CONFIG_PATH) {
171
+ if (isGlobal) {
172
+ const config = loadGlobalConfig(configPath);
173
+ return pick(config, GLOBAL_CONFIG_KEYS);
174
+ } else {
175
+ const config = loadProjectConfig(projectPath, configPath);
176
+ return pick(config, PROJECT_CONFIG_KEYS);
177
+ }
178
+ }
179
+ function setTestGlobalConfig(config) {
180
+ if (process.env.NODE_ENV === "test") {
181
+ Object.assign(TEST_GLOBAL_CONFIG, config);
182
+ }
183
+ }
184
+ function setTestProjectConfig(config) {
185
+ if (process.env.NODE_ENV === "test") {
186
+ Object.assign(TEST_PROJECT_CONFIG, config);
187
+ }
188
+ }
189
+ function setTestMcprcConfig(config) {
190
+ if (process.env.NODE_ENV === "test") {
191
+ Object.assign(TEST_MCPRC_CONFIG, config);
192
+ }
193
+ }
194
+ function clearTestMcprcConfig() {
195
+ if (process.env.NODE_ENV === "test") {
196
+ for (const key of Object.keys(TEST_MCPRC_CONFIG)) {
197
+ delete TEST_MCPRC_CONFIG[key];
198
+ }
199
+ }
200
+ }
201
+ export {
202
+ GLOBAL_CONFIG_PATH,
203
+ clearTestMcprcConfig,
204
+ deleteConfigValueForCLI,
205
+ enableConfigReading,
206
+ getConfigValueForCLI,
207
+ isConfigReadingAllowed,
208
+ listConfigForCLI,
209
+ loadConfig,
210
+ loadGlobalConfig,
211
+ loadMcprcConfig,
212
+ loadProjectConfig,
213
+ saveConfigToFile,
214
+ saveGlobalConfig,
215
+ saveProjectConfig,
216
+ setConfigValueForCLI,
217
+ setTestGlobalConfig,
218
+ setTestMcprcConfig,
219
+ setTestProjectConfig
220
+ };
221
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/core/config/loader.ts"],
4
+ "sourcesContent": ["/**\n * Configuration Loader\n *\n * Handles loading, saving, and caching configuration files.\n */\n\nimport { existsSync, readFileSync, writeFileSync } from 'fs'\nimport { resolve, join } from 'path'\nimport { homedir } from 'os'\nimport { cloneDeep, pick } from 'lodash-es'\n\nimport type { GlobalConfig, ProjectConfig, McpServerConfig } from './schema'\nimport {\n DEFAULT_GLOBAL_CONFIG,\n DEFAULT_PROJECT_CONFIG,\n defaultConfigForProject,\n GLOBAL_CONFIG_KEYS,\n PROJECT_CONFIG_KEYS,\n} from './defaults'\nimport {\n migrateConfig,\n needsMigration,\n CURRENT_CONFIG_VERSION,\n} from './migrations'\n\n/**\n * Configuration file paths\n */\nexport const GLOBAL_CONFIG_PATH = join(homedir(), '.minto.json')\n\n/**\n * Test mode configuration storage\n */\nconst TEST_GLOBAL_CONFIG: GlobalConfig = {\n ...DEFAULT_GLOBAL_CONFIG,\n autoUpdaterStatus: 'disabled',\n}\nconst TEST_PROJECT_CONFIG: ProjectConfig = { ...DEFAULT_PROJECT_CONFIG }\nconst TEST_MCPRC_CONFIG: Record<string, McpServerConfig> = {}\n\n/**\n * Configuration read permission flag\n */\nlet configReadingAllowed = false\n\n/**\n * Enable configuration reading\n * Call this at startup after initialization\n */\nexport function enableConfigReading(): void {\n configReadingAllowed = true\n}\n\n/**\n * Check if config reading is allowed\n */\nexport function isConfigReadingAllowed(): boolean {\n return configReadingAllowed\n}\n\n/**\n * Load configuration from file with migration support\n */\nexport function loadConfig<T extends Record<string, unknown>>(\n filePath: string,\n defaultConfig: T,\n): T {\n if (!existsSync(filePath)) {\n return cloneDeep(defaultConfig)\n }\n\n try {\n const content = readFileSync(filePath, 'utf-8')\n const parsed = JSON.parse(content)\n\n // Apply migrations if needed\n let config = parsed\n if (needsMigration(config)) {\n config = migrateConfig(config)\n // Auto-save migrated config\n saveConfigToFile(filePath, config)\n }\n\n return {\n ...cloneDeep(defaultConfig),\n ...config,\n } as T\n } catch {\n return cloneDeep(defaultConfig)\n }\n}\n\n/**\n * Save configuration to file\n */\nexport function saveConfigToFile(\n filePath: string,\n config: Record<string, unknown>,\n): void {\n try {\n // Ensure config version is set\n const configWithVersion = {\n ...config,\n configVersion: config.configVersion ?? CURRENT_CONFIG_VERSION,\n }\n writeFileSync(filePath, JSON.stringify(configWithVersion, null, 2), 'utf-8')\n } catch (error) {\n const err = error as NodeJS.ErrnoException\n if (\n err?.code === 'EACCES' ||\n err?.code === 'EPERM' ||\n err?.code === 'EROFS'\n ) {\n // Skip saving on permission errors (read-only filesystem, etc.)\n return\n }\n throw error\n }\n}\n\n/**\n * Get global configuration\n */\nexport function loadGlobalConfig(\n configPath: string = GLOBAL_CONFIG_PATH,\n): GlobalConfig {\n if (process.env.NODE_ENV === 'test') {\n return TEST_GLOBAL_CONFIG\n }\n return loadConfig(configPath, DEFAULT_GLOBAL_CONFIG)\n}\n\n/**\n * Save global configuration\n */\nexport function saveGlobalConfig(\n config: GlobalConfig,\n configPath: string = GLOBAL_CONFIG_PATH,\n): void {\n if (process.env.NODE_ENV === 'test') {\n Object.assign(TEST_GLOBAL_CONFIG, config)\n return\n }\n\n // Load existing config to preserve projects\n const existing = loadGlobalConfig(configPath)\n\n // Filter out default values to keep config file minimal\n const filteredConfig = Object.fromEntries(\n Object.entries({\n ...config,\n projects: existing.projects,\n }).filter(([key, value]) => {\n const defaultValue = DEFAULT_GLOBAL_CONFIG[key as keyof GlobalConfig]\n return JSON.stringify(value) !== JSON.stringify(defaultValue)\n }),\n )\n\n saveConfigToFile(configPath, filteredConfig)\n}\n\n/**\n * Get project configuration\n */\nexport function loadProjectConfig(\n projectPath: string,\n configPath: string = GLOBAL_CONFIG_PATH,\n): ProjectConfig {\n if (process.env.NODE_ENV === 'test') {\n return TEST_PROJECT_CONFIG\n }\n\n const absolutePath = resolve(projectPath)\n const globalConfig = loadGlobalConfig(configPath)\n\n if (!globalConfig.projects) {\n return defaultConfigForProject(absolutePath, homedir())\n }\n\n const projectConfig =\n globalConfig.projects[absolutePath] ??\n defaultConfigForProject(absolutePath, homedir())\n\n // Handle legacy string allowedTools\n if (typeof projectConfig.allowedTools === 'string') {\n try {\n projectConfig.allowedTools = JSON.parse(projectConfig.allowedTools)\n } catch {\n projectConfig.allowedTools = []\n }\n }\n\n return projectConfig\n}\n\n/**\n * Save project configuration\n */\nexport function saveProjectConfig(\n projectPath: string,\n projectConfig: ProjectConfig,\n configPath: string = GLOBAL_CONFIG_PATH,\n): void {\n if (process.env.NODE_ENV === 'test') {\n Object.assign(TEST_PROJECT_CONFIG, projectConfig)\n return\n }\n\n const absolutePath = resolve(projectPath)\n const globalConfig = loadGlobalConfig(configPath)\n\n saveConfigToFile(configPath, {\n ...globalConfig,\n projects: {\n ...globalConfig.projects,\n [absolutePath]: projectConfig,\n },\n })\n}\n\n/**\n * Load .mcprc configuration\n */\nexport function loadMcprcConfig(\n projectPath: string,\n): Record<string, McpServerConfig> {\n if (process.env.NODE_ENV === 'test') {\n return TEST_MCPRC_CONFIG\n }\n\n const mcprcPath = join(projectPath, '.mcprc')\n if (!existsSync(mcprcPath)) {\n return {}\n }\n\n try {\n const content = readFileSync(mcprcPath, 'utf-8')\n const config = JSON.parse(content)\n if (config && typeof config === 'object') {\n return config as Record<string, McpServerConfig>\n }\n } catch {\n // Ignore errors\n }\n\n return {}\n}\n\n/**\n * Get config value for CLI\n */\nexport function getConfigValueForCLI(\n key: string,\n projectPath: string,\n isGlobal: boolean,\n configPath: string = GLOBAL_CONFIG_PATH,\n): unknown {\n if (isGlobal) {\n const config = loadGlobalConfig(configPath)\n return config[key as keyof GlobalConfig]\n } else {\n const config = loadProjectConfig(projectPath, configPath)\n return config[key as keyof ProjectConfig]\n }\n}\n\n/**\n * Set config value for CLI\n */\nexport function setConfigValueForCLI(\n key: string,\n value: unknown,\n projectPath: string,\n isGlobal: boolean,\n configPath: string = GLOBAL_CONFIG_PATH,\n): void {\n if (isGlobal) {\n const config = loadGlobalConfig(configPath)\n saveGlobalConfig({ ...config, [key]: value }, configPath)\n } else {\n const config = loadProjectConfig(projectPath, configPath)\n saveProjectConfig(projectPath, { ...config, [key]: value }, configPath)\n }\n}\n\n/**\n * Delete config value for CLI\n */\nexport function deleteConfigValueForCLI(\n key: string,\n projectPath: string,\n isGlobal: boolean,\n configPath: string = GLOBAL_CONFIG_PATH,\n): void {\n if (isGlobal) {\n const config = loadGlobalConfig(configPath)\n delete (config as Record<string, unknown>)[key]\n saveGlobalConfig(config, configPath)\n } else {\n const config = loadProjectConfig(projectPath, configPath)\n delete (config as Record<string, unknown>)[key]\n saveProjectConfig(projectPath, config, configPath)\n }\n}\n\n/**\n * List config for CLI\n */\nexport function listConfigForCLI(\n projectPath: string,\n isGlobal: boolean,\n configPath: string = GLOBAL_CONFIG_PATH,\n): Record<string, unknown> {\n if (isGlobal) {\n const config = loadGlobalConfig(configPath)\n return pick(config, GLOBAL_CONFIG_KEYS)\n } else {\n const config = loadProjectConfig(projectPath, configPath)\n return pick(config, PROJECT_CONFIG_KEYS)\n }\n}\n\n/**\n * Test utilities\n */\nexport function setTestGlobalConfig(config: Partial<GlobalConfig>): void {\n if (process.env.NODE_ENV === 'test') {\n Object.assign(TEST_GLOBAL_CONFIG, config)\n }\n}\n\nexport function setTestProjectConfig(config: Partial<ProjectConfig>): void {\n if (process.env.NODE_ENV === 'test') {\n Object.assign(TEST_PROJECT_CONFIG, config)\n }\n}\n\nexport function setTestMcprcConfig(\n config: Record<string, McpServerConfig>,\n): void {\n if (process.env.NODE_ENV === 'test') {\n Object.assign(TEST_MCPRC_CONFIG, config)\n }\n}\n\nexport function clearTestMcprcConfig(): void {\n if (process.env.NODE_ENV === 'test') {\n for (const key of Object.keys(TEST_MCPRC_CONFIG)) {\n delete TEST_MCPRC_CONFIG[key]\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,128 @@
1
+ import { DEFAULT_MODEL_POINTERS, CURRENT_CONFIG_VERSION } from "./defaults.js";
2
+ const migrations = [
3
+ {
4
+ version: 1,
5
+ description: "Initial versioned configuration",
6
+ up: (config) => {
7
+ return { ...config, configVersion: 1 };
8
+ },
9
+ down: (config) => {
10
+ const { configVersion, ...rest } = config;
11
+ return rest;
12
+ }
13
+ },
14
+ {
15
+ version: 2,
16
+ description: "Remove deprecated model ID fields, migrate to modelName",
17
+ up: (config) => {
18
+ const legacyConfig = config;
19
+ const idToModelNameMap = /* @__PURE__ */ new Map();
20
+ const migratedProfiles = [];
21
+ if (legacyConfig.modelProfiles) {
22
+ for (const profile of legacyConfig.modelProfiles) {
23
+ if (profile.id && profile.modelName) {
24
+ idToModelNameMap.set(profile.id, profile.modelName);
25
+ }
26
+ const { id, ...profileWithoutId } = profile;
27
+ migratedProfiles.push(profileWithoutId);
28
+ }
29
+ }
30
+ const migratedPointers = { ...DEFAULT_MODEL_POINTERS };
31
+ const existingPointers = legacyConfig.modelPointers;
32
+ if (existingPointers) {
33
+ for (const [pointer, value] of Object.entries(existingPointers)) {
34
+ if (value) {
35
+ const modelName = idToModelNameMap.get(value) || value;
36
+ migratedPointers[pointer] = modelName;
37
+ }
38
+ }
39
+ }
40
+ let defaultModelName;
41
+ if (legacyConfig.defaultModelId) {
42
+ defaultModelName = idToModelNameMap.get(legacyConfig.defaultModelId) || legacyConfig.defaultModelId;
43
+ } else if (legacyConfig.defaultModelName) {
44
+ defaultModelName = legacyConfig.defaultModelName;
45
+ }
46
+ const migratedConfig = { ...config };
47
+ delete migratedConfig["defaultModelId"];
48
+ delete migratedConfig["currentSelectedModelId"];
49
+ delete migratedConfig["mainAgentModelId"];
50
+ delete migratedConfig["taskToolModelId"];
51
+ return {
52
+ ...migratedConfig,
53
+ modelProfiles: migratedProfiles,
54
+ modelPointers: migratedPointers,
55
+ defaultModelName,
56
+ configVersion: 2
57
+ };
58
+ },
59
+ down: (config) => {
60
+ return {
61
+ ...config,
62
+ configVersion: 1
63
+ };
64
+ }
65
+ }
66
+ ];
67
+ function getConfigVersion(config) {
68
+ if (typeof config.configVersion === "number") {
69
+ return config.configVersion;
70
+ }
71
+ return 0;
72
+ }
73
+ function migrateConfig(config, targetVersion = CURRENT_CONFIG_VERSION) {
74
+ const currentVersion = getConfigVersion(config);
75
+ if (currentVersion === targetVersion) {
76
+ return config;
77
+ }
78
+ let result = { ...config };
79
+ if (currentVersion < targetVersion) {
80
+ for (const migration of migrations) {
81
+ if (migration.version > currentVersion && migration.version <= targetVersion) {
82
+ result = migration.up(result);
83
+ }
84
+ }
85
+ } else {
86
+ const reversedMigrations = [...migrations].reverse();
87
+ for (const migration of reversedMigrations) {
88
+ if (migration.version <= currentVersion && migration.version > targetVersion) {
89
+ result = migration.down(result);
90
+ }
91
+ }
92
+ }
93
+ return result;
94
+ }
95
+ function needsMigration(config, targetVersion = CURRENT_CONFIG_VERSION) {
96
+ return getConfigVersion(config) !== targetVersion;
97
+ }
98
+ function getMigrationPath(fromVersion, toVersion) {
99
+ const descriptions = [];
100
+ if (fromVersion < toVersion) {
101
+ for (const migration of migrations) {
102
+ if (migration.version > fromVersion && migration.version <= toVersion) {
103
+ descriptions.push(
104
+ `v${migration.version - 1} \u2192 v${migration.version}: ${migration.description}`
105
+ );
106
+ }
107
+ }
108
+ } else if (fromVersion > toVersion) {
109
+ const reversedMigrations = [...migrations].reverse();
110
+ for (const migration of reversedMigrations) {
111
+ if (migration.version <= fromVersion && migration.version > toVersion) {
112
+ descriptions.push(
113
+ `v${migration.version} \u2192 v${migration.version - 1}: Rollback ${migration.description}`
114
+ );
115
+ }
116
+ }
117
+ }
118
+ return descriptions;
119
+ }
120
+ export {
121
+ CURRENT_CONFIG_VERSION,
122
+ getConfigVersion,
123
+ getMigrationPath,
124
+ migrateConfig,
125
+ migrations,
126
+ needsMigration
127
+ };
128
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/core/config/migrations.ts"],
4
+ "sourcesContent": ["/**\n * Configuration Version Migrations\n *\n * Handles migration of configuration between versions.\n * Each migration defines both upgrade (up) and downgrade (down) paths.\n */\n\nimport type { ModelProfile, ModelPointers } from './schema'\nimport { DEFAULT_MODEL_POINTERS, CURRENT_CONFIG_VERSION } from './defaults'\n\n// Re-export for backwards compatibility with imports from this module\nexport { CURRENT_CONFIG_VERSION }\n\n/**\n * Migration interface\n */\nexport interface Migration {\n /** Target version after this migration */\n version: number\n /** Description of what this migration does */\n description: string\n /** Upgrade function (from previous version to this version) */\n up: (config: Record<string, unknown>) => Record<string, unknown>\n /** Downgrade function (from this version to previous version) */\n down: (config: Record<string, unknown>) => Record<string, unknown>\n}\n\n/**\n * Legacy ModelProfile type with deprecated 'id' field\n */\ninterface LegacyModelProfile extends ModelProfile {\n id?: string\n}\n\n/**\n * Legacy global config fields for migration\n */\ninterface LegacyGlobalConfigFields {\n defaultModelId?: string\n defaultModelName?: string\n currentSelectedModelId?: string\n mainAgentModelId?: string\n taskToolModelId?: string\n}\n\n/**\n * All migrations in order\n */\nexport const migrations: Migration[] = [\n {\n version: 1,\n description: 'Initial versioned configuration',\n up: config => {\n // Add configVersion field\n return { ...config, configVersion: 1 }\n },\n down: config => {\n // Remove configVersion field\n const { configVersion, ...rest } = config\n return rest\n },\n },\n {\n version: 2,\n description: 'Remove deprecated model ID fields, migrate to modelName',\n up: config => {\n const legacyConfig = config as Record<string, unknown> &\n LegacyGlobalConfigFields & { modelProfiles?: LegacyModelProfile[] }\n\n // Build ID to modelName mapping\n const idToModelNameMap = new Map<string, string>()\n const migratedProfiles: ModelProfile[] = []\n\n if (legacyConfig.modelProfiles) {\n for (const profile of legacyConfig.modelProfiles) {\n // Build mapping before removing id field\n if (profile.id && profile.modelName) {\n idToModelNameMap.set(profile.id, profile.modelName)\n }\n // Remove id field\n const { id, ...profileWithoutId } = profile\n migratedProfiles.push(profileWithoutId as ModelProfile)\n }\n }\n\n // Migrate ModelPointers from IDs to modelNames\n const migratedPointers: ModelPointers = { ...DEFAULT_MODEL_POINTERS }\n const existingPointers = legacyConfig.modelPointers as\n | ModelPointers\n | undefined\n\n if (existingPointers) {\n for (const [pointer, value] of Object.entries(existingPointers)) {\n if (value) {\n const modelName = idToModelNameMap.get(value) || value\n migratedPointers[pointer as keyof ModelPointers] = modelName\n }\n }\n }\n\n // Migrate default model\n let defaultModelName: string | undefined\n if (legacyConfig.defaultModelId) {\n defaultModelName =\n idToModelNameMap.get(legacyConfig.defaultModelId) ||\n legacyConfig.defaultModelId\n } else if (legacyConfig.defaultModelName) {\n defaultModelName = legacyConfig.defaultModelName\n }\n\n // Create migrated config\n const migratedConfig: Record<string, unknown> = { ...config }\n delete migratedConfig['defaultModelId']\n delete migratedConfig['currentSelectedModelId']\n delete migratedConfig['mainAgentModelId']\n delete migratedConfig['taskToolModelId']\n\n return {\n ...migratedConfig,\n modelProfiles: migratedProfiles,\n modelPointers: migratedPointers,\n defaultModelName,\n configVersion: 2,\n }\n },\n down: config => {\n // Downgrade is lossy - we can't restore IDs\n return {\n ...config,\n configVersion: 1,\n }\n },\n },\n]\n\n/**\n * Get the version of a config\n */\nexport function getConfigVersion(config: Record<string, unknown>): number {\n if (typeof config.configVersion === 'number') {\n return config.configVersion\n }\n // Unversioned config is version 0\n return 0\n}\n\n/**\n * Migrate configuration to a target version\n *\n * @param config - The configuration to migrate\n * @param targetVersion - The target version (defaults to current)\n * @returns Migrated configuration\n */\nexport function migrateConfig(\n config: Record<string, unknown>,\n targetVersion: number = CURRENT_CONFIG_VERSION,\n): Record<string, unknown> {\n const currentVersion = getConfigVersion(config)\n\n if (currentVersion === targetVersion) {\n return config\n }\n\n let result = { ...config }\n\n if (currentVersion < targetVersion) {\n // Upgrade path\n for (const migration of migrations) {\n if (\n migration.version > currentVersion &&\n migration.version <= targetVersion\n ) {\n result = migration.up(result)\n }\n }\n } else {\n // Downgrade path (reverse order)\n const reversedMigrations = [...migrations].reverse()\n for (const migration of reversedMigrations) {\n if (\n migration.version <= currentVersion &&\n migration.version > targetVersion\n ) {\n result = migration.down(result)\n }\n }\n }\n\n return result\n}\n\n/**\n * Check if a config needs migration\n */\nexport function needsMigration(\n config: Record<string, unknown>,\n targetVersion: number = CURRENT_CONFIG_VERSION,\n): boolean {\n return getConfigVersion(config) !== targetVersion\n}\n\n/**\n * Get migration path description\n */\nexport function getMigrationPath(\n fromVersion: number,\n toVersion: number,\n): string[] {\n const descriptions: string[] = []\n\n if (fromVersion < toVersion) {\n for (const migration of migrations) {\n if (migration.version > fromVersion && migration.version <= toVersion) {\n descriptions.push(\n `v${migration.version - 1} \u2192 v${migration.version}: ${migration.description}`,\n )\n }\n }\n } else if (fromVersion > toVersion) {\n const reversedMigrations = [...migrations].reverse()\n for (const migration of reversedMigrations) {\n if (migration.version <= fromVersion && migration.version > toVersion) {\n descriptions.push(\n `v${migration.version} \u2192 v${migration.version - 1}: Rollback ${migration.description}`,\n )\n }\n }\n }\n\n return descriptions\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }