@google/gemini-cli-core 0.1.18 → 0.1.19-nightly.250813.9d023be1
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 +199 -132
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/src/code_assist/converter.d.ts +3 -2
- package/dist/src/code_assist/converter.js +2 -2
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/converter.test.js +48 -1
- package/dist/src/code_assist/converter.test.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +1 -1
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/server.test.js +4 -1
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/setup.js +4 -4
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/config/config.d.ts +19 -3
- package/dist/src/config/config.js +29 -10
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +34 -0
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/core/client.d.ts +5 -4
- package/dist/src/core/client.js +163 -117
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +282 -37
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.js +3 -2
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +3 -2
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +21 -8
- package/dist/src/core/coreToolScheduler.js +170 -61
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +181 -37
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +7 -6
- package/dist/src/core/geminiChat.js +43 -43
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/logger.d.ts +1 -0
- package/dist/src/core/logger.js +18 -0
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/logger.test.js +29 -0
- package/dist/src/core/logger.test.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.d.ts +29 -0
- package/dist/src/core/loggingContentGenerator.js +97 -0
- package/dist/src/core/loggingContentGenerator.js.map +1 -0
- package/dist/src/core/nonInteractiveToolExecutor.js +20 -1
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +7 -31
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/subagent.d.ts +230 -0
- package/dist/src/core/subagent.js +447 -0
- package/dist/src/core/subagent.js.map +1 -0
- package/dist/src/core/subagent.test.d.ts +6 -0
- package/dist/src/core/subagent.test.js +515 -0
- package/dist/src/core/subagent.test.js.map +1 -0
- package/dist/src/core/turn.js +1 -0
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/core/turn.test.js +4 -0
- package/dist/src/core/turn.test.js.map +1 -1
- package/dist/src/ide/detect-ide.d.ts +10 -2
- package/dist/src/ide/detect-ide.js +48 -5
- package/dist/src/ide/detect-ide.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +20 -1
- package/dist/src/ide/ide-client.js +145 -19
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-installer.js +1 -26
- package/dist/src/ide/ide-installer.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +0 -4
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/ide/ideContext.d.ts +95 -0
- package/dist/src/ide/ideContext.js +45 -0
- package/dist/src/ide/ideContext.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.js +9 -0
- package/dist/src/mcp/google-auth-provider.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.test.js +45 -10
- package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
- package/dist/src/mocks/msw.d.ts +6 -0
- package/dist/src/mocks/msw.js +8 -0
- package/dist/src/mocks/msw.js.map +1 -0
- package/dist/src/services/loopDetectionService.js +14 -11
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +191 -0
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.js +29 -9
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +8 -0
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +48 -6
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +211 -116
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +6 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +219 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +5 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +8 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/loggers.test.circular.js +7 -2
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +7 -2
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +3 -2
- package/dist/src/telemetry/metrics.js +7 -1
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +50 -0
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/tool-call-decision.d.ts +13 -0
- package/dist/src/telemetry/tool-call-decision.js +29 -0
- package/dist/src/telemetry/tool-call-decision.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +4 -7
- package/dist/src/telemetry/types.js +17 -21
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +4 -1
- package/dist/src/telemetry/uiTelemetry.js +3 -1
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +13 -2
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/test-utils/config.d.ts +16 -0
- package/dist/src/test-utils/config.js +32 -0
- package/dist/src/test-utils/config.js.map +1 -0
- package/dist/src/test-utils/tools.d.ts +23 -0
- package/dist/src/test-utils/tools.js +41 -0
- package/dist/src/test-utils/tools.js.map +1 -0
- package/dist/src/tools/diffOptions.d.ts +2 -0
- package/dist/src/tools/diffOptions.js +28 -0
- package/dist/src/tools/diffOptions.js.map +1 -1
- package/dist/src/tools/diffOptions.test.d.ts +6 -0
- package/dist/src/tools/diffOptions.test.js +119 -0
- package/dist/src/tools/diffOptions.test.js.map +1 -0
- package/dist/src/tools/edit.d.ts +9 -33
- package/dist/src/tools/edit.js +142 -132
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +115 -51
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/glob.d.ts +3 -10
- package/dist/src/tools/glob.js +85 -89
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +22 -12
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +3 -35
- package/dist/src/tools/grep.js +111 -83
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +40 -23
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/ls.js +8 -9
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +14 -3
- package/dist/src/tools/mcp-client.js +82 -6
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +340 -5
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +3 -8
- package/dist/src/tools/mcp-tool.js +5 -18
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +2 -2
- package/dist/src/tools/memoryTool.js +5 -5
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +10 -1
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/modifiable-tool.d.ts +8 -5
- package/dist/src/tools/modifiable-tool.js +4 -1
- package/dist/src/tools/modifiable-tool.js.map +1 -1
- package/dist/src/tools/modifiable-tool.test.js +3 -3
- package/dist/src/tools/modifiable-tool.test.js.map +1 -1
- package/dist/src/tools/read-file.d.ts +4 -6
- package/dist/src/tools/read-file.js +92 -45
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +192 -130
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.js +25 -20
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +22 -11
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/shell.js +11 -7
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +21 -0
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/tool-error.d.ts +4 -0
- package/dist/src/tools/tool-error.js +4 -0
- package/dist/src/tools/tool-error.js.map +1 -1
- package/dist/src/tools/tool-registry.d.ts +12 -20
- package/dist/src/tools/tool-registry.js +23 -76
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +19 -192
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +144 -43
- package/dist/src/tools/tools.js +181 -11
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/tools.test.d.ts +6 -0
- package/dist/src/tools/tools.test.js +117 -0
- package/dist/src/tools/tools.test.js.map +1 -0
- package/dist/src/tools/web-fetch.js +3 -4
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-search.js +1 -1
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +6 -2
- package/dist/src/tools/write-file.js +84 -20
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +112 -8
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.test.js +28 -56
- package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
- package/dist/src/utils/editCorrector.js +8 -9
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/environmentContext.d.ts +21 -0
- package/dist/src/utils/environmentContext.js +90 -0
- package/dist/src/utils/environmentContext.js.map +1 -0
- package/dist/src/utils/environmentContext.test.d.ts +6 -0
- package/dist/src/utils/environmentContext.test.js +139 -0
- package/dist/src/utils/environmentContext.test.js.map +1 -0
- package/dist/src/utils/fileUtils.d.ts +7 -0
- package/dist/src/utils/fileUtils.js +15 -12
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +6 -5
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/filesearch/crawlCache.d.ts +1 -1
- package/dist/src/utils/filesearch/crawlCache.js +4 -1
- package/dist/src/utils/filesearch/crawlCache.js.map +1 -1
- package/dist/src/utils/filesearch/crawlCache.test.js +10 -0
- package/dist/src/utils/filesearch/crawlCache.test.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.d.ts +2 -0
- package/dist/src/utils/filesearch/fileSearch.js +32 -7
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.test.js +139 -0
- package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.js +4 -1
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.js +5 -6
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.test.js +2 -2
- package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
- package/dist/src/utils/schemaValidator.d.ts +1 -8
- package/dist/src/utils/schemaValidator.js +1 -32
- package/dist/src/utils/schemaValidator.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -1
- package/dist/google-gemini-cli-core-0.1.17.tgz +0 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, expect, it } from 'vitest';
|
|
7
|
+
import { getDiffStat } from './diffOptions.js';
|
|
8
|
+
describe('getDiffStat', () => {
|
|
9
|
+
const fileName = 'test.txt';
|
|
10
|
+
it('should return 0 for all stats when there are no changes', () => {
|
|
11
|
+
const oldStr = 'line1\nline2\n';
|
|
12
|
+
const aiStr = 'line1\nline2\n';
|
|
13
|
+
const userStr = 'line1\nline2\n';
|
|
14
|
+
const diffStat = getDiffStat(fileName, oldStr, aiStr, userStr);
|
|
15
|
+
expect(diffStat).toEqual({
|
|
16
|
+
ai_added_lines: 0,
|
|
17
|
+
ai_removed_lines: 0,
|
|
18
|
+
user_added_lines: 0,
|
|
19
|
+
user_removed_lines: 0,
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
it('should correctly report AI additions', () => {
|
|
23
|
+
const oldStr = 'line1\nline2\n';
|
|
24
|
+
const aiStr = 'line1\nline2\nline3\n';
|
|
25
|
+
const userStr = 'line1\nline2\nline3\n';
|
|
26
|
+
const diffStat = getDiffStat(fileName, oldStr, aiStr, userStr);
|
|
27
|
+
expect(diffStat).toEqual({
|
|
28
|
+
ai_added_lines: 1,
|
|
29
|
+
ai_removed_lines: 0,
|
|
30
|
+
user_added_lines: 0,
|
|
31
|
+
user_removed_lines: 0,
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
it('should correctly report AI removals', () => {
|
|
35
|
+
const oldStr = 'line1\nline2\nline3\n';
|
|
36
|
+
const aiStr = 'line1\nline3\n';
|
|
37
|
+
const userStr = 'line1\nline3\n';
|
|
38
|
+
const diffStat = getDiffStat(fileName, oldStr, aiStr, userStr);
|
|
39
|
+
expect(diffStat).toEqual({
|
|
40
|
+
ai_added_lines: 0,
|
|
41
|
+
ai_removed_lines: 1,
|
|
42
|
+
user_added_lines: 0,
|
|
43
|
+
user_removed_lines: 0,
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
it('should correctly report AI modifications', () => {
|
|
47
|
+
const oldStr = 'line1\nline2\nline3\n';
|
|
48
|
+
const aiStr = 'line1\nline_two\nline3\n';
|
|
49
|
+
const userStr = 'line1\nline_two\nline3\n';
|
|
50
|
+
const diffStat = getDiffStat(fileName, oldStr, aiStr, userStr);
|
|
51
|
+
expect(diffStat).toEqual({
|
|
52
|
+
ai_added_lines: 1,
|
|
53
|
+
ai_removed_lines: 1,
|
|
54
|
+
user_added_lines: 0,
|
|
55
|
+
user_removed_lines: 0,
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
it('should correctly report user additions', () => {
|
|
59
|
+
const oldStr = 'line1\nline2\n';
|
|
60
|
+
const aiStr = 'line1\nline2\nline3\n';
|
|
61
|
+
const userStr = 'line1\nline2\nline3\nline4\n';
|
|
62
|
+
const diffStat = getDiffStat(fileName, oldStr, aiStr, userStr);
|
|
63
|
+
expect(diffStat).toEqual({
|
|
64
|
+
ai_added_lines: 1,
|
|
65
|
+
ai_removed_lines: 0,
|
|
66
|
+
user_added_lines: 1,
|
|
67
|
+
user_removed_lines: 0,
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
it('should correctly report user removals', () => {
|
|
71
|
+
const oldStr = 'line1\nline2\n';
|
|
72
|
+
const aiStr = 'line1\nline2\nline3\n';
|
|
73
|
+
const userStr = 'line1\nline2\n';
|
|
74
|
+
const diffStat = getDiffStat(fileName, oldStr, aiStr, userStr);
|
|
75
|
+
expect(diffStat).toEqual({
|
|
76
|
+
ai_added_lines: 1,
|
|
77
|
+
ai_removed_lines: 0,
|
|
78
|
+
user_added_lines: 0,
|
|
79
|
+
user_removed_lines: 1,
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
it('should correctly report user modifications', () => {
|
|
83
|
+
const oldStr = 'line1\nline2\n';
|
|
84
|
+
const aiStr = 'line1\nline2\nline3\n';
|
|
85
|
+
const userStr = 'line1\nline2\nline_three\n';
|
|
86
|
+
const diffStat = getDiffStat(fileName, oldStr, aiStr, userStr);
|
|
87
|
+
expect(diffStat).toEqual({
|
|
88
|
+
ai_added_lines: 1,
|
|
89
|
+
ai_removed_lines: 0,
|
|
90
|
+
user_added_lines: 1,
|
|
91
|
+
user_removed_lines: 1,
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
it('should handle complex changes from both AI and user', () => {
|
|
95
|
+
const oldStr = 'line1\nline2\nline3\nline4\n';
|
|
96
|
+
const aiStr = 'line_one\nline2\nline_three\nline4\n';
|
|
97
|
+
const userStr = 'line_one\nline_two\nline_three\nline4\nline5\n';
|
|
98
|
+
const diffStat = getDiffStat(fileName, oldStr, aiStr, userStr);
|
|
99
|
+
expect(diffStat).toEqual({
|
|
100
|
+
ai_added_lines: 2,
|
|
101
|
+
ai_removed_lines: 2,
|
|
102
|
+
user_added_lines: 2,
|
|
103
|
+
user_removed_lines: 1,
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
it('should report a single line modification as one addition and one removal', () => {
|
|
107
|
+
const oldStr = 'hello world';
|
|
108
|
+
const aiStr = 'hello universe';
|
|
109
|
+
const userStr = 'hello universe';
|
|
110
|
+
const diffStat = getDiffStat(fileName, oldStr, aiStr, userStr);
|
|
111
|
+
expect(diffStat).toEqual({
|
|
112
|
+
ai_added_lines: 1,
|
|
113
|
+
ai_removed_lines: 1,
|
|
114
|
+
user_added_lines: 0,
|
|
115
|
+
user_removed_lines: 0,
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
//# sourceMappingURL=diffOptions.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diffOptions.test.js","sourceRoot":"","sources":["../../../src/tools/diffOptions.test.ts"],"names":[],"mappings":"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"}
|
package/dist/src/tools/edit.d.ts
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { BaseDeclarativeTool, ToolInvocation, ToolResult } from './tools.js';
|
|
7
7
|
import { Config } from '../config/config.js';
|
|
8
|
-
import {
|
|
8
|
+
import { ModifiableDeclarativeTool, ModifyContext } from './modifiable-tool.js';
|
|
9
|
+
export declare function applyReplacement(currentContent: string | null, oldString: string, newString: string, isNewFile: boolean): string;
|
|
9
10
|
/**
|
|
10
11
|
* Parameters for the Edit tool
|
|
11
12
|
*/
|
|
@@ -31,11 +32,15 @@ export interface EditToolParams {
|
|
|
31
32
|
* Whether the edit was modified manually by the user.
|
|
32
33
|
*/
|
|
33
34
|
modified_by_user?: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Initially proposed string.
|
|
37
|
+
*/
|
|
38
|
+
ai_proposed_string?: string;
|
|
34
39
|
}
|
|
35
40
|
/**
|
|
36
41
|
* Implementation of the Edit tool logic
|
|
37
42
|
*/
|
|
38
|
-
export declare class EditTool extends
|
|
43
|
+
export declare class EditTool extends BaseDeclarativeTool<EditToolParams, ToolResult> implements ModifiableDeclarativeTool<EditToolParams> {
|
|
39
44
|
private readonly config;
|
|
40
45
|
static readonly Name = "replace";
|
|
41
46
|
constructor(config: Config);
|
|
@@ -45,35 +50,6 @@ export declare class EditTool extends BaseTool<EditToolParams, ToolResult> imple
|
|
|
45
50
|
* @returns Error message string or null if valid
|
|
46
51
|
*/
|
|
47
52
|
validateToolParams(params: EditToolParams): string | null;
|
|
48
|
-
|
|
49
|
-
* Determines any file locations affected by the tool execution
|
|
50
|
-
* @param params Parameters for the tool execution
|
|
51
|
-
* @returns A list of such paths
|
|
52
|
-
*/
|
|
53
|
-
toolLocations(params: EditToolParams): ToolLocation[];
|
|
54
|
-
private _applyReplacement;
|
|
55
|
-
/**
|
|
56
|
-
* Calculates the potential outcome of an edit operation.
|
|
57
|
-
* @param params Parameters for the edit operation
|
|
58
|
-
* @returns An object describing the potential edit outcome
|
|
59
|
-
* @throws File system errors if reading the file fails unexpectedly (e.g., permissions)
|
|
60
|
-
*/
|
|
61
|
-
private calculateEdit;
|
|
62
|
-
/**
|
|
63
|
-
* Handles the confirmation prompt for the Edit tool in the CLI.
|
|
64
|
-
* It needs to calculate the diff to show the user.
|
|
65
|
-
*/
|
|
66
|
-
shouldConfirmExecute(params: EditToolParams, abortSignal: AbortSignal): Promise<ToolCallConfirmationDetails | false>;
|
|
67
|
-
getDescription(params: EditToolParams): string;
|
|
68
|
-
/**
|
|
69
|
-
* Executes the edit operation with the given parameters.
|
|
70
|
-
* @param params Parameters for the edit operation
|
|
71
|
-
* @returns Result of the edit operation
|
|
72
|
-
*/
|
|
73
|
-
execute(params: EditToolParams, signal: AbortSignal): Promise<ToolResult>;
|
|
74
|
-
/**
|
|
75
|
-
* Creates parent directories if they don't exist
|
|
76
|
-
*/
|
|
77
|
-
private ensureParentDirectoriesExist;
|
|
53
|
+
protected createInvocation(params: EditToolParams): ToolInvocation<EditToolParams, ToolResult>;
|
|
78
54
|
getModifyContext(_: AbortSignal): ModifyContext<EditToolParams>;
|
|
79
55
|
}
|
package/dist/src/tools/edit.js
CHANGED
|
@@ -6,99 +6,39 @@
|
|
|
6
6
|
import * as fs from 'fs';
|
|
7
7
|
import * as path from 'path';
|
|
8
8
|
import * as Diff from 'diff';
|
|
9
|
-
import {
|
|
9
|
+
import { BaseDeclarativeTool, Icon, ToolConfirmationOutcome, } from './tools.js';
|
|
10
10
|
import { ToolErrorType } from './tool-error.js';
|
|
11
|
-
import { Type } from '@google/genai';
|
|
12
11
|
import { SchemaValidator } from '../utils/schemaValidator.js';
|
|
13
12
|
import { makeRelative, shortenPath } from '../utils/paths.js';
|
|
14
13
|
import { isNodeError } from '../utils/errors.js';
|
|
15
14
|
import { ApprovalMode } from '../config/config.js';
|
|
16
15
|
import { ensureCorrectEdit } from '../utils/editCorrector.js';
|
|
17
|
-
import { DEFAULT_DIFF_OPTIONS } from './diffOptions.js';
|
|
16
|
+
import { DEFAULT_DIFF_OPTIONS, getDiffStat } from './diffOptions.js';
|
|
18
17
|
import { ReadFileTool } from './read-file.js';
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
config;
|
|
24
|
-
static Name = 'replace';
|
|
25
|
-
constructor(config) {
|
|
26
|
-
super(EditTool.Name, 'Edit', `Replaces text within a file. By default, replaces a single occurrence, but can replace multiple occurrences when \`expected_replacements\` is specified. This tool requires providing significant context around the change to ensure precise targeting. Always use the ${ReadFileTool.Name} tool to examine the file's current content before attempting a text replacement.
|
|
27
|
-
|
|
28
|
-
The user has the ability to modify the \`new_string\` content. If modified, this will be stated in the response.
|
|
29
|
-
|
|
30
|
-
Expectation for required parameters:
|
|
31
|
-
1. \`file_path\` MUST be an absolute path; otherwise an error will be thrown.
|
|
32
|
-
2. \`old_string\` MUST be the exact literal text to replace (including all whitespace, indentation, newlines, and surrounding code etc.).
|
|
33
|
-
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.
|
|
34
|
-
4. NEVER escape \`old_string\` or \`new_string\`, that would break the exact literal text requirement.
|
|
35
|
-
**Important:** If ANY of the above are not satisfied, the tool will fail. CRITICAL for \`old_string\`: Must uniquely identify the single instance to change. Include at least 3 lines of context BEFORE and AFTER the target text, matching whitespace and indentation precisely. If this string matches multiple locations, or does not match exactly, the tool will fail.
|
|
36
|
-
**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.`, Icon.Pencil, {
|
|
37
|
-
properties: {
|
|
38
|
-
file_path: {
|
|
39
|
-
description: "The absolute path to the file to modify. Must start with '/'.",
|
|
40
|
-
type: Type.STRING,
|
|
41
|
-
},
|
|
42
|
-
old_string: {
|
|
43
|
-
description: 'The exact literal text to replace, preferably unescaped. For single replacements (default), include at least 3 lines of context BEFORE and AFTER the target text, matching whitespace and indentation precisely. For multiple replacements, specify expected_replacements parameter. If this string is not the exact literal text (i.e. you escaped it) or does not match exactly, the tool will fail.',
|
|
44
|
-
type: Type.STRING,
|
|
45
|
-
},
|
|
46
|
-
new_string: {
|
|
47
|
-
description: 'The exact literal text to replace `old_string` with, preferably unescaped. Provide the EXACT text. Ensure the resulting code is correct and idiomatic.',
|
|
48
|
-
type: Type.STRING,
|
|
49
|
-
},
|
|
50
|
-
expected_replacements: {
|
|
51
|
-
type: Type.NUMBER,
|
|
52
|
-
description: 'Number of replacements expected. Defaults to 1 if not specified. Use when you want to replace multiple occurrences.',
|
|
53
|
-
minimum: 1,
|
|
54
|
-
},
|
|
55
|
-
},
|
|
56
|
-
required: ['file_path', 'old_string', 'new_string'],
|
|
57
|
-
type: Type.OBJECT,
|
|
58
|
-
});
|
|
59
|
-
this.config = config;
|
|
18
|
+
import { IDEConnectionStatus } from '../ide/ide-client.js';
|
|
19
|
+
export function applyReplacement(currentContent, oldString, newString, isNewFile) {
|
|
20
|
+
if (isNewFile) {
|
|
21
|
+
return newString;
|
|
60
22
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
* @returns Error message string or null if valid
|
|
65
|
-
*/
|
|
66
|
-
validateToolParams(params) {
|
|
67
|
-
const errors = SchemaValidator.validate(this.schema.parameters, params);
|
|
68
|
-
if (errors) {
|
|
69
|
-
return errors;
|
|
70
|
-
}
|
|
71
|
-
if (!path.isAbsolute(params.file_path)) {
|
|
72
|
-
return `File path must be absolute: ${params.file_path}`;
|
|
73
|
-
}
|
|
74
|
-
const workspaceContext = this.config.getWorkspaceContext();
|
|
75
|
-
if (!workspaceContext.isPathWithinWorkspace(params.file_path)) {
|
|
76
|
-
const directories = workspaceContext.getDirectories();
|
|
77
|
-
return `File path must be within one of the workspace directories: ${directories.join(', ')}`;
|
|
78
|
-
}
|
|
79
|
-
return null;
|
|
23
|
+
if (currentContent === null) {
|
|
24
|
+
// Should not happen if not a new file, but defensively return empty or newString if oldString is also empty
|
|
25
|
+
return oldString === '' ? newString : '';
|
|
80
26
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
* @returns A list of such paths
|
|
85
|
-
*/
|
|
86
|
-
toolLocations(params) {
|
|
87
|
-
return [{ path: params.file_path }];
|
|
27
|
+
// If oldString is empty and it's not a new file, do not modify the content.
|
|
28
|
+
if (oldString === '' && !isNewFile) {
|
|
29
|
+
return currentContent;
|
|
88
30
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
return currentContent.replaceAll(oldString, newString);
|
|
31
|
+
return currentContent.replaceAll(oldString, newString);
|
|
32
|
+
}
|
|
33
|
+
class EditToolInvocation {
|
|
34
|
+
config;
|
|
35
|
+
params;
|
|
36
|
+
constructor(config, params) {
|
|
37
|
+
this.config = config;
|
|
38
|
+
this.params = params;
|
|
39
|
+
}
|
|
40
|
+
toolLocations() {
|
|
41
|
+
return [{ path: this.params.file_path }];
|
|
102
42
|
}
|
|
103
43
|
/**
|
|
104
44
|
* Calculates the potential outcome of an edit operation.
|
|
@@ -185,7 +125,7 @@ Expectation for required parameters:
|
|
|
185
125
|
type: ToolErrorType.READ_CONTENT_FAILURE,
|
|
186
126
|
};
|
|
187
127
|
}
|
|
188
|
-
const newContent =
|
|
128
|
+
const newContent = applyReplacement(currentContent, finalOldString, finalNewString, isNewFile);
|
|
189
129
|
return {
|
|
190
130
|
currentContent,
|
|
191
131
|
newContent,
|
|
@@ -198,18 +138,13 @@ Expectation for required parameters:
|
|
|
198
138
|
* Handles the confirmation prompt for the Edit tool in the CLI.
|
|
199
139
|
* It needs to calculate the diff to show the user.
|
|
200
140
|
*/
|
|
201
|
-
async shouldConfirmExecute(
|
|
141
|
+
async shouldConfirmExecute(abortSignal) {
|
|
202
142
|
if (this.config.getApprovalMode() === ApprovalMode.AUTO_EDIT) {
|
|
203
143
|
return false;
|
|
204
144
|
}
|
|
205
|
-
const validationError = this.validateToolParams(params);
|
|
206
|
-
if (validationError) {
|
|
207
|
-
console.error(`[EditTool Wrapper] Attempted confirmation with invalid parameters: ${validationError}`);
|
|
208
|
-
return false;
|
|
209
|
-
}
|
|
210
145
|
let editData;
|
|
211
146
|
try {
|
|
212
|
-
editData = await this.calculateEdit(params, abortSignal);
|
|
147
|
+
editData = await this.calculateEdit(this.params, abortSignal);
|
|
213
148
|
}
|
|
214
149
|
catch (error) {
|
|
215
150
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
@@ -220,12 +155,18 @@ Expectation for required parameters:
|
|
|
220
155
|
console.log(`Error: ${editData.error.display}`);
|
|
221
156
|
return false;
|
|
222
157
|
}
|
|
223
|
-
const fileName = path.basename(params.file_path);
|
|
158
|
+
const fileName = path.basename(this.params.file_path);
|
|
224
159
|
const fileDiff = Diff.createPatch(fileName, editData.currentContent ?? '', editData.newContent, 'Current', 'Proposed', DEFAULT_DIFF_OPTIONS);
|
|
160
|
+
const ideClient = this.config.getIdeClient();
|
|
161
|
+
const ideConfirmation = this.config.getIdeMode() &&
|
|
162
|
+
ideClient?.getConnectionStatus().status === IDEConnectionStatus.Connected
|
|
163
|
+
? ideClient.openDiff(this.params.file_path, editData.newContent)
|
|
164
|
+
: undefined;
|
|
225
165
|
const confirmationDetails = {
|
|
226
166
|
type: 'edit',
|
|
227
|
-
title: `Confirm Edit: ${shortenPath(makeRelative(params.file_path, this.config.getTargetDir()))}`,
|
|
167
|
+
title: `Confirm Edit: ${shortenPath(makeRelative(this.params.file_path, this.config.getTargetDir()))}`,
|
|
228
168
|
fileName,
|
|
169
|
+
filePath: this.params.file_path,
|
|
229
170
|
fileDiff,
|
|
230
171
|
originalContent: editData.currentContent,
|
|
231
172
|
newContent: editData.newContent,
|
|
@@ -233,23 +174,30 @@ Expectation for required parameters:
|
|
|
233
174
|
if (outcome === ToolConfirmationOutcome.ProceedAlways) {
|
|
234
175
|
this.config.setApprovalMode(ApprovalMode.AUTO_EDIT);
|
|
235
176
|
}
|
|
177
|
+
if (ideConfirmation) {
|
|
178
|
+
const result = await ideConfirmation;
|
|
179
|
+
if (result.status === 'accepted' && result.content) {
|
|
180
|
+
// TODO(chrstn): See https://github.com/google-gemini/gemini-cli/pull/5618#discussion_r2255413084
|
|
181
|
+
// for info on a possible race condition where the file is modified on disk while being edited.
|
|
182
|
+
this.params.old_string = editData.currentContent ?? '';
|
|
183
|
+
this.params.new_string = result.content;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
236
186
|
},
|
|
187
|
+
ideConfirmation,
|
|
237
188
|
};
|
|
238
189
|
return confirmationDetails;
|
|
239
190
|
}
|
|
240
|
-
getDescription(
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
}
|
|
244
|
-
const relativePath = makeRelative(params.file_path, this.config.getTargetDir());
|
|
245
|
-
if (params.old_string === '') {
|
|
191
|
+
getDescription() {
|
|
192
|
+
const relativePath = makeRelative(this.params.file_path, this.config.getTargetDir());
|
|
193
|
+
if (this.params.old_string === '') {
|
|
246
194
|
return `Create ${shortenPath(relativePath)}`;
|
|
247
195
|
}
|
|
248
|
-
const oldStringSnippet = params.old_string.split('\n')[0].substring(0, 30) +
|
|
249
|
-
(params.old_string.length > 30 ? '...' : '');
|
|
250
|
-
const newStringSnippet = params.new_string.split('\n')[0].substring(0, 30) +
|
|
251
|
-
(params.new_string.length > 30 ? '...' : '');
|
|
252
|
-
if (params.old_string === params.new_string) {
|
|
196
|
+
const oldStringSnippet = this.params.old_string.split('\n')[0].substring(0, 30) +
|
|
197
|
+
(this.params.old_string.length > 30 ? '...' : '');
|
|
198
|
+
const newStringSnippet = this.params.new_string.split('\n')[0].substring(0, 30) +
|
|
199
|
+
(this.params.new_string.length > 30 ? '...' : '');
|
|
200
|
+
if (this.params.old_string === this.params.new_string) {
|
|
253
201
|
return `No file changes to ${shortenPath(relativePath)}`;
|
|
254
202
|
}
|
|
255
203
|
return `${shortenPath(relativePath)}: ${oldStringSnippet} => ${newStringSnippet}`;
|
|
@@ -259,21 +207,10 @@ Expectation for required parameters:
|
|
|
259
207
|
* @param params Parameters for the edit operation
|
|
260
208
|
* @returns Result of the edit operation
|
|
261
209
|
*/
|
|
262
|
-
async execute(
|
|
263
|
-
const validationError = this.validateToolParams(params);
|
|
264
|
-
if (validationError) {
|
|
265
|
-
return {
|
|
266
|
-
llmContent: `Error: Invalid parameters provided. Reason: ${validationError}`,
|
|
267
|
-
returnDisplay: `Error: ${validationError}`,
|
|
268
|
-
error: {
|
|
269
|
-
message: validationError,
|
|
270
|
-
type: ToolErrorType.INVALID_TOOL_PARAMS,
|
|
271
|
-
},
|
|
272
|
-
};
|
|
273
|
-
}
|
|
210
|
+
async execute(signal) {
|
|
274
211
|
let editData;
|
|
275
212
|
try {
|
|
276
|
-
editData = await this.calculateEdit(params, signal);
|
|
213
|
+
editData = await this.calculateEdit(this.params, signal);
|
|
277
214
|
}
|
|
278
215
|
catch (error) {
|
|
279
216
|
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
@@ -297,32 +234,35 @@ Expectation for required parameters:
|
|
|
297
234
|
};
|
|
298
235
|
}
|
|
299
236
|
try {
|
|
300
|
-
this.ensureParentDirectoriesExist(params.file_path);
|
|
301
|
-
fs.writeFileSync(params.file_path, editData.newContent, 'utf8');
|
|
237
|
+
this.ensureParentDirectoriesExist(this.params.file_path);
|
|
238
|
+
fs.writeFileSync(this.params.file_path, editData.newContent, 'utf8');
|
|
302
239
|
let displayResult;
|
|
303
240
|
if (editData.isNewFile) {
|
|
304
|
-
displayResult = `Created ${shortenPath(makeRelative(params.file_path, this.config.getTargetDir()))}`;
|
|
241
|
+
displayResult = `Created ${shortenPath(makeRelative(this.params.file_path, this.config.getTargetDir()))}`;
|
|
305
242
|
}
|
|
306
243
|
else {
|
|
307
244
|
// Generate diff for display, even though core logic doesn't technically need it
|
|
308
245
|
// The CLI wrapper will use this part of the ToolResult
|
|
309
|
-
const fileName = path.basename(params.file_path);
|
|
246
|
+
const fileName = path.basename(this.params.file_path);
|
|
310
247
|
const fileDiff = Diff.createPatch(fileName, editData.currentContent ?? '', // Should not be null here if not isNewFile
|
|
311
248
|
editData.newContent, 'Current', 'Proposed', DEFAULT_DIFF_OPTIONS);
|
|
249
|
+
const originallyProposedContent = this.params.ai_proposed_string || this.params.new_string;
|
|
250
|
+
const diffStat = getDiffStat(fileName, editData.currentContent ?? '', originallyProposedContent, this.params.new_string);
|
|
312
251
|
displayResult = {
|
|
313
252
|
fileDiff,
|
|
314
253
|
fileName,
|
|
315
254
|
originalContent: editData.currentContent,
|
|
316
255
|
newContent: editData.newContent,
|
|
256
|
+
diffStat,
|
|
317
257
|
};
|
|
318
258
|
}
|
|
319
259
|
const llmSuccessMessageParts = [
|
|
320
260
|
editData.isNewFile
|
|
321
|
-
? `Created new file: ${params.file_path} with provided content.`
|
|
322
|
-
: `Successfully modified file: ${params.file_path} (${editData.occurrences} replacements).`,
|
|
261
|
+
? `Created new file: ${this.params.file_path} with provided content.`
|
|
262
|
+
: `Successfully modified file: ${this.params.file_path} (${editData.occurrences} replacements).`,
|
|
323
263
|
];
|
|
324
|
-
if (params.modified_by_user) {
|
|
325
|
-
llmSuccessMessageParts.push(`User modified the \`new_string\` content to be: ${params.new_string}.`);
|
|
264
|
+
if (this.params.modified_by_user) {
|
|
265
|
+
llmSuccessMessageParts.push(`User modified the \`new_string\` content to be: ${this.params.new_string}.`);
|
|
326
266
|
}
|
|
327
267
|
return {
|
|
328
268
|
llmContent: llmSuccessMessageParts.join(' '),
|
|
@@ -350,6 +290,72 @@ Expectation for required parameters:
|
|
|
350
290
|
fs.mkdirSync(dirName, { recursive: true });
|
|
351
291
|
}
|
|
352
292
|
}
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Implementation of the Edit tool logic
|
|
296
|
+
*/
|
|
297
|
+
export class EditTool extends BaseDeclarativeTool {
|
|
298
|
+
config;
|
|
299
|
+
static Name = 'replace';
|
|
300
|
+
constructor(config) {
|
|
301
|
+
super(EditTool.Name, 'Edit', `Replaces text within a file. By default, replaces a single occurrence, but can replace multiple occurrences when \`expected_replacements\` is specified. This tool requires providing significant context around the change to ensure precise targeting. Always use the ${ReadFileTool.Name} tool to examine the file's current content before attempting a text replacement.
|
|
302
|
+
|
|
303
|
+
The user has the ability to modify the \`new_string\` content. If modified, this will be stated in the response.
|
|
304
|
+
|
|
305
|
+
Expectation for required parameters:
|
|
306
|
+
1. \`file_path\` MUST be an absolute path; otherwise an error will be thrown.
|
|
307
|
+
2. \`old_string\` MUST be the exact literal text to replace (including all whitespace, indentation, newlines, and surrounding code etc.).
|
|
308
|
+
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.
|
|
309
|
+
4. NEVER escape \`old_string\` or \`new_string\`, that would break the exact literal text requirement.
|
|
310
|
+
**Important:** If ANY of the above are not satisfied, the tool will fail. CRITICAL for \`old_string\`: Must uniquely identify the single instance to change. Include at least 3 lines of context BEFORE and AFTER the target text, matching whitespace and indentation precisely. If this string matches multiple locations, or does not match exactly, the tool will fail.
|
|
311
|
+
**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.`, Icon.Pencil, {
|
|
312
|
+
properties: {
|
|
313
|
+
file_path: {
|
|
314
|
+
description: "The absolute path to the file to modify. Must start with '/'.",
|
|
315
|
+
type: 'string',
|
|
316
|
+
},
|
|
317
|
+
old_string: {
|
|
318
|
+
description: 'The exact literal text to replace, preferably unescaped. For single replacements (default), include at least 3 lines of context BEFORE and AFTER the target text, matching whitespace and indentation precisely. For multiple replacements, specify expected_replacements parameter. If this string is not the exact literal text (i.e. you escaped it) or does not match exactly, the tool will fail.',
|
|
319
|
+
type: 'string',
|
|
320
|
+
},
|
|
321
|
+
new_string: {
|
|
322
|
+
description: 'The exact literal text to replace `old_string` with, preferably unescaped. Provide the EXACT text. Ensure the resulting code is correct and idiomatic.',
|
|
323
|
+
type: 'string',
|
|
324
|
+
},
|
|
325
|
+
expected_replacements: {
|
|
326
|
+
type: 'number',
|
|
327
|
+
description: 'Number of replacements expected. Defaults to 1 if not specified. Use when you want to replace multiple occurrences.',
|
|
328
|
+
minimum: 1,
|
|
329
|
+
},
|
|
330
|
+
},
|
|
331
|
+
required: ['file_path', 'old_string', 'new_string'],
|
|
332
|
+
type: 'object',
|
|
333
|
+
});
|
|
334
|
+
this.config = config;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Validates the parameters for the Edit tool
|
|
338
|
+
* @param params Parameters to validate
|
|
339
|
+
* @returns Error message string or null if valid
|
|
340
|
+
*/
|
|
341
|
+
validateToolParams(params) {
|
|
342
|
+
const errors = SchemaValidator.validate(this.schema.parametersJsonSchema, params);
|
|
343
|
+
if (errors) {
|
|
344
|
+
return errors;
|
|
345
|
+
}
|
|
346
|
+
if (!path.isAbsolute(params.file_path)) {
|
|
347
|
+
return `File path must be absolute: ${params.file_path}`;
|
|
348
|
+
}
|
|
349
|
+
const workspaceContext = this.config.getWorkspaceContext();
|
|
350
|
+
if (!workspaceContext.isPathWithinWorkspace(params.file_path)) {
|
|
351
|
+
const directories = workspaceContext.getDirectories();
|
|
352
|
+
return `File path must be within one of the workspace directories: ${directories.join(', ')}`;
|
|
353
|
+
}
|
|
354
|
+
return null;
|
|
355
|
+
}
|
|
356
|
+
createInvocation(params) {
|
|
357
|
+
return new EditToolInvocation(this.config, params);
|
|
358
|
+
}
|
|
353
359
|
getModifyContext(_) {
|
|
354
360
|
return {
|
|
355
361
|
getFilePath: (params) => params.file_path,
|
|
@@ -366,7 +372,7 @@ Expectation for required parameters:
|
|
|
366
372
|
getProposedContent: async (params) => {
|
|
367
373
|
try {
|
|
368
374
|
const currentContent = fs.readFileSync(params.file_path, 'utf8');
|
|
369
|
-
return
|
|
375
|
+
return applyReplacement(currentContent, params.old_string, params.new_string, params.old_string === '' && currentContent === '');
|
|
370
376
|
}
|
|
371
377
|
catch (err) {
|
|
372
378
|
if (!isNodeError(err) || err.code !== 'ENOENT')
|
|
@@ -374,12 +380,16 @@ Expectation for required parameters:
|
|
|
374
380
|
return '';
|
|
375
381
|
}
|
|
376
382
|
},
|
|
377
|
-
createUpdatedParams: (oldContent, modifiedProposedContent, originalParams) =>
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
+
createUpdatedParams: (oldContent, modifiedProposedContent, originalParams) => {
|
|
384
|
+
const content = originalParams.new_string;
|
|
385
|
+
return {
|
|
386
|
+
...originalParams,
|
|
387
|
+
ai_proposed_string: content,
|
|
388
|
+
old_string: oldContent,
|
|
389
|
+
new_string: modifiedProposedContent,
|
|
390
|
+
modified_by_user: true,
|
|
391
|
+
};
|
|
392
|
+
},
|
|
383
393
|
};
|
|
384
394
|
}
|
|
385
395
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../src/tools/edit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EACL,QAAQ,EACR,IAAI,EAEJ,uBAAuB,GAKxB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAU,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA0C9C;;GAEG;AACH,MAAM,OAAO,QACX,SAAQ,QAAoC;IAKf;IAF7B,MAAM,CAAU,IAAI,GAAG,SAAS,CAAC;IAEjC,YAA6B,MAAc;QACzC,KAAK,CACH,QAAQ,CAAC,IAAI,EACb,MAAM,EACN,2QAA2Q,YAAY,CAAC,IAAI;;;;;;;;;;gPAUlD,EAC1O,IAAI,CAAC,MAAM,EACX;YACE,UAAU,EAAE;gBACV,SAAS,EAAE;oBACT,WAAW,EACT,+DAA+D;oBACjE,IAAI,EAAE,IAAI,CAAC,MAAM;iBAClB;gBACD,UAAU,EAAE;oBACV,WAAW,EACT,wYAAwY;oBAC1Y,IAAI,EAAE,IAAI,CAAC,MAAM;iBAClB;gBACD,UAAU,EAAE;oBACV,WAAW,EACT,wJAAwJ;oBAC1J,IAAI,EAAE,IAAI,CAAC,MAAM;iBAClB;gBACD,qBAAqB,EAAE;oBACrB,IAAI,EAAE,IAAI,CAAC,MAAM;oBACjB,WAAW,EACT,qHAAqH;oBACvH,OAAO,EAAE,CAAC;iBACX;aACF;YACD,QAAQ,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC;YACnD,IAAI,EAAE,IAAI,CAAC,MAAM;SAClB,CACF,CAAC;QA3CyB,WAAM,GAAN,MAAM,CAAQ;IA4C3C,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,MAAsB;QACvC,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACxE,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,OAAO,+BAA+B,MAAM,CAAC,SAAS,EAAE,CAAC;QAC3D,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAC3D,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9D,MAAM,WAAW,GAAG,gBAAgB,CAAC,cAAc,EAAE,CAAC;YACtD,OAAO,8DAA8D,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChG,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,aAAa,CAAC,MAAsB;QAClC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACtC,CAAC;IAEO,iBAAiB,CACvB,cAA6B,EAC7B,SAAiB,EACjB,SAAiB,EACjB,SAAkB;QAElB,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,4GAA4G;YAC5G,OAAO,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,CAAC;QACD,4EAA4E;QAC5E,IAAI,SAAS,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,OAAO,cAAc,CAAC;QACxB,CAAC;QACD,OAAO,cAAc,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACzD,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,aAAa,CACzB,MAAsB,EACtB,WAAwB;QAExB,MAAM,oBAAoB,GAAG,MAAM,CAAC,qBAAqB,IAAI,CAAC,CAAC;QAC/D,IAAI,cAAc,GAAkB,IAAI,CAAC;QACzC,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC;QACvC,IAAI,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC;QACvC,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,KAAK,GAEO,SAAS,CAAC;QAE1B,IAAI,CAAC;YACH,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC3D,0DAA0D;YAC1D,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YACvD,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC/C,mDAAmD;gBACnD,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC;QAED,IAAI,MAAM,CAAC,UAAU,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5C,sBAAsB;YACtB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;aAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACvB,kEAAkE;YAClE,KAAK,GAAG;gBACN,OAAO,EAAE,kFAAkF;gBAC3F,GAAG,EAAE,mBAAmB,MAAM,CAAC,SAAS,EAAE;gBAC1C,IAAI,EAAE,aAAa,CAAC,cAAc;aACnC,CAAC;QACJ,CAAC;aAAM,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YACnC,2BAA2B;YAC3B,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAC3C,MAAM,CAAC,SAAS,EAChB,cAAc,EACd,MAAM,EACN,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,EAC7B,WAAW,CACZ,CAAC;YACF,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC;YACjD,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC;YACjD,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC;YAExC,IAAI,MAAM,CAAC,UAAU,KAAK,EAAE,EAAE,CAAC;gBAC7B,qDAAqD;gBACrD,KAAK,GAAG;oBACN,OAAO,EAAE,iEAAiE;oBAC1E,GAAG,EAAE,uCAAuC,MAAM,CAAC,SAAS,EAAE;oBAC9D,IAAI,EAAE,aAAa,CAAC,+BAA+B;iBACpD,CAAC;YACJ,CAAC;iBAAM,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;gBAC7B,KAAK,GAAG;oBACN,OAAO,EAAE,uDAAuD;oBAChE,GAAG,EAAE,yDAAyD,MAAM,CAAC,SAAS,mKAAmK,YAAY,CAAC,IAAI,kBAAkB;oBACpR,IAAI,EAAE,aAAa,CAAC,wBAAwB;iBAC7C,CAAC;YACJ,CAAC;iBAAM,IAAI,WAAW,KAAK,oBAAoB,EAAE,CAAC;gBAChD,MAAM,cAAc,GAClB,oBAAoB,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC;gBAE5D,KAAK,GAAG;oBACN,OAAO,EAAE,4BAA4B,oBAAoB,IAAI,cAAc,cAAc,WAAW,GAAG;oBACvG,GAAG,EAAE,4BAA4B,oBAAoB,IAAI,cAAc,cAAc,WAAW,4BAA4B,MAAM,CAAC,SAAS,EAAE;oBAC9I,IAAI,EAAE,aAAa,CAAC,iCAAiC;iBACtD,CAAC;YACJ,CAAC;iBAAM,IAAI,cAAc,KAAK,cAAc,EAAE,CAAC;gBAC7C,KAAK,GAAG;oBACN,OAAO,EAAE,mEAAmE;oBAC5E,GAAG,EAAE,6EAA6E,MAAM,CAAC,SAAS,EAAE;oBACpG,IAAI,EAAE,aAAa,CAAC,cAAc;iBACnC,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,gFAAgF;YAChF,KAAK,GAAG;gBACN,OAAO,EAAE,iCAAiC;gBAC1C,GAAG,EAAE,4CAA4C,MAAM,CAAC,SAAS,EAAE;gBACnE,IAAI,EAAE,aAAa,CAAC,oBAAoB;aACzC,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CACvC,cAAc,EACd,cAAc,EACd,cAAc,EACd,SAAS,CACV,CAAC;QAEF,OAAO;YACL,cAAc;YACd,UAAU;YACV,WAAW;YACX,KAAK;YACL,SAAS;SACV,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,oBAAoB,CACxB,MAAsB,EACtB,WAAwB;QAExB,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,YAAY,CAAC,SAAS,EAAE,CAAC;YAC7D,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CACX,sEAAsE,eAAe,EAAE,CACxF,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,QAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;YACjD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,UAAU,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAC/B,QAAQ,EACR,QAAQ,CAAC,cAAc,IAAI,EAAE,EAC7B,QAAQ,CAAC,UAAU,EACnB,SAAS,EACT,UAAU,EACV,oBAAoB,CACrB,CAAC;QACF,MAAM,mBAAmB,GAAgC;YACvD,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,iBAAiB,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE;YACjG,QAAQ;YACR,QAAQ;YACR,eAAe,EAAE,QAAQ,CAAC,cAAc;YACxC,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,SAAS,EAAE,KAAK,EAAE,OAAgC,EAAE,EAAE;gBACpD,IAAI,OAAO,KAAK,uBAAuB,CAAC,aAAa,EAAE,CAAC;oBACtD,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;SACF,CAAC;QACF,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,cAAc,CAAC,MAAsB;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAClE,OAAO,sDAAsD,CAAC;QAChE,CAAC;QACD,MAAM,YAAY,GAAG,YAAY,CAC/B,MAAM,CAAC,SAAS,EAChB,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAC3B,CAAC;QACF,IAAI,MAAM,CAAC,UAAU,KAAK,EAAE,EAAE,CAAC;YAC7B,OAAO,UAAU,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/C,CAAC;QAED,MAAM,gBAAgB,GACpB,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;YACjD,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/C,MAAM,gBAAgB,GACpB,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;YACjD,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAE/C,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;YAC5C,OAAO,sBAAsB,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3D,CAAC;QACD,OAAO,GAAG,WAAW,CAAC,YAAY,CAAC,KAAK,gBAAgB,OAAO,gBAAgB,EAAE,CAAC;IACpF,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,OAAO,CACX,MAAsB,EACtB,MAAmB;QAEnB,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxD,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO;gBACL,UAAU,EAAE,+CAA+C,eAAe,EAAE;gBAC5E,aAAa,EAAE,UAAU,eAAe,EAAE;gBAC1C,KAAK,EAAE;oBACL,OAAO,EAAE,eAAe;oBACxB,IAAI,EAAE,aAAa,CAAC,mBAAmB;iBACxC;aACF,CAAC;QACJ,CAAC;QAED,IAAI,QAAwB,CAAC;QAC7B,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,OAAO;gBACL,UAAU,EAAE,yBAAyB,QAAQ,EAAE;gBAC/C,aAAa,EAAE,yBAAyB,QAAQ,EAAE;gBAClD,KAAK,EAAE;oBACL,OAAO,EAAE,QAAQ;oBACjB,IAAI,EAAE,aAAa,CAAC,wBAAwB;iBAC7C;aACF,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO;gBACL,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG;gBAC9B,aAAa,EAAE,UAAU,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE;gBACjD,KAAK,EAAE;oBACL,OAAO,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG;oBAC3B,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI;iBAC1B;aACF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpD,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAEhE,IAAI,aAAgC,CAAC;YACrC,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;gBACvB,aAAa,GAAG,WAAW,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC;YACvG,CAAC;iBAAM,CAAC;gBACN,gFAAgF;gBAChF,uDAAuD;gBACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAC/B,QAAQ,EACR,QAAQ,CAAC,cAAc,IAAI,EAAE,EAAE,2CAA2C;gBAC1E,QAAQ,CAAC,UAAU,EACnB,SAAS,EACT,UAAU,EACV,oBAAoB,CACrB,CAAC;gBACF,aAAa,GAAG;oBACd,QAAQ;oBACR,QAAQ;oBACR,eAAe,EAAE,QAAQ,CAAC,cAAc;oBACxC,UAAU,EAAE,QAAQ,CAAC,UAAU;iBAChC,CAAC;YACJ,CAAC;YAED,MAAM,sBAAsB,GAAG;gBAC7B,QAAQ,CAAC,SAAS;oBAChB,CAAC,CAAC,qBAAqB,MAAM,CAAC,SAAS,yBAAyB;oBAChE,CAAC,CAAC,+BAA+B,MAAM,CAAC,SAAS,KAAK,QAAQ,CAAC,WAAW,iBAAiB;aAC9F,CAAC;YACF,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC5B,sBAAsB,CAAC,IAAI,CACzB,mDAAmD,MAAM,CAAC,UAAU,GAAG,CACxE,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,UAAU,EAAE,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC5C,aAAa,EAAE,aAAa;aAC7B,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACxE,OAAO;gBACL,UAAU,EAAE,yBAAyB,QAAQ,EAAE;gBAC/C,aAAa,EAAE,uBAAuB,QAAQ,EAAE;gBAChD,KAAK,EAAE;oBACL,OAAO,EAAE,QAAQ;oBACjB,IAAI,EAAE,aAAa,CAAC,kBAAkB;iBACvC;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,4BAA4B,CAAC,QAAgB;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,gBAAgB,CAAC,CAAc;QAC7B,OAAO;YACL,WAAW,EAAE,CAAC,MAAsB,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS;YACzD,iBAAiB,EAAE,KAAK,EAAE,MAAsB,EAAmB,EAAE;gBACnE,IAAI,CAAC;oBACH,OAAO,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBACnD,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;wBAAE,MAAM,GAAG,CAAC;oBAC1D,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YACD,kBAAkB,EAAE,KAAK,EAAE,MAAsB,EAAmB,EAAE;gBACpE,IAAI,CAAC;oBACH,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;oBACjE,OAAO,IAAI,CAAC,iBAAiB,CAC3B,cAAc,EACd,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,KAAK,EAAE,IAAI,cAAc,KAAK,EAAE,CAClD,CAAC;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;wBAAE,MAAM,GAAG,CAAC;oBAC1D,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YACD,mBAAmB,EAAE,CACnB,UAAkB,EAClB,uBAA+B,EAC/B,cAA8B,EACd,EAAE,CAAC,CAAC;gBACpB,GAAG,cAAc;gBACjB,UAAU,EAAE,UAAU;gBACtB,UAAU,EAAE,uBAAuB;gBACnC,gBAAgB,EAAE,IAAI;aACvB,CAAC;SACH,CAAC;IACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../src/tools/edit.ts"],"names":[],"mappings":"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"}
|