@within-7/minto 0.3.9 → 0.4.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/dist/Tool.js.map +2 -2
- package/dist/commands/agents/AgentsCommand.js +461 -657
- package/dist/commands/agents/AgentsCommand.js.map +2 -2
- package/dist/commands/agents/types.js +1 -0
- package/dist/commands/agents/types.js.map +2 -2
- package/dist/commands/agents/utils/fileOperations.js +96 -36
- package/dist/commands/agents/utils/fileOperations.js.map +3 -3
- package/dist/commands/agents/utils/index.js +3 -1
- package/dist/commands/agents/utils/index.js.map +2 -2
- package/dist/commands/context.js +54 -23
- package/dist/commands/context.js.map +2 -2
- package/dist/commands/ctx_viz.js +1 -1
- package/dist/commands/effort.js +87 -0
- package/dist/commands/effort.js.map +7 -0
- package/dist/commands/export.js +684 -94
- package/dist/commands/export.js.map +2 -2
- package/dist/commands/ide.js +18 -0
- package/dist/commands/ide.js.map +7 -0
- package/dist/commands/language.js +19 -46
- package/dist/commands/language.js.map +2 -2
- package/dist/commands/mcp-interactive.js +425 -217
- package/dist/commands/mcp-interactive.js.map +2 -2
- package/dist/commands/memory.js +168 -0
- package/dist/commands/memory.js.map +7 -0
- package/dist/commands/model.js +457 -65
- package/dist/commands/model.js.map +2 -2
- package/dist/commands/outputStyle.js +64 -0
- package/dist/commands/outputStyle.js.map +7 -0
- package/dist/commands/permissions.js +75 -49
- package/dist/commands/permissions.js.map +2 -2
- package/dist/commands/plugin/utils.js +33 -1
- package/dist/commands/plugin/utils.js.map +2 -2
- package/dist/commands/plugin.js +891 -185
- package/dist/commands/plugin.js.map +3 -3
- package/dist/commands/refreshCommands.js +2 -0
- package/dist/commands/refreshCommands.js.map +2 -2
- package/dist/commands/resume.js +1 -1
- package/dist/commands/resume.js.map +1 -1
- package/dist/commands/review.js +51 -0
- package/dist/commands/review.js.map +7 -0
- package/dist/commands/sandbox.js +168 -70
- package/dist/commands/sandbox.js.map +2 -2
- package/dist/commands/setup.js +593 -107
- package/dist/commands/setup.js.map +2 -2
- package/dist/commands/stats.js +188 -131
- package/dist/commands/stats.js.map +2 -2
- package/dist/commands/status.js +75 -13
- package/dist/commands/status.js.map +2 -2
- package/dist/commands/terminalSetup.js +6 -0
- package/dist/commands/terminalSetup.js.map +2 -2
- package/dist/commands/undo.js +146 -174
- package/dist/commands/undo.js.map +2 -2
- package/dist/commands/vim.js +22 -0
- package/dist/commands/vim.js.map +7 -0
- package/dist/commands.js +12 -0
- package/dist/commands.js.map +2 -2
- package/dist/components/Help.js +165 -32
- package/dist/components/Help.js.map +2 -2
- package/dist/components/HighlightedCode.js +1 -0
- package/dist/components/HighlightedCode.js.map +2 -2
- package/dist/components/InfoPanel/InfoPanel.js +123 -0
- package/dist/components/InfoPanel/InfoPanel.js.map +7 -0
- package/dist/components/InfoPanel/index.js +5 -0
- package/dist/components/InfoPanel/index.js.map +7 -0
- package/dist/components/InfoPanel/types.js +1 -0
- package/dist/components/InfoPanel/types.js.map +7 -0
- package/dist/components/ModelSelector/BrandTextInput.js +43 -0
- package/dist/components/ModelSelector/BrandTextInput.js.map +7 -0
- package/dist/components/ModelSelector/ModelSelector.js +590 -565
- package/dist/components/ModelSelector/ModelSelector.js.map +2 -2
- package/dist/components/ModelSelector/WizardContainer.js +45 -0
- package/dist/components/ModelSelector/WizardContainer.js.map +7 -0
- package/dist/components/ModelSelector/index.js +1 -3
- package/dist/components/ModelSelector/index.js.map +2 -2
- package/dist/components/PromptInput.js +26 -11
- package/dist/components/PromptInput.js.map +2 -2
- package/dist/components/PulseLabel.js +44 -0
- package/dist/components/PulseLabel.js.map +7 -0
- package/dist/components/RequestStatusIndicator.js +1 -1
- package/dist/components/RequestStatusIndicator.js.map +1 -1
- package/dist/components/SimpleSelector/SimpleSelector.js +154 -0
- package/dist/components/SimpleSelector/SimpleSelector.js.map +7 -0
- package/dist/components/SimpleSelector/index.js +5 -0
- package/dist/components/SimpleSelector/index.js.map +7 -0
- package/dist/components/SimpleSelector/types.js +1 -0
- package/dist/components/SimpleSelector/types.js.map +7 -0
- package/dist/components/Spinner.js +12 -42
- package/dist/components/Spinner.js.map +3 -3
- package/dist/components/StartupStatus.js +57 -0
- package/dist/components/StartupStatus.js.map +7 -0
- package/dist/components/StatusOverlayContent.js +21 -0
- package/dist/components/StatusOverlayContent.js.map +7 -0
- package/dist/components/SubagentBlock.js +43 -6
- package/dist/components/SubagentBlock.js.map +2 -2
- package/dist/components/TabbedListView/ScrollableList.js +31 -5
- package/dist/components/TabbedListView/ScrollableList.js.map +2 -2
- package/dist/components/TabbedListView/TabBar.js +13 -8
- package/dist/components/TabbedListView/TabBar.js.map +2 -2
- package/dist/components/TabbedListView/TabbedListView.js +123 -48
- package/dist/components/TabbedListView/TabbedListView.js.map +2 -2
- package/dist/components/TodoPanel.js +1 -1
- package/dist/components/TodoPanel.js.map +1 -1
- package/dist/components/ToolUseLoader.js +5 -0
- package/dist/components/ToolUseLoader.js.map +2 -2
- package/dist/components/TrustDialog.js +0 -2
- package/dist/components/TrustDialog.js.map +2 -2
- package/dist/components/messages/TaskInModuleView.js +1 -1
- package/dist/components/messages/TaskInModuleView.js.map +2 -2
- package/dist/components/messages/TaskToolMessage.js +1 -1
- package/dist/components/messages/TaskToolMessage.js.map +2 -2
- package/dist/components/messages/UserPromptMessage.js +6 -1
- package/dist/components/messages/UserPromptMessage.js.map +2 -2
- package/dist/constants/modelCapabilities.js +103 -18
- package/dist/constants/modelCapabilities.js.map +2 -2
- package/dist/constants/product.js +2 -0
- package/dist/constants/product.js.map +2 -2
- package/dist/constants/prompts/agentPrompt.js +30 -0
- package/dist/constants/prompts/agentPrompt.js.map +7 -0
- package/dist/constants/prompts/codeConventions.js +27 -0
- package/dist/constants/prompts/codeConventions.js.map +7 -0
- package/dist/constants/prompts/doingTasks.js +15 -0
- package/dist/constants/prompts/doingTasks.js.map +7 -0
- package/dist/constants/prompts/envInfo.js +17 -0
- package/dist/constants/prompts/envInfo.js.map +7 -0
- package/dist/constants/prompts/executingWithCare.js +17 -0
- package/dist/constants/prompts/executingWithCare.js.map +7 -0
- package/dist/constants/prompts/identity.js +10 -0
- package/dist/constants/prompts/identity.js.map +7 -0
- package/dist/constants/prompts/index.js +78 -0
- package/dist/constants/prompts/index.js.map +7 -0
- package/dist/constants/prompts/taskManagement.js +60 -0
- package/dist/constants/prompts/taskManagement.js.map +7 -0
- package/dist/constants/prompts/toneAndStyle.js +62 -0
- package/dist/constants/prompts/toneAndStyle.js.map +7 -0
- package/dist/constants/prompts/toolUsagePolicy.js +38 -0
- package/dist/constants/prompts/toolUsagePolicy.js.map +7 -0
- package/dist/constants/prompts.js +5 -176
- package/dist/constants/prompts.js.map +2 -2
- package/dist/constants/providerRegistry.js +235 -0
- package/dist/constants/providerRegistry.js.map +7 -0
- package/dist/constants/providers.js +35 -0
- package/dist/constants/providers.js.map +7 -0
- package/dist/context/PermissionContext.js +0 -1
- package/dist/context/PermissionContext.js.map +2 -2
- package/dist/context.js +87 -31
- package/dist/context.js.map +2 -2
- package/dist/core/backupHook.js +29 -0
- package/dist/core/backupHook.js.map +7 -0
- package/dist/core/config/defaults.js +11 -2
- package/dist/core/config/defaults.js.map +2 -2
- package/dist/core/config/schema.js +21 -3
- package/dist/core/config/schema.js.map +2 -2
- package/dist/core/costTracker.js +18 -16
- package/dist/core/costTracker.js.map +2 -2
- package/dist/core/index.js +0 -1
- package/dist/core/index.js.map +2 -2
- package/dist/core/tokenStatsManager.js +22 -4
- package/dist/core/tokenStatsManager.js.map +2 -2
- package/dist/cost-tracker.js +0 -16
- package/dist/cost-tracker.js.map +2 -2
- package/dist/entrypoints/bootstrap.js +3 -1
- package/dist/entrypoints/bootstrap.js.map +2 -2
- package/dist/entrypoints/cli.js +81 -68
- package/dist/entrypoints/cli.js.map +2 -2
- package/dist/hooks/useAgentTokenStats.js +1 -1
- package/dist/hooks/useAgentTokenStats.js.map +2 -2
- package/dist/hooks/useAgentTranscripts.js +2 -1
- package/dist/hooks/useAgentTranscripts.js.map +2 -2
- package/dist/hooks/useBackgroundShells.js +29 -0
- package/dist/hooks/useBackgroundShells.js.map +7 -0
- package/dist/hooks/useCanUseTool.js +1 -1
- package/dist/hooks/useCanUseTool.js.map +2 -2
- package/dist/hooks/useDeferredLoading.js +64 -0
- package/dist/hooks/useDeferredLoading.js.map +7 -0
- package/dist/hooks/useHookStatus.js +1 -1
- package/dist/hooks/useHookStatus.js.map +2 -2
- package/dist/hooks/useSessionTracking.js +55 -0
- package/dist/hooks/useSessionTracking.js.map +7 -0
- package/dist/hooks/useTerminalSize.js +21 -0
- package/dist/hooks/useTerminalSize.js.map +2 -2
- package/dist/hooks/useTextInput.js +1 -0
- package/dist/hooks/useTextInput.js.map +2 -2
- package/dist/hooks/useUnifiedCompletion.js +3 -2
- package/dist/hooks/useUnifiedCompletion.js.map +2 -2
- package/dist/i18n/locales/en.js +299 -1
- package/dist/i18n/locales/en.js.map +2 -2
- package/dist/i18n/locales/zh-CN.js +300 -2
- package/dist/i18n/locales/zh-CN.js.map +2 -2
- package/dist/i18n/types.js.map +1 -1
- package/dist/messages.js +41 -17
- package/dist/messages.js.map +2 -2
- package/dist/permissions.js +94 -1
- package/dist/permissions.js.map +2 -2
- package/dist/query.js +27 -19
- package/dist/query.js.map +2 -2
- package/dist/screens/REPL.js +83 -74
- package/dist/screens/REPL.js.map +2 -2
- package/dist/services/adapters/responsesAPI.js +6 -0
- package/dist/services/adapters/responsesAPI.js.map +2 -2
- package/dist/services/agentTeams/index.js +35 -0
- package/dist/services/agentTeams/index.js.map +7 -0
- package/dist/services/agentTeams/mailbox.js +114 -0
- package/dist/services/agentTeams/mailbox.js.map +7 -0
- package/dist/services/agentTeams/teamManager.js +149 -0
- package/dist/services/agentTeams/teamManager.js.map +7 -0
- package/dist/services/agentTeams/teamTaskStore.js +114 -0
- package/dist/services/agentTeams/teamTaskStore.js.map +7 -0
- package/dist/services/agentTeams/teammateSpawner.js +80 -0
- package/dist/services/agentTeams/teammateSpawner.js.map +7 -0
- package/dist/services/checkpointManager.js +16 -3
- package/dist/services/checkpointManager.js.map +2 -2
- package/dist/services/claude.js +19 -1728
- package/dist/services/claude.js.map +3 -3
- package/dist/services/customCommands.js +30 -8
- package/dist/services/customCommands.js.map +2 -2
- package/dist/services/gpt5ConnectionTest.js +4 -2
- package/dist/services/gpt5ConnectionTest.js.map +2 -2
- package/dist/services/hookExecutor.js +411 -127
- package/dist/services/hookExecutor.js.map +2 -2
- package/dist/services/llm/anthropicProvider.js +807 -0
- package/dist/services/llm/anthropicProvider.js.map +7 -0
- package/dist/services/llm/dispatch.js +218 -0
- package/dist/services/llm/dispatch.js.map +7 -0
- package/dist/services/llm/index.js +44 -0
- package/dist/services/llm/index.js.map +7 -0
- package/dist/services/llm/mintoContext.js +69 -0
- package/dist/services/llm/mintoContext.js.map +7 -0
- package/dist/services/llm/openaiProvider.js +622 -0
- package/dist/services/llm/openaiProvider.js.map +7 -0
- package/dist/services/llm/types.js +157 -0
- package/dist/services/llm/types.js.map +7 -0
- package/dist/services/mcpClient.js +183 -33
- package/dist/services/mcpClient.js.map +2 -2
- package/dist/services/notifier.js +14 -0
- package/dist/services/notifier.js.map +2 -2
- package/dist/services/oauth.js +4 -2
- package/dist/services/oauth.js.map +2 -2
- package/dist/services/openai.js +66 -56
- package/dist/services/openai.js.map +3 -3
- package/dist/services/outputStyles.js +102 -21
- package/dist/services/outputStyles.js.map +2 -2
- package/dist/services/plugins/lspServers.js +1 -1
- package/dist/services/plugins/lspServers.js.map +2 -2
- package/dist/services/plugins/pluginRuntime.js +2 -1
- package/dist/services/plugins/pluginRuntime.js.map +2 -2
- package/dist/services/plugins/pluginValidation.js +10 -3
- package/dist/services/plugins/pluginValidation.js.map +2 -2
- package/dist/services/plugins/skillMarketplace.js +20 -9
- package/dist/services/plugins/skillMarketplace.js.map +2 -2
- package/dist/services/sentry.js +1 -1
- package/dist/services/sentry.js.map +2 -2
- package/dist/services/sessionMemory.js +16 -3
- package/dist/services/sessionMemory.js.map +2 -2
- package/dist/services/systemReminder.js +367 -9
- package/dist/services/systemReminder.js.map +2 -2
- package/dist/services/taskStore.js +19 -0
- package/dist/services/taskStore.js.map +2 -2
- package/dist/tools/ArchitectTool/ArchitectTool.js.map +1 -1
- package/dist/tools/AskUserQuestionTool/AskUserQuestionTool.js.map +1 -1
- package/dist/tools/BashOutputTool/BashOutputTool.js.map +1 -1
- package/dist/tools/BashTool/BashTool.js +28 -0
- package/dist/tools/BashTool/BashTool.js.map +2 -2
- package/dist/tools/FileEditTool/FileEditTool.js +8 -1
- package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
- package/dist/tools/FileReadTool/FileReadTool.js +14 -0
- package/dist/tools/FileReadTool/FileReadTool.js.map +2 -2
- package/dist/tools/FileWriteTool/FileWriteTool.js +10 -1
- package/dist/tools/FileWriteTool/FileWriteTool.js.map +2 -2
- package/dist/tools/GlobTool/GlobTool.js.map +1 -1
- package/dist/tools/GrepTool/GrepTool.js.map +1 -1
- package/dist/tools/KillShellTool/KillShellTool.js.map +1 -1
- package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js.map +2 -2
- package/dist/tools/LspTool/LspTool.js +11 -2
- package/dist/tools/LspTool/LspTool.js.map +2 -2
- package/dist/tools/MCPTool/MCPTool.js.map +1 -1
- package/dist/tools/MemoryReadTool/MemoryReadTool.js +2 -1
- package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +2 -2
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +2 -1
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +2 -2
- package/dist/tools/MultiEditTool/MultiEditTool.js +7 -0
- package/dist/tools/MultiEditTool/MultiEditTool.js.map +2 -2
- package/dist/tools/NotebookEditTool/NotebookEditTool.js +2 -0
- package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +2 -2
- package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +1 -1
- package/dist/tools/PlanModeTool/EnterPlanModeTool.js +8 -2
- package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +2 -2
- package/dist/tools/PlanModeTool/ExitPlanModeTool.js +2 -0
- package/dist/tools/PlanModeTool/ExitPlanModeTool.js.map +2 -2
- package/dist/tools/ReadMcpResourceTool/ReadMcpResourceTool.js.map +1 -1
- package/dist/tools/SlashCommandTool/SlashCommandTool.js +174 -18
- package/dist/tools/SlashCommandTool/SlashCommandTool.js.map +3 -3
- package/dist/tools/TaskCreateTool/TaskCreateTool.js.map +1 -1
- package/dist/tools/TaskGetTool/TaskGetTool.js.map +1 -1
- package/dist/tools/TaskListTool/TaskListTool.js.map +1 -1
- package/dist/tools/TaskOutputTool/TaskOutputTool.js.map +1 -1
- package/dist/tools/TaskStopTool/TaskStopTool.js.map +1 -1
- package/dist/tools/TaskTool/TaskTool.js +84 -11
- package/dist/tools/TaskTool/TaskTool.js.map +2 -2
- package/dist/tools/TaskTool/prompt.js +12 -6
- package/dist/tools/TaskTool/prompt.js.map +2 -2
- package/dist/tools/TaskUpdateTool/TaskUpdateTool.js.map +1 -1
- package/dist/tools/ThinkTool/ThinkTool.js.map +1 -1
- package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +1 -1
- package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +1 -1
- package/dist/tools/WebSearchTool/WebSearchTool.js.map +1 -1
- package/dist/tools/WebSearchTool/searchProviders.js +2 -1
- package/dist/tools/WebSearchTool/searchProviders.js.map +2 -2
- package/dist/tools/lsTool/lsTool.js.map +2 -2
- package/dist/tools/lsTool/prompt.js.map +1 -1
- package/dist/tools.js +14 -3
- package/dist/tools.js.map +2 -2
- package/dist/types/PermissionMode.js +21 -1
- package/dist/types/PermissionMode.js.map +2 -2
- package/dist/types/agentTeams.js +1 -0
- package/dist/types/agentTeams.js.map +7 -0
- package/dist/types/hooks.js +8 -2
- package/dist/types/hooks.js.map +2 -2
- package/dist/types/plugin.js +3 -5
- package/dist/types/plugin.js.map +2 -2
- package/dist/utils/agentHookExecutor.js +1 -4
- package/dist/utils/agentHookExecutor.js.map +2 -2
- package/dist/utils/agentLoader.js +91 -15
- package/dist/utils/agentLoader.js.map +2 -2
- package/dist/utils/agentMemory.js.map +2 -2
- package/dist/utils/animationManager.js +1 -1
- package/dist/utils/animationManager.js.map +2 -2
- package/dist/utils/ask.js +1 -1
- package/dist/utils/async.js +5 -1
- package/dist/utils/async.js.map +2 -2
- package/dist/utils/autoCompactCore.js +60 -0
- package/dist/utils/autoCompactCore.js.map +2 -2
- package/dist/utils/claudeCodeSync.js +439 -0
- package/dist/utils/claudeCodeSync.js.map +7 -0
- package/dist/utils/config.js +27 -151
- package/dist/utils/config.js.map +2 -2
- package/dist/utils/configSchema.js +227 -0
- package/dist/utils/configSchema.js.map +7 -0
- package/dist/utils/debugLogger.js.map +2 -2
- package/dist/utils/env.js +4 -3
- package/dist/utils/env.js.map +2 -2
- package/dist/utils/envConfig.js +34 -0
- package/dist/utils/envConfig.js.map +3 -3
- package/dist/utils/execFileNoThrow.js +2 -1
- package/dist/utils/execFileNoThrow.js.map +2 -2
- package/dist/utils/gpt5.js +146 -0
- package/dist/utils/gpt5.js.map +7 -0
- package/dist/utils/hookManager.js +374 -140
- package/dist/utils/hookManager.js.map +2 -2
- package/dist/utils/markdown.js +47 -0
- package/dist/utils/markdown.js.map +2 -2
- package/dist/utils/marketplaceManager.js +80 -43
- package/dist/utils/marketplaceManager.js.map +2 -2
- package/dist/utils/memoizeWithTTL.js +25 -0
- package/dist/utils/memoizeWithTTL.js.map +7 -0
- package/dist/utils/messages.js +2 -2
- package/dist/utils/messages.js.map +2 -2
- package/dist/utils/model.js +34 -9
- package/dist/utils/model.js.map +2 -2
- package/dist/utils/pluginInstaller.js +68 -29
- package/dist/utils/pluginInstaller.js.map +2 -2
- package/dist/utils/pluginLoader.js +249 -57
- package/dist/utils/pluginLoader.js.map +2 -2
- package/dist/utils/repoFetcher.js +110 -0
- package/dist/utils/repoFetcher.js.map +7 -0
- package/dist/utils/safeFetch.js +45 -0
- package/dist/utils/safeFetch.js.map +7 -0
- package/dist/utils/skillLoader.js +77 -12
- package/dist/utils/skillLoader.js.map +2 -2
- package/dist/utils/streamingState.js +52 -0
- package/dist/utils/streamingState.js.map +7 -0
- package/dist/utils/stringSubstitution.js +4 -5
- package/dist/utils/stringSubstitution.js.map +2 -2
- package/dist/utils/style.js +6 -3
- package/dist/utils/style.js.map +2 -2
- package/dist/utils/teamConfig.js +162 -16
- package/dist/utils/teamConfig.js.map +2 -2
- package/dist/utils/terminal.js +1 -1
- package/dist/utils/terminal.js.map +2 -2
- package/dist/utils/toolRiskClassification.js +0 -6
- package/dist/utils/toolRiskClassification.js.map +2 -2
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/package.json +7 -6
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/commands/export.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * Export Command\n *\n * Export session data, configuration, or conversation history.\n */\n\nimport React, { useState } from 'react'\nimport { Box, Text, useInput } from 'ink'\nimport { writeFile } from 'fs/promises'\nimport { join } from 'path'\nimport type { Command } from '@commands'\nimport { getMessagesGetter } from '@messages'\nimport { getCwd } from '@utils/state'\nimport { loadGlobalConfig, loadProjectConfig } from '../core/config'\nimport { SEMANTIC_COLORS } from '@constants/colors'\n\ntype ExportType = 'conversation' | 'config' | 'summary'\n\ninterface ExportOption {\n type: ExportType\n label: string\n description: string\n}\n\nconst EXPORT_OPTIONS: ExportOption[] = [\n {\n type: 'conversation',\n label: 'Conversation',\n description: 'Export full conversation history as JSON',\n },\n {\n type: 'config',\n label: 'Configuration',\n description: 'Export current configuration settings',\n },\n {\n type: 'summary',\n label: 'Summary',\n description: 'Export a markdown summary of the session',\n },\n]\n\ninterface ExportMenuProps {\n onDone: (result?: string) => void\n}\n\nconst ExportMenu = ({ onDone }: ExportMenuProps) => {\n const [selectedIndex, setSelectedIndex] = useState(0)\n const [exporting, setExporting] = useState(false)\n const [result, setResult] = useState<{\n success: boolean\n message: string\n } | null>(null)\n\n useInput(async (input, key) => {\n if (exporting) return\n\n if (key.upArrow) {\n setSelectedIndex(Math.max(0, selectedIndex - 1))\n } else if (key.downArrow) {\n setSelectedIndex(Math.min(EXPORT_OPTIONS.length - 1, selectedIndex + 1))\n } else if (key.return) {\n await handleExport(EXPORT_OPTIONS[selectedIndex]!.type)\n } else if (input === 'q' || key.escape) {\n onDone()\n }\n })\n\n const handleExport = async (type: ExportType) => {\n setExporting(true)\n\n try {\n const cwd = getCwd()\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-')\n let filename: string\n let content: string\n\n switch (type) {\n case 'conversation': {\n const messages = getMessagesGetter()()\n filename = `minto-conversation-${timestamp}.json`\n content = JSON.stringify(messages, null, 2)\n break\n }\n case 'config': {\n const [globalConfig, projectConfig] = await Promise.all([\n Promise.resolve(loadGlobalConfig()),\n Promise.resolve(loadProjectConfig(cwd)),\n ])\n filename = `minto-config-${timestamp}.json`\n content = JSON.stringify(\n {\n global: globalConfig,\n project: projectConfig,\n },\n null,\n 2,\n )\n break\n }\n case 'summary': {\n const messages = getMessagesGetter()()\n filename = `minto-summary-${timestamp}.md`\n content = generateSummary(messages)\n break\n }\n }\n\n const filepath = join(cwd, filename)\n await writeFile(filepath, content, 'utf-8')\n\n setResult({\n success: true,\n message: `Exported to ${filename}`,\n })\n\n // Auto-dismiss after 2 seconds\n setTimeout(() => onDone(`Exported to ${filepath}`), 2000)\n } catch (error) {\n setResult({\n success: false,\n message: `Export failed: ${error instanceof Error ? error.message : String(error)}`,\n })\n } finally {\n setExporting(false)\n }\n }\n\n return (\n <Box flexDirection=\"column\" marginY={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n Export Data\n </Text>\n </Box>\n\n {!result ? (\n <>\n <Box flexDirection=\"column\" marginBottom={1}>\n {EXPORT_OPTIONS.map((option, index) => (\n <Box key={option.type} paddingLeft={1}>\n <Text color={index === selectedIndex ? 'cyan' : undefined}>\n {index === selectedIndex ? '\u25B6 ' : ' '}\n <Text bold>{option.label}</Text>\n <Text color={SEMANTIC_COLORS.dim}>\n {' '}\n - {option.description}\n </Text>\n </Text>\n </Box>\n ))}\n </Box>\n\n <Box marginTop={1}>\n <Text color={SEMANTIC_COLORS.dim}>\n \u2191/\u2193: Navigate | Enter: Export | q/Esc: Cancel\n </Text>\n </Box>\n </>\n ) : (\n <Box>\n {result.success ? (\n <Text color=\"green\">\u2713 {result.message}</Text>\n ) : (\n <Text color=\"red\">\u2717 {result.message}</Text>\n )}\n </Box>\n )}\n\n {exporting && (\n <Box>\n <Text color=\"yellow\">Exporting...</Text>\n </Box>\n )}\n </Box>\n )\n}\n\n/**\n * Generate a markdown summary of the conversation\n */\nfunction generateSummary(messages: unknown[]): string {\n const lines: string[] = [\n '# Minto Session Summary',\n '',\n `Generated: ${new Date().toISOString()}`,\n '',\n '## Conversation Overview',\n '',\n `Total messages: ${messages.length}`,\n '',\n '## Message Summary',\n '',\n ]\n\n for (const msg of messages) {\n const m = msg as { role?: string; content?: unknown }\n if (!m.role) continue\n\n const role = m.role === 'user' ? '\uD83D\uDC64 User' : '\uD83E\uDD16 Assistant'\n\n if (typeof m.content === 'string') {\n const preview = m.content.slice(0, 200).replace(/\\n/g, ' ')\n lines.push(`### ${role}`)\n lines.push('')\n lines.push(`> ${preview}${m.content.length > 200 ? '...' : ''}`)\n lines.push('')\n } else if (Array.isArray(m.content)) {\n lines.push(`### ${role}`)\n lines.push('')\n for (const block of m.content) {\n if (block.type === 'text') {\n const preview = String(block.text || '')\n .slice(0, 200)\n .replace(/\\n/g, ' ')\n lines.push(\n `> ${preview}${String(block.text || '').length > 200 ? '...' : ''}`,\n )\n } else if (block.type === 'tool_use') {\n lines.push(`- Tool: \\`${block.name}\\``)\n } else if (block.type === 'tool_result') {\n lines.push(`- Tool result received`)\n }\n }\n lines.push('')\n }\n }\n\n return lines.join('\\n')\n}\n\nconst command: Command = {\n name: 'export',\n description: 'Export session data, configuration, or conversation history',\n isEnabled: true,\n isHidden: false,\n type: 'local-jsx',\n\n userFacingName() {\n return this.name\n },\n\n async call(onDone) {\n return <ExportMenu onDone={onDone} />\n },\n}\n\nexport default command\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/**\n * Export Command\n *\n * Export configuration, team templates, or conversation data.\n * Uses TabbedListView with flat tab-based selection for consistent UX.\n *\n * Supports three scopes:\n * - user: ~/.minto/ config only\n * - project: ./.minto/ config only\n * - all: both user and project config combined\n */\n\nimport React, { useState, useCallback, useMemo } from 'react'\nimport { writeFile, readFile } from 'fs/promises'\nimport { existsSync, readdirSync } from 'fs'\nimport { join } from 'path'\nimport { homedir } from 'os'\nimport type { Command } from '@commands'\nimport { getMessagesGetter } from '@messages'\nimport { getCwd } from '@utils/state'\nimport { getGlobalConfig, getCurrentProjectConfig } from '@utils/config'\nimport { t } from '@i18n'\nimport { listMarketplaces } from '@utils/marketplaceManager'\nimport { loadAllPlugins } from '@utils/pluginLoader'\nimport { loadAllSkills } from '@utils/skillLoader'\nimport { loadCustomCommands } from '@services/customCommands'\nimport { TabbedListView } from '@components/TabbedListView/TabbedListView'\nimport type {\n ListItem,\n TabDefinition,\n StatusOverlay,\n} from '@components/TabbedListView/types'\nimport type {\n TeamConfig,\n TeamConfigScope,\n TeamAgentConfig,\n TeamHooksConfig,\n TeamSkillConfig,\n TeamCommandConfig,\n} from '@utils/teamConfig'\n\n// ============================================================================\n// Types\n// ============================================================================\n\ntype ExportCategory = 'runtime' | 'team' | 'conversation' | 'summary'\ntype SensitiveHandling = 'include' | 'placeholder'\n\ninterface ExportItemData {\n category: ExportCategory\n scope: TeamConfigScope\n sensitive: SensitiveHandling\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Generate a markdown summary of the conversation\n */\nfunction generateSummary(messages: unknown[]): string {\n const lines: string[] = [\n '# Minto Session Summary',\n '',\n `Generated: ${new Date().toISOString()}`,\n '',\n '## Conversation Overview',\n '',\n `Total messages: ${messages.length}`,\n '',\n '## Message Summary',\n '',\n ]\n\n for (const msg of messages) {\n const m = msg as { role?: string; content?: unknown }\n if (!m.role) continue\n\n const role = m.role === 'user' ? '\uD83D\uDC64 User' : '\uD83E\uDD16 Assistant'\n\n if (typeof m.content === 'string') {\n const preview = m.content.slice(0, 200).replace(/\\n/g, ' ')\n lines.push(`### ${role}`)\n lines.push('')\n lines.push(`> ${preview}${m.content.length > 200 ? '...' : ''}`)\n lines.push('')\n } else if (Array.isArray(m.content)) {\n lines.push(`### ${role}`)\n lines.push('')\n for (const block of m.content) {\n if (block.type === 'text') {\n const preview = String(block.text || '')\n .slice(0, 200)\n .replace(/\\n/g, ' ')\n lines.push(\n `> ${preview}${String(block.text || '').length > 200 ? '...' : ''}`,\n )\n } else if (block.type === 'tool_use') {\n lines.push(`- Tool: \\`${block.name}\\``)\n } else if (block.type === 'tool_result') {\n lines.push(`- Tool result received`)\n }\n }\n lines.push('')\n }\n }\n\n return lines.join('\\n')\n}\n\n/**\n * Parse a hooks.json file into TeamHooksConfig\n */\nfunction parseHooksFile(content: string): TeamHooksConfig | null {\n try {\n const parsed = JSON.parse(content)\n\n if (!parsed.hooks) {\n return null\n }\n\n const result: TeamHooksConfig = {}\n\n if (parsed.hooks.SessionStart) {\n result.sessionStart = parsed.hooks.SessionStart.flatMap(\n (m: { hooks?: unknown[] }) => m.hooks || [],\n )\n }\n if (parsed.hooks.SessionEnd) {\n result.sessionEnd = parsed.hooks.SessionEnd.flatMap(\n (m: { hooks?: unknown[] }) => m.hooks || [],\n )\n }\n if (parsed.hooks.UserPromptSubmit) {\n result.userPromptSubmit = parsed.hooks.UserPromptSubmit.flatMap(\n (m: { hooks?: unknown[] }) => m.hooks || [],\n )\n }\n if (parsed.hooks.PreToolUse) {\n result.preToolUse = parsed.hooks.PreToolUse\n }\n if (parsed.hooks.PostToolUse) {\n result.postToolUse = parsed.hooks.PostToolUse\n }\n\n return result\n } catch {\n return null\n }\n}\n\n/**\n * Load hooks configuration by scope\n */\nasync function loadHooksConfigByScope(scope: TeamConfigScope): Promise<{\n userHooks: TeamHooksConfig | null\n projectHooks: TeamHooksConfig | null\n}> {\n let userHooks: TeamHooksConfig | null = null\n let projectHooks: TeamHooksConfig | null = null\n\n if (scope === 'user' || scope === 'all') {\n const mintoPath = join(homedir(), '.minto', 'hooks.json')\n const claudePath = join(homedir(), '.claude', 'hooks.json')\n const hooksPath = existsSync(mintoPath)\n ? mintoPath\n : existsSync(claudePath)\n ? claudePath\n : null\n\n if (hooksPath) {\n try {\n const content = await readFile(hooksPath, 'utf-8')\n userHooks = parseHooksFile(content)\n } catch {\n // ignore\n }\n }\n }\n\n if (scope === 'project' || scope === 'all') {\n const cwd = getCwd()\n const mintoPath = join(cwd, '.minto', 'hooks.json')\n const claudePath = join(cwd, '.claude', 'hooks.json')\n const hooksPath = existsSync(mintoPath)\n ? mintoPath\n : existsSync(claudePath)\n ? claudePath\n : null\n\n if (hooksPath) {\n try {\n const content = await readFile(hooksPath, 'utf-8')\n projectHooks = parseHooksFile(content)\n } catch {\n // ignore\n }\n }\n }\n\n return { userHooks, projectHooks }\n}\n\n/**\n * Parse an agent markdown file into TeamAgentConfig\n */\nfunction parseAgentFile(content: string): TeamAgentConfig | null {\n const frontmatterMatch = content.match(/^---\\n([\\s\\S]*?)\\n---\\n([\\s\\S]*)$/)\n\n if (!frontmatterMatch) return null\n\n const frontmatter = frontmatterMatch[1]\n const body = frontmatterMatch[2].trim()\n\n const nameMatch = frontmatter.match(/^name:\\s*(.+)$/m)\n const descMatch = frontmatter.match(/^description:\\s*\"?([^\"\\n]+)\"?$/m)\n const toolsMatch = frontmatter.match(/^tools:\\s*(.+)$/m)\n const modelMatch = frontmatter.match(/^model_name:\\s*(.+)$/m)\n const colorMatch = frontmatter.match(/^color:\\s*\"?([^\"\\n]+)\"?$/m)\n\n if (!nameMatch || !descMatch) return null\n\n let tools: string[] | '*' = '*'\n if (toolsMatch) {\n const toolsValue = toolsMatch[1].trim()\n if (toolsValue === '*') {\n tools = '*'\n } else {\n try {\n tools = JSON.parse(toolsValue)\n } catch {\n tools = '*'\n }\n }\n }\n\n return {\n name: nameMatch[1].trim(),\n description: descMatch[1].trim(),\n tools,\n systemPrompt: body,\n model: modelMatch ? modelMatch[1].trim() : undefined,\n color: colorMatch ? colorMatch[1].trim() : undefined,\n }\n}\n\n/**\n * Scan a directory for agent .md files and parse them\n */\nasync function scanAgentsDir(\n agentsDir: string,\n): Promise<Map<string, TeamAgentConfig>> {\n const agentMap = new Map<string, TeamAgentConfig>()\n\n if (!existsSync(agentsDir)) return agentMap\n\n try {\n const files = readdirSync(agentsDir)\n\n for (const file of files) {\n if (!file.endsWith('.md')) continue\n\n const filePath = join(agentsDir, file)\n const content = await readFile(filePath, 'utf-8')\n const agent = parseAgentFile(content)\n if (agent) {\n agentMap.set(agent.name, agent)\n }\n }\n } catch {\n // Ignore errors\n }\n\n return agentMap\n}\n\n/**\n * Load agents by scope\n * .minto agents take precedence over .claude agents with the same name\n */\nasync function loadAgentsConfigByScope(scope: TeamConfigScope): Promise<{\n userAgents: TeamAgentConfig[]\n projectAgents: TeamAgentConfig[]\n}> {\n const userAgentMap = new Map<string, TeamAgentConfig>()\n const projectAgentMap = new Map<string, TeamAgentConfig>()\n\n if (scope === 'user' || scope === 'all') {\n // .claude first, then .minto overrides\n const claudeAgents = await scanAgentsDir(\n join(homedir(), '.claude', 'agents'),\n )\n const mintoAgents = await scanAgentsDir(join(homedir(), '.minto', 'agents'))\n\n for (const [name, agent] of claudeAgents) {\n userAgentMap.set(name, agent)\n }\n for (const [name, agent] of mintoAgents) {\n userAgentMap.set(name, agent)\n }\n }\n\n if (scope === 'project' || scope === 'all') {\n const cwd = getCwd()\n const claudeAgents = await scanAgentsDir(join(cwd, '.claude', 'agents'))\n const mintoAgents = await scanAgentsDir(join(cwd, '.minto', 'agents'))\n\n for (const [name, agent] of claudeAgents) {\n projectAgentMap.set(name, agent)\n }\n for (const [name, agent] of mintoAgents) {\n projectAgentMap.set(name, agent)\n }\n }\n\n return {\n userAgents: Array.from(userAgentMap.values()),\n projectAgents: Array.from(projectAgentMap.values()),\n }\n}\n\n/**\n * Determine plugin scope from its location path\n */\nfunction getPluginScope(location: string): 'user' | 'project' {\n const cwd = getCwd()\n if (\n location.startsWith(join(cwd, '.minto')) ||\n location.startsWith(join(cwd, '.claude'))\n ) {\n return 'project'\n }\n return 'user'\n}\n\n/**\n * Get installed plugin source strings by scope using loadAllPlugins()\n */\nasync function getInstalledPluginSourcesByScope(\n scope: TeamConfigScope,\n): Promise<{ userPlugins: string[]; projectPlugins: string[] }> {\n const plugins = loadAllPlugins()\n const userPlugins: string[] = []\n const projectPlugins: string[] = []\n\n for (const plugin of plugins) {\n const pluginScope = getPluginScope(plugin.location)\n\n // Skip plugins not in the requested scope\n if (scope === 'user' && pluginScope !== 'user') continue\n if (scope === 'project' && pluginScope !== 'project') continue\n\n // Build plugin source string from metadata\n const metaPath = join(plugin.location, '.marketplace-meta.json')\n let pluginName: string\n if (existsSync(metaPath)) {\n try {\n const content = await readFile(metaPath, 'utf-8')\n const meta = JSON.parse(content)\n pluginName =\n meta.plugin && meta.marketplace\n ? `${meta.plugin}@${meta.marketplace}`\n : meta.plugin || plugin.name\n } catch {\n pluginName = plugin.name\n }\n } else {\n pluginName = plugin.name\n }\n\n if (pluginScope === 'user') {\n userPlugins.push(pluginName)\n } else {\n projectPlugins.push(pluginName)\n }\n }\n\n return { userPlugins, projectPlugins }\n}\n\n/**\n * Load standalone skills by scope\n */\nfunction loadStandaloneSkillsByScope(scope: TeamConfigScope): {\n userSkills: TeamSkillConfig[]\n projectSkills: TeamSkillConfig[]\n} {\n const allSkills = loadAllSkills()\n const userSkills: TeamSkillConfig[] = []\n const projectSkills: TeamSkillConfig[] = []\n\n for (const skill of allSkills) {\n // Only export standalone skills (not plugin-provided)\n if (skill.pluginName !== 'standalone') continue\n\n const teamSkill: TeamSkillConfig = {\n name: skill.name,\n description: skill.config.description,\n content: skill.config.content || '',\n argumentHint: skill.config.argumentHint,\n disableModelInvocation: skill.config.disableModelInvocation,\n userInvocable: skill.config.userInvocable,\n allowedTools: skill.config.allowedTools,\n model: skill.config.model,\n context: skill.config.context,\n agent: skill.config.agent,\n }\n\n if (skill.source === 'user' && (scope === 'user' || scope === 'all')) {\n userSkills.push(teamSkill)\n } else if (\n skill.source === 'project' &&\n (scope === 'project' || scope === 'all')\n ) {\n projectSkills.push(teamSkill)\n }\n }\n\n return { userSkills, projectSkills }\n}\n\n/**\n * Load standalone commands by scope\n */\nasync function loadStandaloneCommandsByScope(scope: TeamConfigScope): Promise<{\n userCommands: TeamCommandConfig[]\n projectCommands: TeamCommandConfig[]\n}> {\n const allCommands = await loadCustomCommands()\n const userCommands: TeamCommandConfig[] = []\n const projectCommands: TeamCommandConfig[] = []\n\n for (const cmd of allCommands) {\n // Skip plugin commands - they're installed via plugin install\n if (cmd.name.startsWith('plugin:')) continue\n\n const teamCmd: TeamCommandConfig = {\n name: cmd.name,\n description: cmd.description,\n content: '', // Will be populated from getPromptForCommand\n aliases: cmd.aliases,\n enabled: cmd.isEnabled,\n hidden: cmd.isHidden,\n progressMessage: cmd.progressMessage,\n argNames: cmd.argNames,\n }\n\n // Get the raw content by calling getPromptForCommand with empty args\n try {\n const messages = await cmd.getPromptForCommand('')\n if (messages.length > 0) {\n const firstMsg = messages[0]\n if (typeof firstMsg.content === 'string') {\n teamCmd.content = firstMsg.content\n }\n }\n } catch {\n // If content extraction fails, skip this command\n continue\n }\n\n if (cmd.scope === 'user' && (scope === 'user' || scope === 'all')) {\n userCommands.push(teamCmd)\n } else if (\n cmd.scope === 'project' &&\n (scope === 'project' || scope === 'all')\n ) {\n projectCommands.push(teamCmd)\n }\n }\n\n return { userCommands, projectCommands }\n}\n\n/**\n * Get marketplace URLs from registry\n */\nfunction getMarketplaceUrls(): string[] {\n const marketplaces = listMarketplaces()\n const urls: string[] = []\n\n for (const mp of marketplaces) {\n if (mp.source.type === 'github') {\n urls.push(`https://github.com/${mp.source.repo}.git`)\n } else if (mp.source.type === 'url') {\n urls.push(mp.source.url)\n } else if (mp.source.type === 'local') {\n urls.push(mp.source.path)\n }\n }\n\n return urls\n}\n\n/**\n * Build MCP server config for export, with optional placeholder handling\n */\nconst PROXY_ENV_KEYS = new Set([\n 'no_proxy',\n 'NO_PROXY',\n 'http_proxy',\n 'HTTP_PROXY',\n 'https_proxy',\n 'HTTPS_PROXY',\n 'ALL_PROXY',\n 'all_proxy',\n])\n\nfunction buildMcpServersConfig(\n mcpServers: Record<string, any>,\n usePlaceholders: boolean,\n): Record<string, any> {\n const result: Record<string, any> = {}\n\n for (const [name, server] of Object.entries(mcpServers)) {\n if (server.type === 'sse') {\n result[name] = {\n type: 'sse',\n url: server.url,\n enabled: server.enabled,\n }\n } else {\n const env = server.env\n ? usePlaceholders\n ? Object.fromEntries(\n Object.entries(server.env).map(([key, value]) => {\n const isProxyKey = PROXY_ENV_KEYS.has(key)\n const isSecret =\n !isProxyKey &&\n (key.toLowerCase().includes('key') ||\n key.toLowerCase().includes('secret') ||\n key.toLowerCase().includes('token') ||\n key.toLowerCase().includes('password'))\n return [key, isSecret ? `\\${${key}}` : value]\n }),\n )\n : server.env\n : undefined\n result[name] = {\n type: 'stdio',\n command: server.command,\n args: server.args,\n env,\n enabled: server.enabled,\n }\n }\n }\n\n return result\n}\n\n/**\n * Build team configuration for export\n */\nasync function buildTeamConfig(\n scope: TeamConfigScope,\n usePlaceholders: boolean,\n): Promise<TeamConfig> {\n const cwd = getCwd()\n const globalConfig = getGlobalConfig()\n const projectConfig = getCurrentProjectConfig()\n\n const scopeLabel =\n scope === 'user'\n ? 'User Configuration'\n : scope === 'project'\n ? `Project: ${cwd.split('/').pop()}`\n : `All: ${cwd.split('/').pop()}`\n\n const config: TeamConfig = {\n version: '1.0',\n name: scopeLabel,\n description: `Exported from Minto on ${new Date().toISOString()}`,\n scope,\n }\n\n // Models configuration \u2014 user-level only (not project)\n if (scope !== 'project') {\n if (globalConfig.modelProfiles && globalConfig.modelProfiles.length > 0) {\n config.models = {\n profiles: globalConfig.modelProfiles.map(profile => ({\n name: profile.name,\n provider: profile.provider,\n modelName: profile.modelName,\n baseURL: profile.baseURL,\n apiKey: usePlaceholders\n ? `\\${${profile.provider.toUpperCase()}_API_KEY}`\n : profile.apiKey,\n maxTokens: profile.maxTokens,\n contextLength: profile.contextLength,\n reasoningEffort: profile.reasoningEffort,\n isActive: profile.isActive,\n })),\n pointers: globalConfig.modelPointers,\n defaultModel: globalConfig.defaultModelName,\n }\n }\n }\n\n // MCP Servers configuration \u2014 scope-aware\n if (scope === 'user') {\n if (\n globalConfig.mcpServers &&\n Object.keys(globalConfig.mcpServers).length > 0\n ) {\n config.mcpServers = buildMcpServersConfig(\n globalConfig.mcpServers,\n usePlaceholders,\n )\n }\n } else if (scope === 'project') {\n if (\n projectConfig.mcpServers &&\n Object.keys(projectConfig.mcpServers).length > 0\n ) {\n config.mcpServers = buildMcpServersConfig(\n projectConfig.mcpServers,\n usePlaceholders,\n )\n }\n } else {\n // all: merge both\n const merged = {\n ...globalConfig.mcpServers,\n ...projectConfig.mcpServers,\n }\n if (Object.keys(merged).length > 0) {\n config.mcpServers = buildMcpServersConfig(merged, usePlaceholders)\n }\n }\n\n // Plugins configuration \u2014 scope-aware\n const marketplaceUrls = getMarketplaceUrls()\n const { userPlugins, projectPlugins } =\n await getInstalledPluginSourcesByScope(scope)\n\n if (\n marketplaceUrls.length > 0 ||\n userPlugins.length > 0 ||\n projectPlugins.length > 0\n ) {\n config.plugins = {}\n if (marketplaceUrls.length > 0) {\n config.plugins.marketplaces = marketplaceUrls\n }\n if (userPlugins.length > 0) {\n config.plugins.userInstall = userPlugins\n }\n if (projectPlugins.length > 0) {\n config.plugins.projectInstall = projectPlugins\n }\n }\n\n // Agents configuration \u2014 scope-aware\n const { userAgents, projectAgents } = await loadAgentsConfigByScope(scope)\n if (userAgents.length > 0 || projectAgents.length > 0) {\n config.agents = {}\n if (userAgents.length > 0) {\n config.agents.userAgents = userAgents\n }\n if (projectAgents.length > 0) {\n config.agents.projectAgents = projectAgents\n }\n }\n\n // Skills configuration \u2014 scope-aware\n const { userSkills, projectSkills } = loadStandaloneSkillsByScope(scope)\n if (userSkills.length > 0 || projectSkills.length > 0) {\n config.skills = {}\n if (userSkills.length > 0) {\n config.skills.userSkills = userSkills\n }\n if (projectSkills.length > 0) {\n config.skills.projectSkills = projectSkills\n }\n }\n\n // Commands configuration \u2014 scope-aware\n const { userCommands, projectCommands } =\n await loadStandaloneCommandsByScope(scope)\n if (userCommands.length > 0 || projectCommands.length > 0) {\n config.commands = {}\n if (userCommands.length > 0) {\n config.commands.userCommands = userCommands\n }\n if (projectCommands.length > 0) {\n config.commands.projectCommands = projectCommands\n }\n }\n\n // Hooks configuration \u2014 scope-aware\n const { userHooks, projectHooks } = await loadHooksConfigByScope(scope)\n if (userHooks) {\n config.hooks = userHooks\n }\n if (projectHooks) {\n config.projectHooks = projectHooks\n }\n\n // Settings \u2014 user-level only (not project)\n if (scope !== 'project') {\n config.settings = {\n theme: globalConfig.theme as 'dark' | 'light',\n verbose: globalConfig.verbose,\n compressionMode: globalConfig.compressionMode,\n thinking: globalConfig.thinking,\n proxy: globalConfig.proxy,\n stream: globalConfig.stream,\n language: globalConfig.language,\n safetyMode: globalConfig.safetyMode,\n skipOnboarding: globalConfig.hasCompletedOnboarding,\n }\n }\n\n // Post-install instructions (only when using placeholders)\n if (usePlaceholders) {\n config.postInstallInstructions = `\n1. Set environment variables for API keys (e.g., ANTHROPIC_API_KEY, OPENAI_API_KEY)\n2. Run 'minto' to start using your configured setup\n`.trim()\n }\n\n return config\n}\n\n/**\n * Export runtime configuration\n */\nasync function exportRuntimeConfig(\n scope: TeamConfigScope,\n): Promise<{ content: string; filename: string }> {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-')\n\n if (scope === 'user') {\n const globalConfig = getGlobalConfig()\n return {\n content: JSON.stringify({ global: globalConfig }, null, 2),\n filename: `minto-config-user-${timestamp}.json`,\n }\n } else if (scope === 'project') {\n const projectConfig = getCurrentProjectConfig()\n return {\n content: JSON.stringify({ project: projectConfig }, null, 2),\n filename: `minto-config-project-${timestamp}.json`,\n }\n } else {\n const globalConfig = getGlobalConfig()\n const projectConfig = getCurrentProjectConfig()\n return {\n content: JSON.stringify(\n { global: globalConfig, project: projectConfig },\n null,\n 2,\n ),\n filename: `minto-config-all-${timestamp}.json`,\n }\n }\n}\n\n/**\n * Export team template\n */\nasync function exportTeamTemplate(\n scope: TeamConfigScope,\n usePlaceholders: boolean,\n): Promise<{ content: string; filename: string }> {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-')\n const teamConfig = await buildTeamConfig(scope, usePlaceholders)\n\n return {\n content: JSON.stringify(teamConfig, null, 2),\n filename: `minto-team-${scope}-${timestamp}.json`,\n }\n}\n\n// ============================================================================\n// Tab & Item Definitions\n// ============================================================================\n\nconst EXPORT_TABS: TabDefinition[] = [\n { id: 'team', label: t('commands.export.typeTeam') },\n { id: 'runtime', label: t('commands.export.typeRuntime') },\n { id: 'conversation', label: t('commands.export.typeConversation') },\n { id: 'summary', label: t('commands.export.typeSummary') },\n]\n\nfunction getItemsForTab(tabId: string): ListItem[] {\n switch (tabId) {\n case 'team':\n return [\n {\n id: 'team-user-include',\n label: t('commands.export.itemTeamUserInclude'),\n description: t('commands.export.scopeUserDesc'),\n data: {\n category: 'team',\n scope: 'user',\n sensitive: 'include',\n } as ExportItemData,\n },\n {\n id: 'team-user-placeholder',\n label: t('commands.export.itemTeamUserPlaceholder'),\n description: t('commands.export.scopeUserDesc'),\n data: {\n category: 'team',\n scope: 'user',\n sensitive: 'placeholder',\n } as ExportItemData,\n },\n {\n id: 'team-project-include',\n label: t('commands.export.itemTeamProjectInclude'),\n description: t('commands.export.scopeProjectDesc'),\n data: {\n category: 'team',\n scope: 'project',\n sensitive: 'include',\n } as ExportItemData,\n },\n {\n id: 'team-project-placeholder',\n label: t('commands.export.itemTeamProjectPlaceholder'),\n description: t('commands.export.scopeProjectDesc'),\n data: {\n category: 'team',\n scope: 'project',\n sensitive: 'placeholder',\n } as ExportItemData,\n },\n {\n id: 'team-all-include',\n label: t('commands.export.itemTeamAllInclude'),\n description: t('commands.export.scopeAllDesc'),\n data: {\n category: 'team',\n scope: 'all',\n sensitive: 'include',\n } as ExportItemData,\n },\n {\n id: 'team-all-placeholder',\n label: t('commands.export.itemTeamAllPlaceholder'),\n description: t('commands.export.scopeAllDesc'),\n data: {\n category: 'team',\n scope: 'all',\n sensitive: 'placeholder',\n } as ExportItemData,\n },\n ]\n case 'runtime':\n return [\n {\n id: 'runtime-user',\n label: t('commands.export.itemRuntimeUser'),\n description: t('commands.export.scopeUserDesc'),\n data: {\n category: 'runtime',\n scope: 'user',\n sensitive: 'include',\n } as ExportItemData,\n },\n {\n id: 'runtime-project',\n label: t('commands.export.itemRuntimeProject'),\n description: t('commands.export.scopeProjectDesc'),\n data: {\n category: 'runtime',\n scope: 'project',\n sensitive: 'include',\n } as ExportItemData,\n },\n {\n id: 'runtime-all',\n label: t('commands.export.itemRuntimeAll'),\n description: t('commands.export.scopeAllDesc'),\n data: {\n category: 'runtime',\n scope: 'all',\n sensitive: 'include',\n } as ExportItemData,\n },\n ]\n case 'conversation':\n return [\n {\n id: 'conversation',\n label: t('commands.export.itemConversation'),\n description: t('commands.export.typeConversationDesc'),\n data: {\n category: 'conversation',\n scope: 'user',\n sensitive: 'include',\n } as ExportItemData,\n },\n ]\n case 'summary':\n return [\n {\n id: 'summary',\n label: t('commands.export.itemSummary'),\n description: t('commands.export.typeSummaryDesc'),\n data: {\n category: 'summary',\n scope: 'user',\n sensitive: 'include',\n } as ExportItemData,\n },\n ]\n default:\n return []\n }\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\ninterface ExportMenuProps {\n onDone: (result?: string) => void\n}\n\nconst ExportMenu = ({ onDone }: ExportMenuProps) => {\n const [activeTab, setActiveTab] = useState('team')\n const [statusOverlay, setStatusOverlay] = useState<StatusOverlay | null>(null)\n const [searchQuery, setSearchQuery] = useState('')\n\n const items = useMemo(() => getItemsForTab(activeTab), [activeTab])\n\n const handleSelect = useCallback(async (item: ListItem) => {\n const data = item.data as ExportItemData\n\n setStatusOverlay({\n type: 'loading',\n message: t('commands.export.exporting'),\n })\n\n try {\n const cwd = getCwd()\n let filename: string\n let content: string\n\n switch (data.category) {\n case 'conversation': {\n const messages = getMessagesGetter()()\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-')\n filename = `minto-conversation-${timestamp}.json`\n content = JSON.stringify(messages, null, 2)\n break\n }\n case 'summary': {\n const messages = getMessagesGetter()()\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-')\n filename = `minto-summary-${timestamp}.md`\n content = generateSummary(messages)\n break\n }\n case 'runtime': {\n const result = await exportRuntimeConfig(data.scope)\n filename = result.filename\n content = result.content\n break\n }\n case 'team': {\n const usePlaceholders = data.sensitive === 'placeholder'\n const result = await exportTeamTemplate(data.scope, usePlaceholders)\n filename = result.filename\n content = result.content\n break\n }\n }\n\n const filepath = join(cwd, filename)\n await writeFile(filepath, content, 'utf-8')\n\n setStatusOverlay({\n type: 'success',\n message: `${t('commands.export.success')} ${filename}`,\n })\n } catch (error) {\n setStatusOverlay({\n type: 'error',\n message: `${t('commands.export.failed')}: ${error instanceof Error ? error.message : String(error)}`,\n })\n }\n }, [])\n\n const handleClose = useCallback(() => {\n onDone()\n }, [onDone])\n\n return (\n <TabbedListView\n title={t('commands.export.title')}\n tabs={EXPORT_TABS}\n activeTab={activeTab}\n onTabChange={tab => {\n setActiveTab(tab)\n setSearchQuery('')\n }}\n items={items}\n searchEnabled={false}\n searchQuery={searchQuery}\n onSearchChange={setSearchQuery}\n onSelect={handleSelect}\n onClose={handleClose}\n footerHint={t('commands.export.footerHint')}\n statusOverlay={statusOverlay}\n statusDismissHint=\"Esc Close\"\n />\n )\n}\n\n// ============================================================================\n// Command Export\n// ============================================================================\n\nconst command: Command = {\n name: 'export',\n description: t('commands.export.description'),\n isEnabled: true,\n isHidden: false,\n hidePromptInput: true,\n type: 'local-jsx',\n\n userFacingName() {\n return this.name\n },\n\n async call(onDone) {\n return <ExportMenu onDone={onDone} />\n },\n}\n\nexport default command\n"],
|
|
5
|
+
"mappings": "AAYA,OAAO,SAAS,UAAU,aAAa,eAAe;AACtD,SAAS,WAAW,gBAAgB;AACpC,SAAS,YAAY,mBAAmB;AACxC,SAAS,YAAY;AACrB,SAAS,eAAe;AAExB,SAAS,yBAAyB;AAClC,SAAS,cAAc;AACvB,SAAS,iBAAiB,+BAA+B;AACzD,SAAS,SAAS;AAClB,SAAS,wBAAwB;AACjC,SAAS,sBAAsB;AAC/B,SAAS,qBAAqB;AAC9B,SAAS,0BAA0B;AACnC,SAAS,sBAAsB;AAmC/B,SAAS,gBAAgB,UAA6B;AACpD,QAAM,QAAkB;AAAA,IACtB;AAAA,IACA;AAAA,IACA,eAAc,oBAAI,KAAK,GAAE,YAAY,CAAC;AAAA,IACtC;AAAA,IACA;AAAA,IACA;AAAA,IACA,mBAAmB,SAAS,MAAM;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,aAAW,OAAO,UAAU;AAC1B,UAAM,IAAI;AACV,QAAI,CAAC,EAAE,KAAM;AAEb,UAAM,OAAO,EAAE,SAAS,SAAS,mBAAY;AAE7C,QAAI,OAAO,EAAE,YAAY,UAAU;AACjC,YAAM,UAAU,EAAE,QAAQ,MAAM,GAAG,GAAG,EAAE,QAAQ,OAAO,GAAG;AAC1D,YAAM,KAAK,OAAO,IAAI,EAAE;AACxB,YAAM,KAAK,EAAE;AACb,YAAM,KAAK,KAAK,OAAO,GAAG,EAAE,QAAQ,SAAS,MAAM,QAAQ,EAAE,EAAE;AAC/D,YAAM,KAAK,EAAE;AAAA,IACf,WAAW,MAAM,QAAQ,EAAE,OAAO,GAAG;AACnC,YAAM,KAAK,OAAO,IAAI,EAAE;AACxB,YAAM,KAAK,EAAE;AACb,iBAAW,SAAS,EAAE,SAAS;AAC7B,YAAI,MAAM,SAAS,QAAQ;AACzB,gBAAM,UAAU,OAAO,MAAM,QAAQ,EAAE,EACpC,MAAM,GAAG,GAAG,EACZ,QAAQ,OAAO,GAAG;AACrB,gBAAM;AAAA,YACJ,KAAK,OAAO,GAAG,OAAO,MAAM,QAAQ,EAAE,EAAE,SAAS,MAAM,QAAQ,EAAE;AAAA,UACnE;AAAA,QACF,WAAW,MAAM,SAAS,YAAY;AACpC,gBAAM,KAAK,aAAa,MAAM,IAAI,IAAI;AAAA,QACxC,WAAW,MAAM,SAAS,eAAe;AACvC,gBAAM,KAAK,wBAAwB;AAAA,QACrC;AAAA,MACF;AACA,YAAM,KAAK,EAAE;AAAA,IACf;AAAA,EACF;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;AAKA,SAAS,eAAe,SAAyC;AAC/D,MAAI;AACF,UAAM,SAAS,KAAK,MAAM,OAAO;AAEjC,QAAI,CAAC,OAAO,OAAO;AACjB,aAAO;AAAA,IACT;AAEA,UAAM,SAA0B,CAAC;AAEjC,QAAI,OAAO,MAAM,cAAc;AAC7B,aAAO,eAAe,OAAO,MAAM,aAAa;AAAA,QAC9C,CAAC,MAA6B,EAAE,SAAS,CAAC;AAAA,MAC5C;AAAA,IACF;AACA,QAAI,OAAO,MAAM,YAAY;AAC3B,aAAO,aAAa,OAAO,MAAM,WAAW;AAAA,QAC1C,CAAC,MAA6B,EAAE,SAAS,CAAC;AAAA,MAC5C;AAAA,IACF;AACA,QAAI,OAAO,MAAM,kBAAkB;AACjC,aAAO,mBAAmB,OAAO,MAAM,iBAAiB;AAAA,QACtD,CAAC,MAA6B,EAAE,SAAS,CAAC;AAAA,MAC5C;AAAA,IACF;AACA,QAAI,OAAO,MAAM,YAAY;AAC3B,aAAO,aAAa,OAAO,MAAM;AAAA,IACnC;AACA,QAAI,OAAO,MAAM,aAAa;AAC5B,aAAO,cAAc,OAAO,MAAM;AAAA,IACpC;AAEA,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAKA,eAAe,uBAAuB,OAGnC;AACD,MAAI,YAAoC;AACxC,MAAI,eAAuC;AAE3C,MAAI,UAAU,UAAU,UAAU,OAAO;AACvC,UAAM,YAAY,KAAK,QAAQ,GAAG,UAAU,YAAY;AACxD,UAAM,aAAa,KAAK,QAAQ,GAAG,WAAW,YAAY;AAC1D,UAAM,YAAY,WAAW,SAAS,IAClC,YACA,WAAW,UAAU,IACnB,aACA;AAEN,QAAI,WAAW;AACb,UAAI;AACF,cAAM,UAAU,MAAM,SAAS,WAAW,OAAO;AACjD,oBAAY,eAAe,OAAO;AAAA,MACpC,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAEA,MAAI,UAAU,aAAa,UAAU,OAAO;AAC1C,UAAM,MAAM,OAAO;AACnB,UAAM,YAAY,KAAK,KAAK,UAAU,YAAY;AAClD,UAAM,aAAa,KAAK,KAAK,WAAW,YAAY;AACpD,UAAM,YAAY,WAAW,SAAS,IAClC,YACA,WAAW,UAAU,IACnB,aACA;AAEN,QAAI,WAAW;AACb,UAAI;AACF,cAAM,UAAU,MAAM,SAAS,WAAW,OAAO;AACjD,uBAAe,eAAe,OAAO;AAAA,MACvC,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAEA,SAAO,EAAE,WAAW,aAAa;AACnC;AAKA,SAAS,eAAe,SAAyC;AAC/D,QAAM,mBAAmB,QAAQ,MAAM,mCAAmC;AAE1E,MAAI,CAAC,iBAAkB,QAAO;AAE9B,QAAM,cAAc,iBAAiB,CAAC;AACtC,QAAM,OAAO,iBAAiB,CAAC,EAAE,KAAK;AAEtC,QAAM,YAAY,YAAY,MAAM,iBAAiB;AACrD,QAAM,YAAY,YAAY,MAAM,iCAAiC;AACrE,QAAM,aAAa,YAAY,MAAM,kBAAkB;AACvD,QAAM,aAAa,YAAY,MAAM,uBAAuB;AAC5D,QAAM,aAAa,YAAY,MAAM,2BAA2B;AAEhE,MAAI,CAAC,aAAa,CAAC,UAAW,QAAO;AAErC,MAAI,QAAwB;AAC5B,MAAI,YAAY;AACd,UAAM,aAAa,WAAW,CAAC,EAAE,KAAK;AACtC,QAAI,eAAe,KAAK;AACtB,cAAQ;AAAA,IACV,OAAO;AACL,UAAI;AACF,gBAAQ,KAAK,MAAM,UAAU;AAAA,MAC/B,QAAQ;AACN,gBAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,MAAM,UAAU,CAAC,EAAE,KAAK;AAAA,IACxB,aAAa,UAAU,CAAC,EAAE,KAAK;AAAA,IAC/B;AAAA,IACA,cAAc;AAAA,IACd,OAAO,aAAa,WAAW,CAAC,EAAE,KAAK,IAAI;AAAA,IAC3C,OAAO,aAAa,WAAW,CAAC,EAAE,KAAK,IAAI;AAAA,EAC7C;AACF;AAKA,eAAe,cACb,WACuC;AACvC,QAAM,WAAW,oBAAI,IAA6B;AAElD,MAAI,CAAC,WAAW,SAAS,EAAG,QAAO;AAEnC,MAAI;AACF,UAAM,QAAQ,YAAY,SAAS;AAEnC,eAAW,QAAQ,OAAO;AACxB,UAAI,CAAC,KAAK,SAAS,KAAK,EAAG;AAE3B,YAAM,WAAW,KAAK,WAAW,IAAI;AACrC,YAAM,UAAU,MAAM,SAAS,UAAU,OAAO;AAChD,YAAM,QAAQ,eAAe,OAAO;AACpC,UAAI,OAAO;AACT,iBAAS,IAAI,MAAM,MAAM,KAAK;AAAA,MAChC;AAAA,IACF;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,SAAO;AACT;AAMA,eAAe,wBAAwB,OAGpC;AACD,QAAM,eAAe,oBAAI,IAA6B;AACtD,QAAM,kBAAkB,oBAAI,IAA6B;AAEzD,MAAI,UAAU,UAAU,UAAU,OAAO;AAEvC,UAAM,eAAe,MAAM;AAAA,MACzB,KAAK,QAAQ,GAAG,WAAW,QAAQ;AAAA,IACrC;AACA,UAAM,cAAc,MAAM,cAAc,KAAK,QAAQ,GAAG,UAAU,QAAQ,CAAC;AAE3E,eAAW,CAAC,MAAM,KAAK,KAAK,cAAc;AACxC,mBAAa,IAAI,MAAM,KAAK;AAAA,IAC9B;AACA,eAAW,CAAC,MAAM,KAAK,KAAK,aAAa;AACvC,mBAAa,IAAI,MAAM,KAAK;AAAA,IAC9B;AAAA,EACF;AAEA,MAAI,UAAU,aAAa,UAAU,OAAO;AAC1C,UAAM,MAAM,OAAO;AACnB,UAAM,eAAe,MAAM,cAAc,KAAK,KAAK,WAAW,QAAQ,CAAC;AACvE,UAAM,cAAc,MAAM,cAAc,KAAK,KAAK,UAAU,QAAQ,CAAC;AAErE,eAAW,CAAC,MAAM,KAAK,KAAK,cAAc;AACxC,sBAAgB,IAAI,MAAM,KAAK;AAAA,IACjC;AACA,eAAW,CAAC,MAAM,KAAK,KAAK,aAAa;AACvC,sBAAgB,IAAI,MAAM,KAAK;AAAA,IACjC;AAAA,EACF;AAEA,SAAO;AAAA,IACL,YAAY,MAAM,KAAK,aAAa,OAAO,CAAC;AAAA,IAC5C,eAAe,MAAM,KAAK,gBAAgB,OAAO,CAAC;AAAA,EACpD;AACF;AAKA,SAAS,eAAe,UAAsC;AAC5D,QAAM,MAAM,OAAO;AACnB,MACE,SAAS,WAAW,KAAK,KAAK,QAAQ,CAAC,KACvC,SAAS,WAAW,KAAK,KAAK,SAAS,CAAC,GACxC;AACA,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAKA,eAAe,iCACb,OAC8D;AAC9D,QAAM,UAAU,eAAe;AAC/B,QAAM,cAAwB,CAAC;AAC/B,QAAM,iBAA2B,CAAC;AAElC,aAAW,UAAU,SAAS;AAC5B,UAAM,cAAc,eAAe,OAAO,QAAQ;AAGlD,QAAI,UAAU,UAAU,gBAAgB,OAAQ;AAChD,QAAI,UAAU,aAAa,gBAAgB,UAAW;AAGtD,UAAM,WAAW,KAAK,OAAO,UAAU,wBAAwB;AAC/D,QAAI;AACJ,QAAI,WAAW,QAAQ,GAAG;AACxB,UAAI;AACF,cAAM,UAAU,MAAM,SAAS,UAAU,OAAO;AAChD,cAAM,OAAO,KAAK,MAAM,OAAO;AAC/B,qBACE,KAAK,UAAU,KAAK,cAChB,GAAG,KAAK,MAAM,IAAI,KAAK,WAAW,KAClC,KAAK,UAAU,OAAO;AAAA,MAC9B,QAAQ;AACN,qBAAa,OAAO;AAAA,MACtB;AAAA,IACF,OAAO;AACL,mBAAa,OAAO;AAAA,IACtB;AAEA,QAAI,gBAAgB,QAAQ;AAC1B,kBAAY,KAAK,UAAU;AAAA,IAC7B,OAAO;AACL,qBAAe,KAAK,UAAU;AAAA,IAChC;AAAA,EACF;AAEA,SAAO,EAAE,aAAa,eAAe;AACvC;AAKA,SAAS,4BAA4B,OAGnC;AACA,QAAM,YAAY,cAAc;AAChC,QAAM,aAAgC,CAAC;AACvC,QAAM,gBAAmC,CAAC;AAE1C,aAAW,SAAS,WAAW;AAE7B,QAAI,MAAM,eAAe,aAAc;AAEvC,UAAM,YAA6B;AAAA,MACjC,MAAM,MAAM;AAAA,MACZ,aAAa,MAAM,OAAO;AAAA,MAC1B,SAAS,MAAM,OAAO,WAAW;AAAA,MACjC,cAAc,MAAM,OAAO;AAAA,MAC3B,wBAAwB,MAAM,OAAO;AAAA,MACrC,eAAe,MAAM,OAAO;AAAA,MAC5B,cAAc,MAAM,OAAO;AAAA,MAC3B,OAAO,MAAM,OAAO;AAAA,MACpB,SAAS,MAAM,OAAO;AAAA,MACtB,OAAO,MAAM,OAAO;AAAA,IACtB;AAEA,QAAI,MAAM,WAAW,WAAW,UAAU,UAAU,UAAU,QAAQ;AACpE,iBAAW,KAAK,SAAS;AAAA,IAC3B,WACE,MAAM,WAAW,cAChB,UAAU,aAAa,UAAU,QAClC;AACA,oBAAc,KAAK,SAAS;AAAA,IAC9B;AAAA,EACF;AAEA,SAAO,EAAE,YAAY,cAAc;AACrC;AAKA,eAAe,8BAA8B,OAG1C;AACD,QAAM,cAAc,MAAM,mBAAmB;AAC7C,QAAM,eAAoC,CAAC;AAC3C,QAAM,kBAAuC,CAAC;AAE9C,aAAW,OAAO,aAAa;AAE7B,QAAI,IAAI,KAAK,WAAW,SAAS,EAAG;AAEpC,UAAM,UAA6B;AAAA,MACjC,MAAM,IAAI;AAAA,MACV,aAAa,IAAI;AAAA,MACjB,SAAS;AAAA;AAAA,MACT,SAAS,IAAI;AAAA,MACb,SAAS,IAAI;AAAA,MACb,QAAQ,IAAI;AAAA,MACZ,iBAAiB,IAAI;AAAA,MACrB,UAAU,IAAI;AAAA,IAChB;AAGA,QAAI;AACF,YAAM,WAAW,MAAM,IAAI,oBAAoB,EAAE;AACjD,UAAI,SAAS,SAAS,GAAG;AACvB,cAAM,WAAW,SAAS,CAAC;AAC3B,YAAI,OAAO,SAAS,YAAY,UAAU;AACxC,kBAAQ,UAAU,SAAS;AAAA,QAC7B;AAAA,MACF;AAAA,IACF,QAAQ;AAEN;AAAA,IACF;AAEA,QAAI,IAAI,UAAU,WAAW,UAAU,UAAU,UAAU,QAAQ;AACjE,mBAAa,KAAK,OAAO;AAAA,IAC3B,WACE,IAAI,UAAU,cACb,UAAU,aAAa,UAAU,QAClC;AACA,sBAAgB,KAAK,OAAO;AAAA,IAC9B;AAAA,EACF;AAEA,SAAO,EAAE,cAAc,gBAAgB;AACzC;AAKA,SAAS,qBAA+B;AACtC,QAAM,eAAe,iBAAiB;AACtC,QAAM,OAAiB,CAAC;AAExB,aAAW,MAAM,cAAc;AAC7B,QAAI,GAAG,OAAO,SAAS,UAAU;AAC/B,WAAK,KAAK,sBAAsB,GAAG,OAAO,IAAI,MAAM;AAAA,IACtD,WAAW,GAAG,OAAO,SAAS,OAAO;AACnC,WAAK,KAAK,GAAG,OAAO,GAAG;AAAA,IACzB,WAAW,GAAG,OAAO,SAAS,SAAS;AACrC,WAAK,KAAK,GAAG,OAAO,IAAI;AAAA,IAC1B;AAAA,EACF;AAEA,SAAO;AACT;AAKA,MAAM,iBAAiB,oBAAI,IAAI;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,sBACP,YACA,iBACqB;AACrB,QAAM,SAA8B,CAAC;AAErC,aAAW,CAAC,MAAM,MAAM,KAAK,OAAO,QAAQ,UAAU,GAAG;AACvD,QAAI,OAAO,SAAS,OAAO;AACzB,aAAO,IAAI,IAAI;AAAA,QACb,MAAM;AAAA,QACN,KAAK,OAAO;AAAA,QACZ,SAAS,OAAO;AAAA,MAClB;AAAA,IACF,OAAO;AACL,YAAM,MAAM,OAAO,MACf,kBACE,OAAO;AAAA,QACL,OAAO,QAAQ,OAAO,GAAG,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,gBAAM,aAAa,eAAe,IAAI,GAAG;AACzC,gBAAM,WACJ,CAAC,eACA,IAAI,YAAY,EAAE,SAAS,KAAK,KAC/B,IAAI,YAAY,EAAE,SAAS,QAAQ,KACnC,IAAI,YAAY,EAAE,SAAS,OAAO,KAClC,IAAI,YAAY,EAAE,SAAS,UAAU;AACzC,iBAAO,CAAC,KAAK,WAAW,MAAM,GAAG,MAAM,KAAK;AAAA,QAC9C,CAAC;AAAA,MACH,IACA,OAAO,MACT;AACJ,aAAO,IAAI,IAAI;AAAA,QACb,MAAM;AAAA,QACN,SAAS,OAAO;AAAA,QAChB,MAAM,OAAO;AAAA,QACb;AAAA,QACA,SAAS,OAAO;AAAA,MAClB;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAKA,eAAe,gBACb,OACA,iBACqB;AACrB,QAAM,MAAM,OAAO;AACnB,QAAM,eAAe,gBAAgB;AACrC,QAAM,gBAAgB,wBAAwB;AAE9C,QAAM,aACJ,UAAU,SACN,uBACA,UAAU,YACR,YAAY,IAAI,MAAM,GAAG,EAAE,IAAI,CAAC,KAChC,QAAQ,IAAI,MAAM,GAAG,EAAE,IAAI,CAAC;AAEpC,QAAM,SAAqB;AAAA,IACzB,SAAS;AAAA,IACT,MAAM;AAAA,IACN,aAAa,2BAA0B,oBAAI,KAAK,GAAE,YAAY,CAAC;AAAA,IAC/D;AAAA,EACF;AAGA,MAAI,UAAU,WAAW;AACvB,QAAI,aAAa,iBAAiB,aAAa,cAAc,SAAS,GAAG;AACvE,aAAO,SAAS;AAAA,QACd,UAAU,aAAa,cAAc,IAAI,cAAY;AAAA,UACnD,MAAM,QAAQ;AAAA,UACd,UAAU,QAAQ;AAAA,UAClB,WAAW,QAAQ;AAAA,UACnB,SAAS,QAAQ;AAAA,UACjB,QAAQ,kBACJ,MAAM,QAAQ,SAAS,YAAY,CAAC,cACpC,QAAQ;AAAA,UACZ,WAAW,QAAQ;AAAA,UACnB,eAAe,QAAQ;AAAA,UACvB,iBAAiB,QAAQ;AAAA,UACzB,UAAU,QAAQ;AAAA,QACpB,EAAE;AAAA,QACF,UAAU,aAAa;AAAA,QACvB,cAAc,aAAa;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAGA,MAAI,UAAU,QAAQ;AACpB,QACE,aAAa,cACb,OAAO,KAAK,aAAa,UAAU,EAAE,SAAS,GAC9C;AACA,aAAO,aAAa;AAAA,QAClB,aAAa;AAAA,QACb;AAAA,MACF;AAAA,IACF;AAAA,EACF,WAAW,UAAU,WAAW;AAC9B,QACE,cAAc,cACd,OAAO,KAAK,cAAc,UAAU,EAAE,SAAS,GAC/C;AACA,aAAO,aAAa;AAAA,QAClB,cAAc;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,EACF,OAAO;AAEL,UAAM,SAAS;AAAA,MACb,GAAG,aAAa;AAAA,MAChB,GAAG,cAAc;AAAA,IACnB;AACA,QAAI,OAAO,KAAK,MAAM,EAAE,SAAS,GAAG;AAClC,aAAO,aAAa,sBAAsB,QAAQ,eAAe;AAAA,IACnE;AAAA,EACF;AAGA,QAAM,kBAAkB,mBAAmB;AAC3C,QAAM,EAAE,aAAa,eAAe,IAClC,MAAM,iCAAiC,KAAK;AAE9C,MACE,gBAAgB,SAAS,KACzB,YAAY,SAAS,KACrB,eAAe,SAAS,GACxB;AACA,WAAO,UAAU,CAAC;AAClB,QAAI,gBAAgB,SAAS,GAAG;AAC9B,aAAO,QAAQ,eAAe;AAAA,IAChC;AACA,QAAI,YAAY,SAAS,GAAG;AAC1B,aAAO,QAAQ,cAAc;AAAA,IAC/B;AACA,QAAI,eAAe,SAAS,GAAG;AAC7B,aAAO,QAAQ,iBAAiB;AAAA,IAClC;AAAA,EACF;AAGA,QAAM,EAAE,YAAY,cAAc,IAAI,MAAM,wBAAwB,KAAK;AACzE,MAAI,WAAW,SAAS,KAAK,cAAc,SAAS,GAAG;AACrD,WAAO,SAAS,CAAC;AACjB,QAAI,WAAW,SAAS,GAAG;AACzB,aAAO,OAAO,aAAa;AAAA,IAC7B;AACA,QAAI,cAAc,SAAS,GAAG;AAC5B,aAAO,OAAO,gBAAgB;AAAA,IAChC;AAAA,EACF;AAGA,QAAM,EAAE,YAAY,cAAc,IAAI,4BAA4B,KAAK;AACvE,MAAI,WAAW,SAAS,KAAK,cAAc,SAAS,GAAG;AACrD,WAAO,SAAS,CAAC;AACjB,QAAI,WAAW,SAAS,GAAG;AACzB,aAAO,OAAO,aAAa;AAAA,IAC7B;AACA,QAAI,cAAc,SAAS,GAAG;AAC5B,aAAO,OAAO,gBAAgB;AAAA,IAChC;AAAA,EACF;AAGA,QAAM,EAAE,cAAc,gBAAgB,IACpC,MAAM,8BAA8B,KAAK;AAC3C,MAAI,aAAa,SAAS,KAAK,gBAAgB,SAAS,GAAG;AACzD,WAAO,WAAW,CAAC;AACnB,QAAI,aAAa,SAAS,GAAG;AAC3B,aAAO,SAAS,eAAe;AAAA,IACjC;AACA,QAAI,gBAAgB,SAAS,GAAG;AAC9B,aAAO,SAAS,kBAAkB;AAAA,IACpC;AAAA,EACF;AAGA,QAAM,EAAE,WAAW,aAAa,IAAI,MAAM,uBAAuB,KAAK;AACtE,MAAI,WAAW;AACb,WAAO,QAAQ;AAAA,EACjB;AACA,MAAI,cAAc;AAChB,WAAO,eAAe;AAAA,EACxB;AAGA,MAAI,UAAU,WAAW;AACvB,WAAO,WAAW;AAAA,MAChB,OAAO,aAAa;AAAA,MACpB,SAAS,aAAa;AAAA,MACtB,iBAAiB,aAAa;AAAA,MAC9B,UAAU,aAAa;AAAA,MACvB,OAAO,aAAa;AAAA,MACpB,QAAQ,aAAa;AAAA,MACrB,UAAU,aAAa;AAAA,MACvB,YAAY,aAAa;AAAA,MACzB,gBAAgB,aAAa;AAAA,IAC/B;AAAA,EACF;AAGA,MAAI,iBAAiB;AACnB,WAAO,0BAA0B;AAAA;AAAA;AAAA,EAGnC,KAAK;AAAA,EACL;AAEA,SAAO;AACT;AAKA,eAAe,oBACb,OACgD;AAChD,QAAM,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,SAAS,GAAG;AAE/D,MAAI,UAAU,QAAQ;AACpB,UAAM,eAAe,gBAAgB;AACrC,WAAO;AAAA,MACL,SAAS,KAAK,UAAU,EAAE,QAAQ,aAAa,GAAG,MAAM,CAAC;AAAA,MACzD,UAAU,qBAAqB,SAAS;AAAA,IAC1C;AAAA,EACF,WAAW,UAAU,WAAW;AAC9B,UAAM,gBAAgB,wBAAwB;AAC9C,WAAO;AAAA,MACL,SAAS,KAAK,UAAU,EAAE,SAAS,cAAc,GAAG,MAAM,CAAC;AAAA,MAC3D,UAAU,wBAAwB,SAAS;AAAA,IAC7C;AAAA,EACF,OAAO;AACL,UAAM,eAAe,gBAAgB;AACrC,UAAM,gBAAgB,wBAAwB;AAC9C,WAAO;AAAA,MACL,SAAS,KAAK;AAAA,QACZ,EAAE,QAAQ,cAAc,SAAS,cAAc;AAAA,QAC/C;AAAA,QACA;AAAA,MACF;AAAA,MACA,UAAU,oBAAoB,SAAS;AAAA,IACzC;AAAA,EACF;AACF;AAKA,eAAe,mBACb,OACA,iBACgD;AAChD,QAAM,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,SAAS,GAAG;AAC/D,QAAM,aAAa,MAAM,gBAAgB,OAAO,eAAe;AAE/D,SAAO;AAAA,IACL,SAAS,KAAK,UAAU,YAAY,MAAM,CAAC;AAAA,IAC3C,UAAU,cAAc,KAAK,IAAI,SAAS;AAAA,EAC5C;AACF;AAMA,MAAM,cAA+B;AAAA,EACnC,EAAE,IAAI,QAAQ,OAAO,EAAE,0BAA0B,EAAE;AAAA,EACnD,EAAE,IAAI,WAAW,OAAO,EAAE,6BAA6B,EAAE;AAAA,EACzD,EAAE,IAAI,gBAAgB,OAAO,EAAE,kCAAkC,EAAE;AAAA,EACnE,EAAE,IAAI,WAAW,OAAO,EAAE,6BAA6B,EAAE;AAC3D;AAEA,SAAS,eAAe,OAA2B;AACjD,UAAQ,OAAO;AAAA,IACb,KAAK;AACH,aAAO;AAAA,QACL;AAAA,UACE,IAAI;AAAA,UACJ,OAAO,EAAE,qCAAqC;AAAA,UAC9C,aAAa,EAAE,+BAA+B;AAAA,UAC9C,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,OAAO;AAAA,YACP,WAAW;AAAA,UACb;AAAA,QACF;AAAA,QACA;AAAA,UACE,IAAI;AAAA,UACJ,OAAO,EAAE,yCAAyC;AAAA,UAClD,aAAa,EAAE,+BAA+B;AAAA,UAC9C,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,OAAO;AAAA,YACP,WAAW;AAAA,UACb;AAAA,QACF;AAAA,QACA;AAAA,UACE,IAAI;AAAA,UACJ,OAAO,EAAE,wCAAwC;AAAA,UACjD,aAAa,EAAE,kCAAkC;AAAA,UACjD,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,OAAO;AAAA,YACP,WAAW;AAAA,UACb;AAAA,QACF;AAAA,QACA;AAAA,UACE,IAAI;AAAA,UACJ,OAAO,EAAE,4CAA4C;AAAA,UACrD,aAAa,EAAE,kCAAkC;AAAA,UACjD,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,OAAO;AAAA,YACP,WAAW;AAAA,UACb;AAAA,QACF;AAAA,QACA;AAAA,UACE,IAAI;AAAA,UACJ,OAAO,EAAE,oCAAoC;AAAA,UAC7C,aAAa,EAAE,8BAA8B;AAAA,UAC7C,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,OAAO;AAAA,YACP,WAAW;AAAA,UACb;AAAA,QACF;AAAA,QACA;AAAA,UACE,IAAI;AAAA,UACJ,OAAO,EAAE,wCAAwC;AAAA,UACjD,aAAa,EAAE,8BAA8B;AAAA,UAC7C,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,OAAO;AAAA,YACP,WAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,UACE,IAAI;AAAA,UACJ,OAAO,EAAE,iCAAiC;AAAA,UAC1C,aAAa,EAAE,+BAA+B;AAAA,UAC9C,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,OAAO;AAAA,YACP,WAAW;AAAA,UACb;AAAA,QACF;AAAA,QACA;AAAA,UACE,IAAI;AAAA,UACJ,OAAO,EAAE,oCAAoC;AAAA,UAC7C,aAAa,EAAE,kCAAkC;AAAA,UACjD,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,OAAO;AAAA,YACP,WAAW;AAAA,UACb;AAAA,QACF;AAAA,QACA;AAAA,UACE,IAAI;AAAA,UACJ,OAAO,EAAE,gCAAgC;AAAA,UACzC,aAAa,EAAE,8BAA8B;AAAA,UAC7C,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,OAAO;AAAA,YACP,WAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,UACE,IAAI;AAAA,UACJ,OAAO,EAAE,kCAAkC;AAAA,UAC3C,aAAa,EAAE,sCAAsC;AAAA,UACrD,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,OAAO;AAAA,YACP,WAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL;AAAA,UACE,IAAI;AAAA,UACJ,OAAO,EAAE,6BAA6B;AAAA,UACtC,aAAa,EAAE,iCAAiC;AAAA,UAChD,MAAM;AAAA,YACJ,UAAU;AAAA,YACV,OAAO;AAAA,YACP,WAAW;AAAA,UACb;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACE,aAAO,CAAC;AAAA,EACZ;AACF;AAUA,MAAM,aAAa,CAAC,EAAE,OAAO,MAAuB;AAClD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,MAAM;AACjD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAA+B,IAAI;AAC7E,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,EAAE;AAEjD,QAAM,QAAQ,QAAQ,MAAM,eAAe,SAAS,GAAG,CAAC,SAAS,CAAC;AAElE,QAAM,eAAe,YAAY,OAAO,SAAmB;AACzD,UAAM,OAAO,KAAK;AAElB,qBAAiB;AAAA,MACf,MAAM;AAAA,MACN,SAAS,EAAE,2BAA2B;AAAA,IACxC,CAAC;AAED,QAAI;AACF,YAAM,MAAM,OAAO;AACnB,UAAI;AACJ,UAAI;AAEJ,cAAQ,KAAK,UAAU;AAAA,QACrB,KAAK,gBAAgB;AACnB,gBAAM,WAAW,kBAAkB,EAAE;AACrC,gBAAM,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,SAAS,GAAG;AAC/D,qBAAW,sBAAsB,SAAS;AAC1C,oBAAU,KAAK,UAAU,UAAU,MAAM,CAAC;AAC1C;AAAA,QACF;AAAA,QACA,KAAK,WAAW;AACd,gBAAM,WAAW,kBAAkB,EAAE;AACrC,gBAAM,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,SAAS,GAAG;AAC/D,qBAAW,iBAAiB,SAAS;AACrC,oBAAU,gBAAgB,QAAQ;AAClC;AAAA,QACF;AAAA,QACA,KAAK,WAAW;AACd,gBAAM,SAAS,MAAM,oBAAoB,KAAK,KAAK;AACnD,qBAAW,OAAO;AAClB,oBAAU,OAAO;AACjB;AAAA,QACF;AAAA,QACA,KAAK,QAAQ;AACX,gBAAM,kBAAkB,KAAK,cAAc;AAC3C,gBAAM,SAAS,MAAM,mBAAmB,KAAK,OAAO,eAAe;AACnE,qBAAW,OAAO;AAClB,oBAAU,OAAO;AACjB;AAAA,QACF;AAAA,MACF;AAEA,YAAM,WAAW,KAAK,KAAK,QAAQ;AACnC,YAAM,UAAU,UAAU,SAAS,OAAO;AAE1C,uBAAiB;AAAA,QACf,MAAM;AAAA,QACN,SAAS,GAAG,EAAE,yBAAyB,CAAC,IAAI,QAAQ;AAAA,MACtD,CAAC;AAAA,IACH,SAAS,OAAO;AACd,uBAAiB;AAAA,QACf,MAAM;AAAA,QACN,SAAS,GAAG,EAAE,wBAAwB,CAAC,KAAK,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,MACpG,CAAC;AAAA,IACH;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,cAAc,YAAY,MAAM;AACpC,WAAO;AAAA,EACT,GAAG,CAAC,MAAM,CAAC;AAEX,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,EAAE,uBAAuB;AAAA,MAChC,MAAM;AAAA,MACN;AAAA,MACA,aAAa,SAAO;AAClB,qBAAa,GAAG;AAChB,uBAAe,EAAE;AAAA,MACnB;AAAA,MACA;AAAA,MACA,eAAe;AAAA,MACf;AAAA,MACA,gBAAgB;AAAA,MAChB,UAAU;AAAA,MACV,SAAS;AAAA,MACT,YAAY,EAAE,4BAA4B;AAAA,MAC1C;AAAA,MACA,mBAAkB;AAAA;AAAA,EACpB;AAEJ;AAMA,MAAM,UAAmB;AAAA,EACvB,MAAM;AAAA,EACN,aAAa,EAAE,6BAA6B;AAAA,EAC5C,WAAW;AAAA,EACX,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,MAAM;AAAA,EAEN,iBAAiB;AACf,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,KAAK,QAAQ;AACjB,WAAO,oCAAC,cAAW,QAAgB;AAAA,EACrC;AACF;AAEA,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const ide = {
|
|
2
|
+
name: "ide",
|
|
3
|
+
description: "IDE integration information",
|
|
4
|
+
isEnabled: true,
|
|
5
|
+
isHidden: false,
|
|
6
|
+
type: "local",
|
|
7
|
+
userFacingName() {
|
|
8
|
+
return "ide";
|
|
9
|
+
},
|
|
10
|
+
async call() {
|
|
11
|
+
return "Minto is designed to work with AiTer. Launch AiTer to use the integrated development environment.";
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
var ide_default = ide;
|
|
15
|
+
export {
|
|
16
|
+
ide_default as default
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=ide.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/commands/ide.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * /ide command (stub)\n *\n * Informs user about IDE integration with AiTer.\n */\n\nimport type { Command } from '../commands'\n\nconst ide: Command = {\n name: 'ide',\n description: 'IDE integration information',\n isEnabled: true,\n isHidden: false,\n type: 'local',\n userFacingName() {\n return 'ide'\n },\n async call() {\n return 'Minto is designed to work with AiTer. Launch AiTer to use the integrated development environment.'\n },\n}\n\nexport default ide\n"],
|
|
5
|
+
"mappings": "AAQA,MAAM,MAAe;AAAA,EACnB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM;AAAA,EACN,iBAAiB;AACf,WAAO;AAAA,EACT;AAAA,EACA,MAAM,OAAO;AACX,WAAO;AAAA,EACT;AACF;AAEA,IAAO,cAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { useState, useEffect } from "react";
|
|
2
|
-
import { Box, Text
|
|
3
|
-
import { SEMANTIC_COLORS
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { SEMANTIC_COLORS } from "../constants/colors.js";
|
|
4
|
+
import { SimpleSelector } from "../components/SimpleSelector/index.js";
|
|
4
5
|
import {
|
|
5
6
|
t,
|
|
6
7
|
getLanguage,
|
|
@@ -10,44 +11,6 @@ import {
|
|
|
10
11
|
} from "../i18n/index.js";
|
|
11
12
|
import { getGlobalConfig, saveGlobalConfig } from "../utils/config.js";
|
|
12
13
|
import { triggerLanguageChange } from "../messages.js";
|
|
13
|
-
const LanguageSelector = ({
|
|
14
|
-
currentLanguage,
|
|
15
|
-
onSelect,
|
|
16
|
-
onDone
|
|
17
|
-
}) => {
|
|
18
|
-
const languages = getSupportedLanguages();
|
|
19
|
-
const [selectedIndex, setSelectedIndex] = useState(
|
|
20
|
-
languages.indexOf(currentLanguage)
|
|
21
|
-
);
|
|
22
|
-
useInput((input, key) => {
|
|
23
|
-
if (key.upArrow || input === "k") {
|
|
24
|
-
setSelectedIndex((prev) => prev > 0 ? prev - 1 : languages.length - 1);
|
|
25
|
-
} else if (key.downArrow || input === "j") {
|
|
26
|
-
setSelectedIndex((prev) => prev < languages.length - 1 ? prev + 1 : 0);
|
|
27
|
-
} else if (key.return) {
|
|
28
|
-
const selected = languages[selectedIndex];
|
|
29
|
-
if (selected) {
|
|
30
|
-
onSelect(selected);
|
|
31
|
-
}
|
|
32
|
-
} else if (input === "q" || key.escape) {
|
|
33
|
-
onDone();
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", paddingY: 1 }, /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { color: BRAND_GRADIENT.START }, "\u25C6"), /* @__PURE__ */ React.createElement(Text, null, " "), /* @__PURE__ */ React.createElement(Text, { bold: true, color: BRAND_GRADIENT.START }, "Language Settings"), /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, " / "), /* @__PURE__ */ React.createElement(Text, { bold: true, color: BRAND_GRADIENT.END }, "\u8BED\u8A00\u8BBE\u7F6E")), /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.dim }, t("commands.language.current"), ":", " "), /* @__PURE__ */ React.createElement(Text, { bold: true, color: SEMANTIC_COLORS.success }, getLanguageDisplayName(currentLanguage))), /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.secondary, bold: true }, t("commands.language.select"), ":"), languages.map((lang, index) => {
|
|
37
|
-
const isSelected = index === selectedIndex;
|
|
38
|
-
const isCurrent = lang === currentLanguage;
|
|
39
|
-
return /* @__PURE__ */ React.createElement(Box, { key: lang, paddingLeft: 1 }, /* @__PURE__ */ React.createElement(
|
|
40
|
-
Text,
|
|
41
|
-
{
|
|
42
|
-
color: isSelected ? BRAND_GRADIENT.START : SEMANTIC_COLORS.secondary,
|
|
43
|
-
bold: isSelected
|
|
44
|
-
},
|
|
45
|
-
isSelected ? "\u203A " : " ",
|
|
46
|
-
getLanguageDisplayName(lang),
|
|
47
|
-
isCurrent && /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.success }, " ", "(", t("commands.language.current"), ")")
|
|
48
|
-
));
|
|
49
|
-
})), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.muted }, t("commands.language.navigate"))));
|
|
50
|
-
};
|
|
51
14
|
async function applyLanguageChange(newLang) {
|
|
52
15
|
setLanguage(newLang);
|
|
53
16
|
await triggerLanguageChange();
|
|
@@ -58,6 +21,7 @@ const command = {
|
|
|
58
21
|
description: t("commands.language.description"),
|
|
59
22
|
isEnabled: true,
|
|
60
23
|
isHidden: false,
|
|
24
|
+
hidePromptInput: true,
|
|
61
25
|
type: "local-jsx",
|
|
62
26
|
userFacingName() {
|
|
63
27
|
return this.name;
|
|
@@ -87,7 +51,7 @@ const command = {
|
|
|
87
51
|
}, 100);
|
|
88
52
|
}
|
|
89
53
|
}, [applied]);
|
|
90
|
-
return /* @__PURE__ */ React.createElement(Box, { paddingY: 1 }, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.success }, "\u2713 "), /* @__PURE__ */ React.createElement(Text, null, t("commands.language.changed"), " ", getLanguageDisplayName(targetLang)));
|
|
54
|
+
return /* @__PURE__ */ React.createElement(Box, { paddingY: 1 }, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.success }, "\u2713", " "), /* @__PURE__ */ React.createElement(Text, null, t("commands.language.changed"), " ", getLanguageDisplayName(targetLang)));
|
|
91
55
|
};
|
|
92
56
|
return /* @__PURE__ */ React.createElement(DirectChangeConfirm, null);
|
|
93
57
|
} else if (targetLang === currentLang) {
|
|
@@ -106,7 +70,8 @@ const command = {
|
|
|
106
70
|
applyChange();
|
|
107
71
|
}
|
|
108
72
|
}, [pendingLang]);
|
|
109
|
-
const handleSelect = (
|
|
73
|
+
const handleSelect = (item) => {
|
|
74
|
+
const lang = item.id;
|
|
110
75
|
if (lang !== currentLang) {
|
|
111
76
|
const config = getGlobalConfig();
|
|
112
77
|
saveGlobalConfig({ ...config, language: lang });
|
|
@@ -116,14 +81,22 @@ const command = {
|
|
|
116
81
|
}
|
|
117
82
|
};
|
|
118
83
|
if (pendingLang) {
|
|
119
|
-
return /* @__PURE__ */ React.createElement(Box, { paddingY: 1 }, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.success }, "\u2713 "), /* @__PURE__ */ React.createElement(Text, null, t("commands.language.changed"), " ", getLanguageDisplayName(pendingLang)));
|
|
84
|
+
return /* @__PURE__ */ React.createElement(Box, { paddingY: 1 }, /* @__PURE__ */ React.createElement(Text, { color: SEMANTIC_COLORS.success }, "\u2713", " "), /* @__PURE__ */ React.createElement(Text, null, t("commands.language.changed"), " ", getLanguageDisplayName(pendingLang)));
|
|
120
85
|
}
|
|
86
|
+
const languages = getSupportedLanguages();
|
|
87
|
+
const items = languages.map((lang) => ({
|
|
88
|
+
id: lang,
|
|
89
|
+
label: getLanguageDisplayName(lang),
|
|
90
|
+
isCurrent: lang === currentLang
|
|
91
|
+
}));
|
|
121
92
|
return /* @__PURE__ */ React.createElement(
|
|
122
|
-
|
|
93
|
+
SimpleSelector,
|
|
123
94
|
{
|
|
124
|
-
|
|
95
|
+
title: "Language Settings / \\u8BED\\u8A00\\u8BBE\\u7F6E",
|
|
96
|
+
subtitle: `${t("commands.language.current")}: ${getLanguageDisplayName(currentLang)}`,
|
|
97
|
+
items,
|
|
125
98
|
onSelect: handleSelect,
|
|
126
|
-
onDone
|
|
99
|
+
onClose: onDone
|
|
127
100
|
}
|
|
128
101
|
);
|
|
129
102
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/commands/language.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * Language Command\n *\n * Interactive language switching for Minto CLI.\n *
|
|
5
|
-
"mappings": "AAcA,OAAO,SAAS,UAAU,iBAAiB;AAC3C,SAAS,KAAK,
|
|
4
|
+
"sourcesContent": ["/**\n * Language Command\n *\n * Interactive language switching for Minto CLI.\n * Uses SimpleSelector for consistent UI.\n *\n * Flow:\n * 1. User selects new language via SimpleSelector\n * 2. Save preference to config\n * 3. Update runtime language\n * 4. Exit menu and return to input state\n * 5. Clear screen and re-render UI with new language\n */\n\nimport React, { useState, useEffect } from 'react'\nimport { Box, Text } from 'ink'\nimport type { Command } from '@commands'\nimport { SEMANTIC_COLORS } from '@constants/colors'\nimport { SimpleSelector } from '@components/SimpleSelector'\nimport type { SelectorItem } from '@components/SimpleSelector'\nimport {\n t,\n getLanguage,\n setLanguage,\n getSupportedLanguages,\n getLanguageDisplayName,\n type Language,\n} from '@i18n'\nimport { getGlobalConfig, saveGlobalConfig } from '@utils/config'\nimport { triggerLanguageChange } from '@messages'\n\n/**\n * Apply language change\n * 1. Update runtime language\n * 2. Trigger UI re-render (preserves conversation history)\n */\nasync function applyLanguageChange(newLang: Language) {\n setLanguage(newLang)\n await triggerLanguageChange()\n}\n\nconst command: Command = {\n name: 'language',\n aliases: ['lang'],\n description: t('commands.language.description'),\n isEnabled: true,\n isHidden: false,\n hidePromptInput: true,\n type: 'local-jsx',\n\n userFacingName() {\n return this.name\n },\n\n async call(onDone, _context, args) {\n const currentLang = getLanguage()\n\n // Handle direct language argument: /language en or /language zh-CN\n if (args) {\n const arg = args.trim().toLowerCase()\n let targetLang: Language | null = null\n\n if (arg === 'en' || arg === 'english') {\n targetLang = 'en'\n } else if (\n arg === 'zh-cn' ||\n arg === 'zh' ||\n arg === 'chinese' ||\n arg === '\u4E2D\u6587'\n ) {\n targetLang = 'zh-CN'\n }\n\n if (targetLang && targetLang !== currentLang) {\n const config = getGlobalConfig()\n saveGlobalConfig({ ...config, language: targetLang })\n\n const DirectChangeConfirm = () => {\n const [applied, setApplied] = useState(false)\n\n useEffect(() => {\n if (!applied) {\n setApplied(true)\n setTimeout(async () => {\n onDone()\n await new Promise(resolve => setTimeout(resolve, 50))\n await applyLanguageChange(targetLang!)\n }, 100)\n }\n }, [applied])\n\n return (\n <Box paddingY={1}>\n <Text color={SEMANTIC_COLORS.success}>{'\\u2713'} </Text>\n <Text>\n {t('commands.language.changed')}{' '}\n {getLanguageDisplayName(targetLang!)}\n </Text>\n </Box>\n )\n }\n\n return <DirectChangeConfirm />\n } else if (targetLang === currentLang) {\n return (\n <Box paddingY={1}>\n <Text color={SEMANTIC_COLORS.dim}>\n {t('commands.language.alreadyUsing')}{' '}\n {getLanguageDisplayName(targetLang)}\n </Text>\n </Box>\n )\n }\n // Invalid argument - fall through to interactive mode\n }\n\n // Interactive mode using SimpleSelector\n const LanguageWrapper = () => {\n const [pendingLang, setPendingLang] = useState<Language | null>(null)\n\n useEffect(() => {\n if (pendingLang) {\n const applyChange = async () => {\n onDone()\n await new Promise(resolve => setTimeout(resolve, 50))\n await applyLanguageChange(pendingLang)\n }\n applyChange()\n }\n }, [pendingLang])\n\n const handleSelect = (item: SelectorItem) => {\n const lang = item.id as Language\n if (lang !== currentLang) {\n const config = getGlobalConfig()\n saveGlobalConfig({ ...config, language: lang })\n setPendingLang(lang)\n } else {\n onDone()\n }\n }\n\n if (pendingLang) {\n return (\n <Box paddingY={1}>\n <Text color={SEMANTIC_COLORS.success}>{'\\u2713'} </Text>\n <Text>\n {t('commands.language.changed')}{' '}\n {getLanguageDisplayName(pendingLang)}\n </Text>\n </Box>\n )\n }\n\n const languages = getSupportedLanguages()\n const items: SelectorItem[] = languages.map(lang => ({\n id: lang,\n label: getLanguageDisplayName(lang),\n isCurrent: lang === currentLang,\n }))\n\n return (\n <SimpleSelector\n title=\"Language Settings / \\u8BED\\u8A00\\u8BBE\\u7F6E\"\n subtitle={`${t('commands.language.current')}: ${getLanguageDisplayName(currentLang)}`}\n items={items}\n onSelect={handleSelect}\n onClose={onDone}\n />\n )\n }\n\n return <LanguageWrapper />\n },\n}\n\nexport default command\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|