@theia/ai-core 1.76.0-next.23 → 1.76.0-next.33

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.
Files changed (111) hide show
  1. package/lib/browser/ai-core-frontend-module.d.ts.map +1 -1
  2. package/lib/browser/ai-core-frontend-module.js +4 -0
  3. package/lib/browser/ai-core-frontend-module.js.map +1 -1
  4. package/lib/browser/discovering-provider-contribution.d.ts +92 -0
  5. package/lib/browser/discovering-provider-contribution.d.ts.map +1 -0
  6. package/lib/browser/discovering-provider-contribution.js +189 -0
  7. package/lib/browser/discovering-provider-contribution.js.map +1 -0
  8. package/lib/browser/discovering-provider-contribution.spec.d.ts +2 -0
  9. package/lib/browser/discovering-provider-contribution.spec.d.ts.map +1 -0
  10. package/lib/browser/discovering-provider-contribution.spec.js +232 -0
  11. package/lib/browser/discovering-provider-contribution.spec.js.map +1 -0
  12. package/lib/browser/favorite-models-service.d.ts +135 -0
  13. package/lib/browser/favorite-models-service.d.ts.map +1 -0
  14. package/lib/browser/favorite-models-service.js +279 -0
  15. package/lib/browser/favorite-models-service.js.map +1 -0
  16. package/lib/browser/favorite-models-service.spec.d.ts +2 -0
  17. package/lib/browser/favorite-models-service.spec.d.ts.map +1 -0
  18. package/lib/browser/favorite-models-service.spec.js +277 -0
  19. package/lib/browser/favorite-models-service.spec.js.map +1 -0
  20. package/lib/browser/index.d.ts +3 -0
  21. package/lib/browser/index.d.ts.map +1 -1
  22. package/lib/browser/index.js +3 -0
  23. package/lib/browser/index.js.map +1 -1
  24. package/lib/browser/model-discovery-status-service.d.ts +51 -0
  25. package/lib/browser/model-discovery-status-service.d.ts.map +1 -0
  26. package/lib/browser/model-discovery-status-service.js +103 -0
  27. package/lib/browser/model-discovery-status-service.js.map +1 -0
  28. package/lib/browser/model-discovery-status-service.spec.d.ts +2 -0
  29. package/lib/browser/model-discovery-status-service.spec.d.ts.map +1 -0
  30. package/lib/browser/model-discovery-status-service.spec.js +81 -0
  31. package/lib/browser/model-discovery-status-service.spec.js.map +1 -0
  32. package/lib/common/ai-core-preferences.d.ts +11 -0
  33. package/lib/common/ai-core-preferences.d.ts.map +1 -1
  34. package/lib/common/ai-core-preferences.js +37 -1
  35. package/lib/common/ai-core-preferences.js.map +1 -1
  36. package/lib/common/index.d.ts +2 -0
  37. package/lib/common/index.d.ts.map +1 -1
  38. package/lib/common/index.js +2 -0
  39. package/lib/common/index.js.map +1 -1
  40. package/lib/common/language-model-ordering.spec.d.ts +2 -0
  41. package/lib/common/language-model-ordering.spec.d.ts.map +1 -0
  42. package/lib/common/language-model-ordering.spec.js +72 -0
  43. package/lib/common/language-model-ordering.spec.js.map +1 -0
  44. package/lib/common/language-model-util.d.ts +17 -1
  45. package/lib/common/language-model-util.d.ts.map +1 -1
  46. package/lib/common/language-model-util.js +44 -1
  47. package/lib/common/language-model-util.js.map +1 -1
  48. package/lib/common/language-model.d.ts +12 -0
  49. package/lib/common/language-model.d.ts.map +1 -1
  50. package/lib/common/language-model.js +16 -0
  51. package/lib/common/language-model.js.map +1 -1
  52. package/lib/common/language-model.spec.js +13 -0
  53. package/lib/common/language-model.spec.js.map +1 -1
  54. package/lib/common/model-discovery-status.d.ts +112 -0
  55. package/lib/common/model-discovery-status.d.ts.map +1 -0
  56. package/lib/common/model-discovery-status.js +18 -0
  57. package/lib/common/model-discovery-status.js.map +1 -0
  58. package/lib/common/model-discovery-util.d.ts +46 -0
  59. package/lib/common/model-discovery-util.d.ts.map +1 -0
  60. package/lib/common/model-discovery-util.js +128 -0
  61. package/lib/common/model-discovery-util.js.map +1 -0
  62. package/lib/common/model-discovery-util.spec.d.ts +2 -0
  63. package/lib/common/model-discovery-util.spec.d.ts.map +1 -0
  64. package/lib/common/model-discovery-util.spec.js +95 -0
  65. package/lib/common/model-discovery-util.spec.js.map +1 -0
  66. package/lib/node/ai-core-backend-module.d.ts.map +1 -1
  67. package/lib/node/ai-core-backend-module.js +8 -0
  68. package/lib/node/ai-core-backend-module.js.map +1 -1
  69. package/lib/node/backend-language-model-registry.d.ts.map +1 -1
  70. package/lib/node/backend-language-model-registry.js +1 -0
  71. package/lib/node/backend-language-model-registry.js.map +1 -1
  72. package/lib/node/index.d.ts +2 -0
  73. package/lib/node/index.d.ts.map +1 -1
  74. package/lib/node/index.js +2 -0
  75. package/lib/node/index.js.map +1 -1
  76. package/lib/node/model-discovery-fetcher.d.ts +43 -0
  77. package/lib/node/model-discovery-fetcher.d.ts.map +1 -0
  78. package/lib/node/model-discovery-fetcher.js +83 -0
  79. package/lib/node/model-discovery-fetcher.js.map +1 -0
  80. package/lib/node/model-snapshot-store.d.ts +26 -0
  81. package/lib/node/model-snapshot-store.d.ts.map +1 -0
  82. package/lib/node/model-snapshot-store.js +73 -0
  83. package/lib/node/model-snapshot-store.js.map +1 -0
  84. package/lib/node/test/test-model-discovery-fetcher.d.ts +21 -0
  85. package/lib/node/test/test-model-discovery-fetcher.d.ts.map +1 -0
  86. package/lib/node/test/test-model-discovery-fetcher.js +54 -0
  87. package/lib/node/test/test-model-discovery-fetcher.js.map +1 -0
  88. package/package.json +11 -11
  89. package/src/browser/ai-core-frontend-module.ts +5 -0
  90. package/src/browser/discovering-provider-contribution.spec.ts +303 -0
  91. package/src/browser/discovering-provider-contribution.ts +241 -0
  92. package/src/browser/favorite-models-service.spec.ts +336 -0
  93. package/src/browser/favorite-models-service.ts +297 -0
  94. package/src/browser/index.ts +3 -0
  95. package/src/browser/model-discovery-status-service.spec.ts +95 -0
  96. package/src/browser/model-discovery-status-service.ts +118 -0
  97. package/src/common/ai-core-preferences.ts +40 -0
  98. package/src/common/index.ts +2 -0
  99. package/src/common/language-model-ordering.spec.ts +83 -0
  100. package/src/common/language-model-util.ts +43 -0
  101. package/src/common/language-model.spec.ts +14 -0
  102. package/src/common/language-model.ts +22 -0
  103. package/src/common/model-discovery-status.ts +132 -0
  104. package/src/common/model-discovery-util.spec.ts +105 -0
  105. package/src/common/model-discovery-util.ts +129 -0
  106. package/src/node/ai-core-backend-module.ts +8 -0
  107. package/src/node/backend-language-model-registry.ts +1 -0
  108. package/src/node/index.ts +2 -0
  109. package/src/node/model-discovery-fetcher.ts +103 -0
  110. package/src/node/model-snapshot-store.ts +80 -0
  111. package/src/node/test/test-model-discovery-fetcher.ts +62 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ai-core-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/ai-core-frontend-module.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;;AAwE/D,wBAyIG"}
1
+ {"version":3,"file":"ai-core-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/ai-core-frontend-module.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;;AA0E/D,wBA4IG"}
@@ -20,6 +20,8 @@ const service_connection_provider_1 = require("@theia/core/lib/browser/messaging
20
20
  const inversify_1 = require("@theia/core/shared/inversify");
21
21
  const frontend_language_model_alias_registry_1 = require("./frontend-language-model-alias-registry");
22
22
  const hide_ai_preferences_contribution_1 = require("./hide-ai-preferences-contribution");
23
+ const model_discovery_status_service_1 = require("./model-discovery-status-service");
24
+ const favorite_models_service_1 = require("./favorite-models-service");
23
25
  const trust_aware_preference_reader_1 = require("./trust-aware-preference-reader");
24
26
  const ai_configuration_service_impl_1 = require("./ai-configuration-service-impl");
25
27
  const language_model_alias_1 = require("../common/language-model-alias");
@@ -148,6 +150,8 @@ exports.default = new inversify_1.ContainerModule(bind => {
148
150
  bind(core_1.PreferenceContribution).to(hide_ai_preferences_contribution_1.HideAiPreferencesContribution).inSingletonScope();
149
151
  // ...and leave a single placeholder entry there that links to the AI Configuration view.
150
152
  bind(core_1.PreferenceContribution).toConstantValue({ schema: hide_ai_preferences_contribution_1.aiConfigurationOpenPlaceholderSchema });
153
+ bind(model_discovery_status_service_1.ModelDiscoveryStatusService).toSelf().inSingletonScope();
154
+ bind(favorite_models_service_1.FavoriteModelsService).toSelf().inSingletonScope();
151
155
  // Internal implementation detail of AiConfigurationService; consumers inject AiConfigurationService.
152
156
  bind(trust_aware_preference_reader_1.TrustAwarePreferenceReader).toSelf().inSingletonScope();
153
157
  bind(ai_configuration_service_impl_1.AiConfigurationServiceImpl).toSelf().inSingletonScope();
@@ -1 +1 @@
1
- {"version":3,"file":"ai-core-frontend-module.js","sourceRoot":"","sources":["../../src/browser/ai-core-frontend-module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-core-frontend-module.js","sourceRoot":"","sources":["../../src/browser/ai-core-frontend-module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import { MessageService, PreferenceChange, PreferenceService } from '@theia/core';
2
+ import { FrontendApplicationContribution } from '@theia/core/lib/browser';
3
+ import { ApiKeySource, DiscoveredModel, ModelDiscoveryResult } from '../common/model-discovery-status';
4
+ import { ModelDiscoveryStatusService } from './model-discovery-status-service';
5
+ /** The part of a provider's language model manager that a discovery run drives. */
6
+ export interface DiscoveringLanguageModelsManager<T> {
7
+ /** Asks the provider which models it offers; see {@link ModelDiscoveryResult} for the failure cases. */
8
+ fetchAvailableModels(): Promise<ModelDiscoveryResult>;
9
+ /** Where the effective API key comes from, which decides whether a run can proceed. */
10
+ getApiKeySource(): Promise<ApiKeySource>;
11
+ /** Allows or refuses the use of an API key found in the environment. */
12
+ setAllowEnvironmentApiKey(allowed: boolean): void;
13
+ createOrUpdateLanguageModels(...modelDescriptions: T[]): Promise<void>;
14
+ removeLanguageModels(...modelIds: string[]): void;
15
+ }
16
+ /**
17
+ * What a discovery run tells the user, in the provider's own words. Each message names the provider
18
+ * and its key, so they cannot be shared: a localization key has to be a literal to be extracted.
19
+ */
20
+ export interface ModelDiscoveryMessages {
21
+ /** No credential is configured at all, and where to put one. */
22
+ readonly noCredentials: string;
23
+ /** An API key was found in the environment and waits for the user's confirmation. */
24
+ readonly consentRequired: string;
25
+ /** The question that asks for that confirmation, naming the environment variable it found. */
26
+ readonly consentPrompt: string;
27
+ /** Label of the button that grants it. */
28
+ readonly useEnvironmentKey: string;
29
+ /** The model list is configured by hand, so the provider is not asked what it offers. */
30
+ readonly overridden: string;
31
+ /** Cached models are being served because the last refresh failed with `error`. */
32
+ cached(error: string): string;
33
+ }
34
+ /**
35
+ * The shared half of a provider that discovers its language models: it asks the provider what it
36
+ * offers, registers the answer, unregisters what disappeared, and reports the state of all of that
37
+ * to the {@link ModelDiscoveryStatusService} so the provider's page can show it.
38
+ *
39
+ * A provider brings what only it can know: its id, its manager, the preferences it reads, how a
40
+ * discovered model becomes a model description, and the messages that name it. Everything a provider
41
+ * does beyond discovery (a custom endpoint, a proxy, its own retry settings) stays in the subclass,
42
+ * which hooks into {@link initializeProvider} and {@link handlePreferenceChange}.
43
+ */
44
+ export declare abstract class DiscoveringProviderContribution<T> implements FrontendApplicationContribution {
45
+ protected readonly preferenceService: PreferenceService;
46
+ protected readonly discoveryStatus: ModelDiscoveryStatusService;
47
+ protected readonly messageService: MessageService;
48
+ /** Provider node id, e.g. `anthropic`. Matches the provider's node in the Models category. */
49
+ protected abstract readonly providerId: string;
50
+ /** Human-readable provider name, e.g. `Anthropic`. */
51
+ protected abstract readonly providerLabel: string;
52
+ protected abstract readonly manager: DiscoveringLanguageModelsManager<T>;
53
+ /** Preference holding an explicit model list that replaces discovery. */
54
+ protected abstract readonly modelOverridesPreference: string;
55
+ /** Preference holding the consent to use an API key found in the environment. */
56
+ protected abstract readonly allowEnvironmentApiKeyPreference: string;
57
+ /** Prefix of this provider's registered model ids. Defaults to {@link providerId}. */
58
+ protected get modelIdPrefix(): string;
59
+ protected abstract get discoveryMessages(): ModelDiscoveryMessages;
60
+ /** Turns a model the provider reported into the description its manager registers. */
61
+ protected abstract createModelDescription(model: DiscoveredModel): T;
62
+ /** The models registered from the last discovery, as the provider reported them. */
63
+ protected discoveredModels: DiscoveredModel[];
64
+ /** Ensures the env-key consent prompt is shown at most once per session. */
65
+ protected envConsentPrompted: boolean;
66
+ protected discovering: Promise<void>;
67
+ onStart(): void;
68
+ /**
69
+ * Hands the provider's own configuration to its manager, before the first discovery run asks it
70
+ * anything. Also the place to register the models and listeners that discovery does not cover.
71
+ */
72
+ protected initializeProvider(): void;
73
+ /** Handles a change to a preference of this provider that is not part of discovery itself. */
74
+ protected handlePreferenceChange(event: PreferenceChange): void;
75
+ /** Fetches what the provider offers and registers it, removing whatever disappeared. */
76
+ protected discoverAndRegisterModels(): Promise<void>;
77
+ protected runDiscovery(): Promise<void>;
78
+ /** Registers the discovered models and unregisters the ones that are no longer offered. */
79
+ protected applyDiscoveredModels(models: DiscoveredModel[]): Promise<void>;
80
+ /** Re-applies the descriptions of the already-discovered models, after a preference that feeds them changed. */
81
+ protected updateDiscoveredModels(): void;
82
+ protected removeAllDiscoveredModels(): void;
83
+ protected qualifiedModelId(modelId: string): string;
84
+ protected getModelOverrides(): string[];
85
+ protected isEnvironmentApiKeyAllowed(): boolean;
86
+ /**
87
+ * Asks the user once per session to confirm using an environment-provided API key. Confirming
88
+ * persists {@link allowEnvironmentApiKeyPreference}, which re-triggers discovery.
89
+ */
90
+ protected promptEnvironmentApiKeyConsentOnce(): void;
91
+ }
92
+ //# sourceMappingURL=discovering-provider-contribution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovering-provider-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/discovering-provider-contribution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 EclipseSource GmbH.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.DiscoveringProviderContribution = void 0;
19
+ const tslib_1 = require("tslib");
20
+ const core_1 = require("@theia/core");
21
+ const inversify_1 = require("@theia/core/shared/inversify");
22
+ const model_discovery_status_service_1 = require("./model-discovery-status-service");
23
+ /**
24
+ * The shared half of a provider that discovers its language models: it asks the provider what it
25
+ * offers, registers the answer, unregisters what disappeared, and reports the state of all of that
26
+ * to the {@link ModelDiscoveryStatusService} so the provider's page can show it.
27
+ *
28
+ * A provider brings what only it can know: its id, its manager, the preferences it reads, how a
29
+ * discovered model becomes a model description, and the messages that name it. Everything a provider
30
+ * does beyond discovery (a custom endpoint, a proxy, its own retry settings) stays in the subclass,
31
+ * which hooks into {@link initializeProvider} and {@link handlePreferenceChange}.
32
+ */
33
+ let DiscoveringProviderContribution = class DiscoveringProviderContribution {
34
+ constructor() {
35
+ /** The models registered from the last discovery, as the provider reported them. */
36
+ this.discoveredModels = [];
37
+ /** Ensures the env-key consent prompt is shown at most once per session. */
38
+ this.envConsentPrompted = false;
39
+ this.discovering = Promise.resolve();
40
+ }
41
+ /** Prefix of this provider's registered model ids. Defaults to {@link providerId}. */
42
+ get modelIdPrefix() {
43
+ return this.providerId;
44
+ }
45
+ onStart() {
46
+ this.preferenceService.ready.then(() => {
47
+ // Before any key is read: an environment key stays unused until it has been confirmed.
48
+ this.manager.setAllowEnvironmentApiKey(this.isEnvironmentApiKeyAllowed());
49
+ this.initializeProvider();
50
+ this.discoveryStatus.registerProvider({
51
+ providerId: this.providerId,
52
+ label: this.providerLabel,
53
+ modelIdPrefix: this.modelIdPrefix === this.providerId ? undefined : this.modelIdPrefix,
54
+ refresh: () => this.discoverAndRegisterModels()
55
+ });
56
+ this.discoverAndRegisterModels();
57
+ this.preferenceService.onPreferenceChanged(event => {
58
+ if (event.preferenceName === this.allowEnvironmentApiKeyPreference || event.preferenceName === this.modelOverridesPreference) {
59
+ // Withdrawing the consent has to stop the key being used, not just stop discovering.
60
+ this.manager.setAllowEnvironmentApiKey(this.isEnvironmentApiKeyAllowed());
61
+ this.discoverAndRegisterModels();
62
+ }
63
+ else {
64
+ this.handlePreferenceChange(event);
65
+ }
66
+ });
67
+ });
68
+ }
69
+ /**
70
+ * Hands the provider's own configuration to its manager, before the first discovery run asks it
71
+ * anything. Also the place to register the models and listeners that discovery does not cover.
72
+ */
73
+ initializeProvider() {
74
+ }
75
+ /** Handles a change to a preference of this provider that is not part of discovery itself. */
76
+ handlePreferenceChange(event) {
77
+ }
78
+ /** Fetches what the provider offers and registers it, removing whatever disappeared. */
79
+ async discoverAndRegisterModels() {
80
+ // Runs are queued rather than overlapped: startup, a key change and a manual refresh can all
81
+ // ask within a moment of each other, and two runs in flight would compute what to unregister
82
+ // from the same stale list and leave the registry disagreeing with the provider.
83
+ this.discovering = this.discovering.then(() => this.runDiscovery().catch(error => this.discoveryStatus.reportError(this.providerId, error)));
84
+ return this.discovering;
85
+ }
86
+ async runDiscovery() {
87
+ // A configured model list replaces discovery entirely: the provider is not asked what it
88
+ // offers, so the list is exactly what was configured. This is what pins a catalogue against
89
+ // provider changes, and the way to name models when the list endpoint cannot be reached at all.
90
+ const overrides = this.getModelOverrides();
91
+ if (overrides.length > 0) {
92
+ const configured = overrides.map(id => ({ id }));
93
+ await this.applyDiscoveredModels(configured);
94
+ this.discoveryStatus.updateStatus(this.providerId, {
95
+ state: 'overridden',
96
+ discovered: configured,
97
+ message: this.discoveryMessages.overridden,
98
+ lastFetch: undefined,
99
+ fromCache: false
100
+ });
101
+ return;
102
+ }
103
+ const source = await this.manager.getApiKeySource();
104
+ if (source === 'none') {
105
+ this.removeAllDiscoveredModels();
106
+ this.discoveryStatus.updateStatus(this.providerId, { state: 'no-credentials', message: this.discoveryMessages.noCredentials });
107
+ return;
108
+ }
109
+ // An API key from the environment is only used once the user has confirmed it.
110
+ if (source === 'environment' && !this.isEnvironmentApiKeyAllowed()) {
111
+ this.removeAllDiscoveredModels();
112
+ this.discoveryStatus.updateStatus(this.providerId, { state: 'awaiting-consent', message: this.discoveryMessages.consentRequired });
113
+ this.promptEnvironmentApiKeyConsentOnce();
114
+ return;
115
+ }
116
+ this.discoveryStatus.updateStatus(this.providerId, { state: 'fetching', message: undefined });
117
+ const { models, fromCache, error } = await this.manager.fetchAvailableModels();
118
+ await this.applyDiscoveredModels(models);
119
+ this.discoveryStatus.updateStatus(this.providerId, {
120
+ state: 'ready',
121
+ discovered: models,
122
+ // When served from cache after a failed refresh, keep the models usable but flag staleness.
123
+ message: fromCache && error ? this.discoveryMessages.cached(error) : undefined,
124
+ lastFetch: fromCache ? undefined : Date.now(),
125
+ fromCache
126
+ });
127
+ }
128
+ /** Registers the discovered models and unregisters the ones that are no longer offered. */
129
+ async applyDiscoveredModels(models) {
130
+ const modelIds = models.map(model => model.id);
131
+ const removed = this.discoveredModels.filter(model => !modelIds.includes(model.id));
132
+ this.manager.removeLanguageModels(...removed.map(model => this.qualifiedModelId(model.id)));
133
+ await this.manager.createOrUpdateLanguageModels(...models.map(model => this.createModelDescription(model)));
134
+ this.discoveredModels = models;
135
+ }
136
+ /** Re-applies the descriptions of the already-discovered models, after a preference that feeds them changed. */
137
+ updateDiscoveredModels() {
138
+ this.manager.createOrUpdateLanguageModels(...this.discoveredModels.map(model => this.createModelDescription(model)));
139
+ }
140
+ removeAllDiscoveredModels() {
141
+ if (this.discoveredModels.length > 0) {
142
+ this.manager.removeLanguageModels(...this.discoveredModels.map(model => this.qualifiedModelId(model.id)));
143
+ this.discoveredModels = [];
144
+ }
145
+ }
146
+ qualifiedModelId(modelId) {
147
+ return `${this.modelIdPrefix}/${modelId}`;
148
+ }
149
+ getModelOverrides() {
150
+ return this.preferenceService.get(this.modelOverridesPreference, []);
151
+ }
152
+ isEnvironmentApiKeyAllowed() {
153
+ return this.preferenceService.get(this.allowEnvironmentApiKeyPreference, false);
154
+ }
155
+ /**
156
+ * Asks the user once per session to confirm using an environment-provided API key. Confirming
157
+ * persists {@link allowEnvironmentApiKeyPreference}, which re-triggers discovery.
158
+ */
159
+ promptEnvironmentApiKeyConsentOnce() {
160
+ if (this.envConsentPrompted) {
161
+ return;
162
+ }
163
+ this.envConsentPrompted = true;
164
+ const useKey = this.discoveryMessages.useEnvironmentKey;
165
+ const ignore = core_1.nls.localizeByDefault('Ignore');
166
+ this.messageService.info(this.discoveryMessages.consentPrompt, useKey, ignore).then(choice => {
167
+ if (choice === useKey) {
168
+ this.preferenceService.set(this.allowEnvironmentApiKeyPreference, true, core_1.PreferenceScope.User);
169
+ }
170
+ });
171
+ }
172
+ };
173
+ exports.DiscoveringProviderContribution = DiscoveringProviderContribution;
174
+ tslib_1.__decorate([
175
+ (0, inversify_1.inject)(core_1.PreferenceService),
176
+ tslib_1.__metadata("design:type", Object)
177
+ ], DiscoveringProviderContribution.prototype, "preferenceService", void 0);
178
+ tslib_1.__decorate([
179
+ (0, inversify_1.inject)(model_discovery_status_service_1.ModelDiscoveryStatusService),
180
+ tslib_1.__metadata("design:type", model_discovery_status_service_1.ModelDiscoveryStatusService)
181
+ ], DiscoveringProviderContribution.prototype, "discoveryStatus", void 0);
182
+ tslib_1.__decorate([
183
+ (0, inversify_1.inject)(core_1.MessageService),
184
+ tslib_1.__metadata("design:type", core_1.MessageService)
185
+ ], DiscoveringProviderContribution.prototype, "messageService", void 0);
186
+ exports.DiscoveringProviderContribution = DiscoveringProviderContribution = tslib_1.__decorate([
187
+ (0, inversify_1.injectable)()
188
+ ], DiscoveringProviderContribution);
189
+ //# sourceMappingURL=discovering-provider-contribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovering-provider-contribution.js","sourceRoot":"","sources":["../../src/browser/discovering-provider-contribution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=discovering-provider-contribution.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovering-provider-contribution.spec.d.ts","sourceRoot":"","sources":["../../src/browser/discovering-provider-contribution.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 EclipseSource GmbH.
4
+ //
5
+ // This program and the accompanying materials are made available under the
6
+ // terms of the Eclipse Public License v. 2.0 which is available at
7
+ // http://www.eclipse.org/legal/epl-2.0.
8
+ //
9
+ // This Source Code may also be made available under the following Secondary
10
+ // Licenses when the conditions for such availability set forth in the Eclipse
11
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
+ // with the GNU Classpath Exception which is available at
13
+ // https://www.gnu.org/software/classpath/license.html.
14
+ //
15
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
+ // *****************************************************************************
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ const chai_1 = require("chai");
19
+ const discovering_provider_contribution_1 = require("./discovering-provider-contribution");
20
+ const model_discovery_status_service_1 = require("./model-discovery-status-service");
21
+ const OVERRIDES_PREF = 'test.modelOverrides';
22
+ const ALLOW_ENV_PREF = 'test.allowEnvironmentApiKey';
23
+ class TestManager {
24
+ constructor() {
25
+ this.result = { models: [], fromCache: false };
26
+ /** Consumed one entry per fetch, so a test can give consecutive runs different answers. */
27
+ this.resultQueue = [];
28
+ this.apiKeySource = 'preference';
29
+ this.fetchCalls = 0;
30
+ /** Every registration and removal in the order they happened, e.g. `remove:test/a`. */
31
+ this.calls = [];
32
+ }
33
+ async fetchAvailableModels() {
34
+ this.fetchCalls++;
35
+ if (this.failWith) {
36
+ throw this.failWith;
37
+ }
38
+ return this.resultQueue.shift() ?? this.result;
39
+ }
40
+ async getApiKeySource() {
41
+ return this.apiKeySource;
42
+ }
43
+ setAllowEnvironmentApiKey(allowed) {
44
+ this.allowEnvironmentApiKey = allowed;
45
+ }
46
+ async createOrUpdateLanguageModels(...modelDescriptions) {
47
+ this.calls.push(`register:${modelDescriptions.map(description => description.id).join(',')}`);
48
+ }
49
+ removeLanguageModels(...modelIds) {
50
+ this.calls.push(`remove:${modelIds.join(',')}`);
51
+ }
52
+ }
53
+ class TestContribution extends discovering_provider_contribution_1.DiscoveringProviderContribution {
54
+ constructor(manager) {
55
+ super();
56
+ this.providerId = 'test';
57
+ this.providerLabel = 'Test Provider';
58
+ this.modelOverridesPreference = OVERRIDES_PREF;
59
+ this.allowEnvironmentApiKeyPreference = ALLOW_ENV_PREF;
60
+ this.initialized = 0;
61
+ this.manager = manager;
62
+ }
63
+ get discoveryMessages() {
64
+ return {
65
+ noCredentials: 'no key',
66
+ consentRequired: 'confirm the key',
67
+ consentPrompt: 'may I use the key?',
68
+ useEnvironmentKey: 'Use key',
69
+ overridden: 'configured by hand',
70
+ cached: error => `cached: ${error}`
71
+ };
72
+ }
73
+ createModelDescription(model) {
74
+ return { id: this.qualifiedModelId(model.id), model: model.id };
75
+ }
76
+ initializeProvider() {
77
+ this.initialized++;
78
+ }
79
+ /** The queued entry point, which is protected on the contribution itself. */
80
+ discover() {
81
+ return this.discoverAndRegisterModels();
82
+ }
83
+ }
84
+ class PrefixedContribution extends TestContribution {
85
+ get modelIdPrefix() {
86
+ return 'prefixed';
87
+ }
88
+ }
89
+ function createContribution(preferences = {}, factory = testManager => new TestContribution(testManager)) {
90
+ const manager = new TestManager();
91
+ const contribution = factory(manager);
92
+ const status = new model_discovery_status_service_1.ModelDiscoveryStatusService();
93
+ const written = {};
94
+ const prompts = [];
95
+ let choice;
96
+ const preferenceService = {
97
+ ready: Promise.resolve(),
98
+ get: (name, defaultValue) => (name in preferences ? preferences[name] : defaultValue),
99
+ set: async (name, value) => { written[name] = value; },
100
+ onPreferenceChanged: () => ({ dispose: () => { } })
101
+ };
102
+ const messageService = {
103
+ info: async (text) => {
104
+ prompts.push(text);
105
+ return choice;
106
+ }
107
+ };
108
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
109
+ const internals = contribution;
110
+ internals.preferenceService = preferenceService;
111
+ internals.discoveryStatus = status;
112
+ internals.messageService = messageService;
113
+ return { contribution, manager, status, written, prompts, answer: next => { choice = next; } };
114
+ }
115
+ function discovered(id) {
116
+ return { id };
117
+ }
118
+ describe('DiscoveringProviderContribution', () => {
119
+ it('registers what the provider offers and reports it as ready', async () => {
120
+ const { contribution, manager, status } = createContribution();
121
+ manager.result = { models: [discovered('a'), discovered('b')], fromCache: false };
122
+ await contribution.discover();
123
+ (0, chai_1.expect)(manager.calls).to.deep.equal(['remove:', 'register:test/a,test/b']);
124
+ const reported = status.getStatus('test');
125
+ (0, chai_1.expect)(reported?.state).to.equal('ready');
126
+ (0, chai_1.expect)(reported?.discovered?.map(entry => entry.id)).to.deep.equal(['a', 'b']);
127
+ (0, chai_1.expect)(reported?.lastFetch).to.be.a('number');
128
+ });
129
+ it('unregisters the models a later discovery no longer offers', async () => {
130
+ const { contribution, manager } = createContribution();
131
+ manager.result = { models: [discovered('a'), discovered('b')], fromCache: false };
132
+ await contribution.discover();
133
+ manager.calls.length = 0;
134
+ manager.result = { models: [discovered('b')], fromCache: false };
135
+ await contribution.discover();
136
+ (0, chai_1.expect)(manager.calls).to.deep.equal(['remove:test/a', 'register:test/b']);
137
+ });
138
+ it('qualifies the model ids with the prefix the provider registers under', async () => {
139
+ const { contribution, manager } = createContribution({}, testManager => new PrefixedContribution(testManager));
140
+ manager.result = { models: [discovered('a')], fromCache: false };
141
+ await contribution.discover();
142
+ manager.calls.length = 0;
143
+ manager.result = { models: [], fromCache: false };
144
+ await contribution.discover();
145
+ (0, chai_1.expect)(manager.calls).to.deep.equal(['remove:prefixed/a', 'register:']);
146
+ });
147
+ it('replaces discovery with a configured list without asking the provider', async () => {
148
+ const { contribution, manager, status } = createContribution({ [OVERRIDES_PREF]: ['pinned-1', 'pinned-2'] });
149
+ await contribution.discover();
150
+ (0, chai_1.expect)(manager.fetchCalls).to.equal(0);
151
+ (0, chai_1.expect)(manager.calls).to.deep.equal(['remove:', 'register:test/pinned-1,test/pinned-2']);
152
+ (0, chai_1.expect)(status.getStatus('test')?.state).to.equal('overridden');
153
+ });
154
+ it('drops the registered models and asks for a credential when there is none', async () => {
155
+ const { contribution, manager, status } = createContribution();
156
+ manager.result = { models: [discovered('a')], fromCache: false };
157
+ await contribution.discover();
158
+ manager.calls.length = 0;
159
+ manager.apiKeySource = 'none';
160
+ await contribution.discover();
161
+ (0, chai_1.expect)(manager.calls).to.deep.equal(['remove:test/a']);
162
+ (0, chai_1.expect)(manager.fetchCalls).to.equal(1);
163
+ (0, chai_1.expect)(status.getStatus('test')?.state).to.equal('no-credentials');
164
+ (0, chai_1.expect)(status.getStatus('test')?.message).to.equal('no key');
165
+ });
166
+ it('withholds an environment key until it is confirmed, asking once', async () => {
167
+ const { contribution, manager, status, prompts } = createContribution();
168
+ manager.apiKeySource = 'environment';
169
+ await contribution.discover();
170
+ await contribution.discover();
171
+ (0, chai_1.expect)(manager.fetchCalls).to.equal(0);
172
+ (0, chai_1.expect)(status.getStatus('test')?.state).to.equal('awaiting-consent');
173
+ // Asked once per session, however often the state is reached again.
174
+ (0, chai_1.expect)(prompts).to.deep.equal(['may I use the key?']);
175
+ });
176
+ it('persists the consent when the user grants it', async () => {
177
+ const { contribution, manager, written, answer } = createContribution();
178
+ manager.apiKeySource = 'environment';
179
+ answer('Use key');
180
+ await contribution.discover();
181
+ // The prompt is answered asynchronously, after the run itself has returned.
182
+ await Promise.resolve();
183
+ (0, chai_1.expect)(written[ALLOW_ENV_PREF]).to.equal(true);
184
+ });
185
+ it('uses an environment key once the consent is on record', async () => {
186
+ const { contribution, manager, status } = createContribution({ [ALLOW_ENV_PREF]: true });
187
+ manager.apiKeySource = 'environment';
188
+ manager.result = { models: [discovered('a')], fromCache: false };
189
+ await contribution.discover();
190
+ (0, chai_1.expect)(manager.fetchCalls).to.equal(1);
191
+ (0, chai_1.expect)(status.getStatus('test')?.state).to.equal('ready');
192
+ });
193
+ it('keeps cached models usable and says that they may be stale', async () => {
194
+ const { contribution, status } = createContribution();
195
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
196
+ contribution.manager.result = { models: [discovered('a')], fromCache: true, error: 'network down' };
197
+ await contribution.discover();
198
+ const reported = status.getStatus('test');
199
+ (0, chai_1.expect)(reported?.state).to.equal('ready');
200
+ (0, chai_1.expect)(reported?.fromCache).to.equal(true);
201
+ (0, chai_1.expect)(reported?.message).to.equal('cached: network down');
202
+ // Nothing was fetched, so there is no successful fetch to date.
203
+ (0, chai_1.expect)(reported?.lastFetch).to.equal(undefined);
204
+ });
205
+ it('reports a failed run instead of rejecting, since nobody awaits it', async () => {
206
+ const { contribution, manager, status } = createContribution();
207
+ manager.failWith = new Error('the endpoint is gone');
208
+ // Rejecting here would surface as an unhandled rejection from the unawaited startup call.
209
+ await contribution.discover();
210
+ (0, chai_1.expect)(status.getStatus('test')?.state).to.equal('error');
211
+ (0, chai_1.expect)(status.getStatus('test')?.message).to.equal('the endpoint is gone');
212
+ });
213
+ it('queues overlapping runs so they cannot compute what to unregister from the same list', async () => {
214
+ const { contribution, manager } = createContribution();
215
+ // The runs start before either has fetched, so what they see has to come from the queue.
216
+ manager.resultQueue.push({ models: [discovered('a')], fromCache: false }, { models: [discovered('b')], fromCache: false });
217
+ await Promise.all([contribution.discover(), contribution.discover()]);
218
+ // The second run sees what the first registered, rather than the empty list both started from.
219
+ (0, chai_1.expect)(manager.calls).to.deep.equal(['remove:', 'register:test/a', 'remove:test/a', 'register:test/b']);
220
+ });
221
+ it('registers the provider, hands over the consent and discovers on startup', async () => {
222
+ const { contribution, manager, status } = createContribution();
223
+ manager.result = { models: [discovered('a')], fromCache: false };
224
+ contribution.onStart();
225
+ await contribution.discover();
226
+ (0, chai_1.expect)(status.getStatus('test')?.label).to.equal('Test Provider');
227
+ (0, chai_1.expect)(manager.allowEnvironmentApiKey).to.equal(false);
228
+ (0, chai_1.expect)(contribution.initialized).to.equal(1);
229
+ (0, chai_1.expect)(manager.fetchCalls).to.be.greaterThan(0);
230
+ });
231
+ });
232
+ //# sourceMappingURL=discovering-provider-contribution.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovering-provider-contribution.spec.js","sourceRoot":"","sources":["../../src/browser/discovering-provider-contribution.spec.ts"],"names":[],"mappings":"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"}