@within-7/minto 0.0.5-dev.1
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/LICENSE +201 -0
- package/README.md +1097 -0
- package/README.zh-CN.md +1097 -0
- package/cli.js +59 -0
- package/dist/Tool.js +1 -0
- package/dist/Tool.js.map +7 -0
- package/dist/commands/agents.js +2086 -0
- package/dist/commands/agents.js.map +7 -0
- package/dist/commands/approvedTools.js +36 -0
- package/dist/commands/approvedTools.js.map +7 -0
- package/dist/commands/bug.js +21 -0
- package/dist/commands/bug.js.map +7 -0
- package/dist/commands/build.js +74 -0
- package/dist/commands/build.js.map +7 -0
- package/dist/commands/clear.js +37 -0
- package/dist/commands/clear.js.map +7 -0
- package/dist/commands/compact.js +82 -0
- package/dist/commands/compact.js.map +7 -0
- package/dist/commands/compression.js +57 -0
- package/dist/commands/compression.js.map +7 -0
- package/dist/commands/config.js +20 -0
- package/dist/commands/config.js.map +7 -0
- package/dist/commands/cost.js +19 -0
- package/dist/commands/cost.js.map +7 -0
- package/dist/commands/ctx_viz.js +152 -0
- package/dist/commands/ctx_viz.js.map +7 -0
- package/dist/commands/doctor.js +25 -0
- package/dist/commands/doctor.js.map +7 -0
- package/dist/commands/help.js +20 -0
- package/dist/commands/help.js.map +7 -0
- package/dist/commands/init.js +38 -0
- package/dist/commands/init.js.map +7 -0
- package/dist/commands/listen.js +37 -0
- package/dist/commands/listen.js.map +7 -0
- package/dist/commands/login.js +37 -0
- package/dist/commands/login.js.map +7 -0
- package/dist/commands/logout.js +33 -0
- package/dist/commands/logout.js.map +7 -0
- package/dist/commands/mcp-interactive.js +267 -0
- package/dist/commands/mcp-interactive.js.map +7 -0
- package/dist/commands/mcp.js +40 -0
- package/dist/commands/mcp.js.map +7 -0
- package/dist/commands/mcp_refresh.js +40 -0
- package/dist/commands/mcp_refresh.js.map +7 -0
- package/dist/commands/model.js +41 -0
- package/dist/commands/model.js.map +7 -0
- package/dist/commands/modelstatus.js +21 -0
- package/dist/commands/modelstatus.js.map +7 -0
- package/dist/commands/onboarding.js +36 -0
- package/dist/commands/onboarding.js.map +7 -0
- package/dist/commands/plugin/AddMarketplaceForm.js +62 -0
- package/dist/commands/plugin/AddMarketplaceForm.js.map +7 -0
- package/dist/commands/plugin/ConfirmDialog.js +71 -0
- package/dist/commands/plugin/ConfirmDialog.js.map +7 -0
- package/dist/commands/plugin/ErrorView.js +33 -0
- package/dist/commands/plugin/ErrorView.js.map +7 -0
- package/dist/commands/plugin/InstalledPluginsByMarketplace.js +135 -0
- package/dist/commands/plugin/InstalledPluginsByMarketplace.js.map +7 -0
- package/dist/commands/plugin/InstalledPluginsManager.js +99 -0
- package/dist/commands/plugin/InstalledPluginsManager.js.map +7 -0
- package/dist/commands/plugin/LoadingView.js +14 -0
- package/dist/commands/plugin/LoadingView.js.map +7 -0
- package/dist/commands/plugin/MainMenu.js +57 -0
- package/dist/commands/plugin/MainMenu.js.map +7 -0
- package/dist/commands/plugin/MarketplaceManager.js +155 -0
- package/dist/commands/plugin/MarketplaceManager.js.map +7 -0
- package/dist/commands/plugin/MarketplaceSelector.js +119 -0
- package/dist/commands/plugin/MarketplaceSelector.js.map +7 -0
- package/dist/commands/plugin/PlaceholderScreen.js +16 -0
- package/dist/commands/plugin/PlaceholderScreen.js.map +7 -0
- package/dist/commands/plugin/PluginBrowser.js +180 -0
- package/dist/commands/plugin/PluginBrowser.js.map +7 -0
- package/dist/commands/plugin/PluginDetailsInstall.js +152 -0
- package/dist/commands/plugin/PluginDetailsInstall.js.map +7 -0
- package/dist/commands/plugin/PluginDetailsManage.js +200 -0
- package/dist/commands/plugin/PluginDetailsManage.js.map +7 -0
- package/dist/commands/plugin/components.js +16 -0
- package/dist/commands/plugin/components.js.map +7 -0
- package/dist/commands/plugin/example-usage.js +63 -0
- package/dist/commands/plugin/example-usage.js.map +7 -0
- package/dist/commands/plugin/types.js +1 -0
- package/dist/commands/plugin/types.js.map +7 -0
- package/dist/commands/plugin/utils.js +77 -0
- package/dist/commands/plugin/utils.js.map +7 -0
- package/dist/commands/plugin-interactive.js +446 -0
- package/dist/commands/plugin-interactive.js.map +7 -0
- package/dist/commands/plugin.js +523 -0
- package/dist/commands/plugin.js.map +7 -0
- package/dist/commands/pr_comments.js +61 -0
- package/dist/commands/pr_comments.js.map +7 -0
- package/dist/commands/quit.js +16 -0
- package/dist/commands/quit.js.map +7 -0
- package/dist/commands/refreshCommands.js +43 -0
- package/dist/commands/refreshCommands.js.map +7 -0
- package/dist/commands/release-notes.js +30 -0
- package/dist/commands/release-notes.js.map +7 -0
- package/dist/commands/resume.js +35 -0
- package/dist/commands/resume.js.map +7 -0
- package/dist/commands/review.js +51 -0
- package/dist/commands/review.js.map +7 -0
- package/dist/commands/terminalSetup.js +164 -0
- package/dist/commands/terminalSetup.js.map +7 -0
- package/dist/commands.js +104 -0
- package/dist/commands.js.map +7 -0
- package/dist/components/AgentResponseBlock.js +41 -0
- package/dist/components/AgentResponseBlock.js.map +7 -0
- package/dist/components/AgentThinkingBlock.js +40 -0
- package/dist/components/AgentThinkingBlock.js.map +7 -0
- package/dist/components/AsciiLogo.js +19 -0
- package/dist/components/AsciiLogo.js.map +7 -0
- package/dist/components/BackgroundTasksPanel.js +124 -0
- package/dist/components/BackgroundTasksPanel.js.map +7 -0
- package/dist/components/Bug.js +147 -0
- package/dist/components/Bug.js.map +7 -0
- package/dist/components/Config.js +166 -0
- package/dist/components/Config.js.map +7 -0
- package/dist/components/ConsoleOAuthFlow.js +178 -0
- package/dist/components/ConsoleOAuthFlow.js.map +7 -0
- package/dist/components/Cost.js +13 -0
- package/dist/components/Cost.js.map +7 -0
- package/dist/components/CostThresholdDialog.js +38 -0
- package/dist/components/CostThresholdDialog.js.map +7 -0
- package/dist/components/CustomSelect/option-map.js +32 -0
- package/dist/components/CustomSelect/option-map.js.map +7 -0
- package/dist/components/CustomSelect/select-option.js +34 -0
- package/dist/components/CustomSelect/select-option.js.map +7 -0
- package/dist/components/CustomSelect/select.js +64 -0
- package/dist/components/CustomSelect/select.js.map +7 -0
- package/dist/components/CustomSelect/theme.js +1 -0
- package/dist/components/CustomSelect/theme.js.map +7 -0
- package/dist/components/CustomSelect/use-select-state.js +220 -0
- package/dist/components/CustomSelect/use-select-state.js.map +7 -0
- package/dist/components/CustomSelect/use-select.js +21 -0
- package/dist/components/CustomSelect/use-select.js.map +7 -0
- package/dist/components/FallbackToolUseRejectedMessage.js +11 -0
- package/dist/components/FallbackToolUseRejectedMessage.js.map +7 -0
- package/dist/components/FileEditToolUpdatedMessage.js +32 -0
- package/dist/components/FileEditToolUpdatedMessage.js.map +7 -0
- package/dist/components/HeaderBar.js +57 -0
- package/dist/components/HeaderBar.js.map +7 -0
- package/dist/components/Help.js +46 -0
- package/dist/components/Help.js.map +7 -0
- package/dist/components/HighlightedCode.js +30 -0
- package/dist/components/HighlightedCode.js.map +7 -0
- package/dist/components/HistorySearchOverlay.js +48 -0
- package/dist/components/HistorySearchOverlay.js.map +7 -0
- package/dist/components/InteractionRoundBlock.js +56 -0
- package/dist/components/InteractionRoundBlock.js.map +7 -0
- package/dist/components/InvalidConfigDialog.js +83 -0
- package/dist/components/InvalidConfigDialog.js.map +7 -0
- package/dist/components/Link.js +18 -0
- package/dist/components/Link.js.map +7 -0
- package/dist/components/LogSelector.js +50 -0
- package/dist/components/LogSelector.js.map +7 -0
- package/dist/components/Logo.js +96 -0
- package/dist/components/Logo.js.map +7 -0
- package/dist/components/MCPServerApprovalDialog.js +79 -0
- package/dist/components/MCPServerApprovalDialog.js.map +7 -0
- package/dist/components/MCPServerDialogCopy.js +11 -0
- package/dist/components/MCPServerDialogCopy.js.map +7 -0
- package/dist/components/MCPServerMultiselectDialog.js +80 -0
- package/dist/components/MCPServerMultiselectDialog.js.map +7 -0
- package/dist/components/Message.js +146 -0
- package/dist/components/Message.js.map +7 -0
- package/dist/components/MessageResponse.js +9 -0
- package/dist/components/MessageResponse.js.map +7 -0
- package/dist/components/MessageSelector.js +125 -0
- package/dist/components/MessageSelector.js.map +7 -0
- package/dist/components/ModeIndicator.js +38 -0
- package/dist/components/ModeIndicator.js.map +7 -0
- package/dist/components/ModelConfig.js +208 -0
- package/dist/components/ModelConfig.js.map +7 -0
- package/dist/components/ModelListManager.js +140 -0
- package/dist/components/ModelListManager.js.map +7 -0
- package/dist/components/ModelSelector.js +2062 -0
- package/dist/components/ModelSelector.js.map +7 -0
- package/dist/components/ModelStatusDisplay.js +87 -0
- package/dist/components/ModelStatusDisplay.js.map +7 -0
- package/dist/components/Onboarding.js +153 -0
- package/dist/components/Onboarding.js.map +7 -0
- package/dist/components/PressEnterToContinue.js +10 -0
- package/dist/components/PressEnterToContinue.js.map +7 -0
- package/dist/components/ProjectOnboarding.js +99 -0
- package/dist/components/ProjectOnboarding.js.map +7 -0
- package/dist/components/PromptInput.js +755 -0
- package/dist/components/PromptInput.js.map +7 -0
- package/dist/components/QuitSummary.js +81 -0
- package/dist/components/QuitSummary.js.map +7 -0
- package/dist/components/SentryErrorBoundary.js +27 -0
- package/dist/components/SentryErrorBoundary.js.map +7 -0
- package/dist/components/Spinner.js +101 -0
- package/dist/components/Spinner.js.map +7 -0
- package/dist/components/SpinnerSymbol.js +78 -0
- package/dist/components/SpinnerSymbol.js.map +7 -0
- package/dist/components/StreamingBashOutput.js +70 -0
- package/dist/components/StreamingBashOutput.js.map +7 -0
- package/dist/components/StructuredDiff.js +148 -0
- package/dist/components/StructuredDiff.js.map +7 -0
- package/dist/components/SubagentBlock.js +157 -0
- package/dist/components/SubagentBlock.js.map +7 -0
- package/dist/components/SubagentManager.js +65 -0
- package/dist/components/SubagentManager.js.map +7 -0
- package/dist/components/SubagentProgress.js +109 -0
- package/dist/components/SubagentProgress.js.map +7 -0
- package/dist/components/SubagentStatusMarker.js +37 -0
- package/dist/components/SubagentStatusMarker.js.map +7 -0
- package/dist/components/TaskCard.js +170 -0
- package/dist/components/TaskCard.js.map +7 -0
- package/dist/components/TextInput.js +100 -0
- package/dist/components/TextInput.js.map +7 -0
- package/dist/components/TimelineRenderer.js +31 -0
- package/dist/components/TimelineRenderer.js.map +7 -0
- package/dist/components/TodoChangeBlock.js +29 -0
- package/dist/components/TodoChangeBlock.js.map +7 -0
- package/dist/components/TodoChangeLine.js +22 -0
- package/dist/components/TodoChangeLine.js.map +7 -0
- package/dist/components/TodoItem.js +35 -0
- package/dist/components/TodoItem.js.map +7 -0
- package/dist/components/TodoPanel.js +55 -0
- package/dist/components/TodoPanel.js.map +7 -0
- package/dist/components/TokenWarning.js +19 -0
- package/dist/components/TokenWarning.js.map +7 -0
- package/dist/components/ToolExecutionBlock.js +18 -0
- package/dist/components/ToolExecutionBlock.js.map +7 -0
- package/dist/components/ToolUseLoader.js +24 -0
- package/dist/components/ToolUseLoader.js.map +7 -0
- package/dist/components/TrustDialog.js +71 -0
- package/dist/components/TrustDialog.js.map +7 -0
- package/dist/components/UserQueryBlock.js +12 -0
- package/dist/components/UserQueryBlock.js.map +7 -0
- package/dist/components/binary-feedback/BinaryFeedback.js +50 -0
- package/dist/components/binary-feedback/BinaryFeedback.js.map +7 -0
- package/dist/components/binary-feedback/BinaryFeedbackOption.js +94 -0
- package/dist/components/binary-feedback/BinaryFeedbackOption.js.map +7 -0
- package/dist/components/binary-feedback/BinaryFeedbackView.js +139 -0
- package/dist/components/binary-feedback/BinaryFeedbackView.js.map +7 -0
- package/dist/components/binary-feedback/utils.js +108 -0
- package/dist/components/binary-feedback/utils.js.map +7 -0
- package/dist/components/messages/AssistantBashOutputMessage.js +23 -0
- package/dist/components/messages/AssistantBashOutputMessage.js.map +7 -0
- package/dist/components/messages/AssistantLocalCommandOutputMessage.js +36 -0
- package/dist/components/messages/AssistantLocalCommandOutputMessage.js.map +7 -0
- package/dist/components/messages/AssistantRedactedThinkingMessage.js +12 -0
- package/dist/components/messages/AssistantRedactedThinkingMessage.js.map +7 -0
- package/dist/components/messages/AssistantTextMessage.js +78 -0
- package/dist/components/messages/AssistantTextMessage.js.map +7 -0
- package/dist/components/messages/AssistantThinkingMessage.js +27 -0
- package/dist/components/messages/AssistantThinkingMessage.js.map +7 -0
- package/dist/components/messages/AssistantToolUseMessage.js +91 -0
- package/dist/components/messages/AssistantToolUseMessage.js.map +7 -0
- package/dist/components/messages/TaskProgressMessage.js +11 -0
- package/dist/components/messages/TaskProgressMessage.js.map +7 -0
- package/dist/components/messages/TaskToolMessage.js +39 -0
- package/dist/components/messages/TaskToolMessage.js.map +7 -0
- package/dist/components/messages/UserBashInputMessage.js +18 -0
- package/dist/components/messages/UserBashInputMessage.js.map +7 -0
- package/dist/components/messages/UserCommandMessage.js +20 -0
- package/dist/components/messages/UserCommandMessage.js.map +7 -0
- package/dist/components/messages/UserKodingInputMessage.js +18 -0
- package/dist/components/messages/UserKodingInputMessage.js.map +7 -0
- package/dist/components/messages/UserPromptMessage.js +20 -0
- package/dist/components/messages/UserPromptMessage.js.map +7 -0
- package/dist/components/messages/UserTextMessage.js +25 -0
- package/dist/components/messages/UserTextMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js +10 -0
- package/dist/components/messages/UserToolResultMessage/UserToolCanceledMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js +15 -0
- package/dist/components/messages/UserToolResultMessage/UserToolErrorMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js +25 -0
- package/dist/components/messages/UserToolResultMessage/UserToolRejectMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js +47 -0
- package/dist/components/messages/UserToolResultMessage/UserToolResultMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js +23 -0
- package/dist/components/messages/UserToolResultMessage/UserToolSuccessMessage.js.map +7 -0
- package/dist/components/messages/UserToolResultMessage/utils.js +50 -0
- package/dist/components/messages/UserToolResultMessage/utils.js.map +7 -0
- package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js +112 -0
- package/dist/components/permissions/BashPermissionRequest/BashPermissionRequest.js.map +7 -0
- package/dist/components/permissions/FallbackPermissionRequest.js +131 -0
- package/dist/components/permissions/FallbackPermissionRequest.js.map +7 -0
- package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js +159 -0
- package/dist/components/permissions/FileEditPermissionRequest/FileEditPermissionRequest.js.map +7 -0
- package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js +58 -0
- package/dist/components/permissions/FileEditPermissionRequest/FileEditToolDiff.js.map +7 -0
- package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js +153 -0
- package/dist/components/permissions/FileWritePermissionRequest/FileWritePermissionRequest.js.map +7 -0
- package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js +70 -0
- package/dist/components/permissions/FileWritePermissionRequest/FileWriteToolDiff.js.map +7 -0
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js +212 -0
- package/dist/components/permissions/FilesystemPermissionRequest/FilesystemPermissionRequest.js.map +7 -0
- package/dist/components/permissions/PermissionRequest.js +70 -0
- package/dist/components/permissions/PermissionRequest.js.map +7 -0
- package/dist/components/permissions/PermissionRequestTitle.js +52 -0
- package/dist/components/permissions/PermissionRequestTitle.js.map +7 -0
- package/dist/components/permissions/hooks.js +23 -0
- package/dist/components/permissions/hooks.js.map +7 -0
- package/dist/components/permissions/toolUseOptions.js +46 -0
- package/dist/components/permissions/toolUseOptions.js.map +7 -0
- package/dist/components/permissions/utils.js +21 -0
- package/dist/components/permissions/utils.js.map +7 -0
- package/dist/constants/claude-asterisk-ascii-art.js +242 -0
- package/dist/constants/claude-asterisk-ascii-art.js.map +7 -0
- package/dist/constants/colors.js +126 -0
- package/dist/constants/colors.js.map +7 -0
- package/dist/constants/compressionPrompts.js +73 -0
- package/dist/constants/compressionPrompts.js.map +7 -0
- package/dist/constants/figures.js +6 -0
- package/dist/constants/figures.js.map +7 -0
- package/dist/constants/macros.js +11 -0
- package/dist/constants/macros.js.map +7 -0
- package/dist/constants/modelCapabilities.js +154 -0
- package/dist/constants/modelCapabilities.js.map +7 -0
- package/dist/constants/models.js +1034 -0
- package/dist/constants/models.js.map +7 -0
- package/dist/constants/oauth.js +18 -0
- package/dist/constants/oauth.js.map +7 -0
- package/dist/constants/product.js +26 -0
- package/dist/constants/product.js.map +7 -0
- package/dist/constants/prompts.js +168 -0
- package/dist/constants/prompts.js.map +7 -0
- package/dist/constants/releaseNotes.js +9 -0
- package/dist/constants/releaseNotes.js.map +7 -0
- package/dist/constants/symbols.js +50 -0
- package/dist/constants/symbols.js.map +7 -0
- package/dist/context/PermissionContext.js +111 -0
- package/dist/context/PermissionContext.js.map +7 -0
- package/dist/context.js +278 -0
- package/dist/context.js.map +7 -0
- package/dist/cost-tracker.js +76 -0
- package/dist/cost-tracker.js.map +7 -0
- package/dist/entrypoints/cli-wrapper.js +61 -0
- package/dist/entrypoints/cli-wrapper.js.map +7 -0
- package/dist/entrypoints/cli.js +1115 -0
- package/dist/entrypoints/cli.js.map +7 -0
- package/dist/entrypoints/mcp.js +150 -0
- package/dist/entrypoints/mcp.js.map +7 -0
- package/dist/history.js +25 -0
- package/dist/history.js.map +7 -0
- package/dist/hooks/useApiKeyVerification.js +12 -0
- package/dist/hooks/useApiKeyVerification.js.map +7 -0
- package/dist/hooks/useArrowKeyHistory.js +50 -0
- package/dist/hooks/useArrowKeyHistory.js.map +7 -0
- package/dist/hooks/useCanUseTool.js +87 -0
- package/dist/hooks/useCanUseTool.js.map +7 -0
- package/dist/hooks/useCancelRequest.js +28 -0
- package/dist/hooks/useCancelRequest.js.map +7 -0
- package/dist/hooks/useDoublePress.js +31 -0
- package/dist/hooks/useDoublePress.js.map +7 -0
- package/dist/hooks/useExitOnCtrlCD.js +26 -0
- package/dist/hooks/useExitOnCtrlCD.js.map +7 -0
- package/dist/hooks/useHistorySearch.js +62 -0
- package/dist/hooks/useHistorySearch.js.map +7 -0
- package/dist/hooks/useInterval.js +18 -0
- package/dist/hooks/useInterval.js.map +7 -0
- package/dist/hooks/useLogMessages.js +14 -0
- package/dist/hooks/useLogMessages.js.map +7 -0
- package/dist/hooks/useLogStartupTime.js +10 -0
- package/dist/hooks/useLogStartupTime.js.map +7 -0
- package/dist/hooks/useNotifyAfterTimeout.js +42 -0
- package/dist/hooks/useNotifyAfterTimeout.js.map +7 -0
- package/dist/hooks/usePermissionRequestLogging.js +23 -0
- package/dist/hooks/usePermissionRequestLogging.js.map +7 -0
- package/dist/hooks/useTerminalSize.js +38 -0
- package/dist/hooks/useTerminalSize.js.map +7 -0
- package/dist/hooks/useTextInput.js +252 -0
- package/dist/hooks/useTextInput.js.map +7 -0
- package/dist/hooks/useUnifiedCompletion.js +929 -0
- package/dist/hooks/useUnifiedCompletion.js.map +7 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +7 -0
- package/dist/messages.js +33 -0
- package/dist/messages.js.map +7 -0
- package/dist/package.json +4 -0
- package/dist/permissions.js +194 -0
- package/dist/permissions.js.map +7 -0
- package/dist/query.js +499 -0
- package/dist/query.js.map +7 -0
- package/dist/screens/Doctor.js +22 -0
- package/dist/screens/Doctor.js.map +7 -0
- package/dist/screens/LogList.js +55 -0
- package/dist/screens/LogList.js.map +7 -0
- package/dist/screens/REPL.js +671 -0
- package/dist/screens/REPL.js.map +7 -0
- package/dist/screens/ResumeConversation.js +56 -0
- package/dist/screens/ResumeConversation.js.map +7 -0
- package/dist/services/adapters/base.js +29 -0
- package/dist/services/adapters/base.js.map +7 -0
- package/dist/services/adapters/chatCompletions.js +69 -0
- package/dist/services/adapters/chatCompletions.js.map +7 -0
- package/dist/services/adapters/responsesAPI.js +126 -0
- package/dist/services/adapters/responsesAPI.js.map +7 -0
- package/dist/services/claude.js +1573 -0
- package/dist/services/claude.js.map +7 -0
- package/dist/services/compressionService.js +210 -0
- package/dist/services/compressionService.js.map +7 -0
- package/dist/services/customCommands.js +437 -0
- package/dist/services/customCommands.js.map +7 -0
- package/dist/services/fileFreshness.js +275 -0
- package/dist/services/fileFreshness.js.map +7 -0
- package/dist/services/gpt5ConnectionTest.js +248 -0
- package/dist/services/gpt5ConnectionTest.js.map +7 -0
- package/dist/services/hookExecutor.js +276 -0
- package/dist/services/hookExecutor.js.map +7 -0
- package/dist/services/mainAgentCompressor.js +84 -0
- package/dist/services/mainAgentCompressor.js.map +7 -0
- package/dist/services/mcpClient.js +449 -0
- package/dist/services/mcpClient.js.map +7 -0
- package/dist/services/mcpServerApproval.js +55 -0
- package/dist/services/mcpServerApproval.js.map +7 -0
- package/dist/services/mentionProcessor.js +201 -0
- package/dist/services/mentionProcessor.js.map +7 -0
- package/dist/services/modelAdapterFactory.js +47 -0
- package/dist/services/modelAdapterFactory.js.map +7 -0
- package/dist/services/notifier.js +35 -0
- package/dist/services/notifier.js.map +7 -0
- package/dist/services/oauth.js +247 -0
- package/dist/services/oauth.js.map +7 -0
- package/dist/services/openai.js +995 -0
- package/dist/services/openai.js.map +7 -0
- package/dist/services/responseStateManager.js +68 -0
- package/dist/services/responseStateManager.js.map +7 -0
- package/dist/services/sentry.js +9 -0
- package/dist/services/sentry.js.map +7 -0
- package/dist/services/subagentAbortManager.js +95 -0
- package/dist/services/subagentAbortManager.js.map +7 -0
- package/dist/services/subagentCompressor.js +146 -0
- package/dist/services/subagentCompressor.js.map +7 -0
- package/dist/services/systemReminder.js +335 -0
- package/dist/services/systemReminder.js.map +7 -0
- package/dist/services/vcr.js +133 -0
- package/dist/services/vcr.js.map +7 -0
- package/dist/tools/ArchitectTool/ArchitectTool.js +119 -0
- package/dist/tools/ArchitectTool/ArchitectTool.js.map +7 -0
- package/dist/tools/ArchitectTool/prompt.js +18 -0
- package/dist/tools/ArchitectTool/prompt.js.map +7 -0
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js +423 -0
- package/dist/tools/AskExpertModelTool/AskExpertModelTool.js.map +7 -0
- package/dist/tools/BashOutputTool/BashOutputTool.js +120 -0
- package/dist/tools/BashOutputTool/BashOutputTool.js.map +7 -0
- package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js +11 -0
- package/dist/tools/BashOutputTool/BashOutputToolResultMessage.js.map +7 -0
- package/dist/tools/BashOutputTool/prompt.js +13 -0
- package/dist/tools/BashOutputTool/prompt.js.map +7 -0
- package/dist/tools/BashTool/BashTool.js +209 -0
- package/dist/tools/BashTool/BashTool.js.map +7 -0
- package/dist/tools/BashTool/BashToolResultMessage.js +21 -0
- package/dist/tools/BashTool/BashToolResultMessage.js.map +7 -0
- package/dist/tools/BashTool/OutputLine.js +30 -0
- package/dist/tools/BashTool/OutputLine.js.map +7 -0
- package/dist/tools/BashTool/prompt.js +180 -0
- package/dist/tools/BashTool/prompt.js.map +7 -0
- package/dist/tools/BashTool/utils.js +51 -0
- package/dist/tools/BashTool/utils.js.map +7 -0
- package/dist/tools/FileEditTool/FileEditTool.js +226 -0
- package/dist/tools/FileEditTool/FileEditTool.js.map +7 -0
- package/dist/tools/FileEditTool/prompt.js +54 -0
- package/dist/tools/FileEditTool/prompt.js.map +7 -0
- package/dist/tools/FileEditTool/utils.js +42 -0
- package/dist/tools/FileEditTool/utils.js.map +7 -0
- package/dist/tools/FileReadTool/FileReadTool.js +272 -0
- package/dist/tools/FileReadTool/FileReadTool.js.map +7 -0
- package/dist/tools/FileReadTool/prompt.js +10 -0
- package/dist/tools/FileReadTool/prompt.js.map +7 -0
- package/dist/tools/FileWriteTool/FileWriteTool.js +202 -0
- package/dist/tools/FileWriteTool/FileWriteTool.js.map +7 -0
- package/dist/tools/FileWriteTool/prompt.js +14 -0
- package/dist/tools/FileWriteTool/prompt.js.map +7 -0
- package/dist/tools/GlobTool/GlobTool.js +88 -0
- package/dist/tools/GlobTool/GlobTool.js.map +7 -0
- package/dist/tools/GlobTool/prompt.js +12 -0
- package/dist/tools/GlobTool/prompt.js.map +7 -0
- package/dist/tools/GrepTool/GrepTool.js +107 -0
- package/dist/tools/GrepTool/GrepTool.js.map +7 -0
- package/dist/tools/GrepTool/prompt.js +15 -0
- package/dist/tools/GrepTool/prompt.js.map +7 -0
- package/dist/tools/KillShellTool/KillShellTool.js +92 -0
- package/dist/tools/KillShellTool/KillShellTool.js.map +7 -0
- package/dist/tools/KillShellTool/KillShellToolResultMessage.js +11 -0
- package/dist/tools/KillShellTool/KillShellToolResultMessage.js.map +7 -0
- package/dist/tools/KillShellTool/prompt.js +12 -0
- package/dist/tools/KillShellTool/prompt.js.map +7 -0
- package/dist/tools/MCPTool/MCPTool.js +90 -0
- package/dist/tools/MCPTool/MCPTool.js.map +7 -0
- package/dist/tools/MCPTool/prompt.js +7 -0
- package/dist/tools/MCPTool/prompt.js.map +7 -0
- package/dist/tools/MemoryReadTool/MemoryReadTool.js +103 -0
- package/dist/tools/MemoryReadTool/MemoryReadTool.js.map +7 -0
- package/dist/tools/MemoryReadTool/prompt.js +7 -0
- package/dist/tools/MemoryReadTool/prompt.js.map +7 -0
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js +77 -0
- package/dist/tools/MemoryWriteTool/MemoryWriteTool.js.map +7 -0
- package/dist/tools/MemoryWriteTool/prompt.js +7 -0
- package/dist/tools/MemoryWriteTool/prompt.js.map +7 -0
- package/dist/tools/MultiEditTool/MultiEditTool.js +301 -0
- package/dist/tools/MultiEditTool/MultiEditTool.js.map +7 -0
- package/dist/tools/MultiEditTool/prompt.js +48 -0
- package/dist/tools/MultiEditTool/prompt.js.map +7 -0
- package/dist/tools/NotebookEditTool/NotebookEditTool.js +238 -0
- package/dist/tools/NotebookEditTool/NotebookEditTool.js.map +7 -0
- package/dist/tools/NotebookEditTool/prompt.js +7 -0
- package/dist/tools/NotebookEditTool/prompt.js.map +7 -0
- package/dist/tools/NotebookReadTool/NotebookReadTool.js +212 -0
- package/dist/tools/NotebookReadTool/NotebookReadTool.js.map +7 -0
- package/dist/tools/NotebookReadTool/prompt.js +7 -0
- package/dist/tools/NotebookReadTool/prompt.js.map +7 -0
- package/dist/tools/SkillTool/SkillTool.js +209 -0
- package/dist/tools/SkillTool/SkillTool.js.map +7 -0
- package/dist/tools/SkillTool/prompt.js +81 -0
- package/dist/tools/SkillTool/prompt.js.map +7 -0
- package/dist/tools/TaskTool/TaskTool.js +381 -0
- package/dist/tools/TaskTool/TaskTool.js.map +7 -0
- package/dist/tools/TaskTool/constants.js +5 -0
- package/dist/tools/TaskTool/constants.js.map +7 -0
- package/dist/tools/TaskTool/prompt.js +111 -0
- package/dist/tools/TaskTool/prompt.js.map +7 -0
- package/dist/tools/ThinkTool/ThinkTool.js +40 -0
- package/dist/tools/ThinkTool/ThinkTool.js.map +7 -0
- package/dist/tools/ThinkTool/prompt.js +16 -0
- package/dist/tools/ThinkTool/prompt.js.map +7 -0
- package/dist/tools/TodoWriteTool/TodoWriteTool.js +243 -0
- package/dist/tools/TodoWriteTool/TodoWriteTool.js.map +7 -0
- package/dist/tools/TodoWriteTool/prompt.js +66 -0
- package/dist/tools/TodoWriteTool/prompt.js.map +7 -0
- package/dist/tools/URLFetcherTool/URLFetcherTool.js +137 -0
- package/dist/tools/URLFetcherTool/URLFetcherTool.js.map +7 -0
- package/dist/tools/URLFetcherTool/cache.js +45 -0
- package/dist/tools/URLFetcherTool/cache.js.map +7 -0
- package/dist/tools/URLFetcherTool/htmlToMarkdown.js +42 -0
- package/dist/tools/URLFetcherTool/htmlToMarkdown.js.map +7 -0
- package/dist/tools/URLFetcherTool/prompt.js +22 -0
- package/dist/tools/URLFetcherTool/prompt.js.map +7 -0
- package/dist/tools/WebSearchTool/WebSearchTool.js +86 -0
- package/dist/tools/WebSearchTool/WebSearchTool.js.map +7 -0
- package/dist/tools/WebSearchTool/prompt.js +17 -0
- package/dist/tools/WebSearchTool/prompt.js.map +7 -0
- package/dist/tools/WebSearchTool/searchProviders.js +48 -0
- package/dist/tools/WebSearchTool/searchProviders.js.map +7 -0
- package/dist/tools/lsTool/lsTool.js +201 -0
- package/dist/tools/lsTool/lsTool.js.map +7 -0
- package/dist/tools/lsTool/prompt.js +5 -0
- package/dist/tools/lsTool/prompt.js.map +7 -0
- package/dist/tools.js +70 -0
- package/dist/tools.js.map +7 -0
- package/dist/types/PermissionMode.js +82 -0
- package/dist/types/PermissionMode.js.map +7 -0
- package/dist/types/RequestContext.js +47 -0
- package/dist/types/RequestContext.js.map +7 -0
- package/dist/types/common.d.js +1 -0
- package/dist/types/common.d.js.map +7 -0
- package/dist/types/conversation.js +1 -0
- package/dist/types/conversation.js.map +7 -0
- package/dist/types/hooks.js +38 -0
- package/dist/types/hooks.js.map +7 -0
- package/dist/types/interactionRound.js +1 -0
- package/dist/types/interactionRound.js.map +7 -0
- package/dist/types/logs.js +1 -0
- package/dist/types/logs.js.map +7 -0
- package/dist/types/marketplace.js +101 -0
- package/dist/types/marketplace.js.map +7 -0
- package/dist/types/modelCapabilities.js +1 -0
- package/dist/types/modelCapabilities.js.map +7 -0
- package/dist/types/notebook.js +1 -0
- package/dist/types/notebook.js.map +7 -0
- package/dist/types/plugin.js +83 -0
- package/dist/types/plugin.js.map +7 -0
- package/dist/types/subagent.js +1 -0
- package/dist/types/subagent.js.map +7 -0
- package/dist/utils/BackgroundShellManager.js +215 -0
- package/dist/utils/BackgroundShellManager.js.map +7 -0
- package/dist/utils/Cursor.js +315 -0
- package/dist/utils/Cursor.js.map +7 -0
- package/dist/utils/PersistentShell.js +371 -0
- package/dist/utils/PersistentShell.js.map +7 -0
- package/dist/utils/advancedFuzzyMatcher.js +206 -0
- package/dist/utils/advancedFuzzyMatcher.js.map +7 -0
- package/dist/utils/agentLoader.js +244 -0
- package/dist/utils/agentLoader.js.map +7 -0
- package/dist/utils/agentStorage.js +59 -0
- package/dist/utils/agentStorage.js.map +7 -0
- package/dist/utils/array.js +7 -0
- package/dist/utils/array.js.map +7 -0
- package/dist/utils/ask.js +77 -0
- package/dist/utils/ask.js.map +7 -0
- package/dist/utils/auth.js +11 -0
- package/dist/utils/auth.js.map +7 -0
- package/dist/utils/autoCompactCore.js +126 -0
- package/dist/utils/autoCompactCore.js.map +7 -0
- package/dist/utils/autoUpdater.js +107 -0
- package/dist/utils/autoUpdater.js.map +7 -0
- package/dist/utils/browser.js +15 -0
- package/dist/utils/browser.js.map +7 -0
- package/dist/utils/cleanup.js +54 -0
- package/dist/utils/cleanup.js.map +7 -0
- package/dist/utils/commands.js +207 -0
- package/dist/utils/commands.js.map +7 -0
- package/dist/utils/commonUnixCommands.js +687 -0
- package/dist/utils/commonUnixCommands.js.map +7 -0
- package/dist/utils/compressionMode.js +47 -0
- package/dist/utils/compressionMode.js.map +7 -0
- package/dist/utils/config.js +651 -0
- package/dist/utils/config.js.map +7 -0
- package/dist/utils/conversationRecovery.js +35 -0
- package/dist/utils/conversationRecovery.js.map +7 -0
- package/dist/utils/debugLogger.js +889 -0
- package/dist/utils/debugLogger.js.map +7 -0
- package/dist/utils/diff.js +32 -0
- package/dist/utils/diff.js.map +7 -0
- package/dist/utils/env.js +44 -0
- package/dist/utils/env.js.map +7 -0
- package/dist/utils/errors.js +23 -0
- package/dist/utils/errors.js.map +7 -0
- package/dist/utils/execFileNoThrow.js +44 -0
- package/dist/utils/execFileNoThrow.js.map +7 -0
- package/dist/utils/expertChatStorage.js +78 -0
- package/dist/utils/expertChatStorage.js.map +7 -0
- package/dist/utils/file.js +282 -0
- package/dist/utils/file.js.map +7 -0
- package/dist/utils/fileRecoveryCore.js +41 -0
- package/dist/utils/fileRecoveryCore.js.map +7 -0
- package/dist/utils/format.js +41 -0
- package/dist/utils/format.js.map +7 -0
- package/dist/utils/fuzzyMatcher.js +252 -0
- package/dist/utils/fuzzyMatcher.js.map +7 -0
- package/dist/utils/generators.js +46 -0
- package/dist/utils/generators.js.map +7 -0
- package/dist/utils/git.js +83 -0
- package/dist/utils/git.js.map +7 -0
- package/dist/utils/hookManager.js +238 -0
- package/dist/utils/hookManager.js.map +7 -0
- package/dist/utils/http.js +7 -0
- package/dist/utils/http.js.map +7 -0
- package/dist/utils/imagePaste.js +29 -0
- package/dist/utils/imagePaste.js.map +7 -0
- package/dist/utils/json.js +16 -0
- package/dist/utils/json.js.map +7 -0
- package/dist/utils/log.js +329 -0
- package/dist/utils/log.js.map +7 -0
- package/dist/utils/markdown.js +187 -0
- package/dist/utils/markdown.js.map +7 -0
- package/dist/utils/marketplaceManager.js +474 -0
- package/dist/utils/marketplaceManager.js.map +7 -0
- package/dist/utils/messageContextManager.js +195 -0
- package/dist/utils/messageContextManager.js.map +7 -0
- package/dist/utils/messages.js +650 -0
- package/dist/utils/messages.js.map +7 -0
- package/dist/utils/model.js +677 -0
- package/dist/utils/model.js.map +7 -0
- package/dist/utils/permissions/filesystem.js +80 -0
- package/dist/utils/permissions/filesystem.js.map +7 -0
- package/dist/utils/pluginInstaller.js +491 -0
- package/dist/utils/pluginInstaller.js.map +7 -0
- package/dist/utils/pluginLoader.js +582 -0
- package/dist/utils/pluginLoader.js.map +7 -0
- package/dist/utils/pluginRegistry.js +111 -0
- package/dist/utils/pluginRegistry.js.map +7 -0
- package/dist/utils/pluginValidator.js +774 -0
- package/dist/utils/pluginValidator.js.map +7 -0
- package/dist/utils/ptyCompat.js +125 -0
- package/dist/utils/ptyCompat.js.map +7 -0
- package/dist/utils/replStateMachine.js +145 -0
- package/dist/utils/replStateMachine.js.map +7 -0
- package/dist/utils/ripgrep.js +131 -0
- package/dist/utils/ripgrep.js.map +7 -0
- package/dist/utils/roundConverter.js +262 -0
- package/dist/utils/roundConverter.js.map +7 -0
- package/dist/utils/secureFile.js +483 -0
- package/dist/utils/secureFile.js.map +7 -0
- package/dist/utils/sessionState.js +22 -0
- package/dist/utils/sessionState.js.map +7 -0
- package/dist/utils/skillLoader.js +79 -0
- package/dist/utils/skillLoader.js.map +7 -0
- package/dist/utils/state.js +24 -0
- package/dist/utils/state.js.map +7 -0
- package/dist/utils/style.js +31 -0
- package/dist/utils/style.js.map +7 -0
- package/dist/utils/terminal.js +47 -0
- package/dist/utils/terminal.js.map +7 -0
- package/dist/utils/theme.js +102 -0
- package/dist/utils/theme.js.map +7 -0
- package/dist/utils/thinking.js +59 -0
- package/dist/utils/thinking.js.map +7 -0
- package/dist/utils/todoChangeCalculator.js +64 -0
- package/dist/utils/todoChangeCalculator.js.map +7 -0
- package/dist/utils/todoStorage.js +291 -0
- package/dist/utils/todoStorage.js.map +7 -0
- package/dist/utils/tokens.js +30 -0
- package/dist/utils/tokens.js.map +7 -0
- package/dist/utils/toolExecutionController.js +109 -0
- package/dist/utils/toolExecutionController.js.map +7 -0
- package/dist/utils/unaryLogging.js +6 -0
- package/dist/utils/unaryLogging.js.map +7 -0
- package/dist/utils/user.js +40 -0
- package/dist/utils/user.js.map +7 -0
- package/dist/utils/validate.js +132 -0
- package/dist/utils/validate.js.map +7 -0
- package/dist/version.js +7 -0
- package/dist/version.js.map +7 -0
- package/dist/yoga.wasm +0 -0
- package/package.json +113 -0
- package/scripts/postinstall.js +18 -0
- package/yoga.wasm +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/commands/plugin.tsx"],
|
|
4
|
+
"sourcesContent": ["import React, { useState, useEffect } from 'react'\nimport { Box, Text, useInput } from 'ink'\nimport { Command } from '@commands'\nimport { SimpleSpinner } from '@components/Spinner'\nimport {\n loadAllPlugins,\n getPlugin,\n listPlugins,\n loadPlugin,\n} from '@utils/pluginLoader'\nimport {\n addMarketplace,\n removeMarketplace,\n updateMarketplace,\n listMarketplaces,\n getMarketplace,\n installPluginFromMarketplace,\n} from '@utils/marketplaceManager'\nimport { LoadedPlugin, PluginManifest, PluginError } from '../types/plugin'\nimport { RegisteredMarketplace, MarketplaceError } from '../types/marketplace'\nimport { rmSync } from 'fs'\nimport { getTheme } from '@utils/theme'\n\n// Interactive UI components\nimport { MainMenu } from './plugin/MainMenu'\nimport { PlaceholderScreen } from './plugin/PlaceholderScreen'\nimport { MarketplaceSelector } from './plugin/MarketplaceSelector'\nimport { PluginBrowser } from './plugin/PluginBrowser'\nimport { PluginDetailsInstall } from './plugin/PluginDetailsInstall'\nimport { InstalledPluginsManager } from './plugin/InstalledPluginsManager'\nimport { InstalledPluginsByMarketplace } from './plugin/InstalledPluginsByMarketplace'\nimport { PluginDetailsManage } from './plugin/PluginDetailsManage'\nimport { AddMarketplaceForm } from './plugin/AddMarketplaceForm'\nimport { MarketplaceManager } from './plugin/MarketplaceManager'\nimport type { PluginUIState } from './plugin/types'\n\n/**\n * Plugin Command - Comprehensive plugin management for Minto CLI\n *\n * Implements all plugin management commands following Claude Code specification:\n * - /plugin list - List all installed plugins\n * - /plugin info <name> - Show detailed plugin information\n * - /plugin install <name>[@marketplace] - Install plugin from marketplace\n * - /plugin uninstall <name> - Remove installed plugin\n * - /plugin validate [name] - Validate plugin manifest and components\n * - /plugin marketplace add <source> - Register new marketplace\n * - /plugin marketplace list - List registered marketplaces\n * - /plugin marketplace update <name> - Update marketplace manifest\n * - /plugin marketplace remove <name> - Unregister marketplace\n */\n\n// ============================================================================\n// Component: Plugin List View\n// ============================================================================\n\ninterface PluginListProps {\n onDone: () => void\n}\n\nconst PluginList: React.FC<PluginListProps> = ({ onDone }) => {\n const [plugins, setPlugins] = useState<LoadedPlugin[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const theme = getTheme()\n\n useEffect(() => {\n try {\n const loadedPlugins = loadAllPlugins()\n setPlugins(loadedPlugins)\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setLoading(false)\n onDone()\n }\n }, [onDone])\n\n if (loading) {\n return <Text color={theme.primary}>Loading plugins...</Text>\n }\n\n if (error) {\n return <Text color={theme.error}>Error: {error}</Text>\n }\n\n if (plugins.length === 0) {\n return (\n <Box flexDirection=\"column\">\n <Text color={theme.warning}>No plugins installed.</Text>\n <Text dimColor>\n Install plugins with: /plugin install <name>[@marketplace]\n </Text>\n </Box>\n )\n }\n\n return (\n <Box flexDirection=\"column\">\n <Text bold underline color={theme.success}>\n Installed Plugins ({plugins.length})\n </Text>\n <Text>{''}</Text>\n {plugins.map((plugin) => {\n const componentCounts = [\n plugin.agents.length > 0 && `${plugin.agents.length} agent${plugin.agents.length !== 1 ? 's' : ''}`,\n plugin.commands.length > 0 && `${plugin.commands.length} command${plugin.commands.length !== 1 ? 's' : ''}`,\n plugin.skills.length > 0 && `${plugin.skills.length} skill${plugin.skills.length !== 1 ? 's' : ''}`,\n plugin.hooks.length > 0 && `${plugin.hooks.length} hook${plugin.hooks.length !== 1 ? 's' : ''}`,\n plugin.mcpServers.length > 0 && `${plugin.mcpServers.length} MCP server${plugin.mcpServers.length !== 1 ? 's' : ''}`,\n ].filter(Boolean)\n\n return (\n <Box key={plugin.manifest.name} flexDirection=\"column\" marginBottom={1}>\n <Box>\n <Text color={theme.primary} bold>\n {plugin.manifest.displayName || plugin.manifest.name}\n </Text>\n <Text dimColor> v{plugin.manifest.version}</Text>\n {!plugin.enabled && (\n <Text color={theme.warning}> (disabled)</Text>\n )}\n </Box>\n {plugin.manifest.description && (\n <Text dimColor> {plugin.manifest.description}</Text>\n )}\n {componentCounts.length > 0 && (\n <Text dimColor> Components: {componentCounts.join(', ')}</Text>\n )}\n <Text dimColor> Location: {plugin.source.type === 'local' ? plugin.source.path : plugin.location}</Text>\n </Box>\n )\n })}\n </Box>\n )\n}\n\n// ============================================================================\n// Component: Plugin Info View\n// ============================================================================\n\ninterface PluginInfoProps {\n pluginName: string\n onDone: () => void\n}\n\nconst PluginInfo: React.FC<PluginInfoProps> = ({ pluginName, onDone }) => {\n const [plugin, setPlugin] = useState<LoadedPlugin | null>(null)\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const theme = getTheme()\n\n useEffect(() => {\n try {\n const loadedPlugin = getPlugin(pluginName)\n if (!loadedPlugin) {\n setError(`Plugin \"${pluginName}\" not found`)\n } else {\n setPlugin(loadedPlugin)\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setLoading(false)\n onDone()\n }\n }, [pluginName, onDone])\n\n if (loading) {\n return <Text color={theme.primary}>Loading plugin info...</Text>\n }\n\n if (error || !plugin) {\n return <Text color={theme.error}>Error: {error || 'Plugin not found'}</Text>\n }\n\n return (\n <Box flexDirection=\"column\">\n <Text bold underline color={theme.success}>\n {plugin.manifest.displayName || plugin.manifest.name}\n </Text>\n <Text>{''}</Text>\n\n <Box flexDirection=\"column\">\n <Text><Text color={theme.primary}>Name:</Text> {plugin.manifest.name}</Text>\n <Text><Text color={theme.primary}>Version:</Text> {plugin.manifest.version}</Text>\n {plugin.manifest.description && (\n <Text><Text color={theme.primary}>Description:</Text> {plugin.manifest.description}</Text>\n )}\n {plugin.manifest.author && (\n <Text><Text color={theme.primary}>Author:</Text> {plugin.manifest.author}</Text>\n )}\n {plugin.manifest.license && (\n <Text><Text color={theme.primary}>License:</Text> {plugin.manifest.license}</Text>\n )}\n {plugin.manifest.homepage && (\n <Text><Text color={theme.primary}>Homepage:</Text> {plugin.manifest.homepage}</Text>\n )}\n {plugin.manifest.repository && (\n <Text><Text color={theme.primary}>Repository:</Text> {plugin.manifest.repository}</Text>\n )}\n <Text><Text color={theme.primary}>Location:</Text> {plugin.location}</Text>\n <Text><Text color={theme.primary}>Source:</Text> {plugin.source.type}</Text>\n <Text><Text color={theme.primary}>Enabled:</Text> {plugin.enabled ? 'Yes' : 'No'}</Text>\n </Box>\n\n <Text>{''}</Text>\n <Text bold color={theme.primary}>Components:</Text>\n\n {plugin.agents.length > 0 && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color={theme.success}>Agents ({plugin.agents.length}):</Text>\n {plugin.agents.map((agent) => (\n <Text dimColor> \u2022 {agent.name}{agent.config.description ? ` - ${agent.config.description}` : ''}</Text>\n ))}\n </Box>\n )}\n\n {plugin.commands.length > 0 && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color={theme.success}>Commands ({plugin.commands.length}):</Text>\n {plugin.commands.map((command) => (\n <Text dimColor> \u2022 /{command.name}{command.config.description ? ` - ${command.config.description}` : ''}</Text>\n ))}\n </Box>\n )}\n\n {plugin.skills.length > 0 && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color={theme.success}>Skills ({plugin.skills.length}):</Text>\n {plugin.skills.map((skill) => (\n <Text dimColor> \u2022 {skill.name}{skill.config.description ? ` - ${skill.config.description}` : ''}</Text>\n ))}\n </Box>\n )}\n\n {plugin.hooks.length > 0 && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color={theme.success}>Hooks ({plugin.hooks.length}):</Text>\n {plugin.hooks.map((hook) => (\n <Text dimColor> \u2022 {hook.name} ({hook.config.event})</Text>\n ))}\n </Box>\n )}\n\n {plugin.mcpServers.length > 0 && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text color={theme.success}>MCP Servers ({plugin.mcpServers.length}):</Text>\n {plugin.mcpServers.map((server) => (\n <Text dimColor> \u2022 {server.name} - {server.config.command}</Text>\n ))}\n </Box>\n )}\n\n {plugin.agents.length === 0 && plugin.commands.length === 0 &&\n plugin.skills.length === 0 && plugin.hooks.length === 0 &&\n plugin.mcpServers.length === 0 && (\n <Text dimColor> No components loaded</Text>\n )}\n\n {plugin.manifest.engines && (\n <>\n <Text>{''}</Text>\n <Text bold color={theme.primary}>Requirements:</Text>\n {plugin.manifest.engines.minto && (\n <Text dimColor> Minto: {plugin.manifest.engines.minto}</Text>\n )}\n {plugin.manifest.engines['claude-code'] && (\n <Text dimColor> Claude Code: {plugin.manifest.engines['claude-code']}</Text>\n )}\n {plugin.manifest.engines.node && (\n <Text dimColor> Node: {plugin.manifest.engines.node}</Text>\n )}\n </>\n )}\n </Box>\n )\n}\n\n// ============================================================================\n// Component: Plugin Install View\n// ============================================================================\n\ninterface PluginInstallProps {\n pluginSpec: string\n onDone: () => void\n}\n\nconst PluginInstall: React.FC<PluginInstallProps> = ({ pluginSpec, onDone }) => {\n const [status, setStatus] = useState<'installing' | 'success' | 'error'>('installing')\n const [message, setMessage] = useState('')\n const [installedPath, setInstalledPath] = useState('')\n const theme = getTheme()\n\n useEffect(() => {\n const installPlugin = async () => {\n try {\n // Parse plugin spec: name[@marketplace]\n const [pluginName, marketplaceName] = pluginSpec.split('@')\n\n if (!pluginName) {\n throw new Error('Plugin name is required')\n }\n\n setMessage(`Installing plugin \"${pluginName}\"${marketplaceName ? ` from marketplace \"${marketplaceName}\"` : ''}...`)\n\n const path = await installPluginFromMarketplace(pluginName, marketplaceName)\n\n setInstalledPath(path)\n setMessage(`Successfully installed \"${pluginName}\" to ${path}`)\n setStatus('success')\n } catch (err) {\n if (err instanceof MarketplaceError) {\n setMessage(`Installation failed: ${err.message}`)\n } else {\n setMessage(`Installation failed: ${err instanceof Error ? err.message : String(err)}`)\n }\n setStatus('error')\n } finally {\n onDone()\n }\n }\n\n installPlugin()\n }, [pluginSpec, onDone])\n\n const color = status === 'success' ? theme.success :\n status === 'error' ? theme.error :\n theme.primary\n\n return (\n <Box flexDirection=\"column\">\n <Text color={color}>{message}</Text>\n {status === 'success' && (\n <>\n <Text>{''}</Text>\n <Text dimColor>Plugin is now available. Use /plugin info {pluginSpec.split('@')[0]} to see details.</Text>\n </>\n )}\n </Box>\n )\n}\n\n// ============================================================================\n// Component: Plugin Uninstall View\n// ============================================================================\n\ninterface PluginUninstallProps {\n pluginName: string\n onDone: () => void\n}\n\nconst PluginUninstall: React.FC<PluginUninstallProps> = ({ pluginName, onDone }) => {\n const [status, setStatus] = useState<'uninstalling' | 'success' | 'error'>('uninstalling')\n const [message, setMessage] = useState('')\n const theme = getTheme()\n\n useEffect(() => {\n const uninstallPlugin = () => {\n try {\n setMessage(`Uninstalling plugin \"${pluginName}\"...`)\n\n const plugin = getPlugin(pluginName)\n if (!plugin) {\n throw new Error(`Plugin \"${pluginName}\" not found`)\n }\n\n // Remove plugin directory\n rmSync(plugin.location, { recursive: true, force: true })\n\n setMessage(`Successfully uninstalled \"${pluginName}\"`)\n setStatus('success')\n } catch (err) {\n setMessage(`Uninstallation failed: ${err instanceof Error ? err.message : String(err)}`)\n setStatus('error')\n } finally {\n onDone()\n }\n }\n\n uninstallPlugin()\n }, [pluginName, onDone])\n\n const color = status === 'success' ? theme.success :\n status === 'error' ? theme.error :\n theme.primary\n\n return <Text color={color}>{message}</Text>\n}\n\n// ============================================================================\n// Component: Plugin Validate View\n// ============================================================================\n\ninterface PluginValidateProps {\n pluginName?: string\n onDone: () => void\n}\n\nconst PluginValidate: React.FC<PluginValidateProps> = ({ pluginName, onDone }) => {\n const [results, setResults] = useState<Array<{ plugin: string; valid: boolean; errors: string[] }>>([])\n const [loading, setLoading] = useState(true)\n const theme = getTheme()\n\n useEffect(() => {\n const validatePlugins = () => {\n try {\n const pluginsToValidate = pluginName\n ? [{ name: pluginName, path: '', manifest: undefined }]\n : listPlugins()\n\n const validationResults = pluginsToValidate.map(({ name, path }) => {\n const errors: string[] = []\n\n try {\n const plugin = getPlugin(name)\n\n if (!plugin) {\n errors.push('Plugin not found')\n return { plugin: name, valid: false, errors }\n }\n\n // Validate manifest required fields\n if (!plugin.manifest.name) errors.push('Missing required field: name')\n if (!plugin.manifest.version) errors.push('Missing required field: version')\n if (!plugin.manifest.description) errors.push('Missing required field: description')\n\n // Validate version format\n if (plugin.manifest.version && !/^\\d+\\.\\d+\\.\\d+$/.test(plugin.manifest.version)) {\n errors.push('Invalid version format (must be semver: X.Y.Z)')\n }\n\n // Validate name format\n if (plugin.manifest.name && !/^[a-z0-9-]+$/.test(plugin.manifest.name)) {\n errors.push('Invalid name format (must be lowercase alphanumeric with hyphens)')\n }\n\n // Validate component paths exist\n const checkComponents = (items: any[], type: string) => {\n items.forEach((item) => {\n if (!item.filePath) {\n errors.push(`${type} \"${item.name}\" has no file path`)\n }\n })\n }\n\n checkComponents(plugin.agents, 'Agent')\n checkComponents(plugin.commands, 'Command')\n checkComponents(plugin.skills, 'Skill')\n\n return { plugin: name, valid: errors.length === 0, errors }\n } catch (err) {\n errors.push(err instanceof Error ? err.message : String(err))\n return { plugin: name, valid: false, errors }\n }\n })\n\n setResults(validationResults)\n } finally {\n setLoading(false)\n onDone()\n }\n }\n\n validatePlugins()\n }, [pluginName, onDone])\n\n if (loading) {\n return <Text color={theme.primary}>Validating plugins...</Text>\n }\n\n return (\n <Box flexDirection=\"column\">\n <Text bold underline color={theme.primary}>\n Plugin Validation Results\n </Text>\n <Text>{''}</Text>\n {results.map((result) => (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Box>\n <Text color={result.valid ? theme.success : theme.error}>\n {result.valid ? '\u2713' : '\u2717'}\n </Text>\n <Text> {result.plugin}</Text>\n {result.valid && <Text color={theme.success}> - Valid</Text>}\n </Box>\n {result.errors.length > 0 && (\n <Box flexDirection=\"column\" marginLeft={2}>\n {result.errors.map((error, idx) => (\n <Text color={theme.error}>\u2022 {error}</Text>\n ))}\n </Box>\n )}\n </Box>\n ))}\n </Box>\n )\n}\n\n// ============================================================================\n// Component: Marketplace List View\n// ============================================================================\n\ninterface MarketplaceListProps {\n onDone: () => void\n}\n\nconst MarketplaceListView: React.FC<MarketplaceListProps> = ({ onDone }) => {\n const [marketplaces, setMarketplaces] = useState<RegisteredMarketplace[]>([])\n const [loading, setLoading] = useState(true)\n const theme = getTheme()\n\n useEffect(() => {\n try {\n const registered = listMarketplaces()\n setMarketplaces(registered)\n } finally {\n setLoading(false)\n onDone()\n }\n }, [onDone])\n\n if (loading) {\n return <Text color={theme.primary}>Loading marketplaces...</Text>\n }\n\n if (marketplaces.length === 0) {\n return (\n <Box flexDirection=\"column\">\n <Text color={theme.warning}>No marketplaces registered.</Text>\n <Text dimColor>\n Register a marketplace with: /plugin marketplace add <source>\n </Text>\n </Box>\n )\n }\n\n return (\n <Box flexDirection=\"column\">\n <Text bold underline color={theme.success}>\n Registered Marketplaces ({marketplaces.length})\n </Text>\n <Text>{''}</Text>\n {marketplaces.map((marketplace) => (\n <Box key={marketplace.name} flexDirection=\"column\" marginBottom={1}>\n <Box>\n <Text color={theme.primary} bold>\n {marketplace.name}\n </Text>\n {!marketplace.enabled && (\n <Text color={theme.warning}> (disabled)</Text>\n )}\n </Box>\n {marketplace.manifest.metadata?.description && (\n <Text dimColor> {marketplace.manifest.metadata.description}</Text>\n )}\n <Text dimColor>\n {` Plugins: ${marketplace.manifest.plugins.length}`}\n {` | Owner: ${marketplace.manifest.owner.name}`}\n </Text>\n <Text dimColor>\n {` Source: ${marketplace.source.type}`}\n {marketplace.source.type === 'github' && ` (${marketplace.source.repo})`}\n {marketplace.source.type === 'url' && ` (${marketplace.source.url})`}\n {marketplace.source.type === 'local' && ` (${marketplace.source.path})`}\n </Text>\n <Text dimColor>\n {` Last updated: ${new Date(marketplace.lastUpdated).toLocaleString()}`}\n </Text>\n </Box>\n ))}\n </Box>\n )\n}\n\n// ============================================================================\n// Component: Marketplace Add View\n// ============================================================================\n\ninterface MarketplaceAddProps {\n source: string\n onDone: () => void\n}\n\nconst MarketplaceAdd: React.FC<MarketplaceAddProps> = ({ source, onDone }) => {\n const [status, setStatus] = useState<'adding' | 'success' | 'error'>('adding')\n const [message, setMessage] = useState('')\n const [marketplace, setMarketplace] = useState<RegisteredMarketplace | null>(null)\n const theme = getTheme()\n\n useEffect(() => {\n const addMarketplaceAsync = async () => {\n try {\n setMessage(`Registering marketplace from \"${source}\"...`)\n const registered = await addMarketplace(source)\n setMarketplace(registered)\n setMessage(`Successfully registered marketplace \"${registered.name}\"`)\n setStatus('success')\n } catch (err) {\n if (err instanceof MarketplaceError) {\n setMessage(`Registration failed: ${err.message}`)\n } else {\n setMessage(`Registration failed: ${err instanceof Error ? err.message : String(err)}`)\n }\n setStatus('error')\n } finally {\n onDone()\n }\n }\n\n addMarketplaceAsync()\n }, [source, onDone])\n\n const color = status === 'success' ? theme.success :\n status === 'error' ? theme.error :\n theme.primary\n\n return (\n <Box flexDirection=\"column\">\n <Text color={color}>{message}</Text>\n {status === 'success' && marketplace && (\n <>\n <Text>{''}</Text>\n <Text dimColor>Marketplace contains {marketplace.manifest.plugins.length} plugin(s)</Text>\n <Text dimColor>Use /plugin marketplace list to see all marketplaces</Text>\n </>\n )}\n </Box>\n )\n}\n\n// ============================================================================\n// Component: Marketplace Update View\n// ============================================================================\n\ninterface MarketplaceUpdateProps {\n name: string\n onDone: () => void\n}\n\nconst MarketplaceUpdate: React.FC<MarketplaceUpdateProps> = ({ name, onDone }) => {\n const [status, setStatus] = useState<'updating' | 'success' | 'error'>('updating')\n const [message, setMessage] = useState('')\n const theme = getTheme()\n\n useEffect(() => {\n const updateMarketplaceAsync = async () => {\n try {\n setMessage(`Updating marketplace \"${name}\"...`)\n await updateMarketplace(name)\n setMessage(`Successfully updated marketplace \"${name}\"`)\n setStatus('success')\n } catch (err) {\n if (err instanceof MarketplaceError) {\n setMessage(`Update failed: ${err.message}`)\n } else {\n setMessage(`Update failed: ${err instanceof Error ? err.message : String(err)}`)\n }\n setStatus('error')\n } finally {\n onDone()\n }\n }\n\n updateMarketplaceAsync()\n }, [name, onDone])\n\n const color = status === 'success' ? theme.success :\n status === 'error' ? theme.error :\n theme.primary\n\n return <Text color={color}>{message}</Text>\n}\n\n// ============================================================================\n// Component: Marketplace Remove View\n// ============================================================================\n\ninterface MarketplaceRemoveProps {\n name: string\n onDone: () => void\n}\n\nconst MarketplaceRemove: React.FC<MarketplaceRemoveProps> = ({ name, onDone }) => {\n const [status, setStatus] = useState<'removing' | 'success' | 'error'>('removing')\n const [message, setMessage] = useState('')\n const theme = getTheme()\n\n useEffect(() => {\n const removeMarketplaceSync = () => {\n try {\n setMessage(`Removing marketplace \"${name}\"...`)\n removeMarketplace(name)\n setMessage(`Successfully removed marketplace \"${name}\"`)\n setStatus('success')\n } catch (err) {\n if (err instanceof MarketplaceError) {\n setMessage(`Removal failed: ${err.message}`)\n } else {\n setMessage(`Removal failed: ${err instanceof Error ? err.message : String(err)}`)\n }\n setStatus('error')\n } finally {\n onDone()\n }\n }\n\n removeMarketplaceSync()\n }, [name, onDone])\n\n const color = status === 'success' ? theme.success :\n status === 'error' ? theme.error :\n theme.primary\n\n return <Text color={color}>{message}</Text>\n}\n\n// ============================================================================\n// Error Message Component\n// ============================================================================\n\nconst ErrorMessage: React.FC<{ message: string; onDone: () => void }> = ({ message, onDone }) => {\n const theme = getTheme()\n\n React.useEffect(() => {\n onDone()\n }, [onDone])\n\n return <Text color={theme.error}>Error: {message}</Text>\n}\n\n// ============================================================================\n// Component: Marketplace Details View\n// ============================================================================\n\nconst MarketplaceDetails: React.FC<{\n marketplace: string\n onNavigate: (state: PluginUIState) => void\n onBack: () => void\n onDone: () => void\n}> = ({ marketplace: marketplaceName, onNavigate, onBack, onDone }) => {\n const theme = getTheme()\n const [removing, setRemoving] = useState(false)\n const [updating, setUpdating] = useState(false)\n const [error, setError] = useState<string>()\n\n const marketplace = listMarketplaces().find(\n (m: RegisteredMarketplace) => m.name === marketplaceName\n )\n\n useInput((input, key) => {\n if (key.escape) onBack()\n else if (input === 'r' && !removing && !updating) {\n setRemoving(true)\n removeMarketplaceAction()\n } else if (input === 'u' && !removing && !updating) {\n setUpdating(true)\n updateMarketplaceAction()\n } else if (input === 'p' && !removing && !updating) {\n onNavigate({\n screen: 'installed-plugins-by-marketplace',\n marketplace: marketplaceName,\n })\n }\n })\n\n const removeMarketplaceAction = () => {\n try {\n removeMarketplace(marketplaceName)\n onBack()\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n setRemoving(false)\n }\n }\n\n const updateMarketplaceAction = async () => {\n try {\n await updateMarketplace(marketplaceName)\n setUpdating(false)\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n setUpdating(false)\n }\n }\n\n if (!marketplace) {\n return (\n <Box padding={1}>\n <Text color={theme.error}>Marketplace not found: {marketplaceName}</Text>\n </Box>\n )\n }\n\n if (removing) {\n return (\n <Box padding={1}>\n <SimpleSpinner />\n <Text color={theme.primary}> Removing marketplace...</Text>\n </Box>\n )\n }\n\n if (updating) {\n return (\n <Box padding={1}>\n <SimpleSpinner />\n <Text color={theme.primary}> Updating marketplace...</Text>\n </Box>\n )\n }\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.primary}\n padding={1}\n >\n <Text bold color={theme.success}>\n {marketplace.name}\n </Text>\n\n {marketplace.manifest.metadata?.description && (\n <Box marginTop={1}>\n <Text>{marketplace.manifest.metadata.description}</Text>\n </Box>\n )}\n\n <Box marginTop={1}>\n <Text>Plugins: </Text>\n <Text color={theme.primary}>{marketplace.manifest.plugins.length}</Text>\n </Box>\n\n <Box marginTop={1}>\n <Text>Owner: </Text>\n <Text>{marketplace.manifest.owner.name}</Text>\n </Box>\n\n <Box marginTop={1}>\n <Text>Source: </Text>\n <Text dimColor>\n {marketplace.source.type}\n {marketplace.source.type === 'github' &&\n ` (${marketplace.source.repo})`}\n {marketplace.source.type === 'url' && ` (${marketplace.source.url})`}\n {marketplace.source.type === 'local' &&\n ` (${marketplace.source.path})`}\n </Text>\n </Box>\n\n <Box marginTop={1}>\n <Text>Last updated: </Text>\n <Text dimColor>\n {new Date(marketplace.lastUpdated).toLocaleString()}\n </Text>\n </Box>\n\n {error && (\n <Box marginTop={1}>\n <Text color={theme.error}>Error: {error}</Text>\n </Box>\n )}\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>\n Press <Text bold>p</Text> to view plugins from this marketplace\n </Text>\n <Text dimColor>\n Press <Text bold>u</Text> to update marketplace\n </Text>\n <Text dimColor>\n Press <Text bold>r</Text> to remove marketplace\n </Text>\n <Text dimColor>\n Press <Text bold>Esc</Text> to go back\n </Text>\n </Box>\n </Box>\n )\n}\n\n// ============================================================================\n// Interactive Plugin Command (New UI)\n// ============================================================================\n\n/**\n * Interactive Plugin Command\n *\n * New UI that provides an interactive menu-driven interface for plugin management.\n * Matches Claude Code CLI experience with navigation stack and keyboard controls.\n */\nconst InteractivePluginCommand: React.FC<{ onDone: () => void }> = ({ onDone }) => {\n const [navigationStack, setNavigationStack] = useState<PluginUIState[]>([\n { screen: 'main-menu' }\n ])\n\n const currentState = navigationStack[navigationStack.length - 1]\n\n const handleNavigate = (newState: PluginUIState) => {\n setNavigationStack(prev => [...prev, newState])\n }\n\n const handleBack = () => {\n if (navigationStack.length > 1) {\n setNavigationStack(prev => prev.slice(0, -1))\n } else {\n onDone()\n }\n }\n\n // Route to appropriate screen component based on current state\n switch (currentState.screen) {\n case 'main-menu':\n return <MainMenu onNavigate={handleNavigate} onBack={handleBack} onDone={onDone} />\n\n case 'marketplace-selector':\n return <MarketplaceSelector onNavigate={handleNavigate} onBack={handleBack} onDone={onDone} />\n\n case 'plugin-browser':\n return <PluginBrowser marketplace={currentState.marketplace} onNavigate={handleNavigate} onBack={handleBack} onDone={onDone} />\n\n case 'plugin-details-install':\n return <PluginDetailsInstall marketplace={currentState.marketplace} plugin={currentState.plugin} onNavigate={handleNavigate} onBack={handleBack} onDone={onDone} />\n\n case 'installed-plugins-manager':\n return <InstalledPluginsManager key={navigationStack.length} onNavigate={handleNavigate} onBack={handleBack} onDone={onDone} />\n\n case 'installed-plugins-by-marketplace':\n return <InstalledPluginsByMarketplace marketplace={currentState.marketplace} onNavigate={handleNavigate} onBack={handleBack} onDone={onDone} />\n\n case 'plugin-details-manage':\n return <PluginDetailsManage plugin={currentState.plugin} onNavigate={handleNavigate} onBack={handleBack} onDone={onDone} />\n\n case 'add-marketplace':\n return <AddMarketplaceForm onNavigate={handleNavigate} onBack={handleBack} onDone={onDone} />\n\n case 'marketplace-manager':\n return <MarketplaceManager onNavigate={handleNavigate} onBack={handleBack} onDone={onDone} />\n\n case 'marketplace-details':\n return <MarketplaceDetails marketplace={currentState.marketplace} onNavigate={handleNavigate} onBack={handleBack} onDone={onDone} />\n\n default:\n return (\n <Box flexDirection=\"column\">\n <Text color=\"red\">Unknown screen state</Text>\n <Text dimColor>Press Esc to exit</Text>\n </Box>\n )\n }\n}\n\n// ============================================================================\n// Legacy Plugin Command Router (CLI arguments)\n// ============================================================================\n\nconst LegacyPluginCommand: React.FC<{ args: string; onDone: () => void }> = ({ args, onDone }) => {\n const theme = getTheme()\n const parts = args.trim().split(/\\s+/).filter(Boolean)\n const subcommand = parts[0]\n const subArgs = parts.slice(1)\n\n // Use effect to call onDone after render for help/error cases\n React.useEffect(() => {\n // Only call onDone if we're showing static content (help or errors)\n if (!subcommand || subcommand === 'help' || subcommand === '--help') {\n onDone()\n }\n }, [subcommand, onDone])\n\n // Help text\n if (!subcommand || subcommand === 'help' || subcommand === '--help') {\n return (\n <Box flexDirection=\"column\">\n <Text bold underline color={theme.primary}>Plugin Management Commands</Text>\n <Text>{''}</Text>\n <Text><Text color={theme.success}>/plugin list</Text> - List all installed plugins</Text>\n <Text><Text color={theme.success}>/plugin info <name></Text> - Show detailed plugin information</Text>\n <Text><Text color={theme.success}>/plugin install <name>[@marketplace]</Text> - Install plugin from marketplace</Text>\n <Text><Text color={theme.success}>/plugin uninstall <name></Text> - Remove installed plugin</Text>\n <Text><Text color={theme.success}>/plugin validate [name]</Text> - Validate plugin manifest and components</Text>\n <Text>{''}</Text>\n <Text bold color={theme.primary}>Marketplace Commands:</Text>\n <Text><Text color={theme.success}>/plugin marketplace add <source></Text> - Register new marketplace</Text>\n <Text><Text color={theme.success}>/plugin marketplace list</Text> - List registered marketplaces</Text>\n <Text><Text color={theme.success}>/plugin marketplace update <name></Text> - Update marketplace manifest</Text>\n <Text><Text color={theme.success}>/plugin marketplace remove <name></Text> - Unregister marketplace</Text>\n <Text>{''}</Text>\n <Text dimColor>Examples:</Text>\n <Text dimColor> /plugin list</Text>\n <Text dimColor> /plugin info my-plugin</Text>\n <Text dimColor> /plugin install awesome-plugin@official</Text>\n <Text dimColor> /plugin marketplace add owner/repo</Text>\n </Box>\n )\n }\n\n // Route subcommands\n switch (subcommand) {\n case 'list':\n return <PluginList onDone={onDone} />\n\n case 'info':\n if (subArgs.length === 0) {\n return <ErrorMessage message=\"Plugin name required. Usage: /plugin info <name>\" onDone={onDone} />\n }\n return <PluginInfo pluginName={subArgs[0]} onDone={onDone} />\n\n case 'install':\n if (subArgs.length === 0) {\n return <ErrorMessage message=\"Plugin spec required. Usage: /plugin install <name>[@marketplace]\" onDone={onDone} />\n }\n return <PluginInstall pluginSpec={subArgs[0]} onDone={onDone} />\n\n case 'uninstall':\n if (subArgs.length === 0) {\n return <ErrorMessage message=\"Plugin name required. Usage: /plugin uninstall <name>\" onDone={onDone} />\n }\n return <PluginUninstall pluginName={subArgs[0]} onDone={onDone} />\n\n case 'validate':\n return <PluginValidate pluginName={subArgs[0]} onDone={onDone} />\n\n case 'marketplace':\n const marketplaceSubcommand = subArgs[0]\n const marketplaceArgs = subArgs.slice(1)\n\n switch (marketplaceSubcommand) {\n case 'list':\n return <MarketplaceListView onDone={onDone} />\n\n case 'add':\n if (marketplaceArgs.length === 0) {\n return <ErrorMessage message=\"Source required. Usage: /plugin marketplace add <source>\" onDone={onDone} />\n }\n return <MarketplaceAdd source={marketplaceArgs[0]} onDone={onDone} />\n\n case 'update':\n if (marketplaceArgs.length === 0) {\n return <ErrorMessage message=\"Marketplace name required. Usage: /plugin marketplace update <name>\" onDone={onDone} />\n }\n return <MarketplaceUpdate name={marketplaceArgs[0]} onDone={onDone} />\n\n case 'remove':\n if (marketplaceArgs.length === 0) {\n return <ErrorMessage message=\"Marketplace name required. Usage: /plugin marketplace remove <name>\" onDone={onDone} />\n }\n return <MarketplaceRemove name={marketplaceArgs[0]} onDone={onDone} />\n\n default:\n return (\n <ErrorMessage\n message={`Unknown marketplace subcommand: ${marketplaceSubcommand}. Use /plugin help for usage.`}\n onDone={onDone}\n />\n )\n }\n\n default:\n return (\n <ErrorMessage\n message={`Unknown subcommand: ${subcommand}. Use /plugin help for usage.`}\n onDone={onDone}\n />\n )\n }\n}\n\n// ============================================================================\n// Main Plugin Command Router\n// ============================================================================\n\n/**\n * Main Plugin Command component that routes between interactive and legacy modes.\n *\n * - If no args provided: Use new interactive menu UI\n * - If args provided: Use legacy command-line interface for backward compatibility\n */\nconst PluginCommand: React.FC<{ args: string; onDone: () => void }> = ({ args, onDone }) => {\n // Check if user provided command-line arguments\n if (args.trim()) {\n // Use legacy CLI mode for backward compatibility\n return <LegacyPluginCommand args={args} onDone={onDone} />\n } else {\n // Use new interactive UI when no args provided\n return <InteractivePluginCommand onDone={onDone} />\n }\n}\n\n// ============================================================================\n// Command Export\n// ============================================================================\n\nconst plugin = {\n type: 'local-jsx',\n name: 'plugin',\n description: 'Manage plugins and plugin marketplaces (interactive)',\n isEnabled: true,\n isHidden: false,\n aliases: ['plugins'],\n async call(onDone, _context) {\n // For commands that need args, we parse from user input\n // Since this is a local-jsx command, args are already parsed\n return <PluginCommand args=\"\" onDone={onDone} />\n },\n userFacingName() {\n return 'plugin'\n },\n} satisfies Command\n\nexport default plugin\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["plugin"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
var pr_comments_default = {
|
|
2
|
+
type: "prompt",
|
|
3
|
+
name: "pr-comments",
|
|
4
|
+
description: "Get comments from a GitHub pull request",
|
|
5
|
+
progressMessage: "fetching PR comments",
|
|
6
|
+
isEnabled: true,
|
|
7
|
+
isHidden: false,
|
|
8
|
+
userFacingName() {
|
|
9
|
+
return "pr-comments";
|
|
10
|
+
},
|
|
11
|
+
async getPromptForCommand(args) {
|
|
12
|
+
return [
|
|
13
|
+
{
|
|
14
|
+
role: "user",
|
|
15
|
+
content: [
|
|
16
|
+
{
|
|
17
|
+
type: "text",
|
|
18
|
+
text: `You are an AI assistant integrated into a git-based version control system. Your task is to fetch and display comments from a GitHub pull request.
|
|
19
|
+
|
|
20
|
+
Follow these steps:
|
|
21
|
+
|
|
22
|
+
1. Use \`gh pr view --json number,headRepository\` to get the PR number and repository info
|
|
23
|
+
2. Use \`gh api /repos/{owner}/{repo}/issues/{number}/comments\` to get PR-level comments
|
|
24
|
+
3. Use \`gh api /repos/{owner}/{repo}/pulls/{number}/comments\` to get review comments. Pay particular attention to the following fields: \`body\`, \`diff_hunk\`, \`path\`, \`line\`, etc. If the comment references some code, consider fetching it using eg \`gh api /repos/{owner}/{repo}/contents/{path}?ref={branch} | jq .content -r | base64 -d\`
|
|
25
|
+
4. Parse and format all comments in a readable way
|
|
26
|
+
5. Return ONLY the formatted comments, with no additional text
|
|
27
|
+
|
|
28
|
+
Format the comments as:
|
|
29
|
+
|
|
30
|
+
## Comments
|
|
31
|
+
|
|
32
|
+
[For each comment thread:]
|
|
33
|
+
- @author file.ts#line:
|
|
34
|
+
\`\`\`diff
|
|
35
|
+
[diff_hunk from the API response]
|
|
36
|
+
\`\`\`
|
|
37
|
+
> quoted comment text
|
|
38
|
+
|
|
39
|
+
[any replies indented]
|
|
40
|
+
|
|
41
|
+
If there are no comments, return "No comments found."
|
|
42
|
+
|
|
43
|
+
Remember:
|
|
44
|
+
1. Only show the actual comments, no explanatory text
|
|
45
|
+
2. Include both PR-level and code review comments
|
|
46
|
+
3. Preserve the threading/nesting of comment replies
|
|
47
|
+
4. Show the file and line number context for code review comments
|
|
48
|
+
5. Use jq to parse the JSON responses from the GitHub API
|
|
49
|
+
|
|
50
|
+
${args ? "Additional user input: " + args : ""}
|
|
51
|
+
`
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
];
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
export {
|
|
59
|
+
pr_comments_default as default
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=pr_comments.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/commands/pr_comments.ts"],
|
|
4
|
+
"sourcesContent": ["import { Command } from '@commands'\n\nexport default {\n type: 'prompt',\n name: 'pr-comments',\n description: 'Get comments from a GitHub pull request',\n progressMessage: 'fetching PR comments',\n isEnabled: true,\n isHidden: false,\n userFacingName() {\n return 'pr-comments'\n },\n async getPromptForCommand(args: string) {\n return [\n {\n role: 'user',\n content: [\n {\n type: 'text',\n text: `You are an AI assistant integrated into a git-based version control system. Your task is to fetch and display comments from a GitHub pull request.\n\nFollow these steps:\n\n1. Use \\`gh pr view --json number,headRepository\\` to get the PR number and repository info\n2. Use \\`gh api /repos/{owner}/{repo}/issues/{number}/comments\\` to get PR-level comments\n3. Use \\`gh api /repos/{owner}/{repo}/pulls/{number}/comments\\` to get review comments. Pay particular attention to the following fields: \\`body\\`, \\`diff_hunk\\`, \\`path\\`, \\`line\\`, etc. If the comment references some code, consider fetching it using eg \\`gh api /repos/{owner}/{repo}/contents/{path}?ref={branch} | jq .content -r | base64 -d\\`\n4. Parse and format all comments in a readable way\n5. Return ONLY the formatted comments, with no additional text\n\nFormat the comments as:\n\n## Comments\n\n[For each comment thread:]\n- @author file.ts#line:\n \\`\\`\\`diff\n [diff_hunk from the API response]\n \\`\\`\\`\n > quoted comment text\n \n [any replies indented]\n\nIf there are no comments, return \"No comments found.\"\n\nRemember:\n1. Only show the actual comments, no explanatory text\n2. Include both PR-level and code review comments\n3. Preserve the threading/nesting of comment replies\n4. Show the file and line number context for code review comments\n5. Use jq to parse the JSON responses from the GitHub API\n\n${args ? 'Additional user input: ' + args : ''}\n`,\n },\n ],\n },\n ]\n },\n} satisfies Command\n"],
|
|
5
|
+
"mappings": "AAEA,IAAO,sBAAQ;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,iBAAiB;AACf,WAAO;AAAA,EACT;AAAA,EACA,MAAM,oBAAoB,MAAc;AACtC,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgChB,OAAO,4BAA4B,OAAO,EAAE;AAAA;AAAA,UAEpC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const quit = {
|
|
2
|
+
name: "quit",
|
|
3
|
+
description: "Exit Minto",
|
|
4
|
+
aliases: ["exit", "q"],
|
|
5
|
+
isEnabled: true,
|
|
6
|
+
isHidden: false,
|
|
7
|
+
type: "local",
|
|
8
|
+
userFacingName: () => "quit",
|
|
9
|
+
async call(onDone, context) {
|
|
10
|
+
process.exit(0);
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
export {
|
|
14
|
+
quit
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=quit.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/commands/quit.tsx"],
|
|
4
|
+
"sourcesContent": ["import type { Command } from '../commands'\n\nexport const quit: Command = {\n name: 'quit',\n description: 'Exit Minto',\n aliases: ['exit', 'q'],\n isEnabled: true,\n isHidden: false,\n type: 'local',\n userFacingName: () => 'quit',\n async call(onDone, context) {\n // Exit immediately without showing summary\n process.exit(0)\n },\n}\n"],
|
|
5
|
+
"mappings": "AAEO,MAAM,OAAgB;AAAA,EAC3B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,SAAS,CAAC,QAAQ,GAAG;AAAA,EACrB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM;AAAA,EACN,gBAAgB,MAAM;AAAA,EACtB,MAAM,KAAK,QAAQ,SAAS;AAE1B,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { reloadCustomCommands, reloadPluginCommands } from "../services/customCommands.js";
|
|
2
|
+
import { getCommands } from "../commands.js";
|
|
3
|
+
const refreshCommands = {
|
|
4
|
+
type: "local",
|
|
5
|
+
name: "refresh-commands",
|
|
6
|
+
description: "Reload custom and plugin commands from filesystem",
|
|
7
|
+
isEnabled: true,
|
|
8
|
+
isHidden: false,
|
|
9
|
+
async call(_, context) {
|
|
10
|
+
try {
|
|
11
|
+
reloadCustomCommands();
|
|
12
|
+
reloadPluginCommands();
|
|
13
|
+
getCommands.cache.clear?.();
|
|
14
|
+
const commands = await getCommands();
|
|
15
|
+
const customCommands = commands.filter(
|
|
16
|
+
(cmd) => cmd.name.startsWith("project:") || cmd.name.startsWith("user:")
|
|
17
|
+
);
|
|
18
|
+
const pluginCommands = commands.filter(
|
|
19
|
+
(cmd) => cmd.name.startsWith("plugin:")
|
|
20
|
+
);
|
|
21
|
+
return `\u2705 Commands refreshed successfully!
|
|
22
|
+
|
|
23
|
+
Custom commands reloaded: ${customCommands.length}
|
|
24
|
+
- Project commands: ${customCommands.filter((cmd) => cmd.name.startsWith("project:")).length}
|
|
25
|
+
- User commands: ${customCommands.filter((cmd) => cmd.name.startsWith("user:")).length}
|
|
26
|
+
|
|
27
|
+
Plugin commands reloaded: ${pluginCommands.length}
|
|
28
|
+
|
|
29
|
+
Use /help to see updated command list.`;
|
|
30
|
+
} catch (error) {
|
|
31
|
+
console.error("Failed to refresh commands:", error);
|
|
32
|
+
return "\u274C Failed to refresh commands. Check console for details.";
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
userFacingName() {
|
|
36
|
+
return "refresh-commands";
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
var refreshCommands_default = refreshCommands;
|
|
40
|
+
export {
|
|
41
|
+
refreshCommands_default as default
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=refreshCommands.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/commands/refreshCommands.ts"],
|
|
4
|
+
"sourcesContent": ["import { Command } from '@commands'\nimport { reloadCustomCommands, reloadPluginCommands } from '@services/customCommands'\nimport { getCommands } from '@commands'\n\n/**\n * Refresh Commands - Reload custom and plugin commands from filesystem\n *\n * This command provides a runtime mechanism to refresh the custom commands\n * and plugin commands cache without restarting the application. It's particularly\n * useful during development or when users are actively creating/modifying\n * custom commands or installing/updating plugins.\n *\n * The command follows the standard local command pattern used throughout\n * the project and provides detailed feedback about the refresh operation.\n */\nconst refreshCommands = {\n type: 'local',\n name: 'refresh-commands',\n description: 'Reload custom and plugin commands from filesystem',\n isEnabled: true,\n isHidden: false,\n async call(_, context) {\n try {\n // Clear custom commands cache to force filesystem rescan\n reloadCustomCommands()\n\n // Clear plugin commands cache to force plugin rescan\n reloadPluginCommands()\n\n // Clear the main commands cache to ensure full reload\n // This ensures that changes to custom and plugin commands are reflected in the main command list\n getCommands.cache.clear?.()\n\n // Reload commands to get updated count and validate the refresh\n const commands = await getCommands()\n const customCommands = commands.filter(\n cmd => cmd.name.startsWith('project:') || cmd.name.startsWith('user:'),\n )\n const pluginCommands = commands.filter(\n cmd => cmd.name.startsWith('plugin:'),\n )\n\n // Provide detailed feedback about the refresh operation\n return `\u2705 Commands refreshed successfully!\n\nCustom commands reloaded: ${customCommands.length}\n- Project commands: ${customCommands.filter(cmd => cmd.name.startsWith('project:')).length}\n- User commands: ${customCommands.filter(cmd => cmd.name.startsWith('user:')).length}\n\nPlugin commands reloaded: ${pluginCommands.length}\n\nUse /help to see updated command list.`\n } catch (error) {\n console.error('Failed to refresh commands:', error)\n return '\u274C Failed to refresh commands. Check console for details.'\n }\n },\n userFacingName() {\n return 'refresh-commands'\n },\n} satisfies Command\n\nexport default refreshCommands\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,sBAAsB,4BAA4B;AAC3D,SAAS,mBAAmB;AAa5B,MAAM,kBAAkB;AAAA,EACtB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM,KAAK,GAAG,SAAS;AACrB,QAAI;AAEF,2BAAqB;AAGrB,2BAAqB;AAIrB,kBAAY,MAAM,QAAQ;AAG1B,YAAM,WAAW,MAAM,YAAY;AACnC,YAAM,iBAAiB,SAAS;AAAA,QAC9B,SAAO,IAAI,KAAK,WAAW,UAAU,KAAK,IAAI,KAAK,WAAW,OAAO;AAAA,MACvE;AACA,YAAM,iBAAiB,SAAS;AAAA,QAC9B,SAAO,IAAI,KAAK,WAAW,SAAS;AAAA,MACtC;AAGA,aAAO;AAAA;AAAA,4BAEe,eAAe,MAAM;AAAA,sBAC3B,eAAe,OAAO,SAAO,IAAI,KAAK,WAAW,UAAU,CAAC,EAAE,MAAM;AAAA,mBACvE,eAAe,OAAO,SAAO,IAAI,KAAK,WAAW,OAAO,CAAC,EAAE,MAAM;AAAA;AAAA,4BAExD,eAAe,MAAM;AAAA;AAAA;AAAA,IAG7C,SAAS,OAAO;AACd,cAAQ,MAAM,+BAA+B,KAAK;AAClD,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,iBAAiB;AACf,WAAO;AAAA,EACT;AACF;AAEA,IAAO,0BAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { MACRO } from "../constants/macros.js";
|
|
2
|
+
import { RELEASE_NOTES } from "../constants/releaseNotes.js";
|
|
3
|
+
const releaseNotes = {
|
|
4
|
+
description: "Show release notes for the current or specified version",
|
|
5
|
+
isEnabled: false,
|
|
6
|
+
isHidden: false,
|
|
7
|
+
name: "release-notes",
|
|
8
|
+
userFacingName() {
|
|
9
|
+
return "release-notes";
|
|
10
|
+
},
|
|
11
|
+
type: "local",
|
|
12
|
+
async call(args) {
|
|
13
|
+
const currentVersion = MACRO.VERSION;
|
|
14
|
+
const requestedVersion = args ? args.trim() : currentVersion;
|
|
15
|
+
const notes = RELEASE_NOTES[requestedVersion];
|
|
16
|
+
if (!notes || notes.length === 0) {
|
|
17
|
+
return `No release notes available for version ${requestedVersion}.`;
|
|
18
|
+
}
|
|
19
|
+
const header = `Release notes for version ${requestedVersion}:`;
|
|
20
|
+
const formattedNotes = notes.map((note) => `\u2022 ${note}`).join("\n");
|
|
21
|
+
return `${header}
|
|
22
|
+
|
|
23
|
+
${formattedNotes}`;
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
var release_notes_default = releaseNotes;
|
|
27
|
+
export {
|
|
28
|
+
release_notes_default as default
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=release-notes.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/commands/release-notes.ts"],
|
|
4
|
+
"sourcesContent": ["import { MACRO } from '@constants/macros'\nimport type { Command } from '@commands'\nimport { RELEASE_NOTES } from '@constants/releaseNotes'\n\nconst releaseNotes: Command = {\n description: 'Show release notes for the current or specified version',\n isEnabled: false,\n isHidden: false,\n name: 'release-notes',\n userFacingName() {\n return 'release-notes'\n },\n type: 'local',\n async call(args) {\n const currentVersion = MACRO.VERSION\n\n // If a specific version is requested, show that version's notes\n const requestedVersion = args ? args.trim() : currentVersion\n\n // Get the requested version's notes\n const notes = RELEASE_NOTES[requestedVersion]\n\n if (!notes || notes.length === 0) {\n return `No release notes available for version ${requestedVersion}.`\n }\n\n const header = `Release notes for version ${requestedVersion}:`\n const formattedNotes = notes.map(note => `\u2022 ${note}`).join('\\n')\n\n return `${header}\\n\\n${formattedNotes}`\n },\n}\n\nexport default releaseNotes\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,aAAa;AAEtB,SAAS,qBAAqB;AAE9B,MAAM,eAAwB;AAAA,EAC5B,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM;AAAA,EACN,iBAAiB;AACf,WAAO;AAAA,EACT;AAAA,EACA,MAAM;AAAA,EACN,MAAM,KAAK,MAAM;AACf,UAAM,iBAAiB,MAAM;AAG7B,UAAM,mBAAmB,OAAO,KAAK,KAAK,IAAI;AAG9C,UAAM,QAAQ,cAAc,gBAAgB;AAE5C,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,aAAO,0CAA0C,gBAAgB;AAAA,IACnE;AAEA,UAAM,SAAS,6BAA6B,gBAAgB;AAC5D,UAAM,iBAAiB,MAAM,IAAI,UAAQ,UAAK,IAAI,EAAE,EAAE,KAAK,IAAI;AAE/D,WAAO,GAAG,MAAM;AAAA;AAAA,EAAO,cAAc;AAAA,EACvC;AACF;AAEA,IAAO,wBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { ResumeConversation } from "../screens/ResumeConversation.js";
|
|
3
|
+
import { render } from "ink";
|
|
4
|
+
import { CACHE_PATHS, loadLogList } from "../utils/log.js";
|
|
5
|
+
var resume_default = {
|
|
6
|
+
type: "local-jsx",
|
|
7
|
+
name: "resume",
|
|
8
|
+
description: "Resume a previous conversation",
|
|
9
|
+
isEnabled: true,
|
|
10
|
+
isHidden: false,
|
|
11
|
+
userFacingName() {
|
|
12
|
+
return "resume";
|
|
13
|
+
},
|
|
14
|
+
async call(onDone, context) {
|
|
15
|
+
const { commands = [], tools = [], verbose = false } = context.options || {};
|
|
16
|
+
const logs = await loadLogList(CACHE_PATHS.messages());
|
|
17
|
+
render(
|
|
18
|
+
/* @__PURE__ */ React.createElement(
|
|
19
|
+
ResumeConversation,
|
|
20
|
+
{
|
|
21
|
+
commands,
|
|
22
|
+
context: { unmount: onDone },
|
|
23
|
+
logs,
|
|
24
|
+
tools,
|
|
25
|
+
verbose
|
|
26
|
+
}
|
|
27
|
+
)
|
|
28
|
+
);
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
export {
|
|
33
|
+
resume_default as default
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=resume.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/commands/resume.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react'\nimport type { Command } from '@commands'\nimport { ResumeConversation } from '@screens/ResumeConversation'\nimport { render } from 'ink'\nimport { CACHE_PATHS, loadLogList } from '@utils/log'\n\nexport default {\n type: 'local-jsx',\n name: 'resume',\n description: 'Resume a previous conversation',\n isEnabled: true,\n isHidden: false,\n userFacingName() {\n return 'resume'\n },\n async call(onDone, context) {\n const { commands = [], tools = [], verbose = false } = context.options || {}\n const logs = await loadLogList(CACHE_PATHS.messages())\n render(\n <ResumeConversation\n commands={commands}\n context={{ unmount: onDone }}\n logs={logs}\n tools={tools}\n verbose={verbose}\n />,\n )\n // This return is here for type only\n return null\n },\n} satisfies Command\n"],
|
|
5
|
+
"mappings": "AAAA,YAAY,WAAW;AAEvB,SAAS,0BAA0B;AACnC,SAAS,cAAc;AACvB,SAAS,aAAa,mBAAmB;AAEzC,IAAO,iBAAQ;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AAAA,EACV,iBAAiB;AACf,WAAO;AAAA,EACT;AAAA,EACA,MAAM,KAAK,QAAQ,SAAS;AAC1B,UAAM,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,GAAG,UAAU,MAAM,IAAI,QAAQ,WAAW,CAAC;AAC3E,UAAM,OAAO,MAAM,YAAY,YAAY,SAAS,CAAC;AACrD;AAAA,MACE;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA,SAAS,EAAE,SAAS,OAAO;AAAA,UAC3B;AAAA,UACA;AAAA,UACA;AAAA;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { BashTool } from "../tools/BashTool/BashTool.js";
|
|
2
|
+
var review_default = {
|
|
3
|
+
type: "prompt",
|
|
4
|
+
name: "review",
|
|
5
|
+
description: "Review a pull request",
|
|
6
|
+
isEnabled: true,
|
|
7
|
+
isHidden: false,
|
|
8
|
+
progressMessage: "reviewing pull request",
|
|
9
|
+
userFacingName() {
|
|
10
|
+
return "review";
|
|
11
|
+
},
|
|
12
|
+
async getPromptForCommand(args) {
|
|
13
|
+
return [
|
|
14
|
+
{
|
|
15
|
+
role: "user",
|
|
16
|
+
content: [
|
|
17
|
+
{
|
|
18
|
+
type: "text",
|
|
19
|
+
text: `
|
|
20
|
+
You are an expert code reviewer. Follow these steps:
|
|
21
|
+
|
|
22
|
+
1. If no PR number is provided in the args, use ${BashTool.name}("gh pr list") to show open PRs
|
|
23
|
+
2. If a PR number is provided, use ${BashTool.name}("gh pr view <number>") to get PR details
|
|
24
|
+
3. Use ${BashTool.name}("gh pr diff <number>") to get the diff
|
|
25
|
+
4. Analyze the changes and provide a thorough code review that includes:
|
|
26
|
+
- Overview of what the PR does
|
|
27
|
+
- Analysis of code quality and style
|
|
28
|
+
- Specific suggestions for improvements
|
|
29
|
+
- Any potential issues or risks
|
|
30
|
+
|
|
31
|
+
Keep your review concise but thorough. Focus on:
|
|
32
|
+
- Code correctness
|
|
33
|
+
- Following project conventions
|
|
34
|
+
- Performance implications
|
|
35
|
+
- Test coverage
|
|
36
|
+
- Security considerations
|
|
37
|
+
|
|
38
|
+
Format your review with clear sections and bullet points.
|
|
39
|
+
|
|
40
|
+
PR number: ${args}
|
|
41
|
+
`
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
export {
|
|
49
|
+
review_default as default
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/commands/review.ts"],
|
|
4
|
+
"sourcesContent": ["import { Command } from '@commands'\nimport { BashTool } from '@tools/BashTool/BashTool'\n\nexport default {\n type: 'prompt',\n name: 'review',\n description: 'Review a pull request',\n isEnabled: true,\n isHidden: false,\n progressMessage: 'reviewing pull request',\n userFacingName() {\n return 'review'\n },\n async getPromptForCommand(args) {\n return [\n {\n role: 'user',\n content: [\n {\n type: 'text',\n text: `\n You are an expert code reviewer. Follow these steps:\n\n 1. If no PR number is provided in the args, use ${BashTool.name}(\"gh pr list\") to show open PRs\n 2. If a PR number is provided, use ${BashTool.name}(\"gh pr view <number>\") to get PR details\n 3. Use ${BashTool.name}(\"gh pr diff <number>\") to get the diff\n 4. Analyze the changes and provide a thorough code review that includes:\n - Overview of what the PR does\n - Analysis of code quality and style\n - Specific suggestions for improvements\n - Any potential issues or risks\n \n Keep your review concise but thorough. Focus on:\n - Code correctness\n - Following project conventions\n - Performance implications\n - Test coverage\n - Security considerations\n\n Format your review with clear sections and bullet points.\n\n PR number: ${args}\n `,\n },\n ],\n },\n ]\n },\n} satisfies Command\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,gBAAgB;AAEzB,IAAO,iBAAQ;AAAA,EACb,MAAM;AAAA,EACN,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW;AAAA,EACX,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,iBAAiB;AACf,WAAO;AAAA,EACT;AAAA,EACA,MAAM,oBAAoB,MAAM;AAC9B,WAAO;AAAA,MACL;AAAA,QACE,MAAM;AAAA,QACN,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA;AAAA;AAAA,wDAGsC,SAAS,IAAI;AAAA,2CAC1B,SAAS,IAAI;AAAA,eACzC,SAAS,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAgBT,IAAI;AAAA;AAAA,UAEb;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { EOL, platform, homedir } from "os";
|
|
2
|
+
import { execFileNoThrow } from "../utils/execFileNoThrow.js";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { getTheme } from "../utils/theme.js";
|
|
5
|
+
import { env } from "../utils/env.js";
|
|
6
|
+
import { getGlobalConfig, saveGlobalConfig } from "../utils/config.js";
|
|
7
|
+
import { markProjectOnboardingComplete } from "../components/ProjectOnboarding.js";
|
|
8
|
+
import { readFileSync, writeFileSync } from "fs";
|
|
9
|
+
import { join } from "path";
|
|
10
|
+
import { safeParseJSON } from "../utils/json.js";
|
|
11
|
+
import { logError } from "../utils/log.js";
|
|
12
|
+
import { PROJECT_FILE } from "../constants/product.js";
|
|
13
|
+
const terminalSetup = {
|
|
14
|
+
type: "local",
|
|
15
|
+
name: "terminal-setup",
|
|
16
|
+
userFacingName() {
|
|
17
|
+
return "terminal-setup";
|
|
18
|
+
},
|
|
19
|
+
description: "Install Shift+Enter key binding for newlines (iTerm2 and VSCode only)",
|
|
20
|
+
isEnabled: platform() === "darwin" && env.terminal === "iTerm.app" || env.terminal === "vscode",
|
|
21
|
+
isHidden: false,
|
|
22
|
+
async call() {
|
|
23
|
+
let result = "";
|
|
24
|
+
switch (env.terminal) {
|
|
25
|
+
case "iTerm.app":
|
|
26
|
+
result = await installBindingsForITerm2();
|
|
27
|
+
break;
|
|
28
|
+
case "vscode":
|
|
29
|
+
result = installBindingsForVSCodeTerminal();
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
const config = getGlobalConfig();
|
|
33
|
+
config.shiftEnterKeyBindingInstalled = true;
|
|
34
|
+
saveGlobalConfig(config);
|
|
35
|
+
markProjectOnboardingComplete();
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
function isShiftEnterKeyBindingInstalled() {
|
|
40
|
+
return getGlobalConfig().shiftEnterKeyBindingInstalled === true;
|
|
41
|
+
}
|
|
42
|
+
function handleHashCommand(interpreted) {
|
|
43
|
+
try {
|
|
44
|
+
const cwd = process.cwd();
|
|
45
|
+
const codeContextPath = join(cwd, PROJECT_FILE);
|
|
46
|
+
const claudePath = join(cwd, "CLAUDE.md");
|
|
47
|
+
const filesToUpdate = [];
|
|
48
|
+
filesToUpdate.push({ path: codeContextPath, name: PROJECT_FILE });
|
|
49
|
+
try {
|
|
50
|
+
readFileSync(claudePath, "utf-8");
|
|
51
|
+
filesToUpdate.push({ path: claudePath, name: "CLAUDE.md" });
|
|
52
|
+
} catch {
|
|
53
|
+
}
|
|
54
|
+
const now = /* @__PURE__ */ new Date();
|
|
55
|
+
const timezoneMatch = now.toString().match(/\(([A-Z]+)\)/);
|
|
56
|
+
const timezone = timezoneMatch ? timezoneMatch[1] : now.toLocaleTimeString("en-us", { timeZoneName: "short" }).split(" ").pop();
|
|
57
|
+
const timestamp = interpreted.includes(now.getFullYear().toString()) ? "" : `
|
|
58
|
+
|
|
59
|
+
_Added on ${now.toLocaleString()} ${timezone}_`;
|
|
60
|
+
const updatedFiles = [];
|
|
61
|
+
for (const file of filesToUpdate) {
|
|
62
|
+
try {
|
|
63
|
+
let existingContent = "";
|
|
64
|
+
try {
|
|
65
|
+
existingContent = readFileSync(file.path, "utf-8").trim();
|
|
66
|
+
} catch (error) {
|
|
67
|
+
}
|
|
68
|
+
const separator = existingContent ? "\n\n" : "";
|
|
69
|
+
const newContent = `${existingContent}${separator}${interpreted}${timestamp}`;
|
|
70
|
+
writeFileSync(file.path, newContent, "utf-8");
|
|
71
|
+
updatedFiles.push(file.name);
|
|
72
|
+
} catch (error) {
|
|
73
|
+
logError(error);
|
|
74
|
+
console.error(
|
|
75
|
+
chalk.hex(getTheme().error)(
|
|
76
|
+
`Failed to update ${file.name}: ${error.message}`
|
|
77
|
+
)
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (updatedFiles.length > 0) {
|
|
82
|
+
console.log(
|
|
83
|
+
chalk.hex(getTheme().success)(
|
|
84
|
+
`Added note to ${updatedFiles.join(" and ")}`
|
|
85
|
+
)
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
} catch (e) {
|
|
89
|
+
logError(e);
|
|
90
|
+
console.error(
|
|
91
|
+
chalk.hex(getTheme().error)(`Failed to add note: ${e.message}`)
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
var terminalSetup_default = terminalSetup;
|
|
96
|
+
async function installBindingsForITerm2() {
|
|
97
|
+
const { code } = await execFileNoThrow("defaults", [
|
|
98
|
+
"write",
|
|
99
|
+
"com.googlecode.iterm2",
|
|
100
|
+
"GlobalKeyMap",
|
|
101
|
+
"-dict-add",
|
|
102
|
+
"0xd-0x20000-0x24",
|
|
103
|
+
`<dict>
|
|
104
|
+
<key>Text</key>
|
|
105
|
+
<string>\\n</string>
|
|
106
|
+
<key>Action</key>
|
|
107
|
+
<integer>12</integer>
|
|
108
|
+
<key>Version</key>
|
|
109
|
+
<integer>1</integer>
|
|
110
|
+
<key>Keycode</key>
|
|
111
|
+
<integer>13</integer>
|
|
112
|
+
<key>Modifiers</key>
|
|
113
|
+
<integer>131072</integer>
|
|
114
|
+
</dict>`
|
|
115
|
+
]);
|
|
116
|
+
if (code !== 0) {
|
|
117
|
+
throw new Error("Failed to install iTerm2 Shift+Enter key binding");
|
|
118
|
+
}
|
|
119
|
+
return `${chalk.hex(getTheme().success)(
|
|
120
|
+
"Installed iTerm2 Shift+Enter key binding"
|
|
121
|
+
)}${EOL}${chalk.dim("See iTerm2 \u2192 Preferences \u2192 Keys")}${EOL}`;
|
|
122
|
+
}
|
|
123
|
+
function installBindingsForVSCodeTerminal() {
|
|
124
|
+
const vscodeKeybindingsPath = join(
|
|
125
|
+
homedir(),
|
|
126
|
+
platform() === "win32" ? join("AppData", "Roaming", "Code", "User") : platform() === "darwin" ? join("Library", "Application Support", "Code", "User") : join(".config", "Code", "User"),
|
|
127
|
+
"keybindings.json"
|
|
128
|
+
);
|
|
129
|
+
try {
|
|
130
|
+
const content = readFileSync(vscodeKeybindingsPath, "utf-8");
|
|
131
|
+
const keybindings = safeParseJSON(content) ?? [];
|
|
132
|
+
const existingBinding = keybindings.find(
|
|
133
|
+
(binding) => binding.key === "shift+enter" && binding.command === "workbench.action.terminal.sendSequence" && binding.when === "terminalFocus"
|
|
134
|
+
);
|
|
135
|
+
if (existingBinding) {
|
|
136
|
+
return `${chalk.hex(getTheme().warning)(
|
|
137
|
+
"Found existing VSCode terminal Shift+Enter key binding. Remove it to continue."
|
|
138
|
+
)}${EOL}${chalk.dim(`See ${vscodeKeybindingsPath}`)}${EOL}`;
|
|
139
|
+
}
|
|
140
|
+
keybindings.push({
|
|
141
|
+
key: "shift+enter",
|
|
142
|
+
command: "workbench.action.terminal.sendSequence",
|
|
143
|
+
args: { text: "\\\r\n" },
|
|
144
|
+
when: "terminalFocus"
|
|
145
|
+
});
|
|
146
|
+
writeFileSync(
|
|
147
|
+
vscodeKeybindingsPath,
|
|
148
|
+
JSON.stringify(keybindings, null, 4),
|
|
149
|
+
"utf-8"
|
|
150
|
+
);
|
|
151
|
+
return `${chalk.hex(getTheme().success)(
|
|
152
|
+
"Installed VSCode terminal Shift+Enter key binding"
|
|
153
|
+
)}${EOL}${chalk.dim(`See ${vscodeKeybindingsPath}`)}${EOL}`;
|
|
154
|
+
} catch (e) {
|
|
155
|
+
logError(e);
|
|
156
|
+
throw new Error("Failed to install VSCode terminal Shift+Enter key binding");
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
export {
|
|
160
|
+
terminalSetup_default as default,
|
|
161
|
+
handleHashCommand,
|
|
162
|
+
isShiftEnterKeyBindingInstalled
|
|
163
|
+
};
|
|
164
|
+
//# sourceMappingURL=terminalSetup.js.map
|