@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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/binary-feedback/BinaryFeedbackView.tsx"],
|
|
4
|
-
"sourcesContent": ["import { Option, SelectProps } from '@inkjs/ui'\nimport chalk from 'chalk'\nimport { Box, Text, useInput } from 'ink'\nimport Link from 'ink-link'\nimport React, { useState } from 'react'\nimport { getTheme } from '@utils/theme'\nimport { Select } from '@components/CustomSelect/select'\nimport type { Tool } from '@tool'\nimport type { NormalizedMessage } from '@utils/messages'\nimport { BinaryFeedbackOption } from './BinaryFeedbackOption'\nimport type { AssistantMessage } from '@query'\nimport type { BinaryFeedbackChoose } from './utils'\nimport { useExitOnCtrlCD } from '@hooks/useExitOnCtrlCD'\nimport { BinaryFeedbackChoice } from './utils'\nimport { PRODUCT_NAME } from '@constants/product'\n\nconst HELP_URL = 'https://go/cli-feedback'\n\ntype BinaryFeedbackOption = Option & { value: BinaryFeedbackChoice }\n\n// Make options a function to avoid early theme access during module initialization\nexport function getOptions(): BinaryFeedbackOption[] {\n return [\n {\n // This option combines the follow user intents:\n // - The two options look about equally good to me\n // - I don't feel confident enough to choose\n // - I don't want to choose right now\n label: 'Choose for me',\n value: 'no-preference',\n },\n {\n label: 'Left option looks better',\n value: 'prefer-left',\n },\n {\n label: 'Right option looks better',\n value: 'prefer-right',\n },\n {\n label: `Neither, and tell ${PRODUCT_NAME} what to do differently (${chalk.bold.hex(getTheme().warning)('esc')})`,\n value: 'neither',\n },\n ]\n}\n\ntype Props = {\n m1: AssistantMessage\n m2: AssistantMessage\n onChoose?: BinaryFeedbackChoose\n debug: boolean\n erroredToolUseIDs: Set<string>\n inProgressToolUseIDs: Set<string>\n normalizedMessages: NormalizedMessage[]\n tools: Tool[]\n unresolvedToolUseIDs: Set<string>\n verbose: boolean\n}\n\nexport function BinaryFeedbackView({\n m1,\n m2,\n onChoose,\n debug,\n erroredToolUseIDs,\n inProgressToolUseIDs,\n normalizedMessages,\n tools,\n unresolvedToolUseIDs,\n verbose,\n}: Props) {\n const theme = getTheme()\n const [focused, setFocus] = useState('no-preference')\n const [focusValue, setFocusValue] = useState<string | undefined>(undefined)\n const exitState = useExitOnCtrlCD(() => process.exit(1))\n\n useInput((_input, key) => {\n if (key.leftArrow) {\n setFocusValue('prefer-left')\n } else if (key.rightArrow) {\n setFocusValue('prefer-right')\n } else if (key.escape) {\n onChoose?.('neither')\n }\n })\n\n return (\n <>\n <Box\n flexDirection=\"column\"\n height=\"100%\"\n width=\"100%\"\n borderStyle=\"round\"\n borderColor={theme.permission}\n >\n <Box width=\"100%\" justifyContent=\"space-between\" paddingX={1}>\n <Text bold color={theme.permission}>\n [ANT-ONLY] Help train {PRODUCT_NAME}\n </Text>\n <Text>\n <Link url={HELP_URL}>[?]</Link>\n </Text>\n </Box>\n <Box flexDirection=\"row\" width=\"100%\" flexGrow={1} paddingTop={1}>\n <Box\n flexDirection=\"column\"\n flexGrow={1}\n flexBasis={1}\n gap={1}\n borderStyle={focused === 'prefer-left' ? 'bold' : 'single'}\n borderColor={\n focused === 'prefer-left' ? theme.success : theme.secondaryBorder\n }\n marginRight={1}\n padding={1}\n >\n <BinaryFeedbackOption\n erroredToolUseIDs={erroredToolUseIDs}\n debug={debug}\n inProgressToolUseIDs={inProgressToolUseIDs}\n message={m1}\n normalizedMessages={normalizedMessages}\n tools={tools}\n unresolvedToolUseIDs={unresolvedToolUseIDs}\n verbose={verbose}\n />\n </Box>\n <Box\n flexDirection=\"column\"\n flexGrow={1}\n flexBasis={1}\n gap={1}\n borderStyle={focused === 'prefer-right' ? 'bold' : 'single'}\n borderColor={\n focused === 'prefer-right' ? theme.success : theme.secondaryBorder\n }\n marginLeft={1}\n padding={1}\n >\n <BinaryFeedbackOption\n erroredToolUseIDs={erroredToolUseIDs}\n debug={debug}\n inProgressToolUseIDs={inProgressToolUseIDs}\n message={m2}\n normalizedMessages={normalizedMessages}\n tools={tools}\n unresolvedToolUseIDs={unresolvedToolUseIDs}\n verbose={verbose}\n />\n </Box>\n </Box>\n <Box flexDirection=\"column\" paddingTop={1} paddingX={1}>\n <Text>How do you want to proceed?</Text>\n <Select\n options={getOptions()}\n onFocus={setFocus}\n focusValue={focusValue}\n onChange={onChoose as SelectProps['onChange']}\n />\n </Box>\n </Box>\n {exitState.pending ? (\n <Box marginLeft={3}>\n <Text
|
|
5
|
-
"mappings": "AACA,OAAO,WAAW;AAClB,SAAS,KAAK,MAAM,gBAAgB;AACpC,OAAO,UAAU;AACjB,OAAO,SAAS,gBAAgB;AAChC,SAAS,gBAAgB;AACzB,SAAS,cAAc;AAGvB,SAAS,4BAA4B;AAGrC,SAAS,uBAAuB;AAEhC,SAAS,oBAAoB;
|
|
4
|
+
"sourcesContent": ["import { Option, SelectProps } from '@inkjs/ui'\nimport chalk from 'chalk'\nimport { Box, Text, useInput } from 'ink'\nimport Link from 'ink-link'\nimport React, { useState } from 'react'\nimport { getTheme } from '@utils/theme'\nimport { Select } from '@components/CustomSelect/select'\nimport type { Tool } from '@tool'\nimport type { NormalizedMessage } from '@utils/messages'\nimport { BinaryFeedbackOption } from './BinaryFeedbackOption'\nimport type { AssistantMessage } from '@query'\nimport type { BinaryFeedbackChoose } from './utils'\nimport { useExitOnCtrlCD } from '@hooks/useExitOnCtrlCD'\nimport { BinaryFeedbackChoice } from './utils'\nimport { PRODUCT_NAME } from '@constants/product'\nimport { SEMANTIC_COLORS } from '@constants/colors'\n\nconst HELP_URL = 'https://go/cli-feedback'\n\ntype BinaryFeedbackOption = Option & { value: BinaryFeedbackChoice }\n\n// Make options a function to avoid early theme access during module initialization\nexport function getOptions(): BinaryFeedbackOption[] {\n return [\n {\n // This option combines the follow user intents:\n // - The two options look about equally good to me\n // - I don't feel confident enough to choose\n // - I don't want to choose right now\n label: 'Choose for me',\n value: 'no-preference',\n },\n {\n label: 'Left option looks better',\n value: 'prefer-left',\n },\n {\n label: 'Right option looks better',\n value: 'prefer-right',\n },\n {\n label: `Neither, and tell ${PRODUCT_NAME} what to do differently (${chalk.bold.hex(getTheme().warning)('esc')})`,\n value: 'neither',\n },\n ]\n}\n\ntype Props = {\n m1: AssistantMessage\n m2: AssistantMessage\n onChoose?: BinaryFeedbackChoose\n debug: boolean\n erroredToolUseIDs: Set<string>\n inProgressToolUseIDs: Set<string>\n normalizedMessages: NormalizedMessage[]\n tools: Tool[]\n unresolvedToolUseIDs: Set<string>\n verbose: boolean\n}\n\nexport function BinaryFeedbackView({\n m1,\n m2,\n onChoose,\n debug,\n erroredToolUseIDs,\n inProgressToolUseIDs,\n normalizedMessages,\n tools,\n unresolvedToolUseIDs,\n verbose,\n}: Props) {\n const theme = getTheme()\n const [focused, setFocus] = useState('no-preference')\n const [focusValue, setFocusValue] = useState<string | undefined>(undefined)\n const exitState = useExitOnCtrlCD(() => process.exit(1))\n\n useInput((_input, key) => {\n if (key.leftArrow) {\n setFocusValue('prefer-left')\n } else if (key.rightArrow) {\n setFocusValue('prefer-right')\n } else if (key.escape) {\n onChoose?.('neither')\n }\n })\n\n return (\n <>\n <Box\n flexDirection=\"column\"\n height=\"100%\"\n width=\"100%\"\n borderStyle=\"round\"\n borderColor={theme.permission}\n >\n <Box width=\"100%\" justifyContent=\"space-between\" paddingX={1}>\n <Text bold color={theme.permission}>\n [ANT-ONLY] Help train {PRODUCT_NAME}\n </Text>\n <Text>\n <Link url={HELP_URL}>[?]</Link>\n </Text>\n </Box>\n <Box flexDirection=\"row\" width=\"100%\" flexGrow={1} paddingTop={1}>\n <Box\n flexDirection=\"column\"\n flexGrow={1}\n flexBasis={1}\n gap={1}\n borderStyle={focused === 'prefer-left' ? 'bold' : 'single'}\n borderColor={\n focused === 'prefer-left' ? theme.success : theme.secondaryBorder\n }\n marginRight={1}\n padding={1}\n >\n <BinaryFeedbackOption\n erroredToolUseIDs={erroredToolUseIDs}\n debug={debug}\n inProgressToolUseIDs={inProgressToolUseIDs}\n message={m1}\n normalizedMessages={normalizedMessages}\n tools={tools}\n unresolvedToolUseIDs={unresolvedToolUseIDs}\n verbose={verbose}\n />\n </Box>\n <Box\n flexDirection=\"column\"\n flexGrow={1}\n flexBasis={1}\n gap={1}\n borderStyle={focused === 'prefer-right' ? 'bold' : 'single'}\n borderColor={\n focused === 'prefer-right' ? theme.success : theme.secondaryBorder\n }\n marginLeft={1}\n padding={1}\n >\n <BinaryFeedbackOption\n erroredToolUseIDs={erroredToolUseIDs}\n debug={debug}\n inProgressToolUseIDs={inProgressToolUseIDs}\n message={m2}\n normalizedMessages={normalizedMessages}\n tools={tools}\n unresolvedToolUseIDs={unresolvedToolUseIDs}\n verbose={verbose}\n />\n </Box>\n </Box>\n <Box flexDirection=\"column\" paddingTop={1} paddingX={1}>\n <Text>How do you want to proceed?</Text>\n <Select\n options={getOptions()}\n onFocus={setFocus}\n focusValue={focusValue}\n onChange={onChoose as SelectProps['onChange']}\n />\n </Box>\n </Box>\n {exitState.pending ? (\n <Box marginLeft={3}>\n <Text color={SEMANTIC_COLORS.dim}>\n Press {exitState.keyName} again to exit\n </Text>\n </Box>\n ) : (\n // Render a blank line so that the UI doesn't reflow when the exit message is shown\n <Text> </Text>\n )}\n </>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { AssistantBashOutputMessage } from "./AssistantBashOutputMessage.js";
|
|
3
3
|
import { AssistantLocalCommandOutputMessage } from "./AssistantLocalCommandOutputMessage.js";
|
|
4
|
-
import { getTheme } from "../../utils/theme.js";
|
|
5
4
|
import { Box, Text } from "ink";
|
|
6
5
|
import { Cost } from "../Cost.js";
|
|
7
6
|
import {
|
|
@@ -20,6 +19,12 @@ import {
|
|
|
20
19
|
import { BLACK_CIRCLE } from "../../constants/figures.js";
|
|
21
20
|
import { applyMarkdown } from "../../utils/markdown.js";
|
|
22
21
|
import { useTerminalSize } from "../../hooks/useTerminalSize.js";
|
|
22
|
+
import { formatMetaInfo } from "../../utils/taskDisplayUtils.js";
|
|
23
|
+
import {
|
|
24
|
+
SEMANTIC_COLORS,
|
|
25
|
+
SYMBOL_COLORS,
|
|
26
|
+
VALUE_TIER_COLORS
|
|
27
|
+
} from "../../constants/colors.js";
|
|
23
28
|
function AssistantTextMessage({
|
|
24
29
|
param: { text },
|
|
25
30
|
costUSD,
|
|
@@ -27,7 +32,9 @@ function AssistantTextMessage({
|
|
|
27
32
|
debug,
|
|
28
33
|
addMargin,
|
|
29
34
|
shouldShowDot,
|
|
30
|
-
verbose
|
|
35
|
+
verbose,
|
|
36
|
+
timestamp,
|
|
37
|
+
modelId
|
|
31
38
|
}) {
|
|
32
39
|
const { columns } = useTerminalSize();
|
|
33
40
|
if (isEmptyMessageText(text)) {
|
|
@@ -40,7 +47,7 @@ function AssistantTextMessage({
|
|
|
40
47
|
return /* @__PURE__ */ React.createElement(AssistantLocalCommandOutputMessage, { content: text });
|
|
41
48
|
}
|
|
42
49
|
if (text.startsWith(API_ERROR_MESSAGE_PREFIX)) {
|
|
43
|
-
return /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\u23BF \xA0", /* @__PURE__ */ React.createElement(Text, { color:
|
|
50
|
+
return /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\u23BF \xA0", /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.error }, text === API_ERROR_MESSAGE_PREFIX ? `${API_ERROR_MESSAGE_PREFIX}: Please try again` : text));
|
|
44
51
|
}
|
|
45
52
|
switch (text) {
|
|
46
53
|
// Local JSX commands don't need a response, but we still want the assistant to see them
|
|
@@ -50,13 +57,13 @@ function AssistantTextMessage({
|
|
|
50
57
|
return null;
|
|
51
58
|
case INTERRUPT_MESSAGE:
|
|
52
59
|
case CANCEL_MESSAGE:
|
|
53
|
-
return /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\u23BF \xA0", /* @__PURE__ */ React.createElement(Text, { color:
|
|
60
|
+
return /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\u23BF \xA0", /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.error }, "Cancelled"));
|
|
54
61
|
case PROMPT_TOO_LONG_ERROR_MESSAGE:
|
|
55
|
-
return /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\u23BF \xA0", /* @__PURE__ */ React.createElement(Text, { color:
|
|
62
|
+
return /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\u23BF \xA0", /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.error }, "Context too long \xB7 Run /compact to continue"));
|
|
56
63
|
case CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE:
|
|
57
|
-
return /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\u23BF \xA0", /* @__PURE__ */ React.createElement(Text, { color:
|
|
64
|
+
return /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\u23BF \xA0", /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.error }, "Insufficient credits \xB7 Top up: https://console.anthropic.com/settings/billing"));
|
|
58
65
|
case INVALID_API_KEY_ERROR_MESSAGE:
|
|
59
|
-
return /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\u23BF \xA0", /* @__PURE__ */ React.createElement(Text, { color:
|
|
66
|
+
return /* @__PURE__ */ React.createElement(Text, null, "\xA0\xA0\u23BF \xA0", /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.error }, "Invalid API key"));
|
|
60
67
|
default:
|
|
61
68
|
return /* @__PURE__ */ React.createElement(
|
|
62
69
|
Box,
|
|
@@ -67,8 +74,12 @@ function AssistantTextMessage({
|
|
|
67
74
|
marginTop: addMargin ? 1 : 0,
|
|
68
75
|
width: "100%"
|
|
69
76
|
},
|
|
70
|
-
/* @__PURE__ */ React.createElement(Box, { flexDirection: "row" }, shouldShowDot && /* @__PURE__ */ React.createElement(Box, { minWidth: 2 }, /* @__PURE__ */ React.createElement(Text, { color:
|
|
71
|
-
/* @__PURE__ */ React.createElement(Cost, { costUSD, durationMs, debug })
|
|
77
|
+
/* @__PURE__ */ React.createElement(Box, { flexDirection: "row" }, shouldShowDot && /* @__PURE__ */ React.createElement(Box, { minWidth: 2 }, /* @__PURE__ */ React.createElement(Text, { color: SYMBOL_COLORS.success }, BLACK_CIRCLE)), /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", width: columns - 6 }, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.primary }, applyMarkdown(text)))),
|
|
78
|
+
/* @__PURE__ */ React.createElement(Box, { flexDirection: "column", alignItems: "flex-end" }, /* @__PURE__ */ React.createElement(Cost, { costUSD, durationMs, debug }), verbose && (timestamp || modelId || durationMs > 0) && /* @__PURE__ */ React.createElement(Text, { color: VALUE_TIER_COLORS.meta }, formatMetaInfo({
|
|
79
|
+
duration: durationMs > 0 ? durationMs : void 0,
|
|
80
|
+
model: modelId,
|
|
81
|
+
timestamp
|
|
82
|
+
})))
|
|
72
83
|
);
|
|
73
84
|
}
|
|
74
85
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/messages/AssistantTextMessage.tsx"],
|
|
4
|
-
"sourcesContent": ["import { TextBlockParam } from '@anthropic-ai/sdk/resources/index.mjs'\nimport React from 'react'\nimport { AssistantBashOutputMessage } from './AssistantBashOutputMessage'\nimport { AssistantLocalCommandOutputMessage } from './AssistantLocalCommandOutputMessage'\nimport { getTheme } from '@utils/theme'\nimport { Box, Text } from 'ink'\nimport { Cost } from '@components/Cost'\nimport {\n API_ERROR_MESSAGE_PREFIX,\n CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE,\n INVALID_API_KEY_ERROR_MESSAGE,\n PROMPT_TOO_LONG_ERROR_MESSAGE,\n} from '@services/claude'\nimport {\n CANCEL_MESSAGE,\n INTERRUPT_MESSAGE,\n INTERRUPT_MESSAGE_FOR_TOOL_USE,\n isEmptyMessageText,\n NO_RESPONSE_REQUESTED,\n} from '@utils/messages'\nimport { BLACK_CIRCLE } from '@constants/figures'\nimport { applyMarkdown } from '@utils/markdown'\nimport { useTerminalSize } from '@hooks/useTerminalSize'\n\ntype Props = {\n param: TextBlockParam\n costUSD: number\n durationMs: number\n debug: boolean\n addMargin: boolean\n shouldShowDot: boolean\n verbose?: boolean\n width?: number | string\n}\n\nexport function AssistantTextMessage({\n param: { text },\n costUSD,\n durationMs,\n debug,\n addMargin,\n shouldShowDot,\n verbose,\n}: Props): React.ReactNode {\n const { columns } = useTerminalSize()\n if (isEmptyMessageText(text)) {\n return null\n }\n\n // Show bash output\n if (text.startsWith('<bash-stdout') || text.startsWith('<bash-stderr')) {\n return <AssistantBashOutputMessage content={text} verbose={verbose} />\n }\n\n // Show command output\n if (\n text.startsWith('<local-command-stdout') ||\n text.startsWith('<local-command-stderr')\n ) {\n return <AssistantLocalCommandOutputMessage content={text} />\n }\n\n if (text.startsWith(API_ERROR_MESSAGE_PREFIX)) {\n return (\n <Text>\n \u23BF \n <Text color={
|
|
5
|
-
"mappings": "AACA,OAAO,WAAW;AAClB,SAAS,kCAAkC;AAC3C,SAAS,0CAA0C;
|
|
4
|
+
"sourcesContent": ["import { TextBlockParam } from '@anthropic-ai/sdk/resources/index.mjs'\nimport React from 'react'\nimport { AssistantBashOutputMessage } from './AssistantBashOutputMessage'\nimport { AssistantLocalCommandOutputMessage } from './AssistantLocalCommandOutputMessage'\nimport { getTheme } from '@utils/theme'\nimport { Box, Text } from 'ink'\nimport { Cost } from '@components/Cost'\nimport {\n API_ERROR_MESSAGE_PREFIX,\n CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE,\n INVALID_API_KEY_ERROR_MESSAGE,\n PROMPT_TOO_LONG_ERROR_MESSAGE,\n} from '@services/claude'\nimport {\n CANCEL_MESSAGE,\n INTERRUPT_MESSAGE,\n INTERRUPT_MESSAGE_FOR_TOOL_USE,\n isEmptyMessageText,\n NO_RESPONSE_REQUESTED,\n} from '@utils/messages'\nimport { BLACK_CIRCLE } from '@constants/figures'\nimport { applyMarkdown } from '@utils/markdown'\nimport { useTerminalSize } from '@hooks/useTerminalSize'\nimport { formatMetaInfo } from '@utils/taskDisplayUtils'\nimport {\n SEMANTIC_COLORS,\n SYMBOL_COLORS,\n VALUE_TIER_COLORS,\n} from '@constants/colors'\n\ntype Props = {\n param: TextBlockParam\n costUSD: number\n durationMs: number\n debug: boolean\n addMargin: boolean\n shouldShowDot: boolean\n verbose?: boolean\n width?: number | string\n /** Timestamp for verbose mode display */\n timestamp?: number\n /** Model ID for verbose mode display */\n modelId?: string\n}\n\nexport function AssistantTextMessage({\n param: { text },\n costUSD,\n durationMs,\n debug,\n addMargin,\n shouldShowDot,\n verbose,\n timestamp,\n modelId,\n}: Props): React.ReactNode {\n const { columns } = useTerminalSize()\n if (isEmptyMessageText(text)) {\n return null\n }\n\n // Show bash output\n if (text.startsWith('<bash-stdout') || text.startsWith('<bash-stderr')) {\n return <AssistantBashOutputMessage content={text} verbose={verbose} />\n }\n\n // Show command output\n if (\n text.startsWith('<local-command-stdout') ||\n text.startsWith('<local-command-stderr')\n ) {\n return <AssistantLocalCommandOutputMessage content={text} />\n }\n\n if (text.startsWith(API_ERROR_MESSAGE_PREFIX)) {\n return (\n <Text>\n \u23BF \n <Text color={SEMANTIC_COLORS.error}>\n {text === API_ERROR_MESSAGE_PREFIX\n ? `${API_ERROR_MESSAGE_PREFIX}: Please try again`\n : text}\n </Text>\n </Text>\n )\n }\n\n switch (text) {\n // Local JSX commands don't need a response, but we still want the assistant to see them\n // Tool results render their own interrupt messages\n case NO_RESPONSE_REQUESTED:\n case INTERRUPT_MESSAGE_FOR_TOOL_USE:\n return null\n\n case INTERRUPT_MESSAGE:\n case CANCEL_MESSAGE:\n return (\n <Text>\n \u23BF \n <Text color={SEMANTIC_COLORS.error}>Cancelled</Text>\n </Text>\n )\n\n case PROMPT_TOO_LONG_ERROR_MESSAGE:\n return (\n <Text>\n \u23BF \n <Text color={SEMANTIC_COLORS.error}>\n Context too long \u00B7 Run /compact to continue\n </Text>\n </Text>\n )\n\n case CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE:\n return (\n <Text>\n \u23BF \n <Text color={SEMANTIC_COLORS.error}>\n Insufficient credits \u00B7 Top up:\n https://console.anthropic.com/settings/billing\n </Text>\n </Text>\n )\n\n case INVALID_API_KEY_ERROR_MESSAGE:\n return (\n <Text>\n \u23BF \n <Text color={SEMANTIC_COLORS.error}>Invalid API key</Text>\n </Text>\n )\n\n default:\n return (\n <Box\n alignItems=\"flex-start\"\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n marginTop={addMargin ? 1 : 0}\n width=\"100%\"\n >\n <Box flexDirection=\"row\">\n {shouldShowDot && (\n <Box minWidth={2}>\n <Text color={SYMBOL_COLORS.success}>{BLACK_CIRCLE}</Text>\n </Box>\n )}\n <Box flexDirection=\"column\" width={columns - 6}>\n <Text color={SEMANTIC_COLORS.primary}>{applyMarkdown(text)}</Text>\n </Box>\n </Box>\n <Box flexDirection=\"column\" alignItems=\"flex-end\">\n <Cost costUSD={costUSD} durationMs={durationMs} debug={debug} />\n {/* Verbose mode: duration \u00B7 model \u00B7 time */}\n {verbose && (timestamp || modelId || durationMs > 0) && (\n <Text color={VALUE_TIER_COLORS.meta}>\n {formatMetaInfo({\n duration: durationMs > 0 ? durationMs : undefined,\n model: modelId,\n timestamp: timestamp,\n })}\n </Text>\n )}\n </Box>\n </Box>\n )\n }\n}\n"],
|
|
5
|
+
"mappings": "AACA,OAAO,WAAW;AAClB,SAAS,kCAAkC;AAC3C,SAAS,0CAA0C;AAEnD,SAAS,KAAK,YAAY;AAC1B,SAAS,YAAY;AACrB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,oBAAoB;AAC7B,SAAS,qBAAqB;AAC9B,SAAS,uBAAuB;AAChC,SAAS,sBAAsB;AAC/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAiBA,SAAS,qBAAqB;AAAA,EACnC,OAAO,EAAE,KAAK;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2B;AACzB,QAAM,EAAE,QAAQ,IAAI,gBAAgB;AACpC,MAAI,mBAAmB,IAAI,GAAG;AAC5B,WAAO;AAAA,EACT;AAGA,MAAI,KAAK,WAAW,cAAc,KAAK,KAAK,WAAW,cAAc,GAAG;AACtE,WAAO,oCAAC,8BAA2B,SAAS,MAAM,SAAkB;AAAA,EACtE;AAGA,MACE,KAAK,WAAW,uBAAuB,KACvC,KAAK,WAAW,uBAAuB,GACvC;AACA,WAAO,oCAAC,sCAAmC,SAAS,MAAM;AAAA,EAC5D;AAEA,MAAI,KAAK,WAAW,wBAAwB,GAAG;AAC7C,WACE,oCAAC,YAAK,uBAEJ,oCAAC,QAAK,OAAO,gBAAgB,SAC1B,SAAS,2BACN,GAAG,wBAAwB,uBAC3B,IACN,CACF;AAAA,EAEJ;AAEA,UAAQ,MAAM;AAAA;AAAA;AAAA,IAGZ,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IAET,KAAK;AAAA,IACL,KAAK;AACH,aACE,oCAAC,YAAK,uBAEJ,oCAAC,QAAK,OAAO,gBAAgB,SAAO,WAAS,CAC/C;AAAA,IAGJ,KAAK;AACH,aACE,oCAAC,YAAK,uBAEJ,oCAAC,QAAK,OAAO,gBAAgB,SAAO,gDAEpC,CACF;AAAA,IAGJ,KAAK;AACH,aACE,oCAAC,YAAK,uBAEJ,oCAAC,QAAK,OAAO,gBAAgB,SAAO,kFAGpC,CACF;AAAA,IAGJ,KAAK;AACH,aACE,oCAAC,YAAK,uBAEJ,oCAAC,QAAK,OAAO,gBAAgB,SAAO,iBAAe,CACrD;AAAA,IAGJ;AACE,aACE;AAAA,QAAC;AAAA;AAAA,UACC,YAAW;AAAA,UACX,eAAc;AAAA,UACd,gBAAe;AAAA,UACf,WAAW,YAAY,IAAI;AAAA,UAC3B,OAAM;AAAA;AAAA,QAEN,oCAAC,OAAI,eAAc,SAChB,iBACC,oCAAC,OAAI,UAAU,KACb,oCAAC,QAAK,OAAO,cAAc,WAAU,YAAa,CACpD,GAEF,oCAAC,OAAI,eAAc,UAAS,OAAO,UAAU,KAC3C,oCAAC,QAAK,OAAO,gBAAgB,WAAU,cAAc,IAAI,CAAE,CAC7D,CACF;AAAA,QACA,oCAAC,OAAI,eAAc,UAAS,YAAW,cACrC,oCAAC,QAAK,SAAkB,YAAwB,OAAc,GAE7D,YAAY,aAAa,WAAW,aAAa,MAChD,oCAAC,QAAK,OAAO,kBAAkB,QAC5B,eAAe;AAAA,UACd,UAAU,aAAa,IAAI,aAAa;AAAA,UACxC,OAAO;AAAA,UACP;AAAA,QACF,CAAC,CACH,CAEJ;AAAA,MACF;AAAA,EAEN;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,13 +2,28 @@ import React from "react";
|
|
|
2
2
|
import { Box, Text } from "ink";
|
|
3
3
|
import { getTheme } from "../../utils/theme.js";
|
|
4
4
|
import { applyMarkdown } from "../../utils/markdown.js";
|
|
5
|
+
import { formatDuration, formatNumber } from "../../utils/format.js";
|
|
6
|
+
function formatThinkingMeta(metadata) {
|
|
7
|
+
const parts = [];
|
|
8
|
+
if (metadata.durationMs > 0) {
|
|
9
|
+
parts.push(formatDuration(metadata.durationMs));
|
|
10
|
+
}
|
|
11
|
+
if (metadata.charCount > 0) {
|
|
12
|
+
parts.push(`${formatNumber(metadata.charCount)} chars`);
|
|
13
|
+
}
|
|
14
|
+
return parts.join(" \xB7 ");
|
|
15
|
+
}
|
|
5
16
|
function AssistantThinkingMessage({
|
|
6
17
|
param: { thinking },
|
|
7
|
-
addMargin = false
|
|
18
|
+
addMargin = false,
|
|
19
|
+
metadata,
|
|
20
|
+
showMetaInfo = false
|
|
8
21
|
}) {
|
|
9
22
|
if (!thinking) {
|
|
10
23
|
return null;
|
|
11
24
|
}
|
|
25
|
+
const theme = getTheme();
|
|
26
|
+
const metaText = showMetaInfo && metadata ? formatThinkingMeta(metadata) : null;
|
|
12
27
|
return /* @__PURE__ */ React.createElement(
|
|
13
28
|
Box,
|
|
14
29
|
{
|
|
@@ -17,8 +32,8 @@ function AssistantThinkingMessage({
|
|
|
17
32
|
marginTop: addMargin ? 1 : 0,
|
|
18
33
|
width: "100%"
|
|
19
34
|
},
|
|
20
|
-
/* @__PURE__ */ React.createElement(Text, { color:
|
|
21
|
-
/* @__PURE__ */ React.createElement(Box, { paddingLeft: 2 }, /* @__PURE__ */ React.createElement(Text, { color:
|
|
35
|
+
/* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, { color: theme.secondaryText, italic: true }, "\u273B ", metadata?.isComplete ? "Thinking" : "Thinking\u2026"), metaText && /* @__PURE__ */ React.createElement(Text, { color: theme.mutedText }, " (", metaText, ")")),
|
|
36
|
+
/* @__PURE__ */ React.createElement(Box, { paddingLeft: 2 }, /* @__PURE__ */ React.createElement(Text, { color: theme.secondaryText, italic: true }, applyMarkdown(thinking)))
|
|
22
37
|
);
|
|
23
38
|
}
|
|
24
39
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/messages/AssistantThinkingMessage.tsx"],
|
|
4
|
-
"sourcesContent": ["import React from 'react'\nimport { Box, Text } from 'ink'\nimport { getTheme } from '@utils/theme'\nimport { applyMarkdown } from '@utils/markdown'\nimport {\n ThinkingBlock,\n ThinkingBlockParam,\n} from '@anthropic-ai/sdk/resources/index.mjs'\n\ntype Props = {\n param: ThinkingBlock | ThinkingBlockParam\n addMargin: boolean\n}\n\nexport function AssistantThinkingMessage({\n param: { thinking },\n addMargin = false,\n}: Props): React.ReactNode {\n if (!thinking) {\n return null\n }\n\n return (\n <Box\n flexDirection=\"column\"\n gap={1}\n marginTop={addMargin ? 1 : 0}\n width=\"100%\"\n >\n <Text color={
|
|
5
|
-
"mappings": "AAAA,OAAO,WAAW;AAClB,SAAS,KAAK,YAAY;AAC1B,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;
|
|
4
|
+
"sourcesContent": ["import React from 'react'\nimport { Box, Text } from 'ink'\nimport { getTheme } from '@utils/theme'\nimport { applyMarkdown } from '@utils/markdown'\nimport { formatDuration, formatNumber } from '@utils/format'\nimport {\n ThinkingBlock,\n ThinkingBlockParam,\n} from '@anthropic-ai/sdk/resources/index.mjs'\nimport type { ThinkingMetadata } from '@minto-types/thinking'\n\ntype Props = {\n param: ThinkingBlock | ThinkingBlockParam\n addMargin: boolean\n metadata?: ThinkingMetadata\n showMetaInfo?: boolean\n}\n\n/**\n * Format thinking metadata for display\n * e.g., \"15s \u00B7 4.2k chars\"\n */\nfunction formatThinkingMeta(metadata: ThinkingMetadata): string {\n const parts: string[] = []\n if (metadata.durationMs > 0) {\n parts.push(formatDuration(metadata.durationMs))\n }\n if (metadata.charCount > 0) {\n parts.push(`${formatNumber(metadata.charCount)} chars`)\n }\n return parts.join(' \u00B7 ')\n}\n\nexport function AssistantThinkingMessage({\n param: { thinking },\n addMargin = false,\n metadata,\n showMetaInfo = false,\n}: Props): React.ReactNode {\n if (!thinking) {\n return null\n }\n\n const theme = getTheme()\n\n // Format metadata for display\n const metaText =\n showMetaInfo && metadata ? formatThinkingMeta(metadata) : null\n\n return (\n <Box\n flexDirection=\"column\"\n gap={1}\n marginTop={addMargin ? 1 : 0}\n width=\"100%\"\n >\n <Box>\n <Text color={theme.secondaryText} italic>\n \u273B {metadata?.isComplete ? 'Thinking' : 'Thinking\u2026'}\n </Text>\n {metaText && <Text color={theme.mutedText}> ({metaText})</Text>}\n </Box>\n <Box paddingLeft={2}>\n <Text color={theme.secondaryText} italic>\n {applyMarkdown(thinking)}\n </Text>\n </Box>\n </Box>\n )\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,WAAW;AAClB,SAAS,KAAK,YAAY;AAC1B,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB,oBAAoB;AAkB7C,SAAS,mBAAmB,UAAoC;AAC9D,QAAM,QAAkB,CAAC;AACzB,MAAI,SAAS,aAAa,GAAG;AAC3B,UAAM,KAAK,eAAe,SAAS,UAAU,CAAC;AAAA,EAChD;AACA,MAAI,SAAS,YAAY,GAAG;AAC1B,UAAM,KAAK,GAAG,aAAa,SAAS,SAAS,CAAC,QAAQ;AAAA,EACxD;AACA,SAAO,MAAM,KAAK,QAAK;AACzB;AAEO,SAAS,yBAAyB;AAAA,EACvC,OAAO,EAAE,SAAS;AAAA,EAClB,YAAY;AAAA,EACZ;AAAA,EACA,eAAe;AACjB,GAA2B;AACzB,MAAI,CAAC,UAAU;AACb,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,SAAS;AAGvB,QAAM,WACJ,gBAAgB,WAAW,mBAAmB,QAAQ,IAAI;AAE5D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,KAAK;AAAA,MACL,WAAW,YAAY,IAAI;AAAA,MAC3B,OAAM;AAAA;AAAA,IAEN,oCAAC,WACC,oCAAC,QAAK,OAAO,MAAM,eAAe,QAAM,QAAC,WACpC,UAAU,aAAa,aAAa,gBACzC,GACC,YAAY,oCAAC,QAAK,OAAO,MAAM,aAAW,MAAG,UAAS,GAAC,CAC1D;AAAA,IACA,oCAAC,OAAI,aAAa,KAChB,oCAAC,QAAK,OAAO,MAAM,eAAe,QAAM,QACrC,cAAc,QAAQ,CACzB,CACF;AAAA,EACF;AAEJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,11 +3,13 @@ import React from "react";
|
|
|
3
3
|
import { logError } from "../../utils/log.js";
|
|
4
4
|
import { Cost } from "../Cost.js";
|
|
5
5
|
import { ToolUseLoader } from "../ToolUseLoader.js";
|
|
6
|
-
import { getTheme } from "../../utils/theme.js";
|
|
7
6
|
import { BLACK_CIRCLE } from "../../constants/figures.js";
|
|
8
7
|
import { ThinkTool } from "../../tools/ThinkTool/ThinkTool.js";
|
|
9
8
|
import { AssistantThinkingMessage } from "./AssistantThinkingMessage.js";
|
|
10
9
|
import { TaskToolMessage } from "./TaskToolMessage.js";
|
|
10
|
+
import { safeRenderToolUseMessage } from "../../utils/tooling/safeRender.js";
|
|
11
|
+
import { formatMetaInfo } from "../../utils/taskDisplayUtils.js";
|
|
12
|
+
import { SEMANTIC_COLORS, VALUE_TIER_COLORS } from "../../constants/colors.js";
|
|
11
13
|
function AssistantToolUseMessage({
|
|
12
14
|
param,
|
|
13
15
|
costUSD,
|
|
@@ -20,7 +22,8 @@ function AssistantToolUseMessage({
|
|
|
20
22
|
inProgressToolUseIDs,
|
|
21
23
|
unresolvedToolUseIDs,
|
|
22
24
|
shouldAnimate,
|
|
23
|
-
shouldShowDot
|
|
25
|
+
shouldShowDot,
|
|
26
|
+
modelId
|
|
24
27
|
}) {
|
|
25
28
|
const tool = tools.find((_) => _.name === param.name);
|
|
26
29
|
if (!tool) {
|
|
@@ -28,7 +31,7 @@ function AssistantToolUseMessage({
|
|
|
28
31
|
return null;
|
|
29
32
|
}
|
|
30
33
|
const isQueued = !inProgressToolUseIDs.has(param.id) && unresolvedToolUseIDs.has(param.id);
|
|
31
|
-
const color = isQueued ?
|
|
34
|
+
const color = isQueued ? SEMANTIC_COLORS.dim : void 0;
|
|
32
35
|
if (tool === ThinkTool) {
|
|
33
36
|
const { thought } = ThinkTool.inputSchema.parse(param.input);
|
|
34
37
|
return /* @__PURE__ */ React.createElement(
|
|
@@ -73,18 +76,22 @@ function AssistantToolUseMessage({
|
|
|
73
76
|
}
|
|
74
77
|
) : /* @__PURE__ */ React.createElement(Text, { color, bold: !isQueued }, userFacingToolName)
|
|
75
78
|
), /* @__PURE__ */ React.createElement(Box, { flexWrap: "nowrap" }, Object.keys(param.input).length > 0 && (() => {
|
|
76
|
-
const toolMessage = tool.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
|
|
79
|
+
const toolMessage = safeRenderToolUseMessage(tool, param.input, {
|
|
80
|
+
verbose
|
|
81
|
+
});
|
|
82
|
+
if (tool.name === "TodoWrite") {
|
|
83
|
+
return /* @__PURE__ */ React.createElement(Text, { color }, toolMessage);
|
|
84
|
+
}
|
|
82
85
|
if (React.isValidElement(toolMessage)) {
|
|
83
86
|
return /* @__PURE__ */ React.createElement(Box, { flexDirection: "row" }, /* @__PURE__ */ React.createElement(Text, { color }, "("), toolMessage, /* @__PURE__ */ React.createElement(Text, { color }, ")"));
|
|
84
87
|
}
|
|
85
88
|
return /* @__PURE__ */ React.createElement(Text, { color }, "(", toolMessage, ")");
|
|
86
89
|
})(), /* @__PURE__ */ React.createElement(Text, { color }, "\u2026"))),
|
|
87
|
-
/* @__PURE__ */ React.createElement(Cost, { costUSD, durationMs, debug })
|
|
90
|
+
/* @__PURE__ */ React.createElement(Box, { flexDirection: "column", alignItems: "flex-end" }, /* @__PURE__ */ React.createElement(Cost, { costUSD, durationMs, debug }), verbose && /* @__PURE__ */ React.createElement(Text, { color: VALUE_TIER_COLORS.meta }, formatMetaInfo({
|
|
91
|
+
duration: durationMs > 0 ? durationMs : void 0,
|
|
92
|
+
model: modelId,
|
|
93
|
+
timestamp: Date.now()
|
|
94
|
+
})))
|
|
88
95
|
);
|
|
89
96
|
}
|
|
90
97
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/messages/AssistantToolUseMessage.tsx"],
|
|
4
|
-
"sourcesContent": ["import { Box, Text } from 'ink'\nimport React from 'react'\nimport { logError } from '@utils/log'\nimport { ToolUseBlockParam } from '@anthropic-ai/sdk/resources/index.mjs'\nimport { Tool } from '@tool'\nimport { Cost } from '@components/Cost'\nimport { ToolUseLoader } from '@components/ToolUseLoader'\nimport {
|
|
5
|
-
"mappings": "AAAA,SAAS,KAAK,YAAY;AAC1B,OAAO,WAAW;AAClB,SAAS,gBAAgB;AAGzB,SAAS,YAAY;AACrB,SAAS,qBAAqB;AAC9B,SAAS,
|
|
4
|
+
"sourcesContent": ["import { Box, Text } from 'ink'\nimport React from 'react'\nimport { logError } from '@utils/log'\nimport { ToolUseBlockParam } from '@anthropic-ai/sdk/resources/index.mjs'\nimport { Tool } from '@tool'\nimport { Cost } from '@components/Cost'\nimport { ToolUseLoader } from '@components/ToolUseLoader'\nimport { BLACK_CIRCLE } from '@constants/figures'\nimport { ThinkTool } from '@tools/ThinkTool/ThinkTool'\nimport { AssistantThinkingMessage } from './AssistantThinkingMessage'\nimport { TaskToolMessage } from './TaskToolMessage'\nimport { safeRenderToolUseMessage } from '@utils/tooling/safeRender'\nimport { formatMetaInfo } from '@utils/taskDisplayUtils'\nimport { SEMANTIC_COLORS, VALUE_TIER_COLORS } from '@constants/colors'\n\ntype Props = {\n param: ToolUseBlockParam\n costUSD: number\n durationMs: number\n addMargin: boolean\n tools: Tool[]\n debug: boolean\n verbose: boolean\n erroredToolUseIDs: Set<string>\n inProgressToolUseIDs: Set<string>\n unresolvedToolUseIDs: Set<string>\n shouldAnimate: boolean\n shouldShowDot: boolean\n /** Model ID for verbose mode display */\n modelId?: string\n}\n\nexport function AssistantToolUseMessage({\n param,\n costUSD,\n durationMs,\n addMargin,\n tools,\n debug,\n verbose,\n erroredToolUseIDs,\n inProgressToolUseIDs,\n unresolvedToolUseIDs,\n shouldAnimate,\n shouldShowDot,\n modelId,\n}: Props): React.ReactNode {\n const tool = tools.find(_ => _.name === param.name)\n if (!tool) {\n logError(`Tool ${param.name} not found`)\n return null\n }\n const isQueued =\n !inProgressToolUseIDs.has(param.id) && unresolvedToolUseIDs.has(param.id)\n // \u4F7F\u7528\u8BED\u4E49\u989C\u8272\uFF1A\u6392\u961F\u4E2D\u7528 dim\uFF0C\u8FDB\u884C\u4E2D\u7528\u9ED8\u8BA4\n const color = isQueued ? SEMANTIC_COLORS.dim : undefined\n\n // Handle thinking tool with specialized rendering\n if (tool === ThinkTool) {\n const { thought } = ThinkTool.inputSchema.parse(param.input)\n return (\n <AssistantThinkingMessage\n param={{ thinking: thought, signature: '', type: 'thinking' }}\n addMargin={addMargin}\n />\n )\n }\n\n const userFacingToolName = tool.userFacingName\n ? tool.userFacingName()\n : tool.name\n return (\n <Box\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n marginTop={addMargin ? 1 : 0}\n width=\"100%\"\n >\n <Box>\n <Box\n flexWrap=\"nowrap\"\n minWidth={userFacingToolName.length + (shouldShowDot ? 2 : 0)}\n >\n {shouldShowDot &&\n (isQueued ? (\n <Box minWidth={2}>\n <Text color={color}>{BLACK_CIRCLE}</Text>\n </Box>\n ) : (\n <ToolUseLoader\n shouldAnimate={shouldAnimate}\n isUnresolved={unresolvedToolUseIDs.has(param.id)}\n isError={erroredToolUseIDs.has(param.id)}\n />\n ))}\n {tool.name === 'Task' && param.input ? (\n <TaskToolMessage\n agentType={String(\n (param.input as any).subagent_type || 'general-purpose',\n )}\n bold={Boolean(!isQueued)}\n children={String(userFacingToolName || '')}\n />\n ) : (\n <Text color={color} bold={!isQueued}>\n {userFacingToolName}\n </Text>\n )}\n </Box>\n <Box flexWrap=\"nowrap\">\n {Object.keys(param.input as { [key: string]: unknown }).length > 0 &&\n (() => {\n const toolMessage = safeRenderToolUseMessage(tool, param.input, {\n verbose,\n })\n\n // TodoWriteTool: Special formatting - message already includes parentheses and formatting\n // Format: \" (1 running, 2 pending): taskName\" (note leading space, parens around stats only)\n if (tool.name === 'TodoWrite') {\n return <Text color={color}>{toolMessage}</Text>\n }\n\n // If the tool returns a React component, render it directly\n if (React.isValidElement(toolMessage)) {\n return (\n <Box flexDirection=\"row\">\n <Text color={color}>(</Text>\n {toolMessage}\n <Text color={color}>)</Text>\n </Box>\n )\n }\n\n // If it's a string, wrap it in Text\n return <Text color={color}>({toolMessage})</Text>\n })()}\n <Text color={color}>\u2026</Text>\n </Box>\n </Box>\n <Box flexDirection=\"column\" alignItems=\"flex-end\">\n <Cost costUSD={costUSD} durationMs={durationMs} debug={debug} />\n {/* Verbose mode: duration \u00B7 model \u00B7 time */}\n {verbose && (\n <Text color={VALUE_TIER_COLORS.meta}>\n {formatMetaInfo({\n duration: durationMs > 0 ? durationMs : undefined,\n model: modelId,\n timestamp: Date.now(),\n })}\n </Text>\n )}\n </Box>\n </Box>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { ParallelTasksGroupView } from "./ParallelTasksGroupView.js";
|
|
4
|
+
import { TaskInModuleView } from "./TaskInModuleView.js";
|
|
5
|
+
import { SEMANTIC_COLORS } from "../../constants/colors.js";
|
|
6
|
+
function GroupRenderer({
|
|
7
|
+
group,
|
|
8
|
+
context,
|
|
9
|
+
messages,
|
|
10
|
+
transcripts,
|
|
11
|
+
outputs
|
|
12
|
+
}) {
|
|
13
|
+
const { displayConfig, shouldAnimate, getTranscript } = context;
|
|
14
|
+
switch (group.type) {
|
|
15
|
+
case "parallel-tasks":
|
|
16
|
+
return /* @__PURE__ */ React.createElement(
|
|
17
|
+
ParallelTasksGroupView,
|
|
18
|
+
{
|
|
19
|
+
group,
|
|
20
|
+
messages,
|
|
21
|
+
transcripts,
|
|
22
|
+
outputs,
|
|
23
|
+
displayConfig,
|
|
24
|
+
shouldAnimate,
|
|
25
|
+
getTranscript
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
case "task": {
|
|
29
|
+
const toolUseId = group.metadata.toolUseId;
|
|
30
|
+
const agentId = group.metadata.agentId;
|
|
31
|
+
const transcript = agentId ? getTranscript?.(agentId) ?? transcripts.get(agentId) ?? null : null;
|
|
32
|
+
const output = outputs.get(toolUseId);
|
|
33
|
+
return /* @__PURE__ */ React.createElement(
|
|
34
|
+
TaskInModuleView,
|
|
35
|
+
{
|
|
36
|
+
toolUseId,
|
|
37
|
+
description: group.metadata.description || "Task",
|
|
38
|
+
agentType: group.metadata.agentType || "general-purpose",
|
|
39
|
+
transcript,
|
|
40
|
+
output: output || null,
|
|
41
|
+
config: displayConfig,
|
|
42
|
+
shouldAnimate,
|
|
43
|
+
inModule: false
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
default:
|
|
48
|
+
return /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "[Unknown group type: ", group.type, "]"));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export {
|
|
52
|
+
GroupRenderer
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=GroupRenderer.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/messages/GroupRenderer.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * Group Renderer Component\n *\n * Dispatches rendering to specialized components based on group type.\n * Entry point for the V1+ hierarchical message display system.\n */\n\nimport React from 'react'\nimport { Box, Text } from 'ink'\nimport type {\n ToolResultBlockParam,\n ToolUseBlockParam,\n} from '@anthropic-ai/sdk/resources/index.mjs'\nimport type { MessageGroup, GroupContext } from '@minto-types/messageGroup'\nimport type { AgentTranscript } from '@utils/agentTranscripts'\nimport type { NormalizedMessage } from '@utils/messages'\nimport { ParallelTasksGroupView } from './ParallelTasksGroupView'\nimport { TaskInModuleView } from './TaskInModuleView'\nimport { SEMANTIC_COLORS } from '@constants/colors'\n\ninterface Props {\n /** The group to render */\n group: MessageGroup\n /** Group rendering context */\n context: GroupContext\n /** Normalized messages */\n messages: NormalizedMessage[]\n /** Transcripts by agentId */\n transcripts: Map<string, AgentTranscript>\n /** Outputs by toolUseId */\n outputs: Map<string, ToolResultBlockParam>\n}\n\nexport function GroupRenderer({\n group,\n context,\n messages,\n transcripts,\n outputs,\n}: Props): React.ReactNode {\n const { displayConfig, shouldAnimate, getTranscript } = context\n\n switch (group.type) {\n case 'parallel-tasks':\n return (\n <ParallelTasksGroupView\n group={group}\n messages={messages}\n transcripts={transcripts}\n outputs={outputs}\n displayConfig={displayConfig}\n shouldAnimate={shouldAnimate}\n getTranscript={getTranscript}\n />\n )\n\n case 'task': {\n const toolUseId = group.metadata.toolUseId as string\n const agentId = group.metadata.agentId as string | undefined\n // Use getTranscript for lazy loading from disk (essential for historical messages)\n const transcript = agentId\n ? (getTranscript?.(agentId) ?? transcripts.get(agentId) ?? null)\n : null\n const output = outputs.get(toolUseId)\n\n return (\n <TaskInModuleView\n toolUseId={toolUseId}\n description={group.metadata.description || 'Task'}\n agentType={group.metadata.agentType || 'general-purpose'}\n transcript={transcript}\n output={output || null}\n config={displayConfig}\n shouldAnimate={shouldAnimate}\n inModule={false}\n />\n )\n }\n\n default:\n // Unknown type: render a simple placeholder\n return (\n <Box>\n <Text color={SEMANTIC_COLORS.dim}>\n [Unknown group type: {group.type}]\n </Text>\n </Box>\n )\n }\n}\n"],
|
|
5
|
+
"mappings": "AAOA,OAAO,WAAW;AAClB,SAAS,KAAK,YAAY;AAQ1B,SAAS,8BAA8B;AACvC,SAAS,wBAAwB;AACjC,SAAS,uBAAuB;AAezB,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2B;AACzB,QAAM,EAAE,eAAe,eAAe,cAAc,IAAI;AAExD,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK;AACH,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACF;AAAA,IAGJ,KAAK,QAAQ;AACX,YAAM,YAAY,MAAM,SAAS;AACjC,YAAM,UAAU,MAAM,SAAS;AAE/B,YAAM,aAAa,UACd,gBAAgB,OAAO,KAAK,YAAY,IAAI,OAAO,KAAK,OACzD;AACJ,YAAM,SAAS,QAAQ,IAAI,SAAS;AAEpC,aACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,aAAa,MAAM,SAAS,eAAe;AAAA,UAC3C,WAAW,MAAM,SAAS,aAAa;AAAA,UACvC;AAAA,UACA,QAAQ,UAAU;AAAA,UAClB,QAAQ;AAAA,UACR;AAAA,UACA,UAAU;AAAA;AAAA,MACZ;AAAA,IAEJ;AAAA,IAEA;AAEE,aACE,oCAAC,WACC,oCAAC,QAAK,OAAO,gBAAgB,OAAK,yBACV,MAAM,MAAK,GACnC,CACF;AAAA,EAEN;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import {
|
|
4
|
+
SEMANTIC_COLORS,
|
|
5
|
+
SYMBOL_COLORS,
|
|
6
|
+
STATUS_COLORS
|
|
7
|
+
} from "../../constants/colors.js";
|
|
8
|
+
function NestedTasksPreview({
|
|
9
|
+
tasks,
|
|
10
|
+
hiddenCount
|
|
11
|
+
}) {
|
|
12
|
+
return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column" }, hiddenCount > 0 && /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "\xB7\xB7\xB7 ", hiddenCount, " earlier tasks hidden \xB7\xB7\xB7"), tasks.map((child, i) => /* @__PURE__ */ React.createElement(Box, { key: i, flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(
|
|
13
|
+
Text,
|
|
14
|
+
{
|
|
15
|
+
color: child.status === "completed" ? SYMBOL_COLORS.success : STATUS_COLORS.running
|
|
16
|
+
},
|
|
17
|
+
child.status === "completed" ? "\u2713" : "\u22EF",
|
|
18
|
+
" "
|
|
19
|
+
), /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.secondary }, child.description)), child.content && /* @__PURE__ */ React.createElement(Box, { marginLeft: 2 }, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, child.content)))));
|
|
20
|
+
}
|
|
21
|
+
export {
|
|
22
|
+
NestedTasksPreview
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=NestedTasksPreview.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/messages/NestedTasksPreview.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * Nested Tasks Preview Component\n *\n * Displays a preview of nested/child tasks with status and content.\n * Used for intermediate state display during task execution.\n */\n\nimport React from 'react'\nimport { Box, Text } from 'ink'\nimport {\n SEMANTIC_COLORS,\n SYMBOL_COLORS,\n STATUS_COLORS,\n} from '@constants/colors'\n\ninterface NestedTaskChild {\n description: string\n status: string\n content: string\n}\n\ninterface Props {\n tasks: NestedTaskChild[]\n hiddenCount: number\n}\n\nexport function NestedTasksPreview({\n tasks,\n hiddenCount,\n}: Props): React.ReactNode {\n return (\n <Box flexDirection=\"column\">\n {/* Hidden tasks indicator */}\n {hiddenCount > 0 && (\n <Text color={SEMANTIC_COLORS.dim}>\n \u00B7\u00B7\u00B7 {hiddenCount} earlier tasks hidden \u00B7\u00B7\u00B7\n </Text>\n )}\n\n {/* Visible nested tasks */}\n {tasks.map((child, i) => (\n <Box key={i} flexDirection=\"column\">\n <Text>\n <Text\n color={\n child.status === 'completed'\n ? SYMBOL_COLORS.success\n : STATUS_COLORS.running\n }\n >\n {child.status === 'completed' ? '\u2713' : '\u22EF'}{' '}\n </Text>\n <Text color={SEMANTIC_COLORS.secondary}>{child.description}</Text>\n </Text>\n {child.content && (\n <Box marginLeft={2}>\n <Text color={SEMANTIC_COLORS.dim}>{child.content}</Text>\n </Box>\n )}\n </Box>\n ))}\n </Box>\n )\n}\n"],
|
|
5
|
+
"mappings": "AAOA,OAAO,WAAW;AAClB,SAAS,KAAK,YAAY;AAC1B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAaA,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AACF,GAA2B;AACzB,SACE,oCAAC,OAAI,eAAc,YAEhB,cAAc,KACb,oCAAC,QAAK,OAAO,gBAAgB,OAAK,iBAC3B,aAAY,oCACnB,GAID,MAAM,IAAI,CAAC,OAAO,MACjB,oCAAC,OAAI,KAAK,GAAG,eAAc,YACzB,oCAAC,YACC;AAAA,IAAC;AAAA;AAAA,MACC,OACE,MAAM,WAAW,cACb,cAAc,UACd,cAAc;AAAA;AAAA,IAGnB,MAAM,WAAW,cAAc,WAAM;AAAA,IAAK;AAAA,EAC7C,GACA,oCAAC,QAAK,OAAO,gBAAgB,aAAY,MAAM,WAAY,CAC7D,GACC,MAAM,WACL,oCAAC,OAAI,YAAY,KACf,oCAAC,QAAK,OAAO,gBAAgB,OAAM,MAAM,OAAQ,CACnD,CAEJ,CACD,CACH;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { TreeConnector } from "../TreeConnector.js";
|
|
4
|
+
import { CollapsibleHint } from "../CollapsibleHint.js";
|
|
5
|
+
import { TaskInModuleView } from "./TaskInModuleView.js";
|
|
6
|
+
import { ParallelTasksHandler } from "../../utils/groupHandlers/parallelTasksHandler.js";
|
|
7
|
+
import { MARGIN_BEFORE_MODULE, INDENT_LEVELS } from "../../constants/formatRules.js";
|
|
8
|
+
import { SYMBOLS } from "../../constants/symbols.js";
|
|
9
|
+
import {
|
|
10
|
+
SEMANTIC_COLORS,
|
|
11
|
+
VALUE_TIER_COLORS,
|
|
12
|
+
SYMBOL_COLORS
|
|
13
|
+
} from "../../constants/colors.js";
|
|
14
|
+
import { formatMetaInfo } from "../../utils/taskDisplayUtils.js";
|
|
15
|
+
function ParallelTasksGroupView({
|
|
16
|
+
group,
|
|
17
|
+
messages,
|
|
18
|
+
transcripts,
|
|
19
|
+
outputs,
|
|
20
|
+
displayConfig,
|
|
21
|
+
shouldAnimate,
|
|
22
|
+
getTranscript
|
|
23
|
+
}) {
|
|
24
|
+
const memberIds = group.metadata.siblingToolUseIds || [];
|
|
25
|
+
const getTranscriptForAgent = (agentId) => {
|
|
26
|
+
return getTranscript?.(agentId) ?? transcripts.get(agentId) ?? null;
|
|
27
|
+
};
|
|
28
|
+
const memberInfos = ParallelTasksHandler.getMemberTaskInfo(group, messages);
|
|
29
|
+
const completedCount = memberInfos.filter((info) => {
|
|
30
|
+
const output = outputs.get(info.toolUseId);
|
|
31
|
+
if (output) return true;
|
|
32
|
+
if (!info.agentId) return false;
|
|
33
|
+
const transcript = getTranscriptForAgent(info.agentId);
|
|
34
|
+
return transcript?.status === "completed";
|
|
35
|
+
}).length;
|
|
36
|
+
const totalCount = memberInfos.length;
|
|
37
|
+
const isCompleted = completedCount === totalCount && totalCount > 0;
|
|
38
|
+
const statusColor = isCompleted ? SYMBOL_COLORS.success : group.status === "running" ? SYMBOL_COLORS.running : SYMBOL_COLORS.pending;
|
|
39
|
+
const groupSymbol = isCompleted ? SYMBOLS.TOOL_SUCCESS : SYMBOLS.PARALLEL_GROUP;
|
|
40
|
+
const groupMetaInfo = (() => {
|
|
41
|
+
if (!isCompleted) return null;
|
|
42
|
+
const completedTranscripts = [];
|
|
43
|
+
for (const info of memberInfos) {
|
|
44
|
+
if (info.agentId) {
|
|
45
|
+
const transcript = getTranscriptForAgent(info.agentId);
|
|
46
|
+
if (transcript?.endTime) {
|
|
47
|
+
completedTranscripts.push(transcript);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (completedTranscripts.length === 0) return null;
|
|
52
|
+
const startTimes = completedTranscripts.map((t) => t.startTime);
|
|
53
|
+
const endTimes = completedTranscripts.map((t) => t.endTime);
|
|
54
|
+
const earliestStart = Math.min(...startTimes);
|
|
55
|
+
const latestEnd = Math.max(...endTimes);
|
|
56
|
+
const totalDuration = latestEnd - earliestStart;
|
|
57
|
+
return {
|
|
58
|
+
duration: totalDuration,
|
|
59
|
+
timestamp: latestEnd
|
|
60
|
+
};
|
|
61
|
+
})();
|
|
62
|
+
return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", width: "100%", marginTop: MARGIN_BEFORE_MODULE }, /* @__PURE__ */ React.createElement(Box, { flexDirection: "row" }, /* @__PURE__ */ React.createElement(Text, { color: statusColor }, groupSymbol, " "), /* @__PURE__ */ React.createElement(Text, { bold: true, color: SEMANTIC_COLORS.secondary }, "Parallel Tasks"), /* @__PURE__ */ React.createElement(Text, null, " "), /* @__PURE__ */ React.createElement(Text, null, "("), /* @__PURE__ */ React.createElement(Text, { color: SYMBOL_COLORS.success }, completedCount), /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, "/", totalCount), /* @__PURE__ */ React.createElement(Text, null, " finished)"), displayConfig.showMetaInfo && groupMetaInfo && /* @__PURE__ */ React.createElement(Text, { color: VALUE_TIER_COLORS.meta }, " ", formatMetaInfo({
|
|
63
|
+
duration: groupMetaInfo.duration,
|
|
64
|
+
timestamp: groupMetaInfo.timestamp
|
|
65
|
+
})), /* @__PURE__ */ React.createElement(
|
|
66
|
+
CollapsibleHint,
|
|
67
|
+
{
|
|
68
|
+
canExpand: isCompleted && !displayConfig.showAllChildren
|
|
69
|
+
}
|
|
70
|
+
)), /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginLeft: INDENT_LEVELS.L1 }, memberInfos.map((info, index) => {
|
|
71
|
+
const isLast = index === memberInfos.length - 1;
|
|
72
|
+
const transcript = info.agentId ? getTranscriptForAgent(info.agentId) : null;
|
|
73
|
+
const output = outputs.get(info.toolUseId);
|
|
74
|
+
return /* @__PURE__ */ React.createElement(Box, { key: info.toolUseId, flexDirection: "row" }, /* @__PURE__ */ React.createElement(TreeConnector, { isLast }), /* @__PURE__ */ React.createElement(
|
|
75
|
+
TaskInModuleView,
|
|
76
|
+
{
|
|
77
|
+
toolUseId: info.toolUseId,
|
|
78
|
+
description: info.description,
|
|
79
|
+
agentType: info.agentType,
|
|
80
|
+
transcript,
|
|
81
|
+
output: output || null,
|
|
82
|
+
config: displayConfig,
|
|
83
|
+
shouldAnimate,
|
|
84
|
+
inModule: true,
|
|
85
|
+
isLastInModule: isLast
|
|
86
|
+
}
|
|
87
|
+
));
|
|
88
|
+
})));
|
|
89
|
+
}
|
|
90
|
+
export {
|
|
91
|
+
ParallelTasksGroupView
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=ParallelTasksGroupView.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/messages/ParallelTasksGroupView.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * Parallel Tasks Group View\n *\n * Renders a group of concurrent tasks as a unified module.\n * Displays completion progress and individual task status.\n */\n\nimport React from 'react'\nimport { Box, Text } from 'ink'\nimport type { ToolResultBlockParam } from '@anthropic-ai/sdk/resources/index.mjs'\nimport type { MessageGroup, DisplayConfig } from '@minto-types/messageGroup'\nimport type { AgentTranscript } from '@utils/agentTranscripts'\nimport type { NormalizedMessage } from '@utils/messages'\nimport { ToolUseLoader } from '@components/ToolUseLoader'\nimport { TreeConnector, TreeContinuation } from '@components/TreeConnector'\nimport { CollapsibleHint } from '@components/CollapsibleHint'\nimport { TaskInModuleView } from './TaskInModuleView'\nimport { ParallelTasksHandler } from '@utils/groupHandlers/parallelTasksHandler'\nimport { MARGIN_BEFORE_MODULE, INDENT_LEVELS } from '@constants/formatRules'\nimport { SYMBOLS } from '@constants/symbols'\nimport {\n SEMANTIC_COLORS,\n STATUS_COLORS,\n VALUE_TIER_COLORS,\n SYMBOL_COLORS,\n} from '@constants/colors'\nimport { formatMetaInfo } from '@utils/taskDisplayUtils'\n\ninterface Props {\n /** The parallel tasks group */\n group: MessageGroup\n /** Normalized messages for looking up task info */\n messages: NormalizedMessage[]\n /** Transcripts by agentId */\n transcripts: Map<string, AgentTranscript>\n /** Outputs by toolUseId */\n outputs: Map<string, ToolResultBlockParam>\n /** Display configuration */\n displayConfig: DisplayConfig\n /** Whether to animate */\n shouldAnimate: boolean\n /**\n * Function to get transcript by agentId with lazy loading from disk.\n * Essential for loading historical transcripts that aren't in memory.\n */\n getTranscript?: (agentId: string) => AgentTranscript | null\n}\n\nexport function ParallelTasksGroupView({\n group,\n messages,\n transcripts,\n outputs,\n displayConfig,\n shouldAnimate,\n getTranscript,\n}: Props): React.ReactNode {\n const memberIds = (group.metadata.siblingToolUseIds as string[]) || []\n\n // Helper to get transcript - use getTranscript for lazy loading, fallback to Map\n const getTranscriptForAgent = (agentId: string): AgentTranscript | null => {\n return getTranscript?.(agentId) ?? transcripts.get(agentId) ?? null\n }\n\n // Get task info for each member\n const memberInfos = ParallelTasksHandler.getMemberTaskInfo(group, messages)\n\n // Count completions - check both transcript status AND output existence\n const completedCount = memberInfos.filter(info => {\n // Check if output exists (definitive completion signal)\n const output = outputs.get(info.toolUseId)\n if (output) return true\n\n // Fallback to transcript status\n if (!info.agentId) return false\n const transcript = getTranscriptForAgent(info.agentId)\n return transcript?.status === 'completed'\n }).length\n\n const totalCount = memberInfos.length\n\n // Determine completion status - use actual completion count as primary signal\n // This is more reliable than group.status which may have timing issues\n const isCompleted = completedCount === totalCount && totalCount > 0\n\n // \u4F7F\u7528 SYMBOL_COLORS \u4E0E Logo \u54C1\u724C\u914D\u8272\u4FDD\u6301\u4E00\u81F4\n const statusColor = isCompleted\n ? SYMBOL_COLORS.success\n : group.status === 'running'\n ? SYMBOL_COLORS.running\n : SYMBOL_COLORS.pending\n\n // \u4F7F\u7528 REPL \u89C4\u8303\u5B9A\u4E49\u7684\u7B26\u53F7\uFF1A\u5E76\u884C\u4EFB\u52A1\u7EC4 \u25C8\n const groupSymbol = isCompleted\n ? SYMBOLS.TOOL_SUCCESS\n : SYMBOLS.PARALLEL_GROUP\n\n // \u8BA1\u7B97\u7EC4\u7EA7\u522B\u7684\u5143\u4FE1\u606F\uFF08\u7528\u4E8E verbose \u6A21\u5F0F\uFF09\n const groupMetaInfo = (() => {\n if (!isCompleted) return null\n\n // \u83B7\u53D6\u6240\u6709\u5DF2\u5B8C\u6210\u4EFB\u52A1\u7684 transcript\n const completedTranscripts: AgentTranscript[] = []\n for (const info of memberInfos) {\n if (info.agentId) {\n const transcript = getTranscriptForAgent(info.agentId)\n if (transcript?.endTime) {\n completedTranscripts.push(transcript)\n }\n }\n }\n\n if (completedTranscripts.length === 0) return null\n\n // \u8BA1\u7B97\u603B\u8017\u65F6\uFF08\u4ECE\u6700\u65E9\u5F00\u59CB\u5230\u6700\u665A\u7ED3\u675F\uFF09\n const startTimes = completedTranscripts.map(t => t.startTime)\n const endTimes = completedTranscripts.map(t => t.endTime!)\n const earliestStart = Math.min(...startTimes)\n const latestEnd = Math.max(...endTimes)\n const totalDuration = latestEnd - earliestStart\n\n return {\n duration: totalDuration,\n timestamp: latestEnd,\n }\n })()\n\n return (\n <Box flexDirection=\"column\" width=\"100%\" marginTop={MARGIN_BEFORE_MODULE}>\n {/* Module header - \u4F7F\u7528 REPL \u89C4\u8303\u7B26\u53F7 */}\n <Box flexDirection=\"row\">\n {/* \u4F7F\u7528 \u25C8 \u4F5C\u4E3A\u5E76\u884C\u4EFB\u52A1\u7EC4\u7B26\u53F7\uFF0C\u5B8C\u6210\u65F6\u4F7F\u7528 \u2713 */}\n <Text color={statusColor}>{groupSymbol} </Text>\n <Text bold color={SEMANTIC_COLORS.secondary}>\n Parallel Tasks\n </Text>\n <Text> </Text>\n {/* \u8FDB\u5EA6\u6570\u5B57\uFF1A\u5B8C\u6210\u6570\u7528 success \u8272\uFF0C\u603B\u6570\u7528 dim \u8272 */}\n <Text>(</Text>\n <Text color={SYMBOL_COLORS.success}>{completedCount}</Text>\n <Text color={SEMANTIC_COLORS.dim}>/{totalCount}</Text>\n <Text> finished)</Text>\n {/* Verbose mode: \u663E\u793A\u7EC4\u7EA7\u522B\u7684\u5143\u4FE1\u606F */}\n {displayConfig.showMetaInfo && groupMetaInfo && (\n <Text color={VALUE_TIER_COLORS.meta}>\n {' '}\n {formatMetaInfo({\n duration: groupMetaInfo.duration,\n timestamp: groupMetaInfo.timestamp,\n })}\n </Text>\n )}\n {/* Show expand hint in normal mode when completed */}\n <CollapsibleHint\n canExpand={isCompleted && !displayConfig.showAllChildren}\n />\n </Box>\n\n {/* Member tasks - \u4F7F\u7528 REPL \u89C4\u8303\u5B9A\u4E49\u7684\u7F29\u8FDB\u5C42\u7EA7 L1 */}\n <Box flexDirection=\"column\" marginLeft={INDENT_LEVELS.L1}>\n {memberInfos.map((info, index) => {\n const isLast = index === memberInfos.length - 1\n const transcript = info.agentId\n ? getTranscriptForAgent(info.agentId)\n : null\n const output = outputs.get(info.toolUseId)\n\n return (\n <Box key={info.toolUseId} flexDirection=\"row\">\n {/* Tree connector */}\n <TreeConnector isLast={isLast} />\n\n {/* Task content */}\n <TaskInModuleView\n toolUseId={info.toolUseId}\n description={info.description}\n agentType={info.agentType}\n transcript={transcript}\n output={output || null}\n config={displayConfig}\n shouldAnimate={shouldAnimate}\n inModule={true}\n isLastInModule={isLast}\n />\n </Box>\n )\n })}\n </Box>\n </Box>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|