@vybestack/llxprt-code-core 0.1.18-nightly.250807.306d1939 → 0.1.18-nightly.250808.f9b79d74
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 +1 -0
- package/dist/src/config/config.alwaysAllow.test.d.ts +6 -0
- package/dist/src/config/config.alwaysAllow.test.js +84 -0
- package/dist/src/config/config.alwaysAllow.test.js.map +1 -0
- package/dist/src/config/config.d.ts +10 -0
- package/dist/src/config/config.js +20 -0
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/core/client.d.ts +0 -2
- package/dist/src/core/client.js +3 -81
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/contentGenerator.js +1 -1
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +17 -7
- package/dist/src/core/coreToolScheduler.js +121 -18
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +25 -37
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.d.ts +3 -0
- package/dist/src/core/geminiChat.js +17 -13
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.js +4 -1
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +8 -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 +453 -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 +519 -0
- package/dist/src/core/subagent.test.js.map +1 -0
- package/dist/src/hooks/tool-render-suppression-hook.d.ts +16 -0
- package/dist/src/hooks/tool-render-suppression-hook.js +26 -0
- package/dist/src/hooks/tool-render-suppression-hook.js.map +1 -0
- package/dist/src/hooks/tool-render-suppression-hook.test.d.ts +6 -0
- package/dist/src/hooks/tool-render-suppression-hook.test.js +59 -0
- package/dist/src/hooks/tool-render-suppression-hook.test.js.map +1 -0
- package/dist/src/ide/ide-client.d.ts +21 -0
- package/dist/src/ide/ide-client.js +107 -1
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ideContext.d.ts +127 -32
- package/dist/src/ide/ideContext.js +45 -0
- package/dist/src/ide/ideContext.js.map +1 -1
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/integration-tests/todo-system.test.js +38 -602
- package/dist/src/integration-tests/todo-system.test.js.map +1 -1
- package/dist/src/providers/gemini/GeminiProvider.js +5 -5
- package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.js +8 -1
- package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.test.js +106 -0
- package/dist/src/providers/openai/OpenAIProvider.test.js.map +1 -1
- package/dist/src/providers/types/IProviderConfig.d.ts +5 -0
- package/dist/src/services/shellExecutionService.js +29 -5
- 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/services/todo-context-tracker.d.ts +31 -0
- package/dist/src/services/todo-context-tracker.js +45 -0
- package/dist/src/services/todo-context-tracker.js.map +1 -0
- package/dist/src/services/tool-call-tracker-service.d.ts +52 -0
- package/dist/src/services/tool-call-tracker-service.js +170 -0
- package/dist/src/services/tool-call-tracker-service.js.map +1 -0
- package/dist/src/services/tool-call-tracker-service.test.d.ts +6 -0
- package/dist/src/services/tool-call-tracker-service.test.js +99 -0
- package/dist/src/services/tool-call-tracker-service.test.js.map +1 -0
- 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 +5 -1
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/metrics.d.ts +1 -1
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +2 -1
- package/dist/src/telemetry/types.js +3 -1
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +2 -0
- package/dist/src/telemetry/uiTelemetry.js +2 -0
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +11 -1
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- 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/edit.d.ts +2 -2
- package/dist/src/tools/edit.js +18 -0
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +48 -0
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +10 -0
- package/dist/src/tools/mcp-client.js +59 -0
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +294 -1
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +2 -2
- package/dist/src/tools/memoryTool.js +1 -0
- package/dist/src/tools/memoryTool.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 +59 -46
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +201 -126
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.js +8 -2
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +16 -0
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/todo-events.d.ts +22 -0
- package/dist/src/tools/todo-events.js +24 -0
- package/dist/src/tools/todo-events.js.map +1 -0
- package/dist/src/tools/todo-read.js.map +1 -1
- package/dist/src/tools/todo-schemas.d.ts +232 -4
- package/dist/src/tools/todo-schemas.js +13 -0
- package/dist/src/tools/todo-schemas.js.map +1 -1
- package/dist/src/tools/todo-schemas.test.js +190 -1
- package/dist/src/tools/todo-schemas.test.js.map +1 -1
- package/dist/src/tools/todo-store.d.ts +1 -4
- package/dist/src/tools/todo-store.js +41 -40
- package/dist/src/tools/todo-store.js.map +1 -1
- package/dist/src/tools/todo-store.test.js +34 -40
- package/dist/src/tools/todo-store.test.js.map +1 -1
- package/dist/src/tools/todo-write.d.ts +1 -1
- package/dist/src/tools/todo-write.js +84 -47
- package/dist/src/tools/todo-write.js.map +1 -1
- package/dist/src/tools/todo-write.test.js +23 -9
- package/dist/src/tools/todo-write.test.js.map +1 -1
- package/dist/src/tools/tool-context.d.ts +2 -0
- package/dist/src/tools/tool-registry.d.ts +12 -6
- package/dist/src/tools/tool-registry.js +16 -1
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +1 -18
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +116 -39
- package/dist/src/tools/tools.js +100 -10
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +2 -2
- package/dist/src/tools/write-file.js +16 -0
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +20 -3
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/types/modelParams.d.ts +2 -0
- 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.js +2 -10
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +1 -4
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.js +15 -1
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.test.js +21 -1
- 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/shell-utils.js +14 -2
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.shellReplacement.test.d.ts +6 -0
- package/dist/src/utils/shell-utils.shellReplacement.test.js +149 -0
- package/dist/src/utils/shell-utils.shellReplacement.test.js.map +1 -0
- package/package.json +2 -1
|
@@ -6,18 +6,72 @@
|
|
|
6
6
|
import path from 'path';
|
|
7
7
|
import { SchemaValidator } from '../utils/schemaValidator.js';
|
|
8
8
|
import { makeRelative, shortenPath } from '../utils/paths.js';
|
|
9
|
-
import {
|
|
9
|
+
import { BaseDeclarativeTool, Icon, } from './tools.js';
|
|
10
10
|
import { Type } from '@google/genai';
|
|
11
11
|
import { processSingleFileContent, getSpecificMimeType, } from '../utils/fileUtils.js';
|
|
12
12
|
import { recordFileOperationMetric, FileOperation, } from '../telemetry/metrics.js';
|
|
13
|
+
class ReadFileToolInvocation {
|
|
14
|
+
config;
|
|
15
|
+
params;
|
|
16
|
+
constructor(config, params) {
|
|
17
|
+
this.config = config;
|
|
18
|
+
this.params = params;
|
|
19
|
+
}
|
|
20
|
+
getDescription() {
|
|
21
|
+
const relativePath = makeRelative(this.params.absolute_path, this.config.getTargetDir());
|
|
22
|
+
return shortenPath(relativePath);
|
|
23
|
+
}
|
|
24
|
+
toolLocations() {
|
|
25
|
+
return [{ path: this.params.absolute_path, line: this.params.offset }];
|
|
26
|
+
}
|
|
27
|
+
shouldConfirmExecute() {
|
|
28
|
+
return Promise.resolve(false);
|
|
29
|
+
}
|
|
30
|
+
async execute() {
|
|
31
|
+
const result = await processSingleFileContent(this.params.absolute_path, this.config.getTargetDir(), this.params.offset, this.params.limit);
|
|
32
|
+
if (result.error) {
|
|
33
|
+
return {
|
|
34
|
+
llmContent: result.error, // The detailed error for LLM
|
|
35
|
+
returnDisplay: result.returnDisplay || 'Error reading file', // User-friendly error
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
let llmContent;
|
|
39
|
+
if (result.isTruncated) {
|
|
40
|
+
const [start, end] = result.linesShown;
|
|
41
|
+
const total = result.originalLineCount;
|
|
42
|
+
const nextOffset = this.params.offset
|
|
43
|
+
? this.params.offset + end - start + 1
|
|
44
|
+
: end;
|
|
45
|
+
llmContent = `
|
|
46
|
+
IMPORTANT: The file content has been truncated.
|
|
47
|
+
Status: Showing lines ${start}-${end} of ${total} total lines.
|
|
48
|
+
Action: To read more of the file, you can use the 'offset' and 'limit' parameters in a subsequent 'read_file' call. For example, to read the next section of the file, use offset: ${nextOffset}.
|
|
49
|
+
|
|
50
|
+
--- FILE CONTENT (truncated) ---
|
|
51
|
+
${result.llmContent}`;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
llmContent = result.llmContent || '';
|
|
55
|
+
}
|
|
56
|
+
const lines = typeof result.llmContent === 'string'
|
|
57
|
+
? result.llmContent.split('\n').length
|
|
58
|
+
: undefined;
|
|
59
|
+
const mimetype = getSpecificMimeType(this.params.absolute_path);
|
|
60
|
+
recordFileOperationMetric(this.config, FileOperation.READ, lines, mimetype, path.extname(this.params.absolute_path));
|
|
61
|
+
return {
|
|
62
|
+
llmContent,
|
|
63
|
+
returnDisplay: result.returnDisplay || '',
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
13
67
|
/**
|
|
14
68
|
* Implementation of the ReadFile tool logic
|
|
15
69
|
*/
|
|
16
|
-
export class ReadFileTool extends
|
|
70
|
+
export class ReadFileTool extends BaseDeclarativeTool {
|
|
17
71
|
config;
|
|
18
72
|
static Name = 'read_file';
|
|
19
73
|
constructor(config) {
|
|
20
|
-
super(ReadFileTool.Name, 'ReadFile',
|
|
74
|
+
super(ReadFileTool.Name, 'ReadFile', `Reads and returns the content of a specified file. If the file is large, the content will be truncated. The tool's response will clearly indicate if truncation has occurred and will provide details on how to read more of the file using the 'offset' and 'limit' parameters. Handles text, images (PNG, JPG, GIF, WEBP, SVG, BMP), and PDF files. For text files, it can read specific line ranges.`, Icon.FileSearch, {
|
|
21
75
|
properties: {
|
|
22
76
|
absolute_path: {
|
|
23
77
|
description: "The absolute path to the file to read (e.g., '/home/user/project/file.txt'). Relative paths are not supported. You must provide an absolute path.",
|
|
@@ -63,49 +117,8 @@ export class ReadFileTool extends BaseTool {
|
|
|
63
117
|
}
|
|
64
118
|
return null;
|
|
65
119
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
typeof params.absolute_path !== 'string' ||
|
|
69
|
-
params.absolute_path.trim() === '') {
|
|
70
|
-
return `Path unavailable`;
|
|
71
|
-
}
|
|
72
|
-
const relativePath = makeRelative(params.absolute_path, this.config.getTargetDir());
|
|
73
|
-
let description = shortenPath(relativePath);
|
|
74
|
-
if (params.offset !== undefined && params.limit !== undefined) {
|
|
75
|
-
description += ` (lines ${params.offset + 1}-${params.offset + params.limit})`;
|
|
76
|
-
}
|
|
77
|
-
else if (params.limit !== undefined) {
|
|
78
|
-
description += ` (first ${params.limit} lines)`;
|
|
79
|
-
}
|
|
80
|
-
return description;
|
|
81
|
-
}
|
|
82
|
-
toolLocations(params) {
|
|
83
|
-
return [{ path: params.absolute_path, line: params.offset }];
|
|
84
|
-
}
|
|
85
|
-
async execute(params, _signal) {
|
|
86
|
-
const validationError = this.validateToolParams(params);
|
|
87
|
-
if (validationError) {
|
|
88
|
-
return {
|
|
89
|
-
llmContent: `Error: Invalid parameters provided. Reason: ${validationError}`,
|
|
90
|
-
returnDisplay: validationError,
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
const result = await processSingleFileContent(params.absolute_path, this.config.getTargetDir(), params.offset, params.limit);
|
|
94
|
-
if (result.error) {
|
|
95
|
-
return {
|
|
96
|
-
llmContent: result.error, // The detailed error for LLM
|
|
97
|
-
returnDisplay: result.returnDisplay || 'Error reading file', // User-friendly error
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
const lines = typeof result.llmContent === 'string'
|
|
101
|
-
? result.llmContent.split('\n').length
|
|
102
|
-
: undefined;
|
|
103
|
-
const mimetype = getSpecificMimeType(params.absolute_path);
|
|
104
|
-
recordFileOperationMetric(this.config, FileOperation.READ, lines, mimetype, path.extname(params.absolute_path));
|
|
105
|
-
return {
|
|
106
|
-
llmContent: result.llmContent || '',
|
|
107
|
-
returnDisplay: result.returnDisplay || '',
|
|
108
|
-
};
|
|
120
|
+
createInvocation(params) {
|
|
121
|
+
return new ReadFileToolInvocation(this.config, params);
|
|
109
122
|
}
|
|
110
123
|
}
|
|
111
124
|
//# sourceMappingURL=read-file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-file.js","sourceRoot":"","sources":["../../../src/tools/read-file.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"read-file.js","sourceRoot":"","sources":["../../../src/tools/read-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,169 +31,251 @@ describe('ReadFileTool', () => {
|
|
|
31
31
|
await fsp.rm(tempRootDir, { recursive: true, force: true });
|
|
32
32
|
}
|
|
33
33
|
});
|
|
34
|
-
describe('
|
|
35
|
-
it('should return
|
|
34
|
+
describe('build', () => {
|
|
35
|
+
it('should return an invocation for valid params (absolute path within root)', () => {
|
|
36
36
|
const params = {
|
|
37
37
|
absolute_path: path.join(tempRootDir, 'test.txt'),
|
|
38
38
|
};
|
|
39
|
-
|
|
39
|
+
const result = tool.build(params);
|
|
40
|
+
expect(result).not.toBeTypeOf('string');
|
|
41
|
+
expect(typeof result).toBe('object');
|
|
42
|
+
expect(result.params).toEqual(params);
|
|
40
43
|
});
|
|
41
|
-
it('should return
|
|
44
|
+
it('should return an invocation for valid params with offset and limit', () => {
|
|
42
45
|
const params = {
|
|
43
46
|
absolute_path: path.join(tempRootDir, 'test.txt'),
|
|
44
47
|
offset: 0,
|
|
45
48
|
limit: 10,
|
|
46
49
|
};
|
|
47
|
-
|
|
50
|
+
const result = tool.build(params);
|
|
51
|
+
expect(result).not.toBeTypeOf('string');
|
|
48
52
|
});
|
|
49
|
-
it('should
|
|
53
|
+
it('should throw error for relative path', () => {
|
|
50
54
|
const params = { absolute_path: 'test.txt' };
|
|
51
|
-
expect(tool.
|
|
55
|
+
expect(() => tool.build(params)).toThrow(`File path must be absolute, but was relative: test.txt. You must provide an absolute path.`);
|
|
52
56
|
});
|
|
53
|
-
it('should
|
|
57
|
+
it('should throw error for path outside root', () => {
|
|
54
58
|
const outsidePath = path.resolve(os.tmpdir(), 'outside-root.txt');
|
|
55
59
|
const params = { absolute_path: outsidePath };
|
|
56
|
-
|
|
57
|
-
expect(error).toContain('File path must be within one of the workspace directories');
|
|
60
|
+
expect(() => tool.build(params)).toThrow('File path must be within one of the workspace directories');
|
|
58
61
|
});
|
|
59
|
-
it('should
|
|
62
|
+
it('should throw error for negative offset', () => {
|
|
60
63
|
const params = {
|
|
61
64
|
absolute_path: path.join(tempRootDir, 'test.txt'),
|
|
62
65
|
offset: -1,
|
|
63
66
|
limit: 10,
|
|
64
67
|
};
|
|
65
|
-
expect(tool.
|
|
68
|
+
expect(() => tool.build(params)).toThrow('Offset must be a non-negative number');
|
|
66
69
|
});
|
|
67
|
-
it('should
|
|
70
|
+
it('should throw error for non-positive limit', () => {
|
|
68
71
|
const paramsZero = {
|
|
69
72
|
absolute_path: path.join(tempRootDir, 'test.txt'),
|
|
70
73
|
offset: 0,
|
|
71
74
|
limit: 0,
|
|
72
75
|
};
|
|
73
|
-
expect(tool.
|
|
76
|
+
expect(() => tool.build(paramsZero)).toThrow('Limit must be a positive number');
|
|
74
77
|
const paramsNegative = {
|
|
75
78
|
absolute_path: path.join(tempRootDir, 'test.txt'),
|
|
76
79
|
offset: 0,
|
|
77
80
|
limit: -5,
|
|
78
81
|
};
|
|
79
|
-
expect(tool.
|
|
82
|
+
expect(() => tool.build(paramsNegative)).toThrow('Limit must be a positive number');
|
|
80
83
|
});
|
|
81
|
-
it('should
|
|
84
|
+
it('should throw error for schema validation failure (e.g. missing path)', () => {
|
|
82
85
|
const params = { offset: 0 };
|
|
83
|
-
expect(tool.
|
|
86
|
+
expect(() => tool.build(params)).toThrow(`params must have required property 'absolute_path'`);
|
|
84
87
|
});
|
|
85
88
|
});
|
|
86
|
-
describe('
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
expect(tool.getDescription(params)).toBe('.');
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
describe('execute', () => {
|
|
98
|
-
it('should return validation error if params are invalid', async () => {
|
|
99
|
-
const params = {
|
|
100
|
-
absolute_path: 'relative/path.txt',
|
|
101
|
-
};
|
|
102
|
-
expect(await tool.execute(params, abortSignal)).toEqual({
|
|
103
|
-
llmContent: 'Error: Invalid parameters provided. Reason: File path must be absolute, but was relative: relative/path.txt. You must provide an absolute path.',
|
|
104
|
-
returnDisplay: 'File path must be absolute, but was relative: relative/path.txt. You must provide an absolute path.',
|
|
89
|
+
describe('ToolInvocation', () => {
|
|
90
|
+
describe('getDescription', () => {
|
|
91
|
+
it('should return a shortened, relative path', () => {
|
|
92
|
+
const filePath = path.join(tempRootDir, 'sub', 'dir', 'file.txt');
|
|
93
|
+
const params = { absolute_path: filePath };
|
|
94
|
+
const invocation = tool.build(params);
|
|
95
|
+
expect(typeof invocation).not.toBe('string');
|
|
96
|
+
expect(invocation.getDescription()).toBe(path.join('sub', 'dir', 'file.txt'));
|
|
105
97
|
});
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
llmContent: `File not found: ${filePath}`,
|
|
112
|
-
returnDisplay: 'File not found.',
|
|
98
|
+
it('should return . if path is the root directory', () => {
|
|
99
|
+
const params = { absolute_path: tempRootDir };
|
|
100
|
+
const invocation = tool.build(params);
|
|
101
|
+
expect(typeof invocation).not.toBe('string');
|
|
102
|
+
expect(invocation.getDescription()).toBe('.');
|
|
113
103
|
});
|
|
114
104
|
});
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
105
|
+
describe('execute', () => {
|
|
106
|
+
it('should return error if file does not exist', async () => {
|
|
107
|
+
const filePath = path.join(tempRootDir, 'nonexistent.txt');
|
|
108
|
+
const params = { absolute_path: filePath };
|
|
109
|
+
const invocation = tool.build(params);
|
|
110
|
+
expect(await invocation.execute(abortSignal)).toEqual({
|
|
111
|
+
llmContent: `File not found: ${filePath}`,
|
|
112
|
+
returnDisplay: 'File not found.',
|
|
113
|
+
});
|
|
123
114
|
});
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
115
|
+
it('should return success result for a text file', async () => {
|
|
116
|
+
const filePath = path.join(tempRootDir, 'textfile.txt');
|
|
117
|
+
const fileContent = 'This is a test file.';
|
|
118
|
+
await fsp.writeFile(filePath, fileContent, 'utf-8');
|
|
119
|
+
const params = { absolute_path: filePath };
|
|
120
|
+
const invocation = tool.build(params);
|
|
121
|
+
expect(await invocation.execute(abortSignal)).toEqual({
|
|
122
|
+
llmContent: fileContent,
|
|
123
|
+
returnDisplay: '',
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
it('should return success result for an image file', async () => {
|
|
127
|
+
// A minimal 1x1 transparent PNG file.
|
|
128
|
+
const pngContent = Buffer.from([
|
|
129
|
+
137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0,
|
|
130
|
+
1, 0, 0, 0, 1, 8, 6, 0, 0, 0, 31, 21, 196, 137, 0, 0, 0, 10, 73, 68,
|
|
131
|
+
65, 84, 120, 156, 99, 0, 1, 0, 0, 5, 0, 1, 13, 10, 45, 180, 0, 0, 0,
|
|
132
|
+
0, 73, 69, 78, 68, 174, 66, 96, 130,
|
|
133
|
+
]);
|
|
134
|
+
const filePath = path.join(tempRootDir, 'image.png');
|
|
135
|
+
await fsp.writeFile(filePath, pngContent);
|
|
136
|
+
const params = { absolute_path: filePath };
|
|
137
|
+
const invocation = tool.build(params);
|
|
138
|
+
expect(await invocation.execute(abortSignal)).toEqual({
|
|
139
|
+
llmContent: {
|
|
140
|
+
inlineData: {
|
|
141
|
+
mimeType: 'image/png',
|
|
142
|
+
data: pngContent.toString('base64'),
|
|
143
|
+
},
|
|
141
144
|
},
|
|
142
|
-
|
|
143
|
-
|
|
145
|
+
returnDisplay: `Read image file: image.png`,
|
|
146
|
+
});
|
|
144
147
|
});
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
148
|
+
it('should treat a non-image file with image extension as an image', async () => {
|
|
149
|
+
const filePath = path.join(tempRootDir, 'fake-image.png');
|
|
150
|
+
const fileContent = 'This is not a real png.';
|
|
151
|
+
await fsp.writeFile(filePath, fileContent, 'utf-8');
|
|
152
|
+
const params = { absolute_path: filePath };
|
|
153
|
+
const invocation = tool.build(params);
|
|
154
|
+
expect(await invocation.execute(abortSignal)).toEqual({
|
|
155
|
+
llmContent: {
|
|
156
|
+
inlineData: {
|
|
157
|
+
mimeType: 'image/png',
|
|
158
|
+
data: Buffer.from(fileContent).toString('base64'),
|
|
159
|
+
},
|
|
156
160
|
},
|
|
157
|
-
|
|
158
|
-
|
|
161
|
+
returnDisplay: `Read image file: fake-image.png`,
|
|
162
|
+
});
|
|
159
163
|
});
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
164
|
+
it('should return a structured message when a slice of a text file is read', async () => {
|
|
165
|
+
const filePath = path.join(tempRootDir, 'paginated.txt');
|
|
166
|
+
const fileContent = Array.from({ length: 20 }, (_, i) => `Line ${i + 1}`).join('\n');
|
|
167
|
+
await fsp.writeFile(filePath, fileContent, 'utf-8');
|
|
168
|
+
const params = {
|
|
169
|
+
absolute_path: filePath,
|
|
170
|
+
offset: 5, // Start from line 6
|
|
171
|
+
limit: 3,
|
|
172
|
+
};
|
|
173
|
+
const invocation = tool.build(params);
|
|
174
|
+
const result = await invocation.execute(abortSignal);
|
|
175
|
+
const expectedLlmContent = `
|
|
176
|
+
IMPORTANT: The file content has been truncated.
|
|
177
|
+
Status: Showing lines 6-8 of 20 total lines.
|
|
178
|
+
Action: To read more of the file, you can use the 'offset' and 'limit' parameters in a subsequent 'read_file' call. For example, to read the next section of the file, use offset: 8.
|
|
179
|
+
|
|
180
|
+
--- FILE CONTENT (truncated) ---
|
|
181
|
+
Line 6
|
|
182
|
+
Line 7
|
|
183
|
+
Line 8`;
|
|
184
|
+
expect(result.llmContent).toEqual(expectedLlmContent);
|
|
185
|
+
expect(result.returnDisplay).toBe('Read lines 6-8 of 20 from paginated.txt');
|
|
178
186
|
});
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
187
|
+
describe('with .llxprtignore', () => {
|
|
188
|
+
beforeEach(async () => {
|
|
189
|
+
await fsp.writeFile(path.join(tempRootDir, '.llxprtignore'), ['foo.*', 'ignored/'].join('\n'));
|
|
190
|
+
});
|
|
191
|
+
it('should throw error if path is ignored by a .llxprtignore pattern', async () => {
|
|
192
|
+
const ignoredFilePath = path.join(tempRootDir, 'foo.bar');
|
|
193
|
+
await fsp.writeFile(ignoredFilePath, 'content', 'utf-8');
|
|
194
|
+
const params = {
|
|
195
|
+
absolute_path: ignoredFilePath,
|
|
196
|
+
};
|
|
197
|
+
const expectedError = `File path '${ignoredFilePath}' is ignored by .llxprtignore pattern(s).`;
|
|
198
|
+
expect(() => tool.build(params)).toThrow(expectedError);
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
it('should return success result for a text file', async () => {
|
|
202
|
+
const filePath = path.join(tempRootDir, 'textfile.txt');
|
|
203
|
+
const fileContent = 'This is a test file.';
|
|
204
|
+
await fsp.writeFile(filePath, fileContent, 'utf-8');
|
|
205
|
+
const params = { absolute_path: filePath };
|
|
206
|
+
const invocation = tool.build(params);
|
|
207
|
+
expect(await invocation.execute(abortSignal)).toEqual({
|
|
208
|
+
llmContent: fileContent,
|
|
209
|
+
returnDisplay: '',
|
|
210
|
+
});
|
|
183
211
|
});
|
|
184
|
-
it('should return
|
|
185
|
-
|
|
186
|
-
|
|
212
|
+
it('should return success result for an image file', async () => {
|
|
213
|
+
// A minimal 1x1 transparent PNG file.
|
|
214
|
+
const pngContent = Buffer.from([
|
|
215
|
+
137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0,
|
|
216
|
+
1, 0, 0, 0, 1, 8, 6, 0, 0, 0, 31, 21, 196, 137, 0, 0, 0, 10, 73, 68,
|
|
217
|
+
65, 84, 120, 156, 99, 0, 1, 0, 0, 5, 0, 1, 13, 10, 45, 180, 0, 0, 0,
|
|
218
|
+
0, 73, 69, 78, 68, 174, 66, 96, 130,
|
|
219
|
+
]);
|
|
220
|
+
const filePath = path.join(tempRootDir, 'image.png');
|
|
221
|
+
await fsp.writeFile(filePath, pngContent);
|
|
222
|
+
const params = { absolute_path: filePath };
|
|
223
|
+
const invocation = tool.build(params);
|
|
224
|
+
expect(await invocation.execute(abortSignal)).toEqual({
|
|
225
|
+
llmContent: {
|
|
226
|
+
inlineData: {
|
|
227
|
+
mimeType: 'image/png',
|
|
228
|
+
data: pngContent.toString('base64'),
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
returnDisplay: `Read image file: image.png`,
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
it('should treat a non-image file with image extension as an image', async () => {
|
|
235
|
+
const filePath = path.join(tempRootDir, 'fake-image.png');
|
|
236
|
+
const fileContent = 'This is not a real png.';
|
|
237
|
+
await fsp.writeFile(filePath, fileContent, 'utf-8');
|
|
238
|
+
const params = { absolute_path: filePath };
|
|
239
|
+
const invocation = tool.build(params);
|
|
240
|
+
expect(await invocation.execute(abortSignal)).toEqual({
|
|
241
|
+
llmContent: {
|
|
242
|
+
inlineData: {
|
|
243
|
+
mimeType: 'image/png',
|
|
244
|
+
data: Buffer.from(fileContent).toString('base64'),
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
returnDisplay: `Read image file: fake-image.png`,
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
it('should pass offset and limit to read a slice of a text file', async () => {
|
|
251
|
+
const filePath = path.join(tempRootDir, 'paginated.txt');
|
|
252
|
+
const fileContent = Array.from({ length: 20 }, (_, i) => `Line ${i + 1}`).join('\n');
|
|
253
|
+
await fsp.writeFile(filePath, fileContent, 'utf-8');
|
|
187
254
|
const params = {
|
|
188
|
-
absolute_path:
|
|
255
|
+
absolute_path: filePath,
|
|
256
|
+
offset: 5, // Start from line 6
|
|
257
|
+
limit: 3,
|
|
189
258
|
};
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
259
|
+
const invocation = tool.build(params);
|
|
260
|
+
const result = await invocation.execute(abortSignal);
|
|
261
|
+
const expectedLlmContent = `
|
|
262
|
+
IMPORTANT: The file content has been truncated.
|
|
263
|
+
Status: Showing lines 6-8 of 20 total lines.
|
|
264
|
+
Action: To read more of the file, you can use the 'offset' and 'limit' parameters in a subsequent 'read_file' call. For example, to read the next section of the file, use offset: 8.
|
|
265
|
+
|
|
266
|
+
--- FILE CONTENT (truncated) ---
|
|
267
|
+
Line 6
|
|
268
|
+
Line 7
|
|
269
|
+
Line 8`;
|
|
270
|
+
expect(result.llmContent).toEqual(expectedLlmContent);
|
|
271
|
+
expect(result.returnDisplay).toBe('Read lines 6-8 of 20 from paginated.txt');
|
|
195
272
|
});
|
|
196
|
-
|
|
273
|
+
});
|
|
274
|
+
describe('with .llxprtignore for ignored directory', () => {
|
|
275
|
+
beforeEach(async () => {
|
|
276
|
+
await fsp.writeFile(path.join(tempRootDir, '.llxprtignore'), ['foo.*', 'ignored/'].join('\n'));
|
|
277
|
+
});
|
|
278
|
+
it('should throw error if path is in an ignored directory', async () => {
|
|
197
279
|
const ignoredDirPath = path.join(tempRootDir, 'ignored');
|
|
198
280
|
await fsp.mkdir(ignoredDirPath);
|
|
199
281
|
const filePath = path.join(ignoredDirPath, 'somefile.txt');
|
|
@@ -202,10 +284,7 @@ describe('ReadFileTool', () => {
|
|
|
202
284
|
absolute_path: filePath,
|
|
203
285
|
};
|
|
204
286
|
const expectedError = `File path '${filePath}' is ignored by .llxprtignore pattern(s).`;
|
|
205
|
-
expect(
|
|
206
|
-
llmContent: `Error: Invalid parameters provided. Reason: ${expectedError}`,
|
|
207
|
-
returnDisplay: expectedError,
|
|
208
|
-
});
|
|
287
|
+
expect(() => tool.build(params)).toThrow(expectedError);
|
|
209
288
|
});
|
|
210
289
|
});
|
|
211
290
|
});
|
|
@@ -214,24 +293,20 @@ describe('ReadFileTool', () => {
|
|
|
214
293
|
const params = {
|
|
215
294
|
absolute_path: path.join(tempRootDir, 'file.txt'),
|
|
216
295
|
};
|
|
217
|
-
expect(tool.
|
|
296
|
+
expect(() => tool.build(params)).not.toThrow();
|
|
218
297
|
});
|
|
219
298
|
it('should reject paths outside workspace root', () => {
|
|
220
299
|
const params = {
|
|
221
300
|
absolute_path: '/etc/passwd',
|
|
222
301
|
};
|
|
223
|
-
|
|
224
|
-
expect(error).toContain('File path must be within one of the workspace directories');
|
|
225
|
-
expect(error).toContain(tempRootDir);
|
|
302
|
+
expect(() => tool.build(params)).toThrow('File path must be within one of the workspace directories');
|
|
226
303
|
});
|
|
227
304
|
it('should provide clear error message with workspace directories', () => {
|
|
228
305
|
const outsidePath = path.join(os.tmpdir(), 'outside-workspace.txt');
|
|
229
306
|
const params = {
|
|
230
307
|
absolute_path: outsidePath,
|
|
231
308
|
};
|
|
232
|
-
|
|
233
|
-
expect(error).toContain('File path must be within one of the workspace directories');
|
|
234
|
-
expect(error).toContain(tempRootDir);
|
|
309
|
+
expect(() => tool.build(params)).toThrow('File path must be within one of the workspace directories');
|
|
235
310
|
});
|
|
236
311
|
});
|
|
237
312
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-file.test.js","sourceRoot":"","sources":["../../../src/tools/read-file.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"read-file.test.js","sourceRoot":"","sources":["../../../src/tools/read-file.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AAClE,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,GAAG,MAAM,aAAa,CAAC;AAE9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AAGnF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,WAAmB,CAAC;IACxB,IAAI,IAAkB,CAAC;IACvB,MAAM,WAAW,GAAG,IAAI,eAAe,EAAE,CAAC,MAAM,CAAC;IAEjD,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,6DAA6D;QAC7D,WAAW,GAAG,MAAM,GAAG,CAAC,OAAO,CAC7B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAC/C,CAAC;QACF,MAAM,kBAAkB,GAAG;YACzB,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,oBAAoB,CAAC,WAAW,CAAC;YAC3D,YAAY,EAAE,GAAG,EAAE,CAAC,WAAW;YAC/B,mBAAmB,EAAE,GAAG,EAAE,CAAC,0BAA0B,CAAC,WAAW,CAAC;SAC9C,CAAC;QACvB,IAAI,GAAG,IAAI,YAAY,CAAC,kBAAkB,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,wCAAwC;QACxC,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/B,MAAM,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,EAAE,CAAC,0EAA0E,EAAE,GAAG,EAAE;YAClF,MAAM,MAAM,GAAuB;gBACjC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;aAClD,CAAC;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,CACH,MAAyD,CAAC,MAAM,CAClE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC5E,MAAM,MAAM,GAAuB;gBACjC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;gBACjD,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,EAAE;aACV,CAAC;YACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;YACjE,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CACtC,4FAA4F,CAC7F,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC;YAClE,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;YAClE,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CACtC,2DAA2D,CAC5D,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,MAAM,GAAuB;gBACjC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;gBACjD,MAAM,EAAE,CAAC,CAAC;gBACV,KAAK,EAAE,EAAE;aACV,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CACtC,sCAAsC,CACvC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,UAAU,GAAuB;gBACrC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;gBACjD,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,CAAC;aACT,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAC1C,iCAAiC,CAClC,CAAC;YACF,MAAM,cAAc,GAAuB;gBACzC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;gBACjD,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,CAAC,CAAC;aACV,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAC9C,iCAAiC,CAClC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;YAC9E,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC,EAAmC,CAAC;YAC9D,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CACtC,oDAAoD,CACrD,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;YAC9B,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;gBAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;gBAClE,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;gBAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC7C,MAAM,CAEF,UACD,CAAC,cAAc,EAAE,CACnB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;gBACvD,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC;gBAClE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC7C,MAAM,CAEF,UACD,CAAC,cAAc,EAAE,CACnB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;YACvB,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;gBAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;gBAC3D,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;gBAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAGnC,CAAC;gBACF,MAAM,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;oBACpD,UAAU,EAAE,mBAAmB,QAAQ,EAAE;oBACzC,aAAa,EAAE,iBAAiB;iBACjC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;gBAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;gBACxD,MAAM,WAAW,GAAG,sBAAsB,CAAC;gBAC3C,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;gBACpD,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;gBAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAGnC,CAAC;gBAEF,MAAM,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;oBACpD,UAAU,EAAE,WAAW;oBACvB,aAAa,EAAE,EAAE;iBAClB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;gBAC9D,sCAAsC;gBACtC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;oBAC7B,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;oBACrE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;oBACnE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;oBACnE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG;iBACpC,CAAC,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gBACrD,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAC1C,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;gBAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAGnC,CAAC;gBAEF,MAAM,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;oBACpD,UAAU,EAAE;wBACV,UAAU,EAAE;4BACV,QAAQ,EAAE,WAAW;4BACrB,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;yBACpC;qBACF;oBACD,aAAa,EAAE,4BAA4B;iBAC5C,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;gBAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;gBAC1D,MAAM,WAAW,GAAG,yBAAyB,CAAC;gBAC9C,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;gBACpD,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;gBAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAGnC,CAAC;gBAEF,MAAM,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;oBACpD,UAAU,EAAE;wBACV,UAAU,EAAE;4BACV,QAAQ,EAAE,WAAW;4BACrB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;yBAClD;qBACF;oBACD,aAAa,EAAE,iCAAiC;iBACjD,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;gBACtF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;gBACzD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAC5B,EAAE,MAAM,EAAE,EAAE,EAAE,EACd,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAC1B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACb,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;gBAEpD,MAAM,MAAM,GAAuB;oBACjC,aAAa,EAAE,QAAQ;oBACvB,MAAM,EAAE,CAAC,EAAE,oBAAoB;oBAC/B,KAAK,EAAE,CAAC;iBACT,CAAC;gBACF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAGnC,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAErD,MAAM,kBAAkB,GAAG;;;;;;;;OAQ5B,CAAC;gBAEA,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBACtD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAC/B,yCAAyC,CAC1C,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;gBAClC,UAAU,CAAC,KAAK,IAAI,EAAE;oBACpB,MAAM,GAAG,CAAC,SAAS,CACjB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,EACvC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACjC,CAAC;gBACJ,CAAC,CAAC,CAAC;gBAEH,EAAE,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;oBAChF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;oBAC1D,MAAM,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;oBACzD,MAAM,MAAM,GAAuB;wBACjC,aAAa,EAAE,eAAe;qBAC/B,CAAC;oBACF,MAAM,aAAa,GAAG,cAAc,eAAe,2CAA2C,CAAC;oBAC/F,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBAC1D,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;gBAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;gBACxD,MAAM,WAAW,GAAG,sBAAsB,CAAC;gBAC3C,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;gBACpD,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;gBAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAGnC,CAAC;gBAEF,MAAM,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;oBACpD,UAAU,EAAE,WAAW;oBACvB,aAAa,EAAE,EAAE;iBAClB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;gBAC9D,sCAAsC;gBACtC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;oBAC7B,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;oBACrE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;oBACnE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;oBACnE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG;iBACpC,CAAC,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;gBACrD,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAC1C,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;gBAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAGnC,CAAC;gBAEF,MAAM,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;oBACpD,UAAU,EAAE;wBACV,UAAU,EAAE;4BACV,QAAQ,EAAE,WAAW;4BACrB,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;yBACpC;qBACF;oBACD,aAAa,EAAE,4BAA4B;iBAC5C,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;gBAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC;gBAC1D,MAAM,WAAW,GAAG,yBAAyB,CAAC;gBAC9C,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;gBACpD,MAAM,MAAM,GAAuB,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;gBAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAGnC,CAAC;gBAEF,MAAM,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;oBACpD,UAAU,EAAE;wBACV,UAAU,EAAE;4BACV,QAAQ,EAAE,WAAW;4BACrB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;yBAClD;qBACF;oBACD,aAAa,EAAE,iCAAiC;iBACjD,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;gBAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;gBACzD,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAC5B,EAAE,MAAM,EAAE,EAAE,EAAE,EACd,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAC1B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACb,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;gBAEpD,MAAM,MAAM,GAAuB;oBACjC,aAAa,EAAE,QAAQ;oBACvB,MAAM,EAAE,CAAC,EAAE,oBAAoB;oBAC/B,KAAK,EAAE,CAAC;iBACT,CAAC;gBACF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAGnC,CAAC;gBAEF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;gBAErD,MAAM,kBAAkB,GAAG;;;;;;;;OAQ5B,CAAC;gBAEA,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;gBACtD,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAC/B,yCAAyC,CAC1C,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;YACxD,UAAU,CAAC,KAAK,IAAI,EAAE;gBACpB,MAAM,GAAG,CAAC,SAAS,CACjB,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,EACvC,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACjC,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;gBACrE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;gBACzD,MAAM,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;gBAC3D,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;gBAElD,MAAM,MAAM,GAAuB;oBACjC,aAAa,EAAE,QAAQ;iBACxB,CAAC;gBACF,MAAM,aAAa,GAAG,cAAc,QAAQ,2CAA2C,CAAC;gBACxF,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;QAC7C,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,MAAM,GAAuB;gBACjC,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;aAClD,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,MAAM,GAAuB;gBACjC,aAAa,EAAE,aAAa;aAC7B,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CACtC,2DAA2D,CAC5D,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC;YACpE,MAAM,MAAM,GAAuB;gBACjC,aAAa,EAAE,WAAW;aAC3B,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CACtC,2DAA2D,CAC5D,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|