@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,65 @@
1
+ const RESTRICTED_TOOLS = /* @__PURE__ */ new Set([
2
+ "Bash",
3
+ // Can execute arbitrary commands
4
+ "KillShell"
5
+ // Can kill processes
6
+ ]);
7
+ const DANGEROUS_COMMAND_PATTERNS = [
8
+ /rm\s+-rf?\s+\//,
9
+ // rm -rf /
10
+ /sudo\s+/,
11
+ // sudo commands
12
+ /mkfs/,
13
+ // formatting
14
+ /dd\s+if=/,
15
+ // disk operations
16
+ /:\s*\(\)\s*\{\s*:\|:\s*&\s*\}/,
17
+ // fork bomb
18
+ /shutdown|reboot|poweroff/i,
19
+ // system control
20
+ /chmod\s+777/,
21
+ // overly permissive chmod
22
+ /curl.*\|\s*(bash|sh)/,
23
+ // piped scripts
24
+ /wget.*\|\s*(bash|sh)/
25
+ // piped scripts
26
+ ];
27
+ const safeModeRule = {
28
+ name: "safe-mode",
29
+ description: "Restricts dangerous operations in safe mode",
30
+ priority: 90,
31
+ // High priority, but below plan mode
32
+ check(context) {
33
+ if (!context.safeMode) {
34
+ return { allowed: true };
35
+ }
36
+ const toolName = context.tool.name;
37
+ if (toolName === "Bash") {
38
+ const command = context.input.command;
39
+ if (command) {
40
+ for (const pattern of DANGEROUS_COMMAND_PATTERNS) {
41
+ if (pattern.test(command)) {
42
+ return {
43
+ allowed: false,
44
+ reason: `Command matches dangerous pattern in safe mode`,
45
+ message: `This command is blocked in safe mode for security reasons.`
46
+ };
47
+ }
48
+ }
49
+ }
50
+ }
51
+ if (RESTRICTED_TOOLS.has(toolName)) {
52
+ return {
53
+ allowed: true,
54
+ // Allow but mark for prompting
55
+ promptUser: true,
56
+ message: `Tool ${toolName} requires approval in safe mode`
57
+ };
58
+ }
59
+ return { allowed: true };
60
+ }
61
+ };
62
+ export {
63
+ safeModeRule
64
+ };
65
+ //# sourceMappingURL=safeModeRule.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/core/permissions/rules/safeModeRule.ts"],
4
+ "sourcesContent": ["/**\n * Safe Mode Permission Rule\n *\n * Restricts dangerous operations when in safe mode.\n */\n\nimport type {\n PermissionRule,\n PermissionContext,\n PermissionResult,\n} from '../engine/types'\n\n/**\n * Tools that are restricted in safe mode\n */\nconst RESTRICTED_TOOLS = new Set([\n 'Bash', // Can execute arbitrary commands\n 'KillShell', // Can kill processes\n])\n\n/**\n * Dangerous bash command patterns\n */\nconst DANGEROUS_COMMAND_PATTERNS = [\n /rm\\s+-rf?\\s+\\//, // rm -rf /\n /sudo\\s+/, // sudo commands\n /mkfs/, // formatting\n /dd\\s+if=/, // disk operations\n /:\\s*\\(\\)\\s*\\{\\s*:\\|:\\s*&\\s*\\}/, // fork bomb\n /shutdown|reboot|poweroff/i, // system control\n /chmod\\s+777/, // overly permissive chmod\n /curl.*\\|\\s*(bash|sh)/, // piped scripts\n /wget.*\\|\\s*(bash|sh)/, // piped scripts\n]\n\n/**\n * Safe Mode Rule\n *\n * Restricts potentially dangerous operations.\n */\nexport const safeModeRule: PermissionRule = {\n name: 'safe-mode',\n description: 'Restricts dangerous operations in safe mode',\n priority: 90, // High priority, but below plan mode\n\n check(context: PermissionContext): PermissionResult {\n // Skip if not in safe mode\n if (!context.safeMode) {\n return { allowed: true }\n }\n\n const toolName = context.tool.name\n\n // Check bash commands specifically\n if (toolName === 'Bash') {\n const command = context.input.command as string | undefined\n if (command) {\n for (const pattern of DANGEROUS_COMMAND_PATTERNS) {\n if (pattern.test(command)) {\n return {\n allowed: false,\n reason: `Command matches dangerous pattern in safe mode`,\n message: `This command is blocked in safe mode for security reasons.`,\n }\n }\n }\n }\n }\n\n // Restricted tools require explicit approval in safe mode\n if (RESTRICTED_TOOLS.has(toolName)) {\n return {\n allowed: true, // Allow but mark for prompting\n promptUser: true,\n message: `Tool ${toolName} requires approval in safe mode`,\n }\n }\n\n return { allowed: true }\n },\n}\n"],
5
+ "mappings": "AAeA,MAAM,mBAAmB,oBAAI,IAAI;AAAA,EAC/B;AAAA;AAAA,EACA;AAAA;AACF,CAAC;AAKD,MAAM,6BAA6B;AAAA,EACjC;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACF;AAOO,MAAM,eAA+B;AAAA,EAC1C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA;AAAA,EAEV,MAAM,SAA8C;AAElD,QAAI,CAAC,QAAQ,UAAU;AACrB,aAAO,EAAE,SAAS,KAAK;AAAA,IACzB;AAEA,UAAM,WAAW,QAAQ,KAAK;AAG9B,QAAI,aAAa,QAAQ;AACvB,YAAM,UAAU,QAAQ,MAAM;AAC9B,UAAI,SAAS;AACX,mBAAW,WAAW,4BAA4B;AAChD,cAAI,QAAQ,KAAK,OAAO,GAAG;AACzB,mBAAO;AAAA,cACL,SAAS;AAAA,cACT,QAAQ;AAAA,cACR,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,QAAI,iBAAiB,IAAI,QAAQ,GAAG;AAClC,aAAO;AAAA,QACL,SAAS;AAAA;AAAA,QACT,YAAY;AAAA,QACZ,SAAS,QAAQ,QAAQ;AAAA,MAC3B;AAAA,IACF;AAEA,WAAO,EAAE,SAAS,KAAK;AAAA,EACzB;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,340 @@
1
+ import { resolve, normalize } from "path";
2
+ import { homedir } from "os";
3
+ const SENSITIVE_PATHS = [
4
+ // SSH
5
+ {
6
+ pattern: "~/.ssh/*",
7
+ category: "ssh",
8
+ description: "SSH keys and configuration",
9
+ operations: ["read", "write", "delete"]
10
+ },
11
+ {
12
+ pattern: "~/.ssh",
13
+ category: "ssh",
14
+ description: "SSH directory",
15
+ operations: ["write", "delete"]
16
+ },
17
+ // Credentials
18
+ {
19
+ pattern: "~/.aws/*",
20
+ category: "cloud",
21
+ description: "AWS credentials and configuration",
22
+ operations: ["read", "write", "delete"]
23
+ },
24
+ {
25
+ pattern: "~/.config/gcloud/*",
26
+ category: "cloud",
27
+ description: "Google Cloud credentials",
28
+ operations: ["read", "write", "delete"]
29
+ },
30
+ {
31
+ pattern: "~/.azure/*",
32
+ category: "cloud",
33
+ description: "Azure credentials",
34
+ operations: ["read", "write", "delete"]
35
+ },
36
+ {
37
+ pattern: "~/.config/gh/*",
38
+ category: "credentials",
39
+ description: "GitHub CLI credentials",
40
+ operations: ["read", "write", "delete"]
41
+ },
42
+ {
43
+ pattern: "~/.docker/config.json",
44
+ category: "credentials",
45
+ description: "Docker registry credentials",
46
+ operations: ["read", "write", "delete"]
47
+ },
48
+ {
49
+ pattern: "~/.npmrc",
50
+ category: "credentials",
51
+ description: "NPM credentials",
52
+ operations: ["read", "write", "delete"]
53
+ },
54
+ {
55
+ pattern: "~/.netrc",
56
+ category: "credentials",
57
+ description: "Network credentials",
58
+ operations: ["read", "write", "delete"]
59
+ },
60
+ {
61
+ pattern: "~/.gnupg/*",
62
+ category: "credentials",
63
+ description: "GPG keys and configuration",
64
+ operations: ["read", "write", "delete"]
65
+ },
66
+ // Development secrets
67
+ {
68
+ pattern: "**/.env",
69
+ category: "development",
70
+ description: "Environment variables file",
71
+ operations: ["read", "write", "delete"]
72
+ },
73
+ {
74
+ pattern: "**/.env.*",
75
+ category: "development",
76
+ description: "Environment variables file",
77
+ operations: ["read", "write", "delete"]
78
+ },
79
+ {
80
+ pattern: "**/credentials.json",
81
+ category: "development",
82
+ description: "Credentials file",
83
+ operations: ["read", "write", "delete"]
84
+ },
85
+ {
86
+ pattern: "**/secrets.json",
87
+ category: "development",
88
+ description: "Secrets file",
89
+ operations: ["read", "write", "delete"]
90
+ },
91
+ {
92
+ pattern: "**/secrets.yaml",
93
+ category: "development",
94
+ description: "Secrets file",
95
+ operations: ["read", "write", "delete"]
96
+ },
97
+ {
98
+ pattern: "**/secrets.yml",
99
+ category: "development",
100
+ description: "Secrets file",
101
+ operations: ["read", "write", "delete"]
102
+ },
103
+ {
104
+ pattern: "**/*.pem",
105
+ category: "credentials",
106
+ description: "Private key file",
107
+ operations: ["read", "write", "delete"]
108
+ },
109
+ {
110
+ pattern: "**/*.key",
111
+ category: "credentials",
112
+ description: "Private key file",
113
+ operations: ["read", "write", "delete"]
114
+ },
115
+ {
116
+ pattern: "**/id_rsa",
117
+ category: "ssh",
118
+ description: "SSH private key",
119
+ operations: ["read", "write", "delete"]
120
+ },
121
+ {
122
+ pattern: "**/id_ed25519",
123
+ category: "ssh",
124
+ description: "SSH private key",
125
+ operations: ["read", "write", "delete"]
126
+ },
127
+ // Browser data
128
+ {
129
+ pattern: "~/Library/Application Support/Google/Chrome/*",
130
+ category: "browser",
131
+ description: "Chrome browser data",
132
+ operations: ["read", "write", "delete"]
133
+ },
134
+ {
135
+ pattern: "~/Library/Application Support/Firefox/*",
136
+ category: "browser",
137
+ description: "Firefox browser data",
138
+ operations: ["read", "write", "delete"]
139
+ },
140
+ {
141
+ pattern: "~/.config/google-chrome/*",
142
+ category: "browser",
143
+ description: "Chrome browser data (Linux)",
144
+ operations: ["read", "write", "delete"]
145
+ },
146
+ {
147
+ pattern: "~/.mozilla/firefox/*",
148
+ category: "browser",
149
+ description: "Firefox browser data (Linux)",
150
+ operations: ["read", "write", "delete"]
151
+ },
152
+ // System configuration
153
+ {
154
+ pattern: "/etc/passwd",
155
+ category: "system",
156
+ description: "System user database",
157
+ operations: ["read", "write", "delete"]
158
+ },
159
+ {
160
+ pattern: "/etc/shadow",
161
+ category: "system",
162
+ description: "System password hashes",
163
+ alwaysBlock: true,
164
+ operations: ["read", "write", "delete"]
165
+ },
166
+ {
167
+ pattern: "/etc/sudoers",
168
+ category: "system",
169
+ description: "Sudo configuration",
170
+ operations: ["read", "write", "delete"]
171
+ },
172
+ {
173
+ pattern: "/etc/hosts",
174
+ category: "system",
175
+ description: "Host file",
176
+ operations: ["write", "delete"]
177
+ },
178
+ // Cryptocurrency wallets
179
+ {
180
+ pattern: "~/.bitcoin/*",
181
+ category: "wallet",
182
+ description: "Bitcoin wallet",
183
+ operations: ["read", "write", "delete"]
184
+ },
185
+ {
186
+ pattern: "~/.ethereum/*",
187
+ category: "wallet",
188
+ description: "Ethereum wallet",
189
+ operations: ["read", "write", "delete"]
190
+ },
191
+ {
192
+ pattern: "**/*wallet*.json",
193
+ category: "wallet",
194
+ description: "Wallet file",
195
+ operations: ["read", "write", "delete"]
196
+ },
197
+ {
198
+ pattern: "**/*keystore*",
199
+ category: "wallet",
200
+ description: "Keystore file",
201
+ operations: ["read", "write", "delete"]
202
+ },
203
+ // Minto/Claude configuration (protect our own config)
204
+ {
205
+ pattern: "~/.minto.json",
206
+ category: "credentials",
207
+ description: "Minto global configuration (may contain API keys)",
208
+ operations: ["delete"]
209
+ // Only protect delete, read/write allowed for config
210
+ }
211
+ ];
212
+ function expandPath(pattern) {
213
+ const home = homedir();
214
+ let expanded = pattern.replace(/^~/, home);
215
+ return normalize(expanded);
216
+ }
217
+ function patternToRegex(pattern) {
218
+ const expanded = expandPath(pattern);
219
+ let regex = expanded.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*\*/g, "<<<DOUBLESTAR>>>").replace(/\*/g, "[^/]*").replace(/<<<DOUBLESTAR>>>/g, ".*");
220
+ return new RegExp(`^${regex}$`, "i");
221
+ }
222
+ function matchesSensitivePath(filePath, sensitivePath) {
223
+ const normalizedPath = normalize(resolve(filePath));
224
+ const regex = patternToRegex(sensitivePath.pattern);
225
+ return regex.test(normalizedPath);
226
+ }
227
+ function getOperationType(toolName, input) {
228
+ switch (toolName) {
229
+ case "Read":
230
+ case "FileRead":
231
+ case "Glob":
232
+ case "Grep":
233
+ return "read";
234
+ case "Write":
235
+ case "FileWrite":
236
+ case "Edit":
237
+ case "FileEdit":
238
+ case "MultiEdit":
239
+ case "NotebookEdit":
240
+ return "write";
241
+ case "Bash": {
242
+ const command = input.command || "";
243
+ if (/\b(rm|del|rmdir|unlink)\b/.test(command)) {
244
+ return "delete";
245
+ }
246
+ if (/\b(mv|cp|touch|mkdir|echo\s+.*>|cat\s+.*>|tee)\b/.test(command)) {
247
+ return "write";
248
+ }
249
+ if (/\b(cat|head|tail|less|more|grep|find|ls)\b/.test(command)) {
250
+ return "read";
251
+ }
252
+ return "execute";
253
+ }
254
+ default:
255
+ return null;
256
+ }
257
+ }
258
+ function extractFilePath(toolName, input) {
259
+ if (input.file_path) return input.file_path;
260
+ if (input.filePath) return input.filePath;
261
+ if (input.path) return input.path;
262
+ if (toolName === "Bash") {
263
+ const command = input.command || "";
264
+ const pathMatch = command.match(
265
+ /(?:cat|rm|mv|cp|head|tail|less|more|touch|mkdir)\s+["']?([^\s"'|&;>]+)/
266
+ );
267
+ if (pathMatch) {
268
+ return pathMatch[1] || null;
269
+ }
270
+ }
271
+ return null;
272
+ }
273
+ function findMatchingSensitivePaths(filePath, operation) {
274
+ return SENSITIVE_PATHS.filter((sp) => {
275
+ if (sp.operations && !sp.operations.includes(operation)) {
276
+ return false;
277
+ }
278
+ return matchesSensitivePath(filePath, sp);
279
+ });
280
+ }
281
+ const sensitivePathsRule = {
282
+ name: "sensitive-paths",
283
+ description: "Protects sensitive paths from unauthorized access",
284
+ priority: 100,
285
+ // Highest priority - checked before all other rules
286
+ check(context) {
287
+ const toolName = context.tool.name;
288
+ const input = context.input;
289
+ const operation = getOperationType(toolName, input);
290
+ if (!operation) {
291
+ return { allowed: true };
292
+ }
293
+ const filePath = extractFilePath(toolName, input);
294
+ if (!filePath) {
295
+ return { allowed: true };
296
+ }
297
+ const matches = findMatchingSensitivePaths(filePath, operation);
298
+ if (matches.length === 0) {
299
+ return { allowed: true };
300
+ }
301
+ const blocked = matches.find((m) => m.alwaysBlock);
302
+ if (blocked) {
303
+ return {
304
+ allowed: false,
305
+ reason: `Access to ${blocked.description} is blocked for security`,
306
+ message: `\u{1F512} Access denied: ${blocked.description} (${blocked.category})`
307
+ };
308
+ }
309
+ const categories = [...new Set(matches.map((m) => m.category))];
310
+ const descriptions = matches.map((m) => m.description).join(", ");
311
+ return {
312
+ allowed: false,
313
+ promptUser: true,
314
+ reason: `Sensitive path access requires confirmation`,
315
+ message: `\u26A0\uFE0F Sensitive ${operation} operation on: ${descriptions}
316
+ Categories: ${categories.join(", ")}`,
317
+ permissionKey: `SensitivePath(${operation}:${filePath})`
318
+ };
319
+ }
320
+ };
321
+ function isSensitivePath(filePath, operation = "read") {
322
+ return findMatchingSensitivePaths(filePath, operation).length > 0;
323
+ }
324
+ function getSensitivePathInfo(filePath) {
325
+ for (const sp of SENSITIVE_PATHS) {
326
+ if (matchesSensitivePath(filePath, sp)) {
327
+ return sp;
328
+ }
329
+ }
330
+ return null;
331
+ }
332
+ export {
333
+ SENSITIVE_PATHS,
334
+ findMatchingSensitivePaths,
335
+ getSensitivePathInfo,
336
+ isSensitivePath,
337
+ matchesSensitivePath,
338
+ sensitivePathsRule
339
+ };
340
+ //# sourceMappingURL=sensitivePathsRule.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/core/permissions/rules/sensitivePathsRule.ts"],
4
+ "sourcesContent": ["/**\n * Sensitive Paths Protection Rule\n *\n * Always requires explicit authorization for operations on sensitive paths,\n * regardless of other permissions. These paths contain sensitive data that\n * should never be accessed without user awareness.\n */\n\nimport type {\n PermissionRule,\n PermissionContext,\n PermissionResult,\n} from '../engine/types'\nimport { resolve, normalize } from 'path'\nimport { homedir } from 'os'\n\n/**\n * Categories of sensitive paths with different protection levels\n */\nexport type SensitivePathCategory =\n | 'credentials' // API keys, passwords, tokens\n | 'ssh' // SSH keys and config\n | 'system' // System configuration files\n | 'browser' // Browser data (cookies, history, passwords)\n | 'cloud' // Cloud provider credentials\n | 'development' // Development secrets (env files, etc.)\n | 'wallet' // Cryptocurrency wallets\n\n/**\n * Sensitive path definition\n */\nexport interface SensitivePath {\n /** Pattern to match (supports * wildcards) */\n pattern: string\n /** Category of sensitive data */\n category: SensitivePathCategory\n /** Human-readable description */\n description: string\n /** Whether this path is always blocked (vs requiring confirmation) */\n alwaysBlock?: boolean\n /** Applicable operations (read, write, delete, execute) */\n operations?: ('read' | 'write' | 'delete' | 'execute')[]\n}\n\n/**\n * Default sensitive paths list\n */\nexport const SENSITIVE_PATHS: SensitivePath[] = [\n // SSH\n {\n pattern: '~/.ssh/*',\n category: 'ssh',\n description: 'SSH keys and configuration',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '~/.ssh',\n category: 'ssh',\n description: 'SSH directory',\n operations: ['write', 'delete'],\n },\n\n // Credentials\n {\n pattern: '~/.aws/*',\n category: 'cloud',\n description: 'AWS credentials and configuration',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '~/.config/gcloud/*',\n category: 'cloud',\n description: 'Google Cloud credentials',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '~/.azure/*',\n category: 'cloud',\n description: 'Azure credentials',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '~/.config/gh/*',\n category: 'credentials',\n description: 'GitHub CLI credentials',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '~/.docker/config.json',\n category: 'credentials',\n description: 'Docker registry credentials',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '~/.npmrc',\n category: 'credentials',\n description: 'NPM credentials',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '~/.netrc',\n category: 'credentials',\n description: 'Network credentials',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '~/.gnupg/*',\n category: 'credentials',\n description: 'GPG keys and configuration',\n operations: ['read', 'write', 'delete'],\n },\n\n // Development secrets\n {\n pattern: '**/.env',\n category: 'development',\n description: 'Environment variables file',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '**/.env.*',\n category: 'development',\n description: 'Environment variables file',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '**/credentials.json',\n category: 'development',\n description: 'Credentials file',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '**/secrets.json',\n category: 'development',\n description: 'Secrets file',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '**/secrets.yaml',\n category: 'development',\n description: 'Secrets file',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '**/secrets.yml',\n category: 'development',\n description: 'Secrets file',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '**/*.pem',\n category: 'credentials',\n description: 'Private key file',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '**/*.key',\n category: 'credentials',\n description: 'Private key file',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '**/id_rsa',\n category: 'ssh',\n description: 'SSH private key',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '**/id_ed25519',\n category: 'ssh',\n description: 'SSH private key',\n operations: ['read', 'write', 'delete'],\n },\n\n // Browser data\n {\n pattern: '~/Library/Application Support/Google/Chrome/*',\n category: 'browser',\n description: 'Chrome browser data',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '~/Library/Application Support/Firefox/*',\n category: 'browser',\n description: 'Firefox browser data',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '~/.config/google-chrome/*',\n category: 'browser',\n description: 'Chrome browser data (Linux)',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '~/.mozilla/firefox/*',\n category: 'browser',\n description: 'Firefox browser data (Linux)',\n operations: ['read', 'write', 'delete'],\n },\n\n // System configuration\n {\n pattern: '/etc/passwd',\n category: 'system',\n description: 'System user database',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '/etc/shadow',\n category: 'system',\n description: 'System password hashes',\n alwaysBlock: true,\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '/etc/sudoers',\n category: 'system',\n description: 'Sudo configuration',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '/etc/hosts',\n category: 'system',\n description: 'Host file',\n operations: ['write', 'delete'],\n },\n\n // Cryptocurrency wallets\n {\n pattern: '~/.bitcoin/*',\n category: 'wallet',\n description: 'Bitcoin wallet',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '~/.ethereum/*',\n category: 'wallet',\n description: 'Ethereum wallet',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '**/*wallet*.json',\n category: 'wallet',\n description: 'Wallet file',\n operations: ['read', 'write', 'delete'],\n },\n {\n pattern: '**/*keystore*',\n category: 'wallet',\n description: 'Keystore file',\n operations: ['read', 'write', 'delete'],\n },\n\n // Minto/Claude configuration (protect our own config)\n {\n pattern: '~/.minto.json',\n category: 'credentials',\n description: 'Minto global configuration (may contain API keys)',\n operations: ['delete'], // Only protect delete, read/write allowed for config\n },\n]\n\n/**\n * Expand ~ to home directory and normalize path\n */\nfunction expandPath(pattern: string): string {\n const home = homedir()\n let expanded = pattern.replace(/^~/, home)\n return normalize(expanded)\n}\n\n/**\n * Convert glob pattern to regex\n */\nfunction patternToRegex(pattern: string): RegExp {\n const expanded = expandPath(pattern)\n // Escape special regex characters except * and **\n let regex = expanded\n .replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\*\\*/g, '<<<DOUBLESTAR>>>')\n .replace(/\\*/g, '[^/]*')\n .replace(/<<<DOUBLESTAR>>>/g, '.*')\n\n return new RegExp(`^${regex}$`, 'i')\n}\n\n/**\n * Check if a path matches a sensitive path pattern\n */\nexport function matchesSensitivePath(\n filePath: string,\n sensitivePath: SensitivePath,\n): boolean {\n const normalizedPath = normalize(resolve(filePath))\n const regex = patternToRegex(sensitivePath.pattern)\n return regex.test(normalizedPath)\n}\n\n/**\n * Get operation type from tool name and input\n */\nfunction getOperationType(\n toolName: string,\n input: Record<string, unknown>,\n): 'read' | 'write' | 'delete' | 'execute' | null {\n switch (toolName) {\n case 'Read':\n case 'FileRead':\n case 'Glob':\n case 'Grep':\n return 'read'\n case 'Write':\n case 'FileWrite':\n case 'Edit':\n case 'FileEdit':\n case 'MultiEdit':\n case 'NotebookEdit':\n return 'write'\n case 'Bash': {\n const command = (input.command as string) || ''\n // Check for delete commands\n if (/\\b(rm|del|rmdir|unlink)\\b/.test(command)) {\n return 'delete'\n }\n // Check for write commands\n if (/\\b(mv|cp|touch|mkdir|echo\\s+.*>|cat\\s+.*>|tee)\\b/.test(command)) {\n return 'write'\n }\n // Check for read commands\n if (/\\b(cat|head|tail|less|more|grep|find|ls)\\b/.test(command)) {\n return 'read'\n }\n return 'execute'\n }\n default:\n return null\n }\n}\n\n/**\n * Extract file path from tool input\n */\nfunction extractFilePath(\n toolName: string,\n input: Record<string, unknown>,\n): string | null {\n // Direct file path tools\n if (input.file_path) return input.file_path as string\n if (input.filePath) return input.filePath as string\n if (input.path) return input.path as string\n\n // For Bash commands, try to extract file paths\n if (toolName === 'Bash') {\n const command = (input.command as string) || ''\n // Simple extraction - look for paths after common commands\n const pathMatch = command.match(\n /(?:cat|rm|mv|cp|head|tail|less|more|touch|mkdir)\\s+[\"']?([^\\s\"'|&;>]+)/,\n )\n if (pathMatch) {\n return pathMatch[1] || null\n }\n }\n\n return null\n}\n\n/**\n * Find matching sensitive paths for a given file path and operation\n */\nexport function findMatchingSensitivePaths(\n filePath: string,\n operation: 'read' | 'write' | 'delete' | 'execute',\n): SensitivePath[] {\n return SENSITIVE_PATHS.filter(sp => {\n // Check if operation is applicable\n if (sp.operations && !sp.operations.includes(operation)) {\n return false\n }\n return matchesSensitivePath(filePath, sp)\n })\n}\n\n/**\n * Sensitive Paths Rule\n *\n * Always prompts for sensitive paths, even if other permissions are granted.\n */\nexport const sensitivePathsRule: PermissionRule = {\n name: 'sensitive-paths',\n description: 'Protects sensitive paths from unauthorized access',\n priority: 100, // Highest priority - checked before all other rules\n\n check(context: PermissionContext): PermissionResult {\n const toolName = context.tool.name\n const input = context.input\n\n // Get operation type\n const operation = getOperationType(toolName, input)\n if (!operation) {\n return { allowed: true }\n }\n\n // Extract file path\n const filePath = extractFilePath(toolName, input)\n if (!filePath) {\n return { allowed: true }\n }\n\n // Find matching sensitive paths\n const matches = findMatchingSensitivePaths(filePath, operation)\n if (matches.length === 0) {\n return { allowed: true }\n }\n\n // Check if any match is always blocked\n const blocked = matches.find(m => m.alwaysBlock)\n if (blocked) {\n return {\n allowed: false,\n reason: `Access to ${blocked.description} is blocked for security`,\n message: `\uD83D\uDD12 Access denied: ${blocked.description} (${blocked.category})`,\n }\n }\n\n // Require explicit user confirmation for sensitive paths\n const categories = [...new Set(matches.map(m => m.category))]\n const descriptions = matches.map(m => m.description).join(', ')\n\n return {\n allowed: false,\n promptUser: true,\n reason: `Sensitive path access requires confirmation`,\n message: `\u26A0\uFE0F Sensitive ${operation} operation on: ${descriptions}\\nCategories: ${categories.join(', ')}`,\n permissionKey: `SensitivePath(${operation}:${filePath})`,\n }\n },\n}\n\n/**\n * Check if a path is sensitive (utility function for external use)\n */\nexport function isSensitivePath(\n filePath: string,\n operation: 'read' | 'write' | 'delete' | 'execute' = 'read',\n): boolean {\n return findMatchingSensitivePaths(filePath, operation).length > 0\n}\n\n/**\n * Get sensitive path info for a file\n */\nexport function getSensitivePathInfo(filePath: string): SensitivePath | null {\n for (const sp of SENSITIVE_PATHS) {\n if (matchesSensitivePath(filePath, sp)) {\n return sp\n }\n }\n return null\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,127 @@
1
+ const DEFAULT_PERMISSION_RULES = [
2
+ // Deny dangerous operations
3
+ {
4
+ id: "deny-rm-rf",
5
+ pattern: "Bash(rm -rf*)",
6
+ decision: "deny",
7
+ scope: "global",
8
+ priority: 1,
9
+ description: "Block recursive force delete"
10
+ },
11
+ {
12
+ id: "deny-rm-force",
13
+ pattern: "Bash(rm -f*)",
14
+ decision: "deny",
15
+ scope: "global",
16
+ priority: 1,
17
+ description: "Block force delete"
18
+ },
19
+ {
20
+ id: "deny-env-files",
21
+ pattern: "Read(.env*)",
22
+ decision: "deny",
23
+ scope: "global",
24
+ priority: 1,
25
+ description: "Block reading .env files"
26
+ },
27
+ {
28
+ id: "deny-ssh-keys",
29
+ pattern: "Read(*.ssh*)",
30
+ decision: "deny",
31
+ scope: "global",
32
+ priority: 1,
33
+ description: "Block reading SSH keys"
34
+ },
35
+ {
36
+ id: "deny-credentials",
37
+ pattern: "Read(*credentials*)",
38
+ decision: "deny",
39
+ scope: "global",
40
+ priority: 1,
41
+ description: "Block reading credential files"
42
+ },
43
+ // Allow safe operations
44
+ {
45
+ id: "allow-git-status",
46
+ pattern: "Bash(git status*)",
47
+ decision: "allow",
48
+ scope: "global",
49
+ priority: 10,
50
+ description: "Allow git status"
51
+ },
52
+ {
53
+ id: "allow-git-diff",
54
+ pattern: "Bash(git diff*)",
55
+ decision: "allow",
56
+ scope: "global",
57
+ priority: 10,
58
+ description: "Allow git diff"
59
+ },
60
+ {
61
+ id: "allow-git-log",
62
+ pattern: "Bash(git log*)",
63
+ decision: "allow",
64
+ scope: "global",
65
+ priority: 10,
66
+ description: "Allow git log"
67
+ },
68
+ {
69
+ id: "allow-git-branch",
70
+ pattern: "Bash(git branch*)",
71
+ decision: "allow",
72
+ scope: "global",
73
+ priority: 10,
74
+ description: "Allow git branch"
75
+ },
76
+ {
77
+ id: "allow-ls",
78
+ pattern: "Bash(ls *)",
79
+ decision: "allow",
80
+ scope: "global",
81
+ priority: 10,
82
+ description: "Allow ls command"
83
+ },
84
+ {
85
+ id: "allow-npm-install",
86
+ pattern: "Bash(npm install*)",
87
+ decision: "allow",
88
+ scope: "global",
89
+ priority: 10,
90
+ description: "Allow npm install"
91
+ },
92
+ {
93
+ id: "allow-bun-install",
94
+ pattern: "Bash(bun install*)",
95
+ decision: "allow",
96
+ scope: "global",
97
+ priority: 10,
98
+ description: "Allow bun install"
99
+ },
100
+ // Ask for potentially dangerous operations
101
+ {
102
+ id: "ask-git-push",
103
+ pattern: "Bash(git push*)",
104
+ decision: "ask",
105
+ scope: "global",
106
+ priority: 20,
107
+ description: "Ask before git push"
108
+ },
109
+ {
110
+ id: "ask-git-commit",
111
+ pattern: "Bash(git commit*)",
112
+ decision: "ask",
113
+ scope: "global",
114
+ priority: 20,
115
+ description: "Ask before git commit"
116
+ }
117
+ ];
118
+ const DEFAULT_PERMISSION_CONFIG = {
119
+ rules: DEFAULT_PERMISSION_RULES,
120
+ defaultDecision: "ask",
121
+ debug: false
122
+ };
123
+ export {
124
+ DEFAULT_PERMISSION_CONFIG,
125
+ DEFAULT_PERMISSION_RULES
126
+ };
127
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/core/permissions/types.ts"],
4
+ "sourcesContent": ["/**\n * Permission Rule Engine Types\n *\n * Defines the types for the enhanced permission rules system with\n * pattern matching and rule priorities.\n */\n\n/**\n * Decision type for permission rules\n */\nexport type PermissionDecision = 'allow' | 'deny' | 'ask'\n\n/**\n * Scope for permission rules\n */\nexport type PermissionScope = 'global' | 'project'\n\n/**\n * Permission rule definition\n */\nexport interface PermissionRule {\n /** Unique identifier for the rule */\n id: string\n /** Pattern to match tool use, supports wildcards */\n pattern: string\n /** Decision when pattern matches */\n decision: PermissionDecision\n /** Scope of the rule */\n scope: PermissionScope\n /** Priority (lower number = higher priority) */\n priority: number\n /** Optional description */\n description?: string\n /** When the rule was created */\n createdAt?: number\n /** Optional expiration timestamp */\n expiresAt?: number\n}\n\n/**\n * Result of evaluating a permission rule\n */\nexport interface PermissionEvaluationResult {\n /** The final decision */\n decision: PermissionDecision\n /** The rule that matched (null if default) */\n matchedRule: PermissionRule | null\n /** Debug info about the evaluation */\n evaluationPath?: string[]\n}\n\n/**\n * Configuration for the permission rule engine\n */\nexport interface PermissionRulesConfig {\n /** List of permission rules */\n rules: PermissionRule[]\n /** Default decision when no rule matches */\n defaultDecision: PermissionDecision\n /** Whether to enable rule evaluation debugging */\n debug?: boolean\n}\n\n/**\n * Default permission rules configuration\n *\n * Pattern format:\n * - \"ToolName\" - matches any use of the tool\n * - \"ToolName(*)\" - matches any params (explicit)\n * - \"ToolName(exact)\" - matches exact param\n * - \"ToolName(prefix*)\" - matches prefix with any suffix\n *\n * For Bash, the param is the first two words of the command.\n * For Read/Edit, the param is the file path.\n */\nexport const DEFAULT_PERMISSION_RULES: PermissionRule[] = [\n // Deny dangerous operations\n {\n id: 'deny-rm-rf',\n pattern: 'Bash(rm -rf*)',\n decision: 'deny',\n scope: 'global',\n priority: 1,\n description: 'Block recursive force delete',\n },\n {\n id: 'deny-rm-force',\n pattern: 'Bash(rm -f*)',\n decision: 'deny',\n scope: 'global',\n priority: 1,\n description: 'Block force delete',\n },\n {\n id: 'deny-env-files',\n pattern: 'Read(.env*)',\n decision: 'deny',\n scope: 'global',\n priority: 1,\n description: 'Block reading .env files',\n },\n {\n id: 'deny-ssh-keys',\n pattern: 'Read(*.ssh*)',\n decision: 'deny',\n scope: 'global',\n priority: 1,\n description: 'Block reading SSH keys',\n },\n {\n id: 'deny-credentials',\n pattern: 'Read(*credentials*)',\n decision: 'deny',\n scope: 'global',\n priority: 1,\n description: 'Block reading credential files',\n },\n // Allow safe operations\n {\n id: 'allow-git-status',\n pattern: 'Bash(git status*)',\n decision: 'allow',\n scope: 'global',\n priority: 10,\n description: 'Allow git status',\n },\n {\n id: 'allow-git-diff',\n pattern: 'Bash(git diff*)',\n decision: 'allow',\n scope: 'global',\n priority: 10,\n description: 'Allow git diff',\n },\n {\n id: 'allow-git-log',\n pattern: 'Bash(git log*)',\n decision: 'allow',\n scope: 'global',\n priority: 10,\n description: 'Allow git log',\n },\n {\n id: 'allow-git-branch',\n pattern: 'Bash(git branch*)',\n decision: 'allow',\n scope: 'global',\n priority: 10,\n description: 'Allow git branch',\n },\n {\n id: 'allow-ls',\n pattern: 'Bash(ls *)',\n decision: 'allow',\n scope: 'global',\n priority: 10,\n description: 'Allow ls command',\n },\n {\n id: 'allow-npm-install',\n pattern: 'Bash(npm install*)',\n decision: 'allow',\n scope: 'global',\n priority: 10,\n description: 'Allow npm install',\n },\n {\n id: 'allow-bun-install',\n pattern: 'Bash(bun install*)',\n decision: 'allow',\n scope: 'global',\n priority: 10,\n description: 'Allow bun install',\n },\n // Ask for potentially dangerous operations\n {\n id: 'ask-git-push',\n pattern: 'Bash(git push*)',\n decision: 'ask',\n scope: 'global',\n priority: 20,\n description: 'Ask before git push',\n },\n {\n id: 'ask-git-commit',\n pattern: 'Bash(git commit*)',\n decision: 'ask',\n scope: 'global',\n priority: 20,\n description: 'Ask before git commit',\n },\n]\n\n/**\n * Default permission configuration\n */\nexport const DEFAULT_PERMISSION_CONFIG: PermissionRulesConfig = {\n rules: DEFAULT_PERMISSION_RULES,\n defaultDecision: 'ask',\n debug: false,\n}\n"],
5
+ "mappings": "AA2EO,MAAM,2BAA6C;AAAA;AAAA,EAExD;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA;AAAA,EAEA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA;AAAA,EAEA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AAAA,EACA;AAAA,IACE,IAAI;AAAA,IACJ,SAAS;AAAA,IACT,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,EACf;AACF;AAKO,MAAM,4BAAmD;AAAA,EAC9D,OAAO;AAAA,EACP,iBAAiB;AAAA,EACjB,OAAO;AACT;",
6
+ "names": []
7
+ }