@google/gemini-cli-a2a-server 0.22.0 → 0.22.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@google/gemini-cli-a2a-server",
3
- "version": "0.22.0",
3
+ "version": "0.22.1",
4
4
  "description": "Gemini CLI A2A Server",
5
5
  "repository": {
6
6
  "type": "git",
@@ -27,8 +27,8 @@
27
27
  "dependencies": {
28
28
  "@a2a-js/sdk": "^0.3.2",
29
29
  "@google-cloud/storage": "^7.16.0",
30
- "@google/gemini-cli-core": "0.22.0",
31
- "express": "^5.1.0",
30
+ "@google/gemini-cli-core": "0.22.1",
31
+ "express": "^5.2.0",
32
32
  "fs-extra": "^11.3.0",
33
33
  "tar": "^7.5.2",
34
34
  "uuid": "^11.1.0",
@@ -1,15 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import type { Command, CommandContext, CommandExecutionResponse } from './types.js';
7
- export declare class InitCommand implements Command {
8
- name: string;
9
- description: string;
10
- requiresWorkspace: boolean;
11
- streaming: boolean;
12
- private handleMessageResult;
13
- private handleSubmitPromptResult;
14
- execute(context: CommandContext, _args?: string[]): Promise<CommandExecutionResponse>;
15
- }
@@ -1,110 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import * as fs from 'node:fs';
7
- import * as path from 'node:path';
8
- import { CoderAgentEvent } from '../types.js';
9
- import { performInit } from '@google/gemini-cli-core';
10
- import { v4 as uuidv4 } from 'uuid';
11
- import { logger } from '../utils/logger.js';
12
- export class InitCommand {
13
- name = 'init';
14
- description = 'Analyzes the project and creates a tailored GEMINI.md file';
15
- requiresWorkspace = true;
16
- streaming = true;
17
- handleMessageResult(result, context, eventBus, taskId, contextId) {
18
- const statusState = result.messageType === 'error' ? 'failed' : 'completed';
19
- const eventType = result.messageType === 'error'
20
- ? CoderAgentEvent.StateChangeEvent
21
- : CoderAgentEvent.TextContentEvent;
22
- const event = {
23
- kind: 'status-update',
24
- taskId,
25
- contextId,
26
- status: {
27
- state: statusState,
28
- message: {
29
- kind: 'message',
30
- role: 'agent',
31
- parts: [{ kind: 'text', text: result.content }],
32
- messageId: uuidv4(),
33
- taskId,
34
- contextId,
35
- },
36
- timestamp: new Date().toISOString(),
37
- },
38
- final: true,
39
- metadata: {
40
- coderAgent: { kind: eventType },
41
- model: context.config.getModel(),
42
- },
43
- };
44
- logger.info('[EventBus event]: ', event);
45
- eventBus.publish(event);
46
- return {
47
- name: this.name,
48
- data: result,
49
- };
50
- }
51
- async handleSubmitPromptResult(result, context, geminiMdPath, eventBus, taskId, contextId) {
52
- fs.writeFileSync(geminiMdPath, '', 'utf8');
53
- if (!context.agentExecutor) {
54
- throw new Error('Agent executor not found in context.');
55
- }
56
- const agentExecutor = context.agentExecutor;
57
- const agentSettings = {
58
- kind: CoderAgentEvent.StateAgentSettingsEvent,
59
- workspacePath: process.env['CODER_AGENT_WORKSPACE_PATH'],
60
- autoExecute: true,
61
- };
62
- if (typeof result.content !== 'string') {
63
- throw new Error('Init command content must be a string.');
64
- }
65
- const promptText = result.content;
66
- const requestContext = {
67
- userMessage: {
68
- kind: 'message',
69
- role: 'user',
70
- parts: [{ kind: 'text', text: promptText }],
71
- messageId: uuidv4(),
72
- taskId,
73
- contextId,
74
- metadata: {
75
- coderAgent: agentSettings,
76
- },
77
- },
78
- taskId,
79
- contextId,
80
- };
81
- // The executor will handle the entire agentic loop, including
82
- // creating the task, streaming responses, and handling tools.
83
- await agentExecutor.execute(requestContext, eventBus);
84
- return {
85
- name: this.name,
86
- data: geminiMdPath,
87
- };
88
- }
89
- async execute(context, _args = []) {
90
- if (!context.eventBus) {
91
- return {
92
- name: this.name,
93
- data: 'Use executeStream to get streaming results.',
94
- };
95
- }
96
- const geminiMdPath = path.join(process.env['CODER_AGENT_WORKSPACE_PATH'], 'GEMINI.md');
97
- const result = performInit(fs.existsSync(geminiMdPath));
98
- const taskId = uuidv4();
99
- const contextId = uuidv4();
100
- switch (result.type) {
101
- case 'message':
102
- return this.handleMessageResult(result, context, context.eventBus, taskId, contextId);
103
- case 'submit_prompt':
104
- return this.handleSubmitPromptResult(result, context, geminiMdPath, context.eventBus, taskId, contextId);
105
- default:
106
- throw new Error('Unknown result type from performInit');
107
- }
108
- }
109
- }
110
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- export {};
@@ -1,145 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright 2025 Google LLC
4
- * SPDX-License-Identifier: Apache-2.0
5
- */
6
- import { describe, it, expect, vi, beforeEach } from 'vitest';
7
- import { InitCommand } from './init.js';
8
- import { performInit } from '@google/gemini-cli-core';
9
- import * as fs from 'node:fs';
10
- import * as path from 'node:path';
11
- import { CoderAgentExecutor } from '../agent/executor.js';
12
- import { CoderAgentEvent } from '../types.js';
13
- import { createMockConfig } from '../utils/testing_utils.js';
14
- import { logger } from '../utils/logger.js';
15
- vi.mock('@google/gemini-cli-core', async (importOriginal) => {
16
- const actual = await importOriginal();
17
- return {
18
- ...actual,
19
- performInit: vi.fn(),
20
- };
21
- });
22
- vi.mock('node:fs', () => ({
23
- existsSync: vi.fn(),
24
- writeFileSync: vi.fn(),
25
- }));
26
- vi.mock('../agent/executor.js', () => ({
27
- CoderAgentExecutor: vi.fn().mockImplementation(() => ({
28
- execute: vi.fn(),
29
- })),
30
- }));
31
- vi.mock('../utils/logger.js', () => ({
32
- logger: {
33
- info: vi.fn(),
34
- error: vi.fn(),
35
- },
36
- }));
37
- describe('InitCommand', () => {
38
- let eventBus;
39
- let command;
40
- let context;
41
- let publishSpy;
42
- let mockExecute;
43
- const mockWorkspacePath = path.resolve('/tmp');
44
- beforeEach(() => {
45
- process.env['CODER_AGENT_WORKSPACE_PATH'] = mockWorkspacePath;
46
- eventBus = {
47
- publish: vi.fn(),
48
- };
49
- command = new InitCommand();
50
- const mockConfig = createMockConfig({
51
- getModel: () => 'gemini-pro',
52
- });
53
- const mockExecutorInstance = new CoderAgentExecutor();
54
- context = {
55
- config: mockConfig,
56
- agentExecutor: mockExecutorInstance,
57
- eventBus,
58
- };
59
- publishSpy = vi.spyOn(eventBus, 'publish');
60
- mockExecute = vi.fn();
61
- vi.spyOn(mockExecutorInstance, 'execute').mockImplementation(mockExecute);
62
- vi.clearAllMocks();
63
- });
64
- it('has requiresWorkspace set to true', () => {
65
- expect(command.requiresWorkspace).toBe(true);
66
- });
67
- describe('execute', () => {
68
- it('handles info from performInit', async () => {
69
- vi.mocked(performInit).mockReturnValue({
70
- type: 'message',
71
- messageType: 'info',
72
- content: 'GEMINI.md already exists.',
73
- });
74
- await command.execute(context, []);
75
- expect(logger.info).toHaveBeenCalledWith('[EventBus event]: ', expect.objectContaining({
76
- kind: 'status-update',
77
- status: expect.objectContaining({
78
- state: 'completed',
79
- message: expect.objectContaining({
80
- parts: [{ kind: 'text', text: 'GEMINI.md already exists.' }],
81
- }),
82
- }),
83
- }));
84
- expect(publishSpy).toHaveBeenCalledWith(expect.objectContaining({
85
- kind: 'status-update',
86
- status: expect.objectContaining({
87
- state: 'completed',
88
- message: expect.objectContaining({
89
- parts: [{ kind: 'text', text: 'GEMINI.md already exists.' }],
90
- }),
91
- }),
92
- }));
93
- });
94
- it('handles error from performInit', async () => {
95
- vi.mocked(performInit).mockReturnValue({
96
- type: 'message',
97
- messageType: 'error',
98
- content: 'An error occurred.',
99
- });
100
- await command.execute(context, []);
101
- expect(publishSpy).toHaveBeenCalledWith(expect.objectContaining({
102
- kind: 'status-update',
103
- status: expect.objectContaining({
104
- state: 'failed',
105
- message: expect.objectContaining({
106
- parts: [{ kind: 'text', text: 'An error occurred.' }],
107
- }),
108
- }),
109
- }));
110
- });
111
- describe('when handling submit_prompt', () => {
112
- beforeEach(() => {
113
- vi.mocked(performInit).mockReturnValue({
114
- type: 'submit_prompt',
115
- content: 'Create a new GEMINI.md file.',
116
- });
117
- });
118
- it('writes the file and executes the agent', async () => {
119
- await command.execute(context, []);
120
- expect(fs.writeFileSync).toHaveBeenCalledWith(path.join(mockWorkspacePath, 'GEMINI.md'), '', 'utf8');
121
- expect(mockExecute).toHaveBeenCalled();
122
- });
123
- it('passes autoExecute to the agent executor', async () => {
124
- await command.execute(context, []);
125
- expect(mockExecute).toHaveBeenCalledWith(expect.objectContaining({
126
- userMessage: expect.objectContaining({
127
- parts: expect.arrayContaining([
128
- expect.objectContaining({
129
- text: 'Create a new GEMINI.md file.',
130
- }),
131
- ]),
132
- metadata: {
133
- coderAgent: {
134
- kind: CoderAgentEvent.StateAgentSettingsEvent,
135
- workspacePath: mockWorkspacePath,
136
- autoExecute: true,
137
- },
138
- },
139
- }),
140
- }), eventBus);
141
- });
142
- });
143
- });
144
- });
145
- //# sourceMappingURL=init.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.test.js","sourceRoot":"","sources":["../../../src/commands/init.test.ts"],"names":[],"mappings":"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"}