@vybestack/llxprt-code 0.8.0 → 0.9.0-nightly.260119.0f050754d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/package.json +3 -3
- package/dist/src/auth/BucketFailoverHandlerImpl.spec.js +6 -0
- package/dist/src/auth/BucketFailoverHandlerImpl.spec.js.map +1 -1
- package/dist/src/auth/__tests__/OAuthBucketManager.spec.js +6 -0
- package/dist/src/auth/__tests__/OAuthBucketManager.spec.js.map +1 -1
- package/dist/src/auth/__tests__/oauth-manager.issue913.spec.js +2 -0
- package/dist/src/auth/__tests__/oauth-manager.issue913.spec.js.map +1 -1
- package/dist/src/auth/anthropic-oauth-provider.d.ts +7 -0
- package/dist/src/auth/anthropic-oauth-provider.js +48 -0
- package/dist/src/auth/anthropic-oauth-provider.js.map +1 -1
- package/dist/src/auth/anthropic-oauth-provider.local-flow.spec.js +2 -0
- package/dist/src/auth/anthropic-oauth-provider.local-flow.spec.js.map +1 -1
- package/dist/src/auth/anthropic-oauth-provider.refresh.spec.js +2 -0
- package/dist/src/auth/anthropic-oauth-provider.refresh.spec.js.map +1 -1
- package/dist/src/auth/anthropic-oauth-provider.test.js +2 -0
- package/dist/src/auth/anthropic-oauth-provider.test.js.map +1 -1
- package/dist/src/auth/codex-oauth-provider.spec.js +2 -0
- package/dist/src/auth/codex-oauth-provider.spec.js.map +1 -1
- package/dist/src/auth/oauth-manager.bucketFailover.spec.js +2 -0
- package/dist/src/auth/oauth-manager.bucketFailover.spec.js.map +1 -1
- package/dist/src/auth/oauth-manager.bucketRefresh.spec.js +2 -0
- package/dist/src/auth/oauth-manager.bucketRefresh.spec.js.map +1 -1
- package/dist/src/auth/oauth-manager.concurrency.spec.js +2 -0
- package/dist/src/auth/oauth-manager.concurrency.spec.js.map +1 -1
- package/dist/src/auth/oauth-manager.js +66 -10
- package/dist/src/auth/oauth-manager.js.map +1 -1
- package/dist/src/auth/oauth-manager.logout.spec.js +6 -0
- package/dist/src/auth/oauth-manager.logout.spec.js.map +1 -1
- package/dist/src/auth/oauth-manager.refresh-race.spec.d.ts +11 -0
- package/dist/src/auth/oauth-manager.refresh-race.spec.js +191 -0
- package/dist/src/auth/oauth-manager.refresh-race.spec.js.map +1 -0
- package/dist/src/auth/oauth-manager.spec.js +6 -0
- package/dist/src/auth/oauth-manager.spec.js.map +1 -1
- package/dist/src/auth/qwen-oauth-provider.test.js +2 -0
- package/dist/src/auth/qwen-oauth-provider.test.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +1 -1
- package/dist/src/generated/git-commit.js +1 -1
- package/dist/src/providers/aliases/anthropic.config +9 -0
- package/dist/src/providers/aliases/cerebras-code.config +3 -1
- package/dist/src/providers/aliases/chutes-ai.config +4 -2
- package/dist/src/providers/aliases/codex.config +1 -0
- package/dist/src/providers/aliases/fireworks.config +3 -1
- package/dist/src/providers/aliases/gemini.config +9 -0
- package/dist/src/providers/aliases/kimi.config +1 -0
- package/dist/src/providers/aliases/llama-cpp.config +1 -0
- package/dist/src/providers/aliases/lm-studio.config +1 -0
- package/dist/src/providers/aliases/mistral.config +1 -0
- package/dist/src/providers/aliases/openai-responses.config +9 -0
- package/dist/src/providers/aliases/openai-vercel.config +9 -0
- package/dist/src/providers/aliases/openai.config +9 -0
- package/dist/src/providers/aliases/openrouter.config +3 -1
- package/dist/src/providers/aliases/qwen.config +1 -0
- package/dist/src/providers/aliases/qwenvercel.config +1 -0
- package/dist/src/providers/aliases/synthetic.config +1 -0
- package/dist/src/providers/aliases/xai.config +3 -1
- package/dist/src/providers/providerAliases.builtin-qwen.test.js +3 -1
- package/dist/src/providers/providerAliases.builtin-qwen.test.js.map +1 -1
- package/dist/src/providers/providerAliases.codex.test.js +3 -1
- package/dist/src/providers/providerAliases.codex.test.js.map +1 -1
- package/dist/src/providers/providerAliases.d.ts +2 -0
- package/dist/src/providers/providerAliases.js.map +1 -1
- package/dist/src/providers/providerManagerInstance.js +67 -33
- package/dist/src/providers/providerManagerInstance.js.map +1 -1
- package/dist/src/providers/providerManagerInstance.oauthRegistration.test.js +2 -0
- package/dist/src/providers/providerManagerInstance.oauthRegistration.test.js.map +1 -1
- package/dist/src/runtime/runtimeSettings.d.ts +2 -2
- package/dist/src/runtime/runtimeSettings.js.map +1 -1
- package/dist/src/ui/AppContainer.js +20 -30
- package/dist/src/ui/AppContainer.js.map +1 -1
- package/dist/src/ui/commands/__tests__/diagnosticsCommand.bucket.spec.js +2 -0
- package/dist/src/ui/commands/__tests__/diagnosticsCommand.bucket.spec.js.map +1 -1
- package/dist/src/ui/commands/__tests__/statsCommand.bucket.spec.js +2 -0
- package/dist/src/ui/commands/__tests__/statsCommand.bucket.spec.js.map +1 -1
- package/dist/src/ui/commands/modelCommand.js +95 -26
- package/dist/src/ui/commands/modelCommand.js.map +1 -1
- package/dist/src/ui/commands/providerCommand.test.js +2 -0
- package/dist/src/ui/commands/providerCommand.test.js.map +1 -1
- package/dist/src/ui/commands/types.d.ts +24 -2
- package/dist/src/ui/commands/types.js.map +1 -1
- package/dist/src/ui/components/DialogManager.js +66 -5
- package/dist/src/ui/components/DialogManager.js.map +1 -1
- package/dist/src/ui/components/ModelDialog.d.ts +25 -0
- package/dist/src/ui/components/ModelDialog.js +373 -0
- package/dist/src/ui/components/ModelDialog.js.map +1 -0
- package/dist/src/ui/components/ProfileCreateWizard/ModelSelectStep.js +36 -4
- package/dist/src/ui/components/ProfileCreateWizard/ModelSelectStep.js.map +1 -1
- package/dist/src/ui/contexts/UIActionsContext.d.ts +11 -3
- package/dist/src/ui/contexts/UIActionsContext.js.map +1 -1
- package/dist/src/ui/contexts/UIStateContext.d.ts +16 -3
- package/dist/src/ui/contexts/UIStateContext.js.map +1 -1
- package/dist/src/ui/hooks/index.d.ts +0 -1
- package/dist/src/ui/hooks/index.js +0 -1
- package/dist/src/ui/hooks/index.js.map +1 -1
- package/dist/src/ui/hooks/slashCommandProcessor.d.ts +2 -2
- package/dist/src/ui/hooks/slashCommandProcessor.js +6 -3
- package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -1
- package/dist/src/ui/hooks/useEditorSettings.test.js +0 -1
- package/dist/src/ui/hooks/useEditorSettings.test.js.map +1 -1
- package/dist/src/ui/layouts/DefaultAppLayout.js +1 -1
- package/dist/src/ui/layouts/DefaultAppLayout.js.map +1 -1
- package/dist/src/ui/reducers/appReducer.d.ts +2 -3
- package/dist/src/ui/reducers/appReducer.js +0 -1
- package/dist/src/ui/reducers/appReducer.js.map +1 -1
- package/dist/src/ui/reducers/appReducer.test.js +0 -4
- package/dist/src/ui/reducers/appReducer.test.js.map +1 -1
- package/dist/src/zed-integration/schema.d.ts +18 -18
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/dist/src/ui/components/ProviderModelDialog.d.ts +0 -15
- package/dist/src/ui/components/ProviderModelDialog.js +0 -182
- package/dist/src/ui/components/ProviderModelDialog.js.map +0 -1
- package/dist/src/ui/components/ProviderModelDialog.responsive.test.d.ts +0 -6
- package/dist/src/ui/components/ProviderModelDialog.responsive.test.js +0 -252
- package/dist/src/ui/components/ProviderModelDialog.responsive.test.js.map +0 -1
- package/dist/src/ui/components/ProviderModelDialog.test.d.ts +0 -6
- package/dist/src/ui/components/ProviderModelDialog.test.js +0 -197
- package/dist/src/ui/components/ProviderModelDialog.test.js.map +0 -1
- package/dist/src/ui/hooks/useProviderModelDialog.d.ts +0 -26
- package/dist/src/ui/hooks/useProviderModelDialog.js +0 -61
- package/dist/src/ui/hooks/useProviderModelDialog.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vybestack/llxprt-code",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0-nightly.260119.0f050754d",
|
|
4
4
|
"description": "LLxprt Code",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"dist"
|
|
34
34
|
],
|
|
35
35
|
"config": {
|
|
36
|
-
"sandboxImageUri": "ghcr.io/vybestack/llxprt-code/sandbox:0.
|
|
36
|
+
"sandboxImageUri": "ghcr.io/vybestack/llxprt-code/sandbox:0.9.0-nightly.260119.0f050754d"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@anthropic-ai/sdk": "^0.55.1",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"@iarna/toml": "^2.2.5",
|
|
43
43
|
"@modelcontextprotocol/sdk": "^1.25.2",
|
|
44
44
|
"@types/update-notifier": "^6.0.8",
|
|
45
|
-
"@vybestack/llxprt-code-core": "0.
|
|
45
|
+
"@vybestack/llxprt-code-core": "0.9.0-nightly.260119.0f050754d",
|
|
46
46
|
"ansi-regex": "^6.2.2",
|
|
47
47
|
"chalk": "^5.3.0",
|
|
48
48
|
"cli-spinners": "2.9.2",
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright 2025 Vybestack LLC
|
|
4
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
-
*/
|
|
6
|
-
import React from 'react';
|
|
7
|
-
import { IModel } from '../../providers/index.js';
|
|
8
|
-
interface ProviderModelDialogProps {
|
|
9
|
-
models: IModel[];
|
|
10
|
-
currentModel: string;
|
|
11
|
-
onSelect: (id: string) => void;
|
|
12
|
-
onClose: () => void;
|
|
13
|
-
}
|
|
14
|
-
export declare const ProviderModelDialog: React.FC<ProviderModelDialogProps>;
|
|
15
|
-
export {};
|
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright 2025 Vybestack LLC
|
|
5
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
-
*/
|
|
7
|
-
import React, { useState, useMemo } from 'react';
|
|
8
|
-
import { Box, Text } from 'ink';
|
|
9
|
-
import { SemanticColors } from '../colors.js';
|
|
10
|
-
import { useResponsive } from '../hooks/useResponsive.js';
|
|
11
|
-
import { truncateStart } from '../utils/responsive.js';
|
|
12
|
-
import { useKeypress } from '../hooks/useKeypress.js';
|
|
13
|
-
export const ProviderModelDialog = ({ models, currentModel, onSelect, onClose, }) => {
|
|
14
|
-
const { isNarrow, isWide, width } = useResponsive();
|
|
15
|
-
const [searchTerm, setSearchTerm] = useState('');
|
|
16
|
-
const [isSearching, setIsSearching] = useState(true);
|
|
17
|
-
// Sort models alphabetically by ID
|
|
18
|
-
const sortedModels = useMemo(() => [...models].sort((a, b) => a.id.toLowerCase().localeCompare(b.id.toLowerCase())), [models]);
|
|
19
|
-
// Filter models based on search term
|
|
20
|
-
const filteredModels = useMemo(() => sortedModels.filter((m) => m.id.toLowerCase().includes(searchTerm.toLowerCase())), [sortedModels, searchTerm]);
|
|
21
|
-
const [index, setIndex] = useState(() => Math.max(0, sortedModels.findIndex((m) => m.id === currentModel)));
|
|
22
|
-
// Reset index when search term changes
|
|
23
|
-
React.useEffect(() => {
|
|
24
|
-
const currentIndex = filteredModels.findIndex((m) => m.id === currentModel);
|
|
25
|
-
setIndex(Math.max(0, currentIndex));
|
|
26
|
-
}, [searchTerm, filteredModels, currentModel]);
|
|
27
|
-
// Calculate optimal layout based on available width and content
|
|
28
|
-
const calculateLayout = () => {
|
|
29
|
-
// Calculate minimum column width needed
|
|
30
|
-
const longestModelName = filteredModels.reduce((len, m) => Math.max(len, m.id.length), 0);
|
|
31
|
-
if (isNarrow) {
|
|
32
|
-
return { columns: 1, colWidth: Math.max(longestModelName + 4, 25) };
|
|
33
|
-
}
|
|
34
|
-
// Step 1: Get actual content width - responsive to screen size
|
|
35
|
-
// For narrow screens, use full width; for wider screens, use 80% of width
|
|
36
|
-
const maxDialogWidth = isNarrow ? width : Math.floor(width * 0.8);
|
|
37
|
-
const contentWidth = maxDialogWidth - 4; // 4 for padding/borders
|
|
38
|
-
// Step 2: Calculate column width needed (model name + marker + small buffer)
|
|
39
|
-
const markerWidth = 2; // "● " or "○ "
|
|
40
|
-
const spacingBetweenCols = 4; // Fixed spacing between columns
|
|
41
|
-
const colWidthNeeded = longestModelName + markerWidth + 1; // +1 for a tiny buffer
|
|
42
|
-
// Step 3: Determine optimal column count
|
|
43
|
-
// Try to fit as many columns as possible without truncation
|
|
44
|
-
let optimalColumns = 1;
|
|
45
|
-
for (let cols = 5; cols >= 1; cols--) {
|
|
46
|
-
// Calculate total width needed for this many columns
|
|
47
|
-
const totalWidthNeeded = colWidthNeeded * cols + spacingBetweenCols * (cols - 1);
|
|
48
|
-
if (totalWidthNeeded <= contentWidth) {
|
|
49
|
-
optimalColumns = cols;
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
// If even 1 column doesn't fit, we'll need to truncate
|
|
54
|
-
const columns = optimalColumns;
|
|
55
|
-
// Step 4: Calculate actual column width
|
|
56
|
-
if (columns === 1) {
|
|
57
|
-
// Single column: use all available width
|
|
58
|
-
return { columns: 1, colWidth: contentWidth };
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
// Multiple columns: use exact width needed + spacing
|
|
62
|
-
return { columns, colWidth: colWidthNeeded };
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
const layout = calculateLayout();
|
|
66
|
-
const { columns, colWidth } = layout;
|
|
67
|
-
const rows = Math.ceil(filteredModels.length / columns);
|
|
68
|
-
const maxDialogWidth = isNarrow ? width : Math.floor(width * 0.8);
|
|
69
|
-
const move = (delta) => {
|
|
70
|
-
if (filteredModels.length === 0)
|
|
71
|
-
return;
|
|
72
|
-
let next = index + delta;
|
|
73
|
-
if (next < 0)
|
|
74
|
-
next = 0;
|
|
75
|
-
if (next >= filteredModels.length)
|
|
76
|
-
next = filteredModels.length - 1;
|
|
77
|
-
setIndex(next);
|
|
78
|
-
};
|
|
79
|
-
useKeypress((key) => {
|
|
80
|
-
if (key.name === 'escape') {
|
|
81
|
-
if (isSearching && searchTerm.length > 0) {
|
|
82
|
-
setSearchTerm('');
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
return onClose();
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
if (isSearching) {
|
|
89
|
-
if (key.name === 'return') {
|
|
90
|
-
if (filteredModels.length > 0) {
|
|
91
|
-
setIsSearching(false);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
else if (key.name === 'tab' ||
|
|
95
|
-
(key.name === 'down' && searchTerm.length === 0)) {
|
|
96
|
-
setIsSearching(false);
|
|
97
|
-
}
|
|
98
|
-
else if (key.name === 'backspace' || key.name === 'delete') {
|
|
99
|
-
setSearchTerm((prev) => prev.slice(0, -1));
|
|
100
|
-
}
|
|
101
|
-
else if (key.sequence &&
|
|
102
|
-
typeof key.sequence === 'string' &&
|
|
103
|
-
!key.ctrl &&
|
|
104
|
-
!key.meta &&
|
|
105
|
-
key.insertable !== false) {
|
|
106
|
-
setSearchTerm((prev) => prev + key.sequence);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
if (key.name === 'return' && filteredModels.length > 0) {
|
|
111
|
-
return onSelect(filteredModels[index].id);
|
|
112
|
-
}
|
|
113
|
-
if (key.name === 'tab' || (key.name === 'up' && index === 0)) {
|
|
114
|
-
setIsSearching(true);
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
if (key.name === 'left')
|
|
118
|
-
move(-1);
|
|
119
|
-
if (key.name === 'right')
|
|
120
|
-
move(1);
|
|
121
|
-
if (key.name === 'up')
|
|
122
|
-
move(-columns);
|
|
123
|
-
if (key.name === 'down')
|
|
124
|
-
move(columns);
|
|
125
|
-
}
|
|
126
|
-
}, { isActive: true });
|
|
127
|
-
const renderItem = (m, i, isLastInRow) => {
|
|
128
|
-
const selected = i === index;
|
|
129
|
-
// Calculate display name - truncate from start to preserve model name
|
|
130
|
-
let displayName;
|
|
131
|
-
const maxLength = colWidth - 3; // Account for marker and space
|
|
132
|
-
if (m.id.length > maxLength) {
|
|
133
|
-
// Truncate from start to preserve the important model name at the end
|
|
134
|
-
displayName = truncateStart(m.id, maxLength);
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
displayName = m.id;
|
|
138
|
-
}
|
|
139
|
-
return (_jsx(Box, { width: colWidth, marginRight: isLastInRow ? 0 : 1, children: _jsxs(Text, { color: selected
|
|
140
|
-
? SemanticColors.text.accent
|
|
141
|
-
: isSearching && !isNarrow
|
|
142
|
-
? SemanticColors.text.secondary
|
|
143
|
-
: SemanticColors.text.primary, children: [selected ? '● ' : '○ ', displayName] }) }, m.id));
|
|
144
|
-
};
|
|
145
|
-
// Calculate visible items for scrolling (limit to reasonable amount)
|
|
146
|
-
const maxVisibleRows = Math.min(rows, 10);
|
|
147
|
-
const currentRow = Math.floor(index / columns);
|
|
148
|
-
const scrollOffset = Math.max(0, Math.min(currentRow - Math.floor(maxVisibleRows / 2), rows - maxVisibleRows));
|
|
149
|
-
const startIndex = scrollOffset * columns;
|
|
150
|
-
const endIndex = Math.min(startIndex + maxVisibleRows * columns, filteredModels.length);
|
|
151
|
-
const visibleModels = filteredModels.slice(startIndex, endIndex);
|
|
152
|
-
// Create the model grid with proper row/column layout
|
|
153
|
-
const renderModelGrid = () => {
|
|
154
|
-
const gridRows = [];
|
|
155
|
-
for (let row = 0; row < maxVisibleRows; row++) {
|
|
156
|
-
const rowItems = [];
|
|
157
|
-
for (let col = 0; col < columns; col++) {
|
|
158
|
-
const idx = row * columns + col;
|
|
159
|
-
if (idx < visibleModels.length) {
|
|
160
|
-
const isLastInRow = col === columns - 1;
|
|
161
|
-
rowItems.push(renderItem(visibleModels[idx], startIndex + idx, isLastInRow));
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
if (rowItems.length > 0) {
|
|
165
|
-
gridRows.push(_jsx(Box, { flexDirection: "row", children: rowItems }, row));
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
return _jsx(Box, { flexDirection: "column", children: gridRows });
|
|
169
|
-
};
|
|
170
|
-
const renderContent = () => {
|
|
171
|
-
if (isNarrow) {
|
|
172
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: SemanticColors.text.primary, children: "Select Model" }), _jsxs(Box, { marginY: 1, children: [_jsxs(Text, { color: SemanticColors.text.primary, children: ["search: ", _jsx(Text, { color: SemanticColors.text.accent, children: "\u258C" })] }), _jsx(Text, { color: SemanticColors.text.primary, children: searchTerm })] }), _jsx(Text, { color: SemanticColors.text.secondary, children: "Tab to switch modes, Enter to select, Esc to cancel" }), _jsxs(Text, { color: SemanticColors.text.secondary, children: [filteredModels.length, " models", searchTerm && ` found`] }), filteredModels.length > 0 ? (renderModelGrid()) : (_jsx(Box, { marginY: 1, children: _jsxs(Text, { color: SemanticColors.text.secondary, children: ["No models match \"", searchTerm, "\""] }) }))] }));
|
|
173
|
-
}
|
|
174
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { bold: true, color: SemanticColors.text.primary, children: isSearching
|
|
175
|
-
? 'Search Models'
|
|
176
|
-
: 'Select Model (Tab to switch modes, Enter to select, Esc to cancel)' }), _jsxs(Box, { marginY: 1, children: [_jsxs(Text, { color: isSearching
|
|
177
|
-
? SemanticColors.text.primary
|
|
178
|
-
: SemanticColors.text.secondary, children: ["search:", ' ', isSearching && _jsx(Text, { color: SemanticColors.text.accent, children: "\u258C" })] }), _jsx(Text, { color: SemanticColors.text.primary, children: searchTerm })] }), _jsxs(Text, { color: SemanticColors.text.secondary, children: ["Found ", filteredModels.length, " of ", sortedModels.length, " models"] }), isWide && rows > maxVisibleRows && (_jsxs(Text, { color: SemanticColors.text.secondary, children: ["Showing ", scrollOffset + 1, "-", Math.min(scrollOffset + maxVisibleRows, rows), " of ", rows, " rows"] })), filteredModels.length > 0 ? (renderModelGrid()) : (_jsx(Box, { marginY: 1, children: _jsxs(Text, { color: SemanticColors.text.secondary, children: ["No models match \"", searchTerm, "\""] }) })), filteredModels.length > 0 && !isSearching && (_jsxs(Text, { color: SemanticColors.text.secondary, children: ["Selected: ", filteredModels[index].id] })), _jsx(Text, { color: SemanticColors.text.secondary, children: "Tab to switch modes" })] }));
|
|
179
|
-
};
|
|
180
|
-
return isNarrow ? (_jsx(Box, { flexDirection: "column", padding: 1, children: renderContent() })) : (_jsx(Box, { borderStyle: "round", borderColor: SemanticColors.border.default, flexDirection: "column", padding: 1, width: maxDialogWidth, children: renderContent() }));
|
|
181
|
-
};
|
|
182
|
-
//# sourceMappingURL=ProviderModelDialog.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderModelDialog.js","sourceRoot":"","sources":["../../../../src/ui/components/ProviderModelDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,252 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* @license
|
|
4
|
-
* Copyright 2025 Vybestack LLC
|
|
5
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
6
|
-
*/
|
|
7
|
-
import { render } from 'ink-testing-library';
|
|
8
|
-
import { describe, it, expect, vi, beforeEach, } from 'vitest';
|
|
9
|
-
import { ProviderModelDialog } from './ProviderModelDialog.js';
|
|
10
|
-
import { useTerminalSize } from '../hooks/useTerminalSize.js';
|
|
11
|
-
vi.mock('../hooks/useTerminalSize.js');
|
|
12
|
-
const testModels = [
|
|
13
|
-
{
|
|
14
|
-
id: 'gpt-4',
|
|
15
|
-
name: 'GPT-4',
|
|
16
|
-
provider: 'openai',
|
|
17
|
-
supportedToolFormats: ['openai'],
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
id: 'gpt-3.5-turbo',
|
|
21
|
-
name: 'GPT-3.5 Turbo',
|
|
22
|
-
provider: 'openai',
|
|
23
|
-
supportedToolFormats: ['openai'],
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
id: 'claude-3-opus-20240229',
|
|
27
|
-
name: 'Claude 3 Opus',
|
|
28
|
-
provider: 'anthropic',
|
|
29
|
-
supportedToolFormats: ['anthropic'],
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
id: 'claude-3-sonnet-20240229',
|
|
33
|
-
name: 'Claude 3 Sonnet',
|
|
34
|
-
provider: 'anthropic',
|
|
35
|
-
supportedToolFormats: ['anthropic'],
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
id: 'gemini-pro-very-long-model-name-that-should-be-truncated',
|
|
39
|
-
name: 'Gemini Pro Long',
|
|
40
|
-
provider: 'google',
|
|
41
|
-
supportedToolFormats: ['google'],
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
id: 'text-embedding-ada-002',
|
|
45
|
-
name: 'Ada Embedding',
|
|
46
|
-
provider: 'openai',
|
|
47
|
-
supportedToolFormats: ['openai'],
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
id: 'another-very-long-model-identifier-for-testing-truncation',
|
|
51
|
-
name: 'Long Model',
|
|
52
|
-
provider: 'test',
|
|
53
|
-
supportedToolFormats: ['test'],
|
|
54
|
-
},
|
|
55
|
-
];
|
|
56
|
-
describe('ProviderModelDialog Responsive Behavior', () => {
|
|
57
|
-
let mockUseTerminalSize;
|
|
58
|
-
const mockOnSelect = vi.fn();
|
|
59
|
-
const mockOnClose = vi.fn();
|
|
60
|
-
beforeEach(() => {
|
|
61
|
-
vi.clearAllMocks();
|
|
62
|
-
mockUseTerminalSize = useTerminalSize;
|
|
63
|
-
});
|
|
64
|
-
describe('NARROW width behavior (< 80 cols)', () => {
|
|
65
|
-
beforeEach(() => {
|
|
66
|
-
mockUseTerminalSize.mockReturnValue({ columns: 60, rows: 20 });
|
|
67
|
-
});
|
|
68
|
-
it('should prioritize search-first approach with help text below search', () => {
|
|
69
|
-
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
|
|
70
|
-
const output = lastFrame();
|
|
71
|
-
// Should prominently show search functionality
|
|
72
|
-
expect(output).toMatch(/search:/i);
|
|
73
|
-
expect(output).toContain('▌'); // Active search cursor
|
|
74
|
-
// Should show help text below search
|
|
75
|
-
expect(output).toMatch(/tab.*switch modes/i);
|
|
76
|
-
expect(output).toMatch(/enter.*select/i);
|
|
77
|
-
expect(output).toMatch(/esc.*cancel/i);
|
|
78
|
-
// Should have minimal borders to save space
|
|
79
|
-
expect(output).not.toMatch(/┌─+┐/); // No fancy borders or simpler borders
|
|
80
|
-
// Should show model IDs (may not be truncated at narrow width anymore)
|
|
81
|
-
expect(output).toContain('gemini-pro'); // Should show at least part of the model name
|
|
82
|
-
// Should show model results but prioritize search
|
|
83
|
-
expect(output).toContain('gpt-4');
|
|
84
|
-
expect(output).toContain('claude-3-opus');
|
|
85
|
-
});
|
|
86
|
-
it('should focus search over grid layout for narrow width', () => {
|
|
87
|
-
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-3.5-turbo", onSelect: mockOnSelect, onClose: mockOnClose }));
|
|
88
|
-
const output = lastFrame();
|
|
89
|
-
// Should not show complex multi-column layout
|
|
90
|
-
expect(output).not.toMatch(/├|┤|│.*│.*│/); // No multi-column separators
|
|
91
|
-
// Search should be the primary focus
|
|
92
|
-
expect(output).toMatch(/search:.*▌/);
|
|
93
|
-
// Should show models in simple list format (note: gpt-3.5-turbo is selected, hence ●)
|
|
94
|
-
expect(output).toMatch(/○ gpt-4/);
|
|
95
|
-
expect(output).toMatch(/● gpt-3.5-turbo/);
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
describe('STANDARD width behavior (80-120 cols)', () => {
|
|
99
|
-
beforeEach(() => {
|
|
100
|
-
mockUseTerminalSize.mockReturnValue({ columns: 100, rows: 20 });
|
|
101
|
-
});
|
|
102
|
-
it('should show condensed layout with abbreviated model descriptions', () => {
|
|
103
|
-
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "claude-3-opus-20240229", onSelect: mockOnSelect, onClose: mockOnClose }));
|
|
104
|
-
const output = lastFrame();
|
|
105
|
-
// Should have proper borders
|
|
106
|
-
expect(output).toMatch(/┌─+┐|╭─+╮/);
|
|
107
|
-
// Should show search but not as prominently
|
|
108
|
-
expect(output).toMatch(/search:/i);
|
|
109
|
-
// Should show model names (may not truncate anymore)
|
|
110
|
-
expect(output).toContain('gemini-pro'); // Should show model names
|
|
111
|
-
// Should show model grid in condensed form
|
|
112
|
-
expect(output).toContain('gpt-4');
|
|
113
|
-
expect(output).toContain('● claude-3-opus-20240229'); // Selected model
|
|
114
|
-
// Should show model count information
|
|
115
|
-
expect(output).toMatch(/found \d+ of \d+ models/i);
|
|
116
|
-
// Should have scrolling indicators if needed
|
|
117
|
-
expect(output).toMatch(/tab.*switch modes/i);
|
|
118
|
-
});
|
|
119
|
-
it('should balance search functionality with grid layout', () => {
|
|
120
|
-
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
|
|
121
|
-
const output = lastFrame();
|
|
122
|
-
// Should show both search and grid effectively
|
|
123
|
-
expect(output).toMatch(/search:.*▌/);
|
|
124
|
-
// Should have multi-column layout but condensed
|
|
125
|
-
const lines = output.split('\n');
|
|
126
|
-
const modelLines = lines.filter((line) => line.includes('○') || line.includes('●'));
|
|
127
|
-
expect(modelLines.length).toBeGreaterThan(2); // Multiple rows
|
|
128
|
-
// Should show current selection info
|
|
129
|
-
expect(output).toMatch(/● gpt-4/);
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
describe('WIDE width behavior (> 120 cols)', () => {
|
|
133
|
-
beforeEach(() => {
|
|
134
|
-
mockUseTerminalSize.mockReturnValue({ columns: 180, rows: 20 });
|
|
135
|
-
});
|
|
136
|
-
it('should show full layout with all model details visible', () => {
|
|
137
|
-
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "text-embedding-ada-002", onSelect: mockOnSelect, onClose: mockOnClose }));
|
|
138
|
-
const output = lastFrame();
|
|
139
|
-
// Should show full model names without truncation
|
|
140
|
-
expect(output).toContain('gemini-pro-very-long-model-name-that-should-be-truncated');
|
|
141
|
-
expect(output).toContain('another-very-long-model-identifier-for-testing-truncation');
|
|
142
|
-
// Should have full decorative borders
|
|
143
|
-
expect(output).toMatch(/┌─+┐|╭─+╮/);
|
|
144
|
-
// Should show comprehensive search interface
|
|
145
|
-
expect(output).toMatch(/search:.*▌/);
|
|
146
|
-
// Should show complete instructions (simplified check)
|
|
147
|
-
expect(output).toMatch(/tab.*switch modes/i);
|
|
148
|
-
expect(output).toMatch(/search models/i);
|
|
149
|
-
// Should show the selected model with ● marker
|
|
150
|
-
expect(output).toMatch(/● text-embedding-ada-002/);
|
|
151
|
-
// Should show model count information
|
|
152
|
-
expect(output).toMatch(/found \d+ of \d+ models/i);
|
|
153
|
-
});
|
|
154
|
-
it('should utilize full width for optimal model grid layout', () => {
|
|
155
|
-
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "claude-3-sonnet-20240229", onSelect: mockOnSelect, onClose: mockOnClose }));
|
|
156
|
-
const output = lastFrame();
|
|
157
|
-
// Should efficiently use wide layout for multiple columns
|
|
158
|
-
expect(output).toContain('● claude-3-sonnet-20240229');
|
|
159
|
-
// Should show all models with full names
|
|
160
|
-
expect(output).toContain('gpt-4');
|
|
161
|
-
expect(output).toContain('gpt-3.5-turbo');
|
|
162
|
-
expect(output).toContain('claude-3-opus-20240229');
|
|
163
|
-
// Should pack efficiently - fewer rows due to more columns
|
|
164
|
-
const lines = output.split('\n');
|
|
165
|
-
const contentLines = lines.filter((line) => line.includes('○') || line.includes('●'));
|
|
166
|
-
expect(contentLines.length).toBeLessThanOrEqual(4); // Efficient packing
|
|
167
|
-
});
|
|
168
|
-
it('should create proper fixed-width columns with consistent spacing', () => {
|
|
169
|
-
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
|
|
170
|
-
const output = lastFrame();
|
|
171
|
-
// Parse model grid lines to check column layout
|
|
172
|
-
const lines = output.split('\n');
|
|
173
|
-
const modelLines = lines.filter((line) => line.includes('○') || line.includes('●'));
|
|
174
|
-
// Each model line should have consistent column widths
|
|
175
|
-
// Models should be spaced with proper fixed-width columns, not just single spaces
|
|
176
|
-
expect(modelLines.length).toBeGreaterThan(0);
|
|
177
|
-
const firstLine = modelLines[0];
|
|
178
|
-
// Should NOT have models separated by only single spaces (the zigzag issue)
|
|
179
|
-
// Instead should have proper column alignment
|
|
180
|
-
const modelMatches = firstLine.match(/[○●]\s+[^\s]+/g);
|
|
181
|
-
// Verify proper column spacing if multiple models on same line
|
|
182
|
-
const hasProperSpacing = !modelMatches ||
|
|
183
|
-
modelMatches.length <= 1 ||
|
|
184
|
-
(() => {
|
|
185
|
-
const model1End = firstLine.indexOf(modelMatches[0]) + modelMatches[0].length;
|
|
186
|
-
const model2Start = firstLine.indexOf(modelMatches[1]);
|
|
187
|
-
return model2Start - model1End >= 2;
|
|
188
|
-
})();
|
|
189
|
-
expect(hasProperSpacing).toBe(true); // Fixed-width columns should have adequate spacing
|
|
190
|
-
});
|
|
191
|
-
});
|
|
192
|
-
describe('Search functionality across breakpoints', () => {
|
|
193
|
-
it('should maintain search functionality at all breakpoints', () => {
|
|
194
|
-
const widths = [60, 100, 180];
|
|
195
|
-
widths.forEach((width) => {
|
|
196
|
-
mockUseTerminalSize.mockReturnValue({ columns: width, rows: 20 });
|
|
197
|
-
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
|
|
198
|
-
const output = lastFrame();
|
|
199
|
-
// Search should be available at all breakpoints
|
|
200
|
-
expect(output).toMatch(/search:/i);
|
|
201
|
-
expect(output).toContain('▌'); // Search cursor
|
|
202
|
-
// Models should be visible
|
|
203
|
-
expect(output).toContain('gpt-4');
|
|
204
|
-
});
|
|
205
|
-
});
|
|
206
|
-
it('should show search results count at standard and wide breakpoints', () => {
|
|
207
|
-
// Standard width
|
|
208
|
-
mockUseTerminalSize.mockReturnValue({ columns: 100, rows: 20 });
|
|
209
|
-
let { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
|
|
210
|
-
expect(lastFrame()).toMatch(/found \d+ of \d+ models/i);
|
|
211
|
-
// Wide width
|
|
212
|
-
mockUseTerminalSize.mockReturnValue({ columns: 180, rows: 20 });
|
|
213
|
-
({ lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose })));
|
|
214
|
-
expect(lastFrame()).toMatch(/found \d+ of \d+ models/i);
|
|
215
|
-
});
|
|
216
|
-
});
|
|
217
|
-
describe('Responsive breakpoint transitions', () => {
|
|
218
|
-
it('should handle transitions between breakpoints correctly', () => {
|
|
219
|
-
// Test at NARROW/STANDARD boundary (80 cols)
|
|
220
|
-
mockUseTerminalSize.mockReturnValue({ columns: 80, rows: 20 });
|
|
221
|
-
const { lastFrame: standardFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
|
|
222
|
-
const standardOutput = standardFrame();
|
|
223
|
-
// At 80 columns, should be STANDARD behavior
|
|
224
|
-
expect(standardOutput).toMatch(/┌─+┐|╭─+╮/); // Should have borders
|
|
225
|
-
expect(standardOutput).toMatch(/found.*models/i); // Should show model count
|
|
226
|
-
// Test at STANDARD/WIDE boundary (120 cols)
|
|
227
|
-
mockUseTerminalSize.mockReturnValue({ columns: 120, rows: 20 });
|
|
228
|
-
const { lastFrame: wideFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "gpt-4", onSelect: mockOnSelect, onClose: mockOnClose }));
|
|
229
|
-
const wideOutput = wideFrame();
|
|
230
|
-
// At 120 columns, should be STANDARD (not WIDE yet)
|
|
231
|
-
expect(wideOutput).toContain('gemini-pro'); // Should show model name
|
|
232
|
-
});
|
|
233
|
-
});
|
|
234
|
-
describe('Semantic color preservation', () => {
|
|
235
|
-
it('should maintain semantic colors across all breakpoints', () => {
|
|
236
|
-
const widths = [60, 100, 180];
|
|
237
|
-
widths.forEach((width) => {
|
|
238
|
-
mockUseTerminalSize.mockReturnValue({ columns: width, rows: 20 });
|
|
239
|
-
const { lastFrame } = render(_jsx(ProviderModelDialog, { models: testModels, currentModel: "claude-3-opus-20240229", onSelect: mockOnSelect, onClose: mockOnClose }));
|
|
240
|
-
const output = lastFrame();
|
|
241
|
-
// Should show selected model with accent color (●)
|
|
242
|
-
// Note: Model names might be truncated at narrow width
|
|
243
|
-
expect(output).toMatch(/● claude-3-opus/);
|
|
244
|
-
// Should show unselected models with appropriate colors (○)
|
|
245
|
-
expect(output).toMatch(/○ gpt-4/);
|
|
246
|
-
// Search cursor should use accent color
|
|
247
|
-
expect(output).toContain('▌');
|
|
248
|
-
});
|
|
249
|
-
});
|
|
250
|
-
});
|
|
251
|
-
});
|
|
252
|
-
//# sourceMappingURL=ProviderModelDialog.responsive.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ProviderModelDialog.responsive.test.js","sourceRoot":"","sources":["../../../../src/ui/components/ProviderModelDialog.responsive.test.tsx"],"names":[],"mappings":"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"}
|