@within-7/minto 0.1.6 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (487) hide show
  1. package/cli.js +155 -37
  2. package/dist/Tool.js +38 -0
  3. package/dist/Tool.js.map +3 -3
  4. package/dist/commands/agents/AgentsCommand.js +52 -26
  5. package/dist/commands/agents/AgentsCommand.js.map +2 -2
  6. package/dist/commands/agents/constants.js +1 -1
  7. package/dist/commands/agents/constants.js.map +1 -1
  8. package/dist/commands/agents/index.js +1 -1
  9. package/dist/commands/bug.js +74 -7
  10. package/dist/commands/bug.js.map +3 -3
  11. package/dist/commands/clear.js +3 -0
  12. package/dist/commands/clear.js.map +2 -2
  13. package/dist/commands/compact.js +37 -0
  14. package/dist/commands/compact.js.map +2 -2
  15. package/dist/commands/context.js +84 -0
  16. package/dist/commands/context.js.map +7 -0
  17. package/dist/commands/ctx_viz.js +18 -10
  18. package/dist/commands/ctx_viz.js.map +2 -2
  19. package/dist/commands/doctor.js +158 -12
  20. package/dist/commands/doctor.js.map +2 -2
  21. package/dist/commands/export.js +156 -0
  22. package/dist/commands/export.js.map +7 -0
  23. package/dist/commands/mcp-interactive.js +21 -12
  24. package/dist/commands/mcp-interactive.js.map +2 -2
  25. package/dist/commands/model.js +6 -5
  26. package/dist/commands/model.js.map +2 -2
  27. package/dist/commands/permissions.js +86 -0
  28. package/dist/commands/permissions.js.map +7 -0
  29. package/dist/commands/quit.js +3 -1
  30. package/dist/commands/quit.js.map +2 -2
  31. package/dist/commands/sandbox.js +104 -0
  32. package/dist/commands/sandbox.js.map +7 -0
  33. package/dist/commands/status.js +58 -0
  34. package/dist/commands/status.js.map +7 -0
  35. package/dist/commands/tasks.js +108 -0
  36. package/dist/commands/tasks.js.map +7 -0
  37. package/dist/commands/todos.js +123 -0
  38. package/dist/commands/todos.js.map +7 -0
  39. package/dist/commands.js +20 -2
  40. package/dist/commands.js.map +2 -2
  41. package/dist/components/AgentThinkingBlock.js +10 -18
  42. package/dist/components/AgentThinkingBlock.js.map +2 -2
  43. package/dist/components/BackgroundTasksPanel.js +78 -29
  44. package/dist/components/BackgroundTasksPanel.js.map +2 -2
  45. package/dist/components/BashStreamingProgress.js +24 -0
  46. package/dist/components/BashStreamingProgress.js.map +7 -0
  47. package/dist/components/CollapsibleHint.js +14 -0
  48. package/dist/components/CollapsibleHint.js.map +7 -0
  49. package/dist/components/FileEditToolUpdatedMessage.js +1 -1
  50. package/dist/components/FileEditToolUpdatedMessage.js.map +2 -2
  51. package/dist/components/HotkeyHelpPanel.js +137 -0
  52. package/dist/components/HotkeyHelpPanel.js.map +7 -0
  53. package/dist/components/Logo.js +5 -5
  54. package/dist/components/Logo.js.map +2 -2
  55. package/dist/components/Message.js +23 -7
  56. package/dist/components/Message.js.map +3 -3
  57. package/dist/components/ModelConfig.js +16 -3
  58. package/dist/components/ModelConfig.js.map +2 -2
  59. package/dist/components/ModelListManager.js +3 -3
  60. package/dist/components/ModelListManager.js.map +2 -2
  61. package/dist/components/ModelSelector/ModelSelector.js +1 -1
  62. package/dist/components/Onboarding.js +19 -14
  63. package/dist/components/Onboarding.js.map +2 -2
  64. package/dist/components/ProgressBar.js +74 -0
  65. package/dist/components/ProgressBar.js.map +7 -0
  66. package/dist/components/PromptInput.js +156 -46
  67. package/dist/components/PromptInput.js.map +2 -2
  68. package/dist/components/RequestStatusIndicator.js +194 -0
  69. package/dist/components/RequestStatusIndicator.js.map +7 -0
  70. package/dist/components/Spinner.js +92 -27
  71. package/dist/components/Spinner.js.map +2 -2
  72. package/dist/components/SpinnerSymbol.js +21 -27
  73. package/dist/components/SpinnerSymbol.js.map +2 -2
  74. package/dist/components/StreamingBashOutput.js +9 -8
  75. package/dist/components/StreamingBashOutput.js.map +2 -2
  76. package/dist/components/SubagentBlock.js +1 -1
  77. package/dist/components/SubagentBlock.js.map +1 -1
  78. package/dist/components/SubagentProgress.js +10 -11
  79. package/dist/components/SubagentProgress.js.map +2 -2
  80. package/dist/components/TaskCard.js +16 -13
  81. package/dist/components/TaskCard.js.map +2 -2
  82. package/dist/components/TodoChangeBlock.js +1 -1
  83. package/dist/components/TodoChangeBlock.js.map +2 -2
  84. package/dist/components/TodoPanel.js +120 -29
  85. package/dist/components/TodoPanel.js.map +3 -3
  86. package/dist/components/TokenCounter.js +74 -0
  87. package/dist/components/TokenCounter.js.map +7 -0
  88. package/dist/components/TokenWarning.js +2 -1
  89. package/dist/components/TokenWarning.js.map +2 -2
  90. package/dist/components/TreeConnector.js +25 -0
  91. package/dist/components/TreeConnector.js.map +7 -0
  92. package/dist/components/TurnCompletionIndicator.js +18 -0
  93. package/dist/components/TurnCompletionIndicator.js.map +7 -0
  94. package/dist/components/messages/AssistantTextMessage.js +5 -2
  95. package/dist/components/messages/AssistantTextMessage.js.map +2 -2
  96. package/dist/components/messages/AssistantThinkingMessage.js +18 -3
  97. package/dist/components/messages/AssistantThinkingMessage.js.map +2 -2
  98. package/dist/components/messages/AssistantToolUseMessage.js +11 -8
  99. package/dist/components/messages/AssistantToolUseMessage.js.map +2 -2
  100. package/dist/components/messages/GroupRenderer.js +53 -0
  101. package/dist/components/messages/GroupRenderer.js.map +7 -0
  102. package/dist/components/messages/NestedTasksPreview.js +12 -0
  103. package/dist/components/messages/NestedTasksPreview.js.map +7 -0
  104. package/dist/components/messages/ParallelTasksGroupView.js +92 -0
  105. package/dist/components/messages/ParallelTasksGroupView.js.map +7 -0
  106. package/dist/components/messages/TaskInModuleView.js +198 -0
  107. package/dist/components/messages/TaskInModuleView.js.map +7 -0
  108. package/dist/components/messages/TaskOutputContent.js +53 -0
  109. package/dist/components/messages/TaskOutputContent.js.map +7 -0
  110. package/dist/components/messages/UserPromptMessage.js +1 -1
  111. package/dist/components/messages/UserPromptMessage.js.map +2 -2
  112. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +2 -3
  113. package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +2 -2
  114. package/dist/components/permissions/FallbackPermissionRequest.js +4 -4
  115. package/dist/components/permissions/FallbackPermissionRequest.js.map +2 -2
  116. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +4 -4
  117. package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +2 -2
  118. package/dist/constants/colors.js +48 -0
  119. package/dist/constants/colors.js.map +2 -2
  120. package/dist/constants/formatRules.js +102 -0
  121. package/dist/constants/formatRules.js.map +7 -0
  122. package/dist/constants/prompts.js +12 -34
  123. package/dist/constants/prompts.js.map +2 -2
  124. package/dist/constants/symbols.js +64 -6
  125. package/dist/constants/symbols.js.map +2 -2
  126. package/dist/constants/timing.js +5 -0
  127. package/dist/constants/timing.js.map +2 -2
  128. package/dist/core/config/defaults.js +84 -0
  129. package/dist/core/config/defaults.js.map +7 -0
  130. package/dist/core/config/index.js +111 -0
  131. package/dist/core/config/index.js.map +7 -0
  132. package/dist/core/config/loader.js +221 -0
  133. package/dist/core/config/loader.js.map +7 -0
  134. package/dist/core/config/migrations.js +128 -0
  135. package/dist/core/config/migrations.js.map +7 -0
  136. package/dist/core/config/schema.js +178 -0
  137. package/dist/core/config/schema.js.map +7 -0
  138. package/dist/core/costTracker.js +138 -0
  139. package/dist/core/costTracker.js.map +7 -0
  140. package/dist/core/index.js +5 -0
  141. package/dist/core/index.js.map +7 -0
  142. package/dist/core/permissions/auditLog.js +204 -0
  143. package/dist/core/permissions/auditLog.js.map +7 -0
  144. package/dist/core/permissions/engine/index.js +3 -0
  145. package/dist/core/permissions/engine/index.js.map +7 -0
  146. package/dist/core/permissions/engine/permissionEngine.js +106 -0
  147. package/dist/core/permissions/engine/permissionEngine.js.map +7 -0
  148. package/dist/core/permissions/engine/types.js +1 -0
  149. package/dist/core/permissions/engine/types.js.map +7 -0
  150. package/dist/core/permissions/index.js +84 -0
  151. package/dist/core/permissions/index.js.map +7 -0
  152. package/dist/core/permissions/ruleEngine.js +259 -0
  153. package/dist/core/permissions/ruleEngine.js.map +7 -0
  154. package/dist/core/permissions/rules/allowedToolsRule.js +62 -0
  155. package/dist/core/permissions/rules/allowedToolsRule.js.map +7 -0
  156. package/dist/core/permissions/rules/autoEscalationRule.js +291 -0
  157. package/dist/core/permissions/rules/autoEscalationRule.js.map +7 -0
  158. package/dist/core/permissions/rules/index.js +46 -0
  159. package/dist/core/permissions/rules/index.js.map +7 -0
  160. package/dist/core/permissions/rules/planModeRule.js +55 -0
  161. package/dist/core/permissions/rules/planModeRule.js.map +7 -0
  162. package/dist/core/permissions/rules/projectBoundaryRule.js +168 -0
  163. package/dist/core/permissions/rules/projectBoundaryRule.js.map +7 -0
  164. package/dist/core/permissions/rules/safeModeRule.js +65 -0
  165. package/dist/core/permissions/rules/safeModeRule.js.map +7 -0
  166. package/dist/core/permissions/rules/sensitivePathsRule.js +340 -0
  167. package/dist/core/permissions/rules/sensitivePathsRule.js.map +7 -0
  168. package/dist/core/permissions/types.js +127 -0
  169. package/dist/core/permissions/types.js.map +7 -0
  170. package/dist/core/tools/executor.js +143 -0
  171. package/dist/core/tools/executor.js.map +7 -0
  172. package/dist/core/tools/index.js +15 -0
  173. package/dist/core/tools/index.js.map +7 -0
  174. package/dist/core/tools/registry.js +183 -0
  175. package/dist/core/tools/registry.js.map +7 -0
  176. package/dist/core/tools/types.js +1 -0
  177. package/dist/core/tools/types.js.map +7 -0
  178. package/dist/cost-tracker.js +23 -15
  179. package/dist/cost-tracker.js.map +2 -2
  180. package/dist/entrypoints/cli.js +43 -43
  181. package/dist/entrypoints/cli.js.map +2 -2
  182. package/dist/entrypoints/mcp.js +12 -4
  183. package/dist/entrypoints/mcp.js.map +2 -2
  184. package/dist/history.js +14 -3
  185. package/dist/history.js.map +2 -2
  186. package/dist/hooks/useAgentTranscripts.js +116 -0
  187. package/dist/hooks/useAgentTranscripts.js.map +7 -0
  188. package/dist/hooks/useAnimationSync.js +53 -0
  189. package/dist/hooks/useAnimationSync.js.map +7 -0
  190. package/dist/hooks/useArrowKeyHistory.js +4 -2
  191. package/dist/hooks/useArrowKeyHistory.js.map +2 -2
  192. package/dist/hooks/useCanUseTool.js +3 -1
  193. package/dist/hooks/useCanUseTool.js.map +2 -2
  194. package/dist/hooks/useCancelRequest.js +4 -1
  195. package/dist/hooks/useCancelRequest.js.map +2 -2
  196. package/dist/hooks/useExitOnCtrlCD.js +9 -5
  197. package/dist/hooks/useExitOnCtrlCD.js.map +2 -2
  198. package/dist/hooks/useHookStatus.js +40 -0
  199. package/dist/hooks/useHookStatus.js.map +7 -0
  200. package/dist/hooks/useLogMessages.js +17 -1
  201. package/dist/hooks/useLogMessages.js.map +2 -2
  202. package/dist/hooks/useMessageGroups.js +43 -0
  203. package/dist/hooks/useMessageGroups.js.map +7 -0
  204. package/dist/hooks/useTerminalSize.js +62 -6
  205. package/dist/hooks/useTerminalSize.js.map +2 -2
  206. package/dist/hooks/useUnifiedCompletion.js +69 -0
  207. package/dist/hooks/useUnifiedCompletion.js.map +2 -2
  208. package/dist/i18n/index.js +109 -0
  209. package/dist/i18n/index.js.map +7 -0
  210. package/dist/i18n/locales/en.js +347 -0
  211. package/dist/i18n/locales/en.js.map +7 -0
  212. package/dist/i18n/locales/index.js +7 -0
  213. package/dist/i18n/locales/index.js.map +7 -0
  214. package/dist/i18n/locales/zh-CN.js +347 -0
  215. package/dist/i18n/locales/zh-CN.js.map +7 -0
  216. package/dist/i18n/types.js +8 -0
  217. package/dist/i18n/types.js.map +7 -0
  218. package/dist/query.js +175 -17
  219. package/dist/query.js.map +3 -3
  220. package/dist/screens/REPL.js +501 -192
  221. package/dist/screens/REPL.js.map +3 -3
  222. package/dist/services/adapters/chatCompletions.js +3 -1
  223. package/dist/services/adapters/chatCompletions.js.map +2 -2
  224. package/dist/services/adapters/messageNormalizer.js +354 -0
  225. package/dist/services/adapters/messageNormalizer.js.map +7 -0
  226. package/dist/services/adapters/responsesAPI.js +6 -3
  227. package/dist/services/adapters/responsesAPI.js.map +2 -2
  228. package/dist/services/checkpointManager.js +386 -0
  229. package/dist/services/checkpointManager.js.map +7 -0
  230. package/dist/services/claude.js +138 -11
  231. package/dist/services/claude.js.map +3 -3
  232. package/dist/services/compressionService.js +50 -1
  233. package/dist/services/compressionService.js.map +2 -2
  234. package/dist/services/contextMonitor.js +162 -0
  235. package/dist/services/contextMonitor.js.map +7 -0
  236. package/dist/services/customCommands.js +60 -41
  237. package/dist/services/customCommands.js.map +2 -2
  238. package/dist/services/hookExecutor.js +173 -1
  239. package/dist/services/hookExecutor.js.map +2 -2
  240. package/dist/services/intelligentCompactor.js +281 -0
  241. package/dist/services/intelligentCompactor.js.map +7 -0
  242. package/dist/services/lspConfig.js +109 -0
  243. package/dist/services/lspConfig.js.map +7 -0
  244. package/dist/services/mcpClient.js +273 -34
  245. package/dist/services/mcpClient.js.map +2 -2
  246. package/dist/services/modelOrchestrator.js +310 -0
  247. package/dist/services/modelOrchestrator.js.map +7 -0
  248. package/dist/services/openai.js +8 -1
  249. package/dist/services/openai.js.map +2 -2
  250. package/dist/services/outputStyles.js +138 -0
  251. package/dist/services/outputStyles.js.map +7 -0
  252. package/dist/services/plugins/index.js +5 -0
  253. package/dist/services/plugins/index.js.map +7 -0
  254. package/dist/services/plugins/lspServers.js +188 -0
  255. package/dist/services/plugins/lspServers.js.map +7 -0
  256. package/dist/services/plugins/pluginRuntime.js +229 -0
  257. package/dist/services/plugins/pluginRuntime.js.map +7 -0
  258. package/dist/services/plugins/pluginValidation.js +219 -0
  259. package/dist/services/plugins/pluginValidation.js.map +7 -0
  260. package/dist/services/plugins/skillMarketplace.js +556 -0
  261. package/dist/services/plugins/skillMarketplace.js.map +7 -0
  262. package/dist/services/responseStateManager.js +37 -3
  263. package/dist/services/responseStateManager.js.map +2 -2
  264. package/dist/services/sandbox/filesystemBoundary.js +300 -0
  265. package/dist/services/sandbox/filesystemBoundary.js.map +7 -0
  266. package/dist/services/sandbox/index.js +14 -0
  267. package/dist/services/sandbox/index.js.map +7 -0
  268. package/dist/services/sandbox/networkProxy.js +293 -0
  269. package/dist/services/sandbox/networkProxy.js.map +7 -0
  270. package/dist/services/sandbox/sandboxController.js +574 -0
  271. package/dist/services/sandbox/sandboxController.js.map +7 -0
  272. package/dist/services/sandbox/types.js +50 -0
  273. package/dist/services/sandbox/types.js.map +7 -0
  274. package/dist/services/sessionMemory.js +266 -0
  275. package/dist/services/sessionMemory.js.map +7 -0
  276. package/dist/services/taskRouter.js +324 -0
  277. package/dist/services/taskRouter.js.map +7 -0
  278. package/dist/tools/ArchitectTool/ArchitectTool.js +10 -3
  279. package/dist/tools/ArchitectTool/ArchitectTool.js.map +2 -2
  280. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +3 -0
  281. package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +2 -2
  282. package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js +8 -1
  283. package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js.map +2 -2
  284. package/dist/tools/BaseTool.js +72 -0
  285. package/dist/tools/BaseTool.js.map +7 -0
  286. package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js +3 -0
  287. package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js.map +2 -2
  288. package/dist/tools/BashTool/BashTool.js +60 -3
  289. package/dist/tools/BashTool/BashTool.js.map +2 -2
  290. package/dist/tools/BashTool/BashToolResultMessage.js +3 -0
  291. package/dist/tools/BashTool/BashToolResultMessage.js.map +2 -2
  292. package/dist/tools/BashTool/OutputLine.js +54 -0
  293. package/dist/tools/BashTool/OutputLine.js.map +2 -2
  294. package/dist/tools/BashTool/prompt.js +192 -3
  295. package/dist/tools/BashTool/prompt.js.map +2 -2
  296. package/dist/tools/FileEditTool/FileEditTool.js +29 -4
  297. package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
  298. package/dist/tools/FileReadTool/FileReadTool.js +23 -4
  299. package/dist/tools/FileReadTool/FileReadTool.js.map +2 -2
  300. package/dist/tools/FileWriteTool/FileWriteTool.js +5 -5
  301. package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
  302. package/dist/tools/GlobTool/GlobTool.js +14 -3
  303. package/dist/tools/GlobTool/GlobTool.js.map +2 -2
  304. package/dist/tools/GrepTool/GrepTool.js +41 -7
  305. package/dist/tools/GrepTool/GrepTool.js.map +2 -2
  306. package/dist/tools/KillShellTool/KillShellToolResultMessage.js +3 -0
  307. package/dist/tools/KillShellTool/KillShellToolResultMessage.js.map +2 -2
  308. package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js +109 -0
  309. package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js.map +7 -0
  310. package/dist/tools/ListMcpResourcesTool/prompt.js +19 -0
  311. package/dist/tools/ListMcpResourcesTool/prompt.js.map +7 -0
  312. package/dist/tools/LspTool/LspTool.js +664 -0
  313. package/dist/tools/LspTool/LspTool.js.map +7 -0
  314. package/dist/tools/LspTool/prompt.js +27 -0
  315. package/dist/tools/LspTool/prompt.js.map +7 -0
  316. package/dist/tools/MCPTool/MCPTool.js +11 -4
  317. package/dist/tools/MCPTool/MCPTool.js.map +2 -2
  318. package/dist/tools/MemoryReadTool/MemoryReadTool.js +19 -6
  319. package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +2 -2
  320. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +6 -6
  321. package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +2 -2
  322. package/dist/tools/MultiEditTool/MultiEditTool.js +19 -2
  323. package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
  324. package/dist/tools/NotebookEditTool/NotebookEditTool.js +5 -1
  325. package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
  326. package/dist/tools/NotebookReadTool/NotebookReadTool.js +8 -4
  327. package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +2 -2
  328. package/dist/tools/PlanModeTool/EnterPlanModeTool.js +74 -0
  329. package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +7 -0
  330. package/dist/tools/PlanModeTool/ExitPlanModeTool.js +108 -0
  331. package/dist/tools/PlanModeTool/ExitPlanModeTool.js.map +7 -0
  332. package/dist/tools/PlanModeTool/prompt.js +94 -0
  333. package/dist/tools/PlanModeTool/prompt.js.map +7 -0
  334. package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js +130 -0
  335. package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js.map +7 -0
  336. package/dist/tools/ReadMcpResourceTool/prompt.js +17 -0
  337. package/dist/tools/ReadMcpResourceTool/prompt.js.map +7 -0
  338. package/dist/tools/SkillTool/SkillTool.js +14 -3
  339. package/dist/tools/SkillTool/SkillTool.js.map +2 -2
  340. package/dist/tools/SlashCommandTool/SlashCommandTool.js +260 -0
  341. package/dist/tools/SlashCommandTool/SlashCommandTool.js.map +7 -0
  342. package/dist/tools/SlashCommandTool/prompt.js +35 -0
  343. package/dist/tools/SlashCommandTool/prompt.js.map +7 -0
  344. package/dist/tools/TaskOutputTool/TaskOutputTool.js +189 -0
  345. package/dist/tools/TaskOutputTool/TaskOutputTool.js.map +7 -0
  346. package/dist/tools/TaskOutputTool/prompt.js +15 -0
  347. package/dist/tools/TaskOutputTool/prompt.js.map +7 -0
  348. package/dist/tools/TaskTool/TaskTool.js +321 -146
  349. package/dist/tools/TaskTool/TaskTool.js.map +2 -2
  350. package/dist/tools/TaskTool/prompt.js.map +2 -2
  351. package/dist/tools/TodoWriteTool/TodoWriteTool.js +42 -73
  352. package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +2 -2
  353. package/dist/tools/URLFetcherTool/URLFetcherTool.js +7 -1
  354. package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +2 -2
  355. package/dist/tools/URLFetcherTool/cache.js +55 -8
  356. package/dist/tools/URLFetcherTool/cache.js.map +2 -2
  357. package/dist/tools/WebSearchTool/WebSearchTool.js +6 -1
  358. package/dist/tools/WebSearchTool/WebSearchTool.js.map +2 -2
  359. package/dist/tools.js +31 -2
  360. package/dist/tools.js.map +2 -2
  361. package/dist/types/hooks.js +4 -0
  362. package/dist/types/hooks.js.map +2 -2
  363. package/dist/types/marketplace.js.map +2 -2
  364. package/dist/types/messageGroup.js +36 -0
  365. package/dist/types/messageGroup.js.map +7 -0
  366. package/dist/types/plugin.js.map +2 -2
  367. package/dist/types/thinking.js +1 -0
  368. package/dist/types/thinking.js.map +7 -0
  369. package/dist/utils/BackgroundShellManager.js +136 -39
  370. package/dist/utils/BackgroundShellManager.js.map +2 -2
  371. package/dist/utils/MessageBatchBuffer.js +102 -0
  372. package/dist/utils/MessageBatchBuffer.js.map +7 -0
  373. package/dist/utils/PersistentShell.js +151 -1
  374. package/dist/utils/PersistentShell.js.map +2 -2
  375. package/dist/utils/agentLoader.js +1 -23
  376. package/dist/utils/agentLoader.js.map +2 -2
  377. package/dist/utils/agentTranscripts.js +641 -0
  378. package/dist/utils/agentTranscripts.js.map +7 -0
  379. package/dist/utils/animationManager.js +213 -0
  380. package/dist/utils/animationManager.js.map +7 -0
  381. package/dist/utils/animationSync.js +110 -0
  382. package/dist/utils/animationSync.js.map +7 -0
  383. package/dist/utils/asyncFile.js +215 -0
  384. package/dist/utils/asyncFile.js.map +7 -0
  385. package/dist/utils/backgroundAgentManager.js +231 -0
  386. package/dist/utils/backgroundAgentManager.js.map +7 -0
  387. package/dist/utils/config.js +63 -7
  388. package/dist/utils/config.js.map +2 -2
  389. package/dist/utils/conversationRecovery.js +19 -0
  390. package/dist/utils/conversationRecovery.js.map +2 -2
  391. package/dist/utils/exit.js +73 -0
  392. package/dist/utils/exit.js.map +7 -0
  393. package/dist/utils/format.js +73 -5
  394. package/dist/utils/format.js.map +2 -2
  395. package/dist/utils/generators.js +76 -6
  396. package/dist/utils/generators.js.map +2 -2
  397. package/dist/utils/globalErrorHandler.js +149 -0
  398. package/dist/utils/globalErrorHandler.js.map +7 -0
  399. package/dist/utils/groupHandlers/index.js +8 -0
  400. package/dist/utils/groupHandlers/index.js.map +7 -0
  401. package/dist/utils/groupHandlers/parallelTasksHandler.js +140 -0
  402. package/dist/utils/groupHandlers/parallelTasksHandler.js.map +7 -0
  403. package/dist/utils/groupHandlers/taskHandler.js +104 -0
  404. package/dist/utils/groupHandlers/taskHandler.js.map +7 -0
  405. package/dist/utils/groupHandlers/types.js +1 -0
  406. package/dist/utils/groupHandlers/types.js.map +7 -0
  407. package/dist/utils/logRotation.js +224 -0
  408. package/dist/utils/logRotation.js.map +7 -0
  409. package/dist/utils/marketplaceManager.js +3 -5
  410. package/dist/utils/marketplaceManager.js.map +2 -2
  411. package/dist/utils/memSafety.js +264 -0
  412. package/dist/utils/memSafety.js.map +7 -0
  413. package/dist/utils/messageGroupManager.js +274 -0
  414. package/dist/utils/messageGroupManager.js.map +7 -0
  415. package/dist/utils/messages.js +13 -4
  416. package/dist/utils/messages.js.map +2 -2
  417. package/dist/utils/model.js +119 -15
  418. package/dist/utils/model.js.map +3 -3
  419. package/dist/utils/permissions/filesystem.js +157 -5
  420. package/dist/utils/permissions/filesystem.js.map +2 -2
  421. package/dist/utils/plan/planMode.js +143 -0
  422. package/dist/utils/plan/planMode.js.map +7 -0
  423. package/dist/utils/pluginLoader.js +17 -21
  424. package/dist/utils/pluginLoader.js.map +2 -2
  425. package/dist/utils/ripgrep.js +55 -2
  426. package/dist/utils/ripgrep.js.map +2 -2
  427. package/dist/utils/sanitizeInput.js +32 -0
  428. package/dist/utils/sanitizeInput.js.map +7 -0
  429. package/dist/utils/secureKeyStorage.js +312 -0
  430. package/dist/utils/secureKeyStorage.js.map +7 -0
  431. package/dist/utils/session/sessionPlugins.js +67 -0
  432. package/dist/utils/session/sessionPlugins.js.map +7 -0
  433. package/dist/utils/taskDisplayUtils.js +257 -0
  434. package/dist/utils/taskDisplayUtils.js.map +7 -0
  435. package/dist/utils/teamConfig.js +2 -1
  436. package/dist/utils/teamConfig.js.map +2 -2
  437. package/dist/utils/todoStorage.js +92 -2
  438. package/dist/utils/todoStorage.js.map +2 -2
  439. package/dist/utils/toolTimeout.js +136 -0
  440. package/dist/utils/toolTimeout.js.map +7 -0
  441. package/dist/utils/tooling/safeRender.js +115 -0
  442. package/dist/utils/tooling/safeRender.js.map +7 -0
  443. package/dist/utils/userFriendlyError.js +346 -0
  444. package/dist/utils/userFriendlyError.js.map +7 -0
  445. package/dist/utils/vendor/ripgrep/arm64-darwin/rg +0 -0
  446. package/dist/version.js +2 -2
  447. package/dist/version.js.map +1 -1
  448. package/package.json +14 -4
  449. package/scripts/postinstall.js +128 -38
  450. package/dist/commands/agents.js +0 -2086
  451. package/dist/commands/agents.js.map +0 -7
  452. package/dist/commands/build.js +0 -74
  453. package/dist/commands/build.js.map +0 -7
  454. package/dist/commands/compression.js +0 -57
  455. package/dist/commands/compression.js.map +0 -7
  456. package/dist/commands/listen.js +0 -37
  457. package/dist/commands/listen.js.map +0 -7
  458. package/dist/commands/login.js +0 -37
  459. package/dist/commands/login.js.map +0 -7
  460. package/dist/commands/logout.js +0 -33
  461. package/dist/commands/logout.js.map +0 -7
  462. package/dist/commands/mcp.js +0 -40
  463. package/dist/commands/mcp.js.map +0 -7
  464. package/dist/commands/mcp_refresh.js +0 -40
  465. package/dist/commands/mcp_refresh.js.map +0 -7
  466. package/dist/commands/modelstatus.js +0 -21
  467. package/dist/commands/modelstatus.js.map +0 -7
  468. package/dist/commands/onboarding.js +0 -36
  469. package/dist/commands/onboarding.js.map +0 -7
  470. package/dist/commands/plugin-interactive.js +0 -446
  471. package/dist/commands/plugin-interactive.js.map +0 -7
  472. package/dist/commands/pr_comments.js +0 -61
  473. package/dist/commands/pr_comments.js.map +0 -7
  474. package/dist/commands/release-notes.js +0 -30
  475. package/dist/commands/release-notes.js.map +0 -7
  476. package/dist/commands/review.js +0 -51
  477. package/dist/commands/review.js.map +0 -7
  478. package/dist/components/Bug.js +0 -147
  479. package/dist/components/Bug.js.map +0 -7
  480. package/dist/components/ModelSelector.js +0 -2062
  481. package/dist/components/ModelSelector.js.map +0 -7
  482. package/dist/components/ModelStatusDisplay.js +0 -87
  483. package/dist/components/ModelStatusDisplay.js.map +0 -7
  484. package/dist/entrypoints/cli-wrapper.js +0 -61
  485. package/dist/entrypoints/cli-wrapper.js.map +0 -7
  486. package/dist/screens/Doctor.js +0 -22
  487. package/dist/screens/Doctor.js.map +0 -7
@@ -0,0 +1,293 @@
1
+ class NetworkProxy {
2
+ policy;
3
+ violations = [];
4
+ pendingDomains = /* @__PURE__ */ new Set();
5
+ approvedDomains = /* @__PURE__ */ new Set();
6
+ deniedDomains = /* @__PURE__ */ new Set();
7
+ constructor(policy) {
8
+ this.policy = policy;
9
+ for (const domain of policy.allowedDomains) {
10
+ this.approvedDomains.add(domain.toLowerCase());
11
+ }
12
+ }
13
+ /**
14
+ * Update the network policy
15
+ */
16
+ updatePolicy(policy) {
17
+ this.policy = { ...this.policy, ...policy };
18
+ if (policy.allowedDomains) {
19
+ this.approvedDomains.clear();
20
+ for (const domain of policy.allowedDomains) {
21
+ this.approvedDomains.add(domain.toLowerCase());
22
+ }
23
+ }
24
+ }
25
+ /**
26
+ * Check if network access to a domain is allowed
27
+ */
28
+ checkAccess(request) {
29
+ const domain = request.domain.toLowerCase();
30
+ if (this.policy.blockAll) {
31
+ const violation2 = this.createViolation(
32
+ "network_blocked",
33
+ `Network access is blocked: attempted connection to ${domain}`,
34
+ domain
35
+ );
36
+ this.violations.push(violation2);
37
+ return { allowed: false, violation: violation2, domain };
38
+ }
39
+ if (this.deniedDomains.has(domain)) {
40
+ const violation2 = this.createViolation(
41
+ "network_domain_denied",
42
+ `Network access denied: ${domain} was previously rejected`,
43
+ domain
44
+ );
45
+ this.violations.push(violation2);
46
+ return { allowed: false, violation: violation2, domain };
47
+ }
48
+ if (this.isDomainApproved(domain)) {
49
+ return { allowed: true, domain };
50
+ }
51
+ if (this.policy.promptForNewDomains) {
52
+ this.pendingDomains.add(domain);
53
+ return {
54
+ allowed: false,
55
+ promptRequired: true,
56
+ domain
57
+ };
58
+ }
59
+ const violation = this.createViolation(
60
+ "network_domain_denied",
61
+ `Network access denied: ${domain} is not in the allowed list`,
62
+ domain
63
+ );
64
+ this.violations.push(violation);
65
+ return { allowed: false, violation, domain };
66
+ }
67
+ /**
68
+ * Analyze a command for network operations
69
+ */
70
+ analyzeCommand(command) {
71
+ const networkRequests = [];
72
+ const violations = [];
73
+ const urlPatterns = [
74
+ // HTTP/HTTPS URLs
75
+ /https?:\/\/([^\/\s:]+)(?::\d+)?/gi,
76
+ // curl/wget commands
77
+ /(?:curl|wget)\s+(?:[^\s]*\s+)*["']?(https?:\/\/)?([^\/\s"':]+)/gi,
78
+ // SSH/SCP commands
79
+ /(?:ssh|scp)\s+(?:[^\s]*\s+)*(?:\w+@)?([^:\s\/]+)/gi,
80
+ // git remote URLs
81
+ /git(?:@|:\/\/)([^:\/\s]+)/gi,
82
+ // npm registry
83
+ /registry\.npmjs\.org/gi,
84
+ // Package install commands that might download
85
+ /(?:npm|yarn|pnpm|bun)\s+(?:install|add|i)\s+/gi,
86
+ /pip\s+install\s+/gi
87
+ ];
88
+ for (const pattern of urlPatterns) {
89
+ const matches = command.matchAll(pattern);
90
+ for (const match of matches) {
91
+ let domain = match[1] || match[2] || match[0];
92
+ domain = domain.replace(/^https?:\/\//, "").replace(/\/.*$/, "").replace(/:.*$/, "").toLowerCase();
93
+ if (domain && this.isValidDomain(domain)) {
94
+ const protocol = this.detectProtocol(command, domain);
95
+ networkRequests.push({
96
+ domain,
97
+ protocol,
98
+ requestType: "outbound"
99
+ });
100
+ }
101
+ }
102
+ }
103
+ if (this.commandImpliesNetwork(command)) {
104
+ const impliedDomains = this.getImpliedDomains(command);
105
+ for (const domain of impliedDomains) {
106
+ if (!networkRequests.find((r) => r.domain === domain)) {
107
+ networkRequests.push({
108
+ domain,
109
+ protocol: "https",
110
+ requestType: "outbound"
111
+ });
112
+ }
113
+ }
114
+ }
115
+ for (const request of networkRequests) {
116
+ const result = this.checkAccess(request);
117
+ if (!result.allowed && result.violation) {
118
+ violations.push({
119
+ ...result.violation,
120
+ command
121
+ });
122
+ }
123
+ }
124
+ return { networkRequests, violations };
125
+ }
126
+ /**
127
+ * Approve a pending domain
128
+ */
129
+ approveDomain(domain) {
130
+ const lowerDomain = domain.toLowerCase();
131
+ this.approvedDomains.add(lowerDomain);
132
+ this.pendingDomains.delete(lowerDomain);
133
+ this.deniedDomains.delete(lowerDomain);
134
+ }
135
+ /**
136
+ * Deny a pending domain
137
+ */
138
+ denyDomain(domain) {
139
+ const lowerDomain = domain.toLowerCase();
140
+ this.deniedDomains.add(lowerDomain);
141
+ this.pendingDomains.delete(lowerDomain);
142
+ this.approvedDomains.delete(lowerDomain);
143
+ }
144
+ /**
145
+ * Get pending domains that need approval
146
+ */
147
+ getPendingDomains() {
148
+ return [...this.pendingDomains];
149
+ }
150
+ /**
151
+ * Get all approved domains
152
+ */
153
+ getApprovedDomains() {
154
+ return [...this.approvedDomains];
155
+ }
156
+ /**
157
+ * Get all denied domains
158
+ */
159
+ getDeniedDomains() {
160
+ return [...this.deniedDomains];
161
+ }
162
+ /**
163
+ * Get all recorded violations
164
+ */
165
+ getViolations() {
166
+ return [...this.violations];
167
+ }
168
+ /**
169
+ * Clear violation history
170
+ */
171
+ clearViolations() {
172
+ this.violations = [];
173
+ }
174
+ /**
175
+ * Check if a domain is approved (supports wildcards)
176
+ */
177
+ isDomainApproved(domain) {
178
+ if (this.approvedDomains.has(domain)) {
179
+ return true;
180
+ }
181
+ for (const approved of this.approvedDomains) {
182
+ if (approved.startsWith("*.")) {
183
+ const suffix = approved.slice(2);
184
+ if (domain.endsWith(suffix) || domain === suffix.slice(1)) {
185
+ return true;
186
+ }
187
+ }
188
+ if (domain.endsWith(`.${approved}`)) {
189
+ return true;
190
+ }
191
+ }
192
+ return false;
193
+ }
194
+ /**
195
+ * Validate a domain format
196
+ */
197
+ isValidDomain(domain) {
198
+ if (!domain || domain.length < 3) return false;
199
+ const domainRegex = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i;
200
+ return domainRegex.test(domain);
201
+ }
202
+ /**
203
+ * Detect protocol from command context
204
+ */
205
+ detectProtocol(command, domain) {
206
+ if (command.includes("ssh") || command.includes("scp")) {
207
+ return "ssh";
208
+ }
209
+ if (command.includes("git@") || command.includes("git://")) {
210
+ return "git";
211
+ }
212
+ if (command.includes("https://")) {
213
+ return "https";
214
+ }
215
+ if (command.includes("http://")) {
216
+ return "http";
217
+ }
218
+ return "https";
219
+ }
220
+ /**
221
+ * Check if a command implies network access
222
+ */
223
+ commandImpliesNetwork(command) {
224
+ const networkCommands = [
225
+ /\bnpm\s+(install|i|add|update|publish)\b/,
226
+ /\byarn\s+(add|upgrade|publish)\b/,
227
+ /\bpnpm\s+(add|update|publish)\b/,
228
+ /\bbun\s+(add|update|install)\b/,
229
+ /\bpip\s+install\b/,
230
+ /\bcargo\s+(install|update|publish)\b/,
231
+ /\bgo\s+(get|install)\b/,
232
+ /\bgem\s+install\b/,
233
+ /\bcomposer\s+(install|require|update)\b/,
234
+ /\bcurl\b/,
235
+ /\bwget\b/,
236
+ /\bgit\s+(clone|fetch|pull|push)\b/
237
+ ];
238
+ return networkCommands.some((pattern) => pattern.test(command));
239
+ }
240
+ /**
241
+ * Get implied domains for package manager commands
242
+ */
243
+ getImpliedDomains(command) {
244
+ const domains = [];
245
+ if (/\bnpm\b/.test(command)) {
246
+ domains.push("registry.npmjs.org");
247
+ }
248
+ if (/\byarn\b/.test(command)) {
249
+ domains.push("registry.yarnpkg.com", "registry.npmjs.org");
250
+ }
251
+ if (/\bpnpm\b/.test(command)) {
252
+ domains.push("registry.npmjs.org");
253
+ }
254
+ if (/\bbun\b/.test(command)) {
255
+ domains.push("registry.npmjs.org");
256
+ }
257
+ if (/\bpip\b/.test(command)) {
258
+ domains.push("pypi.org", "files.pythonhosted.org");
259
+ }
260
+ if (/\bcargo\b/.test(command)) {
261
+ domains.push("crates.io", "static.crates.io");
262
+ }
263
+ if (/\bgo\s+(get|install)\b/.test(command)) {
264
+ domains.push("proxy.golang.org", "sum.golang.org");
265
+ }
266
+ if (/\bgem\b/.test(command)) {
267
+ domains.push("rubygems.org");
268
+ }
269
+ if (/\bcomposer\b/.test(command)) {
270
+ domains.push("packagist.org", "repo.packagist.org");
271
+ }
272
+ if (/\bgit\s+(clone|fetch|pull|push)\b/.test(command)) {
273
+ domains.push("github.com", "gitlab.com", "bitbucket.org");
274
+ }
275
+ return domains;
276
+ }
277
+ /**
278
+ * Create a violation record
279
+ */
280
+ createViolation(type, details, domain) {
281
+ return {
282
+ type,
283
+ timestamp: Date.now(),
284
+ command: "",
285
+ details,
286
+ domain
287
+ };
288
+ }
289
+ }
290
+ export {
291
+ NetworkProxy
292
+ };
293
+ //# sourceMappingURL=networkProxy.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/services/sandbox/networkProxy.ts"],
4
+ "sourcesContent": ["/**\n * Network Proxy Service\n *\n * Validates and controls network access for sandboxed commands.\n * Provides domain-based access control and logging.\n */\n\nimport type { NetworkPolicy, SandboxViolation } from './types'\n\n/**\n * Result of a network access check\n */\nexport interface NetworkCheckResult {\n allowed: boolean\n violation?: SandboxViolation\n promptRequired?: boolean\n domain?: string\n}\n\n/**\n * Network access request\n */\nexport interface NetworkAccessRequest {\n domain: string\n protocol?: 'http' | 'https' | 'ssh' | 'git' | 'other'\n port?: number\n requestType?: 'outbound' | 'inbound'\n}\n\n/**\n * Network Proxy Controller\n */\nexport class NetworkProxy {\n private policy: NetworkPolicy\n private violations: SandboxViolation[] = []\n private pendingDomains: Set<string> = new Set()\n private approvedDomains: Set<string> = new Set()\n private deniedDomains: Set<string> = new Set()\n\n constructor(policy: NetworkPolicy) {\n this.policy = policy\n // Initialize approved domains from policy\n for (const domain of policy.allowedDomains) {\n this.approvedDomains.add(domain.toLowerCase())\n }\n }\n\n /**\n * Update the network policy\n */\n updatePolicy(policy: Partial<NetworkPolicy>): void {\n this.policy = { ...this.policy, ...policy }\n if (policy.allowedDomains) {\n this.approvedDomains.clear()\n for (const domain of policy.allowedDomains) {\n this.approvedDomains.add(domain.toLowerCase())\n }\n }\n }\n\n /**\n * Check if network access to a domain is allowed\n */\n checkAccess(request: NetworkAccessRequest): NetworkCheckResult {\n const domain = request.domain.toLowerCase()\n\n // Check if all network access is blocked\n if (this.policy.blockAll) {\n const violation = this.createViolation(\n 'network_blocked',\n `Network access is blocked: attempted connection to ${domain}`,\n domain,\n )\n this.violations.push(violation)\n return { allowed: false, violation, domain }\n }\n\n // Check if domain was previously denied\n if (this.deniedDomains.has(domain)) {\n const violation = this.createViolation(\n 'network_domain_denied',\n `Network access denied: ${domain} was previously rejected`,\n domain,\n )\n this.violations.push(violation)\n return { allowed: false, violation, domain }\n }\n\n // Check if domain is in approved list\n if (this.isDomainApproved(domain)) {\n return { allowed: true, domain }\n }\n\n // Check if we should prompt for new domains\n if (this.policy.promptForNewDomains) {\n this.pendingDomains.add(domain)\n return {\n allowed: false,\n promptRequired: true,\n domain,\n }\n }\n\n // Default deny\n const violation = this.createViolation(\n 'network_domain_denied',\n `Network access denied: ${domain} is not in the allowed list`,\n domain,\n )\n this.violations.push(violation)\n return { allowed: false, violation, domain }\n }\n\n /**\n * Analyze a command for network operations\n */\n analyzeCommand(command: string): {\n networkRequests: NetworkAccessRequest[]\n violations: SandboxViolation[]\n } {\n const networkRequests: NetworkAccessRequest[] = []\n const violations: SandboxViolation[] = []\n\n // Extract URLs and domains from command\n const urlPatterns = [\n // HTTP/HTTPS URLs\n /https?:\\/\\/([^\\/\\s:]+)(?::\\d+)?/gi,\n // curl/wget commands\n /(?:curl|wget)\\s+(?:[^\\s]*\\s+)*[\"']?(https?:\\/\\/)?([^\\/\\s\"':]+)/gi,\n // SSH/SCP commands\n /(?:ssh|scp)\\s+(?:[^\\s]*\\s+)*(?:\\w+@)?([^:\\s\\/]+)/gi,\n // git remote URLs\n /git(?:@|:\\/\\/)([^:\\/\\s]+)/gi,\n // npm registry\n /registry\\.npmjs\\.org/gi,\n // Package install commands that might download\n /(?:npm|yarn|pnpm|bun)\\s+(?:install|add|i)\\s+/gi,\n /pip\\s+install\\s+/gi,\n ]\n\n for (const pattern of urlPatterns) {\n const matches = command.matchAll(pattern)\n for (const match of matches) {\n let domain = match[1] || match[2] || match[0]\n // Clean up the domain\n domain = domain\n .replace(/^https?:\\/\\//, '')\n .replace(/\\/.*$/, '')\n .replace(/:.*$/, '')\n .toLowerCase()\n\n if (domain && this.isValidDomain(domain)) {\n const protocol = this.detectProtocol(command, domain)\n networkRequests.push({\n domain,\n protocol,\n requestType: 'outbound',\n })\n }\n }\n }\n\n // Check for package manager commands that imply network access\n if (this.commandImpliesNetwork(command)) {\n // Add common package registries\n const impliedDomains = this.getImpliedDomains(command)\n for (const domain of impliedDomains) {\n if (!networkRequests.find(r => r.domain === domain)) {\n networkRequests.push({\n domain,\n protocol: 'https',\n requestType: 'outbound',\n })\n }\n }\n }\n\n // Validate all network requests\n for (const request of networkRequests) {\n const result = this.checkAccess(request)\n if (!result.allowed && result.violation) {\n violations.push({\n ...result.violation,\n command,\n })\n }\n }\n\n return { networkRequests, violations }\n }\n\n /**\n * Approve a pending domain\n */\n approveDomain(domain: string): void {\n const lowerDomain = domain.toLowerCase()\n this.approvedDomains.add(lowerDomain)\n this.pendingDomains.delete(lowerDomain)\n this.deniedDomains.delete(lowerDomain)\n }\n\n /**\n * Deny a pending domain\n */\n denyDomain(domain: string): void {\n const lowerDomain = domain.toLowerCase()\n this.deniedDomains.add(lowerDomain)\n this.pendingDomains.delete(lowerDomain)\n this.approvedDomains.delete(lowerDomain)\n }\n\n /**\n * Get pending domains that need approval\n */\n getPendingDomains(): string[] {\n return [...this.pendingDomains]\n }\n\n /**\n * Get all approved domains\n */\n getApprovedDomains(): string[] {\n return [...this.approvedDomains]\n }\n\n /**\n * Get all denied domains\n */\n getDeniedDomains(): string[] {\n return [...this.deniedDomains]\n }\n\n /**\n * Get all recorded violations\n */\n getViolations(): SandboxViolation[] {\n return [...this.violations]\n }\n\n /**\n * Clear violation history\n */\n clearViolations(): void {\n this.violations = []\n }\n\n /**\n * Check if a domain is approved (supports wildcards)\n */\n private isDomainApproved(domain: string): boolean {\n // Direct match\n if (this.approvedDomains.has(domain)) {\n return true\n }\n\n // Check for wildcard matches\n for (const approved of this.approvedDomains) {\n if (approved.startsWith('*.')) {\n const suffix = approved.slice(2)\n if (domain.endsWith(suffix) || domain === suffix.slice(1)) {\n return true\n }\n }\n // Check if domain is a subdomain of approved\n if (domain.endsWith(`.${approved}`)) {\n return true\n }\n }\n\n return false\n }\n\n /**\n * Validate a domain format\n */\n private isValidDomain(domain: string): boolean {\n if (!domain || domain.length < 3) return false\n // Basic domain validation\n const domainRegex =\n /^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i\n return domainRegex.test(domain)\n }\n\n /**\n * Detect protocol from command context\n */\n private detectProtocol(\n command: string,\n domain: string,\n ): NetworkAccessRequest['protocol'] {\n if (command.includes('ssh') || command.includes('scp')) {\n return 'ssh'\n }\n if (command.includes('git@') || command.includes('git://')) {\n return 'git'\n }\n if (command.includes('https://')) {\n return 'https'\n }\n if (command.includes('http://')) {\n return 'http'\n }\n return 'https' // Default to https\n }\n\n /**\n * Check if a command implies network access\n */\n private commandImpliesNetwork(command: string): boolean {\n const networkCommands = [\n /\\bnpm\\s+(install|i|add|update|publish)\\b/,\n /\\byarn\\s+(add|upgrade|publish)\\b/,\n /\\bpnpm\\s+(add|update|publish)\\b/,\n /\\bbun\\s+(add|update|install)\\b/,\n /\\bpip\\s+install\\b/,\n /\\bcargo\\s+(install|update|publish)\\b/,\n /\\bgo\\s+(get|install)\\b/,\n /\\bgem\\s+install\\b/,\n /\\bcomposer\\s+(install|require|update)\\b/,\n /\\bcurl\\b/,\n /\\bwget\\b/,\n /\\bgit\\s+(clone|fetch|pull|push)\\b/,\n ]\n\n return networkCommands.some(pattern => pattern.test(command))\n }\n\n /**\n * Get implied domains for package manager commands\n */\n private getImpliedDomains(command: string): string[] {\n const domains: string[] = []\n\n if (/\\bnpm\\b/.test(command)) {\n domains.push('registry.npmjs.org')\n }\n if (/\\byarn\\b/.test(command)) {\n domains.push('registry.yarnpkg.com', 'registry.npmjs.org')\n }\n if (/\\bpnpm\\b/.test(command)) {\n domains.push('registry.npmjs.org')\n }\n if (/\\bbun\\b/.test(command)) {\n domains.push('registry.npmjs.org')\n }\n if (/\\bpip\\b/.test(command)) {\n domains.push('pypi.org', 'files.pythonhosted.org')\n }\n if (/\\bcargo\\b/.test(command)) {\n domains.push('crates.io', 'static.crates.io')\n }\n if (/\\bgo\\s+(get|install)\\b/.test(command)) {\n domains.push('proxy.golang.org', 'sum.golang.org')\n }\n if (/\\bgem\\b/.test(command)) {\n domains.push('rubygems.org')\n }\n if (/\\bcomposer\\b/.test(command)) {\n domains.push('packagist.org', 'repo.packagist.org')\n }\n if (/\\bgit\\s+(clone|fetch|pull|push)\\b/.test(command)) {\n domains.push('github.com', 'gitlab.com', 'bitbucket.org')\n }\n\n return domains\n }\n\n /**\n * Create a violation record\n */\n private createViolation(\n type: SandboxViolation['type'],\n details: string,\n domain: string,\n ): SandboxViolation {\n return {\n type,\n timestamp: Date.now(),\n command: '',\n details,\n domain,\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["violation"]
7
+ }