@google/gemini-cli-a2a-server 0.10.0-nightly.20251014.0a3e492e
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.
- package/README.md +5 -0
- package/dist/.last_build +0 -0
- package/dist/a2a-server.mjs +354316 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/src/agent/executor.d.ts +40 -0
- package/dist/src/agent/executor.js +406 -0
- package/dist/src/agent/executor.js.map +1 -0
- package/dist/src/agent/task.d.ts +54 -0
- package/dist/src/agent/task.js +652 -0
- package/dist/src/agent/task.js.map +1 -0
- package/dist/src/agent/task.test.d.ts +6 -0
- package/dist/src/agent/task.test.js +44 -0
- package/dist/src/agent/task.test.js.map +1 -0
- package/dist/src/config/config.d.ts +14 -0
- package/dist/src/config/config.js +150 -0
- package/dist/src/config/config.js.map +1 -0
- package/dist/src/config/extension.d.ts +11 -0
- package/dist/src/config/extension.js +104 -0
- package/dist/src/config/extension.js.map +1 -0
- package/dist/src/config/settings.d.ts +38 -0
- package/dist/src/config/settings.js +102 -0
- package/dist/src/config/settings.js.map +1 -0
- package/dist/src/http/app.d.ts +8 -0
- package/dist/src/http/app.js +170 -0
- package/dist/src/http/app.js.map +1 -0
- package/dist/src/http/app.test.d.ts +6 -0
- package/dist/src/http/app.test.js +520 -0
- package/dist/src/http/app.test.js.map +1 -0
- package/dist/src/http/endpoints.test.d.ts +6 -0
- package/dist/src/http/endpoints.test.js +138 -0
- package/dist/src/http/endpoints.test.js.map +1 -0
- package/dist/src/http/requestStorage.d.ts +10 -0
- package/dist/src/http/requestStorage.js +8 -0
- package/dist/src/http/requestStorage.js.map +1 -0
- package/dist/src/http/server.d.ts +7 -0
- package/dist/src/http/server.js +26 -0
- package/dist/src/http/server.js.map +1 -0
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.js +9 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/persistence/gcs.d.ts +24 -0
- package/dist/src/persistence/gcs.js +238 -0
- package/dist/src/persistence/gcs.js.map +1 -0
- package/dist/src/persistence/gcs.test.d.ts +6 -0
- package/dist/src/persistence/gcs.test.js +265 -0
- package/dist/src/persistence/gcs.test.js.map +1 -0
- package/dist/src/types.d.ts +91 -0
- package/dist/src/types.js +44 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils/executor_utils.d.ts +7 -0
- package/dist/src/utils/executor_utils.js +41 -0
- package/dist/src/utils/executor_utils.js.map +1 -0
- package/dist/src/utils/logger.d.ts +8 -0
- package/dist/src/utils/logger.js +23 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/testing_utils.d.ts +33 -0
- package/dist/src/utils/testing_utils.js +91 -0
- package/dist/src/utils/testing_utils.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Storage } from '@google-cloud/storage';
|
|
7
|
+
import * as fse from 'fs-extra';
|
|
8
|
+
import { promises as fsPromises, createReadStream } from 'node:fs';
|
|
9
|
+
import * as tar from 'tar';
|
|
10
|
+
import { gzipSync, gunzipSync } from 'node:zlib';
|
|
11
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
12
|
+
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
13
|
+
import { GCSTaskStore, NoOpTaskStore } from './gcs.js';
|
|
14
|
+
import { logger } from '../utils/logger.js';
|
|
15
|
+
import * as configModule from '../config/config.js';
|
|
16
|
+
import { getPersistedState, METADATA_KEY } from '../types.js';
|
|
17
|
+
// Mock dependencies
|
|
18
|
+
vi.mock('@google-cloud/storage');
|
|
19
|
+
vi.mock('fs-extra', () => ({
|
|
20
|
+
pathExists: vi.fn(),
|
|
21
|
+
readdir: vi.fn(),
|
|
22
|
+
remove: vi.fn(),
|
|
23
|
+
ensureDir: vi.fn(),
|
|
24
|
+
}));
|
|
25
|
+
vi.mock('node:fs', async () => {
|
|
26
|
+
const actual = await vi.importActual('node:fs');
|
|
27
|
+
return {
|
|
28
|
+
...actual,
|
|
29
|
+
promises: {
|
|
30
|
+
...actual.promises,
|
|
31
|
+
readdir: vi.fn(),
|
|
32
|
+
},
|
|
33
|
+
createReadStream: vi.fn(),
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
vi.mock('tar');
|
|
37
|
+
vi.mock('zlib');
|
|
38
|
+
vi.mock('uuid');
|
|
39
|
+
vi.mock('../utils/logger.js', () => ({
|
|
40
|
+
logger: {
|
|
41
|
+
info: vi.fn(),
|
|
42
|
+
warn: vi.fn(),
|
|
43
|
+
error: vi.fn(),
|
|
44
|
+
debug: vi.fn(),
|
|
45
|
+
},
|
|
46
|
+
}));
|
|
47
|
+
vi.mock('../config/config.js', () => ({
|
|
48
|
+
setTargetDir: vi.fn(),
|
|
49
|
+
}));
|
|
50
|
+
vi.mock('node:stream/promises', () => ({
|
|
51
|
+
pipeline: vi.fn(),
|
|
52
|
+
}));
|
|
53
|
+
vi.mock('../types.js', async (importOriginal) => {
|
|
54
|
+
const actual = await importOriginal();
|
|
55
|
+
return {
|
|
56
|
+
...actual,
|
|
57
|
+
getPersistedState: vi.fn(),
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
const mockStorage = Storage;
|
|
61
|
+
const mockFse = fse;
|
|
62
|
+
const mockCreateReadStream = createReadStream;
|
|
63
|
+
const mockTar = tar;
|
|
64
|
+
const mockGzipSync = gzipSync;
|
|
65
|
+
const mockGunzipSync = gunzipSync;
|
|
66
|
+
const mockUuidv4 = uuidv4;
|
|
67
|
+
const mockSetTargetDir = configModule.setTargetDir;
|
|
68
|
+
const mockGetPersistedState = getPersistedState;
|
|
69
|
+
const TEST_METADATA_KEY = METADATA_KEY || '__persistedState';
|
|
70
|
+
describe('GCSTaskStore', () => {
|
|
71
|
+
let bucketName;
|
|
72
|
+
let mockBucket;
|
|
73
|
+
let mockFile;
|
|
74
|
+
let mockWriteStream;
|
|
75
|
+
let mockStorageInstance;
|
|
76
|
+
beforeEach(() => {
|
|
77
|
+
vi.clearAllMocks();
|
|
78
|
+
bucketName = 'test-bucket';
|
|
79
|
+
mockWriteStream = {
|
|
80
|
+
on: vi.fn((event, cb) => {
|
|
81
|
+
if (event === 'finish')
|
|
82
|
+
setTimeout(cb, 0); // Simulate async finish
|
|
83
|
+
return mockWriteStream;
|
|
84
|
+
}),
|
|
85
|
+
destroy: vi.fn(),
|
|
86
|
+
destroyed: false,
|
|
87
|
+
};
|
|
88
|
+
mockFile = {
|
|
89
|
+
save: vi.fn().mockResolvedValue(undefined),
|
|
90
|
+
download: vi.fn().mockResolvedValue([Buffer.from('')]),
|
|
91
|
+
exists: vi.fn().mockResolvedValue([true]),
|
|
92
|
+
createWriteStream: vi.fn().mockReturnValue(mockWriteStream),
|
|
93
|
+
};
|
|
94
|
+
mockBucket = {
|
|
95
|
+
exists: vi.fn().mockResolvedValue([true]),
|
|
96
|
+
file: vi.fn().mockReturnValue(mockFile),
|
|
97
|
+
name: bucketName,
|
|
98
|
+
};
|
|
99
|
+
mockStorageInstance = {
|
|
100
|
+
bucket: vi.fn().mockReturnValue(mockBucket),
|
|
101
|
+
getBuckets: vi.fn().mockResolvedValue([[{ name: bucketName }]]),
|
|
102
|
+
createBucket: vi.fn().mockResolvedValue([mockBucket]),
|
|
103
|
+
};
|
|
104
|
+
mockStorage.mockReturnValue(mockStorageInstance);
|
|
105
|
+
mockUuidv4.mockReturnValue('test-uuid');
|
|
106
|
+
mockSetTargetDir.mockReturnValue('/tmp/workdir');
|
|
107
|
+
mockGetPersistedState.mockReturnValue({
|
|
108
|
+
_agentSettings: {},
|
|
109
|
+
_taskState: 'submitted',
|
|
110
|
+
});
|
|
111
|
+
fse.pathExists.mockResolvedValue(true);
|
|
112
|
+
fsPromises.readdir.mockResolvedValue(['file1.txt']);
|
|
113
|
+
mockTar.c.mockResolvedValue(undefined);
|
|
114
|
+
mockTar.x.mockResolvedValue(undefined);
|
|
115
|
+
mockFse.remove.mockResolvedValue(undefined);
|
|
116
|
+
mockFse.ensureDir.mockResolvedValue(undefined);
|
|
117
|
+
mockGzipSync.mockReturnValue(Buffer.from('compressed'));
|
|
118
|
+
mockGunzipSync.mockReturnValue(Buffer.from('{}'));
|
|
119
|
+
mockCreateReadStream.mockReturnValue({ on: vi.fn(), pipe: vi.fn() });
|
|
120
|
+
});
|
|
121
|
+
describe('Constructor & Initialization', () => {
|
|
122
|
+
it('should initialize and check bucket existence', async () => {
|
|
123
|
+
const store = new GCSTaskStore(bucketName);
|
|
124
|
+
await store['ensureBucketInitialized']();
|
|
125
|
+
expect(mockStorage).toHaveBeenCalledTimes(1);
|
|
126
|
+
expect(mockStorageInstance.getBuckets).toHaveBeenCalled();
|
|
127
|
+
expect(logger.info).toHaveBeenCalledWith(expect.stringContaining('Bucket test-bucket exists'));
|
|
128
|
+
});
|
|
129
|
+
it('should create bucket if it does not exist', async () => {
|
|
130
|
+
mockStorageInstance.getBuckets.mockResolvedValue([[]]);
|
|
131
|
+
const store = new GCSTaskStore(bucketName);
|
|
132
|
+
await store['ensureBucketInitialized']();
|
|
133
|
+
expect(mockStorageInstance.createBucket).toHaveBeenCalledWith(bucketName);
|
|
134
|
+
expect(logger.info).toHaveBeenCalledWith(expect.stringContaining('Bucket test-bucket created successfully'));
|
|
135
|
+
});
|
|
136
|
+
it('should throw if bucket creation fails', async () => {
|
|
137
|
+
mockStorageInstance.getBuckets.mockResolvedValue([[]]);
|
|
138
|
+
mockStorageInstance.createBucket.mockRejectedValue(new Error('Create failed'));
|
|
139
|
+
const store = new GCSTaskStore(bucketName);
|
|
140
|
+
await expect(store['ensureBucketInitialized']()).rejects.toThrow('Failed to create GCS bucket test-bucket: Error: Create failed');
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
describe('save', () => {
|
|
144
|
+
const mockTask = {
|
|
145
|
+
id: 'task1',
|
|
146
|
+
contextId: 'ctx1',
|
|
147
|
+
kind: 'task',
|
|
148
|
+
status: { state: 'working' },
|
|
149
|
+
metadata: {},
|
|
150
|
+
};
|
|
151
|
+
it.skip('should save metadata and workspace', async () => {
|
|
152
|
+
const store = new GCSTaskStore(bucketName);
|
|
153
|
+
await store.save(mockTask);
|
|
154
|
+
expect(mockFile.save).toHaveBeenCalledTimes(1);
|
|
155
|
+
expect(mockTar.c).toHaveBeenCalledTimes(1);
|
|
156
|
+
expect(mockCreateReadStream).toHaveBeenCalledTimes(1);
|
|
157
|
+
expect(mockFse.remove).toHaveBeenCalledTimes(1);
|
|
158
|
+
expect(logger.info).toHaveBeenCalledWith(expect.stringContaining('metadata saved to GCS'));
|
|
159
|
+
expect(logger.info).toHaveBeenCalledWith(expect.stringContaining('workspace saved to GCS'));
|
|
160
|
+
});
|
|
161
|
+
it('should handle tar creation failure', async () => {
|
|
162
|
+
mockFse.pathExists.mockImplementation(async (path) => !path.toString().includes('task-task1-workspace-test-uuid.tar.gz'));
|
|
163
|
+
const store = new GCSTaskStore(bucketName);
|
|
164
|
+
await expect(store.save(mockTask)).rejects.toThrow('tar.c command failed to create');
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
describe('load', () => {
|
|
168
|
+
it('should load task metadata and workspace', async () => {
|
|
169
|
+
mockGunzipSync.mockReturnValue(Buffer.from(JSON.stringify({
|
|
170
|
+
[TEST_METADATA_KEY]: {
|
|
171
|
+
_agentSettings: {},
|
|
172
|
+
_taskState: 'submitted',
|
|
173
|
+
},
|
|
174
|
+
_contextId: 'ctx1',
|
|
175
|
+
})));
|
|
176
|
+
mockFile.download.mockResolvedValue([Buffer.from('compressed metadata')]);
|
|
177
|
+
mockFile.download.mockResolvedValueOnce([
|
|
178
|
+
Buffer.from('compressed metadata'),
|
|
179
|
+
]);
|
|
180
|
+
mockBucket.file = vi.fn((path) => {
|
|
181
|
+
const newMockFile = { ...mockFile };
|
|
182
|
+
if (path.includes('metadata')) {
|
|
183
|
+
newMockFile.download = vi
|
|
184
|
+
.fn()
|
|
185
|
+
.mockResolvedValue([Buffer.from('compressed metadata')]);
|
|
186
|
+
newMockFile.exists = vi.fn().mockResolvedValue([true]);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
newMockFile.download = vi
|
|
190
|
+
.fn()
|
|
191
|
+
.mockResolvedValue([Buffer.from('compressed workspace')]);
|
|
192
|
+
newMockFile.exists = vi.fn().mockResolvedValue([true]);
|
|
193
|
+
}
|
|
194
|
+
return newMockFile;
|
|
195
|
+
});
|
|
196
|
+
const store = new GCSTaskStore(bucketName);
|
|
197
|
+
const task = await store.load('task1');
|
|
198
|
+
expect(task).toBeDefined();
|
|
199
|
+
expect(task?.id).toBe('task1');
|
|
200
|
+
expect(mockBucket.file).toHaveBeenCalledWith('tasks/task1/metadata.tar.gz');
|
|
201
|
+
expect(mockBucket.file).toHaveBeenCalledWith('tasks/task1/workspace.tar.gz');
|
|
202
|
+
expect(mockTar.x).toHaveBeenCalledTimes(1);
|
|
203
|
+
expect(mockFse.remove).toHaveBeenCalledTimes(1);
|
|
204
|
+
});
|
|
205
|
+
it('should return undefined if metadata not found', async () => {
|
|
206
|
+
mockFile.exists.mockResolvedValue([false]);
|
|
207
|
+
const store = new GCSTaskStore(bucketName);
|
|
208
|
+
const task = await store.load('task1');
|
|
209
|
+
expect(task).toBeUndefined();
|
|
210
|
+
expect(mockBucket.file).toHaveBeenCalledWith('tasks/task1/metadata.tar.gz');
|
|
211
|
+
});
|
|
212
|
+
it('should load metadata even if workspace not found', async () => {
|
|
213
|
+
mockGunzipSync.mockReturnValue(Buffer.from(JSON.stringify({
|
|
214
|
+
[TEST_METADATA_KEY]: {
|
|
215
|
+
_agentSettings: {},
|
|
216
|
+
_taskState: 'submitted',
|
|
217
|
+
},
|
|
218
|
+
_contextId: 'ctx1',
|
|
219
|
+
})));
|
|
220
|
+
mockBucket.file = vi.fn((path) => {
|
|
221
|
+
const newMockFile = { ...mockFile };
|
|
222
|
+
if (path.includes('workspace.tar.gz')) {
|
|
223
|
+
newMockFile.exists = vi.fn().mockResolvedValue([false]);
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
newMockFile.exists = vi.fn().mockResolvedValue([true]);
|
|
227
|
+
newMockFile.download = vi
|
|
228
|
+
.fn()
|
|
229
|
+
.mockResolvedValue([Buffer.from('compressed metadata')]);
|
|
230
|
+
}
|
|
231
|
+
return newMockFile;
|
|
232
|
+
});
|
|
233
|
+
const store = new GCSTaskStore(bucketName);
|
|
234
|
+
const task = await store.load('task1');
|
|
235
|
+
expect(task).toBeDefined();
|
|
236
|
+
expect(mockTar.x).not.toHaveBeenCalled();
|
|
237
|
+
expect(logger.info).toHaveBeenCalledWith(expect.stringContaining('workspace archive not found'));
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
describe('NoOpTaskStore', () => {
|
|
242
|
+
let realStore;
|
|
243
|
+
let noOpStore;
|
|
244
|
+
beforeEach(() => {
|
|
245
|
+
// Create a mock of the real store to delegate to
|
|
246
|
+
realStore = {
|
|
247
|
+
save: vi.fn(),
|
|
248
|
+
load: vi.fn().mockResolvedValue({ id: 'task-123' }),
|
|
249
|
+
};
|
|
250
|
+
noOpStore = new NoOpTaskStore(realStore);
|
|
251
|
+
});
|
|
252
|
+
it("should not call the real store's save method", async () => {
|
|
253
|
+
const mockTask = { id: 'test-task' };
|
|
254
|
+
await noOpStore.save(mockTask);
|
|
255
|
+
expect(realStore.save).not.toHaveBeenCalled();
|
|
256
|
+
});
|
|
257
|
+
it('should delegate the load method to the real store', async () => {
|
|
258
|
+
const taskId = 'task-123';
|
|
259
|
+
const result = await noOpStore.load(taskId);
|
|
260
|
+
expect(realStore.load).toHaveBeenCalledWith(taskId);
|
|
261
|
+
expect(result).toBeDefined();
|
|
262
|
+
expect(result?.id).toBe(taskId);
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
//# sourceMappingURL=gcs.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gcs.test.js","sourceRoot":"","sources":["../../../src/persistence/gcs.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { MCPServerStatus, ToolConfirmationOutcome } from '@google/gemini-cli-core';
|
|
7
|
+
import type { TaskState } from '@a2a-js/sdk';
|
|
8
|
+
export declare enum CoderAgentEvent {
|
|
9
|
+
/**
|
|
10
|
+
* An event requesting one or more tool call confirmations.
|
|
11
|
+
*/
|
|
12
|
+
ToolCallConfirmationEvent = "tool-call-confirmation",
|
|
13
|
+
/**
|
|
14
|
+
* An event updating on the status of one or more tool calls.
|
|
15
|
+
*/
|
|
16
|
+
ToolCallUpdateEvent = "tool-call-update",
|
|
17
|
+
/**
|
|
18
|
+
* An event providing text updates on the task.
|
|
19
|
+
*/
|
|
20
|
+
TextContentEvent = "text-content",
|
|
21
|
+
/**
|
|
22
|
+
* An event that indicates a change in the task's execution state.
|
|
23
|
+
*/
|
|
24
|
+
StateChangeEvent = "state-change",
|
|
25
|
+
/**
|
|
26
|
+
* An user-sent event to initiate the agent.
|
|
27
|
+
*/
|
|
28
|
+
StateAgentSettingsEvent = "agent-settings",
|
|
29
|
+
/**
|
|
30
|
+
* An event that contains a thought from the agent.
|
|
31
|
+
*/
|
|
32
|
+
ThoughtEvent = "thought"
|
|
33
|
+
}
|
|
34
|
+
export interface AgentSettings {
|
|
35
|
+
kind: CoderAgentEvent.StateAgentSettingsEvent;
|
|
36
|
+
workspacePath: string;
|
|
37
|
+
}
|
|
38
|
+
export interface ToolCallConfirmation {
|
|
39
|
+
kind: CoderAgentEvent.ToolCallConfirmationEvent;
|
|
40
|
+
}
|
|
41
|
+
export interface ToolCallUpdate {
|
|
42
|
+
kind: CoderAgentEvent.ToolCallUpdateEvent;
|
|
43
|
+
}
|
|
44
|
+
export interface TextContent {
|
|
45
|
+
kind: CoderAgentEvent.TextContentEvent;
|
|
46
|
+
}
|
|
47
|
+
export interface StateChange {
|
|
48
|
+
kind: CoderAgentEvent.StateChangeEvent;
|
|
49
|
+
}
|
|
50
|
+
export interface Thought {
|
|
51
|
+
kind: CoderAgentEvent.ThoughtEvent;
|
|
52
|
+
}
|
|
53
|
+
export type ThoughtSummary = {
|
|
54
|
+
subject: string;
|
|
55
|
+
description: string;
|
|
56
|
+
};
|
|
57
|
+
export interface ToolConfirmationResponse {
|
|
58
|
+
outcome: ToolConfirmationOutcome;
|
|
59
|
+
callId: string;
|
|
60
|
+
}
|
|
61
|
+
export type CoderAgentMessage = AgentSettings | ToolCallConfirmation | ToolCallUpdate | TextContent | StateChange | Thought;
|
|
62
|
+
export interface TaskMetadata {
|
|
63
|
+
id: string;
|
|
64
|
+
contextId: string;
|
|
65
|
+
taskState: TaskState;
|
|
66
|
+
model: string;
|
|
67
|
+
mcpServers: Array<{
|
|
68
|
+
name: string;
|
|
69
|
+
status: MCPServerStatus;
|
|
70
|
+
tools: Array<{
|
|
71
|
+
name: string;
|
|
72
|
+
description: string;
|
|
73
|
+
parameterSchema: unknown;
|
|
74
|
+
}>;
|
|
75
|
+
}>;
|
|
76
|
+
availableTools: Array<{
|
|
77
|
+
name: string;
|
|
78
|
+
description: string;
|
|
79
|
+
parameterSchema: unknown;
|
|
80
|
+
}>;
|
|
81
|
+
}
|
|
82
|
+
export interface PersistedStateMetadata {
|
|
83
|
+
_agentSettings: AgentSettings;
|
|
84
|
+
_taskState: TaskState;
|
|
85
|
+
}
|
|
86
|
+
export type PersistedTaskMetadata = {
|
|
87
|
+
[k: string]: unknown;
|
|
88
|
+
};
|
|
89
|
+
export declare const METADATA_KEY = "__persistedState";
|
|
90
|
+
export declare function getPersistedState(metadata: PersistedTaskMetadata): PersistedStateMetadata | undefined;
|
|
91
|
+
export declare function setPersistedState(metadata: PersistedTaskMetadata, state: PersistedStateMetadata): PersistedTaskMetadata;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
// Interfaces and enums for the CoderAgent protocol.
|
|
7
|
+
export var CoderAgentEvent;
|
|
8
|
+
(function (CoderAgentEvent) {
|
|
9
|
+
/**
|
|
10
|
+
* An event requesting one or more tool call confirmations.
|
|
11
|
+
*/
|
|
12
|
+
CoderAgentEvent["ToolCallConfirmationEvent"] = "tool-call-confirmation";
|
|
13
|
+
/**
|
|
14
|
+
* An event updating on the status of one or more tool calls.
|
|
15
|
+
*/
|
|
16
|
+
CoderAgentEvent["ToolCallUpdateEvent"] = "tool-call-update";
|
|
17
|
+
/**
|
|
18
|
+
* An event providing text updates on the task.
|
|
19
|
+
*/
|
|
20
|
+
CoderAgentEvent["TextContentEvent"] = "text-content";
|
|
21
|
+
/**
|
|
22
|
+
* An event that indicates a change in the task's execution state.
|
|
23
|
+
*/
|
|
24
|
+
CoderAgentEvent["StateChangeEvent"] = "state-change";
|
|
25
|
+
/**
|
|
26
|
+
* An user-sent event to initiate the agent.
|
|
27
|
+
*/
|
|
28
|
+
CoderAgentEvent["StateAgentSettingsEvent"] = "agent-settings";
|
|
29
|
+
/**
|
|
30
|
+
* An event that contains a thought from the agent.
|
|
31
|
+
*/
|
|
32
|
+
CoderAgentEvent["ThoughtEvent"] = "thought";
|
|
33
|
+
})(CoderAgentEvent || (CoderAgentEvent = {}));
|
|
34
|
+
export const METADATA_KEY = '__persistedState';
|
|
35
|
+
export function getPersistedState(metadata) {
|
|
36
|
+
return metadata?.[METADATA_KEY];
|
|
37
|
+
}
|
|
38
|
+
export function setPersistedState(metadata, state) {
|
|
39
|
+
return {
|
|
40
|
+
...metadata,
|
|
41
|
+
[METADATA_KEY]: state,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,oDAAoD;AAEpD,MAAM,CAAN,IAAY,eAyBX;AAzBD,WAAY,eAAe;IACzB;;OAEG;IACH,uEAAoD,CAAA;IACpD;;OAEG;IACH,2DAAwC,CAAA;IACxC;;OAEG;IACH,oDAAiC,CAAA;IACjC;;OAEG;IACH,oDAAiC,CAAA;IACjC;;OAEG;IACH,6DAA0C,CAAA;IAC1C;;OAEG;IACH,2CAAwB,CAAA;AAC1B,CAAC,EAzBW,eAAe,KAAf,eAAe,QAyB1B;AAyED,MAAM,CAAC,MAAM,YAAY,GAAG,kBAAkB,CAAC;AAE/C,MAAM,UAAU,iBAAiB,CAC/B,QAA+B;IAE/B,OAAO,QAAQ,EAAE,CAAC,YAAY,CAAuC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAA+B,EAC/B,KAA6B;IAE7B,OAAO;QACL,GAAG,QAAQ;QACX,CAAC,YAAY,CAAC,EAAE,KAAK;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { ExecutionEventBus } from '@a2a-js/sdk/server';
|
|
7
|
+
export declare function pushTaskStateFailed(error: unknown, eventBus: ExecutionEventBus, taskId: string, contextId: string): Promise<void>;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
7
|
+
import { CoderAgentEvent } from '../types.js';
|
|
8
|
+
export async function pushTaskStateFailed(error, eventBus, taskId, contextId) {
|
|
9
|
+
const errorMessage = error instanceof Error ? error.message : 'Agent execution error';
|
|
10
|
+
const stateChange = {
|
|
11
|
+
kind: CoderAgentEvent.StateChangeEvent,
|
|
12
|
+
};
|
|
13
|
+
eventBus.publish({
|
|
14
|
+
kind: 'status-update',
|
|
15
|
+
taskId,
|
|
16
|
+
contextId,
|
|
17
|
+
status: {
|
|
18
|
+
state: 'failed',
|
|
19
|
+
message: {
|
|
20
|
+
kind: 'message',
|
|
21
|
+
role: 'agent',
|
|
22
|
+
parts: [
|
|
23
|
+
{
|
|
24
|
+
kind: 'text',
|
|
25
|
+
text: errorMessage,
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
messageId: uuidv4(),
|
|
29
|
+
taskId,
|
|
30
|
+
contextId,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
final: true,
|
|
34
|
+
metadata: {
|
|
35
|
+
coderAgent: stateChange,
|
|
36
|
+
model: 'unknown',
|
|
37
|
+
error: errorMessage,
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=executor_utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor_utils.js","sourceRoot":"","sources":["../../../src/utils/executor_utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,KAAc,EACd,QAA2B,EAC3B,MAAc,EACd,SAAiB;IAEjB,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC;IACnE,MAAM,WAAW,GAAgB;QAC/B,IAAI,EAAE,eAAe,CAAC,gBAAgB;KACvC,CAAC;IACF,QAAQ,CAAC,OAAO,CAAC;QACf,IAAI,EAAE,eAAe;QACrB,MAAM;QACN,SAAS;QACT,MAAM,EAAE;YACN,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE;gBACP,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,YAAY;qBACnB;iBACF;gBACD,SAAS,EAAE,MAAM,EAAE;gBACnB,MAAM;gBACN,SAAS;aACC;SACb;QACD,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE;YACR,UAAU,EAAE,WAAW;YACvB,KAAK,EAAE,SAAS;YAChB,KAAK,EAAE,YAAY;SACpB;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import winston from 'winston';
|
|
7
|
+
const logger = winston.createLogger({
|
|
8
|
+
level: 'info',
|
|
9
|
+
format: winston.format.combine(
|
|
10
|
+
// First, add a timestamp to the log info object
|
|
11
|
+
winston.format.timestamp({
|
|
12
|
+
format: 'YYYY-MM-DD HH:mm:ss.SSS A', // Custom timestamp format
|
|
13
|
+
}),
|
|
14
|
+
// Here we define the custom output format
|
|
15
|
+
winston.format.printf((info) => {
|
|
16
|
+
const { level, timestamp, message, ...rest } = info;
|
|
17
|
+
return (`[${level.toUpperCase()}] ${timestamp} -- ${message}` +
|
|
18
|
+
`${Object.keys(rest).length > 0 ? `\n${JSON.stringify(rest, null, 2)}` : ''}`); // Only print ...rest if present
|
|
19
|
+
})),
|
|
20
|
+
transports: [new winston.transports.Console()],
|
|
21
|
+
});
|
|
22
|
+
export { logger };
|
|
23
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAClC,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;IAC5B,gDAAgD;IAChD,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;QACvB,MAAM,EAAE,2BAA2B,EAAE,0BAA0B;KAChE,CAAC;IACF,0CAA0C;IAC1C,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7B,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;QACpD,OAAO,CACL,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,SAAS,OAAO,OAAO,EAAE;YACrD,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAC9E,CAAC,CAAC,gCAAgC;IACrC,CAAC,CAAC,CACH;IACD,UAAU,EAAE,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;CAC/C,CAAC,CAAC;AAEH,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { SendStreamingMessageSuccessResponse } from '@a2a-js/sdk';
|
|
7
|
+
import type { Config } from '@google/gemini-cli-core';
|
|
8
|
+
export declare function createMockConfig(overrides?: Partial<Config>): Partial<Config>;
|
|
9
|
+
export declare function createStreamMessageRequest(text: string, messageId: string, taskId?: string): {
|
|
10
|
+
jsonrpc: string;
|
|
11
|
+
id: string;
|
|
12
|
+
method: string;
|
|
13
|
+
params: {
|
|
14
|
+
message: {
|
|
15
|
+
kind: string;
|
|
16
|
+
role: string;
|
|
17
|
+
parts: [{
|
|
18
|
+
kind: string;
|
|
19
|
+
text: string;
|
|
20
|
+
}];
|
|
21
|
+
messageId: string;
|
|
22
|
+
};
|
|
23
|
+
metadata: {
|
|
24
|
+
coderAgent: {
|
|
25
|
+
kind: string;
|
|
26
|
+
workspacePath: string;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
taskId?: string;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
export declare function assertUniqueFinalEventIsLast(events: SendStreamingMessageSuccessResponse[]): void;
|
|
33
|
+
export declare function assertTaskCreationAndWorkingStatus(events: SendStreamingMessageSuccessResponse[]): void;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { ApprovalMode, DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES, DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD, GeminiClient, } from '@google/gemini-cli-core';
|
|
7
|
+
import { expect, vi } from 'vitest';
|
|
8
|
+
export function createMockConfig(overrides = {}) {
|
|
9
|
+
const mockConfig = {
|
|
10
|
+
getToolRegistry: vi.fn().mockReturnValue({
|
|
11
|
+
getTool: vi.fn(),
|
|
12
|
+
getAllToolNames: vi.fn().mockReturnValue([]),
|
|
13
|
+
}),
|
|
14
|
+
getApprovalMode: vi.fn().mockReturnValue(ApprovalMode.DEFAULT),
|
|
15
|
+
getIdeMode: vi.fn().mockReturnValue(false),
|
|
16
|
+
getAllowedTools: vi.fn().mockReturnValue([]),
|
|
17
|
+
getWorkspaceContext: vi.fn().mockReturnValue({
|
|
18
|
+
isPathWithinWorkspace: () => true,
|
|
19
|
+
}),
|
|
20
|
+
getTargetDir: () => '/test',
|
|
21
|
+
storage: {
|
|
22
|
+
getProjectTempDir: () => '/tmp',
|
|
23
|
+
},
|
|
24
|
+
getTruncateToolOutputThreshold: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
|
|
25
|
+
getTruncateToolOutputLines: () => DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
|
|
26
|
+
getDebugMode: vi.fn().mockReturnValue(false),
|
|
27
|
+
getContentGeneratorConfig: vi.fn().mockReturnValue({ model: 'gemini-pro' }),
|
|
28
|
+
getModel: vi.fn().mockReturnValue('gemini-pro'),
|
|
29
|
+
getUsageStatisticsEnabled: vi.fn().mockReturnValue(false),
|
|
30
|
+
setFallbackModelHandler: vi.fn(),
|
|
31
|
+
initialize: vi.fn().mockResolvedValue(undefined),
|
|
32
|
+
getProxy: vi.fn().mockReturnValue(undefined),
|
|
33
|
+
getHistory: vi.fn().mockReturnValue([]),
|
|
34
|
+
getEmbeddingModel: vi.fn().mockReturnValue('text-embedding-004'),
|
|
35
|
+
getSessionId: vi.fn().mockReturnValue('test-session-id'),
|
|
36
|
+
getUserTier: vi.fn(),
|
|
37
|
+
...overrides,
|
|
38
|
+
};
|
|
39
|
+
mockConfig.getGeminiClient = vi
|
|
40
|
+
.fn()
|
|
41
|
+
.mockReturnValue(new GeminiClient(mockConfig));
|
|
42
|
+
return mockConfig;
|
|
43
|
+
}
|
|
44
|
+
export function createStreamMessageRequest(text, messageId, taskId) {
|
|
45
|
+
const request = {
|
|
46
|
+
jsonrpc: '2.0',
|
|
47
|
+
id: '1',
|
|
48
|
+
method: 'message/stream',
|
|
49
|
+
params: {
|
|
50
|
+
message: {
|
|
51
|
+
kind: 'message',
|
|
52
|
+
role: 'user',
|
|
53
|
+
parts: [{ kind: 'text', text }],
|
|
54
|
+
messageId,
|
|
55
|
+
},
|
|
56
|
+
metadata: {
|
|
57
|
+
coderAgent: {
|
|
58
|
+
kind: 'agent-settings',
|
|
59
|
+
workspacePath: '/tmp',
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
if (taskId) {
|
|
65
|
+
request.params.taskId = taskId;
|
|
66
|
+
}
|
|
67
|
+
return request;
|
|
68
|
+
}
|
|
69
|
+
export function assertUniqueFinalEventIsLast(events) {
|
|
70
|
+
// Final event is input-required & final
|
|
71
|
+
const finalEvent = events[events.length - 1].result;
|
|
72
|
+
expect(finalEvent.metadata?.['coderAgent']).toMatchObject({
|
|
73
|
+
kind: 'state-change',
|
|
74
|
+
});
|
|
75
|
+
expect(finalEvent.status?.state).toBe('input-required');
|
|
76
|
+
expect(finalEvent.final).toBe(true);
|
|
77
|
+
// There is only one event with final and its the last
|
|
78
|
+
expect(events.filter((e) => e.result.final).length).toBe(1);
|
|
79
|
+
expect(events.findIndex((e) => e.result.final)).toBe(events.length - 1);
|
|
80
|
+
}
|
|
81
|
+
export function assertTaskCreationAndWorkingStatus(events) {
|
|
82
|
+
// Initial task creation event
|
|
83
|
+
const taskEvent = events[0].result;
|
|
84
|
+
expect(taskEvent.kind).toBe('task');
|
|
85
|
+
expect(taskEvent.status.state).toBe('submitted');
|
|
86
|
+
// Status update: working
|
|
87
|
+
const workingEvent = events[1].result;
|
|
88
|
+
expect(workingEvent.kind).toBe('status-update');
|
|
89
|
+
expect(workingEvent.status.state).toBe('working');
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=testing_utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing_utils.js","sourceRoot":"","sources":["../../../src/utils/testing_utils.ts"],"names":[],"mappings":"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"}
|