@vybestack/llxprt-code-core 0.1.20 → 0.1.22

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 (114) hide show
  1. package/README.md +31 -0
  2. package/dist/src/auth/types.d.ts +4 -4
  3. package/dist/src/code_assist/codeAssist.d.ts +1 -1
  4. package/dist/src/code_assist/codeAssist.js +5 -2
  5. package/dist/src/code_assist/codeAssist.js.map +1 -1
  6. package/dist/src/code_assist/converter.d.ts +2 -1
  7. package/dist/src/code_assist/converter.js +6 -4
  8. package/dist/src/code_assist/converter.js.map +1 -1
  9. package/dist/src/code_assist/oauth2.d.ts +1 -0
  10. package/dist/src/code_assist/oauth2.js +32 -15
  11. package/dist/src/code_assist/oauth2.js.map +1 -1
  12. package/dist/src/code_assist/server.d.ts +1 -2
  13. package/dist/src/code_assist/server.js +10 -5
  14. package/dist/src/code_assist/server.js.map +1 -1
  15. package/dist/src/code_assist/setup.js +2 -1
  16. package/dist/src/code_assist/setup.js.map +1 -1
  17. package/dist/src/config/config.d.ts +0 -3
  18. package/dist/src/config/config.js +8 -10
  19. package/dist/src/config/config.js.map +1 -1
  20. package/dist/src/core/client.js +11 -2
  21. package/dist/src/core/client.js.map +1 -1
  22. package/dist/src/core/coreToolScheduler.d.ts +1 -1
  23. package/dist/src/core/coreToolScheduler.js +9 -5
  24. package/dist/src/core/coreToolScheduler.js.map +1 -1
  25. package/dist/src/core/geminiChat.js +45 -4
  26. package/dist/src/core/geminiChat.js.map +1 -1
  27. package/dist/src/core/logger.d.ts +22 -1
  28. package/dist/src/core/logger.js +103 -17
  29. package/dist/src/core/logger.js.map +1 -1
  30. package/dist/src/ide/constants.d.ts +6 -0
  31. package/dist/src/ide/constants.js +7 -0
  32. package/dist/src/ide/constants.js.map +1 -0
  33. package/dist/src/ide/ide-client.d.ts +10 -10
  34. package/dist/src/ide/ide-client.js +69 -58
  35. package/dist/src/ide/ide-client.js.map +1 -1
  36. package/dist/src/ide/ide-installer.js +5 -4
  37. package/dist/src/ide/ide-installer.js.map +1 -1
  38. package/dist/src/ide/process-utils.d.ts +14 -0
  39. package/dist/src/ide/process-utils.js +57 -0
  40. package/dist/src/ide/process-utils.js.map +1 -0
  41. package/dist/src/index.d.ts +1 -0
  42. package/dist/src/index.js +1 -0
  43. package/dist/src/index.js.map +1 -1
  44. package/dist/src/mcp/oauth-provider.js +176 -58
  45. package/dist/src/mcp/oauth-provider.js.map +1 -1
  46. package/dist/src/mcp/oauth-utils.d.ts +3 -1
  47. package/dist/src/mcp/oauth-utils.js +52 -22
  48. package/dist/src/mcp/oauth-utils.js.map +1 -1
  49. package/dist/src/providers/anthropic/AnthropicProvider.js +164 -115
  50. package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
  51. package/dist/src/providers/gemini/GeminiProvider.js +6 -3
  52. package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
  53. package/dist/src/providers/openai/OpenAIProvider.js +227 -53
  54. package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
  55. package/dist/src/services/shellExecutionService.d.ts +24 -0
  56. package/dist/src/services/shellExecutionService.js +43 -52
  57. package/dist/src/services/shellExecutionService.js.map +1 -1
  58. package/dist/src/telemetry/index.d.ts +2 -2
  59. package/dist/src/telemetry/index.js +2 -2
  60. package/dist/src/telemetry/index.js.map +1 -1
  61. package/dist/src/telemetry/loggers.d.ts +2 -1
  62. package/dist/src/telemetry/loggers.js +14 -0
  63. package/dist/src/telemetry/loggers.js.map +1 -1
  64. package/dist/src/telemetry/types.d.ts +8 -1
  65. package/dist/src/telemetry/types.js +12 -0
  66. package/dist/src/telemetry/types.js.map +1 -1
  67. package/dist/src/test-utils/tools.d.ts +21 -6
  68. package/dist/src/test-utils/tools.js +77 -12
  69. package/dist/src/test-utils/tools.js.map +1 -1
  70. package/dist/src/tools/edit.d.ts +1 -1
  71. package/dist/src/tools/edit.js +45 -19
  72. package/dist/src/tools/edit.js.map +1 -1
  73. package/dist/src/tools/mcp-client.js +46 -31
  74. package/dist/src/tools/mcp-client.js.map +1 -1
  75. package/dist/src/tools/mcp-tool.js +19 -0
  76. package/dist/src/tools/mcp-tool.js.map +1 -1
  77. package/dist/src/tools/shell.js +25 -8
  78. package/dist/src/tools/shell.js.map +1 -1
  79. package/dist/src/tools/tool-error.d.ts +1 -0
  80. package/dist/src/tools/tool-error.js +1 -0
  81. package/dist/src/tools/tool-error.js.map +1 -1
  82. package/dist/src/tools/tools.d.ts +53 -75
  83. package/dist/src/tools/tools.js +111 -110
  84. package/dist/src/tools/tools.js.map +1 -1
  85. package/dist/src/tools/web-search-invocation.d.ts +51 -0
  86. package/dist/src/tools/web-search-invocation.js +132 -0
  87. package/dist/src/tools/web-search-invocation.js.map +1 -0
  88. package/dist/src/tools/web-search.d.ts +6 -36
  89. package/dist/src/tools/web-search.js +6 -129
  90. package/dist/src/tools/web-search.js.map +1 -1
  91. package/dist/src/tools/write-file.d.ts +17 -10
  92. package/dist/src/tools/write-file.js +125 -127
  93. package/dist/src/tools/write-file.js.map +1 -1
  94. package/dist/src/utils/filesearch/crawler.d.ts +15 -0
  95. package/dist/src/utils/filesearch/crawler.js +50 -0
  96. package/dist/src/utils/filesearch/crawler.js.map +1 -0
  97. package/dist/src/utils/filesearch/fileSearch.d.ts +9 -53
  98. package/dist/src/utils/filesearch/fileSearch.js +62 -117
  99. package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
  100. package/dist/src/utils/filesearch/ignore.d.ts +7 -0
  101. package/dist/src/utils/filesearch/ignore.js +25 -0
  102. package/dist/src/utils/filesearch/ignore.js.map +1 -1
  103. package/dist/src/utils/memoryImportProcessor.js +2 -6
  104. package/dist/src/utils/memoryImportProcessor.js.map +1 -1
  105. package/dist/src/utils/paths.d.ts +7 -0
  106. package/dist/src/utils/paths.js +15 -0
  107. package/dist/src/utils/paths.js.map +1 -1
  108. package/dist/src/utils/shell-utils.d.ts +39 -0
  109. package/dist/src/utils/shell-utils.js +72 -2
  110. package/dist/src/utils/shell-utils.js.map +1 -1
  111. package/dist/src/utils/workspaceContext.d.ts +22 -7
  112. package/dist/src/utils/workspaceContext.js +81 -55
  113. package/dist/src/utils/workspaceContext.js.map +1 -1
  114. package/package.json +1 -1
@@ -0,0 +1,132 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { BaseToolInvocation } from './tools.js';
7
+ import { getErrorMessage } from '../utils/errors.js';
8
+ import { getResponseText } from '../utils/generateContentResponseUtilities.js';
9
+ /**
10
+ * Tool invocation for performing web searches using Google Search via the Gemini API.
11
+ */
12
+ export class WebSearchToolInvocation extends BaseToolInvocation {
13
+ config;
14
+ constructor(config, params) {
15
+ super(params);
16
+ this.config = config;
17
+ }
18
+ getDescription() {
19
+ return `Searching the web for: "${this.params.query}"`;
20
+ }
21
+ async execute(signal) {
22
+ // Additional safety check - ensure query exists and is not just "undefined" string
23
+ if (!this.params.query ||
24
+ this.params.query.trim() === '' ||
25
+ this.params.query === 'undefined') {
26
+ return {
27
+ llmContent: `Error: Web search requires a valid search query. Please provide a specific search query.`,
28
+ returnDisplay: `Error: No valid search query provided.`,
29
+ };
30
+ }
31
+ try {
32
+ // Get the content generator config to access the provider manager
33
+ const contentGenConfig = this.config.getContentGeneratorConfig();
34
+ // Get the serverToolsProvider from the provider manager
35
+ if (!contentGenConfig?.providerManager) {
36
+ return {
37
+ llmContent: `Web search requires a provider. Please use --provider gemini with authentication.`,
38
+ returnDisplay: 'Web search requires a provider.',
39
+ };
40
+ }
41
+ // Use serverToolsProvider for web search
42
+ const serverToolsProvider = contentGenConfig.providerManager.getServerToolsProvider();
43
+ if (!serverToolsProvider) {
44
+ return {
45
+ llmContent: `Web search requires Gemini provider to be configured. Please ensure Gemini is available with authentication.`,
46
+ returnDisplay: 'Web search requires Gemini provider.',
47
+ };
48
+ }
49
+ // Check if the provider supports web_search
50
+ const serverTools = serverToolsProvider.getServerTools();
51
+ if (!serverTools.includes('web_search')) {
52
+ return {
53
+ llmContent: `Web search is not available. The server tools provider does not support web search.`,
54
+ returnDisplay: `Web search not available.`,
55
+ };
56
+ }
57
+ // Invoke the server tool with validated query
58
+ // Double-check query is not undefined before sending
59
+ const searchQuery = this.params.query?.trim() || '';
60
+ if (!searchQuery) {
61
+ return {
62
+ llmContent: `Error: Cannot perform web search without a query.`,
63
+ returnDisplay: `Error: Empty search query.`,
64
+ };
65
+ }
66
+ const response = await serverToolsProvider.invokeServerTool('web_search', { query: searchQuery }, { signal });
67
+ // Cast response to the expected type
68
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
69
+ const geminiResponse = response;
70
+ const responseText = getResponseText(geminiResponse);
71
+ const groundingMetadata = geminiResponse?.candidates?.[0]?.groundingMetadata;
72
+ const sources = groundingMetadata?.groundingChunks;
73
+ const groundingSupports = groundingMetadata?.groundingSupports;
74
+ if (!responseText || !responseText.trim()) {
75
+ return {
76
+ llmContent: `No search results or information found for query: "${this.params.query}"`,
77
+ returnDisplay: 'No information found.',
78
+ };
79
+ }
80
+ let modifiedResponseText = responseText;
81
+ const sourceListFormatted = [];
82
+ if (sources && sources.length > 0) {
83
+ sources.forEach((source, index) => {
84
+ const title = source.web?.title || 'Untitled';
85
+ const uri = source.web?.uri || 'No URI';
86
+ sourceListFormatted.push(`[${index + 1}] ${title} (${uri})`);
87
+ });
88
+ if (groundingSupports && groundingSupports.length > 0) {
89
+ const insertions = [];
90
+ groundingSupports.forEach((support) => {
91
+ if (support.segment && support.groundingChunkIndices) {
92
+ const citationMarker = support.groundingChunkIndices
93
+ .map((chunkIndex) => `[${chunkIndex + 1}]`)
94
+ .join('');
95
+ insertions.push({
96
+ index: support.segment.endIndex,
97
+ marker: citationMarker,
98
+ });
99
+ }
100
+ });
101
+ // Sort insertions by index in descending order to avoid shifting subsequent indices
102
+ insertions.sort((a, b) => b.index - a.index);
103
+ const responseChars = modifiedResponseText.split(''); // Use new variable
104
+ insertions.forEach((insertion) => {
105
+ // Fixed arrow function syntax
106
+ responseChars.splice(insertion.index, 0, insertion.marker);
107
+ });
108
+ modifiedResponseText = responseChars.join(''); // Assign back to modifiedResponseText
109
+ }
110
+ if (sourceListFormatted.length > 0) {
111
+ modifiedResponseText +=
112
+ '\n\nSources:\n' + sourceListFormatted.join('\n'); // Fixed string concatenation
113
+ }
114
+ }
115
+ return {
116
+ llmContent: `Web search results for "${this.params.query}":\n\n${modifiedResponseText}`,
117
+ returnDisplay: `Search results for "${this.params.query}" returned.`,
118
+ sources,
119
+ };
120
+ }
121
+ catch (error) {
122
+ const queryDisplay = this.params.query || 'undefined';
123
+ const errorMessage = `Error during web search for query "${queryDisplay}": ${getErrorMessage(error)}`;
124
+ console.error(errorMessage, error);
125
+ return {
126
+ llmContent: `Error: ${errorMessage}`,
127
+ returnDisplay: `Error performing web search.`,
128
+ };
129
+ }
130
+ }
131
+ }
132
+ //# sourceMappingURL=web-search-invocation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web-search-invocation.js","sourceRoot":"","sources":["../../../src/tools/web-search-invocation.ts"],"names":[],"mappings":"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"}
@@ -3,47 +3,17 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { GroundingMetadata } from '@google/genai';
7
- import { BaseTool, ToolResult } from './tools.js';
6
+ import { BaseDeclarativeTool, ToolInvocation } from './tools.js';
8
7
  import { Config } from '../config/config.js';
9
- interface GroundingChunkWeb {
10
- uri?: string;
11
- title?: string;
12
- }
13
- interface GroundingChunkItem {
14
- web?: GroundingChunkWeb;
15
- }
16
- /**
17
- * Parameters for the WebSearchTool.
18
- */
19
- export interface WebSearchToolParams {
20
- /**
21
- * The search query.
22
- */
23
- query: string;
24
- }
25
- /**
26
- * Extends ToolResult to include sources for web search.
27
- */
28
- export interface WebSearchToolResult extends ToolResult {
29
- sources?: GroundingMetadata extends {
30
- groundingChunks: GroundingChunkItem[];
31
- } ? GroundingMetadata['groundingChunks'] : GroundingChunkItem[];
32
- }
8
+ import { WebSearchToolParams, WebSearchToolResult } from './web-search-invocation.js';
9
+ export { WebSearchToolParams, WebSearchToolResult, } from './web-search-invocation.js';
33
10
  /**
34
11
  * A tool to perform web searches using Google Search via the Gemini API.
35
12
  */
36
- export declare class WebSearchTool extends BaseTool<WebSearchToolParams, WebSearchToolResult> {
13
+ export declare class WebSearchTool extends BaseDeclarativeTool<WebSearchToolParams, WebSearchToolResult> {
37
14
  private readonly config;
38
15
  static readonly Name: string;
39
16
  constructor(config: Config);
40
- /**
41
- * Validates the parameters for the WebSearchTool.
42
- * @param params The parameters to validate
43
- * @returns An error message string if validation fails, null if valid
44
- */
45
- validateParams(params: WebSearchToolParams): string | null;
46
- getDescription(params: WebSearchToolParams): string;
47
- execute(params: WebSearchToolParams, signal: AbortSignal): Promise<WebSearchToolResult>;
17
+ protected validateToolParams(params: WebSearchToolParams): string | null;
18
+ protected createInvocation(params: WebSearchToolParams): ToolInvocation<WebSearchToolParams, WebSearchToolResult>;
48
19
  }
49
- export {};
@@ -3,14 +3,13 @@
3
3
  * Copyright 2025 Google LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { BaseTool, Kind } from './tools.js';
6
+ import { BaseDeclarativeTool, Kind } from './tools.js';
7
7
  import { SchemaValidator } from '../utils/schemaValidator.js';
8
- import { getErrorMessage } from '../utils/errors.js';
9
- import { getResponseText } from '../utils/generateContentResponseUtilities.js';
8
+ import { WebSearchToolInvocation, } from './web-search-invocation.js';
10
9
  /**
11
10
  * A tool to perform web searches using Google Search via the Gemini API.
12
11
  */
13
- export class WebSearchTool extends BaseTool {
12
+ export class WebSearchTool extends BaseDeclarativeTool {
14
13
  config;
15
14
  static Name = 'google_web_search';
16
15
  constructor(config) {
@@ -26,12 +25,7 @@ export class WebSearchTool extends BaseTool {
26
25
  });
27
26
  this.config = config;
28
27
  }
29
- /**
30
- * Validates the parameters for the WebSearchTool.
31
- * @param params The parameters to validate
32
- * @returns An error message string if validation fails, null if valid
33
- */
34
- validateParams(params) {
28
+ validateToolParams(params) {
35
29
  const errors = SchemaValidator.validate(this.schema.parametersJsonSchema, params);
36
30
  if (errors) {
37
31
  return errors;
@@ -41,125 +35,8 @@ export class WebSearchTool extends BaseTool {
41
35
  }
42
36
  return null;
43
37
  }
44
- getDescription(params) {
45
- return `Searching the web for: "${params.query}"`;
46
- }
47
- async execute(params, signal) {
48
- const validationError = this.validateToolParams(params);
49
- if (validationError) {
50
- return {
51
- llmContent: `Error: Invalid parameters provided. Reason: ${validationError}`,
52
- returnDisplay: validationError,
53
- };
54
- }
55
- // Additional safety check - ensure query exists and is not just "undefined" string
56
- if (!params.query ||
57
- params.query.trim() === '' ||
58
- params.query === 'undefined') {
59
- return {
60
- llmContent: `Error: Web search requires a valid search query. Please provide a specific search query.`,
61
- returnDisplay: `Error: No valid search query provided.`,
62
- };
63
- }
64
- try {
65
- // Get the content generator config to access the provider manager
66
- const contentGenConfig = this.config.getContentGeneratorConfig();
67
- // Get the serverToolsProvider from the provider manager
68
- if (!contentGenConfig?.providerManager) {
69
- return {
70
- llmContent: `Web search requires a provider. Please use --provider gemini with authentication.`,
71
- returnDisplay: 'Web search requires a provider.',
72
- };
73
- }
74
- // Use serverToolsProvider for web search
75
- const serverToolsProvider = contentGenConfig.providerManager.getServerToolsProvider();
76
- if (!serverToolsProvider) {
77
- return {
78
- llmContent: `Web search requires Gemini provider to be configured. Please ensure Gemini is available with authentication.`,
79
- returnDisplay: 'Web search requires Gemini provider.',
80
- };
81
- }
82
- // Check if the provider supports web_search
83
- const serverTools = serverToolsProvider.getServerTools();
84
- if (!serverTools.includes('web_search')) {
85
- return {
86
- llmContent: `Web search is not available. The server tools provider does not support web search.`,
87
- returnDisplay: `Web search not available.`,
88
- };
89
- }
90
- // Invoke the server tool with validated query
91
- // Double-check query is not undefined before sending
92
- const searchQuery = params.query?.trim() || '';
93
- if (!searchQuery) {
94
- return {
95
- llmContent: `Error: Cannot perform web search without a query.`,
96
- returnDisplay: `Error: Empty search query.`,
97
- };
98
- }
99
- const response = await serverToolsProvider.invokeServerTool('web_search', { query: searchQuery }, { signal });
100
- // Cast response to the expected type
101
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
102
- const geminiResponse = response;
103
- const responseText = getResponseText(geminiResponse);
104
- const groundingMetadata = geminiResponse?.candidates?.[0]?.groundingMetadata;
105
- const sources = groundingMetadata?.groundingChunks;
106
- const groundingSupports = groundingMetadata?.groundingSupports;
107
- if (!responseText || !responseText.trim()) {
108
- return {
109
- llmContent: `No search results or information found for query: "${params.query}"`,
110
- returnDisplay: 'No information found.',
111
- };
112
- }
113
- let modifiedResponseText = responseText;
114
- const sourceListFormatted = [];
115
- if (sources && sources.length > 0) {
116
- sources.forEach((source, index) => {
117
- const title = source.web?.title || 'Untitled';
118
- const uri = source.web?.uri || 'No URI';
119
- sourceListFormatted.push(`[${index + 1}] ${title} (${uri})`);
120
- });
121
- if (groundingSupports && groundingSupports.length > 0) {
122
- const insertions = [];
123
- groundingSupports.forEach((support) => {
124
- if (support.segment && support.groundingChunkIndices) {
125
- const citationMarker = support.groundingChunkIndices
126
- .map((chunkIndex) => `[${chunkIndex + 1}]`)
127
- .join('');
128
- insertions.push({
129
- index: support.segment.endIndex,
130
- marker: citationMarker,
131
- });
132
- }
133
- });
134
- // Sort insertions by index in descending order to avoid shifting subsequent indices
135
- insertions.sort((a, b) => b.index - a.index);
136
- const responseChars = modifiedResponseText.split(''); // Use new variable
137
- insertions.forEach((insertion) => {
138
- // Fixed arrow function syntax
139
- responseChars.splice(insertion.index, 0, insertion.marker);
140
- });
141
- modifiedResponseText = responseChars.join(''); // Assign back to modifiedResponseText
142
- }
143
- if (sourceListFormatted.length > 0) {
144
- modifiedResponseText +=
145
- '\n\nSources:\n' + sourceListFormatted.join('\n'); // Fixed string concatenation
146
- }
147
- }
148
- return {
149
- llmContent: `Web search results for "${params.query}":\n\n${modifiedResponseText}`,
150
- returnDisplay: `Search results for "${params.query}" returned.`,
151
- sources,
152
- };
153
- }
154
- catch (error) {
155
- const queryDisplay = params.query || 'undefined';
156
- const errorMessage = `Error during web search for query "${queryDisplay}": ${getErrorMessage(error)}`;
157
- console.error(errorMessage, error);
158
- return {
159
- llmContent: `Error: ${errorMessage}`,
160
- returnDisplay: `Error performing web search.`,
161
- };
162
- }
38
+ createInvocation(params) {
39
+ return new WebSearchToolInvocation(this.config, params);
163
40
  }
164
41
  }
165
42
  //# sourceMappingURL=web-search.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-search.js","sourceRoot":"","sources":["../../../src/tools/web-search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web-search.js","sourceRoot":"","sources":["../../../src/tools/web-search.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAkB,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EACL,uBAAuB,GAGxB,MAAM,4BAA4B,CAAC;AAQpC;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,mBAGlC;IAG8B;IAF7B,MAAM,CAAU,IAAI,GAAW,mBAAmB,CAAC;IAEnD,YAA6B,MAAc;QACzC,KAAK,CACH,aAAa,CAAC,IAAI,EAClB,cAAc,EACd,uKAAuK,EACvK,IAAI,CAAC,MAAM,EACX;YACE,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kDAAkD;iBAChE;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB,CACF,CAAC;QAhByB,WAAM,GAAN,MAAM,CAAQ;IAiB3C,CAAC;IAEkB,kBAAkB,CACnC,MAA2B;QAE3B,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CACrC,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAChC,MAAM,CACP,CAAC;QACF,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAChD,OAAO,wCAAwC,CAAC;QAClD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAES,gBAAgB,CACxB,MAA2B;QAE3B,OAAO,IAAI,uBAAuB,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC"}
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { Config } from '../config/config.js';
7
- import { BaseTool, ToolResult, ToolCallConfirmationDetails, ToolLocation } from './tools.js';
7
+ import { BaseDeclarativeTool, ToolResult, ToolInvocation } from './tools.js';
8
8
  import { ModifiableDeclarativeTool, ModifyContext } from './modifiable-tool.js';
9
9
  /**
10
10
  * Parameters for the WriteFile tool
@@ -27,21 +27,28 @@ export interface WriteFileToolParams {
27
27
  */
28
28
  ai_proposed_content?: string;
29
29
  }
30
+ interface GetCorrectedFileContentResult {
31
+ originalContent: string;
32
+ correctedContent: string;
33
+ fileExists: boolean;
34
+ error?: {
35
+ message: string;
36
+ code?: string;
37
+ };
38
+ }
39
+ /**
40
+ * Gets corrected file content using AI correction services
41
+ */
42
+ export declare function getCorrectedFileContent(filePath: string, proposedContent: string, config: Config, abortSignal: AbortSignal): Promise<GetCorrectedFileContentResult>;
30
43
  /**
31
44
  * Implementation of the WriteFile tool logic
32
45
  */
33
- export declare class WriteFileTool extends BaseTool<WriteFileToolParams, ToolResult> implements ModifiableDeclarativeTool<WriteFileToolParams> {
46
+ export declare class WriteFileTool extends BaseDeclarativeTool<WriteFileToolParams, ToolResult> implements ModifiableDeclarativeTool<WriteFileToolParams> {
34
47
  private readonly config;
35
48
  static readonly Name: string;
36
49
  constructor(config: Config);
37
- toolLocations(params: WriteFileToolParams): ToolLocation[];
38
50
  validateToolParams(params: WriteFileToolParams): string | null;
39
- getDescription(params: WriteFileToolParams): string;
40
- /**
41
- * Handles the confirmation prompt for the WriteFile tool.
42
- */
43
- shouldConfirmExecute(params: WriteFileToolParams, abortSignal: AbortSignal): Promise<ToolCallConfirmationDetails | false>;
44
- execute(params: WriteFileToolParams, abortSignal: AbortSignal): Promise<ToolResult>;
45
- private _getCorrectedFileContent;
51
+ protected createInvocation(params: WriteFileToolParams): ToolInvocation<WriteFileToolParams, ToolResult>;
46
52
  getModifyContext(abortSignal: AbortSignal): ModifyContext<WriteFileToolParams>;
47
53
  }
54
+ export {};