@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/InstalledPluginsManager.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * Installed Plugins Manager\n *\n * Displays all installed plugins grouped by marketplace.\n * Allows navigation to marketplace-specific plugin management.\n */\n\nimport React, { useState, useEffect } from 'react'\nimport { Box, Text, useInput } from 'ink'\nimport { loadAllPlugins } from '@utils/pluginLoader'\nimport { listMarketplaces, getMarketplace } from '@utils/marketplaceManager'\nimport { LoadedPlugin } from '../../types/plugin'\nimport { getTheme } from '@utils/theme'\nimport { NavigationProps } from './types'\n\ninterface MarketplaceGroup {\n name: string\n plugins: LoadedPlugin[]\n installedCount: number\n enabledCount: number\n}\n\nexport const InstalledPluginsManager: React.FC<NavigationProps> = ({\n onNavigate,\n onBack,\n}) => {\n const [marketplaces, setMarketplaces] = useState<MarketplaceGroup[]>([])\n const [selectedIndex, setSelectedIndex] = useState(0)\n const [loading, setLoading] = useState(true)\n const theme = getTheme()\n\n // Reload plugins whenever this component is rendered\n useEffect(() => {\n setLoading(true)\n\n // Small delay to ensure UI is ready\n const timer = setTimeout(() => {\n try {\n // Load all installed plugins\n const plugins = loadAllPlugins()\n\n // Get registered marketplaces\n const registeredMarketplaces = listMarketplaces()\n const marketplaceNames = new Set(registeredMarketplaces.map((m) => m.name))\n\n // Group plugins by marketplace\n const grouped: Record<string, LoadedPlugin[]> = {}\n\n for (const plugin of plugins) {\n let marketplaceName = 'local'\n\n // Try to determine marketplace from source\n if (plugin.source.type === 'marketplace') {\n marketplaceName = plugin.source.marketplace\n } else {\n // Check if plugin location matches any marketplace\n for (const marketplace of registeredMarketplaces) {\n if (plugin.location.includes(marketplace.name)) {\n marketplaceName = marketplace.name\n break\n }\n }\n }\n\n if (!grouped[marketplaceName]) {\n grouped[marketplaceName] = []\n }\n grouped[marketplaceName].push(plugin)\n }\n\n // Convert to display format\n const groups: MarketplaceGroup[] = Object.entries(grouped).map(\n ([name, plugins]) => ({\n name,\n plugins,\n installedCount: plugins.length,\n enabledCount: plugins.filter((p) => p.enabled).length,\n })\n )\n\n // Sort: marketplaces first, then local\n groups.sort((a, b) => {\n if (a.name === 'local') return 1\n if (b.name === 'local') return -1\n return a.name.localeCompare(b.name)\n })\n\n setMarketplaces(groups)\n } finally {\n setLoading(false)\n }\n }, 100)\n\n return () => clearTimeout(timer)\n }, []) // Keep empty deps but reload happens on mount\n\n useInput((input, key) => {\n if (key.escape) {\n onBack()\n } else if (key.upArrow) {\n setSelectedIndex((prev) => Math.max(0, prev - 1))\n } else if (key.downArrow) {\n setSelectedIndex((prev) => Math.min(marketplaces.length - 1, prev + 1))\n } else if (key.return) {\n if (marketplaces[selectedIndex]) {\n const selectedMarketplace = marketplaces[selectedIndex].name\n const registeredMarketplace = getMarketplace(selectedMarketplace)\n\n onNavigate({\n screen: 'installed-plugins-by-marketplace',\n marketplace: registeredMarketplace || {\n name: selectedMarketplace,\n source: { type: 'local', path: selectedMarketplace },\n manifest: {\n name: selectedMarketplace,\n version: '1.0.0',\n plugins: [],\n owner: { name: 'local', email: '' },\n },\n lastUpdated: new Date(),\n enabled: true,\n },\n })\n }\n }\n })\n\n if (loading) {\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" padding={1}>\n <Text bold color={theme.primary}>\n Manage Installed Plugins\n </Text>\n <Text dimColor>Loading installed plugins...</Text>\n </Box>\n )\n }\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" padding={1}>\n <Text bold color={theme.primary}>\n Manage Installed Plugins\n </Text>\n <Text dimColor>Select a marketplace to manage plugins:</Text>\n <Text>{''}</Text>\n\n {marketplaces.length === 0 ? (\n <Box marginLeft={2}>\n <Text color={theme.warning}>No plugins installed</Text>\n </Box>\n ) : (\n marketplaces.map((group, index) => {\n const isSelected = index === selectedIndex\n return (\n <Box key={group.name} marginLeft={2}>\n <Text color={isSelected ? theme.success : undefined}>\n {isSelected ? '\u276F ' : ' '}\n {group.name}\n </Text>\n <Text dimColor>\n {' '}\n ({group.enabledCount}/{group.installedCount} enabled)\n </Text>\n </Box>\n )\n })\n )}\n\n <Text>{''}</Text>\n <Box marginLeft={2}>\n <Text dimColor>\u2191\u2193 Navigate \u00B7 Enter Select \u00B7 Esc Back</Text>\n </Box>\n </Box>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["plugins"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { SimpleSpinner } from "../../components/Spinner.js";
|
|
4
|
+
import { getTheme } from "../../utils/theme.js";
|
|
5
|
+
const LoadingView = ({
|
|
6
|
+
label = "Loading..."
|
|
7
|
+
}) => {
|
|
8
|
+
const theme = getTheme();
|
|
9
|
+
return /* @__PURE__ */ React.createElement(Box, { padding: 2 }, /* @__PURE__ */ React.createElement(SimpleSpinner, null), /* @__PURE__ */ React.createElement(Text, { color: theme.primary }, " ", label));
|
|
10
|
+
};
|
|
11
|
+
export {
|
|
12
|
+
LoadingView
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=LoadingView.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/commands/plugin/LoadingView.tsx"],
|
|
4
|
+
"sourcesContent": ["import React from 'react'\nimport { Box, Text } from 'ink'\nimport { SimpleSpinner } from '@components/Spinner'\nimport { getTheme } from '@utils/theme'\n\nexport interface LoadingViewProps {\n label?: string\n}\n\nexport const LoadingView: React.FC<LoadingViewProps> = ({\n label = 'Loading...',\n}) => {\n const theme = getTheme()\n\n return (\n <Box padding={2}>\n <SimpleSpinner />\n <Text color={theme.primary}> {label}</Text>\n </Box>\n )\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAO,WAAW;AAClB,SAAS,KAAK,YAAY;AAC1B,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AAMlB,MAAM,cAA0C,CAAC;AAAA,EACtD,QAAQ;AACV,MAAM;AACJ,QAAM,QAAQ,SAAS;AAEvB,SACE,oCAAC,OAAI,SAAS,KACZ,oCAAC,mBAAc,GACf,oCAAC,QAAK,OAAO,MAAM,WAAS,KAAE,KAAM,CACtC;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Box, Text, useInput } from "ink";
|
|
3
|
+
import { Select } from "../../components/CustomSelect/select.js";
|
|
4
|
+
import { getTheme } from "../../utils/theme.js";
|
|
5
|
+
const MainMenu = ({ onNavigate, onBack, onDone }) => {
|
|
6
|
+
const theme = getTheme();
|
|
7
|
+
const options = [
|
|
8
|
+
{
|
|
9
|
+
label: "1. Browse and install plugins",
|
|
10
|
+
value: "browse"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
label: "2. Manage and uninstall plugins",
|
|
14
|
+
value: "manage"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
label: "3. Add marketplace",
|
|
18
|
+
value: "add-marketplace"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
label: "4. Manage marketplaces",
|
|
22
|
+
value: "manage-marketplaces"
|
|
23
|
+
}
|
|
24
|
+
];
|
|
25
|
+
const handleSelect = (value) => {
|
|
26
|
+
switch (value) {
|
|
27
|
+
case "browse":
|
|
28
|
+
onNavigate({ screen: "marketplace-selector" });
|
|
29
|
+
break;
|
|
30
|
+
case "manage":
|
|
31
|
+
onNavigate({ screen: "installed-plugins-manager" });
|
|
32
|
+
break;
|
|
33
|
+
case "add-marketplace":
|
|
34
|
+
onNavigate({ screen: "add-marketplace" });
|
|
35
|
+
break;
|
|
36
|
+
case "manage-marketplaces":
|
|
37
|
+
onNavigate({ screen: "marketplace-manager" });
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
useInput((input, key) => {
|
|
42
|
+
if (key.escape) {
|
|
43
|
+
onDone();
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: theme.primary, padding: 1 }, /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { bold: true, color: theme.primary }, "Plugins")), /* @__PURE__ */ React.createElement(
|
|
47
|
+
Select,
|
|
48
|
+
{
|
|
49
|
+
options,
|
|
50
|
+
onChange: handleSelect
|
|
51
|
+
}
|
|
52
|
+
), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Esc to exit")));
|
|
53
|
+
};
|
|
54
|
+
export {
|
|
55
|
+
MainMenu
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=MainMenu.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/commands/plugin/MainMenu.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * Main Menu Component\n *\n * Entry point for the interactive plugin management interface.\n * Provides navigation to all major plugin management functions.\n */\n\nimport React from 'react'\nimport { Box, Text, useInput } from 'ink'\nimport { Select } from '@components/CustomSelect/select'\nimport { getTheme } from '@utils/theme'\nimport type { NavigationProps } from './types'\n\nexport const MainMenu: React.FC<NavigationProps> = ({ onNavigate, onBack, onDone }) => {\n const theme = getTheme()\n\n const options = [\n {\n label: '1. Browse and install plugins',\n value: 'browse'\n },\n {\n label: '2. Manage and uninstall plugins',\n value: 'manage'\n },\n {\n label: '3. Add marketplace',\n value: 'add-marketplace'\n },\n {\n label: '4. Manage marketplaces',\n value: 'manage-marketplaces'\n }\n ]\n\n const handleSelect = (value: string) => {\n switch (value) {\n case 'browse':\n onNavigate({ screen: 'marketplace-selector' })\n break\n case 'manage':\n onNavigate({ screen: 'installed-plugins-manager' })\n break\n case 'add-marketplace':\n onNavigate({ screen: 'add-marketplace' })\n break\n case 'manage-marketplaces':\n onNavigate({ screen: 'marketplace-manager' })\n break\n }\n }\n\n // Handle Escape key to exit\n useInput((input, key) => {\n if (key.escape) {\n onDone()\n }\n })\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor={theme.primary} padding={1}>\n <Box marginBottom={1}>\n <Text bold color={theme.primary}>Plugins</Text>\n </Box>\n\n <Select\n options={options}\n onChange={handleSelect}\n />\n\n <Box marginTop={1}>\n <Text dimColor>Esc to exit</Text>\n </Box>\n </Box>\n )\n}\n"],
|
|
5
|
+
"mappings": "AAOA,OAAO,WAAW;AAClB,SAAS,KAAK,MAAM,gBAAgB;AACpC,SAAS,cAAc;AACvB,SAAS,gBAAgB;AAGlB,MAAM,WAAsC,CAAC,EAAE,YAAY,QAAQ,OAAO,MAAM;AACrF,QAAM,QAAQ,SAAS;AAEvB,QAAM,UAAU;AAAA,IACd;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,IACA;AAAA,MACE,OAAO;AAAA,MACP,OAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,eAAe,CAAC,UAAkB;AACtC,YAAQ,OAAO;AAAA,MACb,KAAK;AACH,mBAAW,EAAE,QAAQ,uBAAuB,CAAC;AAC7C;AAAA,MACF,KAAK;AACH,mBAAW,EAAE,QAAQ,4BAA4B,CAAC;AAClD;AAAA,MACF,KAAK;AACH,mBAAW,EAAE,QAAQ,kBAAkB,CAAC;AACxC;AAAA,MACF,KAAK;AACH,mBAAW,EAAE,QAAQ,sBAAsB,CAAC;AAC5C;AAAA,IACJ;AAAA,EACF;AAGA,WAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,IAAI,QAAQ;AACd,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,SACE,oCAAC,OAAI,eAAc,UAAS,aAAY,SAAQ,aAAa,MAAM,SAAS,SAAS,KACnF,oCAAC,OAAI,cAAc,KACjB,oCAAC,QAAK,MAAI,MAAC,OAAO,MAAM,WAAS,SAAO,CAC1C,GAEA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,UAAU;AAAA;AAAA,EACZ,GAEA,oCAAC,OAAI,WAAW,KACd,oCAAC,QAAK,UAAQ,QAAC,aAAW,CAC5B,CACF;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import React, { useState, useEffect } from "react";
|
|
2
|
+
import { Box, Text, useInput } from "ink";
|
|
3
|
+
import { SimpleSpinner } from "../../components/Spinner.js";
|
|
4
|
+
import {
|
|
5
|
+
listMarketplaces,
|
|
6
|
+
updateMarketplace,
|
|
7
|
+
removeMarketplace
|
|
8
|
+
} from "../../utils/marketplaceManager.js";
|
|
9
|
+
import { MarketplaceError } from "../../types/marketplace.js";
|
|
10
|
+
import { getTheme } from "../../utils/theme.js";
|
|
11
|
+
import { formatMarketplacePath, formatTimeAgo, countInstalledPlugins } from "./utils.js";
|
|
12
|
+
import { ConfirmDialog } from "./ConfirmDialog.js";
|
|
13
|
+
const MarketplaceManager = ({
|
|
14
|
+
onNavigate,
|
|
15
|
+
onBack
|
|
16
|
+
}) => {
|
|
17
|
+
const [marketplaces, setMarketplaces] = useState([]);
|
|
18
|
+
const [focusedIndex, setFocusedIndex] = useState(0);
|
|
19
|
+
const [loading, setLoading] = useState(false);
|
|
20
|
+
const [error, setError] = useState(null);
|
|
21
|
+
const [showConfirm, setShowConfirm] = useState(false);
|
|
22
|
+
const [confirmAction, setConfirmAction] = useState(null);
|
|
23
|
+
const theme = getTheme();
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
refreshMarketplaces();
|
|
26
|
+
}, []);
|
|
27
|
+
const refreshMarketplaces = () => {
|
|
28
|
+
try {
|
|
29
|
+
const markets = listMarketplaces();
|
|
30
|
+
setMarketplaces(markets);
|
|
31
|
+
if (focusedIndex >= markets.length && markets.length > 0) {
|
|
32
|
+
setFocusedIndex(markets.length - 1);
|
|
33
|
+
}
|
|
34
|
+
} catch (err) {
|
|
35
|
+
setError(err instanceof Error ? err.message : "Failed to load marketplaces");
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const handleUpdate = async (marketplace) => {
|
|
39
|
+
setLoading(true);
|
|
40
|
+
setError(null);
|
|
41
|
+
try {
|
|
42
|
+
await updateMarketplace(marketplace.name);
|
|
43
|
+
refreshMarketplaces();
|
|
44
|
+
} catch (err) {
|
|
45
|
+
if (err instanceof MarketplaceError) {
|
|
46
|
+
setError(`Update failed: ${err.message}`);
|
|
47
|
+
} else {
|
|
48
|
+
setError(`Update failed: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
49
|
+
}
|
|
50
|
+
} finally {
|
|
51
|
+
setLoading(false);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const handleRemove = (marketplace) => {
|
|
55
|
+
try {
|
|
56
|
+
removeMarketplace(marketplace.name);
|
|
57
|
+
refreshMarketplaces();
|
|
58
|
+
} catch (err) {
|
|
59
|
+
if (err instanceof MarketplaceError) {
|
|
60
|
+
setError(`Remove failed: ${err.message}`);
|
|
61
|
+
} else {
|
|
62
|
+
setError(`Remove failed: ${err instanceof Error ? err.message : "Unknown error"}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const handleConfirmUpdate = () => {
|
|
67
|
+
setShowConfirm(false);
|
|
68
|
+
if (focusedIndex < marketplaces.length) {
|
|
69
|
+
handleUpdate(marketplaces[focusedIndex]);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const handleConfirmRemove = () => {
|
|
73
|
+
setShowConfirm(false);
|
|
74
|
+
if (focusedIndex < marketplaces.length) {
|
|
75
|
+
handleRemove(marketplaces[focusedIndex]);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const handleConfirmCancel = () => {
|
|
79
|
+
setShowConfirm(false);
|
|
80
|
+
setConfirmAction(null);
|
|
81
|
+
};
|
|
82
|
+
useInput((input, key) => {
|
|
83
|
+
if (showConfirm || loading) return;
|
|
84
|
+
if (key.escape) {
|
|
85
|
+
onBack();
|
|
86
|
+
} else if (key.upArrow && focusedIndex > 0) {
|
|
87
|
+
setFocusedIndex(focusedIndex - 1);
|
|
88
|
+
setError(null);
|
|
89
|
+
} else if (key.downArrow && focusedIndex < marketplaces.length - 1) {
|
|
90
|
+
setFocusedIndex(focusedIndex + 1);
|
|
91
|
+
setError(null);
|
|
92
|
+
} else if (key.return && marketplaces.length > 0) {
|
|
93
|
+
onNavigate({
|
|
94
|
+
screen: "marketplace-details",
|
|
95
|
+
marketplace: marketplaces[focusedIndex].name
|
|
96
|
+
});
|
|
97
|
+
} else if (input === "u" && marketplaces.length > 0) {
|
|
98
|
+
setConfirmAction("update");
|
|
99
|
+
setShowConfirm(true);
|
|
100
|
+
} else if (input === "r" && marketplaces.length > 0) {
|
|
101
|
+
setConfirmAction("remove");
|
|
102
|
+
setShowConfirm(true);
|
|
103
|
+
} else if (input === "a") {
|
|
104
|
+
onNavigate({ screen: "add-marketplace" });
|
|
105
|
+
}
|
|
106
|
+
}, { isActive: !showConfirm && !loading });
|
|
107
|
+
if (showConfirm && confirmAction === "update" && focusedIndex < marketplaces.length) {
|
|
108
|
+
return /* @__PURE__ */ React.createElement(
|
|
109
|
+
ConfirmDialog,
|
|
110
|
+
{
|
|
111
|
+
title: "Update Marketplace",
|
|
112
|
+
message: `Update marketplace "${marketplaces[focusedIndex].name}"?
|
|
113
|
+
|
|
114
|
+
This will fetch the latest plugin list from the source.`,
|
|
115
|
+
onConfirm: handleConfirmUpdate,
|
|
116
|
+
onCancel: handleConfirmCancel
|
|
117
|
+
}
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
if (showConfirm && confirmAction === "remove" && focusedIndex < marketplaces.length) {
|
|
121
|
+
return /* @__PURE__ */ React.createElement(
|
|
122
|
+
ConfirmDialog,
|
|
123
|
+
{
|
|
124
|
+
title: "Remove Marketplace",
|
|
125
|
+
message: `Remove marketplace "${marketplaces[focusedIndex].name}"?
|
|
126
|
+
|
|
127
|
+
Installed plugins from this marketplace will not be affected.`,
|
|
128
|
+
onConfirm: handleConfirmRemove,
|
|
129
|
+
onCancel: handleConfirmCancel,
|
|
130
|
+
confirmColor: theme.error
|
|
131
|
+
}
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: theme.primary, padding: 1 }, /* @__PURE__ */ React.createElement(Box, { justifyContent: "space-between" }, /* @__PURE__ */ React.createElement(Text, { bold: true, color: theme.primary }, "Manage Marketplaces"), marketplaces.length > 0 && /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "(", marketplaces.length, " registered)")), marketplaces.length === 0 ? /* @__PURE__ */ React.createElement(Box, { marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, { color: theme.warning }, "No marketplaces registered."), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press "), /* @__PURE__ */ React.createElement(Text, { color: theme.success }, "a"), /* @__PURE__ */ React.createElement(Text, { dimColor: true }, " to add your first marketplace."))) : /* @__PURE__ */ React.createElement(Box, { marginTop: 1, flexDirection: "column" }, marketplaces.map((marketplace, index) => /* @__PURE__ */ React.createElement(
|
|
135
|
+
MarketplaceListItem,
|
|
136
|
+
{
|
|
137
|
+
key: marketplace.name,
|
|
138
|
+
marketplace,
|
|
139
|
+
isFocused: index === focusedIndex,
|
|
140
|
+
theme
|
|
141
|
+
}
|
|
142
|
+
))), error && /* @__PURE__ */ React.createElement(Box, { marginTop: 1, borderStyle: "round", borderColor: theme.error, padding: 1 }, /* @__PURE__ */ React.createElement(Text, { color: theme.error }, "\u2717 ", error)), loading && /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(SimpleSpinner, null), /* @__PURE__ */ React.createElement(Text, { color: theme.primary }, " Updating marketplace...")), !loading && /* @__PURE__ */ React.createElement(Box, { marginTop: 1, flexDirection: "column" }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, marketplaces.length > 0 ? "\u2191\u2193 navigate \xB7 " : "", marketplaces.length > 0 ? /* @__PURE__ */ React.createElement(Text, { color: theme.success }, "Enter") : "", marketplaces.length > 0 ? " details \xB7 " : "", /* @__PURE__ */ React.createElement(Text, { color: theme.success }, "a"), " add \xB7", marketplaces.length > 0 ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Text, { color: theme.success }, " u"), " update \xB7 ") : "", marketplaces.length > 0 ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Text, { color: theme.error }, " r"), " remove \xB7 ") : " ", /* @__PURE__ */ React.createElement(Text, { color: theme.error }, "Esc"), " back")));
|
|
143
|
+
};
|
|
144
|
+
const MarketplaceListItem = ({
|
|
145
|
+
marketplace,
|
|
146
|
+
isFocused,
|
|
147
|
+
theme
|
|
148
|
+
}) => {
|
|
149
|
+
const installed = countInstalledPlugins(marketplace.name);
|
|
150
|
+
return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, { color: isFocused ? theme.success : theme.text }, isFocused ? "\u276F " : " "), /* @__PURE__ */ React.createElement(Text, { color: marketplace.enabled ? theme.primary : theme.secondaryText, bold: isFocused }, marketplace.enabled ? "\u25CF " : "\u25CB ", marketplace.name), !marketplace.enabled && /* @__PURE__ */ React.createElement(Text, { color: theme.warning }, " (disabled)")), /* @__PURE__ */ React.createElement(Box, { marginLeft: 4, flexDirection: "column" }, marketplace.manifest.metadata?.description && /* @__PURE__ */ React.createElement(Text, { dimColor: true }, marketplace.manifest.metadata.description), /* @__PURE__ */ React.createElement(Box, null, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, marketplace.manifest.plugins.length, " available"), installed > 0 && /* @__PURE__ */ React.createElement(Text, { dimColor: true }, " \xB7 ", installed, " installed"), /* @__PURE__ */ React.createElement(Text, { dimColor: true }, " \xB7 Updated ", formatTimeAgo(marketplace.lastUpdated))), /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Source: ", formatMarketplacePath(marketplace.source))));
|
|
151
|
+
};
|
|
152
|
+
export {
|
|
153
|
+
MarketplaceManager
|
|
154
|
+
};
|
|
155
|
+
//# sourceMappingURL=MarketplaceManager.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/commands/plugin/MarketplaceManager.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * MarketplaceManager Component\n *\n * Manage registered plugin marketplaces with list, update, and remove operations\n */\n\nimport React, { useState, useEffect } from 'react'\nimport { Box, Text, useInput } from 'ink'\nimport { SimpleSpinner } from '@components/Spinner'\nimport {\n listMarketplaces,\n updateMarketplace,\n removeMarketplace,\n} from '@utils/marketplaceManager'\nimport { RegisteredMarketplace, MarketplaceError } from '../../types/marketplace'\nimport { getTheme } from '@utils/theme'\nimport { formatMarketplacePath, formatTimeAgo, countInstalledPlugins } from './utils'\nimport { NavigationProps } from './AddMarketplaceForm'\nimport { ConfirmDialog } from './ConfirmDialog'\n\nexport const MarketplaceManager: React.FC<NavigationProps> = ({\n onNavigate,\n onBack\n}) => {\n const [marketplaces, setMarketplaces] = useState<RegisteredMarketplace[]>([])\n const [focusedIndex, setFocusedIndex] = useState(0)\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const [showConfirm, setShowConfirm] = useState(false)\n const [confirmAction, setConfirmAction] = useState<'update' | 'remove' | null>(null)\n const theme = getTheme()\n\n // Load marketplaces\n useEffect(() => {\n refreshMarketplaces()\n }, [])\n\n const refreshMarketplaces = () => {\n try {\n const markets = listMarketplaces()\n setMarketplaces(markets)\n // Keep focus in bounds\n if (focusedIndex >= markets.length && markets.length > 0) {\n setFocusedIndex(markets.length - 1)\n }\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to load marketplaces')\n }\n }\n\n const handleUpdate = async (marketplace: RegisteredMarketplace) => {\n setLoading(true)\n setError(null)\n\n try {\n await updateMarketplace(marketplace.name)\n refreshMarketplaces()\n } catch (err) {\n if (err instanceof MarketplaceError) {\n setError(`Update failed: ${err.message}`)\n } else {\n setError(`Update failed: ${err instanceof Error ? err.message : 'Unknown error'}`)\n }\n } finally {\n setLoading(false)\n }\n }\n\n const handleRemove = (marketplace: RegisteredMarketplace) => {\n try {\n removeMarketplace(marketplace.name)\n refreshMarketplaces()\n } catch (err) {\n if (err instanceof MarketplaceError) {\n setError(`Remove failed: ${err.message}`)\n } else {\n setError(`Remove failed: ${err instanceof Error ? err.message : 'Unknown error'}`)\n }\n }\n }\n\n const handleConfirmUpdate = () => {\n setShowConfirm(false)\n if (focusedIndex < marketplaces.length) {\n handleUpdate(marketplaces[focusedIndex])\n }\n }\n\n const handleConfirmRemove = () => {\n setShowConfirm(false)\n if (focusedIndex < marketplaces.length) {\n handleRemove(marketplaces[focusedIndex])\n }\n }\n\n const handleConfirmCancel = () => {\n setShowConfirm(false)\n setConfirmAction(null)\n }\n\n useInput((input, key) => {\n if (showConfirm || loading) return\n\n if (key.escape) {\n onBack()\n } else if (key.upArrow && focusedIndex > 0) {\n setFocusedIndex(focusedIndex - 1)\n setError(null)\n } else if (key.downArrow && focusedIndex < marketplaces.length - 1) {\n setFocusedIndex(focusedIndex + 1)\n setError(null)\n } else if (key.return && marketplaces.length > 0) {\n // Navigate to marketplace details\n onNavigate({\n screen: 'marketplace-details',\n marketplace: marketplaces[focusedIndex].name\n })\n } else if (input === 'u' && marketplaces.length > 0) {\n setConfirmAction('update')\n setShowConfirm(true)\n } else if (input === 'r' && marketplaces.length > 0) {\n setConfirmAction('remove')\n setShowConfirm(true)\n } else if (input === 'a') {\n onNavigate({ screen: 'add-marketplace' })\n }\n }, { isActive: !showConfirm && !loading })\n\n if (showConfirm && confirmAction === 'update' && focusedIndex < marketplaces.length) {\n return (\n <ConfirmDialog\n title=\"Update Marketplace\"\n message={`Update marketplace \"${marketplaces[focusedIndex].name}\"?\\n\\nThis will fetch the latest plugin list from the source.`}\n onConfirm={handleConfirmUpdate}\n onCancel={handleConfirmCancel}\n />\n )\n }\n\n if (showConfirm && confirmAction === 'remove' && focusedIndex < marketplaces.length) {\n return (\n <ConfirmDialog\n title=\"Remove Marketplace\"\n message={`Remove marketplace \"${marketplaces[focusedIndex].name}\"?\\n\\nInstalled plugins from this marketplace will not be affected.`}\n onConfirm={handleConfirmRemove}\n onCancel={handleConfirmCancel}\n confirmColor={theme.error}\n />\n )\n }\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor={theme.primary} padding={1}>\n <Box justifyContent=\"space-between\">\n <Text bold color={theme.primary}>Manage Marketplaces</Text>\n {marketplaces.length > 0 && (\n <Text dimColor>({marketplaces.length} registered)</Text>\n )}\n </Box>\n\n {marketplaces.length === 0 ? (\n <Box marginTop={1} flexDirection=\"column\">\n <Text color={theme.warning}>No marketplaces registered.</Text>\n <Box marginTop={1}>\n <Text dimColor>Press </Text>\n <Text color={theme.success}>a</Text>\n <Text dimColor> to add your first marketplace.</Text>\n </Box>\n </Box>\n ) : (\n <Box marginTop={1} flexDirection=\"column\">\n {marketplaces.map((marketplace, index) => (\n <MarketplaceListItem\n key={marketplace.name}\n marketplace={marketplace}\n isFocused={index === focusedIndex}\n theme={theme}\n />\n ))}\n </Box>\n )}\n\n {error && (\n <Box marginTop={1} borderStyle=\"round\" borderColor={theme.error} padding={1}>\n <Text color={theme.error}>\u2717 {error}</Text>\n </Box>\n )}\n\n {loading && (\n <Box marginTop={1}>\n <SimpleSpinner />\n <Text color={theme.primary}> Updating marketplace...</Text>\n </Box>\n )}\n\n {!loading && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>\n {marketplaces.length > 0 ? '\u2191\u2193 navigate \u00B7 ' : ''}\n {marketplaces.length > 0 ? <Text color={theme.success}>Enter</Text> : ''}\n {marketplaces.length > 0 ? ' details \u00B7 ' : ''}\n <Text color={theme.success}>a</Text> add \u00B7\n {marketplaces.length > 0 ? <><Text color={theme.success}> u</Text> update \u00B7 </> : ''}\n {marketplaces.length > 0 ? <><Text color={theme.error}> r</Text> remove \u00B7 </> : ' '}\n <Text color={theme.error}>Esc</Text> back\n </Text>\n </Box>\n )}\n </Box>\n )\n}\n\n// Marketplace list item component\ninterface MarketplaceListItemProps {\n marketplace: RegisteredMarketplace\n isFocused: boolean\n theme: ReturnType<typeof getTheme>\n}\n\nconst MarketplaceListItem: React.FC<MarketplaceListItemProps> = ({\n marketplace,\n isFocused,\n theme\n}) => {\n const installed = countInstalledPlugins(marketplace.name)\n\n return (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Box>\n <Text color={isFocused ? theme.success : theme.text}>\n {isFocused ? '\u276F ' : ' '}\n </Text>\n <Text color={marketplace.enabled ? theme.primary : theme.secondaryText} bold={isFocused}>\n {marketplace.enabled ? '\u25CF ' : '\u25CB '}\n {marketplace.name}\n </Text>\n {!marketplace.enabled && (\n <Text color={theme.warning}> (disabled)</Text>\n )}\n </Box>\n\n <Box marginLeft={4} flexDirection=\"column\">\n {marketplace.manifest.metadata?.description && (\n <Text dimColor>{marketplace.manifest.metadata.description}</Text>\n )}\n\n <Box>\n <Text dimColor>\n {marketplace.manifest.plugins.length} available\n </Text>\n {installed > 0 && (\n <Text dimColor> \u00B7 {installed} installed</Text>\n )}\n <Text dimColor> \u00B7 Updated {formatTimeAgo(marketplace.lastUpdated)}</Text>\n </Box>\n\n <Text dimColor>\n Source: {formatMarketplacePath(marketplace.source)}\n </Text>\n </Box>\n </Box>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import React, { useState, useEffect } from "react";
|
|
2
|
+
import { Box, Text } from "ink";
|
|
3
|
+
import { Select } from "../../components/CustomSelect/select.js";
|
|
4
|
+
import { getTheme } from "../../utils/theme.js";
|
|
5
|
+
import { listMarketplaces } from "../../utils/marketplaceManager.js";
|
|
6
|
+
import { loadAllPlugins } from "../../utils/pluginLoader.js";
|
|
7
|
+
const MarketplaceSelector = ({
|
|
8
|
+
onNavigate,
|
|
9
|
+
onBack
|
|
10
|
+
}) => {
|
|
11
|
+
const theme = getTheme();
|
|
12
|
+
const [marketplaceStats, setMarketplaceStats] = useState([]);
|
|
13
|
+
const [loading, setLoading] = useState(true);
|
|
14
|
+
const [error, setError] = useState(null);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
loadMarketplaceData();
|
|
17
|
+
}, []);
|
|
18
|
+
const loadMarketplaceData = async () => {
|
|
19
|
+
try {
|
|
20
|
+
setLoading(true);
|
|
21
|
+
setError(null);
|
|
22
|
+
const marketplaces = listMarketplaces();
|
|
23
|
+
if (marketplaces.length === 0) {
|
|
24
|
+
setError('No marketplaces registered. Use "minto plugin add-marketplace <source>" to add one.');
|
|
25
|
+
setLoading(false);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const installedPlugins = loadAllPlugins();
|
|
29
|
+
const stats = marketplaces.map((marketplace) => {
|
|
30
|
+
const availableCount = marketplace.manifest.plugins.length;
|
|
31
|
+
const installedCount = installedPlugins.filter(
|
|
32
|
+
(plugin) => plugin.source.type === "marketplace" && "marketplace" in plugin.source && plugin.source.marketplace === marketplace.name
|
|
33
|
+
).length;
|
|
34
|
+
let sourcePath = "";
|
|
35
|
+
if (marketplace.source.type === "github") {
|
|
36
|
+
sourcePath = marketplace.source.repo;
|
|
37
|
+
} else if (marketplace.source.type === "url") {
|
|
38
|
+
sourcePath = marketplace.source.url;
|
|
39
|
+
} else if (marketplace.source.type === "local") {
|
|
40
|
+
sourcePath = marketplace.source.path;
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
name: marketplace.name,
|
|
44
|
+
source: sourcePath,
|
|
45
|
+
availableCount,
|
|
46
|
+
installedCount
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
setMarketplaceStats(stats);
|
|
50
|
+
} catch (err) {
|
|
51
|
+
setError(err instanceof Error ? err.message : String(err));
|
|
52
|
+
} finally {
|
|
53
|
+
setLoading(false);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const handleSelectMarketplace = (value) => {
|
|
57
|
+
onNavigate({
|
|
58
|
+
screen: "plugin-browser",
|
|
59
|
+
marketplace: value
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
if (loading) {
|
|
63
|
+
return /* @__PURE__ */ React.createElement(
|
|
64
|
+
Box,
|
|
65
|
+
{
|
|
66
|
+
flexDirection: "column",
|
|
67
|
+
borderStyle: "round",
|
|
68
|
+
borderColor: theme.secondaryBorder,
|
|
69
|
+
paddingX: 2,
|
|
70
|
+
paddingY: 1
|
|
71
|
+
},
|
|
72
|
+
/* @__PURE__ */ React.createElement(Text, { color: theme.primary }, "Loading marketplaces...")
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
if (error) {
|
|
76
|
+
return /* @__PURE__ */ React.createElement(
|
|
77
|
+
Box,
|
|
78
|
+
{
|
|
79
|
+
flexDirection: "column",
|
|
80
|
+
borderStyle: "round",
|
|
81
|
+
borderColor: theme.error,
|
|
82
|
+
paddingX: 2,
|
|
83
|
+
paddingY: 1
|
|
84
|
+
},
|
|
85
|
+
/* @__PURE__ */ React.createElement(Text, { color: theme.error }, "Error"),
|
|
86
|
+
/* @__PURE__ */ React.createElement(Text, null, error),
|
|
87
|
+
/* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Press Esc to go back"))
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
const options = marketplaceStats.map((stat) => ({
|
|
91
|
+
label: stat.name,
|
|
92
|
+
value: stat.name
|
|
93
|
+
}));
|
|
94
|
+
return /* @__PURE__ */ React.createElement(
|
|
95
|
+
Box,
|
|
96
|
+
{
|
|
97
|
+
flexDirection: "column",
|
|
98
|
+
borderStyle: "round",
|
|
99
|
+
borderColor: theme.secondaryBorder,
|
|
100
|
+
paddingX: 2,
|
|
101
|
+
paddingY: 1
|
|
102
|
+
},
|
|
103
|
+
/* @__PURE__ */ React.createElement(Text, { bold: true, color: theme.primary }, "Select Plugin Marketplace"),
|
|
104
|
+
/* @__PURE__ */ React.createElement(Box, { marginTop: 1, flexDirection: "column" }, marketplaceStats.map((stat) => /* @__PURE__ */ React.createElement(Box, { key: stat.name, flexDirection: "column", marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, null, /* @__PURE__ */ React.createElement(Text, { bold: true, color: theme.success }, stat.name)), /* @__PURE__ */ React.createElement(Box, { marginLeft: 2 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, stat.availableCount, " plugins available \xB7 ", stat.installedCount, " already installed \xB7 ", stat.source))))),
|
|
105
|
+
/* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(
|
|
106
|
+
Select,
|
|
107
|
+
{
|
|
108
|
+
options,
|
|
109
|
+
onChange: handleSelectMarketplace,
|
|
110
|
+
visibleOptionCount: Math.min(options.length, 10)
|
|
111
|
+
}
|
|
112
|
+
)),
|
|
113
|
+
/* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "\u2191\u2193: Navigate \xB7 Enter: Select \xB7 Esc: Back"))
|
|
114
|
+
);
|
|
115
|
+
};
|
|
116
|
+
export {
|
|
117
|
+
MarketplaceSelector
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=MarketplaceSelector.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/commands/plugin/MarketplaceSelector.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * Marketplace Selector Component\n *\n * Displays registered marketplace list with statistics\n */\n\nimport React, { useState, useEffect } from 'react'\nimport { Box, Text } from 'ink'\nimport { Select } from '@components/CustomSelect/select'\nimport { Option } from '@inkjs/ui'\nimport { getTheme } from '@utils/theme'\nimport { listMarketplaces, getMarketplace } from '@utils/marketplaceManager'\nimport { loadAllPlugins } from '@utils/pluginLoader'\nimport { RegisteredMarketplace } from '../../types/marketplace'\nimport { NavigationProps, MarketplaceStats } from './types'\n\nexport const MarketplaceSelector: React.FC<NavigationProps> = ({\n onNavigate,\n onBack,\n}) => {\n const theme = getTheme()\n const [marketplaceStats, setMarketplaceStats] = useState<MarketplaceStats[]>([])\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n\n useEffect(() => {\n loadMarketplaceData()\n }, [])\n\n const loadMarketplaceData = async () => {\n try {\n setLoading(true)\n setError(null)\n\n // Load marketplace list\n const marketplaces = listMarketplaces()\n\n if (marketplaces.length === 0) {\n setError('No marketplaces registered. Use \"minto plugin add-marketplace <source>\" to add one.')\n setLoading(false)\n return\n }\n\n // Load all installed plugins to calculate stats\n const installedPlugins = loadAllPlugins()\n\n // Calculate stats for each marketplace\n const stats = marketplaces.map((marketplace) => {\n const availableCount = marketplace.manifest.plugins.length\n const installedCount = installedPlugins.filter(\n (plugin) =>\n plugin.source.type === 'marketplace' &&\n 'marketplace' in plugin.source &&\n plugin.source.marketplace === marketplace.name\n ).length\n\n // Get source path display\n let sourcePath = ''\n if (marketplace.source.type === 'github') {\n sourcePath = marketplace.source.repo\n } else if (marketplace.source.type === 'url') {\n sourcePath = marketplace.source.url\n } else if (marketplace.source.type === 'local') {\n sourcePath = marketplace.source.path\n }\n\n return {\n name: marketplace.name,\n source: sourcePath,\n availableCount,\n installedCount,\n }\n })\n\n setMarketplaceStats(stats)\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n } finally {\n setLoading(false)\n }\n }\n\n const handleSelectMarketplace = (value: string) => {\n onNavigate({\n screen: 'plugin-browser',\n marketplace: value,\n })\n }\n\n if (loading) {\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.secondaryBorder}\n paddingX={2}\n paddingY={1}\n >\n <Text color={theme.primary}>Loading marketplaces...</Text>\n </Box>\n )\n }\n\n if (error) {\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.error}\n paddingX={2}\n paddingY={1}\n >\n <Text color={theme.error}>Error</Text>\n <Text>{error}</Text>\n <Box marginTop={1}>\n <Text dimColor>Press Esc to go back</Text>\n </Box>\n </Box>\n )\n }\n\n // Build options for Select component\n const options: Option[] = marketplaceStats.map((stat) => ({\n label: stat.name,\n value: stat.name,\n }))\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={theme.secondaryBorder}\n paddingX={2}\n paddingY={1}\n >\n <Text bold color={theme.primary}>\n Select Plugin Marketplace\n </Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {marketplaceStats.map((stat) => (\n <Box key={stat.name} flexDirection=\"column\" marginBottom={1}>\n <Text>\n <Text bold color={theme.success}>\n {stat.name}\n </Text>\n </Text>\n <Box marginLeft={2}>\n <Text dimColor>\n {stat.availableCount} plugins available \u00B7 {stat.installedCount} already installed \u00B7 {stat.source}\n </Text>\n </Box>\n </Box>\n ))}\n </Box>\n\n <Box marginTop={1}>\n <Select\n options={options}\n onChange={handleSelectMarketplace}\n visibleOptionCount={Math.min(options.length, 10)}\n />\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\u2191\u2193: Navigate \u00B7 Enter: Select \u00B7 Esc: Back</Text>\n </Box>\n </Box>\n )\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { Box, Text, useInput } from "ink";
|
|
3
|
+
import { getTheme } from "../../utils/theme.js";
|
|
4
|
+
const PlaceholderScreen = ({ state, onBack }) => {
|
|
5
|
+
const theme = getTheme();
|
|
6
|
+
useInput((input, key) => {
|
|
7
|
+
if (key.escape) {
|
|
8
|
+
onBack();
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
return /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", borderStyle: "round", borderColor: theme.primary, padding: 1 }, /* @__PURE__ */ React.createElement(Box, { marginBottom: 1 }, /* @__PURE__ */ React.createElement(Text, { bold: true, color: theme.primary }, "Placeholder: ", state.screen)), /* @__PURE__ */ React.createElement(Box, { flexDirection: "column", marginY: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "This screen is under construction."), /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Screen state: ", JSON.stringify(state, null, 2))), /* @__PURE__ */ React.createElement(Box, { marginTop: 1 }, /* @__PURE__ */ React.createElement(Text, { dimColor: true }, "Esc to go back")));
|
|
12
|
+
};
|
|
13
|
+
export {
|
|
14
|
+
PlaceholderScreen
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=PlaceholderScreen.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/commands/plugin/PlaceholderScreen.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * Placeholder Screen Component\n *\n * Temporary component used for screens not yet implemented.\n * Displays the screen name and provides navigation back.\n */\n\nimport React from 'react'\nimport { Box, Text, useInput } from 'ink'\nimport { getTheme } from '@utils/theme'\nimport type { NavigationProps, PluginUIState } from './types'\n\ninterface PlaceholderScreenProps extends NavigationProps {\n state: PluginUIState\n}\n\nexport const PlaceholderScreen: React.FC<PlaceholderScreenProps> = ({ state, onBack }) => {\n const theme = getTheme()\n\n useInput((input, key) => {\n if (key.escape) {\n onBack()\n }\n })\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor={theme.primary} padding={1}>\n <Box marginBottom={1}>\n <Text bold color={theme.primary}>Placeholder: {state.screen}</Text>\n </Box>\n\n <Box flexDirection=\"column\" marginY={1}>\n <Text dimColor>This screen is under construction.</Text>\n <Text dimColor>Screen state: {JSON.stringify(state, null, 2)}</Text>\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Esc to go back</Text>\n </Box>\n </Box>\n )\n}\n"],
|
|
5
|
+
"mappings": "AAOA,OAAO,WAAW;AAClB,SAAS,KAAK,MAAM,gBAAgB;AACpC,SAAS,gBAAgB;AAOlB,MAAM,oBAAsD,CAAC,EAAE,OAAO,OAAO,MAAM;AACxF,QAAM,QAAQ,SAAS;AAEvB,WAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,IAAI,QAAQ;AACd,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,SACE,oCAAC,OAAI,eAAc,UAAS,aAAY,SAAQ,aAAa,MAAM,SAAS,SAAS,KACnF,oCAAC,OAAI,cAAc,KACjB,oCAAC,QAAK,MAAI,MAAC,OAAO,MAAM,WAAS,iBAAc,MAAM,MAAO,CAC9D,GAEA,oCAAC,OAAI,eAAc,UAAS,SAAS,KACnC,oCAAC,QAAK,UAAQ,QAAC,oCAAkC,GACjD,oCAAC,QAAK,UAAQ,QAAC,kBAAe,KAAK,UAAU,OAAO,MAAM,CAAC,CAAE,CAC/D,GAEA,oCAAC,OAAI,WAAW,KACd,oCAAC,QAAK,UAAQ,QAAC,gBAAc,CAC/B,CACF;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|