@codingame/monaco-vscode-api 20.0.1 → 20.1.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 (62) hide show
  1. package/missing-services.js +121 -370
  2. package/package.json +8 -8
  3. package/services.js +3 -3
  4. package/vscode/src/vs/base/browser/ui/tree/asyncDataTree.d.ts +1 -1
  5. package/vscode/src/vs/base/browser/ui/tree/asyncDataTree.js +5 -3
  6. package/vscode/src/vs/platform/product/common/product.js +3 -3
  7. package/vscode/src/vs/workbench/contrib/chat/browser/chatEditing/chatEditingEditorContextKeys.js +5 -5
  8. package/vscode/src/vs/workbench/contrib/chat/common/chatContextKeys.js +43 -43
  9. package/vscode/src/vs/workbench/contrib/chat/common/chatEditingService.js +2 -2
  10. package/vscode/src/vs/workbench/contrib/chat/common/chatVariableEntries.js +2 -2
  11. package/vscode/src/vs/workbench/contrib/chat/common/languageModelToolsService.js +4 -4
  12. package/vscode/src/vs/workbench/contrib/chat/common/languageModels.js +8 -8
  13. package/vscode/src/vs/workbench/contrib/chat/common/modelPicker/modelPickerWidget.js +1 -1
  14. package/vscode/src/vs/workbench/contrib/chat/common/tools/manageTodoListTool.d.ts +1 -0
  15. package/vscode/src/vs/workbench/contrib/chat/common/tools/manageTodoListTool.js +36 -9
  16. package/vscode/src/vs/workbench/contrib/codeActions/browser/codeActionsContribution.js +13 -13
  17. package/vscode/src/vs/workbench/contrib/codeEditor/browser/dictation/editorDictation.js +4 -4
  18. package/vscode/src/vs/workbench/contrib/codeEditor/browser/diffEditorAccessibilityHelp.js +5 -5
  19. package/vscode/src/vs/workbench/contrib/codeEditor/browser/diffEditorHelper.js +3 -3
  20. package/vscode/src/vs/workbench/contrib/codeEditor/browser/largeFileOptimizations.js +3 -3
  21. package/vscode/src/vs/workbench/contrib/codeEditor/browser/saveParticipants.js +4 -4
  22. package/vscode/src/vs/workbench/contrib/codeEditor/browser/toggleMinimap.js +2 -2
  23. package/vscode/src/vs/workbench/contrib/codeEditor/browser/toggleMultiCursorModifier.js +4 -4
  24. package/vscode/src/vs/workbench/contrib/codeEditor/browser/toggleRenderControlCharacter.js +2 -2
  25. package/vscode/src/vs/workbench/contrib/codeEditor/browser/toggleRenderWhitespace.js +2 -2
  26. package/vscode/src/vs/workbench/contrib/codeEditor/browser/toggleWordWrap.js +5 -5
  27. package/vscode/src/vs/workbench/contrib/comments/browser/commentsAccessibility.js +12 -12
  28. package/vscode/src/vs/workbench/contrib/comments/common/commentContextKeys.js +11 -11
  29. package/vscode/src/vs/workbench/contrib/debug/common/abstractDebugAdapter.js +1 -1
  30. package/vscode/src/vs/workbench/contrib/debug/common/debug.js +65 -65
  31. package/vscode/src/vs/workbench/contrib/extensions/common/extensions.js +1 -1
  32. package/vscode/src/vs/workbench/contrib/extensions/common/searchExtensionsTool.js +4 -4
  33. package/vscode/src/vs/workbench/contrib/files/browser/fileConstants.js +6 -6
  34. package/vscode/src/vs/workbench/contrib/folding/browser/folding.contribution.js +3 -3
  35. package/vscode/src/vs/workbench/contrib/format/browser/formatActionsMultiple.js +20 -20
  36. package/vscode/src/vs/workbench/contrib/format/browser/formatActionsNone.js +4 -4
  37. package/vscode/src/vs/workbench/contrib/format/browser/formatModified.js +1 -1
  38. package/vscode/src/vs/workbench/contrib/inlayHints/browser/inlayHintsAccessibilty.js +4 -4
  39. package/vscode/src/vs/workbench/contrib/list/browser/listResizeColumnAction.js +2 -2
  40. package/vscode/src/vs/workbench/contrib/list/browser/tableColumnResizeQuickPick.js +5 -5
  41. package/vscode/src/vs/workbench/contrib/mcp/common/mcpTypes.js +4 -4
  42. package/vscode/src/vs/workbench/contrib/snippets/browser/snippetCompletionProvider.js +3 -3
  43. package/vscode/src/vs/workbench/contrib/snippets/browser/snippetsFile.js +3 -3
  44. package/vscode/src/vs/workbench/contrib/snippets/browser/snippetsService.js +9 -9
  45. package/vscode/src/vs/workbench/contrib/speech/common/speechService.js +29 -29
  46. package/vscode/src/vs/workbench/contrib/tasks/common/constants.js +1 -1
  47. package/vscode/src/vs/workbench/contrib/tasks/common/taskDefinitionRegistry.js +5 -5
  48. package/vscode/src/vs/workbench/contrib/tasks/common/tasks.js +4 -4
  49. package/vscode/src/vs/workbench/contrib/testing/common/constants.js +11 -11
  50. package/vscode/src/vs/workbench/contrib/testing/common/testTypes.js +3 -3
  51. package/vscode/src/vs/workbench/services/accounts/common/defaultAccount.js +1 -1
  52. package/vscode/src/vs/workbench/services/configurationResolver/common/variableResolver.js +16 -16
  53. package/vscode/src/vs/workbench/services/editor/common/editorResolverService.js +1 -1
  54. package/vscode/src/vs/workbench/services/extensions/common/extensionsRegistry.js +86 -86
  55. package/vscode/src/vs/workbench/services/language/common/languageService.js +28 -28
  56. package/vscode/src/vs/workbench/services/log/common/logConstants.js +1 -1
  57. package/vscode/src/vs/workbench/services/remote/common/remoteExplorerService.js +8 -8
  58. package/vscode/src/vs/workbench/services/remote/common/tunnelModel.js +6 -6
  59. package/vscode/src/vs/workbench/services/search/common/queryBuilder.js +1 -1
  60. package/vscode/src/vs/workbench/services/themes/common/colorExtensionPoint.js +22 -22
  61. package/vscode/src/vs/workbench/services/themes/common/iconExtensionPoint.js +13 -13
  62. package/vscode/src/vs/workbench/services/userDataSync/common/userDataSync.js +13 -13
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codingame/monaco-vscode-api",
3
- "version": "20.0.1",
3
+ "version": "20.1.0",
4
4
  "private": false,
5
5
  "description": "VSCode public API plugged on the monaco editor",
6
6
  "keywords": [],
@@ -15,13 +15,13 @@
15
15
  },
16
16
  "type": "module",
17
17
  "dependencies": {
18
- "@codingame/monaco-vscode-base-service-override": "20.0.1",
19
- "@codingame/monaco-vscode-environment-service-override": "20.0.1",
20
- "@codingame/monaco-vscode-extensions-service-override": "20.0.1",
21
- "@codingame/monaco-vscode-files-service-override": "20.0.1",
22
- "@codingame/monaco-vscode-host-service-override": "20.0.1",
23
- "@codingame/monaco-vscode-layout-service-override": "20.0.1",
24
- "@codingame/monaco-vscode-quickaccess-service-override": "20.0.1",
18
+ "@codingame/monaco-vscode-base-service-override": "20.1.0",
19
+ "@codingame/monaco-vscode-environment-service-override": "20.1.0",
20
+ "@codingame/monaco-vscode-extensions-service-override": "20.1.0",
21
+ "@codingame/monaco-vscode-files-service-override": "20.1.0",
22
+ "@codingame/monaco-vscode-host-service-override": "20.1.0",
23
+ "@codingame/monaco-vscode-layout-service-override": "20.1.0",
24
+ "@codingame/monaco-vscode-quickaccess-service-override": "20.1.0",
25
25
  "@vscode/iconv-lite-umd": "0.7.0",
26
26
  "dompurify": "3.2.6",
27
27
  "jschardet": "3.1.4",
package/services.js CHANGED
@@ -392,10 +392,10 @@ export { IAuthenticationQueryService } from './vscode/src/vs/workbench/services/
392
392
  export { ICoreExperimentationService } from './vscode/src/vs/workbench/services/coreExperimentation/common/coreExperimentationService.service.js';
393
393
  export { IWorkbenchMcpManagementService } from './vscode/src/vs/workbench/services/mcp/common/mcpWorkbenchManagementService.service.js';
394
394
 
395
- if (window.monacoVscodeApiBuildId != null && window.monacoVscodeApiBuildId !== "1.103.0-7cd7ce72-de4d-40e3-aec6-b02f360cec10") {
396
- throw new Error(`Another version of monaco-vscode-api has already been loaded. Trying to load ${"1.103.0-7cd7ce72-de4d-40e3-aec6-b02f360cec10"}, ${window.monacoVscodeApiBuildId} is already loaded`);
395
+ if (window.monacoVscodeApiBuildId != null && window.monacoVscodeApiBuildId !== "360a4e4fd251bfce169a4ddf857c7d25d1ad40da-dea6a18f-c2be-44e0-985d-baca49cc4f0b") {
396
+ throw new Error(`Another version of monaco-vscode-api has already been loaded. Trying to load ${"360a4e4fd251bfce169a4ddf857c7d25d1ad40da-dea6a18f-c2be-44e0-985d-baca49cc4f0b"}, ${window.monacoVscodeApiBuildId} is already loaded`);
397
397
  }
398
- window.monacoVscodeApiBuildId = "1.103.0-7cd7ce72-de4d-40e3-aec6-b02f360cec10";
398
+ window.monacoVscodeApiBuildId = "360a4e4fd251bfce169a4ddf857c7d25d1ad40da-dea6a18f-c2be-44e0-985d-baca49cc4f0b";
399
399
  async function initialize(overrides, container = document.body, configuration = {}, env) {
400
400
  checkServicesNotInitialized();
401
401
  injectCss(container);
@@ -129,7 +129,7 @@ export declare class AsyncDataTree<TInput, T, TFilterData = void> implements IDi
129
129
  getInput(): TInput | undefined;
130
130
  setInput(input: TInput, viewState?: IAsyncDataTreeViewState): Promise<void>;
131
131
  updateChildren(element?: TInput | T, recursive?: boolean, rerender?: boolean, options?: IAsyncDataTreeUpdateChildrenOptions<T>): Promise<void>;
132
- cancelAllRefreshPromises(): void;
132
+ cancelAllRefreshPromises(includeSubTrees?: boolean): void;
133
133
  private _updateChildren;
134
134
  resort(element?: TInput | T, recursive?: boolean): void;
135
135
  hasNode(element: TInput | T): boolean;
@@ -546,11 +546,13 @@ class AsyncDataTree {
546
546
  async updateChildren(element = this.root.element, recursive = true, rerender = false, options) {
547
547
  await this._updateChildren(element, recursive, rerender, undefined, options);
548
548
  }
549
- cancelAllRefreshPromises() {
549
+ cancelAllRefreshPromises(includeSubTrees = false) {
550
550
  this.refreshPromises.forEach(promise => promise.cancel());
551
551
  this.refreshPromises.clear();
552
- this.subTreeRefreshPromises.forEach(promise => promise.cancel());
553
- this.subTreeRefreshPromises.clear();
552
+ if (includeSubTrees) {
553
+ this.subTreeRefreshPromises.forEach(promise => promise.cancel());
554
+ this.subTreeRefreshPromises.clear();
555
+ }
554
556
  }
555
557
  async _updateChildren(element = this.root.element, recursive = true, rerender = false, viewStateContext, options) {
556
558
  if (typeof this.root.element === 'undefined') {
@@ -4,9 +4,9 @@ import productJson from '../../../../../product.json.js';
4
4
  var product = {
5
5
  ...productJson,
6
6
  quality: 'stable',
7
- version: '1.103.0',
8
- commit: 'e3550cfac4b63ca4eafca7b601f0d2885817fd1f',
9
- date: '2025-08-12T17:54:08.645Z',
7
+ version: '1.103.1',
8
+ commit: 'null',
9
+ date: '2025-08-14T12:29:39.549Z',
10
10
  ...(globalThis._VSCODE_PRODUCT_JSON ?? {})
11
11
  };
12
12
 
@@ -17,14 +17,14 @@ import { autorun } from '../../../../../base/common/observableInternal/reactions
17
17
  import { constObservable } from '../../../../../base/common/observableInternal/observables/constObservable.js';
18
18
  import { derived } from '../../../../../base/common/observableInternal/observables/derived.js';
19
19
 
20
- const ctxIsGlobalEditingSession = ( new RawContextKey('chatEdits.isGlobalEditingSession', undefined, ( localize(4937, "The current editor is part of the global edit session"))));
21
- const ctxHasEditorModification = ( new RawContextKey('chatEdits.hasEditorModifications', undefined, ( localize(4938, "The current editor contains chat modifications"))));
22
- const ctxReviewModeEnabled = ( new RawContextKey('chatEdits.isReviewModeEnabled', true, ( localize(4939, "Review mode for chat changes is enabled"))));
20
+ const ctxIsGlobalEditingSession = ( new RawContextKey('chatEdits.isGlobalEditingSession', undefined, ( localize(4940, "The current editor is part of the global edit session"))));
21
+ const ctxHasEditorModification = ( new RawContextKey('chatEdits.hasEditorModifications', undefined, ( localize(4941, "The current editor contains chat modifications"))));
22
+ const ctxReviewModeEnabled = ( new RawContextKey('chatEdits.isReviewModeEnabled', true, ( localize(4942, "Review mode for chat changes is enabled"))));
23
23
  const ctxHasRequestInProgress = ( new RawContextKey('chatEdits.isRequestInProgress', false, ( localize(
24
- 4940,
24
+ 4943,
25
25
  "The current editor shows a file from an edit session which is still in progress"
26
26
  ))));
27
- const ctxRequestCount = ( new RawContextKey('chatEdits.requestCount', 0, ( localize(4941, "The number of turns the editing session in this editor has"))));
27
+ const ctxRequestCount = ( new RawContextKey('chatEdits.requestCount', 0, ( localize(4944, "The number of turns the editing session in this editor has"))));
28
28
  let ChatEditingEditorContextKeys = class ChatEditingEditorContextKeys {
29
29
  static { this.ID = 'chat.edits.editorContextKeys'; }
30
30
  constructor(instaService, editorGroupsService) {
@@ -11,109 +11,109 @@ var ChatContextKeys;
11
11
  'chatSessionResponseVote',
12
12
  '',
13
13
  { type: 'string', description: ( localize(
14
- 5351,
14
+ 5354,
15
15
  "When the response has been voted up, is set to 'up'. When voted down, is set to 'down'. Otherwise an empty string."
16
16
  )) }
17
17
  ));
18
18
  ChatContextKeys.responseDetectedAgentCommand = ( new RawContextKey(
19
19
  'chatSessionResponseDetectedAgentOrCommand',
20
20
  false,
21
- { type: 'boolean', description: ( localize(5352, "When the agent or command was automatically detected")) }
21
+ { type: 'boolean', description: ( localize(5355, "When the agent or command was automatically detected")) }
22
22
  ));
23
23
  ChatContextKeys.responseSupportsIssueReporting = ( new RawContextKey(
24
24
  'chatResponseSupportsIssueReporting',
25
25
  false,
26
- { type: 'boolean', description: ( localize(5353, "True when the current chat response supports issue reporting.")) }
26
+ { type: 'boolean', description: ( localize(5356, "True when the current chat response supports issue reporting.")) }
27
27
  ));
28
28
  ChatContextKeys.responseIsFiltered = ( new RawContextKey(
29
29
  'chatSessionResponseFiltered',
30
30
  false,
31
- { type: 'boolean', description: ( localize(5354, "True when the chat response was filtered out by the server.")) }
31
+ { type: 'boolean', description: ( localize(5357, "True when the chat response was filtered out by the server.")) }
32
32
  ));
33
33
  ChatContextKeys.responseHasError = ( new RawContextKey(
34
34
  'chatSessionResponseError',
35
35
  false,
36
- { type: 'boolean', description: ( localize(5355, "True when the chat response resulted in an error.")) }
36
+ { type: 'boolean', description: ( localize(5358, "True when the chat response resulted in an error.")) }
37
37
  ));
38
38
  ChatContextKeys.requestInProgress = ( new RawContextKey(
39
39
  'chatSessionRequestInProgress',
40
40
  false,
41
- { type: 'boolean', description: ( localize(5356, "True when the current request is still in progress.")) }
41
+ { type: 'boolean', description: ( localize(5359, "True when the current request is still in progress.")) }
42
42
  ));
43
43
  ChatContextKeys.currentlyEditing = ( new RawContextKey(
44
44
  'chatSessionCurrentlyEditing',
45
45
  false,
46
- { type: 'boolean', description: ( localize(5357, "True when the current request is being edited.")) }
46
+ { type: 'boolean', description: ( localize(5360, "True when the current request is being edited.")) }
47
47
  ));
48
48
  ChatContextKeys.currentlyEditingInput = ( new RawContextKey(
49
49
  'chatSessionCurrentlyEditingInput',
50
50
  false,
51
- { type: 'boolean', description: ( localize(5358, "True when the current request input at the bottom is being edited.")) }
51
+ { type: 'boolean', description: ( localize(5361, "True when the current request input at the bottom is being edited.")) }
52
52
  ));
53
53
  ChatContextKeys.isRequestPaused = ( new RawContextKey(
54
54
  'chatRequestIsPaused',
55
55
  false,
56
- { type: 'boolean', description: ( localize(5359, "True when the current request is paused.")) }
56
+ { type: 'boolean', description: ( localize(5362, "True when the current request is paused.")) }
57
57
  ));
58
58
  ChatContextKeys.canRequestBePaused = ( new RawContextKey(
59
59
  'chatCanRequestBePaused',
60
60
  false,
61
- { type: 'boolean', description: ( localize(5360, "True when the current request can be paused.")) }
62
- ));
63
- ChatContextKeys.isResponse = ( new RawContextKey('chatResponse', false, { type: 'boolean', description: ( localize(5361, "The chat item is a response.")) }));
64
- ChatContextKeys.isRequest = ( new RawContextKey('chatRequest', false, { type: 'boolean', description: ( localize(5362, "The chat item is a request")) }));
65
- ChatContextKeys.itemId = ( new RawContextKey('chatItemId', '', { type: 'string', description: ( localize(5363, "The id of the chat item.")) }));
66
- ChatContextKeys.lastItemId = ( new RawContextKey('chatLastItemId', [], { type: 'string', description: ( localize(5364, "The id of the last chat item.")) }));
67
- ChatContextKeys.editApplied = ( new RawContextKey('chatEditApplied', false, { type: 'boolean', description: ( localize(5365, "True when the chat text edits have been applied.")) }));
68
- ChatContextKeys.inputHasText = ( new RawContextKey('chatInputHasText', false, { type: 'boolean', description: ( localize(5366, "True when the chat input has text.")) }));
69
- ChatContextKeys.inputHasFocus = ( new RawContextKey('chatInputHasFocus', false, { type: 'boolean', description: ( localize(5367, "True when the chat input has focus.")) }));
70
- ChatContextKeys.inChatInput = ( new RawContextKey('inChatInput', false, { type: 'boolean', description: ( localize(5368, "True when focus is in the chat input, false otherwise.")) }));
71
- ChatContextKeys.inChatSession = ( new RawContextKey('inChat', false, { type: 'boolean', description: ( localize(5369, "True when focus is in the chat widget, false otherwise.")) }));
72
- ChatContextKeys.inChatEditor = ( new RawContextKey('inChatEditor', false, { type: 'boolean', description: ( localize(5370, "Whether focus is in a chat editor.")) }));
61
+ { type: 'boolean', description: ( localize(5363, "True when the current request can be paused.")) }
62
+ ));
63
+ ChatContextKeys.isResponse = ( new RawContextKey('chatResponse', false, { type: 'boolean', description: ( localize(5364, "The chat item is a response.")) }));
64
+ ChatContextKeys.isRequest = ( new RawContextKey('chatRequest', false, { type: 'boolean', description: ( localize(5365, "The chat item is a request")) }));
65
+ ChatContextKeys.itemId = ( new RawContextKey('chatItemId', '', { type: 'string', description: ( localize(5366, "The id of the chat item.")) }));
66
+ ChatContextKeys.lastItemId = ( new RawContextKey('chatLastItemId', [], { type: 'string', description: ( localize(5367, "The id of the last chat item.")) }));
67
+ ChatContextKeys.editApplied = ( new RawContextKey('chatEditApplied', false, { type: 'boolean', description: ( localize(5368, "True when the chat text edits have been applied.")) }));
68
+ ChatContextKeys.inputHasText = ( new RawContextKey('chatInputHasText', false, { type: 'boolean', description: ( localize(5369, "True when the chat input has text.")) }));
69
+ ChatContextKeys.inputHasFocus = ( new RawContextKey('chatInputHasFocus', false, { type: 'boolean', description: ( localize(5370, "True when the chat input has focus.")) }));
70
+ ChatContextKeys.inChatInput = ( new RawContextKey('inChatInput', false, { type: 'boolean', description: ( localize(5371, "True when focus is in the chat input, false otherwise.")) }));
71
+ ChatContextKeys.inChatSession = ( new RawContextKey('inChat', false, { type: 'boolean', description: ( localize(5372, "True when focus is in the chat widget, false otherwise.")) }));
72
+ ChatContextKeys.inChatEditor = ( new RawContextKey('inChatEditor', false, { type: 'boolean', description: ( localize(5373, "Whether focus is in a chat editor.")) }));
73
73
  ChatContextKeys.hasPromptFile = ( new RawContextKey(
74
74
  'chatPromptFileAttached',
75
75
  false,
76
- { type: 'boolean', description: ( localize(5371, "True when the chat has a prompt file attached.")) }
76
+ { type: 'boolean', description: ( localize(5374, "True when the chat has a prompt file attached.")) }
77
77
  ));
78
78
  ChatContextKeys.chatModeKind = ( new RawContextKey(
79
79
  'chatMode',
80
80
  ChatModeKind.Ask,
81
- { type: 'string', description: ( localize(5372, "The 'kind' of the current chat mode- Agent for custom modes.")) }
81
+ { type: 'string', description: ( localize(5375, "The 'kind' of the current chat mode- Agent for custom modes.")) }
82
82
  ));
83
- ChatContextKeys.chatToolCount = ( new RawContextKey('chatToolCount', 0, { type: 'number', description: ( localize(5373, "The number of tools available in the current chat mode.")) }));
83
+ ChatContextKeys.chatToolCount = ( new RawContextKey('chatToolCount', 0, { type: 'number', description: ( localize(5376, "The number of tools available in the current chat mode.")) }));
84
84
  ChatContextKeys.chatToolGroupingThreshold = ( new RawContextKey(
85
85
  'chat.toolGroupingThreshold',
86
86
  0,
87
- { type: 'number', description: ( localize(5374, "The number of tools at which we start doing virtual grouping.")) }
87
+ { type: 'number', description: ( localize(5377, "The number of tools at which we start doing virtual grouping.")) }
88
88
  ));
89
89
  ChatContextKeys.supported = ( ContextKeyExpr.or(( IsWebContext.negate()), ( RemoteNameContext.notEqualsTo('')), ( ContextKeyExpr.has('config.chat.experimental.serverlessWebEnabled'))));
90
90
  ChatContextKeys.enabled = ( new RawContextKey('chatIsEnabled', false, { type: 'boolean', description: ( localize(
91
- 5375,
91
+ 5378,
92
92
  "True when chat is enabled because a default chat participant is activated with an implementation."
93
93
  )) }));
94
94
  ChatContextKeys.lockedToCodingAgent = ( new RawContextKey(
95
95
  'lockedToCodingAgent',
96
96
  false,
97
- { type: 'boolean', description: ( localize(5376, "True when the chat widget is locked to the coding agent session.")) }
97
+ { type: 'boolean', description: ( localize(5379, "True when the chat widget is locked to the coding agent session.")) }
98
98
  ));
99
99
  ChatContextKeys.extensionParticipantRegistered = ( new RawContextKey(
100
100
  'chatPanelExtensionParticipantRegistered',
101
101
  false,
102
102
  { type: 'boolean', description: ( localize(
103
- 5377,
103
+ 5380,
104
104
  "True when a default chat participant is registered for the panel from an extension."
105
105
  )) }
106
106
  ));
107
107
  ChatContextKeys.panelParticipantRegistered = ( new RawContextKey(
108
108
  'chatPanelParticipantRegistered',
109
109
  false,
110
- { type: 'boolean', description: ( localize(5378, "True when a default chat participant is registered for the panel.")) }
110
+ { type: 'boolean', description: ( localize(5381, "True when a default chat participant is registered for the panel.")) }
111
111
  ));
112
112
  ChatContextKeys.chatEditingCanUndo = ( new RawContextKey(
113
113
  'chatEditingCanUndo',
114
114
  false,
115
115
  { type: 'boolean', description: ( localize(
116
- 5379,
116
+ 5382,
117
117
  "True when it is possible to undo an interaction in the editing panel."
118
118
  )) }
119
119
  ));
@@ -121,46 +121,46 @@ var ChatContextKeys;
121
121
  'chatEditingCanRedo',
122
122
  false,
123
123
  { type: 'boolean', description: ( localize(
124
- 5380,
124
+ 5383,
125
125
  "True when it is possible to redo an interaction in the editing panel."
126
126
  )) }
127
127
  ));
128
128
  ChatContextKeys.languageModelsAreUserSelectable = ( new RawContextKey(
129
129
  'chatModelsAreUserSelectable',
130
130
  false,
131
- { type: 'boolean', description: ( localize(5381, "True when the chat model can be selected manually by the user.")) }
131
+ { type: 'boolean', description: ( localize(5384, "True when the chat model can be selected manually by the user.")) }
132
132
  ));
133
133
  ChatContextKeys.extensionInvalid = ( new RawContextKey(
134
134
  'chatExtensionInvalid',
135
135
  false,
136
136
  { type: 'boolean', description: ( localize(
137
- 5382,
137
+ 5385,
138
138
  "True when the installed chat extension is invalid and needs to be updated."
139
139
  )) }
140
140
  ));
141
141
  ChatContextKeys.inputCursorAtTop = ( new RawContextKey('chatCursorAtTop', false));
142
142
  ChatContextKeys.inputHasAgent = ( new RawContextKey('chatInputHasAgent', false));
143
143
  ChatContextKeys.location = ( new RawContextKey('chatLocation', undefined));
144
- ChatContextKeys.inQuickChat = ( new RawContextKey('quickChatHasFocus', false, { type: 'boolean', description: ( localize(5383, "True when the quick chat UI has focus, false otherwise.")) }));
144
+ ChatContextKeys.inQuickChat = ( new RawContextKey('quickChatHasFocus', false, { type: 'boolean', description: ( localize(5386, "True when the quick chat UI has focus, false otherwise.")) }));
145
145
  ChatContextKeys.hasFileAttachments = ( new RawContextKey(
146
146
  'chatHasFileAttachments',
147
147
  false,
148
- { type: 'boolean', description: ( localize(5384, "True when the chat has file attachments.")) }
148
+ { type: 'boolean', description: ( localize(5387, "True when the chat has file attachments.")) }
149
149
  ));
150
150
  ChatContextKeys.remoteJobCreating = ( new RawContextKey(
151
151
  'chatRemoteJobCreating',
152
152
  false,
153
- { type: 'boolean', description: ( localize(5385, "True when a remote coding agent job is being created.")) }
153
+ { type: 'boolean', description: ( localize(5388, "True when a remote coding agent job is being created.")) }
154
154
  ));
155
- ChatContextKeys.hasRemoteCodingAgent = ( new RawContextKey('hasRemoteCodingAgent', false, ( localize(5386, "Whether any remote coding agent is available"))));
155
+ ChatContextKeys.hasRemoteCodingAgent = ( new RawContextKey('hasRemoteCodingAgent', false, ( localize(5389, "Whether any remote coding agent is available"))));
156
156
  ChatContextKeys.enableRemoteCodingAgentPromptFileOverlay = ( new RawContextKey('enableRemoteCodingAgentPromptFileOverlay', false, ( localize(
157
- 5387,
157
+ 5390,
158
158
  "Whether the remote coding agent prompt file overlay feature is enabled"
159
159
  ))));
160
160
  ChatContextKeys.skipChatRequestInProgressMessage = ( new RawContextKey(
161
161
  'chatSkipRequestInProgressMessage',
162
162
  false,
163
- { type: 'boolean', description: ( localize(5388, "True when the chat request in progress message should be skipped.")) }
163
+ { type: 'boolean', description: ( localize(5391, "True when the chat request in progress message should be skipped.")) }
164
164
  ));
165
165
  ChatContextKeys.Setup = {
166
166
  hidden: ( new RawContextKey('chatSetupHidden', false, true)),
@@ -184,23 +184,23 @@ var ChatContextKeys;
184
184
  hasToolConfirmation: ( new RawContextKey(
185
185
  'chatHasToolConfirmation',
186
186
  false,
187
- { type: 'boolean', description: ( localize(5389, "True when a tool confirmation is present.")) }
187
+ { type: 'boolean', description: ( localize(5392, "True when a tool confirmation is present.")) }
188
188
  )),
189
189
  };
190
190
  ChatContextKeys.Tools = {
191
- toolsCount: ( new RawContextKey('toolsCount', 0, { type: 'number', description: ( localize(5390, "The count of tools available in the chat.")) }))
191
+ toolsCount: ( new RawContextKey('toolsCount', 0, { type: 'number', description: ( localize(5393, "The count of tools available in the chat.")) }))
192
192
  };
193
193
  ChatContextKeys.Modes = {
194
194
  hasCustomChatModes: ( new RawContextKey(
195
195
  'chatHasCustomChatModes',
196
196
  false,
197
- { type: 'boolean', description: ( localize(5391, "True when the chat has custom chat modes available.")) }
197
+ { type: 'boolean', description: ( localize(5394, "True when the chat has custom chat modes available.")) }
198
198
  )),
199
199
  };
200
200
  ChatContextKeys.panelLocation = ( new RawContextKey(
201
201
  'chatPanelLocation',
202
202
  undefined,
203
- { type: 'number', description: ( localize(5392, "The location of the chat panel.")) }
203
+ { type: 'number', description: ( localize(5395, "The location of the chat panel.")) }
204
204
  ));
205
205
  })(ChatContextKeys || (ChatContextKeys = {}));
206
206
  var ChatContextKeyExprs;
@@ -18,9 +18,9 @@ var ChatEditingSessionState;
18
18
  ChatEditingSessionState[ChatEditingSessionState["Disposed"] = 3] = "Disposed";
19
19
  })(ChatEditingSessionState || (ChatEditingSessionState = {}));
20
20
  const CHAT_EDITING_MULTI_DIFF_SOURCE_RESOLVER_SCHEME = 'chat-editing-multi-diff-source';
21
- const chatEditingWidgetFileStateContextKey = ( new RawContextKey('chatEditingWidgetFileState', undefined, ( localize(5393, "The current state of the file in the chat editing widget"))));
21
+ const chatEditingWidgetFileStateContextKey = ( new RawContextKey('chatEditingWidgetFileState', undefined, ( localize(5396, "The current state of the file in the chat editing widget"))));
22
22
  const chatEditingAgentSupportsReadonlyReferencesContextKey = ( new RawContextKey('chatEditingAgentSupportsReadonlyReferences', undefined, ( localize(
23
- 5394,
23
+ 5397,
24
24
  "Whether the chat editing agent supports readonly references (temporary)"
25
25
  ))));
26
26
  const decidedChatEditingResourceContextKey = ( new RawContextKey('decidedChatEditingResource', []));
@@ -54,9 +54,9 @@ var IDiagnosticVariableEntryFilterData;
54
54
  }
55
55
  return data.problemMessage.substring(0, lastSpace) + '…';
56
56
  }
57
- let labelStr = ( localize(5417, "All Problems"));
57
+ let labelStr = ( localize(5420, "All Problems"));
58
58
  if (data.filterUri) {
59
- labelStr = ( localize(5418, "Problems in {0}", basename(data.filterUri)));
59
+ labelStr = ( localize(5421, "Problems in {0}", basename(data.filterUri)));
60
60
  }
61
61
  return labelStr;
62
62
  }
@@ -27,16 +27,16 @@ var ToolDataSource;
27
27
  ToolDataSource.equals = equals;
28
28
  function classify(source) {
29
29
  if (source.type === 'internal') {
30
- return { ordinal: 1, label: ( localize(5422, 'Built-In')) };
30
+ return { ordinal: 1, label: ( localize(5425, 'Built-In')) };
31
31
  }
32
32
  else if (source.type === 'mcp') {
33
- return { ordinal: 2, label: ( localize(5423, 'MCP Server: {0}', source.label)) };
33
+ return { ordinal: 2, label: ( localize(5426, 'MCP Server: {0}', source.label)) };
34
34
  }
35
35
  else if (source.type === 'user') {
36
- return { ordinal: 0, label: ( localize(5424, 'User Defined')) };
36
+ return { ordinal: 0, label: ( localize(5427, 'User Defined')) };
37
37
  }
38
38
  else {
39
- return { ordinal: 3, label: ( localize(5425, 'Extension: {0}', source.label)) };
39
+ return { ordinal: 3, label: ( localize(5428, 'Extension: {0}', source.label)) };
40
40
  }
41
41
  }
42
42
  ToolDataSource.classify = classify;
@@ -59,16 +59,16 @@ const languageModelType = {
59
59
  properties: {
60
60
  vendor: {
61
61
  type: 'string',
62
- description: ( localize(5426, "A globally unique vendor of language models."))
62
+ description: ( localize(5429, "A globally unique vendor of language models."))
63
63
  },
64
64
  displayName: {
65
65
  type: 'string',
66
- description: ( localize(5427, "The display name of the language model vendor."))
66
+ description: ( localize(5430, "The display name of the language model vendor."))
67
67
  },
68
68
  managementCommand: {
69
69
  type: 'string',
70
70
  description: ( localize(
71
- 5428,
71
+ 5431,
72
72
  "A command to manage the language model vendor, e.g. 'Manage Copilot models'. This is used in the chat model picker. If not provided, a gear icon is not rendered during vendor selection."
73
73
  ))
74
74
  }
@@ -77,7 +77,7 @@ const languageModelType = {
77
77
  const languageModelExtensionPoint = ExtensionsRegistry.registerExtensionPoint({
78
78
  extensionPoint: 'languageModels',
79
79
  jsonSchema: {
80
- description: ( localize(5429, "Contribute language models of a specific vendor.")),
80
+ description: ( localize(5432, "Contribute language models of a specific vendor.")),
81
81
  oneOf: [
82
82
  languageModelType,
83
83
  {
@@ -113,24 +113,24 @@ let LanguageModelsService = class LanguageModelsService {
113
113
  this._vendors.clear();
114
114
  for (const extension of extensions) {
115
115
  if (!isProposedApiEnabled(extension.description, 'chatProvider')) {
116
- extension.collector.error(( localize(5430, "This contribution point requires the 'chatProvider' proposal.")));
116
+ extension.collector.error(( localize(5433, "This contribution point requires the 'chatProvider' proposal.")));
117
117
  continue;
118
118
  }
119
119
  for (const item of Iterable.wrap(extension.value)) {
120
120
  if (( this._vendors.has(item.vendor))) {
121
121
  extension.collector.error(( localize(
122
- 5431,
122
+ 5434,
123
123
  "The vendor '{0}' is already registered and cannot be registered twice",
124
124
  item.vendor
125
125
  )));
126
126
  continue;
127
127
  }
128
128
  if (isFalsyOrWhitespace(item.vendor)) {
129
- extension.collector.error(( localize(5432, "The vendor field cannot be empty.")));
129
+ extension.collector.error(( localize(5435, "The vendor field cannot be empty.")));
130
130
  continue;
131
131
  }
132
132
  if (item.vendor.trim() !== item.vendor) {
133
- extension.collector.error(( localize(5433, "The vendor field cannot start or end with whitespace.")));
133
+ extension.collector.error(( localize(5436, "The vendor field cannot start or end with whitespace.")));
134
134
  continue;
135
135
  }
136
136
  this._vendors.set(item.vendor, item);
@@ -1,6 +1,6 @@
1
1
 
2
2
  import { localize } from '../../../../../nls.js';
3
3
 
4
- const DEFAULT_MODEL_PICKER_CATEGORY = { label: ( localize(5434, "Other Models")), order: Number.MAX_SAFE_INTEGER };
4
+ const DEFAULT_MODEL_PICKER_CATEGORY = { label: ( localize(5437, "Other Models")), order: Number.MAX_SAFE_INTEGER };
5
5
 
6
6
  export { DEFAULT_MODEL_PICKER_CATEGORY };
@@ -12,6 +12,7 @@ export declare class ManageTodoListTool extends Disposable implements IToolImpl
12
12
  constructor(chatTodoListService: IChatTodoListService, logService: ILogService);
13
13
  invoke(invocation: IToolInvocation, _countTokens: any, _progress: any, _token: CancellationToken): Promise<IToolResult>;
14
14
  prepareToolInvocation(context: IToolInvocationPreparationContext, _token: CancellationToken): Promise<IPreparedToolInvocation | undefined>;
15
+ private generatePastTenseMessage;
15
16
  private handleRead;
16
17
  private formatTodoListAsMarkdownTaskList;
17
18
  }
@@ -18,6 +18,7 @@ const ManageTodoListToolData = {
18
18
  canBeReferencedInPrompt: true,
19
19
  icon: ThemeIcon.fromId(Codicon.checklist.id),
20
20
  displayName: 'Update Todo List',
21
+ userDescription: 'Manage and track todo items for task planning',
21
22
  modelDescription: 'Manage a structured todo list to track progress and plan tasks throughout your coding session. Use this tool VERY frequently to ensure task visibility and proper planning.\n\nWhen to use this tool:\n- Complex multi-step work requiring planning and tracking\n- When user provides multiple tasks or requests (numbered/comma-separated)\n- After receiving new instructions that require multiple steps\n- BEFORE starting work on any todo (mark as in-progress)\n- IMMEDIATELY after completing each todo (mark completed individually)\n- When breaking down larger tasks into smaller actionable steps\n- To give users visibility into your progress and planning\n\nWhen NOT to use:\n- Single, trivial tasks that can be completed in one step\n- Purely conversational/informational requests\n- When just reading files or performing simple searches\n\nCRITICAL workflow:\n1. Plan tasks by writing todo list with specific, actionable items\n2. Mark ONE todo as in-progress before starting work\n3. Complete the work for that specific todo\n4. Mark that todo as completed IMMEDIATELY\n5. Move to next todo and repeat\n\nTodo states:\n- not-started: Todo not yet begun\n- in-progress: Currently working (limit ONE at a time)\n- completed: Finished successfully\n\nIMPORTANT: Mark todos completed as soon as they are done. Do not batch completions.',
22
23
  source: ToolDataSource.Internal,
23
24
  inputSchema: {
@@ -40,7 +41,7 @@ const ManageTodoListToolData = {
40
41
  },
41
42
  title: {
42
43
  type: 'string',
43
- description: 'Concise action-oriented todo label (3-5 words). Displayed in UI.'
44
+ description: 'Concise action-oriented todo label (3-7 words). Displayed in UI.'
44
45
  },
45
46
  description: {
46
47
  type: 'string',
@@ -131,17 +132,12 @@ let ManageTodoListTool = class ManageTodoListTool extends Disposable {
131
132
  switch (args.operation) {
132
133
  case 'write': {
133
134
  if (args.todoList) {
134
- if (!currentTodoItems.length) {
135
- message = 'Creating todo list';
136
- }
137
- else {
138
- message = 'Updating todo list';
139
- }
135
+ message = this.generatePastTenseMessage(currentTodoItems, args.todoList);
140
136
  }
141
137
  break;
142
138
  }
143
139
  case 'read': {
144
- message = 'Reading all items in todo list';
140
+ message = 'Read todo list';
145
141
  break;
146
142
  }
147
143
  }
@@ -153,7 +149,7 @@ let ManageTodoListTool = class ManageTodoListTool extends Disposable {
153
149
  status: todo.status
154
150
  })));
155
151
  return {
156
- invocationMessage: ( new MarkdownString(message ?? 'Unknown todo list operation')),
152
+ pastTenseMessage: ( new MarkdownString(message ?? 'Updated todo list')),
157
153
  toolSpecificData: {
158
154
  kind: 'todoList',
159
155
  sessionId: context.chatSessionId,
@@ -161,6 +157,37 @@ let ManageTodoListTool = class ManageTodoListTool extends Disposable {
161
157
  }
162
158
  };
163
159
  }
160
+ generatePastTenseMessage(currentTodos, newTodos) {
161
+ if (currentTodos.length === 0) {
162
+ return `Created ${newTodos.length} todo${newTodos.length === 1 ? '' : 's'}`;
163
+ }
164
+ const currentTodoMap = ( new Map(( currentTodos.map(todo => [todo.id, todo]))));
165
+ const startedTodos = newTodos.filter(newTodo => {
166
+ const currentTodo = currentTodoMap.get(newTodo.id);
167
+ return currentTodo && currentTodo.status !== 'in-progress' && newTodo.status === 'in-progress';
168
+ });
169
+ if (startedTodos.length > 0) {
170
+ const startedTodo = startedTodos[0];
171
+ const totalTodos = newTodos.length;
172
+ const currentPosition = newTodos.findIndex(todo => todo.id === startedTodo.id) + 1;
173
+ return `Starting (${currentPosition}/${totalTodos}) *${startedTodo.title}*`;
174
+ }
175
+ const completedTodos = newTodos.filter(newTodo => {
176
+ const currentTodo = currentTodoMap.get(newTodo.id);
177
+ return currentTodo && currentTodo.status !== 'completed' && newTodo.status === 'completed';
178
+ });
179
+ if (completedTodos.length > 0) {
180
+ const completedTodo = completedTodos[0];
181
+ const totalTodos = newTodos.length;
182
+ const currentPosition = newTodos.findIndex(todo => todo.id === completedTodo.id) + 1;
183
+ return `Completed (${currentPosition}/${totalTodos}) *${completedTodo.title}*`;
184
+ }
185
+ const addedTodos = newTodos.filter(newTodo => !( currentTodoMap.has(newTodo.id)));
186
+ if (addedTodos.length > 0) {
187
+ return `Added ${addedTodos.length} todo${addedTodos.length === 1 ? '' : 's'}`;
188
+ }
189
+ return 'Updated todo list';
190
+ }
164
191
  handleRead(storage, sessionId) {
165
192
  const todoItems = storage.getTodoList(sessionId);
166
193
  if (todoItems.length === 0) {
@@ -18,17 +18,17 @@ const createCodeActionsAutoSave = (description) => {
18
18
  enum: ['always', 'explicit', 'never', true, false],
19
19
  enumDescriptions: [
20
20
  ( localize(
21
- 5508,
21
+ 5511,
22
22
  'Triggers Code Actions on explicit saves and auto saves triggered by window or focus changes.'
23
23
  )),
24
- ( localize(5509, 'Triggers Code Actions only when explicitly saved')),
25
- ( localize(5510, 'Never triggers Code Actions on save')),
24
+ ( localize(5512, 'Triggers Code Actions only when explicitly saved')),
25
+ ( localize(5513, 'Never triggers Code Actions on save')),
26
26
  ( localize(
27
- 5511,
27
+ 5514,
28
28
  'Triggers Code Actions only when explicitly saved. This value will be deprecated in favor of "explicit".'
29
29
  )),
30
30
  ( localize(
31
- 5512,
31
+ 5515,
32
32
  'Never triggers Code Actions on save. This value will be deprecated in favor of "never".'
33
33
  ))
34
34
  ],
@@ -41,14 +41,14 @@ const createNotebookCodeActionsAutoSave = (description) => {
41
41
  type: ['string', 'boolean'],
42
42
  enum: ['explicit', 'never', true, false],
43
43
  enumDescriptions: [
44
- ( localize(5513, 'Triggers Code Actions only when explicitly saved.')),
45
- ( localize(5514, 'Never triggers Code Actions on save.')),
44
+ ( localize(5516, 'Triggers Code Actions only when explicitly saved.')),
45
+ ( localize(5517, 'Never triggers Code Actions on save.')),
46
46
  ( localize(
47
- 5515,
47
+ 5518,
48
48
  'Triggers Code Actions only when explicitly saved. This value will be deprecated in favor of "explicit".'
49
49
  )),
50
50
  ( localize(
51
- 5516,
51
+ 5519,
52
52
  'Triggers Code Actions only when explicitly saved. This value will be deprecated in favor of "never".'
53
53
  ))
54
54
  ],
@@ -70,7 +70,7 @@ const codeActionsOnSaveSchema = {
70
70
  }
71
71
  ],
72
72
  markdownDescription: ( localize(
73
- 5517,
73
+ 5520,
74
74
  'Run Code Actions for the editor on save. Code Actions must be specified and the editor must not be shutting down. When {0} is set to `afterDelay`, Code Actions will only be run when the file is saved explicitly. Example: `"source.organizeImports": "explicit" `',
75
75
  '`#files.autoSave#`'
76
76
  )),
@@ -102,7 +102,7 @@ const notebookCodeActionsOnSaveSchema = {
102
102
  }
103
103
  ],
104
104
  markdownDescription: ( localize(
105
- 5518,
105
+ 5521,
106
106
  'Run a series of Code Actions for a notebook on save. Code Actions must be specified and the editor must not be shutting down. When {0} is set to `afterDelay`, Code Actions will only be run when the file is saved explicitly. Example: `"notebook.source.organizeImports": "explicit"`',
107
107
  '`#files.autoSave#`'
108
108
  )),
@@ -150,12 +150,12 @@ let CodeActionsContribution = class CodeActionsContribution extends Disposable {
150
150
  for (const codeActionKind of allProvidedKinds) {
151
151
  if (CodeActionKind.Source.contains(codeActionKind) && !properties[codeActionKind.value]) {
152
152
  properties[codeActionKind.value] = createCodeActionsAutoSave(( localize(
153
- 5519,
153
+ 5522,
154
154
  "Controls whether '{0}' actions should be run on file save.",
155
155
  codeActionKind.value
156
156
  )));
157
157
  notebookProperties[codeActionKind.value] = createNotebookCodeActionsAutoSave(( localize(
158
- 5519,
158
+ 5522,
159
159
  "Controls whether '{0}' actions should be run on file save.",
160
160
  codeActionKind.value
161
161
  )));