@google/gemini-cli-core 0.1.17 → 0.1.18-nightly.250810.c632ec8b

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.
Files changed (251) hide show
  1. package/README.md +11 -1
  2. package/dist/google-gemini-cli-core-0.1.18.tgz +0 -0
  3. package/dist/src/code_assist/converter.d.ts +2 -1
  4. package/dist/src/code_assist/converter.js +1 -1
  5. package/dist/src/code_assist/converter.js.map +1 -1
  6. package/dist/src/code_assist/converter.test.js +48 -1
  7. package/dist/src/code_assist/converter.test.js.map +1 -1
  8. package/dist/src/code_assist/oauth2.js +1 -1
  9. package/dist/src/code_assist/oauth2.js.map +1 -1
  10. package/dist/src/code_assist/server.test.js +4 -1
  11. package/dist/src/code_assist/server.test.js.map +1 -1
  12. package/dist/src/config/config.d.ts +24 -4
  13. package/dist/src/config/config.js +53 -8
  14. package/dist/src/config/config.js.map +1 -1
  15. package/dist/src/config/config.test.js +8 -2
  16. package/dist/src/config/config.test.js.map +1 -1
  17. package/dist/src/config/flashFallback.test.js +0 -4
  18. package/dist/src/config/flashFallback.test.js.map +1 -1
  19. package/dist/src/core/client.d.ts +0 -2
  20. package/dist/src/core/client.js +9 -84
  21. package/dist/src/core/client.js.map +1 -1
  22. package/dist/src/core/client.test.js +7 -2
  23. package/dist/src/core/client.test.js.map +1 -1
  24. package/dist/src/core/contentGenerator.js +3 -2
  25. package/dist/src/core/contentGenerator.js.map +1 -1
  26. package/dist/src/core/contentGenerator.test.js +3 -2
  27. package/dist/src/core/contentGenerator.test.js.map +1 -1
  28. package/dist/src/core/coreToolScheduler.d.ts +23 -8
  29. package/dist/src/core/coreToolScheduler.js +173 -62
  30. package/dist/src/core/coreToolScheduler.js.map +1 -1
  31. package/dist/src/core/coreToolScheduler.test.js +185 -37
  32. package/dist/src/core/coreToolScheduler.test.js.map +1 -1
  33. package/dist/src/core/geminiChat.d.ts +7 -6
  34. package/dist/src/core/geminiChat.js +43 -43
  35. package/dist/src/core/geminiChat.js.map +1 -1
  36. package/dist/src/core/logger.d.ts +1 -0
  37. package/dist/src/core/logger.js +18 -0
  38. package/dist/src/core/logger.js.map +1 -1
  39. package/dist/src/core/logger.test.js +29 -0
  40. package/dist/src/core/logger.test.js.map +1 -1
  41. package/dist/src/core/loggingContentGenerator.d.ts +24 -0
  42. package/dist/src/core/loggingContentGenerator.js +89 -0
  43. package/dist/src/core/loggingContentGenerator.js.map +1 -0
  44. package/dist/src/core/nonInteractiveToolExecutor.js +20 -1
  45. package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
  46. package/dist/src/core/nonInteractiveToolExecutor.test.js +7 -31
  47. package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
  48. package/dist/src/core/subagent.d.ts +230 -0
  49. package/dist/src/core/subagent.js +447 -0
  50. package/dist/src/core/subagent.js.map +1 -0
  51. package/dist/src/core/subagent.test.d.ts +6 -0
  52. package/dist/src/core/subagent.test.js +515 -0
  53. package/dist/src/core/subagent.test.js.map +1 -0
  54. package/dist/src/core/turn.js +1 -0
  55. package/dist/src/core/turn.js.map +1 -1
  56. package/dist/src/core/turn.test.js +4 -0
  57. package/dist/src/core/turn.test.js.map +1 -1
  58. package/dist/src/ide/ide-client.d.ts +27 -11
  59. package/dist/src/ide/ide-client.js +178 -62
  60. package/dist/src/ide/ide-client.js.map +1 -1
  61. package/dist/src/ide/ideContext.d.ts +95 -0
  62. package/dist/src/ide/ideContext.js +45 -0
  63. package/dist/src/ide/ideContext.js.map +1 -1
  64. package/dist/src/index.d.ts +1 -0
  65. package/dist/src/index.js +1 -0
  66. package/dist/src/index.js.map +1 -1
  67. package/dist/src/mcp/oauth-provider.d.ts +1 -0
  68. package/dist/src/mcp/oauth-provider.js +14 -1
  69. package/dist/src/mcp/oauth-provider.js.map +1 -1
  70. package/dist/src/mcp/oauth-provider.test.js +87 -6
  71. package/dist/src/mcp/oauth-provider.test.js.map +1 -1
  72. package/dist/src/prompts/prompt-registry.d.ts +8 -0
  73. package/dist/src/prompts/prompt-registry.js +16 -0
  74. package/dist/src/prompts/prompt-registry.js.map +1 -1
  75. package/dist/src/services/loopDetectionService.js +10 -6
  76. package/dist/src/services/loopDetectionService.js.map +1 -1
  77. package/dist/src/services/loopDetectionService.test.js +139 -0
  78. package/dist/src/services/loopDetectionService.test.js.map +1 -1
  79. package/dist/src/services/shellExecutionService.js +29 -9
  80. package/dist/src/services/shellExecutionService.js.map +1 -1
  81. package/dist/src/services/shellExecutionService.test.js +8 -0
  82. package/dist/src/services/shellExecutionService.test.js.map +1 -1
  83. package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +28 -3
  84. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +184 -51
  85. package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
  86. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +6 -0
  87. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +186 -0
  88. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -0
  89. package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +6 -1
  90. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +13 -0
  91. package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
  92. package/dist/src/telemetry/constants.d.ts +1 -0
  93. package/dist/src/telemetry/constants.js +1 -0
  94. package/dist/src/telemetry/constants.js.map +1 -1
  95. package/dist/src/telemetry/loggers.d.ts +2 -1
  96. package/dist/src/telemetry/loggers.js +17 -1
  97. package/dist/src/telemetry/loggers.js.map +1 -1
  98. package/dist/src/telemetry/loggers.test.circular.js +7 -2
  99. package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
  100. package/dist/src/telemetry/loggers.test.js +7 -2
  101. package/dist/src/telemetry/loggers.test.js.map +1 -1
  102. package/dist/src/telemetry/metrics.d.ts +3 -2
  103. package/dist/src/telemetry/metrics.js +7 -1
  104. package/dist/src/telemetry/metrics.js.map +1 -1
  105. package/dist/src/telemetry/metrics.test.js +50 -0
  106. package/dist/src/telemetry/metrics.test.js.map +1 -1
  107. package/dist/src/telemetry/telemetry.test.js +0 -2
  108. package/dist/src/telemetry/telemetry.test.js.map +1 -1
  109. package/dist/src/telemetry/tool-call-decision.d.ts +13 -0
  110. package/dist/src/telemetry/tool-call-decision.js +29 -0
  111. package/dist/src/telemetry/tool-call-decision.js.map +1 -0
  112. package/dist/src/telemetry/types.d.ts +15 -8
  113. package/dist/src/telemetry/types.js +32 -21
  114. package/dist/src/telemetry/types.js.map +1 -1
  115. package/dist/src/telemetry/uiTelemetry.d.ts +4 -1
  116. package/dist/src/telemetry/uiTelemetry.js +3 -1
  117. package/dist/src/telemetry/uiTelemetry.js.map +1 -1
  118. package/dist/src/telemetry/uiTelemetry.test.js +13 -2
  119. package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
  120. package/dist/src/test-utils/tools.d.ts +23 -0
  121. package/dist/src/test-utils/tools.js +41 -0
  122. package/dist/src/test-utils/tools.js.map +1 -0
  123. package/dist/src/tools/diffOptions.d.ts +2 -0
  124. package/dist/src/tools/diffOptions.js +28 -0
  125. package/dist/src/tools/diffOptions.js.map +1 -1
  126. package/dist/src/tools/diffOptions.test.d.ts +6 -0
  127. package/dist/src/tools/diffOptions.test.js +119 -0
  128. package/dist/src/tools/diffOptions.test.js.map +1 -0
  129. package/dist/src/tools/edit.d.ts +9 -33
  130. package/dist/src/tools/edit.js +143 -131
  131. package/dist/src/tools/edit.js.map +1 -1
  132. package/dist/src/tools/edit.test.js +117 -51
  133. package/dist/src/tools/edit.test.js.map +1 -1
  134. package/dist/src/tools/glob.d.ts +3 -10
  135. package/dist/src/tools/glob.js +85 -88
  136. package/dist/src/tools/glob.js.map +1 -1
  137. package/dist/src/tools/glob.test.js +22 -12
  138. package/dist/src/tools/glob.test.js.map +1 -1
  139. package/dist/src/tools/grep.d.ts +3 -35
  140. package/dist/src/tools/grep.js +111 -82
  141. package/dist/src/tools/grep.js.map +1 -1
  142. package/dist/src/tools/grep.test.js +40 -23
  143. package/dist/src/tools/grep.test.js.map +1 -1
  144. package/dist/src/tools/mcp-client.d.ts +14 -3
  145. package/dist/src/tools/mcp-client.js +85 -6
  146. package/dist/src/tools/mcp-client.js.map +1 -1
  147. package/dist/src/tools/mcp-client.test.js +372 -11
  148. package/dist/src/tools/mcp-client.test.js.map +1 -1
  149. package/dist/src/tools/mcp-tool.js +104 -45
  150. package/dist/src/tools/mcp-tool.js.map +1 -1
  151. package/dist/src/tools/mcp-tool.test.js +280 -2
  152. package/dist/src/tools/mcp-tool.test.js.map +1 -1
  153. package/dist/src/tools/memoryTool.d.ts +2 -2
  154. package/dist/src/tools/memoryTool.js +1 -0
  155. package/dist/src/tools/memoryTool.js.map +1 -1
  156. package/dist/src/tools/modifiable-tool.d.ts +9 -6
  157. package/dist/src/tools/modifiable-tool.js +6 -3
  158. package/dist/src/tools/modifiable-tool.js.map +1 -1
  159. package/dist/src/tools/modifiable-tool.test.js +12 -12
  160. package/dist/src/tools/modifiable-tool.test.js.map +1 -1
  161. package/dist/src/tools/read-file.d.ts +4 -6
  162. package/dist/src/tools/read-file.js +87 -39
  163. package/dist/src/tools/read-file.js.map +1 -1
  164. package/dist/src/tools/read-file.test.js +192 -130
  165. package/dist/src/tools/read-file.test.js.map +1 -1
  166. package/dist/src/tools/read-many-files.js +84 -34
  167. package/dist/src/tools/read-many-files.js.map +1 -1
  168. package/dist/src/tools/read-many-files.test.js +107 -0
  169. package/dist/src/tools/read-many-files.test.js.map +1 -1
  170. package/dist/src/tools/shell.js +6 -1
  171. package/dist/src/tools/shell.js.map +1 -1
  172. package/dist/src/tools/shell.test.js +21 -0
  173. package/dist/src/tools/shell.test.js.map +1 -1
  174. package/dist/src/tools/tool-error.d.ts +4 -0
  175. package/dist/src/tools/tool-error.js +4 -0
  176. package/dist/src/tools/tool-error.js.map +1 -1
  177. package/dist/src/tools/tool-registry.d.ts +12 -5
  178. package/dist/src/tools/tool-registry.js +31 -14
  179. package/dist/src/tools/tool-registry.js.map +1 -1
  180. package/dist/src/tools/tool-registry.test.js +7 -22
  181. package/dist/src/tools/tool-registry.test.js.map +1 -1
  182. package/dist/src/tools/tools.d.ts +140 -39
  183. package/dist/src/tools/tools.js +180 -10
  184. package/dist/src/tools/tools.js.map +1 -1
  185. package/dist/src/tools/tools.test.d.ts +6 -0
  186. package/dist/src/tools/tools.test.js +117 -0
  187. package/dist/src/tools/tools.test.js.map +1 -0
  188. package/dist/src/tools/write-file.d.ts +6 -2
  189. package/dist/src/tools/write-file.js +81 -15
  190. package/dist/src/tools/write-file.js.map +1 -1
  191. package/dist/src/tools/write-file.test.js +113 -8
  192. package/dist/src/tools/write-file.test.js.map +1 -1
  193. package/dist/src/utils/bfsFileSearch.test.js +28 -56
  194. package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
  195. package/dist/src/utils/editor.d.ts +1 -1
  196. package/dist/src/utils/editor.js +13 -5
  197. package/dist/src/utils/editor.js.map +1 -1
  198. package/dist/src/utils/editor.test.js +38 -6
  199. package/dist/src/utils/editor.test.js.map +1 -1
  200. package/dist/src/utils/environmentContext.d.ts +21 -0
  201. package/dist/src/utils/environmentContext.js +90 -0
  202. package/dist/src/utils/environmentContext.js.map +1 -0
  203. package/dist/src/utils/environmentContext.test.d.ts +6 -0
  204. package/dist/src/utils/environmentContext.test.js +139 -0
  205. package/dist/src/utils/environmentContext.test.js.map +1 -0
  206. package/dist/src/utils/fileUtils.d.ts +7 -0
  207. package/dist/src/utils/fileUtils.js +16 -13
  208. package/dist/src/utils/fileUtils.js.map +1 -1
  209. package/dist/src/utils/fileUtils.test.js +18 -4
  210. package/dist/src/utils/fileUtils.test.js.map +1 -1
  211. package/dist/src/utils/filesearch/crawlCache.d.ts +25 -0
  212. package/dist/src/utils/filesearch/crawlCache.js +57 -0
  213. package/dist/src/utils/filesearch/crawlCache.js.map +1 -0
  214. package/dist/src/utils/filesearch/crawlCache.test.d.ts +6 -0
  215. package/dist/src/utils/filesearch/crawlCache.test.js +103 -0
  216. package/dist/src/utils/filesearch/crawlCache.test.js.map +1 -0
  217. package/dist/src/utils/filesearch/fileSearch.d.ts +81 -0
  218. package/dist/src/utils/filesearch/fileSearch.js +241 -0
  219. package/dist/src/utils/filesearch/fileSearch.js.map +1 -0
  220. package/dist/src/utils/filesearch/fileSearch.test.d.ts +6 -0
  221. package/dist/src/utils/filesearch/fileSearch.test.js +654 -0
  222. package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -0
  223. package/dist/src/utils/filesearch/ignore.d.ts +35 -0
  224. package/dist/src/utils/filesearch/ignore.js +81 -0
  225. package/dist/src/utils/filesearch/ignore.js.map +1 -0
  226. package/dist/src/utils/filesearch/ignore.test.d.ts +6 -0
  227. package/dist/src/utils/filesearch/ignore.test.js +57 -0
  228. package/dist/src/utils/filesearch/ignore.test.js.map +1 -0
  229. package/dist/src/utils/filesearch/result-cache.d.ts +34 -0
  230. package/dist/src/utils/filesearch/result-cache.js +61 -0
  231. package/dist/src/utils/filesearch/result-cache.js.map +1 -0
  232. package/dist/src/utils/filesearch/result-cache.test.d.ts +6 -0
  233. package/dist/src/utils/filesearch/result-cache.test.js +47 -0
  234. package/dist/src/utils/filesearch/result-cache.test.js.map +1 -0
  235. package/dist/src/utils/flashFallback.integration.test.js +0 -2
  236. package/dist/src/utils/flashFallback.integration.test.js.map +1 -1
  237. package/dist/src/utils/memoryDiscovery.d.ts +1 -1
  238. package/dist/src/utils/memoryDiscovery.js +22 -7
  239. package/dist/src/utils/memoryDiscovery.js.map +1 -1
  240. package/dist/src/utils/memoryDiscovery.test.js +30 -71
  241. package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
  242. package/dist/src/utils/nextSpeakerChecker.js +2 -2
  243. package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
  244. package/dist/src/utils/nextSpeakerChecker.test.js +2 -2
  245. package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
  246. package/dist/src/utils/workspaceContext.d.ts +4 -0
  247. package/dist/src/utils/workspaceContext.js +33 -0
  248. package/dist/src/utils/workspaceContext.js.map +1 -1
  249. package/dist/tsconfig.tsbuildinfo +1 -1
  250. package/package.json +7 -1
  251. package/dist/google-gemini-cli-core-0.1.16.tgz +0 -0
@@ -3,10 +3,117 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+ /**
7
+ * A convenience base class for ToolInvocation.
8
+ */
9
+ export class BaseToolInvocation {
10
+ params;
11
+ constructor(params) {
12
+ this.params = params;
13
+ }
14
+ toolLocations() {
15
+ return [];
16
+ }
17
+ shouldConfirmExecute(_abortSignal) {
18
+ return Promise.resolve(false);
19
+ }
20
+ }
21
+ /**
22
+ * An adapter that wraps the legacy `Tool` interface to make it compatible
23
+ * with the new `ToolInvocation` pattern.
24
+ */
25
+ export class LegacyToolInvocation {
26
+ legacyTool;
27
+ params;
28
+ constructor(legacyTool, params) {
29
+ this.legacyTool = legacyTool;
30
+ this.params = params;
31
+ }
32
+ getDescription() {
33
+ return this.legacyTool.getDescription(this.params);
34
+ }
35
+ toolLocations() {
36
+ return this.legacyTool.toolLocations(this.params);
37
+ }
38
+ shouldConfirmExecute(abortSignal) {
39
+ return this.legacyTool.shouldConfirmExecute(this.params, abortSignal);
40
+ }
41
+ execute(signal, updateOutput) {
42
+ return this.legacyTool.execute(this.params, signal, updateOutput);
43
+ }
44
+ }
45
+ /**
46
+ * New base class for tools that separates validation from execution.
47
+ * New tools should extend this class.
48
+ */
49
+ export class DeclarativeTool {
50
+ name;
51
+ displayName;
52
+ description;
53
+ icon;
54
+ parameterSchema;
55
+ isOutputMarkdown;
56
+ canUpdateOutput;
57
+ constructor(name, displayName, description, icon, parameterSchema, isOutputMarkdown = true, canUpdateOutput = false) {
58
+ this.name = name;
59
+ this.displayName = displayName;
60
+ this.description = description;
61
+ this.icon = icon;
62
+ this.parameterSchema = parameterSchema;
63
+ this.isOutputMarkdown = isOutputMarkdown;
64
+ this.canUpdateOutput = canUpdateOutput;
65
+ }
66
+ get schema() {
67
+ return {
68
+ name: this.name,
69
+ description: this.description,
70
+ parameters: this.parameterSchema,
71
+ };
72
+ }
73
+ /**
74
+ * Validates the raw tool parameters.
75
+ * Subclasses should override this to add custom validation logic
76
+ * beyond the JSON schema check.
77
+ * @param params The raw parameters from the model.
78
+ * @returns An error message string if invalid, null otherwise.
79
+ */
80
+ validateToolParams(_params) {
81
+ // Base implementation can be extended by subclasses.
82
+ return null;
83
+ }
84
+ /**
85
+ * A convenience method that builds and executes the tool in one step.
86
+ * Throws an error if validation fails.
87
+ * @param params The raw, untrusted parameters from the model.
88
+ * @param signal AbortSignal for tool cancellation.
89
+ * @param updateOutput Optional callback to stream output.
90
+ * @returns The result of the tool execution.
91
+ */
92
+ async buildAndExecute(params, signal, updateOutput) {
93
+ const invocation = this.build(params);
94
+ return invocation.execute(signal, updateOutput);
95
+ }
96
+ }
97
+ /**
98
+ * New base class for declarative tools that separates validation from execution.
99
+ * New tools should extend this class, which provides a `build` method that
100
+ * validates parameters before deferring to a `createInvocation` method for
101
+ * the final `ToolInvocation` object instantiation.
102
+ */
103
+ export class BaseDeclarativeTool extends DeclarativeTool {
104
+ build(params) {
105
+ const validationError = this.validateToolParams(params);
106
+ if (validationError) {
107
+ throw new Error(validationError);
108
+ }
109
+ return this.createInvocation(params);
110
+ }
111
+ }
6
112
  /**
7
113
  * Base implementation for tools with common functionality
114
+ * @deprecated Use `DeclarativeTool` for new tools.
8
115
  */
9
- export class BaseTool {
116
+ export class BaseTool extends DeclarativeTool {
10
117
  name;
11
118
  displayName;
12
119
  description;
@@ -24,6 +131,7 @@ export class BaseTool {
24
131
  * @param parameterSchema Open API 3.0 Schema defining the parameters
25
132
  */
26
133
  constructor(name, displayName, description, icon, parameterSchema, isOutputMarkdown = true, canUpdateOutput = false) {
134
+ super(name, displayName, description, icon, parameterSchema, isOutputMarkdown, canUpdateOutput);
27
135
  this.name = name;
28
136
  this.displayName = displayName;
29
137
  this.description = description;
@@ -32,15 +140,12 @@ export class BaseTool {
32
140
  this.isOutputMarkdown = isOutputMarkdown;
33
141
  this.canUpdateOutput = canUpdateOutput;
34
142
  }
35
- /**
36
- * Function declaration schema computed from name, description, and parameterSchema
37
- */
38
- get schema() {
39
- return {
40
- name: this.name,
41
- description: this.description,
42
- parameters: this.parameterSchema,
43
- };
143
+ build(params) {
144
+ const validationError = this.validateToolParams(params);
145
+ if (validationError) {
146
+ throw new Error(validationError);
147
+ }
148
+ return new LegacyToolInvocation(this, params);
44
149
  }
45
150
  /**
46
151
  * Validates the parameters for the tool
@@ -88,6 +193,71 @@ export class BaseTool {
88
193
  return [];
89
194
  }
90
195
  }
196
+ /**
197
+ * Detects cycles in a JSON schemas due to `$ref`s.
198
+ * @param schema The root of the JSON schema.
199
+ * @returns `true` if a cycle is detected, `false` otherwise.
200
+ */
201
+ export function hasCycleInSchema(schema) {
202
+ function resolveRef(ref) {
203
+ if (!ref.startsWith('#/')) {
204
+ return null;
205
+ }
206
+ const path = ref.substring(2).split('/');
207
+ let current = schema;
208
+ for (const segment of path) {
209
+ if (typeof current !== 'object' ||
210
+ current === null ||
211
+ !Object.prototype.hasOwnProperty.call(current, segment)) {
212
+ return null;
213
+ }
214
+ current = current[segment];
215
+ }
216
+ return current;
217
+ }
218
+ function traverse(node, visitedRefs, pathRefs) {
219
+ if (typeof node !== 'object' || node === null) {
220
+ return false;
221
+ }
222
+ if (Array.isArray(node)) {
223
+ for (const item of node) {
224
+ if (traverse(item, visitedRefs, pathRefs)) {
225
+ return true;
226
+ }
227
+ }
228
+ return false;
229
+ }
230
+ if ('$ref' in node && typeof node.$ref === 'string') {
231
+ const ref = node.$ref;
232
+ if (ref === '#/' || pathRefs.has(ref)) {
233
+ // A ref to just '#/' is always a cycle.
234
+ return true; // Cycle detected!
235
+ }
236
+ if (visitedRefs.has(ref)) {
237
+ return false; // Bail early, we have checked this ref before.
238
+ }
239
+ const resolvedNode = resolveRef(ref);
240
+ if (resolvedNode) {
241
+ // Add it to both visited and the current path
242
+ visitedRefs.add(ref);
243
+ pathRefs.add(ref);
244
+ const hasCycle = traverse(resolvedNode, visitedRefs, pathRefs);
245
+ pathRefs.delete(ref); // Backtrack, leaving it in visited
246
+ return hasCycle;
247
+ }
248
+ }
249
+ // Crawl all the properties of node
250
+ for (const key in node) {
251
+ if (Object.prototype.hasOwnProperty.call(node, key)) {
252
+ if (traverse(node[key], visitedRefs, pathRefs)) {
253
+ return true;
254
+ }
255
+ }
256
+ }
257
+ return false;
258
+ }
259
+ return traverse(schema, new Set(), new Set());
260
+ }
91
261
  export var ToolConfirmationOutcome;
92
262
  (function (ToolConfirmationOutcome) {
93
263
  ToolConfirmationOutcome["ProceedOnce"] = "proceed_once";
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/tools/tools.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA6FH;;GAEG;AACH,MAAM,OAAgB,QAAQ;IAejB;IACA;IACA;IACA;IACA;IACA;IACA;IAhBX;;;;;;;;OAQG;IACH,YACW,IAAY,EACZ,WAAmB,EACnB,WAAmB,EACnB,IAAU,EACV,eAAuB,EACvB,mBAA4B,IAAI,EAChC,kBAA2B,KAAK;QANhC,SAAI,GAAJ,IAAI,CAAQ;QACZ,gBAAW,GAAX,WAAW,CAAQ;QACnB,gBAAW,GAAX,WAAW,CAAQ;QACnB,SAAI,GAAJ,IAAI,CAAM;QACV,oBAAe,GAAf,eAAe,CAAQ;QACvB,qBAAgB,GAAhB,gBAAgB,CAAgB;QAChC,oBAAe,GAAf,eAAe,CAAiB;IACxC,CAAC;IAEJ;;OAEG;IACH,IAAI,MAAM;QACR,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,eAAe;SACjC,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACH,6DAA6D;IAC7D,kBAAkB,CAAC,MAAe;QAChC,6DAA6D;QAC7D,sEAAsE;QACtE,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,MAAe;QAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,oBAAoB;IAClB,6DAA6D;IAC7D,MAAe;IACf,6DAA6D;IAC7D,WAAwB;QAExB,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,aAAa;IACX,6DAA6D;IAC7D,MAAe;QAEf,OAAO,EAAE,CAAC;IACZ,CAAC;CAcF;AA4FD,MAAM,CAAN,IAAY,uBAOX;AAPD,WAAY,uBAAuB;IACjC,uDAA4B,CAAA;IAC5B,2DAAgC,CAAA;IAChC,wEAA6C,CAAA;IAC7C,oEAAyC,CAAA;IACzC,kEAAuC,CAAA;IACvC,4CAAiB,CAAA;AACnB,CAAC,EAPW,uBAAuB,KAAvB,uBAAuB,QAOlC;AAED,MAAM,CAAN,IAAY,IASX;AATD,WAAY,IAAI;IACd,iCAAyB,CAAA;IACzB,yBAAiB,CAAA;IACjB,uBAAe,CAAA;IACf,yBAAiB,CAAA;IACjB,+BAAuB,CAAA;IACvB,yBAAiB,CAAA;IACjB,uBAAe,CAAA;IACf,6BAAqB,CAAA;AACvB,CAAC,EATW,IAAI,KAAJ,IAAI,QASf"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/tools/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export {};
@@ -0,0 +1,117 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { describe, it, expect } from 'vitest';
7
+ import { hasCycleInSchema } from './tools.js'; // Added getStringifiedResultForDisplay
8
+ describe('hasCycleInSchema', () => {
9
+ it('should detect a simple direct cycle', () => {
10
+ const schema = {
11
+ properties: {
12
+ data: {
13
+ $ref: '#/properties/data',
14
+ },
15
+ },
16
+ };
17
+ expect(hasCycleInSchema(schema)).toBe(true);
18
+ });
19
+ it('should detect a cycle from object properties referencing parent properties', () => {
20
+ const schema = {
21
+ type: 'object',
22
+ properties: {
23
+ data: {
24
+ type: 'object',
25
+ properties: {
26
+ child: { $ref: '#/properties/data' },
27
+ },
28
+ },
29
+ },
30
+ };
31
+ expect(hasCycleInSchema(schema)).toBe(true);
32
+ });
33
+ it('should detect a cycle from array items referencing parent properties', () => {
34
+ const schema = {
35
+ type: 'object',
36
+ properties: {
37
+ data: {
38
+ type: 'array',
39
+ items: {
40
+ type: 'object',
41
+ properties: {
42
+ child: { $ref: '#/properties/data/items' },
43
+ },
44
+ },
45
+ },
46
+ },
47
+ };
48
+ expect(hasCycleInSchema(schema)).toBe(true);
49
+ });
50
+ it('should detect a cycle between sibling properties', () => {
51
+ const schema = {
52
+ type: 'object',
53
+ properties: {
54
+ a: {
55
+ type: 'object',
56
+ properties: {
57
+ child: { $ref: '#/properties/b' },
58
+ },
59
+ },
60
+ b: {
61
+ type: 'object',
62
+ properties: {
63
+ child: { $ref: '#/properties/a' },
64
+ },
65
+ },
66
+ },
67
+ };
68
+ expect(hasCycleInSchema(schema)).toBe(true);
69
+ });
70
+ it('should not detect a cycle in a valid schema', () => {
71
+ const schema = {
72
+ type: 'object',
73
+ properties: {
74
+ name: { type: 'string' },
75
+ address: { $ref: '#/definitions/address' },
76
+ },
77
+ definitions: {
78
+ address: {
79
+ type: 'object',
80
+ properties: {
81
+ street: { type: 'string' },
82
+ city: { type: 'string' },
83
+ },
84
+ },
85
+ },
86
+ };
87
+ expect(hasCycleInSchema(schema)).toBe(false);
88
+ });
89
+ it('should handle non-cyclic sibling refs', () => {
90
+ const schema = {
91
+ properties: {
92
+ a: { $ref: '#/definitions/stringDef' },
93
+ b: { $ref: '#/definitions/stringDef' },
94
+ },
95
+ definitions: {
96
+ stringDef: { type: 'string' },
97
+ },
98
+ };
99
+ expect(hasCycleInSchema(schema)).toBe(false);
100
+ });
101
+ it('should handle nested but not cyclic refs', () => {
102
+ const schema = {
103
+ properties: {
104
+ a: { $ref: '#/definitions/defA' },
105
+ },
106
+ definitions: {
107
+ defA: { properties: { b: { $ref: '#/definitions/defB' } } },
108
+ defB: { type: 'string' },
109
+ },
110
+ };
111
+ expect(hasCycleInSchema(schema)).toBe(false);
112
+ });
113
+ it('should return false for an empty schema', () => {
114
+ expect(hasCycleInSchema({})).toBe(false);
115
+ });
116
+ });
117
+ //# sourceMappingURL=tools.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../../../src/tools/tools.test.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { Config } from '../config/config.js';
7
7
  import { BaseTool, ToolResult, ToolCallConfirmationDetails } from './tools.js';
8
- import { ModifiableTool, ModifyContext } from './modifiable-tool.js';
8
+ import { ModifiableDeclarativeTool, ModifyContext } from './modifiable-tool.js';
9
9
  /**
10
10
  * Parameters for the WriteFile tool
11
11
  */
@@ -22,11 +22,15 @@ export interface WriteFileToolParams {
22
22
  * Whether the proposed content was modified by the user.
23
23
  */
24
24
  modified_by_user?: boolean;
25
+ /**
26
+ * Initially proposed content.
27
+ */
28
+ ai_proposed_content?: string;
25
29
  }
26
30
  /**
27
31
  * Implementation of the WriteFile tool logic
28
32
  */
29
- export declare class WriteFileTool extends BaseTool<WriteFileToolParams, ToolResult> implements ModifiableTool<WriteFileToolParams> {
33
+ export declare class WriteFileTool extends BaseTool<WriteFileToolParams, ToolResult> implements ModifiableDeclarativeTool<WriteFileToolParams> {
30
34
  private readonly config;
31
35
  static readonly Name: string;
32
36
  constructor(config: Config);
@@ -8,14 +8,16 @@ import path from 'path';
8
8
  import * as Diff from 'diff';
9
9
  import { ApprovalMode } from '../config/config.js';
10
10
  import { BaseTool, ToolConfirmationOutcome, Icon, } from './tools.js';
11
+ import { ToolErrorType } from './tool-error.js';
11
12
  import { Type } from '@google/genai';
12
13
  import { SchemaValidator } from '../utils/schemaValidator.js';
13
14
  import { makeRelative, shortenPath } from '../utils/paths.js';
14
15
  import { getErrorMessage, isNodeError } from '../utils/errors.js';
15
16
  import { ensureCorrectEdit, ensureCorrectFileContent, } from '../utils/editCorrector.js';
16
- import { DEFAULT_DIFF_OPTIONS } from './diffOptions.js';
17
+ import { DEFAULT_DIFF_OPTIONS, getDiffStat } from './diffOptions.js';
17
18
  import { getSpecificMimeType } from '../utils/fileUtils.js';
18
19
  import { recordFileOperationMetric, FileOperation, } from '../telemetry/metrics.js';
20
+ import { IDEConnectionStatus } from '../ide/ide-client.js';
19
21
  /**
20
22
  * Implementation of the WriteFile tool logic
21
23
  */
@@ -101,10 +103,17 @@ export class WriteFileTool extends BaseTool {
101
103
  const fileDiff = Diff.createPatch(fileName, originalContent, // Original content (empty if new file or unreadable)
102
104
  correctedContent, // Content after potential correction
103
105
  'Current', 'Proposed', DEFAULT_DIFF_OPTIONS);
106
+ const ideClient = this.config.getIdeClient();
107
+ const ideConfirmation = this.config.getIdeModeFeature() &&
108
+ this.config.getIdeMode() &&
109
+ ideClient.getConnectionStatus().status === IDEConnectionStatus.Connected
110
+ ? ideClient.openDiff(params.file_path, correctedContent)
111
+ : undefined;
104
112
  const confirmationDetails = {
105
113
  type: 'edit',
106
114
  title: `Confirm Write: ${shortenPath(relativePath)}`,
107
115
  fileName,
116
+ filePath: params.file_path,
108
117
  fileDiff,
109
118
  originalContent,
110
119
  newContent: correctedContent,
@@ -112,7 +121,14 @@ export class WriteFileTool extends BaseTool {
112
121
  if (outcome === ToolConfirmationOutcome.ProceedAlways) {
113
122
  this.config.setApprovalMode(ApprovalMode.AUTO_EDIT);
114
123
  }
124
+ if (ideConfirmation) {
125
+ const result = await ideConfirmation;
126
+ if (result.status === 'accepted' && result.content) {
127
+ params.content = result.content;
128
+ }
129
+ }
115
130
  },
131
+ ideConfirmation,
116
132
  };
117
133
  return confirmationDetails;
118
134
  }
@@ -120,17 +136,27 @@ export class WriteFileTool extends BaseTool {
120
136
  const validationError = this.validateToolParams(params);
121
137
  if (validationError) {
122
138
  return {
123
- llmContent: `Error: Invalid parameters provided. Reason: ${validationError}`,
124
- returnDisplay: `Error: ${validationError}`,
139
+ llmContent: `Could not write file due to invalid parameters: ${validationError}`,
140
+ returnDisplay: validationError,
141
+ error: {
142
+ message: validationError,
143
+ type: ToolErrorType.INVALID_TOOL_PARAMS,
144
+ },
125
145
  };
126
146
  }
127
147
  const correctedContentResult = await this._getCorrectedFileContent(params.file_path, params.content, abortSignal);
128
148
  if (correctedContentResult.error) {
129
149
  const errDetails = correctedContentResult.error;
130
- const errorMsg = `Error checking existing file: ${errDetails.message}`;
150
+ const errorMsg = errDetails.code
151
+ ? `Error checking existing file '${params.file_path}': ${errDetails.message} (${errDetails.code})`
152
+ : `Error checking existing file: ${errDetails.message}`;
131
153
  return {
132
- llmContent: `Error checking existing file ${params.file_path}: ${errDetails.message}`,
154
+ llmContent: errorMsg,
133
155
  returnDisplay: errorMsg,
156
+ error: {
157
+ message: errorMsg,
158
+ type: ToolErrorType.FILE_WRITE_FAILURE,
159
+ },
134
160
  };
135
161
  }
136
162
  const { originalContent, correctedContent: fileContent, fileExists, } = correctedContentResult;
@@ -154,6 +180,8 @@ export class WriteFileTool extends BaseTool {
154
180
  ? '' // Or some indicator of unreadable content
155
181
  : originalContent;
156
182
  const fileDiff = Diff.createPatch(fileName, currentContentForDiff, fileContent, 'Original', 'Written', DEFAULT_DIFF_OPTIONS);
183
+ const originallyProposedContent = params.ai_proposed_content || params.content;
184
+ const diffStat = getDiffStat(fileName, currentContentForDiff, originallyProposedContent, params.content);
157
185
  const llmSuccessMessageParts = [
158
186
  isNewFile
159
187
  ? `Successfully created and wrote to new file: ${params.file_path}.`
@@ -167,15 +195,16 @@ export class WriteFileTool extends BaseTool {
167
195
  fileName,
168
196
  originalContent: correctedContentResult.originalContent,
169
197
  newContent: correctedContentResult.correctedContent,
198
+ diffStat,
170
199
  };
171
200
  const lines = fileContent.split('\n').length;
172
201
  const mimetype = getSpecificMimeType(params.file_path);
173
202
  const extension = path.extname(params.file_path); // Get extension
174
203
  if (isNewFile) {
175
- recordFileOperationMetric(this.config, FileOperation.CREATE, lines, mimetype, extension);
204
+ recordFileOperationMetric(this.config, FileOperation.CREATE, lines, mimetype, extension, diffStat);
176
205
  }
177
206
  else {
178
- recordFileOperationMetric(this.config, FileOperation.UPDATE, lines, mimetype, extension);
207
+ recordFileOperationMetric(this.config, FileOperation.UPDATE, lines, mimetype, extension, diffStat);
179
208
  }
180
209
  return {
181
210
  llmContent: llmSuccessMessageParts.join(' '),
@@ -183,10 +212,43 @@ export class WriteFileTool extends BaseTool {
183
212
  };
184
213
  }
185
214
  catch (error) {
186
- const errorMsg = `Error writing to file: ${error instanceof Error ? error.message : String(error)}`;
215
+ // Capture detailed error information for debugging
216
+ let errorMsg;
217
+ let errorType = ToolErrorType.FILE_WRITE_FAILURE;
218
+ if (isNodeError(error)) {
219
+ // Handle specific Node.js errors with their error codes
220
+ errorMsg = `Error writing to file '${params.file_path}': ${error.message} (${error.code})`;
221
+ // Log specific error types for better debugging
222
+ if (error.code === 'EACCES') {
223
+ errorMsg = `Permission denied writing to file: ${params.file_path} (${error.code})`;
224
+ errorType = ToolErrorType.PERMISSION_DENIED;
225
+ }
226
+ else if (error.code === 'ENOSPC') {
227
+ errorMsg = `No space left on device: ${params.file_path} (${error.code})`;
228
+ errorType = ToolErrorType.NO_SPACE_LEFT;
229
+ }
230
+ else if (error.code === 'EISDIR') {
231
+ errorMsg = `Target is a directory, not a file: ${params.file_path} (${error.code})`;
232
+ errorType = ToolErrorType.TARGET_IS_DIRECTORY;
233
+ }
234
+ // Include stack trace in debug mode for better troubleshooting
235
+ if (this.config.getDebugMode() && error.stack) {
236
+ console.error('Write file error stack:', error.stack);
237
+ }
238
+ }
239
+ else if (error instanceof Error) {
240
+ errorMsg = `Error writing to file: ${error.message}`;
241
+ }
242
+ else {
243
+ errorMsg = `Error writing to file: ${String(error)}`;
244
+ }
187
245
  return {
188
- llmContent: `Error writing to file ${params.file_path}: ${errorMsg}`,
189
- returnDisplay: `Error: ${errorMsg}`,
246
+ llmContent: errorMsg,
247
+ returnDisplay: errorMsg,
248
+ error: {
249
+ message: errorMsg,
250
+ type: errorType,
251
+ },
190
252
  };
191
253
  }
192
254
  }
@@ -244,11 +306,15 @@ export class WriteFileTool extends BaseTool {
244
306
  const correctedContentResult = await this._getCorrectedFileContent(params.file_path, params.content, abortSignal);
245
307
  return correctedContentResult.correctedContent;
246
308
  },
247
- createUpdatedParams: (_oldContent, modifiedProposedContent, originalParams) => ({
248
- ...originalParams,
249
- content: modifiedProposedContent,
250
- modified_by_user: true,
251
- }),
309
+ createUpdatedParams: (_oldContent, modifiedProposedContent, originalParams) => {
310
+ const content = originalParams.content;
311
+ return {
312
+ ...originalParams,
313
+ ai_proposed_content: content,
314
+ content: modifiedProposedContent,
315
+ modified_by_user: true,
316
+ };
317
+ },
252
318
  };
253
319
  }
254
320
  }
@@ -1 +1 @@
1
- {"version":3,"file":"write-file.js","sourceRoot":"","sources":["../../../src/tools/write-file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write-file.js","sourceRoot":"","sources":["../../../src/tools/write-file.ts"],"names":[],"mappings":"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"}