@nanocollective/nanocoder 1.17.2 → 1.18.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 -5
- package/assets/nanocoder-vscode.vsix +0 -0
- package/dist/ai-sdk-client-empty-message.spec.d.ts +2 -0
- package/dist/ai-sdk-client-empty-message.spec.d.ts.map +1 -0
- package/dist/ai-sdk-client-empty-message.spec.js +124 -0
- package/dist/ai-sdk-client-empty-message.spec.js.map +1 -0
- package/dist/ai-sdk-client-error-handling.spec.d.ts +2 -0
- package/dist/ai-sdk-client-error-handling.spec.d.ts.map +1 -0
- package/dist/ai-sdk-client-error-handling.spec.js +108 -0
- package/dist/ai-sdk-client-error-handling.spec.js.map +1 -0
- package/dist/ai-sdk-client-maxretries.spec.d.ts +2 -0
- package/dist/ai-sdk-client-maxretries.spec.d.ts.map +1 -0
- package/dist/ai-sdk-client-maxretries.spec.js +96 -0
- package/dist/ai-sdk-client-maxretries.spec.js.map +1 -0
- package/dist/ai-sdk-client.d.ts +25 -2
- package/dist/ai-sdk-client.d.ts.map +1 -1
- package/dist/ai-sdk-client.js +187 -124
- package/dist/ai-sdk-client.js.map +1 -1
- package/dist/app/utils/appUtils.js +3 -3
- package/dist/app/utils/appUtils.js.map +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +22 -11
- package/dist/app.js.map +1 -1
- package/dist/commands/debugging.d.ts +3 -0
- package/dist/commands/debugging.d.ts.map +1 -0
- package/dist/commands/debugging.js +23 -0
- package/dist/commands/debugging.js.map +1 -0
- package/dist/commands/index.d.ts +3 -2
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +3 -2
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/lsp.d.ts +15 -0
- package/dist/commands/lsp.d.ts.map +1 -0
- package/dist/commands/lsp.js +45 -0
- package/dist/commands/lsp.js.map +1 -0
- package/dist/commands/model-database.d.ts +8 -0
- package/dist/commands/model-database.d.ts.map +1 -0
- package/dist/commands/model-database.js +193 -0
- package/dist/commands/model-database.js.map +1 -0
- package/dist/commands/usage.d.ts.map +1 -1
- package/dist/commands/usage.js +1 -1
- package/dist/commands/usage.js.map +1 -1
- package/dist/components/assistant-message.d.ts.map +1 -1
- package/dist/components/assistant-message.js +3 -2
- package/dist/components/assistant-message.js.map +1 -1
- package/dist/components/status.d.ts +3 -0
- package/dist/components/status.d.ts.map +1 -1
- package/dist/components/status.js +24 -3
- package/dist/components/status.js.map +1 -1
- package/dist/components/user-input.d.ts.map +1 -1
- package/dist/components/user-input.js +2 -1
- package/dist/components/user-input.js.map +1 -1
- package/dist/config/preferences.d.ts +2 -2
- package/dist/config/preferences.js +5 -5
- package/dist/config/preferences.js.map +1 -1
- package/dist/context/mode-context.d.ts +12 -0
- package/dist/context/mode-context.d.ts.map +1 -0
- package/dist/context/mode-context.js +21 -0
- package/dist/context/mode-context.js.map +1 -0
- package/dist/context/mode-context.spec.d.ts +2 -0
- package/dist/context/mode-context.spec.d.ts.map +1 -0
- package/dist/context/mode-context.spec.js +61 -0
- package/dist/context/mode-context.spec.js.map +1 -0
- package/dist/hooks/useAppInitialization.d.ts +4 -2
- package/dist/hooks/useAppInitialization.d.ts.map +1 -1
- package/dist/hooks/useAppInitialization.js +102 -26
- package/dist/hooks/useAppInitialization.js.map +1 -1
- package/dist/hooks/useAppState.d.ts +7 -5
- package/dist/hooks/useAppState.d.ts.map +1 -1
- package/dist/hooks/useAppState.js +11 -7
- package/dist/hooks/useAppState.js.map +1 -1
- package/dist/hooks/useChatHandler.d.ts +2 -2
- package/dist/hooks/useChatHandler.d.ts.map +1 -1
- package/dist/hooks/useChatHandler.js +186 -111
- package/dist/hooks/useChatHandler.js.map +1 -1
- package/dist/hooks/useModeHandlers.d.ts +4 -4
- package/dist/hooks/useModeHandlers.d.ts.map +1 -1
- package/dist/hooks/useModeHandlers.js +9 -9
- package/dist/hooks/useModeHandlers.js.map +1 -1
- package/dist/mcp/mcp-client.d.ts.map +1 -1
- package/dist/mcp/mcp-client.js +16 -6
- package/dist/mcp/mcp-client.js.map +1 -1
- package/dist/message-handler.js +1 -1
- package/dist/message-handler.js.map +1 -1
- package/dist/model-database/database-engine.d.ts +25 -0
- package/dist/model-database/database-engine.d.ts.map +1 -0
- package/dist/model-database/database-engine.js +37 -0
- package/dist/model-database/database-engine.js.map +1 -0
- package/dist/model-database/database-engine.spec.d.ts +2 -0
- package/dist/model-database/database-engine.spec.d.ts.map +1 -0
- package/dist/model-database/database-engine.spec.js +413 -0
- package/dist/model-database/database-engine.spec.js.map +1 -0
- package/dist/model-database/model-database.d.ts +30 -0
- package/dist/model-database/model-database.d.ts.map +1 -0
- package/dist/model-database/model-database.js +82 -0
- package/dist/model-database/model-database.js.map +1 -0
- package/dist/model-database/model-database.spec.d.ts +2 -0
- package/dist/model-database/model-database.spec.d.ts.map +1 -0
- package/dist/model-database/model-database.spec.js +322 -0
- package/dist/model-database/model-database.spec.js.map +1 -0
- package/dist/model-database/model-engine.d.ts +25 -0
- package/dist/model-database/model-engine.d.ts.map +1 -0
- package/dist/model-database/model-engine.js +49 -0
- package/dist/model-database/model-engine.js.map +1 -0
- package/dist/model-database/model-engine.spec.d.ts +2 -0
- package/dist/model-database/model-engine.spec.d.ts.map +1 -0
- package/dist/model-database/model-engine.spec.js +381 -0
- package/dist/model-database/model-engine.spec.js.map +1 -0
- package/dist/model-database/model-fetcher.d.ts +14 -0
- package/dist/model-database/model-fetcher.d.ts.map +1 -0
- package/dist/model-database/model-fetcher.js +248 -0
- package/dist/model-database/model-fetcher.js.map +1 -0
- package/dist/model-database/model-fetcher.spec.d.ts +2 -0
- package/dist/model-database/model-fetcher.spec.d.ts.map +1 -0
- package/dist/model-database/model-fetcher.spec.js +498 -0
- package/dist/model-database/model-fetcher.spec.js.map +1 -0
- package/dist/models/models-dev-client.d.ts.map +1 -1
- package/dist/models/models-dev-client.js +8 -0
- package/dist/models/models-dev-client.js.map +1 -1
- package/dist/tool-calling/json-parser.d.ts.map +1 -1
- package/dist/tool-calling/json-parser.js +10 -4
- package/dist/tool-calling/json-parser.js.map +1 -1
- package/dist/tool-calling/tool-parser.d.ts.map +1 -1
- package/dist/tool-calling/tool-parser.js +37 -9
- package/dist/tool-calling/tool-parser.js.map +1 -1
- package/dist/tool-calling/tool-parser.spec.js +79 -1
- package/dist/tool-calling/tool-parser.spec.js.map +1 -1
- package/dist/tool-calling/xml-parser.d.ts.map +1 -1
- package/dist/tool-calling/xml-parser.js +21 -23
- package/dist/tool-calling/xml-parser.js.map +1 -1
- package/dist/tool-calling/xml-parser.spec.js +23 -3
- package/dist/tool-calling/xml-parser.spec.js.map +1 -1
- package/dist/tools/create-file.d.ts +24 -2
- package/dist/tools/create-file.d.ts.map +1 -1
- package/dist/tools/create-file.js +14 -10
- package/dist/tools/create-file.js.map +1 -1
- package/dist/tools/delete-lines.d.ts +18 -2
- package/dist/tools/delete-lines.d.ts.map +1 -1
- package/dist/tools/delete-lines.js +14 -9
- package/dist/tools/delete-lines.js.map +1 -1
- package/dist/tools/execute-bash.d.ts +2 -2
- package/dist/tools/execute-bash.d.ts.map +1 -1
- package/dist/tools/execute-bash.js +10 -9
- package/dist/tools/execute-bash.js.map +1 -1
- package/dist/tools/execute-function.spec.d.ts +2 -0
- package/dist/tools/execute-function.spec.d.ts.map +1 -0
- package/dist/tools/execute-function.spec.js +141 -0
- package/dist/tools/execute-function.spec.js.map +1 -0
- package/dist/tools/fetch-url.d.ts +16 -2
- package/dist/tools/fetch-url.d.ts.map +1 -1
- package/dist/tools/fetch-url.js +10 -10
- package/dist/tools/fetch-url.js.map +1 -1
- package/dist/tools/find-files.d.ts +18 -2
- package/dist/tools/find-files.d.ts.map +1 -1
- package/dist/tools/find-files.js +7 -5
- package/dist/tools/find-files.js.map +1 -1
- package/dist/tools/index.d.ts +2 -3
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +30 -20
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/insert-lines.d.ts +18 -2
- package/dist/tools/insert-lines.d.ts.map +1 -1
- package/dist/tools/insert-lines.js +14 -9
- package/dist/tools/insert-lines.js.map +1 -1
- package/dist/tools/lsp-get-diagnostics.d.ts +10 -2
- package/dist/tools/lsp-get-diagnostics.d.ts.map +1 -1
- package/dist/tools/lsp-get-diagnostics.js +8 -6
- package/dist/tools/lsp-get-diagnostics.js.map +1 -1
- package/dist/tools/needs-approval.spec.d.ts +2 -0
- package/dist/tools/needs-approval.spec.d.ts.map +1 -0
- package/dist/tools/needs-approval.spec.js +308 -0
- package/dist/tools/needs-approval.spec.js.map +1 -0
- package/dist/tools/read-file.d.ts +2 -2
- package/dist/tools/read-file.d.ts.map +1 -1
- package/dist/tools/read-file.js +10 -12
- package/dist/tools/read-file.js.map +1 -1
- package/dist/tools/replace-lines.d.ts +19 -2
- package/dist/tools/replace-lines.d.ts.map +1 -1
- package/dist/tools/replace-lines.js +14 -9
- package/dist/tools/replace-lines.js.map +1 -1
- package/dist/tools/search-file-contents.d.ts +20 -2
- package/dist/tools/search-file-contents.d.ts.map +1 -1
- package/dist/tools/search-file-contents.js +11 -8
- package/dist/tools/search-file-contents.js.map +1 -1
- package/dist/tools/web-search.d.ts +2 -2
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +10 -10
- package/dist/tools/web-search.js.map +1 -1
- package/dist/types/app.d.ts +1 -1
- package/dist/types/app.d.ts.map +1 -1
- package/dist/types/config.d.ts +4 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/core-connection-status.spec.d.ts +2 -0
- package/dist/types/core-connection-status.spec.d.ts.map +1 -0
- package/dist/types/core-connection-status.spec.js +52 -0
- package/dist/types/core-connection-status.spec.js.map +1 -0
- package/dist/types/core.d.ts +33 -28
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/core.js.map +1 -1
- package/dist/types/system.d.ts +5 -30
- package/dist/types/system.d.ts.map +1 -1
- package/dist/utils/prompt-processor.d.ts +2 -3
- package/dist/utils/prompt-processor.d.ts.map +1 -1
- package/dist/utils/prompt-processor.js +2 -50
- package/dist/utils/prompt-processor.js.map +1 -1
- package/dist/wizard/templates/provider-templates.d.ts.map +1 -1
- package/dist/wizard/templates/provider-templates.js +34 -2
- package/dist/wizard/templates/provider-templates.js.map +1 -1
- package/package.json +6 -5
- package/source/app/prompts/main-prompt.md +29 -96
- package/dist/commands/recommendations.d.ts +0 -8
- package/dist/commands/recommendations.d.ts.map +0 -1
- package/dist/commands/recommendations.js +0 -311
- package/dist/commands/recommendations.js.map +0 -1
- package/dist/commands/streaming.d.ts +0 -3
- package/dist/commands/streaming.d.ts.map +0 -1
- package/dist/commands/streaming.js +0 -23
- package/dist/commands/streaming.js.map +0 -1
- package/dist/components/thinking-indicator.d.ts +0 -3
- package/dist/components/thinking-indicator.d.ts.map +0 -1
- package/dist/components/thinking-indicator.js +0 -69
- package/dist/components/thinking-indicator.js.map +0 -1
- package/dist/recommendations/model-database.d.ts +0 -8
- package/dist/recommendations/model-database.d.ts.map +0 -1
- package/dist/recommendations/model-database.js +0 -514
- package/dist/recommendations/model-database.js.map +0 -1
- package/dist/recommendations/model-engine.d.ts +0 -16
- package/dist/recommendations/model-engine.d.ts.map +0 -1
- package/dist/recommendations/model-engine.js +0 -185
- package/dist/recommendations/model-engine.js.map +0 -1
- package/dist/recommendations/recommendation-engine.d.ts +0 -39
- package/dist/recommendations/recommendation-engine.d.ts.map +0 -1
- package/dist/recommendations/recommendation-engine.js +0 -144
- package/dist/recommendations/recommendation-engine.js.map +0 -1
- package/dist/system/detector.d.ts +0 -18
- package/dist/system/detector.d.ts.map +0 -1
- package/dist/system/detector.js +0 -140
- package/dist/system/detector.js.map +0 -1
|
@@ -1,311 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import React, { useState, useEffect } from 'react';
|
|
3
|
-
import { Box, Text, useInput, useFocus } from 'ink';
|
|
4
|
-
import { TitledBox, titleStyles } from '@mishieck/ink-titled-box';
|
|
5
|
-
import { Tabs, Tab } from 'ink-tab';
|
|
6
|
-
import { useTerminalWidth } from '../hooks/useTerminalWidth.js';
|
|
7
|
-
import { useTheme } from '../hooks/useTheme.js';
|
|
8
|
-
import { systemDetector } from '../system/detector.js';
|
|
9
|
-
import { recommendationEngine, } from '../recommendations/recommendation-engine.js';
|
|
10
|
-
function RecommendationsDisplay({ onCancel }) {
|
|
11
|
-
const boxWidth = useTerminalWidth();
|
|
12
|
-
const { colors } = useTheme();
|
|
13
|
-
const [systemCaps, setSystemCaps] = useState(null);
|
|
14
|
-
const [models, setModels] = useState([]);
|
|
15
|
-
const [topLocalModel, setTopLocalModel] = useState(null);
|
|
16
|
-
const [topApiModel, setTopApiModel] = useState(null);
|
|
17
|
-
const [loading, setLoading] = useState(true);
|
|
18
|
-
const [error, setError] = useState(null);
|
|
19
|
-
const [currentModelIndex, setCurrentModelIndex] = useState(0);
|
|
20
|
-
const [activeTab, setActiveTab] = useState('local');
|
|
21
|
-
const [searchQuery, setSearchQuery] = useState('');
|
|
22
|
-
const [searchMode, setSearchMode] = useState(false);
|
|
23
|
-
const [closed, setClosed] = useState(false);
|
|
24
|
-
// Capture focus to prevent user input from being active
|
|
25
|
-
useFocus({ autoFocus: true, id: 'recommendations-display' });
|
|
26
|
-
// Get current tab's models with search filtering
|
|
27
|
-
const filterBySearch = (modelList) => {
|
|
28
|
-
if (!searchMode || !searchQuery)
|
|
29
|
-
return modelList;
|
|
30
|
-
return modelList.filter(m => m.model.name.toLowerCase().includes(searchQuery.toLowerCase()));
|
|
31
|
-
};
|
|
32
|
-
// In search mode, combine all models
|
|
33
|
-
const allModelsForSearch = searchMode ? models : [];
|
|
34
|
-
const localModels = searchMode ? [] : models.filter(m => m.model.local);
|
|
35
|
-
const apiModels = searchMode ? [] : models.filter(m => m.model.api);
|
|
36
|
-
const currentTabModels = searchMode
|
|
37
|
-
? filterBySearch(allModelsForSearch)
|
|
38
|
-
: activeTab === 'local'
|
|
39
|
-
? localModels
|
|
40
|
-
: apiModels;
|
|
41
|
-
// Keyboard handler for navigation
|
|
42
|
-
useInput((input, key) => {
|
|
43
|
-
if (key.escape) {
|
|
44
|
-
if (searchMode) {
|
|
45
|
-
// Exit search mode and clear search
|
|
46
|
-
setSearchMode(false);
|
|
47
|
-
setSearchQuery('');
|
|
48
|
-
setCurrentModelIndex(0);
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
// Close the recommendations view
|
|
52
|
-
setClosed(true);
|
|
53
|
-
if (onCancel) {
|
|
54
|
-
onCancel();
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
else if (key.return) {
|
|
59
|
-
setClosed(true);
|
|
60
|
-
if (onCancel) {
|
|
61
|
-
onCancel();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
else if (key.upArrow) {
|
|
65
|
-
setCurrentModelIndex(prev => Math.max(0, prev - 1));
|
|
66
|
-
}
|
|
67
|
-
else if (key.downArrow) {
|
|
68
|
-
setCurrentModelIndex(prev => Math.min(currentTabModels.length - 1, prev + 1));
|
|
69
|
-
}
|
|
70
|
-
else if (key.leftArrow && !searchMode) {
|
|
71
|
-
setActiveTab('local');
|
|
72
|
-
}
|
|
73
|
-
else if (key.rightArrow && !searchMode) {
|
|
74
|
-
setActiveTab('api');
|
|
75
|
-
}
|
|
76
|
-
else if (key.backspace || key.delete) {
|
|
77
|
-
if (searchMode) {
|
|
78
|
-
setSearchQuery(prev => {
|
|
79
|
-
const newQuery = prev.slice(0, -1);
|
|
80
|
-
// Exit search mode if query becomes empty
|
|
81
|
-
if (newQuery === '') {
|
|
82
|
-
setSearchMode(false);
|
|
83
|
-
}
|
|
84
|
-
return newQuery;
|
|
85
|
-
});
|
|
86
|
-
setCurrentModelIndex(0);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
else if (input && input.length === 1 && !key.ctrl && !key.meta) {
|
|
90
|
-
// Add printable characters to search
|
|
91
|
-
if (!searchMode) {
|
|
92
|
-
setSearchMode(true);
|
|
93
|
-
}
|
|
94
|
-
setSearchQuery(prev => prev + input);
|
|
95
|
-
setCurrentModelIndex(0);
|
|
96
|
-
}
|
|
97
|
-
// Consume all other input by doing nothing
|
|
98
|
-
});
|
|
99
|
-
// Reset index when switching tabs
|
|
100
|
-
useEffect(() => {
|
|
101
|
-
// eslint-disable-next-line react-hooks/set-state-in-effect -- Reset state when activeTab changes is intentional
|
|
102
|
-
setCurrentModelIndex(0);
|
|
103
|
-
}, [activeTab]);
|
|
104
|
-
useEffect(() => {
|
|
105
|
-
async function loadRecommendations() {
|
|
106
|
-
try {
|
|
107
|
-
const capabilities = await systemDetector.getSystemCapabilities();
|
|
108
|
-
setSystemCaps(capabilities);
|
|
109
|
-
const result = recommendationEngine.getRecommendations(capabilities);
|
|
110
|
-
setModels(result.allModels);
|
|
111
|
-
// Get top local model (one user can actually run)
|
|
112
|
-
const canRunLocally = (model) => {
|
|
113
|
-
return (!model.model.minMemoryGB ||
|
|
114
|
-
capabilities.memory.total >= model.model.minMemoryGB);
|
|
115
|
-
};
|
|
116
|
-
// Local model scoring: agentic is most important, then feasibility (can it run on this system)
|
|
117
|
-
const getLocalScore = (model) => {
|
|
118
|
-
const canRun = canRunLocally(model);
|
|
119
|
-
if (!canRun)
|
|
120
|
-
return 0; // Can't run = score of 0
|
|
121
|
-
return (model.model.quality.agentic * 3.0 + model.model.quality.local * 1.5);
|
|
122
|
-
};
|
|
123
|
-
// API model scoring: agentic is most important, then cost (value for money)
|
|
124
|
-
const getApiScore = (model) => {
|
|
125
|
-
return (model.model.quality.agentic * 3.0 + model.model.quality.cost * 1.2);
|
|
126
|
-
};
|
|
127
|
-
const localModels = result.allModels
|
|
128
|
-
.filter(m => m.model.local)
|
|
129
|
-
.sort((a, b) => getLocalScore(b) - getLocalScore(a));
|
|
130
|
-
const apiModels = result.allModels
|
|
131
|
-
.filter(m => m.model.api)
|
|
132
|
-
.sort((a, b) => getApiScore(b) - getApiScore(a));
|
|
133
|
-
setTopLocalModel(localModels[0] || null);
|
|
134
|
-
setTopApiModel(apiModels[0] || null);
|
|
135
|
-
setLoading(false);
|
|
136
|
-
}
|
|
137
|
-
catch (error_) {
|
|
138
|
-
setError(error_ instanceof Error ? error_.message : 'Failed to analyze system');
|
|
139
|
-
setLoading(false);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
void loadRecommendations();
|
|
143
|
-
}, []);
|
|
144
|
-
// Return null when closed to hide the component
|
|
145
|
-
if (closed) {
|
|
146
|
-
return null;
|
|
147
|
-
}
|
|
148
|
-
if (loading) {
|
|
149
|
-
return (_jsx(TitledBox, { borderStyle: "round", titles: ['/recommendations'], titleStyles: titleStyles.pill, width: boxWidth, borderColor: colors.primary, paddingX: 2, paddingY: 1, children: _jsx(Text, { color: colors.white, children: "Analyzing your system..." }) }));
|
|
150
|
-
}
|
|
151
|
-
if (error) {
|
|
152
|
-
return (_jsx(TitledBox, { borderStyle: "round", titles: ['/recommendations'], titleStyles: titleStyles.pill, width: boxWidth, borderColor: colors.error, paddingX: 2, paddingY: 1, children: _jsxs(Text, { color: colors.error, children: ["Error: ", error] }) }));
|
|
153
|
-
}
|
|
154
|
-
if (!systemCaps) {
|
|
155
|
-
return (_jsx(TitledBox, { borderStyle: "round", titles: ['/recommendations'], titleStyles: titleStyles.pill, width: boxWidth, borderColor: colors.error, paddingX: 2, paddingY: 1, children: _jsx(Text, { color: colors.error, children: "Unable to detect system capabilities" }) }));
|
|
156
|
-
}
|
|
157
|
-
return (_jsxs(TitledBox, { borderStyle: "round", titles: ['/recommendations'], titleStyles: titleStyles.pill, width: boxWidth, borderColor: colors.primary, paddingX: 2, paddingY: 1, marginBottom: 1, flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", children: [_jsx(SystemSummary, { systemCaps: systemCaps, colors: colors }), (topLocalModel || topApiModel) && (_jsx(QuickStartSection, { topLocalModel: topLocalModel, topApiModel: topApiModel, colors: colors }))] }), _jsx(ModelsTabView, { models: models, colors: colors, currentModelIndex: currentModelIndex, activeTab: activeTab, onTabChange: setActiveTab, systemCaps: systemCaps, searchMode: searchMode, searchQuery: searchQuery, currentTabModels: currentTabModels }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [searchMode && searchQuery && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: colors.primary, children: ["\uD83D\uDD0D Search: ", _jsx(Text, { bold: true, children: searchQuery })] }) })), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.secondary, dimColor: true, children: "\uD83D\uDCA1 Add providers to agents.config.json to use these models." }) }), _jsx(Text, { color: colors.secondary, dimColor: true, children: searchMode
|
|
158
|
-
? 'Type to search | Backspace to delete | ↑/↓: Navigate | Esc: Exit search'
|
|
159
|
-
: 'Type to search | ↑/↓: Navigate | ←/→: Switch tabs | Esc: Close' })] })] }));
|
|
160
|
-
}
|
|
161
|
-
function SystemSummary({ systemCaps, colors, }) {
|
|
162
|
-
const gpuText = systemCaps.gpu.available
|
|
163
|
-
? `${systemCaps.gpu.type} GPU${systemCaps.gpu.memory ? ` (${systemCaps.gpu.memory}GB)` : ''}`
|
|
164
|
-
: 'No GPU';
|
|
165
|
-
const networkText = systemCaps.network.connected
|
|
166
|
-
? `Connected${systemCaps.network.speed ? ` (${systemCaps.network.speed})` : ''}`
|
|
167
|
-
: 'Offline';
|
|
168
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: 'round', borderColor: colors.secondary, padding: 1, width: '50%', children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.primary, bold: true, underline: true, children: "Your System:" }) }), _jsxs(Text, { children: [systemCaps.memory.total, "GB RAM, ", systemCaps.cpu.cores, " cores, ", gpuText] }), _jsxs(Text, { color: colors.white, children: ["Network: ", networkText] })] }));
|
|
169
|
-
}
|
|
170
|
-
function QuickStartSection({ topLocalModel, topApiModel, colors, }) {
|
|
171
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: 'round', borderColor: colors.secondary, padding: 1, width: '50%', children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.success, bold: true, underline: true, children: "Quick Start:" }) }), topLocalModel && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: colors.success, children: [_jsx(Text, { bold: true, children: "\uD83D\uDC49 Local: " }), topLocalModel.model.name] }) })), topApiModel && (_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: colors.primary, children: [_jsx(Text, { bold: true, children: "\uD83D\uDC49 API: " }), topApiModel.model.name] }) })), !topLocalModel && !topApiModel && (_jsx(Text, { color: colors.warning, children: "No models available" }))] }));
|
|
172
|
-
}
|
|
173
|
-
function ModelsTabView({ models, colors, currentModelIndex, activeTab, onTabChange, systemCaps, searchMode, searchQuery, currentTabModels, }) {
|
|
174
|
-
// Check if model can run locally on this system
|
|
175
|
-
const canRunLocally = (model) => {
|
|
176
|
-
return (!model.model.minMemoryGB ||
|
|
177
|
-
systemCaps.memory.total >= model.model.minMemoryGB);
|
|
178
|
-
};
|
|
179
|
-
// Local model scoring: agentic is most important, then feasibility
|
|
180
|
-
const getLocalScore = (model) => {
|
|
181
|
-
const canRun = canRunLocally(model);
|
|
182
|
-
if (!canRun)
|
|
183
|
-
return 0; // Can't run = score of 0
|
|
184
|
-
return model.model.quality.agentic * 3.0 + model.model.quality.local * 1.5;
|
|
185
|
-
};
|
|
186
|
-
// API model scoring: agentic is most important, then cost (value for money)
|
|
187
|
-
const getApiScore = (model) => {
|
|
188
|
-
return model.model.quality.agentic * 3.0 + model.model.quality.cost * 1.2;
|
|
189
|
-
};
|
|
190
|
-
// Separate models into local and API, then sort by appropriate score
|
|
191
|
-
const localModels = models
|
|
192
|
-
.filter(m => m.model.local)
|
|
193
|
-
.sort((a, b) => getLocalScore(b) - getLocalScore(a));
|
|
194
|
-
const apiModels = models
|
|
195
|
-
.filter(m => m.model.api)
|
|
196
|
-
.sort((a, b) => getApiScore(b) - getApiScore(a));
|
|
197
|
-
// Use passed in currentTabModels if in search mode, otherwise calculate
|
|
198
|
-
const currentModels = searchMode
|
|
199
|
-
? currentTabModels
|
|
200
|
-
: activeTab === 'local'
|
|
201
|
-
? localModels
|
|
202
|
-
: apiModels;
|
|
203
|
-
const currentModel = currentModels[currentModelIndex];
|
|
204
|
-
if (!currentModel) {
|
|
205
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: 'round', borderColor: colors.secondary, padding: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.primary, bold: true, underline: true, children: searchMode ? 'Search Mode' : 'Model Database' }) }), !searchMode && (_jsxs(Tabs, { onChange: name => onTabChange(name), defaultValue: activeTab, colors: {
|
|
206
|
-
activeTab: {
|
|
207
|
-
color: colors.success,
|
|
208
|
-
},
|
|
209
|
-
}, children: [_jsx(Tab, { name: "local", children: "Local Models" }), _jsx(Tab, { name: "api", children: "API Models" })] })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: colors.warning, children: searchMode && searchQuery
|
|
210
|
-
? `No models found matching "${searchQuery}"`
|
|
211
|
-
: 'No models available in this category' }) })] }));
|
|
212
|
-
}
|
|
213
|
-
return (_jsxs(Box, { flexDirection: "column", borderStyle: 'round', borderColor: colors.secondary, padding: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: colors.primary, bold: true, underline: true, children: searchMode ? 'Search Mode' : 'Model Database' }) }), !searchMode && (_jsxs(Tabs, { onChange: name => onTabChange(name), defaultValue: activeTab, colors: {
|
|
214
|
-
activeTab: {
|
|
215
|
-
color: colors.success,
|
|
216
|
-
},
|
|
217
|
-
}, children: [_jsx(Tab, { name: "local", children: "Local Models" }), _jsx(Tab, { name: "api", children: "API Models" })] })), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Box, { marginBottom: 1, children: _jsxs(Text, { color: colors.secondary, dimColor: true, children: ["Model ", currentModelIndex + 1, " of ", currentModels.length] }) }), _jsx(ModelItem, { model: currentModel, colors: colors, showScore: true, localScore: getLocalScore(currentModel), apiScore: getApiScore(currentModel), isLocalTab: activeTab === 'local', systemCaps: systemCaps, searchMode: searchMode })] })] }));
|
|
218
|
-
}
|
|
219
|
-
function ModelItem({ model, colors, showScore, localScore, apiScore, isLocalTab, systemCaps, searchMode, }) {
|
|
220
|
-
// Access type from local/api flags
|
|
221
|
-
const accessTypes = [];
|
|
222
|
-
if (model.model.local)
|
|
223
|
-
accessTypes.push('Local');
|
|
224
|
-
if (model.model.api)
|
|
225
|
-
accessTypes.push('API');
|
|
226
|
-
const accessType = accessTypes.join(' + ') || 'Unknown';
|
|
227
|
-
// Check if model can run locally
|
|
228
|
-
const canRunLocally = !model.model.minMemoryGB ||
|
|
229
|
-
(systemCaps && systemCaps.memory.total >= model.model.minMemoryGB);
|
|
230
|
-
// Get score color and label based on quality (normalized to 10)
|
|
231
|
-
const getScoreInfo = (score, forLocal) => {
|
|
232
|
-
// Different max scores for local vs API
|
|
233
|
-
// Local max: 10*3 + 10*1.5 = 45
|
|
234
|
-
// API max: 10*3 + 10*1.2 = 42
|
|
235
|
-
const maxScore = forLocal ? 45 : 42;
|
|
236
|
-
const normalizedScore = (score / maxScore) * 10;
|
|
237
|
-
if (normalizedScore >= 7.5)
|
|
238
|
-
return {
|
|
239
|
-
color: colors.success,
|
|
240
|
-
label: 'Excellent',
|
|
241
|
-
score: normalizedScore,
|
|
242
|
-
};
|
|
243
|
-
if (normalizedScore >= 6.5)
|
|
244
|
-
return { color: colors.primary, label: 'Good', score: normalizedScore };
|
|
245
|
-
if (normalizedScore >= 5.0)
|
|
246
|
-
return { color: colors.warning, label: 'Decent', score: normalizedScore };
|
|
247
|
-
return { color: colors.error, label: 'Poor', score: normalizedScore };
|
|
248
|
-
};
|
|
249
|
-
// In search mode with both local and API, show both scores
|
|
250
|
-
const showBothScores = searchMode && model.model.local && model.model.api;
|
|
251
|
-
const localScoreInfo = localScore !== undefined && (showBothScores || isLocalTab)
|
|
252
|
-
? getScoreInfo(localScore, true)
|
|
253
|
-
: null;
|
|
254
|
-
const apiScoreInfo = apiScore !== undefined && (showBothScores || !isLocalTab)
|
|
255
|
-
? getScoreInfo(apiScore, false)
|
|
256
|
-
: null;
|
|
257
|
-
// Generate weaknesses based on context and scores
|
|
258
|
-
const getWeaknesses = () => {
|
|
259
|
-
const weaknesses = [];
|
|
260
|
-
const activeScoreInfo = isLocalTab ? localScoreInfo : apiScoreInfo;
|
|
261
|
-
const _activeScore = isLocalTab ? localScore : apiScore;
|
|
262
|
-
// Only show weaknesses if score is Poor or Decent
|
|
263
|
-
if (!activeScoreInfo || activeScoreInfo.score >= 6.5)
|
|
264
|
-
return weaknesses;
|
|
265
|
-
if (isLocalTab) {
|
|
266
|
-
// Local weaknesses
|
|
267
|
-
if (!canRunLocally) {
|
|
268
|
-
const required = model.model.minMemoryGB || 0;
|
|
269
|
-
const available = systemCaps?.memory.total || 0;
|
|
270
|
-
weaknesses.push(`Cannot run locally - requires ${required}GB RAM (you have ${available}GB)`);
|
|
271
|
-
}
|
|
272
|
-
if (model.model.quality.agentic < 5) {
|
|
273
|
-
weaknesses.push('Limited agentic coding capabilities');
|
|
274
|
-
}
|
|
275
|
-
if (model.model.quality.local < 5 && canRunLocally) {
|
|
276
|
-
weaknesses.push('Difficult to run locally - requires significant resources');
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
else {
|
|
280
|
-
// API weaknesses
|
|
281
|
-
if (model.model.quality.agentic < 5) {
|
|
282
|
-
weaknesses.push('Limited agentic coding capabilities');
|
|
283
|
-
}
|
|
284
|
-
if (model.model.quality.cost < 5) {
|
|
285
|
-
weaknesses.push('Expensive API pricing');
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
return weaknesses;
|
|
289
|
-
};
|
|
290
|
-
const weaknesses = getWeaknesses();
|
|
291
|
-
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Box, { children: _jsx(Text, { color: colors.primary, bold: true, underline: true, children: model.model.name }) }), _jsxs(Box, { marginLeft: 2, flexDirection: "column", children: [_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Text, { color: colors.white, children: [_jsx(Text, { bold: true, children: "Author: " }), model.model.author] }), _jsxs(Text, { color: colors.white, children: [_jsx(Text, { bold: true, children: "Size: " }), model.model.size] }), _jsxs(Text, { color: colors.white, children: [_jsx(Text, { bold: true, children: "Access: " }), accessType] }), _jsxs(Text, { color: colors.white, children: [_jsx(Text, { bold: true, children: "Cost: " }), model.model.costDetails] }), showScore && showBothScores ? (_jsxs(_Fragment, { children: [localScoreInfo && (_jsxs(Text, { color: colors.white, children: [_jsx(Text, { bold: true, children: "Local Quality: " }), _jsx(Text, { color: localScoreInfo.color, bold: true, children: localScoreInfo.label }), _jsxs(Text, { dimColor: true, children: [" (", localScoreInfo.score.toFixed(1), "/10)"] })] })), apiScoreInfo && (_jsxs(Text, { color: colors.white, children: [_jsx(Text, { bold: true, children: "API Quality: " }), _jsx(Text, { color: apiScoreInfo.color, bold: true, children: apiScoreInfo.label }), _jsxs(Text, { dimColor: true, children: [" (", apiScoreInfo.score.toFixed(1), "/10)"] })] }))] })) : showScore && (localScoreInfo || apiScoreInfo) ? ((() => {
|
|
292
|
-
const scoreInfo = localScoreInfo || apiScoreInfo;
|
|
293
|
-
if (!scoreInfo)
|
|
294
|
-
return null;
|
|
295
|
-
return (_jsxs(Text, { color: colors.white, children: [_jsxs(Text, { bold: true, children: ["Quality For You", ' ', isLocalTab || (model.model.local && !model.model.api)
|
|
296
|
-
? 'Locally'
|
|
297
|
-
: 'via API', ":", ' '] }), _jsx(Text, { color: scoreInfo.color, bold: true, children: scoreInfo.label }), _jsxs(Text, { dimColor: true, children: [" (", scoreInfo.score.toFixed(1), "/10)"] })] }));
|
|
298
|
-
})()) : null] }), _jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: colors.success, bold: true, children: "Strengths:" }), model.recommendation.split('\n').map((line, i) => (_jsx(Text, { color: colors.success, children: line }, i)))] }), weaknesses.length > 0 && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { color: colors.error, bold: true, children: "Weaknesses:" }), weaknesses.map((line, i) => (_jsxs(Text, { color: colors.error, children: ["\u2022 ", line] }, i)))] }))] })] }));
|
|
299
|
-
}
|
|
300
|
-
// Export the display component for use in app.tsx
|
|
301
|
-
export { RecommendationsDisplay };
|
|
302
|
-
export const recommendationsCommand = {
|
|
303
|
-
name: 'recommendations',
|
|
304
|
-
description: 'Get AI model recommendations based on your system',
|
|
305
|
-
handler: (_args, _messages, _metadata) => {
|
|
306
|
-
// This command is handled specially in app.tsx
|
|
307
|
-
// This handler exists only for registration purposes
|
|
308
|
-
return Promise.resolve(React.createElement(React.Fragment));
|
|
309
|
-
},
|
|
310
|
-
};
|
|
311
|
-
//# sourceMappingURL=recommendations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recommendations.js","sourceRoot":"","sources":["../../source/commands/recommendations.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"streaming.d.ts","sourceRoot":"","sources":["../../source/commands/streaming.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAiBtC,eAAO,MAAM,gBAAgB,EAAE,OAgB9B,CAAC"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import InfoMessage from '../components/info-message.js';
|
|
4
|
-
import { isStreamingEnabled, setStreamingEnabled } from '../config/preferences.js';
|
|
5
|
-
import { Box } from 'ink';
|
|
6
|
-
function StreamingToggle({ enabled }) {
|
|
7
|
-
return (_jsx(Box, { marginTop: 1, marginBottom: 1, children: _jsx(InfoMessage, { hideBox: true, message: `Response streaming ${enabled ? 'enabled' : 'disabled'}.` }) }));
|
|
8
|
-
}
|
|
9
|
-
export const streamingCommand = {
|
|
10
|
-
name: 'streaming',
|
|
11
|
-
description: 'Toggle response streaming on/off',
|
|
12
|
-
handler: (_args) => {
|
|
13
|
-
// Toggle the current streaming setting
|
|
14
|
-
const currentSetting = isStreamingEnabled();
|
|
15
|
-
const newSetting = !currentSetting;
|
|
16
|
-
setStreamingEnabled(newSetting);
|
|
17
|
-
return Promise.resolve(React.createElement(StreamingToggle, {
|
|
18
|
-
enabled: newSetting,
|
|
19
|
-
key: `streaming-${Date.now()}`,
|
|
20
|
-
}));
|
|
21
|
-
},
|
|
22
|
-
};
|
|
23
|
-
//# sourceMappingURL=streaming.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"streaming.js","sourceRoot":"","sources":["../../source/commands/streaming.tsx"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAC,kBAAkB,EAAE,mBAAmB,EAAC,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AAExB,SAAS,eAAe,CAAC,EAAC,OAAO,EAAqB;IACrD,OAAO,CACN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,YACjC,KAAC,WAAW,IACX,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,sBAAsB,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,GAAG,GACjE,GACG,CACN,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAY;IACxC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,kCAAkC;IAC/C,OAAO,EAAE,CAAC,KAAe,EAAE,EAAE;QAC5B,uCAAuC;QACvC,MAAM,cAAc,GAAG,kBAAkB,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,CAAC,cAAc,CAAC;QACnC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAEhC,OAAO,OAAO,CAAC,OAAO,CACrB,KAAK,CAAC,aAAa,CAAC,eAAe,EAAE;YACpC,OAAO,EAAE,UAAU;YACnB,GAAG,EAAE,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE;SAC9B,CAAC,CACF,CAAC;IACH,CAAC;CACD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"thinking-indicator.d.ts","sourceRoot":"","sources":["../../source/components/thinking-indicator.tsx"],"names":[],"mappings":";AAqCA,wBAmDG"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { memo, useState, useEffect, useRef } from 'react';
|
|
3
|
-
import { Box, Text } from 'ink';
|
|
4
|
-
import { useTheme } from '../hooks/useTheme.js';
|
|
5
|
-
const THINKING_WORDS = [
|
|
6
|
-
'Thinking',
|
|
7
|
-
'Processing',
|
|
8
|
-
'Analyzing',
|
|
9
|
-
'Contemplating',
|
|
10
|
-
'Pondering',
|
|
11
|
-
'Computing',
|
|
12
|
-
'Reasoning',
|
|
13
|
-
'Considering',
|
|
14
|
-
'Evaluating',
|
|
15
|
-
'Deliberating',
|
|
16
|
-
'Reflecting',
|
|
17
|
-
'Cogitating',
|
|
18
|
-
'Calculating',
|
|
19
|
-
'Strategizing',
|
|
20
|
-
'Synthesizing',
|
|
21
|
-
'Brainstorming',
|
|
22
|
-
'Hypothesizing',
|
|
23
|
-
'Deducing',
|
|
24
|
-
'Inferring',
|
|
25
|
-
'Conceptualizing',
|
|
26
|
-
'Formulating',
|
|
27
|
-
'Investigating',
|
|
28
|
-
'Examining',
|
|
29
|
-
'Interpreting',
|
|
30
|
-
'Deciphering',
|
|
31
|
-
'Solving',
|
|
32
|
-
'Exploring',
|
|
33
|
-
'Assessing',
|
|
34
|
-
'Ruminating',
|
|
35
|
-
'Meditating',
|
|
36
|
-
];
|
|
37
|
-
export default memo(function ThinkingIndicator() {
|
|
38
|
-
const { colors } = useTheme();
|
|
39
|
-
const [elapsedSeconds, setElapsedSeconds] = useState(0);
|
|
40
|
-
const [wordIndex, setWordIndex] = useState(0);
|
|
41
|
-
const startTimeRef = useRef(0);
|
|
42
|
-
useEffect(() => {
|
|
43
|
-
startTimeRef.current = Date.now();
|
|
44
|
-
// eslint-disable-next-line react-hooks/set-state-in-effect -- Initialization on mount is intentional
|
|
45
|
-
setElapsedSeconds(0);
|
|
46
|
-
}, []);
|
|
47
|
-
useEffect(() => {
|
|
48
|
-
const timer = setInterval(() => {
|
|
49
|
-
const currentTime = Date.now();
|
|
50
|
-
const elapsed = Math.floor((currentTime - startTimeRef.current) / 1000);
|
|
51
|
-
setElapsedSeconds(elapsed);
|
|
52
|
-
}, 1000);
|
|
53
|
-
return () => {
|
|
54
|
-
clearInterval(timer);
|
|
55
|
-
};
|
|
56
|
-
}, []);
|
|
57
|
-
useEffect(() => {
|
|
58
|
-
const wordTimer = setInterval(() => {
|
|
59
|
-
setWordIndex(Math.floor(Math.random() * THINKING_WORDS.length));
|
|
60
|
-
}, 3000);
|
|
61
|
-
return () => {
|
|
62
|
-
clearInterval(wordTimer);
|
|
63
|
-
};
|
|
64
|
-
}, []);
|
|
65
|
-
// Cycle through 1-3 dots based on elapsed seconds
|
|
66
|
-
const dots = '.'.repeat((elapsedSeconds % 4) + 1);
|
|
67
|
-
return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsxs(Box, { flexWrap: "wrap", children: [_jsxs(Text, { color: colors.primary, bold: true, italic: true, children: [THINKING_WORDS[wordIndex], dots, ' '] }), _jsxs(Text, { color: colors.white, children: [elapsedSeconds, "s"] })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: colors.secondary, children: "Press Escape to cancel" }) })] }));
|
|
68
|
-
});
|
|
69
|
-
//# sourceMappingURL=thinking-indicator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"thinking-indicator.js","sourceRoot":"","sources":["../../source/components/thinking-indicator.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { ModelEntry } from '../types/index.js';
|
|
2
|
-
export declare class ModelDatabase {
|
|
3
|
-
private static instance;
|
|
4
|
-
static getInstance(): ModelDatabase;
|
|
5
|
-
getAllModels(): ModelEntry[];
|
|
6
|
-
}
|
|
7
|
-
export declare const modelDatabase: ModelDatabase;
|
|
8
|
-
//# sourceMappingURL=model-database.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-database.d.ts","sourceRoot":"","sources":["../../source/recommendations/model-database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,eAAe,CAAC;AAqgBzC,qBAAa,aAAa;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAgB;IAEvC,MAAM,CAAC,WAAW,IAAI,aAAa;IAOnC,YAAY,IAAI,UAAU,EAAE;CAG5B;AAED,eAAO,MAAM,aAAa,eAA8B,CAAC"}
|