@theia/ai-copilot 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 (26) hide show
  1. package/lib/browser/copilot-frontend-application-contribution.d.ts +6 -0
  2. package/lib/browser/copilot-frontend-application-contribution.d.ts.map +1 -1
  3. package/lib/browser/copilot-frontend-application-contribution.js +77 -2
  4. package/lib/browser/copilot-frontend-application-contribution.js.map +1 -1
  5. package/lib/common/copilot-language-models-manager.d.ts +5 -3
  6. package/lib/common/copilot-language-models-manager.d.ts.map +1 -1
  7. package/lib/common/copilot-language-models-manager.js.map +1 -1
  8. package/lib/node/copilot-language-models-manager-impl.d.ts +24 -2
  9. package/lib/node/copilot-language-models-manager-impl.d.ts.map +1 -1
  10. package/lib/node/copilot-language-models-manager-impl.js +79 -4
  11. package/lib/node/copilot-language-models-manager-impl.js.map +1 -1
  12. package/lib/node/copilot-language-models-manager-impl.spec.js +47 -4
  13. package/lib/node/copilot-language-models-manager-impl.spec.js.map +1 -1
  14. package/lib/node/copilot-sdk-mappers.d.ts +4 -3
  15. package/lib/node/copilot-sdk-mappers.d.ts.map +1 -1
  16. package/lib/node/copilot-sdk-mappers.js +4 -13
  17. package/lib/node/copilot-sdk-mappers.js.map +1 -1
  18. package/lib/node/copilot-sdk-mappers.spec.js +4 -2
  19. package/lib/node/copilot-sdk-mappers.spec.js.map +1 -1
  20. package/package.json +4 -4
  21. package/src/browser/copilot-frontend-application-contribution.ts +82 -2
  22. package/src/common/copilot-language-models-manager.ts +5 -3
  23. package/src/node/copilot-language-models-manager-impl.spec.ts +55 -4
  24. package/src/node/copilot-language-models-manager-impl.ts +86 -5
  25. package/src/node/copilot-sdk-mappers.spec.ts +4 -2
  26. package/src/node/copilot-sdk-mappers.ts +4 -14
@@ -3,6 +3,7 @@ import { FrontendApplicationContribution } from '@theia/core/lib/browser';
3
3
  import { MessageService } from '@theia/core/lib/common/message-service';
4
4
  import { CopilotAuthService, CopilotLanguageModelsManager, CopilotModelDescription } from '../common';
5
5
  import { AICorePreferences } from '@theia/ai-core/lib/common/ai-core-preferences';
6
+ import { ModelDiscoveryStatusService } from '@theia/ai-core/lib/browser';
6
7
  export declare class CopilotFrontendApplicationContribution implements FrontendApplicationContribution {
7
8
  protected readonly preferenceService: PreferenceService;
8
9
  protected readonly manager: CopilotLanguageModelsManager;
@@ -10,6 +11,7 @@ export declare class CopilotFrontendApplicationContribution implements FrontendA
10
11
  protected readonly authService: CopilotAuthService;
11
12
  protected readonly messageService: MessageService;
12
13
  protected readonly commandService: CommandService;
14
+ protected readonly discoveryStatus: ModelDiscoveryStatusService;
13
15
  protected prevModels: string[];
14
16
  protected useAutoDiscovery: boolean;
15
17
  onStart(): void;
@@ -29,8 +31,12 @@ export declare class CopilotFrontendApplicationContribution implements FrontendA
29
31
  * the domain is read when signing in and not while a session is already established.
30
32
  */
31
33
  protected notifyEnterpriseUrlChanged(): Promise<void>;
34
+ /** The state of a provider whose credential is a sign-in that has not happened, with the way to fix it. */
35
+ protected setSignInRequiredStatus(): void;
32
36
  protected initializeModels(): Promise<void>;
33
37
  protected discoverAndRegisterModels(): Promise<void>;
38
+ protected discovering: Promise<void>;
39
+ protected runDiscovery(): Promise<void>;
34
40
  protected removeAllCopilotModels(): void;
35
41
  protected handleModelChanges(newModels: string[]): void;
36
42
  protected updateAllModels(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-frontend-application-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/copilot-frontend-application-contribution.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,cAAc,EAAO,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,uBAAuB,EAAuB,MAAM,WAAW,CAAC;AAE3H,OAAO,EAAE,iBAAiB,EAA+B,MAAM,+CAA+C,CAAC;AAG/G,qBACa,sCAAuC,YAAW,+BAA+B;IAG1F,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAGxD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC;IAGzD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAGxD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAGnD,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAGlD,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAElD,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,CAAM;IACpC,SAAS,CAAC,gBAAgB,UAAS;IAEnC,OAAO,IAAI,IAAI;IA6Df,SAAS,CAAC,gBAAgB,IAAI,OAAO;IAIrC;;;OAGG;cACa,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrD;;;OAGG;cACa,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAarD;;;OAGG;cACa,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC;cAgB3C,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;cAcjC,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB1D,SAAS,CAAC,sBAAsB,IAAI,IAAI;IASxC,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAYvD,SAAS,CAAC,eAAe,IAAI,IAAI;IASjC,SAAS,CAAC,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB;CAUpF"}
1
+ {"version":3,"file":"copilot-frontend-application-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/copilot-frontend-application-contribution.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,cAAc,EAAO,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,uBAAuB,EAAuB,MAAM,WAAW,CAAC;AAE3H,OAAO,EAAE,iBAAiB,EAA+B,MAAM,+CAA+C,CAAC;AAE/G,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAIzE,qBACa,sCAAuC,YAAW,+BAA+B;IAG1F,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAGxD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,4BAA4B,CAAC;IAGzD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAGxD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IAGnD,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAGlD,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAGlD,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,2BAA2B,CAAC;IAEhE,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,CAAM;IACpC,SAAS,CAAC,gBAAgB,UAAS;IAEnC,OAAO,IAAI,IAAI;IAqEf,SAAS,CAAC,gBAAgB,IAAI,OAAO;IAIrC;;;OAGG;cACa,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrD;;;OAGG;cACa,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAarD;;;OAGG;cACa,0BAA0B,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB3D,2GAA2G;IAC3G,SAAS,CAAC,uBAAuB,IAAI,IAAI;cAYzB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;cAiCjC,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ1D,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,CAAC,CAAqB;cAEzC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC7C,SAAS,CAAC,sBAAsB,IAAI,IAAI;IASxC,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAYvD,SAAS,CAAC,eAAe,IAAI,IAAI;IASjC,SAAS,CAAC,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,uBAAuB;CAUpF"}
@@ -24,13 +24,21 @@ const common_1 = require("../common");
24
24
  const copilot_preferences_1 = require("../common/copilot-preferences");
25
25
  const ai_core_preferences_1 = require("@theia/ai-core/lib/common/ai-core-preferences");
26
26
  const copilot_command_contribution_1 = require("./copilot-command-contribution");
27
+ const browser_1 = require("@theia/ai-core/lib/browser");
28
+ const COPILOT_PROVIDER_LABEL = 'GitHub Copilot';
27
29
  let CopilotFrontendApplicationContribution = class CopilotFrontendApplicationContribution {
28
30
  constructor() {
29
31
  this.prevModels = [];
30
32
  this.useAutoDiscovery = false;
33
+ this.discovering = Promise.resolve();
31
34
  }
32
35
  onStart() {
33
36
  this.preferenceService.ready.then(async () => {
37
+ this.discoveryStatus.registerProvider({
38
+ providerId: common_1.COPILOT_PROVIDER_ID,
39
+ label: COPILOT_PROVIDER_LABEL,
40
+ refresh: () => this.initializeModels()
41
+ });
34
42
  // Before anything reaches for the CLI: the backend cannot read the preferences itself.
35
43
  await this.updateExecutablePath();
36
44
  if (this.isCopilotEnabled()) {
@@ -38,8 +46,9 @@ let CopilotFrontendApplicationContribution = class CopilotFrontendApplicationCon
38
46
  if (authState.migrationRequired) {
39
47
  this.notifySignInRequired();
40
48
  }
41
- await this.initializeModels();
42
49
  }
50
+ // Also when disabled: that is a state of its own on the provider's page, not the absence of one.
51
+ await this.initializeModels();
43
52
  this.preferenceService.onPreferenceChanged(event => {
44
53
  if (event.preferenceName === copilot_preferences_1.COPILOT_EXECUTABLE_PATH_PREF) {
45
54
  this.updateExecutablePath().then(() => {
@@ -55,6 +64,7 @@ let CopilotFrontendApplicationContribution = class CopilotFrontendApplicationCon
55
64
  }
56
65
  else {
57
66
  this.removeAllCopilotModels();
67
+ this.initializeModels();
58
68
  }
59
69
  }
60
70
  else if (event.preferenceName === copilot_preferences_1.COPILOT_ENTERPRISE_URL_PREF) {
@@ -82,6 +92,7 @@ let CopilotFrontendApplicationContribution = class CopilotFrontendApplicationCon
82
92
  }
83
93
  else {
84
94
  this.removeAllCopilotModels();
95
+ this.setSignInRequiredStatus();
85
96
  }
86
97
  }
87
98
  });
@@ -130,9 +141,38 @@ let CopilotFrontendApplicationContribution = class CopilotFrontendApplicationCon
130
141
  this.commandService.executeCommand(copilot_command_contribution_1.CopilotCommands.SIGN_IN.id);
131
142
  }
132
143
  }
144
+ /** The state of a provider whose credential is a sign-in that has not happened, with the way to fix it. */
145
+ setSignInRequiredStatus() {
146
+ this.discoveryStatus.updateStatus(common_1.COPILOT_PROVIDER_ID, {
147
+ state: 'no-credentials',
148
+ // What Copilot lacks is a sign-in, not an API key, so it says so rather than letting the
149
+ // state speak for it.
150
+ stateLabel: core_1.nls.localizeByDefault('Not signed in'),
151
+ message: core_1.nls.localize('theia/ai/copilot/discovery/signedOut', 'Not signed in to GitHub Copilot. Sign in to discover the models it offers.'),
152
+ action: { label: copilot_command_contribution_1.CopilotCommands.SIGN_IN.label, commandId: copilot_command_contribution_1.CopilotCommands.SIGN_IN.id }
153
+ });
154
+ }
133
155
  async initializeModels() {
156
+ if (!this.isCopilotEnabled()) {
157
+ this.discoveryStatus.updateStatus(common_1.COPILOT_PROVIDER_ID, {
158
+ state: 'no-credentials',
159
+ stateLabel: core_1.nls.localizeByDefault('Disabled'),
160
+ message: core_1.nls.localize('theia/ai/copilot/discovery/disabled', 'The GitHub Copilot provider is disabled. Enable it to discover models.'),
161
+ action: undefined
162
+ });
163
+ return;
164
+ }
134
165
  const configuredModels = this.preferenceService.get(copilot_preferences_1.COPILOT_MODEL_OVERRIDES_PREF, []);
135
166
  if (configuredModels.length > 0) {
167
+ this.discoveryStatus.updateStatus(common_1.COPILOT_PROVIDER_ID, {
168
+ state: 'overridden',
169
+ stateLabel: undefined,
170
+ discovered: configuredModels.map(id => ({ id })),
171
+ message: core_1.nls.localize('theia/ai/copilot/discovery/overridden', 'The model list is configured manually. Clear the model overrides to discover the models from GitHub Copilot again.'),
172
+ lastFetch: undefined,
173
+ fromCache: false,
174
+ action: undefined
175
+ });
136
176
  this.useAutoDiscovery = false;
137
177
  this.manager.createOrUpdateLanguageModels(...configuredModels.map((modelId) => this.createCopilotModelDescription(modelId)));
138
178
  this.prevModels = [...configuredModels];
@@ -143,7 +183,29 @@ let CopilotFrontendApplicationContribution = class CopilotFrontendApplicationCon
143
183
  }
144
184
  }
145
185
  async discoverAndRegisterModels() {
146
- const modelIds = await this.manager.fetchAvailableModelIds();
186
+ // Runs are queued rather than overlapped: startup, a key change and a manual refresh can all
187
+ // ask within a moment of each other, and two runs in flight would compute what to unregister
188
+ // from the same stale list and leave the registry disagreeing with the provider.
189
+ this.discovering = this.discovering.then(() => this.runDiscovery().catch(error => this.discoveryStatus.reportError(common_1.COPILOT_PROVIDER_ID, error)));
190
+ return this.discovering;
191
+ }
192
+ async runDiscovery() {
193
+ // Signing in is Copilot's equivalent of setting an API key, so a missing sign-in reads like a
194
+ // missing credential rather than like a failure: the CLI would answer the list call with an
195
+ // authorization error, which says the same thing in a way nobody can act on.
196
+ if (!(await this.authService.getAuthState()).isAuthenticated) {
197
+ this.setSignInRequiredStatus();
198
+ return;
199
+ }
200
+ this.discoveryStatus.updateStatus(common_1.COPILOT_PROVIDER_ID, { state: 'fetching', stateLabel: undefined, message: undefined, action: undefined });
201
+ const { models, error } = await this.manager.fetchAvailableModels();
202
+ if (error) {
203
+ // The models of an earlier discovery stay registered; the manager already marks them
204
+ // unavailable, so they are visible as such rather than silently gone.
205
+ this.discoveryStatus.updateStatus(common_1.COPILOT_PROVIDER_ID, { state: 'error', stateLabel: undefined, message: error, action: undefined });
206
+ return;
207
+ }
208
+ const modelIds = models.map(model => model.id);
147
209
  if (modelIds.length > 0) {
148
210
  const modelsToRemove = this.prevModels.filter(m => !modelIds.includes(m));
149
211
  if (modelsToRemove.length > 0) {
@@ -152,6 +214,15 @@ let CopilotFrontendApplicationContribution = class CopilotFrontendApplicationCon
152
214
  this.manager.createOrUpdateLanguageModels(...modelIds.map((modelId) => this.createCopilotModelDescription(modelId)));
153
215
  this.prevModels = [...modelIds];
154
216
  }
217
+ this.discoveryStatus.updateStatus(common_1.COPILOT_PROVIDER_ID, {
218
+ state: 'ready',
219
+ stateLabel: undefined,
220
+ discovered: models,
221
+ message: undefined,
222
+ lastFetch: Date.now(),
223
+ fromCache: false,
224
+ action: undefined
225
+ });
155
226
  }
156
227
  removeAllCopilotModels() {
157
228
  if (this.prevModels.length > 0) {
@@ -211,6 +282,10 @@ tslib_1.__decorate([
211
282
  (0, inversify_1.inject)(core_1.CommandService),
212
283
  tslib_1.__metadata("design:type", Object)
213
284
  ], CopilotFrontendApplicationContribution.prototype, "commandService", void 0);
285
+ tslib_1.__decorate([
286
+ (0, inversify_1.inject)(browser_1.ModelDiscoveryStatusService),
287
+ tslib_1.__metadata("design:type", browser_1.ModelDiscoveryStatusService)
288
+ ], CopilotFrontendApplicationContribution.prototype, "discoveryStatus", void 0);
214
289
  exports.CopilotFrontendApplicationContribution = CopilotFrontendApplicationContribution = tslib_1.__decorate([
215
290
  (0, inversify_1.injectable)()
216
291
  ], CopilotFrontendApplicationContribution);
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-frontend-application-contribution.js","sourceRoot":"","sources":["../../src/browser/copilot-frontend-application-contribution.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,4DAAkE;AAClE,sCAAqE;AAErE,4EAAwE;AACxE,sCAA2H;AAC3H,uEAA8J;AAC9J,uFAA+G;AAC/G,iFAAiE;AAG1D,IAAM,sCAAsC,GAA5C,MAAM,sCAAsC;IAA5C;QAoBO,eAAU,GAAa,EAAE,CAAC;QAC1B,qBAAgB,GAAG,KAAK,CAAC;IAuLvC,CAAC;IArLG,OAAO;QACH,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YACzC,uFAAuF;YACvF,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;gBAC1B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;gBACxD,IAAI,SAAS,CAAC,iBAAiB,EAAE,CAAC;oBAC9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAChC,CAAC;gBACD,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAClC,CAAC;YAED,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;gBAC/C,IAAI,KAAK,CAAC,cAAc,KAAK,kDAA4B,EAAE,CAAC;oBACxD,IAAI,CAAC,oBAAoB,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;wBAClC,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;4BACnD,6DAA6D;4BAC7D,IAAI,CAAC,yBAAyB,EAAE,CAAC;wBACrC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACP,CAAC;qBAAM,IAAI,KAAK,CAAC,cAAc,KAAK,0CAAoB,EAAE,CAAC;oBACvD,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;wBAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBAC5B,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBAClC,CAAC;gBACL,CAAC;qBAAM,IAAI,KAAK,CAAC,cAAc,KAAK,iDAA2B,EAAE,CAAC;oBAC9D,qFAAqF;oBACrF,6EAA6E;oBAC7E,IAAI,CAAC,0BAA0B,EAAE,CAAC;gBACtC,CAAC;qBAAM,IAAI,KAAK,CAAC,cAAc,KAAK,kDAA4B,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;oBAC1F,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAW,kDAA4B,EAAE,EAAE,CAAC,CAAC;oBACzF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACvB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;wBAC9B,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;oBACvC,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;wBAC7B,IAAI,CAAC,sBAAsB,EAAE,CAAC;wBAC9B,IAAI,CAAC,yBAAyB,EAAE,CAAC;oBACrC,CAAC;gBACL,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,KAAK,EAAC,KAAK,EAAC,EAAE;gBAC9C,IAAI,IAAI,CAAC,gBAAgB,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACnD,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;wBACxB,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;oBAC3C,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBAClC,CAAC;gBACL,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;gBAC/C,IAAI,KAAK,CAAC,cAAc,KAAK,iDAA2B,IAAI,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;oBAClF,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC3B,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAES,gBAAgB;QACtB,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAU,0CAAoB,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,oBAAoB;QAChC,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAS,kDAA4B,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,cAAc,IAAI,SAAS,CAAC,CAAC;IAC1E,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,oBAAoB;QAChC,MAAM,MAAM,GAAG,UAAG,CAAC,QAAQ,CAAC,kCAAkC,EAAE,2BAA2B,CAAC,CAAC;QAC7F,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CACzC,UAAG,CAAC,QAAQ,CAAC,8BAA8B,EACvC,2HAA2H;cACzH,sDAAsD,CAAC,EAC7D,MAAM,CACT,CAAC;QACF,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,8CAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;IACL,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,0BAA0B;QACtC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QACxD,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;YAC7B,OAAO;QACX,CAAC;QACD,MAAM,MAAM,GAAG,UAAG,CAAC,QAAQ,CAAC,kCAAkC,EAAE,2BAA2B,CAAC,CAAC;QAC7F,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CACzC,UAAG,CAAC,QAAQ,CAAC,uCAAuC,EAChD,yEAAyE,CAAC,EAC9E,MAAM,CACT,CAAC;QACF,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,8CAAe,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;IACL,CAAC;IAES,KAAK,CAAC,gBAAgB;QAC5B,MAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAW,kDAA4B,EAAE,EAAE,CAAC,CAAC;QAChG,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,4BAA4B,CACrC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAC5F,CAAC;YACF,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,MAAM,IAAI,CAAC,yBAAyB,EAAE,CAAC;QAC3C,CAAC;IACL,CAAC;IAES,KAAK,CAAC,yBAAyB;QACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;QAC7D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAC7B,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,4BAAmB,IAAI,KAAK,EAAE,CAAC,CACpE,CAAC;YACN,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,4BAA4B,CACrC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CACpF,CAAC;YACF,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;QACpC,CAAC;IACL,CAAC;IAES,sBAAsB;QAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAC7B,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,4BAAmB,IAAI,KAAK,EAAE,CAAC,CACrE,CAAC;YACF,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACzB,CAAC;IACL,CAAC;IAES,kBAAkB,CAAC,SAAmB;QAC5C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAEzC,MAAM,cAAc,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACjF,MAAM,WAAW,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAE9E,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,4BAAmB,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAChI,IAAI,CAAC,UAAU,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IACrC,CAAC;IAES,eAAe;QACrB,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACjC,OAAO;QACX,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAW,kDAA4B,EAAE,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,OAAO,CAAC,4BAA4B,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/H,CAAC;IAES,6BAA6B,CAAC,OAAe;QACnD,MAAM,EAAE,GAAG,GAAG,4BAAmB,IAAI,OAAO,EAAE,CAAC;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,iDAA2B,CAAC,IAAI,CAAC,CAAC;QAEhF,OAAO;YACH,EAAE;YACF,KAAK,EAAE,OAAO;YACd,UAAU;SACb,CAAC;IACN,CAAC;CACJ,CAAA;AA5MY,wFAAsC;AAG5B;IADlB,IAAA,kBAAM,EAAC,wBAAiB,CAAC;;iFAC8B;AAGrC;IADlB,IAAA,kBAAM,EAAC,qCAA4B,CAAC;;uEACoB;AAGtC;IADlB,IAAA,kBAAM,EAAC,uCAAiB,CAAC;;iFAC8B;AAGrC;IADlB,IAAA,kBAAM,EAAC,2BAAkB,CAAC;;2EACwB;AAGhC;IADlB,IAAA,kBAAM,EAAC,gCAAc,CAAC;sCACY,gCAAc;8EAAC;AAG/B;IADlB,IAAA,kBAAM,EAAC,qBAAc,CAAC;;8EAC2B;iDAlBzC,sCAAsC;IADlD,IAAA,sBAAU,GAAE;GACA,sCAAsC,CA4MlD"}
1
+ {"version":3,"file":"copilot-frontend-application-contribution.js","sourceRoot":"","sources":["../../src/browser/copilot-frontend-application-contribution.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { ModelDiscoveryResult } from '@theia/ai-core/lib/common';
1
2
  export declare const COPILOT_LANGUAGE_MODELS_MANAGER_PATH = "/services/copilot/language-model-manager";
2
3
  export declare const CopilotLanguageModelsManager: unique symbol;
3
4
  export declare const COPILOT_PROVIDER_ID = "copilot";
@@ -30,9 +31,10 @@ export interface CopilotLanguageModelsManager {
30
31
  */
31
32
  refreshModelsStatus(): Promise<void>;
32
33
  /**
33
- * Fetches the list of available model IDs from the Copilot CLI.
34
- * Requires the CLI to be signed in. Returns an empty array otherwise or if the call fails.
34
+ * Fetches the models the Copilot CLI offers. Requires the CLI to be signed in; a failure is
35
+ * reported as {@link ModelDiscoveryResult.error} with no models rather than thrown, since the
36
+ * CLI being absent or signed out is an expected state rather than a fault.
35
37
  */
36
- fetchAvailableModelIds(): Promise<string[]>;
38
+ fetchAvailableModels(): Promise<ModelDiscoveryResult>;
37
39
  }
38
40
  //# sourceMappingURL=copilot-language-models-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-language-models-manager.d.ts","sourceRoot":"","sources":["../../src/common/copilot-language-models-manager.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,oCAAoC,6CAA6C,CAAC;AAC/F,eAAO,MAAM,4BAA4B,eAAyC,CAAC;AAEnF,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAE7C,MAAM,WAAW,uBAAuB;IACpC;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,4BAA4B;IACzC;;OAEG;IACH,4BAA4B,CAAC,GAAG,MAAM,EAAE,uBAAuB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF;;OAEG;IACH,oBAAoB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAClD;;OAEG;IACH,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC;;;OAGG;IACH,sBAAsB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC/C"}
1
+ {"version":3,"file":"copilot-language-models-manager.d.ts","sourceRoot":"","sources":["../../src/common/copilot-language-models-manager.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,eAAO,MAAM,oCAAoC,6CAA6C,CAAC;AAC/F,eAAO,MAAM,4BAA4B,eAAyC,CAAC;AAEnF,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAE7C,MAAM,WAAW,uBAAuB;IACpC;;;OAGG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,4BAA4B;IACzC;;OAEG;IACH,4BAA4B,CAAC,GAAG,MAAM,EAAE,uBAAuB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClF;;OAEG;IACH,oBAAoB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAClD;;OAEG;IACH,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC;;;;OAIG;IACH,oBAAoB,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-language-models-manager.js","sourceRoot":"","sources":["../../src/common/copilot-language-models-manager.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;;;AAEnE,QAAA,oCAAoC,GAAG,0CAA0C,CAAC;AAClF,QAAA,4BAA4B,GAAG,MAAM,CAAC,8BAA8B,CAAC,CAAC;AAEtE,QAAA,mBAAmB,GAAG,SAAS,CAAC"}
1
+ {"version":3,"file":"copilot-language-models-manager.js","sourceRoot":"","sources":["../../src/common/copilot-language-models-manager.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;;;AAGnE,QAAA,oCAAoC,GAAG,0CAA0C,CAAC;AAClF,QAAA,4BAA4B,GAAG,MAAM,CAAC,8BAA8B,CAAC,CAAC;AAEtE,QAAA,mBAAmB,GAAG,SAAS,CAAC"}
@@ -1,4 +1,4 @@
1
- import { LanguageModelRegistry, LanguageModelStatus } from '@theia/ai-core';
1
+ import { LanguageModelRegistry, LanguageModelStatus, ModelDiscoveryResult } from '@theia/ai-core';
2
2
  import { DisposableCollection, ILogger } from '@theia/core';
3
3
  import { CopilotLanguageModelsManager, CopilotModelDescription } from '../common';
4
4
  import { CopilotSdkClientProvider } from './copilot-sdk-client-provider';
@@ -32,7 +32,29 @@ export declare class CopilotLanguageModelsManagerImpl implements CopilotLanguage
32
32
  createOrUpdateLanguageModels(...modelDescriptions: CopilotModelDescription[]): Promise<void>;
33
33
  removeLanguageModels(...modelIds: string[]): void;
34
34
  refreshModelsStatus(): Promise<void>;
35
- fetchAvailableModelIds(): Promise<string[]>;
35
+ fetchAvailableModels(): Promise<ModelDiscoveryResult>;
36
+ /**
37
+ * Nominates the models the chat input should show without the user asking, up to
38
+ * {@link NOMINATED_MODEL_COUNT}. Copilot serves models of several vendors under one provider, so
39
+ * ranking them against each other by the numbers in their ids would show several models of
40
+ * whichever vendor counts highest and none of the others. The list is therefore filled vendor by
41
+ * vendor: `auto` first, which lets Copilot itself choose and is the entry most users want, then the
42
+ * newest model of each major vendor, then the next of each in turn until the list is full.
43
+ *
44
+ * Everything else Copilot carries is left to be chosen deliberately: the list is meant to be the
45
+ * handful of models one switches between while chatting, not a survey of the catalogue.
46
+ *
47
+ * Release-pinned ids are left out: the undated id of the same model is nominated, and pinning a
48
+ * release is the deliberate choice the check on its row makes.
49
+ */
50
+ protected selectFeaturedModelIds(modelIds: string[]): Set<string>;
51
+ /**
52
+ * The vendor a Copilot model id belongs to, or `undefined` for a vendor that is not nominated.
53
+ * Matching on the id is all there is — the CLI reports nothing else — and it is deliberately narrow:
54
+ * a model of a vendor this does not name is still registered and still selectable, it is simply not
55
+ * one of the few the chat input starts with.
56
+ */
57
+ protected vendorOf(id: string): string | undefined;
36
58
  /**
37
59
  * Records the outcome of the last model discovery and reflects it in the status of the models.
38
60
  */
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-language-models-manager-impl.d.ts","sourceRoot":"","sources":["../../src/node/copilot-language-models-manager-impl.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAO,MAAM,aAAa,CAAC;AAEjE,OAAO,EAAE,4BAA4B,EAAE,uBAAuB,EAAuB,MAAM,WAAW,CAAC;AAEvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;GAGG;AACH,qBACa,gCAAiC,YAAW,4BAA4B;IAGjF,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAGhE,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAC;IAGvD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;IAG/D,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEnC,SAAS,CAAC,QAAQ,CAAC,SAAS,uBAA8B;IAE1D;;;;;;;OAOG;IACH,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IAG/C,SAAS,CAAC,IAAI,IAAI,IAAI;IAQtB;;;OAGG;IAEH,SAAS,CAAC,IAAI,IAAI,IAAI;cAIN,eAAe,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAWzD,4BAA4B,CAAC,GAAG,iBAAiB,EAAE,uBAAuB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BlG,oBAAoB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAI3C,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAapC,sBAAsB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAajD;;OAEG;cACa,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAOlF"}
1
+ {"version":3,"file":"copilot-language-models-manager-impl.d.ts","sourceRoot":"","sources":["../../src/node/copilot-language-models-manager-impl.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAoB,qBAAqB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACpH,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAO,MAAM,aAAa,CAAC;AAEjE,OAAO,EAAE,4BAA4B,EAAE,uBAAuB,EAAuB,MAAM,WAAW,CAAC;AAoBvG,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;GAGG;AACH,qBACa,gCAAiC,YAAW,4BAA4B;IAGjF,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IAGhE,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAC;IAGvD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,wBAAwB,CAAC;IAG/D,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAEnC,SAAS,CAAC,QAAQ,CAAC,SAAS,uBAA8B;IAE1D;;;;;;;OAOG;IACH,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IAG/C,SAAS,CAAC,IAAI,IAAI,IAAI;IAQtB;;;OAGG;IAEH,SAAS,CAAC,IAAI,IAAI,IAAI;cAIN,eAAe,IAAI,OAAO,CAAC,mBAAmB,CAAC;IAWzD,4BAA4B,CAAC,GAAG,iBAAiB,EAAE,uBAAuB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BlG,oBAAoB,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAI3C,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAapC,oBAAoB,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAgB3D;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;IAiCjE;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOlD;;OAEG;cACa,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAOlF"}
@@ -21,6 +21,21 @@ const ai_core_1 = require("@theia/ai-core");
21
21
  const core_1 = require("@theia/core");
22
22
  const inversify_1 = require("@theia/core/shared/inversify");
23
23
  const common_1 = require("../common");
24
+ /** The id under which Copilot offers its own model selection; always worth showing. */
25
+ const COPILOT_AUTO_MODEL_ID = 'auto';
26
+ /** How many models Copilot nominates, matching what the other providers feature. */
27
+ const NOMINATED_MODEL_COUNT = 5;
28
+ /**
29
+ * The vendors one Copilot model each is nominated for, recognised by the prefix of the model id.
30
+ * Deliberately the three whose models the other providers of this application offer directly: those
31
+ * are the ones a user coming to the chat input expects to switch between. Copilot carries more, and
32
+ * they remain registered and selectable — just not preselected.
33
+ */
34
+ const NOMINATED_VENDORS = [
35
+ { vendor: 'anthropic', matches: /^claude/i },
36
+ { vendor: 'openai', matches: /^(gpt|chatgpt|o\d)/i },
37
+ { vendor: 'google', matches: /^gemini/i }
38
+ ];
24
39
  const copilot_sdk_language_model_1 = require("./copilot-sdk-language-model");
25
40
  const copilot_sdk_client_provider_1 = require("./copilot-sdk-client-provider");
26
41
  const copilot_auth_service_impl_1 = require("./copilot-auth-service-impl");
@@ -92,18 +107,78 @@ let CopilotLanguageModelsManagerImpl = class CopilotLanguageModelsManagerImpl {
92
107
  }
93
108
  }
94
109
  }
95
- async fetchAvailableModelIds() {
110
+ async fetchAvailableModels() {
96
111
  try {
97
112
  const modelIds = await this.sdkClientProvider.listModelIds();
98
113
  this.logger.info(`Copilot: discovered ${modelIds.length} models [${modelIds.join(', ')}]`);
99
114
  await this.setDiscoveryFailure(undefined);
100
- return modelIds;
115
+ // The CLI reports nothing but the id: no display name, and no release date to order by.
116
+ const featured = this.selectFeaturedModelIds(modelIds);
117
+ return { models: modelIds.map(id => ({ id, featured: featured.has(id) })), fromCache: false };
101
118
  }
102
119
  catch (error) {
120
+ const message = error instanceof Error ? error.message : String(error);
103
121
  this.logger.warn('Copilot: failed to fetch available models via the Copilot CLI:', error);
104
- await this.setDiscoveryFailure(error instanceof Error ? error.message : String(error));
105
- return [];
122
+ await this.setDiscoveryFailure(message);
123
+ return { models: [], fromCache: false, error: message };
124
+ }
125
+ }
126
+ /**
127
+ * Nominates the models the chat input should show without the user asking, up to
128
+ * {@link NOMINATED_MODEL_COUNT}. Copilot serves models of several vendors under one provider, so
129
+ * ranking them against each other by the numbers in their ids would show several models of
130
+ * whichever vendor counts highest and none of the others. The list is therefore filled vendor by
131
+ * vendor: `auto` first, which lets Copilot itself choose and is the entry most users want, then the
132
+ * newest model of each major vendor, then the next of each in turn until the list is full.
133
+ *
134
+ * Everything else Copilot carries is left to be chosen deliberately: the list is meant to be the
135
+ * handful of models one switches between while chatting, not a survey of the catalogue.
136
+ *
137
+ * Release-pinned ids are left out: the undated id of the same model is nominated, and pinning a
138
+ * release is the deliberate choice the check on its row makes.
139
+ */
140
+ selectFeaturedModelIds(modelIds) {
141
+ const featured = new Set();
142
+ const byVendor = new Map();
143
+ for (const id of modelIds) {
144
+ if (id === COPILOT_AUTO_MODEL_ID) {
145
+ featured.add(id);
146
+ continue;
147
+ }
148
+ if (ai_core_1.DiscoveredModels.undatedId(id) !== undefined) {
149
+ continue;
150
+ }
151
+ const vendor = this.vendorOf(id);
152
+ if (!vendor) {
153
+ continue;
154
+ }
155
+ byVendor.set(vendor, [...byVendor.get(vendor) ?? [], id]);
156
+ }
157
+ // Newest first within each vendor, the vendors themselves in the order they are named.
158
+ const ranked = NOMINATED_VENDORS.map(({ vendor }) => [...byVendor.get(vendor) ?? []].sort((left, right) => ai_core_1.DiscoveredModels.compareByVersion(left, right)));
159
+ for (let rank = 0; featured.size < NOMINATED_MODEL_COUNT && ranked.some(ids => ids.length > rank); rank++) {
160
+ for (const ids of ranked) {
161
+ if (featured.size >= NOMINATED_MODEL_COUNT) {
162
+ break;
163
+ }
164
+ if (ids[rank] !== undefined) {
165
+ featured.add(ids[rank]);
166
+ }
167
+ }
106
168
  }
169
+ return featured;
170
+ }
171
+ /**
172
+ * The vendor a Copilot model id belongs to, or `undefined` for a vendor that is not nominated.
173
+ * Matching on the id is all there is — the CLI reports nothing else — and it is deliberately narrow:
174
+ * a model of a vendor this does not name is still registered and still selectable, it is simply not
175
+ * one of the few the chat input starts with.
176
+ */
177
+ vendorOf(id) {
178
+ // Matched against the last segment, so that an id the CLI qualifies with its vendor
179
+ // (`google/gemini-2.5-pro`) is recognised as readily as a bare one.
180
+ const name = id.substring(id.lastIndexOf('/') + 1);
181
+ return NOMINATED_VENDORS.find(candidate => candidate.matches.test(name))?.vendor;
107
182
  }
108
183
  /**
109
184
  * Records the outcome of the last model discovery and reflects it in the status of the models.
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-language-models-manager-impl.js","sourceRoot":"","sources":["../../src/node/copilot-language-models-manager-impl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"copilot-language-models-manager-impl.js","sourceRoot":"","sources":["../../src/node/copilot-language-models-manager-impl.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,9 @@ class FakeRegistry {
47
47
  }
48
48
  }
49
49
  class TestableCopilotLanguageModelsManagerImpl extends copilot_language_models_manager_impl_1.CopilotLanguageModelsManagerImpl {
50
+ callVendorOf(id) {
51
+ return this.vendorOf(id);
52
+ }
50
53
  constructor(registry) {
51
54
  super();
52
55
  this.registry = registry;
@@ -88,7 +91,9 @@ describe('CopilotLanguageModelsManagerImpl - status', () => {
88
91
  });
89
92
  it('should report models as unavailable when they cannot be listed, rather than as ready', async () => {
90
93
  manager.listFailure = new Error('not authorized to use this Copilot feature');
91
- (0, chai_1.expect)(await manager.fetchAvailableModelIds()).to.be.empty;
94
+ const result = await manager.fetchAvailableModels();
95
+ (0, chai_1.expect)(result.models).to.be.empty;
96
+ (0, chai_1.expect)(result.error).to.contain('not authorized');
92
97
  const status = await manager.callCalculateStatus();
93
98
  (0, chai_1.expect)(status.status).to.equal('unavailable');
94
99
  (0, chai_1.expect)(status.message).to.contain('not authorized');
@@ -96,18 +101,56 @@ describe('CopilotLanguageModelsManagerImpl - status', () => {
96
101
  it('should reflect a failed listing in the models that are already registered', async () => {
97
102
  await manager.createOrUpdateLanguageModels({ id: 'copilot/gpt-5', model: 'gpt-5', maxRetries: 3 });
98
103
  manager.listFailure = new Error('socket hang up');
99
- await manager.fetchAvailableModelIds();
104
+ await manager.fetchAvailableModels();
100
105
  (0, chai_1.expect)(manager.registry.patches.map(patch => patch.id)).to.deep.equal(['copilot/gpt-5']);
101
106
  (0, chai_1.expect)(manager.registry.models[0].status).to.deep.include({ status: 'unavailable' });
102
107
  });
103
108
  it('should report ready again once the models can be listed', async () => {
104
109
  await manager.createOrUpdateLanguageModels({ id: 'copilot/gpt-5', model: 'gpt-5', maxRetries: 3 });
105
110
  manager.listFailure = new Error('socket hang up');
106
- await manager.fetchAvailableModelIds();
111
+ await manager.fetchAvailableModels();
107
112
  manager.listFailure = undefined;
108
- (0, chai_1.expect)(await manager.fetchAvailableModelIds()).to.deep.equal(['gpt-5']);
113
+ (0, chai_1.expect)((await manager.fetchAvailableModels()).models).to.deep.equal([{ id: 'gpt-5', featured: true }]);
109
114
  (0, chai_1.expect)(manager.registry.models[0].status).to.deep.equal({ status: 'ready' });
110
115
  });
116
+ it('nominates auto and one model of each major vendor before a second of any', async () => {
117
+ manager.modelIds = ['auto', 'gpt-5', 'gpt-4.1', 'claude-sonnet-4.5', 'claude-haiku-4', 'gemini-2.5-pro', 'gpt-5-2026-04-17'];
118
+ const featured = (await manager.fetchAvailableModels()).models.filter(model => model.featured).map(model => model.id);
119
+ // Five in total: auto, the newest of each vendor, then the next of the first vendor with one left.
120
+ (0, chai_1.expect)(featured).to.have.members(['auto', 'gpt-5', 'claude-sonnet-4.5', 'gemini-2.5-pro', 'claude-haiku-4']);
121
+ });
122
+ it('fills the list to five even when the CLI offers no auto', async () => {
123
+ manager.modelIds = ['gpt-5', 'gpt-4.1', 'claude-sonnet-4.5', 'claude-haiku-4', 'gemini-3-pro', 'gemini-2.5-pro'];
124
+ const featured = (await manager.fetchAvailableModels()).models.filter(model => model.featured).map(model => model.id);
125
+ (0, chai_1.expect)(featured).to.have.members(['gpt-5', 'claude-sonnet-4.5', 'gemini-3-pro', 'gpt-4.1', 'claude-haiku-4']);
126
+ });
127
+ it('nominates no more than the five, however much one vendor offers', async () => {
128
+ manager.modelIds = ['gpt-5', 'gpt-5-mini', 'gpt-4.1', 'gpt-4o', 'o5-preview', 'chatgpt-5-latest'];
129
+ const featured = (await manager.fetchAvailableModels()).models.filter(model => model.featured).map(model => model.id);
130
+ (0, chai_1.expect)(featured).to.have.lengthOf(5);
131
+ });
132
+ it('counts the reasoning models as OpenAI, rather than as a vendor of their own', () => {
133
+ (0, chai_1.expect)(manager.callVendorOf('o5-preview')).to.equal('openai');
134
+ (0, chai_1.expect)(manager.callVendorOf('gpt-4.1')).to.equal('openai');
135
+ (0, chai_1.expect)(manager.callVendorOf('claude-sonnet-4.5')).to.equal('anthropic');
136
+ (0, chai_1.expect)(manager.callVendorOf('grok-code-fast-1')).to.equal(undefined);
137
+ });
138
+ it('nominates nothing for the vendors beyond the three, which stay selectable but not preselected', async () => {
139
+ manager.modelIds = ['claude-sonnet-4.5', 'grok-code-fast-1', 'mistral-large', 'llama-4-maverick'];
140
+ const result = await manager.fetchAvailableModels();
141
+ (0, chai_1.expect)(result.models.map(model => model.id)).to.have.lengthOf(4);
142
+ (0, chai_1.expect)(result.models.filter(model => model.featured).map(model => model.id)).to.deep.equal(['claude-sonnet-4.5']);
143
+ });
144
+ it('recognises a vendor-qualified id, in case the CLI reports them that way', async () => {
145
+ manager.modelIds = ['google/gemini-2.5-pro', 'anthropic/claude-sonnet-4.5'];
146
+ const featured = (await manager.fetchAvailableModels()).models.filter(model => model.featured).map(model => model.id);
147
+ (0, chai_1.expect)(featured).to.have.members(['google/gemini-2.5-pro', 'anthropic/claude-sonnet-4.5']);
148
+ });
149
+ it('never nominates a release-pinned id, whose undated form is nominated instead', async () => {
150
+ manager.modelIds = ['gpt-5', 'gpt-5-2026-04-17'];
151
+ const featured = (await manager.fetchAvailableModels()).models.filter(model => model.featured).map(model => model.id);
152
+ (0, chai_1.expect)(featured).to.deep.equal(['gpt-5']);
153
+ });
111
154
  it('should update an existing model instead of registering it twice', async () => {
112
155
  await manager.createOrUpdateLanguageModels({ id: 'copilot/gpt-5', model: 'gpt-5', maxRetries: 3 });
113
156
  await manager.createOrUpdateLanguageModels({ id: 'copilot/gpt-5', model: 'gpt-5', maxRetries: 5 });
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-language-models-manager-impl.spec.js","sourceRoot":"","sources":["../../src/node/copilot-language-models-manager-impl.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"copilot-language-models-manager-impl.spec.js","sourceRoot":"","sources":["../../src/node/copilot-language-models-manager-impl.spec.ts"],"names":[],"mappings":"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"}
@@ -7,9 +7,10 @@ import type { BlobMessageAttachment, ModelInfo, SystemMessageConfig } from './co
7
7
  * Models whose policy is explicitly `disabled` are filtered out; `enabled` and
8
8
  * `unconfigured` models are kept. Order is preserved and duplicates are removed.
9
9
  *
10
- * The list can name the same model both by its family and by its dated releases. Offering the user
11
- * several entries that select the same model is noise, so a dated release is dropped when the family
12
- * it belongs to is offered as well. It is kept when it is the only way to select that model.
10
+ * The list can name the same model both by its family and by its dated releases, and both are kept:
11
+ * the family is what the model pickers offer, while a dated release stays selectable for anyone who
12
+ * wants to pin one. This mirrors the other providers, where discovery reports every release and only
13
+ * the undated ids are featured.
13
14
  */
14
15
  export declare function selectSdkModelIds(models: ModelInfo[]): string[];
15
16
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-sdk-mappers.d.ts","sourceRoot":"","sources":["../../src/node/copilot-sdk-mappers.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAkD,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtG,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAQjG;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAmB/D;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACtB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,WAAW,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACzC;AA4CD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,SAAS,CA6B1E;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAczF"}
1
+ {"version":3,"file":"copilot-sdk-mappers.d.ts","sourceRoot":"","sources":["../../src/node/copilot-sdk-mappers.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAkD,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtG,OAAO,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAEjG;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAc/D;AAED;;;GAGG;AACH,MAAM,WAAW,SAAS;IACtB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,WAAW,CAAC,EAAE,qBAAqB,EAAE,CAAC;CACzC;AA4CD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,SAAS,CA6B1E;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAczF"}
@@ -19,11 +19,6 @@ exports.selectSdkModelIds = selectSdkModelIds;
19
19
  exports.buildSdkPrompt = buildSdkPrompt;
20
20
  exports.buildSdkSystemMessage = buildSdkSystemMessage;
21
21
  const ai_core_1 = require("@theia/ai-core");
22
- /**
23
- * Recognizes an id that names a dated release of another model, such as
24
- * `gpt-4o-2024-11-20` or `claude-sonnet-5-20260514` for `gpt-4o` and `claude-sonnet-5`.
25
- */
26
- const DATED_MODEL_ID = /^(.+?)-(\d{4}-\d{2}-\d{2}|\d{8})$/;
27
22
  /**
28
23
  * Selects the model IDs that should be surfaced to Theia from the list returned
29
24
  * by `CopilotClient.listModels()`.
@@ -31,12 +26,12 @@ const DATED_MODEL_ID = /^(.+?)-(\d{4}-\d{2}-\d{2}|\d{8})$/;
31
26
  * Models whose policy is explicitly `disabled` are filtered out; `enabled` and
32
27
  * `unconfigured` models are kept. Order is preserved and duplicates are removed.
33
28
  *
34
- * The list can name the same model both by its family and by its dated releases. Offering the user
35
- * several entries that select the same model is noise, so a dated release is dropped when the family
36
- * it belongs to is offered as well. It is kept when it is the only way to select that model.
29
+ * The list can name the same model both by its family and by its dated releases, and both are kept:
30
+ * the family is what the model pickers offer, while a dated release stays selectable for anyone who
31
+ * wants to pin one. This mirrors the other providers, where discovery reports every release and only
32
+ * the undated ids are featured.
37
33
  */
38
34
  function selectSdkModelIds(models) {
39
- const available = new Set(models.filter(model => model.id && model.policy?.state !== 'disabled').map(model => model.id));
40
35
  const result = [];
41
36
  const seen = new Set();
42
37
  for (const model of models) {
@@ -46,10 +41,6 @@ function selectSdkModelIds(models) {
46
41
  if (model.policy && model.policy.state === 'disabled') {
47
42
  continue;
48
43
  }
49
- const family = model.id.match(DATED_MODEL_ID)?.[1];
50
- if (family && available.has(family)) {
51
- continue;
52
- }
53
44
  seen.add(model.id);
54
45
  result.push(model.id);
55
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-sdk-mappers.js","sourceRoot":"","sources":["../../src/node/copilot-sdk-mappers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"copilot-sdk-mappers.js","sourceRoot":"","sources":["../../src/node/copilot-sdk-mappers.ts"],"names":[],"mappings":"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"}
@@ -39,14 +39,16 @@ describe('copilot-sdk-mappers - selectSdkModelIds', () => {
39
39
  ]);
40
40
  (0, chai_1.expect)(result).to.deep.equal(['a', 'b']);
41
41
  });
42
- it('drops a dated release when its family is offered as well', () => {
42
+ it('keeps a dated release alongside its family, so a release can be pinned', () => {
43
43
  const result = (0, copilot_sdk_mappers_1.selectSdkModelIds)([
44
44
  model('gpt-5'),
45
45
  model('gpt-5-2026-04-17'),
46
46
  model('claude-sonnet-5'),
47
47
  model('claude-sonnet-5-20260514')
48
48
  ]);
49
- (0, chai_1.expect)(result).to.deep.equal(['gpt-5', 'claude-sonnet-5']);
49
+ // Which of them the model pickers offer is decided by the favorite models service, which
50
+ // features the families; the releases stay selectable for whoever wants one.
51
+ (0, chai_1.expect)(result).to.deep.equal(['gpt-5', 'gpt-5-2026-04-17', 'claude-sonnet-5', 'claude-sonnet-5-20260514']);
50
52
  });
51
53
  it('keeps a dated release that is the only way to select that model', () => {
52
54
  const result = (0, copilot_sdk_mappers_1.selectSdkModelIds)([model('gpt-5'), model('o5-preview-2026-03-01')]);
@@ -1 +1 @@
1
- {"version":3,"file":"copilot-sdk-mappers.spec.js","sourceRoot":"","sources":["../../src/node/copilot-sdk-mappers.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"copilot-sdk-mappers.spec.js","sourceRoot":"","sources":["../../src/node/copilot-sdk-mappers.spec.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@theia/ai-copilot",
3
- "version": "1.76.0-next.23+0b5a5f271",
3
+ "version": "1.76.0-next.33+b2eb1241aff",
4
4
  "description": "Theia - GitHub Copilot Integration",
5
5
  "dependencies": {
6
- "@theia/ai-core": "1.76.0-next.23+0b5a5f271",
7
- "@theia/core": "1.76.0-next.23+0b5a5f271",
6
+ "@theia/ai-core": "1.76.0-next.33+b2eb1241aff",
7
+ "@theia/core": "1.76.0-next.33+b2eb1241aff",
8
8
  "tslib": "^2.8.1"
9
9
  },
10
10
  "publishConfig": {
@@ -46,5 +46,5 @@
46
46
  "nyc": {
47
47
  "extends": "../../configs/nyc.json"
48
48
  },
49
- "gitHead": "0b5a5f27164581ca47b8d7c08eaf690ac23d932f"
49
+ "gitHead": "b2eb1241affdedd531d80bea661973a12ba02e25"
50
50
  }
@@ -22,6 +22,9 @@ import { CopilotAuthService, CopilotLanguageModelsManager, CopilotModelDescripti
22
22
  import { COPILOT_ENABLED_PREF, COPILOT_ENTERPRISE_URL_PREF, COPILOT_EXECUTABLE_PATH_PREF, COPILOT_MODEL_OVERRIDES_PREF } from '../common/copilot-preferences';
23
23
  import { AICorePreferences, PREFERENCE_NAME_MAX_RETRIES } from '@theia/ai-core/lib/common/ai-core-preferences';
24
24
  import { CopilotCommands } from './copilot-command-contribution';
25
+ import { ModelDiscoveryStatusService } from '@theia/ai-core/lib/browser';
26
+
27
+ const COPILOT_PROVIDER_LABEL = 'GitHub Copilot';
25
28
 
26
29
  @injectable()
27
30
  export class CopilotFrontendApplicationContribution implements FrontendApplicationContribution {
@@ -44,11 +47,19 @@ export class CopilotFrontendApplicationContribution implements FrontendApplicati
44
47
  @inject(CommandService)
45
48
  protected readonly commandService: CommandService;
46
49
 
50
+ @inject(ModelDiscoveryStatusService)
51
+ protected readonly discoveryStatus: ModelDiscoveryStatusService;
52
+
47
53
  protected prevModels: string[] = [];
48
54
  protected useAutoDiscovery = false;
49
55
 
50
56
  onStart(): void {
51
57
  this.preferenceService.ready.then(async () => {
58
+ this.discoveryStatus.registerProvider({
59
+ providerId: COPILOT_PROVIDER_ID,
60
+ label: COPILOT_PROVIDER_LABEL,
61
+ refresh: () => this.initializeModels()
62
+ });
52
63
  // Before anything reaches for the CLI: the backend cannot read the preferences itself.
53
64
  await this.updateExecutablePath();
54
65
  if (this.isCopilotEnabled()) {
@@ -56,8 +67,9 @@ export class CopilotFrontendApplicationContribution implements FrontendApplicati
56
67
  if (authState.migrationRequired) {
57
68
  this.notifySignInRequired();
58
69
  }
59
- await this.initializeModels();
60
70
  }
71
+ // Also when disabled: that is a state of its own on the provider's page, not the absence of one.
72
+ await this.initializeModels();
61
73
 
62
74
  this.preferenceService.onPreferenceChanged(event => {
63
75
  if (event.preferenceName === COPILOT_EXECUTABLE_PATH_PREF) {
@@ -72,6 +84,7 @@ export class CopilotFrontendApplicationContribution implements FrontendApplicati
72
84
  this.initializeModels();
73
85
  } else {
74
86
  this.removeAllCopilotModels();
87
+ this.initializeModels();
75
88
  }
76
89
  } else if (event.preferenceName === COPILOT_ENTERPRISE_URL_PREF) {
77
90
  // The domain is only read at sign-in time, so a change while signed in has no effect
@@ -96,6 +109,7 @@ export class CopilotFrontendApplicationContribution implements FrontendApplicati
96
109
  await this.discoverAndRegisterModels();
97
110
  } else {
98
111
  this.removeAllCopilotModels();
112
+ this.setSignInRequiredStatus();
99
113
  }
100
114
  }
101
115
  });
@@ -158,9 +172,41 @@ export class CopilotFrontendApplicationContribution implements FrontendApplicati
158
172
  }
159
173
  }
160
174
 
175
+ /** The state of a provider whose credential is a sign-in that has not happened, with the way to fix it. */
176
+ protected setSignInRequiredStatus(): void {
177
+ this.discoveryStatus.updateStatus(COPILOT_PROVIDER_ID, {
178
+ state: 'no-credentials',
179
+ // What Copilot lacks is a sign-in, not an API key, so it says so rather than letting the
180
+ // state speak for it.
181
+ stateLabel: nls.localizeByDefault('Not signed in'),
182
+ message: nls.localize('theia/ai/copilot/discovery/signedOut',
183
+ 'Not signed in to GitHub Copilot. Sign in to discover the models it offers.'),
184
+ action: { label: CopilotCommands.SIGN_IN.label!, commandId: CopilotCommands.SIGN_IN.id }
185
+ });
186
+ }
187
+
161
188
  protected async initializeModels(): Promise<void> {
189
+ if (!this.isCopilotEnabled()) {
190
+ this.discoveryStatus.updateStatus(COPILOT_PROVIDER_ID, {
191
+ state: 'no-credentials',
192
+ stateLabel: nls.localizeByDefault('Disabled'),
193
+ message: nls.localize('theia/ai/copilot/discovery/disabled', 'The GitHub Copilot provider is disabled. Enable it to discover models.'),
194
+ action: undefined
195
+ });
196
+ return;
197
+ }
162
198
  const configuredModels = this.preferenceService.get<string[]>(COPILOT_MODEL_OVERRIDES_PREF, []);
163
199
  if (configuredModels.length > 0) {
200
+ this.discoveryStatus.updateStatus(COPILOT_PROVIDER_ID, {
201
+ state: 'overridden',
202
+ stateLabel: undefined,
203
+ discovered: configuredModels.map(id => ({ id })),
204
+ message: nls.localize('theia/ai/copilot/discovery/overridden',
205
+ 'The model list is configured manually. Clear the model overrides to discover the models from GitHub Copilot again.'),
206
+ lastFetch: undefined,
207
+ fromCache: false,
208
+ action: undefined
209
+ });
164
210
  this.useAutoDiscovery = false;
165
211
  this.manager.createOrUpdateLanguageModels(
166
212
  ...configuredModels.map((modelId: string) => this.createCopilotModelDescription(modelId))
@@ -173,7 +219,32 @@ export class CopilotFrontendApplicationContribution implements FrontendApplicati
173
219
  }
174
220
 
175
221
  protected async discoverAndRegisterModels(): Promise<void> {
176
- const modelIds = await this.manager.fetchAvailableModelIds();
222
+ // Runs are queued rather than overlapped: startup, a key change and a manual refresh can all
223
+ // ask within a moment of each other, and two runs in flight would compute what to unregister
224
+ // from the same stale list and leave the registry disagreeing with the provider.
225
+ this.discovering = this.discovering.then(() => this.runDiscovery().catch(error => this.discoveryStatus.reportError(COPILOT_PROVIDER_ID, error)));
226
+ return this.discovering;
227
+ }
228
+
229
+ protected discovering: Promise<void> = Promise.resolve();
230
+
231
+ protected async runDiscovery(): Promise<void> {
232
+ // Signing in is Copilot's equivalent of setting an API key, so a missing sign-in reads like a
233
+ // missing credential rather than like a failure: the CLI would answer the list call with an
234
+ // authorization error, which says the same thing in a way nobody can act on.
235
+ if (!(await this.authService.getAuthState()).isAuthenticated) {
236
+ this.setSignInRequiredStatus();
237
+ return;
238
+ }
239
+ this.discoveryStatus.updateStatus(COPILOT_PROVIDER_ID, { state: 'fetching', stateLabel: undefined, message: undefined, action: undefined });
240
+ const { models, error } = await this.manager.fetchAvailableModels();
241
+ if (error) {
242
+ // The models of an earlier discovery stay registered; the manager already marks them
243
+ // unavailable, so they are visible as such rather than silently gone.
244
+ this.discoveryStatus.updateStatus(COPILOT_PROVIDER_ID, { state: 'error', stateLabel: undefined, message: error, action: undefined });
245
+ return;
246
+ }
247
+ const modelIds = models.map(model => model.id);
177
248
  if (modelIds.length > 0) {
178
249
  const modelsToRemove = this.prevModels.filter(m => !modelIds.includes(m));
179
250
  if (modelsToRemove.length > 0) {
@@ -186,6 +257,15 @@ export class CopilotFrontendApplicationContribution implements FrontendApplicati
186
257
  );
187
258
  this.prevModels = [...modelIds];
188
259
  }
260
+ this.discoveryStatus.updateStatus(COPILOT_PROVIDER_ID, {
261
+ state: 'ready',
262
+ stateLabel: undefined,
263
+ discovered: models,
264
+ message: undefined,
265
+ lastFetch: Date.now(),
266
+ fromCache: false,
267
+ action: undefined
268
+ });
189
269
  }
190
270
 
191
271
  protected removeAllCopilotModels(): void {
@@ -14,6 +14,7 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
+ import { ModelDiscoveryResult } from '@theia/ai-core/lib/common';
17
18
  export const COPILOT_LANGUAGE_MODELS_MANAGER_PATH = '/services/copilot/language-model-manager';
18
19
  export const CopilotLanguageModelsManager = Symbol('CopilotLanguageModelsManager');
19
20
 
@@ -49,8 +50,9 @@ export interface CopilotLanguageModelsManager {
49
50
  */
50
51
  refreshModelsStatus(): Promise<void>;
51
52
  /**
52
- * Fetches the list of available model IDs from the Copilot CLI.
53
- * Requires the CLI to be signed in. Returns an empty array otherwise or if the call fails.
53
+ * Fetches the models the Copilot CLI offers. Requires the CLI to be signed in; a failure is
54
+ * reported as {@link ModelDiscoveryResult.error} with no models rather than thrown, since the
55
+ * CLI being absent or signed out is an expected state rather than a fault.
54
56
  */
55
- fetchAvailableModelIds(): Promise<string[]>;
57
+ fetchAvailableModels(): Promise<ModelDiscoveryResult>;
56
58
  }
@@ -59,6 +59,10 @@ class TestableCopilotLanguageModelsManagerImpl extends CopilotLanguageModelsMana
59
59
  listFailure: Error | undefined;
60
60
  modelIds: string[] = ['gpt-5'];
61
61
 
62
+ callVendorOf(id: string): string | undefined {
63
+ return this.vendorOf(id);
64
+ }
65
+
62
66
  constructor(readonly registry: FakeRegistry) {
63
67
  super();
64
68
  Object.assign(this, {
@@ -104,7 +108,9 @@ describe('CopilotLanguageModelsManagerImpl - status', () => {
104
108
 
105
109
  it('should report models as unavailable when they cannot be listed, rather than as ready', async () => {
106
110
  manager.listFailure = new Error('not authorized to use this Copilot feature');
107
- expect(await manager.fetchAvailableModelIds()).to.be.empty;
111
+ const result = await manager.fetchAvailableModels();
112
+ expect(result.models).to.be.empty;
113
+ expect(result.error).to.contain('not authorized');
108
114
  const status = await manager.callCalculateStatus();
109
115
  expect(status.status).to.equal('unavailable');
110
116
  expect(status.message).to.contain('not authorized');
@@ -113,7 +119,7 @@ describe('CopilotLanguageModelsManagerImpl - status', () => {
113
119
  it('should reflect a failed listing in the models that are already registered', async () => {
114
120
  await manager.createOrUpdateLanguageModels({ id: 'copilot/gpt-5', model: 'gpt-5', maxRetries: 3 });
115
121
  manager.listFailure = new Error('socket hang up');
116
- await manager.fetchAvailableModelIds();
122
+ await manager.fetchAvailableModels();
117
123
  expect(manager.registry.patches.map(patch => patch.id)).to.deep.equal(['copilot/gpt-5']);
118
124
  expect(manager.registry.models[0].status).to.deep.include({ status: 'unavailable' });
119
125
  });
@@ -121,12 +127,57 @@ describe('CopilotLanguageModelsManagerImpl - status', () => {
121
127
  it('should report ready again once the models can be listed', async () => {
122
128
  await manager.createOrUpdateLanguageModels({ id: 'copilot/gpt-5', model: 'gpt-5', maxRetries: 3 });
123
129
  manager.listFailure = new Error('socket hang up');
124
- await manager.fetchAvailableModelIds();
130
+ await manager.fetchAvailableModels();
125
131
  manager.listFailure = undefined;
126
- expect(await manager.fetchAvailableModelIds()).to.deep.equal(['gpt-5']);
132
+ expect((await manager.fetchAvailableModels()).models).to.deep.equal([{ id: 'gpt-5', featured: true }]);
127
133
  expect(manager.registry.models[0].status).to.deep.equal({ status: 'ready' });
128
134
  });
129
135
 
136
+ it('nominates auto and one model of each major vendor before a second of any', async () => {
137
+ manager.modelIds = ['auto', 'gpt-5', 'gpt-4.1', 'claude-sonnet-4.5', 'claude-haiku-4', 'gemini-2.5-pro', 'gpt-5-2026-04-17'];
138
+ const featured = (await manager.fetchAvailableModels()).models.filter(model => model.featured).map(model => model.id);
139
+ // Five in total: auto, the newest of each vendor, then the next of the first vendor with one left.
140
+ expect(featured).to.have.members(['auto', 'gpt-5', 'claude-sonnet-4.5', 'gemini-2.5-pro', 'claude-haiku-4']);
141
+ });
142
+
143
+ it('fills the list to five even when the CLI offers no auto', async () => {
144
+ manager.modelIds = ['gpt-5', 'gpt-4.1', 'claude-sonnet-4.5', 'claude-haiku-4', 'gemini-3-pro', 'gemini-2.5-pro'];
145
+ const featured = (await manager.fetchAvailableModels()).models.filter(model => model.featured).map(model => model.id);
146
+ expect(featured).to.have.members(['gpt-5', 'claude-sonnet-4.5', 'gemini-3-pro', 'gpt-4.1', 'claude-haiku-4']);
147
+ });
148
+
149
+ it('nominates no more than the five, however much one vendor offers', async () => {
150
+ manager.modelIds = ['gpt-5', 'gpt-5-mini', 'gpt-4.1', 'gpt-4o', 'o5-preview', 'chatgpt-5-latest'];
151
+ const featured = (await manager.fetchAvailableModels()).models.filter(model => model.featured).map(model => model.id);
152
+ expect(featured).to.have.lengthOf(5);
153
+ });
154
+
155
+ it('counts the reasoning models as OpenAI, rather than as a vendor of their own', () => {
156
+ expect(manager.callVendorOf('o5-preview')).to.equal('openai');
157
+ expect(manager.callVendorOf('gpt-4.1')).to.equal('openai');
158
+ expect(manager.callVendorOf('claude-sonnet-4.5')).to.equal('anthropic');
159
+ expect(manager.callVendorOf('grok-code-fast-1')).to.equal(undefined);
160
+ });
161
+
162
+ it('nominates nothing for the vendors beyond the three, which stay selectable but not preselected', async () => {
163
+ manager.modelIds = ['claude-sonnet-4.5', 'grok-code-fast-1', 'mistral-large', 'llama-4-maverick'];
164
+ const result = await manager.fetchAvailableModels();
165
+ expect(result.models.map(model => model.id)).to.have.lengthOf(4);
166
+ expect(result.models.filter(model => model.featured).map(model => model.id)).to.deep.equal(['claude-sonnet-4.5']);
167
+ });
168
+
169
+ it('recognises a vendor-qualified id, in case the CLI reports them that way', async () => {
170
+ manager.modelIds = ['google/gemini-2.5-pro', 'anthropic/claude-sonnet-4.5'];
171
+ const featured = (await manager.fetchAvailableModels()).models.filter(model => model.featured).map(model => model.id);
172
+ expect(featured).to.have.members(['google/gemini-2.5-pro', 'anthropic/claude-sonnet-4.5']);
173
+ });
174
+
175
+ it('never nominates a release-pinned id, whose undated form is nominated instead', async () => {
176
+ manager.modelIds = ['gpt-5', 'gpt-5-2026-04-17'];
177
+ const featured = (await manager.fetchAvailableModels()).models.filter(model => model.featured).map(model => model.id);
178
+ expect(featured).to.deep.equal(['gpt-5']);
179
+ });
180
+
130
181
  it('should update an existing model instead of registering it twice', async () => {
131
182
  await manager.createOrUpdateLanguageModels({ id: 'copilot/gpt-5', model: 'gpt-5', maxRetries: 3 });
132
183
  await manager.createOrUpdateLanguageModels({ id: 'copilot/gpt-5', model: 'gpt-5', maxRetries: 5 });
@@ -14,10 +14,28 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { LanguageModelRegistry, LanguageModelStatus } from '@theia/ai-core';
17
+ import { DiscoveredModels, LanguageModelRegistry, LanguageModelStatus, ModelDiscoveryResult } from '@theia/ai-core';
18
18
  import { DisposableCollection, ILogger, nls } from '@theia/core';
19
19
  import { inject, injectable, named, postConstruct, preDestroy } from '@theia/core/shared/inversify';
20
20
  import { CopilotLanguageModelsManager, CopilotModelDescription, COPILOT_PROVIDER_ID } from '../common';
21
+
22
+ /** The id under which Copilot offers its own model selection; always worth showing. */
23
+ const COPILOT_AUTO_MODEL_ID = 'auto';
24
+
25
+ /** How many models Copilot nominates, matching what the other providers feature. */
26
+ const NOMINATED_MODEL_COUNT = 5;
27
+
28
+ /**
29
+ * The vendors one Copilot model each is nominated for, recognised by the prefix of the model id.
30
+ * Deliberately the three whose models the other providers of this application offer directly: those
31
+ * are the ones a user coming to the chat input expects to switch between. Copilot carries more, and
32
+ * they remain registered and selectable — just not preselected.
33
+ */
34
+ const NOMINATED_VENDORS: ReadonlyArray<{ vendor: string; matches: RegExp }> = [
35
+ { vendor: 'anthropic', matches: /^claude/i },
36
+ { vendor: 'openai', matches: /^(gpt|chatgpt|o\d)/i },
37
+ { vendor: 'google', matches: /^gemini/i }
38
+ ];
21
39
  import { CopilotSdkLanguageModel } from './copilot-sdk-language-model';
22
40
  import { CopilotSdkClientProvider } from './copilot-sdk-client-provider';
23
41
  import { CopilotAuthServiceImpl } from './copilot-auth-service-impl';
@@ -130,19 +148,82 @@ export class CopilotLanguageModelsManagerImpl implements CopilotLanguageModelsMa
130
148
  }
131
149
  }
132
150
 
133
- async fetchAvailableModelIds(): Promise<string[]> {
151
+ async fetchAvailableModels(): Promise<ModelDiscoveryResult> {
134
152
  try {
135
153
  const modelIds = await this.sdkClientProvider.listModelIds();
136
154
  this.logger.info(`Copilot: discovered ${modelIds.length} models [${modelIds.join(', ')}]`);
137
155
  await this.setDiscoveryFailure(undefined);
138
- return modelIds;
156
+ // The CLI reports nothing but the id: no display name, and no release date to order by.
157
+ const featured = this.selectFeaturedModelIds(modelIds);
158
+ return { models: modelIds.map(id => ({ id, featured: featured.has(id) })), fromCache: false };
139
159
  } catch (error) {
160
+ const message = error instanceof Error ? error.message : String(error);
140
161
  this.logger.warn('Copilot: failed to fetch available models via the Copilot CLI:', error);
141
- await this.setDiscoveryFailure(error instanceof Error ? error.message : String(error));
142
- return [];
162
+ await this.setDiscoveryFailure(message);
163
+ return { models: [], fromCache: false, error: message };
143
164
  }
144
165
  }
145
166
 
167
+ /**
168
+ * Nominates the models the chat input should show without the user asking, up to
169
+ * {@link NOMINATED_MODEL_COUNT}. Copilot serves models of several vendors under one provider, so
170
+ * ranking them against each other by the numbers in their ids would show several models of
171
+ * whichever vendor counts highest and none of the others. The list is therefore filled vendor by
172
+ * vendor: `auto` first, which lets Copilot itself choose and is the entry most users want, then the
173
+ * newest model of each major vendor, then the next of each in turn until the list is full.
174
+ *
175
+ * Everything else Copilot carries is left to be chosen deliberately: the list is meant to be the
176
+ * handful of models one switches between while chatting, not a survey of the catalogue.
177
+ *
178
+ * Release-pinned ids are left out: the undated id of the same model is nominated, and pinning a
179
+ * release is the deliberate choice the check on its row makes.
180
+ */
181
+ protected selectFeaturedModelIds(modelIds: string[]): Set<string> {
182
+ const featured = new Set<string>();
183
+ const byVendor = new Map<string, string[]>();
184
+ for (const id of modelIds) {
185
+ if (id === COPILOT_AUTO_MODEL_ID) {
186
+ featured.add(id);
187
+ continue;
188
+ }
189
+ if (DiscoveredModels.undatedId(id) !== undefined) {
190
+ continue;
191
+ }
192
+ const vendor = this.vendorOf(id);
193
+ if (!vendor) {
194
+ continue;
195
+ }
196
+ byVendor.set(vendor, [...byVendor.get(vendor) ?? [], id]);
197
+ }
198
+ // Newest first within each vendor, the vendors themselves in the order they are named.
199
+ const ranked = NOMINATED_VENDORS.map(({ vendor }) =>
200
+ [...byVendor.get(vendor) ?? []].sort((left, right) => DiscoveredModels.compareByVersion(left, right)));
201
+ for (let rank = 0; featured.size < NOMINATED_MODEL_COUNT && ranked.some(ids => ids.length > rank); rank++) {
202
+ for (const ids of ranked) {
203
+ if (featured.size >= NOMINATED_MODEL_COUNT) {
204
+ break;
205
+ }
206
+ if (ids[rank] !== undefined) {
207
+ featured.add(ids[rank]);
208
+ }
209
+ }
210
+ }
211
+ return featured;
212
+ }
213
+
214
+ /**
215
+ * The vendor a Copilot model id belongs to, or `undefined` for a vendor that is not nominated.
216
+ * Matching on the id is all there is — the CLI reports nothing else — and it is deliberately narrow:
217
+ * a model of a vendor this does not name is still registered and still selectable, it is simply not
218
+ * one of the few the chat input starts with.
219
+ */
220
+ protected vendorOf(id: string): string | undefined {
221
+ // Matched against the last segment, so that an id the CLI qualifies with its vendor
222
+ // (`google/gemini-2.5-pro`) is recognised as readily as a bare one.
223
+ const name = id.substring(id.lastIndexOf('/') + 1);
224
+ return NOMINATED_VENDORS.find(candidate => candidate.matches.test(name))?.vendor;
225
+ }
226
+
146
227
  /**
147
228
  * Records the outcome of the last model discovery and reflects it in the status of the models.
148
229
  */
@@ -44,14 +44,16 @@ describe('copilot-sdk-mappers - selectSdkModelIds', () => {
44
44
  expect(result).to.deep.equal(['a', 'b']);
45
45
  });
46
46
 
47
- it('drops a dated release when its family is offered as well', () => {
47
+ it('keeps a dated release alongside its family, so a release can be pinned', () => {
48
48
  const result = selectSdkModelIds([
49
49
  model('gpt-5'),
50
50
  model('gpt-5-2026-04-17'),
51
51
  model('claude-sonnet-5'),
52
52
  model('claude-sonnet-5-20260514')
53
53
  ]);
54
- expect(result).to.deep.equal(['gpt-5', 'claude-sonnet-5']);
54
+ // Which of them the model pickers offer is decided by the favorite models service, which
55
+ // features the families; the releases stay selectable for whoever wants one.
56
+ expect(result).to.deep.equal(['gpt-5', 'gpt-5-2026-04-17', 'claude-sonnet-5', 'claude-sonnet-5-20260514']);
55
57
  });
56
58
 
57
59
  it('keeps a dated release that is the only way to select that model', () => {
@@ -17,12 +17,6 @@
17
17
  import { Base64ImageContent, ImageContent, ImageMessage, LanguageModelMessage } from '@theia/ai-core';
18
18
  import type { BlobMessageAttachment, ModelInfo, SystemMessageConfig } from './copilot-sdk-types';
19
19
 
20
- /**
21
- * Recognizes an id that names a dated release of another model, such as
22
- * `gpt-4o-2024-11-20` or `claude-sonnet-5-20260514` for `gpt-4o` and `claude-sonnet-5`.
23
- */
24
- const DATED_MODEL_ID = /^(.+?)-(\d{4}-\d{2}-\d{2}|\d{8})$/;
25
-
26
20
  /**
27
21
  * Selects the model IDs that should be surfaced to Theia from the list returned
28
22
  * by `CopilotClient.listModels()`.
@@ -30,12 +24,12 @@ const DATED_MODEL_ID = /^(.+?)-(\d{4}-\d{2}-\d{2}|\d{8})$/;
30
24
  * Models whose policy is explicitly `disabled` are filtered out; `enabled` and
31
25
  * `unconfigured` models are kept. Order is preserved and duplicates are removed.
32
26
  *
33
- * The list can name the same model both by its family and by its dated releases. Offering the user
34
- * several entries that select the same model is noise, so a dated release is dropped when the family
35
- * it belongs to is offered as well. It is kept when it is the only way to select that model.
27
+ * The list can name the same model both by its family and by its dated releases, and both are kept:
28
+ * the family is what the model pickers offer, while a dated release stays selectable for anyone who
29
+ * wants to pin one. This mirrors the other providers, where discovery reports every release and only
30
+ * the undated ids are featured.
36
31
  */
37
32
  export function selectSdkModelIds(models: ModelInfo[]): string[] {
38
- const available = new Set(models.filter(model => model.id && model.policy?.state !== 'disabled').map(model => model.id));
39
33
  const result: string[] = [];
40
34
  const seen = new Set<string>();
41
35
  for (const model of models) {
@@ -45,10 +39,6 @@ export function selectSdkModelIds(models: ModelInfo[]): string[] {
45
39
  if (model.policy && model.policy.state === 'disabled') {
46
40
  continue;
47
41
  }
48
- const family = model.id.match(DATED_MODEL_ID)?.[1];
49
- if (family && available.has(family)) {
50
- continue;
51
- }
52
42
  seen.add(model.id);
53
43
  result.push(model.id);
54
44
  }