@within-7/minto 0.1.7 → 0.3.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 (601) 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 +73 -49
  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 +85 -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 +157 -0
  22. package/dist/commands/export.js.map +7 -0
  23. package/dist/commands/mcp-interactive.js +28 -18
  24. package/dist/commands/mcp-interactive.js.map +2 -2
  25. package/dist/commands/model.js +9 -7
  26. package/dist/commands/model.js.map +2 -2
  27. package/dist/commands/permissions.js +87 -0
  28. package/dist/commands/permissions.js.map +7 -0
  29. package/dist/commands/plugin/AddMarketplaceForm.js +3 -2
  30. package/dist/commands/plugin/AddMarketplaceForm.js.map +2 -2
  31. package/dist/commands/plugin/ConfirmDialog.js +2 -1
  32. package/dist/commands/plugin/ConfirmDialog.js.map +2 -2
  33. package/dist/commands/plugin/ErrorView.js +2 -1
  34. package/dist/commands/plugin/ErrorView.js.map +2 -2
  35. package/dist/commands/plugin/InstalledPluginsByMarketplace.js +5 -4
  36. package/dist/commands/plugin/InstalledPluginsByMarketplace.js.map +2 -2
  37. package/dist/commands/plugin/InstalledPluginsManager.js +5 -4
  38. package/dist/commands/plugin/InstalledPluginsManager.js.map +2 -2
  39. package/dist/commands/plugin/MainMenu.js +2 -1
  40. package/dist/commands/plugin/MainMenu.js.map +2 -2
  41. package/dist/commands/plugin/MarketplaceManager.js +5 -4
  42. package/dist/commands/plugin/MarketplaceManager.js.map +2 -2
  43. package/dist/commands/plugin/MarketplaceSelector.js +4 -3
  44. package/dist/commands/plugin/MarketplaceSelector.js.map +2 -2
  45. package/dist/commands/plugin/PlaceholderScreen.js +3 -2
  46. package/dist/commands/plugin/PlaceholderScreen.js.map +2 -2
  47. package/dist/commands/plugin/PluginBrowser.js +6 -5
  48. package/dist/commands/plugin/PluginBrowser.js.map +2 -2
  49. package/dist/commands/plugin/PluginDetailsInstall.js +5 -4
  50. package/dist/commands/plugin/PluginDetailsInstall.js.map +2 -2
  51. package/dist/commands/plugin/PluginDetailsManage.js +4 -3
  52. package/dist/commands/plugin/PluginDetailsManage.js.map +2 -2
  53. package/dist/commands/plugin.js +16 -15
  54. package/dist/commands/plugin.js.map +2 -2
  55. package/dist/commands/quit.js +3 -1
  56. package/dist/commands/quit.js.map +2 -2
  57. package/dist/commands/sandbox.js +105 -0
  58. package/dist/commands/sandbox.js.map +7 -0
  59. package/dist/commands/setup.js +2 -1
  60. package/dist/commands/setup.js.map +2 -2
  61. package/dist/commands/status.js +59 -0
  62. package/dist/commands/status.js.map +7 -0
  63. package/dist/commands/tasks.js +108 -0
  64. package/dist/commands/tasks.js.map +7 -0
  65. package/dist/commands/todos.js +123 -0
  66. package/dist/commands/todos.js.map +7 -0
  67. package/dist/commands/undo.js +245 -0
  68. package/dist/commands/undo.js.map +7 -0
  69. package/dist/commands.js +22 -2
  70. package/dist/commands.js.map +2 -2
  71. package/dist/components/AgentThinkingBlock.js +10 -18
  72. package/dist/components/AgentThinkingBlock.js.map +2 -2
  73. package/dist/components/AsciiLogo.js +7 -8
  74. package/dist/components/AsciiLogo.js.map +2 -2
  75. package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js +3 -2
  76. package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js.map +2 -2
  77. package/dist/components/AskUserQuestionDialog/QuestionView.js +2 -1
  78. package/dist/components/AskUserQuestionDialog/QuestionView.js.map +2 -2
  79. package/dist/components/BackgroundTasksPanel.js +78 -29
  80. package/dist/components/BackgroundTasksPanel.js.map +2 -2
  81. package/dist/components/BashStreamingProgress.js +24 -0
  82. package/dist/components/BashStreamingProgress.js.map +7 -0
  83. package/dist/components/CollapsibleHint.js +15 -0
  84. package/dist/components/CollapsibleHint.js.map +7 -0
  85. package/dist/components/Config.js +3 -2
  86. package/dist/components/Config.js.map +2 -2
  87. package/dist/components/ConsoleOAuthFlow.js +2 -1
  88. package/dist/components/ConsoleOAuthFlow.js.map +2 -2
  89. package/dist/components/Cost.js +2 -1
  90. package/dist/components/Cost.js.map +2 -2
  91. package/dist/components/FileEditToolUpdatedMessage.js +1 -1
  92. package/dist/components/FileEditToolUpdatedMessage.js.map +2 -2
  93. package/dist/components/HeaderBar.js +13 -8
  94. package/dist/components/HeaderBar.js.map +2 -2
  95. package/dist/components/HistorySearchOverlay.js +4 -3
  96. package/dist/components/HistorySearchOverlay.js.map +2 -2
  97. package/dist/components/HotkeyHelpPanel.js +134 -0
  98. package/dist/components/HotkeyHelpPanel.js.map +7 -0
  99. package/dist/components/InvalidConfigDialog.js +2 -1
  100. package/dist/components/InvalidConfigDialog.js.map +2 -2
  101. package/dist/components/Logo.js +24 -68
  102. package/dist/components/Logo.js.map +2 -2
  103. package/dist/components/MCPServerApprovalDialog.js +2 -1
  104. package/dist/components/MCPServerApprovalDialog.js.map +2 -2
  105. package/dist/components/MCPServerDialogCopy.js +2 -1
  106. package/dist/components/MCPServerDialogCopy.js.map +2 -2
  107. package/dist/components/MCPServerMultiselectDialog.js +2 -1
  108. package/dist/components/MCPServerMultiselectDialog.js.map +2 -2
  109. package/dist/components/Message.js +23 -7
  110. package/dist/components/Message.js.map +3 -3
  111. package/dist/components/MessageSelector.js +4 -3
  112. package/dist/components/MessageSelector.js.map +2 -2
  113. package/dist/components/ModeIndicator.js +2 -1
  114. package/dist/components/ModeIndicator.js.map +2 -2
  115. package/dist/components/ModelConfig.js +20 -6
  116. package/dist/components/ModelConfig.js.map +2 -2
  117. package/dist/components/ModelListManager.js +7 -6
  118. package/dist/components/ModelListManager.js.map +2 -2
  119. package/dist/components/ModelSelector/ModelSelector.js +27 -14
  120. package/dist/components/ModelSelector/ModelSelector.js.map +2 -2
  121. package/dist/components/Onboarding.js +22 -16
  122. package/dist/components/Onboarding.js.map +2 -2
  123. package/dist/components/OperationSummary.js +130 -0
  124. package/dist/components/OperationSummary.js.map +7 -0
  125. package/dist/components/ProgressBar.js +74 -0
  126. package/dist/components/ProgressBar.js.map +7 -0
  127. package/dist/components/PromptInput.js +210 -87
  128. package/dist/components/PromptInput.js.map +2 -2
  129. package/dist/components/RequestStatusIndicator.js +194 -0
  130. package/dist/components/RequestStatusIndicator.js.map +7 -0
  131. package/dist/components/SensitiveFileWarning.js +31 -0
  132. package/dist/components/SensitiveFileWarning.js.map +7 -0
  133. package/dist/components/Spinner.js +141 -27
  134. package/dist/components/Spinner.js.map +2 -2
  135. package/dist/components/SpinnerSymbol.js +21 -27
  136. package/dist/components/SpinnerSymbol.js.map +2 -2
  137. package/dist/components/StreamingBashOutput.js +9 -8
  138. package/dist/components/StreamingBashOutput.js.map +2 -2
  139. package/dist/components/StructuredDiff.js +6 -8
  140. package/dist/components/StructuredDiff.js.map +2 -2
  141. package/dist/components/SubagentBlock.js +5 -3
  142. package/dist/components/SubagentBlock.js.map +2 -2
  143. package/dist/components/SubagentProgress.js +17 -15
  144. package/dist/components/SubagentProgress.js.map +2 -2
  145. package/dist/components/TaskCard.js +30 -24
  146. package/dist/components/TaskCard.js.map +2 -2
  147. package/dist/components/TextInput.js +9 -1
  148. package/dist/components/TextInput.js.map +2 -2
  149. package/dist/components/TodoChangeBlock.js +1 -1
  150. package/dist/components/TodoChangeBlock.js.map +2 -2
  151. package/dist/components/TodoPanel.js +140 -31
  152. package/dist/components/TodoPanel.js.map +3 -3
  153. package/dist/components/TokenCounter.js +74 -0
  154. package/dist/components/TokenCounter.js.map +7 -0
  155. package/dist/components/TokenWarning.js +2 -1
  156. package/dist/components/TokenWarning.js.map +2 -2
  157. package/dist/components/ToolUseLoader.js +2 -2
  158. package/dist/components/ToolUseLoader.js.map +2 -2
  159. package/dist/components/TreeConnector.js +26 -0
  160. package/dist/components/TreeConnector.js.map +7 -0
  161. package/dist/components/TrustDialog.js +2 -1
  162. package/dist/components/TrustDialog.js.map +2 -2
  163. package/dist/components/TurnCompletionIndicator.js +18 -0
  164. package/dist/components/TurnCompletionIndicator.js.map +7 -0
  165. package/dist/components/binary-feedback/BinaryFeedbackView.js +2 -1
  166. package/dist/components/binary-feedback/BinaryFeedbackView.js.map +2 -2
  167. package/dist/components/messages/AssistantTextMessage.js +20 -9
  168. package/dist/components/messages/AssistantTextMessage.js.map +2 -2
  169. package/dist/components/messages/AssistantThinkingMessage.js +18 -3
  170. package/dist/components/messages/AssistantThinkingMessage.js.map +2 -2
  171. package/dist/components/messages/AssistantToolUseMessage.js +17 -10
  172. package/dist/components/messages/AssistantToolUseMessage.js.map +2 -2
  173. package/dist/components/messages/GroupRenderer.js +54 -0
  174. package/dist/components/messages/GroupRenderer.js.map +7 -0
  175. package/dist/components/messages/NestedTasksPreview.js +24 -0
  176. package/dist/components/messages/NestedTasksPreview.js.map +7 -0
  177. package/dist/components/messages/ParallelTasksGroupView.js +93 -0
  178. package/dist/components/messages/ParallelTasksGroupView.js.map +7 -0
  179. package/dist/components/messages/TaskInModuleView.js +218 -0
  180. package/dist/components/messages/TaskInModuleView.js.map +7 -0
  181. package/dist/components/messages/TaskOutputContent.js +56 -0
  182. package/dist/components/messages/TaskOutputContent.js.map +7 -0
  183. package/dist/components/messages/UserPromptMessage.js +2 -2
  184. package/dist/components/messages/UserPromptMessage.js.map +2 -2
  185. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +2 -3
  186. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +2 -2
  187. package/dist/components/permissions/FallbackPermissionRequest.js +4 -4
  188. package/dist/components/permissions/FallbackPermissionRequest.js.map +2 -2
  189. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +4 -4
  190. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +2 -2
  191. package/dist/constants/colors.js +120 -54
  192. package/dist/constants/colors.js.map +2 -2
  193. package/dist/constants/formatRules.js +102 -0
  194. package/dist/constants/formatRules.js.map +7 -0
  195. package/dist/constants/prompts.js +12 -34
  196. package/dist/constants/prompts.js.map +2 -2
  197. package/dist/constants/symbols.js +64 -6
  198. package/dist/constants/symbols.js.map +2 -2
  199. package/dist/constants/timing.js +5 -0
  200. package/dist/constants/timing.js.map +2 -2
  201. package/dist/constants/toolInputExamples.js +84 -0
  202. package/dist/constants/toolInputExamples.js.map +7 -0
  203. package/dist/core/backupManager.js +321 -0
  204. package/dist/core/backupManager.js.map +7 -0
  205. package/dist/core/config/defaults.js +84 -0
  206. package/dist/core/config/defaults.js.map +7 -0
  207. package/dist/core/config/index.js +111 -0
  208. package/dist/core/config/index.js.map +7 -0
  209. package/dist/core/config/loader.js +221 -0
  210. package/dist/core/config/loader.js.map +7 -0
  211. package/dist/core/config/migrations.js +128 -0
  212. package/dist/core/config/migrations.js.map +7 -0
  213. package/dist/core/config/schema.js +178 -0
  214. package/dist/core/config/schema.js.map +7 -0
  215. package/dist/core/costTracker.js +129 -0
  216. package/dist/core/costTracker.js.map +7 -0
  217. package/dist/core/gitAutoCommit.js +287 -0
  218. package/dist/core/gitAutoCommit.js.map +7 -0
  219. package/dist/core/index.js +8 -0
  220. package/dist/core/index.js.map +7 -0
  221. package/dist/core/operationTracker.js +212 -0
  222. package/dist/core/operationTracker.js.map +7 -0
  223. package/dist/core/permissions/auditLog.js +204 -0
  224. package/dist/core/permissions/auditLog.js.map +7 -0
  225. package/dist/core/permissions/engine/index.js +3 -0
  226. package/dist/core/permissions/engine/index.js.map +7 -0
  227. package/dist/core/permissions/engine/permissionEngine.js +106 -0
  228. package/dist/core/permissions/engine/permissionEngine.js.map +7 -0
  229. package/dist/core/permissions/engine/types.js +1 -0
  230. package/dist/core/permissions/engine/types.js.map +7 -0
  231. package/dist/core/permissions/index.js +84 -0
  232. package/dist/core/permissions/index.js.map +7 -0
  233. package/dist/core/permissions/ruleEngine.js +259 -0
  234. package/dist/core/permissions/ruleEngine.js.map +7 -0
  235. package/dist/core/permissions/rules/allowedToolsRule.js +62 -0
  236. package/dist/core/permissions/rules/allowedToolsRule.js.map +7 -0
  237. package/dist/core/permissions/rules/autoEscalationRule.js +296 -0
  238. package/dist/core/permissions/rules/autoEscalationRule.js.map +7 -0
  239. package/dist/core/permissions/rules/index.js +46 -0
  240. package/dist/core/permissions/rules/index.js.map +7 -0
  241. package/dist/core/permissions/rules/planModeRule.js +55 -0
  242. package/dist/core/permissions/rules/planModeRule.js.map +7 -0
  243. package/dist/core/permissions/rules/projectBoundaryRule.js +173 -0
  244. package/dist/core/permissions/rules/projectBoundaryRule.js.map +7 -0
  245. package/dist/core/permissions/rules/safeModeRule.js +65 -0
  246. package/dist/core/permissions/rules/safeModeRule.js.map +7 -0
  247. package/dist/core/permissions/rules/sensitivePathsRule.js +345 -0
  248. package/dist/core/permissions/rules/sensitivePathsRule.js.map +7 -0
  249. package/dist/core/permissions/types.js +127 -0
  250. package/dist/core/permissions/types.js.map +7 -0
  251. package/dist/core/tokenStats.js +9 -0
  252. package/dist/core/tokenStats.js.map +7 -0
  253. package/dist/core/tokenStatsManager.js +331 -0
  254. package/dist/core/tokenStatsManager.js.map +7 -0
  255. package/dist/core/tools/executor.js +143 -0
  256. package/dist/core/tools/executor.js.map +7 -0
  257. package/dist/core/tools/index.js +15 -0
  258. package/dist/core/tools/index.js.map +7 -0
  259. package/dist/core/tools/registry.js +183 -0
  260. package/dist/core/tools/registry.js.map +7 -0
  261. package/dist/core/tools/types.js +1 -0
  262. package/dist/core/tools/types.js.map +7 -0
  263. package/dist/cost-tracker.js +23 -15
  264. package/dist/cost-tracker.js.map +2 -2
  265. package/dist/entrypoints/cli.js +158 -130
  266. package/dist/entrypoints/cli.js.map +2 -2
  267. package/dist/entrypoints/mcp.js +12 -4
  268. package/dist/entrypoints/mcp.js.map +2 -2
  269. package/dist/history.js +14 -3
  270. package/dist/history.js.map +2 -2
  271. package/dist/hooks/useAgentTokenStats.js +72 -0
  272. package/dist/hooks/useAgentTokenStats.js.map +7 -0
  273. package/dist/hooks/useAgentTranscripts.js +140 -0
  274. package/dist/hooks/useAgentTranscripts.js.map +7 -0
  275. package/dist/hooks/useAnimationSync.js +53 -0
  276. package/dist/hooks/useAnimationSync.js.map +7 -0
  277. package/dist/hooks/useArrowKeyHistory.js +4 -2
  278. package/dist/hooks/useArrowKeyHistory.js.map +2 -2
  279. package/dist/hooks/useCanUseTool.js +3 -1
  280. package/dist/hooks/useCanUseTool.js.map +2 -2
  281. package/dist/hooks/useExitOnCtrlCD.js +9 -5
  282. package/dist/hooks/useExitOnCtrlCD.js.map +2 -2
  283. package/dist/hooks/useHookStatus.js +40 -0
  284. package/dist/hooks/useHookStatus.js.map +7 -0
  285. package/dist/hooks/useLogMessages.js +29 -2
  286. package/dist/hooks/useLogMessages.js.map +2 -2
  287. package/dist/hooks/useMessageGroups.js +43 -0
  288. package/dist/hooks/useMessageGroups.js.map +7 -0
  289. package/dist/hooks/useTerminalSize.js +62 -6
  290. package/dist/hooks/useTerminalSize.js.map +2 -2
  291. package/dist/hooks/useUnifiedCompletion.js +69 -0
  292. package/dist/hooks/useUnifiedCompletion.js.map +2 -2
  293. package/dist/i18n/index.js +109 -0
  294. package/dist/i18n/index.js.map +7 -0
  295. package/dist/i18n/locales/en.js +348 -0
  296. package/dist/i18n/locales/en.js.map +7 -0
  297. package/dist/i18n/locales/index.js +7 -0
  298. package/dist/i18n/locales/index.js.map +7 -0
  299. package/dist/i18n/locales/zh-CN.js +348 -0
  300. package/dist/i18n/locales/zh-CN.js.map +7 -0
  301. package/dist/i18n/types.js +8 -0
  302. package/dist/i18n/types.js.map +7 -0
  303. package/dist/permissions.js +28 -1
  304. package/dist/permissions.js.map +2 -2
  305. package/dist/query.js +253 -21
  306. package/dist/query.js.map +3 -3
  307. package/dist/screens/REPL.js +523 -194
  308. package/dist/screens/REPL.js.map +3 -3
  309. package/dist/services/adapters/chatCompletions.js +3 -1
  310. package/dist/services/adapters/chatCompletions.js.map +2 -2
  311. package/dist/services/adapters/messageNormalizer.js +354 -0
  312. package/dist/services/adapters/messageNormalizer.js.map +7 -0
  313. package/dist/services/adapters/responsesAPI.js +6 -3
  314. package/dist/services/adapters/responsesAPI.js.map +2 -2
  315. package/dist/services/checkpointManager.js +386 -0
  316. package/dist/services/checkpointManager.js.map +7 -0
  317. package/dist/services/claude.js +192 -14
  318. package/dist/services/claude.js.map +3 -3
  319. package/dist/services/compressionService.js +50 -1
  320. package/dist/services/compressionService.js.map +2 -2
  321. package/dist/services/contextMonitor.js +162 -0
  322. package/dist/services/contextMonitor.js.map +7 -0
  323. package/dist/services/customCommands.js +60 -41
  324. package/dist/services/customCommands.js.map +2 -2
  325. package/dist/services/hookExecutor.js +173 -1
  326. package/dist/services/hookExecutor.js.map +2 -2
  327. package/dist/services/intelligentCompactor.js +281 -0
  328. package/dist/services/intelligentCompactor.js.map +7 -0
  329. package/dist/services/lspConfig.js +109 -0
  330. package/dist/services/lspConfig.js.map +7 -0
  331. package/dist/services/mcpClient.js +338 -43
  332. package/dist/services/mcpClient.js.map +2 -2
  333. package/dist/services/modelOrchestrator.js +310 -0
  334. package/dist/services/modelOrchestrator.js.map +7 -0
  335. package/dist/services/openai.js +8 -1
  336. package/dist/services/openai.js.map +2 -2
  337. package/dist/services/outputStyles.js +138 -0
  338. package/dist/services/outputStyles.js.map +7 -0
  339. package/dist/services/plugins/index.js +5 -0
  340. package/dist/services/plugins/index.js.map +7 -0
  341. package/dist/services/plugins/lspServers.js +188 -0
  342. package/dist/services/plugins/lspServers.js.map +7 -0
  343. package/dist/services/plugins/pluginRuntime.js +229 -0
  344. package/dist/services/plugins/pluginRuntime.js.map +7 -0
  345. package/dist/services/plugins/pluginValidation.js +219 -0
  346. package/dist/services/plugins/pluginValidation.js.map +7 -0
  347. package/dist/services/plugins/skillMarketplace.js +556 -0
  348. package/dist/services/plugins/skillMarketplace.js.map +7 -0
  349. package/dist/services/responseStateManager.js +37 -3
  350. package/dist/services/responseStateManager.js.map +2 -2
  351. package/dist/services/sandbox/filesystemBoundary.js +341 -0
  352. package/dist/services/sandbox/filesystemBoundary.js.map +7 -0
  353. package/dist/services/sandbox/index.js +14 -0
  354. package/dist/services/sandbox/index.js.map +7 -0
  355. package/dist/services/sandbox/networkProxy.js +293 -0
  356. package/dist/services/sandbox/networkProxy.js.map +7 -0
  357. package/dist/services/sandbox/sandboxController.js +574 -0
  358. package/dist/services/sandbox/sandboxController.js.map +7 -0
  359. package/dist/services/sandbox/types.js +50 -0
  360. package/dist/services/sandbox/types.js.map +7 -0
  361. package/dist/services/sessionMemory.js +266 -0
  362. package/dist/services/sessionMemory.js.map +7 -0
  363. package/dist/services/taskRouter.js +324 -0
  364. package/dist/services/taskRouter.js.map +7 -0
  365. package/dist/tools/ArchitectTool/ArchitectTool.js +7 -1
  366. package/dist/tools/ArchitectTool/ArchitectTool.js.map +2 -2
  367. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +6 -2
  368. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +2 -2
  369. package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js +2 -1
  370. package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js.map +2 -2
  371. package/dist/tools/BaseTool.js +72 -0
  372. package/dist/tools/BaseTool.js.map +7 -0
  373. package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js +3 -0
  374. package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js.map +2 -2
  375. package/dist/tools/BashTool/BashTool.js +79 -3
  376. package/dist/tools/BashTool/BashTool.js.map +2 -2
  377. package/dist/tools/BashTool/BashToolResultMessage.js +3 -0
  378. package/dist/tools/BashTool/BashToolResultMessage.js.map +2 -2
  379. package/dist/tools/BashTool/OutputLine.js +54 -0
  380. package/dist/tools/BashTool/OutputLine.js.map +2 -2
  381. package/dist/tools/BashTool/prompt.js +336 -3
  382. package/dist/tools/BashTool/prompt.js.map +2 -2
  383. package/dist/tools/FileEditTool/FileEditTool.js +29 -4
  384. package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
  385. package/dist/tools/FileEditTool/prompt.js +6 -3
  386. package/dist/tools/FileEditTool/prompt.js.map +2 -2
  387. package/dist/tools/FileWriteTool/FileWriteTool.js +5 -5
  388. package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
  389. package/dist/tools/FileWriteTool/prompt.js +4 -2
  390. package/dist/tools/FileWriteTool/prompt.js.map +2 -2
  391. package/dist/tools/GlobTool/GlobTool.js +4 -2
  392. package/dist/tools/GlobTool/GlobTool.js.map +2 -2
  393. package/dist/tools/GrepTool/GrepTool.js +36 -7
  394. package/dist/tools/GrepTool/GrepTool.js.map +2 -2
  395. package/dist/tools/KillShellTool/KillShellToolResultMessage.js +3 -0
  396. package/dist/tools/KillShellTool/KillShellToolResultMessage.js.map +2 -2
  397. package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js +109 -0
  398. package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js.map +7 -0
  399. package/dist/tools/ListMcpResourcesTool/prompt.js +19 -0
  400. package/dist/tools/ListMcpResourcesTool/prompt.js.map +7 -0
  401. package/dist/tools/LspTool/LspTool.js +664 -0
  402. package/dist/tools/LspTool/LspTool.js.map +7 -0
  403. package/dist/tools/LspTool/prompt.js +27 -0
  404. package/dist/tools/LspTool/prompt.js.map +7 -0
  405. package/dist/tools/MCPTool/MCPTool.js +9 -1
  406. package/dist/tools/MCPTool/MCPTool.js.map +2 -2
  407. package/dist/tools/MemoryReadTool/MemoryReadTool.js +19 -6
  408. package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +2 -2
  409. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +6 -6
  410. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +2 -2
  411. package/dist/tools/MultiEditTool/MultiEditTool.js +19 -2
  412. package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
  413. package/dist/tools/MultiEditTool/prompt.js +5 -3
  414. package/dist/tools/MultiEditTool/prompt.js.map +2 -2
  415. package/dist/tools/NotebookEditTool/NotebookEditTool.js +7 -2
  416. package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
  417. package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +2 -2
  418. package/dist/tools/PlanModeTool/EnterPlanModeTool.js +75 -0
  419. package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +7 -0
  420. package/dist/tools/PlanModeTool/ExitPlanModeTool.js +109 -0
  421. package/dist/tools/PlanModeTool/ExitPlanModeTool.js.map +7 -0
  422. package/dist/tools/PlanModeTool/prompt.js +94 -0
  423. package/dist/tools/PlanModeTool/prompt.js.map +7 -0
  424. package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js +130 -0
  425. package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js.map +7 -0
  426. package/dist/tools/ReadMcpResourceTool/prompt.js +17 -0
  427. package/dist/tools/ReadMcpResourceTool/prompt.js.map +7 -0
  428. package/dist/tools/SkillTool/SkillTool.js +10 -4
  429. package/dist/tools/SkillTool/SkillTool.js.map +2 -2
  430. package/dist/tools/SkillTool/prompt.js +1 -1
  431. package/dist/tools/SkillTool/prompt.js.map +1 -1
  432. package/dist/tools/SlashCommandTool/SlashCommandTool.js +260 -0
  433. package/dist/tools/SlashCommandTool/SlashCommandTool.js.map +7 -0
  434. package/dist/tools/SlashCommandTool/prompt.js +35 -0
  435. package/dist/tools/SlashCommandTool/prompt.js.map +7 -0
  436. package/dist/tools/TaskOutputTool/TaskOutputTool.js +190 -0
  437. package/dist/tools/TaskOutputTool/TaskOutputTool.js.map +7 -0
  438. package/dist/tools/TaskOutputTool/prompt.js +15 -0
  439. package/dist/tools/TaskOutputTool/prompt.js.map +7 -0
  440. package/dist/tools/TaskTool/TaskTool.js +310 -104
  441. package/dist/tools/TaskTool/TaskTool.js.map +2 -2
  442. package/dist/tools/TaskTool/prompt.js.map +2 -2
  443. package/dist/tools/TodoWriteTool/TodoWriteTool.js +42 -77
  444. package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +2 -2
  445. package/dist/tools/URLFetcherTool/URLFetcherTool.js +4 -1
  446. package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +2 -2
  447. package/dist/tools/URLFetcherTool/cache.js +55 -8
  448. package/dist/tools/URLFetcherTool/cache.js.map +2 -2
  449. package/dist/tools.js +31 -2
  450. package/dist/tools.js.map +2 -2
  451. package/dist/types/hooks.js +4 -0
  452. package/dist/types/hooks.js.map +2 -2
  453. package/dist/types/marketplace.js.map +2 -2
  454. package/dist/types/messageGroup.js +36 -0
  455. package/dist/types/messageGroup.js.map +7 -0
  456. package/dist/types/plugin.js.map +2 -2
  457. package/dist/types/thinking.js +1 -0
  458. package/dist/types/thinking.js.map +7 -0
  459. package/dist/utils/BackgroundShellManager.js +136 -39
  460. package/dist/utils/BackgroundShellManager.js.map +2 -2
  461. package/dist/utils/CircuitBreaker.js +242 -0
  462. package/dist/utils/CircuitBreaker.js.map +7 -0
  463. package/dist/utils/MessageBatchBuffer.js +102 -0
  464. package/dist/utils/MessageBatchBuffer.js.map +7 -0
  465. package/dist/utils/PersistentShell.js +151 -1
  466. package/dist/utils/PersistentShell.js.map +2 -2
  467. package/dist/utils/agentLoader.js +1 -23
  468. package/dist/utils/agentLoader.js.map +2 -2
  469. package/dist/utils/agentTranscripts.js +641 -0
  470. package/dist/utils/agentTranscripts.js.map +7 -0
  471. package/dist/utils/animationManager.js +213 -0
  472. package/dist/utils/animationManager.js.map +7 -0
  473. package/dist/utils/animationSync.js +110 -0
  474. package/dist/utils/animationSync.js.map +7 -0
  475. package/dist/utils/ask.js +2 -0
  476. package/dist/utils/ask.js.map +2 -2
  477. package/dist/utils/asyncFile.js +215 -0
  478. package/dist/utils/asyncFile.js.map +7 -0
  479. package/dist/utils/backgroundAgentManager.js +231 -0
  480. package/dist/utils/backgroundAgentManager.js.map +7 -0
  481. package/dist/utils/config.js +108 -10
  482. package/dist/utils/config.js.map +2 -2
  483. package/dist/utils/conversationRecovery.js +19 -0
  484. package/dist/utils/conversationRecovery.js.map +2 -2
  485. package/dist/utils/credentials/CredentialStore.js +1 -0
  486. package/dist/utils/credentials/CredentialStore.js.map +7 -0
  487. package/dist/utils/credentials/EncryptedFileStore.js +157 -0
  488. package/dist/utils/credentials/EncryptedFileStore.js.map +7 -0
  489. package/dist/utils/credentials/index.js +37 -0
  490. package/dist/utils/credentials/index.js.map +7 -0
  491. package/dist/utils/credentials/migration.js +82 -0
  492. package/dist/utils/credentials/migration.js.map +7 -0
  493. package/dist/utils/exit.js +73 -0
  494. package/dist/utils/exit.js.map +7 -0
  495. package/dist/utils/format.js +73 -5
  496. package/dist/utils/format.js.map +2 -2
  497. package/dist/utils/generators.js +76 -6
  498. package/dist/utils/generators.js.map +2 -2
  499. package/dist/utils/globalErrorHandler.js +149 -0
  500. package/dist/utils/globalErrorHandler.js.map +7 -0
  501. package/dist/utils/groupHandlers/index.js +8 -0
  502. package/dist/utils/groupHandlers/index.js.map +7 -0
  503. package/dist/utils/groupHandlers/parallelTasksHandler.js +140 -0
  504. package/dist/utils/groupHandlers/parallelTasksHandler.js.map +7 -0
  505. package/dist/utils/groupHandlers/taskHandler.js +104 -0
  506. package/dist/utils/groupHandlers/taskHandler.js.map +7 -0
  507. package/dist/utils/groupHandlers/types.js +1 -0
  508. package/dist/utils/groupHandlers/types.js.map +7 -0
  509. package/dist/utils/logRotation.js +224 -0
  510. package/dist/utils/logRotation.js.map +7 -0
  511. package/dist/utils/markdown.js +13 -1
  512. package/dist/utils/markdown.js.map +2 -2
  513. package/dist/utils/marketplaceManager.js +3 -5
  514. package/dist/utils/marketplaceManager.js.map +2 -2
  515. package/dist/utils/memSafety.js +264 -0
  516. package/dist/utils/memSafety.js.map +7 -0
  517. package/dist/utils/messageGroupManager.js +274 -0
  518. package/dist/utils/messageGroupManager.js.map +7 -0
  519. package/dist/utils/messages.js +13 -4
  520. package/dist/utils/messages.js.map +2 -2
  521. package/dist/utils/model.js +119 -15
  522. package/dist/utils/model.js.map +3 -3
  523. package/dist/utils/permissions/filesystem.js +162 -6
  524. package/dist/utils/permissions/filesystem.js.map +2 -2
  525. package/dist/utils/plan/planMode.js +143 -0
  526. package/dist/utils/plan/planMode.js.map +7 -0
  527. package/dist/utils/pluginLoader.js +17 -21
  528. package/dist/utils/pluginLoader.js.map +2 -2
  529. package/dist/utils/ripgrep.js +55 -2
  530. package/dist/utils/ripgrep.js.map +2 -2
  531. package/dist/utils/safePath.js +132 -0
  532. package/dist/utils/safePath.js.map +7 -0
  533. package/dist/utils/sanitizeInput.js +32 -0
  534. package/dist/utils/sanitizeInput.js.map +7 -0
  535. package/dist/utils/secureKeyStorage.js +312 -0
  536. package/dist/utils/secureKeyStorage.js.map +7 -0
  537. package/dist/utils/sensitiveFiles.js +125 -0
  538. package/dist/utils/sensitiveFiles.js.map +7 -0
  539. package/dist/utils/session/sessionPlugins.js +67 -0
  540. package/dist/utils/session/sessionPlugins.js.map +7 -0
  541. package/dist/utils/taskDisplayUtils.js +257 -0
  542. package/dist/utils/taskDisplayUtils.js.map +7 -0
  543. package/dist/utils/teamConfig.js +2 -1
  544. package/dist/utils/teamConfig.js.map +2 -2
  545. package/dist/utils/theme.js +6 -6
  546. package/dist/utils/theme.js.map +1 -1
  547. package/dist/utils/todoStorage.js +92 -2
  548. package/dist/utils/todoStorage.js.map +2 -2
  549. package/dist/utils/toolRiskClassification.js +207 -0
  550. package/dist/utils/toolRiskClassification.js.map +7 -0
  551. package/dist/utils/toolTimeout.js +136 -0
  552. package/dist/utils/toolTimeout.js.map +7 -0
  553. package/dist/utils/tooling/safeRender.js +116 -0
  554. package/dist/utils/tooling/safeRender.js.map +7 -0
  555. package/dist/utils/userFriendlyError.js +346 -0
  556. package/dist/utils/userFriendlyError.js.map +7 -0
  557. package/dist/utils/vendor/ripgrep/arm64-darwin/rg +0 -0
  558. package/dist/version.js +2 -2
  559. package/dist/version.js.map +1 -1
  560. package/package.json +17 -5
  561. package/scripts/postinstall.js +128 -38
  562. package/dist/commands/agents.js +0 -2086
  563. package/dist/commands/agents.js.map +0 -7
  564. package/dist/commands/build.js +0 -74
  565. package/dist/commands/build.js.map +0 -7
  566. package/dist/commands/compression.js +0 -57
  567. package/dist/commands/compression.js.map +0 -7
  568. package/dist/commands/listen.js +0 -37
  569. package/dist/commands/listen.js.map +0 -7
  570. package/dist/commands/login.js +0 -37
  571. package/dist/commands/login.js.map +0 -7
  572. package/dist/commands/logout.js +0 -33
  573. package/dist/commands/logout.js.map +0 -7
  574. package/dist/commands/mcp.js +0 -40
  575. package/dist/commands/mcp.js.map +0 -7
  576. package/dist/commands/mcp_refresh.js +0 -40
  577. package/dist/commands/mcp_refresh.js.map +0 -7
  578. package/dist/commands/modelstatus.js +0 -21
  579. package/dist/commands/modelstatus.js.map +0 -7
  580. package/dist/commands/onboarding.js +0 -36
  581. package/dist/commands/onboarding.js.map +0 -7
  582. package/dist/commands/plugin-interactive.js +0 -446
  583. package/dist/commands/plugin-interactive.js.map +0 -7
  584. package/dist/commands/pr_comments.js +0 -61
  585. package/dist/commands/pr_comments.js.map +0 -7
  586. package/dist/commands/release-notes.js +0 -30
  587. package/dist/commands/release-notes.js.map +0 -7
  588. package/dist/commands/review.js +0 -51
  589. package/dist/commands/review.js.map +0 -7
  590. package/dist/components/Bug.js +0 -147
  591. package/dist/components/Bug.js.map +0 -7
  592. package/dist/components/ModelSelector.js +0 -2062
  593. package/dist/components/ModelSelector.js.map +0 -7
  594. package/dist/components/ModelStatusDisplay.js +0 -87
  595. package/dist/components/ModelStatusDisplay.js.map +0 -7
  596. package/dist/entrypoints/cli-wrapper.js +0 -61
  597. package/dist/entrypoints/cli-wrapper.js.map +0 -7
  598. package/dist/hooks/useCancelRequest.js +0 -28
  599. package/dist/hooks/useCancelRequest.js.map +0 -7
  600. package/dist/screens/Doctor.js +0 -22
  601. package/dist/screens/Doctor.js.map +0 -7
@@ -0,0 +1,348 @@
1
+ const zhCN = {
2
+ // Common - 通用
3
+ "common.yes": "\u662F",
4
+ "common.no": "\u5426",
5
+ "common.ok": "\u786E\u5B9A",
6
+ "common.cancel": "\u53D6\u6D88",
7
+ "common.confirm": "\u786E\u8BA4",
8
+ "common.save": "\u4FDD\u5B58",
9
+ "common.delete": "\u5220\u9664",
10
+ "common.edit": "\u7F16\u8F91",
11
+ "common.create": "\u521B\u5EFA",
12
+ "common.loading": "\u52A0\u8F7D\u4E2D...",
13
+ "common.error": "\u9519\u8BEF",
14
+ "common.success": "\u6210\u529F",
15
+ "common.warning": "\u8B66\u544A",
16
+ "common.info": "\u4FE1\u606F",
17
+ "common.unknown": "\u672A\u77E5",
18
+ "common.none": "\u65E0",
19
+ "common.all": "\u5168\u90E8",
20
+ "common.selected": "\u5DF2\u9009\u62E9",
21
+ "common.default": "\u9ED8\u8BA4",
22
+ "common.custom": "\u81EA\u5B9A\u4E49",
23
+ "common.enabled": "\u5DF2\u542F\u7528",
24
+ "common.disabled": "\u5DF2\u7981\u7528",
25
+ "common.connected": "\u5DF2\u8FDE\u63A5",
26
+ "common.disconnected": "\u5DF2\u65AD\u5F00",
27
+ "common.pending": "\u7B49\u5F85\u4E2D",
28
+ "common.completed": "\u5DF2\u5B8C\u6210",
29
+ "common.failed": "\u5931\u8D25",
30
+ "common.inProgress": "\u8FDB\u884C\u4E2D",
31
+ "common.version": "\u7248\u672C",
32
+ "common.help": "\u5E2E\u52A9",
33
+ "common.quit": "\u9000\u51FA",
34
+ "common.back": "\u8FD4\u56DE",
35
+ "common.next": "\u4E0B\u4E00\u6B65",
36
+ "common.previous": "\u4E0A\u4E00\u6B65",
37
+ "common.search": "\u641C\u7D22",
38
+ "common.filter": "\u7B5B\u9009",
39
+ "common.sort": "\u6392\u5E8F",
40
+ "common.refresh": "\u5237\u65B0",
41
+ "common.retry": "\u91CD\u8BD5",
42
+ "common.skip": "\u8DF3\u8FC7",
43
+ "common.continue": "\u7EE7\u7EED",
44
+ "common.abort": "\u4E2D\u6B62",
45
+ "common.reset": "\u91CD\u7F6E",
46
+ "common.clear": "\u6E05\u9664",
47
+ "common.copy": "\u590D\u5236",
48
+ "common.paste": "\u7C98\u8D34",
49
+ "common.select": "\u9009\u62E9",
50
+ "common.deselect": "\u53D6\u6D88\u9009\u62E9",
51
+ "common.selectAll": "\u5168\u9009",
52
+ "common.deselectAll": "\u53D6\u6D88\u5168\u9009",
53
+ // UI - Verbose mode - 详细模式
54
+ "ui.verbose.on": "\u8BE6\u7EC6\u6A21\u5F0F: \u5F00",
55
+ "ui.verbose.off": "\u8BE6\u7EC6\u6A21\u5F0F: \u5173",
56
+ "ui.verbose.label": "\u8BE6\u7EC6\u6A21\u5F0F",
57
+ "ui.verbose.hint": "\u6309 Ctrl+O \u5207\u6362\u8BE6\u7EC6\u6A21\u5F0F",
58
+ // Deprecated - 保留用于向后兼容
59
+ "ui.displayMode.minimal": "\u8BE6\u7EC6\u6A21\u5F0F: \u5173",
60
+ "ui.displayMode.compact": "\u8BE6\u7EC6\u6A21\u5F0F: \u5173",
61
+ "ui.displayMode.detailed": "\u8BE6\u7EC6\u6A21\u5F0F: \u5F00",
62
+ "ui.displayMode.label": "\u8BE6\u7EC6\u6A21\u5F0F",
63
+ "ui.displayMode.hint": "\u6309 Ctrl+O \u5207\u6362\u8BE6\u7EC6\u6A21\u5F0F",
64
+ // UI - Input - 输入
65
+ "ui.input.placeholder": "\u8F93\u5165\u95EE\u9898\u6216\u8F93\u5165 / \u67E5\u770B\u547D\u4EE4...",
66
+ "ui.input.thinking": "\u601D\u8003\u4E2D",
67
+ "ui.input.processing": "\u5904\u7406\u4E2D",
68
+ "ui.input.waiting": "\u7B49\u5F85\u54CD\u5E94...",
69
+ "ui.input.multilineHint": "Shift+Enter \u6362\u884C",
70
+ "ui.input.submitHint": "Enter \u63D0\u4EA4",
71
+ // UI - Panels - 面板
72
+ "ui.panel.todo": "\u5F85\u529E",
73
+ "ui.panel.tasks": "\u4EFB\u52A1",
74
+ "ui.panel.agents": "\u667A\u80FD\u4F53",
75
+ "ui.panel.models": "\u6A21\u578B",
76
+ "ui.panel.help": "\u5E2E\u52A9",
77
+ "ui.panel.history": "\u5386\u53F2",
78
+ "ui.panel.settings": "\u8BBE\u7F6E",
79
+ // UI - Status - 状态
80
+ "ui.status.ready": "\u5C31\u7EEA",
81
+ "ui.status.busy": "\u5FD9\u788C",
82
+ "ui.status.error": "\u9519\u8BEF",
83
+ "ui.status.offline": "\u79BB\u7EBF",
84
+ "ui.status.connecting": "\u8FDE\u63A5\u4E2D...",
85
+ "ui.status.streaming": "\u6D41\u5F0F\u8F93\u51FA\u4E2D",
86
+ // UI - Welcome - 欢迎
87
+ "ui.welcome.title": "\u6B22\u8FCE\u4F7F\u7528 Minto\uFF01",
88
+ "ui.welcome.subtitle": "",
89
+ "ui.welcome.quickStart": "\u5FEB\u901F\u5F00\u59CB",
90
+ "ui.welcome.tip1": "\u7528\u81EA\u7136\u8BED\u8A00\u63CF\u8FF0\u60A8\u7684\u7814\u7A76\u6216\u5206\u6790\u9700\u6C42",
91
+ "ui.welcome.tip2": "\u9700\u6C42\u8D8A\u5177\u4F53\uFF0C\u7ED3\u679C\u8D8A\u7CBE\u51C6",
92
+ "ui.welcome.tip3": "\u8F93\u5165 /help \u67E5\u770B\u6240\u6709\u53EF\u7528\u547D\u4EE4",
93
+ "ui.welcome.tip4": "",
94
+ "ui.welcome.cwd": "\u5DE5\u4F5C\u76EE\u5F55",
95
+ "ui.welcome.mcpServers": "MCP \u670D\u52A1\u5668",
96
+ // UI - Hotkeys - 快捷键
97
+ "ui.hotkey.submit": "\u63D0\u4EA4",
98
+ "ui.hotkey.newline": "\u6362\u884C",
99
+ "ui.hotkey.cancel": "\u53D6\u6D88",
100
+ "ui.hotkey.toggleMode": "\u5207\u6362\u663E\u793A\u6A21\u5F0F",
101
+ "ui.hotkey.help": "\u5E2E\u52A9",
102
+ "ui.hotkey.quit": "\u9000\u51FA",
103
+ "ui.hotkey.history": "\u5386\u53F2",
104
+ "ui.hotkey.clear": "\u6E05\u5C4F",
105
+ "ui.hotkey.interrupt": "\u4E2D\u65AD",
106
+ // UI - Hotkey hints (context-aware) - 快捷键提示
107
+ "ui.hints.command": "\u547D\u4EE4",
108
+ "ui.hints.bash": "Bash",
109
+ "ui.hints.send": "\u53D1\u9001",
110
+ "ui.hints.complete": "\u8865\u5168",
111
+ "ui.hints.rollback": "\u56DE\u6EDA",
112
+ "ui.hints.select": "\u9009\u62E9",
113
+ "ui.hints.confirm": "\u786E\u8BA4",
114
+ "ui.hints.close": "\u5173\u95ED",
115
+ "ui.hints.browse": "\u6D4F\u89C8",
116
+ "ui.hints.execute": "\u6267\u884C",
117
+ "ui.hints.completeCommand": "\u8865\u5168\u547D\u4EE4",
118
+ "ui.hints.shortcuts": "\u5FEB\u6377\u952E",
119
+ "ui.hints.pressEsc": "\u6309 Esc \u5173\u95ED",
120
+ "ui.hints.tip": "\u8F93\u5165 /help \u67E5\u770B\u5B8C\u6574\u547D\u4EE4\u5217\u8868",
121
+ // Commands - 命令
122
+ "commands.help.description": "\u663E\u793A\u5E2E\u52A9\u4FE1\u606F",
123
+ "commands.clear.description": "\u6E05\u9664\u5C4F\u5E55",
124
+ "commands.compact.description": "\u538B\u7F29\u5BF9\u8BDD\u4E0A\u4E0B\u6587",
125
+ "commands.compact.success": "\u4E0A\u4E0B\u6587\u538B\u7F29\u6210\u529F",
126
+ "commands.compact.noMessages": "\u6CA1\u6709\u6D88\u606F\u9700\u8981\u538B\u7F29",
127
+ "commands.model.description": "\u9009\u62E9\u6216\u5207\u6362 AI \u6A21\u578B",
128
+ "commands.model.current": "\u5F53\u524D\u6A21\u578B",
129
+ "commands.model.switched": "\u5DF2\u5207\u6362\u5230\u6A21\u578B",
130
+ "commands.model.notFound": "\u672A\u627E\u5230\u6A21\u578B",
131
+ "commands.agents.description": "\u7BA1\u7406\u548C\u67E5\u770B\u667A\u80FD\u4F53",
132
+ "commands.agents.title": "\u53EF\u7528\u667A\u80FD\u4F53",
133
+ "commands.agents.empty": "\u6CA1\u6709\u53EF\u7528\u7684\u667A\u80FD\u4F53",
134
+ "commands.agents.loaded": "\u4E2A\u667A\u80FD\u4F53\u5DF2\u52A0\u8F7D",
135
+ "commands.tasks.description": "\u67E5\u770B\u8FD0\u884C\u4E2D\u7684\u4EFB\u52A1",
136
+ "commands.config.description": "\u7BA1\u7406\u914D\u7F6E",
137
+ "commands.bug.description": "\u62A5\u544A\u95EE\u9898",
138
+ "commands.doctor.description": "\u68C0\u67E5\u7CFB\u7EDF\u5065\u5EB7",
139
+ "commands.status.description": "\u663E\u793A\u7CFB\u7EDF\u72B6\u6001",
140
+ "commands.permissions.description": "\u7BA1\u7406\u6743\u9650",
141
+ "commands.mcp.description": "\u7BA1\u7406 MCP \u670D\u52A1\u5668",
142
+ "commands.plugin.description": "\u7BA1\u7406\u63D2\u4EF6",
143
+ "commands.sandbox.description": "\u914D\u7F6E\u6C99\u7BB1\u6A21\u5F0F",
144
+ "commands.thinking.description": "\u5207\u6362\u601D\u8003\u6A21\u5F0F",
145
+ "commands.thinking.enabled": "\u601D\u8003\u6A21\u5F0F\u5DF2\u542F\u7528",
146
+ "commands.thinking.disabled": "\u601D\u8003\u6A21\u5F0F\u5DF2\u7981\u7528",
147
+ // Tools - 工具
148
+ "tools.bash.description": "\u6267\u884C Shell \u547D\u4EE4",
149
+ "tools.bash.executing": "\u6267\u884C\u4E2D",
150
+ "tools.bash.completed": "\u547D\u4EE4\u5B8C\u6210",
151
+ "tools.bash.failed": "\u547D\u4EE4\u5931\u8D25",
152
+ "tools.read.description": "\u8BFB\u53D6\u6587\u4EF6\u5185\u5BB9",
153
+ "tools.read.reading": "\u8BFB\u53D6\u4E2D",
154
+ "tools.write.description": "\u5199\u5165\u6587\u4EF6\u5185\u5BB9",
155
+ "tools.write.writing": "\u5199\u5165\u4E2D",
156
+ "tools.write.created": "\u5DF2\u521B\u5EFA",
157
+ "tools.write.updated": "\u5DF2\u66F4\u65B0",
158
+ "tools.edit.description": "\u7F16\u8F91\u6587\u4EF6\u5185\u5BB9",
159
+ "tools.edit.editing": "\u7F16\u8F91\u4E2D",
160
+ "tools.glob.description": "\u6309\u6A21\u5F0F\u67E5\u627E\u6587\u4EF6",
161
+ "tools.grep.description": "\u641C\u7D22\u6587\u4EF6\u5185\u5BB9",
162
+ "tools.task.description": "\u542F\u52A8\u5B50\u667A\u80FD\u4F53\u4EFB\u52A1",
163
+ "tools.task.spawning": "\u6B63\u5728\u542F\u52A8\u4EFB\u52A1",
164
+ "tools.task.running": "\u4EFB\u52A1\u8FD0\u884C\u4E2D",
165
+ "tools.task.completed": "\u4EFB\u52A1\u5B8C\u6210",
166
+ "tools.todo.description": "\u7BA1\u7406\u5F85\u529E\u4E8B\u9879",
167
+ // Errors - 错误
168
+ "errors.generic": "\u53D1\u751F\u9519\u8BEF",
169
+ "errors.network": "\u7F51\u7EDC\u9519\u8BEF",
170
+ "errors.timeout": "\u8BF7\u6C42\u8D85\u65F6",
171
+ "errors.auth": "\u8BA4\u8BC1\u5931\u8D25",
172
+ "errors.rateLimit": "\u8BF7\u6C42\u9891\u7387\u8D85\u9650",
173
+ "errors.modelNotFound": "\u672A\u627E\u5230\u6A21\u578B",
174
+ "errors.apiKeyMissing": "\u7F3A\u5C11 API \u5BC6\u94A5",
175
+ "errors.apiKeyInvalid": "API \u5BC6\u94A5\u65E0\u6548",
176
+ "errors.permissionDenied": "\u6743\u9650\u88AB\u62D2\u7EDD",
177
+ "errors.fileNotFound": "\u6587\u4EF6\u672A\u627E\u5230",
178
+ "errors.fileReadError": "\u8BFB\u53D6\u6587\u4EF6\u9519\u8BEF",
179
+ "errors.fileWriteError": "\u5199\u5165\u6587\u4EF6\u9519\u8BEF",
180
+ "errors.configError": "\u914D\u7F6E\u9519\u8BEF",
181
+ "errors.parseError": "\u89E3\u6790\u9519\u8BEF",
182
+ "errors.validationError": "\u9A8C\u8BC1\u9519\u8BEF",
183
+ "errors.aborted": "\u64CD\u4F5C\u5DF2\u4E2D\u6B62",
184
+ "errors.contextTooLong": "\u4E0A\u4E0B\u6587\u8FC7\u957F",
185
+ "errors.serverError": "\u670D\u52A1\u5668\u9519\u8BEF",
186
+ "errors.connectionFailed": "\u8FDE\u63A5\u5931\u8D25",
187
+ // Help - 帮助
188
+ "help.title": "Minto \u5E2E\u52A9",
189
+ "help.usage": "\u7528\u6CD5",
190
+ "help.commands": "\u547D\u4EE4",
191
+ "help.options": "\u9009\u9879",
192
+ "help.examples": "\u793A\u4F8B",
193
+ "help.moreInfo": "\u66F4\u591A\u4FE1\u606F",
194
+ "help.reportBug": "\u62A5\u544A\u95EE\u9898",
195
+ "help.documentation": "\u6587\u6863",
196
+ // Status messages - 状态消息
197
+ "status.modelLoaded": "\u6A21\u578B\u5DF2\u52A0\u8F7D",
198
+ "status.contextCompressed": "\u4E0A\u4E0B\u6587\u5DF2\u538B\u7F29",
199
+ "status.tokensUsed": "\u5DF2\u4F7F\u7528\u4EE4\u724C",
200
+ "status.costEstimate": "\u9884\u4F30\u8D39\u7528",
201
+ "status.apiLatency": "API \u5EF6\u8FDF",
202
+ "status.streaming": "\u6D41\u5F0F\u54CD\u5E94\u4E2D",
203
+ "status.thinking": "\u601D\u8003\u4E2D",
204
+ "status.toolUse": "\u4F7F\u7528\u5DE5\u5177",
205
+ "status.subagent": "\u8FD0\u884C\u5B50\u667A\u80FD\u4F53",
206
+ // Prompts - 提示
207
+ "prompts.confirmDelete": "\u786E\u5B9A\u8981\u5220\u9664\u5417\uFF1F",
208
+ "prompts.confirmOverwrite": "\u6587\u4EF6\u5DF2\u5B58\u5728\uFF0C\u662F\u5426\u8986\u76D6\uFF1F",
209
+ "prompts.confirmExecute": "\u662F\u5426\u6267\u884C\u6B64\u547D\u4EE4\uFF1F",
210
+ "prompts.enterApiKey": "\u8BF7\u8F93\u5165 API \u5BC6\u94A5",
211
+ "prompts.selectModel": "\u8BF7\u9009\u62E9\u6A21\u578B",
212
+ "prompts.selectLanguage": "\u8BF7\u9009\u62E9\u8BED\u8A00",
213
+ // Agent/Subagent - 智能体/子智能体
214
+ "agent.spawning": "\u6B63\u5728\u542F\u52A8\u667A\u80FD\u4F53",
215
+ "agent.running": "\u667A\u80FD\u4F53\u8FD0\u884C\u4E2D",
216
+ "agent.completed": "\u667A\u80FD\u4F53\u5DF2\u5B8C\u6210",
217
+ "agent.failed": "\u667A\u80FD\u4F53\u5931\u8D25",
218
+ "agent.cancelled": "\u667A\u80FD\u4F53\u5DF2\u53D6\u6D88",
219
+ "agent.waiting": "\u7B49\u5F85\u4E2D",
220
+ "agent.thinking": "\u601D\u8003\u4E2D",
221
+ // Model - 模型
222
+ "model.selecting": "\u6B63\u5728\u9009\u62E9\u6A21\u578B",
223
+ "model.selected": "\u6A21\u578B\u5DF2\u9009\u62E9",
224
+ "model.unavailable": "\u6A21\u578B\u4E0D\u53EF\u7528",
225
+ "model.switching": "\u6B63\u5728\u5207\u6362\u6A21\u578B",
226
+ "model.switched": "\u6A21\u578B\u5DF2\u5207\u6362",
227
+ "model.default": "\u9ED8\u8BA4\u6A21\u578B",
228
+ "model.custom": "\u81EA\u5B9A\u4E49\u6A21\u578B",
229
+ // Permissions - 权限
230
+ "permission.required": "\u9700\u8981\u6743\u9650",
231
+ "permission.granted": "\u6743\u9650\u5DF2\u6388\u4E88",
232
+ "permission.denied": "\u6743\u9650\u88AB\u62D2\u7EDD",
233
+ "permission.allowOnce": "\u5141\u8BB8\u4E00\u6B21",
234
+ "permission.allowAlways": "\u59CB\u7EC8\u5141\u8BB8",
235
+ "permission.denyOnce": "\u62D2\u7EDD\u4E00\u6B21",
236
+ "permission.denyAlways": "\u59CB\u7EC8\u62D2\u7EDD",
237
+ "permission.sensitiveFile": "\u654F\u611F\u6587\u4EF6\u8BBF\u95EE",
238
+ "permission.externalPath": "\u5916\u90E8\u8DEF\u5F84\u8BBF\u95EE",
239
+ "permission.dangerousCommand": "\u5371\u9669\u547D\u4EE4",
240
+ // User-Friendly Error Messages - 用户友好错误消息
241
+ // Network & Connectivity - 网络与连接
242
+ "friendlyError.networkConnection.title": "\u7F51\u7EDC\u8FDE\u63A5\u95EE\u9898",
243
+ "friendlyError.networkConnection.description": "\u65E0\u6CD5\u8FDE\u63A5\u5230\u670D\u52A1\u5668\u3002\u8FD9\u53EF\u80FD\u662F\u7531\u4E8E\u7F51\u7EDC\u95EE\u9898\u6216\u670D\u52A1\u6682\u65F6\u4E0D\u53EF\u7528\u3002",
244
+ "friendlyError.networkConnection.suggestion1": "\u68C0\u67E5\u60A8\u7684\u7F51\u7EDC\u8FDE\u63A5",
245
+ "friendlyError.networkConnection.suggestion2": "\u7A0D\u540E\u91CD\u8BD5",
246
+ "friendlyError.networkConnection.suggestion3": "\u5982\u679C\u95EE\u9898\u6301\u7EED\uFF0C\u8BF7\u8054\u7CFB\u652F\u6301\u4EBA\u5458",
247
+ "friendlyError.networkTimeout.title": "\u8BF7\u6C42\u8D85\u65F6",
248
+ "friendlyError.networkTimeout.description": "\u670D\u52A1\u5668\u54CD\u5E94\u65F6\u95F4\u8FC7\u957F\u3002\u8FD9\u53EF\u80FD\u662F\u7531\u4E8E\u7F51\u7EDC\u7F13\u6162\u6216\u670D\u52A1\u7E41\u5FD9\u3002",
249
+ "friendlyError.networkTimeout.suggestion1": "\u68C0\u67E5\u60A8\u7684\u7F51\u7EDC\u8FDE\u63A5\u901F\u5EA6",
250
+ "friendlyError.networkTimeout.suggestion2": "\u7A0D\u540E\u91CD\u8BD5",
251
+ "friendlyError.networkTimeout.suggestion3": "\u5C1D\u8BD5\u66F4\u7B80\u77ED\u7684\u8BF7\u6C42",
252
+ "friendlyError.networkDns.title": "DNS \u89E3\u6790\u5931\u8D25",
253
+ "friendlyError.networkDns.description": "\u65E0\u6CD5\u627E\u5230\u670D\u52A1\u5668\u5730\u5740\u3002\u8FD9\u53EF\u80FD\u662F DNS \u914D\u7F6E\u95EE\u9898\u6216\u670D\u52A1\u5730\u5740\u66F4\u6539\u3002",
254
+ "friendlyError.networkDns.suggestion1": "\u68C0\u67E5\u60A8\u7684\u7F51\u7EDC\u8BBE\u7F6E",
255
+ "friendlyError.networkDns.suggestion2": "\u5C1D\u8BD5\u4F7F\u7528\u5176\u4ED6 DNS \u670D\u52A1\u5668",
256
+ "friendlyError.networkDns.suggestion3": "\u8054\u7CFB\u7F51\u7EDC\u7BA1\u7406\u5458",
257
+ // API & Service - API 与服务
258
+ "friendlyError.apiRateLimit.title": "\u8BF7\u6C42\u9891\u7387\u8D85\u9650",
259
+ "friendlyError.apiRateLimit.description": "\u60A8\u7684\u8BF7\u6C42\u592A\u9891\u7E41\u4E86\u3002\u670D\u52A1\u9700\u8981\u77ED\u6682\u4F11\u606F\u6765\u5904\u7406\u60A8\u7684\u8BF7\u6C42\u3002",
260
+ "friendlyError.apiRateLimit.suggestion1": "\u7B49\u5F85\u51E0\u5206\u949F\u540E\u91CD\u8BD5",
261
+ "friendlyError.apiRateLimit.suggestion2": "\u51CF\u5C11\u8BF7\u6C42\u9891\u7387",
262
+ "friendlyError.apiRateLimit.suggestion3": "\u8003\u8651\u5347\u7EA7\u5230\u66F4\u9AD8\u7684\u670D\u52A1\u7EA7\u522B",
263
+ "friendlyError.apiAuth.title": "\u8BA4\u8BC1\u5931\u8D25",
264
+ "friendlyError.apiAuth.description": "\u65E0\u6CD5\u9A8C\u8BC1\u60A8\u7684\u8EAB\u4EFD\u3002\u8FD9\u53EF\u80FD\u662F API \u5BC6\u94A5\u65E0\u6548\u6216\u5DF2\u8FC7\u671F\u3002",
265
+ "friendlyError.apiAuth.suggestion1": "\u68C0\u67E5\u60A8\u7684 API \u5BC6\u94A5\u662F\u5426\u6B63\u786E",
266
+ "friendlyError.apiAuth.suggestion2": "\u786E\u8BA4 API \u5BC6\u94A5\u672A\u8FC7\u671F",
267
+ "friendlyError.apiAuth.suggestion3": "\u91CD\u65B0\u751F\u6210\u65B0\u7684 API \u5BC6\u94A5",
268
+ "friendlyError.apiQuota.title": "\u914D\u989D\u5DF2\u7528\u5C3D",
269
+ "friendlyError.apiQuota.description": "\u60A8\u7684 API \u4F7F\u7528\u914D\u989D\u5DF2\u8017\u5C3D\u3002\u9700\u8981\u7B49\u5F85\u914D\u989D\u91CD\u7F6E\u6216\u5347\u7EA7\u8D26\u6237\u3002",
270
+ "friendlyError.apiQuota.suggestion1": "\u68C0\u67E5\u60A8\u7684\u8D26\u6237\u7528\u91CF",
271
+ "friendlyError.apiQuota.suggestion2": "\u7B49\u5F85\u914D\u989D\u91CD\u7F6E\uFF08\u901A\u5E38\u6BCF\u6708\u91CD\u7F6E\uFF09",
272
+ "friendlyError.apiQuota.suggestion3": "\u8003\u8651\u5347\u7EA7\u60A8\u7684\u8BA2\u9605\u8BA1\u5212",
273
+ "friendlyError.apiServerError.title": "\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF",
274
+ "friendlyError.apiServerError.description": "AI \u670D\u52A1\u9047\u5230\u4E86\u5185\u90E8\u95EE\u9898\u3002\u8FD9\u901A\u5E38\u662F\u4E34\u65F6\u6027\u7684\u3002",
275
+ "friendlyError.apiServerError.suggestion1": "\u7A0D\u540E\u91CD\u8BD5",
276
+ "friendlyError.apiServerError.suggestion2": "\u5982\u679C\u95EE\u9898\u6301\u7EED\uFF0C\u8BF7\u68C0\u67E5\u670D\u52A1\u72B6\u6001\u9875\u9762",
277
+ "friendlyError.apiInvalidResponse.title": "\u65E0\u6548\u7684\u54CD\u5E94",
278
+ "friendlyError.apiInvalidResponse.description": "\u670D\u52A1\u5668\u8FD4\u56DE\u4E86\u65E0\u6CD5\u7406\u89E3\u7684\u54CD\u5E94\u3002\u8FD9\u53EF\u80FD\u662F\u6682\u65F6\u6027\u7684\u670D\u52A1\u95EE\u9898\u3002",
279
+ "friendlyError.apiInvalidResponse.suggestion1": "\u91CD\u8BD5\u8BF7\u6C42",
280
+ "friendlyError.apiInvalidResponse.suggestion2": "\u5982\u679C\u95EE\u9898\u6301\u7EED\uFF0C\u8BF7\u8054\u7CFB\u652F\u6301\u4EBA\u5458",
281
+ // File & Storage - 文件与存储
282
+ "friendlyError.fileNotFound.title": "\u6587\u4EF6\u672A\u627E\u5230",
283
+ "friendlyError.fileNotFound.description": "\u65E0\u6CD5\u627E\u5230\u6307\u5B9A\u7684\u6587\u4EF6\u3002\u5B83\u53EF\u80FD\u5DF2\u88AB\u79FB\u52A8\u3001\u5220\u9664\u6216\u8DEF\u5F84\u4E0D\u6B63\u786E\u3002",
284
+ "friendlyError.fileNotFound.suggestion1": "\u68C0\u67E5\u6587\u4EF6\u8DEF\u5F84\u662F\u5426\u6B63\u786E",
285
+ "friendlyError.fileNotFound.suggestion2": "\u786E\u8BA4\u6587\u4EF6\u662F\u5426\u5B58\u5728",
286
+ "friendlyError.filePermission.title": "\u6587\u4EF6\u6743\u9650\u9519\u8BEF",
287
+ "friendlyError.filePermission.description": "\u6CA1\u6709\u8DB3\u591F\u7684\u6743\u9650\u8BBF\u95EE\u6B64\u6587\u4EF6\u6216\u76EE\u5F55\u3002",
288
+ "friendlyError.filePermission.suggestion1": "\u68C0\u67E5\u6587\u4EF6\u6743\u9650\u8BBE\u7F6E",
289
+ "friendlyError.filePermission.suggestion2": "\u5C1D\u8BD5\u4EE5\u7BA1\u7406\u5458\u6743\u9650\u8FD0\u884C",
290
+ "friendlyError.fileTooLarge.title": "\u6587\u4EF6\u8FC7\u5927",
291
+ "friendlyError.fileTooLarge.description": "\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u4E86\u5904\u7406\u9650\u5236\u3002",
292
+ "friendlyError.fileTooLarge.suggestion1": "\u5C1D\u8BD5\u5904\u7406\u8F83\u5C0F\u7684\u6587\u4EF6",
293
+ "friendlyError.fileTooLarge.suggestion2": "\u5C06\u5927\u6587\u4EF6\u5206\u5272\u6210\u5C0F\u5757",
294
+ "friendlyError.fileEncoding.title": "\u6587\u4EF6\u7F16\u7801\u95EE\u9898",
295
+ "friendlyError.fileEncoding.description": "\u65E0\u6CD5\u8BFB\u53D6\u6587\u4EF6\u5185\u5BB9\u3002\u53EF\u80FD\u662F\u6587\u4EF6\u7F16\u7801\u4E0D\u517C\u5BB9\u6216\u6587\u4EF6\u5DF2\u635F\u574F\u3002",
296
+ "friendlyError.fileEncoding.suggestion1": "\u68C0\u67E5\u6587\u4EF6\u7F16\u7801\u683C\u5F0F",
297
+ "friendlyError.fileEncoding.suggestion2": "\u5C1D\u8BD5\u5C06\u6587\u4EF6\u8F6C\u6362\u4E3A UTF-8 \u7F16\u7801",
298
+ // Configuration - 配置
299
+ "friendlyError.configMissing.title": "\u914D\u7F6E\u6587\u4EF6\u7F3A\u5931",
300
+ "friendlyError.configMissing.description": "\u627E\u4E0D\u5230\u5FC5\u9700\u7684\u914D\u7F6E\u6587\u4EF6\u3002\u8FD9\u53EF\u80FD\u662F\u9996\u6B21\u8FD0\u884C\u6216\u914D\u7F6E\u88AB\u610F\u5916\u5220\u9664\u3002",
301
+ "friendlyError.configMissing.suggestion1": "\u8FD0\u884C\u521D\u59CB\u8BBE\u7F6E\u5411\u5BFC",
302
+ "friendlyError.configMissing.suggestion2": "\u624B\u52A8\u521B\u5EFA\u914D\u7F6E\u6587\u4EF6",
303
+ "friendlyError.configInvalid.title": "\u914D\u7F6E\u683C\u5F0F\u9519\u8BEF",
304
+ "friendlyError.configInvalid.description": "\u914D\u7F6E\u6587\u4EF6\u5305\u542B\u65E0\u6548\u7684\u5185\u5BB9\u3002\u8FD9\u53EF\u80FD\u662F\u7F16\u8F91\u65F6\u5F15\u5165\u7684\u8BED\u6CD5\u9519\u8BEF\u3002",
305
+ "friendlyError.configInvalid.suggestion1": "\u68C0\u67E5\u914D\u7F6E\u6587\u4EF6\u683C\u5F0F",
306
+ "friendlyError.configInvalid.suggestion2": "\u6062\u590D\u9ED8\u8BA4\u914D\u7F6E",
307
+ "friendlyError.configApiKey.title": "API \u5BC6\u94A5\u672A\u914D\u7F6E",
308
+ "friendlyError.configApiKey.description": "\u9700\u8981\u8BBE\u7F6E API \u5BC6\u94A5\u624D\u80FD\u4F7F\u7528\u6B64\u529F\u80FD\u3002",
309
+ "friendlyError.configApiKey.suggestion1": "\u4F7F\u7528 /config \u547D\u4EE4\u8BBE\u7F6E API \u5BC6\u94A5",
310
+ "friendlyError.configApiKey.suggestion2": "\u4ECE\u670D\u52A1\u63D0\u4F9B\u5546\u83B7\u53D6\u6709\u6548\u7684 API \u5BC6\u94A5",
311
+ // Model & AI - 模型与 AI
312
+ "friendlyError.modelUnavailable.title": "\u6A21\u578B\u4E0D\u53EF\u7528",
313
+ "friendlyError.modelUnavailable.description": "\u8BF7\u6C42\u7684 AI \u6A21\u578B\u5F53\u524D\u4E0D\u53EF\u7528\u3002\u5B83\u53EF\u80FD\u6B63\u5728\u7EF4\u62A4\u6216\u5DF2\u4E0B\u7EBF\u3002",
314
+ "friendlyError.modelUnavailable.suggestion1": "\u5C1D\u8BD5\u4F7F\u7528\u5176\u4ED6\u53EF\u7528\u6A21\u578B",
315
+ "friendlyError.modelUnavailable.suggestion2": "\u7A0D\u540E\u91CD\u8BD5",
316
+ "friendlyError.modelUnavailable.suggestion3": "\u68C0\u67E5\u6A21\u578B\u540D\u79F0\u662F\u5426\u6B63\u786E",
317
+ "friendlyError.modelContextLength.title": "\u5185\u5BB9\u8FC7\u957F",
318
+ "friendlyError.modelContextLength.description": "\u60A8\u7684\u5BF9\u8BDD\u6216\u8F93\u5165\u8D85\u51FA\u4E86\u6A21\u578B\u7684\u5904\u7406\u80FD\u529B\u3002",
319
+ "friendlyError.modelContextLength.suggestion1": "\u7F29\u77ED\u60A8\u7684\u8F93\u5165",
320
+ "friendlyError.modelContextLength.suggestion2": "\u4F7F\u7528 /compact \u547D\u4EE4\u538B\u7F29\u5BF9\u8BDD\u5386\u53F2",
321
+ "friendlyError.modelContentFilter.title": "\u5185\u5BB9\u88AB\u8FC7\u6EE4",
322
+ "friendlyError.modelContentFilter.description": "\u60A8\u7684\u8BF7\u6C42\u89E6\u53D1\u4E86\u5185\u5BB9\u5B89\u5168\u8FC7\u6EE4\u5668\u3002",
323
+ "friendlyError.modelContentFilter.suggestion1": "\u4FEE\u6539\u60A8\u7684\u8BF7\u6C42\u5185\u5BB9",
324
+ "friendlyError.modelContentFilter.suggestion2": "\u907F\u514D\u654F\u611F\u6216\u4E0D\u5F53\u5185\u5BB9",
325
+ // System - 系统
326
+ "friendlyError.systemMemory.title": "\u5185\u5B58\u4E0D\u8DB3",
327
+ "friendlyError.systemMemory.description": "\u7CFB\u7EDF\u53EF\u7528\u5185\u5B58\u4E0D\u8DB3\u4EE5\u5B8C\u6210\u6B64\u64CD\u4F5C\u3002",
328
+ "friendlyError.systemMemory.suggestion1": "\u5173\u95ED\u4E00\u4E9B\u4E0D\u9700\u8981\u7684\u5E94\u7528\u7A0B\u5E8F",
329
+ "friendlyError.systemMemory.suggestion2": "\u91CD\u542F\u5E94\u7528\u7A0B\u5E8F",
330
+ "friendlyError.systemMemory.suggestion3": "\u5C1D\u8BD5\u5904\u7406\u8F83\u5C0F\u7684\u4EFB\u52A1",
331
+ "friendlyError.systemProcess.title": "\u8FDB\u7A0B\u9519\u8BEF",
332
+ "friendlyError.systemProcess.description": "\u6267\u884C\u547D\u4EE4\u65F6\u9047\u5230\u7CFB\u7EDF\u7EA7\u9519\u8BEF\u3002",
333
+ "friendlyError.systemProcess.suggestion1": "\u68C0\u67E5\u547D\u4EE4\u662F\u5426\u6B63\u786E",
334
+ "friendlyError.systemProcess.suggestion2": "\u786E\u8BA4\u6240\u9700\u7684\u7A0B\u5E8F\u5DF2\u5B89\u88C5",
335
+ // Unknown - 未知
336
+ "friendlyError.unknown.title": "\u53D1\u751F\u672A\u77E5\u9519\u8BEF",
337
+ "friendlyError.unknown.description": "\u53D1\u751F\u4E86\u610F\u5916\u9519\u8BEF\u3002\u6211\u4EEC\u4F1A\u8BB0\u5F55\u6B64\u95EE\u9898\u4EE5\u5E2E\u52A9\u6539\u8FDB\u3002",
338
+ "friendlyError.unknown.suggestion1": "\u91CD\u8BD5\u64CD\u4F5C",
339
+ "friendlyError.unknown.suggestion2": "\u5982\u679C\u95EE\u9898\u6301\u7EED\uFF0C\u8BF7\u8054\u7CFB\u652F\u6301\u4EBA\u5458",
340
+ // Error display format - 错误显示格式
341
+ "friendlyError.suggestionLabel": "\u5EFA\u8BAE",
342
+ "friendlyError.errorIdLabel": "\u9519\u8BEF ID",
343
+ "friendlyError.technicalDetailsLabel": "\u6280\u672F\u8BE6\u60C5"
344
+ };
345
+ export {
346
+ zhCN
347
+ };
348
+ //# sourceMappingURL=zh-CN.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/i18n/locales/zh-CN.ts"],
4
+ "sourcesContent": ["/**\n * Simplified Chinese Locale\n *\n * \u7B80\u4F53\u4E2D\u6587\u8BED\u8A00\u5305\n */\n\nimport type { Translations } from '../types'\n\nexport const zhCN: Translations = {\n // Common - \u901A\u7528\n 'common.yes': '\u662F',\n 'common.no': '\u5426',\n 'common.ok': '\u786E\u5B9A',\n 'common.cancel': '\u53D6\u6D88',\n 'common.confirm': '\u786E\u8BA4',\n 'common.save': '\u4FDD\u5B58',\n 'common.delete': '\u5220\u9664',\n 'common.edit': '\u7F16\u8F91',\n 'common.create': '\u521B\u5EFA',\n 'common.loading': '\u52A0\u8F7D\u4E2D...',\n 'common.error': '\u9519\u8BEF',\n 'common.success': '\u6210\u529F',\n 'common.warning': '\u8B66\u544A',\n 'common.info': '\u4FE1\u606F',\n 'common.unknown': '\u672A\u77E5',\n 'common.none': '\u65E0',\n 'common.all': '\u5168\u90E8',\n 'common.selected': '\u5DF2\u9009\u62E9',\n 'common.default': '\u9ED8\u8BA4',\n 'common.custom': '\u81EA\u5B9A\u4E49',\n 'common.enabled': '\u5DF2\u542F\u7528',\n 'common.disabled': '\u5DF2\u7981\u7528',\n 'common.connected': '\u5DF2\u8FDE\u63A5',\n 'common.disconnected': '\u5DF2\u65AD\u5F00',\n 'common.pending': '\u7B49\u5F85\u4E2D',\n 'common.completed': '\u5DF2\u5B8C\u6210',\n 'common.failed': '\u5931\u8D25',\n 'common.inProgress': '\u8FDB\u884C\u4E2D',\n 'common.version': '\u7248\u672C',\n 'common.help': '\u5E2E\u52A9',\n 'common.quit': '\u9000\u51FA',\n 'common.back': '\u8FD4\u56DE',\n 'common.next': '\u4E0B\u4E00\u6B65',\n 'common.previous': '\u4E0A\u4E00\u6B65',\n 'common.search': '\u641C\u7D22',\n 'common.filter': '\u7B5B\u9009',\n 'common.sort': '\u6392\u5E8F',\n 'common.refresh': '\u5237\u65B0',\n 'common.retry': '\u91CD\u8BD5',\n 'common.skip': '\u8DF3\u8FC7',\n 'common.continue': '\u7EE7\u7EED',\n 'common.abort': '\u4E2D\u6B62',\n 'common.reset': '\u91CD\u7F6E',\n 'common.clear': '\u6E05\u9664',\n 'common.copy': '\u590D\u5236',\n 'common.paste': '\u7C98\u8D34',\n 'common.select': '\u9009\u62E9',\n 'common.deselect': '\u53D6\u6D88\u9009\u62E9',\n 'common.selectAll': '\u5168\u9009',\n 'common.deselectAll': '\u53D6\u6D88\u5168\u9009',\n\n // UI - Verbose mode - \u8BE6\u7EC6\u6A21\u5F0F\n 'ui.verbose.on': '\u8BE6\u7EC6\u6A21\u5F0F: \u5F00',\n 'ui.verbose.off': '\u8BE6\u7EC6\u6A21\u5F0F: \u5173',\n 'ui.verbose.label': '\u8BE6\u7EC6\u6A21\u5F0F',\n 'ui.verbose.hint': '\u6309 Ctrl+O \u5207\u6362\u8BE6\u7EC6\u6A21\u5F0F',\n // Deprecated - \u4FDD\u7559\u7528\u4E8E\u5411\u540E\u517C\u5BB9\n 'ui.displayMode.minimal': '\u8BE6\u7EC6\u6A21\u5F0F: \u5173',\n 'ui.displayMode.compact': '\u8BE6\u7EC6\u6A21\u5F0F: \u5173',\n 'ui.displayMode.detailed': '\u8BE6\u7EC6\u6A21\u5F0F: \u5F00',\n 'ui.displayMode.label': '\u8BE6\u7EC6\u6A21\u5F0F',\n 'ui.displayMode.hint': '\u6309 Ctrl+O \u5207\u6362\u8BE6\u7EC6\u6A21\u5F0F',\n\n // UI - Input - \u8F93\u5165\n 'ui.input.placeholder': '\u8F93\u5165\u95EE\u9898\u6216\u8F93\u5165 / \u67E5\u770B\u547D\u4EE4...',\n 'ui.input.thinking': '\u601D\u8003\u4E2D',\n 'ui.input.processing': '\u5904\u7406\u4E2D',\n 'ui.input.waiting': '\u7B49\u5F85\u54CD\u5E94...',\n 'ui.input.multilineHint': 'Shift+Enter \u6362\u884C',\n 'ui.input.submitHint': 'Enter \u63D0\u4EA4',\n\n // UI - Panels - \u9762\u677F\n 'ui.panel.todo': '\u5F85\u529E',\n 'ui.panel.tasks': '\u4EFB\u52A1',\n 'ui.panel.agents': '\u667A\u80FD\u4F53',\n 'ui.panel.models': '\u6A21\u578B',\n 'ui.panel.help': '\u5E2E\u52A9',\n 'ui.panel.history': '\u5386\u53F2',\n 'ui.panel.settings': '\u8BBE\u7F6E',\n\n // UI - Status - \u72B6\u6001\n 'ui.status.ready': '\u5C31\u7EEA',\n 'ui.status.busy': '\u5FD9\u788C',\n 'ui.status.error': '\u9519\u8BEF',\n 'ui.status.offline': '\u79BB\u7EBF',\n 'ui.status.connecting': '\u8FDE\u63A5\u4E2D...',\n 'ui.status.streaming': '\u6D41\u5F0F\u8F93\u51FA\u4E2D',\n\n // UI - Welcome - \u6B22\u8FCE\n 'ui.welcome.title': '\u6B22\u8FCE\u4F7F\u7528 Minto\uFF01',\n 'ui.welcome.subtitle': '',\n 'ui.welcome.quickStart': '\u5FEB\u901F\u5F00\u59CB',\n 'ui.welcome.tip1': '\u7528\u81EA\u7136\u8BED\u8A00\u63CF\u8FF0\u60A8\u7684\u7814\u7A76\u6216\u5206\u6790\u9700\u6C42',\n 'ui.welcome.tip2': '\u9700\u6C42\u8D8A\u5177\u4F53\uFF0C\u7ED3\u679C\u8D8A\u7CBE\u51C6',\n 'ui.welcome.tip3': '\u8F93\u5165 /help \u67E5\u770B\u6240\u6709\u53EF\u7528\u547D\u4EE4',\n 'ui.welcome.tip4': '',\n 'ui.welcome.cwd': '\u5DE5\u4F5C\u76EE\u5F55',\n 'ui.welcome.mcpServers': 'MCP \u670D\u52A1\u5668',\n\n // UI - Hotkeys - \u5FEB\u6377\u952E\n 'ui.hotkey.submit': '\u63D0\u4EA4',\n 'ui.hotkey.newline': '\u6362\u884C',\n 'ui.hotkey.cancel': '\u53D6\u6D88',\n 'ui.hotkey.toggleMode': '\u5207\u6362\u663E\u793A\u6A21\u5F0F',\n 'ui.hotkey.help': '\u5E2E\u52A9',\n 'ui.hotkey.quit': '\u9000\u51FA',\n 'ui.hotkey.history': '\u5386\u53F2',\n 'ui.hotkey.clear': '\u6E05\u5C4F',\n 'ui.hotkey.interrupt': '\u4E2D\u65AD',\n\n // UI - Hotkey hints (context-aware) - \u5FEB\u6377\u952E\u63D0\u793A\n 'ui.hints.command': '\u547D\u4EE4',\n 'ui.hints.bash': 'Bash',\n 'ui.hints.send': '\u53D1\u9001',\n 'ui.hints.complete': '\u8865\u5168',\n 'ui.hints.rollback': '\u56DE\u6EDA',\n 'ui.hints.select': '\u9009\u62E9',\n 'ui.hints.confirm': '\u786E\u8BA4',\n 'ui.hints.close': '\u5173\u95ED',\n 'ui.hints.browse': '\u6D4F\u89C8',\n 'ui.hints.execute': '\u6267\u884C',\n 'ui.hints.completeCommand': '\u8865\u5168\u547D\u4EE4',\n 'ui.hints.shortcuts': '\u5FEB\u6377\u952E',\n 'ui.hints.pressEsc': '\u6309 Esc \u5173\u95ED',\n 'ui.hints.tip': '\u8F93\u5165 /help \u67E5\u770B\u5B8C\u6574\u547D\u4EE4\u5217\u8868',\n\n // Commands - \u547D\u4EE4\n 'commands.help.description': '\u663E\u793A\u5E2E\u52A9\u4FE1\u606F',\n 'commands.clear.description': '\u6E05\u9664\u5C4F\u5E55',\n 'commands.compact.description': '\u538B\u7F29\u5BF9\u8BDD\u4E0A\u4E0B\u6587',\n 'commands.compact.success': '\u4E0A\u4E0B\u6587\u538B\u7F29\u6210\u529F',\n 'commands.compact.noMessages': '\u6CA1\u6709\u6D88\u606F\u9700\u8981\u538B\u7F29',\n 'commands.model.description': '\u9009\u62E9\u6216\u5207\u6362 AI \u6A21\u578B',\n 'commands.model.current': '\u5F53\u524D\u6A21\u578B',\n 'commands.model.switched': '\u5DF2\u5207\u6362\u5230\u6A21\u578B',\n 'commands.model.notFound': '\u672A\u627E\u5230\u6A21\u578B',\n 'commands.agents.description': '\u7BA1\u7406\u548C\u67E5\u770B\u667A\u80FD\u4F53',\n 'commands.agents.title': '\u53EF\u7528\u667A\u80FD\u4F53',\n 'commands.agents.empty': '\u6CA1\u6709\u53EF\u7528\u7684\u667A\u80FD\u4F53',\n 'commands.agents.loaded': '\u4E2A\u667A\u80FD\u4F53\u5DF2\u52A0\u8F7D',\n 'commands.tasks.description': '\u67E5\u770B\u8FD0\u884C\u4E2D\u7684\u4EFB\u52A1',\n 'commands.config.description': '\u7BA1\u7406\u914D\u7F6E',\n 'commands.bug.description': '\u62A5\u544A\u95EE\u9898',\n 'commands.doctor.description': '\u68C0\u67E5\u7CFB\u7EDF\u5065\u5EB7',\n 'commands.status.description': '\u663E\u793A\u7CFB\u7EDF\u72B6\u6001',\n 'commands.permissions.description': '\u7BA1\u7406\u6743\u9650',\n 'commands.mcp.description': '\u7BA1\u7406 MCP \u670D\u52A1\u5668',\n 'commands.plugin.description': '\u7BA1\u7406\u63D2\u4EF6',\n 'commands.sandbox.description': '\u914D\u7F6E\u6C99\u7BB1\u6A21\u5F0F',\n 'commands.thinking.description': '\u5207\u6362\u601D\u8003\u6A21\u5F0F',\n 'commands.thinking.enabled': '\u601D\u8003\u6A21\u5F0F\u5DF2\u542F\u7528',\n 'commands.thinking.disabled': '\u601D\u8003\u6A21\u5F0F\u5DF2\u7981\u7528',\n\n // Tools - \u5DE5\u5177\n 'tools.bash.description': '\u6267\u884C Shell \u547D\u4EE4',\n 'tools.bash.executing': '\u6267\u884C\u4E2D',\n 'tools.bash.completed': '\u547D\u4EE4\u5B8C\u6210',\n 'tools.bash.failed': '\u547D\u4EE4\u5931\u8D25',\n 'tools.read.description': '\u8BFB\u53D6\u6587\u4EF6\u5185\u5BB9',\n 'tools.read.reading': '\u8BFB\u53D6\u4E2D',\n 'tools.write.description': '\u5199\u5165\u6587\u4EF6\u5185\u5BB9',\n 'tools.write.writing': '\u5199\u5165\u4E2D',\n 'tools.write.created': '\u5DF2\u521B\u5EFA',\n 'tools.write.updated': '\u5DF2\u66F4\u65B0',\n 'tools.edit.description': '\u7F16\u8F91\u6587\u4EF6\u5185\u5BB9',\n 'tools.edit.editing': '\u7F16\u8F91\u4E2D',\n 'tools.glob.description': '\u6309\u6A21\u5F0F\u67E5\u627E\u6587\u4EF6',\n 'tools.grep.description': '\u641C\u7D22\u6587\u4EF6\u5185\u5BB9',\n 'tools.task.description': '\u542F\u52A8\u5B50\u667A\u80FD\u4F53\u4EFB\u52A1',\n 'tools.task.spawning': '\u6B63\u5728\u542F\u52A8\u4EFB\u52A1',\n 'tools.task.running': '\u4EFB\u52A1\u8FD0\u884C\u4E2D',\n 'tools.task.completed': '\u4EFB\u52A1\u5B8C\u6210',\n 'tools.todo.description': '\u7BA1\u7406\u5F85\u529E\u4E8B\u9879',\n\n // Errors - \u9519\u8BEF\n 'errors.generic': '\u53D1\u751F\u9519\u8BEF',\n 'errors.network': '\u7F51\u7EDC\u9519\u8BEF',\n 'errors.timeout': '\u8BF7\u6C42\u8D85\u65F6',\n 'errors.auth': '\u8BA4\u8BC1\u5931\u8D25',\n 'errors.rateLimit': '\u8BF7\u6C42\u9891\u7387\u8D85\u9650',\n 'errors.modelNotFound': '\u672A\u627E\u5230\u6A21\u578B',\n 'errors.apiKeyMissing': '\u7F3A\u5C11 API \u5BC6\u94A5',\n 'errors.apiKeyInvalid': 'API \u5BC6\u94A5\u65E0\u6548',\n 'errors.permissionDenied': '\u6743\u9650\u88AB\u62D2\u7EDD',\n 'errors.fileNotFound': '\u6587\u4EF6\u672A\u627E\u5230',\n 'errors.fileReadError': '\u8BFB\u53D6\u6587\u4EF6\u9519\u8BEF',\n 'errors.fileWriteError': '\u5199\u5165\u6587\u4EF6\u9519\u8BEF',\n 'errors.configError': '\u914D\u7F6E\u9519\u8BEF',\n 'errors.parseError': '\u89E3\u6790\u9519\u8BEF',\n 'errors.validationError': '\u9A8C\u8BC1\u9519\u8BEF',\n 'errors.aborted': '\u64CD\u4F5C\u5DF2\u4E2D\u6B62',\n 'errors.contextTooLong': '\u4E0A\u4E0B\u6587\u8FC7\u957F',\n 'errors.serverError': '\u670D\u52A1\u5668\u9519\u8BEF',\n 'errors.connectionFailed': '\u8FDE\u63A5\u5931\u8D25',\n\n // Help - \u5E2E\u52A9\n 'help.title': 'Minto \u5E2E\u52A9',\n 'help.usage': '\u7528\u6CD5',\n 'help.commands': '\u547D\u4EE4',\n 'help.options': '\u9009\u9879',\n 'help.examples': '\u793A\u4F8B',\n 'help.moreInfo': '\u66F4\u591A\u4FE1\u606F',\n 'help.reportBug': '\u62A5\u544A\u95EE\u9898',\n 'help.documentation': '\u6587\u6863',\n\n // Status messages - \u72B6\u6001\u6D88\u606F\n 'status.modelLoaded': '\u6A21\u578B\u5DF2\u52A0\u8F7D',\n 'status.contextCompressed': '\u4E0A\u4E0B\u6587\u5DF2\u538B\u7F29',\n 'status.tokensUsed': '\u5DF2\u4F7F\u7528\u4EE4\u724C',\n 'status.costEstimate': '\u9884\u4F30\u8D39\u7528',\n 'status.apiLatency': 'API \u5EF6\u8FDF',\n 'status.streaming': '\u6D41\u5F0F\u54CD\u5E94\u4E2D',\n 'status.thinking': '\u601D\u8003\u4E2D',\n 'status.toolUse': '\u4F7F\u7528\u5DE5\u5177',\n 'status.subagent': '\u8FD0\u884C\u5B50\u667A\u80FD\u4F53',\n\n // Prompts - \u63D0\u793A\n 'prompts.confirmDelete': '\u786E\u5B9A\u8981\u5220\u9664\u5417\uFF1F',\n 'prompts.confirmOverwrite': '\u6587\u4EF6\u5DF2\u5B58\u5728\uFF0C\u662F\u5426\u8986\u76D6\uFF1F',\n 'prompts.confirmExecute': '\u662F\u5426\u6267\u884C\u6B64\u547D\u4EE4\uFF1F',\n 'prompts.enterApiKey': '\u8BF7\u8F93\u5165 API \u5BC6\u94A5',\n 'prompts.selectModel': '\u8BF7\u9009\u62E9\u6A21\u578B',\n 'prompts.selectLanguage': '\u8BF7\u9009\u62E9\u8BED\u8A00',\n\n // Agent/Subagent - \u667A\u80FD\u4F53/\u5B50\u667A\u80FD\u4F53\n 'agent.spawning': '\u6B63\u5728\u542F\u52A8\u667A\u80FD\u4F53',\n 'agent.running': '\u667A\u80FD\u4F53\u8FD0\u884C\u4E2D',\n 'agent.completed': '\u667A\u80FD\u4F53\u5DF2\u5B8C\u6210',\n 'agent.failed': '\u667A\u80FD\u4F53\u5931\u8D25',\n 'agent.cancelled': '\u667A\u80FD\u4F53\u5DF2\u53D6\u6D88',\n 'agent.waiting': '\u7B49\u5F85\u4E2D',\n 'agent.thinking': '\u601D\u8003\u4E2D',\n\n // Model - \u6A21\u578B\n 'model.selecting': '\u6B63\u5728\u9009\u62E9\u6A21\u578B',\n 'model.selected': '\u6A21\u578B\u5DF2\u9009\u62E9',\n 'model.unavailable': '\u6A21\u578B\u4E0D\u53EF\u7528',\n 'model.switching': '\u6B63\u5728\u5207\u6362\u6A21\u578B',\n 'model.switched': '\u6A21\u578B\u5DF2\u5207\u6362',\n 'model.default': '\u9ED8\u8BA4\u6A21\u578B',\n 'model.custom': '\u81EA\u5B9A\u4E49\u6A21\u578B',\n\n // Permissions - \u6743\u9650\n 'permission.required': '\u9700\u8981\u6743\u9650',\n 'permission.granted': '\u6743\u9650\u5DF2\u6388\u4E88',\n 'permission.denied': '\u6743\u9650\u88AB\u62D2\u7EDD',\n 'permission.allowOnce': '\u5141\u8BB8\u4E00\u6B21',\n 'permission.allowAlways': '\u59CB\u7EC8\u5141\u8BB8',\n 'permission.denyOnce': '\u62D2\u7EDD\u4E00\u6B21',\n 'permission.denyAlways': '\u59CB\u7EC8\u62D2\u7EDD',\n 'permission.sensitiveFile': '\u654F\u611F\u6587\u4EF6\u8BBF\u95EE',\n 'permission.externalPath': '\u5916\u90E8\u8DEF\u5F84\u8BBF\u95EE',\n 'permission.dangerousCommand': '\u5371\u9669\u547D\u4EE4',\n\n // User-Friendly Error Messages - \u7528\u6237\u53CB\u597D\u9519\u8BEF\u6D88\u606F\n // Network & Connectivity - \u7F51\u7EDC\u4E0E\u8FDE\u63A5\n 'friendlyError.networkConnection.title': '\u7F51\u7EDC\u8FDE\u63A5\u95EE\u9898',\n 'friendlyError.networkConnection.description':\n '\u65E0\u6CD5\u8FDE\u63A5\u5230\u670D\u52A1\u5668\u3002\u8FD9\u53EF\u80FD\u662F\u7531\u4E8E\u7F51\u7EDC\u95EE\u9898\u6216\u670D\u52A1\u6682\u65F6\u4E0D\u53EF\u7528\u3002',\n 'friendlyError.networkConnection.suggestion1': '\u68C0\u67E5\u60A8\u7684\u7F51\u7EDC\u8FDE\u63A5',\n 'friendlyError.networkConnection.suggestion2': '\u7A0D\u540E\u91CD\u8BD5',\n 'friendlyError.networkConnection.suggestion3': '\u5982\u679C\u95EE\u9898\u6301\u7EED\uFF0C\u8BF7\u8054\u7CFB\u652F\u6301\u4EBA\u5458',\n\n 'friendlyError.networkTimeout.title': '\u8BF7\u6C42\u8D85\u65F6',\n 'friendlyError.networkTimeout.description':\n '\u670D\u52A1\u5668\u54CD\u5E94\u65F6\u95F4\u8FC7\u957F\u3002\u8FD9\u53EF\u80FD\u662F\u7531\u4E8E\u7F51\u7EDC\u7F13\u6162\u6216\u670D\u52A1\u7E41\u5FD9\u3002',\n 'friendlyError.networkTimeout.suggestion1': '\u68C0\u67E5\u60A8\u7684\u7F51\u7EDC\u8FDE\u63A5\u901F\u5EA6',\n 'friendlyError.networkTimeout.suggestion2': '\u7A0D\u540E\u91CD\u8BD5',\n 'friendlyError.networkTimeout.suggestion3': '\u5C1D\u8BD5\u66F4\u7B80\u77ED\u7684\u8BF7\u6C42',\n\n 'friendlyError.networkDns.title': 'DNS \u89E3\u6790\u5931\u8D25',\n 'friendlyError.networkDns.description':\n '\u65E0\u6CD5\u627E\u5230\u670D\u52A1\u5668\u5730\u5740\u3002\u8FD9\u53EF\u80FD\u662F DNS \u914D\u7F6E\u95EE\u9898\u6216\u670D\u52A1\u5730\u5740\u66F4\u6539\u3002',\n 'friendlyError.networkDns.suggestion1': '\u68C0\u67E5\u60A8\u7684\u7F51\u7EDC\u8BBE\u7F6E',\n 'friendlyError.networkDns.suggestion2': '\u5C1D\u8BD5\u4F7F\u7528\u5176\u4ED6 DNS \u670D\u52A1\u5668',\n 'friendlyError.networkDns.suggestion3': '\u8054\u7CFB\u7F51\u7EDC\u7BA1\u7406\u5458',\n\n // API & Service - API \u4E0E\u670D\u52A1\n 'friendlyError.apiRateLimit.title': '\u8BF7\u6C42\u9891\u7387\u8D85\u9650',\n 'friendlyError.apiRateLimit.description':\n '\u60A8\u7684\u8BF7\u6C42\u592A\u9891\u7E41\u4E86\u3002\u670D\u52A1\u9700\u8981\u77ED\u6682\u4F11\u606F\u6765\u5904\u7406\u60A8\u7684\u8BF7\u6C42\u3002',\n 'friendlyError.apiRateLimit.suggestion1': '\u7B49\u5F85\u51E0\u5206\u949F\u540E\u91CD\u8BD5',\n 'friendlyError.apiRateLimit.suggestion2': '\u51CF\u5C11\u8BF7\u6C42\u9891\u7387',\n 'friendlyError.apiRateLimit.suggestion3': '\u8003\u8651\u5347\u7EA7\u5230\u66F4\u9AD8\u7684\u670D\u52A1\u7EA7\u522B',\n\n 'friendlyError.apiAuth.title': '\u8BA4\u8BC1\u5931\u8D25',\n 'friendlyError.apiAuth.description':\n '\u65E0\u6CD5\u9A8C\u8BC1\u60A8\u7684\u8EAB\u4EFD\u3002\u8FD9\u53EF\u80FD\u662F API \u5BC6\u94A5\u65E0\u6548\u6216\u5DF2\u8FC7\u671F\u3002',\n 'friendlyError.apiAuth.suggestion1': '\u68C0\u67E5\u60A8\u7684 API \u5BC6\u94A5\u662F\u5426\u6B63\u786E',\n 'friendlyError.apiAuth.suggestion2': '\u786E\u8BA4 API \u5BC6\u94A5\u672A\u8FC7\u671F',\n 'friendlyError.apiAuth.suggestion3': '\u91CD\u65B0\u751F\u6210\u65B0\u7684 API \u5BC6\u94A5',\n\n 'friendlyError.apiQuota.title': '\u914D\u989D\u5DF2\u7528\u5C3D',\n 'friendlyError.apiQuota.description':\n '\u60A8\u7684 API \u4F7F\u7528\u914D\u989D\u5DF2\u8017\u5C3D\u3002\u9700\u8981\u7B49\u5F85\u914D\u989D\u91CD\u7F6E\u6216\u5347\u7EA7\u8D26\u6237\u3002',\n 'friendlyError.apiQuota.suggestion1': '\u68C0\u67E5\u60A8\u7684\u8D26\u6237\u7528\u91CF',\n 'friendlyError.apiQuota.suggestion2': '\u7B49\u5F85\u914D\u989D\u91CD\u7F6E\uFF08\u901A\u5E38\u6BCF\u6708\u91CD\u7F6E\uFF09',\n 'friendlyError.apiQuota.suggestion3': '\u8003\u8651\u5347\u7EA7\u60A8\u7684\u8BA2\u9605\u8BA1\u5212',\n\n 'friendlyError.apiServerError.title': '\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF',\n 'friendlyError.apiServerError.description':\n 'AI \u670D\u52A1\u9047\u5230\u4E86\u5185\u90E8\u95EE\u9898\u3002\u8FD9\u901A\u5E38\u662F\u4E34\u65F6\u6027\u7684\u3002',\n 'friendlyError.apiServerError.suggestion1': '\u7A0D\u540E\u91CD\u8BD5',\n 'friendlyError.apiServerError.suggestion2':\n '\u5982\u679C\u95EE\u9898\u6301\u7EED\uFF0C\u8BF7\u68C0\u67E5\u670D\u52A1\u72B6\u6001\u9875\u9762',\n\n 'friendlyError.apiInvalidResponse.title': '\u65E0\u6548\u7684\u54CD\u5E94',\n 'friendlyError.apiInvalidResponse.description':\n '\u670D\u52A1\u5668\u8FD4\u56DE\u4E86\u65E0\u6CD5\u7406\u89E3\u7684\u54CD\u5E94\u3002\u8FD9\u53EF\u80FD\u662F\u6682\u65F6\u6027\u7684\u670D\u52A1\u95EE\u9898\u3002',\n 'friendlyError.apiInvalidResponse.suggestion1': '\u91CD\u8BD5\u8BF7\u6C42',\n 'friendlyError.apiInvalidResponse.suggestion2':\n '\u5982\u679C\u95EE\u9898\u6301\u7EED\uFF0C\u8BF7\u8054\u7CFB\u652F\u6301\u4EBA\u5458',\n\n // File & Storage - \u6587\u4EF6\u4E0E\u5B58\u50A8\n 'friendlyError.fileNotFound.title': '\u6587\u4EF6\u672A\u627E\u5230',\n 'friendlyError.fileNotFound.description':\n '\u65E0\u6CD5\u627E\u5230\u6307\u5B9A\u7684\u6587\u4EF6\u3002\u5B83\u53EF\u80FD\u5DF2\u88AB\u79FB\u52A8\u3001\u5220\u9664\u6216\u8DEF\u5F84\u4E0D\u6B63\u786E\u3002',\n 'friendlyError.fileNotFound.suggestion1': '\u68C0\u67E5\u6587\u4EF6\u8DEF\u5F84\u662F\u5426\u6B63\u786E',\n 'friendlyError.fileNotFound.suggestion2': '\u786E\u8BA4\u6587\u4EF6\u662F\u5426\u5B58\u5728',\n\n 'friendlyError.filePermission.title': '\u6587\u4EF6\u6743\u9650\u9519\u8BEF',\n 'friendlyError.filePermission.description':\n '\u6CA1\u6709\u8DB3\u591F\u7684\u6743\u9650\u8BBF\u95EE\u6B64\u6587\u4EF6\u6216\u76EE\u5F55\u3002',\n 'friendlyError.filePermission.suggestion1': '\u68C0\u67E5\u6587\u4EF6\u6743\u9650\u8BBE\u7F6E',\n 'friendlyError.filePermission.suggestion2': '\u5C1D\u8BD5\u4EE5\u7BA1\u7406\u5458\u6743\u9650\u8FD0\u884C',\n\n 'friendlyError.fileTooLarge.title': '\u6587\u4EF6\u8FC7\u5927',\n 'friendlyError.fileTooLarge.description': '\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u4E86\u5904\u7406\u9650\u5236\u3002',\n 'friendlyError.fileTooLarge.suggestion1': '\u5C1D\u8BD5\u5904\u7406\u8F83\u5C0F\u7684\u6587\u4EF6',\n 'friendlyError.fileTooLarge.suggestion2': '\u5C06\u5927\u6587\u4EF6\u5206\u5272\u6210\u5C0F\u5757',\n\n 'friendlyError.fileEncoding.title': '\u6587\u4EF6\u7F16\u7801\u95EE\u9898',\n 'friendlyError.fileEncoding.description':\n '\u65E0\u6CD5\u8BFB\u53D6\u6587\u4EF6\u5185\u5BB9\u3002\u53EF\u80FD\u662F\u6587\u4EF6\u7F16\u7801\u4E0D\u517C\u5BB9\u6216\u6587\u4EF6\u5DF2\u635F\u574F\u3002',\n 'friendlyError.fileEncoding.suggestion1': '\u68C0\u67E5\u6587\u4EF6\u7F16\u7801\u683C\u5F0F',\n 'friendlyError.fileEncoding.suggestion2': '\u5C1D\u8BD5\u5C06\u6587\u4EF6\u8F6C\u6362\u4E3A UTF-8 \u7F16\u7801',\n\n // Configuration - \u914D\u7F6E\n 'friendlyError.configMissing.title': '\u914D\u7F6E\u6587\u4EF6\u7F3A\u5931',\n 'friendlyError.configMissing.description':\n '\u627E\u4E0D\u5230\u5FC5\u9700\u7684\u914D\u7F6E\u6587\u4EF6\u3002\u8FD9\u53EF\u80FD\u662F\u9996\u6B21\u8FD0\u884C\u6216\u914D\u7F6E\u88AB\u610F\u5916\u5220\u9664\u3002',\n 'friendlyError.configMissing.suggestion1': '\u8FD0\u884C\u521D\u59CB\u8BBE\u7F6E\u5411\u5BFC',\n 'friendlyError.configMissing.suggestion2': '\u624B\u52A8\u521B\u5EFA\u914D\u7F6E\u6587\u4EF6',\n\n 'friendlyError.configInvalid.title': '\u914D\u7F6E\u683C\u5F0F\u9519\u8BEF',\n 'friendlyError.configInvalid.description':\n '\u914D\u7F6E\u6587\u4EF6\u5305\u542B\u65E0\u6548\u7684\u5185\u5BB9\u3002\u8FD9\u53EF\u80FD\u662F\u7F16\u8F91\u65F6\u5F15\u5165\u7684\u8BED\u6CD5\u9519\u8BEF\u3002',\n 'friendlyError.configInvalid.suggestion1': '\u68C0\u67E5\u914D\u7F6E\u6587\u4EF6\u683C\u5F0F',\n 'friendlyError.configInvalid.suggestion2': '\u6062\u590D\u9ED8\u8BA4\u914D\u7F6E',\n\n 'friendlyError.configApiKey.title': 'API \u5BC6\u94A5\u672A\u914D\u7F6E',\n 'friendlyError.configApiKey.description': '\u9700\u8981\u8BBE\u7F6E API \u5BC6\u94A5\u624D\u80FD\u4F7F\u7528\u6B64\u529F\u80FD\u3002',\n 'friendlyError.configApiKey.suggestion1': '\u4F7F\u7528 /config \u547D\u4EE4\u8BBE\u7F6E API \u5BC6\u94A5',\n 'friendlyError.configApiKey.suggestion2': '\u4ECE\u670D\u52A1\u63D0\u4F9B\u5546\u83B7\u53D6\u6709\u6548\u7684 API \u5BC6\u94A5',\n\n // Model & AI - \u6A21\u578B\u4E0E AI\n 'friendlyError.modelUnavailable.title': '\u6A21\u578B\u4E0D\u53EF\u7528',\n 'friendlyError.modelUnavailable.description':\n '\u8BF7\u6C42\u7684 AI \u6A21\u578B\u5F53\u524D\u4E0D\u53EF\u7528\u3002\u5B83\u53EF\u80FD\u6B63\u5728\u7EF4\u62A4\u6216\u5DF2\u4E0B\u7EBF\u3002',\n 'friendlyError.modelUnavailable.suggestion1': '\u5C1D\u8BD5\u4F7F\u7528\u5176\u4ED6\u53EF\u7528\u6A21\u578B',\n 'friendlyError.modelUnavailable.suggestion2': '\u7A0D\u540E\u91CD\u8BD5',\n 'friendlyError.modelUnavailable.suggestion3': '\u68C0\u67E5\u6A21\u578B\u540D\u79F0\u662F\u5426\u6B63\u786E',\n\n 'friendlyError.modelContextLength.title': '\u5185\u5BB9\u8FC7\u957F',\n 'friendlyError.modelContextLength.description':\n '\u60A8\u7684\u5BF9\u8BDD\u6216\u8F93\u5165\u8D85\u51FA\u4E86\u6A21\u578B\u7684\u5904\u7406\u80FD\u529B\u3002',\n 'friendlyError.modelContextLength.suggestion1': '\u7F29\u77ED\u60A8\u7684\u8F93\u5165',\n 'friendlyError.modelContextLength.suggestion2':\n '\u4F7F\u7528 /compact \u547D\u4EE4\u538B\u7F29\u5BF9\u8BDD\u5386\u53F2',\n\n 'friendlyError.modelContentFilter.title': '\u5185\u5BB9\u88AB\u8FC7\u6EE4',\n 'friendlyError.modelContentFilter.description':\n '\u60A8\u7684\u8BF7\u6C42\u89E6\u53D1\u4E86\u5185\u5BB9\u5B89\u5168\u8FC7\u6EE4\u5668\u3002',\n 'friendlyError.modelContentFilter.suggestion1': '\u4FEE\u6539\u60A8\u7684\u8BF7\u6C42\u5185\u5BB9',\n 'friendlyError.modelContentFilter.suggestion2': '\u907F\u514D\u654F\u611F\u6216\u4E0D\u5F53\u5185\u5BB9',\n\n // System - \u7CFB\u7EDF\n 'friendlyError.systemMemory.title': '\u5185\u5B58\u4E0D\u8DB3',\n 'friendlyError.systemMemory.description': '\u7CFB\u7EDF\u53EF\u7528\u5185\u5B58\u4E0D\u8DB3\u4EE5\u5B8C\u6210\u6B64\u64CD\u4F5C\u3002',\n 'friendlyError.systemMemory.suggestion1': '\u5173\u95ED\u4E00\u4E9B\u4E0D\u9700\u8981\u7684\u5E94\u7528\u7A0B\u5E8F',\n 'friendlyError.systemMemory.suggestion2': '\u91CD\u542F\u5E94\u7528\u7A0B\u5E8F',\n 'friendlyError.systemMemory.suggestion3': '\u5C1D\u8BD5\u5904\u7406\u8F83\u5C0F\u7684\u4EFB\u52A1',\n\n 'friendlyError.systemProcess.title': '\u8FDB\u7A0B\u9519\u8BEF',\n 'friendlyError.systemProcess.description': '\u6267\u884C\u547D\u4EE4\u65F6\u9047\u5230\u7CFB\u7EDF\u7EA7\u9519\u8BEF\u3002',\n 'friendlyError.systemProcess.suggestion1': '\u68C0\u67E5\u547D\u4EE4\u662F\u5426\u6B63\u786E',\n 'friendlyError.systemProcess.suggestion2': '\u786E\u8BA4\u6240\u9700\u7684\u7A0B\u5E8F\u5DF2\u5B89\u88C5',\n\n // Unknown - \u672A\u77E5\n 'friendlyError.unknown.title': '\u53D1\u751F\u672A\u77E5\u9519\u8BEF',\n 'friendlyError.unknown.description':\n '\u53D1\u751F\u4E86\u610F\u5916\u9519\u8BEF\u3002\u6211\u4EEC\u4F1A\u8BB0\u5F55\u6B64\u95EE\u9898\u4EE5\u5E2E\u52A9\u6539\u8FDB\u3002',\n 'friendlyError.unknown.suggestion1': '\u91CD\u8BD5\u64CD\u4F5C',\n 'friendlyError.unknown.suggestion2': '\u5982\u679C\u95EE\u9898\u6301\u7EED\uFF0C\u8BF7\u8054\u7CFB\u652F\u6301\u4EBA\u5458',\n\n // Error display format - \u9519\u8BEF\u663E\u793A\u683C\u5F0F\n 'friendlyError.suggestionLabel': '\u5EFA\u8BAE',\n 'friendlyError.errorIdLabel': '\u9519\u8BEF ID',\n 'friendlyError.technicalDetailsLabel': '\u6280\u672F\u8BE6\u60C5',\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,8 @@
1
+ const LANGUAGE_NAMES = {
2
+ en: "English",
3
+ "zh-CN": "\u7B80\u4F53\u4E2D\u6587"
4
+ };
5
+ export {
6
+ LANGUAGE_NAMES
7
+ };
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/i18n/types.ts"],
4
+ "sourcesContent": ["/**\n * i18n Type Definitions\n *\n * Type-safe internationalization system for Minto CLI.\n */\n\n/**\n * Supported languages\n */\nexport type Language = 'en' | 'zh-CN'\n\n/**\n * Language display names\n */\nexport const LANGUAGE_NAMES: Record<Language, string> = {\n en: 'English',\n 'zh-CN': '\u7B80\u4F53\u4E2D\u6587',\n}\n\n/**\n * Translation namespace keys\n */\nexport type TranslationNamespace =\n | 'common'\n | 'ui'\n | 'commands'\n | 'tools'\n | 'errors'\n | 'help'\n | 'status'\n | 'prompts'\n\n/**\n * Translation key structure for type safety\n */\nexport interface TranslationKeys {\n // Common\n 'common.yes': string\n 'common.no': string\n 'common.ok': string\n 'common.cancel': string\n 'common.confirm': string\n 'common.save': string\n 'common.delete': string\n 'common.edit': string\n 'common.create': string\n 'common.loading': string\n 'common.error': string\n 'common.success': string\n 'common.warning': string\n 'common.info': string\n 'common.unknown': string\n 'common.none': string\n 'common.all': string\n 'common.selected': string\n 'common.default': string\n 'common.custom': string\n 'common.enabled': string\n 'common.disabled': string\n 'common.connected': string\n 'common.disconnected': string\n 'common.pending': string\n 'common.completed': string\n 'common.failed': string\n 'common.inProgress': string\n 'common.version': string\n 'common.help': string\n 'common.quit': string\n 'common.back': string\n 'common.next': string\n 'common.previous': string\n 'common.search': string\n 'common.filter': string\n 'common.sort': string\n 'common.refresh': string\n 'common.retry': string\n 'common.skip': string\n 'common.continue': string\n 'common.abort': string\n 'common.reset': string\n 'common.clear': string\n 'common.copy': string\n 'common.paste': string\n 'common.select': string\n 'common.deselect': string\n 'common.selectAll': string\n 'common.deselectAll': string\n\n // UI - Verbose mode\n 'ui.verbose.on': string\n 'ui.verbose.off': string\n 'ui.verbose.label': string\n 'ui.verbose.hint': string\n // Deprecated - kept for backward compatibility\n 'ui.displayMode.minimal': string\n 'ui.displayMode.compact': string\n 'ui.displayMode.detailed': string\n 'ui.displayMode.label': string\n 'ui.displayMode.hint': string\n\n // UI - Input\n 'ui.input.placeholder': string\n 'ui.input.thinking': string\n 'ui.input.processing': string\n 'ui.input.waiting': string\n 'ui.input.multilineHint': string\n 'ui.input.submitHint': string\n\n // UI - Panels\n 'ui.panel.todo': string\n 'ui.panel.tasks': string\n 'ui.panel.agents': string\n 'ui.panel.models': string\n 'ui.panel.help': string\n 'ui.panel.history': string\n 'ui.panel.settings': string\n\n // UI - Status\n 'ui.status.ready': string\n 'ui.status.busy': string\n 'ui.status.error': string\n 'ui.status.offline': string\n 'ui.status.connecting': string\n 'ui.status.streaming': string\n\n // UI - Welcome\n 'ui.welcome.title': string\n 'ui.welcome.subtitle': string\n 'ui.welcome.quickStart': string\n 'ui.welcome.tip1': string\n 'ui.welcome.tip2': string\n 'ui.welcome.tip3': string\n 'ui.welcome.tip4': string\n 'ui.welcome.cwd': string\n 'ui.welcome.mcpServers': string\n\n // UI - Hotkeys\n 'ui.hotkey.submit': string\n 'ui.hotkey.newline': string\n 'ui.hotkey.cancel': string\n 'ui.hotkey.toggleMode': string\n 'ui.hotkey.help': string\n 'ui.hotkey.quit': string\n 'ui.hotkey.history': string\n 'ui.hotkey.clear': string\n 'ui.hotkey.interrupt': string\n\n // UI - Hotkey hints (context-aware)\n 'ui.hints.command': string\n 'ui.hints.bash': string\n 'ui.hints.send': string\n 'ui.hints.complete': string\n 'ui.hints.rollback': string\n 'ui.hints.select': string\n 'ui.hints.confirm': string\n 'ui.hints.close': string\n 'ui.hints.browse': string\n 'ui.hints.execute': string\n 'ui.hints.completeCommand': string\n 'ui.hints.shortcuts': string\n 'ui.hints.pressEsc': string\n 'ui.hints.tip': string\n\n // Commands\n 'commands.help.description': string\n 'commands.clear.description': string\n 'commands.compact.description': string\n 'commands.compact.success': string\n 'commands.compact.noMessages': string\n 'commands.model.description': string\n 'commands.model.current': string\n 'commands.model.switched': string\n 'commands.model.notFound': string\n 'commands.agents.description': string\n 'commands.agents.title': string\n 'commands.agents.empty': string\n 'commands.agents.loaded': string\n 'commands.tasks.description': string\n 'commands.config.description': string\n 'commands.bug.description': string\n 'commands.doctor.description': string\n 'commands.status.description': string\n 'commands.permissions.description': string\n 'commands.mcp.description': string\n 'commands.plugin.description': string\n 'commands.sandbox.description': string\n 'commands.thinking.description': string\n 'commands.thinking.enabled': string\n 'commands.thinking.disabled': string\n\n // Tools\n 'tools.bash.description': string\n 'tools.bash.executing': string\n 'tools.bash.completed': string\n 'tools.bash.failed': string\n 'tools.read.description': string\n 'tools.read.reading': string\n 'tools.write.description': string\n 'tools.write.writing': string\n 'tools.write.created': string\n 'tools.write.updated': string\n 'tools.edit.description': string\n 'tools.edit.editing': string\n 'tools.glob.description': string\n 'tools.grep.description': string\n 'tools.task.description': string\n 'tools.task.spawning': string\n 'tools.task.running': string\n 'tools.task.completed': string\n 'tools.todo.description': string\n\n // Errors\n 'errors.generic': string\n 'errors.network': string\n 'errors.timeout': string\n 'errors.auth': string\n 'errors.rateLimit': string\n 'errors.modelNotFound': string\n 'errors.apiKeyMissing': string\n 'errors.apiKeyInvalid': string\n 'errors.permissionDenied': string\n 'errors.fileNotFound': string\n 'errors.fileReadError': string\n 'errors.fileWriteError': string\n 'errors.configError': string\n 'errors.parseError': string\n 'errors.validationError': string\n 'errors.aborted': string\n 'errors.contextTooLong': string\n 'errors.serverError': string\n 'errors.connectionFailed': string\n\n // Help\n 'help.title': string\n 'help.usage': string\n 'help.commands': string\n 'help.options': string\n 'help.examples': string\n 'help.moreInfo': string\n 'help.reportBug': string\n 'help.documentation': string\n\n // Status messages\n 'status.modelLoaded': string\n 'status.contextCompressed': string\n 'status.tokensUsed': string\n 'status.costEstimate': string\n 'status.apiLatency': string\n 'status.streaming': string\n 'status.thinking': string\n 'status.toolUse': string\n 'status.subagent': string\n\n // Prompts\n 'prompts.confirmDelete': string\n 'prompts.confirmOverwrite': string\n 'prompts.confirmExecute': string\n 'prompts.enterApiKey': string\n 'prompts.selectModel': string\n 'prompts.selectLanguage': string\n\n // Agent/Subagent\n 'agent.spawning': string\n 'agent.running': string\n 'agent.completed': string\n 'agent.failed': string\n 'agent.cancelled': string\n 'agent.waiting': string\n 'agent.thinking': string\n\n // Model\n 'model.selecting': string\n 'model.selected': string\n 'model.unavailable': string\n 'model.switching': string\n 'model.switched': string\n 'model.default': string\n 'model.custom': string\n\n // Permissions\n 'permission.required': string\n 'permission.granted': string\n 'permission.denied': string\n 'permission.allowOnce': string\n 'permission.allowAlways': string\n 'permission.denyOnce': string\n 'permission.denyAlways': string\n 'permission.sensitiveFile': string\n 'permission.externalPath': string\n 'permission.dangerousCommand': string\n\n // User-Friendly Error Messages\n // Network & Connectivity\n 'friendlyError.networkConnection.title': string\n 'friendlyError.networkConnection.description': string\n 'friendlyError.networkConnection.suggestion1': string\n 'friendlyError.networkConnection.suggestion2': string\n 'friendlyError.networkConnection.suggestion3': string\n\n 'friendlyError.networkTimeout.title': string\n 'friendlyError.networkTimeout.description': string\n 'friendlyError.networkTimeout.suggestion1': string\n 'friendlyError.networkTimeout.suggestion2': string\n 'friendlyError.networkTimeout.suggestion3': string\n\n 'friendlyError.networkDns.title': string\n 'friendlyError.networkDns.description': string\n 'friendlyError.networkDns.suggestion1': string\n 'friendlyError.networkDns.suggestion2': string\n 'friendlyError.networkDns.suggestion3': string\n\n // API & Service\n 'friendlyError.apiRateLimit.title': string\n 'friendlyError.apiRateLimit.description': string\n 'friendlyError.apiRateLimit.suggestion1': string\n 'friendlyError.apiRateLimit.suggestion2': string\n 'friendlyError.apiRateLimit.suggestion3': string\n\n 'friendlyError.apiAuth.title': string\n 'friendlyError.apiAuth.description': string\n 'friendlyError.apiAuth.suggestion1': string\n 'friendlyError.apiAuth.suggestion2': string\n 'friendlyError.apiAuth.suggestion3': string\n\n 'friendlyError.apiQuota.title': string\n 'friendlyError.apiQuota.description': string\n 'friendlyError.apiQuota.suggestion1': string\n 'friendlyError.apiQuota.suggestion2': string\n 'friendlyError.apiQuota.suggestion3': string\n\n 'friendlyError.apiServerError.title': string\n 'friendlyError.apiServerError.description': string\n 'friendlyError.apiServerError.suggestion1': string\n 'friendlyError.apiServerError.suggestion2': string\n\n 'friendlyError.apiInvalidResponse.title': string\n 'friendlyError.apiInvalidResponse.description': string\n 'friendlyError.apiInvalidResponse.suggestion1': string\n 'friendlyError.apiInvalidResponse.suggestion2': string\n\n // File & Storage\n 'friendlyError.fileNotFound.title': string\n 'friendlyError.fileNotFound.description': string\n 'friendlyError.fileNotFound.suggestion1': string\n 'friendlyError.fileNotFound.suggestion2': string\n\n 'friendlyError.filePermission.title': string\n 'friendlyError.filePermission.description': string\n 'friendlyError.filePermission.suggestion1': string\n 'friendlyError.filePermission.suggestion2': string\n\n 'friendlyError.fileTooLarge.title': string\n 'friendlyError.fileTooLarge.description': string\n 'friendlyError.fileTooLarge.suggestion1': string\n 'friendlyError.fileTooLarge.suggestion2': string\n\n 'friendlyError.fileEncoding.title': string\n 'friendlyError.fileEncoding.description': string\n 'friendlyError.fileEncoding.suggestion1': string\n 'friendlyError.fileEncoding.suggestion2': string\n\n // Configuration\n 'friendlyError.configMissing.title': string\n 'friendlyError.configMissing.description': string\n 'friendlyError.configMissing.suggestion1': string\n 'friendlyError.configMissing.suggestion2': string\n\n 'friendlyError.configInvalid.title': string\n 'friendlyError.configInvalid.description': string\n 'friendlyError.configInvalid.suggestion1': string\n 'friendlyError.configInvalid.suggestion2': string\n\n 'friendlyError.configApiKey.title': string\n 'friendlyError.configApiKey.description': string\n 'friendlyError.configApiKey.suggestion1': string\n 'friendlyError.configApiKey.suggestion2': string\n\n // Model & AI\n 'friendlyError.modelUnavailable.title': string\n 'friendlyError.modelUnavailable.description': string\n 'friendlyError.modelUnavailable.suggestion1': string\n 'friendlyError.modelUnavailable.suggestion2': string\n 'friendlyError.modelUnavailable.suggestion3': string\n\n 'friendlyError.modelContextLength.title': string\n 'friendlyError.modelContextLength.description': string\n 'friendlyError.modelContextLength.suggestion1': string\n 'friendlyError.modelContextLength.suggestion2': string\n\n 'friendlyError.modelContentFilter.title': string\n 'friendlyError.modelContentFilter.description': string\n 'friendlyError.modelContentFilter.suggestion1': string\n 'friendlyError.modelContentFilter.suggestion2': string\n\n // System\n 'friendlyError.systemMemory.title': string\n 'friendlyError.systemMemory.description': string\n 'friendlyError.systemMemory.suggestion1': string\n 'friendlyError.systemMemory.suggestion2': string\n 'friendlyError.systemMemory.suggestion3': string\n\n 'friendlyError.systemProcess.title': string\n 'friendlyError.systemProcess.description': string\n 'friendlyError.systemProcess.suggestion1': string\n 'friendlyError.systemProcess.suggestion2': string\n\n // Unknown\n 'friendlyError.unknown.title': string\n 'friendlyError.unknown.description': string\n 'friendlyError.unknown.suggestion1': string\n 'friendlyError.unknown.suggestion2': string\n\n // Error display format\n 'friendlyError.suggestionLabel': string\n 'friendlyError.errorIdLabel': string\n 'friendlyError.technicalDetailsLabel': string\n}\n\n/**\n * Full translation object type\n */\nexport type Translations = TranslationKeys\n\n/**\n * Translation key type (string union of all keys)\n */\nexport type TranslationKey = keyof TranslationKeys\n\n/**\n * Partial translations for extending\n */\nexport type PartialTranslations = Partial<TranslationKeys>\n"],
5
+ "mappings": "AAcO,MAAM,iBAA2C;AAAA,EACtD,IAAI;AAAA,EACJ,SAAS;AACX;",
6
+ "names": []
7
+ }
@@ -12,6 +12,9 @@ import { logError } from "./utils/log.js";
12
12
  import { grantWritePermissionForOriginalDir } from "./utils/permissions/filesystem.js";
13
13
  import { getCwd } from "./utils/state.js";
14
14
  import { PRODUCT_NAME } from "./constants/product.js";
15
+ import {
16
+ getToolRiskLevel
17
+ } from "./utils/toolRiskClassification.js";
15
18
  const SAFE_COMMANDS = /* @__PURE__ */ new Set([
16
19
  "git status",
17
20
  "git diff",
@@ -105,8 +108,32 @@ const bashToolHasPermission = async (tool, command, context, allowedTools, getCo
105
108
  message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`
106
109
  };
107
110
  };
111
+ function getEffectiveSafetyMode(options) {
112
+ if (options.safetyMode) {
113
+ return options.safetyMode;
114
+ }
115
+ if (options.safeMode === true) {
116
+ return "strict";
117
+ }
118
+ return "yolo";
119
+ }
120
+ function shouldAllowByRiskLevel(safetyMode, riskLevel) {
121
+ switch (safetyMode) {
122
+ case "yolo":
123
+ return true;
124
+ case "smart":
125
+ return riskLevel === "safe" || riskLevel === "monitored";
126
+ case "strict":
127
+ return riskLevel === "safe";
128
+ }
129
+ }
108
130
  const hasPermissionsToUseTool = async (tool, input, context, _assistantMessage) => {
109
- if (!context.options.safeMode) {
131
+ const safetyMode = getEffectiveSafetyMode(context.options);
132
+ const riskLevel = getToolRiskLevel(
133
+ tool.name,
134
+ input
135
+ );
136
+ if (shouldAllowByRiskLevel(safetyMode, riskLevel)) {
110
137
  return { result: true };
111
138
  }
112
139
  if (context.abortController.signal.aborted) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/permissions.ts"],
4
- "sourcesContent": ["import type { CanUseToolFn } from './hooks/useCanUseTool'\nimport { Tool, ToolUseContext } from './Tool'\nimport { BashTool, inputSchema } from './tools/BashTool/BashTool'\nimport { FileEditTool } from './tools/FileEditTool/FileEditTool'\nimport { FileWriteTool } from './tools/FileWriteTool/FileWriteTool'\nimport { NotebookEditTool } from './tools/NotebookEditTool/NotebookEditTool'\nimport { getCommandSubcommandPrefix, splitCommand } from './utils/commands'\nimport {\n getCurrentProjectConfig,\n saveCurrentProjectConfig,\n} from '@utils/config'\nimport { AbortError } from './utils/errors'\nimport { logError } from './utils/log'\nimport { grantWritePermissionForOriginalDir } from './utils/permissions/filesystem'\nimport { getCwd } from './utils/state'\nimport { PRODUCT_NAME } from './constants/product'\n\n// Commands that are known to be safe for execution\nconst SAFE_COMMANDS = new Set([\n 'git status',\n 'git diff',\n 'git log',\n 'git branch',\n 'pwd',\n 'tree',\n 'date',\n 'which',\n])\n\nexport const bashToolCommandHasExactMatchPermission = (\n tool: Tool,\n command: string,\n allowedTools: string[],\n): boolean => {\n if (SAFE_COMMANDS.has(command)) {\n return true\n }\n // Check exact match first\n if (allowedTools.includes(getPermissionKey(tool, { command }, null))) {\n return true\n }\n // Check if command is an exact match with an approved prefix\n if (allowedTools.includes(getPermissionKey(tool, { command }, command))) {\n return true\n }\n return false\n}\n\nexport const bashToolCommandHasPermission = (\n tool: Tool,\n command: string,\n prefix: string | null,\n allowedTools: string[],\n): boolean => {\n // Check exact match first\n if (bashToolCommandHasExactMatchPermission(tool, command, allowedTools)) {\n return true\n }\n return allowedTools.includes(getPermissionKey(tool, { command }, prefix))\n}\n\nexport const bashToolHasPermission = async (\n tool: Tool,\n command: string,\n context: ToolUseContext,\n allowedTools: string[],\n getCommandSubcommandPrefixFn = getCommandSubcommandPrefix,\n): Promise<PermissionResult> => {\n if (bashToolCommandHasExactMatchPermission(tool, command, allowedTools)) {\n // This is an exact match for a command that is allowed, so we can skip the prefix check\n return { result: true }\n }\n\n const subCommands = splitCommand(command).filter(_ => {\n // Denim likes to add this, we strip it out so we don't need to prompt the user each time\n if (_ === `cd ${getCwd()}`) {\n return false\n }\n return true\n })\n const commandSubcommandPrefix = await getCommandSubcommandPrefixFn(\n command,\n context.abortController.signal,\n )\n if (context.abortController.signal.aborted) {\n throw new AbortError()\n }\n\n if (commandSubcommandPrefix === null) {\n // Fail closed and ask for user approval if the command prefix query failed (e.g. due to network error)\n // This is NOT the same as `fullCommandPrefix.commandPrefix === null`, which means no prefix was detected\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n }\n\n if (commandSubcommandPrefix.commandInjectionDetected) {\n // Only allow exact matches for potential command injections\n if (bashToolCommandHasExactMatchPermission(tool, command, allowedTools)) {\n return { result: true }\n } else {\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n }\n }\n\n // After the commandInjectionDetected check above, TypeScript still sees the union type.\n // We know commandInjectionDetected is false here, so commandPrefix exists.\n // Use 'in' check for proper type narrowing\n const commandPrefix =\n 'commandPrefix' in commandSubcommandPrefix\n ? commandSubcommandPrefix.commandPrefix\n : null\n\n // If there is only one command, no need to process subCommands\n if (subCommands.length < 2) {\n if (\n bashToolCommandHasPermission(tool, command, commandPrefix, allowedTools)\n ) {\n return { result: true }\n } else {\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n }\n }\n if (\n subCommands.every(subCommand => {\n const prefixResult =\n commandSubcommandPrefix.subcommandPrefixes.get(subCommand)\n if (prefixResult === undefined || prefixResult.commandInjectionDetected) {\n // If prefix result is missing or command injection is detected, always ask for permission\n return false\n }\n // After the check above, we know commandInjectionDetected is false\n // Use 'in' check for proper type narrowing\n const subCommandPrefix =\n 'commandPrefix' in prefixResult ? prefixResult.commandPrefix : null\n const hasPermission = bashToolCommandHasPermission(\n tool,\n subCommand,\n subCommandPrefix,\n allowedTools,\n )\n return hasPermission\n })\n ) {\n return { result: true }\n }\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n}\n\ntype PermissionResult = { result: true } | { result: false; message: string }\n\nexport const hasPermissionsToUseTool: CanUseToolFn = async (\n tool,\n input,\n context,\n _assistantMessage,\n): Promise<PermissionResult> => {\n // If safe mode is not enabled, allow all tools (permissive by default)\n if (!context.options.safeMode) {\n return { result: true }\n }\n\n if (context.abortController.signal.aborted) {\n throw new AbortError()\n }\n\n // Check if the tool needs permissions\n try {\n if (!tool.needsPermissions(input as never)) {\n return { result: true }\n }\n } catch (e) {\n logError(`Error checking permissions: ${e}`)\n return { result: false, message: 'Error checking permissions' }\n }\n\n const projectConfig = getCurrentProjectConfig()\n const allowedTools = projectConfig.allowedTools ?? []\n // Special case for BashTool to allow blanket commands without exposing them in the UI\n if (tool === BashTool && allowedTools.includes(BashTool.name)) {\n return { result: true }\n }\n\n // TODO: Move this into tool definitions (done for read tools!)\n switch (tool) {\n // For bash tool, check each sub-command's permissions separately\n case BashTool: {\n // The types have already been validated by the tool,\n // so we can safely parse the input (as opposed to safeParse).\n const { command } = inputSchema.parse(input)\n return await bashToolHasPermission(tool, command, context, allowedTools)\n }\n // For file editing tools, check session-only permissions\n case FileEditTool:\n case FileWriteTool:\n case NotebookEditTool: {\n // The types have already been validated by the tool,\n // so we can safely pass this in\n if (!tool.needsPermissions(input)) {\n return { result: true }\n }\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n }\n // For other tools, check persistent permissions\n default: {\n const permissionKey = getPermissionKey(tool, input, null)\n if (allowedTools.includes(permissionKey)) {\n return { result: true }\n }\n\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n }\n }\n}\n\nexport async function savePermission(\n tool: Tool,\n input: { [k: string]: unknown },\n prefix: string | null,\n): Promise<void> {\n const key = getPermissionKey(tool, input, prefix)\n\n // For file editing tools, store write permissions only in memory\n if (\n tool === FileEditTool ||\n tool === FileWriteTool ||\n tool === NotebookEditTool\n ) {\n grantWritePermissionForOriginalDir()\n return\n }\n\n // For other tools, store permissions on disk\n const projectConfig = getCurrentProjectConfig()\n if (projectConfig.allowedTools.includes(key)) {\n return\n }\n\n projectConfig.allowedTools.push(key)\n projectConfig.allowedTools.sort()\n\n saveCurrentProjectConfig(projectConfig)\n}\n\nfunction getPermissionKey(\n tool: Tool,\n input: { [k: string]: unknown },\n prefix: string | null,\n): string {\n switch (tool) {\n case BashTool:\n if (prefix) {\n return `${BashTool.name}(${prefix}:*)`\n }\n return `${BashTool.name}(${BashTool.renderToolUseMessage(input as never)})`\n default:\n return tool.name\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { CanUseToolFn } from './hooks/useCanUseTool'\nimport { Tool, ToolUseContext } from './Tool'\nimport { BashTool, inputSchema } from './tools/BashTool/BashTool'\nimport { FileEditTool } from './tools/FileEditTool/FileEditTool'\nimport { FileWriteTool } from './tools/FileWriteTool/FileWriteTool'\nimport { NotebookEditTool } from './tools/NotebookEditTool/NotebookEditTool'\nimport { getCommandSubcommandPrefix, splitCommand } from './utils/commands'\nimport {\n getCurrentProjectConfig,\n saveCurrentProjectConfig,\n type SafetyMode,\n} from '@utils/config'\nimport { AbortError } from './utils/errors'\nimport { logError } from './utils/log'\nimport { grantWritePermissionForOriginalDir } from './utils/permissions/filesystem'\nimport { getCwd } from './utils/state'\nimport { PRODUCT_NAME } from './constants/product'\nimport {\n getToolRiskLevel,\n type RiskLevel,\n} from './utils/toolRiskClassification'\n\n// Commands that are known to be safe for execution\nconst SAFE_COMMANDS = new Set([\n 'git status',\n 'git diff',\n 'git log',\n 'git branch',\n 'pwd',\n 'tree',\n 'date',\n 'which',\n])\n\nexport const bashToolCommandHasExactMatchPermission = (\n tool: Tool,\n command: string,\n allowedTools: string[],\n): boolean => {\n if (SAFE_COMMANDS.has(command)) {\n return true\n }\n // Check exact match first\n if (allowedTools.includes(getPermissionKey(tool, { command }, null))) {\n return true\n }\n // Check if command is an exact match with an approved prefix\n if (allowedTools.includes(getPermissionKey(tool, { command }, command))) {\n return true\n }\n return false\n}\n\nexport const bashToolCommandHasPermission = (\n tool: Tool,\n command: string,\n prefix: string | null,\n allowedTools: string[],\n): boolean => {\n // Check exact match first\n if (bashToolCommandHasExactMatchPermission(tool, command, allowedTools)) {\n return true\n }\n return allowedTools.includes(getPermissionKey(tool, { command }, prefix))\n}\n\nexport const bashToolHasPermission = async (\n tool: Tool,\n command: string,\n context: ToolUseContext,\n allowedTools: string[],\n getCommandSubcommandPrefixFn = getCommandSubcommandPrefix,\n): Promise<PermissionResult> => {\n if (bashToolCommandHasExactMatchPermission(tool, command, allowedTools)) {\n // This is an exact match for a command that is allowed, so we can skip the prefix check\n return { result: true }\n }\n\n const subCommands = splitCommand(command).filter(_ => {\n // Denim likes to add this, we strip it out so we don't need to prompt the user each time\n if (_ === `cd ${getCwd()}`) {\n return false\n }\n return true\n })\n const commandSubcommandPrefix = await getCommandSubcommandPrefixFn(\n command,\n context.abortController.signal,\n )\n if (context.abortController.signal.aborted) {\n throw new AbortError()\n }\n\n if (commandSubcommandPrefix === null) {\n // Fail closed and ask for user approval if the command prefix query failed (e.g. due to network error)\n // This is NOT the same as `fullCommandPrefix.commandPrefix === null`, which means no prefix was detected\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n }\n\n if (commandSubcommandPrefix.commandInjectionDetected) {\n // Only allow exact matches for potential command injections\n if (bashToolCommandHasExactMatchPermission(tool, command, allowedTools)) {\n return { result: true }\n } else {\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n }\n }\n\n // After the commandInjectionDetected check above, TypeScript still sees the union type.\n // We know commandInjectionDetected is false here, so commandPrefix exists.\n // Use 'in' check for proper type narrowing\n const commandPrefix =\n 'commandPrefix' in commandSubcommandPrefix\n ? commandSubcommandPrefix.commandPrefix\n : null\n\n // If there is only one command, no need to process subCommands\n if (subCommands.length < 2) {\n if (\n bashToolCommandHasPermission(tool, command, commandPrefix, allowedTools)\n ) {\n return { result: true }\n } else {\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n }\n }\n if (\n subCommands.every(subCommand => {\n const prefixResult =\n commandSubcommandPrefix.subcommandPrefixes.get(subCommand)\n if (prefixResult === undefined || prefixResult.commandInjectionDetected) {\n // If prefix result is missing or command injection is detected, always ask for permission\n return false\n }\n // After the check above, we know commandInjectionDetected is false\n // Use 'in' check for proper type narrowing\n const subCommandPrefix =\n 'commandPrefix' in prefixResult ? prefixResult.commandPrefix : null\n const hasPermission = bashToolCommandHasPermission(\n tool,\n subCommand,\n subCommandPrefix,\n allowedTools,\n )\n return hasPermission\n })\n ) {\n return { result: true }\n }\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n}\n\ntype PermissionResult = { result: true } | { result: false; message: string }\n\n/**\n * Get effective safety mode from context options\n * Handles backward compatibility with legacy safeMode boolean\n */\nfunction getEffectiveSafetyMode(options: {\n safeMode?: boolean\n safetyMode?: SafetyMode\n}): SafetyMode {\n // New safetyMode takes precedence\n if (options.safetyMode) {\n return options.safetyMode\n }\n // Backward compatibility: convert legacy safeMode boolean\n // safeMode: true \u2192 'strict' (old behavior)\n // safeMode: false \u2192 'yolo' (permissive)\n if (options.safeMode === true) {\n return 'strict'\n }\n // Default to 'yolo' for non-technical users (zero interruption)\n return 'yolo'\n}\n\n/**\n * Check if a tool should be allowed based on safety mode and risk level\n *\n * Safety Mode Matrix:\n * | Mode | Safe Tools | Monitored Tools | Dangerous Tools |\n * |--------|------------|-----------------|-----------------|\n * | yolo | \u2713 allow | \u2713 allow | \u2713 allow |\n * | smart | \u2713 allow | \u2713 allow | \u26A0 ask |\n * | strict | \u2713 allow | \u26A0 ask | \u26A0 ask |\n */\nfunction shouldAllowByRiskLevel(\n safetyMode: SafetyMode,\n riskLevel: RiskLevel,\n): boolean {\n switch (safetyMode) {\n case 'yolo':\n // YOLO mode: allow everything\n return true\n case 'smart':\n // Smart mode: allow safe and monitored, ask for dangerous\n return riskLevel === 'safe' || riskLevel === 'monitored'\n case 'strict':\n // Strict mode: only allow safe tools\n return riskLevel === 'safe'\n }\n}\n\nexport const hasPermissionsToUseTool: CanUseToolFn = async (\n tool,\n input,\n context,\n _assistantMessage,\n): Promise<PermissionResult> => {\n const safetyMode = getEffectiveSafetyMode(context.options)\n\n // Get risk level for this tool (with command-specific classification for Bash)\n const riskLevel = getToolRiskLevel(\n tool.name,\n input as { command?: string } | undefined,\n )\n\n // Check if this tool should be auto-allowed based on safety mode and risk level\n if (shouldAllowByRiskLevel(safetyMode, riskLevel)) {\n return { result: true }\n }\n\n if (context.abortController.signal.aborted) {\n throw new AbortError()\n }\n\n // Check if the tool needs permissions\n try {\n if (!tool.needsPermissions(input as never)) {\n return { result: true }\n }\n } catch (e) {\n logError(`Error checking permissions: ${e}`)\n return { result: false, message: 'Error checking permissions' }\n }\n\n const projectConfig = getCurrentProjectConfig()\n const allowedTools = projectConfig.allowedTools ?? []\n // Special case for BashTool to allow blanket commands without exposing them in the UI\n if (tool === BashTool && allowedTools.includes(BashTool.name)) {\n return { result: true }\n }\n\n // TODO: Move this into tool definitions (done for read tools!)\n switch (tool) {\n // For bash tool, check each sub-command's permissions separately\n case BashTool: {\n // The types have already been validated by the tool,\n // so we can safely parse the input (as opposed to safeParse).\n const { command } = inputSchema.parse(input)\n return await bashToolHasPermission(tool, command, context, allowedTools)\n }\n // For file editing tools, check session-only permissions\n case FileEditTool:\n case FileWriteTool:\n case NotebookEditTool: {\n // The types have already been validated by the tool,\n // so we can safely pass this in\n if (!tool.needsPermissions(input)) {\n return { result: true }\n }\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n }\n // For other tools, check persistent permissions\n default: {\n const permissionKey = getPermissionKey(tool, input, null)\n if (allowedTools.includes(permissionKey)) {\n return { result: true }\n }\n\n return {\n result: false,\n message: `${PRODUCT_NAME} requested permissions to use ${tool.name}, but you haven't granted it yet.`,\n }\n }\n }\n}\n\nexport async function savePermission(\n tool: Tool,\n input: { [k: string]: unknown },\n prefix: string | null,\n): Promise<void> {\n const key = getPermissionKey(tool, input, prefix)\n\n // For file editing tools, store write permissions only in memory\n if (\n tool === FileEditTool ||\n tool === FileWriteTool ||\n tool === NotebookEditTool\n ) {\n grantWritePermissionForOriginalDir()\n return\n }\n\n // For other tools, store permissions on disk\n const projectConfig = getCurrentProjectConfig()\n if (projectConfig.allowedTools.includes(key)) {\n return\n }\n\n projectConfig.allowedTools.push(key)\n projectConfig.allowedTools.sort()\n\n saveCurrentProjectConfig(projectConfig)\n}\n\nfunction getPermissionKey(\n tool: Tool,\n input: { [k: string]: unknown },\n prefix: string | null,\n): string {\n switch (tool) {\n case BashTool:\n if (prefix) {\n return `${BashTool.name}(${prefix}:*)`\n }\n return `${BashTool.name}(${BashTool.renderToolUseMessage(input as never)})`\n default:\n return tool.name\n }\n}\n"],
5
+ "mappings": "AAEA,SAAS,UAAU,mBAAmB;AACtC,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,wBAAwB;AACjC,SAAS,4BAA4B,oBAAoB;AACzD;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;AACzB,SAAS,0CAA0C;AACnD,SAAS,cAAc;AACvB,SAAS,oBAAoB;AAC7B;AAAA,EACE;AAAA,OAEK;AAGP,MAAM,gBAAgB,oBAAI,IAAI;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,MAAM,yCAAyC,CACpD,MACA,SACA,iBACY;AACZ,MAAI,cAAc,IAAI,OAAO,GAAG;AAC9B,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,SAAS,iBAAiB,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG;AACpE,WAAO;AAAA,EACT;AAEA,MAAI,aAAa,SAAS,iBAAiB,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG;AACvE,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,MAAM,+BAA+B,CAC1C,MACA,SACA,QACA,iBACY;AAEZ,MAAI,uCAAuC,MAAM,SAAS,YAAY,GAAG;AACvE,WAAO;AAAA,EACT;AACA,SAAO,aAAa,SAAS,iBAAiB,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC;AAC1E;AAEO,MAAM,wBAAwB,OACnC,MACA,SACA,SACA,cACA,+BAA+B,+BACD;AAC9B,MAAI,uCAAuC,MAAM,SAAS,YAAY,GAAG;AAEvE,WAAO,EAAE,QAAQ,KAAK;AAAA,EACxB;AAEA,QAAM,cAAc,aAAa,OAAO,EAAE,OAAO,OAAK;AAEpD,QAAI,MAAM,MAAM,OAAO,CAAC,IAAI;AAC1B,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,CAAC;AACD,QAAM,0BAA0B,MAAM;AAAA,IACpC;AAAA,IACA,QAAQ,gBAAgB;AAAA,EAC1B;AACA,MAAI,QAAQ,gBAAgB,OAAO,SAAS;AAC1C,UAAM,IAAI,WAAW;AAAA,EACvB;AAEA,MAAI,4BAA4B,MAAM;AAGpC,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,SAAS,GAAG,YAAY,iCAAiC,KAAK,IAAI;AAAA,IACpE;AAAA,EACF;AAEA,MAAI,wBAAwB,0BAA0B;AAEpD,QAAI,uCAAuC,MAAM,SAAS,YAAY,GAAG;AACvE,aAAO,EAAE,QAAQ,KAAK;AAAA,IACxB,OAAO;AACL,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS,GAAG,YAAY,iCAAiC,KAAK,IAAI;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AAKA,QAAM,gBACJ,mBAAmB,0BACf,wBAAwB,gBACxB;AAGN,MAAI,YAAY,SAAS,GAAG;AAC1B,QACE,6BAA6B,MAAM,SAAS,eAAe,YAAY,GACvE;AACA,aAAO,EAAE,QAAQ,KAAK;AAAA,IACxB,OAAO;AACL,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS,GAAG,YAAY,iCAAiC,KAAK,IAAI;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AACA,MACE,YAAY,MAAM,gBAAc;AAC9B,UAAM,eACJ,wBAAwB,mBAAmB,IAAI,UAAU;AAC3D,QAAI,iBAAiB,UAAa,aAAa,0BAA0B;AAEvE,aAAO;AAAA,IACT;AAGA,UAAM,mBACJ,mBAAmB,eAAe,aAAa,gBAAgB;AACjE,UAAM,gBAAgB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC,GACD;AACA,WAAO,EAAE,QAAQ,KAAK;AAAA,EACxB;AACA,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,SAAS,GAAG,YAAY,iCAAiC,KAAK,IAAI;AAAA,EACpE;AACF;AAQA,SAAS,uBAAuB,SAGjB;AAEb,MAAI,QAAQ,YAAY;AACtB,WAAO,QAAQ;AAAA,EACjB;AAIA,MAAI,QAAQ,aAAa,MAAM;AAC7B,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAYA,SAAS,uBACP,YACA,WACS;AACT,UAAQ,YAAY;AAAA,IAClB,KAAK;AAEH,aAAO;AAAA,IACT,KAAK;AAEH,aAAO,cAAc,UAAU,cAAc;AAAA,IAC/C,KAAK;AAEH,aAAO,cAAc;AAAA,EACzB;AACF;AAEO,MAAM,0BAAwC,OACnD,MACA,OACA,SACA,sBAC8B;AAC9B,QAAM,aAAa,uBAAuB,QAAQ,OAAO;AAGzD,QAAM,YAAY;AAAA,IAChB,KAAK;AAAA,IACL;AAAA,EACF;AAGA,MAAI,uBAAuB,YAAY,SAAS,GAAG;AACjD,WAAO,EAAE,QAAQ,KAAK;AAAA,EACxB;AAEA,MAAI,QAAQ,gBAAgB,OAAO,SAAS;AAC1C,UAAM,IAAI,WAAW;AAAA,EACvB;AAGA,MAAI;AACF,QAAI,CAAC,KAAK,iBAAiB,KAAc,GAAG;AAC1C,aAAO,EAAE,QAAQ,KAAK;AAAA,IACxB;AAAA,EACF,SAAS,GAAG;AACV,aAAS,+BAA+B,CAAC,EAAE;AAC3C,WAAO,EAAE,QAAQ,OAAO,SAAS,6BAA6B;AAAA,EAChE;AAEA,QAAM,gBAAgB,wBAAwB;AAC9C,QAAM,eAAe,cAAc,gBAAgB,CAAC;AAEpD,MAAI,SAAS,YAAY,aAAa,SAAS,SAAS,IAAI,GAAG;AAC7D,WAAO,EAAE,QAAQ,KAAK;AAAA,EACxB;AAGA,UAAQ,MAAM;AAAA;AAAA,IAEZ,KAAK,UAAU;AAGb,YAAM,EAAE,QAAQ,IAAI,YAAY,MAAM,KAAK;AAC3C,aAAO,MAAM,sBAAsB,MAAM,SAAS,SAAS,YAAY;AAAA,IACzE;AAAA;AAAA,IAEA,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK,kBAAkB;AAGrB,UAAI,CAAC,KAAK,iBAAiB,KAAK,GAAG;AACjC,eAAO,EAAE,QAAQ,KAAK;AAAA,MACxB;AACA,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS,GAAG,YAAY,iCAAiC,KAAK,IAAI;AAAA,MACpE;AAAA,IACF;AAAA;AAAA,IAEA,SAAS;AACP,YAAM,gBAAgB,iBAAiB,MAAM,OAAO,IAAI;AACxD,UAAI,aAAa,SAAS,aAAa,GAAG;AACxC,eAAO,EAAE,QAAQ,KAAK;AAAA,MACxB;AAEA,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS,GAAG,YAAY,iCAAiC,KAAK,IAAI;AAAA,MACpE;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAsB,eACpB,MACA,OACA,QACe;AACf,QAAM,MAAM,iBAAiB,MAAM,OAAO,MAAM;AAGhD,MACE,SAAS,gBACT,SAAS,iBACT,SAAS,kBACT;AACA,uCAAmC;AACnC;AAAA,EACF;AAGA,QAAM,gBAAgB,wBAAwB;AAC9C,MAAI,cAAc,aAAa,SAAS,GAAG,GAAG;AAC5C;AAAA,EACF;AAEA,gBAAc,aAAa,KAAK,GAAG;AACnC,gBAAc,aAAa,KAAK;AAEhC,2BAAyB,aAAa;AACxC;AAEA,SAAS,iBACP,MACA,OACA,QACQ;AACR,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,UAAI,QAAQ;AACV,eAAO,GAAG,SAAS,IAAI,IAAI,MAAM;AAAA,MACnC;AACA,aAAO,GAAG,SAAS,IAAI,IAAI,SAAS,qBAAqB,KAAc,CAAC;AAAA,IAC1E;AACE,aAAO,KAAK;AAAA,EAChB;AACF;",
6
6
  "names": []
7
7
  }