@within-7/minto 0.3.9 → 0.4.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 (383) hide show
  1. package/dist/Tool.js.map +2 -2
  2. package/dist/commands/agents/AgentsCommand.js +461 -657
  3. package/dist/commands/agents/AgentsCommand.js.map +2 -2
  4. package/dist/commands/agents/types.js +1 -0
  5. package/dist/commands/agents/types.js.map +2 -2
  6. package/dist/commands/agents/utils/fileOperations.js +96 -36
  7. package/dist/commands/agents/utils/fileOperations.js.map +3 -3
  8. package/dist/commands/agents/utils/index.js +3 -1
  9. package/dist/commands/agents/utils/index.js.map +2 -2
  10. package/dist/commands/context.js +54 -23
  11. package/dist/commands/context.js.map +2 -2
  12. package/dist/commands/ctx_viz.js +1 -1
  13. package/dist/commands/effort.js +87 -0
  14. package/dist/commands/effort.js.map +7 -0
  15. package/dist/commands/export.js +684 -94
  16. package/dist/commands/export.js.map +2 -2
  17. package/dist/commands/ide.js +18 -0
  18. package/dist/commands/ide.js.map +7 -0
  19. package/dist/commands/language.js +19 -46
  20. package/dist/commands/language.js.map +2 -2
  21. package/dist/commands/mcp-interactive.js +425 -217
  22. package/dist/commands/mcp-interactive.js.map +2 -2
  23. package/dist/commands/memory.js +168 -0
  24. package/dist/commands/memory.js.map +7 -0
  25. package/dist/commands/model.js +457 -65
  26. package/dist/commands/model.js.map +2 -2
  27. package/dist/commands/outputStyle.js +64 -0
  28. package/dist/commands/outputStyle.js.map +7 -0
  29. package/dist/commands/permissions.js +75 -49
  30. package/dist/commands/permissions.js.map +2 -2
  31. package/dist/commands/plugin/utils.js +33 -1
  32. package/dist/commands/plugin/utils.js.map +2 -2
  33. package/dist/commands/plugin.js +891 -185
  34. package/dist/commands/plugin.js.map +3 -3
  35. package/dist/commands/refreshCommands.js +2 -0
  36. package/dist/commands/refreshCommands.js.map +2 -2
  37. package/dist/commands/resume.js +1 -1
  38. package/dist/commands/resume.js.map +1 -1
  39. package/dist/commands/review.js +51 -0
  40. package/dist/commands/review.js.map +7 -0
  41. package/dist/commands/sandbox.js +168 -70
  42. package/dist/commands/sandbox.js.map +2 -2
  43. package/dist/commands/setup.js +593 -107
  44. package/dist/commands/setup.js.map +2 -2
  45. package/dist/commands/stats.js +188 -131
  46. package/dist/commands/stats.js.map +2 -2
  47. package/dist/commands/status.js +75 -13
  48. package/dist/commands/status.js.map +2 -2
  49. package/dist/commands/terminalSetup.js +6 -0
  50. package/dist/commands/terminalSetup.js.map +2 -2
  51. package/dist/commands/undo.js +146 -174
  52. package/dist/commands/undo.js.map +2 -2
  53. package/dist/commands/vim.js +22 -0
  54. package/dist/commands/vim.js.map +7 -0
  55. package/dist/commands.js +12 -0
  56. package/dist/commands.js.map +2 -2
  57. package/dist/components/Help.js +165 -32
  58. package/dist/components/Help.js.map +2 -2
  59. package/dist/components/HighlightedCode.js +1 -0
  60. package/dist/components/HighlightedCode.js.map +2 -2
  61. package/dist/components/InfoPanel/InfoPanel.js +123 -0
  62. package/dist/components/InfoPanel/InfoPanel.js.map +7 -0
  63. package/dist/components/InfoPanel/index.js +5 -0
  64. package/dist/components/InfoPanel/index.js.map +7 -0
  65. package/dist/components/InfoPanel/types.js +1 -0
  66. package/dist/components/InfoPanel/types.js.map +7 -0
  67. package/dist/components/ModelSelector/BrandTextInput.js +43 -0
  68. package/dist/components/ModelSelector/BrandTextInput.js.map +7 -0
  69. package/dist/components/ModelSelector/ModelSelector.js +590 -565
  70. package/dist/components/ModelSelector/ModelSelector.js.map +2 -2
  71. package/dist/components/ModelSelector/WizardContainer.js +45 -0
  72. package/dist/components/ModelSelector/WizardContainer.js.map +7 -0
  73. package/dist/components/ModelSelector/index.js +1 -3
  74. package/dist/components/ModelSelector/index.js.map +2 -2
  75. package/dist/components/PromptInput.js +26 -11
  76. package/dist/components/PromptInput.js.map +2 -2
  77. package/dist/components/PulseLabel.js +44 -0
  78. package/dist/components/PulseLabel.js.map +7 -0
  79. package/dist/components/RequestStatusIndicator.js +1 -1
  80. package/dist/components/RequestStatusIndicator.js.map +1 -1
  81. package/dist/components/SimpleSelector/SimpleSelector.js +154 -0
  82. package/dist/components/SimpleSelector/SimpleSelector.js.map +7 -0
  83. package/dist/components/SimpleSelector/index.js +5 -0
  84. package/dist/components/SimpleSelector/index.js.map +7 -0
  85. package/dist/components/SimpleSelector/types.js +1 -0
  86. package/dist/components/SimpleSelector/types.js.map +7 -0
  87. package/dist/components/Spinner.js +12 -42
  88. package/dist/components/Spinner.js.map +3 -3
  89. package/dist/components/StartupStatus.js +57 -0
  90. package/dist/components/StartupStatus.js.map +7 -0
  91. package/dist/components/StatusOverlayContent.js +21 -0
  92. package/dist/components/StatusOverlayContent.js.map +7 -0
  93. package/dist/components/SubagentBlock.js +43 -6
  94. package/dist/components/SubagentBlock.js.map +2 -2
  95. package/dist/components/TabbedListView/ScrollableList.js +31 -5
  96. package/dist/components/TabbedListView/ScrollableList.js.map +2 -2
  97. package/dist/components/TabbedListView/TabBar.js +13 -8
  98. package/dist/components/TabbedListView/TabBar.js.map +2 -2
  99. package/dist/components/TabbedListView/TabbedListView.js +123 -48
  100. package/dist/components/TabbedListView/TabbedListView.js.map +2 -2
  101. package/dist/components/TodoPanel.js +1 -1
  102. package/dist/components/TodoPanel.js.map +1 -1
  103. package/dist/components/ToolUseLoader.js +5 -0
  104. package/dist/components/ToolUseLoader.js.map +2 -2
  105. package/dist/components/TrustDialog.js +0 -2
  106. package/dist/components/TrustDialog.js.map +2 -2
  107. package/dist/components/messages/TaskInModuleView.js +1 -1
  108. package/dist/components/messages/TaskInModuleView.js.map +2 -2
  109. package/dist/components/messages/TaskToolMessage.js +1 -1
  110. package/dist/components/messages/TaskToolMessage.js.map +2 -2
  111. package/dist/components/messages/UserPromptMessage.js +6 -1
  112. package/dist/components/messages/UserPromptMessage.js.map +2 -2
  113. package/dist/constants/modelCapabilities.js +103 -18
  114. package/dist/constants/modelCapabilities.js.map +2 -2
  115. package/dist/constants/product.js +2 -0
  116. package/dist/constants/product.js.map +2 -2
  117. package/dist/constants/prompts/agentPrompt.js +30 -0
  118. package/dist/constants/prompts/agentPrompt.js.map +7 -0
  119. package/dist/constants/prompts/codeConventions.js +27 -0
  120. package/dist/constants/prompts/codeConventions.js.map +7 -0
  121. package/dist/constants/prompts/doingTasks.js +15 -0
  122. package/dist/constants/prompts/doingTasks.js.map +7 -0
  123. package/dist/constants/prompts/envInfo.js +17 -0
  124. package/dist/constants/prompts/envInfo.js.map +7 -0
  125. package/dist/constants/prompts/executingWithCare.js +17 -0
  126. package/dist/constants/prompts/executingWithCare.js.map +7 -0
  127. package/dist/constants/prompts/identity.js +10 -0
  128. package/dist/constants/prompts/identity.js.map +7 -0
  129. package/dist/constants/prompts/index.js +78 -0
  130. package/dist/constants/prompts/index.js.map +7 -0
  131. package/dist/constants/prompts/taskManagement.js +60 -0
  132. package/dist/constants/prompts/taskManagement.js.map +7 -0
  133. package/dist/constants/prompts/toneAndStyle.js +62 -0
  134. package/dist/constants/prompts/toneAndStyle.js.map +7 -0
  135. package/dist/constants/prompts/toolUsagePolicy.js +38 -0
  136. package/dist/constants/prompts/toolUsagePolicy.js.map +7 -0
  137. package/dist/constants/prompts.js +5 -176
  138. package/dist/constants/prompts.js.map +2 -2
  139. package/dist/constants/providerRegistry.js +235 -0
  140. package/dist/constants/providerRegistry.js.map +7 -0
  141. package/dist/constants/providers.js +35 -0
  142. package/dist/constants/providers.js.map +7 -0
  143. package/dist/context/PermissionContext.js +0 -1
  144. package/dist/context/PermissionContext.js.map +2 -2
  145. package/dist/context.js +87 -31
  146. package/dist/context.js.map +2 -2
  147. package/dist/core/backupHook.js +29 -0
  148. package/dist/core/backupHook.js.map +7 -0
  149. package/dist/core/config/defaults.js +11 -2
  150. package/dist/core/config/defaults.js.map +2 -2
  151. package/dist/core/config/schema.js +21 -3
  152. package/dist/core/config/schema.js.map +2 -2
  153. package/dist/core/costTracker.js +18 -16
  154. package/dist/core/costTracker.js.map +2 -2
  155. package/dist/core/index.js +0 -1
  156. package/dist/core/index.js.map +2 -2
  157. package/dist/core/tokenStatsManager.js +22 -4
  158. package/dist/core/tokenStatsManager.js.map +2 -2
  159. package/dist/cost-tracker.js +0 -16
  160. package/dist/cost-tracker.js.map +2 -2
  161. package/dist/entrypoints/bootstrap.js +3 -1
  162. package/dist/entrypoints/bootstrap.js.map +2 -2
  163. package/dist/entrypoints/cli.js +81 -68
  164. package/dist/entrypoints/cli.js.map +2 -2
  165. package/dist/hooks/useAgentTokenStats.js +1 -1
  166. package/dist/hooks/useAgentTokenStats.js.map +2 -2
  167. package/dist/hooks/useAgentTranscripts.js +2 -1
  168. package/dist/hooks/useAgentTranscripts.js.map +2 -2
  169. package/dist/hooks/useBackgroundShells.js +29 -0
  170. package/dist/hooks/useBackgroundShells.js.map +7 -0
  171. package/dist/hooks/useCanUseTool.js +1 -1
  172. package/dist/hooks/useCanUseTool.js.map +2 -2
  173. package/dist/hooks/useDeferredLoading.js +64 -0
  174. package/dist/hooks/useDeferredLoading.js.map +7 -0
  175. package/dist/hooks/useHookStatus.js +1 -1
  176. package/dist/hooks/useHookStatus.js.map +2 -2
  177. package/dist/hooks/useSessionTracking.js +55 -0
  178. package/dist/hooks/useSessionTracking.js.map +7 -0
  179. package/dist/hooks/useTerminalSize.js +21 -0
  180. package/dist/hooks/useTerminalSize.js.map +2 -2
  181. package/dist/hooks/useTextInput.js +1 -0
  182. package/dist/hooks/useTextInput.js.map +2 -2
  183. package/dist/hooks/useUnifiedCompletion.js +3 -2
  184. package/dist/hooks/useUnifiedCompletion.js.map +2 -2
  185. package/dist/i18n/locales/en.js +299 -1
  186. package/dist/i18n/locales/en.js.map +2 -2
  187. package/dist/i18n/locales/zh-CN.js +300 -2
  188. package/dist/i18n/locales/zh-CN.js.map +2 -2
  189. package/dist/i18n/types.js.map +1 -1
  190. package/dist/messages.js +41 -17
  191. package/dist/messages.js.map +2 -2
  192. package/dist/permissions.js +94 -1
  193. package/dist/permissions.js.map +2 -2
  194. package/dist/query.js +27 -19
  195. package/dist/query.js.map +2 -2
  196. package/dist/screens/REPL.js +83 -74
  197. package/dist/screens/REPL.js.map +2 -2
  198. package/dist/services/adapters/responsesAPI.js +6 -0
  199. package/dist/services/adapters/responsesAPI.js.map +2 -2
  200. package/dist/services/agentTeams/index.js +35 -0
  201. package/dist/services/agentTeams/index.js.map +7 -0
  202. package/dist/services/agentTeams/mailbox.js +114 -0
  203. package/dist/services/agentTeams/mailbox.js.map +7 -0
  204. package/dist/services/agentTeams/teamManager.js +149 -0
  205. package/dist/services/agentTeams/teamManager.js.map +7 -0
  206. package/dist/services/agentTeams/teamTaskStore.js +114 -0
  207. package/dist/services/agentTeams/teamTaskStore.js.map +7 -0
  208. package/dist/services/agentTeams/teammateSpawner.js +80 -0
  209. package/dist/services/agentTeams/teammateSpawner.js.map +7 -0
  210. package/dist/services/checkpointManager.js +16 -3
  211. package/dist/services/checkpointManager.js.map +2 -2
  212. package/dist/services/claude.js +19 -1728
  213. package/dist/services/claude.js.map +3 -3
  214. package/dist/services/customCommands.js +30 -8
  215. package/dist/services/customCommands.js.map +2 -2
  216. package/dist/services/gpt5ConnectionTest.js +4 -2
  217. package/dist/services/gpt5ConnectionTest.js.map +2 -2
  218. package/dist/services/hookExecutor.js +411 -127
  219. package/dist/services/hookExecutor.js.map +2 -2
  220. package/dist/services/llm/anthropicProvider.js +807 -0
  221. package/dist/services/llm/anthropicProvider.js.map +7 -0
  222. package/dist/services/llm/dispatch.js +218 -0
  223. package/dist/services/llm/dispatch.js.map +7 -0
  224. package/dist/services/llm/index.js +44 -0
  225. package/dist/services/llm/index.js.map +7 -0
  226. package/dist/services/llm/mintoContext.js +69 -0
  227. package/dist/services/llm/mintoContext.js.map +7 -0
  228. package/dist/services/llm/openaiProvider.js +622 -0
  229. package/dist/services/llm/openaiProvider.js.map +7 -0
  230. package/dist/services/llm/types.js +157 -0
  231. package/dist/services/llm/types.js.map +7 -0
  232. package/dist/services/mcpClient.js +183 -33
  233. package/dist/services/mcpClient.js.map +2 -2
  234. package/dist/services/notifier.js +14 -0
  235. package/dist/services/notifier.js.map +2 -2
  236. package/dist/services/oauth.js +4 -2
  237. package/dist/services/oauth.js.map +2 -2
  238. package/dist/services/openai.js +66 -56
  239. package/dist/services/openai.js.map +3 -3
  240. package/dist/services/outputStyles.js +102 -21
  241. package/dist/services/outputStyles.js.map +2 -2
  242. package/dist/services/plugins/lspServers.js +1 -1
  243. package/dist/services/plugins/lspServers.js.map +2 -2
  244. package/dist/services/plugins/pluginRuntime.js +2 -1
  245. package/dist/services/plugins/pluginRuntime.js.map +2 -2
  246. package/dist/services/plugins/pluginValidation.js +10 -3
  247. package/dist/services/plugins/pluginValidation.js.map +2 -2
  248. package/dist/services/plugins/skillMarketplace.js +20 -9
  249. package/dist/services/plugins/skillMarketplace.js.map +2 -2
  250. package/dist/services/sentry.js +1 -1
  251. package/dist/services/sentry.js.map +2 -2
  252. package/dist/services/sessionMemory.js +16 -3
  253. package/dist/services/sessionMemory.js.map +2 -2
  254. package/dist/services/systemReminder.js +367 -9
  255. package/dist/services/systemReminder.js.map +2 -2
  256. package/dist/services/taskStore.js +19 -0
  257. package/dist/services/taskStore.js.map +2 -2
  258. package/dist/tools/ArchitectTool/ArchitectTool.js.map +1 -1
  259. package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js.map +1 -1
  260. package/dist/tools/BashOutputTool/BashOutputTool.js.map +1 -1
  261. package/dist/tools/BashTool/BashTool.js +28 -0
  262. package/dist/tools/BashTool/BashTool.js.map +2 -2
  263. package/dist/tools/FileEditTool/FileEditTool.js +8 -1
  264. package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
  265. package/dist/tools/FileReadTool/FileReadTool.js +14 -0
  266. package/dist/tools/FileReadTool/FileReadTool.js.map +2 -2
  267. package/dist/tools/FileWriteTool/FileWriteTool.js +10 -1
  268. package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
  269. package/dist/tools/GlobTool/GlobTool.js.map +1 -1
  270. package/dist/tools/GrepTool/GrepTool.js.map +1 -1
  271. package/dist/tools/KillShellTool/KillShellTool.js.map +1 -1
  272. package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js.map +2 -2
  273. package/dist/tools/LspTool/LspTool.js +11 -2
  274. package/dist/tools/LspTool/LspTool.js.map +2 -2
  275. package/dist/tools/MCPTool/MCPTool.js.map +1 -1
  276. package/dist/tools/MemoryReadTool/MemoryReadTool.js +2 -1
  277. package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +2 -2
  278. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +2 -1
  279. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +2 -2
  280. package/dist/tools/MultiEditTool/MultiEditTool.js +7 -0
  281. package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
  282. package/dist/tools/NotebookEditTool/NotebookEditTool.js +2 -0
  283. package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
  284. package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +1 -1
  285. package/dist/tools/PlanModeTool/EnterPlanModeTool.js +8 -2
  286. package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +2 -2
  287. package/dist/tools/PlanModeTool/ExitPlanModeTool.js +2 -0
  288. package/dist/tools/PlanModeTool/ExitPlanModeTool.js.map +2 -2
  289. package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js.map +1 -1
  290. package/dist/tools/SlashCommandTool/SlashCommandTool.js +174 -18
  291. package/dist/tools/SlashCommandTool/SlashCommandTool.js.map +3 -3
  292. package/dist/tools/TaskCreateTool/TaskCreateTool.js.map +1 -1
  293. package/dist/tools/TaskGetTool/TaskGetTool.js.map +1 -1
  294. package/dist/tools/TaskListTool/TaskListTool.js.map +1 -1
  295. package/dist/tools/TaskOutputTool/TaskOutputTool.js.map +1 -1
  296. package/dist/tools/TaskStopTool/TaskStopTool.js.map +1 -1
  297. package/dist/tools/TaskTool/TaskTool.js +84 -11
  298. package/dist/tools/TaskTool/TaskTool.js.map +2 -2
  299. package/dist/tools/TaskTool/prompt.js +12 -6
  300. package/dist/tools/TaskTool/prompt.js.map +2 -2
  301. package/dist/tools/TaskUpdateTool/TaskUpdateTool.js.map +1 -1
  302. package/dist/tools/ThinkTool/ThinkTool.js.map +1 -1
  303. package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +1 -1
  304. package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +1 -1
  305. package/dist/tools/WebSearchTool/WebSearchTool.js.map +1 -1
  306. package/dist/tools/WebSearchTool/searchProviders.js +2 -1
  307. package/dist/tools/WebSearchTool/searchProviders.js.map +2 -2
  308. package/dist/tools/lsTool/lsTool.js.map +2 -2
  309. package/dist/tools/lsTool/prompt.js.map +1 -1
  310. package/dist/tools.js +14 -3
  311. package/dist/tools.js.map +2 -2
  312. package/dist/types/PermissionMode.js +21 -1
  313. package/dist/types/PermissionMode.js.map +2 -2
  314. package/dist/types/agentTeams.js +1 -0
  315. package/dist/types/agentTeams.js.map +7 -0
  316. package/dist/types/hooks.js +8 -2
  317. package/dist/types/hooks.js.map +2 -2
  318. package/dist/types/plugin.js +3 -5
  319. package/dist/types/plugin.js.map +2 -2
  320. package/dist/utils/agentHookExecutor.js +1 -4
  321. package/dist/utils/agentHookExecutor.js.map +2 -2
  322. package/dist/utils/agentLoader.js +91 -15
  323. package/dist/utils/agentLoader.js.map +2 -2
  324. package/dist/utils/agentMemory.js.map +2 -2
  325. package/dist/utils/animationManager.js +1 -1
  326. package/dist/utils/animationManager.js.map +2 -2
  327. package/dist/utils/ask.js +1 -1
  328. package/dist/utils/async.js +5 -1
  329. package/dist/utils/async.js.map +2 -2
  330. package/dist/utils/autoCompactCore.js +60 -0
  331. package/dist/utils/autoCompactCore.js.map +2 -2
  332. package/dist/utils/claudeCodeSync.js +439 -0
  333. package/dist/utils/claudeCodeSync.js.map +7 -0
  334. package/dist/utils/config.js +27 -151
  335. package/dist/utils/config.js.map +2 -2
  336. package/dist/utils/configSchema.js +227 -0
  337. package/dist/utils/configSchema.js.map +7 -0
  338. package/dist/utils/debugLogger.js.map +2 -2
  339. package/dist/utils/env.js +4 -3
  340. package/dist/utils/env.js.map +2 -2
  341. package/dist/utils/envConfig.js +34 -0
  342. package/dist/utils/envConfig.js.map +3 -3
  343. package/dist/utils/execFileNoThrow.js +2 -1
  344. package/dist/utils/execFileNoThrow.js.map +2 -2
  345. package/dist/utils/gpt5.js +146 -0
  346. package/dist/utils/gpt5.js.map +7 -0
  347. package/dist/utils/hookManager.js +374 -140
  348. package/dist/utils/hookManager.js.map +2 -2
  349. package/dist/utils/markdown.js +47 -0
  350. package/dist/utils/markdown.js.map +2 -2
  351. package/dist/utils/marketplaceManager.js +80 -43
  352. package/dist/utils/marketplaceManager.js.map +2 -2
  353. package/dist/utils/memoizeWithTTL.js +25 -0
  354. package/dist/utils/memoizeWithTTL.js.map +7 -0
  355. package/dist/utils/messages.js +2 -2
  356. package/dist/utils/messages.js.map +2 -2
  357. package/dist/utils/model.js +34 -9
  358. package/dist/utils/model.js.map +2 -2
  359. package/dist/utils/pluginInstaller.js +68 -29
  360. package/dist/utils/pluginInstaller.js.map +2 -2
  361. package/dist/utils/pluginLoader.js +249 -57
  362. package/dist/utils/pluginLoader.js.map +2 -2
  363. package/dist/utils/repoFetcher.js +110 -0
  364. package/dist/utils/repoFetcher.js.map +7 -0
  365. package/dist/utils/safeFetch.js +45 -0
  366. package/dist/utils/safeFetch.js.map +7 -0
  367. package/dist/utils/skillLoader.js +77 -12
  368. package/dist/utils/skillLoader.js.map +2 -2
  369. package/dist/utils/streamingState.js +52 -0
  370. package/dist/utils/streamingState.js.map +7 -0
  371. package/dist/utils/stringSubstitution.js +4 -5
  372. package/dist/utils/stringSubstitution.js.map +2 -2
  373. package/dist/utils/style.js +6 -3
  374. package/dist/utils/style.js.map +2 -2
  375. package/dist/utils/teamConfig.js +162 -16
  376. package/dist/utils/teamConfig.js.map +2 -2
  377. package/dist/utils/terminal.js +1 -1
  378. package/dist/utils/terminal.js.map +2 -2
  379. package/dist/utils/toolRiskClassification.js +0 -6
  380. package/dist/utils/toolRiskClassification.js.map +2 -2
  381. package/dist/version.js +2 -2
  382. package/dist/version.js.map +1 -1
  383. package/package.json +7 -6
@@ -0,0 +1,51 @@
1
+ const review = {
2
+ name: "review",
3
+ description: "Review code changes (staged git diff or specified files)",
4
+ isEnabled: true,
5
+ isHidden: false,
6
+ type: "prompt",
7
+ progressMessage: "Reviewing code...",
8
+ userFacingName() {
9
+ return "review";
10
+ },
11
+ async getPromptForCommand(args) {
12
+ const target = args.trim();
13
+ if (target) {
14
+ return [
15
+ {
16
+ role: "user",
17
+ content: `Please review the following files or changes: ${target}
18
+
19
+ Perform a thorough code review. For each issue found:
20
+ 1. Identify the file and line
21
+ 2. Describe the issue (bug, style, performance, security, etc.)
22
+ 3. Suggest a fix
23
+
24
+ Also note any positive patterns worth highlighting. Be constructive and specific.`
25
+ }
26
+ ];
27
+ }
28
+ return [
29
+ {
30
+ role: "user",
31
+ content: `Please review the current git changes. Follow these steps:
32
+
33
+ 1. Run \`git diff --staged\` to see staged changes. If no staged changes, run \`git diff\` for unstaged changes.
34
+ 2. For each changed file, analyze the diff thoroughly.
35
+ 3. Report issues organized by severity:
36
+ - **Critical**: Bugs, security vulnerabilities, data loss risks
37
+ - **Important**: Logic errors, missing error handling, performance issues
38
+ - **Minor**: Style, naming, documentation gaps
39
+ 4. Note positive patterns worth highlighting.
40
+ 5. Provide a brief summary with overall assessment.
41
+
42
+ Be constructive, specific, and actionable.`
43
+ }
44
+ ];
45
+ }
46
+ };
47
+ var review_default = review;
48
+ export {
49
+ review_default as default
50
+ };
51
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/commands/review.ts"],
4
+ "sourcesContent": ["/**\n * /review command\n *\n * Prompt-type command that enters code review mode.\n * Reviews staged git changes or specified files.\n */\n\nimport type { MessageParam } from '@anthropic-ai/sdk/resources/index.mjs'\nimport type { Command } from '../commands'\n\nconst review: Command = {\n name: 'review',\n description: 'Review code changes (staged git diff or specified files)',\n isEnabled: true,\n isHidden: false,\n type: 'prompt',\n progressMessage: 'Reviewing code...',\n userFacingName() {\n return 'review'\n },\n async getPromptForCommand(args: string): Promise<MessageParam[]> {\n const target = args.trim()\n\n if (target) {\n return [\n {\n role: 'user',\n content: `Please review the following files or changes: ${target}\n\nPerform a thorough code review. For each issue found:\n1. Identify the file and line\n2. Describe the issue (bug, style, performance, security, etc.)\n3. Suggest a fix\n\nAlso note any positive patterns worth highlighting. Be constructive and specific.`,\n },\n ]\n }\n\n return [\n {\n role: 'user',\n content: `Please review the current git changes. Follow these steps:\n\n1. Run \\`git diff --staged\\` to see staged changes. If no staged changes, run \\`git diff\\` for unstaged changes.\n2. For each changed file, analyze the diff thoroughly.\n3. Report issues organized by severity:\n - **Critical**: Bugs, security vulnerabilities, data loss risks\n - **Important**: Logic errors, missing error handling, performance issues\n - **Minor**: Style, naming, documentation gaps\n4. Note positive patterns worth highlighting.\n5. Provide a brief summary with overall assessment.\n\nBe constructive, specific, and actionable.`,\n },\n ]\n },\n}\n\nexport default review\n"],
5
+ "mappings": "AAUA,MAAM,SAAkB;AAAA,EACtB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM;AAAA,EACN,iBAAiB;AAAA,EACjB,iBAAiB;AACf,WAAO;AAAA,EACT;AAAA,EACA,MAAM,oBAAoB,MAAuC;AAC/D,UAAM,SAAS,KAAK,KAAK;AAEzB,QAAI,QAAQ;AACV,aAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,SAAS,iDAAiD,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAQlE;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYX;AAAA,IACF;AAAA,EACF;AACF;AAEA,IAAO,iBAAQ;",
6
+ "names": []
7
+ }
@@ -1,68 +1,180 @@
1
1
  import React, { useState } from "react";
2
- import { Box, Text, useInput } from "ink";
3
2
  import {
4
3
  getSandboxController
5
4
  } from "../services/sandbox/index.js";
6
5
  import { getCwd } from "../utils/state.js";
7
6
  import { SEMANTIC_COLORS } from "../constants/colors.js";
8
- const SandboxStatus = ({
9
- config,
10
- implementation,
11
- isAvailable,
12
- onToggle,
13
- onDone
14
- }) => {
15
- const [showHelp, setShowHelp] = useState(false);
16
- useInput((input, key) => {
17
- if (input === "t" || input === "T") {
18
- onToggle();
19
- } else if (input === "h" || input === "H") {
20
- setShowHelp(!showHelp);
21
- } else if (input === "q" || key.escape) {
22
- onDone();
7
+ import { InfoPanel } from "../components/InfoPanel/index.js";
8
+ import { t } from "../i18n/index.js";
9
+ function getImplColor(impl) {
10
+ switch (impl) {
11
+ case "seatbelt":
12
+ return SEMANTIC_COLORS.success;
13
+ case "bubblewrap":
14
+ return SEMANTIC_COLORS.info;
15
+ case "docker":
16
+ return "#FFB86C";
17
+ case "none":
18
+ return SEMANTIC_COLORS.dim;
19
+ }
20
+ }
21
+ function getImplDescription(impl) {
22
+ switch (impl) {
23
+ case "seatbelt":
24
+ return "macOS sandbox-exec (built-in)";
25
+ case "bubblewrap":
26
+ return "Linux bubblewrap container";
27
+ case "docker":
28
+ return "Docker container isolation";
29
+ case "none":
30
+ return "No sandbox available";
31
+ }
32
+ }
33
+ function buildSections(config, implementation, isAvailable, showHelp) {
34
+ const sections = [];
35
+ const statusValue = config.enabled && isAvailable ? `\u25CF ${t("commands.sandbox.enabled")}` : `\u25CB ${t("commands.sandbox.disabled")}`;
36
+ const statusColor = config.enabled && isAvailable ? SEMANTIC_COLORS.success : SEMANTIC_COLORS.error;
37
+ const statusItems = [
38
+ { label: "Status", value: statusValue, valueColor: statusColor },
39
+ {
40
+ label: t("commands.sandbox.implementation"),
41
+ value: `${implementation.toUpperCase()} - ${getImplDescription(implementation)}`,
42
+ valueColor: getImplColor(implementation)
23
43
  }
44
+ ];
45
+ if (!isAvailable) {
46
+ statusItems.push({
47
+ label: "\u26A0",
48
+ value: t("commands.sandbox.notAvailable"),
49
+ valueColor: "#FFB86C"
50
+ });
51
+ }
52
+ sections.push({
53
+ title: t("commands.sandbox.statusSection"),
54
+ items: statusItems
24
55
  });
25
- const getImplColor = (impl) => {
26
- switch (impl) {
27
- case "seatbelt":
28
- return "green";
29
- case "bubblewrap":
30
- return "cyan";
31
- case "docker":
32
- return "yellow";
33
- case "none":
34
- return "gray";
56
+ const fsItems = [
57
+ {
58
+ label: "Write Allowed",
59
+ value: config.filesystem.writeAllowed.length > 0 ? config.filesystem.writeAllowed.slice(0, 3).join(", ") + (config.filesystem.writeAllowed.length > 3 ? " ..." : "") : "None",
60
+ valueColor: config.filesystem.writeAllowed.length > 0 ? SEMANTIC_COLORS.success : SEMANTIC_COLORS.error
61
+ },
62
+ {
63
+ label: "Denied Paths",
64
+ value: config.filesystem.denied.length > 0 ? `${config.filesystem.denied.length} paths blocked` : "None blocked",
65
+ valueColor: config.filesystem.denied.length > 0 ? SEMANTIC_COLORS.error : SEMANTIC_COLORS.success
35
66
  }
36
- };
37
- const getImplDescription = (impl) => {
38
- switch (impl) {
39
- case "seatbelt":
40
- return "macOS sandbox-exec (built-in)";
41
- case "bubblewrap":
42
- return "Linux bubblewrap container";
43
- case "docker":
44
- return "Docker container isolation";
45
- case "none":
46
- return "No sandbox available";
67
+ ];
68
+ sections.push({
69
+ title: t("commands.sandbox.filesystemPolicy"),
70
+ items: fsItems
71
+ });
72
+ const netItems = [
73
+ {
74
+ label: "Network Access",
75
+ value: config.network.blockAll ? "Blocked" : "Allowed",
76
+ valueColor: config.network.blockAll ? SEMANTIC_COLORS.error : SEMANTIC_COLORS.success
47
77
  }
78
+ ];
79
+ if (!config.network.blockAll && config.network.allowedDomains.length > 0) {
80
+ netItems.push({
81
+ label: "Allowed Domains",
82
+ value: config.network.allowedDomains.slice(0, 3).join(", ") + (config.network.allowedDomains.length > 3 ? " ..." : "")
83
+ });
84
+ }
85
+ sections.push({ title: t("commands.sandbox.networkPolicy"), items: netItems });
86
+ sections.push({
87
+ title: t("commands.sandbox.processPolicy"),
88
+ items: [
89
+ {
90
+ label: "Max Exec Time",
91
+ value: `${config.process.maxExecutionTime / 1e3}s`
92
+ },
93
+ {
94
+ label: "Excluded Cmds",
95
+ value: config.process.excludedCommands.length > 0 ? config.process.excludedCommands.slice(0, 3).join(", ") + (config.process.excludedCommands.length > 3 ? " ..." : "") : "None"
96
+ }
97
+ ]
98
+ });
99
+ if (showHelp) {
100
+ sections.push({
101
+ title: t("commands.sandbox.helpSection"),
102
+ items: [
103
+ {
104
+ label: "\u2022 seatbelt",
105
+ value: "macOS built-in sandbox-exec",
106
+ valueColor: SEMANTIC_COLORS.success
107
+ },
108
+ {
109
+ label: "\u2022 bubblewrap",
110
+ value: "Linux container isolation (bwrap)",
111
+ valueColor: SEMANTIC_COLORS.info
112
+ },
113
+ {
114
+ label: "\u2022 docker",
115
+ value: "Docker container isolation",
116
+ valueColor: "#FFB86C"
117
+ },
118
+ {
119
+ label: "\u2022 none",
120
+ value: "No sandboxing (not recommended)",
121
+ valueColor: SEMANTIC_COLORS.dim
122
+ }
123
+ ]
124
+ });
125
+ }
126
+ return sections;
127
+ }
128
+ const SandboxView = ({
129
+ initialConfig,
130
+ implementation,
131
+ initialAvailable,
132
+ onDone
133
+ }) => {
134
+ const [config, setConfig] = useState(initialConfig);
135
+ const [isAvailable, setIsAvailable] = useState(initialAvailable);
136
+ const [showHelp, setShowHelp] = useState(false);
137
+ const cwd = getCwd();
138
+ const controller = getSandboxController(cwd);
139
+ const handleToggle = async () => {
140
+ const newEnabled = !config.enabled;
141
+ controller.updateConfig({ enabled: newEnabled });
142
+ const newConfig = controller.getConfig();
143
+ setConfig(newConfig);
144
+ const available = await controller.isAvailable();
145
+ setIsAvailable(available);
48
146
  };
49
- return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { bold: true, color: "cyan" }, "Sandbox Configuration")), /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { bold: true }, "Status: "), config.enabled && isAvailable ? /* @__PURE__ */ React.createElement(Text, { color: "green" }, "\u25CF ENABLED") : /* @__PURE__ */ React.createElement(Text, { color: "red" }, "\u25CB DISABLED"))), /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { bold: true }, "Implementation: "), /* @__PURE__ */ React.createElement(Text, { color: getImplColor(implementation) }, implementation.toUpperCase())), /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, " ", "- ", getImplDescription(implementation))), !isAvailable && /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { color: "yellow" }, "\u26A0 Sandbox not available on this system")), /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { bold: true }, "Filesystem Policy:"), /* @__PURE__ */ React.createElement(Box, { paddingLeft: 2, flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "Write Allowed: "), config.filesystem.writeAllowed.length > 0 ? /* @__PURE__ */ React.createElement(Text, { color: "green" }, config.filesystem.writeAllowed.slice(0, 3).join(", "), config.filesystem.writeAllowed.length > 3 && " ...") : /* @__PURE__ */ React.createElement(Text, { color: "red" }, "None")), /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "Denied Paths: "), config.filesystem.denied.length > 0 ? /* @__PURE__ */ React.createElement(Text, { color: "red" }, config.filesystem.denied.length, " paths blocked") : /* @__PURE__ */ React.createElement(Text, { color: "green" }, "None blocked")))), /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { bold: true }, "Network Policy:"), /* @__PURE__ */ React.createElement(Box, { paddingLeft: 2, flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "Network Access: "), config.network.blockAll ? /* @__PURE__ */ React.createElement(Text, { color: "red" }, "Blocked") : /* @__PURE__ */ React.createElement(Text, { color: "green" }, "Allowed")), !config.network.blockAll && config.network.allowedDomains.length > 0 && /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "Allowed Domains: "), /* @__PURE__ */ React.createElement(Text, null, config.network.allowedDomains.slice(0, 3).join(", "), config.network.allowedDomains.length > 3 && " ...")))), /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { bold: true }, "Process Policy:"), /* @__PURE__ */ React.createElement(Box, { paddingLeft: 2, flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "Max Execution Time: "), /* @__PURE__ */ React.createElement(Text, null, config.process.maxExecutionTime / 1e3, "s")), /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "Excluded Commands: "), /* @__PURE__ */ React.createElement(Text, null, config.process.excludedCommands.length > 0 ? config.process.excludedCommands.slice(0, 3).join(", ") : "None", config.process.excludedCommands.length > 3 && " ...")))), showHelp && /* @__PURE__ */ React.createElement(
50
- Box,
147
+ const sections = buildSections(config, implementation, isAvailable, showHelp);
148
+ const actions = [
51
149
  {
52
- flexDirection: "column",
53
- marginY: 1,
54
- borderStyle: "round",
55
- paddingX: 1
150
+ key: "t",
151
+ keyLabel: "T",
152
+ description: t("commands.sandbox.toggle"),
153
+ onPress: handleToggle
56
154
  },
57
- /* @__PURE__ */ React.createElement(Text, { bold: true }, "Sandbox Implementations:"),
58
- /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", paddingLeft: 1 }, /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: "green" }, "\u2022 seatbelt:"), /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, " ", "macOS built-in sandbox-exec")), /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: "cyan" }, "\u2022 bubblewrap:"), /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, " ", "Linux container isolation (bwrap)")), /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: "yellow" }, "\u2022 docker:"), /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, " ", "Docker container isolation")), /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { color: "gray" }, "\u2022 none:"), /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, " ", "No sandboxing (not recommended)")))
59
- ), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "t: Toggle sandbox | h: Show/hide help | q/Esc: Exit")));
155
+ {
156
+ key: "h",
157
+ keyLabel: "H",
158
+ description: t("commands.sandbox.toggleHelp"),
159
+ onPress: () => setShowHelp(!showHelp)
160
+ }
161
+ ];
162
+ return /* @__PURE__ */ React.createElement(
163
+ InfoPanel,
164
+ {
165
+ title: t("commands.sandbox.title"),
166
+ sections,
167
+ actions,
168
+ onClose: onDone
169
+ }
170
+ );
60
171
  };
61
172
  const command = {
62
173
  name: "sandbox",
63
- description: "View and toggle sandbox mode for command execution",
174
+ description: t("commands.sandbox.description"),
64
175
  isEnabled: true,
65
176
  isHidden: false,
177
+ hidePromptInput: true,
66
178
  type: "local-jsx",
67
179
  userFacingName() {
68
180
  return this.name;
@@ -73,29 +185,15 @@ const command = {
73
185
  const initialConfig = controller.getConfig();
74
186
  const implementation = controller.getImplementationType();
75
187
  const initialAvailable = await controller.isAvailable();
76
- const SandboxWrapper = () => {
77
- const [config, setConfig] = useState(initialConfig);
78
- const [isAvailable, setIsAvailable] = useState(initialAvailable);
79
- const handleToggle = async () => {
80
- const newEnabled = !config.enabled;
81
- controller.updateConfig({ enabled: newEnabled });
82
- const newConfig = controller.getConfig();
83
- setConfig(newConfig);
84
- const available = await controller.isAvailable();
85
- setIsAvailable(available);
86
- };
87
- return /* @__PURE__ */ React.createElement(
88
- SandboxStatus,
89
- {
90
- config,
91
- implementation,
92
- isAvailable,
93
- onToggle: handleToggle,
94
- onDone
95
- }
96
- );
97
- };
98
- return /* @__PURE__ */ React.createElement(SandboxWrapper, null);
188
+ return /* @__PURE__ */ React.createElement(
189
+ SandboxView,
190
+ {
191
+ initialConfig,
192
+ implementation,
193
+ initialAvailable,
194
+ onDone
195
+ }
196
+ );
99
197
  }
100
198
  };
101
199
  var sandbox_default = command;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/commands/sandbox.tsx"],
4
- "sourcesContent": ["/**\n * Sandbox Command\n *\n * Toggle and configure sandbox mode for command execution.\n */\n\nimport React, { useState, useEffect } from 'react'\nimport { Box, Text, useInput } from 'ink'\nimport type { Command } from '@commands'\nimport {\n getSandboxController,\n type SandboxConfig,\n type SandboxImplementation,\n} from '../services/sandbox'\nimport { getCwd } from '@utils/state'\nimport { SEMANTIC_COLORS } from '@constants/colors'\n\ninterface SandboxStatusProps {\n config: SandboxConfig\n implementation: SandboxImplementation\n isAvailable: boolean\n onToggle: () => void\n onDone: () => void\n}\n\nconst SandboxStatus = ({\n config,\n implementation,\n isAvailable,\n onToggle,\n onDone,\n}: SandboxStatusProps) => {\n const [showHelp, setShowHelp] = useState(false)\n\n useInput((input, key) => {\n if (input === 't' || input === 'T') {\n onToggle()\n } else if (input === 'h' || input === 'H') {\n setShowHelp(!showHelp)\n } else if (input === 'q' || key.escape) {\n onDone()\n }\n })\n\n const getImplColor = (impl: SandboxImplementation) => {\n switch (impl) {\n case 'seatbelt':\n return 'green'\n case 'bubblewrap':\n return 'cyan'\n case 'docker':\n return 'yellow'\n case 'none':\n return 'gray'\n }\n }\n\n const getImplDescription = (impl: SandboxImplementation) => {\n switch (impl) {\n case 'seatbelt':\n return 'macOS sandbox-exec (built-in)'\n case 'bubblewrap':\n return 'Linux bubblewrap container'\n case 'docker':\n return 'Docker container isolation'\n case 'none':\n return 'No sandbox available'\n }\n }\n\n return (\n <Box flexDirection=\"column\" marginY={1}>\n {/* Header */}\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n Sandbox Configuration\n </Text>\n </Box>\n\n {/* Status */}\n <Box marginBottom={1}>\n <Text>\n <Text bold>Status: </Text>\n {config.enabled && isAvailable ? (\n <Text color=\"green\">\u25CF ENABLED</Text>\n ) : (\n <Text color=\"red\">\u25CB DISABLED</Text>\n )}\n </Text>\n </Box>\n\n {/* Implementation */}\n <Box marginBottom={1}>\n <Text>\n <Text bold>Implementation: </Text>\n <Text color={getImplColor(implementation)}>\n {implementation.toUpperCase()}\n </Text>\n </Text>\n <Text color={SEMANTIC_COLORS.dim}>\n {' '}\n - {getImplDescription(implementation)}\n </Text>\n </Box>\n\n {/* Availability */}\n {!isAvailable && (\n <Box marginBottom={1}>\n <Text color=\"yellow\">\u26A0 Sandbox not available on this system</Text>\n </Box>\n )}\n\n {/* Configuration details */}\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text bold>Filesystem Policy:</Text>\n <Box paddingLeft={2} flexDirection=\"column\">\n <Text>\n <Text color={SEMANTIC_COLORS.dim}>Write Allowed: </Text>\n {config.filesystem.writeAllowed.length > 0 ? (\n <Text color=\"green\">\n {config.filesystem.writeAllowed.slice(0, 3).join(', ')}\n {config.filesystem.writeAllowed.length > 3 && ' ...'}\n </Text>\n ) : (\n <Text color=\"red\">None</Text>\n )}\n </Text>\n <Text>\n <Text color={SEMANTIC_COLORS.dim}>Denied Paths: </Text>\n {config.filesystem.denied.length > 0 ? (\n <Text color=\"red\">\n {config.filesystem.denied.length} paths blocked\n </Text>\n ) : (\n <Text color=\"green\">None blocked</Text>\n )}\n </Text>\n </Box>\n </Box>\n\n {/* Network policy */}\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text bold>Network Policy:</Text>\n <Box paddingLeft={2} flexDirection=\"column\">\n <Text>\n <Text color={SEMANTIC_COLORS.dim}>Network Access: </Text>\n {config.network.blockAll ? (\n <Text color=\"red\">Blocked</Text>\n ) : (\n <Text color=\"green\">Allowed</Text>\n )}\n </Text>\n {!config.network.blockAll &&\n config.network.allowedDomains.length > 0 && (\n <Text>\n <Text color={SEMANTIC_COLORS.dim}>Allowed Domains: </Text>\n <Text>\n {config.network.allowedDomains.slice(0, 3).join(', ')}\n {config.network.allowedDomains.length > 3 && ' ...'}\n </Text>\n </Text>\n )}\n </Box>\n </Box>\n\n {/* Process policy */}\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text bold>Process Policy:</Text>\n <Box paddingLeft={2} flexDirection=\"column\">\n <Text>\n <Text color={SEMANTIC_COLORS.dim}>Max Execution Time: </Text>\n <Text>{config.process.maxExecutionTime / 1000}s</Text>\n </Text>\n <Text>\n <Text color={SEMANTIC_COLORS.dim}>Excluded Commands: </Text>\n <Text>\n {config.process.excludedCommands.length > 0\n ? config.process.excludedCommands.slice(0, 3).join(', ')\n : 'None'}\n {config.process.excludedCommands.length > 3 && ' ...'}\n </Text>\n </Text>\n </Box>\n </Box>\n\n {/* Help toggle */}\n {showHelp && (\n <Box\n flexDirection=\"column\"\n marginY={1}\n borderStyle=\"round\"\n paddingX={1}\n >\n <Text bold>Sandbox Implementations:</Text>\n <Box flexDirection=\"column\" paddingLeft={1}>\n <Text>\n <Text color=\"green\">\u2022 seatbelt:</Text>\n <Text color={SEMANTIC_COLORS.dim}>\n {' '}\n macOS built-in sandbox-exec\n </Text>\n </Text>\n <Text>\n <Text color=\"cyan\">\u2022 bubblewrap:</Text>\n <Text color={SEMANTIC_COLORS.dim}>\n {' '}\n Linux container isolation (bwrap)\n </Text>\n </Text>\n <Text>\n <Text color=\"yellow\">\u2022 docker:</Text>\n <Text color={SEMANTIC_COLORS.dim}>\n {' '}\n Docker container isolation\n </Text>\n </Text>\n <Text>\n <Text color=\"gray\">\u2022 none:</Text>\n <Text color={SEMANTIC_COLORS.dim}>\n {' '}\n No sandboxing (not recommended)\n </Text>\n </Text>\n </Box>\n </Box>\n )}\n\n {/* Controls */}\n <Box marginTop={1}>\n <Text color={SEMANTIC_COLORS.dim}>\n t: Toggle sandbox | h: Show/hide help | q/Esc: Exit\n </Text>\n </Box>\n </Box>\n )\n}\n\nconst command: Command = {\n name: 'sandbox',\n description: 'View and toggle sandbox mode for command execution',\n isEnabled: true,\n isHidden: false,\n type: 'local-jsx',\n\n userFacingName() {\n return this.name\n },\n\n async call(onDone, _context) {\n const cwd = getCwd()\n const controller = getSandboxController(cwd)\n const initialConfig = controller.getConfig()\n const implementation = controller.getImplementationType()\n const initialAvailable = await controller.isAvailable()\n\n // Create a wrapper component to manage state\n const SandboxWrapper = () => {\n const [config, setConfig] = useState(initialConfig)\n const [isAvailable, setIsAvailable] = useState(initialAvailable)\n\n const handleToggle = async () => {\n const newEnabled = !config.enabled\n controller.updateConfig({ enabled: newEnabled })\n const newConfig = controller.getConfig()\n setConfig(newConfig)\n const available = await controller.isAvailable()\n setIsAvailable(available)\n }\n\n return (\n <SandboxStatus\n config={config}\n implementation={implementation}\n isAvailable={isAvailable}\n onToggle={handleToggle}\n onDone={onDone}\n />\n )\n }\n\n return <SandboxWrapper />\n },\n}\n\nexport default command\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Sandbox Command\n *\n * Toggle and configure sandbox mode for command execution.\n * Uses InfoPanel with actions for consistent UI.\n */\n\nimport React, { useState } from 'react'\nimport type { Command } from '@commands'\nimport {\n getSandboxController,\n type SandboxConfig,\n type SandboxImplementation,\n} from '../services/sandbox'\nimport { getCwd } from '@utils/state'\nimport { SEMANTIC_COLORS } from '@constants/colors'\nimport { InfoPanel } from '@components/InfoPanel'\nimport type {\n InfoSection,\n InfoPanelAction,\n InfoItem,\n} from '@components/InfoPanel'\nimport { t } from '@i18n'\n\nfunction getImplColor(impl: SandboxImplementation): string {\n switch (impl) {\n case 'seatbelt':\n return SEMANTIC_COLORS.success\n case 'bubblewrap':\n return SEMANTIC_COLORS.info\n case 'docker':\n return '#FFB86C'\n case 'none':\n return SEMANTIC_COLORS.dim\n }\n}\n\nfunction getImplDescription(impl: SandboxImplementation): string {\n switch (impl) {\n case 'seatbelt':\n return 'macOS sandbox-exec (built-in)'\n case 'bubblewrap':\n return 'Linux bubblewrap container'\n case 'docker':\n return 'Docker container isolation'\n case 'none':\n return 'No sandbox available'\n }\n}\n\nfunction buildSections(\n config: SandboxConfig,\n implementation: SandboxImplementation,\n isAvailable: boolean,\n showHelp: boolean,\n): InfoSection[] {\n const sections: InfoSection[] = []\n\n // Status\n const statusValue =\n config.enabled && isAvailable\n ? `\\u25CF ${t('commands.sandbox.enabled')}`\n : `\\u25CB ${t('commands.sandbox.disabled')}`\n const statusColor =\n config.enabled && isAvailable\n ? SEMANTIC_COLORS.success\n : SEMANTIC_COLORS.error\n\n const statusItems: InfoItem[] = [\n { label: 'Status', value: statusValue, valueColor: statusColor },\n {\n label: t('commands.sandbox.implementation'),\n value: `${implementation.toUpperCase()} - ${getImplDescription(implementation)}`,\n valueColor: getImplColor(implementation),\n },\n ]\n if (!isAvailable) {\n statusItems.push({\n label: '\\u26A0',\n value: t('commands.sandbox.notAvailable'),\n valueColor: '#FFB86C',\n })\n }\n sections.push({\n title: t('commands.sandbox.statusSection'),\n items: statusItems,\n })\n\n // Filesystem Policy\n const fsItems: InfoItem[] = [\n {\n label: 'Write Allowed',\n value:\n config.filesystem.writeAllowed.length > 0\n ? config.filesystem.writeAllowed.slice(0, 3).join(', ') +\n (config.filesystem.writeAllowed.length > 3 ? ' ...' : '')\n : 'None',\n valueColor:\n config.filesystem.writeAllowed.length > 0\n ? SEMANTIC_COLORS.success\n : SEMANTIC_COLORS.error,\n },\n {\n label: 'Denied Paths',\n value:\n config.filesystem.denied.length > 0\n ? `${config.filesystem.denied.length} paths blocked`\n : 'None blocked',\n valueColor:\n config.filesystem.denied.length > 0\n ? SEMANTIC_COLORS.error\n : SEMANTIC_COLORS.success,\n },\n ]\n sections.push({\n title: t('commands.sandbox.filesystemPolicy'),\n items: fsItems,\n })\n\n // Network Policy\n const netItems: InfoItem[] = [\n {\n label: 'Network Access',\n value: config.network.blockAll ? 'Blocked' : 'Allowed',\n valueColor: config.network.blockAll\n ? SEMANTIC_COLORS.error\n : SEMANTIC_COLORS.success,\n },\n ]\n if (!config.network.blockAll && config.network.allowedDomains.length > 0) {\n netItems.push({\n label: 'Allowed Domains',\n value:\n config.network.allowedDomains.slice(0, 3).join(', ') +\n (config.network.allowedDomains.length > 3 ? ' ...' : ''),\n })\n }\n sections.push({ title: t('commands.sandbox.networkPolicy'), items: netItems })\n\n // Process Policy\n sections.push({\n title: t('commands.sandbox.processPolicy'),\n items: [\n {\n label: 'Max Exec Time',\n value: `${config.process.maxExecutionTime / 1000}s`,\n },\n {\n label: 'Excluded Cmds',\n value:\n config.process.excludedCommands.length > 0\n ? config.process.excludedCommands.slice(0, 3).join(', ') +\n (config.process.excludedCommands.length > 3 ? ' ...' : '')\n : 'None',\n },\n ],\n })\n\n // Help section (collapsible)\n if (showHelp) {\n sections.push({\n title: t('commands.sandbox.helpSection'),\n items: [\n {\n label: '\\u2022 seatbelt',\n value: 'macOS built-in sandbox-exec',\n valueColor: SEMANTIC_COLORS.success,\n },\n {\n label: '\\u2022 bubblewrap',\n value: 'Linux container isolation (bwrap)',\n valueColor: SEMANTIC_COLORS.info,\n },\n {\n label: '\\u2022 docker',\n value: 'Docker container isolation',\n valueColor: '#FFB86C',\n },\n {\n label: '\\u2022 none',\n value: 'No sandboxing (not recommended)',\n valueColor: SEMANTIC_COLORS.dim,\n },\n ],\n })\n }\n\n return sections\n}\n\ninterface SandboxViewProps {\n initialConfig: SandboxConfig\n implementation: SandboxImplementation\n initialAvailable: boolean\n onDone: () => void\n}\n\nconst SandboxView: React.FC<SandboxViewProps> = ({\n initialConfig,\n implementation,\n initialAvailable,\n onDone,\n}) => {\n const [config, setConfig] = useState(initialConfig)\n const [isAvailable, setIsAvailable] = useState(initialAvailable)\n const [showHelp, setShowHelp] = useState(false)\n\n const cwd = getCwd()\n const controller = getSandboxController(cwd)\n\n const handleToggle = async () => {\n const newEnabled = !config.enabled\n controller.updateConfig({ enabled: newEnabled })\n const newConfig = controller.getConfig()\n setConfig(newConfig)\n const available = await controller.isAvailable()\n setIsAvailable(available)\n }\n\n const sections = buildSections(config, implementation, isAvailable, showHelp)\n const actions: InfoPanelAction[] = [\n {\n key: 't',\n keyLabel: 'T',\n description: t('commands.sandbox.toggle'),\n onPress: handleToggle,\n },\n {\n key: 'h',\n keyLabel: 'H',\n description: t('commands.sandbox.toggleHelp'),\n onPress: () => setShowHelp(!showHelp),\n },\n ]\n\n return (\n <InfoPanel\n title={t('commands.sandbox.title')}\n sections={sections}\n actions={actions}\n onClose={onDone}\n />\n )\n}\n\nconst command: Command = {\n name: 'sandbox',\n description: t('commands.sandbox.description'),\n isEnabled: true,\n isHidden: false,\n hidePromptInput: true,\n type: 'local-jsx',\n\n userFacingName() {\n return this.name\n },\n\n async call(onDone, _context) {\n const cwd = getCwd()\n const controller = getSandboxController(cwd)\n const initialConfig = controller.getConfig()\n const implementation = controller.getImplementationType()\n const initialAvailable = await controller.isAvailable()\n\n return (\n <SandboxView\n initialConfig={initialConfig}\n implementation={implementation}\n initialAvailable={initialAvailable}\n onDone={onDone}\n />\n )\n },\n}\n\nexport default command\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }