@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,125 @@
|
|
|
1
|
+
const YOLO_WARNING_PATTERNS = [
|
|
2
|
+
// Environment files
|
|
3
|
+
"**/.env",
|
|
4
|
+
"**/.env.*",
|
|
5
|
+
// Credential files
|
|
6
|
+
"**/credentials.json",
|
|
7
|
+
"**/secrets.*",
|
|
8
|
+
// Private keys and certificates
|
|
9
|
+
"**/*.pem",
|
|
10
|
+
"**/*.key",
|
|
11
|
+
"**/*.p12",
|
|
12
|
+
"**/*.pfx",
|
|
13
|
+
// Package manager auth
|
|
14
|
+
"**/.npmrc",
|
|
15
|
+
"**/.pypirc",
|
|
16
|
+
// SSH keys
|
|
17
|
+
"**/id_rsa",
|
|
18
|
+
"**/id_ed25519",
|
|
19
|
+
"**/id_ecdsa",
|
|
20
|
+
"**/id_dsa",
|
|
21
|
+
// Other auth files
|
|
22
|
+
"**/.netrc",
|
|
23
|
+
"**/.pgpass",
|
|
24
|
+
"**/config/secrets.*",
|
|
25
|
+
// AWS credentials
|
|
26
|
+
"**/.aws/credentials",
|
|
27
|
+
"**/.aws/config",
|
|
28
|
+
// Google Cloud
|
|
29
|
+
"**/service-account*.json",
|
|
30
|
+
"**/gcloud/credentials.db",
|
|
31
|
+
// Docker secrets
|
|
32
|
+
"**/.docker/config.json",
|
|
33
|
+
// Kubernetes secrets
|
|
34
|
+
"**/kubeconfig",
|
|
35
|
+
"**/.kube/config"
|
|
36
|
+
];
|
|
37
|
+
function isSensitiveFile(filePath) {
|
|
38
|
+
const normalizedPath = filePath.replace(/\\/g, "/");
|
|
39
|
+
const fileName = normalizedPath.split("/").pop() || "";
|
|
40
|
+
for (const pattern of YOLO_WARNING_PATTERNS) {
|
|
41
|
+
if (pattern.startsWith("**/")) {
|
|
42
|
+
const filePattern = pattern.slice(3);
|
|
43
|
+
if (filePattern.includes("/")) {
|
|
44
|
+
if (matchPathSuffix(normalizedPath, filePattern)) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
} else {
|
|
48
|
+
if (matchFilePattern(fileName, filePattern)) {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
} else {
|
|
53
|
+
if (matchFilePattern(normalizedPath, pattern)) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
function matchPathSuffix(path, suffixPattern) {
|
|
61
|
+
const regexPattern = suffixPattern.replace(/\./g, "\\.").replace(/\*/g, ".*").replace(/\?/g, ".");
|
|
62
|
+
const regex = new RegExp(`(^|/)${regexPattern}$`);
|
|
63
|
+
return regex.test(path);
|
|
64
|
+
}
|
|
65
|
+
function matchFilePattern(str, pattern) {
|
|
66
|
+
const regexPattern = pattern.replace(/\./g, "\\.").replace(/\*\*/g, "\xA7\xA7").replace(/\*/g, "[^/]*").replace(/§§/g, ".*").replace(/\?/g, ".");
|
|
67
|
+
const regex = new RegExp(`^${regexPattern}$`);
|
|
68
|
+
return regex.test(str);
|
|
69
|
+
}
|
|
70
|
+
function getSensitiveFileReason(filePath) {
|
|
71
|
+
const normalizedPath = filePath.replace(/\\/g, "/").toLowerCase();
|
|
72
|
+
const fileName = normalizedPath.split("/").pop() || "";
|
|
73
|
+
if (fileName === ".env" || fileName.startsWith(".env.")) {
|
|
74
|
+
return "Environment variables file - may contain API keys and secrets";
|
|
75
|
+
}
|
|
76
|
+
if (fileName === "credentials.json") {
|
|
77
|
+
return "Credentials file - may contain authentication tokens";
|
|
78
|
+
}
|
|
79
|
+
if (fileName.startsWith("secrets.") || fileName.includes("/secrets.")) {
|
|
80
|
+
return "Secrets file - may contain sensitive configuration";
|
|
81
|
+
}
|
|
82
|
+
if (fileName.endsWith(".pem") || fileName.endsWith(".key")) {
|
|
83
|
+
return "Private key file - cryptographic key material";
|
|
84
|
+
}
|
|
85
|
+
if (fileName.endsWith(".p12") || fileName.endsWith(".pfx")) {
|
|
86
|
+
return "Certificate file - may contain private keys";
|
|
87
|
+
}
|
|
88
|
+
if (fileName === ".npmrc") {
|
|
89
|
+
return "npm configuration - may contain registry tokens";
|
|
90
|
+
}
|
|
91
|
+
if (fileName === ".pypirc") {
|
|
92
|
+
return "PyPI configuration - may contain upload tokens";
|
|
93
|
+
}
|
|
94
|
+
if (fileName === "id_rsa" || fileName === "id_ed25519" || fileName === "id_ecdsa" || fileName === "id_dsa") {
|
|
95
|
+
return "SSH private key - authentication key";
|
|
96
|
+
}
|
|
97
|
+
if (fileName === ".netrc") {
|
|
98
|
+
return "Netrc file - may contain login credentials";
|
|
99
|
+
}
|
|
100
|
+
if (fileName === ".pgpass") {
|
|
101
|
+
return "PostgreSQL password file";
|
|
102
|
+
}
|
|
103
|
+
if (normalizedPath.includes("/.aws/")) {
|
|
104
|
+
return "AWS configuration - may contain access keys";
|
|
105
|
+
}
|
|
106
|
+
if (fileName.startsWith("service-account") && fileName.endsWith(".json")) {
|
|
107
|
+
return "Service account key - cloud authentication";
|
|
108
|
+
}
|
|
109
|
+
if (normalizedPath.includes("/.docker/config.json")) {
|
|
110
|
+
return "Docker configuration - may contain registry credentials";
|
|
111
|
+
}
|
|
112
|
+
if (fileName === "kubeconfig" || normalizedPath.includes("/.kube/config")) {
|
|
113
|
+
return "Kubernetes configuration - cluster access credentials";
|
|
114
|
+
}
|
|
115
|
+
if (isSensitiveFile(filePath)) {
|
|
116
|
+
return "May contain sensitive information";
|
|
117
|
+
}
|
|
118
|
+
return void 0;
|
|
119
|
+
}
|
|
120
|
+
export {
|
|
121
|
+
YOLO_WARNING_PATTERNS,
|
|
122
|
+
getSensitiveFileReason,
|
|
123
|
+
isSensitiveFile
|
|
124
|
+
};
|
|
125
|
+
//# sourceMappingURL=sensitiveFiles.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/sensitiveFiles.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Sensitive File Detection Utility\n *\n * Provides detection for files that may contain sensitive information\n * (API keys, credentials, private keys, etc.).\n *\n * Used in YOLO mode to display informational warnings without blocking operations.\n */\n\n/**\n * Patterns for files that should trigger warnings in YOLO mode.\n * These files commonly contain sensitive information like:\n * - API keys and tokens\n * - Database credentials\n * - Private keys and certificates\n * - Authentication secrets\n */\nexport const YOLO_WARNING_PATTERNS = [\n // Environment files\n '**/.env',\n '**/.env.*',\n\n // Credential files\n '**/credentials.json',\n '**/secrets.*',\n\n // Private keys and certificates\n '**/*.pem',\n '**/*.key',\n '**/*.p12',\n '**/*.pfx',\n\n // Package manager auth\n '**/.npmrc',\n '**/.pypirc',\n\n // SSH keys\n '**/id_rsa',\n '**/id_ed25519',\n '**/id_ecdsa',\n '**/id_dsa',\n\n // Other auth files\n '**/.netrc',\n '**/.pgpass',\n '**/config/secrets.*',\n\n // AWS credentials\n '**/.aws/credentials',\n '**/.aws/config',\n\n // Google Cloud\n '**/service-account*.json',\n '**/gcloud/credentials.db',\n\n // Docker secrets\n '**/.docker/config.json',\n\n // Kubernetes secrets\n '**/kubeconfig',\n '**/.kube/config',\n] as const\n\n/**\n * Check if a file path matches sensitive file patterns.\n * Returns true if the file should trigger a warning (but not block) in YOLO mode.\n *\n * @param filePath - The file path to check (absolute or relative)\n * @returns true if the file matches a sensitive file pattern\n *\n * @example\n * ```typescript\n * isSensitiveFile('/path/to/.env') // true\n * isSensitiveFile('/path/to/config.ts') // false\n * isSensitiveFile('credentials.json') // true\n * isSensitiveFile('/home/user/.aws/credentials') // true\n * ```\n */\nexport function isSensitiveFile(filePath: string): boolean {\n // Normalize path separators (Windows backslashes to forward slashes)\n const normalizedPath = filePath.replace(/\\\\/g, '/')\n\n // Extract the file name for patterns that only match file names\n const fileName = normalizedPath.split('/').pop() || ''\n\n for (const pattern of YOLO_WARNING_PATTERNS) {\n // Handle ** prefix (any directory depth)\n if (pattern.startsWith('**/')) {\n const filePattern = pattern.slice(3)\n\n // Check if the pattern itself contains path separators (like .aws/credentials)\n if (filePattern.includes('/')) {\n // Match against the full path suffix\n if (matchPathSuffix(normalizedPath, filePattern)) {\n return true\n }\n } else {\n // Match just the filename\n if (matchFilePattern(fileName, filePattern)) {\n return true\n }\n }\n } else {\n // Direct pattern match against the full path\n if (matchFilePattern(normalizedPath, pattern)) {\n return true\n }\n }\n }\n\n return false\n}\n\n/**\n * Check if a path ends with a given suffix pattern.\n * Handles glob patterns like .aws/credentials or config/secrets.*\n *\n * @param path - The full normalized path\n * @param suffixPattern - The pattern to match at the end of the path\n */\nfunction matchPathSuffix(path: string, suffixPattern: string): boolean {\n // Build regex from the suffix pattern\n const regexPattern = suffixPattern\n .replace(/\\./g, '\\\\.')\n .replace(/\\*/g, '.*')\n .replace(/\\?/g, '.')\n\n // Match at the end of the path (with optional leading /)\n const regex = new RegExp(`(^|/)${regexPattern}$`)\n return regex.test(path)\n}\n\n/**\n * Match a string against a glob-like pattern.\n * Supports * (any characters) and ? (single character) wildcards.\n *\n * @param str - The string to test\n * @param pattern - The glob pattern (e.g., \"*.pem\", \".env.*\")\n */\nfunction matchFilePattern(str: string, pattern: string): boolean {\n // Convert glob pattern to regex\n const regexPattern = pattern\n .replace(/\\./g, '\\\\.')\n .replace(/\\*\\*/g, '\u00A7\u00A7') // Temporarily replace ** to avoid double processing\n .replace(/\\*/g, '[^/]*') // * matches anything except path separator\n .replace(/\u00A7\u00A7/g, '.*') // ** matches anything including path separators\n .replace(/\\?/g, '.')\n\n const regex = new RegExp(`^${regexPattern}$`)\n return regex.test(str)\n}\n\n/**\n * Get a human-readable description of why a file is considered sensitive.\n *\n * @param filePath - The file path to describe\n * @returns A description string or undefined if not sensitive\n */\nexport function getSensitiveFileReason(filePath: string): string | undefined {\n const normalizedPath = filePath.replace(/\\\\/g, '/').toLowerCase()\n const fileName = normalizedPath.split('/').pop() || ''\n\n // Check specific patterns and return appropriate descriptions\n if (fileName === '.env' || fileName.startsWith('.env.')) {\n return 'Environment variables file - may contain API keys and secrets'\n }\n\n if (fileName === 'credentials.json') {\n return 'Credentials file - may contain authentication tokens'\n }\n\n if (fileName.startsWith('secrets.') || fileName.includes('/secrets.')) {\n return 'Secrets file - may contain sensitive configuration'\n }\n\n if (fileName.endsWith('.pem') || fileName.endsWith('.key')) {\n return 'Private key file - cryptographic key material'\n }\n\n if (fileName.endsWith('.p12') || fileName.endsWith('.pfx')) {\n return 'Certificate file - may contain private keys'\n }\n\n if (fileName === '.npmrc') {\n return 'npm configuration - may contain registry tokens'\n }\n\n if (fileName === '.pypirc') {\n return 'PyPI configuration - may contain upload tokens'\n }\n\n if (\n fileName === 'id_rsa' ||\n fileName === 'id_ed25519' ||\n fileName === 'id_ecdsa' ||\n fileName === 'id_dsa'\n ) {\n return 'SSH private key - authentication key'\n }\n\n if (fileName === '.netrc') {\n return 'Netrc file - may contain login credentials'\n }\n\n if (fileName === '.pgpass') {\n return 'PostgreSQL password file'\n }\n\n if (normalizedPath.includes('/.aws/')) {\n return 'AWS configuration - may contain access keys'\n }\n\n if (fileName.startsWith('service-account') && fileName.endsWith('.json')) {\n return 'Service account key - cloud authentication'\n }\n\n if (normalizedPath.includes('/.docker/config.json')) {\n return 'Docker configuration - may contain registry credentials'\n }\n\n if (fileName === 'kubeconfig' || normalizedPath.includes('/.kube/config')) {\n return 'Kubernetes configuration - cluster access credentials'\n }\n\n // Generic fallback for files that match patterns but don't have specific descriptions\n if (isSensitiveFile(filePath)) {\n return 'May contain sensitive information'\n }\n\n return undefined\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
let sessionPlugins = [];
|
|
2
|
+
function setSessionPlugins(next) {
|
|
3
|
+
sessionPlugins = next;
|
|
4
|
+
}
|
|
5
|
+
function getSessionPlugins() {
|
|
6
|
+
return sessionPlugins;
|
|
7
|
+
}
|
|
8
|
+
function clearSessionPlugins() {
|
|
9
|
+
sessionPlugins = [];
|
|
10
|
+
}
|
|
11
|
+
function addSessionPlugin(plugin) {
|
|
12
|
+
sessionPlugins = sessionPlugins.filter((p) => p.name !== plugin.name);
|
|
13
|
+
sessionPlugins.push(plugin);
|
|
14
|
+
}
|
|
15
|
+
function removeSessionPlugin(name) {
|
|
16
|
+
const initialLength = sessionPlugins.length;
|
|
17
|
+
sessionPlugins = sessionPlugins.filter((p) => p.name !== name);
|
|
18
|
+
return sessionPlugins.length < initialLength;
|
|
19
|
+
}
|
|
20
|
+
function getSessionPlugin(name) {
|
|
21
|
+
return sessionPlugins.find((p) => p.name === name);
|
|
22
|
+
}
|
|
23
|
+
function hasSessionPlugin(name) {
|
|
24
|
+
return sessionPlugins.some((p) => p.name === name);
|
|
25
|
+
}
|
|
26
|
+
function getAllPluginAgentDirs() {
|
|
27
|
+
return sessionPlugins.flatMap((p) => p.agentsDirs);
|
|
28
|
+
}
|
|
29
|
+
function getAllPluginCommandDirs() {
|
|
30
|
+
return sessionPlugins.flatMap((p) => p.commandsDirs);
|
|
31
|
+
}
|
|
32
|
+
function getAllPluginSkillDirs() {
|
|
33
|
+
return sessionPlugins.flatMap((p) => p.skillsDirs);
|
|
34
|
+
}
|
|
35
|
+
function getAllPluginHooksFiles() {
|
|
36
|
+
return sessionPlugins.flatMap((p) => p.hooksFiles);
|
|
37
|
+
}
|
|
38
|
+
function getAllPluginMcpConfigFiles() {
|
|
39
|
+
return sessionPlugins.flatMap((p) => p.mcpConfigFiles);
|
|
40
|
+
}
|
|
41
|
+
function getAllPluginLspConfigFiles() {
|
|
42
|
+
return sessionPlugins.flatMap((p) => p.lspConfigFiles);
|
|
43
|
+
}
|
|
44
|
+
function getAllPluginOutputStyleDirs() {
|
|
45
|
+
return sessionPlugins.flatMap((p) => p.outputStylesDirs);
|
|
46
|
+
}
|
|
47
|
+
function __resetSessionPluginsForTests() {
|
|
48
|
+
sessionPlugins = [];
|
|
49
|
+
}
|
|
50
|
+
export {
|
|
51
|
+
__resetSessionPluginsForTests,
|
|
52
|
+
addSessionPlugin,
|
|
53
|
+
clearSessionPlugins,
|
|
54
|
+
getAllPluginAgentDirs,
|
|
55
|
+
getAllPluginCommandDirs,
|
|
56
|
+
getAllPluginHooksFiles,
|
|
57
|
+
getAllPluginLspConfigFiles,
|
|
58
|
+
getAllPluginMcpConfigFiles,
|
|
59
|
+
getAllPluginOutputStyleDirs,
|
|
60
|
+
getAllPluginSkillDirs,
|
|
61
|
+
getSessionPlugin,
|
|
62
|
+
getSessionPlugins,
|
|
63
|
+
hasSessionPlugin,
|
|
64
|
+
removeSessionPlugin,
|
|
65
|
+
setSessionPlugins
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=sessionPlugins.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/utils/session/sessionPlugins.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Session Plugin State Management\n *\n * Manages the plugins loaded in the current session.\n * Compatible with Claude Code CLI session plugins specification.\n */\n\nimport type { SessionPlugin } from '@minto-types/plugin'\n\n/**\n * Current session plugins\n */\nlet sessionPlugins: SessionPlugin[] = []\n\n/**\n * Set the session plugins\n */\nexport function setSessionPlugins(next: SessionPlugin[]): void {\n sessionPlugins = next\n}\n\n/**\n * Get the current session plugins\n */\nexport function getSessionPlugins(): SessionPlugin[] {\n return sessionPlugins\n}\n\n/**\n * Clear all session plugins\n */\nexport function clearSessionPlugins(): void {\n sessionPlugins = []\n}\n\n/**\n * Add a single plugin to the session\n */\nexport function addSessionPlugin(plugin: SessionPlugin): void {\n // Remove existing plugin with same name if present\n sessionPlugins = sessionPlugins.filter(p => p.name !== plugin.name)\n sessionPlugins.push(plugin)\n}\n\n/**\n * Remove a plugin from the session by name\n */\nexport function removeSessionPlugin(name: string): boolean {\n const initialLength = sessionPlugins.length\n sessionPlugins = sessionPlugins.filter(p => p.name !== name)\n return sessionPlugins.length < initialLength\n}\n\n/**\n * Get a plugin by name\n */\nexport function getSessionPlugin(name: string): SessionPlugin | undefined {\n return sessionPlugins.find(p => p.name === name)\n}\n\n/**\n * Check if a plugin is loaded\n */\nexport function hasSessionPlugin(name: string): boolean {\n return sessionPlugins.some(p => p.name === name)\n}\n\n/**\n * Get all agent directories from loaded plugins\n */\nexport function getAllPluginAgentDirs(): string[] {\n return sessionPlugins.flatMap(p => p.agentsDirs)\n}\n\n/**\n * Get all command directories from loaded plugins\n */\nexport function getAllPluginCommandDirs(): string[] {\n return sessionPlugins.flatMap(p => p.commandsDirs)\n}\n\n/**\n * Get all skill directories from loaded plugins\n */\nexport function getAllPluginSkillDirs(): string[] {\n return sessionPlugins.flatMap(p => p.skillsDirs)\n}\n\n/**\n * Get all hooks files from loaded plugins\n */\nexport function getAllPluginHooksFiles(): string[] {\n return sessionPlugins.flatMap(p => p.hooksFiles)\n}\n\n/**\n * Get all MCP config files from loaded plugins\n */\nexport function getAllPluginMcpConfigFiles(): string[] {\n return sessionPlugins.flatMap(p => p.mcpConfigFiles)\n}\n\n/**\n * Get all LSP config files from loaded plugins\n */\nexport function getAllPluginLspConfigFiles(): string[] {\n return sessionPlugins.flatMap(p => p.lspConfigFiles)\n}\n\n/**\n * Get all output style directories from loaded plugins\n */\nexport function getAllPluginOutputStyleDirs(): string[] {\n return sessionPlugins.flatMap(p => p.outputStylesDirs)\n}\n\n/**\n * Reset session plugins (for testing)\n */\nexport function __resetSessionPluginsForTests(): void {\n sessionPlugins = []\n}\n"],
|
|
5
|
+
"mappings": "AAYA,IAAI,iBAAkC,CAAC;AAKhC,SAAS,kBAAkB,MAA6B;AAC7D,mBAAiB;AACnB;AAKO,SAAS,oBAAqC;AACnD,SAAO;AACT;AAKO,SAAS,sBAA4B;AAC1C,mBAAiB,CAAC;AACpB;AAKO,SAAS,iBAAiB,QAA6B;AAE5D,mBAAiB,eAAe,OAAO,OAAK,EAAE,SAAS,OAAO,IAAI;AAClE,iBAAe,KAAK,MAAM;AAC5B;AAKO,SAAS,oBAAoB,MAAuB;AACzD,QAAM,gBAAgB,eAAe;AACrC,mBAAiB,eAAe,OAAO,OAAK,EAAE,SAAS,IAAI;AAC3D,SAAO,eAAe,SAAS;AACjC;AAKO,SAAS,iBAAiB,MAAyC;AACxE,SAAO,eAAe,KAAK,OAAK,EAAE,SAAS,IAAI;AACjD;AAKO,SAAS,iBAAiB,MAAuB;AACtD,SAAO,eAAe,KAAK,OAAK,EAAE,SAAS,IAAI;AACjD;AAKO,SAAS,wBAAkC;AAChD,SAAO,eAAe,QAAQ,OAAK,EAAE,UAAU;AACjD;AAKO,SAAS,0BAAoC;AAClD,SAAO,eAAe,QAAQ,OAAK,EAAE,YAAY;AACnD;AAKO,SAAS,wBAAkC;AAChD,SAAO,eAAe,QAAQ,OAAK,EAAE,UAAU;AACjD;AAKO,SAAS,yBAAmC;AACjD,SAAO,eAAe,QAAQ,OAAK,EAAE,UAAU;AACjD;AAKO,SAAS,6BAAuC;AACrD,SAAO,eAAe,QAAQ,OAAK,EAAE,cAAc;AACrD;AAKO,SAAS,6BAAuC;AACrD,SAAO,eAAe,QAAQ,OAAK,EAAE,cAAc;AACrD;AAKO,SAAS,8BAAwC;AACtD,SAAO,eAAe,QAAQ,OAAK,EAAE,gBAAgB;AACvD;AAKO,SAAS,gCAAsC;AACpD,mBAAiB,CAAC;AACpB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
import { getAgentTranscript, getAgentIdByToolUseId } from "./agentTranscripts.js";
|
|
2
|
+
import { SYMBOL_COLORS } from "../constants/colors.js";
|
|
3
|
+
import { SYMBOLS } from "../constants/symbols.js";
|
|
4
|
+
function getLatestOutput(transcript) {
|
|
5
|
+
const messages = transcript.messages;
|
|
6
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
7
|
+
const msg = messages[i];
|
|
8
|
+
if (msg.type === "assistant") {
|
|
9
|
+
const content = msg.message.content;
|
|
10
|
+
if (!content || !Array.isArray(content)) continue;
|
|
11
|
+
const textBlock = content.find((b) => b.type === "text");
|
|
12
|
+
if (textBlock && "text" in textBlock) {
|
|
13
|
+
return textBlock.text;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return "";
|
|
18
|
+
}
|
|
19
|
+
function getNestedTasks(transcript) {
|
|
20
|
+
const nested = [];
|
|
21
|
+
for (const msg of transcript.messages) {
|
|
22
|
+
if (msg.type === "assistant") {
|
|
23
|
+
const content = msg.message.content;
|
|
24
|
+
if (!content || !Array.isArray(content)) continue;
|
|
25
|
+
for (const block of content) {
|
|
26
|
+
if (block.type === "tool_use" && block.name === "Task") {
|
|
27
|
+
const toolUse = block;
|
|
28
|
+
const nestedAgentId = getAgentIdByToolUseId(toolUse.id);
|
|
29
|
+
if (nestedAgentId) {
|
|
30
|
+
const nestedTranscript = getAgentTranscript(nestedAgentId);
|
|
31
|
+
if (nestedTranscript) {
|
|
32
|
+
nested.push(nestedTranscript);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return nested;
|
|
40
|
+
}
|
|
41
|
+
function truncate(text, maxLength) {
|
|
42
|
+
if (!text) return "";
|
|
43
|
+
const cleaned = text.trim().replace(/\n+/g, " ").replace(/\s+/g, " ");
|
|
44
|
+
if (cleaned.length <= maxLength) return cleaned;
|
|
45
|
+
return cleaned.slice(0, maxLength - 3) + "...";
|
|
46
|
+
}
|
|
47
|
+
function getTaskDisplayContent(transcript, config) {
|
|
48
|
+
const nestedTasks = getNestedTasks(transcript);
|
|
49
|
+
if (nestedTasks.length === 0) {
|
|
50
|
+
const latestOutput = getLatestOutput(transcript);
|
|
51
|
+
return {
|
|
52
|
+
type: "simple",
|
|
53
|
+
content: truncate(latestOutput, config.maxCharsWithoutChildren)
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const tasksToShow = config.showAllChildren ? nestedTasks : nestedTasks.slice(-config.maxRecentChildren);
|
|
57
|
+
const children = tasksToShow.map((task) => ({
|
|
58
|
+
description: task.description,
|
|
59
|
+
status: task.status,
|
|
60
|
+
content: truncate(getLatestOutput(task), config.maxCharsPerChild)
|
|
61
|
+
}));
|
|
62
|
+
return {
|
|
63
|
+
type: "nested",
|
|
64
|
+
children,
|
|
65
|
+
hiddenCount: nestedTasks.length - tasksToShow.length
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function getStatusIcon(status) {
|
|
69
|
+
switch (status) {
|
|
70
|
+
case "pending":
|
|
71
|
+
return "\u25CB";
|
|
72
|
+
// 空心圆 - pending
|
|
73
|
+
case "running":
|
|
74
|
+
return SYMBOLS.TOOL_RUNNING;
|
|
75
|
+
// ◐ 半圆 - in progress
|
|
76
|
+
case "completed":
|
|
77
|
+
return SYMBOLS.TOOL_SUCCESS;
|
|
78
|
+
// ✓ 勾 - completed
|
|
79
|
+
case "failed":
|
|
80
|
+
return SYMBOLS.TOOL_ERROR;
|
|
81
|
+
// ✗ - failed
|
|
82
|
+
case "interrupted":
|
|
83
|
+
return "\u2298";
|
|
84
|
+
default:
|
|
85
|
+
return "\u25CB";
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function getStatusColor(status) {
|
|
89
|
+
switch (status) {
|
|
90
|
+
case "pending":
|
|
91
|
+
return SYMBOL_COLORS.pending;
|
|
92
|
+
case "running":
|
|
93
|
+
return SYMBOL_COLORS.running;
|
|
94
|
+
case "completed":
|
|
95
|
+
return SYMBOL_COLORS.success;
|
|
96
|
+
case "failed":
|
|
97
|
+
return SYMBOL_COLORS.error;
|
|
98
|
+
case "interrupted":
|
|
99
|
+
return SYMBOL_COLORS.pending;
|
|
100
|
+
default:
|
|
101
|
+
return SYMBOL_COLORS.pending;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function formatDuration(durationMs) {
|
|
105
|
+
if (durationMs === void 0 || durationMs === null) {
|
|
106
|
+
return "--";
|
|
107
|
+
}
|
|
108
|
+
const seconds = durationMs / 1e3;
|
|
109
|
+
if (seconds < 60) {
|
|
110
|
+
return `${seconds.toFixed(1)}s`;
|
|
111
|
+
}
|
|
112
|
+
const minutes = Math.floor(seconds / 60);
|
|
113
|
+
const remainingSeconds = Math.floor(seconds % 60);
|
|
114
|
+
return `${minutes}m ${remainingSeconds}s`;
|
|
115
|
+
}
|
|
116
|
+
function formatModelName(model) {
|
|
117
|
+
if (!model) return "";
|
|
118
|
+
if (model.includes("opus")) return "opus";
|
|
119
|
+
if (model.includes("sonnet")) return "sonnet";
|
|
120
|
+
if (model.includes("haiku")) return "haiku";
|
|
121
|
+
const parts = model.split("-");
|
|
122
|
+
if (parts.length > 2 && model.length > 15) {
|
|
123
|
+
return parts.slice(0, 2).join("-");
|
|
124
|
+
}
|
|
125
|
+
return model;
|
|
126
|
+
}
|
|
127
|
+
function formatTimestamp(timestamp) {
|
|
128
|
+
if (!timestamp) return "";
|
|
129
|
+
const date = timestamp instanceof Date ? timestamp : new Date(timestamp);
|
|
130
|
+
const hours = date.getHours();
|
|
131
|
+
const minutes = date.getMinutes().toString().padStart(2, "0");
|
|
132
|
+
return `${hours}:${minutes}`;
|
|
133
|
+
}
|
|
134
|
+
function formatMetaInfo(meta) {
|
|
135
|
+
const parts = [];
|
|
136
|
+
if (meta.duration !== void 0 && meta.duration !== null) {
|
|
137
|
+
parts.push(formatDuration(meta.duration));
|
|
138
|
+
}
|
|
139
|
+
const modelName = formatModelName(meta.model);
|
|
140
|
+
if (modelName) {
|
|
141
|
+
parts.push(modelName);
|
|
142
|
+
}
|
|
143
|
+
const time = formatTimestamp(meta.timestamp);
|
|
144
|
+
if (time) {
|
|
145
|
+
parts.push(time);
|
|
146
|
+
}
|
|
147
|
+
return parts.join(" \xB7 ");
|
|
148
|
+
}
|
|
149
|
+
function getToolUseHistory(transcript) {
|
|
150
|
+
const history = [];
|
|
151
|
+
const completedToolIds = /* @__PURE__ */ new Set();
|
|
152
|
+
for (const msg of transcript.messages) {
|
|
153
|
+
if (msg.type === "user") {
|
|
154
|
+
const content = msg.message.content;
|
|
155
|
+
if (!Array.isArray(content)) continue;
|
|
156
|
+
for (const block of content) {
|
|
157
|
+
if (block.type === "tool_result" && "tool_use_id" in block) {
|
|
158
|
+
completedToolIds.add(block.tool_use_id);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
for (let i = 0; i < transcript.messages.length; i++) {
|
|
164
|
+
const msg = transcript.messages[i];
|
|
165
|
+
if (msg.type === "assistant") {
|
|
166
|
+
const content = msg.message.content;
|
|
167
|
+
if (!content || !Array.isArray(content)) continue;
|
|
168
|
+
for (const block of content) {
|
|
169
|
+
if (block.type === "tool_use") {
|
|
170
|
+
const toolUse = block;
|
|
171
|
+
const description = getToolUseDescription(toolUse);
|
|
172
|
+
const isExecuting = !completedToolIds.has(toolUse.id);
|
|
173
|
+
history.push({
|
|
174
|
+
name: toolUse.name,
|
|
175
|
+
id: toolUse.id,
|
|
176
|
+
description,
|
|
177
|
+
messageIndex: i,
|
|
178
|
+
isExecuting
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return history;
|
|
185
|
+
}
|
|
186
|
+
function getFileName(filePath) {
|
|
187
|
+
const parts = filePath.split("/");
|
|
188
|
+
return parts[parts.length - 1] || filePath;
|
|
189
|
+
}
|
|
190
|
+
const TOOL_DISPLAY_NAMES = {
|
|
191
|
+
View: "Read"
|
|
192
|
+
// Add more mappings as needed
|
|
193
|
+
};
|
|
194
|
+
function getToolDisplayName(internalName) {
|
|
195
|
+
return TOOL_DISPLAY_NAMES[internalName] || internalName;
|
|
196
|
+
}
|
|
197
|
+
function getToolUseDescription(toolUse) {
|
|
198
|
+
const input = toolUse.input;
|
|
199
|
+
switch (toolUse.name) {
|
|
200
|
+
case "Read":
|
|
201
|
+
case "View":
|
|
202
|
+
return input.file_path ? getFileName(String(input.file_path)) : "file";
|
|
203
|
+
case "Write":
|
|
204
|
+
return input.file_path ? getFileName(String(input.file_path)) : "file";
|
|
205
|
+
case "Edit":
|
|
206
|
+
return input.file_path ? getFileName(String(input.file_path)) : "file";
|
|
207
|
+
case "Glob":
|
|
208
|
+
return input.pattern ? String(input.pattern) : "files";
|
|
209
|
+
case "Grep":
|
|
210
|
+
return input.pattern ? `"${input.pattern}"` : "content";
|
|
211
|
+
case "Bash":
|
|
212
|
+
return input.command ? String(input.command).slice(0, 50) + (String(input.command).length > 50 ? "..." : "") : "command";
|
|
213
|
+
case "Task":
|
|
214
|
+
return input.description ? String(input.description) : "sub-task";
|
|
215
|
+
case "WebFetch":
|
|
216
|
+
return input.url ? String(input.url) : "URL";
|
|
217
|
+
case "WebSearch":
|
|
218
|
+
return input.query ? String(input.query) : "web";
|
|
219
|
+
default:
|
|
220
|
+
if (input.file_path) return getFileName(String(input.file_path));
|
|
221
|
+
if (input.path) return getFileName(String(input.path));
|
|
222
|
+
if (input.query) return String(input.query);
|
|
223
|
+
if (input.pattern) return String(input.pattern);
|
|
224
|
+
return "";
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
function getToolUseHistoryForDisplay(transcript, config) {
|
|
228
|
+
const allTools = getToolUseHistory(transcript);
|
|
229
|
+
if (config.showAllChildren) {
|
|
230
|
+
return { tools: allTools, hiddenCount: 0 };
|
|
231
|
+
}
|
|
232
|
+
const maxTools = config.maxRecentChildren;
|
|
233
|
+
if (allTools.length <= maxTools) {
|
|
234
|
+
return { tools: allTools, hiddenCount: 0 };
|
|
235
|
+
}
|
|
236
|
+
const recentTools = allTools.slice(-maxTools);
|
|
237
|
+
return {
|
|
238
|
+
tools: recentTools,
|
|
239
|
+
hiddenCount: allTools.length - maxTools
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
export {
|
|
243
|
+
formatDuration,
|
|
244
|
+
formatMetaInfo,
|
|
245
|
+
formatModelName,
|
|
246
|
+
formatTimestamp,
|
|
247
|
+
getLatestOutput,
|
|
248
|
+
getNestedTasks,
|
|
249
|
+
getStatusColor,
|
|
250
|
+
getStatusIcon,
|
|
251
|
+
getTaskDisplayContent,
|
|
252
|
+
getToolDisplayName,
|
|
253
|
+
getToolUseHistory,
|
|
254
|
+
getToolUseHistoryForDisplay,
|
|
255
|
+
truncate
|
|
256
|
+
};
|
|
257
|
+
//# sourceMappingURL=taskDisplayUtils.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/utils/taskDisplayUtils.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Task Display Utilities\n *\n * Utilities for computing task display content with truncation rules.\n * Implements V3's intermediate state display logic.\n */\n\nimport type { ToolUseBlockParam } from '@anthropic-ai/sdk/resources/index.mjs'\nimport type { AgentTranscript } from './agentTranscripts'\nimport type {\n DisplayConfig,\n TaskDisplayContent,\n} from '@minto-types/messageGroup'\nimport { getAgentTranscript, getAgentIdByToolUseId } from './agentTranscripts'\nimport { SEMANTIC_COLORS, SYMBOL_COLORS } from '@constants/colors'\nimport { SYMBOLS } from '@constants/symbols'\n\n/**\n * Get the latest text output from a transcript\n */\nexport function getLatestOutput(transcript: AgentTranscript): string {\n const messages = transcript.messages\n\n // Search from the end for the most recent text output\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i]\n if (msg.type === 'assistant') {\n const content = msg.message.content\n if (!content || !Array.isArray(content)) continue\n\n const textBlock = content.find(b => b.type === 'text')\n if (textBlock && 'text' in textBlock) {\n return textBlock.text\n }\n }\n }\n\n return ''\n}\n\n/**\n * Get all nested Task transcripts from a parent transcript\n */\nexport function getNestedTasks(transcript: AgentTranscript): AgentTranscript[] {\n const nested: AgentTranscript[] = []\n\n for (const msg of transcript.messages) {\n if (msg.type === 'assistant') {\n const content = msg.message.content\n if (!content || !Array.isArray(content)) continue\n\n for (const block of content) {\n if (block.type === 'tool_use' && block.name === 'Task') {\n const toolUse = block as ToolUseBlockParam\n const nestedAgentId = getAgentIdByToolUseId(toolUse.id)\n if (nestedAgentId) {\n const nestedTranscript = getAgentTranscript(nestedAgentId)\n if (nestedTranscript) {\n nested.push(nestedTranscript)\n }\n }\n }\n }\n }\n }\n\n return nested\n}\n\n/**\n * Truncate text to specified length with ellipsis\n */\nexport function truncate(text: string, maxLength: number): string {\n if (!text) return ''\n // Clean up whitespace\n const cleaned = text.trim().replace(/\\n+/g, ' ').replace(/\\s+/g, ' ')\n if (cleaned.length <= maxLength) return cleaned\n return cleaned.slice(0, maxLength - 3) + '...'\n}\n\n/**\n * Get task display content with truncation rules (from V3)\n */\nexport function getTaskDisplayContent(\n transcript: AgentTranscript,\n config: DisplayConfig,\n): TaskDisplayContent {\n const nestedTasks = getNestedTasks(transcript)\n\n if (nestedTasks.length === 0) {\n // No children: show latest output, truncated\n const latestOutput = getLatestOutput(transcript)\n return {\n type: 'simple',\n content: truncate(latestOutput, config.maxCharsWithoutChildren),\n }\n }\n\n // Has children: show recent children based on config\n const tasksToShow = config.showAllChildren\n ? nestedTasks\n : nestedTasks.slice(-config.maxRecentChildren)\n\n const children = tasksToShow.map(task => ({\n description: task.description,\n status: task.status,\n content: truncate(getLatestOutput(task), config.maxCharsPerChild),\n }))\n\n return {\n type: 'nested',\n children,\n hiddenCount: nestedTasks.length - tasksToShow.length,\n }\n}\n\n/**\n * Get status icon for a task status\n * \u9075\u5FAA REPL \u89C4\u8303\uFF1A\n * - pending: \u25CB (\u7A7A\u5FC3\u5706)\n * - running: \u25D0 (\u534A\u5706\uFF0CTOOL_RUNNING)\n * - completed: \u2713 (\u52FE\uFF0CTOOL_SUCCESS)\n * - failed: \u2717 (\u53C9\uFF0CTOOL_ERROR)\n */\nexport function getStatusIcon(status: string): string {\n switch (status) {\n case 'pending':\n return '\u25CB' // \u7A7A\u5FC3\u5706 - pending\n case 'running':\n return SYMBOLS.TOOL_RUNNING // \u25D0 \u534A\u5706 - in progress\n case 'completed':\n return SYMBOLS.TOOL_SUCCESS // \u2713 \u52FE - completed\n case 'failed':\n return SYMBOLS.TOOL_ERROR // \u2717 - failed\n case 'interrupted':\n return '\u2298'\n default:\n return '\u25CB'\n }\n}\n\n/**\n * Get status color for a task status\n * \u4F7F\u7528 SYMBOL_COLORS \u4E0E Logo \u54C1\u724C\u914D\u8272\u4FDD\u6301\u4E00\u81F4\n */\nexport function getStatusColor(status: string): string {\n switch (status) {\n case 'pending':\n return SYMBOL_COLORS.pending\n case 'running':\n return SYMBOL_COLORS.running\n case 'completed':\n return SYMBOL_COLORS.success\n case 'failed':\n return SYMBOL_COLORS.error\n case 'interrupted':\n return SYMBOL_COLORS.pending\n default:\n return SYMBOL_COLORS.pending\n }\n}\n\n// ============================================================================\n// \u5143\u4FE1\u606F\u683C\u5F0F\u5316 (Meta Info Formatting)\n// \u57FA\u4E8E REPL \u663E\u793A\u89C4\u8303\uFF1A\u8017\u65F6 \u00B7 \u6A21\u578B \u00B7 \u65F6\u95F4\n// ============================================================================\n\n/**\n * \u5143\u4FE1\u606F\u6570\u636E\u7ED3\u6784\n */\nexport interface MetaInfo {\n /** \u8017\u65F6\uFF08\u6BEB\u79D2\uFF09 */\n duration?: number\n /** \u6A21\u578B\u540D\u79F0 */\n model?: string\n /** \u65F6\u95F4\u6233 */\n timestamp?: Date | number\n}\n\n/**\n * \u683C\u5F0F\u5316\u8017\u65F6\n * - < 60s: X.Xs (\u5982 2.4s)\n * - >= 60s: Xm Xs (\u5982 1m 23s)\n * - \u672A\u77E5: --\n */\nexport function formatDuration(durationMs?: number): string {\n if (durationMs === undefined || durationMs === null) {\n return '--'\n }\n\n const seconds = durationMs / 1000\n\n if (seconds < 60) {\n // \u5C0F\u4E8E 60 \u79D2\uFF0C\u663E\u793A X.Xs\n return `${seconds.toFixed(1)}s`\n }\n\n // \u5927\u4E8E\u7B49\u4E8E 60 \u79D2\uFF0C\u663E\u793A Xm Xs\n const minutes = Math.floor(seconds / 60)\n const remainingSeconds = Math.floor(seconds % 60)\n return `${minutes}m ${remainingSeconds}s`\n}\n\n/**\n * \u683C\u5F0F\u5316\u6A21\u578B\u540D\u79F0\uFF08\u7B80\u5199\uFF09\n * - claude-3-opus-20240229 -> opus\n * - claude-3-sonnet-20240229 -> sonnet\n * - glm-4.7 -> glm-4.7\n */\nexport function formatModelName(model?: string): string {\n if (!model) return ''\n\n // Claude \u6A21\u578B\u7B80\u5199\n if (model.includes('opus')) return 'opus'\n if (model.includes('sonnet')) return 'sonnet'\n if (model.includes('haiku')) return 'haiku'\n\n // \u5176\u4ED6\u6A21\u578B\u4FDD\u6301\u539F\u6837\u6216\u622A\u65AD\n // \u5982\u679C\u540D\u79F0\u592A\u957F\uFF0C\u53D6\u6700\u540E\u4E00\u90E8\u5206\n const parts = model.split('-')\n if (parts.length > 2 && model.length > 15) {\n // \u5C1D\u8BD5\u63D0\u53D6\u6709\u610F\u4E49\u7684\u90E8\u5206\n return parts.slice(0, 2).join('-')\n }\n\n return model\n}\n\n/**\n * \u683C\u5F0F\u5316\u65F6\u95F4\u6233\n * \u683C\u5F0F: H:MM (24\u5C0F\u65F6\u5236)\n */\nexport function formatTimestamp(timestamp?: Date | number): string {\n if (!timestamp) return ''\n\n const date = timestamp instanceof Date ? timestamp : new Date(timestamp)\n const hours = date.getHours()\n const minutes = date.getMinutes().toString().padStart(2, '0')\n\n return `${hours}:${minutes}`\n}\n\n/**\n * \u683C\u5F0F\u5316\u5143\u4FE1\u606F\n *\n * \u89C4\u5219\uFF1A\n * - \u6709\u8017\u65F6\uFF1A\u8017\u65F6 \u00B7 \u6A21\u578B \u00B7 \u65F6\u95F4 (\u5982 \"2.4s \u00B7 glm-4.7 \u00B7 9:21\")\n * - \u65E0\u8017\u65F6\uFF1A\u6A21\u578B \u00B7 \u65F6\u95F4 (\u5982 \"glm-4.7 \u00B7 9:21\")\n *\n * @param meta - \u5143\u4FE1\u606F\u5BF9\u8C61\n * @returns \u683C\u5F0F\u5316\u540E\u7684\u5B57\u7B26\u4E32\uFF0C\u5982\u679C\u6CA1\u6709\u4EFB\u4F55\u4FE1\u606F\u5219\u8FD4\u56DE\u7A7A\u5B57\u7B26\u4E32\n */\nexport function formatMetaInfo(meta: MetaInfo): string {\n const parts: string[] = []\n\n // \u6709\u8017\u65F6\u65F6\uFF0C\u8017\u65F6\u653E\u5728\u6700\u524D\u9762\n if (meta.duration !== undefined && meta.duration !== null) {\n parts.push(formatDuration(meta.duration))\n }\n\n // \u6A21\u578B\u540D\u79F0\n const modelName = formatModelName(meta.model)\n if (modelName) {\n parts.push(modelName)\n }\n\n // \u65F6\u95F4\u6233\n const time = formatTimestamp(meta.timestamp)\n if (time) {\n parts.push(time)\n }\n\n // \u4F7F\u7528 \" \u00B7 \" \u5206\u9694\n return parts.join(' \u00B7 ')\n}\n\n/**\n * Tool use history item\n */\nexport interface ToolUseHistoryItem {\n /** Tool name */\n name: string\n /** Tool use ID */\n id: string\n /** Brief description of what the tool did */\n description: string\n /** Timestamp (message index for ordering) */\n messageIndex: number\n /** Whether this tool is currently executing (no result yet) */\n isExecuting?: boolean\n}\n\n/**\n * Get tool use history from a transcript\n * Returns tool uses in chronological order (oldest first)\n * Also marks tools that are currently executing (no result yet)\n */\nexport function getToolUseHistory(\n transcript: AgentTranscript,\n): ToolUseHistoryItem[] {\n const history: ToolUseHistoryItem[] = []\n\n // Collect all tool_result IDs to identify completed tools\n const completedToolIds = new Set<string>()\n for (const msg of transcript.messages) {\n if (msg.type === 'user') {\n const content = msg.message.content\n if (!Array.isArray(content)) continue\n\n for (const block of content) {\n if (block.type === 'tool_result' && 'tool_use_id' in block) {\n completedToolIds.add(block.tool_use_id)\n }\n }\n }\n }\n\n for (let i = 0; i < transcript.messages.length; i++) {\n const msg = transcript.messages[i]\n if (msg.type === 'assistant') {\n const content = msg.message.content\n if (!content || !Array.isArray(content)) continue\n\n for (const block of content) {\n if (block.type === 'tool_use') {\n const toolUse = block as ToolUseBlockParam\n const description = getToolUseDescription(toolUse)\n const isExecuting = !completedToolIds.has(toolUse.id)\n\n history.push({\n name: toolUse.name,\n id: toolUse.id,\n description,\n messageIndex: i,\n isExecuting,\n })\n }\n }\n }\n }\n\n return history\n}\n\n/**\n * Extract just the filename from a path for concise display\n */\nfunction getFileName(filePath: string): string {\n const parts = filePath.split('/')\n return parts[parts.length - 1] || filePath\n}\n\n/**\n * Map internal tool names to user-friendly display names\n * Note: Some tools have different internal names (e.g., 'View' \u2192 'Read')\n */\nconst TOOL_DISPLAY_NAMES: Record<string, string> = {\n View: 'Read',\n // Add more mappings as needed\n}\n\n/**\n * Get the user-friendly display name for a tool\n */\nexport function getToolDisplayName(internalName: string): string {\n return TOOL_DISPLAY_NAMES[internalName] || internalName\n}\n\n/**\n * Get a brief description of what a tool use did\n * Note: Description should NOT include the tool name - it's displayed separately\n */\nfunction getToolUseDescription(toolUse: ToolUseBlockParam): string {\n const input = toolUse.input as Record<string, unknown>\n\n switch (toolUse.name) {\n case 'Read':\n case 'View': // View is aliased to Read\n return input.file_path ? getFileName(String(input.file_path)) : 'file'\n case 'Write':\n return input.file_path ? getFileName(String(input.file_path)) : 'file'\n case 'Edit':\n return input.file_path ? getFileName(String(input.file_path)) : 'file'\n case 'Glob':\n return input.pattern ? String(input.pattern) : 'files'\n case 'Grep':\n return input.pattern ? `\"${input.pattern}\"` : 'content'\n case 'Bash':\n return input.command\n ? String(input.command).slice(0, 50) +\n (String(input.command).length > 50 ? '...' : '')\n : 'command'\n case 'Task':\n return input.description ? String(input.description) : 'sub-task'\n case 'WebFetch':\n return input.url ? String(input.url) : 'URL'\n case 'WebSearch':\n return input.query ? String(input.query) : 'web'\n default:\n // Try to extract a meaningful description from common input fields\n // Note: Don't include tool name in description - it's displayed separately\n if (input.file_path) return getFileName(String(input.file_path))\n if (input.path) return getFileName(String(input.path))\n if (input.query) return String(input.query)\n if (input.pattern) return String(input.pattern)\n return ''\n }\n}\n\n/**\n * Get tool use history for display, respecting display config\n * @param transcript The agent transcript\n * @param config Display configuration\n * @returns Tool uses to display (recent first for normal mode, chronological for verbose)\n */\nexport function getToolUseHistoryForDisplay(\n transcript: AgentTranscript,\n config: DisplayConfig,\n): { tools: ToolUseHistoryItem[]; hiddenCount: number } {\n const allTools = getToolUseHistory(transcript)\n\n if (config.showAllChildren) {\n // Verbose mode: show all tools in chronological order\n return { tools: allTools, hiddenCount: 0 }\n }\n\n // Normal mode: show recent N tools (most recent last for display)\n const maxTools = config.maxRecentChildren\n if (allTools.length <= maxTools) {\n return { tools: allTools, hiddenCount: 0 }\n }\n\n // Take the most recent tools\n const recentTools = allTools.slice(-maxTools)\n return {\n tools: recentTools,\n hiddenCount: allTools.length - maxTools,\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|