@within-7/minto 0.4.1 → 0.4.2
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 +7 -0
- package/dist/Tool.js.map +2 -2
- package/dist/commands/agents/AgentsCommand.js +1 -1
- package/dist/commands/agents/AgentsCommand.js.map +2 -2
- package/dist/commands/agents/constants.js +2 -2
- package/dist/commands/agents/constants.js.map +2 -2
- package/dist/commands/clear.js +4 -3
- package/dist/commands/clear.js.map +2 -2
- package/dist/commands/compact.js +2 -2
- package/dist/commands/compact.js.map +1 -1
- package/dist/commands/context.js +3 -1
- package/dist/commands/context.js.map +2 -2
- package/dist/commands/login.js +128 -0
- package/dist/commands/login.js.map +7 -0
- package/dist/commands/memory.js +33 -82
- package/dist/commands/memory.js.map +2 -2
- package/dist/commands/quit.js +3 -1
- package/dist/commands/quit.js.map +2 -2
- package/dist/commands/resume.js +39 -239
- package/dist/commands/resume.js.map +2 -2
- package/dist/commands/tasks.js +1 -1
- package/dist/commands/tasks.js.map +2 -2
- package/dist/commands/terminalSetup.js +6 -2
- package/dist/commands/terminalSetup.js.map +2 -2
- package/dist/commands.js +2 -0
- package/dist/commands.js.map +2 -2
- package/dist/components/AgentDetailView.js +126 -0
- package/dist/components/AgentDetailView.js.map +7 -0
- package/dist/components/AgentThinkingBlock.js +1 -1
- package/dist/components/AgentThinkingBlock.js.map +2 -2
- package/dist/components/AgentViewBanner.js +22 -0
- package/dist/components/AgentViewBanner.js.map +7 -0
- package/dist/components/HeaderBar.js +1 -1
- package/dist/components/HeaderBar.js.map +2 -2
- package/dist/components/Help.js +8 -1
- package/dist/components/Help.js.map +2 -2
- package/dist/components/HotkeyHelpPanel.js +26 -8
- package/dist/components/HotkeyHelpPanel.js.map +2 -2
- package/dist/components/IdleNotificationBar.js +10 -0
- package/dist/components/IdleNotificationBar.js.map +7 -0
- package/dist/components/ModelSelector/ModelSelector.js +55 -20
- package/dist/components/ModelSelector/ModelSelector.js.map +2 -2
- package/dist/components/PromptInput.js +186 -115
- package/dist/components/PromptInput.js.map +2 -2
- package/dist/components/RewindPanel.js +272 -0
- package/dist/components/RewindPanel.js.map +7 -0
- package/dist/components/Spinner.js +10 -21
- package/dist/components/Spinner.js.map +2 -2
- package/dist/components/StreamingTextPreview.js +29 -0
- package/dist/components/StreamingTextPreview.js.map +7 -0
- package/dist/components/SubagentBlock.js +3 -2
- package/dist/components/SubagentBlock.js.map +2 -2
- package/dist/components/SubagentProgress.js +4 -4
- package/dist/components/SubagentProgress.js.map +2 -2
- package/dist/components/TabbedListView/SearchInput.js +1 -1
- package/dist/components/TabbedListView/SearchInput.js.map +2 -2
- package/dist/components/TabbedListView/TabbedListView.js +87 -41
- package/dist/components/TabbedListView/TabbedListView.js.map +2 -2
- package/dist/components/TaskCard.js +4 -4
- package/dist/components/TaskCard.js.map +2 -2
- package/dist/components/TeamMemberPanel.js +107 -0
- package/dist/components/TeamMemberPanel.js.map +7 -0
- package/dist/components/ThinkingSelector.js +84 -0
- package/dist/components/ThinkingSelector.js.map +7 -0
- package/dist/components/TitledDivider.js +26 -0
- package/dist/components/TitledDivider.js.map +7 -0
- package/dist/components/TodoPanel.js +31 -30
- package/dist/components/TodoPanel.js.map +2 -2
- package/dist/components/TokenWarning.js +28 -7
- package/dist/components/TokenWarning.js.map +2 -2
- package/dist/components/messages/AssistantTextMessage.js +5 -2
- package/dist/components/messages/AssistantTextMessage.js.map +2 -2
- package/dist/components/messages/AssistantToolUseMessage.js +9 -1
- package/dist/components/messages/AssistantToolUseMessage.js.map +2 -2
- package/dist/components/messages/DefaultToolResultFallback.js +11 -0
- package/dist/components/messages/DefaultToolResultFallback.js.map +7 -0
- package/dist/components/messages/ParallelTasksGroupView.js +14 -6
- package/dist/components/messages/ParallelTasksGroupView.js.map +2 -2
- package/dist/components/messages/TaskInModuleView.js +27 -27
- package/dist/components/messages/TaskInModuleView.js.map +2 -2
- package/dist/components/messages/UserGuidanceMessage.js +26 -0
- package/dist/components/messages/UserGuidanceMessage.js.map +7 -0
- package/dist/components/messages/UserPromptMessage.js +2 -1
- package/dist/components/messages/UserPromptMessage.js.map +2 -2
- package/dist/components/messages/UserTeamNotificationMessage.js +91 -0
- package/dist/components/messages/UserTeamNotificationMessage.js.map +7 -0
- package/dist/components/messages/UserTextMessage.js +8 -0
- package/dist/components/messages/UserTextMessage.js.map +2 -2
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js +4 -2
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js.map +2 -2
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js +18 -1
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js.map +2 -2
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +12 -1
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +2 -2
- package/dist/components/permissions/PermissionRequest.js +4 -0
- package/dist/components/permissions/PermissionRequest.js.map +2 -2
- package/dist/components/permissions/PlanApprovalRequest.js +164 -0
- package/dist/components/permissions/PlanApprovalRequest.js.map +7 -0
- package/dist/constants/agentTeams.js +17 -0
- package/dist/constants/agentTeams.js.map +7 -0
- package/dist/constants/macros.js +2 -1
- package/dist/constants/macros.js.map +2 -2
- package/dist/constants/prompts/agentPrompt.js +1 -0
- package/dist/constants/prompts/agentPrompt.js.map +2 -2
- package/dist/constants/prompts/autoMemory.js +39 -0
- package/dist/constants/prompts/autoMemory.js.map +7 -0
- package/dist/constants/prompts/codeConventions.js +1 -13
- package/dist/constants/prompts/codeConventions.js.map +2 -2
- package/dist/constants/prompts/doingTasks.js +21 -2
- package/dist/constants/prompts/doingTasks.js.map +2 -2
- package/dist/constants/prompts/envInfo.js +6 -7
- package/dist/constants/prompts/envInfo.js.map +2 -2
- package/dist/constants/prompts/index.js +27 -5
- package/dist/constants/prompts/index.js.map +2 -2
- package/dist/constants/prompts/taskManagement.js +2 -43
- package/dist/constants/prompts/taskManagement.js.map +2 -2
- package/dist/constants/prompts/teamOverlays.js +50 -0
- package/dist/constants/prompts/teamOverlays.js.map +7 -0
- package/dist/constants/prompts/toneAndStyle.js +4 -29
- package/dist/constants/prompts/toneAndStyle.js.map +2 -2
- package/dist/constants/prompts/toolUsagePolicy.js +7 -22
- package/dist/constants/prompts/toolUsagePolicy.js.map +2 -2
- package/dist/constants/toolInputExamples.js +2 -2
- package/dist/constants/toolInputExamples.js.map +2 -2
- package/dist/context.js +39 -6
- package/dist/context.js.map +2 -2
- package/dist/core/backupManager.js +1 -1
- package/dist/core/backupManager.js.map +2 -2
- package/dist/core/permissions/rules/planModeRule.js +1 -1
- package/dist/core/permissions/rules/planModeRule.js.map +1 -1
- package/dist/core/permissions/rules/safeModeRule.js +1 -1
- package/dist/core/permissions/rules/safeModeRule.js.map +1 -1
- package/dist/engine/AgentEngine.js +902 -0
- package/dist/engine/AgentEngine.js.map +7 -0
- package/dist/engine/EngineRegistry.js +89 -0
- package/dist/engine/EngineRegistry.js.map +7 -0
- package/dist/engine/foregroundAdapter.js +191 -0
- package/dist/engine/foregroundAdapter.js.map +7 -0
- package/dist/engine/index.js +15 -0
- package/dist/engine/index.js.map +7 -0
- package/dist/engine/types.js +1 -0
- package/dist/engine/types.js.map +7 -0
- package/dist/entrypoints/cli.js +410 -79
- package/dist/entrypoints/cli.js.map +3 -3
- package/dist/hooks/useAgentEngine.js +129 -0
- package/dist/hooks/useAgentEngine.js.map +7 -0
- package/dist/hooks/useAgentTokenStats.js +0 -16
- package/dist/hooks/useAgentTokenStats.js.map +2 -2
- package/dist/hooks/useCanUseTool.js +47 -2
- package/dist/hooks/useCanUseTool.js.map +2 -2
- package/dist/hooks/useDeferredLoading.js +4 -1
- package/dist/hooks/useDeferredLoading.js.map +2 -2
- package/dist/hooks/useIdleNotifications.js +66 -0
- package/dist/hooks/useIdleNotifications.js.map +7 -0
- package/dist/hooks/useSessionTracking.js +9 -7
- package/dist/hooks/useSessionTracking.js.map +2 -2
- package/dist/hooks/useTeamMembers.js +51 -0
- package/dist/hooks/useTeamMembers.js.map +7 -0
- package/dist/i18n/locales/en.js +77 -12
- package/dist/i18n/locales/en.js.map +2 -2
- package/dist/i18n/locales/zh-CN.js +77 -12
- package/dist/i18n/locales/zh-CN.js.map +2 -2
- package/dist/i18n/types.js.map +1 -1
- package/dist/messages.js.map +2 -2
- package/dist/permissions.js +113 -7
- package/dist/permissions.js.map +2 -2
- package/dist/query.js +135 -37
- package/dist/query.js.map +2 -2
- package/dist/screens/REPL.js +504 -361
- package/dist/screens/REPL.js.map +3 -3
- package/dist/screens/ResumeConversation.js +199 -14
- package/dist/screens/ResumeConversation.js.map +2 -2
- package/dist/services/adapters/base.js.map +1 -1
- package/dist/services/agentTeams/backends/headless.js +108 -0
- package/dist/services/agentTeams/backends/headless.js.map +7 -0
- package/dist/services/agentTeams/backends/inProcess.js +102 -0
- package/dist/services/agentTeams/backends/inProcess.js.map +7 -0
- package/dist/services/agentTeams/backends/resolver.js +18 -0
- package/dist/services/agentTeams/backends/resolver.js.map +7 -0
- package/dist/services/agentTeams/backends/tmux.js +168 -0
- package/dist/services/agentTeams/backends/tmux.js.map +7 -0
- package/dist/services/agentTeams/backends/types.js +1 -0
- package/dist/services/agentTeams/backends/types.js.map +7 -0
- package/dist/services/agentTeams/heartbeat.js +88 -0
- package/dist/services/agentTeams/heartbeat.js.map +7 -0
- package/dist/services/agentTeams/index.js +42 -2
- package/dist/services/agentTeams/index.js.map +2 -2
- package/dist/services/agentTeams/injectionChannel.js +105 -0
- package/dist/services/agentTeams/injectionChannel.js.map +7 -0
- package/dist/services/agentTeams/mailbox.js +410 -30
- package/dist/services/agentTeams/mailbox.js.map +2 -2
- package/dist/services/agentTeams/messageFormatter.js +80 -0
- package/dist/services/agentTeams/messageFormatter.js.map +7 -0
- package/dist/services/agentTeams/permissionDelegation.js +71 -0
- package/dist/services/agentTeams/permissionDelegation.js.map +7 -0
- package/dist/services/agentTeams/teamEvents.js +45 -0
- package/dist/services/agentTeams/teamEvents.js.map +7 -0
- package/dist/services/agentTeams/teamManager.js +251 -34
- package/dist/services/agentTeams/teamManager.js.map +2 -2
- package/dist/services/agentTeams/teamTaskStore.js +290 -61
- package/dist/services/agentTeams/teamTaskStore.js.map +2 -2
- package/dist/services/agentTeams/teammateSpawner.js +99 -18
- package/dist/services/agentTeams/teammateSpawner.js.map +2 -2
- package/dist/services/hookExecutor.js +51 -8
- package/dist/services/hookExecutor.js.map +2 -2
- package/dist/services/llm/anthropicProvider.js +56 -59
- package/dist/services/llm/anthropicProvider.js.map +2 -2
- package/dist/services/llm/dispatch.js +24 -5
- package/dist/services/llm/dispatch.js.map +2 -2
- package/dist/services/llm/openaiProvider.js +115 -136
- package/dist/services/llm/openaiProvider.js.map +3 -3
- package/dist/services/llm/types.js +89 -15
- package/dist/services/llm/types.js.map +2 -2
- package/dist/services/mcpClient.js +80 -4
- package/dist/services/mcpClient.js.map +2 -2
- package/dist/services/mintoAuth.js +299 -0
- package/dist/services/mintoAuth.js.map +7 -0
- package/dist/services/oauth.js +3 -3
- package/dist/services/oauth.js.map +2 -2
- package/dist/services/openai.js +91 -20
- package/dist/services/openai.js.map +2 -2
- package/dist/services/plugins/pluginRuntime.js +11 -5
- package/dist/services/plugins/pluginRuntime.js.map +2 -2
- package/dist/services/plugins/pluginValidation.js +4 -2
- package/dist/services/plugins/pluginValidation.js.map +2 -2
- package/dist/services/sandbox/sandboxController.js +11 -3
- package/dist/services/sandbox/sandboxController.js.map +2 -2
- package/dist/services/sessionMemoryInjector.js +77 -0
- package/dist/services/sessionMemoryInjector.js.map +7 -0
- package/dist/services/systemReminder.js +130 -8
- package/dist/services/systemReminder.js.map +2 -2
- package/dist/services/taskStore.js +199 -8
- package/dist/services/taskStore.js.map +3 -3
- package/dist/services/topicDetector.js +169 -0
- package/dist/services/topicDetector.js.map +7 -0
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +0 -13
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +2 -2
- package/dist/tools/BashTool/BashTool.js +51 -28
- package/dist/tools/BashTool/BashTool.js.map +2 -2
- package/dist/tools/BashTool/prompt.js +95 -118
- package/dist/tools/BashTool/prompt.js.map +2 -2
- package/dist/tools/BashTool/utils.js +39 -1
- package/dist/tools/BashTool/utils.js.map +2 -2
- package/dist/tools/EnterWorktreeTool/EnterWorktreeTool.js +121 -0
- package/dist/tools/EnterWorktreeTool/EnterWorktreeTool.js.map +7 -0
- package/dist/tools/EnterWorktreeTool/prompt.js +22 -0
- package/dist/tools/EnterWorktreeTool/prompt.js.map +7 -0
- package/dist/tools/FileEditTool/FileEditTool.js +9 -4
- package/dist/tools/FileEditTool/FileEditTool.js.map +2 -2
- package/dist/tools/FileEditTool/prompt.js +3 -7
- package/dist/tools/FileEditTool/prompt.js.map +2 -2
- package/dist/tools/FileReadTool/FileReadTool.js +125 -3
- package/dist/tools/FileReadTool/FileReadTool.js.map +2 -2
- package/dist/tools/FileReadTool/prompt.js +1 -2
- package/dist/tools/FileReadTool/prompt.js.map +2 -2
- package/dist/tools/FileWriteTool/prompt.js +3 -5
- package/dist/tools/FileWriteTool/prompt.js.map +2 -2
- package/dist/tools/GlobTool/GlobTool.js +3 -2
- package/dist/tools/GlobTool/GlobTool.js.map +2 -2
- package/dist/tools/GrepTool/GrepTool.js +16 -5
- package/dist/tools/GrepTool/GrepTool.js.map +2 -2
- package/dist/tools/ListMcpResourcesTool/ListMcpResourcesTool.js.map +2 -2
- package/dist/tools/MCPSearchTool/MCPSearchTool.js +172 -0
- package/dist/tools/MCPSearchTool/MCPSearchTool.js.map +7 -0
- package/dist/tools/MCPSearchTool/prompt.js +77 -0
- package/dist/tools/MCPSearchTool/prompt.js.map +7 -0
- package/dist/tools/MultiEditTool/prompt.js +4 -7
- package/dist/tools/MultiEditTool/prompt.js.map +2 -2
- package/dist/tools/PlanModeTool/EnterPlanModeTool.js +12 -8
- package/dist/tools/PlanModeTool/EnterPlanModeTool.js.map +2 -2
- package/dist/tools/PlanModeTool/ExitPlanModeTool.js +54 -1
- package/dist/tools/PlanModeTool/ExitPlanModeTool.js.map +2 -2
- package/dist/tools/PlanModeTool/prompt.js +23 -74
- package/dist/tools/PlanModeTool/prompt.js.map +2 -2
- package/dist/tools/SendMessageTool/SendMessageTool.js +341 -0
- package/dist/tools/SendMessageTool/SendMessageTool.js.map +7 -0
- package/dist/tools/SendMessageTool/prompt.js +44 -0
- package/dist/tools/SendMessageTool/prompt.js.map +7 -0
- package/dist/tools/TaskCreateTool/prompt.js +15 -4
- package/dist/tools/TaskCreateTool/prompt.js.map +2 -2
- package/dist/tools/TaskListTool/prompt.js +18 -3
- package/dist/tools/TaskListTool/prompt.js.map +2 -2
- package/dist/tools/TaskOutputTool/prompt.js +4 -3
- package/dist/tools/TaskOutputTool/prompt.js.map +2 -2
- package/dist/tools/TaskTool/TaskTool.js +762 -98
- package/dist/tools/TaskTool/TaskTool.js.map +3 -3
- package/dist/tools/TaskTool/constants.js +8 -2
- package/dist/tools/TaskTool/constants.js.map +2 -2
- package/dist/tools/TaskTool/prompt.js +74 -70
- package/dist/tools/TaskTool/prompt.js.map +2 -2
- package/dist/tools/TaskUpdateTool/TaskUpdateTool.js +15 -1
- package/dist/tools/TaskUpdateTool/TaskUpdateTool.js.map +2 -2
- package/dist/tools/TeamCreateTool/TeamCreateTool.js +129 -0
- package/dist/tools/TeamCreateTool/TeamCreateTool.js.map +7 -0
- package/dist/tools/TeamCreateTool/prompt.js +58 -0
- package/dist/tools/TeamCreateTool/prompt.js.map +7 -0
- package/dist/tools/TeamDeleteTool/TeamDeleteTool.js +151 -0
- package/dist/tools/TeamDeleteTool/TeamDeleteTool.js.map +7 -0
- package/dist/tools/TeamDeleteTool/prompt.js +16 -0
- package/dist/tools/TeamDeleteTool/prompt.js.map +7 -0
- package/dist/tools/URLFetcherTool/URLFetcherTool.js +106 -15
- package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +2 -2
- package/dist/tools/URLFetcherTool/prompt.js +3 -2
- package/dist/tools/URLFetcherTool/prompt.js.map +2 -2
- package/dist/tools/WebSearchTool/WebSearchTool.js +2 -1
- package/dist/tools/WebSearchTool/WebSearchTool.js.map +2 -2
- package/dist/tools/WebSearchTool/prompt.js +5 -4
- package/dist/tools/WebSearchTool/prompt.js.map +2 -2
- package/dist/tools.js +100 -20
- package/dist/tools.js.map +2 -2
- package/dist/types/PermissionMode.js +35 -6
- package/dist/types/PermissionMode.js.map +2 -2
- package/dist/types/hooks.js +2 -0
- package/dist/types/hooks.js.map +2 -2
- package/dist/types/plugin.js +2 -0
- package/dist/types/plugin.js.map +3 -3
- package/dist/utils/CircuitBreaker.js +15 -9
- package/dist/utils/CircuitBreaker.js.map +2 -2
- package/dist/utils/agentLoader.js +249 -112
- package/dist/utils/agentLoader.js.map +2 -2
- package/dist/utils/animationManager.js +40 -3
- package/dist/utils/animationManager.js.map +2 -2
- package/dist/utils/ask.js +7 -6
- package/dist/utils/ask.js.map +2 -2
- package/dist/utils/atomicWrite.js +23 -0
- package/dist/utils/atomicWrite.js.map +7 -0
- package/dist/utils/autoCompactCore.js +73 -56
- package/dist/utils/autoCompactCore.js.map +2 -2
- package/dist/utils/autoMemoryPaths.js +89 -0
- package/dist/utils/autoMemoryPaths.js.map +7 -0
- package/dist/utils/config.js +63 -38
- package/dist/utils/config.js.map +2 -2
- package/dist/utils/configSchema.js +13 -8
- package/dist/utils/configSchema.js.map +2 -2
- package/dist/utils/credentials/index.js +14 -0
- package/dist/utils/credentials/index.js.map +2 -2
- package/dist/utils/dualPath.js +24 -0
- package/dist/utils/dualPath.js.map +7 -0
- package/dist/utils/exit.js +66 -7
- package/dist/utils/exit.js.map +2 -2
- package/dist/utils/externalEditor.js +155 -0
- package/dist/utils/externalEditor.js.map +7 -0
- package/dist/utils/fileLock.js +67 -0
- package/dist/utils/fileLock.js.map +7 -0
- package/dist/utils/format.js +24 -14
- package/dist/utils/format.js.map +2 -2
- package/dist/utils/globalErrorHandler.js +5 -96
- package/dist/utils/globalErrorHandler.js.map +3 -3
- package/dist/utils/groupHandlers/parallelTasksHandler.js +5 -3
- package/dist/utils/groupHandlers/parallelTasksHandler.js.map +2 -2
- package/dist/utils/groupHandlers/taskHandler.js +2 -2
- package/dist/utils/groupHandlers/taskHandler.js.map +2 -2
- package/dist/utils/hookManager.js +64 -6
- package/dist/utils/hookManager.js.map +2 -2
- package/dist/utils/log.js +6 -2
- package/dist/utils/log.js.map +2 -2
- package/dist/utils/markdown.js +237 -19
- package/dist/utils/markdown.js.map +2 -2
- package/dist/utils/messageContextManager.js +18 -5
- package/dist/utils/messageContextManager.js.map +2 -2
- package/dist/utils/messageGroupManager.js +1 -1
- package/dist/utils/messageGroupManager.js.map +2 -2
- package/dist/utils/messages.js +104 -46
- package/dist/utils/messages.js.map +2 -2
- package/dist/utils/model.js +2 -2
- package/dist/utils/model.js.map +2 -2
- package/dist/utils/pasteCache.js +8 -4
- package/dist/utils/pasteCache.js.map +2 -2
- package/dist/utils/pluginLoader.js +18 -0
- package/dist/utils/pluginLoader.js.map +2 -2
- package/dist/utils/secureKeyStorage.js +36 -7
- package/dist/utils/secureKeyStorage.js.map +2 -2
- package/dist/utils/simpleMode.js +7 -0
- package/dist/utils/simpleMode.js.map +7 -0
- package/dist/utils/streamingState.js +11 -1
- package/dist/utils/streamingState.js.map +2 -2
- package/dist/utils/taskDisplayUtils.js +2 -1
- package/dist/utils/taskDisplayUtils.js.map +2 -2
- package/dist/utils/teamConfig.js +2 -2
- package/dist/utils/teamConfig.js.map +2 -2
- package/dist/utils/thinking.js +6 -2
- package/dist/utils/thinking.js.map +3 -3
- package/dist/utils/tokenProgress.js +55 -0
- package/dist/utils/tokenProgress.js.map +7 -0
- package/dist/utils/toolRiskClassification.js +26 -17
- package/dist/utils/toolRiskClassification.js.map +2 -2
- package/dist/utils/tooling/toolError.js +12 -0
- package/dist/utils/tooling/toolError.js.map +7 -0
- package/dist/version.js +2 -2
- package/dist/version.js.map +1 -1
- package/package.json +10 -8
package/dist/entrypoints/cli.js
CHANGED
|
@@ -31,15 +31,10 @@ import {
|
|
|
31
31
|
import { cwd } from "process";
|
|
32
32
|
import { dateToFilename, logError, parseLogFilename } from "../utils/log.js";
|
|
33
33
|
import { initDebugLogger } from "../utils/debugLogger.js";
|
|
34
|
-
import { Onboarding } from "../components/Onboarding.js";
|
|
35
|
-
import { TrustDialog } from "../components/TrustDialog.js";
|
|
36
34
|
import {
|
|
37
35
|
checkHasTrustDialogAccepted
|
|
38
36
|
} from "../utils/config.js";
|
|
39
37
|
import { isDefaultSlowAndCapableModel } from "../utils/model.js";
|
|
40
|
-
import { LogList } from "../screens/LogList.js";
|
|
41
|
-
import { ResumeConversation } from "../screens/ResumeConversation.js";
|
|
42
|
-
import { startMCPServer } from "./mcp.js";
|
|
43
38
|
import { getCwd, setCwd, setOriginalCwd } from "../utils/state.js";
|
|
44
39
|
import { omit } from "lodash-es";
|
|
45
40
|
import { getBuiltInCommands, getCommands } from "../commands.js";
|
|
@@ -47,35 +42,8 @@ import { getNextAvailableLogForkNumber, loadLogList } from "../utils/log.js";
|
|
|
47
42
|
import { loadMessagesFromLog } from "../utils/conversationRecovery.js";
|
|
48
43
|
import { cleanupOldMessageFilesInBackground } from "../utils/cleanup.js";
|
|
49
44
|
import { runLogRotationInBackground, shouldRotate } from "../utils/logRotation.js";
|
|
50
|
-
import {
|
|
51
|
-
handleListApprovedTools,
|
|
52
|
-
handleRemoveApprovedTool
|
|
53
|
-
} from "../commands/approvedTools.js";
|
|
54
|
-
import {
|
|
55
|
-
addMcpServer,
|
|
56
|
-
getMcpServer,
|
|
57
|
-
listMCPServers,
|
|
58
|
-
parseEnvVars,
|
|
59
|
-
removeMcpServer,
|
|
60
|
-
getClients,
|
|
61
|
-
ensureConfigScope
|
|
62
|
-
} from "../services/mcpClient.js";
|
|
63
|
-
import { handleMcprcServerApprovals } from "../services/mcpServerApproval.js";
|
|
64
|
-
import {
|
|
65
|
-
fetchTeamConfig,
|
|
66
|
-
loadTeamConfigFromFile,
|
|
67
|
-
applyTeamConfig,
|
|
68
|
-
addMarketplaces,
|
|
69
|
-
installPlugins,
|
|
70
|
-
installRemoteAgents,
|
|
71
|
-
installInlineAgents,
|
|
72
|
-
installTeamHooks
|
|
73
|
-
} from "../utils/teamConfig.js";
|
|
74
45
|
import { cursorShow } from "ansi-escapes";
|
|
75
|
-
import {
|
|
76
|
-
getLatestVersion,
|
|
77
|
-
assertMinVersion
|
|
78
|
-
} from "../utils/autoUpdater.js";
|
|
46
|
+
import { assertMinVersion } from "../utils/autoUpdater.js";
|
|
79
47
|
import { ensureConfigDirs } from "../utils/configPaths.js";
|
|
80
48
|
import { runStartupMigration } from "../utils/migration/index.js";
|
|
81
49
|
import {
|
|
@@ -92,11 +60,6 @@ import { ConfigParseError } from "../utils/errors.js";
|
|
|
92
60
|
import { grantReadPermissionForOriginalDir } from "../utils/permissions/filesystem.js";
|
|
93
61
|
import { MACRO } from "../constants/macros.js";
|
|
94
62
|
import { SEMANTIC_COLORS } from "../constants/colors.js";
|
|
95
|
-
import {
|
|
96
|
-
needsSync as needsCCSync,
|
|
97
|
-
syncFromClaudeCode,
|
|
98
|
-
hasClaudeCodeInstallation
|
|
99
|
-
} from "../utils/claudeCodeSync.js";
|
|
100
63
|
function completeOnboarding() {
|
|
101
64
|
const config = getGlobalConfig();
|
|
102
65
|
saveGlobalConfig({
|
|
@@ -133,6 +96,7 @@ async function showSetupScreens(safeMode, print, rawModeSupported) {
|
|
|
133
96
|
}
|
|
134
97
|
await clearTerminal();
|
|
135
98
|
const { render } = await import("ink");
|
|
99
|
+
const { Onboarding } = await import("../components/Onboarding.js");
|
|
136
100
|
await new Promise((resolve) => {
|
|
137
101
|
render(
|
|
138
102
|
/* @__PURE__ */ React.createElement(
|
|
@@ -166,6 +130,7 @@ async function showSetupScreens(safeMode, print, rawModeSupported) {
|
|
|
166
130
|
};
|
|
167
131
|
(async () => {
|
|
168
132
|
const { render } = await import("ink");
|
|
133
|
+
const { TrustDialog } = await import("../components/TrustDialog.js");
|
|
169
134
|
render(/* @__PURE__ */ React.createElement(TrustDialog, { onDone }), {
|
|
170
135
|
exitOnCtrlC: false
|
|
171
136
|
});
|
|
@@ -174,6 +139,7 @@ async function showSetupScreens(safeMode, print, rawModeSupported) {
|
|
|
174
139
|
}
|
|
175
140
|
}
|
|
176
141
|
if (process.env.USER_TYPE === "ant") {
|
|
142
|
+
const { handleMcprcServerApprovals } = await import("../services/mcpServerApproval.js");
|
|
177
143
|
await handleMcprcServerApprovals();
|
|
178
144
|
}
|
|
179
145
|
}
|
|
@@ -191,12 +157,7 @@ async function setup(cwd2, safeMode) {
|
|
|
191
157
|
}
|
|
192
158
|
await setCwd(cwd2);
|
|
193
159
|
grantReadPermissionForOriginalDir();
|
|
194
|
-
|
|
195
|
-
try {
|
|
196
|
-
agentLoader = await import("../utils/agentLoader.js");
|
|
197
|
-
} catch {
|
|
198
|
-
agentLoader = await import("../utils/agentLoader.js");
|
|
199
|
-
}
|
|
160
|
+
const agentLoader = await import("../utils/agentLoader.js");
|
|
200
161
|
const { startAgentWatcher, clearAgentCache } = agentLoader;
|
|
201
162
|
await startAgentWatcher(() => {
|
|
202
163
|
console.log("\u2705 Agent configurations hot-reloaded");
|
|
@@ -231,6 +192,11 @@ async function setup(cwd2, safeMode) {
|
|
|
231
192
|
}
|
|
232
193
|
try {
|
|
233
194
|
const cfg = getGlobalConfig();
|
|
195
|
+
const {
|
|
196
|
+
hasClaudeCodeInstallation,
|
|
197
|
+
needsSync: needsCCSync,
|
|
198
|
+
syncFromClaudeCode
|
|
199
|
+
} = await import("../utils/claudeCodeSync.js");
|
|
234
200
|
if (hasClaudeCodeInstallation() && needsCCSync()) {
|
|
235
201
|
const shouldSync = cfg.autoSyncClaudeCode === true || cfg.autoSyncClaudeCode === void 0;
|
|
236
202
|
if (shouldSync) {
|
|
@@ -297,6 +263,164 @@ if (process.env.NODE_ENV !== "test") {
|
|
|
297
263
|
throw error;
|
|
298
264
|
});
|
|
299
265
|
}
|
|
266
|
+
async function runHeadlessAgent(options) {
|
|
267
|
+
const {
|
|
268
|
+
cwd: agentCwd,
|
|
269
|
+
teamName,
|
|
270
|
+
agentId,
|
|
271
|
+
agentName,
|
|
272
|
+
agentType,
|
|
273
|
+
prompt,
|
|
274
|
+
maxTurns,
|
|
275
|
+
model,
|
|
276
|
+
permissionMode,
|
|
277
|
+
planModeRequired,
|
|
278
|
+
agentColor,
|
|
279
|
+
parentSessionId
|
|
280
|
+
} = options;
|
|
281
|
+
await setCwd(agentCwd);
|
|
282
|
+
try {
|
|
283
|
+
enableConfigs();
|
|
284
|
+
} catch {
|
|
285
|
+
}
|
|
286
|
+
process.env.MINTO_TEAM_NAME = teamName;
|
|
287
|
+
process.env.CLAUDE_CODE_TEAM_NAME = teamName;
|
|
288
|
+
process.env.MINTO_AGENT_ID = agentId;
|
|
289
|
+
process.env.CLAUDE_CODE_AGENT_ID = agentId;
|
|
290
|
+
process.env.MINTO_AGENT_TYPE = agentType;
|
|
291
|
+
process.env.CLAUDE_CODE_AGENT_TYPE = agentType;
|
|
292
|
+
process.env.MINTO_AGENT_NAME = agentName;
|
|
293
|
+
process.env.CLAUDE_CODE_AGENT_NAME = agentName;
|
|
294
|
+
process.env.MINTO_HEADLESS = "1";
|
|
295
|
+
if (parentSessionId) process.env.MINTO_PARENT_SESSION_ID = parentSessionId;
|
|
296
|
+
if (agentColor) process.env.MINTO_AGENT_COLOR = agentColor;
|
|
297
|
+
if (planModeRequired) {
|
|
298
|
+
process.env.MINTO_PLAN_MODE_REQUIRED = "1";
|
|
299
|
+
process.env.CLAUDE_CODE_PLAN_MODE_REQUIRED = "1";
|
|
300
|
+
}
|
|
301
|
+
if (permissionMode) process.env.MINTO_AGENT_MODE = permissionMode;
|
|
302
|
+
const { loadTeam, getTeam } = await import("../services/agentTeams/teamManager.js");
|
|
303
|
+
const { markTeammateIdle } = await import("../services/agentTeams/teammateSpawner.js");
|
|
304
|
+
loadTeam(teamName);
|
|
305
|
+
const { getAgentPrompt } = await import("../constants/prompts/index.js");
|
|
306
|
+
const { getContext: getContext2 } = await import("../context.js");
|
|
307
|
+
const { getBuiltInTools: getBuiltInTools2 } = await import("../tools.js");
|
|
308
|
+
const { hasPermissionsToUseTool: hasPermissionsToUseTool2 } = await import("../permissions.js");
|
|
309
|
+
const { query } = await import("../query.js");
|
|
310
|
+
const { createUserMessage } = await import("../utils/messages.js");
|
|
311
|
+
const { getMaxThinkingTokens } = await import("../utils/thinking.js");
|
|
312
|
+
const { dateToFilename: dateToFilename2 } = await import("../utils/log.js");
|
|
313
|
+
let teamDiscovery = "";
|
|
314
|
+
const entry = getTeam(teamName);
|
|
315
|
+
if (entry) {
|
|
316
|
+
const otherMembers = entry.team.members.filter((m) => m.id !== agentId && m.name !== agentName).map((m) => ` - ${m.name} (${m.agentType}): ${m.status}`).join("\n");
|
|
317
|
+
if (otherMembers) {
|
|
318
|
+
teamDiscovery = `
|
|
319
|
+
Team members:
|
|
320
|
+
${otherMembers}`;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
const teamContext = `
|
|
324
|
+
# Agent Teammate Communication
|
|
325
|
+
|
|
326
|
+
You are agent "${agentName}" in team "${teamName}".
|
|
327
|
+
|
|
328
|
+
## CRITICAL: Reporting Results
|
|
329
|
+
|
|
330
|
+
**You MUST use the SendMessage tool to report your results to the team lead.** Your text output is NOT visible to the team lead or any teammate. The ONLY way to deliver your findings is via SendMessage.
|
|
331
|
+
|
|
332
|
+
When you finish your task:
|
|
333
|
+
1. Use SendMessage with type "message", recipient "team-lead", and your findings as content
|
|
334
|
+
2. Include a brief summary in the summary field
|
|
335
|
+
3. Do NOT just output text \u2014 it will be lost
|
|
336
|
+
|
|
337
|
+
## Communication
|
|
338
|
+
|
|
339
|
+
- Use SendMessage with type \`message\` to send messages to specific teammates
|
|
340
|
+
- Use SendMessage with type \`broadcast\` sparingly for team-wide announcements
|
|
341
|
+
- Do NOT send acknowledgment messages ("Got it", "\u5DF2\u6536\u5230") \u2014 only send when you have actionable content
|
|
342
|
+
- ALWAYS respond in the same language as the user's original request
|
|
343
|
+
|
|
344
|
+
Team: ${teamName}
|
|
345
|
+
Your agent ID: ${agentId}
|
|
346
|
+
Your agent type: ${agentType}${teamDiscovery}
|
|
347
|
+
`;
|
|
348
|
+
const effectivePrompt = `<system-reminder>
|
|
349
|
+
${teamContext}
|
|
350
|
+
</system-reminder>
|
|
351
|
+
|
|
352
|
+
` + prompt;
|
|
353
|
+
const messages = [createUserMessage(effectivePrompt)];
|
|
354
|
+
const agentTools = await getBuiltInTools2(false);
|
|
355
|
+
const messageLogName = dateToFilename2(/* @__PURE__ */ new Date());
|
|
356
|
+
const agentModel = model || process.env.MINTO_AGENT_MODEL || "task";
|
|
357
|
+
const [taskPrompt, context, maxThinkingTokens] = await Promise.all([
|
|
358
|
+
getAgentPrompt(),
|
|
359
|
+
getContext2(),
|
|
360
|
+
getMaxThinkingTokens(messages)
|
|
361
|
+
]);
|
|
362
|
+
const abortController = new AbortController();
|
|
363
|
+
process.on("message", (msg) => {
|
|
364
|
+
if (msg?.type === "abort" || msg?.type === "shutdown") {
|
|
365
|
+
abortController.abort();
|
|
366
|
+
}
|
|
367
|
+
});
|
|
368
|
+
let turnCount = 0;
|
|
369
|
+
try {
|
|
370
|
+
for await (const message of query(
|
|
371
|
+
messages,
|
|
372
|
+
taskPrompt,
|
|
373
|
+
context,
|
|
374
|
+
hasPermissionsToUseTool2,
|
|
375
|
+
{
|
|
376
|
+
abortController,
|
|
377
|
+
messageId: void 0,
|
|
378
|
+
options: {
|
|
379
|
+
safeMode: false,
|
|
380
|
+
tools: agentTools,
|
|
381
|
+
commands: [],
|
|
382
|
+
forkNumber: 0,
|
|
383
|
+
messageLogName,
|
|
384
|
+
verbose: false,
|
|
385
|
+
maxThinkingTokens,
|
|
386
|
+
model: agentModel
|
|
387
|
+
},
|
|
388
|
+
readFileTimestamps: {},
|
|
389
|
+
setToolJSX: () => {
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
)) {
|
|
393
|
+
messages.push(message);
|
|
394
|
+
if (message.type !== "assistant") continue;
|
|
395
|
+
if (entry) {
|
|
396
|
+
const unread = entry.mailbox.getUnread(agentId);
|
|
397
|
+
if (unread.length > 0) {
|
|
398
|
+
const {
|
|
399
|
+
formatTeamMessagesForInjection,
|
|
400
|
+
humanizeProtocolMessage
|
|
401
|
+
} = require("../services/agentTeams/messageFormatter");
|
|
402
|
+
const humanized = unread.map((m) => {
|
|
403
|
+
const friendly = humanizeProtocolMessage(m.text);
|
|
404
|
+
return friendly ? { ...m, summary: friendly } : m;
|
|
405
|
+
});
|
|
406
|
+
const deliveryText = formatTeamMessagesForInjection(humanized);
|
|
407
|
+
messages.push(createUserMessage(deliveryText));
|
|
408
|
+
entry.mailbox.markRead(unread.map((m) => m.id));
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
turnCount++;
|
|
412
|
+
if (maxTurns && turnCount >= maxTurns) break;
|
|
413
|
+
}
|
|
414
|
+
} catch (error) {
|
|
415
|
+
console.error(
|
|
416
|
+
`[headless-agent] ${agentId} error:`,
|
|
417
|
+
error instanceof Error ? error.message : error
|
|
418
|
+
);
|
|
419
|
+
}
|
|
420
|
+
await markTeammateIdle(teamName, agentId, agentName).catch(() => {
|
|
421
|
+
});
|
|
422
|
+
process.exit(0);
|
|
423
|
+
}
|
|
300
424
|
async function main() {
|
|
301
425
|
const configDirsResult = ensureConfigDirs();
|
|
302
426
|
if (configDirsResult.errors.length > 0) {
|
|
@@ -349,7 +473,8 @@ async function main() {
|
|
|
349
473
|
}
|
|
350
474
|
};
|
|
351
475
|
if (!process.stdin.isTTY && !process.env.CI && // Input hijacking breaks MCP.
|
|
352
|
-
!process.argv.includes("mcp")
|
|
476
|
+
!process.argv.includes("mcp") && // Headless agents have piped stdin with no writer — reading would block forever.
|
|
477
|
+
!process.env.MINTO_HEADLESS) {
|
|
353
478
|
inputPrompt = await stdin();
|
|
354
479
|
if (process.platform !== "win32") {
|
|
355
480
|
try {
|
|
@@ -360,6 +485,10 @@ async function main() {
|
|
|
360
485
|
}
|
|
361
486
|
}
|
|
362
487
|
}
|
|
488
|
+
if (process.env.MINTO_HEADLESS) {
|
|
489
|
+
await parseArgs(inputPrompt, renderContext, false);
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
363
492
|
const stdinStream = renderContext?.stdin || process.stdin;
|
|
364
493
|
const rawModeCheck = validateRawModeSupport(stdinStream);
|
|
365
494
|
renderContext.rawModeSupported = rawModeCheck.supported;
|
|
@@ -392,7 +521,11 @@ async function parseArgs(stdinContent, renderContext, rawModeSupported) {
|
|
|
392
521
|
|
|
393
522
|
Slash commands available during an interactive session:
|
|
394
523
|
${commandList}`
|
|
395
|
-
).argument("[prompt]", "Your prompt", String).option("
|
|
524
|
+
).argument("[prompt]", "Your prompt", String).option("--cwd <cwd>", "The current working directory", String, cwd()).option(
|
|
525
|
+
"-c, --continue",
|
|
526
|
+
"Load the most recent conversation in the current directory",
|
|
527
|
+
() => true
|
|
528
|
+
).option("-d, --debug", "Enable debug mode", () => true).option(
|
|
396
529
|
"--debug-verbose",
|
|
397
530
|
"Enable verbose debug terminal output",
|
|
398
531
|
() => true
|
|
@@ -406,7 +539,7 @@ ${commandList}`
|
|
|
406
539
|
() => true
|
|
407
540
|
).option(
|
|
408
541
|
"--free",
|
|
409
|
-
"Enable Free safety mode (
|
|
542
|
+
"Enable Free safety mode (device-wide full permission, all operations auto-allowed)",
|
|
410
543
|
() => true
|
|
411
544
|
).option(
|
|
412
545
|
"--smart",
|
|
@@ -417,13 +550,9 @@ ${commandList}`
|
|
|
417
550
|
"Enable Strict safety mode (all write operations need confirmation)",
|
|
418
551
|
() => true
|
|
419
552
|
).option(
|
|
420
|
-
"-
|
|
421
|
-
"
|
|
422
|
-
|
|
423
|
-
).option(
|
|
424
|
-
"-r, --resume",
|
|
425
|
-
"Select a previous conversation to resume",
|
|
426
|
-
() => true
|
|
553
|
+
"-r, --resume [session]",
|
|
554
|
+
"Resume a specific session by ID, or show an interactive picker to choose a session",
|
|
555
|
+
String
|
|
427
556
|
).option(
|
|
428
557
|
"-l, --lang <language>",
|
|
429
558
|
"Set interface language (en, zh-CN)",
|
|
@@ -432,6 +561,50 @@ ${commandList}`
|
|
|
432
561
|
"--plugin-dir <dir>",
|
|
433
562
|
"Additional plugin directory to scan (merged with defaults)",
|
|
434
563
|
String
|
|
564
|
+
).option(
|
|
565
|
+
"--teammate-mode <mode>",
|
|
566
|
+
"Teammate display mode: auto, in-process, tmux",
|
|
567
|
+
String
|
|
568
|
+
).option(
|
|
569
|
+
"--headless-agent",
|
|
570
|
+
"Run as a teammate agent process (internal use)",
|
|
571
|
+
() => true
|
|
572
|
+
).option("--team <name>", "Team name (used with --headless-agent)", String).option(
|
|
573
|
+
"--agent-id <id>",
|
|
574
|
+
"Agent ID within team (used with --headless-agent)",
|
|
575
|
+
String
|
|
576
|
+
).option(
|
|
577
|
+
"--agent-name <name>",
|
|
578
|
+
"Agent display name (used with --headless-agent)",
|
|
579
|
+
String
|
|
580
|
+
).option(
|
|
581
|
+
"--agent-type <type>",
|
|
582
|
+
"Agent type/role (used with --headless-agent)",
|
|
583
|
+
String
|
|
584
|
+
).option(
|
|
585
|
+
"--max-turns <n>",
|
|
586
|
+
"Maximum API round-trips (used with --headless-agent)",
|
|
587
|
+
parseInt
|
|
588
|
+
).option(
|
|
589
|
+
"--model <name>",
|
|
590
|
+
"Model to use (used with --headless-agent)",
|
|
591
|
+
String
|
|
592
|
+
).option(
|
|
593
|
+
"--permission-mode <mode>",
|
|
594
|
+
"Permission mode override (used with --headless-agent)",
|
|
595
|
+
String
|
|
596
|
+
).option(
|
|
597
|
+
"--plan-mode-required",
|
|
598
|
+
"Force plan mode for this agent (used with --headless-agent)",
|
|
599
|
+
() => true
|
|
600
|
+
).option(
|
|
601
|
+
"--agent-color <color>",
|
|
602
|
+
"Agent display color (used with --headless-agent)",
|
|
603
|
+
String
|
|
604
|
+
).option(
|
|
605
|
+
"--parent-session-id <id>",
|
|
606
|
+
"Parent session ID (used with --headless-agent)",
|
|
607
|
+
String
|
|
435
608
|
).action(
|
|
436
609
|
async (prompt, {
|
|
437
610
|
cwd: cwd2,
|
|
@@ -442,11 +615,41 @@ ${commandList}`
|
|
|
442
615
|
free,
|
|
443
616
|
smart,
|
|
444
617
|
strict,
|
|
445
|
-
|
|
446
|
-
resume:
|
|
618
|
+
continue: continueSession,
|
|
619
|
+
resume: resumeSession,
|
|
447
620
|
lang,
|
|
448
|
-
pluginDir
|
|
621
|
+
pluginDir,
|
|
622
|
+
teammateMode,
|
|
623
|
+
headlessAgent,
|
|
624
|
+
team: teamName,
|
|
625
|
+
agentId,
|
|
626
|
+
agentName,
|
|
627
|
+
agentType,
|
|
628
|
+
maxTurns,
|
|
629
|
+
model: cliModel,
|
|
630
|
+
permissionMode,
|
|
631
|
+
planModeRequired,
|
|
632
|
+
agentColor,
|
|
633
|
+
parentSessionId
|
|
449
634
|
}) => {
|
|
635
|
+
if (headlessAgent) {
|
|
636
|
+
await runHeadlessAgent({
|
|
637
|
+
cwd: cwd2,
|
|
638
|
+
teamName,
|
|
639
|
+
agentId,
|
|
640
|
+
agentName,
|
|
641
|
+
agentType,
|
|
642
|
+
prompt: prompt || "",
|
|
643
|
+
maxTurns,
|
|
644
|
+
// CLI args override env var fallbacks (CC-compatible format)
|
|
645
|
+
model: cliModel || process.env.MINTO_AGENT_MODEL,
|
|
646
|
+
permissionMode: permissionMode || process.env.MINTO_AGENT_MODE,
|
|
647
|
+
planModeRequired: planModeRequired || process.env.MINTO_PLAN_MODE_REQUIRED === "1",
|
|
648
|
+
agentColor,
|
|
649
|
+
parentSessionId: parentSessionId || process.env.MINTO_PARENT_SESSION_ID
|
|
650
|
+
});
|
|
651
|
+
return;
|
|
652
|
+
}
|
|
450
653
|
if (lang && isLanguageSupported(lang)) {
|
|
451
654
|
setLanguage(lang);
|
|
452
655
|
}
|
|
@@ -456,7 +659,7 @@ ${commandList}`
|
|
|
456
659
|
}
|
|
457
660
|
const envSafetyMode = process.env.MINTO_SAFETY_MODE;
|
|
458
661
|
const safetyMode = envSafetyMode ? envSafetyMode : strict ? "strict" : smart ? "smart" : free ? "free" : "yolo";
|
|
459
|
-
const safeMode = safetyMode !== "yolo";
|
|
662
|
+
const safeMode = safetyMode !== "yolo" && safetyMode !== "free";
|
|
460
663
|
const inkPromise = import("ink");
|
|
461
664
|
const replPromise = import("../screens/REPL.js");
|
|
462
665
|
await showSetupScreens(safeMode, print, rawModeSupported);
|
|
@@ -495,10 +698,62 @@ ${commandList}`
|
|
|
495
698
|
if (renderContext?.fallbackMode) {
|
|
496
699
|
requireRawModeOrExit(process.stdin, true);
|
|
497
700
|
}
|
|
498
|
-
if (
|
|
701
|
+
if (resumeSession) {
|
|
702
|
+
if (typeof resumeSession === "string") {
|
|
703
|
+
const logs2 = await loadLogList(CACHE_PATHS.messages());
|
|
704
|
+
const matchedLog = logs2.find(
|
|
705
|
+
(log) => log.date === resumeSession || log.fullPath.includes(resumeSession)
|
|
706
|
+
);
|
|
707
|
+
if (!matchedLog) {
|
|
708
|
+
console.error(
|
|
709
|
+
`Session not found: ${resumeSession}
|
|
710
|
+
Use "minto -r" to see available sessions.`
|
|
711
|
+
);
|
|
712
|
+
process.exit(1);
|
|
713
|
+
}
|
|
714
|
+
const { deserializeMessages } = await import("../utils/conversationRecovery.js");
|
|
715
|
+
const { render: render2 } = await inkPromise;
|
|
716
|
+
const { REPL } = await replPromise;
|
|
717
|
+
await prepareTerminalForREPL();
|
|
718
|
+
render2(
|
|
719
|
+
/* @__PURE__ */ React.createElement(
|
|
720
|
+
REPL,
|
|
721
|
+
{
|
|
722
|
+
commands,
|
|
723
|
+
debug,
|
|
724
|
+
messageLogName: matchedLog.date,
|
|
725
|
+
initialPrompt: "",
|
|
726
|
+
shouldShowPromptInput: true,
|
|
727
|
+
verbose,
|
|
728
|
+
tools,
|
|
729
|
+
safeMode,
|
|
730
|
+
safetyMode,
|
|
731
|
+
mcpClients: [],
|
|
732
|
+
isDefaultModel,
|
|
733
|
+
initialUpdateVersion: null,
|
|
734
|
+
initialUpdateCommands: null,
|
|
735
|
+
enableArchitect: enableArchitect ?? getCurrentProjectConfig().enableArchitectTool,
|
|
736
|
+
fallbackMode: renderContext?.fallbackMode,
|
|
737
|
+
initialMessages: deserializeMessages(
|
|
738
|
+
matchedLog.messages,
|
|
739
|
+
tools
|
|
740
|
+
),
|
|
741
|
+
initialForkNumber: getNextAvailableLogForkNumber(
|
|
742
|
+
matchedLog.date,
|
|
743
|
+
matchedLog.forkNumber ?? 1,
|
|
744
|
+
0
|
|
745
|
+
),
|
|
746
|
+
isResumedConversation: true
|
|
747
|
+
}
|
|
748
|
+
),
|
|
749
|
+
renderContext
|
|
750
|
+
);
|
|
751
|
+
return;
|
|
752
|
+
}
|
|
499
753
|
const logs = await loadLogList(CACHE_PATHS.messages());
|
|
500
754
|
const context2 = {};
|
|
501
755
|
const { render } = await import("ink");
|
|
756
|
+
const { ResumeConversation } = await import("../screens/ResumeConversation.js");
|
|
502
757
|
const { unmount } = render(
|
|
503
758
|
/* @__PURE__ */ React.createElement(
|
|
504
759
|
ResumeConversation,
|
|
@@ -515,8 +770,54 @@ ${commandList}`
|
|
|
515
770
|
context2.unmount = unmount;
|
|
516
771
|
return;
|
|
517
772
|
}
|
|
773
|
+
if (continueSession) {
|
|
774
|
+
const logs = await loadLogList(CACHE_PATHS.messages());
|
|
775
|
+
const projectLog = logs.find((log) => {
|
|
776
|
+
const firstMsg = log.messages[0];
|
|
777
|
+
return firstMsg?.cwd === cwd2;
|
|
778
|
+
});
|
|
779
|
+
if (projectLog) {
|
|
780
|
+
const { deserializeMessages } = await import("../utils/conversationRecovery.js");
|
|
781
|
+
const { render } = await inkPromise;
|
|
782
|
+
const { REPL } = await replPromise;
|
|
783
|
+
await prepareTerminalForREPL();
|
|
784
|
+
render(
|
|
785
|
+
/* @__PURE__ */ React.createElement(
|
|
786
|
+
REPL,
|
|
787
|
+
{
|
|
788
|
+
commands,
|
|
789
|
+
debug,
|
|
790
|
+
messageLogName: projectLog.date,
|
|
791
|
+
initialPrompt: inputPrompt || "",
|
|
792
|
+
shouldShowPromptInput: true,
|
|
793
|
+
verbose,
|
|
794
|
+
tools,
|
|
795
|
+
safeMode,
|
|
796
|
+
safetyMode,
|
|
797
|
+
mcpClients: [],
|
|
798
|
+
isDefaultModel,
|
|
799
|
+
initialUpdateVersion: null,
|
|
800
|
+
initialUpdateCommands: null,
|
|
801
|
+
enableArchitect: enableArchitect ?? getCurrentProjectConfig().enableArchitectTool,
|
|
802
|
+
fallbackMode: renderContext?.fallbackMode,
|
|
803
|
+
initialMessages: deserializeMessages(
|
|
804
|
+
projectLog.messages,
|
|
805
|
+
tools
|
|
806
|
+
),
|
|
807
|
+
initialForkNumber: getNextAvailableLogForkNumber(
|
|
808
|
+
projectLog.date,
|
|
809
|
+
projectLog.forkNumber ?? 1,
|
|
810
|
+
0
|
|
811
|
+
),
|
|
812
|
+
isResumedConversation: true
|
|
813
|
+
}
|
|
814
|
+
),
|
|
815
|
+
renderContext
|
|
816
|
+
);
|
|
817
|
+
return;
|
|
818
|
+
}
|
|
819
|
+
}
|
|
518
820
|
const messageLogName = dateToFilename(/* @__PURE__ */ new Date());
|
|
519
|
-
const shouldAutoResume = !startNew && !inputPrompt;
|
|
520
821
|
{
|
|
521
822
|
const { render } = await inkPromise;
|
|
522
823
|
const { REPL } = await replPromise;
|
|
@@ -539,8 +840,7 @@ ${commandList}`
|
|
|
539
840
|
initialUpdateVersion: null,
|
|
540
841
|
initialUpdateCommands: null,
|
|
541
842
|
enableArchitect: enableArchitect ?? getCurrentProjectConfig().enableArchitectTool,
|
|
542
|
-
fallbackMode: renderContext?.fallbackMode
|
|
543
|
-
autoResume: shouldAutoResume
|
|
843
|
+
fallbackMode: renderContext?.fallbackMode
|
|
544
844
|
}
|
|
545
845
|
),
|
|
546
846
|
renderContext
|
|
@@ -552,24 +852,24 @@ ${commandList}`
|
|
|
552
852
|
const config = program.command("config").description(
|
|
553
853
|
`Manage configuration (eg. ${PRODUCT_COMMAND} config set -g theme dark)`
|
|
554
854
|
);
|
|
555
|
-
config.command("get <key>").description("Get a config value").option("
|
|
855
|
+
config.command("get <key>").description("Get a config value").option("--cwd <cwd>", "The current working directory", String, cwd()).option("-g, --global", "Use global config").action(async (key, { cwd: cwd2, global }) => {
|
|
556
856
|
await setup(cwd2, false);
|
|
557
857
|
console.log(getConfigForCLI(key, global ?? false));
|
|
558
858
|
process.exit(0);
|
|
559
859
|
});
|
|
560
|
-
config.command("set <key> <value>").description("Set a config value").option("
|
|
860
|
+
config.command("set <key> <value>").description("Set a config value").option("--cwd <cwd>", "The current working directory", String, cwd()).option("-g, --global", "Use global config").action(async (key, value, { cwd: cwd2, global }) => {
|
|
561
861
|
await setup(cwd2, false);
|
|
562
862
|
setConfigForCLI(key, value, global ?? false);
|
|
563
863
|
console.log(`Set ${key} to ${value}`);
|
|
564
864
|
process.exit(0);
|
|
565
865
|
});
|
|
566
|
-
config.command("remove <key>").description("Remove a config value").option("
|
|
866
|
+
config.command("remove <key>").description("Remove a config value").option("--cwd <cwd>", "The current working directory", String, cwd()).option("-g, --global", "Use global config").action(async (key, { cwd: cwd2, global }) => {
|
|
567
867
|
await setup(cwd2, false);
|
|
568
868
|
deleteConfigForCLI(key, global ?? false);
|
|
569
869
|
console.log(`Removed ${key}`);
|
|
570
870
|
process.exit(0);
|
|
571
871
|
});
|
|
572
|
-
config.command("list").description("List all config values").option("
|
|
872
|
+
config.command("list").description("List all config values").option("--cwd <cwd>", "The current working directory", String, cwd()).option("-g, --global", "Use global config", false).action(async ({ cwd: cwd2, global }) => {
|
|
573
873
|
await setup(cwd2, false);
|
|
574
874
|
console.log(
|
|
575
875
|
JSON.stringify(
|
|
@@ -595,6 +895,16 @@ ${commandList}`
|
|
|
595
895
|
plugins: shouldInstallPlugins
|
|
596
896
|
} = options;
|
|
597
897
|
try {
|
|
898
|
+
const {
|
|
899
|
+
fetchTeamConfig,
|
|
900
|
+
loadTeamConfigFromFile,
|
|
901
|
+
applyTeamConfig,
|
|
902
|
+
addMarketplaces,
|
|
903
|
+
installPlugins,
|
|
904
|
+
installRemoteAgents,
|
|
905
|
+
installInlineAgents,
|
|
906
|
+
installTeamHooks
|
|
907
|
+
} = await import("../utils/teamConfig.js");
|
|
598
908
|
console.log(`Loading configuration from ${source}...`);
|
|
599
909
|
const teamConfig = source.startsWith("http://") || source.startsWith("https://") ? await fetchTeamConfig(source) : loadTeamConfigFromFile(source);
|
|
600
910
|
console.log("Applying configuration...");
|
|
@@ -688,13 +998,21 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
688
998
|
}
|
|
689
999
|
}
|
|
690
1000
|
);
|
|
1001
|
+
program.command("login").description("Login and auto-configure available models").option("-u, --user <user>", "Username").option("-p, --password <password>", "Password").action(async (options) => {
|
|
1002
|
+
await setup(getCwd(), false);
|
|
1003
|
+
const { handleLoginCLI } = await import("../services/mintoAuth.js");
|
|
1004
|
+
await handleLoginCLI(options.user, options.password);
|
|
1005
|
+
process.exit(0);
|
|
1006
|
+
});
|
|
691
1007
|
const allowedTools = program.command("approved-tools").description("Manage approved tools");
|
|
692
1008
|
allowedTools.command("list").description("List all approved tools").action(async () => {
|
|
1009
|
+
const { handleListApprovedTools } = await import("../commands/approvedTools.js");
|
|
693
1010
|
const result = handleListApprovedTools(getCwd());
|
|
694
1011
|
console.log(result);
|
|
695
1012
|
process.exit(0);
|
|
696
1013
|
});
|
|
697
1014
|
allowedTools.command("remove <tool>").description("Remove a tool from the list of approved tools").action(async (tool) => {
|
|
1015
|
+
const { handleRemoveApprovedTool } = await import("../commands/approvedTools.js");
|
|
698
1016
|
const result = handleRemoveApprovedTool(tool);
|
|
699
1017
|
console.log(result.message);
|
|
700
1018
|
process.exit(result.success ? 0 : 1);
|
|
@@ -708,6 +1026,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
708
1026
|
}
|
|
709
1027
|
try {
|
|
710
1028
|
await setup(providedCwd, false);
|
|
1029
|
+
const { startMCPServer } = await import("./mcp.js");
|
|
711
1030
|
await startMCPServer(providedCwd);
|
|
712
1031
|
} catch (error) {
|
|
713
1032
|
console.error("Error: Failed to start MCP server:", error);
|
|
@@ -720,6 +1039,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
720
1039
|
"project"
|
|
721
1040
|
).action(async (name, url, options) => {
|
|
722
1041
|
try {
|
|
1042
|
+
const { addMcpServer, ensureConfigScope } = await import("../services/mcpClient.js");
|
|
723
1043
|
const scope = ensureConfigScope(options.scope);
|
|
724
1044
|
addMcpServer(name, { type: "sse", url }, scope);
|
|
725
1045
|
console.log(
|
|
@@ -740,6 +1060,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
740
1060
|
"Set environment variables (e.g. -e KEY=value)"
|
|
741
1061
|
).action(async (name, commandOrUrl, args, options) => {
|
|
742
1062
|
try {
|
|
1063
|
+
const { addMcpServer, parseEnvVars, ensureConfigScope } = await import("../services/mcpClient.js");
|
|
743
1064
|
if (!name) {
|
|
744
1065
|
console.log("Interactive wizard mode: Enter the server details");
|
|
745
1066
|
const { createInterface } = await import("readline");
|
|
@@ -847,6 +1168,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
847
1168
|
"project"
|
|
848
1169
|
).action(async (name, options) => {
|
|
849
1170
|
try {
|
|
1171
|
+
const { removeMcpServer, ensureConfigScope } = await import("../services/mcpClient.js");
|
|
850
1172
|
const scope = ensureConfigScope(options.scope);
|
|
851
1173
|
removeMcpServer(name, scope);
|
|
852
1174
|
console.log(`Removed MCP server ${name} from ${scope} config`);
|
|
@@ -856,7 +1178,8 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
856
1178
|
process.exit(1);
|
|
857
1179
|
}
|
|
858
1180
|
});
|
|
859
|
-
mcp.command("list").description("List configured MCP servers").action(() => {
|
|
1181
|
+
mcp.command("list").description("List configured MCP servers").action(async () => {
|
|
1182
|
+
const { listMCPServers } = await import("../services/mcpClient.js");
|
|
860
1183
|
const servers = listMCPServers();
|
|
861
1184
|
if (Object.keys(servers).length === 0) {
|
|
862
1185
|
console.log(
|
|
@@ -883,6 +1206,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
883
1206
|
"project"
|
|
884
1207
|
).action(async (name, jsonStr, options) => {
|
|
885
1208
|
try {
|
|
1209
|
+
const { addMcpServer, ensureConfigScope } = await import("../services/mcpClient.js");
|
|
886
1210
|
const scope = ensureConfigScope(options.scope);
|
|
887
1211
|
let serverConfig;
|
|
888
1212
|
try {
|
|
@@ -919,7 +1243,8 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
919
1243
|
process.exit(1);
|
|
920
1244
|
}
|
|
921
1245
|
});
|
|
922
|
-
mcp.command("get <name>").description("Get details about an MCP server").action((name) => {
|
|
1246
|
+
mcp.command("get <name>").description("Get details about an MCP server").action(async (name) => {
|
|
1247
|
+
const { getMcpServer } = await import("../services/mcpClient.js");
|
|
923
1248
|
const server = getMcpServer(name);
|
|
924
1249
|
if (!server) {
|
|
925
1250
|
console.error(`No MCP server found with name: ${name}`);
|
|
@@ -954,6 +1279,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
954
1279
|
"project"
|
|
955
1280
|
).action(async (options) => {
|
|
956
1281
|
try {
|
|
1282
|
+
const { addMcpServer, getMcpServer, ensureConfigScope } = await import("../services/mcpClient.js");
|
|
957
1283
|
const scope = ensureConfigScope(options.scope);
|
|
958
1284
|
const platform = process.platform;
|
|
959
1285
|
const { existsSync: existsSync2, readFileSync } = await import("fs");
|
|
@@ -1163,6 +1489,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
1163
1489
|
program.command("update").description("Show manual upgrade commands (no auto-install)").action(async () => {
|
|
1164
1490
|
console.log(`Current version: ${MACRO.VERSION}`);
|
|
1165
1491
|
console.log("Checking for updates...");
|
|
1492
|
+
const { getLatestVersion } = await import("../utils/autoUpdater.js");
|
|
1166
1493
|
const latestVersion = await getLatestVersion();
|
|
1167
1494
|
if (!latestVersion) {
|
|
1168
1495
|
console.error("Failed to check for updates");
|
|
@@ -1173,8 +1500,8 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
1173
1500
|
process.exit(0);
|
|
1174
1501
|
}
|
|
1175
1502
|
console.log(`New version available: ${latestVersion}`);
|
|
1176
|
-
const { getUpdateCommandSuggestions
|
|
1177
|
-
const cmds = await
|
|
1503
|
+
const { getUpdateCommandSuggestions } = await import("../utils/autoUpdater.js");
|
|
1504
|
+
const cmds = await getUpdateCommandSuggestions();
|
|
1178
1505
|
console.log("\nRun one of the following commands to update:");
|
|
1179
1506
|
for (const c of cmds) console.log(` ${c}`);
|
|
1180
1507
|
if (process.platform !== "win32") {
|
|
@@ -1188,11 +1515,12 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
1188
1515
|
"[number]",
|
|
1189
1516
|
"A number (0, 1, 2, etc.) to display a specific log",
|
|
1190
1517
|
parseInt
|
|
1191
|
-
).option("
|
|
1518
|
+
).option("--cwd <cwd>", "The current working directory", String, cwd()).action(async (number, { cwd: cwd2 }) => {
|
|
1192
1519
|
await setup(cwd2, false);
|
|
1193
1520
|
const context2 = {};
|
|
1194
1521
|
(async () => {
|
|
1195
1522
|
const { render } = await import("ink");
|
|
1523
|
+
const { LogList } = await import("../screens/LogList.js");
|
|
1196
1524
|
const { unmount } = render(
|
|
1197
1525
|
/* @__PURE__ */ React.createElement(LogList, { context: context2, type: "messages", logNumber: number }),
|
|
1198
1526
|
renderContextWithExitOnCtrlC
|
|
@@ -1205,9 +1533,9 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
1205
1533
|
).argument(
|
|
1206
1534
|
"[identifier]",
|
|
1207
1535
|
"A number (0, 1, 2, etc.) or file path to resume a specific conversation"
|
|
1208
|
-
).option("
|
|
1536
|
+
).option("--cwd <cwd>", "The current working directory", String, cwd()).option("-e, --enable-architect", "Enable the Architect tool", () => true).option("-v, --verbose", "Do not truncate message output", () => true).option(
|
|
1209
1537
|
"--free",
|
|
1210
|
-
"Enable Free safety mode (
|
|
1538
|
+
"Enable Free safety mode (device-wide full permission, all operations auto-allowed)",
|
|
1211
1539
|
() => true
|
|
1212
1540
|
).option(
|
|
1213
1541
|
"--smart",
|
|
@@ -1221,9 +1549,10 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
1221
1549
|
async (identifier, { cwd: cwd2, enableArchitect, free, smart, strict, verbose }) => {
|
|
1222
1550
|
const envSafetyMode = process.env.MINTO_SAFETY_MODE;
|
|
1223
1551
|
const safetyMode = envSafetyMode ? envSafetyMode : strict ? "strict" : smart ? "smart" : free ? "free" : "yolo";
|
|
1224
|
-
const safeMode = safetyMode !== "yolo";
|
|
1552
|
+
const safeMode = safetyMode !== "yolo" && safetyMode !== "free";
|
|
1225
1553
|
await setup(cwd2, safeMode);
|
|
1226
1554
|
assertMinVersion();
|
|
1555
|
+
const { getClients } = await import("../services/mcpClient.js");
|
|
1227
1556
|
const [tools, commands2, logs, mcpClients] = await Promise.all([
|
|
1228
1557
|
getTools(
|
|
1229
1558
|
enableArchitect ?? getCurrentProjectConfig().enableArchitectTool
|
|
@@ -1295,6 +1624,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
1295
1624
|
const context2 = {};
|
|
1296
1625
|
(async () => {
|
|
1297
1626
|
const { render } = await import("ink");
|
|
1627
|
+
const { ResumeConversation } = await import("../screens/ResumeConversation.js");
|
|
1298
1628
|
const { unmount } = render(
|
|
1299
1629
|
/* @__PURE__ */ React.createElement(
|
|
1300
1630
|
ResumeConversation,
|
|
@@ -1319,11 +1649,12 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
1319
1649
|
"[number]",
|
|
1320
1650
|
"A number (0, 1, 2, etc.) to display a specific log",
|
|
1321
1651
|
parseInt
|
|
1322
|
-
).option("
|
|
1652
|
+
).option("--cwd <cwd>", "The current working directory", String, cwd()).action(async (number, { cwd: cwd2 }) => {
|
|
1323
1653
|
await setup(cwd2, false);
|
|
1324
1654
|
const context2 = {};
|
|
1325
1655
|
(async () => {
|
|
1326
1656
|
const { render } = await import("ink");
|
|
1657
|
+
const { LogList } = await import("../screens/LogList.js");
|
|
1327
1658
|
const { unmount } = render(
|
|
1328
1659
|
/* @__PURE__ */ React.createElement(LogList, { context: context2, type: "errors", logNumber: number }),
|
|
1329
1660
|
renderContextWithExitOnCtrlC
|
|
@@ -1334,7 +1665,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
1334
1665
|
const context = program.command("context").description(
|
|
1335
1666
|
`Set static context (eg. ${PRODUCT_COMMAND} context add-file ./src/*.py)`
|
|
1336
1667
|
);
|
|
1337
|
-
context.command("get <key>").option("
|
|
1668
|
+
context.command("get <key>").option("--cwd <cwd>", "The current working directory", String, cwd()).description("Get a value from context").action(async (key, { cwd: cwd2 }) => {
|
|
1338
1669
|
await setup(cwd2, false);
|
|
1339
1670
|
const context2 = omit(
|
|
1340
1671
|
await getContext(),
|
|
@@ -1344,13 +1675,13 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
1344
1675
|
console.log(context2[key]);
|
|
1345
1676
|
process.exit(0);
|
|
1346
1677
|
});
|
|
1347
|
-
context.command("set <key> <value>").description("Set a value in context").option("
|
|
1678
|
+
context.command("set <key> <value>").description("Set a value in context").option("--cwd <cwd>", "The current working directory", String, cwd()).action(async (key, value, { cwd: cwd2 }) => {
|
|
1348
1679
|
await setup(cwd2, false);
|
|
1349
1680
|
setContext(key, value);
|
|
1350
1681
|
console.log(`Set context.${key} to "${value}"`);
|
|
1351
1682
|
process.exit(0);
|
|
1352
1683
|
});
|
|
1353
|
-
context.command("list").description("List all context values").option("
|
|
1684
|
+
context.command("list").description("List all context values").option("--cwd <cwd>", "The current working directory", String, cwd()).action(async ({ cwd: cwd2 }) => {
|
|
1354
1685
|
await setup(cwd2, false);
|
|
1355
1686
|
const context2 = omit(
|
|
1356
1687
|
await getContext(),
|
|
@@ -1361,7 +1692,7 @@ Run "${PRODUCT_COMMAND}" to start using your configured setup.`
|
|
|
1361
1692
|
console.log(JSON.stringify(context2, null, 2));
|
|
1362
1693
|
process.exit(0);
|
|
1363
1694
|
});
|
|
1364
|
-
context.command("remove <key>").description("Remove a value from context").option("
|
|
1695
|
+
context.command("remove <key>").description("Remove a value from context").option("--cwd <cwd>", "The current working directory", String, cwd()).action(async (key, { cwd: cwd2 }) => {
|
|
1365
1696
|
await setup(cwd2, false);
|
|
1366
1697
|
removeContext(key);
|
|
1367
1698
|
console.log(`Removed context.${key}`);
|