@google/gemini-cli-a2a-server 0.33.0-preview.9 → 0.33.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.
@@ -0,0 +1,446 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
7
+ import { Task } from './task.js';
8
+ import { MessageBusType, ToolConfirmationOutcome, ApprovalMode, Scheduler, } from '@google/gemini-cli-core';
9
+ import { createMockConfig } from '../utils/testing_utils.js';
10
+ describe('Task Event-Driven Scheduler', () => {
11
+ let mockConfig;
12
+ let mockEventBus;
13
+ let messageBus;
14
+ beforeEach(() => {
15
+ vi.clearAllMocks();
16
+ mockConfig = createMockConfig({
17
+ isEventDrivenSchedulerEnabled: () => true,
18
+ });
19
+ messageBus = mockConfig.getMessageBus();
20
+ mockEventBus = {
21
+ publish: vi.fn(),
22
+ on: vi.fn(),
23
+ off: vi.fn(),
24
+ once: vi.fn(),
25
+ removeAllListeners: vi.fn(),
26
+ finished: vi.fn(),
27
+ };
28
+ });
29
+ it('should instantiate Scheduler when enabled', () => {
30
+ // @ts-expect-error - Calling private constructor
31
+ const task = new Task('task-id', 'context-id', mockConfig, mockEventBus);
32
+ expect(task.scheduler).toBeInstanceOf(Scheduler);
33
+ });
34
+ it('should subscribe to TOOL_CALLS_UPDATE and map status changes', async () => {
35
+ // @ts-expect-error - Calling private constructor
36
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
37
+ const task = new Task('task-id', 'context-id', mockConfig, mockEventBus);
38
+ const toolCall = {
39
+ request: { callId: '1', name: 'ls', args: {} },
40
+ status: 'executing',
41
+ };
42
+ // Simulate MessageBus event
43
+ // Simulate MessageBus event
44
+ const handler = messageBus.subscribe.mock.calls.find((call) => call[0] === MessageBusType.TOOL_CALLS_UPDATE)?.[1];
45
+ if (!handler) {
46
+ throw new Error('TOOL_CALLS_UPDATE handler not found');
47
+ }
48
+ handler({
49
+ type: MessageBusType.TOOL_CALLS_UPDATE,
50
+ toolCalls: [toolCall],
51
+ });
52
+ expect(mockEventBus.publish).toHaveBeenCalledWith(expect.objectContaining({
53
+ status: expect.objectContaining({
54
+ state: 'submitted', // initial task state
55
+ }),
56
+ metadata: expect.objectContaining({
57
+ coderAgent: expect.objectContaining({
58
+ kind: 'tool-call-update',
59
+ }),
60
+ }),
61
+ }));
62
+ });
63
+ it('should handle tool confirmations by publishing to MessageBus', async () => {
64
+ // @ts-expect-error - Calling private constructor
65
+ const task = new Task('task-id', 'context-id', mockConfig, mockEventBus);
66
+ const toolCall = {
67
+ request: { callId: '1', name: 'ls', args: {} },
68
+ status: 'awaiting_approval',
69
+ correlationId: 'corr-1',
70
+ confirmationDetails: { type: 'info', title: 'test', prompt: 'test' },
71
+ };
72
+ // Simulate MessageBus event to stash the correlationId
73
+ // Simulate MessageBus event
74
+ const handler = messageBus.subscribe.mock.calls.find((call) => call[0] === MessageBusType.TOOL_CALLS_UPDATE)?.[1];
75
+ if (!handler) {
76
+ throw new Error('TOOL_CALLS_UPDATE handler not found');
77
+ }
78
+ handler({
79
+ type: MessageBusType.TOOL_CALLS_UPDATE,
80
+ toolCalls: [toolCall],
81
+ });
82
+ // Simulate A2A client confirmation
83
+ const part = {
84
+ kind: 'data',
85
+ data: {
86
+ callId: '1',
87
+ outcome: 'proceed_once',
88
+ },
89
+ };
90
+ const handled = await task._handleToolConfirmationPart(part);
91
+ expect(handled).toBe(true);
92
+ expect(messageBus.publish).toHaveBeenCalledWith(expect.objectContaining({
93
+ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
94
+ correlationId: 'corr-1',
95
+ confirmed: true,
96
+ outcome: ToolConfirmationOutcome.ProceedOnce,
97
+ }));
98
+ });
99
+ it('should handle Rejection (Cancel) and Modification (ModifyWithEditor)', async () => {
100
+ // @ts-expect-error - Calling private constructor
101
+ const task = new Task('task-id', 'context-id', mockConfig, mockEventBus);
102
+ const toolCall = {
103
+ request: { callId: '1', name: 'ls', args: {} },
104
+ status: 'awaiting_approval',
105
+ correlationId: 'corr-1',
106
+ confirmationDetails: { type: 'info', title: 'test', prompt: 'test' },
107
+ };
108
+ const handler = messageBus.subscribe.mock.calls.find((call) => call[0] === MessageBusType.TOOL_CALLS_UPDATE)?.[1];
109
+ handler({ type: MessageBusType.TOOL_CALLS_UPDATE, toolCalls: [toolCall] });
110
+ // Simulate Rejection (Cancel)
111
+ const handled = await task._handleToolConfirmationPart({
112
+ kind: 'data',
113
+ data: { callId: '1', outcome: 'cancel' },
114
+ });
115
+ expect(handled).toBe(true);
116
+ expect(messageBus.publish).toHaveBeenCalledWith(expect.objectContaining({
117
+ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
118
+ correlationId: 'corr-1',
119
+ confirmed: false,
120
+ }));
121
+ const toolCall2 = {
122
+ request: { callId: '2', name: 'ls', args: {} },
123
+ status: 'awaiting_approval',
124
+ correlationId: 'corr-2',
125
+ confirmationDetails: { type: 'info', title: 'test', prompt: 'test' },
126
+ };
127
+ handler({ type: MessageBusType.TOOL_CALLS_UPDATE, toolCalls: [toolCall2] });
128
+ // Simulate ModifyWithEditor
129
+ const handled2 = await task._handleToolConfirmationPart({
130
+ kind: 'data',
131
+ data: { callId: '2', outcome: 'modify_with_editor' },
132
+ });
133
+ expect(handled2).toBe(true);
134
+ expect(messageBus.publish).toHaveBeenCalledWith(expect.objectContaining({
135
+ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
136
+ correlationId: 'corr-2',
137
+ confirmed: false,
138
+ outcome: ToolConfirmationOutcome.ModifyWithEditor,
139
+ payload: undefined,
140
+ }));
141
+ });
142
+ it('should handle MCP Server tool operations correctly', async () => {
143
+ // @ts-expect-error - Calling private constructor
144
+ const task = new Task('task-id', 'context-id', mockConfig, mockEventBus);
145
+ const toolCall = {
146
+ request: { callId: '1', name: 'call_mcp_tool', args: {} },
147
+ status: 'awaiting_approval',
148
+ correlationId: 'corr-mcp-1',
149
+ confirmationDetails: {
150
+ type: 'mcp',
151
+ title: 'MCP Server Operation',
152
+ prompt: 'test_mcp',
153
+ },
154
+ };
155
+ const handler = messageBus.subscribe.mock.calls.find((call) => call[0] === MessageBusType.TOOL_CALLS_UPDATE)?.[1];
156
+ handler({ type: MessageBusType.TOOL_CALLS_UPDATE, toolCalls: [toolCall] });
157
+ // Simulate ProceedOnce for MCP
158
+ const handled = await task._handleToolConfirmationPart({
159
+ kind: 'data',
160
+ data: { callId: '1', outcome: 'proceed_once' },
161
+ });
162
+ expect(handled).toBe(true);
163
+ expect(messageBus.publish).toHaveBeenCalledWith(expect.objectContaining({
164
+ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
165
+ correlationId: 'corr-mcp-1',
166
+ confirmed: true,
167
+ outcome: ToolConfirmationOutcome.ProceedOnce,
168
+ }));
169
+ });
170
+ it('should handle MCP Server tool ProceedAlwaysServer outcome', async () => {
171
+ // @ts-expect-error - Calling private constructor
172
+ const task = new Task('task-id', 'context-id', mockConfig, mockEventBus);
173
+ const toolCall = {
174
+ request: { callId: '1', name: 'call_mcp_tool', args: {} },
175
+ status: 'awaiting_approval',
176
+ correlationId: 'corr-mcp-2',
177
+ confirmationDetails: {
178
+ type: 'mcp',
179
+ title: 'MCP Server Operation',
180
+ prompt: 'test_mcp',
181
+ },
182
+ };
183
+ const handler = messageBus.subscribe.mock.calls.find((call) => call[0] === MessageBusType.TOOL_CALLS_UPDATE)?.[1];
184
+ handler({ type: MessageBusType.TOOL_CALLS_UPDATE, toolCalls: [toolCall] });
185
+ const handled = await task._handleToolConfirmationPart({
186
+ kind: 'data',
187
+ data: { callId: '1', outcome: 'proceed_always_server' },
188
+ });
189
+ expect(handled).toBe(true);
190
+ expect(messageBus.publish).toHaveBeenCalledWith(expect.objectContaining({
191
+ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
192
+ correlationId: 'corr-mcp-2',
193
+ confirmed: true,
194
+ outcome: ToolConfirmationOutcome.ProceedAlwaysServer,
195
+ }));
196
+ });
197
+ it('should handle MCP Server tool ProceedAlwaysTool outcome', async () => {
198
+ // @ts-expect-error - Calling private constructor
199
+ const task = new Task('task-id', 'context-id', mockConfig, mockEventBus);
200
+ const toolCall = {
201
+ request: { callId: '1', name: 'call_mcp_tool', args: {} },
202
+ status: 'awaiting_approval',
203
+ correlationId: 'corr-mcp-3',
204
+ confirmationDetails: {
205
+ type: 'mcp',
206
+ title: 'MCP Server Operation',
207
+ prompt: 'test_mcp',
208
+ },
209
+ };
210
+ const handler = messageBus.subscribe.mock.calls.find((call) => call[0] === MessageBusType.TOOL_CALLS_UPDATE)?.[1];
211
+ handler({ type: MessageBusType.TOOL_CALLS_UPDATE, toolCalls: [toolCall] });
212
+ const handled = await task._handleToolConfirmationPart({
213
+ kind: 'data',
214
+ data: { callId: '1', outcome: 'proceed_always_tool' },
215
+ });
216
+ expect(handled).toBe(true);
217
+ expect(messageBus.publish).toHaveBeenCalledWith(expect.objectContaining({
218
+ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
219
+ correlationId: 'corr-mcp-3',
220
+ confirmed: true,
221
+ outcome: ToolConfirmationOutcome.ProceedAlwaysTool,
222
+ }));
223
+ });
224
+ it('should handle MCP Server tool ProceedAlwaysAndSave outcome', async () => {
225
+ // @ts-expect-error - Calling private constructor
226
+ const task = new Task('task-id', 'context-id', mockConfig, mockEventBus);
227
+ const toolCall = {
228
+ request: { callId: '1', name: 'call_mcp_tool', args: {} },
229
+ status: 'awaiting_approval',
230
+ correlationId: 'corr-mcp-4',
231
+ confirmationDetails: {
232
+ type: 'mcp',
233
+ title: 'MCP Server Operation',
234
+ prompt: 'test_mcp',
235
+ },
236
+ };
237
+ const handler = messageBus.subscribe.mock.calls.find((call) => call[0] === MessageBusType.TOOL_CALLS_UPDATE)?.[1];
238
+ handler({ type: MessageBusType.TOOL_CALLS_UPDATE, toolCalls: [toolCall] });
239
+ const handled = await task._handleToolConfirmationPart({
240
+ kind: 'data',
241
+ data: { callId: '1', outcome: 'proceed_always_and_save' },
242
+ });
243
+ expect(handled).toBe(true);
244
+ expect(messageBus.publish).toHaveBeenCalledWith(expect.objectContaining({
245
+ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
246
+ correlationId: 'corr-mcp-4',
247
+ confirmed: true,
248
+ outcome: ToolConfirmationOutcome.ProceedAlwaysAndSave,
249
+ }));
250
+ });
251
+ it('should execute without confirmation in YOLO mode and not transition to input-required', async () => {
252
+ // Enable YOLO mode
253
+ const yoloConfig = createMockConfig({
254
+ isEventDrivenSchedulerEnabled: () => true,
255
+ getApprovalMode: () => ApprovalMode.YOLO,
256
+ });
257
+ const yoloMessageBus = yoloConfig.getMessageBus();
258
+ // @ts-expect-error - Calling private constructor
259
+ const task = new Task('task-id', 'context-id', yoloConfig, mockEventBus);
260
+ task.setTaskStateAndPublishUpdate = vi.fn();
261
+ const toolCall = {
262
+ request: { callId: '1', name: 'ls', args: {} },
263
+ status: 'awaiting_approval',
264
+ correlationId: 'corr-1',
265
+ confirmationDetails: { type: 'info', title: 'test', prompt: 'test' },
266
+ };
267
+ const handler = yoloMessageBus.subscribe.mock.calls.find((call) => call[0] === MessageBusType.TOOL_CALLS_UPDATE)?.[1];
268
+ handler({ type: MessageBusType.TOOL_CALLS_UPDATE, toolCalls: [toolCall] });
269
+ // Should NOT auto-publish ProceedOnce anymore, because PolicyEngine handles it directly
270
+ expect(yoloMessageBus.publish).not.toHaveBeenCalledWith(expect.objectContaining({
271
+ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
272
+ }));
273
+ // Should NOT transition to input-required since it was auto-approved
274
+ expect(task.setTaskStateAndPublishUpdate).not.toHaveBeenCalledWith('input-required', expect.anything(), undefined, undefined, true);
275
+ });
276
+ it('should handle output updates via the message bus', async () => {
277
+ // @ts-expect-error - Calling private constructor
278
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
279
+ const task = new Task('task-id', 'context-id', mockConfig, mockEventBus);
280
+ const toolCall = {
281
+ request: { callId: '1', name: 'ls', args: {} },
282
+ status: 'executing',
283
+ liveOutput: 'chunk1',
284
+ };
285
+ // Simulate MessageBus event
286
+ // Simulate MessageBus event
287
+ const handler = messageBus.subscribe.mock.calls.find((call) => call[0] === MessageBusType.TOOL_CALLS_UPDATE)?.[1];
288
+ if (!handler) {
289
+ throw new Error('TOOL_CALLS_UPDATE handler not found');
290
+ }
291
+ handler({
292
+ type: MessageBusType.TOOL_CALLS_UPDATE,
293
+ toolCalls: [toolCall],
294
+ });
295
+ // Should publish artifact update for output
296
+ expect(mockEventBus.publish).toHaveBeenCalledWith(expect.objectContaining({
297
+ kind: 'artifact-update',
298
+ artifact: expect.objectContaining({
299
+ artifactId: 'tool-1-output',
300
+ parts: [{ kind: 'text', text: 'chunk1' }],
301
+ }),
302
+ }));
303
+ });
304
+ it('should complete artifact creation without hanging', async () => {
305
+ // @ts-expect-error - Calling private constructor
306
+ const task = new Task('task-id', 'context-id', mockConfig, mockEventBus);
307
+ const toolCallId = 'create-file-123';
308
+ task['_registerToolCall'](toolCallId, 'executing');
309
+ const toolCall = {
310
+ request: {
311
+ callId: toolCallId,
312
+ name: 'writeFile',
313
+ args: { path: 'test.sh' },
314
+ },
315
+ status: 'success',
316
+ result: { ok: true },
317
+ };
318
+ const handler = messageBus.subscribe.mock.calls.find((call) => call[0] === MessageBusType.TOOL_CALLS_UPDATE)?.[1];
319
+ handler({ type: MessageBusType.TOOL_CALLS_UPDATE, toolCalls: [toolCall] });
320
+ // The tool should be complete and registered appropriately, eventually
321
+ // triggering the toolCompletionPromise resolution when all clear.
322
+ const internalTask = task;
323
+ expect(internalTask.completedToolCalls.length).toBe(1);
324
+ expect(internalTask.pendingToolCalls.size).toBe(0);
325
+ });
326
+ it('should preserve messageId across multiple text chunks to prevent UI duplication', async () => {
327
+ // @ts-expect-error - Calling private constructor
328
+ const task = new Task('task-id', 'context-id', mockConfig, mockEventBus);
329
+ // Initialize the ID for the first turn (happens internally upon LLM stream)
330
+ task.currentAgentMessageId = 'test-id-123';
331
+ // Simulate sending multiple text chunks
332
+ task._sendTextContent('chunk 1');
333
+ task._sendTextContent('chunk 2');
334
+ // Both text contents should have been published with the same messageId
335
+ const textCalls = mockEventBus.publish.mock.calls.filter((call) => call[0].status?.message?.kind === 'message');
336
+ expect(textCalls.length).toBe(2);
337
+ expect(textCalls[0][0].status.message.messageId).toBe('test-id-123');
338
+ expect(textCalls[1][0].status.message.messageId).toBe('test-id-123');
339
+ // Simulate starting a new turn by calling getAndClearCompletedTools
340
+ // (which precedes sendCompletedToolsToLlm where a new ID is minted)
341
+ task.getAndClearCompletedTools();
342
+ // sendCompletedToolsToLlm internally rolls the ID forward.
343
+ // Simulate what sendCompletedToolsToLlm does:
344
+ const internalTask = task;
345
+ internalTask.setTaskStateAndPublishUpdate('working', {});
346
+ // Simulate what sendCompletedToolsToLlm does: generate a new UUID for the next turn
347
+ task.currentAgentMessageId = 'test-id-456';
348
+ task._sendTextContent('chunk 3');
349
+ const secondTurnCalls = mockEventBus.publish.mock.calls.filter((call) => call[0].status?.message?.messageId === 'test-id-456');
350
+ expect(secondTurnCalls.length).toBe(1);
351
+ expect(secondTurnCalls[0][0].status.message.parts[0].text).toBe('chunk 3');
352
+ });
353
+ it('should handle parallel tool calls correctly', async () => {
354
+ // @ts-expect-error - Calling private constructor
355
+ const task = new Task('task-id', 'context-id', mockConfig, mockEventBus);
356
+ const toolCall1 = {
357
+ request: { callId: '1', name: 'ls', args: {} },
358
+ status: 'awaiting_approval',
359
+ correlationId: 'corr-1',
360
+ confirmationDetails: { type: 'info', title: 'test 1', prompt: 'test 1' },
361
+ };
362
+ const toolCall2 = {
363
+ request: { callId: '2', name: 'pwd', args: {} },
364
+ status: 'awaiting_approval',
365
+ correlationId: 'corr-2',
366
+ confirmationDetails: { type: 'info', title: 'test 2', prompt: 'test 2' },
367
+ };
368
+ const handler = messageBus.subscribe.mock.calls.find((call) => call[0] === MessageBusType.TOOL_CALLS_UPDATE)?.[1];
369
+ // Publish update for both tool calls simultaneously
370
+ handler({
371
+ type: MessageBusType.TOOL_CALLS_UPDATE,
372
+ toolCalls: [toolCall1, toolCall2],
373
+ });
374
+ // Confirm first tool call
375
+ const handled1 = await task._handleToolConfirmationPart({
376
+ kind: 'data',
377
+ data: { callId: '1', outcome: 'proceed_once' },
378
+ });
379
+ expect(handled1).toBe(true);
380
+ expect(messageBus.publish).toHaveBeenCalledWith(expect.objectContaining({
381
+ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
382
+ correlationId: 'corr-1',
383
+ confirmed: true,
384
+ }));
385
+ // Confirm second tool call
386
+ const handled2 = await task._handleToolConfirmationPart({
387
+ kind: 'data',
388
+ data: { callId: '2', outcome: 'cancel' },
389
+ });
390
+ expect(handled2).toBe(true);
391
+ expect(messageBus.publish).toHaveBeenCalledWith(expect.objectContaining({
392
+ type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
393
+ correlationId: 'corr-2',
394
+ confirmed: false,
395
+ }));
396
+ });
397
+ it('should wait for executing tools before transitioning to input-required state', async () => {
398
+ // @ts-expect-error - Calling private constructor
399
+ const task = new Task('task-id', 'context-id', mockConfig, mockEventBus);
400
+ task.setTaskStateAndPublishUpdate = vi.fn();
401
+ // Register tool 1 as executing
402
+ task['_registerToolCall']('1', 'executing');
403
+ const toolCall1 = {
404
+ request: { callId: '1', name: 'ls', args: {} },
405
+ status: 'executing',
406
+ };
407
+ const toolCall2 = {
408
+ request: { callId: '2', name: 'pwd', args: {} },
409
+ status: 'awaiting_approval',
410
+ correlationId: 'corr-2',
411
+ confirmationDetails: { type: 'info', title: 'test 2', prompt: 'test 2' },
412
+ };
413
+ const handler = messageBus.subscribe.mock.calls.find((call) => call[0] === MessageBusType.TOOL_CALLS_UPDATE)?.[1];
414
+ handler({
415
+ type: MessageBusType.TOOL_CALLS_UPDATE,
416
+ toolCalls: [toolCall1, toolCall2],
417
+ });
418
+ // Should NOT transition to input-required yet
419
+ expect(task.setTaskStateAndPublishUpdate).not.toHaveBeenCalledWith('input-required', expect.anything(), undefined, undefined, true);
420
+ // Complete tool 1
421
+ const toolCall1Complete = {
422
+ ...toolCall1,
423
+ status: 'success',
424
+ result: { ok: true },
425
+ };
426
+ handler({
427
+ type: MessageBusType.TOOL_CALLS_UPDATE,
428
+ toolCalls: [toolCall1Complete, toolCall2],
429
+ });
430
+ // Now it should transition
431
+ expect(task.setTaskStateAndPublishUpdate).toHaveBeenCalledWith('input-required', expect.anything(), undefined, undefined, true);
432
+ });
433
+ it('should ignore confirmations for unknown tool calls', async () => {
434
+ // @ts-expect-error - Calling private constructor
435
+ const task = new Task('task-id', 'context-id', mockConfig, mockEventBus);
436
+ const handled = await task._handleToolConfirmationPart({
437
+ kind: 'data',
438
+ data: { callId: 'unknown-id', outcome: 'proceed_once' },
439
+ });
440
+ // Should return false for unhandled tool call
441
+ expect(handled).toBe(false);
442
+ // Should not publish anything to the message bus
443
+ expect(messageBus.publish).not.toHaveBeenCalled();
444
+ });
445
+ });
446
+ //# sourceMappingURL=task-event-driven.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-event-driven.test.js","sourceRoot":"","sources":["../../../src/agent/task-event-driven.test.ts"],"names":[],"mappings":"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"}
@@ -3,26 +3,31 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { CoreToolScheduler, type GeminiClient, type CompletedToolCall, type ToolCallRequestInfo, type ServerGeminiStreamEvent, type ToolCallConfirmationDetails, type Config } from '@google/gemini-cli-core';
6
+ import { Scheduler, CoreToolScheduler, type GeminiClient, type CompletedToolCall, type ToolCallRequestInfo, type ServerGeminiStreamEvent, type ToolCallConfirmationDetails, type Config } from '@google/gemini-cli-core';
7
7
  import { type ExecutionEventBus, type RequestContext } from '@a2a-js/sdk/server';
8
8
  import type { TaskState, Part } from '@a2a-js/sdk';
9
9
  import { type CoderAgentMessage, type TaskMetadata, type ThoughtSummary } from '../types.js';
10
10
  export declare class Task {
11
11
  id: string;
12
12
  contextId: string;
13
- scheduler: CoreToolScheduler;
13
+ scheduler: Scheduler | CoreToolScheduler;
14
14
  config: Config;
15
15
  geminiClient: GeminiClient;
16
16
  pendingToolConfirmationDetails: Map<string, ToolCallConfirmationDetails>;
17
+ pendingCorrelationIds: Map<string, string>;
17
18
  taskState: TaskState;
18
19
  eventBus?: ExecutionEventBus;
19
20
  completedToolCalls: CompletedToolCall[];
21
+ processedToolCallIds: Set<string>;
20
22
  skipFinalTrueAfterInlineEdit: boolean;
21
23
  modelInfo?: string;
22
24
  currentPromptId: string | undefined;
25
+ currentAgentMessageId: string;
23
26
  promptCount: number;
24
27
  autoExecute: boolean;
28
+ private get isYoloMatch();
25
29
  private pendingToolCalls;
30
+ private toolsAlreadyConfirmed;
26
31
  private toolCompletionPromise?;
27
32
  private toolCompletionNotifier?;
28
33
  private constructor();
@@ -40,7 +45,13 @@ export declare class Task {
40
45
  private _schedulerOutputUpdate;
41
46
  private _schedulerAllToolCallsComplete;
42
47
  private _schedulerToolCallsUpdate;
43
- private createScheduler;
48
+ private createLegacyScheduler;
49
+ private messageBusListener?;
50
+ private setupEventDrivenScheduler;
51
+ dispose(): void;
52
+ private handleEventDrivenToolCallsUpdate;
53
+ private handleEventDrivenToolCall;
54
+ private checkInputRequiredState;
44
55
  private _pickFields;
45
56
  private toolStatusMessage;
46
57
  private getProposedContent;