gsd-pi 2.16.0 → 2.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 +39 -0
- package/dist/onboarding.js +2 -2
- package/dist/remote-questions-config.d.ts +10 -0
- package/dist/remote-questions-config.js +36 -0
- package/dist/resources/extensions/gsd/activity-log.ts +37 -7
- package/dist/resources/extensions/gsd/auto-dashboard.ts +4 -0
- package/dist/resources/extensions/gsd/auto-dispatch.ts +9 -3
- package/dist/resources/extensions/gsd/auto-prompts.ts +91 -42
- package/dist/resources/extensions/gsd/auto-recovery.ts +7 -2
- package/dist/resources/extensions/gsd/auto-worktree.ts +33 -4
- package/dist/resources/extensions/gsd/auto.ts +177 -25
- package/dist/resources/extensions/gsd/commands.ts +264 -23
- package/dist/resources/extensions/gsd/complexity.ts +236 -0
- package/dist/resources/extensions/gsd/dispatch-guard.ts +7 -19
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +202 -2
- package/dist/resources/extensions/gsd/files.ts +129 -3
- package/dist/resources/extensions/gsd/git-service.ts +19 -8
- package/dist/resources/extensions/gsd/gitignore.ts +41 -2
- package/dist/resources/extensions/gsd/guided-flow.ts +247 -10
- package/dist/resources/extensions/gsd/index.ts +47 -3
- package/dist/resources/extensions/gsd/metrics.ts +44 -0
- package/dist/resources/extensions/gsd/native-git-bridge.ts +5 -0
- package/dist/resources/extensions/gsd/native-parser-bridge.ts +5 -0
- package/dist/resources/extensions/gsd/paths.ts +9 -0
- package/dist/resources/extensions/gsd/preferences.ts +181 -2
- package/dist/resources/extensions/gsd/prompts/execute-task.md +6 -5
- package/dist/resources/extensions/gsd/prompts/system.md +2 -0
- package/dist/resources/extensions/gsd/queue-order.ts +231 -0
- package/dist/resources/extensions/gsd/queue-reorder-ui.ts +263 -0
- package/dist/resources/extensions/gsd/routing-history.ts +290 -0
- package/dist/resources/extensions/gsd/state.ts +15 -3
- package/dist/resources/extensions/gsd/templates/knowledge.md +19 -0
- package/dist/resources/extensions/gsd/templates/preferences.md +14 -0
- package/dist/resources/extensions/gsd/tests/auto-recovery.test.ts +50 -0
- package/dist/resources/extensions/gsd/tests/auto-worktree.test.ts +20 -0
- package/dist/resources/extensions/gsd/tests/budget-prediction.test.ts +220 -0
- package/dist/resources/extensions/gsd/tests/complexity-routing.test.ts +294 -0
- package/dist/resources/extensions/gsd/tests/context-compression.test.ts +180 -0
- package/dist/resources/extensions/gsd/tests/derive-state-deps.test.ts +99 -0
- package/dist/resources/extensions/gsd/tests/git-service.test.ts +132 -0
- package/dist/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +79 -0
- package/dist/resources/extensions/gsd/tests/knowledge.test.ts +161 -0
- package/dist/resources/extensions/gsd/tests/memory-leak-guards.test.ts +87 -0
- package/dist/resources/extensions/gsd/tests/preferences-git.test.ts +28 -0
- package/dist/resources/extensions/gsd/tests/preferences-wizard-fields.test.ts +168 -0
- package/dist/resources/extensions/gsd/tests/queue-order.test.ts +204 -0
- package/dist/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +281 -0
- package/dist/resources/extensions/gsd/tests/routing-history.test.ts +87 -0
- package/dist/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +139 -0
- package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +130 -0
- package/dist/resources/extensions/gsd/tests/token-profile.test.ts +263 -0
- package/dist/resources/extensions/gsd/types.ts +28 -0
- package/dist/resources/extensions/gsd/worktree-manager.ts +8 -5
- package/dist/resources/extensions/gsd/worktree.ts +24 -2
- package/dist/resources/extensions/shared/next-action-ui.ts +16 -1
- package/package.json +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +493 -13
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +422 -62
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.d.ts +12 -0
- package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.js +9 -22
- package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/google-shared.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/google-shared.test.js +125 -0
- package/packages/pi-ai/dist/providers/google-shared.test.js.map +1 -0
- package/packages/pi-ai/src/models.generated.ts +422 -62
- package/packages/pi-ai/src/providers/google-shared.test.ts +137 -0
- package/packages/pi-ai/src/providers/google-shared.ts +10 -19
- package/packages/pi-coding-agent/dist/cli/args.d.ts +5 -0
- package/packages/pi-coding-agent/dist/cli/args.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/cli/args.js +21 -0
- package/packages/pi-coding-agent/dist/cli/args.js.map +1 -1
- package/packages/pi-coding-agent/dist/cli/list-models.d.ts +14 -3
- package/packages/pi-coding-agent/dist/cli/list-models.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/cli/list-models.js +52 -17
- package/packages/pi-coding-agent/dist/cli/list-models.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/discovery-cache.d.ts +27 -0
- package/packages/pi-coding-agent/dist/core/discovery-cache.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/discovery-cache.js +79 -0
- package/packages/pi-coding-agent/dist/core/discovery-cache.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/discovery-cache.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/discovery-cache.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/discovery-cache.test.js +140 -0
- package/packages/pi-coding-agent/dist/core/discovery-cache.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-discovery.d.ts +35 -0
- package/packages/pi-coding-agent/dist/core/model-discovery.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-discovery.js +162 -0
- package/packages/pi-coding-agent/dist/core/model-discovery.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-discovery.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/model-discovery.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-discovery.test.js +100 -0
- package/packages/pi-coding-agent/dist/core/model-discovery.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry-discovery.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/model-registry-discovery.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry-discovery.test.js +113 -0
- package/packages/pi-coding-agent/dist/core/model-registry-discovery.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts +26 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +98 -0
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/models-json-writer.d.ts +62 -0
- package/packages/pi-coding-agent/dist/core/models-json-writer.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/models-json-writer.js +145 -0
- package/packages/pi-coding-agent/dist/core/models-json-writer.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/models-json-writer.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/models-json-writer.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/models-json-writer.test.js +118 -0
- package/packages/pi-coding-agent/dist/core/models-json-writer.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +9 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +11 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
- package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.d.ts +7 -7
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.js +209 -13
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js +67 -0
- package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/index.d.ts +5 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +4 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/main.js +17 -2
- package/packages/pi-coding-agent/dist/main.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/index.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/index.js +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts +25 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js +121 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/provider-manager.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +32 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +10 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
- package/packages/pi-coding-agent/src/cli/args.ts +21 -0
- package/packages/pi-coding-agent/src/cli/list-models.ts +70 -17
- package/packages/pi-coding-agent/src/core/discovery-cache.test.ts +170 -0
- package/packages/pi-coding-agent/src/core/discovery-cache.ts +97 -0
- package/packages/pi-coding-agent/src/core/model-discovery.test.ts +125 -0
- package/packages/pi-coding-agent/src/core/model-discovery.ts +231 -0
- package/packages/pi-coding-agent/src/core/model-registry-discovery.test.ts +135 -0
- package/packages/pi-coding-agent/src/core/model-registry.ts +107 -0
- package/packages/pi-coding-agent/src/core/models-json-writer.test.ts +145 -0
- package/packages/pi-coding-agent/src/core/models-json-writer.ts +188 -0
- package/packages/pi-coding-agent/src/core/settings-manager.ts +21 -0
- package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
- package/packages/pi-coding-agent/src/core/tools/edit-diff.test.ts +85 -0
- package/packages/pi-coding-agent/src/core/tools/edit-diff.ts +245 -17
- package/packages/pi-coding-agent/src/index.ts +5 -0
- package/packages/pi-coding-agent/src/main.ts +19 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/index.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/model-selector.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/provider-manager.ts +163 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +37 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +13 -0
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +10 -0
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/src/resources/extensions/gsd/activity-log.ts +37 -7
- package/src/resources/extensions/gsd/auto-dashboard.ts +4 -0
- package/src/resources/extensions/gsd/auto-dispatch.ts +9 -3
- package/src/resources/extensions/gsd/auto-prompts.ts +91 -42
- package/src/resources/extensions/gsd/auto-recovery.ts +7 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +33 -4
- package/src/resources/extensions/gsd/auto.ts +177 -25
- package/src/resources/extensions/gsd/commands.ts +264 -23
- package/src/resources/extensions/gsd/complexity.ts +236 -0
- package/src/resources/extensions/gsd/dispatch-guard.ts +7 -19
- package/src/resources/extensions/gsd/docs/preferences-reference.md +202 -2
- package/src/resources/extensions/gsd/files.ts +129 -3
- package/src/resources/extensions/gsd/git-service.ts +19 -8
- package/src/resources/extensions/gsd/gitignore.ts +41 -2
- package/src/resources/extensions/gsd/guided-flow.ts +247 -10
- package/src/resources/extensions/gsd/index.ts +47 -3
- package/src/resources/extensions/gsd/metrics.ts +44 -0
- package/src/resources/extensions/gsd/native-git-bridge.ts +5 -0
- package/src/resources/extensions/gsd/native-parser-bridge.ts +5 -0
- package/src/resources/extensions/gsd/paths.ts +9 -0
- package/src/resources/extensions/gsd/preferences.ts +181 -2
- package/src/resources/extensions/gsd/prompts/execute-task.md +6 -5
- package/src/resources/extensions/gsd/prompts/system.md +2 -0
- package/src/resources/extensions/gsd/queue-order.ts +231 -0
- package/src/resources/extensions/gsd/queue-reorder-ui.ts +263 -0
- package/src/resources/extensions/gsd/routing-history.ts +290 -0
- package/src/resources/extensions/gsd/state.ts +15 -3
- package/src/resources/extensions/gsd/templates/knowledge.md +19 -0
- package/src/resources/extensions/gsd/templates/preferences.md +14 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +50 -0
- package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/budget-prediction.test.ts +220 -0
- package/src/resources/extensions/gsd/tests/complexity-routing.test.ts +294 -0
- package/src/resources/extensions/gsd/tests/context-compression.test.ts +180 -0
- package/src/resources/extensions/gsd/tests/derive-state-deps.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/git-service.test.ts +132 -0
- package/src/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/knowledge.test.ts +161 -0
- package/src/resources/extensions/gsd/tests/memory-leak-guards.test.ts +87 -0
- package/src/resources/extensions/gsd/tests/preferences-git.test.ts +28 -0
- package/src/resources/extensions/gsd/tests/preferences-wizard-fields.test.ts +168 -0
- package/src/resources/extensions/gsd/tests/queue-order.test.ts +204 -0
- package/src/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +281 -0
- package/src/resources/extensions/gsd/tests/routing-history.test.ts +87 -0
- package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/stop-auto-remote.test.ts +130 -0
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +263 -0
- package/src/resources/extensions/gsd/types.ts +28 -0
- package/src/resources/extensions/gsd/worktree-manager.ts +8 -5
- package/src/resources/extensions/gsd/worktree.ts +24 -2
- package/src/resources/extensions/shared/next-action-ui.ts +16 -1
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safe read-modify-write for models.json with file locking.
|
|
3
|
+
* Prevents concurrent writes from corrupting the config file.
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
6
|
+
import { dirname, join } from "path";
|
|
7
|
+
import lockfile from "proper-lockfile";
|
|
8
|
+
import { getAgentDir } from "../config.js";
|
|
9
|
+
export class ModelsJsonWriter {
|
|
10
|
+
constructor(modelsJsonPath) {
|
|
11
|
+
this.modelsJsonPath = modelsJsonPath ?? join(getAgentDir(), "models.json");
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Add a model to a provider. Creates the provider if it doesn't exist.
|
|
15
|
+
*/
|
|
16
|
+
addModel(provider, model, providerConfig) {
|
|
17
|
+
this.withLock((config) => {
|
|
18
|
+
if (!config.providers[provider]) {
|
|
19
|
+
config.providers[provider] = {
|
|
20
|
+
...providerConfig,
|
|
21
|
+
models: [],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
const providerEntry = config.providers[provider];
|
|
25
|
+
if (!providerEntry.models) {
|
|
26
|
+
providerEntry.models = [];
|
|
27
|
+
}
|
|
28
|
+
// Replace existing model with same id, or append
|
|
29
|
+
const existingIndex = providerEntry.models.findIndex((m) => m.id === model.id);
|
|
30
|
+
if (existingIndex >= 0) {
|
|
31
|
+
providerEntry.models[existingIndex] = model;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
providerEntry.models.push(model);
|
|
35
|
+
}
|
|
36
|
+
return config;
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Remove a model from a provider. Removes the provider if no models remain.
|
|
41
|
+
*/
|
|
42
|
+
removeModel(provider, modelId) {
|
|
43
|
+
this.withLock((config) => {
|
|
44
|
+
const providerEntry = config.providers[provider];
|
|
45
|
+
if (!providerEntry?.models)
|
|
46
|
+
return config;
|
|
47
|
+
providerEntry.models = providerEntry.models.filter((m) => m.id !== modelId);
|
|
48
|
+
// Clean up empty provider (no models and no overrides)
|
|
49
|
+
if (providerEntry.models.length === 0 && !providerEntry.modelOverrides) {
|
|
50
|
+
delete config.providers[provider];
|
|
51
|
+
}
|
|
52
|
+
return config;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Set or update an entire provider configuration.
|
|
57
|
+
*/
|
|
58
|
+
setProvider(provider, providerConfig) {
|
|
59
|
+
this.withLock((config) => {
|
|
60
|
+
config.providers[provider] = providerConfig;
|
|
61
|
+
return config;
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Remove a provider and all its models.
|
|
66
|
+
*/
|
|
67
|
+
removeProvider(provider) {
|
|
68
|
+
this.withLock((config) => {
|
|
69
|
+
delete config.providers[provider];
|
|
70
|
+
return config;
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* List all providers and their configurations.
|
|
75
|
+
*/
|
|
76
|
+
listProviders() {
|
|
77
|
+
return this.readConfig();
|
|
78
|
+
}
|
|
79
|
+
readConfig() {
|
|
80
|
+
if (!existsSync(this.modelsJsonPath)) {
|
|
81
|
+
return { providers: {} };
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
const content = readFileSync(this.modelsJsonPath, "utf-8");
|
|
85
|
+
return JSON.parse(content);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return { providers: {} };
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
writeConfig(config) {
|
|
92
|
+
const dir = dirname(this.modelsJsonPath);
|
|
93
|
+
if (!existsSync(dir)) {
|
|
94
|
+
mkdirSync(dir, { recursive: true });
|
|
95
|
+
}
|
|
96
|
+
writeFileSync(this.modelsJsonPath, JSON.stringify(config, null, 2), "utf-8");
|
|
97
|
+
}
|
|
98
|
+
acquireLockWithRetry() {
|
|
99
|
+
const maxAttempts = 10;
|
|
100
|
+
const delayMs = 20;
|
|
101
|
+
let lastError;
|
|
102
|
+
// Ensure file exists for locking
|
|
103
|
+
const dir = dirname(this.modelsJsonPath);
|
|
104
|
+
if (!existsSync(dir)) {
|
|
105
|
+
mkdirSync(dir, { recursive: true });
|
|
106
|
+
}
|
|
107
|
+
if (!existsSync(this.modelsJsonPath)) {
|
|
108
|
+
writeFileSync(this.modelsJsonPath, JSON.stringify({ providers: {} }, null, 2), "utf-8");
|
|
109
|
+
}
|
|
110
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
111
|
+
try {
|
|
112
|
+
return lockfile.lockSync(this.modelsJsonPath, { realpath: false });
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
const code = typeof error === "object" && error !== null && "code" in error
|
|
116
|
+
? String(error.code)
|
|
117
|
+
: undefined;
|
|
118
|
+
if (code !== "ELOCKED" || attempt === maxAttempts) {
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
lastError = error;
|
|
122
|
+
const start = Date.now();
|
|
123
|
+
while (Date.now() - start < delayMs) {
|
|
124
|
+
// Busy-wait (same pattern as auth-storage.ts)
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
throw lastError ?? new Error("Failed to acquire models.json lock");
|
|
129
|
+
}
|
|
130
|
+
withLock(fn) {
|
|
131
|
+
let release;
|
|
132
|
+
try {
|
|
133
|
+
release = this.acquireLockWithRetry();
|
|
134
|
+
const config = this.readConfig();
|
|
135
|
+
const updated = fn(config);
|
|
136
|
+
this.writeConfig(updated);
|
|
137
|
+
}
|
|
138
|
+
finally {
|
|
139
|
+
if (release) {
|
|
140
|
+
release();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=models-json-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models-json-writer.js","sourceRoot":"","sources":["../../src/core/models-json-writer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Safe read-modify-write for models.json with file locking.\n * Prevents concurrent writes from corrupting the config file.\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"fs\";\nimport { dirname, join } from \"path\";\nimport lockfile from \"proper-lockfile\";\nimport { getAgentDir } from \"../config.js\";\n\ninterface ModelDefinition {\n\tid: string;\n\tname?: string;\n\tapi?: string;\n\tbaseUrl?: string;\n\treasoning?: boolean;\n\tinput?: (\"text\" | \"image\")[];\n\tcost?: { input: number; output: number; cacheRead: number; cacheWrite: number };\n\tcontextWindow?: number;\n\tmaxTokens?: number;\n}\n\ninterface ProviderConfig {\n\tbaseUrl?: string;\n\tapiKey?: string;\n\tapi?: string;\n\theaders?: Record<string, string>;\n\tauthHeader?: boolean;\n\tmodels?: ModelDefinition[];\n\tmodelOverrides?: Record<string, Record<string, unknown>>;\n}\n\ninterface ModelsConfig {\n\tproviders: Record<string, ProviderConfig>;\n}\n\nexport class ModelsJsonWriter {\n\tprivate modelsJsonPath: string;\n\n\tconstructor(modelsJsonPath?: string) {\n\t\tthis.modelsJsonPath = modelsJsonPath ?? join(getAgentDir(), \"models.json\");\n\t}\n\n\t/**\n\t * Add a model to a provider. Creates the provider if it doesn't exist.\n\t */\n\taddModel(provider: string, model: ModelDefinition, providerConfig?: Partial<ProviderConfig>): void {\n\t\tthis.withLock((config) => {\n\t\t\tif (!config.providers[provider]) {\n\t\t\t\tconfig.providers[provider] = {\n\t\t\t\t\t...providerConfig,\n\t\t\t\t\tmodels: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst providerEntry = config.providers[provider];\n\t\t\tif (!providerEntry.models) {\n\t\t\t\tproviderEntry.models = [];\n\t\t\t}\n\n\t\t\t// Replace existing model with same id, or append\n\t\t\tconst existingIndex = providerEntry.models.findIndex((m) => m.id === model.id);\n\t\t\tif (existingIndex >= 0) {\n\t\t\t\tproviderEntry.models[existingIndex] = model;\n\t\t\t} else {\n\t\t\t\tproviderEntry.models.push(model);\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\t}\n\n\t/**\n\t * Remove a model from a provider. Removes the provider if no models remain.\n\t */\n\tremoveModel(provider: string, modelId: string): void {\n\t\tthis.withLock((config) => {\n\t\t\tconst providerEntry = config.providers[provider];\n\t\t\tif (!providerEntry?.models) return config;\n\n\t\t\tproviderEntry.models = providerEntry.models.filter((m) => m.id !== modelId);\n\n\t\t\t// Clean up empty provider (no models and no overrides)\n\t\t\tif (providerEntry.models.length === 0 && !providerEntry.modelOverrides) {\n\t\t\t\tdelete config.providers[provider];\n\t\t\t}\n\n\t\t\treturn config;\n\t\t});\n\t}\n\n\t/**\n\t * Set or update an entire provider configuration.\n\t */\n\tsetProvider(provider: string, providerConfig: ProviderConfig): void {\n\t\tthis.withLock((config) => {\n\t\t\tconfig.providers[provider] = providerConfig;\n\t\t\treturn config;\n\t\t});\n\t}\n\n\t/**\n\t * Remove a provider and all its models.\n\t */\n\tremoveProvider(provider: string): void {\n\t\tthis.withLock((config) => {\n\t\t\tdelete config.providers[provider];\n\t\t\treturn config;\n\t\t});\n\t}\n\n\t/**\n\t * List all providers and their configurations.\n\t */\n\tlistProviders(): ModelsConfig {\n\t\treturn this.readConfig();\n\t}\n\n\tprivate readConfig(): ModelsConfig {\n\t\tif (!existsSync(this.modelsJsonPath)) {\n\t\t\treturn { providers: {} };\n\t\t}\n\t\ttry {\n\t\t\tconst content = readFileSync(this.modelsJsonPath, \"utf-8\");\n\t\t\treturn JSON.parse(content) as ModelsConfig;\n\t\t} catch {\n\t\t\treturn { providers: {} };\n\t\t}\n\t}\n\n\tprivate writeConfig(config: ModelsConfig): void {\n\t\tconst dir = dirname(this.modelsJsonPath);\n\t\tif (!existsSync(dir)) {\n\t\t\tmkdirSync(dir, { recursive: true });\n\t\t}\n\t\twriteFileSync(this.modelsJsonPath, JSON.stringify(config, null, 2), \"utf-8\");\n\t}\n\n\tprivate acquireLockWithRetry(): () => void {\n\t\tconst maxAttempts = 10;\n\t\tconst delayMs = 20;\n\t\tlet lastError: unknown;\n\n\t\t// Ensure file exists for locking\n\t\tconst dir = dirname(this.modelsJsonPath);\n\t\tif (!existsSync(dir)) {\n\t\t\tmkdirSync(dir, { recursive: true });\n\t\t}\n\t\tif (!existsSync(this.modelsJsonPath)) {\n\t\t\twriteFileSync(this.modelsJsonPath, JSON.stringify({ providers: {} }, null, 2), \"utf-8\");\n\t\t}\n\n\t\tfor (let attempt = 1; attempt <= maxAttempts; attempt++) {\n\t\t\ttry {\n\t\t\t\treturn lockfile.lockSync(this.modelsJsonPath, { realpath: false });\n\t\t\t} catch (error) {\n\t\t\t\tconst code =\n\t\t\t\t\ttypeof error === \"object\" && error !== null && \"code\" in error\n\t\t\t\t\t\t? String((error as { code?: unknown }).code)\n\t\t\t\t\t\t: undefined;\n\t\t\t\tif (code !== \"ELOCKED\" || attempt === maxAttempts) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tlastError = error;\n\t\t\t\tconst start = Date.now();\n\t\t\t\twhile (Date.now() - start < delayMs) {\n\t\t\t\t\t// Busy-wait (same pattern as auth-storage.ts)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow (lastError as Error) ?? new Error(\"Failed to acquire models.json lock\");\n\t}\n\n\tprivate withLock(fn: (config: ModelsConfig) => ModelsConfig): void {\n\t\tlet release: (() => void) | undefined;\n\t\ttry {\n\t\t\trelease = this.acquireLockWithRetry();\n\t\t\tconst config = this.readConfig();\n\t\t\tconst updated = fn(config);\n\t\t\tthis.writeConfig(updated);\n\t\t} finally {\n\t\t\tif (release) {\n\t\t\t\trelease();\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models-json-writer.test.d.ts","sourceRoot":"","sources":["../../src/core/models-json-writer.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { mkdirSync, readFileSync, rmSync } from "node:fs";
|
|
3
|
+
import { tmpdir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { afterEach, beforeEach, describe, it } from "node:test";
|
|
6
|
+
import { ModelsJsonWriter } from "./models-json-writer.js";
|
|
7
|
+
let testDir;
|
|
8
|
+
let modelsJsonPath;
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
testDir = join(tmpdir(), `models-json-writer-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);
|
|
11
|
+
mkdirSync(testDir, { recursive: true });
|
|
12
|
+
modelsJsonPath = join(testDir, "models.json");
|
|
13
|
+
});
|
|
14
|
+
afterEach(() => {
|
|
15
|
+
try {
|
|
16
|
+
rmSync(testDir, { recursive: true, force: true });
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// Cleanup best-effort
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
function readModels() {
|
|
23
|
+
return JSON.parse(readFileSync(modelsJsonPath, "utf-8"));
|
|
24
|
+
}
|
|
25
|
+
// ─── addModel ────────────────────────────────────────────────────────────────
|
|
26
|
+
describe("ModelsJsonWriter — addModel", () => {
|
|
27
|
+
it("creates file and adds model to new provider", () => {
|
|
28
|
+
const writer = new ModelsJsonWriter(modelsJsonPath);
|
|
29
|
+
writer.addModel("openai", { id: "gpt-4o", name: "GPT-4o" }, { baseUrl: "https://api.openai.com", apiKey: "env:OPENAI_API_KEY", api: "openai" });
|
|
30
|
+
const config = readModels();
|
|
31
|
+
assert.ok(config.providers.openai);
|
|
32
|
+
assert.equal(config.providers.openai.models.length, 1);
|
|
33
|
+
assert.equal(config.providers.openai.models[0].id, "gpt-4o");
|
|
34
|
+
});
|
|
35
|
+
it("appends model to existing provider", () => {
|
|
36
|
+
const writer = new ModelsJsonWriter(modelsJsonPath);
|
|
37
|
+
writer.addModel("openai", { id: "gpt-4o" }, { baseUrl: "https://api.openai.com", apiKey: "env:OPENAI_API_KEY", api: "openai" });
|
|
38
|
+
writer.addModel("openai", { id: "gpt-4o-mini" });
|
|
39
|
+
const config = readModels();
|
|
40
|
+
assert.equal(config.providers.openai.models.length, 2);
|
|
41
|
+
});
|
|
42
|
+
it("replaces model with same id", () => {
|
|
43
|
+
const writer = new ModelsJsonWriter(modelsJsonPath);
|
|
44
|
+
writer.addModel("openai", { id: "gpt-4o", name: "Old" }, { baseUrl: "https://api.openai.com", apiKey: "env:OPENAI_API_KEY", api: "openai" });
|
|
45
|
+
writer.addModel("openai", { id: "gpt-4o", name: "New" });
|
|
46
|
+
const config = readModels();
|
|
47
|
+
assert.equal(config.providers.openai.models.length, 1);
|
|
48
|
+
assert.equal(config.providers.openai.models[0].name, "New");
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
// ─── removeModel ─────────────────────────────────────────────────────────────
|
|
52
|
+
describe("ModelsJsonWriter — removeModel", () => {
|
|
53
|
+
it("removes a model from provider", () => {
|
|
54
|
+
const writer = new ModelsJsonWriter(modelsJsonPath);
|
|
55
|
+
writer.addModel("openai", { id: "gpt-4o" }, { baseUrl: "https://api.openai.com", apiKey: "env:OPENAI_API_KEY", api: "openai" });
|
|
56
|
+
writer.addModel("openai", { id: "gpt-4o-mini" });
|
|
57
|
+
writer.removeModel("openai", "gpt-4o");
|
|
58
|
+
const config = readModels();
|
|
59
|
+
assert.equal(config.providers.openai.models.length, 1);
|
|
60
|
+
assert.equal(config.providers.openai.models[0].id, "gpt-4o-mini");
|
|
61
|
+
});
|
|
62
|
+
it("removes provider when last model is removed", () => {
|
|
63
|
+
const writer = new ModelsJsonWriter(modelsJsonPath);
|
|
64
|
+
writer.addModel("openai", { id: "gpt-4o" }, { baseUrl: "https://api.openai.com", apiKey: "env:OPENAI_API_KEY", api: "openai" });
|
|
65
|
+
writer.removeModel("openai", "gpt-4o");
|
|
66
|
+
const config = readModels();
|
|
67
|
+
assert.equal(config.providers.openai, undefined);
|
|
68
|
+
});
|
|
69
|
+
it("handles removing from nonexistent provider", () => {
|
|
70
|
+
const writer = new ModelsJsonWriter(modelsJsonPath);
|
|
71
|
+
// Should not throw
|
|
72
|
+
writer.removeModel("nonexistent", "model-id");
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
// ─── setProvider / removeProvider ────────────────────────────────────────────
|
|
76
|
+
describe("ModelsJsonWriter — provider operations", () => {
|
|
77
|
+
it("sets a provider configuration", () => {
|
|
78
|
+
const writer = new ModelsJsonWriter(modelsJsonPath);
|
|
79
|
+
writer.setProvider("custom", {
|
|
80
|
+
baseUrl: "http://localhost:8080",
|
|
81
|
+
apiKey: "test-key",
|
|
82
|
+
api: "openai",
|
|
83
|
+
models: [{ id: "local-model" }],
|
|
84
|
+
});
|
|
85
|
+
const config = readModels();
|
|
86
|
+
assert.ok(config.providers.custom);
|
|
87
|
+
assert.equal(config.providers.custom.baseUrl, "http://localhost:8080");
|
|
88
|
+
});
|
|
89
|
+
it("removes a provider", () => {
|
|
90
|
+
const writer = new ModelsJsonWriter(modelsJsonPath);
|
|
91
|
+
writer.setProvider("custom", { baseUrl: "http://localhost:8080" });
|
|
92
|
+
writer.removeProvider("custom");
|
|
93
|
+
const config = readModels();
|
|
94
|
+
assert.equal(config.providers.custom, undefined);
|
|
95
|
+
});
|
|
96
|
+
it("handles removing nonexistent provider", () => {
|
|
97
|
+
const writer = new ModelsJsonWriter(modelsJsonPath);
|
|
98
|
+
writer.removeProvider("nonexistent");
|
|
99
|
+
// Should not throw
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
// ─── listProviders ───────────────────────────────────────────────────────────
|
|
103
|
+
describe("ModelsJsonWriter — listProviders", () => {
|
|
104
|
+
it("returns empty config when file does not exist", () => {
|
|
105
|
+
const writer = new ModelsJsonWriter(join(testDir, "nonexistent.json"));
|
|
106
|
+
const config = writer.listProviders();
|
|
107
|
+
assert.deepEqual(config, { providers: {} });
|
|
108
|
+
});
|
|
109
|
+
it("returns current provider config", () => {
|
|
110
|
+
const writer = new ModelsJsonWriter(modelsJsonPath);
|
|
111
|
+
writer.setProvider("openai", { baseUrl: "https://api.openai.com" });
|
|
112
|
+
writer.setProvider("ollama", { baseUrl: "http://localhost:11434" });
|
|
113
|
+
const config = writer.listProviders();
|
|
114
|
+
assert.ok(config.providers.openai);
|
|
115
|
+
assert.ok(config.providers.ollama);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=models-json-writer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models-json-writer.test.js","sourceRoot":"","sources":["../../src/core/models-json-writer.test.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from \"node:assert/strict\";\nimport { existsSync, mkdirSync, readFileSync, rmSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { afterEach, beforeEach, describe, it } from \"node:test\";\nimport { ModelsJsonWriter } from \"./models-json-writer.js\";\n\nlet testDir: string;\nlet modelsJsonPath: string;\n\nbeforeEach(() => {\n\ttestDir = join(tmpdir(), `models-json-writer-test-${Date.now()}-${Math.random().toString(36).slice(2)}`);\n\tmkdirSync(testDir, { recursive: true });\n\tmodelsJsonPath = join(testDir, \"models.json\");\n});\n\nafterEach(() => {\n\ttry {\n\t\trmSync(testDir, { recursive: true, force: true });\n\t} catch {\n\t\t// Cleanup best-effort\n\t}\n});\n\nfunction readModels(): Record<string, unknown> {\n\treturn JSON.parse(readFileSync(modelsJsonPath, \"utf-8\"));\n}\n\n// ─── addModel ────────────────────────────────────────────────────────────────\n\ndescribe(\"ModelsJsonWriter — addModel\", () => {\n\tit(\"creates file and adds model to new provider\", () => {\n\t\tconst writer = new ModelsJsonWriter(modelsJsonPath);\n\t\twriter.addModel(\"openai\", { id: \"gpt-4o\", name: \"GPT-4o\" }, { baseUrl: \"https://api.openai.com\", apiKey: \"env:OPENAI_API_KEY\", api: \"openai\" });\n\n\t\tconst config = readModels() as any;\n\t\tassert.ok(config.providers.openai);\n\t\tassert.equal(config.providers.openai.models.length, 1);\n\t\tassert.equal(config.providers.openai.models[0].id, \"gpt-4o\");\n\t});\n\n\tit(\"appends model to existing provider\", () => {\n\t\tconst writer = new ModelsJsonWriter(modelsJsonPath);\n\t\twriter.addModel(\"openai\", { id: \"gpt-4o\" }, { baseUrl: \"https://api.openai.com\", apiKey: \"env:OPENAI_API_KEY\", api: \"openai\" });\n\t\twriter.addModel(\"openai\", { id: \"gpt-4o-mini\" });\n\n\t\tconst config = readModels() as any;\n\t\tassert.equal(config.providers.openai.models.length, 2);\n\t});\n\n\tit(\"replaces model with same id\", () => {\n\t\tconst writer = new ModelsJsonWriter(modelsJsonPath);\n\t\twriter.addModel(\"openai\", { id: \"gpt-4o\", name: \"Old\" }, { baseUrl: \"https://api.openai.com\", apiKey: \"env:OPENAI_API_KEY\", api: \"openai\" });\n\t\twriter.addModel(\"openai\", { id: \"gpt-4o\", name: \"New\" });\n\n\t\tconst config = readModels() as any;\n\t\tassert.equal(config.providers.openai.models.length, 1);\n\t\tassert.equal(config.providers.openai.models[0].name, \"New\");\n\t});\n});\n\n// ─── removeModel ─────────────────────────────────────────────────────────────\n\ndescribe(\"ModelsJsonWriter — removeModel\", () => {\n\tit(\"removes a model from provider\", () => {\n\t\tconst writer = new ModelsJsonWriter(modelsJsonPath);\n\t\twriter.addModel(\"openai\", { id: \"gpt-4o\" }, { baseUrl: \"https://api.openai.com\", apiKey: \"env:OPENAI_API_KEY\", api: \"openai\" });\n\t\twriter.addModel(\"openai\", { id: \"gpt-4o-mini\" });\n\n\t\twriter.removeModel(\"openai\", \"gpt-4o\");\n\n\t\tconst config = readModels() as any;\n\t\tassert.equal(config.providers.openai.models.length, 1);\n\t\tassert.equal(config.providers.openai.models[0].id, \"gpt-4o-mini\");\n\t});\n\n\tit(\"removes provider when last model is removed\", () => {\n\t\tconst writer = new ModelsJsonWriter(modelsJsonPath);\n\t\twriter.addModel(\"openai\", { id: \"gpt-4o\" }, { baseUrl: \"https://api.openai.com\", apiKey: \"env:OPENAI_API_KEY\", api: \"openai\" });\n\n\t\twriter.removeModel(\"openai\", \"gpt-4o\");\n\n\t\tconst config = readModels() as any;\n\t\tassert.equal(config.providers.openai, undefined);\n\t});\n\n\tit(\"handles removing from nonexistent provider\", () => {\n\t\tconst writer = new ModelsJsonWriter(modelsJsonPath);\n\t\t// Should not throw\n\t\twriter.removeModel(\"nonexistent\", \"model-id\");\n\t});\n});\n\n// ─── setProvider / removeProvider ────────────────────────────────────────────\n\ndescribe(\"ModelsJsonWriter — provider operations\", () => {\n\tit(\"sets a provider configuration\", () => {\n\t\tconst writer = new ModelsJsonWriter(modelsJsonPath);\n\t\twriter.setProvider(\"custom\", {\n\t\t\tbaseUrl: \"http://localhost:8080\",\n\t\t\tapiKey: \"test-key\",\n\t\t\tapi: \"openai\",\n\t\t\tmodels: [{ id: \"local-model\" }],\n\t\t});\n\n\t\tconst config = readModels() as any;\n\t\tassert.ok(config.providers.custom);\n\t\tassert.equal(config.providers.custom.baseUrl, \"http://localhost:8080\");\n\t});\n\n\tit(\"removes a provider\", () => {\n\t\tconst writer = new ModelsJsonWriter(modelsJsonPath);\n\t\twriter.setProvider(\"custom\", { baseUrl: \"http://localhost:8080\" });\n\t\twriter.removeProvider(\"custom\");\n\n\t\tconst config = readModels() as any;\n\t\tassert.equal(config.providers.custom, undefined);\n\t});\n\n\tit(\"handles removing nonexistent provider\", () => {\n\t\tconst writer = new ModelsJsonWriter(modelsJsonPath);\n\t\twriter.removeProvider(\"nonexistent\");\n\t\t// Should not throw\n\t});\n});\n\n// ─── listProviders ───────────────────────────────────────────────────────────\n\ndescribe(\"ModelsJsonWriter — listProviders\", () => {\n\tit(\"returns empty config when file does not exist\", () => {\n\t\tconst writer = new ModelsJsonWriter(join(testDir, \"nonexistent.json\"));\n\t\tconst config = writer.listProviders();\n\t\tassert.deepEqual(config, { providers: {} });\n\t});\n\n\tit(\"returns current provider config\", () => {\n\t\tconst writer = new ModelsJsonWriter(modelsJsonPath);\n\t\twriter.setProvider(\"openai\", { baseUrl: \"https://api.openai.com\" });\n\t\twriter.setProvider(\"ollama\", { baseUrl: \"http://localhost:11434\" });\n\n\t\tconst config = writer.listProviders();\n\t\tassert.ok(config.providers.openai);\n\t\tassert.ok(config.providers.ollama);\n\t});\n});\n"]}
|
|
@@ -61,6 +61,12 @@ export interface FallbackSettings {
|
|
|
61
61
|
enabled?: boolean;
|
|
62
62
|
chains?: Record<string, FallbackChainEntry[]>;
|
|
63
63
|
}
|
|
64
|
+
export interface ModelDiscoverySettings {
|
|
65
|
+
enabled?: boolean;
|
|
66
|
+
providers?: string[];
|
|
67
|
+
ttlMinutes?: number;
|
|
68
|
+
autoRefreshOnModelSelect?: boolean;
|
|
69
|
+
}
|
|
64
70
|
export type TransportSetting = Transport;
|
|
65
71
|
/**
|
|
66
72
|
* Package source for npm/git packages.
|
|
@@ -112,6 +118,7 @@ export interface Settings {
|
|
|
112
118
|
bashInterceptor?: BashInterceptorSettings;
|
|
113
119
|
taskIsolation?: TaskIsolationSettings;
|
|
114
120
|
fallback?: FallbackSettings;
|
|
121
|
+
modelDiscovery?: ModelDiscoverySettings;
|
|
115
122
|
}
|
|
116
123
|
export type SettingsScope = "global" | "project";
|
|
117
124
|
export interface SettingsStorage {
|
|
@@ -287,5 +294,7 @@ export declare class SettingsManager {
|
|
|
287
294
|
enabled: boolean;
|
|
288
295
|
chains: Record<string, FallbackChainEntry[]>;
|
|
289
296
|
};
|
|
297
|
+
getModelDiscoverySettings(): ModelDiscoverySettings;
|
|
298
|
+
setModelDiscoveryEnabled(enabled: boolean): void;
|
|
290
299
|
}
|
|
291
300
|
//# sourceMappingURL=settings-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-manager.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"settings-manager.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -753,5 +753,16 @@ export class SettingsManager {
|
|
|
753
753
|
chains: this.getFallbackChains(),
|
|
754
754
|
};
|
|
755
755
|
}
|
|
756
|
+
getModelDiscoverySettings() {
|
|
757
|
+
return this.settings.modelDiscovery ?? {};
|
|
758
|
+
}
|
|
759
|
+
setModelDiscoveryEnabled(enabled) {
|
|
760
|
+
if (!this.globalSettings.modelDiscovery) {
|
|
761
|
+
this.globalSettings.modelDiscovery = {};
|
|
762
|
+
}
|
|
763
|
+
this.globalSettings.modelDiscovery.enabled = enabled;
|
|
764
|
+
this.markModified("modelDiscovery", "enabled");
|
|
765
|
+
this.save();
|
|
766
|
+
}
|
|
756
767
|
}
|
|
757
768
|
//# sourceMappingURL=settings-manager.js.map
|