@dexto/agent-management 1.6.7 → 1.6.9
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/index.cjs +22 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -1
- package/dist/models/index.cjs +23 -0
- package/dist/models/index.d.ts +2 -1
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +24 -0
- package/dist/models/model-picker-state.cjs +231 -0
- package/dist/models/model-picker-state.d.ts +128 -0
- package/dist/models/model-picker-state.d.ts.map +1 -0
- package/dist/models/model-picker-state.js +188 -0
- package/dist/models/path-resolver.cjs +5 -0
- package/dist/models/path-resolver.d.ts +5 -0
- package/dist/models/path-resolver.d.ts.map +1 -1
- package/dist/models/path-resolver.js +4 -0
- package/package.json +5 -5
package/dist/index.cjs
CHANGED
|
@@ -26,6 +26,9 @@ __export(index_exports, {
|
|
|
26
26
|
ConfigErrorCode: () => import_config.ConfigErrorCode,
|
|
27
27
|
CustomModelSchema: () => import_custom_models.CustomModelSchema,
|
|
28
28
|
DEFAULT_MARKETPLACES: () => import_plugins.DEFAULT_MARKETPLACES,
|
|
29
|
+
MODEL_PICKER_FAVORITES_LIMIT: () => import_models.MODEL_PICKER_FAVORITES_LIMIT,
|
|
30
|
+
MODEL_PICKER_RECENTS_LIMIT: () => import_models.MODEL_PICKER_RECENTS_LIMIT,
|
|
31
|
+
MODEL_PICKER_STATE_VERSION: () => import_models.MODEL_PICKER_STATE_VERSION,
|
|
29
32
|
MarketplaceError: () => import_plugins.MarketplaceError,
|
|
30
33
|
MarketplaceErrorCode: () => import_plugins.MarketplaceErrorCode,
|
|
31
34
|
PROVIDER_API_KEY_MAP: () => import_api_key_resolver.PROVIDER_API_KEY_MAP,
|
|
@@ -87,6 +90,7 @@ __export(index_exports, {
|
|
|
87
90
|
getModelDirectory: () => import_models.getModelDirectory,
|
|
88
91
|
getModelFilePath: () => import_models.getModelFilePath,
|
|
89
92
|
getModelFileSize: () => import_models.getModelFileSize,
|
|
93
|
+
getModelPickerStatePath: () => import_models.getModelPickerStatePath,
|
|
90
94
|
getModelStatePath: () => import_models.getModelStatePath,
|
|
91
95
|
getModelTempDirectory: () => import_models.getModelTempDirectory,
|
|
92
96
|
getModelsDirectory: () => import_models.getModelsDirectory,
|
|
@@ -122,9 +126,12 @@ __export(index_exports, {
|
|
|
122
126
|
loadDextoInstalledPlugins: () => import_plugins.loadDextoInstalledPlugins,
|
|
123
127
|
loadGlobalPreferences: () => import_loader.loadGlobalPreferences,
|
|
124
128
|
loadImageRegistry: () => import_image_store.loadImageRegistry,
|
|
129
|
+
loadModelPickerState: () => import_models.loadModelPickerState,
|
|
125
130
|
loadModelState: () => import_models.loadModelState,
|
|
126
131
|
modelFileExists: () => import_models.modelFileExists,
|
|
127
132
|
parseImageSpecifier: () => import_image_store.parseImageSpecifier,
|
|
133
|
+
pruneModelPickerState: () => import_models.pruneModelPickerState,
|
|
134
|
+
recordRecentModel: () => import_models.recordRecentModel,
|
|
128
135
|
registerManualModel: () => import_models.registerManualModel,
|
|
129
136
|
reloadAgentConfigFromFile: () => import_config.reloadAgentConfigFromFile,
|
|
130
137
|
removeFromDownloadQueue: () => import_models.removeFromDownloadQueue,
|
|
@@ -144,11 +151,15 @@ __export(index_exports, {
|
|
|
144
151
|
saveDextoInstalledPlugins: () => import_plugins.saveDextoInstalledPlugins,
|
|
145
152
|
saveGlobalPreferences: () => import_loader.saveGlobalPreferences,
|
|
146
153
|
saveImageRegistry: () => import_image_store.saveImageRegistry,
|
|
154
|
+
saveModelPickerState: () => import_models.saveModelPickerState,
|
|
147
155
|
saveModelState: () => import_models.saveModelState,
|
|
148
156
|
saveProviderApiKey: () => import_api_key_store.saveProviderApiKey,
|
|
149
157
|
setActiveImageVersion: () => import_image_store.setActiveImageVersion,
|
|
150
158
|
setActiveModel: () => import_models.setActiveModel,
|
|
159
|
+
setFavoriteModels: () => import_models.setFavoriteModels,
|
|
151
160
|
syncStateWithFilesystem: () => import_models.syncStateWithFilesystem,
|
|
161
|
+
toModelPickerKey: () => import_models.toModelPickerKey,
|
|
162
|
+
toggleFavoriteModel: () => import_models.toggleFavoriteModel,
|
|
152
163
|
tryLoadManifest: () => import_plugins.tryLoadManifest,
|
|
153
164
|
uninstallAgent: () => import_installation.uninstallAgent,
|
|
154
165
|
uninstallPlugin: () => import_plugins.uninstallPlugin,
|
|
@@ -205,6 +216,9 @@ var import_plugins = require("./plugins/index.js");
|
|
|
205
216
|
ConfigErrorCode,
|
|
206
217
|
CustomModelSchema,
|
|
207
218
|
DEFAULT_MARKETPLACES,
|
|
219
|
+
MODEL_PICKER_FAVORITES_LIMIT,
|
|
220
|
+
MODEL_PICKER_RECENTS_LIMIT,
|
|
221
|
+
MODEL_PICKER_STATE_VERSION,
|
|
208
222
|
MarketplaceError,
|
|
209
223
|
MarketplaceErrorCode,
|
|
210
224
|
PROVIDER_API_KEY_MAP,
|
|
@@ -266,6 +280,7 @@ var import_plugins = require("./plugins/index.js");
|
|
|
266
280
|
getModelDirectory,
|
|
267
281
|
getModelFilePath,
|
|
268
282
|
getModelFileSize,
|
|
283
|
+
getModelPickerStatePath,
|
|
269
284
|
getModelStatePath,
|
|
270
285
|
getModelTempDirectory,
|
|
271
286
|
getModelsDirectory,
|
|
@@ -301,9 +316,12 @@ var import_plugins = require("./plugins/index.js");
|
|
|
301
316
|
loadDextoInstalledPlugins,
|
|
302
317
|
loadGlobalPreferences,
|
|
303
318
|
loadImageRegistry,
|
|
319
|
+
loadModelPickerState,
|
|
304
320
|
loadModelState,
|
|
305
321
|
modelFileExists,
|
|
306
322
|
parseImageSpecifier,
|
|
323
|
+
pruneModelPickerState,
|
|
324
|
+
recordRecentModel,
|
|
307
325
|
registerManualModel,
|
|
308
326
|
reloadAgentConfigFromFile,
|
|
309
327
|
removeFromDownloadQueue,
|
|
@@ -323,11 +341,15 @@ var import_plugins = require("./plugins/index.js");
|
|
|
323
341
|
saveDextoInstalledPlugins,
|
|
324
342
|
saveGlobalPreferences,
|
|
325
343
|
saveImageRegistry,
|
|
344
|
+
saveModelPickerState,
|
|
326
345
|
saveModelState,
|
|
327
346
|
saveProviderApiKey,
|
|
328
347
|
setActiveImageVersion,
|
|
329
348
|
setActiveModel,
|
|
349
|
+
setFavoriteModels,
|
|
330
350
|
syncStateWithFilesystem,
|
|
351
|
+
toModelPickerKey,
|
|
352
|
+
toggleFavoriteModel,
|
|
331
353
|
tryLoadManifest,
|
|
332
354
|
uninstallAgent,
|
|
333
355
|
uninstallPlugin,
|
package/dist/index.d.ts
CHANGED
|
@@ -24,7 +24,7 @@ export { updateAgentConfigFile, reloadAgentConfigFromFile, loadAgentConfig, enri
|
|
|
24
24
|
export { saveProviderApiKey, getProviderKeyStatus, listProviderKeyStatus, determineApiKeyStorage, SHARED_API_KEY_PROVIDERS, type ApiKeyStorageStrategy, } from './utils/api-key-store.js';
|
|
25
25
|
export { resolveApiKeyForProvider, getPrimaryApiKeyEnvVar, PROVIDER_API_KEY_MAP, } from './utils/api-key-resolver.js';
|
|
26
26
|
export { loadCustomModels, saveCustomModel, deleteCustomModel, getCustomModel, getCustomModelsPath, CustomModelSchema, CUSTOM_MODEL_PROVIDERS, type CustomModel, type CustomModelProvider, } from './models/custom-models.js';
|
|
27
|
-
export { getModelsDirectory, getModelFilePath, getModelDirectory, getModelStatePath, getModelTempDirectory, ensureModelsDirectory, ensureModelDirectory, modelFileExists, getModelFileSize, deleteModelDirectory, listModelDirectories, getModelsDiskUsage, formatSize, type ModelSource, type InstalledModel, type ModelState, loadModelState, saveModelState, addInstalledModel, removeInstalledModel, getInstalledModel, getAllInstalledModels, isModelInstalled, updateModelLastUsed, setActiveModel, getActiveModelId, getActiveModel, addToDownloadQueue, removeFromDownloadQueue, getDownloadQueue, syncStateWithFilesystem, getTotalInstalledSize, getInstalledModelCount, registerManualModel, } from './models/index.js';
|
|
27
|
+
export { getModelsDirectory, getModelFilePath, getModelDirectory, getModelStatePath, getModelPickerStatePath, getModelTempDirectory, ensureModelsDirectory, ensureModelDirectory, modelFileExists, getModelFileSize, deleteModelDirectory, listModelDirectories, getModelsDiskUsage, formatSize, type ModelSource, type InstalledModel, type ModelState, loadModelState, saveModelState, addInstalledModel, removeInstalledModel, getInstalledModel, getAllInstalledModels, isModelInstalled, updateModelLastUsed, setActiveModel, getActiveModelId, getActiveModel, addToDownloadQueue, removeFromDownloadQueue, getDownloadQueue, syncStateWithFilesystem, getTotalInstalledSize, getInstalledModelCount, registerManualModel, MODEL_PICKER_STATE_VERSION, MODEL_PICKER_RECENTS_LIMIT, MODEL_PICKER_FAVORITES_LIMIT, toModelPickerKey, pruneModelPickerState, loadModelPickerState, saveModelPickerState, recordRecentModel, toggleFavoriteModel, setFavoriteModels, type ModelPickerModel, type ModelPickerEntry, type ModelPickerState, type SetFavoriteModelsInput, } from './models/index.js';
|
|
28
28
|
export * from './runtime/index.js';
|
|
29
29
|
export * from './tool-factories/agent-spawner/index.js';
|
|
30
30
|
export * from './tool-factories/creator-tools/index.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -112,6 +112,7 @@ import {
|
|
|
112
112
|
getModelFilePath,
|
|
113
113
|
getModelDirectory,
|
|
114
114
|
getModelStatePath,
|
|
115
|
+
getModelPickerStatePath,
|
|
115
116
|
getModelTempDirectory,
|
|
116
117
|
ensureModelsDirectory,
|
|
117
118
|
ensureModelDirectory,
|
|
@@ -138,7 +139,17 @@ import {
|
|
|
138
139
|
syncStateWithFilesystem,
|
|
139
140
|
getTotalInstalledSize,
|
|
140
141
|
getInstalledModelCount,
|
|
141
|
-
registerManualModel
|
|
142
|
+
registerManualModel,
|
|
143
|
+
MODEL_PICKER_STATE_VERSION,
|
|
144
|
+
MODEL_PICKER_RECENTS_LIMIT,
|
|
145
|
+
MODEL_PICKER_FAVORITES_LIMIT,
|
|
146
|
+
toModelPickerKey,
|
|
147
|
+
pruneModelPickerState,
|
|
148
|
+
loadModelPickerState,
|
|
149
|
+
saveModelPickerState,
|
|
150
|
+
recordRecentModel,
|
|
151
|
+
toggleFavoriteModel,
|
|
152
|
+
setFavoriteModels
|
|
142
153
|
} from "./models/index.js";
|
|
143
154
|
export * from "./runtime/index.js";
|
|
144
155
|
export * from "./tool-factories/agent-spawner/index.js";
|
|
@@ -180,6 +191,9 @@ export {
|
|
|
180
191
|
ConfigErrorCode,
|
|
181
192
|
CustomModelSchema,
|
|
182
193
|
DEFAULT_MARKETPLACES,
|
|
194
|
+
MODEL_PICKER_FAVORITES_LIMIT,
|
|
195
|
+
MODEL_PICKER_RECENTS_LIMIT,
|
|
196
|
+
MODEL_PICKER_STATE_VERSION,
|
|
183
197
|
MarketplaceError,
|
|
184
198
|
MarketplaceErrorCode,
|
|
185
199
|
PROVIDER_API_KEY_MAP,
|
|
@@ -241,6 +255,7 @@ export {
|
|
|
241
255
|
getModelDirectory,
|
|
242
256
|
getModelFilePath,
|
|
243
257
|
getModelFileSize,
|
|
258
|
+
getModelPickerStatePath,
|
|
244
259
|
getModelStatePath,
|
|
245
260
|
getModelTempDirectory,
|
|
246
261
|
getModelsDirectory,
|
|
@@ -276,9 +291,12 @@ export {
|
|
|
276
291
|
loadDextoInstalledPlugins,
|
|
277
292
|
loadGlobalPreferences,
|
|
278
293
|
loadImageRegistry,
|
|
294
|
+
loadModelPickerState,
|
|
279
295
|
loadModelState,
|
|
280
296
|
modelFileExists,
|
|
281
297
|
parseImageSpecifier,
|
|
298
|
+
pruneModelPickerState,
|
|
299
|
+
recordRecentModel,
|
|
282
300
|
registerManualModel,
|
|
283
301
|
reloadAgentConfigFromFile,
|
|
284
302
|
removeFromDownloadQueue,
|
|
@@ -298,11 +316,15 @@ export {
|
|
|
298
316
|
saveDextoInstalledPlugins,
|
|
299
317
|
saveGlobalPreferences,
|
|
300
318
|
saveImageRegistry,
|
|
319
|
+
saveModelPickerState,
|
|
301
320
|
saveModelState,
|
|
302
321
|
saveProviderApiKey,
|
|
303
322
|
setActiveImageVersion,
|
|
304
323
|
setActiveModel,
|
|
324
|
+
setFavoriteModels,
|
|
305
325
|
syncStateWithFilesystem,
|
|
326
|
+
toModelPickerKey,
|
|
327
|
+
toggleFavoriteModel,
|
|
306
328
|
tryLoadManifest,
|
|
307
329
|
uninstallAgent,
|
|
308
330
|
uninstallPlugin,
|
package/dist/models/index.cjs
CHANGED
|
@@ -18,6 +18,9 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
18
18
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
19
|
var models_exports = {};
|
|
20
20
|
__export(models_exports, {
|
|
21
|
+
MODEL_PICKER_FAVORITES_LIMIT: () => import_model_picker_state.MODEL_PICKER_FAVORITES_LIMIT,
|
|
22
|
+
MODEL_PICKER_RECENTS_LIMIT: () => import_model_picker_state.MODEL_PICKER_RECENTS_LIMIT,
|
|
23
|
+
MODEL_PICKER_STATE_VERSION: () => import_model_picker_state.MODEL_PICKER_STATE_VERSION,
|
|
21
24
|
addInstalledModel: () => import_state_manager.addInstalledModel,
|
|
22
25
|
addToDownloadQueue: () => import_state_manager.addToDownloadQueue,
|
|
23
26
|
deleteModelDirectory: () => import_path_resolver.deleteModelDirectory,
|
|
@@ -33,6 +36,7 @@ __export(models_exports, {
|
|
|
33
36
|
getModelDirectory: () => import_path_resolver.getModelDirectory,
|
|
34
37
|
getModelFilePath: () => import_path_resolver.getModelFilePath,
|
|
35
38
|
getModelFileSize: () => import_path_resolver.getModelFileSize,
|
|
39
|
+
getModelPickerStatePath: () => import_path_resolver.getModelPickerStatePath,
|
|
36
40
|
getModelStatePath: () => import_path_resolver.getModelStatePath,
|
|
37
41
|
getModelTempDirectory: () => import_path_resolver.getModelTempDirectory,
|
|
38
42
|
getModelsDirectory: () => import_path_resolver.getModelsDirectory,
|
|
@@ -40,21 +44,32 @@ __export(models_exports, {
|
|
|
40
44
|
getTotalInstalledSize: () => import_state_manager.getTotalInstalledSize,
|
|
41
45
|
isModelInstalled: () => import_state_manager.isModelInstalled,
|
|
42
46
|
listModelDirectories: () => import_path_resolver.listModelDirectories,
|
|
47
|
+
loadModelPickerState: () => import_model_picker_state.loadModelPickerState,
|
|
43
48
|
loadModelState: () => import_state_manager.loadModelState,
|
|
44
49
|
modelFileExists: () => import_path_resolver.modelFileExists,
|
|
50
|
+
pruneModelPickerState: () => import_model_picker_state.pruneModelPickerState,
|
|
51
|
+
recordRecentModel: () => import_model_picker_state.recordRecentModel,
|
|
45
52
|
registerManualModel: () => import_state_manager.registerManualModel,
|
|
46
53
|
removeFromDownloadQueue: () => import_state_manager.removeFromDownloadQueue,
|
|
47
54
|
removeInstalledModel: () => import_state_manager.removeInstalledModel,
|
|
55
|
+
saveModelPickerState: () => import_model_picker_state.saveModelPickerState,
|
|
48
56
|
saveModelState: () => import_state_manager.saveModelState,
|
|
49
57
|
setActiveModel: () => import_state_manager.setActiveModel,
|
|
58
|
+
setFavoriteModels: () => import_model_picker_state.setFavoriteModels,
|
|
50
59
|
syncStateWithFilesystem: () => import_state_manager.syncStateWithFilesystem,
|
|
60
|
+
toModelPickerKey: () => import_model_picker_state.toModelPickerKey,
|
|
61
|
+
toggleFavoriteModel: () => import_model_picker_state.toggleFavoriteModel,
|
|
51
62
|
updateModelLastUsed: () => import_state_manager.updateModelLastUsed
|
|
52
63
|
});
|
|
53
64
|
module.exports = __toCommonJS(models_exports);
|
|
54
65
|
var import_path_resolver = require("./path-resolver.js");
|
|
55
66
|
var import_state_manager = require("./state-manager.js");
|
|
67
|
+
var import_model_picker_state = require("./model-picker-state.js");
|
|
56
68
|
// Annotate the CommonJS export names for ESM import in node:
|
|
57
69
|
0 && (module.exports = {
|
|
70
|
+
MODEL_PICKER_FAVORITES_LIMIT,
|
|
71
|
+
MODEL_PICKER_RECENTS_LIMIT,
|
|
72
|
+
MODEL_PICKER_STATE_VERSION,
|
|
58
73
|
addInstalledModel,
|
|
59
74
|
addToDownloadQueue,
|
|
60
75
|
deleteModelDirectory,
|
|
@@ -70,6 +85,7 @@ var import_state_manager = require("./state-manager.js");
|
|
|
70
85
|
getModelDirectory,
|
|
71
86
|
getModelFilePath,
|
|
72
87
|
getModelFileSize,
|
|
88
|
+
getModelPickerStatePath,
|
|
73
89
|
getModelStatePath,
|
|
74
90
|
getModelTempDirectory,
|
|
75
91
|
getModelsDirectory,
|
|
@@ -77,13 +93,20 @@ var import_state_manager = require("./state-manager.js");
|
|
|
77
93
|
getTotalInstalledSize,
|
|
78
94
|
isModelInstalled,
|
|
79
95
|
listModelDirectories,
|
|
96
|
+
loadModelPickerState,
|
|
80
97
|
loadModelState,
|
|
81
98
|
modelFileExists,
|
|
99
|
+
pruneModelPickerState,
|
|
100
|
+
recordRecentModel,
|
|
82
101
|
registerManualModel,
|
|
83
102
|
removeFromDownloadQueue,
|
|
84
103
|
removeInstalledModel,
|
|
104
|
+
saveModelPickerState,
|
|
85
105
|
saveModelState,
|
|
86
106
|
setActiveModel,
|
|
107
|
+
setFavoriteModels,
|
|
87
108
|
syncStateWithFilesystem,
|
|
109
|
+
toModelPickerKey,
|
|
110
|
+
toggleFavoriteModel,
|
|
88
111
|
updateModelLastUsed
|
|
89
112
|
});
|
package/dist/models/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* - State tracking for installed models
|
|
7
7
|
* - Download queue management
|
|
8
8
|
*/
|
|
9
|
-
export { getModelsDirectory, getModelFilePath, getModelDirectory, getModelStatePath, getModelTempDirectory, ensureModelsDirectory, ensureModelDirectory, modelFileExists, getModelFileSize, deleteModelDirectory, listModelDirectories, getModelsDiskUsage, formatSize, } from './path-resolver.js';
|
|
9
|
+
export { getModelsDirectory, getModelFilePath, getModelDirectory, getModelStatePath, getModelPickerStatePath, getModelTempDirectory, ensureModelsDirectory, ensureModelDirectory, modelFileExists, getModelFileSize, deleteModelDirectory, listModelDirectories, getModelsDiskUsage, formatSize, } from './path-resolver.js';
|
|
10
10
|
export { type ModelSource, type InstalledModel, type ModelState, loadModelState, saveModelState, addInstalledModel, removeInstalledModel, getInstalledModel, getAllInstalledModels, isModelInstalled, updateModelLastUsed, setActiveModel, getActiveModelId, getActiveModel, addToDownloadQueue, removeFromDownloadQueue, getDownloadQueue, syncStateWithFilesystem, getTotalInstalledSize, getInstalledModelCount, registerManualModel, } from './state-manager.js';
|
|
11
|
+
export { MODEL_PICKER_STATE_VERSION, MODEL_PICKER_RECENTS_LIMIT, MODEL_PICKER_FAVORITES_LIMIT, toModelPickerKey, pruneModelPickerState, loadModelPickerState, saveModelPickerState, recordRecentModel, toggleFavoriteModel, setFavoriteModels, type ModelPickerModel, type ModelPickerEntry, type ModelPickerState, type SetFavoriteModelsInput, } from './model-picker-state.js';
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACH,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,UAAU,GACb,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,GACtB,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EACH,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,UAAU,GACb,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACH,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACH,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAC5B,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,GAC9B,MAAM,yBAAyB,CAAC"}
|
package/dist/models/index.js
CHANGED
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
getModelFilePath,
|
|
4
4
|
getModelDirectory,
|
|
5
5
|
getModelStatePath,
|
|
6
|
+
getModelPickerStatePath,
|
|
6
7
|
getModelTempDirectory,
|
|
7
8
|
ensureModelsDirectory,
|
|
8
9
|
ensureModelDirectory,
|
|
@@ -33,7 +34,22 @@ import {
|
|
|
33
34
|
getInstalledModelCount,
|
|
34
35
|
registerManualModel
|
|
35
36
|
} from "./state-manager.js";
|
|
37
|
+
import {
|
|
38
|
+
MODEL_PICKER_STATE_VERSION,
|
|
39
|
+
MODEL_PICKER_RECENTS_LIMIT,
|
|
40
|
+
MODEL_PICKER_FAVORITES_LIMIT,
|
|
41
|
+
toModelPickerKey,
|
|
42
|
+
pruneModelPickerState,
|
|
43
|
+
loadModelPickerState,
|
|
44
|
+
saveModelPickerState,
|
|
45
|
+
recordRecentModel,
|
|
46
|
+
toggleFavoriteModel,
|
|
47
|
+
setFavoriteModels
|
|
48
|
+
} from "./model-picker-state.js";
|
|
36
49
|
export {
|
|
50
|
+
MODEL_PICKER_FAVORITES_LIMIT,
|
|
51
|
+
MODEL_PICKER_RECENTS_LIMIT,
|
|
52
|
+
MODEL_PICKER_STATE_VERSION,
|
|
37
53
|
addInstalledModel,
|
|
38
54
|
addToDownloadQueue,
|
|
39
55
|
deleteModelDirectory,
|
|
@@ -49,6 +65,7 @@ export {
|
|
|
49
65
|
getModelDirectory,
|
|
50
66
|
getModelFilePath,
|
|
51
67
|
getModelFileSize,
|
|
68
|
+
getModelPickerStatePath,
|
|
52
69
|
getModelStatePath,
|
|
53
70
|
getModelTempDirectory,
|
|
54
71
|
getModelsDirectory,
|
|
@@ -56,13 +73,20 @@ export {
|
|
|
56
73
|
getTotalInstalledSize,
|
|
57
74
|
isModelInstalled,
|
|
58
75
|
listModelDirectories,
|
|
76
|
+
loadModelPickerState,
|
|
59
77
|
loadModelState,
|
|
60
78
|
modelFileExists,
|
|
79
|
+
pruneModelPickerState,
|
|
80
|
+
recordRecentModel,
|
|
61
81
|
registerManualModel,
|
|
62
82
|
removeFromDownloadQueue,
|
|
63
83
|
removeInstalledModel,
|
|
84
|
+
saveModelPickerState,
|
|
64
85
|
saveModelState,
|
|
65
86
|
setActiveModel,
|
|
87
|
+
setFavoriteModels,
|
|
66
88
|
syncStateWithFilesystem,
|
|
89
|
+
toModelPickerKey,
|
|
90
|
+
toggleFavoriteModel,
|
|
67
91
|
updateModelLastUsed
|
|
68
92
|
};
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var model_picker_state_exports = {};
|
|
30
|
+
__export(model_picker_state_exports, {
|
|
31
|
+
MODEL_PICKER_FAVORITES_LIMIT: () => MODEL_PICKER_FAVORITES_LIMIT,
|
|
32
|
+
MODEL_PICKER_RECENTS_LIMIT: () => MODEL_PICKER_RECENTS_LIMIT,
|
|
33
|
+
MODEL_PICKER_STATE_VERSION: () => MODEL_PICKER_STATE_VERSION,
|
|
34
|
+
loadModelPickerState: () => loadModelPickerState,
|
|
35
|
+
pruneModelPickerState: () => pruneModelPickerState,
|
|
36
|
+
recordRecentModel: () => recordRecentModel,
|
|
37
|
+
saveModelPickerState: () => saveModelPickerState,
|
|
38
|
+
setFavoriteModels: () => setFavoriteModels,
|
|
39
|
+
toModelPickerKey: () => toModelPickerKey,
|
|
40
|
+
toggleFavoriteModel: () => toggleFavoriteModel
|
|
41
|
+
});
|
|
42
|
+
module.exports = __toCommonJS(model_picker_state_exports);
|
|
43
|
+
var import_fs = require("fs");
|
|
44
|
+
var import_path = __toESM(require("path"), 1);
|
|
45
|
+
var import_zod = require("zod");
|
|
46
|
+
var import_core = require("@dexto/core");
|
|
47
|
+
var import_path_resolver = require("./path-resolver.js");
|
|
48
|
+
const MODEL_PICKER_STATE_VERSION = 1;
|
|
49
|
+
const MODEL_PICKER_RECENTS_LIMIT = 10;
|
|
50
|
+
const MODEL_PICKER_FAVORITES_LIMIT = 100;
|
|
51
|
+
const ModelPickerModelSchema = import_zod.z.object({
|
|
52
|
+
provider: import_zod.z.enum(import_core.LLM_PROVIDERS),
|
|
53
|
+
model: import_zod.z.string().trim().min(1)
|
|
54
|
+
}).strict();
|
|
55
|
+
const ModelPickerEntrySchema = ModelPickerModelSchema.extend({
|
|
56
|
+
updatedAt: import_zod.z.string().datetime()
|
|
57
|
+
}).strict();
|
|
58
|
+
const ModelPickerStateSchema = import_zod.z.object({
|
|
59
|
+
version: import_zod.z.literal(MODEL_PICKER_STATE_VERSION),
|
|
60
|
+
recents: import_zod.z.array(ModelPickerEntrySchema).default([]),
|
|
61
|
+
favorites: import_zod.z.array(ModelPickerEntrySchema).default([])
|
|
62
|
+
}).strict();
|
|
63
|
+
const SetFavoriteModelsInputSchema = import_zod.z.object({
|
|
64
|
+
favorites: import_zod.z.array(ModelPickerModelSchema)
|
|
65
|
+
}).strict();
|
|
66
|
+
function createDefaultState() {
|
|
67
|
+
return {
|
|
68
|
+
version: MODEL_PICKER_STATE_VERSION,
|
|
69
|
+
recents: [],
|
|
70
|
+
favorites: []
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function normalizeEntries(input) {
|
|
74
|
+
const normalized = [];
|
|
75
|
+
const seen = /* @__PURE__ */ new Set();
|
|
76
|
+
for (const entry of input.entries) {
|
|
77
|
+
const parsed = ModelPickerEntrySchema.safeParse(entry);
|
|
78
|
+
if (!parsed.success) {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
const key = toModelPickerKey(parsed.data);
|
|
82
|
+
if (seen.has(key)) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
seen.add(key);
|
|
86
|
+
normalized.push(parsed.data);
|
|
87
|
+
if (normalized.length >= input.limit) {
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return normalized;
|
|
92
|
+
}
|
|
93
|
+
function normalizeState(input) {
|
|
94
|
+
return {
|
|
95
|
+
version: MODEL_PICKER_STATE_VERSION,
|
|
96
|
+
recents: normalizeEntries({
|
|
97
|
+
entries: input.state.recents,
|
|
98
|
+
limit: MODEL_PICKER_RECENTS_LIMIT
|
|
99
|
+
}),
|
|
100
|
+
favorites: normalizeEntries({
|
|
101
|
+
entries: input.state.favorites,
|
|
102
|
+
limit: MODEL_PICKER_FAVORITES_LIMIT
|
|
103
|
+
})
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function createEntry(input) {
|
|
107
|
+
return {
|
|
108
|
+
provider: input.model.provider,
|
|
109
|
+
model: input.model.model,
|
|
110
|
+
updatedAt: input.updatedAt
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function toModelPickerKey(input) {
|
|
114
|
+
return `${input.provider}|${input.model}`;
|
|
115
|
+
}
|
|
116
|
+
function pruneModelPickerState(input) {
|
|
117
|
+
const recents = input.state.recents.filter(
|
|
118
|
+
(entry) => input.allowedKeys.has(toModelPickerKey(entry))
|
|
119
|
+
);
|
|
120
|
+
const favorites = input.state.favorites.filter(
|
|
121
|
+
(entry) => input.allowedKeys.has(toModelPickerKey(entry))
|
|
122
|
+
);
|
|
123
|
+
return normalizeState({
|
|
124
|
+
state: {
|
|
125
|
+
version: MODEL_PICKER_STATE_VERSION,
|
|
126
|
+
recents,
|
|
127
|
+
favorites
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
async function loadModelPickerState() {
|
|
132
|
+
const filePath = (0, import_path_resolver.getModelPickerStatePath)();
|
|
133
|
+
try {
|
|
134
|
+
const raw = await import_fs.promises.readFile(filePath, "utf-8");
|
|
135
|
+
const parsed = ModelPickerStateSchema.safeParse(JSON.parse(raw));
|
|
136
|
+
if (!parsed.success) {
|
|
137
|
+
return createDefaultState();
|
|
138
|
+
}
|
|
139
|
+
return normalizeState({ state: parsed.data });
|
|
140
|
+
} catch (error) {
|
|
141
|
+
if (error.code === "ENOENT") {
|
|
142
|
+
return createDefaultState();
|
|
143
|
+
}
|
|
144
|
+
return createDefaultState();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
async function saveModelPickerState(state) {
|
|
148
|
+
const parsed = ModelPickerStateSchema.safeParse(state);
|
|
149
|
+
if (!parsed.success) {
|
|
150
|
+
throw new Error(
|
|
151
|
+
`Invalid model picker state: ${parsed.error.issues.map((issue) => issue.message).join(", ")}`
|
|
152
|
+
);
|
|
153
|
+
}
|
|
154
|
+
const filePath = (0, import_path_resolver.getModelPickerStatePath)();
|
|
155
|
+
const normalized = normalizeState({ state: parsed.data });
|
|
156
|
+
await import_fs.promises.mkdir(import_path.default.dirname(filePath), { recursive: true });
|
|
157
|
+
await import_fs.promises.writeFile(filePath, JSON.stringify(normalized, null, 2), "utf-8");
|
|
158
|
+
}
|
|
159
|
+
async function recordRecentModel(model) {
|
|
160
|
+
const parsedModel = ModelPickerModelSchema.parse(model);
|
|
161
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
162
|
+
const state = await loadModelPickerState();
|
|
163
|
+
const recents = normalizeEntries({
|
|
164
|
+
entries: [createEntry({ model: parsedModel, updatedAt: now }), ...state.recents],
|
|
165
|
+
limit: MODEL_PICKER_RECENTS_LIMIT
|
|
166
|
+
});
|
|
167
|
+
const nextState = {
|
|
168
|
+
version: MODEL_PICKER_STATE_VERSION,
|
|
169
|
+
recents,
|
|
170
|
+
favorites: state.favorites
|
|
171
|
+
};
|
|
172
|
+
await saveModelPickerState(nextState);
|
|
173
|
+
return nextState;
|
|
174
|
+
}
|
|
175
|
+
async function toggleFavoriteModel(model) {
|
|
176
|
+
const parsedModel = ModelPickerModelSchema.parse(model);
|
|
177
|
+
const state = await loadModelPickerState();
|
|
178
|
+
const key = toModelPickerKey(parsedModel);
|
|
179
|
+
const exists = state.favorites.some((entry) => toModelPickerKey(entry) === key);
|
|
180
|
+
const favorites = exists ? state.favorites.filter((entry) => toModelPickerKey(entry) !== key) : normalizeEntries({
|
|
181
|
+
entries: [
|
|
182
|
+
createEntry({
|
|
183
|
+
model: parsedModel,
|
|
184
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
185
|
+
}),
|
|
186
|
+
...state.favorites
|
|
187
|
+
],
|
|
188
|
+
limit: MODEL_PICKER_FAVORITES_LIMIT
|
|
189
|
+
});
|
|
190
|
+
const nextState = {
|
|
191
|
+
version: MODEL_PICKER_STATE_VERSION,
|
|
192
|
+
recents: state.recents,
|
|
193
|
+
favorites
|
|
194
|
+
};
|
|
195
|
+
await saveModelPickerState(nextState);
|
|
196
|
+
return {
|
|
197
|
+
state: nextState,
|
|
198
|
+
isFavorite: !exists
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
async function setFavoriteModels(input) {
|
|
202
|
+
const parsed = SetFavoriteModelsInputSchema.parse(input);
|
|
203
|
+
const state = await loadModelPickerState();
|
|
204
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
205
|
+
const favorites = normalizeEntries({
|
|
206
|
+
entries: parsed.favorites.map(
|
|
207
|
+
(favorite) => createEntry({ model: favorite, updatedAt: now })
|
|
208
|
+
),
|
|
209
|
+
limit: MODEL_PICKER_FAVORITES_LIMIT
|
|
210
|
+
});
|
|
211
|
+
const nextState = {
|
|
212
|
+
version: MODEL_PICKER_STATE_VERSION,
|
|
213
|
+
recents: state.recents,
|
|
214
|
+
favorites
|
|
215
|
+
};
|
|
216
|
+
await saveModelPickerState(nextState);
|
|
217
|
+
return nextState;
|
|
218
|
+
}
|
|
219
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
220
|
+
0 && (module.exports = {
|
|
221
|
+
MODEL_PICKER_FAVORITES_LIMIT,
|
|
222
|
+
MODEL_PICKER_RECENTS_LIMIT,
|
|
223
|
+
MODEL_PICKER_STATE_VERSION,
|
|
224
|
+
loadModelPickerState,
|
|
225
|
+
pruneModelPickerState,
|
|
226
|
+
recordRecentModel,
|
|
227
|
+
saveModelPickerState,
|
|
228
|
+
setFavoriteModels,
|
|
229
|
+
toModelPickerKey,
|
|
230
|
+
toggleFavoriteModel
|
|
231
|
+
});
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type LLMProvider } from '@dexto/core';
|
|
3
|
+
export declare const MODEL_PICKER_STATE_VERSION = 1;
|
|
4
|
+
export declare const MODEL_PICKER_RECENTS_LIMIT = 10;
|
|
5
|
+
export declare const MODEL_PICKER_FAVORITES_LIMIT = 100;
|
|
6
|
+
declare const ModelPickerModelSchema: z.ZodObject<{
|
|
7
|
+
provider: z.ZodEnum<["openai", "openai-compatible", "anthropic", "google", "groq", "xai", "cohere", "minimax", "glm", "openrouter", "litellm", "glama", "vertex", "bedrock", "local", "ollama", "dexto-nova"]>;
|
|
8
|
+
model: z.ZodString;
|
|
9
|
+
}, "strict", z.ZodTypeAny, {
|
|
10
|
+
provider: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | "minimax" | "glm" | "openrouter" | "litellm" | "glama" | "vertex" | "bedrock" | "local" | "ollama" | "dexto-nova";
|
|
11
|
+
model: string;
|
|
12
|
+
}, {
|
|
13
|
+
provider: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | "minimax" | "glm" | "openrouter" | "litellm" | "glama" | "vertex" | "bedrock" | "local" | "ollama" | "dexto-nova";
|
|
14
|
+
model: string;
|
|
15
|
+
}>;
|
|
16
|
+
declare const ModelPickerEntrySchema: z.ZodObject<{
|
|
17
|
+
provider: z.ZodEnum<["openai", "openai-compatible", "anthropic", "google", "groq", "xai", "cohere", "minimax", "glm", "openrouter", "litellm", "glama", "vertex", "bedrock", "local", "ollama", "dexto-nova"]>;
|
|
18
|
+
model: z.ZodString;
|
|
19
|
+
} & {
|
|
20
|
+
updatedAt: z.ZodString;
|
|
21
|
+
}, "strict", z.ZodTypeAny, {
|
|
22
|
+
provider: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | "minimax" | "glm" | "openrouter" | "litellm" | "glama" | "vertex" | "bedrock" | "local" | "ollama" | "dexto-nova";
|
|
23
|
+
model: string;
|
|
24
|
+
updatedAt: string;
|
|
25
|
+
}, {
|
|
26
|
+
provider: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | "minimax" | "glm" | "openrouter" | "litellm" | "glama" | "vertex" | "bedrock" | "local" | "ollama" | "dexto-nova";
|
|
27
|
+
model: string;
|
|
28
|
+
updatedAt: string;
|
|
29
|
+
}>;
|
|
30
|
+
declare const ModelPickerStateSchema: z.ZodObject<{
|
|
31
|
+
version: z.ZodLiteral<1>;
|
|
32
|
+
recents: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
33
|
+
provider: z.ZodEnum<["openai", "openai-compatible", "anthropic", "google", "groq", "xai", "cohere", "minimax", "glm", "openrouter", "litellm", "glama", "vertex", "bedrock", "local", "ollama", "dexto-nova"]>;
|
|
34
|
+
model: z.ZodString;
|
|
35
|
+
} & {
|
|
36
|
+
updatedAt: z.ZodString;
|
|
37
|
+
}, "strict", z.ZodTypeAny, {
|
|
38
|
+
provider: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | "minimax" | "glm" | "openrouter" | "litellm" | "glama" | "vertex" | "bedrock" | "local" | "ollama" | "dexto-nova";
|
|
39
|
+
model: string;
|
|
40
|
+
updatedAt: string;
|
|
41
|
+
}, {
|
|
42
|
+
provider: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | "minimax" | "glm" | "openrouter" | "litellm" | "glama" | "vertex" | "bedrock" | "local" | "ollama" | "dexto-nova";
|
|
43
|
+
model: string;
|
|
44
|
+
updatedAt: string;
|
|
45
|
+
}>, "many">>;
|
|
46
|
+
favorites: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
47
|
+
provider: z.ZodEnum<["openai", "openai-compatible", "anthropic", "google", "groq", "xai", "cohere", "minimax", "glm", "openrouter", "litellm", "glama", "vertex", "bedrock", "local", "ollama", "dexto-nova"]>;
|
|
48
|
+
model: z.ZodString;
|
|
49
|
+
} & {
|
|
50
|
+
updatedAt: z.ZodString;
|
|
51
|
+
}, "strict", z.ZodTypeAny, {
|
|
52
|
+
provider: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | "minimax" | "glm" | "openrouter" | "litellm" | "glama" | "vertex" | "bedrock" | "local" | "ollama" | "dexto-nova";
|
|
53
|
+
model: string;
|
|
54
|
+
updatedAt: string;
|
|
55
|
+
}, {
|
|
56
|
+
provider: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | "minimax" | "glm" | "openrouter" | "litellm" | "glama" | "vertex" | "bedrock" | "local" | "ollama" | "dexto-nova";
|
|
57
|
+
model: string;
|
|
58
|
+
updatedAt: string;
|
|
59
|
+
}>, "many">>;
|
|
60
|
+
}, "strict", z.ZodTypeAny, {
|
|
61
|
+
version: 1;
|
|
62
|
+
recents: {
|
|
63
|
+
provider: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | "minimax" | "glm" | "openrouter" | "litellm" | "glama" | "vertex" | "bedrock" | "local" | "ollama" | "dexto-nova";
|
|
64
|
+
model: string;
|
|
65
|
+
updatedAt: string;
|
|
66
|
+
}[];
|
|
67
|
+
favorites: {
|
|
68
|
+
provider: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | "minimax" | "glm" | "openrouter" | "litellm" | "glama" | "vertex" | "bedrock" | "local" | "ollama" | "dexto-nova";
|
|
69
|
+
model: string;
|
|
70
|
+
updatedAt: string;
|
|
71
|
+
}[];
|
|
72
|
+
}, {
|
|
73
|
+
version: 1;
|
|
74
|
+
recents?: {
|
|
75
|
+
provider: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | "minimax" | "glm" | "openrouter" | "litellm" | "glama" | "vertex" | "bedrock" | "local" | "ollama" | "dexto-nova";
|
|
76
|
+
model: string;
|
|
77
|
+
updatedAt: string;
|
|
78
|
+
}[] | undefined;
|
|
79
|
+
favorites?: {
|
|
80
|
+
provider: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | "minimax" | "glm" | "openrouter" | "litellm" | "glama" | "vertex" | "bedrock" | "local" | "ollama" | "dexto-nova";
|
|
81
|
+
model: string;
|
|
82
|
+
updatedAt: string;
|
|
83
|
+
}[] | undefined;
|
|
84
|
+
}>;
|
|
85
|
+
declare const SetFavoriteModelsInputSchema: z.ZodObject<{
|
|
86
|
+
favorites: z.ZodArray<z.ZodObject<{
|
|
87
|
+
provider: z.ZodEnum<["openai", "openai-compatible", "anthropic", "google", "groq", "xai", "cohere", "minimax", "glm", "openrouter", "litellm", "glama", "vertex", "bedrock", "local", "ollama", "dexto-nova"]>;
|
|
88
|
+
model: z.ZodString;
|
|
89
|
+
}, "strict", z.ZodTypeAny, {
|
|
90
|
+
provider: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | "minimax" | "glm" | "openrouter" | "litellm" | "glama" | "vertex" | "bedrock" | "local" | "ollama" | "dexto-nova";
|
|
91
|
+
model: string;
|
|
92
|
+
}, {
|
|
93
|
+
provider: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | "minimax" | "glm" | "openrouter" | "litellm" | "glama" | "vertex" | "bedrock" | "local" | "ollama" | "dexto-nova";
|
|
94
|
+
model: string;
|
|
95
|
+
}>, "many">;
|
|
96
|
+
}, "strict", z.ZodTypeAny, {
|
|
97
|
+
favorites: {
|
|
98
|
+
provider: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | "minimax" | "glm" | "openrouter" | "litellm" | "glama" | "vertex" | "bedrock" | "local" | "ollama" | "dexto-nova";
|
|
99
|
+
model: string;
|
|
100
|
+
}[];
|
|
101
|
+
}, {
|
|
102
|
+
favorites: {
|
|
103
|
+
provider: "openai" | "openai-compatible" | "anthropic" | "google" | "groq" | "xai" | "cohere" | "minimax" | "glm" | "openrouter" | "litellm" | "glama" | "vertex" | "bedrock" | "local" | "ollama" | "dexto-nova";
|
|
104
|
+
model: string;
|
|
105
|
+
}[];
|
|
106
|
+
}>;
|
|
107
|
+
export type ModelPickerModel = z.output<typeof ModelPickerModelSchema>;
|
|
108
|
+
export type ModelPickerEntry = z.output<typeof ModelPickerEntrySchema>;
|
|
109
|
+
export type ModelPickerState = z.output<typeof ModelPickerStateSchema>;
|
|
110
|
+
export type SetFavoriteModelsInput = z.output<typeof SetFavoriteModelsInputSchema>;
|
|
111
|
+
export declare function toModelPickerKey(input: {
|
|
112
|
+
provider: LLMProvider;
|
|
113
|
+
model: string;
|
|
114
|
+
}): string;
|
|
115
|
+
export declare function pruneModelPickerState(input: {
|
|
116
|
+
state: ModelPickerState;
|
|
117
|
+
allowedKeys: Set<string>;
|
|
118
|
+
}): ModelPickerState;
|
|
119
|
+
export declare function loadModelPickerState(): Promise<ModelPickerState>;
|
|
120
|
+
export declare function saveModelPickerState(state: ModelPickerState): Promise<void>;
|
|
121
|
+
export declare function recordRecentModel(model: ModelPickerModel): Promise<ModelPickerState>;
|
|
122
|
+
export declare function toggleFavoriteModel(model: ModelPickerModel): Promise<{
|
|
123
|
+
state: ModelPickerState;
|
|
124
|
+
isFavorite: boolean;
|
|
125
|
+
}>;
|
|
126
|
+
export declare function setFavoriteModels(input: SetFavoriteModelsInput): Promise<ModelPickerState>;
|
|
127
|
+
export {};
|
|
128
|
+
//# sourceMappingURL=model-picker-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-picker-state.d.ts","sourceRoot":"","sources":["../../src/models/model-picker-state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAG9D,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD,QAAA,MAAM,sBAAsB;;;;;;;;;EAKf,CAAC;AAEd,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;EAEjB,CAAC;AAEZ,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMf,CAAC;AAEd,QAAA,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;EAIrB,CAAC;AAEd,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACvE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACvE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACvE,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAC;AA6DnF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IAAE,QAAQ,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAExF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IACzC,KAAK,EAAE,gBAAgB,CAAC;IACxB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC5B,GAAG,gBAAgB,CAenB;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAkBtE;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAajF;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkB1F;AAED,wBAAsB,mBAAmB,CACrC,KAAK,EAAE,gBAAgB,GACxB,OAAO,CAAC;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,CAAC,CA+B3D;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAoBhG"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import { promises as fs } from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { LLM_PROVIDERS } from "@dexto/core";
|
|
5
|
+
import { getModelPickerStatePath } from "./path-resolver.js";
|
|
6
|
+
const MODEL_PICKER_STATE_VERSION = 1;
|
|
7
|
+
const MODEL_PICKER_RECENTS_LIMIT = 10;
|
|
8
|
+
const MODEL_PICKER_FAVORITES_LIMIT = 100;
|
|
9
|
+
const ModelPickerModelSchema = z.object({
|
|
10
|
+
provider: z.enum(LLM_PROVIDERS),
|
|
11
|
+
model: z.string().trim().min(1)
|
|
12
|
+
}).strict();
|
|
13
|
+
const ModelPickerEntrySchema = ModelPickerModelSchema.extend({
|
|
14
|
+
updatedAt: z.string().datetime()
|
|
15
|
+
}).strict();
|
|
16
|
+
const ModelPickerStateSchema = z.object({
|
|
17
|
+
version: z.literal(MODEL_PICKER_STATE_VERSION),
|
|
18
|
+
recents: z.array(ModelPickerEntrySchema).default([]),
|
|
19
|
+
favorites: z.array(ModelPickerEntrySchema).default([])
|
|
20
|
+
}).strict();
|
|
21
|
+
const SetFavoriteModelsInputSchema = z.object({
|
|
22
|
+
favorites: z.array(ModelPickerModelSchema)
|
|
23
|
+
}).strict();
|
|
24
|
+
function createDefaultState() {
|
|
25
|
+
return {
|
|
26
|
+
version: MODEL_PICKER_STATE_VERSION,
|
|
27
|
+
recents: [],
|
|
28
|
+
favorites: []
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function normalizeEntries(input) {
|
|
32
|
+
const normalized = [];
|
|
33
|
+
const seen = /* @__PURE__ */ new Set();
|
|
34
|
+
for (const entry of input.entries) {
|
|
35
|
+
const parsed = ModelPickerEntrySchema.safeParse(entry);
|
|
36
|
+
if (!parsed.success) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const key = toModelPickerKey(parsed.data);
|
|
40
|
+
if (seen.has(key)) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
seen.add(key);
|
|
44
|
+
normalized.push(parsed.data);
|
|
45
|
+
if (normalized.length >= input.limit) {
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return normalized;
|
|
50
|
+
}
|
|
51
|
+
function normalizeState(input) {
|
|
52
|
+
return {
|
|
53
|
+
version: MODEL_PICKER_STATE_VERSION,
|
|
54
|
+
recents: normalizeEntries({
|
|
55
|
+
entries: input.state.recents,
|
|
56
|
+
limit: MODEL_PICKER_RECENTS_LIMIT
|
|
57
|
+
}),
|
|
58
|
+
favorites: normalizeEntries({
|
|
59
|
+
entries: input.state.favorites,
|
|
60
|
+
limit: MODEL_PICKER_FAVORITES_LIMIT
|
|
61
|
+
})
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
function createEntry(input) {
|
|
65
|
+
return {
|
|
66
|
+
provider: input.model.provider,
|
|
67
|
+
model: input.model.model,
|
|
68
|
+
updatedAt: input.updatedAt
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function toModelPickerKey(input) {
|
|
72
|
+
return `${input.provider}|${input.model}`;
|
|
73
|
+
}
|
|
74
|
+
function pruneModelPickerState(input) {
|
|
75
|
+
const recents = input.state.recents.filter(
|
|
76
|
+
(entry) => input.allowedKeys.has(toModelPickerKey(entry))
|
|
77
|
+
);
|
|
78
|
+
const favorites = input.state.favorites.filter(
|
|
79
|
+
(entry) => input.allowedKeys.has(toModelPickerKey(entry))
|
|
80
|
+
);
|
|
81
|
+
return normalizeState({
|
|
82
|
+
state: {
|
|
83
|
+
version: MODEL_PICKER_STATE_VERSION,
|
|
84
|
+
recents,
|
|
85
|
+
favorites
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
async function loadModelPickerState() {
|
|
90
|
+
const filePath = getModelPickerStatePath();
|
|
91
|
+
try {
|
|
92
|
+
const raw = await fs.readFile(filePath, "utf-8");
|
|
93
|
+
const parsed = ModelPickerStateSchema.safeParse(JSON.parse(raw));
|
|
94
|
+
if (!parsed.success) {
|
|
95
|
+
return createDefaultState();
|
|
96
|
+
}
|
|
97
|
+
return normalizeState({ state: parsed.data });
|
|
98
|
+
} catch (error) {
|
|
99
|
+
if (error.code === "ENOENT") {
|
|
100
|
+
return createDefaultState();
|
|
101
|
+
}
|
|
102
|
+
return createDefaultState();
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async function saveModelPickerState(state) {
|
|
106
|
+
const parsed = ModelPickerStateSchema.safeParse(state);
|
|
107
|
+
if (!parsed.success) {
|
|
108
|
+
throw new Error(
|
|
109
|
+
`Invalid model picker state: ${parsed.error.issues.map((issue) => issue.message).join(", ")}`
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
const filePath = getModelPickerStatePath();
|
|
113
|
+
const normalized = normalizeState({ state: parsed.data });
|
|
114
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
115
|
+
await fs.writeFile(filePath, JSON.stringify(normalized, null, 2), "utf-8");
|
|
116
|
+
}
|
|
117
|
+
async function recordRecentModel(model) {
|
|
118
|
+
const parsedModel = ModelPickerModelSchema.parse(model);
|
|
119
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
120
|
+
const state = await loadModelPickerState();
|
|
121
|
+
const recents = normalizeEntries({
|
|
122
|
+
entries: [createEntry({ model: parsedModel, updatedAt: now }), ...state.recents],
|
|
123
|
+
limit: MODEL_PICKER_RECENTS_LIMIT
|
|
124
|
+
});
|
|
125
|
+
const nextState = {
|
|
126
|
+
version: MODEL_PICKER_STATE_VERSION,
|
|
127
|
+
recents,
|
|
128
|
+
favorites: state.favorites
|
|
129
|
+
};
|
|
130
|
+
await saveModelPickerState(nextState);
|
|
131
|
+
return nextState;
|
|
132
|
+
}
|
|
133
|
+
async function toggleFavoriteModel(model) {
|
|
134
|
+
const parsedModel = ModelPickerModelSchema.parse(model);
|
|
135
|
+
const state = await loadModelPickerState();
|
|
136
|
+
const key = toModelPickerKey(parsedModel);
|
|
137
|
+
const exists = state.favorites.some((entry) => toModelPickerKey(entry) === key);
|
|
138
|
+
const favorites = exists ? state.favorites.filter((entry) => toModelPickerKey(entry) !== key) : normalizeEntries({
|
|
139
|
+
entries: [
|
|
140
|
+
createEntry({
|
|
141
|
+
model: parsedModel,
|
|
142
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
143
|
+
}),
|
|
144
|
+
...state.favorites
|
|
145
|
+
],
|
|
146
|
+
limit: MODEL_PICKER_FAVORITES_LIMIT
|
|
147
|
+
});
|
|
148
|
+
const nextState = {
|
|
149
|
+
version: MODEL_PICKER_STATE_VERSION,
|
|
150
|
+
recents: state.recents,
|
|
151
|
+
favorites
|
|
152
|
+
};
|
|
153
|
+
await saveModelPickerState(nextState);
|
|
154
|
+
return {
|
|
155
|
+
state: nextState,
|
|
156
|
+
isFavorite: !exists
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
async function setFavoriteModels(input) {
|
|
160
|
+
const parsed = SetFavoriteModelsInputSchema.parse(input);
|
|
161
|
+
const state = await loadModelPickerState();
|
|
162
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
163
|
+
const favorites = normalizeEntries({
|
|
164
|
+
entries: parsed.favorites.map(
|
|
165
|
+
(favorite) => createEntry({ model: favorite, updatedAt: now })
|
|
166
|
+
),
|
|
167
|
+
limit: MODEL_PICKER_FAVORITES_LIMIT
|
|
168
|
+
});
|
|
169
|
+
const nextState = {
|
|
170
|
+
version: MODEL_PICKER_STATE_VERSION,
|
|
171
|
+
recents: state.recents,
|
|
172
|
+
favorites
|
|
173
|
+
};
|
|
174
|
+
await saveModelPickerState(nextState);
|
|
175
|
+
return nextState;
|
|
176
|
+
}
|
|
177
|
+
export {
|
|
178
|
+
MODEL_PICKER_FAVORITES_LIMIT,
|
|
179
|
+
MODEL_PICKER_RECENTS_LIMIT,
|
|
180
|
+
MODEL_PICKER_STATE_VERSION,
|
|
181
|
+
loadModelPickerState,
|
|
182
|
+
pruneModelPickerState,
|
|
183
|
+
recordRecentModel,
|
|
184
|
+
saveModelPickerState,
|
|
185
|
+
setFavoriteModels,
|
|
186
|
+
toModelPickerKey,
|
|
187
|
+
toggleFavoriteModel
|
|
188
|
+
};
|
|
@@ -35,6 +35,7 @@ __export(path_resolver_exports, {
|
|
|
35
35
|
getModelDirectory: () => getModelDirectory,
|
|
36
36
|
getModelFilePath: () => getModelFilePath,
|
|
37
37
|
getModelFileSize: () => getModelFileSize,
|
|
38
|
+
getModelPickerStatePath: () => getModelPickerStatePath,
|
|
38
39
|
getModelStatePath: () => getModelStatePath,
|
|
39
40
|
getModelTempDirectory: () => getModelTempDirectory,
|
|
40
41
|
getModelsDirectory: () => getModelsDirectory,
|
|
@@ -58,6 +59,9 @@ function getModelDirectory(modelId) {
|
|
|
58
59
|
function getModelStatePath() {
|
|
59
60
|
return path.join(getModelsDirectory(), "state.json");
|
|
60
61
|
}
|
|
62
|
+
function getModelPickerStatePath() {
|
|
63
|
+
return path.join(getModelsDirectory(), "model-picker-state.json");
|
|
64
|
+
}
|
|
61
65
|
function getModelTempDirectory() {
|
|
62
66
|
return path.join(getModelsDirectory(), ".tmp");
|
|
63
67
|
}
|
|
@@ -145,6 +149,7 @@ function formatSize(bytes) {
|
|
|
145
149
|
getModelDirectory,
|
|
146
150
|
getModelFilePath,
|
|
147
151
|
getModelFileSize,
|
|
152
|
+
getModelPickerStatePath,
|
|
148
153
|
getModelStatePath,
|
|
149
154
|
getModelTempDirectory,
|
|
150
155
|
getModelsDirectory,
|
|
@@ -25,6 +25,11 @@ export declare function getModelDirectory(modelId: string): string;
|
|
|
25
25
|
* Stores download status, hashes, and usage metadata.
|
|
26
26
|
*/
|
|
27
27
|
export declare function getModelStatePath(): string;
|
|
28
|
+
/**
|
|
29
|
+
* Get the path to the model picker state file.
|
|
30
|
+
* Stores recents/favorites shared by CLI and WebUI.
|
|
31
|
+
*/
|
|
32
|
+
export declare function getModelPickerStatePath(): string;
|
|
28
33
|
/**
|
|
29
34
|
* Get the path to the model download temp directory.
|
|
30
35
|
* Used for in-progress downloads.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-resolver.d.ts","sourceRoot":"","sources":["../../src/models/path-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM3D;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI3E;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQzF;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQhG;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ5E;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAQ9D;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAuB1D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQhD"}
|
|
1
|
+
{"version":3,"file":"path-resolver.d.ts","sourceRoot":"","sources":["../../src/models/path-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CAM3D;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI3E;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQzF;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQhG;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ5E;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAQ9D;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAuB1D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQhD"}
|
|
@@ -13,6 +13,9 @@ function getModelDirectory(modelId) {
|
|
|
13
13
|
function getModelStatePath() {
|
|
14
14
|
return path.join(getModelsDirectory(), "state.json");
|
|
15
15
|
}
|
|
16
|
+
function getModelPickerStatePath() {
|
|
17
|
+
return path.join(getModelsDirectory(), "model-picker-state.json");
|
|
18
|
+
}
|
|
16
19
|
function getModelTempDirectory() {
|
|
17
20
|
return path.join(getModelsDirectory(), ".tmp");
|
|
18
21
|
}
|
|
@@ -99,6 +102,7 @@ export {
|
|
|
99
102
|
getModelDirectory,
|
|
100
103
|
getModelFilePath,
|
|
101
104
|
getModelFileSize,
|
|
105
|
+
getModelPickerStatePath,
|
|
102
106
|
getModelStatePath,
|
|
103
107
|
getModelTempDirectory,
|
|
104
108
|
getModelsDirectory,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dexto/agent-management",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.9",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
"dependencies": {
|
|
17
17
|
"yaml": "^2.7.1",
|
|
18
18
|
"zod": "^3.25.0",
|
|
19
|
-
"@dexto/agent-config": "1.6.
|
|
20
|
-
"@dexto/core": "1.6.
|
|
21
|
-
"@dexto/orchestration": "1.6.
|
|
22
|
-
"@dexto/tools-builtins": "1.6.
|
|
19
|
+
"@dexto/agent-config": "1.6.9",
|
|
20
|
+
"@dexto/core": "1.6.9",
|
|
21
|
+
"@dexto/orchestration": "1.6.9",
|
|
22
|
+
"@dexto/tools-builtins": "1.6.9"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@types/node": "^22.13.5"
|