@google/gemini-cli-core 0.13.0-preview.3 → 0.14.0-preview.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.
- package/dist/src/agents/executor.d.ts +3 -0
- package/dist/src/agents/executor.js +21 -0
- package/dist/src/agents/executor.js.map +1 -1
- package/dist/src/agents/executor.test.js +177 -2
- package/dist/src/agents/executor.test.js.map +1 -1
- package/dist/src/config/config.d.ts +4 -0
- package/dist/src/config/config.js +20 -4
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +88 -0
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/defaultModelConfigs.d.ts +7 -0
- package/dist/src/config/defaultModelConfigs.js +127 -0
- package/dist/src/config/defaultModelConfigs.js.map +1 -0
- package/dist/src/confirmation-bus/message-bus.js +1 -1
- package/dist/src/confirmation-bus/message-bus.js.map +1 -1
- package/dist/src/confirmation-bus/types.d.ts +1 -0
- package/dist/src/core/prompts.js +0 -2
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/fallback/handler.js +1 -3
- package/dist/src/fallback/handler.js.map +1 -1
- package/dist/src/fallback/handler.test.js +4 -12
- package/dist/src/fallback/handler.test.js.map +1 -1
- package/dist/src/fallback/types.d.ts +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/policy/config.test.js +17 -0
- package/dist/src/policy/config.test.js.map +1 -1
- package/dist/src/policy/policies/discovered.toml +8 -0
- package/dist/src/policy/policy-engine.d.ts +1 -1
- package/dist/src/policy/policy-engine.js +11 -3
- package/dist/src/policy/policy-engine.js.map +1 -1
- package/dist/src/policy/policy-engine.test.js +98 -50
- package/dist/src/policy/policy-engine.test.js.map +1 -1
- package/dist/src/policy/toml-loader.test.js +220 -336
- package/dist/src/policy/toml-loader.test.js.map +1 -1
- package/dist/src/services/modelConfig.golden.test.d.ts +6 -0
- package/dist/src/services/modelConfig.golden.test.js +42 -0
- package/dist/src/services/modelConfig.golden.test.js.map +1 -0
- package/dist/src/services/modelConfig.integration.test.d.ts +6 -0
- package/dist/src/services/modelConfig.integration.test.js +213 -0
- package/dist/src/services/modelConfig.integration.test.js.map +1 -0
- package/dist/src/services/modelConfigService.d.ts +46 -0
- package/dist/src/services/modelConfigService.js +146 -0
- package/dist/src/services/modelConfigService.js.map +1 -0
- package/dist/src/services/modelConfigService.test.d.ts +6 -0
- package/dist/src/services/modelConfigService.test.js +509 -0
- package/dist/src/services/modelConfigService.test.js.map +1 -0
- package/dist/src/services/test-data/resolved-aliases.golden.json +123 -0
- package/dist/src/tools/base-tool-invocation.test.d.ts +6 -0
- package/dist/src/tools/base-tool-invocation.test.js +85 -0
- package/dist/src/tools/base-tool-invocation.test.js.map +1 -0
- package/dist/src/tools/edit.d.ts +1 -1
- package/dist/src/tools/edit.js +31 -33
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +30 -20
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/glob.d.ts +1 -1
- package/dist/src/tools/glob.js +7 -7
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +20 -17
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +1 -1
- package/dist/src/tools/grep.js +9 -9
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +15 -12
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/ls.d.ts +1 -1
- package/dist/src/tools/ls.js +14 -15
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.js +32 -33
- package/dist/src/tools/ls.test.js.map +1 -1
- package/dist/src/tools/mcp-client.js +2 -0
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +5 -0
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.js +1 -1
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/read-file.d.ts +2 -2
- package/dist/src/tools/read-file.js +20 -24
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +62 -51
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +2 -9
- package/dist/src/tools/read-many-files.js +10 -21
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +35 -35
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/ripGrep.d.ts +1 -1
- package/dist/src/tools/ripGrep.js +8 -8
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/tools/ripGrep.test.js +23 -14
- package/dist/src/tools/ripGrep.test.js.map +1 -1
- package/dist/src/tools/shell.d.ts +1 -1
- package/dist/src/tools/shell.js +16 -14
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +64 -34
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/smart-edit.d.ts +1 -1
- package/dist/src/tools/smart-edit.js +8 -11
- package/dist/src/tools/smart-edit.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +12 -2
- package/dist/src/tools/tool-registry.js +49 -14
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +70 -4
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +2 -1
- package/dist/src/tools/tools.js +4 -1
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/write-file.js +31 -31
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +23 -5
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/utils/extensionLoader.js +7 -3
- package/dist/src/utils/extensionLoader.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +75 -60
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/pathReader.js +4 -4
- package/dist/src/utils/pathReader.js.map +1 -1
- package/dist/src/utils/pathReader.test.js +44 -1
- package/dist/src/utils/pathReader.test.js.map +1 -1
- package/dist/src/utils/paths.d.ts +1 -1
- package/dist/src/utils/paths.js +5 -3
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/workspaceContext.d.ts +4 -3
- package/dist/src/utils/workspaceContext.js +10 -11
- package/dist/src/utils/workspaceContext.js.map +1 -1
- package/dist/src/utils/workspaceContext.test.js +1 -1
- package/dist/src/utils/workspaceContext.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/google-gemini-cli-core-0.13.0-preview.2.tgz +0 -0
|
@@ -0,0 +1,85 @@
|
|
|
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 { BaseToolInvocation } from './tools.js';
|
|
8
|
+
import { MessageBusType, } from '../confirmation-bus/types.js';
|
|
9
|
+
class TestBaseToolInvocation extends BaseToolInvocation {
|
|
10
|
+
getDescription() {
|
|
11
|
+
return 'test description';
|
|
12
|
+
}
|
|
13
|
+
async execute() {
|
|
14
|
+
return { llmContent: [], returnDisplay: '' };
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
describe('BaseToolInvocation', () => {
|
|
18
|
+
let messageBus;
|
|
19
|
+
let abortController;
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
messageBus = {
|
|
22
|
+
publish: vi.fn(),
|
|
23
|
+
subscribe: vi.fn(),
|
|
24
|
+
unsubscribe: vi.fn(),
|
|
25
|
+
};
|
|
26
|
+
abortController = new AbortController();
|
|
27
|
+
});
|
|
28
|
+
it('should propagate serverName to ToolConfirmationRequest', async () => {
|
|
29
|
+
const serverName = 'test-server';
|
|
30
|
+
const tool = new TestBaseToolInvocation({}, messageBus, 'test-tool', 'Test Tool', serverName);
|
|
31
|
+
let capturedRequest;
|
|
32
|
+
vi.mocked(messageBus.publish).mockImplementation((request) => {
|
|
33
|
+
if (request.type === MessageBusType.TOOL_CONFIRMATION_REQUEST) {
|
|
34
|
+
capturedRequest = request;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
let responseHandler;
|
|
38
|
+
vi.mocked(messageBus.subscribe).mockImplementation((type, handler) => {
|
|
39
|
+
if (type === MessageBusType.TOOL_CONFIRMATION_RESPONSE) {
|
|
40
|
+
responseHandler = handler;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
const confirmationPromise = tool.shouldConfirmExecute(abortController.signal);
|
|
44
|
+
// Wait for microtasks to ensure publish is called
|
|
45
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
46
|
+
expect(messageBus.publish).toHaveBeenCalledTimes(1);
|
|
47
|
+
expect(capturedRequest).toBeDefined();
|
|
48
|
+
expect(capturedRequest?.type).toBe(MessageBusType.TOOL_CONFIRMATION_REQUEST);
|
|
49
|
+
expect(capturedRequest?.serverName).toBe(serverName);
|
|
50
|
+
// Simulate response to finish the promise cleanly
|
|
51
|
+
if (responseHandler && capturedRequest) {
|
|
52
|
+
responseHandler({
|
|
53
|
+
type: MessageBusType.TOOL_CONFIRMATION_RESPONSE,
|
|
54
|
+
correlationId: capturedRequest.correlationId,
|
|
55
|
+
confirmed: true,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
await confirmationPromise;
|
|
59
|
+
});
|
|
60
|
+
it('should NOT propagate serverName if not provided', async () => {
|
|
61
|
+
const tool = new TestBaseToolInvocation({}, messageBus, 'test-tool', 'Test Tool');
|
|
62
|
+
let capturedRequest;
|
|
63
|
+
vi.mocked(messageBus.publish).mockImplementation((request) => {
|
|
64
|
+
if (request.type === MessageBusType.TOOL_CONFIRMATION_REQUEST) {
|
|
65
|
+
capturedRequest = request;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
// We need to mock subscribe to avoid hanging if we want to await the promise,
|
|
69
|
+
// but for this test we just need to check publish.
|
|
70
|
+
// We'll abort to clean up.
|
|
71
|
+
const confirmationPromise = tool.shouldConfirmExecute(abortController.signal);
|
|
72
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
73
|
+
expect(messageBus.publish).toHaveBeenCalledTimes(1);
|
|
74
|
+
expect(capturedRequest).toBeDefined();
|
|
75
|
+
expect(capturedRequest?.serverName).toBeUndefined();
|
|
76
|
+
abortController.abort();
|
|
77
|
+
try {
|
|
78
|
+
await confirmationPromise;
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// ignore abort error
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=base-tool-invocation.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-tool-invocation.test.js","sourceRoot":"","sources":["../../../src/tools/base-tool-invocation.test.ts"],"names":[],"mappings":"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"}
|
package/dist/src/tools/edit.d.ts
CHANGED
package/dist/src/tools/edit.js
CHANGED
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
import * as fs from 'node:fs';
|
|
7
7
|
import * as path from 'node:path';
|
|
8
8
|
import * as Diff from 'diff';
|
|
9
|
-
import process from 'node:process';
|
|
10
9
|
import { BaseDeclarativeTool, BaseToolInvocation, Kind, ToolConfirmationOutcome, } from './tools.js';
|
|
11
10
|
import { ToolErrorType } from './tool-error.js';
|
|
12
11
|
import { makeRelative, shortenPath } from '../utils/paths.js';
|
|
@@ -40,12 +39,14 @@ export function applyReplacement(currentContent, oldString, newString, isNewFile
|
|
|
40
39
|
}
|
|
41
40
|
class EditToolInvocation extends BaseToolInvocation {
|
|
42
41
|
config;
|
|
42
|
+
resolvedPath;
|
|
43
43
|
constructor(config, params, messageBus, toolName, displayName) {
|
|
44
44
|
super(params, messageBus, toolName, displayName);
|
|
45
45
|
this.config = config;
|
|
46
|
+
this.resolvedPath = path.resolve(this.config.getTargetDir(), this.params.file_path);
|
|
46
47
|
}
|
|
47
48
|
toolLocations() {
|
|
48
|
-
return [{ path: this.
|
|
49
|
+
return [{ path: this.resolvedPath }];
|
|
49
50
|
}
|
|
50
51
|
/**
|
|
51
52
|
* Calculates the potential outcome of an edit operation.
|
|
@@ -65,7 +66,7 @@ class EditToolInvocation extends BaseToolInvocation {
|
|
|
65
66
|
try {
|
|
66
67
|
currentContent = await this.config
|
|
67
68
|
.getFileSystemService()
|
|
68
|
-
.readTextFile(
|
|
69
|
+
.readTextFile(this.resolvedPath);
|
|
69
70
|
// Normalize line endings to LF for consistent processing.
|
|
70
71
|
currentContent = currentContent.replace(/\r\n/g, '\n');
|
|
71
72
|
fileExists = true;
|
|
@@ -85,13 +86,13 @@ class EditToolInvocation extends BaseToolInvocation {
|
|
|
85
86
|
// Trying to edit a nonexistent file (and old_string is not empty)
|
|
86
87
|
error = {
|
|
87
88
|
display: `File not found. Cannot apply edit. Use an empty old_string to create a new file.`,
|
|
88
|
-
raw: `File not found: ${
|
|
89
|
+
raw: `File not found: ${this.resolvedPath}`,
|
|
89
90
|
type: ToolErrorType.FILE_NOT_FOUND,
|
|
90
91
|
};
|
|
91
92
|
}
|
|
92
93
|
else if (currentContent !== null) {
|
|
93
94
|
// Editing an existing file
|
|
94
|
-
const correctedEdit = await ensureCorrectEdit(
|
|
95
|
+
const correctedEdit = await ensureCorrectEdit(this.resolvedPath, currentContent, params, this.config.getGeminiClient(), this.config.getBaseLlmClient(), abortSignal);
|
|
95
96
|
finalOldString = correctedEdit.params.old_string;
|
|
96
97
|
finalNewString = correctedEdit.params.new_string;
|
|
97
98
|
occurrences = correctedEdit.occurrences;
|
|
@@ -99,14 +100,14 @@ class EditToolInvocation extends BaseToolInvocation {
|
|
|
99
100
|
// Error: Trying to create a file that already exists
|
|
100
101
|
error = {
|
|
101
102
|
display: `Failed to edit. Attempted to create a file that already exists.`,
|
|
102
|
-
raw: `File already exists, cannot create: ${
|
|
103
|
+
raw: `File already exists, cannot create: ${this.resolvedPath}`,
|
|
103
104
|
type: ToolErrorType.ATTEMPT_TO_CREATE_EXISTING_FILE,
|
|
104
105
|
};
|
|
105
106
|
}
|
|
106
107
|
else if (occurrences === 0) {
|
|
107
108
|
error = {
|
|
108
109
|
display: `Failed to edit, could not find the string to replace.`,
|
|
109
|
-
raw: `Failed to edit, 0 occurrences found for old_string in ${
|
|
110
|
+
raw: `Failed to edit, 0 occurrences found for old_string in ${this.resolvedPath}. No edits made. The exact text in old_string was not found. Ensure you're not escaping content incorrectly and check whitespace, indentation, and context. Use ${READ_FILE_TOOL_NAME} tool to verify.`,
|
|
110
111
|
type: ToolErrorType.EDIT_NO_OCCURRENCE_FOUND,
|
|
111
112
|
};
|
|
112
113
|
}
|
|
@@ -114,14 +115,14 @@ class EditToolInvocation extends BaseToolInvocation {
|
|
|
114
115
|
const occurrenceTerm = expectedReplacements === 1 ? 'occurrence' : 'occurrences';
|
|
115
116
|
error = {
|
|
116
117
|
display: `Failed to edit, expected ${expectedReplacements} ${occurrenceTerm} but found ${occurrences}.`,
|
|
117
|
-
raw: `Failed to edit, Expected ${expectedReplacements} ${occurrenceTerm} but found ${occurrences} for old_string in file: ${
|
|
118
|
+
raw: `Failed to edit, Expected ${expectedReplacements} ${occurrenceTerm} but found ${occurrences} for old_string in file: ${this.resolvedPath}`,
|
|
118
119
|
type: ToolErrorType.EDIT_EXPECTED_OCCURRENCE_MISMATCH,
|
|
119
120
|
};
|
|
120
121
|
}
|
|
121
122
|
else if (finalOldString === finalNewString) {
|
|
122
123
|
error = {
|
|
123
124
|
display: `No changes to apply. The old_string and new_string are identical.`,
|
|
124
|
-
raw: `No changes to apply. The old_string and new_string are identical in file: ${
|
|
125
|
+
raw: `No changes to apply. The old_string and new_string are identical in file: ${this.resolvedPath}`,
|
|
125
126
|
type: ToolErrorType.EDIT_NO_CHANGE,
|
|
126
127
|
};
|
|
127
128
|
}
|
|
@@ -130,7 +131,7 @@ class EditToolInvocation extends BaseToolInvocation {
|
|
|
130
131
|
// Should not happen if fileExists and no exception was thrown, but defensively:
|
|
131
132
|
error = {
|
|
132
133
|
display: `Failed to read content of file.`,
|
|
133
|
-
raw: `Failed to read content of existing file: ${
|
|
134
|
+
raw: `Failed to read content of existing file: ${this.resolvedPath}`,
|
|
134
135
|
type: ToolErrorType.READ_CONTENT_FAILURE,
|
|
135
136
|
};
|
|
136
137
|
}
|
|
@@ -140,7 +141,7 @@ class EditToolInvocation extends BaseToolInvocation {
|
|
|
140
141
|
if (!error && fileExists && currentContent === newContent) {
|
|
141
142
|
error = {
|
|
142
143
|
display: 'No changes to apply. The new content is identical to the current content.',
|
|
143
|
-
raw: `No changes to apply. The new content is identical to the current content in file: ${
|
|
144
|
+
raw: `No changes to apply. The new content is identical to the current content in file: ${this.resolvedPath}`,
|
|
144
145
|
type: ToolErrorType.EDIT_NO_CHANGE,
|
|
145
146
|
};
|
|
146
147
|
}
|
|
@@ -176,17 +177,17 @@ class EditToolInvocation extends BaseToolInvocation {
|
|
|
176
177
|
debugLogger.log(`Error: ${editData.error.display}`);
|
|
177
178
|
return false;
|
|
178
179
|
}
|
|
179
|
-
const fileName = path.basename(this.
|
|
180
|
+
const fileName = path.basename(this.resolvedPath);
|
|
180
181
|
const fileDiff = Diff.createPatch(fileName, editData.currentContent ?? '', editData.newContent, 'Current', 'Proposed', DEFAULT_DIFF_OPTIONS);
|
|
181
182
|
const ideClient = await IdeClient.getInstance();
|
|
182
183
|
const ideConfirmation = this.config.getIdeMode() && ideClient.isDiffingEnabled()
|
|
183
|
-
? ideClient.openDiff(this.
|
|
184
|
+
? ideClient.openDiff(this.resolvedPath, editData.newContent)
|
|
184
185
|
: undefined;
|
|
185
186
|
const confirmationDetails = {
|
|
186
187
|
type: 'edit',
|
|
187
188
|
title: `Confirm Edit: ${shortenPath(makeRelative(this.params.file_path, this.config.getTargetDir()))}`,
|
|
188
189
|
fileName,
|
|
189
|
-
filePath: this.
|
|
190
|
+
filePath: this.resolvedPath,
|
|
190
191
|
fileDiff,
|
|
191
192
|
originalContent: editData.currentContent,
|
|
192
193
|
newContent: editData.newContent,
|
|
@@ -257,11 +258,11 @@ class EditToolInvocation extends BaseToolInvocation {
|
|
|
257
258
|
};
|
|
258
259
|
}
|
|
259
260
|
try {
|
|
260
|
-
this.ensureParentDirectoriesExist(this.
|
|
261
|
+
this.ensureParentDirectoriesExist(this.resolvedPath);
|
|
261
262
|
await this.config
|
|
262
263
|
.getFileSystemService()
|
|
263
|
-
.writeTextFile(this.
|
|
264
|
-
const fileName = path.basename(this.
|
|
264
|
+
.writeTextFile(this.resolvedPath, editData.newContent);
|
|
265
|
+
const fileName = path.basename(this.resolvedPath);
|
|
265
266
|
const originallyProposedContent = this.params.ai_proposed_content || editData.newContent;
|
|
266
267
|
const diffStat = getDiffStat(fileName, editData.currentContent ?? '', originallyProposedContent, editData.newContent);
|
|
267
268
|
const fileDiff = Diff.createPatch(fileName, editData.currentContent ?? '', // Should not be null here if not isNewFile
|
|
@@ -274,17 +275,17 @@ class EditToolInvocation extends BaseToolInvocation {
|
|
|
274
275
|
diffStat,
|
|
275
276
|
};
|
|
276
277
|
// Log file operation for telemetry (without diff_stat to avoid double-counting)
|
|
277
|
-
const mimetype = getSpecificMimeType(this.
|
|
278
|
-
const programmingLanguage = getLanguageFromFilePath(this.
|
|
279
|
-
const extension = path.extname(this.
|
|
278
|
+
const mimetype = getSpecificMimeType(this.resolvedPath);
|
|
279
|
+
const programmingLanguage = getLanguageFromFilePath(this.resolvedPath);
|
|
280
|
+
const extension = path.extname(this.resolvedPath);
|
|
280
281
|
const operation = editData.isNewFile
|
|
281
282
|
? FileOperation.CREATE
|
|
282
283
|
: FileOperation.UPDATE;
|
|
283
284
|
logFileOperation(this.config, new FileOperationEvent(EDIT_TOOL_NAME, operation, editData.newContent.split('\n').length, mimetype, extension, programmingLanguage));
|
|
284
285
|
const llmSuccessMessageParts = [
|
|
285
286
|
editData.isNewFile
|
|
286
|
-
? `Created new file: ${this.
|
|
287
|
-
: `Successfully modified file: ${this.
|
|
287
|
+
? `Created new file: ${this.resolvedPath} with provided content.`
|
|
288
|
+
: `Successfully modified file: ${this.resolvedPath} (${editData.occurrences} replacements).`,
|
|
288
289
|
];
|
|
289
290
|
if (this.params.modified_by_user) {
|
|
290
291
|
llmSuccessMessageParts.push(`User modified the \`new_string\` content to be: ${this.params.new_string}.`);
|
|
@@ -328,7 +329,7 @@ export class EditTool extends BaseDeclarativeTool {
|
|
|
328
329
|
The user has the ability to modify the \`new_string\` content. If modified, this will be stated in the response.
|
|
329
330
|
|
|
330
331
|
Expectation for required parameters:
|
|
331
|
-
1. \`file_path\`
|
|
332
|
+
1. \`file_path\` is the path to the file to modify.
|
|
332
333
|
2. \`old_string\` MUST be the exact literal text to replace (including all whitespace, indentation, newlines, and surrounding code etc.).
|
|
333
334
|
3. \`new_string\` MUST be the exact literal text to replace \`old_string\` with (also including all whitespace, indentation, newlines, and surrounding code etc.). Ensure the resulting code is correct and idiomatic.
|
|
334
335
|
4. NEVER escape \`old_string\` or \`new_string\`, that would break the exact literal text requirement.
|
|
@@ -336,9 +337,7 @@ Expectation for required parameters:
|
|
|
336
337
|
**Multiple replacements:** Set \`expected_replacements\` to the number of occurrences you want to replace. The tool will replace ALL occurrences that match \`old_string\` exactly. Ensure the number of replacements matches your expectation.`, Kind.Edit, {
|
|
337
338
|
properties: {
|
|
338
339
|
file_path: {
|
|
339
|
-
description:
|
|
340
|
-
? "The absolute path to the file to modify (e.g., 'C:\\Users\\project\\file.txt'). Must be an absolute path."
|
|
341
|
-
: "The absolute path to the file to modify (e.g., '/home/user/project/file.txt'). Must start with '/'.",
|
|
340
|
+
description: 'The path to the file to modify.',
|
|
342
341
|
type: 'string',
|
|
343
342
|
},
|
|
344
343
|
old_string: {
|
|
@@ -371,11 +370,9 @@ Expectation for required parameters:
|
|
|
371
370
|
if (!params.file_path) {
|
|
372
371
|
return "The 'file_path' parameter must be non-empty.";
|
|
373
372
|
}
|
|
374
|
-
|
|
375
|
-
return `File path must be absolute: ${params.file_path}`;
|
|
376
|
-
}
|
|
373
|
+
const resolvedPath = path.resolve(this.config.getTargetDir(), params.file_path);
|
|
377
374
|
const workspaceContext = this.config.getWorkspaceContext();
|
|
378
|
-
if (!workspaceContext.isPathWithinWorkspace(
|
|
375
|
+
if (!workspaceContext.isPathWithinWorkspace(resolvedPath)) {
|
|
379
376
|
const directories = workspaceContext.getDirectories();
|
|
380
377
|
return `File path must be within one of the workspace directories: ${directories.join(', ')}`;
|
|
381
378
|
}
|
|
@@ -385,13 +382,14 @@ Expectation for required parameters:
|
|
|
385
382
|
return new EditToolInvocation(this.config, params, messageBus ?? this.messageBus, toolName ?? this.name, displayName ?? this.displayName);
|
|
386
383
|
}
|
|
387
384
|
getModifyContext(_) {
|
|
385
|
+
const resolvePath = (filePath) => path.resolve(this.config.getTargetDir(), filePath);
|
|
388
386
|
return {
|
|
389
387
|
getFilePath: (params) => params.file_path,
|
|
390
388
|
getCurrentContent: async (params) => {
|
|
391
389
|
try {
|
|
392
|
-
return this.config
|
|
390
|
+
return await this.config
|
|
393
391
|
.getFileSystemService()
|
|
394
|
-
.readTextFile(params.file_path);
|
|
392
|
+
.readTextFile(resolvePath(params.file_path));
|
|
395
393
|
}
|
|
396
394
|
catch (err) {
|
|
397
395
|
if (!isNodeError(err) || err.code !== 'ENOENT')
|
|
@@ -403,7 +401,7 @@ Expectation for required parameters:
|
|
|
403
401
|
try {
|
|
404
402
|
const currentContent = await this.config
|
|
405
403
|
.getFileSystemService()
|
|
406
|
-
.readTextFile(params.file_path);
|
|
404
|
+
.readTextFile(resolvePath(params.file_path));
|
|
407
405
|
return applyReplacement(currentContent, params.old_string, params.new_string, params.old_string === '' && currentContent === '');
|
|
408
406
|
}
|
|
409
407
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../src/tools/edit.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../src/tools/edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,8 +35,8 @@ import path from 'node:path';
|
|
|
35
35
|
import fs from 'node:fs';
|
|
36
36
|
import os from 'node:os';
|
|
37
37
|
import { ApprovalMode } from '../policy/types.js';
|
|
38
|
-
import { createMockWorkspaceContext } from '../test-utils/mockWorkspaceContext.js';
|
|
39
38
|
import { StandardFileSystemService } from '../services/fileSystemService.js';
|
|
39
|
+
import { WorkspaceContext } from '../utils/workspaceContext.js';
|
|
40
40
|
describe('EditTool', () => {
|
|
41
41
|
let tool;
|
|
42
42
|
let tempDir;
|
|
@@ -61,7 +61,7 @@ describe('EditTool', () => {
|
|
|
61
61
|
getTargetDir: () => rootDir,
|
|
62
62
|
getApprovalMode: vi.fn(),
|
|
63
63
|
setApprovalMode: vi.fn(),
|
|
64
|
-
getWorkspaceContext: () =>
|
|
64
|
+
getWorkspaceContext: () => new WorkspaceContext(rootDir),
|
|
65
65
|
getFileSystemService: () => new StandardFileSystemService(),
|
|
66
66
|
getIdeMode: () => false,
|
|
67
67
|
// getGeminiConfig: () => ({ apiKey: 'test-api-key' }), // This was not a real Config method
|
|
@@ -236,14 +236,6 @@ describe('EditTool', () => {
|
|
|
236
236
|
};
|
|
237
237
|
expect(tool.validateToolParams(params)).toBeNull();
|
|
238
238
|
});
|
|
239
|
-
it('should return error for relative path', () => {
|
|
240
|
-
const params = {
|
|
241
|
-
file_path: 'test.txt',
|
|
242
|
-
old_string: 'old',
|
|
243
|
-
new_string: 'new',
|
|
244
|
-
};
|
|
245
|
-
expect(tool.validateToolParams(params)).toMatch(/File path must be absolute/);
|
|
246
|
-
});
|
|
247
239
|
it('should return error for path outside root', () => {
|
|
248
240
|
const params = {
|
|
249
241
|
file_path: path.join(tempDir, 'outside-root.txt'),
|
|
@@ -260,13 +252,25 @@ describe('EditTool', () => {
|
|
|
260
252
|
beforeEach(() => {
|
|
261
253
|
filePath = path.join(rootDir, testFile);
|
|
262
254
|
});
|
|
263
|
-
it('should
|
|
255
|
+
it('should resolve relative path and request confirmation', async () => {
|
|
256
|
+
fs.writeFileSync(filePath, 'some old content here');
|
|
264
257
|
const params = {
|
|
265
|
-
file_path:
|
|
258
|
+
file_path: testFile, // relative path
|
|
266
259
|
old_string: 'old',
|
|
267
260
|
new_string: 'new',
|
|
268
261
|
};
|
|
269
|
-
|
|
262
|
+
// ensureCorrectEdit will be called by shouldConfirmExecute
|
|
263
|
+
mockEnsureCorrectEdit.mockResolvedValueOnce({
|
|
264
|
+
params: { ...params, file_path: filePath },
|
|
265
|
+
occurrences: 1,
|
|
266
|
+
});
|
|
267
|
+
const invocation = tool.build(params);
|
|
268
|
+
const confirmation = await invocation.shouldConfirmExecute(new AbortController().signal);
|
|
269
|
+
expect(confirmation).toEqual(expect.objectContaining({
|
|
270
|
+
title: `Confirm Edit: ${testFile}`,
|
|
271
|
+
fileName: testFile,
|
|
272
|
+
fileDiff: expect.any(String),
|
|
273
|
+
}));
|
|
270
274
|
});
|
|
271
275
|
it('should request confirmation for valid edit', async () => {
|
|
272
276
|
fs.writeFileSync(filePath, 'some old content here');
|
|
@@ -420,13 +424,19 @@ describe('EditTool', () => {
|
|
|
420
424
|
return { params, occurrences };
|
|
421
425
|
});
|
|
422
426
|
});
|
|
423
|
-
it('should
|
|
427
|
+
it('should resolve relative path and execute successfully', async () => {
|
|
428
|
+
const initialContent = 'This is some old text.';
|
|
429
|
+
const newContent = 'This is some new text.';
|
|
430
|
+
fs.writeFileSync(filePath, initialContent, 'utf8');
|
|
424
431
|
const params = {
|
|
425
|
-
file_path:
|
|
432
|
+
file_path: testFile, // relative path
|
|
426
433
|
old_string: 'old',
|
|
427
434
|
new_string: 'new',
|
|
428
435
|
};
|
|
429
|
-
|
|
436
|
+
const invocation = tool.build(params);
|
|
437
|
+
const result = await invocation.execute(new AbortController().signal);
|
|
438
|
+
expect(result.llmContent).toMatch(/Successfully modified file/);
|
|
439
|
+
expect(fs.readFileSync(filePath, 'utf8')).toBe(newContent);
|
|
430
440
|
});
|
|
431
441
|
it('should throw error if file path is empty', async () => {
|
|
432
442
|
const params = {
|
|
@@ -732,13 +742,13 @@ describe('EditTool', () => {
|
|
|
732
742
|
const result = await invocation.execute(new AbortController().signal);
|
|
733
743
|
expect(result.error?.type).toBe(ToolErrorType.EDIT_NO_CHANGE);
|
|
734
744
|
});
|
|
735
|
-
it('should throw
|
|
745
|
+
it('should not throw error for relative path', async () => {
|
|
736
746
|
const params = {
|
|
737
747
|
file_path: 'relative/path.txt',
|
|
738
748
|
old_string: 'a',
|
|
739
749
|
new_string: 'b',
|
|
740
750
|
};
|
|
741
|
-
expect(() => tool.build(params)).toThrow();
|
|
751
|
+
expect(() => tool.build(params)).not.toThrow();
|
|
742
752
|
});
|
|
743
753
|
it('should return FILE_WRITE_FAILURE on write error', async () => {
|
|
744
754
|
fs.writeFileSync(filePath, 'content', 'utf8');
|
|
@@ -828,14 +838,14 @@ describe('EditTool', () => {
|
|
|
828
838
|
const tool = new EditTool({});
|
|
829
839
|
const schema = tool.schema;
|
|
830
840
|
expect(schema.parametersJsonSchema.properties
|
|
831
|
-
.file_path.description).toBe(
|
|
841
|
+
.file_path.description).toBe('The path to the file to modify.');
|
|
832
842
|
});
|
|
833
843
|
it('should use unix-style path examples on non-windows platforms', () => {
|
|
834
844
|
vi.spyOn(process, 'platform', 'get').mockReturnValue('linux');
|
|
835
845
|
const tool = new EditTool({});
|
|
836
846
|
const schema = tool.schema;
|
|
837
847
|
expect(schema.parametersJsonSchema.properties
|
|
838
|
-
.file_path.description).toBe(
|
|
848
|
+
.file_path.description).toBe('The path to the file to modify.');
|
|
839
849
|
});
|
|
840
850
|
});
|
|
841
851
|
describe('IDE mode', () => {
|