@theia/ai-core 1.76.0-next.7 → 1.76.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.
Files changed (128) 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 +233 -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/frontend-language-model-alias-registry.js +1 -1
  21. package/lib/browser/frontend-language-model-service.d.ts.map +1 -1
  22. package/lib/browser/frontend-language-model-service.js +8 -0
  23. package/lib/browser/frontend-language-model-service.js.map +1 -1
  24. package/lib/browser/frontend-language-model-service.spec.d.ts +2 -0
  25. package/lib/browser/frontend-language-model-service.spec.d.ts.map +1 -0
  26. package/lib/browser/frontend-language-model-service.spec.js +76 -0
  27. package/lib/browser/frontend-language-model-service.spec.js.map +1 -0
  28. package/lib/browser/index.d.ts +3 -0
  29. package/lib/browser/index.d.ts.map +1 -1
  30. package/lib/browser/index.js +3 -0
  31. package/lib/browser/index.js.map +1 -1
  32. package/lib/browser/model-discovery-status-service.d.ts +52 -0
  33. package/lib/browser/model-discovery-status-service.d.ts.map +1 -0
  34. package/lib/browser/model-discovery-status-service.js +110 -0
  35. package/lib/browser/model-discovery-status-service.js.map +1 -0
  36. package/lib/browser/model-discovery-status-service.spec.d.ts +2 -0
  37. package/lib/browser/model-discovery-status-service.spec.d.ts.map +1 -0
  38. package/lib/browser/model-discovery-status-service.spec.js +86 -0
  39. package/lib/browser/model-discovery-status-service.spec.js.map +1 -0
  40. package/lib/common/ai-core-preferences.d.ts +11 -0
  41. package/lib/common/ai-core-preferences.d.ts.map +1 -1
  42. package/lib/common/ai-core-preferences.js +37 -1
  43. package/lib/common/ai-core-preferences.js.map +1 -1
  44. package/lib/common/index.d.ts +2 -0
  45. package/lib/common/index.d.ts.map +1 -1
  46. package/lib/common/index.js +2 -0
  47. package/lib/common/index.js.map +1 -1
  48. package/lib/common/language-model-ordering.spec.d.ts +2 -0
  49. package/lib/common/language-model-ordering.spec.d.ts.map +1 -0
  50. package/lib/common/language-model-ordering.spec.js +72 -0
  51. package/lib/common/language-model-ordering.spec.js.map +1 -0
  52. package/lib/common/language-model-util.d.ts +17 -1
  53. package/lib/common/language-model-util.d.ts.map +1 -1
  54. package/lib/common/language-model-util.js +44 -1
  55. package/lib/common/language-model-util.js.map +1 -1
  56. package/lib/common/language-model.d.ts +21 -0
  57. package/lib/common/language-model.d.ts.map +1 -1
  58. package/lib/common/language-model.js +50 -1
  59. package/lib/common/language-model.js.map +1 -1
  60. package/lib/common/language-model.spec.js +36 -0
  61. package/lib/common/language-model.spec.js.map +1 -1
  62. package/lib/common/model-discovery-status.d.ts +112 -0
  63. package/lib/common/model-discovery-status.d.ts.map +1 -0
  64. package/lib/common/model-discovery-status.js +18 -0
  65. package/lib/common/model-discovery-status.js.map +1 -0
  66. package/lib/common/model-discovery-util.d.ts +46 -0
  67. package/lib/common/model-discovery-util.d.ts.map +1 -0
  68. package/lib/common/model-discovery-util.js +128 -0
  69. package/lib/common/model-discovery-util.js.map +1 -0
  70. package/lib/common/model-discovery-util.spec.d.ts +2 -0
  71. package/lib/common/model-discovery-util.spec.d.ts.map +1 -0
  72. package/lib/common/model-discovery-util.spec.js +95 -0
  73. package/lib/common/model-discovery-util.spec.js.map +1 -0
  74. package/lib/common/prompt-service.js +3 -3
  75. package/lib/common/prompt-service.js.map +1 -1
  76. package/lib/common/prompt-service.spec.js +5 -0
  77. package/lib/common/prompt-service.spec.js.map +1 -1
  78. package/lib/node/ai-core-backend-module.d.ts.map +1 -1
  79. package/lib/node/ai-core-backend-module.js +8 -0
  80. package/lib/node/ai-core-backend-module.js.map +1 -1
  81. package/lib/node/backend-language-model-registry.d.ts.map +1 -1
  82. package/lib/node/backend-language-model-registry.js +1 -0
  83. package/lib/node/backend-language-model-registry.js.map +1 -1
  84. package/lib/node/index.d.ts +2 -0
  85. package/lib/node/index.d.ts.map +1 -1
  86. package/lib/node/index.js +2 -0
  87. package/lib/node/index.js.map +1 -1
  88. package/lib/node/model-discovery-fetcher.d.ts +43 -0
  89. package/lib/node/model-discovery-fetcher.d.ts.map +1 -0
  90. package/lib/node/model-discovery-fetcher.js +85 -0
  91. package/lib/node/model-discovery-fetcher.js.map +1 -0
  92. package/lib/node/model-snapshot-store.d.ts +26 -0
  93. package/lib/node/model-snapshot-store.d.ts.map +1 -0
  94. package/lib/node/model-snapshot-store.js +73 -0
  95. package/lib/node/model-snapshot-store.js.map +1 -0
  96. package/lib/node/test/test-model-discovery-fetcher.d.ts +21 -0
  97. package/lib/node/test/test-model-discovery-fetcher.d.ts.map +1 -0
  98. package/lib/node/test/test-model-discovery-fetcher.js +54 -0
  99. package/lib/node/test/test-model-discovery-fetcher.js.map +1 -0
  100. package/package.json +12 -12
  101. package/src/browser/ai-core-frontend-module.ts +5 -0
  102. package/src/browser/discovering-provider-contribution.spec.ts +304 -0
  103. package/src/browser/discovering-provider-contribution.ts +241 -0
  104. package/src/browser/favorite-models-service.spec.ts +336 -0
  105. package/src/browser/favorite-models-service.ts +297 -0
  106. package/src/browser/frontend-language-model-alias-registry.ts +1 -1
  107. package/src/browser/frontend-language-model-service.spec.ts +86 -0
  108. package/src/browser/frontend-language-model-service.ts +9 -1
  109. package/src/browser/index.ts +3 -0
  110. package/src/browser/model-discovery-status-service.spec.ts +101 -0
  111. package/src/browser/model-discovery-status-service.ts +123 -0
  112. package/src/common/ai-core-preferences.ts +40 -0
  113. package/src/common/index.ts +2 -0
  114. package/src/common/language-model-ordering.spec.ts +83 -0
  115. package/src/common/language-model-util.ts +43 -0
  116. package/src/common/language-model.spec.ts +45 -0
  117. package/src/common/language-model.ts +54 -0
  118. package/src/common/model-discovery-status.ts +132 -0
  119. package/src/common/model-discovery-util.spec.ts +105 -0
  120. package/src/common/model-discovery-util.ts +129 -0
  121. package/src/common/prompt-service.spec.ts +6 -0
  122. package/src/common/prompt-service.ts +3 -3
  123. package/src/node/ai-core-backend-module.ts +8 -0
  124. package/src/node/backend-language-model-registry.ts +1 -0
  125. package/src/node/index.ts +2 -0
  126. package/src/node/model-discovery-fetcher.ts +105 -0
  127. package/src/node/model-snapshot-store.ts +80 -0
  128. package/src/node/test/test-model-discovery-fetcher.ts +62 -0
@@ -0,0 +1,277 @@
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 ai_core_preferences_1 = require("../common/ai-core-preferences");
20
+ const favorite_models_service_1 = require("./favorite-models-service");
21
+ function dated(id, released) {
22
+ return { id, released: Date.parse(released) };
23
+ }
24
+ function createService(statuses, marked = [], hidden = []) {
25
+ const service = new favorite_models_service_1.FavoriteModelsService();
26
+ const written = [];
27
+ const stored = {
28
+ [ai_core_preferences_1.PREFERENCE_NAME_FAVORITE_MODELS]: marked,
29
+ [ai_core_preferences_1.PREFERENCE_NAME_HIDDEN_MODELS]: hidden
30
+ };
31
+ const discoveryStatus = { getStatuses: () => statuses };
32
+ const preferenceService = {
33
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
34
+ get: ((name, defaultValue) => stored[name] ?? defaultValue),
35
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
+ set: (async (name, value) => { stored[name] = value; written.push(value); })
37
+ };
38
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
39
+ service.discoveryStatus = discoveryStatus;
40
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
41
+ service.preferenceService = preferenceService;
42
+ return { service, written, stored };
43
+ }
44
+ function status(overrides = {}) {
45
+ return { providerId: 'anthropic', label: 'Anthropic', state: 'ready', ...overrides };
46
+ }
47
+ describe('FavoriteModelsService', () => {
48
+ it('features the five most recently released undated models, never a release-pinned one', () => {
49
+ const { service } = createService([status({
50
+ discovered: [
51
+ dated('claude-opus-5', '2026-04-01'),
52
+ dated('claude-sonnet-5', '2026-02-01'),
53
+ dated('claude-haiku-4-5', '2025-10-01'),
54
+ dated('claude-fable-5', '2025-09-01'),
55
+ dated('claude-opus-4-8', '2025-08-01'),
56
+ dated('claude-opus-4-7', '2025-06-01'),
57
+ dated('claude-opus-5-20260401', '2026-04-01')
58
+ ]
59
+ })]);
60
+ (0, chai_1.expect)(service.isFeatured('anthropic/claude-opus-5')).to.equal(true);
61
+ (0, chai_1.expect)(service.isFeatured('anthropic/claude-opus-4-8')).to.equal(true);
62
+ // The sixth-newest falls outside the featured set.
63
+ (0, chai_1.expect)(service.isFeatured('anthropic/claude-opus-4-7')).to.equal(false);
64
+ // A release-pinned id is never featured, however recent it is.
65
+ (0, chai_1.expect)(service.isFeatured('anthropic/claude-opus-5-20260401')).to.equal(false);
66
+ });
67
+ it('caps a provider that reports no release dates by the versions in its ids', () => {
68
+ const { service } = createService([status({
69
+ providerId: 'google',
70
+ discovered: [
71
+ { id: 'gemini-2.0-pro' }, { id: 'gemini-2.5-flash' }, { id: 'gemini-2.5-pro' },
72
+ { id: 'gemini-3.1-pro-preview' }, { id: 'gemini-3.5-flash' }, { id: 'gemini-3.7-flash' }
73
+ ]
74
+ })]);
75
+ // The highest versions in the ids; the oldest of the six drops out.
76
+ (0, chai_1.expect)(service.isFeatured('google/gemini-3.7-flash')).to.equal(true);
77
+ (0, chai_1.expect)(service.isFeatured('google/gemini-2.5-pro')).to.equal(true);
78
+ (0, chai_1.expect)(service.isFeatured('google/gemini-2.0-pro')).to.equal(false);
79
+ });
80
+ it('features a `-latest` pointer ahead of the versioned ids it stands for', () => {
81
+ const { service } = createService([status({
82
+ providerId: 'google',
83
+ discovered: [
84
+ { id: 'gemini-3.5-flash' }, { id: 'gemini-3.7-flash' }, { id: 'gemini-3.8-flash' },
85
+ { id: 'gemini-3.1-pro-preview' }, { id: 'gemini-2.5-pro' }, { id: 'gemini-flash-latest' }
86
+ ]
87
+ })]);
88
+ // The pointer carries no version, so without a rule of its own it would sort behind all of them.
89
+ (0, chai_1.expect)(service.isFeatured('google/gemini-flash-latest')).to.equal(true);
90
+ (0, chai_1.expect)(service.isFeatured('google/gemini-2.5-pro')).to.equal(false);
91
+ });
92
+ it('offers the pointers and the newest versions for a provider that reports no dates', () => {
93
+ const { service } = createService([status({
94
+ providerId: 'google',
95
+ discovered: [
96
+ { id: 'gemini-flash-latest' }, { id: 'gemini-flash-lite-latest' }, { id: 'gemini-pro-latest' },
97
+ { id: 'gemini-3.8-flash' }, { id: 'gemini-3.7-flash' }, { id: 'gemini-3.5-flash' },
98
+ { id: 'gemini-3.1-pro-preview' }, { id: 'gemini-2.5-pro' }
99
+ ]
100
+ })]);
101
+ (0, chai_1.expect)(service.isFeatured('google/gemini-pro-latest')).to.equal(true);
102
+ (0, chai_1.expect)(service.isFeatured('google/gemini-flash-latest')).to.equal(true);
103
+ (0, chai_1.expect)(service.isFeatured('google/gemini-flash-lite-latest')).to.equal(true);
104
+ // The pointers first, then the newest concrete models fill the rest.
105
+ (0, chai_1.expect)(service.isFeatured('google/gemini-3.8-flash')).to.equal(true);
106
+ (0, chai_1.expect)(service.isFeatured('google/gemini-3.7-flash')).to.equal(true);
107
+ (0, chai_1.expect)(service.isFeatured('google/gemini-3.1-pro-preview')).to.equal(false);
108
+ });
109
+ it('orders a `-latest` id by its release date where the provider reports one', () => {
110
+ const { service } = createService([status({
111
+ providerId: 'openAiOfficial',
112
+ modelIdPrefix: 'openai',
113
+ discovered: [
114
+ dated('gpt-5.6-sol', '2026-02-01'),
115
+ dated('gpt-5.5', '2025-11-01'),
116
+ dated('gpt-5.1', '2025-08-01'),
117
+ dated('gpt-5', '2025-06-01'),
118
+ dated('o4-mini', '2025-04-01'),
119
+ dated('chatgpt-4o-latest', '2024-08-01')
120
+ ]
121
+ })]);
122
+ // A provider that dates its models dates its pointers too, so the pointer rule stays out of it.
123
+ (0, chai_1.expect)(service.isFeatured('openai/gpt-5.6-sol')).to.equal(true);
124
+ (0, chai_1.expect)(service.isFeatured('openai/o4-mini')).to.equal(true);
125
+ (0, chai_1.expect)(service.isFeatured('openai/chatgpt-4o-latest')).to.equal(false);
126
+ });
127
+ it('features what the provider reports as newest, whatever the model aliases name', () => {
128
+ const { service } = createService([status({
129
+ discovered: [
130
+ dated('claude-opus-5', '2026-04-01'),
131
+ dated('claude-sonnet-5', '2026-03-01'),
132
+ dated('claude-fable-5', '2026-02-01'),
133
+ dated('claude-opus-4-8', '2026-01-01'),
134
+ dated('claude-opus-4-7', '2025-12-01'),
135
+ // Named by the built-in aliases, and the oldest of the six: an alias is a curated list of
136
+ // its own, saying which model a purpose uses rather than which are worth offering here.
137
+ dated('claude-haiku-4-5', '2025-10-01')
138
+ ]
139
+ })]);
140
+ (0, chai_1.expect)(service.isFeatured('anthropic/claude-opus-4-7')).to.equal(true);
141
+ (0, chai_1.expect)(service.isFeatured('anthropic/claude-haiku-4-5')).to.equal(false);
142
+ });
143
+ it('prunes the marked and hidden models that a successful discovery no longer offers', () => {
144
+ const { service, stored } = createService([status({ discovered: [dated('claude-opus-5', '2026-04-01')] })], ['anthropic/claude-gone', 'openai/gpt-5.5'], ['anthropic/claude-also-gone', 'anthropic/claude-opus-5']);
145
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
146
+ service.pruneFavorites(status({ discovered: [dated('claude-opus-5', '2026-04-01')] }));
147
+ // Only the vanished models of that provider are dropped; another provider's stars are untouched.
148
+ (0, chai_1.expect)(stored[ai_core_preferences_1.PREFERENCE_NAME_FAVORITE_MODELS]).to.deep.equal(['openai/gpt-5.5']);
149
+ (0, chai_1.expect)(stored[ai_core_preferences_1.PREFERENCE_NAME_HIDDEN_MODELS]).to.deep.equal(['anthropic/claude-opus-5']);
150
+ });
151
+ it('keeps the marked models when the discovery did not actually reach the provider', () => {
152
+ const { service, written } = createService([], ['anthropic/claude-gone']);
153
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
154
+ const prune = (candidate) => service.pruneFavorites(candidate);
155
+ prune(status({ state: 'ready', fromCache: true, discovered: [] }));
156
+ prune(status({ state: 'error' }));
157
+ prune(status({ state: 'no-credentials' }));
158
+ prune(status({ state: 'ready', discovered: undefined }));
159
+ (0, chai_1.expect)(written).to.be.empty;
160
+ });
161
+ it('respects a provider that nominates its own models, as Copilot does across vendors', () => {
162
+ const { service } = createService([status({
163
+ providerId: 'copilot',
164
+ discovered: [
165
+ { id: 'auto', featured: true },
166
+ { id: 'gpt-5', featured: true },
167
+ { id: 'claude-sonnet-4.5', featured: true },
168
+ { id: 'gpt-4.1' },
169
+ { id: 'claude-haiku-4' },
170
+ { id: 'gemini-2.5-pro' }
171
+ ]
172
+ })]);
173
+ (0, chai_1.expect)(service.isFeatured('copilot/auto')).to.equal(true);
174
+ (0, chai_1.expect)(service.isFeatured('copilot/claude-sonnet-4.5')).to.equal(true);
175
+ // Not nominated, and the generic "five newest" ranking does not apply where a provider nominated.
176
+ (0, chai_1.expect)(service.isFeatured('copilot/gpt-4.1')).to.equal(false);
177
+ (0, chai_1.expect)(service.isFeatured('copilot/gemini-2.5-pro')).to.equal(false);
178
+ });
179
+ it('offers exactly what a nominating provider nominated, and nothing beside it', () => {
180
+ const { service } = createService([status({
181
+ providerId: 'copilot',
182
+ discovered: [{ id: 'gpt-5', featured: true }, { id: 'claude-haiku-4' }]
183
+ })]);
184
+ (0, chai_1.expect)(service.isFeatured('copilot/gpt-5')).to.equal(true);
185
+ (0, chai_1.expect)(service.isFeatured('copilot/claude-haiku-4')).to.equal(false);
186
+ });
187
+ it('features a manually configured list in full', () => {
188
+ const { service } = createService([status({
189
+ state: 'overridden',
190
+ discovered: [{ id: 'a' }, { id: 'b' }, { id: 'c' }, { id: 'd' }, { id: 'e' }, { id: 'f' }]
191
+ })]);
192
+ (0, chai_1.expect)(service.isFeatured('anthropic/f')).to.equal(true);
193
+ });
194
+ it('honours the models the user marked', () => {
195
+ const { service } = createService([status({ discovered: [dated('claude-opus-5', '2026-04-01'), dated('claude-opus-4-7', '2024-06-01')] })], ['anthropic/claude-opus-5-20260401']);
196
+ (0, chai_1.expect)(service.isFavorite('anthropic/claude-opus-5-20260401')).to.equal(true);
197
+ (0, chai_1.expect)(service.isFavorite('anthropic/claude-opus-4-7')).to.equal(true); // featured, only two undated ids
198
+ (0, chai_1.expect)(service.isFavorite('anthropic/claude-unknown')).to.equal(false);
199
+ });
200
+ it('treats the models of a provider that does not participate in discovery as favorites', () => {
201
+ const { service } = createService([status({ discovered: [dated('claude-opus-5', '2026-04-01')] })]);
202
+ // Manually configured providers (ollama, hugging face, …) and custom endpoints are the user's own list.
203
+ (0, chai_1.expect)(service.isFavorite('ollama/llama3')).to.equal(true);
204
+ (0, chai_1.expect)(service.isFavorite('my-custom-endpoint-model')).to.equal(true);
205
+ });
206
+ it('honours the model-id prefix when it differs from the provider id', () => {
207
+ const { service } = createService([status({
208
+ providerId: 'openAiOfficial',
209
+ modelIdPrefix: 'openai',
210
+ discovered: [dated('gpt-5.6-sol', '2026-02-01')]
211
+ })]);
212
+ (0, chai_1.expect)(service.isFeatured('openai/gpt-5.6-sol')).to.equal(true);
213
+ });
214
+ describe('resetToDefaults', () => {
215
+ it('drops what the user decided about one provider and leaves the others alone', async () => {
216
+ const { service, stored } = createService([status({ discovered: [dated('claude-opus-5', '2026-04-01')] })], ['anthropic/claude-opus-4-7', 'openai/gpt-5.5'], ['anthropic/claude-opus-5', 'openai/gpt-5.6-sol']);
217
+ (0, chai_1.expect)(service.hasOverrides('anthropic')).to.equal(true);
218
+ await service.resetToDefaults('anthropic');
219
+ (0, chai_1.expect)(stored[ai_core_preferences_1.PREFERENCE_NAME_FAVORITE_MODELS]).to.deep.equal(['openai/gpt-5.5']);
220
+ (0, chai_1.expect)(stored[ai_core_preferences_1.PREFERENCE_NAME_HIDDEN_MODELS]).to.deep.equal(['openai/gpt-5.6-sol']);
221
+ (0, chai_1.expect)(service.hasOverrides('anthropic')).to.equal(false);
222
+ (0, chai_1.expect)(service.hasOverrides('openai')).to.equal(true);
223
+ // The provider is back to what it offers by default.
224
+ (0, chai_1.expect)(service.isFavorite('anthropic/claude-opus-5')).to.equal(true);
225
+ });
226
+ it('writes nothing when there is nothing to reset', async () => {
227
+ const { service, written } = createService([status({ discovered: [dated('claude-opus-5', '2026-04-01')] })]);
228
+ (0, chai_1.expect)(service.hasOverrides('anthropic')).to.equal(false);
229
+ await service.resetToDefaults('anthropic');
230
+ (0, chai_1.expect)(written).to.be.empty;
231
+ });
232
+ });
233
+ describe('toggleFavorite', () => {
234
+ it('adds and removes an id the user can control', async () => {
235
+ const { service, written } = createService([status({ discovered: [dated('claude-opus-5', '2026-04-01')] })], []);
236
+ await service.toggleFavorite('anthropic/claude-opus-5-20260401');
237
+ (0, chai_1.expect)(written[0]).to.deep.equal(['anthropic/claude-opus-5-20260401']);
238
+ const removing = createService([status({ discovered: [dated('claude-opus-5', '2026-04-01')] })], ['anthropic/claude-opus-5-20260401']);
239
+ await removing.service.toggleFavorite('anthropic/claude-opus-5-20260401');
240
+ (0, chai_1.expect)(removing.written[0]).to.deep.equal([]);
241
+ });
242
+ it('hides a model that is offered by default, storing only that', async () => {
243
+ const { service, stored } = createService([status({ discovered: [dated('claude-opus-5', '2026-04-01')] })]);
244
+ (0, chai_1.expect)(service.isFavorite('anthropic/claude-opus-5')).to.equal(true);
245
+ await service.toggleFavorite('anthropic/claude-opus-5');
246
+ (0, chai_1.expect)(stored[ai_core_preferences_1.PREFERENCE_NAME_HIDDEN_MODELS]).to.deep.equal(['anthropic/claude-opus-5']);
247
+ // Featured all the same, it is only kept out of the picker.
248
+ (0, chai_1.expect)(service.isFeatured('anthropic/claude-opus-5')).to.equal(true);
249
+ (0, chai_1.expect)(service.isFavorite('anthropic/claude-opus-5')).to.equal(false);
250
+ // Nothing is written to the favorites: a model offered by default was never listed there.
251
+ (0, chai_1.expect)(stored[ai_core_preferences_1.PREFERENCE_NAME_FAVORITE_MODELS]).to.be.empty;
252
+ });
253
+ it('shows a hidden model again by dropping its entry', async () => {
254
+ const { service, stored } = createService([status({ discovered: [dated('claude-opus-5', '2026-04-01')] })], [], ['anthropic/claude-opus-5']);
255
+ (0, chai_1.expect)(service.isFavorite('anthropic/claude-opus-5')).to.equal(false);
256
+ await service.toggleFavorite('anthropic/claude-opus-5');
257
+ (0, chai_1.expect)(stored[ai_core_preferences_1.PREFERENCE_NAME_HIDDEN_MODELS]).to.be.empty;
258
+ (0, chai_1.expect)(stored[ai_core_preferences_1.PREFERENCE_NAME_FAVORITE_MODELS]).to.be.empty;
259
+ (0, chai_1.expect)(service.isFavorite('anthropic/claude-opus-5')).to.equal(true);
260
+ });
261
+ it('marks a model that fell out of the featured set while it was hidden', async () => {
262
+ const { service, stored } = createService([status({ discovered: [dated('claude-opus-5', '2026-04-01'), dated('claude-opus-4-7', '2024-06-01')] })], [], ['anthropic/claude-opus-5-20260401']);
263
+ // Release-pinned, so never featured: dropping the entry alone would not bring it back.
264
+ await service.toggleFavorite('anthropic/claude-opus-5-20260401');
265
+ (0, chai_1.expect)(stored[ai_core_preferences_1.PREFERENCE_NAME_HIDDEN_MODELS]).to.be.empty;
266
+ (0, chai_1.expect)(stored[ai_core_preferences_1.PREFERENCE_NAME_FAVORITE_MODELS]).to.deep.equal(['anthropic/claude-opus-5-20260401']);
267
+ (0, chai_1.expect)(service.isFavorite('anthropic/claude-opus-5-20260401')).to.equal(true);
268
+ });
269
+ it('hides a model of a provider that does not participate in discovery', async () => {
270
+ const { service, stored } = createService([status({ discovered: [dated('claude-opus-5', '2026-04-01')] })]);
271
+ await service.toggleFavorite('ollama/llama3');
272
+ (0, chai_1.expect)(stored[ai_core_preferences_1.PREFERENCE_NAME_HIDDEN_MODELS]).to.deep.equal(['ollama/llama3']);
273
+ (0, chai_1.expect)(service.isFavorite('ollama/llama3')).to.equal(false);
274
+ });
275
+ });
276
+ });
277
+ //# sourceMappingURL=favorite-models-service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"favorite-models-service.spec.js","sourceRoot":"","sources":["../../src/browser/favorite-models-service.spec.ts"],"names":[],"mappings":"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"}
@@ -67,7 +67,7 @@ let DefaultLanguageModelAliasRegistry = class DefaultLanguageModelAliasRegistry
67
67
  defaultModelIds: [
68
68
  'anthropic/claude-haiku-4-5',
69
69
  'openai/gpt-5.6-luna',
70
- 'google/gemini-3.7-flash'
70
+ 'google/gemini-3.8-flash'
71
71
  ],
72
72
  description: core_1.nls.localize('theia/ai/core/defaultModelAliases/fast/description', 'Faster and cheaper models for simpler tasks like exploration or basic tool calling, where deep reasoning is not required.')
73
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"frontend-language-model-service.d.ts","sourceRoot":"","sources":["../../src/browser/frontend-language-model-service.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sDAAsD,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,qBAAqB,EAAqB,WAAW,EAAE,MAAM,WAAW,CAAC;AACzH,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAGH,cAAc,EACd,wBAAwB,EAE3B,MAAM,+BAA+B,CAAC;AAEvC,qBACa,gCAAiC,SAAQ,wBAAwB;IAG1E,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAGhE,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,sBAAsB,CAAC;IAE5C,WAAW,CACtB,aAAa,EAAE,aAAa,EAC5B,oBAAoB,EAAE,WAAW,GAClC,OAAO,CAAC,qBAAqB,CAAC;CAuCpC;AAED,eAAO,MAAM,oBAAoB,GAAI,iBAAiB,cAAc,EAAE,EAAE,SAAS,MAAM,EAAE,YAAY,MAAM,EAAE,UAAU,MAAM,KAAG,cAU/H,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAC/B,kBAAkB,wBAAwB,EAAE,EAC5C,SAAS,MAAM,EACf,YAAY,MAAM,EAClB,UAAU,MAAM,KACjB,wBAAwB,GAAG,SAuB7B,CAAC"}
1
+ {"version":3,"file":"frontend-language-model-service.d.ts","sourceRoot":"","sources":["../../src/browser/frontend-language-model-service.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sDAAsD,CAAC;AAC7F,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,qBAAqB,EAAuC,WAAW,EAAE,MAAM,WAAW,CAAC;AAC3I,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAGH,cAAc,EACd,wBAAwB,EAE3B,MAAM,+BAA+B,CAAC;AAEvC,qBACa,gCAAiC,SAAQ,wBAAwB;IAG1E,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAGhE,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,sBAAsB,CAAC;IAE5C,WAAW,CACtB,aAAa,EAAE,aAAa,EAC5B,oBAAoB,EAAE,WAAW,GAClC,OAAO,CAAC,qBAAqB,CAAC;CA+CpC;AAED,eAAO,MAAM,oBAAoB,GAAI,iBAAiB,cAAc,EAAE,EAAE,SAAS,MAAM,EAAE,YAAY,MAAM,EAAE,UAAU,MAAM,KAAG,cAU/H,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAC/B,kBAAkB,wBAAwB,EAAE,EAC5C,SAAS,MAAM,EACf,YAAY,MAAM,EAClB,UAAU,MAAM,KACjB,wBAAwB,GAAG,SAuB7B,CAAC"}
@@ -60,6 +60,14 @@ let FrontendLanguageModelServiceImpl = class FrontendLanguageModelServiceImpl ex
60
60
  languageModelRequest.reasoning = { level: languageModel.reasoningSupport.defaultLevel };
61
61
  }
62
62
  }
63
+ // A persisted selection or preference entry can name a level the current model does not accept,
64
+ // which the provider would otherwise send as-is; clamp it to the model's declared levels.
65
+ if (languageModelRequest.reasoning && languageModel.reasoningSupport) {
66
+ const level = common_1.ReasoningSupport.clampLevel(languageModel.reasoningSupport, languageModelRequest.reasoning.level);
67
+ if (level !== languageModelRequest.reasoning.level) {
68
+ languageModelRequest.reasoning = { ...languageModelRequest.reasoning, level };
69
+ }
70
+ }
63
71
  return super.sendRequest(languageModel, languageModelRequest);
64
72
  }
65
73
  };
@@ -1 +1 @@
1
- {"version":3,"file":"frontend-language-model-service.js","sourceRoot":"","sources":["../../src/browser/frontend-language-model-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"frontend-language-model-service.js","sourceRoot":"","sources":["../../src/browser/frontend-language-model-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=frontend-language-model-service.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontend-language-model-service.spec.d.ts","sourceRoot":"","sources":["../../src/browser/frontend-language-model-service.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2026 Safi Seid-Ahmad, K2view and others.
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 jsdom_1 = require("@theia/core/lib/browser/test/jsdom");
19
+ let disableJSDOM = (0, jsdom_1.enableJSDOM)();
20
+ const frontend_application_config_provider_1 = require("@theia/core/lib/browser/frontend-application-config-provider");
21
+ frontend_application_config_provider_1.FrontendApplicationConfigProvider.set({});
22
+ const chai_1 = require("chai");
23
+ const ai_core_preferences_1 = require("../common/ai-core-preferences");
24
+ const frontend_language_model_service_1 = require("./frontend-language-model-service");
25
+ disableJSDOM();
26
+ const O_SERIES = { supportedLevels: ['off', 'low', 'medium', 'high', 'auto'], defaultLevel: 'auto' };
27
+ const GPT5 = { supportedLevels: ['off', 'minimal', 'low', 'medium', 'high', 'auto'], defaultLevel: 'auto' };
28
+ /** Service with the trust check and the reasoning preference entries stubbed; nothing else in `sendRequest` needs a container. */
29
+ function createService(reasoningEntries = []) {
30
+ const service = new frontend_language_model_service_1.FrontendLanguageModelServiceImpl();
31
+ Object.assign(service, {
32
+ workspaceTrustService: { getWorkspaceTrust: async () => true },
33
+ aiConfiguration: { get: (key, defaultValue) => key === ai_core_preferences_1.PREFERENCE_NAME_REASONING ? reasoningEntries : defaultValue }
34
+ });
35
+ return service;
36
+ }
37
+ function createModel(id, reasoningSupport, captured) {
38
+ return {
39
+ id,
40
+ reasoningSupport,
41
+ status: { status: 'ready' },
42
+ request: async (request) => {
43
+ captured.push(request);
44
+ return { text: '' };
45
+ }
46
+ };
47
+ }
48
+ function createRequest(reasoning) {
49
+ return { messages: [{ actor: 'user', type: 'text', text: 'hello' }], agentId: 'agent', sessionId: 'session', requestId: 'request', reasoning };
50
+ }
51
+ describe('FrontendLanguageModelServiceImpl reasoning level', () => {
52
+ before(() => disableJSDOM = (0, jsdom_1.enableJSDOM)());
53
+ after(() => disableJSDOM());
54
+ it('clamps a session-selected level the model does not support to the nearest supported one', async () => {
55
+ const captured = [];
56
+ await createService().sendRequest(createModel('openai/o3', O_SERIES, captured), createRequest({ level: 'minimal' }));
57
+ (0, chai_1.expect)(captured[0].reasoning).to.deep.equal({ level: 'low' });
58
+ });
59
+ it('clamps a preference-entry level the model does not support', async () => {
60
+ const captured = [];
61
+ const service = createService([{ scope: { providerId: 'openai' }, reasoning: { level: 'minimal' } }]);
62
+ await service.sendRequest(createModel('openai/o3', O_SERIES, captured), createRequest());
63
+ (0, chai_1.expect)(captured[0].reasoning).to.deep.equal({ level: 'low' });
64
+ });
65
+ it('keeps a level the model supports', async () => {
66
+ const captured = [];
67
+ await createService().sendRequest(createModel('openai/gpt-5', GPT5, captured), createRequest({ level: 'minimal' }));
68
+ (0, chai_1.expect)(captured[0].reasoning).to.deep.equal({ level: 'minimal' });
69
+ });
70
+ it('leaves the level untouched for models without reasoning support', async () => {
71
+ const captured = [];
72
+ await createService().sendRequest(createModel('openai/gpt-4o', undefined, captured), createRequest({ level: 'high' }));
73
+ (0, chai_1.expect)(captured[0].reasoning).to.deep.equal({ level: 'high' });
74
+ });
75
+ });
76
+ //# sourceMappingURL=frontend-language-model-service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frontend-language-model-service.spec.js","sourceRoot":"","sources":["../../src/browser/frontend-language-model-service.spec.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,9 @@ export * from './ai-view-contribution';
12
12
  export * from './frontend-language-model-registry';
13
13
  export * from './frontend-language-model-alias-registry';
14
14
  export * from './hide-ai-preferences-contribution';
15
+ export * from './model-discovery-status-service';
16
+ export * from './favorite-models-service';
17
+ export * from './discovering-provider-contribution';
15
18
  export * from './frontend-variable-service';
16
19
  export * from './prompttemplate-contribution';
17
20
  export * from './theia-variable-contribution';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAgBA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,oCAAoC,CAAC;AACnD,cAAc,0CAA0C,CAAC;AACzD,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,qDAAqD,CAAC;AACpE,cAAc,gCAAgC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAgBA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6CAA6C,CAAC;AAC5D,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iCAAiC,CAAC;AAChD,cAAc,wBAAwB,CAAC;AACvC,cAAc,oCAAoC,CAAC;AACnD,cAAc,0CAA0C,CAAC;AACzD,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,qDAAqD,CAAC;AACpE,cAAc,gCAAgC,CAAC"}
@@ -30,6 +30,9 @@ tslib_1.__exportStar(require("./ai-view-contribution"), exports);
30
30
  tslib_1.__exportStar(require("./frontend-language-model-registry"), exports);
31
31
  tslib_1.__exportStar(require("./frontend-language-model-alias-registry"), exports);
32
32
  tslib_1.__exportStar(require("./hide-ai-preferences-contribution"), exports);
33
+ tslib_1.__exportStar(require("./model-discovery-status-service"), exports);
34
+ tslib_1.__exportStar(require("./favorite-models-service"), exports);
35
+ tslib_1.__exportStar(require("./discovering-provider-contribution"), exports);
33
36
  tslib_1.__exportStar(require("./frontend-variable-service"), exports);
34
37
  tslib_1.__exportStar(require("./prompttemplate-contribution"), exports);
35
38
  tslib_1.__exportStar(require("./theia-variable-contribution"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAEhF,uEAA6C;AAC7C,oEAA0C;AAC1C,iEAAuC;AACvC,kEAAwC;AACxC,uEAA6C;AAC7C,sFAA4D;AAC5D,oEAA0C;AAC1C,wEAA8C;AAC9C,gEAAsC;AACtC,0EAAgD;AAChD,iEAAuC;AACvC,6EAAmD;AACnD,mFAAyD;AACzD,6EAAmD;AACnD,sEAA4C;AAC5C,wEAA8C;AAC9C,wEAA8C;AAC9C,+EAAqD;AACrD,yEAA+C;AAC/C,0DAAgC;AAChC,qEAA2C;AAC3C,mEAAyC;AACzC,qEAA2C;AAC3C,sEAA4C;AAC5C,yEAA+C;AAC/C,2EAAiD;AACjD,uFAA6D;AAC7D,8FAAoE;AACpE,yEAA+C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAEhF,uEAA6C;AAC7C,oEAA0C;AAC1C,iEAAuC;AACvC,kEAAwC;AACxC,uEAA6C;AAC7C,sFAA4D;AAC5D,oEAA0C;AAC1C,wEAA8C;AAC9C,gEAAsC;AACtC,0EAAgD;AAChD,iEAAuC;AACvC,6EAAmD;AACnD,mFAAyD;AACzD,6EAAmD;AACnD,2EAAiD;AACjD,oEAA0C;AAC1C,8EAAoD;AACpD,sEAA4C;AAC5C,wEAA8C;AAC9C,wEAA8C;AAC9C,+EAAqD;AACrD,yEAA+C;AAC/C,0DAAgC;AAChC,qEAA2C;AAC3C,mEAAyC;AACzC,qEAA2C;AAC3C,sEAA4C;AAC5C,yEAA+C;AAC/C,2EAAiD;AACjD,uFAA6D;AAC7D,8FAAoE;AACpE,yEAA+C"}
@@ -0,0 +1,52 @@
1
+ import { Emitter, Event, ILogger } from '@theia/core';
2
+ import { ModelDiscoveryStatus } from '../common/model-discovery-status';
3
+ /**
4
+ * A provider that participates in dynamic model discovery. Provider frontend contributions
5
+ * register a descriptor so the UI can display their {@link ModelDiscoveryStatus} and trigger
6
+ * a manual refresh.
7
+ */
8
+ export interface ModelDiscoveryProviderDescriptor {
9
+ readonly providerId: string;
10
+ readonly label: string;
11
+ /** Prefix of this provider's registered model ids, if it differs from {@link providerId}. */
12
+ readonly modelIdPrefix?: string;
13
+ /** Triggers a manual re-fetch (used by the "Refresh"/"Retry" action). */
14
+ refresh(): Promise<void>;
15
+ }
16
+ /**
17
+ * Frontend registry of provider-level model-discovery status.
18
+ *
19
+ * Provider frontend contributions push their state here as they fetch models; the AI
20
+ * configuration UI observes {@link onDidChange} to render fetching/error/no-credentials state.
21
+ * This is the provider-level counterpart to the per-model `LanguageModelStatus`.
22
+ */
23
+ export declare class ModelDiscoveryStatusService {
24
+ protected readonly logger: ILogger;
25
+ protected readonly descriptors: Map<string, ModelDiscoveryProviderDescriptor>;
26
+ protected readonly statuses: Map<string, ModelDiscoveryStatus>;
27
+ protected readonly onDidChangeEmitter: Emitter<ModelDiscoveryStatus>;
28
+ /** Fired whenever a provider's status changes; the argument is the new status. */
29
+ readonly onDidChange: Event<ModelDiscoveryStatus>;
30
+ /**
31
+ * Register a provider. Idempotent: re-registering keeps any existing status and only
32
+ * updates the refresh callback and label.
33
+ */
34
+ registerProvider(descriptor: ModelDiscoveryProviderDescriptor): void;
35
+ /**
36
+ * Update a provider's status. Only the provided fields are changed; the rest are carried
37
+ * over from the previous status. Passing `undefined` for an optional field explicitly clears it.
38
+ */
39
+ updateStatus(providerId: string, update: Partial<Omit<ModelDiscoveryStatus, 'providerId'>>): void;
40
+ /**
41
+ * Reports a failed discovery run. Any step of a run can fail, including the ones that only talk to
42
+ * the backend, and nothing awaits the promise a rejection would travel on: a provider's startup
43
+ * does not, and a refresh button cannot act on it. What the previous state offered is cleared, so
44
+ * a failure does not keep reading like the state before it (a badge, a sign-in button).
45
+ */
46
+ reportError(providerId: string, error: unknown): void;
47
+ getStatus(providerId: string): ModelDiscoveryStatus | undefined;
48
+ getStatuses(): ModelDiscoveryStatus[];
49
+ /** Trigger a manual refresh for the given provider, if it is registered. */
50
+ refresh(providerId: string): Promise<void>;
51
+ }
52
+ //# sourceMappingURL=model-discovery-status-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-discovery-status-service.d.ts","sourceRoot":"","sources":["../../src/browser/model-discovery-status-service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE;;;;GAIG;AACH,MAAM,WAAW,gCAAgC;IAC7C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,6FAA6F;IAC7F,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,yEAAyE;IACzE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,qBACa,2BAA2B;IAGpC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEnC,SAAS,CAAC,QAAQ,CAAC,WAAW,gDAAuD;IACrF,SAAS,CAAC,QAAQ,CAAC,QAAQ,oCAA2C;IAEtE,SAAS,CAAC,QAAQ,CAAC,kBAAkB,gCAAuC;IAC5E,kFAAkF;IAClF,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,oBAAoB,CAAC,CAAiC;IAElF;;;OAGG;IACH,gBAAgB,CAAC,UAAU,EAAE,gCAAgC,GAAG,IAAI;IAapE;;;OAGG;IACH,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC,GAAG,IAAI;IAkBjG;;;;;OAKG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAWrD,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAI/D,WAAW,IAAI,oBAAoB,EAAE;IAIrC,4EAA4E;IACtE,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGnD"}