@theia/ai-ide 1.70.0 → 1.70.2

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.
@@ -1 +1 @@
1
- {"version":3,"file":"agent-mode-confirmation-service.d.ts","sourceRoot":"","sources":["../../src/browser/agent-mode-confirmation-service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAEH,uBAAuB,EAE1B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAO,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD,eAAO,MAAM,4BAA4B,eAAyC,CAAC;AACnF,MAAM,WAAW,4BAA4B;IACzC,cAAc,IAAI,OAAO,CAAC;IAC1B,mBAAmB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3E;AAED,qBACa,gCAAiC,YAAW,4BAA4B;IAEtD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAEnF,cAAc,IAAI,OAAO;IAInB,mBAAmB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC;CA8ChF"}
1
+ {"version":3,"file":"agent-mode-confirmation-service.d.ts","sourceRoot":"","sources":["../../src/browser/agent-mode-confirmation-service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAEH,uBAAuB,EAE1B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAwB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAItE,eAAO,MAAM,4BAA4B,eAAyC,CAAC;AACnF,MAAM,WAAW,4BAA4B;IACzC,cAAc,IAAI,OAAO,CAAC;IAC1B,mBAAmB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3E;AAED,qBACa,gCAAiC,YAAW,4BAA4B;IAEtD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAEnF,cAAc,IAAI,OAAO;IAInB,mBAAmB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC;CA+ChF"}
@@ -25,21 +25,23 @@ const ai_ide_preferences_1 = require("../common/ai-ide-preferences");
25
25
  exports.AgentModeConfirmationService = Symbol('AgentModeConfirmationService');
26
26
  let AgentModeConfirmationServiceImpl = class AgentModeConfirmationServiceImpl {
27
27
  isAcknowledged() {
28
- return !!this.preferenceService.get(ai_ide_preferences_1.PREFERENCE_NAME_AGENT_MODE_CONFIRMED, false);
28
+ return !!this.preferenceService.get(ai_ide_preferences_1.PREFERENCE_NAME_AGENT_MODE_ENABLED, false);
29
29
  }
30
30
  async requestConfirmation(request) {
31
31
  const deferred = new promise_util_1.Deferred();
32
- const confirmLabel = core_1.nls.localize('theia/ai/ide/agentModeConfirmation/confirm', 'Confirm');
33
- const cancelLabel = core_1.nls.localizeByDefault('Cancel');
34
- request.response.response.addContent(new common_1.MarkdownChatResponseContentImpl(core_1.nls.localize('theia/ai/ide/agentModeConfirmation/msg', 'This agent uses an **agentic mode**. To enable autonomous flow, it is capable of directly writing to your workspace files without further confirmation.\n\n'
35
- + 'It is recommended to use version control (e.g. Git) so you can review and revert changes.\n\n'
36
- + 'You can switch to **Edit Mode** using the mode selector in the chat input area below, '
37
- + 'or use the **Architect** agent for read-only planning.\n\n'
38
- + 'This confirmation is saved for this workspace and won\'t be shown again. '
39
- + 'To reset or configure it globally, look for `ai-features.agentMode.confirmed` in the Settings.')));
40
- request.response.response.addContent(new common_1.QuestionResponseContentImpl(core_1.nls.localize('theia/ai/ide/agentModeConfirmation/question', 'Do you want to proceed with Agent Mode?'), [{ text: confirmLabel }, { text: cancelLabel }], request, async (selectedOption) => {
41
- if (selectedOption.text === confirmLabel) {
42
- await this.preferenceService.set(ai_ide_preferences_1.PREFERENCE_NAME_AGENT_MODE_CONFIRMED, true);
32
+ const agentModeLabel = core_1.nls.localize('theia/ai/ide/agentModeConfirmation/continueAgentMode', 'Continue with Agent Mode');
33
+ const editModeLabel = core_1.nls.localize('theia/ai/ide/agentModeConfirmation/continueEditMode', 'Continue with Edit Mode');
34
+ request.response.response.addContent(new common_1.MarkdownChatResponseContentImpl(core_1.nls.localize('theia/ai/ide/agentModeConfirmation/msg', 'You are about to use **Agent Mode**. In this mode, the agent can **read, create, and modify files** '
35
+ + 'in your workspace autonomously, without asking for confirmation on each change.\n\n'
36
+ + 'We recommend using **version control** (e.g. Git) so you can easily review and revert any changes.\n\n'
37
+ + 'If you prefer more control, you can continue with **Edit Mode** instead, '
38
+ + 'where changes are presented as suggestions for you to apply.\n\n'
39
+ + 'How would you like to proceed?')));
40
+ request.response.response.addContent(new common_1.QuestionResponseContentImpl(core_1.nls.localize('theia/ai/ide/agentModeConfirmation/info', 'Continuing with Agent Mode saves your confirmation. You can revoke this later again via the `ai-features.agentMode.enabled` setting.\n\n'
41
+ + 'Continuing with Edit Mode changes your default mode to Edit Mode.\n\n'
42
+ + 'You can change modes anytime via the mode selector or in the AI Configuration.'), [{ text: agentModeLabel }, { text: editModeLabel }], request, async (selectedOption) => {
43
+ if (selectedOption.text === agentModeLabel) {
44
+ await this.preferenceService.set(ai_ide_preferences_1.PREFERENCE_NAME_AGENT_MODE_ENABLED, true, core_1.PreferenceScope.User);
43
45
  request.response.stopWaitingForInput();
44
46
  deferred.resolve(true);
45
47
  }
@@ -55,9 +57,7 @@ let AgentModeConfirmationServiceImpl = class AgentModeConfirmationServiceImpl {
55
57
  request.response.waitForInput();
56
58
  return deferred.promise.then(result => {
57
59
  request.response.updateProgressMessage({ ...progressMessage, show: 'untilFirstContent', status: 'completed' });
58
- if (result) {
59
- request.response.response.clearContent();
60
- }
60
+ request.response.response.clearContent();
61
61
  return result;
62
62
  });
63
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-mode-confirmation-service.js","sourceRoot":"","sources":["../../src/browser/agent-mode-confirmation-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-mode-confirmation-service.js","sourceRoot":"","sources":["../../src/browser/agent-mode-confirmation-service.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,10 @@ export declare class CoderAgent extends AbstractModeAwareChatAgent {
14
14
  protected readonly modeDefinitions: Omit<ChatMode, 'isDefault'>[];
15
15
  prompts: PromptVariantSet[];
16
16
  protected systemPromptId: string | undefined;
17
+ private useSettingsDefaultMode;
17
18
  invoke(request: MutableChatRequestModel): Promise<void>;
19
+ protected getEffectiveVariantIdWithMode(modeId?: string): string | undefined;
20
+ protected switchToEditMode(): Promise<void>;
18
21
  protected isAgentModeRequest(request: MutableChatRequestModel): boolean;
19
22
  suggest(context: ChatSession | ChatRequestModel): Promise<void>;
20
23
  }
@@ -1 +1 @@
1
- {"version":3,"file":"coder-agent.d.ts","sourceRoot":"","sources":["../../src/browser/coder-agent.ts"],"names":[],"mappings":"AAeA,OAAO,EACH,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAClC,uBAAuB,EAC5C,MAAM,2BAA2B,CAAC;AAYnC,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAI5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AAEjF,eAAO,MAAM,YAAY,UAAU,CAAC;AAEpC,qBACa,UAAW,SAAQ,0BAA0B;IACjC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAC3B,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;IAC7G,EAAE,EAAE,MAAM,CAAgB;IAC1B,IAAI,SAAgB;IACpB,yBAAyB,EAAE,wBAAwB,EAAE,CAGlD;IACH,SAAS,CAAC,2BAA2B,EAAE,MAAM,CAAU;IAE9C,WAAW,SAGgB;IAEpC,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAa/D;IAEO,OAAO,EAAE,gBAAgB,EAAE,CAIjC;IACH,UAAmB,cAAc,EAAE,MAAM,GAAG,SAAS,CAA0B;IAEhE,MAAM,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAYtE,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO;IASjE,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAsBxE"}
1
+ {"version":3,"file":"coder-agent.d.ts","sourceRoot":"","sources":["../../src/browser/coder-agent.ts"],"names":[],"mappings":"AAeA,OAAO,EACH,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAClC,uBAAuB,EAC5C,MAAM,2BAA2B,CAAC;AAYnC,OAAO,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAI5E,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AAEjF,eAAO,MAAM,YAAY,UAAU,CAAC;AAEpC,qBACa,UAAW,SAAQ,0BAA0B;IACjC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAC3B,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,4BAA4B,CAAC;IAC7G,EAAE,EAAE,MAAM,CAAgB;IAC1B,IAAI,SAAgB;IACpB,yBAAyB,EAAE,wBAAwB,EAAE,CAGlD;IACH,SAAS,CAAC,2BAA2B,EAAE,MAAM,CAAU;IAE9C,WAAW,SAGgB;IAEpC,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,CAa/D;IAEO,OAAO,EAAE,gBAAgB,EAAE,CAIjC;IACH,UAAmB,cAAc,EAAE,MAAM,GAAG,SAAS,CAA0B;IAE/E,OAAO,CAAC,sBAAsB,CAAS;IAExB,MAAM,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;cAqBnD,6BAA6B,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;cAOrE,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjD,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO;IASjE,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAsBxE"}
@@ -59,18 +59,40 @@ let CoderAgent = class CoderAgent extends mode_aware_chat_agent_1.AbstractModeAw
59
59
  variants: [(0, coder_replace_prompt_template_1.getCoderPromptTemplateEdit)(), (0, coder_replace_prompt_template_1.getCoderAgentModeNextPromptTemplate)(), (0, coder_replace_prompt_template_1.getCoderPromptTemplateEditNext)()]
60
60
  }];
61
61
  this.systemPromptId = coder_replace_prompt_template_1.CODER_SYSTEM_PROMPT_ID;
62
+ this.useSettingsDefaultMode = false;
62
63
  }
63
64
  async invoke(request) {
64
65
  if (this.isAgentModeRequest(request) && !this.agentModeConfirmation.isAcknowledged()) {
65
66
  const confirmed = await this.agentModeConfirmation.requestConfirmation(request);
66
67
  if (!confirmed) {
67
- request.response.complete();
68
+ await this.switchToEditMode();
69
+ // Continue the same request using Edit Mode's prompt by ignoring
70
+ // the request's original agent mode modeId for variant resolution.
71
+ this.useSettingsDefaultMode = true;
72
+ try {
73
+ await super.invoke(request);
74
+ this.suggest(request);
75
+ }
76
+ finally {
77
+ this.useSettingsDefaultMode = false;
78
+ }
68
79
  return;
69
80
  }
70
81
  }
71
82
  await super.invoke(request);
72
83
  this.suggest(request);
73
84
  }
85
+ getEffectiveVariantIdWithMode(modeId) {
86
+ if (this.useSettingsDefaultMode) {
87
+ return super.getEffectiveVariantIdWithMode(undefined);
88
+ }
89
+ return super.getEffectiveVariantIdWithMode(modeId);
90
+ }
91
+ async switchToEditMode() {
92
+ if (this.systemPromptId) {
93
+ await this.promptService.updateSelectedVariantId(this.id, this.systemPromptId, coder_replace_prompt_template_1.CODER_EDIT_TEMPLATE_ID);
94
+ }
95
+ }
74
96
  isAgentModeRequest(request) {
75
97
  const modeId = request.request.modeId;
76
98
  if (modeId) {
@@ -1 +1 @@
1
- {"version":3,"file":"coder-agent.js","sourceRoot":"","sources":["../../src/browser/coder-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coder-agent.js","sourceRoot":"","sources":["../../src/browser/coder-agent.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-task-provider.d.ts","sourceRoot":"","sources":["../../src/browser/workspace-task-provider.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAyB,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGlF,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AAGpF,qBACa,gBAAiB,YAAW,YAAY;IAGjD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAE5C,OAAO,IAAI,WAAW;YAgCR,iBAAiB;CAMlC;AAED,qBACa,kBAAmB,YAAW,YAAY;IAGnD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAG5C,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAEpD,OAAO,IAAI,WAAW;YA0BR,aAAa;CA0C9B"}
1
+ {"version":3,"file":"workspace-task-provider.d.ts","sourceRoot":"","sources":["../../src/browser/workspace-task-provider.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAyB,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGlF,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AAGpF,qBACa,gBAAiB,YAAW,YAAY;IAGjD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAE5C,OAAO,IAAI,WAAW;YAgCR,iBAAiB;CAMlC;AAED,qBACa,kBAAmB,YAAW,YAAY;IAGnD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAG5C,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAEpD,OAAO,IAAI,WAAW;YA0BR,aAAa;CA6C9B"}
@@ -103,7 +103,10 @@ let TaskRunnerProvider = class TaskRunnerProvider {
103
103
  return `Did not find a task for the label: '${args.taskName}'`;
104
104
  }
105
105
  cancellationToken?.onCancellationRequested(() => {
106
- this.taskService.terminateTask(taskInfo);
106
+ // Only terminate if the task is still running
107
+ if (this.taskService.isTaskRunning(taskInfo.taskId)) {
108
+ this.taskService.terminateTask(taskInfo);
109
+ }
107
110
  });
108
111
  if (cancellationToken?.isCancellationRequested) {
109
112
  return JSON.stringify({ error: 'Operation cancelled by user' });
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-task-provider.js","sourceRoot":"","sources":["../../src/browser/workspace-task-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-task-provider.js","sourceRoot":"","sources":["../../src/browser/workspace-task-provider.ts"],"names":[],"mappings":"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"}
@@ -67,7 +67,8 @@ describe('Workspace Task Provider Cancellation Tests', () => {
67
67
  terminateTask: async (activeTaskInfo) => {
68
68
  // Track termination
69
69
  },
70
- getTerminateSignal: async () => 'SIGTERM'
70
+ getTerminateSignal: async () => 'SIGTERM',
71
+ isTaskRunning: () => false
71
72
  };
72
73
  mockTerminalService = {
73
74
  getByTerminalId: () => ({
@@ -87,6 +88,94 @@ describe('Workspace Task Provider Cancellation Tests', () => {
87
88
  afterEach(() => {
88
89
  cancellationTokenSource.dispose();
89
90
  });
91
+ describe('Task cancellation with completed tasks', () => {
92
+ it('should NOT terminate task if task has already completed (not in runningTasks)', async () => {
93
+ let terminateTaskCalled = false;
94
+ mockTaskService.terminateTask = async () => {
95
+ terminateTaskCalled = true;
96
+ };
97
+ // Simulate task already completed (isTaskRunning returns false)
98
+ mockTaskService.isTaskRunning = () => false;
99
+ // Mock getTerminateSignal to never resolve (simulates in-flight handler)
100
+ mockTaskService.getTerminateSignal = () => new Promise(() => { });
101
+ const taskRunnerProvider = container.get(workspace_task_provider_1.TaskRunnerProvider);
102
+ const handler = taskRunnerProvider.getTool().handler;
103
+ // Start task execution (will hang on getTerminateSignal)
104
+ handler(JSON.stringify({ taskName: 'build' }), mockCtx);
105
+ // Give time for the handler to register the cancellation listener
106
+ await new Promise(resolve => setTimeout(resolve, 10));
107
+ // Cancel while handler is "in-flight"
108
+ cancellationTokenSource.cancel();
109
+ // Give time for cancellation to process
110
+ await new Promise(resolve => setTimeout(resolve, 10));
111
+ // terminateTask should NOT have been called since isTaskRunning returns false
112
+ (0, chai_1.expect)(terminateTaskCalled).to.be.false;
113
+ });
114
+ it('should terminate task if task is still running', async () => {
115
+ let terminateTaskCalled = false;
116
+ mockTaskService.terminateTask = async () => {
117
+ terminateTaskCalled = true;
118
+ };
119
+ // Mock isTaskRunning to return true (task still running)
120
+ mockTaskService.isTaskRunning = () => true;
121
+ // Mock getTerminateSignal to never resolve (simulates in-flight task)
122
+ mockTaskService.getTerminateSignal = () => new Promise(() => { });
123
+ const taskRunnerProvider = container.get(workspace_task_provider_1.TaskRunnerProvider);
124
+ const handler = taskRunnerProvider.getTool().handler;
125
+ // Start task execution (will hang on getTerminateSignal)
126
+ handler(JSON.stringify({ taskName: 'build' }), mockCtx);
127
+ // Give time for the handler to register the cancellation listener
128
+ await new Promise(resolve => setTimeout(resolve, 10));
129
+ // Cancel while task is "in-flight"
130
+ cancellationTokenSource.cancel();
131
+ // Give time for cancellation to process
132
+ await new Promise(resolve => setTimeout(resolve, 10));
133
+ // terminateTask SHOULD have been called since isTaskRunning returns true
134
+ (0, chai_1.expect)(terminateTaskCalled).to.be.true;
135
+ });
136
+ it('should handle multiple tasks with shared cancellation token - only terminate running tasks', async () => {
137
+ const terminatedTasks = [];
138
+ mockTaskService.terminateTask = async (taskInfo) => {
139
+ terminatedTasks.push(taskInfo.taskId);
140
+ };
141
+ // Mock isTaskRunning to simulate: task 0 completed, tasks 1 & 2 still running
142
+ mockTaskService.isTaskRunning = (taskId) => taskId !== 0;
143
+ // Mock getTerminateSignal to never resolve (simulates in-flight handlers)
144
+ mockTaskService.getTerminateSignal = () => new Promise(() => { });
145
+ // Mock runTaskByLabel to return different task IDs
146
+ let taskIdCounter = 0;
147
+ mockTaskService.runTaskByLabel = async (token, taskLabel) => ({
148
+ taskId: taskIdCounter++,
149
+ terminalId: taskIdCounter - 1,
150
+ config: {
151
+ label: taskLabel,
152
+ _scope: 'workspace',
153
+ type: 'shell'
154
+ }
155
+ });
156
+ const taskRunnerProvider = container.get(workspace_task_provider_1.TaskRunnerProvider);
157
+ const handler = taskRunnerProvider.getTool().handler;
158
+ // Use ONE shared CancellationTokenSource (simulates real scenario)
159
+ const sharedCts = new core_1.CancellationTokenSource();
160
+ const sharedCtx = { cancellationToken: sharedCts.token };
161
+ // Call handler three times with the same shared cancellation token
162
+ handler(JSON.stringify({ taskName: 'build' }), sharedCtx);
163
+ handler(JSON.stringify({ taskName: 'test' }), sharedCtx);
164
+ handler(JSON.stringify({ taskName: 'lint' }), sharedCtx);
165
+ // Give time for handlers to register cancellation listeners
166
+ await new Promise(resolve => setTimeout(resolve, 10));
167
+ // Cancel the shared token once - this fires all registered listeners
168
+ sharedCts.cancel();
169
+ // Give time for cancellation listeners to fire
170
+ await new Promise(resolve => setTimeout(resolve, 10));
171
+ // Only task 1 and 2 should have been terminated (task 0 was completed)
172
+ (0, chai_1.expect)(terminatedTasks).to.have.lengthOf(2);
173
+ (0, chai_1.expect)(terminatedTasks).to.include(1);
174
+ (0, chai_1.expect)(terminatedTasks).to.include(2);
175
+ (0, chai_1.expect)(terminatedTasks).to.not.include(0);
176
+ sharedCts.dispose();
177
+ });
178
+ });
90
179
  it('TaskListProvider should respect cancellation token', async () => {
91
180
  const taskListProvider = container.get(workspace_task_provider_1.TaskListProvider);
92
181
  cancellationTokenSource.cancel();
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-task-provider.spec.js","sourceRoot":"","sources":["../../src/browser/workspace-task-provider.spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-task-provider.spec.js","sourceRoot":"","sources":["../../src/browser/workspace-task-provider.spec.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { PreferenceSchema } from '@theia/core';
2
2
  export declare const PREFERENCE_NAME_ENABLE_AI = "ai-features.AiEnable.enableAI";
3
3
  export declare const PREFERENCE_NAME_ORCHESTRATOR_EXCLUSION_LIST = "ai-features.orchestrator.excludedAgents";
4
- export declare const PREFERENCE_NAME_AGENT_MODE_CONFIRMED = "ai-features.agentMode.confirmed";
4
+ export declare const PREFERENCE_NAME_AGENT_MODE_ENABLED = "ai-features.agentMode.enabled";
5
5
  export declare const aiIdePreferenceSchema: PreferenceSchema;
6
6
  //# sourceMappingURL=ai-ide-preferences.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-ide-preferences.d.ts","sourceRoot":"","sources":["../../src/common/ai-ide-preferences.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAO,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,eAAO,MAAM,yBAAyB,kCAAkC,CAAC;AACzE,eAAO,MAAM,2CAA2C,4CAA4C,CAAC;AACrG,eAAO,MAAM,oCAAoC,oCAAoC,CAAC;AACtF,eAAO,MAAM,qBAAqB,EAAE,gBAsCnC,CAAC"}
1
+ {"version":3,"file":"ai-ide-preferences.d.ts","sourceRoot":"","sources":["../../src/common/ai-ide-preferences.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAO,gBAAgB,EAAmB,MAAM,aAAa,CAAC;AAGrE,eAAO,MAAM,yBAAyB,kCAAkC,CAAC;AACzE,eAAO,MAAM,2CAA2C,4CAA4C,CAAC;AACrG,eAAO,MAAM,kCAAkC,kCAAkC,CAAC;AAClF,eAAO,MAAM,qBAAqB,EAAE,gBAsCnC,CAAC"}
@@ -15,13 +15,13 @@
15
15
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
16
  // *****************************************************************************
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.aiIdePreferenceSchema = exports.PREFERENCE_NAME_AGENT_MODE_CONFIRMED = exports.PREFERENCE_NAME_ORCHESTRATOR_EXCLUSION_LIST = exports.PREFERENCE_NAME_ENABLE_AI = void 0;
18
+ exports.aiIdePreferenceSchema = exports.PREFERENCE_NAME_AGENT_MODE_ENABLED = exports.PREFERENCE_NAME_ORCHESTRATOR_EXCLUSION_LIST = exports.PREFERENCE_NAME_ENABLE_AI = void 0;
19
19
  const common_1 = require("@theia/ai-core/lib/common");
20
20
  const core_1 = require("@theia/core");
21
21
  // We reuse the context key for the preference name
22
22
  exports.PREFERENCE_NAME_ENABLE_AI = 'ai-features.AiEnable.enableAI';
23
23
  exports.PREFERENCE_NAME_ORCHESTRATOR_EXCLUSION_LIST = 'ai-features.orchestrator.excludedAgents';
24
- exports.PREFERENCE_NAME_AGENT_MODE_CONFIRMED = 'ai-features.agentMode.confirmed';
24
+ exports.PREFERENCE_NAME_AGENT_MODE_ENABLED = 'ai-features.agentMode.enabled';
25
25
  exports.aiIdePreferenceSchema = {
26
26
  properties: {
27
27
  [exports.PREFERENCE_NAME_ENABLE_AI]: {
@@ -48,13 +48,13 @@ exports.aiIdePreferenceSchema = {
48
48
  },
49
49
  default: ['ClaudeCode', 'Codex'],
50
50
  },
51
- [exports.PREFERENCE_NAME_AGENT_MODE_CONFIRMED]: {
51
+ [exports.PREFERENCE_NAME_AGENT_MODE_ENABLED]: {
52
52
  title: common_1.AI_CORE_PREFERENCES_TITLE,
53
- markdownDescription: core_1.nls.localize('theia/ai/ide/agentMode/confirmed/mdDescription', 'Whether the user has confirmed the agent mode warning. '
54
- + 'Agent mode allows autonomous file modifications without further confirmation. '
55
- + 'Set to `false` to see the confirmation again on the next agent mode request.'),
53
+ description: core_1.nls.localize('theia/ai/ide/agentMode/enabled/mdDescription', 'Enable agent mode for the Coder agent. Agent mode allows autonomous file modifications without further confirmation.\
54
+ A first-use confirmation dialog is shown when using agent mode until this is set to `true`.'),
56
55
  type: 'boolean',
57
56
  default: false,
57
+ scope: core_1.PreferenceScope.User
58
58
  }
59
59
  }
60
60
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ai-ide-preferences.js","sourceRoot":"","sources":["../../src/common/ai-ide-preferences.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,sDAAsE;AACtE,sCAAoD;AAEpD,mDAAmD;AACtC,QAAA,yBAAyB,GAAG,+BAA+B,CAAC;AAC5D,QAAA,2CAA2C,GAAG,yCAAyC,CAAC;AACxF,QAAA,oCAAoC,GAAG,iCAAiC,CAAC;AACzE,QAAA,qBAAqB,GAAqB;IACnD,UAAU,EAAE;QACR,CAAC,iCAAyB,CAAC,EAAE;YACzB,KAAK,EAAE,kCAAyB;YAChC,mBAAmB,EAAE,IAAI,GAAG,UAAG,CAAC,QAAQ,CAAC,qCAAqC,EAC1E;;;;;;;;qGAQqF,CAAC;YAC1F,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACjB;QACD,CAAC,mDAA2C,CAAC,EAAE;YAC3C,KAAK,EAAE,kCAAyB;YAChC,mBAAmB,EAAE,UAAG,CAAC,QAAQ,CAAC,wDAAwD,EACtF,yEAAyE;gBACzE,mGAAmG,CAAC;YACxG,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACH,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC;SACnC;QACD,CAAC,4CAAoC,CAAC,EAAE;YACpC,KAAK,EAAE,kCAAyB;YAChC,mBAAmB,EAAE,UAAG,CAAC,QAAQ,CAAC,gDAAgD,EAC9E,yDAAyD;kBACvD,gFAAgF;kBAChF,8EAA8E,CAAC;YACrF,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACjB;KACJ;CACJ,CAAC"}
1
+ {"version":3,"file":"ai-ide-preferences.js","sourceRoot":"","sources":["../../src/common/ai-ide-preferences.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,sDAAsE;AACtE,sCAAqE;AAErE,mDAAmD;AACtC,QAAA,yBAAyB,GAAG,+BAA+B,CAAC;AAC5D,QAAA,2CAA2C,GAAG,yCAAyC,CAAC;AACxF,QAAA,kCAAkC,GAAG,+BAA+B,CAAC;AACrE,QAAA,qBAAqB,GAAqB;IACnD,UAAU,EAAE;QACR,CAAC,iCAAyB,CAAC,EAAE;YACzB,KAAK,EAAE,kCAAyB;YAChC,mBAAmB,EAAE,IAAI,GAAG,UAAG,CAAC,QAAQ,CAAC,qCAAqC,EAC1E;;;;;;;;qGAQqF,CAAC;YAC1F,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;SACjB;QACD,CAAC,mDAA2C,CAAC,EAAE;YAC3C,KAAK,EAAE,kCAAyB;YAChC,mBAAmB,EAAE,UAAG,CAAC,QAAQ,CAAC,wDAAwD,EACtF,yEAAyE;gBACzE,mGAAmG,CAAC;YACxG,IAAI,EAAE,OAAO;YACb,KAAK,EAAE;gBACH,IAAI,EAAE,QAAQ;aACjB;YACD,OAAO,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC;SACnC;QACD,CAAC,0CAAkC,CAAC,EAAE;YAClC,KAAK,EAAE,kCAAyB;YAChC,WAAW,EAAE,UAAG,CAAC,QAAQ,CAAC,8CAA8C,EACpE;6GAC6F,CAAC;YAClG,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,sBAAe,CAAC,IAAI;SAC9B;KACJ;CACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@theia/ai-ide",
3
- "version": "1.70.0",
3
+ "version": "1.70.2",
4
4
  "description": "AI IDE Agents Extension",
5
5
  "license": "EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0",
6
6
  "repository": {
@@ -15,24 +15,24 @@
15
15
  "theia-extension"
16
16
  ],
17
17
  "dependencies": {
18
- "@theia/ai-chat": "1.70.0",
19
- "@theia/ai-chat-ui": "1.70.0",
20
- "@theia/ai-core": "1.70.0",
21
- "@theia/ai-mcp": "1.70.0",
22
- "@theia/ai-terminal": "1.70.0",
23
- "@theia/core": "1.70.0",
24
- "@theia/debug": "1.70.0",
25
- "@theia/editor": "1.70.0",
26
- "@theia/filesystem": "1.70.0",
27
- "@theia/markers": "1.70.0",
28
- "@theia/monaco": "1.70.0",
29
- "@theia/navigator": "1.70.0",
30
- "@theia/preferences": "1.70.0",
31
- "@theia/scm": "1.70.0",
32
- "@theia/search-in-workspace": "1.70.0",
33
- "@theia/task": "1.70.0",
34
- "@theia/terminal": "1.70.0",
35
- "@theia/workspace": "1.70.0",
18
+ "@theia/ai-chat": "1.70.2",
19
+ "@theia/ai-chat-ui": "1.70.2",
20
+ "@theia/ai-core": "1.70.2",
21
+ "@theia/ai-mcp": "1.70.2",
22
+ "@theia/ai-terminal": "1.70.2",
23
+ "@theia/core": "1.70.2",
24
+ "@theia/debug": "1.70.2",
25
+ "@theia/editor": "1.70.2",
26
+ "@theia/filesystem": "1.70.2",
27
+ "@theia/markers": "1.70.2",
28
+ "@theia/monaco": "1.70.2",
29
+ "@theia/navigator": "1.70.2",
30
+ "@theia/preferences": "1.70.2",
31
+ "@theia/scm": "1.70.2",
32
+ "@theia/search-in-workspace": "1.70.2",
33
+ "@theia/task": "1.70.2",
34
+ "@theia/terminal": "1.70.2",
35
+ "@theia/workspace": "1.70.2",
36
36
  "date-fns": "^4.1.0",
37
37
  "ignore": "^6.0.0",
38
38
  "js-yaml": "^4.1.0",
@@ -44,8 +44,8 @@
44
44
  "access": "public"
45
45
  },
46
46
  "devDependencies": {
47
- "@theia/cli": "1.70.0",
48
- "@theia/test": "1.70.0"
47
+ "@theia/cli": "1.70.2",
48
+ "@theia/test": "1.70.2"
49
49
  },
50
50
  "theiaExtensions": [
51
51
  {
@@ -69,5 +69,5 @@
69
69
  "nyc": {
70
70
  "extends": "../../configs/nyc.json"
71
71
  },
72
- "gitHead": "d2e3d1ecaa9b1df7992eeaa1ad4584f436a83e67"
72
+ "gitHead": "083802498e3c7c969e0afa9c763548c4fc9f5ac0"
73
73
  }
@@ -20,9 +20,9 @@ import {
20
20
  QuestionResponseContentImpl
21
21
  } from '@theia/ai-chat/lib/common';
22
22
  import { inject, injectable } from '@theia/core/shared/inversify';
23
- import { nls, PreferenceService } from '@theia/core';
23
+ import { nls, PreferenceScope, PreferenceService } from '@theia/core';
24
24
  import { Deferred } from '@theia/core/lib/common/promise-util';
25
- import { PREFERENCE_NAME_AGENT_MODE_CONFIRMED } from '../common/ai-ide-preferences';
25
+ import { PREFERENCE_NAME_AGENT_MODE_ENABLED } from '../common/ai-ide-preferences';
26
26
 
27
27
  export const AgentModeConfirmationService = Symbol('AgentModeConfirmationService');
28
28
  export interface AgentModeConfirmationService {
@@ -36,32 +36,35 @@ export class AgentModeConfirmationServiceImpl implements AgentModeConfirmationSe
36
36
  @inject(PreferenceService) protected readonly preferenceService: PreferenceService;
37
37
 
38
38
  isAcknowledged(): boolean {
39
- return !!this.preferenceService.get<boolean>(PREFERENCE_NAME_AGENT_MODE_CONFIRMED, false);
39
+ return !!this.preferenceService.get<boolean>(PREFERENCE_NAME_AGENT_MODE_ENABLED, false);
40
40
  }
41
41
 
42
42
  async requestConfirmation(request: MutableChatRequestModel): Promise<boolean> {
43
43
  const deferred = new Deferred<boolean>();
44
44
 
45
- const confirmLabel = nls.localize('theia/ai/ide/agentModeConfirmation/confirm', 'Confirm');
46
- const cancelLabel = nls.localizeByDefault('Cancel');
45
+ const agentModeLabel = nls.localize('theia/ai/ide/agentModeConfirmation/continueAgentMode', 'Continue with Agent Mode');
46
+ const editModeLabel = nls.localize('theia/ai/ide/agentModeConfirmation/continueEditMode', 'Continue with Edit Mode');
47
47
 
48
48
  request.response.response.addContent(new MarkdownChatResponseContentImpl(
49
49
  nls.localize('theia/ai/ide/agentModeConfirmation/msg',
50
- 'This agent uses an **agentic mode**. To enable autonomous flow, it is capable of directly writing to your workspace files without further confirmation.\n\n'
51
- + 'It is recommended to use version control (e.g. Git) so you can review and revert changes.\n\n'
52
- + 'You can switch to **Edit Mode** using the mode selector in the chat input area below, '
53
- + 'or use the **Architect** agent for read-only planning.\n\n'
54
- + 'This confirmation is saved for this workspace and won\'t be shown again. '
55
- + 'To reset or configure it globally, look for `ai-features.agentMode.confirmed` in the Settings.')
50
+ 'You are about to use **Agent Mode**. In this mode, the agent can **read, create, and modify files** '
51
+ + 'in your workspace autonomously, without asking for confirmation on each change.\n\n'
52
+ + 'We recommend using **version control** (e.g. Git) so you can easily review and revert any changes.\n\n'
53
+ + 'If you prefer more control, you can continue with **Edit Mode** instead, '
54
+ + 'where changes are presented as suggestions for you to apply.\n\n'
55
+ + 'How would you like to proceed?')
56
56
  ));
57
57
 
58
58
  request.response.response.addContent(new QuestionResponseContentImpl(
59
- nls.localize('theia/ai/ide/agentModeConfirmation/question', 'Do you want to proceed with Agent Mode?'),
60
- [{ text: confirmLabel }, { text: cancelLabel }],
59
+ nls.localize('theia/ai/ide/agentModeConfirmation/info',
60
+ 'Continuing with Agent Mode saves your confirmation. You can revoke this later again via the `ai-features.agentMode.enabled` setting.\n\n'
61
+ + 'Continuing with Edit Mode changes your default mode to Edit Mode.\n\n'
62
+ + 'You can change modes anytime via the mode selector or in the AI Configuration.'),
63
+ [{ text: agentModeLabel }, { text: editModeLabel }],
61
64
  request,
62
65
  async selectedOption => {
63
- if (selectedOption.text === confirmLabel) {
64
- await this.preferenceService.set(PREFERENCE_NAME_AGENT_MODE_CONFIRMED, true);
66
+ if (selectedOption.text === agentModeLabel) {
67
+ await this.preferenceService.set(PREFERENCE_NAME_AGENT_MODE_ENABLED, true, PreferenceScope.User);
65
68
  request.response.stopWaitingForInput();
66
69
  deferred.resolve(true);
67
70
  } else {
@@ -79,9 +82,7 @@ export class AgentModeConfirmationServiceImpl implements AgentModeConfirmationSe
79
82
 
80
83
  return deferred.promise.then(result => {
81
84
  request.response.updateProgressMessage({ ...progressMessage, show: 'untilFirstContent', status: 'completed' });
82
- if (result) {
83
- request.response.response.clearContent();
84
- }
85
+ request.response.response.clearContent();
85
86
  return result;
86
87
  });
87
88
  }
@@ -76,11 +76,22 @@ export class CoderAgent extends AbstractModeAwareChatAgent {
76
76
  }];
77
77
  protected override systemPromptId: string | undefined = CODER_SYSTEM_PROMPT_ID;
78
78
 
79
+ private useSettingsDefaultMode = false;
80
+
79
81
  override async invoke(request: MutableChatRequestModel): Promise<void> {
80
82
  if (this.isAgentModeRequest(request) && !this.agentModeConfirmation.isAcknowledged()) {
81
83
  const confirmed = await this.agentModeConfirmation.requestConfirmation(request);
82
84
  if (!confirmed) {
83
- request.response.complete();
85
+ await this.switchToEditMode();
86
+ // Continue the same request using Edit Mode's prompt by ignoring
87
+ // the request's original agent mode modeId for variant resolution.
88
+ this.useSettingsDefaultMode = true;
89
+ try {
90
+ await super.invoke(request);
91
+ this.suggest(request);
92
+ } finally {
93
+ this.useSettingsDefaultMode = false;
94
+ }
84
95
  return;
85
96
  }
86
97
  }
@@ -88,6 +99,19 @@ export class CoderAgent extends AbstractModeAwareChatAgent {
88
99
  this.suggest(request);
89
100
  }
90
101
 
102
+ protected override getEffectiveVariantIdWithMode(modeId?: string): string | undefined {
103
+ if (this.useSettingsDefaultMode) {
104
+ return super.getEffectiveVariantIdWithMode(undefined);
105
+ }
106
+ return super.getEffectiveVariantIdWithMode(modeId);
107
+ }
108
+
109
+ protected async switchToEditMode(): Promise<void> {
110
+ if (this.systemPromptId) {
111
+ await this.promptService.updateSelectedVariantId(this.id, this.systemPromptId, CODER_EDIT_TEMPLATE_ID);
112
+ }
113
+ }
114
+
91
115
  protected isAgentModeRequest(request: MutableChatRequestModel): boolean {
92
116
  const modeId = request.request.modeId;
93
117
  if (modeId) {
@@ -74,7 +74,8 @@ describe('Workspace Task Provider Cancellation Tests', () => {
74
74
  terminateTask: async (activeTaskInfo: TaskInfo) => {
75
75
  // Track termination
76
76
  },
77
- getTerminateSignal: async () => 'SIGTERM'
77
+ getTerminateSignal: async () => 'SIGTERM',
78
+ isTaskRunning: () => false
78
79
  } as unknown as TaskService;
79
80
 
80
81
  mockTerminalService = {
@@ -98,6 +99,123 @@ describe('Workspace Task Provider Cancellation Tests', () => {
98
99
  cancellationTokenSource.dispose();
99
100
  });
100
101
 
102
+ describe('Task cancellation with completed tasks', () => {
103
+ it('should NOT terminate task if task has already completed (not in runningTasks)', async () => {
104
+ let terminateTaskCalled = false;
105
+ mockTaskService.terminateTask = async () => {
106
+ terminateTaskCalled = true;
107
+ };
108
+ // Simulate task already completed (isTaskRunning returns false)
109
+ mockTaskService.isTaskRunning = () => false;
110
+
111
+ // Mock getTerminateSignal to never resolve (simulates in-flight handler)
112
+ mockTaskService.getTerminateSignal = () => new Promise(() => { });
113
+
114
+ const taskRunnerProvider = container.get(TaskRunnerProvider);
115
+ const handler = taskRunnerProvider.getTool().handler;
116
+
117
+ // Start task execution (will hang on getTerminateSignal)
118
+ handler(JSON.stringify({ taskName: 'build' }), mockCtx);
119
+
120
+ // Give time for the handler to register the cancellation listener
121
+ await new Promise(resolve => setTimeout(resolve, 10));
122
+
123
+ // Cancel while handler is "in-flight"
124
+ cancellationTokenSource.cancel();
125
+
126
+ // Give time for cancellation to process
127
+ await new Promise(resolve => setTimeout(resolve, 10));
128
+
129
+ // terminateTask should NOT have been called since isTaskRunning returns false
130
+ expect(terminateTaskCalled).to.be.false;
131
+ });
132
+
133
+ it('should terminate task if task is still running', async () => {
134
+ let terminateTaskCalled = false;
135
+ mockTaskService.terminateTask = async () => {
136
+ terminateTaskCalled = true;
137
+ };
138
+
139
+ // Mock isTaskRunning to return true (task still running)
140
+ mockTaskService.isTaskRunning = () => true;
141
+
142
+ // Mock getTerminateSignal to never resolve (simulates in-flight task)
143
+ mockTaskService.getTerminateSignal = () => new Promise(() => { });
144
+
145
+ const taskRunnerProvider = container.get(TaskRunnerProvider);
146
+ const handler = taskRunnerProvider.getTool().handler;
147
+
148
+ // Start task execution (will hang on getTerminateSignal)
149
+ handler(JSON.stringify({ taskName: 'build' }), mockCtx);
150
+
151
+ // Give time for the handler to register the cancellation listener
152
+ await new Promise(resolve => setTimeout(resolve, 10));
153
+
154
+ // Cancel while task is "in-flight"
155
+ cancellationTokenSource.cancel();
156
+
157
+ // Give time for cancellation to process
158
+ await new Promise(resolve => setTimeout(resolve, 10));
159
+
160
+ // terminateTask SHOULD have been called since isTaskRunning returns true
161
+ expect(terminateTaskCalled).to.be.true;
162
+ });
163
+
164
+ it('should handle multiple tasks with shared cancellation token - only terminate running tasks', async () => {
165
+ const terminatedTasks: number[] = [];
166
+ mockTaskService.terminateTask = async (taskInfo: TaskInfo) => {
167
+ terminatedTasks.push(taskInfo.taskId);
168
+ };
169
+
170
+ // Mock isTaskRunning to simulate: task 0 completed, tasks 1 & 2 still running
171
+ mockTaskService.isTaskRunning = (taskId: number) => taskId !== 0;
172
+
173
+ // Mock getTerminateSignal to never resolve (simulates in-flight handlers)
174
+ mockTaskService.getTerminateSignal = () => new Promise(() => { });
175
+
176
+ // Mock runTaskByLabel to return different task IDs
177
+ let taskIdCounter = 0;
178
+ mockTaskService.runTaskByLabel = async (token: number, taskLabel: string) => ({
179
+ taskId: taskIdCounter++,
180
+ terminalId: taskIdCounter - 1,
181
+ config: {
182
+ label: taskLabel,
183
+ _scope: 'workspace',
184
+ type: 'shell'
185
+ }
186
+ } as TaskInfo);
187
+
188
+ const taskRunnerProvider = container.get(TaskRunnerProvider);
189
+ const handler = taskRunnerProvider.getTool().handler;
190
+
191
+ // Use ONE shared CancellationTokenSource (simulates real scenario)
192
+ const sharedCts = new CancellationTokenSource();
193
+ const sharedCtx: ToolInvocationContext = { cancellationToken: sharedCts.token };
194
+
195
+ // Call handler three times with the same shared cancellation token
196
+ handler(JSON.stringify({ taskName: 'build' }), sharedCtx);
197
+ handler(JSON.stringify({ taskName: 'test' }), sharedCtx);
198
+ handler(JSON.stringify({ taskName: 'lint' }), sharedCtx);
199
+
200
+ // Give time for handlers to register cancellation listeners
201
+ await new Promise(resolve => setTimeout(resolve, 10));
202
+
203
+ // Cancel the shared token once - this fires all registered listeners
204
+ sharedCts.cancel();
205
+
206
+ // Give time for cancellation listeners to fire
207
+ await new Promise(resolve => setTimeout(resolve, 10));
208
+
209
+ // Only task 1 and 2 should have been terminated (task 0 was completed)
210
+ expect(terminatedTasks).to.have.lengthOf(2);
211
+ expect(terminatedTasks).to.include(1);
212
+ expect(terminatedTasks).to.include(2);
213
+ expect(terminatedTasks).to.not.include(0);
214
+
215
+ sharedCts.dispose();
216
+ });
217
+ });
218
+
101
219
  it('TaskListProvider should respect cancellation token', async () => {
102
220
  const taskListProvider = container.get(TaskListProvider);
103
221
  cancellationTokenSource.cancel();
@@ -113,7 +113,10 @@ export class TaskRunnerProvider implements ToolProvider {
113
113
  return `Did not find a task for the label: '${args.taskName}'`;
114
114
  }
115
115
  cancellationToken?.onCancellationRequested(() => {
116
- this.taskService.terminateTask(taskInfo);
116
+ // Only terminate if the task is still running
117
+ if (this.taskService.isTaskRunning(taskInfo.taskId)) {
118
+ this.taskService.terminateTask(taskInfo);
119
+ }
117
120
  });
118
121
  if (cancellationToken?.isCancellationRequested) {
119
122
  return JSON.stringify({ error: 'Operation cancelled by user' });
@@ -15,12 +15,12 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { AI_CORE_PREFERENCES_TITLE } from '@theia/ai-core/lib/common';
18
- import { nls, PreferenceSchema } from '@theia/core';
18
+ import { nls, PreferenceSchema, PreferenceScope } from '@theia/core';
19
19
 
20
20
  // We reuse the context key for the preference name
21
21
  export const PREFERENCE_NAME_ENABLE_AI = 'ai-features.AiEnable.enableAI';
22
22
  export const PREFERENCE_NAME_ORCHESTRATOR_EXCLUSION_LIST = 'ai-features.orchestrator.excludedAgents';
23
- export const PREFERENCE_NAME_AGENT_MODE_CONFIRMED = 'ai-features.agentMode.confirmed';
23
+ export const PREFERENCE_NAME_AGENT_MODE_ENABLED = 'ai-features.agentMode.enabled';
24
24
  export const aiIdePreferenceSchema: PreferenceSchema = {
25
25
  properties: {
26
26
  [PREFERENCE_NAME_ENABLE_AI]: {
@@ -49,14 +49,14 @@ export const aiIdePreferenceSchema: PreferenceSchema = {
49
49
  },
50
50
  default: ['ClaudeCode', 'Codex'],
51
51
  },
52
- [PREFERENCE_NAME_AGENT_MODE_CONFIRMED]: {
52
+ [PREFERENCE_NAME_AGENT_MODE_ENABLED]: {
53
53
  title: AI_CORE_PREFERENCES_TITLE,
54
- markdownDescription: nls.localize('theia/ai/ide/agentMode/confirmed/mdDescription',
55
- 'Whether the user has confirmed the agent mode warning. '
56
- + 'Agent mode allows autonomous file modifications without further confirmation. '
57
- + 'Set to `false` to see the confirmation again on the next agent mode request.'),
54
+ description: nls.localize('theia/ai/ide/agentMode/enabled/mdDescription',
55
+ 'Enable agent mode for the Coder agent. Agent mode allows autonomous file modifications without further confirmation.\
56
+ A first-use confirmation dialog is shown when using agent mode until this is set to `true`.'),
58
57
  type: 'boolean',
59
58
  default: false,
59
+ scope: PreferenceScope.User
60
60
  }
61
61
  }
62
62
  };