dexto 1.5.7 → 1.6.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 +3 -3
- package/dist/agents/agent-template.yml +2 -2
- package/dist/agents/coding-agent/README.md +10 -10
- package/dist/agents/coding-agent/coding-agent.yml +81 -80
- package/dist/agents/default-agent.yml +32 -47
- package/dist/agents/explore-agent/explore-agent.yml +3 -6
- package/dist/agents/image-editor-agent/image-editor-agent.yml +1 -1
- package/dist/agents/nano-banana-agent/nano-banana-agent.yml +1 -1
- package/dist/agents/podcast-agent/podcast-agent.yml +1 -1
- package/dist/agents/product-name-researcher/product-name-researcher.yml +1 -1
- package/dist/agents/sora-video-agent/sora-video-agent.yml +4 -6
- package/dist/agents/triage-demo/triage-agent.yml +1 -1
- package/dist/analytics/events.d.ts +2 -2
- package/dist/analytics/events.d.ts.map +1 -1
- package/dist/api/mcp/tool-aggregation-handler.d.ts +2 -2
- package/dist/api/server-hono.d.ts +2 -2
- package/dist/api/server-hono.d.ts.map +1 -1
- package/dist/api/server-hono.js +37 -60
- package/dist/cli/approval/cli-approval-handler.d.ts +10 -3
- package/dist/cli/approval/cli-approval-handler.d.ts.map +1 -1
- package/dist/cli/approval/cli-approval-handler.js +1 -1
- package/dist/cli/auth/constants.d.ts +4 -0
- package/dist/cli/auth/constants.d.ts.map +1 -1
- package/dist/cli/auth/constants.js +4 -0
- package/dist/cli/commands/auth/logout.js +2 -2
- package/dist/cli/commands/billing/status.d.ts +3 -1
- package/dist/cli/commands/billing/status.d.ts.map +1 -1
- package/dist/cli/commands/billing/status.js +23 -1
- package/dist/cli/commands/create-app.d.ts +1 -11
- package/dist/cli/commands/create-app.d.ts.map +1 -1
- package/dist/cli/commands/create-app.js +21 -545
- package/dist/cli/commands/create-image.d.ts.map +1 -1
- package/dist/cli/commands/create-image.js +54 -53
- package/dist/cli/commands/image.d.ts +52 -0
- package/dist/cli/commands/image.d.ts.map +1 -0
- package/dist/cli/commands/image.js +118 -0
- 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 +3 -1
- package/dist/cli/commands/init-app.d.ts +4 -8
- package/dist/cli/commands/init-app.d.ts.map +1 -1
- package/dist/cli/commands/init-app.js +37 -161
- package/dist/cli/commands/interactive-commands/command-parser.d.ts +2 -0
- package/dist/cli/commands/interactive-commands/command-parser.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/commands.d.ts +1 -1
- package/dist/cli/commands/interactive-commands/commands.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/commands.js +2 -2
- package/dist/cli/commands/interactive-commands/general-commands.js +2 -2
- package/dist/cli/commands/interactive-commands/prompt-commands.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/prompt-commands.js +13 -2
- package/dist/cli/commands/interactive-commands/session/index.d.ts +2 -1
- package/dist/cli/commands/interactive-commands/session/index.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/session/index.js +2 -1
- package/dist/cli/commands/interactive-commands/session/session-commands.d.ts +2 -2
- package/dist/cli/commands/interactive-commands/session/session-commands.js +2 -2
- package/dist/cli/commands/interactive-commands/system/system-commands.d.ts.map +1 -1
- package/dist/cli/commands/interactive-commands/system/system-commands.js +7 -29
- package/dist/cli/commands/list-agents.d.ts.map +1 -1
- package/dist/cli/commands/list-agents.js +3 -2
- package/dist/cli/commands/plugin.d.ts +4 -4
- package/dist/cli/commands/setup.d.ts +5 -5
- package/dist/cli/commands/setup.d.ts.map +1 -1
- package/dist/cli/commands/setup.js +766 -207
- package/dist/cli/commands/sync-agents.d.ts +2 -12
- package/dist/cli/commands/sync-agents.d.ts.map +1 -1
- package/dist/cli/commands/sync-agents.js +2 -50
- package/dist/cli/ink-cli/InkCLIRefactored.d.ts +7 -1
- package/dist/cli/ink-cli/InkCLIRefactored.d.ts.map +1 -1
- package/dist/cli/ink-cli/InkCLIRefactored.js +17 -7
- package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts +2 -2
- package/dist/cli/ink-cli/components/ApprovalPrompt.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/ApprovalPrompt.js +15 -14
- package/dist/cli/ink-cli/components/BackgroundTasksPanel.d.ts +18 -0
- package/dist/cli/ink-cli/components/BackgroundTasksPanel.d.ts.map +1 -0
- package/dist/cli/ink-cli/components/BackgroundTasksPanel.js +48 -0
- 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 +5 -6
- package/dist/cli/ink-cli/components/ResourceAutocomplete.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/ResourceAutocomplete.js +150 -41
- package/dist/cli/ink-cli/components/StatusBar.d.ts +3 -1
- package/dist/cli/ink-cli/components/StatusBar.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/StatusBar.js +27 -7
- package/dist/cli/ink-cli/components/TodoPanel.js +1 -1
- package/dist/cli/ink-cli/components/chat/MessageItem.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/chat/MessageItem.js +9 -5
- package/dist/cli/ink-cli/components/chat/styled-boxes/ConfigBox.js +1 -1
- package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.d.ts +3 -1
- package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/modes/AlternateBufferCLI.js +3 -2
- package/dist/cli/ink-cli/components/modes/StaticCLI.d.ts +3 -1
- package/dist/cli/ink-cli/components/modes/StaticCLI.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/modes/StaticCLI.js +3 -2
- package/dist/cli/ink-cli/components/overlays/ContextStatsOverlay.js +1 -1
- package/dist/cli/ink-cli/components/overlays/CustomModelWizard.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/CustomModelWizard.js +8 -4
- package/dist/cli/ink-cli/components/overlays/LogLevelSelector.js +1 -1
- package/dist/cli/ink-cli/components/overlays/McpRemoveSelector.js +1 -1
- package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts +1 -0
- package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/ModelSelectorRefactored.js +144 -41
- package/dist/cli/ink-cli/components/overlays/ToolBrowser.d.ts +2 -1
- package/dist/cli/ink-cli/components/overlays/ToolBrowser.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/ToolBrowser.js +286 -44
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.d.ts +9 -1
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.d.ts.map +1 -1
- package/dist/cli/ink-cli/components/overlays/custom-model-wizard/provider-config.js +35 -9
- package/dist/cli/ink-cli/constants/tips.js +1 -1
- package/dist/cli/ink-cli/containers/InputContainer.d.ts +4 -0
- package/dist/cli/ink-cli/containers/InputContainer.d.ts.map +1 -1
- package/dist/cli/ink-cli/containers/InputContainer.js +30 -8
- package/dist/cli/ink-cli/containers/OverlayContainer.d.ts +2 -0
- package/dist/cli/ink-cli/containers/OverlayContainer.d.ts.map +1 -1
- package/dist/cli/ink-cli/containers/OverlayContainer.js +215 -59
- package/dist/cli/ink-cli/hooks/useAgentEvents.d.ts.map +1 -1
- package/dist/cli/ink-cli/hooks/useAgentEvents.js +73 -13
- package/dist/cli/ink-cli/hooks/useCLIState.d.ts.map +1 -1
- package/dist/cli/ink-cli/hooks/useCLIState.js +3 -0
- package/dist/cli/ink-cli/hooks/useInputOrchestrator.d.ts.map +1 -1
- package/dist/cli/ink-cli/hooks/useInputOrchestrator.js +8 -0
- package/dist/cli/ink-cli/hooks/useTokenCounter.d.ts.map +1 -1
- package/dist/cli/ink-cli/hooks/useTokenCounter.js +7 -4
- package/dist/cli/ink-cli/services/CommandService.d.ts +1 -1
- package/dist/cli/ink-cli/services/CommandService.d.ts.map +1 -1
- package/dist/cli/ink-cli/services/CommandService.js +2 -2
- package/dist/cli/ink-cli/services/processStream.d.ts +2 -2
- package/dist/cli/ink-cli/services/processStream.d.ts.map +1 -1
- package/dist/cli/ink-cli/services/processStream.js +55 -8
- package/dist/cli/ink-cli/state/initialState.d.ts.map +1 -1
- package/dist/cli/ink-cli/state/initialState.js +3 -0
- package/dist/cli/ink-cli/state/types.d.ts +11 -2
- package/dist/cli/ink-cli/state/types.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/llm-provider-display.d.ts +3 -0
- package/dist/cli/ink-cli/utils/llm-provider-display.d.ts.map +1 -0
- package/dist/cli/ink-cli/utils/llm-provider-display.js +22 -0
- package/dist/cli/ink-cli/utils/messageFormatting.d.ts +13 -9
- package/dist/cli/ink-cli/utils/messageFormatting.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/messageFormatting.js +106 -151
- package/dist/cli/ink-cli/utils/toolUtils.d.ts.map +1 -1
- package/dist/cli/ink-cli/utils/toolUtils.js +2 -9
- package/dist/cli/utils/config-validation.d.ts +11 -11
- package/dist/cli/utils/config-validation.d.ts.map +1 -1
- package/dist/cli/utils/config-validation.js +56 -290
- package/dist/cli/utils/dexto-auth-check.d.ts +7 -7
- package/dist/cli/utils/dexto-auth-check.d.ts.map +1 -1
- package/dist/cli/utils/dexto-auth-check.js +16 -16
- package/dist/cli/utils/image-store.d.ts +16 -0
- package/dist/cli/utils/image-store.d.ts.map +1 -0
- package/dist/cli/utils/image-store.js +289 -0
- package/dist/cli/utils/options.js +1 -1
- package/dist/cli/utils/provider-setup.d.ts +2 -2
- package/dist/cli/utils/provider-setup.d.ts.map +1 -1
- package/dist/cli/utils/provider-setup.js +10 -2
- package/dist/cli/utils/scaffolding-utils.d.ts +5 -0
- package/dist/cli/utils/scaffolding-utils.d.ts.map +1 -1
- package/dist/cli/utils/scaffolding-utils.js +46 -4
- package/dist/cli/utils/template-engine.d.ts +28 -16
- package/dist/cli/utils/template-engine.d.ts.map +1 -1
- package/dist/cli/utils/template-engine.js +339 -479
- package/dist/config/cli-overrides.d.ts +4 -3
- package/dist/config/cli-overrides.d.ts.map +1 -1
- package/dist/config/cli-overrides.js +8 -10
- package/dist/config/effective-llm.d.ts +4 -4
- package/dist/config/effective-llm.d.ts.map +1 -1
- package/dist/config/effective-llm.js +4 -4
- package/dist/index-main.d.ts +2 -0
- package/dist/index-main.d.ts.map +1 -0
- package/dist/index-main.js +1554 -0
- package/dist/index.js +2 -1580
- package/dist/utils/session-logger-factory.d.ts +3 -0
- package/dist/utils/session-logger-factory.d.ts.map +1 -0
- package/dist/utils/session-logger-factory.js +19 -0
- package/dist/webui/assets/{index-Dl3mj53P.js → index-DwtueA8l.js} +231 -231
- package/dist/webui/index.html +1 -1
- package/package.json +10 -7
- package/dist/cli/cli-subscriber.d.ts +0 -45
- package/dist/cli/cli-subscriber.d.ts.map +0 -1
- package/dist/cli/cli-subscriber.js +0 -204
|
@@ -10,10 +10,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
10
10
|
*/
|
|
11
11
|
import { useState, useEffect, forwardRef, useImperativeHandle, useCallback, useRef, } from 'react';
|
|
12
12
|
import { Box, Text } from 'ink';
|
|
13
|
-
import { saveCustomModel, deleteCustomModel,
|
|
13
|
+
import { saveCustomModel, deleteCustomModel, saveProviderApiKey, getProviderKeyStatus, resolveApiKeyForProvider, determineApiKeyStorage, } from '@dexto/agent-management';
|
|
14
14
|
import { logger } from '@dexto/core';
|
|
15
15
|
// Import from new modular architecture
|
|
16
|
-
import { getProviderConfig, getAvailableProviders, runAsyncValidation, } from './custom-model-wizard/provider-config.js';
|
|
16
|
+
import { getProviderConfig, getAvailableProviders, getProviderByMenuIndex, runAsyncValidation, } from './custom-model-wizard/provider-config.js';
|
|
17
17
|
import { ProviderSelector, WizardStepInput, SetupInfoBanner, ApiKeyStep, } from './custom-model-wizard/shared/index.js';
|
|
18
18
|
import LocalModelWizard from './custom-model-wizard/LocalModelWizard.js';
|
|
19
19
|
/**
|
|
@@ -54,6 +54,7 @@ const CustomModelWizard = forwardRef(function CustomModelWizard({ isVisible, onC
|
|
|
54
54
|
if (initialModel) {
|
|
55
55
|
// Editing mode - pre-populate from initialModel
|
|
56
56
|
const provider = initialModel.provider ?? 'openai-compatible';
|
|
57
|
+
const providers = getAvailableProviders();
|
|
57
58
|
setSelectedProvider(provider);
|
|
58
59
|
setOriginalName(initialModel.name);
|
|
59
60
|
setValues({
|
|
@@ -61,11 +62,14 @@ const CustomModelWizard = forwardRef(function CustomModelWizard({ isVisible, onC
|
|
|
61
62
|
baseURL: initialModel.baseURL ?? '',
|
|
62
63
|
displayName: initialModel.displayName ?? '',
|
|
63
64
|
maxInputTokens: initialModel.maxInputTokens?.toString() ?? '',
|
|
65
|
+
reasoningEffort: initialModel.reasoningEffort ?? '',
|
|
64
66
|
apiKey: initialModel.apiKey ?? '',
|
|
67
|
+
filePath: initialModel.filePath ?? '',
|
|
65
68
|
});
|
|
66
69
|
setCurrentStep(0);
|
|
67
70
|
setCurrentInput(initialModel.name);
|
|
68
|
-
|
|
71
|
+
const idx = providers.indexOf(provider);
|
|
72
|
+
setProviderIndex(idx >= 0 ? idx : 0);
|
|
69
73
|
}
|
|
70
74
|
else {
|
|
71
75
|
// Adding mode - reset everything
|
|
@@ -82,7 +86,7 @@ const CustomModelWizard = forwardRef(function CustomModelWizard({ isVisible, onC
|
|
|
82
86
|
}
|
|
83
87
|
}, [isVisible, initialModel]);
|
|
84
88
|
const handleProviderSelect = useCallback(() => {
|
|
85
|
-
const provider =
|
|
89
|
+
const provider = getProviderByMenuIndex(providerIndex);
|
|
86
90
|
if (provider) {
|
|
87
91
|
setSelectedProvider(provider);
|
|
88
92
|
setCurrentStep(0);
|
|
@@ -8,7 +8,7 @@ import { Box, Text } from 'ink';
|
|
|
8
8
|
import { BaseSelector } from '../base/BaseSelector.js';
|
|
9
9
|
// Log levels matching DextoLogger's supported levels
|
|
10
10
|
const LOG_LEVELS = [
|
|
11
|
-
{ level: 'error', description: 'Errors only', icon: '
|
|
11
|
+
{ level: 'error', description: 'Errors only', icon: '!' },
|
|
12
12
|
{ level: 'warn', description: 'Warnings and above', icon: '⚠️' },
|
|
13
13
|
{ level: 'info', description: 'Info and above (default)', icon: 'ℹ️' },
|
|
14
14
|
{ level: 'debug', description: 'Debug information', icon: '🔍' },
|
|
@@ -11,6 +11,7 @@ type ReasoningEffort = 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';
|
|
|
11
11
|
interface ModelSelectorProps {
|
|
12
12
|
isVisible: boolean;
|
|
13
13
|
onSelectModel: (provider: LLMProvider, model: string, displayName?: string, baseURL?: string, reasoningEffort?: ReasoningEffort) => void;
|
|
14
|
+
onSetDefaultModel: (provider: LLMProvider, model: string, displayName?: string, baseURL?: string, reasoningEffort?: ReasoningEffort) => Promise<void>;
|
|
14
15
|
onClose: () => void;
|
|
15
16
|
onAddCustomModel: () => void;
|
|
16
17
|
onEditCustomModel: (model: CustomModel) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ModelSelectorRefactored.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/ModelSelectorRefactored.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO3D,OAAO,
|
|
1
|
+
{"version":3,"file":"ModelSelectorRefactored.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/ModelSelectorRefactored.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAO3D,OAAO,EAMH,KAAK,WAAW,EACnB,MAAM,yBAAyB,CAAC;AAGjC,KAAK,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhF,UAAU,kBAAkB;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,CACX,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE,eAAe,KAChC,IAAI,CAAC;IACV,iBAAiB,EAAE,CACf,QAAQ,EAAE,WAAW,EACrB,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,EAChB,eAAe,CAAC,EAAE,eAAe,KAChC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,iBAAiB,EAAE,CAAC,KAAK,EAAE,WAAW,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;AAoDD;;GAEG;AACH,QAAA,MAAM,aAAa,oHAq3BjB,CAAC;AAEH,eAAe,aAAa,CAAC"}
|
|
@@ -8,7 +8,8 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
|
|
|
8
8
|
import { useState, useEffect, forwardRef, useRef, useImperativeHandle, useMemo, useCallback, } from 'react';
|
|
9
9
|
import { Box, Text } from 'ink';
|
|
10
10
|
import { listOllamaModels, DEFAULT_OLLAMA_URL, getLocalModelById, isReasoningCapableModel, } from '@dexto/core';
|
|
11
|
-
import { loadCustomModels, deleteCustomModel, getAllInstalledModels, isDextoAuthEnabled, } from '@dexto/agent-management';
|
|
11
|
+
import { loadCustomModels, deleteCustomModel, getAllInstalledModels, loadGlobalPreferences, isDextoAuthEnabled, } from '@dexto/agent-management';
|
|
12
|
+
import { getLLMProviderDisplayName } from '../../utils/llm-provider-display.js';
|
|
12
13
|
function isAddCustomOption(item) {
|
|
13
14
|
return 'type' in item && item.type === 'add-custom';
|
|
14
15
|
}
|
|
@@ -34,7 +35,7 @@ const REASONING_EFFORT_OPTIONS = [
|
|
|
34
35
|
/**
|
|
35
36
|
* Model selector with search and custom model support
|
|
36
37
|
*/
|
|
37
|
-
const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectModel, onClose, onAddCustomModel, onEditCustomModel, agent }, ref) {
|
|
38
|
+
const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectModel, onSetDefaultModel, onClose, onAddCustomModel, onEditCustomModel, agent, }, ref) {
|
|
38
39
|
const [models, setModels] = useState([]);
|
|
39
40
|
const [customModels, setCustomModels] = useState([]);
|
|
40
41
|
const [isLoading, setIsLoading] = useState(false);
|
|
@@ -48,6 +49,8 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
48
49
|
// Reasoning effort sub-step state
|
|
49
50
|
const [pendingReasoningModel, setPendingReasoningModel] = useState(null);
|
|
50
51
|
const [reasoningEffortIndex, setReasoningEffortIndex] = useState(0); // Default to 'Auto' (index 0)
|
|
52
|
+
const [isSettingDefault, setIsSettingDefault] = useState(false); // Track if setting as default vs normal selection
|
|
53
|
+
const [refreshVersion, setRefreshVersion] = useState(0);
|
|
51
54
|
// Keep ref in sync
|
|
52
55
|
selectedIndexRef.current = selectedIndex;
|
|
53
56
|
// Clear delete confirmation timeout on unmount
|
|
@@ -70,6 +73,7 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
70
73
|
setCustomModelAction(null);
|
|
71
74
|
setPendingDeleteConfirm(false);
|
|
72
75
|
setPendingReasoningModel(null);
|
|
76
|
+
setIsSettingDefault(false);
|
|
73
77
|
setReasoningEffortIndex(0); // Default to 'Auto'
|
|
74
78
|
if (deleteTimeoutRef.current) {
|
|
75
79
|
clearTimeout(deleteTimeoutRef.current);
|
|
@@ -77,13 +81,18 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
77
81
|
}
|
|
78
82
|
const fetchModels = async () => {
|
|
79
83
|
try {
|
|
80
|
-
const [allModels, providers, currentConfig, loadedCustomModels] = await Promise.all([
|
|
84
|
+
const [allModels, providers, currentConfig, loadedCustomModels, preferences] = await Promise.all([
|
|
81
85
|
Promise.resolve(agent.getSupportedModels()),
|
|
82
86
|
Promise.resolve(agent.getSupportedProviders()),
|
|
83
87
|
Promise.resolve(agent.getCurrentLLMConfig()),
|
|
84
88
|
loadCustomModels(),
|
|
89
|
+
loadGlobalPreferences().catch(() => null),
|
|
85
90
|
]);
|
|
86
91
|
const modelList = [];
|
|
92
|
+
const defaultProvider = preferences?.llm.provider;
|
|
93
|
+
const defaultModel = preferences?.llm.model;
|
|
94
|
+
const defaultBaseURL = preferences?.llm.baseURL;
|
|
95
|
+
const defaultReasoningEffort = preferences?.llm.reasoningEffort;
|
|
87
96
|
// Fetch dynamic models for local providers
|
|
88
97
|
let ollamaModels = [];
|
|
89
98
|
let localModels = [];
|
|
@@ -109,8 +118,8 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
109
118
|
provider: customProvider,
|
|
110
119
|
name: custom.name,
|
|
111
120
|
displayName: custom.displayName || custom.name,
|
|
112
|
-
maxInputTokens: custom.maxInputTokens
|
|
113
|
-
isDefault:
|
|
121
|
+
maxInputTokens: custom.maxInputTokens ?? 128000,
|
|
122
|
+
isDefault: customProvider === defaultProvider && custom.name === defaultModel,
|
|
114
123
|
isCurrent: currentConfig.provider === customProvider &&
|
|
115
124
|
currentConfig.model === custom.name,
|
|
116
125
|
isCustom: true,
|
|
@@ -118,6 +127,9 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
118
127
|
if (custom.baseURL) {
|
|
119
128
|
modelOption.baseURL = custom.baseURL;
|
|
120
129
|
}
|
|
130
|
+
if (custom.reasoningEffort) {
|
|
131
|
+
modelOption.reasoningEffort = custom.reasoningEffort;
|
|
132
|
+
}
|
|
121
133
|
modelList.push(modelOption);
|
|
122
134
|
}
|
|
123
135
|
// Add registry models
|
|
@@ -134,13 +146,13 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
134
146
|
if (provider === 'ollama' || provider === 'local' || provider === 'vertex') {
|
|
135
147
|
continue;
|
|
136
148
|
}
|
|
137
|
-
// Skip dexto provider when feature is not enabled
|
|
138
|
-
if (provider === 'dexto' && !isDextoAuthEnabled()) {
|
|
149
|
+
// Skip dexto-nova provider when feature is not enabled
|
|
150
|
+
if (provider === 'dexto-nova' && !isDextoAuthEnabled()) {
|
|
139
151
|
continue;
|
|
140
152
|
}
|
|
141
153
|
const providerModels = allModels[provider];
|
|
142
154
|
for (const model of providerModels) {
|
|
143
|
-
// For dexto provider, models have originalProvider field
|
|
155
|
+
// For dexto-nova provider, models have originalProvider field
|
|
144
156
|
// showing which provider the model originally came from
|
|
145
157
|
const originalProvider = 'originalProvider' in model ? model.originalProvider : undefined;
|
|
146
158
|
modelList.push({
|
|
@@ -148,10 +160,20 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
148
160
|
name: model.name,
|
|
149
161
|
displayName: model.displayName,
|
|
150
162
|
maxInputTokens: model.maxInputTokens,
|
|
151
|
-
isDefault: model.
|
|
163
|
+
isDefault: provider === defaultProvider && model.name === defaultModel,
|
|
152
164
|
isCurrent: provider === currentConfig.provider &&
|
|
153
165
|
model.name === currentConfig.model,
|
|
154
166
|
isCustom: false,
|
|
167
|
+
...(defaultReasoningEffort &&
|
|
168
|
+
provider === defaultProvider &&
|
|
169
|
+
model.name === defaultModel
|
|
170
|
+
? { reasoningEffort: defaultReasoningEffort }
|
|
171
|
+
: {}),
|
|
172
|
+
...(defaultBaseURL &&
|
|
173
|
+
provider === defaultProvider &&
|
|
174
|
+
model.name === defaultModel
|
|
175
|
+
? { baseURL: defaultBaseURL }
|
|
176
|
+
: {}),
|
|
155
177
|
// Store original provider for display purposes
|
|
156
178
|
...(originalProvider && { originalProvider }),
|
|
157
179
|
});
|
|
@@ -164,7 +186,7 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
164
186
|
name: ollamaModel.name,
|
|
165
187
|
displayName: ollamaModel.name,
|
|
166
188
|
maxInputTokens: 128000, // Default, actual varies by model
|
|
167
|
-
isDefault:
|
|
189
|
+
isDefault: defaultProvider === 'ollama' && defaultModel === ollamaModel.name,
|
|
168
190
|
isCurrent: currentConfig.provider === 'ollama' &&
|
|
169
191
|
currentConfig.model === ollamaModel.name,
|
|
170
192
|
isCustom: false,
|
|
@@ -181,7 +203,7 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
181
203
|
name: localModel.id,
|
|
182
204
|
displayName,
|
|
183
205
|
maxInputTokens,
|
|
184
|
-
isDefault:
|
|
206
|
+
isDefault: defaultProvider === 'local' && defaultModel === localModel.id,
|
|
185
207
|
isCurrent: currentConfig.provider === 'local' &&
|
|
186
208
|
currentConfig.model === localModel.id,
|
|
187
209
|
isCustom: false,
|
|
@@ -196,10 +218,15 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
196
218
|
name: model.name,
|
|
197
219
|
displayName: model.displayName,
|
|
198
220
|
maxInputTokens: model.maxInputTokens,
|
|
199
|
-
isDefault: model.
|
|
221
|
+
isDefault: defaultProvider === 'vertex' && defaultModel === model.name,
|
|
200
222
|
isCurrent: currentConfig.provider === 'vertex' &&
|
|
201
223
|
currentConfig.model === model.name,
|
|
202
224
|
isCustom: false,
|
|
225
|
+
...(defaultReasoningEffort &&
|
|
226
|
+
defaultProvider === 'vertex' &&
|
|
227
|
+
defaultModel === model.name
|
|
228
|
+
? { reasoningEffort: defaultReasoningEffort }
|
|
229
|
+
: {}),
|
|
203
230
|
});
|
|
204
231
|
}
|
|
205
232
|
}
|
|
@@ -226,7 +253,7 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
226
253
|
return () => {
|
|
227
254
|
cancelled = true;
|
|
228
255
|
};
|
|
229
|
-
}, [isVisible, agent]);
|
|
256
|
+
}, [isVisible, agent, refreshVersion]);
|
|
230
257
|
// Filter models based on search query
|
|
231
258
|
const filteredItems = useMemo(() => {
|
|
232
259
|
const addCustomOption = { type: 'add-custom' };
|
|
@@ -293,6 +320,7 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
293
320
|
if (key.escape) {
|
|
294
321
|
// Go back to model selection
|
|
295
322
|
setPendingReasoningModel(null);
|
|
323
|
+
setIsSettingDefault(false);
|
|
296
324
|
return true;
|
|
297
325
|
}
|
|
298
326
|
if (key.upArrow) {
|
|
@@ -306,8 +334,21 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
306
334
|
if (key.return) {
|
|
307
335
|
const selectedOption = REASONING_EFFORT_OPTIONS[reasoningEffortIndex];
|
|
308
336
|
const reasoningEffort = selectedOption?.value === 'auto' ? undefined : selectedOption?.value;
|
|
309
|
-
|
|
337
|
+
if (isSettingDefault) {
|
|
338
|
+
// Setting as default model
|
|
339
|
+
clearActionState();
|
|
340
|
+
void (async () => {
|
|
341
|
+
await onSetDefaultModel(pendingReasoningModel.provider, pendingReasoningModel.name, pendingReasoningModel.displayName, pendingReasoningModel.baseURL, reasoningEffort);
|
|
342
|
+
setRefreshVersion((prev) => prev + 1);
|
|
343
|
+
onClose(); // Close overlay after setting default
|
|
344
|
+
})();
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
// Normal model selection
|
|
348
|
+
onSelectModel(pendingReasoningModel.provider, pendingReasoningModel.name, pendingReasoningModel.displayName, pendingReasoningModel.baseURL, reasoningEffort);
|
|
349
|
+
}
|
|
310
350
|
setPendingReasoningModel(null);
|
|
351
|
+
setIsSettingDefault(false);
|
|
311
352
|
return true;
|
|
312
353
|
}
|
|
313
354
|
return true; // Consume all input in reasoning effort mode
|
|
@@ -324,26 +365,50 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
324
365
|
}
|
|
325
366
|
const itemsLength = filteredItems.length;
|
|
326
367
|
const currentItem = filteredItems[selectedIndexRef.current];
|
|
327
|
-
const
|
|
328
|
-
|
|
368
|
+
const isCustomActionItem = currentItem && !isAddCustomOption(currentItem) && currentItem.isCustom;
|
|
369
|
+
const isSelectableItem = currentItem && !isAddCustomOption(currentItem);
|
|
370
|
+
const isOnActionItem = isCustomActionItem || isSelectableItem;
|
|
371
|
+
// Right arrow - enter/advance action mode for custom or selectable models
|
|
329
372
|
if (key.rightArrow) {
|
|
330
|
-
if (!
|
|
373
|
+
if (!isOnActionItem)
|
|
331
374
|
return false;
|
|
332
375
|
if (customModelAction === null) {
|
|
333
|
-
|
|
334
|
-
|
|
376
|
+
if (isCustomActionItem) {
|
|
377
|
+
setCustomModelAction('edit');
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
setCustomModelAction('default');
|
|
381
|
+
}
|
|
335
382
|
return true;
|
|
336
383
|
}
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
setCustomModelAction('delete');
|
|
340
|
-
setPendingDeleteConfirm(false);
|
|
384
|
+
if (customModelAction === 'edit') {
|
|
385
|
+
setCustomModelAction('default');
|
|
341
386
|
return true;
|
|
342
387
|
}
|
|
343
|
-
|
|
344
|
-
|
|
388
|
+
if (customModelAction === 'default') {
|
|
389
|
+
if (isCustomActionItem) {
|
|
390
|
+
setCustomModelAction('delete');
|
|
391
|
+
setPendingDeleteConfirm(false);
|
|
392
|
+
return true;
|
|
393
|
+
}
|
|
394
|
+
const actionItem = currentItem;
|
|
395
|
+
// Check if reasoning-capable, show reasoning effort selection
|
|
396
|
+
if (isReasoningCapableModel(actionItem.name)) {
|
|
397
|
+
setPendingReasoningModel(actionItem);
|
|
398
|
+
setIsSettingDefault(true);
|
|
399
|
+
setReasoningEffortIndex(0); // Default to 'Auto'
|
|
400
|
+
return true;
|
|
401
|
+
}
|
|
402
|
+
clearActionState();
|
|
403
|
+
void (async () => {
|
|
404
|
+
await onSetDefaultModel(actionItem.provider, actionItem.name, actionItem.displayName, actionItem.baseURL, actionItem.reasoningEffort);
|
|
405
|
+
setRefreshVersion((prev) => prev + 1);
|
|
406
|
+
onClose(); // Close overlay after setting default
|
|
407
|
+
})();
|
|
408
|
+
return true;
|
|
409
|
+
}
|
|
410
|
+
if (customModelAction === 'delete') {
|
|
345
411
|
if (pendingDeleteConfirm) {
|
|
346
|
-
// Second press - actually delete
|
|
347
412
|
if (deleteTimeoutRef.current) {
|
|
348
413
|
clearTimeout(deleteTimeoutRef.current);
|
|
349
414
|
deleteTimeoutRef.current = null;
|
|
@@ -352,7 +417,6 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
352
417
|
void handleDeleteCustomModel(currentItem);
|
|
353
418
|
}
|
|
354
419
|
else {
|
|
355
|
-
// First press in delete mode - set pending confirmation
|
|
356
420
|
setPendingDeleteConfirm(true);
|
|
357
421
|
if (deleteTimeoutRef.current) {
|
|
358
422
|
clearTimeout(deleteTimeoutRef.current);
|
|
@@ -360,7 +424,7 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
360
424
|
deleteTimeoutRef.current = setTimeout(() => {
|
|
361
425
|
setPendingDeleteConfirm(false);
|
|
362
426
|
deleteTimeoutRef.current = null;
|
|
363
|
-
}, 3000);
|
|
427
|
+
}, 3000);
|
|
364
428
|
}
|
|
365
429
|
return true;
|
|
366
430
|
}
|
|
@@ -368,7 +432,7 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
368
432
|
// Left arrow - go back in action mode
|
|
369
433
|
if (key.leftArrow) {
|
|
370
434
|
if (customModelAction === 'delete') {
|
|
371
|
-
setCustomModelAction('
|
|
435
|
+
setCustomModelAction('default');
|
|
372
436
|
setPendingDeleteConfirm(false);
|
|
373
437
|
if (deleteTimeoutRef.current) {
|
|
374
438
|
clearTimeout(deleteTimeoutRef.current);
|
|
@@ -376,7 +440,16 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
376
440
|
}
|
|
377
441
|
return true;
|
|
378
442
|
}
|
|
379
|
-
|
|
443
|
+
if (customModelAction === 'default') {
|
|
444
|
+
if (isCustomActionItem) {
|
|
445
|
+
setCustomModelAction('edit');
|
|
446
|
+
}
|
|
447
|
+
else {
|
|
448
|
+
setCustomModelAction(null);
|
|
449
|
+
}
|
|
450
|
+
return true;
|
|
451
|
+
}
|
|
452
|
+
if (customModelAction === 'edit') {
|
|
380
453
|
setCustomModelAction(null);
|
|
381
454
|
return true;
|
|
382
455
|
}
|
|
@@ -445,6 +518,22 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
445
518
|
}
|
|
446
519
|
return true;
|
|
447
520
|
}
|
|
521
|
+
if (customModelAction === 'default') {
|
|
522
|
+
// Check if reasoning-capable, show reasoning effort selection
|
|
523
|
+
if (isReasoningCapableModel(item.name)) {
|
|
524
|
+
setPendingReasoningModel(item);
|
|
525
|
+
setIsSettingDefault(true);
|
|
526
|
+
setReasoningEffortIndex(0); // Default to 'Auto'
|
|
527
|
+
return true;
|
|
528
|
+
}
|
|
529
|
+
clearActionState();
|
|
530
|
+
void (async () => {
|
|
531
|
+
await onSetDefaultModel(item.provider, item.name, item.displayName, item.baseURL, item.reasoningEffort);
|
|
532
|
+
setRefreshVersion((prev) => prev + 1);
|
|
533
|
+
onClose(); // Close overlay after setting default
|
|
534
|
+
})();
|
|
535
|
+
return true;
|
|
536
|
+
}
|
|
448
537
|
if (customModelAction === 'delete' && item.isCustom) {
|
|
449
538
|
if (pendingDeleteConfirm) {
|
|
450
539
|
// Already confirmed, delete
|
|
@@ -482,6 +571,7 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
482
571
|
filteredItems,
|
|
483
572
|
onClose,
|
|
484
573
|
onSelectModel,
|
|
574
|
+
onSetDefaultModel,
|
|
485
575
|
onAddCustomModel,
|
|
486
576
|
onEditCustomModel,
|
|
487
577
|
customModelAction,
|
|
@@ -490,6 +580,7 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
490
580
|
handleDeleteCustomModel,
|
|
491
581
|
pendingReasoningModel,
|
|
492
582
|
reasoningEffortIndex,
|
|
583
|
+
isSettingDefault,
|
|
493
584
|
]);
|
|
494
585
|
if (!isVisible)
|
|
495
586
|
return null;
|
|
@@ -498,30 +589,42 @@ const ModelSelector = forwardRef(function ModelSelector({ isVisible, onSelectMod
|
|
|
498
589
|
}
|
|
499
590
|
// Reasoning effort sub-step UI
|
|
500
591
|
if (pendingReasoningModel) {
|
|
501
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { paddingX: 0, paddingY: 0, children:
|
|
592
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsxs(Text, { color: "cyan", bold: true, children: ["Configure Reasoning Effort", isSettingDefault && _jsx(Text, { color: "gray", children: " (Setting as Default)" })] }) }), _jsx(Box, { paddingX: 0, paddingY: 0, children: _jsxs(Text, { color: "gray", children: ["for ", pendingReasoningModel.displayName || pendingReasoningModel.name] }) }), _jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, { color: "gray", children: "\u2191\u2193 navigate, Enter select, Esc back" }) }), _jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, { color: "gray", children: '─'.repeat(50) }) }), REASONING_EFFORT_OPTIONS.map((option, index) => {
|
|
502
593
|
const isSelected = index === reasoningEffortIndex;
|
|
503
594
|
return (_jsxs(Box, { paddingX: 0, paddingY: 0, children: [_jsxs(Text, { color: isSelected ? 'cyan' : 'gray', bold: isSelected, children: [isSelected ? '› ' : ' ', option.label] }), _jsxs(Text, { color: isSelected ? 'white' : 'gray', children: [' ', "- ", option.description] })] }, option.value));
|
|
504
595
|
})] }));
|
|
505
596
|
}
|
|
506
597
|
const visibleItems = filteredItems.slice(scrollOffset, scrollOffset + MAX_VISIBLE_ITEMS);
|
|
507
598
|
const hasCustomModels = customModels.length > 0;
|
|
508
|
-
|
|
599
|
+
const hasActionableItems = filteredItems.some((item) => !isAddCustomOption(item));
|
|
600
|
+
const selectedItem = filteredItems[selectedIndex];
|
|
601
|
+
const isSelectedCustom = selectedItem && !isAddCustomOption(selectedItem) && selectedItem.isCustom;
|
|
602
|
+
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" }), hasActionableItems && _jsx(Text, { color: "gray", children: ", \u2192\u2190 for 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) => {
|
|
509
603
|
const actualIndex = scrollOffset + visibleIndex;
|
|
510
604
|
const isSelected = actualIndex === selectedIndex;
|
|
511
605
|
if (isAddCustomOption(item)) {
|
|
512
606
|
return (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsx(Text, { color: isSelected ? 'green' : 'gray', bold: isSelected, children: "\u2795 Add custom model..." }) }, "add-custom"));
|
|
513
607
|
}
|
|
514
608
|
// Show action buttons for selected custom models
|
|
515
|
-
const showActions = isSelected && item
|
|
516
|
-
//
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
? ' | '
|
|
609
|
+
const showActions = isSelected && !isAddCustomOption(item);
|
|
610
|
+
// Keep the UI label simple: show the actual provider being selected.
|
|
611
|
+
// Gateway routing details are intentionally hidden from the main picker.
|
|
612
|
+
const providerDisplay = getLLMProviderDisplayName(item.provider);
|
|
613
|
+
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: [" (", providerDisplay, ")"] }), _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: [item.isCustom && (_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 === 'default' ? 'cyan' : 'gray', bold: customModelAction === 'default', inverse: customModelAction === 'default', children: [' ', "Set as Default", ' '] }), item.isCustom && (_jsxs(_Fragment, { children: [_jsx(Text, { children: " " }), _jsxs(Text, { color: customModelAction === 'delete' ? 'red' : 'gray', bold: customModelAction === 'delete', inverse: customModelAction === 'delete', children: [' ', "Delete", ' '] })] }))] }))] }, `${item.provider}-${item.name}-${item.isCustom ? 'custom' : 'registry'}`));
|
|
614
|
+
}), filteredItems.length > MAX_VISIBLE_ITEMS && (_jsx(Box, { paddingX: 0, paddingY: 0, children: _jsxs(Text, { color: "gray", wrap: "truncate", children: [scrollOffset > 0 ? '↑ more above' : '', scrollOffset > 0 && scrollOffset + MAX_VISIBLE_ITEMS < filteredItems.length
|
|
615
|
+
? ' • '
|
|
523
616
|
: '', scrollOffset + MAX_VISIBLE_ITEMS < filteredItems.length
|
|
524
617
|
? '↓ more below'
|
|
525
|
-
: ''] }) })), 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
|
|
618
|
+
: ''] }) })), 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'
|
|
619
|
+
? 'deselect'
|
|
620
|
+
: isSelectedCustom
|
|
621
|
+
? 'edit'
|
|
622
|
+
: 'deselect', ' ', "| \u2192", ' ', customModelAction === 'edit'
|
|
623
|
+
? 'default'
|
|
624
|
+
: customModelAction === 'default'
|
|
625
|
+
? isSelectedCustom
|
|
626
|
+
? 'delete'
|
|
627
|
+
: 'confirm'
|
|
628
|
+
: 'confirm', ' ', "| Enter ", customModelAction] }) }))] }));
|
|
526
629
|
});
|
|
527
630
|
export default ModelSelector;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Features:
|
|
5
5
|
* - Search/filter tools by name
|
|
6
6
|
* - View tool details (description, schema)
|
|
7
|
-
* - Shows source (MCP server or
|
|
7
|
+
* - Shows source (MCP server or Local)
|
|
8
8
|
*/
|
|
9
9
|
import React from 'react';
|
|
10
10
|
import type { Key } from '../../hooks/useInputOrchestrator.js';
|
|
@@ -13,6 +13,7 @@ interface ToolBrowserProps {
|
|
|
13
13
|
isVisible: boolean;
|
|
14
14
|
onClose: () => void;
|
|
15
15
|
agent: DextoAgent;
|
|
16
|
+
sessionId: string | null;
|
|
16
17
|
}
|
|
17
18
|
export interface ToolBrowserHandle {
|
|
18
19
|
handleInput: (input: string, key: Key) => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolBrowser.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/ToolBrowser.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;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;AAI9C,UAAU,gBAAgB;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"ToolBrowser.d.ts","sourceRoot":"","sources":["../../../../../src/cli/ink-cli/components/overlays/ToolBrowser.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;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;AAI9C,UAAU,gBAAgB;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAC9B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC;CACrD;AAmBD;;GAEG;AACH,QAAA,MAAM,WAAW,4FAspBf,CAAC;AAyZH,eAAe,WAAW,CAAC"}
|