dexto 1.4.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -7
- package/dist/agents/agent-template.yml +2 -2
- package/dist/agents/coding-agent/coding-agent.yml +22 -16
- package/dist/agents/database-agent/database-agent.yml +2 -2
- package/dist/agents/default-agent.yml +7 -5
- package/dist/agents/github-agent/github-agent.yml +2 -2
- package/dist/agents/product-name-researcher/product-name-researcher.yml +2 -2
- package/dist/agents/talk2pdf-agent/talk2pdf-agent.yml +2 -2
- package/dist/analytics/events.d.ts +13 -6
- package/dist/analytics/events.d.ts.map +1 -1
- package/dist/analytics/index.d.ts +1 -1
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +6 -2
- package/dist/api/server-hono.d.ts.map +1 -1
- package/dist/api/server-hono.js +27 -5
- package/dist/cli/cli-subscriber.d.ts +4 -0
- package/dist/cli/cli-subscriber.d.ts.map +1 -1
- package/dist/cli/cli-subscriber.js +40 -2
- package/dist/cli/commands/create-app.d.ts +16 -14
- package/dist/cli/commands/create-app.d.ts.map +1 -1
- package/dist/cli/commands/create-app.js +626 -102
- package/dist/cli/commands/create-image.d.ts +7 -0
- package/dist/cli/commands/create-image.d.ts.map +1 -0
- package/dist/cli/commands/create-image.js +201 -0
- package/dist/cli/commands/helpers/formatters.js +7 -7
- package/dist/cli/commands/index.d.ts +2 -1
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +2 -1
- package/dist/cli/commands/init-app.js +7 -7
- package/dist/cli/commands/install.d.ts +0 -3
- package/dist/cli/commands/install.d.ts.map +1 -1
- package/dist/cli/commands/install.js +10 -35
- package/dist/cli/commands/interactive-commands/command-parser.js +7 -7
- package/dist/cli/commands/interactive-commands/general-commands.js +1 -1
- package/dist/cli/commands/interactive-commands/prompt-commands.js +11 -11
- package/dist/cli/commands/interactive-commands/system/system-commands.js +3 -3
- package/dist/cli/commands/list-agents.js +2 -2
- package/dist/cli/commands/session-commands.js +16 -16
- package/dist/cli/commands/setup.d.ts +13 -5
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +860 -65
- package/dist/cli/commands/which.js +1 -1
- package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts +2 -0
- package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/ApprovalPrompt.js +29 -7
- package/dist/cli/ink-cli/components/CustomInput.js +1 -1
- package/dist/cli/ink-cli/components/EditableMultiLineInput.js +4 -4
- package/dist/cli/ink-cli/components/ElicitationForm.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/ElicitationForm.js +6 -6
- package/dist/cli/ink-cli/components/ErrorBoundary.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/ErrorBoundary.js +1 -1
- package/dist/cli/ink-cli/components/Footer.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/Footer.js +1 -1
- package/dist/cli/ink-cli/components/HistorySearchBar.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/HistorySearchBar.js +1 -1
- package/dist/cli/ink-cli/components/MultiLineInput.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/MultiLineInput.js +3 -3
- package/dist/cli/ink-cli/components/ResourceAutocomplete.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/ResourceAutocomplete.js +4 -4
- package/dist/cli/ink-cli/components/SlashCommandAutocomplete.js +3 -3
- package/dist/cli/ink-cli/components/StatusBar.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/StatusBar.js +7 -5
- package/dist/cli/ink-cli/components/TextBufferInput.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/TextBufferInput.js +6 -6
- package/dist/cli/ink-cli/components/base/BaseAutocomplete.js +4 -4
- package/dist/cli/ink-cli/components/base/BaseSelector.js +2 -2
- package/dist/cli/ink-cli/components/chat/Footer.js +1 -1
- package/dist/cli/ink-cli/components/chat/Header.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/chat/Header.js +2 -4
- package/dist/cli/ink-cli/components/chat/MessageItem.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/chat/MessageItem.js +5 -5
- package/dist/cli/ink-cli/components/chat/MessageList.js +1 -1
- package/dist/cli/ink-cli/components/chat/QueuedMessagesDisplay.js +1 -1
- package/dist/cli/ink-cli/components/chat/ToolIcon.d.ts +1 -1
- package/dist/cli/ink-cli/components/chat/ToolIcon.js +4 -4
- package/dist/cli/ink-cli/components/chat/styled-boxes/ConfigBox.js +1 -1
- package/dist/cli/ink-cli/components/chat/styled-boxes/HelpBox.js +1 -1
- package/dist/cli/ink-cli/components/chat/styled-boxes/LogConfigBox.js +2 -2
- package/dist/cli/ink-cli/components/chat/styled-boxes/SessionHistoryBox.js +5 -5
- package/dist/cli/ink-cli/components/chat/styled-boxes/SessionListBox.js +2 -2
- package/dist/cli/ink-cli/components/chat/styled-boxes/ShortcutsBox.js +1 -1
- package/dist/cli/ink-cli/components/chat/styled-boxes/StatsBox.js +1 -1
- package/dist/cli/ink-cli/components/chat/styled-boxes/StyledBox.js +2 -2
- package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.js +1 -1
- package/dist/cli/ink-cli/components/modes/StaticCLI.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/modes/StaticCLI.js +1 -1
- package/dist/cli/ink-cli/components/overlays/ApiKeyInput.js +1 -1
- package/dist/cli/ink-cli/components/overlays/CustomModelWizard.d.ts +10 -2
- package/dist/cli/ink-cli/components/overlays/CustomModelWizard.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/CustomModelWizard.js +198 -89
- package/dist/cli/ink-cli/components/overlays/LogLevelSelector.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/LogLevelSelector.js +2 -2
- package/dist/cli/ink-cli/components/overlays/McpAddChoice.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/McpAddChoice.js +1 -1
- package/dist/cli/ink-cli/components/overlays/McpAddSelector.js +1 -1
- package/dist/cli/ink-cli/components/overlays/McpCustomTypeSelector.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/McpCustomTypeSelector.js +2 -2
- package/dist/cli/ink-cli/components/overlays/McpCustomWizard.js +1 -1
- package/dist/cli/ink-cli/components/overlays/McpRemoveSelector.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/McpRemoveSelector.js +1 -1
- package/dist/cli/ink-cli/components/overlays/McpSelector.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/McpSelector.js +1 -1
- package/dist/cli/ink-cli/components/overlays/McpServerActions.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/McpServerActions.js +2 -2
- package/dist/cli/ink-cli/components/overlays/McpServerList.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/McpServerList.js +1 -1
- package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts +5 -5
- package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.js +222 -68
- package/dist/cli/ink-cli/components/overlays/PromptAddChoice.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/PromptAddChoice.js +2 -2
- package/dist/cli/ink-cli/components/overlays/PromptAddWizard.js +1 -1
- package/dist/cli/ink-cli/components/overlays/PromptDeleteSelector.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/PromptDeleteSelector.js +2 -2
- package/dist/cli/ink-cli/components/overlays/PromptList.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/PromptList.js +2 -2
- package/dist/cli/ink-cli/components/overlays/SearchOverlay.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/SearchOverlay.js +4 -4
- package/dist/cli/ink-cli/components/overlays/SessionSubcommandSelector.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/SessionSubcommandSelector.js +1 -1
- package/dist/cli/ink-cli/components/overlays/StreamSelector.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/StreamSelector.js +1 -1
- package/dist/cli/ink-cli/components/overlays/ToolBrowser.js +12 -12
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.d.ts +25 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/LocalModelWizard.js +609 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/index.d.ts +15 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/index.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/index.js +14 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.d.ts +33 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.js +419 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ApiKeyStep.d.ts +25 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ApiKeyStep.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ApiKeyStep.js +29 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ProviderSelector.d.ts +17 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ProviderSelector.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/ProviderSelector.js +11 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/SetupInfoBanner.d.ts +20 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/SetupInfoBanner.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/SetupInfoBanner.js +10 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/WizardStepInput.d.ts +30 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/WizardStepInput.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/WizardStepInput.js +13 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/index.d.ts +8 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/index.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/shared/index.js +7 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.d.ts +79 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/types.js +38 -0
- package/dist/cli/ink-cli/components/renderers/DiffRenderer.js +2 -2
- package/dist/cli/ink-cli/components/renderers/FilePreviewRenderer.js +1 -1
- package/dist/cli/ink-cli/components/renderers/FileRenderer.js +4 -4
- package/dist/cli/ink-cli/components/renderers/GenericRenderer.js +2 -2
- package/dist/cli/ink-cli/components/renderers/SearchRenderer.js +1 -1
- package/dist/cli/ink-cli/components/renderers/ShellRenderer.js +3 -3
- package/dist/cli/ink-cli/components/renderers/diff-shared.js +1 -1
- package/dist/cli/ink-cli/components/shared/MarkdownText.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/shared/MarkdownText.js +8 -6
- package/dist/cli/ink-cli/containers/InputContainer.d.ts.map +1 -1
- package/dist/cli/ink-cli/containers/InputContainer.js +23 -1
- package/dist/cli/ink-cli/containers/OverlayContainer.d.ts.map +1 -1
- package/dist/cli/ink-cli/containers/OverlayContainer.js +80 -24
- package/dist/cli/ink-cli/hooks/useAgentEvents.d.ts +1 -1
- package/dist/cli/ink-cli/hooks/useAgentEvents.d.ts.map +1 -1
- package/dist/cli/ink-cli/hooks/useAgentEvents.js +5 -1
- package/dist/cli/ink-cli/hooks/useCLIState.d.ts +1 -1
- package/dist/cli/ink-cli/hooks/useCLIState.d.ts.map +1 -1
- package/dist/cli/ink-cli/hooks/useCLIState.js +4 -2
- package/dist/cli/ink-cli/services/processStream.d.ts.map +1 -1
- package/dist/cli/ink-cli/services/processStream.js +77 -9
- package/dist/cli/ink-cli/state/types.d.ts +3 -2
- package/dist/cli/ink-cli/state/types.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/messageFormatting.d.ts +5 -0
- package/dist/cli/ink-cli/utils/messageFormatting.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/messageFormatting.js +59 -1
- package/dist/cli/ink-cli/utils/toolUtils.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/toolUtils.js +2 -0
- package/dist/cli/utils/api-key-setup.d.ts +54 -4
- package/dist/cli/utils/api-key-setup.d.ts.map +1 -1
- package/dist/cli/utils/api-key-setup.js +433 -107
- package/dist/cli/utils/api-key-verification.d.ts +17 -0
- package/dist/cli/utils/api-key-verification.d.ts.map +1 -0
- package/dist/cli/utils/api-key-verification.js +211 -0
- package/dist/cli/utils/config-validation.d.ts +22 -2
- package/dist/cli/utils/config-validation.d.ts.map +1 -1
- package/dist/cli/utils/config-validation.js +354 -25
- package/dist/cli/utils/local-model-setup.d.ts +46 -0
- package/dist/cli/utils/local-model-setup.d.ts.map +1 -0
- package/dist/cli/utils/local-model-setup.js +662 -0
- package/dist/cli/utils/options.js +1 -1
- package/dist/cli/utils/prompt-helpers.d.ts +47 -0
- package/dist/cli/utils/prompt-helpers.d.ts.map +1 -0
- package/dist/cli/utils/prompt-helpers.js +66 -0
- package/dist/cli/utils/provider-setup.d.ts +66 -8
- package/dist/cli/utils/provider-setup.d.ts.map +1 -1
- package/dist/cli/utils/provider-setup.js +324 -84
- package/dist/cli/utils/scaffolding-utils.d.ts +76 -0
- package/dist/cli/utils/scaffolding-utils.d.ts.map +1 -0
- package/dist/cli/utils/scaffolding-utils.js +246 -0
- package/dist/cli/utils/setup-utils.d.ts +16 -0
- package/dist/cli/utils/setup-utils.d.ts.map +1 -1
- package/dist/cli/utils/setup-utils.js +72 -21
- package/dist/cli/utils/template-engine.d.ts +65 -0
- package/dist/cli/utils/template-engine.d.ts.map +1 -0
- package/dist/cli/utils/template-engine.js +1089 -0
- package/dist/config/cli-overrides.d.ts +44 -1
- package/dist/config/cli-overrides.d.ts.map +1 -1
- package/dist/config/cli-overrides.js +102 -0
- package/dist/index.js +315 -53
- package/dist/webui/assets/index-8j-KMkX1.js +2054 -0
- package/dist/webui/assets/index-c_AX24V4.css +1 -0
- package/dist/webui/index.html +3 -9
- package/dist/webui/logos/aws-color.svg +1 -0
- package/dist/webui/logos/dexto/dexto_logo.svg +1 -1
- package/dist/webui/logos/dexto/dexto_logo_light.svg +6 -6
- package/dist/webui/logos/glama.svg +7 -0
- package/dist/webui/logos/litellm.svg +7 -0
- package/dist/webui/logos/openrouter.svg +1 -0
- package/package.json +8 -7
- package/dist/webui/assets/index-BkwPkZpd.css +0 -1
- package/dist/webui/assets/index-D9u1XfyH.js +0 -2025
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
3
|
* ModelSelector Component (Refactored)
|
|
4
4
|
* Features:
|
|
5
5
|
* - Search filtering
|
|
6
|
-
* - Custom models support (add/delete)
|
|
7
|
-
* - Keyboard shortcuts: Shift+D to delete custom model
|
|
6
|
+
* - Custom models support (add/edit/delete via arrow navigation)
|
|
8
7
|
*/
|
|
9
|
-
import { useState, useEffect, forwardRef, useRef, useImperativeHandle, useMemo, } from 'react';
|
|
8
|
+
import { useState, useEffect, forwardRef, useRef, useImperativeHandle, useMemo, useCallback, } from 'react';
|
|
10
9
|
import { Box, Text } from 'ink';
|
|
11
|
-
import {
|
|
10
|
+
import { listOllamaModels, DEFAULT_OLLAMA_URL, getLocalModelById } from '@dexto/core';
|
|
11
|
+
import { loadCustomModels, deleteCustomModel, getAllInstalledModels, } from '@dexto/agent-management';
|
|
12
12
|
function isAddCustomOption(item) {
|
|
13
13
|
return 'type' in item && item.type === 'add-custom';
|
|
14
14
|
}
|
|
@@ -16,14 +16,15 @@ const MAX_VISIBLE_ITEMS = 10;
|
|
|
16
16
|
/**
|
|
17
17
|
* Model selector with search and custom model support
|
|
18
18
|
*/
|
|
19
|
-
const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectModel, onClose, onAddCustomModel, agent }, ref) {
|
|
19
|
+
const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectModel, onClose, onAddCustomModel, onEditCustomModel, agent }, ref) {
|
|
20
20
|
const [models, setModels] = useState([]);
|
|
21
21
|
const [customModels, setCustomModels] = useState([]);
|
|
22
22
|
const [isLoading, setIsLoading] = useState(false);
|
|
23
23
|
const [selectedIndex, setSelectedIndex] = useState(0);
|
|
24
24
|
const [searchQuery, setSearchQuery] = useState('');
|
|
25
25
|
const [scrollOffset, setScrollOffset] = useState(0);
|
|
26
|
-
const [
|
|
26
|
+
const [customModelAction, setCustomModelAction] = useState(null);
|
|
27
|
+
const [pendingDeleteConfirm, setPendingDeleteConfirm] = useState(false);
|
|
27
28
|
const selectedIndexRef = useRef(selectedIndex);
|
|
28
29
|
const deleteTimeoutRef = useRef(null);
|
|
29
30
|
// Keep ref in sync
|
|
@@ -45,7 +46,8 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
45
46
|
setSearchQuery('');
|
|
46
47
|
setSelectedIndex(0);
|
|
47
48
|
setScrollOffset(0);
|
|
48
|
-
|
|
49
|
+
setCustomModelAction(null);
|
|
50
|
+
setPendingDeleteConfirm(false);
|
|
49
51
|
if (deleteTimeoutRef.current) {
|
|
50
52
|
clearTimeout(deleteTimeoutRef.current);
|
|
51
53
|
deleteTimeoutRef.current = null;
|
|
@@ -59,25 +61,56 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
59
61
|
loadCustomModels(),
|
|
60
62
|
]);
|
|
61
63
|
const modelList = [];
|
|
64
|
+
// Fetch dynamic models for local providers
|
|
65
|
+
let ollamaModels = [];
|
|
66
|
+
let localModels = [];
|
|
67
|
+
try {
|
|
68
|
+
ollamaModels = await listOllamaModels(DEFAULT_OLLAMA_URL);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
// Ollama not available, skip
|
|
72
|
+
agent.logger.debug('Ollama not available for model listing');
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
localModels = await getAllInstalledModels();
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
// Local models not available, skip
|
|
79
|
+
agent.logger.debug('Local models not available for listing');
|
|
80
|
+
}
|
|
62
81
|
// Add custom models first
|
|
63
82
|
for (const custom of loadedCustomModels) {
|
|
64
|
-
|
|
65
|
-
|
|
83
|
+
// Use provider from custom model, default to openai-compatible for legacy models
|
|
84
|
+
const customProvider = (custom.provider ?? 'openai-compatible');
|
|
85
|
+
const modelOption = {
|
|
86
|
+
provider: customProvider,
|
|
66
87
|
name: custom.name,
|
|
67
88
|
displayName: custom.displayName || custom.name,
|
|
68
89
|
maxInputTokens: custom.maxInputTokens || 128000,
|
|
69
90
|
isDefault: false,
|
|
70
|
-
isCurrent: currentConfig.provider ===
|
|
91
|
+
isCurrent: currentConfig.provider === customProvider &&
|
|
71
92
|
currentConfig.model === custom.name,
|
|
72
93
|
isCustom: true,
|
|
73
|
-
|
|
74
|
-
|
|
94
|
+
};
|
|
95
|
+
if (custom.baseURL) {
|
|
96
|
+
modelOption.baseURL = custom.baseURL;
|
|
97
|
+
}
|
|
98
|
+
modelList.push(modelOption);
|
|
75
99
|
}
|
|
76
100
|
// Add registry models
|
|
77
101
|
for (const provider of providers) {
|
|
78
|
-
// Skip
|
|
79
|
-
|
|
102
|
+
// Skip custom-only providers that don't have a static model list
|
|
103
|
+
// These are only accessible via the "Add custom model" wizard
|
|
104
|
+
if (provider === 'openai-compatible' ||
|
|
105
|
+
provider === 'openrouter' ||
|
|
106
|
+
provider === 'litellm' ||
|
|
107
|
+
provider === 'glama' ||
|
|
108
|
+
provider === 'bedrock')
|
|
109
|
+
continue;
|
|
110
|
+
// Skip ollama, local, and vertex - they'll be added dynamically below
|
|
111
|
+
if (provider === 'ollama' || provider === 'local' || provider === 'vertex') {
|
|
80
112
|
continue;
|
|
113
|
+
}
|
|
81
114
|
const providerModels = allModels[provider];
|
|
82
115
|
for (const model of providerModels) {
|
|
83
116
|
modelList.push({
|
|
@@ -92,6 +125,52 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
92
125
|
});
|
|
93
126
|
}
|
|
94
127
|
}
|
|
128
|
+
// Add Ollama models dynamically
|
|
129
|
+
for (const ollamaModel of ollamaModels) {
|
|
130
|
+
modelList.push({
|
|
131
|
+
provider: 'ollama',
|
|
132
|
+
name: ollamaModel.name,
|
|
133
|
+
displayName: ollamaModel.name,
|
|
134
|
+
maxInputTokens: 128000, // Default, actual varies by model
|
|
135
|
+
isDefault: false,
|
|
136
|
+
isCurrent: currentConfig.provider === 'ollama' &&
|
|
137
|
+
currentConfig.model === ollamaModel.name,
|
|
138
|
+
isCustom: false,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
// Add local models dynamically
|
|
142
|
+
for (const localModel of localModels) {
|
|
143
|
+
// Get display name from registry if available
|
|
144
|
+
const modelInfo = getLocalModelById(localModel.id);
|
|
145
|
+
const displayName = modelInfo?.name || localModel.id;
|
|
146
|
+
const maxInputTokens = modelInfo?.contextLength || 128000;
|
|
147
|
+
modelList.push({
|
|
148
|
+
provider: 'local',
|
|
149
|
+
name: localModel.id,
|
|
150
|
+
displayName,
|
|
151
|
+
maxInputTokens,
|
|
152
|
+
isDefault: false,
|
|
153
|
+
isCurrent: currentConfig.provider === 'local' &&
|
|
154
|
+
currentConfig.model === localModel.id,
|
|
155
|
+
isCustom: false,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
// Add Vertex AI models from registry
|
|
159
|
+
const vertexModels = allModels['vertex'];
|
|
160
|
+
if (vertexModels) {
|
|
161
|
+
for (const model of vertexModels) {
|
|
162
|
+
modelList.push({
|
|
163
|
+
provider: 'vertex',
|
|
164
|
+
name: model.name,
|
|
165
|
+
displayName: model.displayName,
|
|
166
|
+
maxInputTokens: model.maxInputTokens,
|
|
167
|
+
isDefault: model.isDefault,
|
|
168
|
+
isCurrent: currentConfig.provider === 'vertex' &&
|
|
169
|
+
currentConfig.model === model.name,
|
|
170
|
+
isCustom: false,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
95
174
|
if (!cancelled) {
|
|
96
175
|
setModels(modelList);
|
|
97
176
|
setCustomModels(loadedCustomModels);
|
|
@@ -148,7 +227,7 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
148
227
|
}
|
|
149
228
|
}, [selectedIndex, scrollOffset]);
|
|
150
229
|
// Handle delete custom model
|
|
151
|
-
const handleDeleteCustomModel = async (model) => {
|
|
230
|
+
const handleDeleteCustomModel = useCallback(async (model) => {
|
|
152
231
|
if (!model.isCustom)
|
|
153
232
|
return;
|
|
154
233
|
try {
|
|
@@ -162,6 +241,15 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
162
241
|
catch (error) {
|
|
163
242
|
agent.logger.error(`Failed to delete custom model: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
164
243
|
}
|
|
244
|
+
}, [agent]);
|
|
245
|
+
// Helper to clear action state
|
|
246
|
+
const clearActionState = () => {
|
|
247
|
+
setCustomModelAction(null);
|
|
248
|
+
setPendingDeleteConfirm(false);
|
|
249
|
+
if (deleteTimeoutRef.current) {
|
|
250
|
+
clearTimeout(deleteTimeoutRef.current);
|
|
251
|
+
deleteTimeoutRef.current = null;
|
|
252
|
+
}
|
|
165
253
|
};
|
|
166
254
|
// Expose handleInput method via ref
|
|
167
255
|
useImperativeHandle(ref, () => ({
|
|
@@ -170,46 +258,79 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
170
258
|
return false;
|
|
171
259
|
// Escape always works
|
|
172
260
|
if (key.escape) {
|
|
261
|
+
// If in action mode, just clear it first
|
|
262
|
+
if (customModelAction) {
|
|
263
|
+
clearActionState();
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
173
266
|
onClose();
|
|
174
267
|
return true;
|
|
175
268
|
}
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
269
|
+
const itemsLength = filteredItems.length;
|
|
270
|
+
const currentItem = filteredItems[selectedIndexRef.current];
|
|
271
|
+
const isOnCustomModel = currentItem && !isAddCustomOption(currentItem) && currentItem.isCustom;
|
|
272
|
+
// Right arrow - enter/advance action mode for custom models
|
|
273
|
+
if (key.rightArrow) {
|
|
274
|
+
if (!isOnCustomModel)
|
|
275
|
+
return false;
|
|
276
|
+
if (customModelAction === null) {
|
|
277
|
+
// Enter edit mode
|
|
278
|
+
setCustomModelAction('edit');
|
|
279
|
+
return true;
|
|
280
|
+
}
|
|
281
|
+
else if (customModelAction === 'edit') {
|
|
282
|
+
// Advance to delete mode
|
|
283
|
+
setCustomModelAction('delete');
|
|
284
|
+
setPendingDeleteConfirm(false);
|
|
285
|
+
return true;
|
|
286
|
+
}
|
|
287
|
+
else if (customModelAction === 'delete') {
|
|
288
|
+
// In delete mode, right arrow confirms deletion
|
|
289
|
+
if (pendingDeleteConfirm) {
|
|
290
|
+
// Second press - actually delete
|
|
291
|
+
if (deleteTimeoutRef.current) {
|
|
292
|
+
clearTimeout(deleteTimeoutRef.current);
|
|
293
|
+
deleteTimeoutRef.current = null;
|
|
190
294
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
deleteTimeoutRef.current = null;
|
|
200
|
-
}, 3000); // 3 second timeout
|
|
295
|
+
clearActionState();
|
|
296
|
+
void handleDeleteCustomModel(currentItem);
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
// First press in delete mode - set pending confirmation
|
|
300
|
+
setPendingDeleteConfirm(true);
|
|
301
|
+
if (deleteTimeoutRef.current) {
|
|
302
|
+
clearTimeout(deleteTimeoutRef.current);
|
|
201
303
|
}
|
|
202
|
-
|
|
304
|
+
deleteTimeoutRef.current = setTimeout(() => {
|
|
305
|
+
setPendingDeleteConfirm(false);
|
|
306
|
+
deleteTimeoutRef.current = null;
|
|
307
|
+
}, 3000); // 3 second timeout
|
|
203
308
|
}
|
|
204
|
-
return
|
|
309
|
+
return true;
|
|
205
310
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
311
|
+
}
|
|
312
|
+
// Left arrow - go back in action mode
|
|
313
|
+
if (key.leftArrow) {
|
|
314
|
+
if (customModelAction === 'delete') {
|
|
315
|
+
setCustomModelAction('edit');
|
|
316
|
+
setPendingDeleteConfirm(false);
|
|
209
317
|
if (deleteTimeoutRef.current) {
|
|
210
318
|
clearTimeout(deleteTimeoutRef.current);
|
|
211
319
|
deleteTimeoutRef.current = null;
|
|
212
320
|
}
|
|
321
|
+
return true;
|
|
322
|
+
}
|
|
323
|
+
else if (customModelAction === 'edit') {
|
|
324
|
+
setCustomModelAction(null);
|
|
325
|
+
return true;
|
|
326
|
+
}
|
|
327
|
+
return false;
|
|
328
|
+
}
|
|
329
|
+
// Handle character input for search
|
|
330
|
+
if (input && !key.return && !key.upArrow && !key.downArrow && !key.tab) {
|
|
331
|
+
// Any character input clears action state and adds to search
|
|
332
|
+
if (customModelAction) {
|
|
333
|
+
clearActionState();
|
|
213
334
|
}
|
|
214
335
|
// Backspace
|
|
215
336
|
if (key.backspace || key.delete) {
|
|
@@ -229,17 +350,12 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
229
350
|
setSearchQuery((prev) => prev.slice(0, -1));
|
|
230
351
|
return true;
|
|
231
352
|
}
|
|
232
|
-
const itemsLength = filteredItems.length;
|
|
233
353
|
if (itemsLength === 0)
|
|
234
354
|
return false;
|
|
235
355
|
if (key.upArrow) {
|
|
236
|
-
// Clear
|
|
237
|
-
if (
|
|
238
|
-
|
|
239
|
-
if (deleteTimeoutRef.current) {
|
|
240
|
-
clearTimeout(deleteTimeoutRef.current);
|
|
241
|
-
deleteTimeoutRef.current = null;
|
|
242
|
-
}
|
|
356
|
+
// Clear action state on vertical navigation
|
|
357
|
+
if (customModelAction) {
|
|
358
|
+
clearActionState();
|
|
243
359
|
}
|
|
244
360
|
const nextIndex = (selectedIndexRef.current - 1 + itemsLength) % itemsLength;
|
|
245
361
|
setSelectedIndex(nextIndex);
|
|
@@ -247,13 +363,9 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
247
363
|
return true;
|
|
248
364
|
}
|
|
249
365
|
if (key.downArrow) {
|
|
250
|
-
// Clear
|
|
251
|
-
if (
|
|
252
|
-
|
|
253
|
-
if (deleteTimeoutRef.current) {
|
|
254
|
-
clearTimeout(deleteTimeoutRef.current);
|
|
255
|
-
deleteTimeoutRef.current = null;
|
|
256
|
-
}
|
|
366
|
+
// Clear action state on vertical navigation
|
|
367
|
+
if (customModelAction) {
|
|
368
|
+
clearActionState();
|
|
257
369
|
}
|
|
258
370
|
const nextIndex = (selectedIndexRef.current + 1) % itemsLength;
|
|
259
371
|
setSelectedIndex(nextIndex);
|
|
@@ -265,34 +377,76 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
265
377
|
if (item) {
|
|
266
378
|
if (isAddCustomOption(item)) {
|
|
267
379
|
onAddCustomModel();
|
|
380
|
+
return true;
|
|
268
381
|
}
|
|
269
|
-
|
|
270
|
-
|
|
382
|
+
// Handle action mode confirmations
|
|
383
|
+
if (customModelAction === 'edit' && item.isCustom) {
|
|
384
|
+
// Find the full custom model data
|
|
385
|
+
const customModel = customModels.find((cm) => cm.name === item.name &&
|
|
386
|
+
(cm.provider ?? 'openai-compatible') === item.provider);
|
|
387
|
+
if (customModel) {
|
|
388
|
+
onEditCustomModel(customModel);
|
|
389
|
+
}
|
|
390
|
+
return true;
|
|
391
|
+
}
|
|
392
|
+
if (customModelAction === 'delete' && item.isCustom) {
|
|
393
|
+
if (pendingDeleteConfirm) {
|
|
394
|
+
// Already confirmed, delete
|
|
395
|
+
clearActionState();
|
|
396
|
+
void handleDeleteCustomModel(item);
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
// Set pending confirmation
|
|
400
|
+
setPendingDeleteConfirm(true);
|
|
401
|
+
if (deleteTimeoutRef.current) {
|
|
402
|
+
clearTimeout(deleteTimeoutRef.current);
|
|
403
|
+
}
|
|
404
|
+
deleteTimeoutRef.current = setTimeout(() => {
|
|
405
|
+
setPendingDeleteConfirm(false);
|
|
406
|
+
deleteTimeoutRef.current = null;
|
|
407
|
+
}, 3000);
|
|
408
|
+
}
|
|
409
|
+
return true;
|
|
271
410
|
}
|
|
411
|
+
// Normal selection
|
|
412
|
+
onSelectModel(item.provider, item.name, item.displayName, item.baseURL);
|
|
272
413
|
return true;
|
|
273
414
|
}
|
|
274
415
|
}
|
|
275
416
|
return false;
|
|
276
417
|
},
|
|
277
|
-
}), [
|
|
418
|
+
}), [
|
|
419
|
+
isVisible,
|
|
420
|
+
filteredItems,
|
|
421
|
+
onClose,
|
|
422
|
+
onSelectModel,
|
|
423
|
+
onAddCustomModel,
|
|
424
|
+
onEditCustomModel,
|
|
425
|
+
customModelAction,
|
|
426
|
+
pendingDeleteConfirm,
|
|
427
|
+
customModels,
|
|
428
|
+
handleDeleteCustomModel,
|
|
429
|
+
]);
|
|
278
430
|
if (!isVisible)
|
|
279
431
|
return null;
|
|
280
432
|
if (isLoading) {
|
|
281
|
-
return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, {
|
|
433
|
+
return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, { color: "gray", children: "Loading models..." }) }));
|
|
282
434
|
}
|
|
283
435
|
const visibleItems = filteredItems.slice(scrollOffset, scrollOffset + MAX_VISIBLE_ITEMS);
|
|
284
436
|
const hasCustomModels = customModels.length > 0;
|
|
285
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsxs(Text, { color: "cyan", bold: true, children: ["Select Model (", selectedIndex + 1, "/", filteredItems.length, ")"] }) }), _jsxs(Box, { paddingX: 0, paddingY: 0, children: [_jsx(Text, {
|
|
437
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsxs(Text, { color: "cyan", bold: true, children: ["Select Model (", selectedIndex + 1, "/", filteredItems.length, ")"] }) }), _jsxs(Box, { paddingX: 0, paddingY: 0, children: [_jsx(Text, { color: "gray", children: "\u2191\u2193 navigate, Enter select, Esc close" }), hasCustomModels && _jsx(Text, { color: "gray", children: ", \u2192\u2190 for custom actions" })] }), _jsxs(Box, { paddingX: 0, paddingY: 0, children: [_jsx(Text, { color: "gray", children: "\uD83D\uDD0D " }), _jsx(Text, { color: searchQuery ? 'white' : 'gray', children: searchQuery || 'Type to search...' }), _jsx(Text, { color: "cyan", children: "\u258C" })] }), _jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, { color: "gray", children: '─'.repeat(50) }) }), visibleItems.map((item, visibleIndex) => {
|
|
286
438
|
const actualIndex = scrollOffset + visibleIndex;
|
|
287
439
|
const isSelected = actualIndex === selectedIndex;
|
|
288
440
|
if (isAddCustomOption(item)) {
|
|
289
441
|
return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, { color: isSelected ? 'green' : 'gray', bold: isSelected, children: "\u2795 Add custom model..." }) }, "add-custom"));
|
|
290
442
|
}
|
|
291
|
-
|
|
292
|
-
|
|
443
|
+
// Show action buttons for selected custom models
|
|
444
|
+
const showActions = isSelected && item.isCustom;
|
|
445
|
+
return (_jsxs(Box, { paddingX: 0, paddingY: 0, children: [item.isCustom && _jsx(Text, { color: isSelected ? 'orange' : 'gray', children: "\u2605 " }), _jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: item.displayName || item.name }), _jsxs(Text, { color: isSelected ? 'white' : 'gray', children: [" (", item.provider, ")"] }), _jsxs(Text, { color: isSelected ? 'white' : 'gray', children: [' ', "\u2022 ", item.maxInputTokens.toLocaleString(), " tokens"] }), item.isDefault && (_jsx(Text, { color: isSelected ? 'white' : 'gray', children: " [DEFAULT]" })), item.isCurrent && !showActions && (_jsxs(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: [' ', "\u2190 Current"] })), showActions && (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsxs(Text, { color: customModelAction === 'edit' ? 'green' : 'gray', bold: customModelAction === 'edit', inverse: customModelAction === 'edit', children: [' ', "Edit", ' '] }), _jsx(Text, { children: " " }), _jsxs(Text, { color: customModelAction === 'delete' ? 'red' : 'gray', bold: customModelAction === 'delete', inverse: customModelAction === 'delete', children: [' ', "Delete", ' '] })] }))] }, `${item.provider}-${item.name}`));
|
|
446
|
+
}), filteredItems.length > MAX_VISIBLE_ITEMS && (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsxs(Text, { color: "gray", children: [scrollOffset > 0 ? '↑ more above' : '', scrollOffset > 0 && scrollOffset + MAX_VISIBLE_ITEMS < filteredItems.length
|
|
293
447
|
? ' | '
|
|
294
448
|
: '', scrollOffset + MAX_VISIBLE_ITEMS < filteredItems.length
|
|
295
449
|
? '↓ more below'
|
|
296
|
-
: ''] }) })),
|
|
450
|
+
: ''] }) })), customModelAction === 'delete' && pendingDeleteConfirm && (_jsx(Box, { paddingX: 0, paddingY: 0, marginTop: 1, children: _jsx(Text, { color: "yellowBright", children: "\u26A0\uFE0F Press \u2192 or Enter again to confirm delete" }) })), customModelAction && !pendingDeleteConfirm && (_jsx(Box, { paddingX: 0, paddingY: 0, marginTop: 1, children: _jsxs(Text, { color: "gray", children: ["\u2190 ", customModelAction === 'edit' ? 'deselect' : 'edit', " | \u2192", ' ', customModelAction === 'edit' ? 'delete' : 'confirm', " | Enter", ' ', customModelAction] }) }))] }));
|
|
297
451
|
});
|
|
298
452
|
export default ModelSelector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromptAddChoice.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/PromptAddChoice.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAuE,MAAM,OAAO,CAAC;AAE5F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,MAAM,CAAC;AAE5D,UAAU,oBAAoB;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IAClC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AA0BD;;GAEG;AACH,QAAA,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"PromptAddChoice.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/PromptAddChoice.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAuE,MAAM,OAAO,CAAC;AAE5F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,MAAM,CAAC;AAE5D,UAAU,oBAAoB;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,CAAC;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IAClC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AA0BD;;GAEG;AACH,QAAA,MAAM,eAAe,oGA2DpB,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -41,12 +41,12 @@ const PromptAddChoice = forwardRef(function PromptAddChoice({ isVisible, onSelec
|
|
|
41
41
|
}), []);
|
|
42
42
|
// Format item for display
|
|
43
43
|
const formatItem = (item, isSelected) => {
|
|
44
|
-
return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? 'cyan' : 'white', bold: isSelected, children: item.label }), item.recommended && (
|
|
44
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? 'cyan' : 'white', bold: isSelected, children: item.label }), item.recommended && (_jsx(Text, { color: isSelected ? 'green' : 'gray', children: " (Recommended)" })), _jsxs(Text, { color: "gray", children: [" \u00B7 ", item.description] })] }));
|
|
45
45
|
};
|
|
46
46
|
// Handle selection
|
|
47
47
|
const handleSelect = (item) => {
|
|
48
48
|
onSelect(item.scope);
|
|
49
49
|
};
|
|
50
|
-
return (_jsx(BaseSelector, { ref: baseSelectorRef, items: CHOICES, isVisible: isVisible, selectedIndex: selectedIndex, onSelectIndex: setSelectedIndex, onSelect: handleSelect, onClose: onClose, formatItem: formatItem, title: "Add Prompt", borderColor: "
|
|
50
|
+
return (_jsx(BaseSelector, { ref: baseSelectorRef, items: CHOICES, isVisible: isVisible, selectedIndex: selectedIndex, onSelectIndex: setSelectedIndex, onSelect: handleSelect, onClose: onClose, formatItem: formatItem, title: "Add Prompt", borderColor: "yellowBright", emptyMessage: "No options available" }));
|
|
51
51
|
});
|
|
52
52
|
export default PromptAddChoice;
|
|
@@ -161,6 +161,6 @@ const PromptAddWizard = forwardRef(function PromptAddWizard({ isVisible, scope,
|
|
|
161
161
|
if (!isVisible || !currentStepConfig)
|
|
162
162
|
return null;
|
|
163
163
|
const scopeLabel = scope === 'agent' ? 'Agent' : 'Shared';
|
|
164
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "
|
|
164
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "yellowBright", paddingX: 1, marginTop: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsxs(Text, { bold: true, color: "yellowBright", children: ["Add ", scopeLabel, " Prompt"] }), _jsxs(Text, { color: "gray", children: [' ', "(Step ", currentStep + 1, "/", WIZARD_STEPS.length, ")"] })] }), _jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { bold: true, children: [currentStepConfig.label, ":"] }), _jsx(Text, { color: "gray", children: currentStepConfig.placeholder })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: "> " }), _jsx(Text, { children: currentInput }), _jsx(Text, { color: "cyan", children: "_" })] }), currentStepConfig.multiline && (_jsx(Text, { color: "gray", italic: true, children: "(Shift+Enter for newline)" }))] }), error && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: error }) })), _jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "gray", children: ["Enter to continue \u2022 Esc to ", currentStep > 0 ? 'go back' : 'cancel'] }) })] }));
|
|
165
165
|
});
|
|
166
166
|
export default PromptAddWizard;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromptDeleteSelector.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/PromptDeleteSelector.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,UAAU,yBAAyB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACvC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAwBD;;GAEG;AACH,QAAA,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"PromptDeleteSelector.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/PromptDeleteSelector.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,UAAU,yBAAyB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,0BAA0B;IACvC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAwBD;;GAEG;AACH,QAAA,MAAM,oBAAoB,8GA4IzB,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -102,7 +102,7 @@ const PromptDeleteSelector = forwardRef(function PromptDeleteSelector({ isVisibl
|
|
|
102
102
|
const displayName = item.prompt.displayName || item.prompt.name;
|
|
103
103
|
const sourceLabel = item.sourceType === 'shared' ? 'shared' : 'config';
|
|
104
104
|
const sourceColor = item.sourceType === 'shared' ? 'magenta' : 'blue';
|
|
105
|
-
return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? 'red' : 'white', bold: isSelected, children: displayName }), item.prompt.title &&
|
|
105
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? 'red' : 'white', bold: isSelected, children: displayName }), item.prompt.title && _jsxs(Text, { color: "gray", children: [" - ", item.prompt.title] }), _jsxs(Text, { color: sourceColor, children: [" (", sourceLabel, ")"] })] }));
|
|
106
106
|
};
|
|
107
107
|
// Handle selection
|
|
108
108
|
const handleSelect = (item) => {
|
|
@@ -114,6 +114,6 @@ const PromptDeleteSelector = forwardRef(function PromptDeleteSelector({ isVisibl
|
|
|
114
114
|
}, [deletablePrompts]);
|
|
115
115
|
// Custom empty message
|
|
116
116
|
const emptyMessage = 'No deletable prompts found.\nMCP prompts cannot be deleted.';
|
|
117
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(BaseSelector, { ref: baseSelectorRef, items: items, isVisible: isVisible, isLoading: isLoading, selectedIndex: selectedIndex, onSelectIndex: setSelectedIndex, onSelect: handleSelect, onClose: onClose, formatItem: formatItem, title: "Delete Prompt", borderColor: "red", emptyMessage: emptyMessage, maxVisibleItems: 10 }), isVisible && !isLoading && items.length > 0 && (_jsx(Box, { marginTop: 1, children: _jsx(Text, {
|
|
117
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(BaseSelector, { ref: baseSelectorRef, items: items, isVisible: isVisible, isLoading: isLoading, selectedIndex: selectedIndex, onSelectIndex: setSelectedIndex, onSelect: handleSelect, onClose: onClose, formatItem: formatItem, title: "Delete Prompt", borderColor: "red", emptyMessage: emptyMessage, maxVisibleItems: 10 }), isVisible && !isLoading && items.length > 0 && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", italic: true, children: "Note: MCP prompts cannot be deleted (they come from servers)" }) }))] }));
|
|
118
118
|
});
|
|
119
119
|
export default PromptDeleteSelector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromptList.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/PromptList.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAQN,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,MAAM,gBAAgB,GACtB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC;AAEhC,UAAU,eAAe;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC7C,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAuCD;;GAEG;AACH,QAAA,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"PromptList.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/PromptList.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAQN,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,MAAM,gBAAgB,GACtB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,CAAC;AAEhC,UAAU,eAAe;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC7C,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC7B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;IAClD,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAuCD;;GAEG;AACH,QAAA,MAAM,UAAU,0FAkKd,CAAC;AAEH,eAAe,UAAU,CAAC"}
|
|
@@ -118,7 +118,7 @@ const PromptList = forwardRef(function PromptList({ isVisible, onAction, onLoadI
|
|
|
118
118
|
const sourceInfo = getSourceIndicator(prompt.source);
|
|
119
119
|
const isShared = isSharedPrompt(prompt);
|
|
120
120
|
const sourceLabel = isShared ? 'shared' : sourceInfo.label;
|
|
121
|
-
return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? 'cyan' : 'white', bold: isSelected, children: displayName }), prompt.title &&
|
|
121
|
+
return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? 'cyan' : 'white', bold: isSelected, children: displayName }), prompt.title && _jsxs(Text, { color: "gray", children: [" - ", prompt.title] }), _jsxs(Text, { color: sourceInfo.color, children: [" (", sourceLabel, ")"] })] }));
|
|
122
122
|
};
|
|
123
123
|
// Handle selection
|
|
124
124
|
const handleSelect = (item) => {
|
|
@@ -139,6 +139,6 @@ const PromptList = forwardRef(function PromptList({ isVisible, onAction, onLoadI
|
|
|
139
139
|
onLoadIntoInput(`/${displayName} `);
|
|
140
140
|
}
|
|
141
141
|
};
|
|
142
|
-
return (_jsx(BaseSelector, { ref: baseSelectorRef, items: items, isVisible: isVisible, isLoading: isLoading, selectedIndex: selectedIndex, onSelectIndex: setSelectedIndex, onSelect: handleSelect, onClose: onClose, formatItem: formatItem, onTab: handleTab, supportsTab: true, title: "Prompts", borderColor: "
|
|
142
|
+
return (_jsx(BaseSelector, { ref: baseSelectorRef, items: items, isVisible: isVisible, isLoading: isLoading, selectedIndex: selectedIndex, onSelectIndex: setSelectedIndex, onSelect: handleSelect, onClose: onClose, formatItem: formatItem, onTab: handleTab, supportsTab: true, title: "Prompts", borderColor: "yellowBright", emptyMessage: "No prompts configured", maxVisibleItems: 12 }));
|
|
143
143
|
});
|
|
144
144
|
export default PromptList;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchOverlay.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/SearchOverlay.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAChD,KAAK,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAChC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAeD;;GAEG;AACH,QAAA,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"SearchOverlay.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/SearchOverlay.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAON,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAChD,KAAK,EAAE,UAAU,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAChC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAeD;;GAEG;AACH,QAAA,MAAM,aAAa,gGAqSjB,CAAC;AAcH,eAAe,aAAa,CAAC"}
|
|
@@ -164,16 +164,16 @@ const SearchOverlay = forwardRef(function SearchOverlay({ isVisible, onClose, on
|
|
|
164
164
|
return null;
|
|
165
165
|
// Calculate visible results window
|
|
166
166
|
const visibleResults = state.results.slice(scrollOffset.current, scrollOffset.current + MAX_VISIBLE_RESULTS);
|
|
167
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Search Messages" }), state.total > 0 && (_jsxs(Text, {
|
|
167
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 1, children: [_jsxs(Box, { marginBottom: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: "Search Messages" }), state.total > 0 && (_jsxs(Text, { color: "gray", children: [' ', "(", state.total, " result", state.total !== 1 ? 's' : '', ")"] }))] }), _jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: "> " }), _jsx(Text, { children: state.query }), _jsx(Text, { color: "cyan", children: "_" })] }), state.isLoading && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "yellowBright", children: "Searching..." }) })), state.error && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "red", children: state.error }) })), !state.isLoading && state.results.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [visibleResults.map((result, idx) => {
|
|
168
168
|
const actualIndex = scrollOffset.current + idx;
|
|
169
169
|
const isSelected = actualIndex === state.selectedIndex;
|
|
170
170
|
const roleColor = result.message.role === 'user'
|
|
171
171
|
? 'blue'
|
|
172
172
|
: result.message.role === 'assistant'
|
|
173
173
|
? 'green'
|
|
174
|
-
: '
|
|
175
|
-
return (_jsxs(Box, { flexDirection: "column", paddingLeft: isSelected ? 0 : 2, children: [_jsxs(Box, { children: [isSelected && (_jsx(Text, { color: "cyan", bold: true, children: '> ' })), _jsx(Text, { color: "gray", children: result.sessionId.slice(0, 8) }), _jsx(Text, { children: " " }), _jsxs(Text, { color: roleColor, bold: isSelected, children: ["[", result.message.role, "]"] })] }), _jsx(Box, { paddingLeft: isSelected ? 2 : 0, children: _jsxs(Text, { color: isSelected ? 'white' : 'gray',
|
|
176
|
-
}), state.results.length > MAX_VISIBLE_RESULTS && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, {
|
|
174
|
+
: 'yellowBright';
|
|
175
|
+
return (_jsxs(Box, { flexDirection: "column", paddingLeft: isSelected ? 0 : 2, children: [_jsxs(Box, { children: [isSelected && (_jsx(Text, { color: "cyan", bold: true, children: '> ' })), _jsx(Text, { color: "gray", children: result.sessionId.slice(0, 8) }), _jsx(Text, { children: " " }), _jsxs(Text, { color: roleColor, bold: isSelected, children: ["[", result.message.role, "]"] })] }), _jsx(Box, { paddingLeft: isSelected ? 2 : 0, children: _jsxs(Text, { color: isSelected ? 'white' : 'gray', children: [' ', truncateContext(result.context, 60)] }) })] }, `${result.sessionId}-${result.messageIndex}`));
|
|
176
|
+
}), state.results.length > MAX_VISIBLE_RESULTS && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "gray", children: ["Showing ", scrollOffset.current + 1, "-", Math.min(scrollOffset.current + MAX_VISIBLE_RESULTS, state.results.length), ' ', "of ", state.results.length, state.hasMore ? '+' : ''] }) }))] })), !state.isLoading && state.query && state.results.length === 0 && !state.error && (_jsx(Box, { marginTop: 1, children: _jsxs(Text, { color: "gray", children: ["No results found for \"", state.query, "\""] }) })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "\u2191\u2193 navigate \u2022 Enter select \u2022 Esc close" }) })] }));
|
|
177
177
|
});
|
|
178
178
|
/**
|
|
179
179
|
* Truncate context text for display
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionSubcommandSelector.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/SessionSubcommandSelector.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAuE,MAAM,OAAO,CAAC;AAE5F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAG/D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,UAAU,8BAA8B;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,+BAA+B;IAC5C,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAgBD;;GAEG;AACH,QAAA,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"SessionSubcommandSelector.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/SessionSubcommandSelector.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAuE,MAAM,OAAO,CAAC;AAE5F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAG/D,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErE,UAAU,8BAA8B;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1C,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,+BAA+B;IAC5C,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAgBD;;GAEG;AACH,QAAA,MAAM,yBAAyB,wHA2D7B,CAAC;AAEH,eAAe,yBAAyB,CAAC"}
|
|
@@ -32,7 +32,7 @@ const SessionSubcommandSelector = forwardRef(function SessionSubcommandSelector(
|
|
|
32
32
|
}
|
|
33
33
|
}, [isVisible]);
|
|
34
34
|
// Format option for display
|
|
35
|
-
const formatItem = (option, isSelected) => (_jsxs(_Fragment, { children: [_jsxs(Text, { children: [option.icon, " "] }), _jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: option.label }), _jsxs(Text, { color: isSelected ? 'white' : 'gray',
|
|
35
|
+
const formatItem = (option, isSelected) => (_jsxs(_Fragment, { children: [_jsxs(Text, { children: [option.icon, " "] }), _jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: option.label }), _jsxs(Text, { color: isSelected ? 'white' : 'gray', children: [" - ", option.description] })] }));
|
|
36
36
|
// Handle selection
|
|
37
37
|
const handleSelect = (option) => {
|
|
38
38
|
onSelect(option.action);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StreamSelector.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/StreamSelector.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAuE,MAAM,OAAO,CAAC;AAE5F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAI/D,UAAU,mBAAmB;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAUD;;GAEG;AACH,QAAA,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"StreamSelector.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/StreamSelector.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAuE,MAAM,OAAO,CAAC;AAE5F,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAI/D,UAAU,mBAAmB;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAUD;;GAEG;AACH,QAAA,MAAM,cAAc,kGAuFnB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -46,7 +46,7 @@ const StreamSelector = forwardRef(function StreamSelector({ isVisible, onSelect,
|
|
|
46
46
|
setSelectedIndex(currentEnabled ? 0 : 1);
|
|
47
47
|
}, [isVisible]);
|
|
48
48
|
// Format option item for display
|
|
49
|
-
const formatItem = (option, isSelected) => (_jsxs(_Fragment, { children: [_jsxs(Text, { children: [option.icon, " "] }), _jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: option.label }), _jsxs(Text, { color: isSelected ? 'white' : 'gray',
|
|
49
|
+
const formatItem = (option, isSelected) => (_jsxs(_Fragment, { children: [_jsxs(Text, { children: [option.icon, " "] }), _jsx(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: option.label }), _jsxs(Text, { color: isSelected ? 'white' : 'gray', children: [" - ", option.description] }), option.isCurrent && (_jsxs(Text, { color: "green", bold: true, children: [' ', "\u2713"] }))] }));
|
|
50
50
|
// Handle selection
|
|
51
51
|
const handleSelect = (option) => {
|
|
52
52
|
const enabled = option.id === 'enabled';
|