@within-7/minto 0.1.7 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.js +155 -37
- package/dist/Tool.js +38 -0
- package/dist/Tool.js.map +3 -3
- package/dist/commands/agents/AgentsCommand.js +73 -49
- package/dist/commands/agents/AgentsCommand.js.map +2 -2
- package/dist/commands/agents/constants.js +1 -1
- package/dist/commands/agents/constants.js.map +1 -1
- package/dist/commands/agents/index.js +1 -1
- package/dist/commands/bug.js +74 -7
- package/dist/commands/bug.js.map +3 -3
- package/dist/commands/clear.js +3 -0
- package/dist/commands/clear.js.map +2 -2
- package/dist/commands/compact.js +37 -0
- package/dist/commands/compact.js.map +2 -2
- package/dist/commands/context.js +85 -0
- package/dist/commands/context.js.map +7 -0
- package/dist/commands/ctx_viz.js +18 -10
- package/dist/commands/ctx_viz.js.map +2 -2
- package/dist/commands/doctor.js +158 -12
- package/dist/commands/doctor.js.map +2 -2
- package/dist/commands/export.js +157 -0
- package/dist/commands/export.js.map +7 -0
- package/dist/commands/mcp-interactive.js +28 -18
- package/dist/commands/mcp-interactive.js.map +2 -2
- package/dist/commands/model.js +9 -7
- package/dist/commands/model.js.map +2 -2
- package/dist/commands/permissions.js +87 -0
- package/dist/commands/permissions.js.map +7 -0
- package/dist/commands/plugin/AddMarketplaceForm.js +3 -2
- package/dist/commands/plugin/AddMarketplaceForm.js.map +2 -2
- package/dist/commands/plugin/ConfirmDialog.js +2 -1
- package/dist/commands/plugin/ConfirmDialog.js.map +2 -2
- package/dist/commands/plugin/ErrorView.js +2 -1
- package/dist/commands/plugin/ErrorView.js.map +2 -2
- package/dist/commands/plugin/InstalledPluginsByMarketplace.js +5 -4
- package/dist/commands/plugin/InstalledPluginsByMarketplace.js.map +2 -2
- package/dist/commands/plugin/InstalledPluginsManager.js +5 -4
- package/dist/commands/plugin/InstalledPluginsManager.js.map +2 -2
- package/dist/commands/plugin/MainMenu.js +2 -1
- package/dist/commands/plugin/MainMenu.js.map +2 -2
- package/dist/commands/plugin/MarketplaceManager.js +5 -4
- package/dist/commands/plugin/MarketplaceManager.js.map +2 -2
- package/dist/commands/plugin/MarketplaceSelector.js +4 -3
- package/dist/commands/plugin/MarketplaceSelector.js.map +2 -2
- package/dist/commands/plugin/PlaceholderScreen.js +3 -2
- package/dist/commands/plugin/PlaceholderScreen.js.map +2 -2
- package/dist/commands/plugin/PluginBrowser.js +6 -5
- package/dist/commands/plugin/PluginBrowser.js.map +2 -2
- package/dist/commands/plugin/PluginDetailsInstall.js +5 -4
- package/dist/commands/plugin/PluginDetailsInstall.js.map +2 -2
- package/dist/commands/plugin/PluginDetailsManage.js +4 -3
- package/dist/commands/plugin/PluginDetailsManage.js.map +2 -2
- package/dist/commands/plugin.js +16 -15
- package/dist/commands/plugin.js.map +2 -2
- package/dist/commands/quit.js +3 -1
- package/dist/commands/quit.js.map +2 -2
- package/dist/commands/sandbox.js +105 -0
- package/dist/commands/sandbox.js.map +7 -0
- package/dist/commands/setup.js +2 -1
- package/dist/commands/setup.js.map +2 -2
- package/dist/commands/status.js +59 -0
- package/dist/commands/status.js.map +7 -0
- package/dist/commands/tasks.js +108 -0
- package/dist/commands/tasks.js.map +7 -0
- package/dist/commands/todos.js +123 -0
- package/dist/commands/todos.js.map +7 -0
- package/dist/commands/undo.js +245 -0
- package/dist/commands/undo.js.map +7 -0
- package/dist/commands.js +22 -2
- package/dist/commands.js.map +2 -2
- package/dist/components/AgentThinkingBlock.js +10 -18
- package/dist/components/AgentThinkingBlock.js.map +2 -2
- package/dist/components/AsciiLogo.js +7 -8
- package/dist/components/AsciiLogo.js.map +2 -2
- package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js +3 -2
- package/dist/components/AskUserQuestionDialog/AskUserQuestionDialog.js.map +2 -2
- package/dist/components/AskUserQuestionDialog/QuestionView.js +2 -1
- package/dist/components/AskUserQuestionDialog/QuestionView.js.map +2 -2
- package/dist/components/BackgroundTasksPanel.js +78 -29
- package/dist/components/BackgroundTasksPanel.js.map +2 -2
- package/dist/components/BashStreamingProgress.js +24 -0
- package/dist/components/BashStreamingProgress.js.map +7 -0
- package/dist/components/CollapsibleHint.js +15 -0
- package/dist/components/CollapsibleHint.js.map +7 -0
- package/dist/components/Config.js +3 -2
- package/dist/components/Config.js.map +2 -2
- package/dist/components/ConsoleOAuthFlow.js +2 -1
- package/dist/components/ConsoleOAuthFlow.js.map +2 -2
- package/dist/components/Cost.js +2 -1
- package/dist/components/Cost.js.map +2 -2
- package/dist/components/FileEditToolUpdatedMessage.js +1 -1
- package/dist/components/FileEditToolUpdatedMessage.js.map +2 -2
- package/dist/components/HeaderBar.js +13 -8
- package/dist/components/HeaderBar.js.map +2 -2
- package/dist/components/HistorySearchOverlay.js +4 -3
- package/dist/components/HistorySearchOverlay.js.map +2 -2
- package/dist/components/HotkeyHelpPanel.js +134 -0
- package/dist/components/HotkeyHelpPanel.js.map +7 -0
- package/dist/components/InvalidConfigDialog.js +2 -1
- package/dist/components/InvalidConfigDialog.js.map +2 -2
- package/dist/components/Logo.js +24 -68
- package/dist/components/Logo.js.map +2 -2
- package/dist/components/MCPServerApprovalDialog.js +2 -1
- package/dist/components/MCPServerApprovalDialog.js.map +2 -2
- package/dist/components/MCPServerDialogCopy.js +2 -1
- package/dist/components/MCPServerDialogCopy.js.map +2 -2
- package/dist/components/MCPServerMultiselectDialog.js +2 -1
- package/dist/components/MCPServerMultiselectDialog.js.map +2 -2
- package/dist/components/Message.js +23 -7
- package/dist/components/Message.js.map +3 -3
- package/dist/components/MessageSelector.js +4 -3
- package/dist/components/MessageSelector.js.map +2 -2
- package/dist/components/ModeIndicator.js +2 -1
- package/dist/components/ModeIndicator.js.map +2 -2
- package/dist/components/ModelConfig.js +20 -6
- package/dist/components/ModelConfig.js.map +2 -2
- package/dist/components/ModelListManager.js +7 -6
- package/dist/components/ModelListManager.js.map +2 -2
- package/dist/components/ModelSelector/ModelSelector.js +27 -14
- package/dist/components/ModelSelector/ModelSelector.js.map +2 -2
- package/dist/components/Onboarding.js +22 -16
- package/dist/components/Onboarding.js.map +2 -2
- package/dist/components/OperationSummary.js +130 -0
- package/dist/components/OperationSummary.js.map +7 -0
- package/dist/components/ProgressBar.js +74 -0
- package/dist/components/ProgressBar.js.map +7 -0
- package/dist/components/PromptInput.js +210 -87
- package/dist/components/PromptInput.js.map +2 -2
- package/dist/components/RequestStatusIndicator.js +194 -0
- package/dist/components/RequestStatusIndicator.js.map +7 -0
- package/dist/components/SensitiveFileWarning.js +31 -0
- package/dist/components/SensitiveFileWarning.js.map +7 -0
- package/dist/components/Spinner.js +141 -27
- package/dist/components/Spinner.js.map +2 -2
- package/dist/components/SpinnerSymbol.js +21 -27
- package/dist/components/SpinnerSymbol.js.map +2 -2
- package/dist/components/StreamingBashOutput.js +9 -8
- package/dist/components/StreamingBashOutput.js.map +2 -2
- package/dist/components/StructuredDiff.js +6 -8
- package/dist/components/StructuredDiff.js.map +2 -2
- package/dist/components/SubagentBlock.js +5 -3
- package/dist/components/SubagentBlock.js.map +2 -2
- package/dist/components/SubagentProgress.js +17 -15
- package/dist/components/SubagentProgress.js.map +2 -2
- package/dist/components/TaskCard.js +30 -24
- package/dist/components/TaskCard.js.map +2 -2
- package/dist/components/TextInput.js +9 -1
- package/dist/components/TextInput.js.map +2 -2
- package/dist/components/TodoChangeBlock.js +1 -1
- package/dist/components/TodoChangeBlock.js.map +2 -2
- package/dist/components/TodoPanel.js +140 -31
- package/dist/components/TodoPanel.js.map +3 -3
- package/dist/components/TokenCounter.js +74 -0
- package/dist/components/TokenCounter.js.map +7 -0
- package/dist/components/TokenWarning.js +2 -1
- package/dist/components/TokenWarning.js.map +2 -2
- package/dist/components/ToolUseLoader.js +2 -2
- package/dist/components/ToolUseLoader.js.map +2 -2
- package/dist/components/TreeConnector.js +26 -0
- package/dist/components/TreeConnector.js.map +7 -0
- package/dist/components/TrustDialog.js +2 -1
- package/dist/components/TrustDialog.js.map +2 -2
- package/dist/components/TurnCompletionIndicator.js +18 -0
- package/dist/components/TurnCompletionIndicator.js.map +7 -0
- package/dist/components/binary-feedback/BinaryFeedbackView.js +2 -1
- package/dist/components/binary-feedback/BinaryFeedbackView.js.map +2 -2
- package/dist/components/messages/AssistantTextMessage.js +20 -9
- package/dist/components/messages/AssistantTextMessage.js.map +2 -2
- package/dist/components/messages/AssistantThinkingMessage.js +18 -3
- package/dist/components/messages/AssistantThinkingMessage.js.map +2 -2
- package/dist/components/messages/AssistantToolUseMessage.js +17 -10
- package/dist/components/messages/AssistantToolUseMessage.js.map +2 -2
- package/dist/components/messages/GroupRenderer.js +54 -0
- package/dist/components/messages/GroupRenderer.js.map +7 -0
- package/dist/components/messages/NestedTasksPreview.js +24 -0
- package/dist/components/messages/NestedTasksPreview.js.map +7 -0
- package/dist/components/messages/ParallelTasksGroupView.js +93 -0
- package/dist/components/messages/ParallelTasksGroupView.js.map +7 -0
- package/dist/components/messages/TaskInModuleView.js +218 -0
- package/dist/components/messages/TaskInModuleView.js.map +7 -0
- package/dist/components/messages/TaskOutputContent.js +56 -0
- package/dist/components/messages/TaskOutputContent.js.map +7 -0
- package/dist/components/messages/UserPromptMessage.js +2 -2
- package/dist/components/messages/UserPromptMessage.js.map +2 -2
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +2 -3
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +2 -2
- package/dist/components/permissions/FallbackPermissionRequest.js +4 -4
- package/dist/components/permissions/FallbackPermissionRequest.js.map +2 -2
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +4 -4
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +2 -2
- package/dist/constants/colors.js +120 -54
- package/dist/constants/colors.js.map +2 -2
- package/dist/constants/formatRules.js +102 -0
- package/dist/constants/formatRules.js.map +7 -0
- package/dist/constants/prompts.js +12 -34
- package/dist/constants/prompts.js.map +2 -2
- package/dist/constants/symbols.js +64 -6
- package/dist/constants/symbols.js.map +2 -2
- package/dist/constants/timing.js +5 -0
- package/dist/constants/timing.js.map +2 -2
- package/dist/constants/toolInputExamples.js +84 -0
- package/dist/constants/toolInputExamples.js.map +7 -0
- package/dist/core/backupManager.js +321 -0
- package/dist/core/backupManager.js.map +7 -0
- package/dist/core/config/defaults.js +84 -0
- package/dist/core/config/defaults.js.map +7 -0
- package/dist/core/config/index.js +111 -0
- package/dist/core/config/index.js.map +7 -0
- package/dist/core/config/loader.js +221 -0
- package/dist/core/config/loader.js.map +7 -0
- package/dist/core/config/migrations.js +128 -0
- package/dist/core/config/migrations.js.map +7 -0
- package/dist/core/config/schema.js +178 -0
- package/dist/core/config/schema.js.map +7 -0
- package/dist/core/costTracker.js +129 -0
- package/dist/core/costTracker.js.map +7 -0
- package/dist/core/gitAutoCommit.js +287 -0
- package/dist/core/gitAutoCommit.js.map +7 -0
- package/dist/core/index.js +8 -0
- package/dist/core/index.js.map +7 -0
- package/dist/core/operationTracker.js +212 -0
- package/dist/core/operationTracker.js.map +7 -0
- package/dist/core/permissions/auditLog.js +204 -0
- package/dist/core/permissions/auditLog.js.map +7 -0
- package/dist/core/permissions/engine/index.js +3 -0
- package/dist/core/permissions/engine/index.js.map +7 -0
- package/dist/core/permissions/engine/permissionEngine.js +106 -0
- package/dist/core/permissions/engine/permissionEngine.js.map +7 -0
- package/dist/core/permissions/engine/types.js +1 -0
- package/dist/core/permissions/engine/types.js.map +7 -0
- package/dist/core/permissions/index.js +84 -0
- package/dist/core/permissions/index.js.map +7 -0
- package/dist/core/permissions/ruleEngine.js +259 -0
- package/dist/core/permissions/ruleEngine.js.map +7 -0
- package/dist/core/permissions/rules/allowedToolsRule.js +62 -0
- package/dist/core/permissions/rules/allowedToolsRule.js.map +7 -0
- package/dist/core/permissions/rules/autoEscalationRule.js +296 -0
- package/dist/core/permissions/rules/autoEscalationRule.js.map +7 -0
- package/dist/core/permissions/rules/index.js +46 -0
- package/dist/core/permissions/rules/index.js.map +7 -0
- package/dist/core/permissions/rules/planModeRule.js +55 -0
- package/dist/core/permissions/rules/planModeRule.js.map +7 -0
- package/dist/core/permissions/rules/projectBoundaryRule.js +173 -0
- package/dist/core/permissions/rules/projectBoundaryRule.js.map +7 -0
- package/dist/core/permissions/rules/safeModeRule.js +65 -0
- package/dist/core/permissions/rules/safeModeRule.js.map +7 -0
- package/dist/core/permissions/rules/sensitivePathsRule.js +345 -0
- package/dist/core/permissions/rules/sensitivePathsRule.js.map +7 -0
- package/dist/core/permissions/types.js +127 -0
- package/dist/core/permissions/types.js.map +7 -0
- package/dist/core/tokenStats.js +9 -0
- package/dist/core/tokenStats.js.map +7 -0
- package/dist/core/tokenStatsManager.js +331 -0
- package/dist/core/tokenStatsManager.js.map +7 -0
- package/dist/core/tools/executor.js +143 -0
- package/dist/core/tools/executor.js.map +7 -0
- package/dist/core/tools/index.js +15 -0
- package/dist/core/tools/index.js.map +7 -0
- package/dist/core/tools/registry.js +183 -0
- package/dist/core/tools/registry.js.map +7 -0
- package/dist/core/tools/types.js +1 -0
- package/dist/core/tools/types.js.map +7 -0
- package/dist/cost-tracker.js +23 -15
- package/dist/cost-tracker.js.map +2 -2
- package/dist/entrypoints/cli.js +158 -130
- package/dist/entrypoints/cli.js.map +2 -2
- package/dist/entrypoints/mcp.js +12 -4
- package/dist/entrypoints/mcp.js.map +2 -2
- package/dist/history.js +14 -3
- package/dist/history.js.map +2 -2
- package/dist/hooks/useAgentTokenStats.js +72 -0
- package/dist/hooks/useAgentTokenStats.js.map +7 -0
- package/dist/hooks/useAgentTranscripts.js +140 -0
- package/dist/hooks/useAgentTranscripts.js.map +7 -0
- package/dist/hooks/useAnimationSync.js +53 -0
- package/dist/hooks/useAnimationSync.js.map +7 -0
- package/dist/hooks/useArrowKeyHistory.js +4 -2
- package/dist/hooks/useArrowKeyHistory.js.map +2 -2
- package/dist/hooks/useCanUseTool.js +3 -1
- package/dist/hooks/useCanUseTool.js.map +2 -2
- package/dist/hooks/useExitOnCtrlCD.js +9 -5
- package/dist/hooks/useExitOnCtrlCD.js.map +2 -2
- package/dist/hooks/useHookStatus.js +40 -0
- package/dist/hooks/useHookStatus.js.map +7 -0
- package/dist/hooks/useLogMessages.js +29 -2
- package/dist/hooks/useLogMessages.js.map +2 -2
- package/dist/hooks/useMessageGroups.js +43 -0
- package/dist/hooks/useMessageGroups.js.map +7 -0
- package/dist/hooks/useTerminalSize.js +62 -6
- package/dist/hooks/useTerminalSize.js.map +2 -2
- package/dist/hooks/useUnifiedCompletion.js +69 -0
- package/dist/hooks/useUnifiedCompletion.js.map +2 -2
- package/dist/i18n/index.js +109 -0
- package/dist/i18n/index.js.map +7 -0
- package/dist/i18n/locales/en.js +348 -0
- package/dist/i18n/locales/en.js.map +7 -0
- package/dist/i18n/locales/index.js +7 -0
- package/dist/i18n/locales/index.js.map +7 -0
- package/dist/i18n/locales/zh-CN.js +348 -0
- package/dist/i18n/locales/zh-CN.js.map +7 -0
- package/dist/i18n/types.js +8 -0
- package/dist/i18n/types.js.map +7 -0
- package/dist/permissions.js +28 -1
- package/dist/permissions.js.map +2 -2
- package/dist/query.js +253 -21
- package/dist/query.js.map +3 -3
- package/dist/screens/REPL.js +523 -194
- package/dist/screens/REPL.js.map +3 -3
- package/dist/services/adapters/chatCompletions.js +3 -1
- package/dist/services/adapters/chatCompletions.js.map +2 -2
- package/dist/services/adapters/messageNormalizer.js +354 -0
- package/dist/services/adapters/messageNormalizer.js.map +7 -0
- package/dist/services/adapters/responsesAPI.js +6 -3
- package/dist/services/adapters/responsesAPI.js.map +2 -2
- package/dist/services/checkpointManager.js +386 -0
- package/dist/services/checkpointManager.js.map +7 -0
- package/dist/services/claude.js +192 -14
- package/dist/services/claude.js.map +3 -3
- package/dist/services/compressionService.js +50 -1
- package/dist/services/compressionService.js.map +2 -2
- package/dist/services/contextMonitor.js +162 -0
- package/dist/services/contextMonitor.js.map +7 -0
- package/dist/services/customCommands.js +60 -41
- package/dist/services/customCommands.js.map +2 -2
- package/dist/services/hookExecutor.js +173 -1
- package/dist/services/hookExecutor.js.map +2 -2
- package/dist/services/intelligentCompactor.js +281 -0
- package/dist/services/intelligentCompactor.js.map +7 -0
- package/dist/services/lspConfig.js +109 -0
- package/dist/services/lspConfig.js.map +7 -0
- package/dist/services/mcpClient.js +338 -43
- package/dist/services/mcpClient.js.map +2 -2
- package/dist/services/modelOrchestrator.js +310 -0
- package/dist/services/modelOrchestrator.js.map +7 -0
- package/dist/services/openai.js +8 -1
- package/dist/services/openai.js.map +2 -2
- package/dist/services/outputStyles.js +138 -0
- package/dist/services/outputStyles.js.map +7 -0
- package/dist/services/plugins/index.js +5 -0
- package/dist/services/plugins/index.js.map +7 -0
- package/dist/services/plugins/lspServers.js +188 -0
- package/dist/services/plugins/lspServers.js.map +7 -0
- package/dist/services/plugins/pluginRuntime.js +229 -0
- package/dist/services/plugins/pluginRuntime.js.map +7 -0
- package/dist/services/plugins/pluginValidation.js +219 -0
- package/dist/services/plugins/pluginValidation.js.map +7 -0
- package/dist/services/plugins/skillMarketplace.js +556 -0
- package/dist/services/plugins/skillMarketplace.js.map +7 -0
- package/dist/services/responseStateManager.js +37 -3
- package/dist/services/responseStateManager.js.map +2 -2
- package/dist/services/sandbox/filesystemBoundary.js +341 -0
- package/dist/services/sandbox/filesystemBoundary.js.map +7 -0
- package/dist/services/sandbox/index.js +14 -0
- package/dist/services/sandbox/index.js.map +7 -0
- package/dist/services/sandbox/networkProxy.js +293 -0
- package/dist/services/sandbox/networkProxy.js.map +7 -0
- package/dist/services/sandbox/sandboxController.js +574 -0
- package/dist/services/sandbox/sandboxController.js.map +7 -0
- package/dist/services/sandbox/types.js +50 -0
- package/dist/services/sandbox/types.js.map +7 -0
- package/dist/services/sessionMemory.js +266 -0
- package/dist/services/sessionMemory.js.map +7 -0
- package/dist/services/taskRouter.js +324 -0
- package/dist/services/taskRouter.js.map +7 -0
- package/dist/tools/ArchitectTool/ArchitectTool.js +7 -1
- package/dist/tools/ArchitectTool/ArchitectTool.js.map +2 -2
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +6 -2
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +2 -2
- package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js +2 -1
- package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js.map +2 -2
- package/dist/tools/BaseTool.js +72 -0
- package/dist/tools/BaseTool.js.map +7 -0
- package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js +3 -0
- package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js.map +2 -2
- package/dist/tools/BashTool/BashTool.js +79 -3
- package/dist/tools/BashTool/BashTool.js.map +2 -2
- package/dist/tools/BashTool/BashToolResultMessage.js +3 -0
- package/dist/tools/BashTool/BashToolResultMessage.js.map +2 -2
- package/dist/tools/BashTool/OutputLine.js +54 -0
- package/dist/tools/BashTool/OutputLine.js.map +2 -2
- package/dist/tools/BashTool/prompt.js +336 -3
- package/dist/tools/BashTool/prompt.js.map +2 -2
- package/dist/tools/FileEditTool/FileEditTool.js +29 -4
- package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
- package/dist/tools/FileEditTool/prompt.js +6 -3
- package/dist/tools/FileEditTool/prompt.js.map +2 -2
- package/dist/tools/FileWriteTool/FileWriteTool.js +5 -5
- package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
- package/dist/tools/FileWriteTool/prompt.js +4 -2
- package/dist/tools/FileWriteTool/prompt.js.map +2 -2
- package/dist/tools/GlobTool/GlobTool.js +4 -2
- package/dist/tools/GlobTool/GlobTool.js.map +2 -2
- package/dist/tools/GrepTool/GrepTool.js +36 -7
- package/dist/tools/GrepTool/GrepTool.js.map +2 -2
- package/dist/tools/KillShellTool/KillShellToolResultMessage.js +3 -0
- package/dist/tools/KillShellTool/KillShellToolResultMessage.js.map +2 -2
- package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js +109 -0
- package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js.map +7 -0
- package/dist/tools/ListMcpResourcesTool/prompt.js +19 -0
- package/dist/tools/ListMcpResourcesTool/prompt.js.map +7 -0
- package/dist/tools/LspTool/LspTool.js +664 -0
- package/dist/tools/LspTool/LspTool.js.map +7 -0
- package/dist/tools/LspTool/prompt.js +27 -0
- package/dist/tools/LspTool/prompt.js.map +7 -0
- package/dist/tools/MCPTool/MCPTool.js +9 -1
- package/dist/tools/MCPTool/MCPTool.js.map +2 -2
- package/dist/tools/MemoryReadTool/MemoryReadTool.js +19 -6
- package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +2 -2
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +6 -6
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +2 -2
- package/dist/tools/MultiEditTool/MultiEditTool.js +19 -2
- package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
- package/dist/tools/MultiEditTool/prompt.js +5 -3
- package/dist/tools/MultiEditTool/prompt.js.map +2 -2
- package/dist/tools/NotebookEditTool/NotebookEditTool.js +7 -2
- package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
- package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +2 -2
- package/dist/tools/PlanModeTool/EnterPlanModeTool.js +75 -0
- package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +7 -0
- package/dist/tools/PlanModeTool/ExitPlanModeTool.js +109 -0
- package/dist/tools/PlanModeTool/ExitPlanModeTool.js.map +7 -0
- package/dist/tools/PlanModeTool/prompt.js +94 -0
- package/dist/tools/PlanModeTool/prompt.js.map +7 -0
- package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js +130 -0
- package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js.map +7 -0
- package/dist/tools/ReadMcpResourceTool/prompt.js +17 -0
- package/dist/tools/ReadMcpResourceTool/prompt.js.map +7 -0
- package/dist/tools/SkillTool/SkillTool.js +10 -4
- package/dist/tools/SkillTool/SkillTool.js.map +2 -2
- package/dist/tools/SkillTool/prompt.js +1 -1
- package/dist/tools/SkillTool/prompt.js.map +1 -1
- package/dist/tools/SlashCommandTool/SlashCommandTool.js +260 -0
- package/dist/tools/SlashCommandTool/SlashCommandTool.js.map +7 -0
- package/dist/tools/SlashCommandTool/prompt.js +35 -0
- package/dist/tools/SlashCommandTool/prompt.js.map +7 -0
- package/dist/tools/TaskOutputTool/TaskOutputTool.js +190 -0
- package/dist/tools/TaskOutputTool/TaskOutputTool.js.map +7 -0
- package/dist/tools/TaskOutputTool/prompt.js +15 -0
- package/dist/tools/TaskOutputTool/prompt.js.map +7 -0
- package/dist/tools/TaskTool/TaskTool.js +310 -104
- package/dist/tools/TaskTool/TaskTool.js.map +2 -2
- package/dist/tools/TaskTool/prompt.js.map +2 -2
- package/dist/tools/TodoWriteTool/TodoWriteTool.js +42 -77
- package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +2 -2
- package/dist/tools/URLFetcherTool/URLFetcherTool.js +4 -1
- package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +2 -2
- package/dist/tools/URLFetcherTool/cache.js +55 -8
- package/dist/tools/URLFetcherTool/cache.js.map +2 -2
- package/dist/tools.js +31 -2
- package/dist/tools.js.map +2 -2
- package/dist/types/hooks.js +4 -0
- package/dist/types/hooks.js.map +2 -2
- package/dist/types/marketplace.js.map +2 -2
- package/dist/types/messageGroup.js +36 -0
- package/dist/types/messageGroup.js.map +7 -0
- package/dist/types/plugin.js.map +2 -2
- package/dist/types/thinking.js +1 -0
- package/dist/types/thinking.js.map +7 -0
- package/dist/utils/BackgroundShellManager.js +136 -39
- package/dist/utils/BackgroundShellManager.js.map +2 -2
- package/dist/utils/CircuitBreaker.js +242 -0
- package/dist/utils/CircuitBreaker.js.map +7 -0
- package/dist/utils/MessageBatchBuffer.js +102 -0
- package/dist/utils/MessageBatchBuffer.js.map +7 -0
- package/dist/utils/PersistentShell.js +151 -1
- package/dist/utils/PersistentShell.js.map +2 -2
- package/dist/utils/agentLoader.js +1 -23
- package/dist/utils/agentLoader.js.map +2 -2
- package/dist/utils/agentTranscripts.js +641 -0
- package/dist/utils/agentTranscripts.js.map +7 -0
- package/dist/utils/animationManager.js +213 -0
- package/dist/utils/animationManager.js.map +7 -0
- package/dist/utils/animationSync.js +110 -0
- package/dist/utils/animationSync.js.map +7 -0
- package/dist/utils/ask.js +2 -0
- package/dist/utils/ask.js.map +2 -2
- package/dist/utils/asyncFile.js +215 -0
- package/dist/utils/asyncFile.js.map +7 -0
- package/dist/utils/backgroundAgentManager.js +231 -0
- package/dist/utils/backgroundAgentManager.js.map +7 -0
- package/dist/utils/config.js +108 -10
- package/dist/utils/config.js.map +2 -2
- package/dist/utils/conversationRecovery.js +19 -0
- package/dist/utils/conversationRecovery.js.map +2 -2
- package/dist/utils/credentials/CredentialStore.js +1 -0
- package/dist/utils/credentials/CredentialStore.js.map +7 -0
- package/dist/utils/credentials/EncryptedFileStore.js +157 -0
- package/dist/utils/credentials/EncryptedFileStore.js.map +7 -0
- package/dist/utils/credentials/index.js +37 -0
- package/dist/utils/credentials/index.js.map +7 -0
- package/dist/utils/credentials/migration.js +82 -0
- package/dist/utils/credentials/migration.js.map +7 -0
- package/dist/utils/exit.js +73 -0
- package/dist/utils/exit.js.map +7 -0
- package/dist/utils/format.js +73 -5
- package/dist/utils/format.js.map +2 -2
- package/dist/utils/generators.js +76 -6
- package/dist/utils/generators.js.map +2 -2
- package/dist/utils/globalErrorHandler.js +149 -0
- package/dist/utils/globalErrorHandler.js.map +7 -0
- package/dist/utils/groupHandlers/index.js +8 -0
- package/dist/utils/groupHandlers/index.js.map +7 -0
- package/dist/utils/groupHandlers/parallelTasksHandler.js +140 -0
- package/dist/utils/groupHandlers/parallelTasksHandler.js.map +7 -0
- package/dist/utils/groupHandlers/taskHandler.js +104 -0
- package/dist/utils/groupHandlers/taskHandler.js.map +7 -0
- package/dist/utils/groupHandlers/types.js +1 -0
- package/dist/utils/groupHandlers/types.js.map +7 -0
- package/dist/utils/logRotation.js +224 -0
- package/dist/utils/logRotation.js.map +7 -0
- package/dist/utils/markdown.js +13 -1
- package/dist/utils/markdown.js.map +2 -2
- package/dist/utils/marketplaceManager.js +3 -5
- package/dist/utils/marketplaceManager.js.map +2 -2
- package/dist/utils/memSafety.js +264 -0
- package/dist/utils/memSafety.js.map +7 -0
- package/dist/utils/messageGroupManager.js +274 -0
- package/dist/utils/messageGroupManager.js.map +7 -0
- package/dist/utils/messages.js +13 -4
- package/dist/utils/messages.js.map +2 -2
- package/dist/utils/model.js +119 -15
- package/dist/utils/model.js.map +3 -3
- package/dist/utils/permissions/filesystem.js +162 -6
- package/dist/utils/permissions/filesystem.js.map +2 -2
- package/dist/utils/plan/planMode.js +143 -0
- package/dist/utils/plan/planMode.js.map +7 -0
- package/dist/utils/pluginLoader.js +17 -21
- package/dist/utils/pluginLoader.js.map +2 -2
- package/dist/utils/ripgrep.js +55 -2
- package/dist/utils/ripgrep.js.map +2 -2
- package/dist/utils/safePath.js +132 -0
- package/dist/utils/safePath.js.map +7 -0
- package/dist/utils/sanitizeInput.js +32 -0
- package/dist/utils/sanitizeInput.js.map +7 -0
- package/dist/utils/secureKeyStorage.js +312 -0
- package/dist/utils/secureKeyStorage.js.map +7 -0
- package/dist/utils/sensitiveFiles.js +125 -0
- package/dist/utils/sensitiveFiles.js.map +7 -0
- package/dist/utils/session/sessionPlugins.js +67 -0
- package/dist/utils/session/sessionPlugins.js.map +7 -0
- package/dist/utils/taskDisplayUtils.js +257 -0
- package/dist/utils/taskDisplayUtils.js.map +7 -0
- package/dist/utils/teamConfig.js +2 -1
- package/dist/utils/teamConfig.js.map +2 -2
- package/dist/utils/theme.js +6 -6
- package/dist/utils/theme.js.map +1 -1
- package/dist/utils/todoStorage.js +92 -2
- package/dist/utils/todoStorage.js.map +2 -2
- package/dist/utils/toolRiskClassification.js +207 -0
- package/dist/utils/toolRiskClassification.js.map +7 -0
- package/dist/utils/toolTimeout.js +136 -0
- package/dist/utils/toolTimeout.js.map +7 -0
- package/dist/utils/tooling/safeRender.js +116 -0
- package/dist/utils/tooling/safeRender.js.map +7 -0
- package/dist/utils/userFriendlyError.js +346 -0
- package/dist/utils/userFriendlyError.js.map +7 -0
- package/dist/utils/vendor/ripgrep/arm64-darwin/rg +0 -0
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/package.json +17 -5
- package/scripts/postinstall.js +128 -38
- package/dist/commands/agents.js +0 -2086
- package/dist/commands/agents.js.map +0 -7
- package/dist/commands/build.js +0 -74
- package/dist/commands/build.js.map +0 -7
- package/dist/commands/compression.js +0 -57
- package/dist/commands/compression.js.map +0 -7
- package/dist/commands/listen.js +0 -37
- package/dist/commands/listen.js.map +0 -7
- package/dist/commands/login.js +0 -37
- package/dist/commands/login.js.map +0 -7
- package/dist/commands/logout.js +0 -33
- package/dist/commands/logout.js.map +0 -7
- package/dist/commands/mcp.js +0 -40
- package/dist/commands/mcp.js.map +0 -7
- package/dist/commands/mcp_refresh.js +0 -40
- package/dist/commands/mcp_refresh.js.map +0 -7
- package/dist/commands/modelstatus.js +0 -21
- package/dist/commands/modelstatus.js.map +0 -7
- package/dist/commands/onboarding.js +0 -36
- package/dist/commands/onboarding.js.map +0 -7
- package/dist/commands/plugin-interactive.js +0 -446
- package/dist/commands/plugin-interactive.js.map +0 -7
- package/dist/commands/pr_comments.js +0 -61
- package/dist/commands/pr_comments.js.map +0 -7
- package/dist/commands/release-notes.js +0 -30
- package/dist/commands/release-notes.js.map +0 -7
- package/dist/commands/review.js +0 -51
- package/dist/commands/review.js.map +0 -7
- package/dist/components/Bug.js +0 -147
- package/dist/components/Bug.js.map +0 -7
- package/dist/components/ModelSelector.js +0 -2062
- package/dist/components/ModelSelector.js.map +0 -7
- package/dist/components/ModelStatusDisplay.js +0 -87
- package/dist/components/ModelStatusDisplay.js.map +0 -7
- package/dist/entrypoints/cli-wrapper.js +0 -61
- package/dist/entrypoints/cli-wrapper.js.map +0 -7
- package/dist/hooks/useCancelRequest.js +0 -28
- package/dist/hooks/useCancelRequest.js.map +0 -7
- package/dist/screens/Doctor.js +0 -22
- 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,345 @@
|
|
|
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 "View":
|
|
230
|
+
// Actual API name for FileReadTool
|
|
231
|
+
case "Read":
|
|
232
|
+
case "FileRead":
|
|
233
|
+
case "Glob":
|
|
234
|
+
case "Grep":
|
|
235
|
+
return "read";
|
|
236
|
+
case "Replace":
|
|
237
|
+
// Actual API name for FileWriteTool
|
|
238
|
+
case "Write":
|
|
239
|
+
case "FileWrite":
|
|
240
|
+
case "Edit":
|
|
241
|
+
case "FileEdit":
|
|
242
|
+
case "MultiEdit":
|
|
243
|
+
case "NotebookEdit":
|
|
244
|
+
case "NotebookEditCell":
|
|
245
|
+
return "write";
|
|
246
|
+
case "Bash": {
|
|
247
|
+
const command = input.command || "";
|
|
248
|
+
if (/\b(rm|del|rmdir|unlink)\b/.test(command)) {
|
|
249
|
+
return "delete";
|
|
250
|
+
}
|
|
251
|
+
if (/\b(mv|cp|touch|mkdir|echo\s+.*>|cat\s+.*>|tee)\b/.test(command)) {
|
|
252
|
+
return "write";
|
|
253
|
+
}
|
|
254
|
+
if (/\b(cat|head|tail|less|more|grep|find|ls)\b/.test(command)) {
|
|
255
|
+
return "read";
|
|
256
|
+
}
|
|
257
|
+
return "execute";
|
|
258
|
+
}
|
|
259
|
+
default:
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
function extractFilePath(toolName, input) {
|
|
264
|
+
if (input.file_path) return input.file_path;
|
|
265
|
+
if (input.filePath) return input.filePath;
|
|
266
|
+
if (input.path) return input.path;
|
|
267
|
+
if (toolName === "Bash") {
|
|
268
|
+
const command = input.command || "";
|
|
269
|
+
const pathMatch = command.match(
|
|
270
|
+
/(?:cat|rm|mv|cp|head|tail|less|more|touch|mkdir)\s+["']?([^\s"'|&;>]+)/
|
|
271
|
+
);
|
|
272
|
+
if (pathMatch) {
|
|
273
|
+
return pathMatch[1] || null;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
function findMatchingSensitivePaths(filePath, operation) {
|
|
279
|
+
return SENSITIVE_PATHS.filter((sp) => {
|
|
280
|
+
if (sp.operations && !sp.operations.includes(operation)) {
|
|
281
|
+
return false;
|
|
282
|
+
}
|
|
283
|
+
return matchesSensitivePath(filePath, sp);
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
const sensitivePathsRule = {
|
|
287
|
+
name: "sensitive-paths",
|
|
288
|
+
description: "Protects sensitive paths from unauthorized access",
|
|
289
|
+
priority: 100,
|
|
290
|
+
// Highest priority - checked before all other rules
|
|
291
|
+
check(context) {
|
|
292
|
+
const toolName = context.tool.name;
|
|
293
|
+
const input = context.input;
|
|
294
|
+
const operation = getOperationType(toolName, input);
|
|
295
|
+
if (!operation) {
|
|
296
|
+
return { allowed: true };
|
|
297
|
+
}
|
|
298
|
+
const filePath = extractFilePath(toolName, input);
|
|
299
|
+
if (!filePath) {
|
|
300
|
+
return { allowed: true };
|
|
301
|
+
}
|
|
302
|
+
const matches = findMatchingSensitivePaths(filePath, operation);
|
|
303
|
+
if (matches.length === 0) {
|
|
304
|
+
return { allowed: true };
|
|
305
|
+
}
|
|
306
|
+
const blocked = matches.find((m) => m.alwaysBlock);
|
|
307
|
+
if (blocked) {
|
|
308
|
+
return {
|
|
309
|
+
allowed: false,
|
|
310
|
+
reason: `Access to ${blocked.description} is blocked for security`,
|
|
311
|
+
message: `\u{1F512} Access denied: ${blocked.description} (${blocked.category})`
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
const categories = [...new Set(matches.map((m) => m.category))];
|
|
315
|
+
const descriptions = matches.map((m) => m.description).join(", ");
|
|
316
|
+
return {
|
|
317
|
+
allowed: false,
|
|
318
|
+
promptUser: true,
|
|
319
|
+
reason: `Sensitive path access requires confirmation`,
|
|
320
|
+
message: `\u26A0\uFE0F Sensitive ${operation} operation on: ${descriptions}
|
|
321
|
+
Categories: ${categories.join(", ")}`,
|
|
322
|
+
permissionKey: `SensitivePath(${operation}:${filePath})`
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
function isSensitivePath(filePath, operation = "read") {
|
|
327
|
+
return findMatchingSensitivePaths(filePath, operation).length > 0;
|
|
328
|
+
}
|
|
329
|
+
function getSensitivePathInfo(filePath) {
|
|
330
|
+
for (const sp of SENSITIVE_PATHS) {
|
|
331
|
+
if (matchesSensitivePath(filePath, sp)) {
|
|
332
|
+
return sp;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
return null;
|
|
336
|
+
}
|
|
337
|
+
export {
|
|
338
|
+
SENSITIVE_PATHS,
|
|
339
|
+
findMatchingSensitivePaths,
|
|
340
|
+
getSensitivePathInfo,
|
|
341
|
+
isSensitivePath,
|
|
342
|
+
matchesSensitivePath,
|
|
343
|
+
sensitivePathsRule
|
|
344
|
+
};
|
|
345
|
+
//# 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 'View': // Actual API name for FileReadTool\n case 'Read':\n case 'FileRead':\n case 'Glob':\n case 'Grep':\n return 'read'\n case 'Replace': // Actual API name for FileWriteTool\n case 'Write':\n case 'FileWrite':\n case 'Edit':\n case 'FileEdit':\n case 'MultiEdit':\n case 'NotebookEdit':\n case 'NotebookEditCell': // Actual API name for NotebookEditTool\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
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/core/tokenStats.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Token Statistics Types\n *\n * Unified type definitions for token tracking across the application.\n * These types are used by TokenStatsManager to provide consistent\n * token statistics at global, agent, and request levels.\n */\n\n/**\n * Token usage statistics from a single API call\n */\nexport interface TokenUsageRecord {\n /** Input tokens (prompt) */\n inputTokens: number\n /** Output tokens (completion) */\n outputTokens: number\n /** Cache creation tokens (Anthropic-specific) */\n cacheCreationTokens: number\n /** Cache read tokens (Anthropic-specific) */\n cacheReadTokens: number\n /** Total tokens (computed: input + output) */\n totalTokens: number\n /** Estimated cost in USD */\n estimatedCostUSD: number\n /** Data source: 'api' for actual values, 'estimated' for calculated */\n source: 'api' | 'estimated'\n /** Timestamp when this record was created */\n timestamp: number\n /** Model used for this request */\n model: string\n}\n\n/**\n * Aggregated token statistics for a scope (global or per-agent)\n */\nexport interface AggregatedTokenStats {\n /** Total input tokens across all requests */\n totalInputTokens: number\n /** Total output tokens across all requests */\n totalOutputTokens: number\n /** Total cache creation tokens */\n totalCacheCreationTokens: number\n /** Total cache read tokens */\n totalCacheReadTokens: number\n /** Grand total tokens (input + output) */\n grandTotalTokens: number\n /** Total estimated cost in USD */\n totalCostUSD: number\n /** Number of API requests */\n requestCount: number\n /** First request timestamp */\n firstRequestTime?: number\n /** Last request timestamp */\n lastRequestTime?: number\n /** Breakdown by model */\n byModel: Map<string, ModelTokenStats>\n}\n\n/**\n * Per-model token statistics\n */\nexport interface ModelTokenStats {\n /** Model name */\n model: string\n /** Input tokens for this model */\n inputTokens: number\n /** Output tokens for this model */\n outputTokens: number\n /** Total tokens for this model */\n totalTokens: number\n /** Estimated cost for this model */\n estimatedCostUSD: number\n /** Number of requests to this model */\n requestCount: number\n}\n\n/**\n * Scope identifier for hierarchical statistics\n */\nexport type TokenStatsScope =\n | { type: 'global' }\n | { type: 'agent'; agentId: string }\n | { type: 'request'; requestId: string }\n\n/**\n * Event emitted when token stats change\n */\nexport interface TokenStatsEvent {\n /** Type of change */\n eventType: 'usage_recorded' | 'scope_created' | 'scope_completed'\n /** Scope that changed */\n scope: TokenStatsScope\n /** The usage record (for usage_recorded events) */\n usage?: TokenUsageRecord\n /** Current aggregated stats for the scope */\n aggregated: AggregatedTokenStats\n /** Global aggregated stats (always included for convenience) */\n globalStats: AggregatedTokenStats\n}\n\n/**\n * Context for token tracking (passed through the API call chain)\n *\n * This is used to associate token usage with specific agents or tool uses,\n * enabling per-agent token tracking.\n */\nexport interface TokenTrackingContext {\n /** Agent ID if this request is within an agent context */\n agentId?: string\n /** Tool use ID if this request is triggered by a tool */\n toolUseId?: string\n /** Model being used for this request */\n model: string\n}\n\n/**\n * Raw token usage from API response (before processing)\n */\nexport interface RawTokenUsage {\n /** Input tokens from API */\n inputTokens: number\n /** Output tokens from API */\n outputTokens: number\n /** Cache creation tokens (optional, Anthropic-specific) */\n cacheCreationTokens?: number\n /** Cache read tokens (optional, Anthropic/OpenAI) */\n cacheReadTokens?: number\n}\n\n/**\n * Configuration for token estimation when API doesn't return usage\n */\nexport interface TokenEstimationConfig {\n /** Average characters per token (default: 4 for mixed English/Chinese) */\n charsPerToken: number\n /** Default input cost per million tokens in USD */\n defaultInputCostPerMillion: number\n /** Default output cost per million tokens in USD */\n defaultOutputCostPerMillion: number\n}\n\n/**\n * Default estimation configuration\n */\nexport const DEFAULT_ESTIMATION_CONFIG: TokenEstimationConfig = {\n charsPerToken: 4,\n defaultInputCostPerMillion: 3.0,\n defaultOutputCostPerMillion: 15.0,\n}\n"],
|
|
5
|
+
"mappings": "AAgJO,MAAM,4BAAmD;AAAA,EAC9D,eAAe;AAAA,EACf,4BAA4B;AAAA,EAC5B,6BAA6B;AAC/B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|