unity-agentic-tools 0.5.1 → 0.6.1
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 +49 -103
- package/dist/animator-utils.d.ts +46 -0
- package/dist/animator-utils.d.ts.map +1 -0
- package/dist/animator-utils.js +161 -0
- package/dist/animator-utils.js.map +1 -0
- package/dist/bridge-install.d.ts +11 -0
- package/dist/bridge-install.d.ts.map +1 -0
- package/dist/bridge-install.js +23 -0
- package/dist/bridge-install.js.map +1 -0
- package/dist/build-settings.d.ts +43 -0
- package/dist/build-settings.d.ts.map +1 -0
- package/dist/build-settings.js +196 -0
- package/dist/build-settings.js.map +1 -0
- package/dist/build-version.d.ts +40 -0
- package/dist/build-version.d.ts.map +1 -0
- package/dist/build-version.js +114 -0
- package/dist/build-version.js.map +1 -0
- package/dist/class-ids.d.ts +30 -0
- package/dist/class-ids.d.ts.map +1 -0
- package/dist/class-ids.js +322 -0
- package/dist/class-ids.js.map +1 -0
- package/dist/cleanup.d.ts +21 -0
- package/dist/cleanup.d.ts.map +1 -0
- package/dist/cleanup.js +161 -0
- package/dist/cleanup.js.map +1 -0
- package/dist/cli-output.d.ts +7 -0
- package/dist/cli-output.d.ts.map +1 -0
- package/dist/cli-output.js +24 -0
- package/dist/cli-output.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +795 -8143
- package/dist/cli.js.map +1 -0
- package/dist/doc-indexer-cli.js +1 -1
- package/dist/editor-client.d.ts +18 -0
- package/dist/editor-client.d.ts.map +1 -0
- package/dist/editor-client.js +256 -0
- package/dist/editor-client.js.map +1 -0
- package/dist/editor-discovery.d.ts +17 -0
- package/dist/editor-discovery.d.ts.map +1 -0
- package/dist/editor-discovery.js +248 -0
- package/dist/editor-discovery.js.map +1 -0
- package/dist/editor-transport.d.ts +30 -0
- package/dist/editor-transport.d.ts.map +1 -0
- package/dist/editor-transport.js +175 -0
- package/dist/editor-transport.js.map +1 -0
- package/dist/gitignore.d.ts +3 -0
- package/dist/gitignore.d.ts.map +1 -0
- package/dist/gitignore.js +40 -0
- package/dist/gitignore.js.map +1 -0
- package/dist/guid-cache.d.ts +45 -0
- package/dist/guid-cache.d.ts.map +1 -0
- package/dist/guid-cache.js +111 -0
- package/dist/guid-cache.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +743 -8040
- package/dist/index.js.map +1 -0
- package/dist/loaded-protection.d.ts +6 -0
- package/dist/loaded-protection.d.ts.map +1 -0
- package/dist/loaded-protection.js +95 -0
- package/dist/loaded-protection.js.map +1 -0
- package/dist/packages.d.ts +55 -0
- package/dist/packages.d.ts.map +1 -0
- package/dist/packages.js +102 -0
- package/dist/packages.js.map +1 -0
- package/dist/params.d.ts +54 -0
- package/dist/params.d.ts.map +1 -0
- package/dist/params.js +106 -0
- package/dist/params.js.map +1 -0
- package/dist/project-search.d.ts +16 -0
- package/dist/project-search.d.ts.map +1 -0
- package/dist/project-search.js +538 -0
- package/dist/project-search.js.map +1 -0
- package/dist/scanner.d.ts +150 -0
- package/dist/scanner.d.ts.map +1 -0
- package/dist/scanner.js +223 -0
- package/dist/scanner.js.map +1 -0
- package/dist/setup.d.ts +25 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +185 -0
- package/dist/setup.js.map +1 -0
- package/dist/types.d.ts +390 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/util.d.ts +2 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +7 -0
- package/dist/util.js.map +1 -0
- package/dist/utils.d.ts +82 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +291 -0
- package/dist/utils.js.map +1 -0
- package/native/unity-file-tools.darwin-arm64.node +0 -0
- package/native/unity-file-tools.darwin-x64.node +0 -0
- package/native/unity-file-tools.linux-x64-gnu.node +0 -0
- package/native/unity-file-tools.win32-x64-msvc.node +0 -0
- package/package.json +4 -3
|
@@ -0,0 +1,538 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.walk_project_files = walk_project_files;
|
|
37
|
+
exports.search_project = search_project;
|
|
38
|
+
exports.grep_project = grep_project;
|
|
39
|
+
const fs_1 = require("fs");
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const scanner_1 = require("./scanner");
|
|
42
|
+
const utils_1 = require("./utils");
|
|
43
|
+
/** File extensions considered binary — skip for grep. */
|
|
44
|
+
const BINARY_EXTENSIONS = new Set([
|
|
45
|
+
'.png', '.jpg', '.jpeg', '.gif', '.bmp', '.tga', '.psd', '.tif', '.tiff',
|
|
46
|
+
'.fbx', '.obj', '.dae', '.blend', '.3ds', '.max',
|
|
47
|
+
'.dll', '.so', '.dylib', '.exe', '.a', '.lib',
|
|
48
|
+
'.mp3', '.wav', '.ogg', '.aif', '.aiff',
|
|
49
|
+
'.mp4', '.mov', '.avi', '.wmv',
|
|
50
|
+
'.zip', '.gz', '.tar', '.rar', '.7z',
|
|
51
|
+
'.ttf', '.otf', '.woff', '.woff2',
|
|
52
|
+
'.bank', '.bytes', '.db',
|
|
53
|
+
]);
|
|
54
|
+
/** Directories to always skip during walk. */
|
|
55
|
+
const SKIP_DIRS = new Set(['Library', 'Temp', 'obj', 'Logs', '.git', '.unity-agentic', 'node_modules']);
|
|
56
|
+
/**
|
|
57
|
+
* Recursively walk a Unity project directory and collect files with given extensions.
|
|
58
|
+
* Uses native Rust walker when available, falls back to JS implementation.
|
|
59
|
+
*/
|
|
60
|
+
function walk_project_files(project_path, extensions, exclude_dirs) {
|
|
61
|
+
// Try native Rust walker first
|
|
62
|
+
const nativeWalk = (0, scanner_1.getNativeWalkProjectFiles)();
|
|
63
|
+
if (nativeWalk) {
|
|
64
|
+
try {
|
|
65
|
+
return nativeWalk(project_path, extensions, exclude_dirs ?? null);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Fall through to JS implementation
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return walk_project_files_js(project_path, extensions, exclude_dirs);
|
|
72
|
+
}
|
|
73
|
+
/** JS fallback implementation of walk_project_files. */
|
|
74
|
+
function walk_project_files_js(project_path, extensions, exclude_dirs) {
|
|
75
|
+
const result = [];
|
|
76
|
+
const skipSet = new Set([...SKIP_DIRS, ...(exclude_dirs || [])]);
|
|
77
|
+
const extSet = new Set(extensions.map(e => e.startsWith('.') ? e : `.${e}`));
|
|
78
|
+
function walk(dir) {
|
|
79
|
+
let entries;
|
|
80
|
+
try {
|
|
81
|
+
entries = (0, fs_1.readdirSync)(dir);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
for (const entry of entries) {
|
|
87
|
+
const full = path.join(dir, entry);
|
|
88
|
+
let stat;
|
|
89
|
+
try {
|
|
90
|
+
stat = (0, fs_1.statSync)(full);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (stat.isDirectory()) {
|
|
96
|
+
if (!skipSet.has(entry)) {
|
|
97
|
+
walk(full);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
else if (stat.isFile()) {
|
|
101
|
+
const ext = path.extname(entry).toLowerCase();
|
|
102
|
+
if (extSet.has(ext)) {
|
|
103
|
+
result.push(full);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Walk from Assets/ if it exists, otherwise walk project_path directly
|
|
109
|
+
// (handles both project-root paths and subdirectory paths like Assets/Subdir/)
|
|
110
|
+
const assetsDir = path.join(project_path, 'Assets');
|
|
111
|
+
if ((0, fs_1.existsSync)(assetsDir)) {
|
|
112
|
+
walk(assetsDir);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
walk(project_path);
|
|
116
|
+
}
|
|
117
|
+
// Also check ProjectSettings/ for .asset files
|
|
118
|
+
if (extSet.has('.asset')) {
|
|
119
|
+
const settingsDir = path.join(project_path, 'ProjectSettings');
|
|
120
|
+
if ((0, fs_1.existsSync)(settingsDir)) {
|
|
121
|
+
walk(settingsDir);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return result;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Search across all scene/prefab files in a Unity project for GameObjects.
|
|
128
|
+
*/
|
|
129
|
+
function search_project(options) {
|
|
130
|
+
const { project_path, name, exact = false, component, tag, layer, file_type = 'all', max_matches, } = options;
|
|
131
|
+
if (max_matches !== undefined && max_matches < 1) {
|
|
132
|
+
return {
|
|
133
|
+
success: false,
|
|
134
|
+
project_path,
|
|
135
|
+
total_files_scanned: 0,
|
|
136
|
+
total_matches: 0,
|
|
137
|
+
cursor: 0,
|
|
138
|
+
truncated: false,
|
|
139
|
+
matches: [],
|
|
140
|
+
error: '--max-matches must be a positive integer (>= 1)',
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
if (name !== undefined && name.trim() === '') {
|
|
144
|
+
return {
|
|
145
|
+
success: false,
|
|
146
|
+
project_path,
|
|
147
|
+
total_files_scanned: 0,
|
|
148
|
+
total_matches: 0,
|
|
149
|
+
cursor: 0,
|
|
150
|
+
truncated: false,
|
|
151
|
+
matches: [],
|
|
152
|
+
error: 'Name pattern must not be empty',
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
if (!(0, fs_1.existsSync)(project_path)) {
|
|
156
|
+
return {
|
|
157
|
+
success: false,
|
|
158
|
+
project_path,
|
|
159
|
+
total_files_scanned: 0,
|
|
160
|
+
total_matches: 0,
|
|
161
|
+
cursor: 0,
|
|
162
|
+
truncated: false,
|
|
163
|
+
matches: [],
|
|
164
|
+
error: `Project path not found: ${project_path}`,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
// Extension map for asset file types (non-scene/prefab)
|
|
168
|
+
const ASSET_TYPE_EXTENSIONS = {
|
|
169
|
+
mat: ['.mat'],
|
|
170
|
+
anim: ['.anim'],
|
|
171
|
+
controller: ['.controller'],
|
|
172
|
+
asset: ['.asset'],
|
|
173
|
+
};
|
|
174
|
+
// For asset types (mat, anim, controller, asset), use simple file walk + name matching
|
|
175
|
+
const isAssetType = file_type in ASSET_TYPE_EXTENSIONS;
|
|
176
|
+
if (isAssetType) {
|
|
177
|
+
const extensions = ASSET_TYPE_EXTENSIONS[file_type];
|
|
178
|
+
const files = walk_project_files(project_path, extensions);
|
|
179
|
+
const matches = [];
|
|
180
|
+
for (const file of files) {
|
|
181
|
+
const relPath = path.relative(project_path, file);
|
|
182
|
+
const fileName = path.basename(file, path.extname(file));
|
|
183
|
+
// Apply name filter if specified
|
|
184
|
+
if (name) {
|
|
185
|
+
const nameLower = name.toLowerCase();
|
|
186
|
+
const hasWildcard = name.includes('*') || name.includes('?');
|
|
187
|
+
if (hasWildcard) {
|
|
188
|
+
if (!(0, utils_1.glob_match)(name, fileName))
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
else if (exact) {
|
|
192
|
+
if (fileName !== name)
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
if (!fileName.toLowerCase().includes(nameLower))
|
|
197
|
+
continue;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Try to extract m_Name from the first ~20 lines for display
|
|
201
|
+
let display_name = fileName;
|
|
202
|
+
try {
|
|
203
|
+
const content = (0, fs_1.readFileSync)(file, 'utf-8');
|
|
204
|
+
const nameMatch = /^\s*m_Name:\s*(.+)$/m.exec(content.slice(0, 2000));
|
|
205
|
+
if (nameMatch)
|
|
206
|
+
display_name = nameMatch[1].trim();
|
|
207
|
+
}
|
|
208
|
+
catch { /* use filename */ }
|
|
209
|
+
matches.push({
|
|
210
|
+
file: relPath,
|
|
211
|
+
game_object: display_name,
|
|
212
|
+
file_id: '0',
|
|
213
|
+
});
|
|
214
|
+
if (max_matches !== undefined && matches.length >= max_matches)
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
return {
|
|
218
|
+
success: true,
|
|
219
|
+
project_path,
|
|
220
|
+
total_files_scanned: files.length,
|
|
221
|
+
total_matches: matches.length,
|
|
222
|
+
cursor: 0,
|
|
223
|
+
truncated: max_matches !== undefined && matches.length >= max_matches,
|
|
224
|
+
matches,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
// Scene/prefab types require the native scanner
|
|
228
|
+
if (!(0, scanner_1.isNativeModuleAvailable)()) {
|
|
229
|
+
return {
|
|
230
|
+
success: false,
|
|
231
|
+
project_path,
|
|
232
|
+
total_files_scanned: 0,
|
|
233
|
+
total_matches: 0,
|
|
234
|
+
cursor: 0,
|
|
235
|
+
truncated: false,
|
|
236
|
+
matches: [],
|
|
237
|
+
error: 'Native scanner module not available. Run bun install in the project root.',
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
// Determine extensions to scan (scene/prefab types use the scanner)
|
|
241
|
+
const extensions = [];
|
|
242
|
+
if (file_type === 'scene' || file_type === 'all')
|
|
243
|
+
extensions.push('.unity');
|
|
244
|
+
if (file_type === 'prefab' || file_type === 'all')
|
|
245
|
+
extensions.push('.prefab');
|
|
246
|
+
const files = walk_project_files(project_path, extensions);
|
|
247
|
+
const scanner = new scanner_1.UnityScanner();
|
|
248
|
+
const matches = [];
|
|
249
|
+
let files_with_errors = 0;
|
|
250
|
+
for (const file of files) {
|
|
251
|
+
try {
|
|
252
|
+
let gameObjects;
|
|
253
|
+
// Three-path search strategy:
|
|
254
|
+
// 1. Name-only: find_by_name (fast — regex match, no block extraction)
|
|
255
|
+
// 2. Tag/layer without component: scan_scene_metadata (medium — GO block only)
|
|
256
|
+
// 3. Component filter: scan_scene_with_components (slow — full extraction)
|
|
257
|
+
const needComponents = !!component;
|
|
258
|
+
const needMetadata = !!(tag || layer !== undefined);
|
|
259
|
+
if (name && !needMetadata && !needComponents) {
|
|
260
|
+
// Fast path: name search only
|
|
261
|
+
gameObjects = scanner.find_by_name(file, name, !exact);
|
|
262
|
+
}
|
|
263
|
+
else if (needComponents) {
|
|
264
|
+
// Slow path: need full component data
|
|
265
|
+
gameObjects = scanner.scan_scene_with_components(file);
|
|
266
|
+
// If name filter is also specified, post-filter by name
|
|
267
|
+
if (name && !(0, utils_1.is_match_all)(name)) {
|
|
268
|
+
const nameLower = name.toLowerCase();
|
|
269
|
+
const hasWildcard = name.includes('*') || name.includes('?');
|
|
270
|
+
gameObjects = gameObjects.filter((go) => {
|
|
271
|
+
if (!go.name)
|
|
272
|
+
return false;
|
|
273
|
+
if (hasWildcard) {
|
|
274
|
+
return (0, utils_1.glob_match)(name, go.name);
|
|
275
|
+
}
|
|
276
|
+
if (exact) {
|
|
277
|
+
return go.name === name;
|
|
278
|
+
}
|
|
279
|
+
return go.name.toLowerCase().includes(nameLower);
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
else if (needMetadata) {
|
|
284
|
+
// Medium path: tag/layer only — no component extraction
|
|
285
|
+
gameObjects = scanner.scan_scene_metadata(file);
|
|
286
|
+
// If name filter is also specified, post-filter by name
|
|
287
|
+
if (name && !(0, utils_1.is_match_all)(name)) {
|
|
288
|
+
const nameLower = name.toLowerCase();
|
|
289
|
+
const hasWildcard = name.includes('*') || name.includes('?');
|
|
290
|
+
gameObjects = gameObjects.filter((go) => {
|
|
291
|
+
if (!go.name)
|
|
292
|
+
return false;
|
|
293
|
+
if (hasWildcard) {
|
|
294
|
+
return (0, utils_1.glob_match)(name, go.name);
|
|
295
|
+
}
|
|
296
|
+
if (exact) {
|
|
297
|
+
return go.name === name;
|
|
298
|
+
}
|
|
299
|
+
return go.name.toLowerCase().includes(nameLower);
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
gameObjects = scanner.scan_scene_minimal(file);
|
|
305
|
+
}
|
|
306
|
+
// Apply filters
|
|
307
|
+
for (const go of gameObjects) {
|
|
308
|
+
// When using name search, results are FindResult union type.
|
|
309
|
+
// Tag/layer/component filters only apply to GameObjects (not PrefabInstances).
|
|
310
|
+
const isFindResult = 'resultType' in go;
|
|
311
|
+
const isPrefab = isFindResult && go.resultType === 'PrefabInstance';
|
|
312
|
+
if (isPrefab && (component || tag || layer !== undefined)) {
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
// Component filter (supports glob patterns: * and ?)
|
|
316
|
+
if (component) {
|
|
317
|
+
if ('components' in go && go.components) {
|
|
318
|
+
const hasComponent = go.components.some((c) => (0, utils_1.glob_match)(component, c.type));
|
|
319
|
+
if (!hasComponent)
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
continue;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// Tag filter — skip if tag is missing or doesn't match
|
|
327
|
+
if (tag) {
|
|
328
|
+
if (!('tag' in go) || go.tag !== tag)
|
|
329
|
+
continue;
|
|
330
|
+
}
|
|
331
|
+
// Layer filter — skip if layer is missing or doesn't match
|
|
332
|
+
if (layer !== undefined) {
|
|
333
|
+
if (!('layer' in go) || go.layer !== layer)
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
const relPath = path.relative(project_path, file);
|
|
337
|
+
const fileId = isFindResult
|
|
338
|
+
? go.fileId
|
|
339
|
+
: go.file_id;
|
|
340
|
+
const match = {
|
|
341
|
+
file: relPath,
|
|
342
|
+
game_object: go.name,
|
|
343
|
+
file_id: fileId,
|
|
344
|
+
tag: 'tag' in go ? go.tag : undefined,
|
|
345
|
+
layer: 'layer' in go ? go.layer : undefined,
|
|
346
|
+
};
|
|
347
|
+
// Include component types if available
|
|
348
|
+
if ('components' in go && go.components) {
|
|
349
|
+
match.components = go.components.map((c) => c.type);
|
|
350
|
+
}
|
|
351
|
+
matches.push(match);
|
|
352
|
+
if (max_matches !== undefined && matches.length >= max_matches)
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
if (max_matches !== undefined && matches.length >= max_matches)
|
|
356
|
+
break;
|
|
357
|
+
}
|
|
358
|
+
catch {
|
|
359
|
+
files_with_errors++;
|
|
360
|
+
continue;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
return {
|
|
364
|
+
success: true,
|
|
365
|
+
project_path,
|
|
366
|
+
total_files_scanned: files.length,
|
|
367
|
+
total_matches: matches.length,
|
|
368
|
+
files_with_errors: files_with_errors > 0 ? files_with_errors : undefined,
|
|
369
|
+
cursor: 0,
|
|
370
|
+
truncated: max_matches !== undefined && matches.length >= max_matches,
|
|
371
|
+
matches,
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
// ========== Project Grep ==========
|
|
375
|
+
/**
|
|
376
|
+
* Search for a regex pattern across project files.
|
|
377
|
+
* Uses native Rust grep when available, falls back to JS implementation.
|
|
378
|
+
*/
|
|
379
|
+
function grep_project(options) {
|
|
380
|
+
// Try native Rust grep first
|
|
381
|
+
const nativeGrep = (0, scanner_1.getNativeGrepProject)();
|
|
382
|
+
if (nativeGrep) {
|
|
383
|
+
try {
|
|
384
|
+
const nativeResult = nativeGrep({
|
|
385
|
+
projectPath: options.project_path,
|
|
386
|
+
pattern: options.pattern,
|
|
387
|
+
fileType: options.file_type,
|
|
388
|
+
maxResults: options.max_results,
|
|
389
|
+
contextLines: options.context_lines,
|
|
390
|
+
});
|
|
391
|
+
// Map camelCase napi result to snake_case TS types
|
|
392
|
+
return {
|
|
393
|
+
success: nativeResult.success,
|
|
394
|
+
project_path: nativeResult.projectPath,
|
|
395
|
+
pattern: nativeResult.pattern,
|
|
396
|
+
total_files_scanned: nativeResult.totalFilesScanned,
|
|
397
|
+
total_matches: nativeResult.totalMatches,
|
|
398
|
+
truncated: nativeResult.truncated,
|
|
399
|
+
error: nativeResult.error,
|
|
400
|
+
matches: nativeResult.matches.map((m) => ({
|
|
401
|
+
file: m.file,
|
|
402
|
+
line_number: m.lineNumber,
|
|
403
|
+
line: m.line,
|
|
404
|
+
context_before: m.contextBefore,
|
|
405
|
+
context_after: m.contextAfter,
|
|
406
|
+
})),
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
catch {
|
|
410
|
+
// Fall through to JS implementation
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
return grep_project_js(options);
|
|
414
|
+
}
|
|
415
|
+
/** JS fallback implementation of grep_project. */
|
|
416
|
+
function grep_project_js(options) {
|
|
417
|
+
const { project_path, pattern, file_type = 'all', max_results = 100, context_lines = 0, } = options;
|
|
418
|
+
if (!(0, fs_1.existsSync)(project_path)) {
|
|
419
|
+
return {
|
|
420
|
+
success: false,
|
|
421
|
+
project_path,
|
|
422
|
+
pattern,
|
|
423
|
+
total_files_scanned: 0,
|
|
424
|
+
total_matches: 0,
|
|
425
|
+
truncated: false,
|
|
426
|
+
matches: [],
|
|
427
|
+
error: `Project path not found: ${project_path}`,
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
// Compile regex
|
|
431
|
+
let regex;
|
|
432
|
+
try {
|
|
433
|
+
regex = new RegExp(pattern, 'i');
|
|
434
|
+
}
|
|
435
|
+
catch (err) {
|
|
436
|
+
return {
|
|
437
|
+
success: false,
|
|
438
|
+
project_path,
|
|
439
|
+
pattern,
|
|
440
|
+
total_files_scanned: 0,
|
|
441
|
+
total_matches: 0,
|
|
442
|
+
truncated: false,
|
|
443
|
+
matches: [],
|
|
444
|
+
error: `Invalid regex pattern: ${err instanceof Error ? err.message : String(err)}`,
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
// Determine extensions
|
|
448
|
+
const EXTENSION_MAP = {
|
|
449
|
+
cs: ['.cs'],
|
|
450
|
+
yaml: [
|
|
451
|
+
'.yaml', '.yml', '.unity', '.prefab', '.asset',
|
|
452
|
+
'.mat', '.anim', '.controller', '.overrideController',
|
|
453
|
+
'.mask', '.mixer', '.lighting', '.preset', '.signal',
|
|
454
|
+
'.playable', '.renderTexture', '.flare', '.guiskin',
|
|
455
|
+
'.terrainlayer', '.cubemap',
|
|
456
|
+
],
|
|
457
|
+
unity: ['.unity'],
|
|
458
|
+
prefab: ['.prefab'],
|
|
459
|
+
asset: ['.asset'],
|
|
460
|
+
mat: ['.mat'],
|
|
461
|
+
anim: ['.anim'],
|
|
462
|
+
controller: ['.controller'],
|
|
463
|
+
all: [
|
|
464
|
+
'.cs', '.unity', '.prefab', '.asset', '.mat', '.anim', '.controller',
|
|
465
|
+
'.yaml', '.yml', '.txt', '.json', '.xml', '.shader', '.cginc', '.hlsl',
|
|
466
|
+
'.compute', '.asmdef', '.asmref',
|
|
467
|
+
],
|
|
468
|
+
};
|
|
469
|
+
const extensions = EXTENSION_MAP[file_type] || EXTENSION_MAP.all;
|
|
470
|
+
const files = walk_project_files(project_path, extensions);
|
|
471
|
+
const matches = [];
|
|
472
|
+
let totalFilesScanned = 0;
|
|
473
|
+
let truncated = false;
|
|
474
|
+
for (const file of files) {
|
|
475
|
+
// Skip binary files
|
|
476
|
+
const ext = path.extname(file).toLowerCase();
|
|
477
|
+
if (BINARY_EXTENSIONS.has(ext))
|
|
478
|
+
continue;
|
|
479
|
+
totalFilesScanned++;
|
|
480
|
+
let content;
|
|
481
|
+
try {
|
|
482
|
+
content = (0, fs_1.readFileSync)(file, 'utf-8');
|
|
483
|
+
}
|
|
484
|
+
catch {
|
|
485
|
+
continue;
|
|
486
|
+
}
|
|
487
|
+
const lines = content.split('\n');
|
|
488
|
+
const relPath = path.relative(project_path, file);
|
|
489
|
+
for (let i = 0; i < lines.length; i++) {
|
|
490
|
+
if (regex.test(lines[i])) {
|
|
491
|
+
// Truncate long lines for token efficiency
|
|
492
|
+
let line = lines[i];
|
|
493
|
+
if (line.length > 200) {
|
|
494
|
+
line = line.substring(0, 200) + '...';
|
|
495
|
+
}
|
|
496
|
+
const match = {
|
|
497
|
+
file: relPath,
|
|
498
|
+
line_number: i + 1,
|
|
499
|
+
line,
|
|
500
|
+
};
|
|
501
|
+
// Add context lines if requested
|
|
502
|
+
if (context_lines > 0) {
|
|
503
|
+
match.context_before = [];
|
|
504
|
+
match.context_after = [];
|
|
505
|
+
for (let j = Math.max(0, i - context_lines); j < i; j++) {
|
|
506
|
+
let ctxLine = lines[j];
|
|
507
|
+
if (ctxLine.length > 200)
|
|
508
|
+
ctxLine = ctxLine.substring(0, 200) + '...';
|
|
509
|
+
match.context_before.push(ctxLine);
|
|
510
|
+
}
|
|
511
|
+
for (let j = i + 1; j <= Math.min(lines.length - 1, i + context_lines); j++) {
|
|
512
|
+
let ctxLine = lines[j];
|
|
513
|
+
if (ctxLine.length > 200)
|
|
514
|
+
ctxLine = ctxLine.substring(0, 200) + '...';
|
|
515
|
+
match.context_after.push(ctxLine);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
matches.push(match);
|
|
519
|
+
if (matches.length >= max_results) {
|
|
520
|
+
truncated = true;
|
|
521
|
+
break;
|
|
522
|
+
}
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
if (truncated)
|
|
526
|
+
break;
|
|
527
|
+
}
|
|
528
|
+
return {
|
|
529
|
+
success: true,
|
|
530
|
+
project_path,
|
|
531
|
+
pattern,
|
|
532
|
+
total_files_scanned: totalFilesScanned,
|
|
533
|
+
total_matches: matches.length,
|
|
534
|
+
truncated,
|
|
535
|
+
matches,
|
|
536
|
+
};
|
|
537
|
+
}
|
|
538
|
+
//# sourceMappingURL=project-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-search.js","sourceRoot":"","sources":["../src/project-search.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4DA,gDAgBC;AAkED,wCAwQC;AAQD,oCAmCC;AAjcD,2BAAqE;AACrE,2CAA6B;AAC7B,uCAAmH;AACnH,mCAAmD;AAsCnD,yDAAyD;AACzD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC;IAC9B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IACxE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM;IAChD,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAC7C,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IACvC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAC9B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK;IACpC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ;IACjC,OAAO,EAAE,QAAQ,EAAE,KAAK;CAC3B,CAAC,CAAC;AAEH,8CAA8C;AAC9C,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC;AAExG;;;GAGG;AACH,SAAgB,kBAAkB,CAC9B,YAAoB,EACpB,UAAoB,EACpB,YAAuB;IAEvB,+BAA+B;IAC/B,MAAM,UAAU,GAAG,IAAA,mCAAyB,GAAE,CAAC;IAC/C,IAAI,UAAU,EAAE,CAAC;QACb,IAAI,CAAC;YACD,OAAO,UAAU,CAAC,YAAY,EAAE,UAAU,EAAE,YAAY,IAAI,IAAI,CAAC,CAAC;QACtE,CAAC;QAAC,MAAM,CAAC;YACL,oCAAoC;QACxC,CAAC;IACL,CAAC;IAED,OAAO,qBAAqB,CAAC,YAAY,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;AACzE,CAAC;AAED,wDAAwD;AACxD,SAAS,qBAAqB,CAC1B,YAAoB,EACpB,UAAoB,EACpB,YAAuB;IAEvB,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAE7E,SAAS,IAAI,CAAC,GAAW;QACrB,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACD,OAAO,GAAG,IAAA,gBAAW,EAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACL,OAAO;QACX,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAEnC,IAAI,IAAI,CAAC;YACT,IAAI,CAAC;gBACD,IAAI,GAAG,IAAA,aAAQ,EAAC,IAAI,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACL,SAAS;YACb,CAAC;YAED,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC,IAAI,CAAC,CAAC;gBACf,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBACvB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC9C,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,+EAA+E;IAC/E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACpD,IAAI,IAAA,eAAU,EAAC,SAAS,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,CAAC;IACpB,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,YAAY,CAAC,CAAC;IACvB,CAAC;IAED,+CAA+C;IAC/C,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;QAC/D,IAAI,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,WAAW,CAAC,CAAC;QACtB,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAAC,OAA6B;IACxD,MAAM,EACF,YAAY,EACZ,IAAI,EACJ,KAAK,GAAG,KAAK,EACb,SAAS,EACT,GAAG,EACH,KAAK,EACL,SAAS,GAAG,KAAK,EACjB,WAAW,GACd,GAAG,OAAO,CAAC;IAEZ,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QAC/C,OAAO;YACH,OAAO,EAAE,KAAK;YACd,YAAY;YACZ,mBAAmB,EAAE,CAAC;YACtB,aAAa,EAAE,CAAC;YAChB,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,iDAAiD;SAC3D,CAAC;IACN,CAAC;IAED,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3C,OAAO;YACH,OAAO,EAAE,KAAK;YACd,YAAY;YACZ,mBAAmB,EAAE,CAAC;YACtB,aAAa,EAAE,CAAC;YAChB,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,gCAAgC;SAC1C,CAAC;IACN,CAAC;IAED,IAAI,CAAC,IAAA,eAAU,EAAC,YAAY,CAAC,EAAE,CAAC;QAC5B,OAAO;YACH,OAAO,EAAE,KAAK;YACd,YAAY;YACZ,mBAAmB,EAAE,CAAC;YACtB,aAAa,EAAE,CAAC;YAChB,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,2BAA2B,YAAY,EAAE;SACnD,CAAC;IACN,CAAC;IAED,wDAAwD;IACxD,MAAM,qBAAqB,GAA6B;QACpD,GAAG,EAAE,CAAC,MAAM,CAAC;QACb,IAAI,EAAE,CAAC,OAAO,CAAC;QACf,UAAU,EAAE,CAAC,aAAa,CAAC;QAC3B,KAAK,EAAE,CAAC,QAAQ,CAAC;KACpB,CAAC;IAEF,uFAAuF;IACvF,MAAM,WAAW,GAAG,SAAS,IAAI,qBAAqB,CAAC;IACvD,IAAI,WAAW,EAAE,CAAC;QACd,MAAM,UAAU,GAAG,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,kBAAkB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAyB,EAAE,CAAC;QAEzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAEzD,iCAAiC;YACjC,IAAI,IAAI,EAAE,CAAC;gBACP,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC7D,IAAI,WAAW,EAAE,CAAC;oBACd,IAAI,CAAC,IAAA,kBAAU,EAAC,IAAI,EAAE,QAAQ,CAAC;wBAAE,SAAS;gBAC9C,CAAC;qBAAM,IAAI,KAAK,EAAE,CAAC;oBACf,IAAI,QAAQ,KAAK,IAAI;wBAAE,SAAS;gBACpC,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC;wBAAE,SAAS;gBAC9D,CAAC;YACL,CAAC;YAED,6DAA6D;YAC7D,IAAI,YAAY,GAAG,QAAQ,CAAC;YAC5B,IAAI,CAAC;gBACD,MAAM,OAAO,GAAG,IAAA,iBAAY,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC5C,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;gBACtE,IAAI,SAAS;oBAAE,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACtD,CAAC;YAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;YAE9B,OAAO,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,YAAY;gBACzB,OAAO,EAAE,GAAG;aACf,CAAC,CAAC;YAEH,IAAI,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,WAAW;gBAAE,MAAM;QAC1E,CAAC;QAED,OAAO;YACH,OAAO,EAAE,IAAI;YACb,YAAY;YACZ,mBAAmB,EAAE,KAAK,CAAC,MAAM;YACjC,aAAa,EAAE,OAAO,CAAC,MAAM;YAC7B,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,WAAW;YACrE,OAAO;SACV,CAAC;IACN,CAAC;IAED,gDAAgD;IAChD,IAAI,CAAC,IAAA,iCAAuB,GAAE,EAAE,CAAC;QAC7B,OAAO;YACH,OAAO,EAAE,KAAK;YACd,YAAY;YACZ,mBAAmB,EAAE,CAAC;YACtB,aAAa,EAAE,CAAC;YAChB,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,2EAA2E;SACrF,CAAC;IACN,CAAC;IAED,oEAAoE;IACpE,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,KAAK;QAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5E,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,KAAK;QAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAE9E,MAAM,KAAK,GAAG,kBAAkB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAE3D,MAAM,OAAO,GAAG,IAAI,sBAAY,EAAE,CAAC;IACnC,MAAM,OAAO,GAAyB,EAAE,CAAC;IACzC,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAE1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC;YACD,IAAI,WAAW,CAAC;YAEhB,8BAA8B;YAC9B,uEAAuE;YACvE,+EAA+E;YAC/E,2EAA2E;YAC3E,MAAM,cAAc,GAAG,CAAC,CAAC,SAAS,CAAC;YACnC,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC;YAEpD,IAAI,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC3C,8BAA8B;gBAC9B,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;YAC3D,CAAC;iBAAM,IAAI,cAAc,EAAE,CAAC;gBACxB,sCAAsC;gBACtC,WAAW,GAAG,OAAO,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;gBACvD,wDAAwD;gBACxD,IAAI,IAAI,IAAI,CAAC,IAAA,oBAAY,EAAC,IAAI,CAAC,EAAE,CAAC;oBAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC7D,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAA4B,EAAE,EAAE;wBAC9D,IAAI,CAAC,EAAE,CAAC,IAAI;4BAAE,OAAO,KAAK,CAAC;wBAC3B,IAAI,WAAW,EAAE,CAAC;4BACd,OAAO,IAAA,kBAAU,EAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;wBACrC,CAAC;wBACD,IAAI,KAAK,EAAE,CAAC;4BACR,OAAO,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC;wBAC5B,CAAC;wBACD,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBACrD,CAAC,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;iBAAM,IAAI,YAAY,EAAE,CAAC;gBACtB,wDAAwD;gBACxD,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAChD,wDAAwD;gBACxD,IAAI,IAAI,IAAI,CAAC,IAAA,oBAAY,EAAC,IAAI,CAAC,EAAE,CAAC;oBAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC7D,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAA4B,EAAE,EAAE;wBAC9D,IAAI,CAAC,EAAE,CAAC,IAAI;4BAAE,OAAO,KAAK,CAAC;wBAC3B,IAAI,WAAW,EAAE,CAAC;4BACd,OAAO,IAAA,kBAAU,EAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;wBACrC,CAAC;wBACD,IAAI,KAAK,EAAE,CAAC;4BACR,OAAO,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC;wBAC5B,CAAC;wBACD,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBACrD,CAAC,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACnD,CAAC;YAED,gBAAgB;YAChB,KAAK,MAAM,EAAE,IAAI,WAAiC,EAAE,CAAC;gBACjD,6DAA6D;gBAC7D,+EAA+E;gBAC/E,MAAM,YAAY,GAAG,YAAY,IAAI,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAG,YAAY,IAAK,EAAiB,CAAC,UAAU,KAAK,gBAAgB,CAAC;gBAEpF,IAAI,QAAQ,IAAI,CAAC,SAAS,IAAI,GAAG,IAAI,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC;oBACxD,SAAS;gBACb,CAAC;gBAED,qDAAqD;gBACrD,IAAI,SAAS,EAAE,CAAC;oBACZ,IAAI,YAAY,IAAI,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;wBACtC,MAAM,YAAY,GAAI,EAAE,CAAC,UAA0B,CAAC,IAAI,CACpD,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,kBAAU,EAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CACvC,CAAC;wBACF,IAAI,CAAC,YAAY;4BAAE,SAAS;oBAChC,CAAC;yBAAM,CAAC;wBACJ,SAAS;oBACb,CAAC;gBACL,CAAC;gBAED,uDAAuD;gBACvD,IAAI,GAAG,EAAE,CAAC;oBACN,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,KAAK,GAAG;wBAAE,SAAS;gBACnD,CAAC;gBAED,2DAA2D;gBAC3D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACtB,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,KAAK;wBAAE,SAAS;gBACzD,CAAC;gBAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBAElD,MAAM,MAAM,GAAG,YAAY;oBACvB,CAAC,CAAE,EAAiB,CAAC,MAAM;oBAC3B,CAAC,CAAE,EAAiB,CAAC,OAAO,CAAC;gBAEjC,MAAM,KAAK,GAAuB;oBAC9B,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,EAAE,CAAC,IAAI;oBACpB,OAAO,EAAE,MAAM;oBACf,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAa,CAAC,CAAC,CAAC,SAAS;oBAC/C,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAe,CAAC,CAAC,CAAC,SAAS;iBACxD,CAAC;gBAEF,uCAAuC;gBACvC,IAAI,YAAY,IAAI,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;oBACtC,KAAK,CAAC,UAAU,GAAI,EAAE,CAAC,UAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACzE,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEpB,IAAI,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,WAAW;oBAAE,MAAM;YAC1E,CAAC;YAED,IAAI,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,WAAW;gBAAE,MAAM;QAC1E,CAAC;QAAC,MAAM,CAAC;YACL,iBAAiB,EAAE,CAAC;YACpB,SAAS;QACb,CAAC;IACL,CAAC;IAED,OAAO;QACH,OAAO,EAAE,IAAI;QACb,YAAY;QACZ,mBAAmB,EAAE,KAAK,CAAC,MAAM;QACjC,aAAa,EAAE,OAAO,CAAC,MAAM;QAC7B,iBAAiB,EAAE,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS;QACxE,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,WAAW;QACrE,OAAO;KACV,CAAC;AACN,CAAC;AAED,qCAAqC;AAErC;;;GAGG;AACH,SAAgB,YAAY,CAAC,OAA2B;IACpD,6BAA6B;IAC7B,MAAM,UAAU,GAAG,IAAA,8BAAoB,GAAE,CAAC;IAC1C,IAAI,UAAU,EAAE,CAAC;QACb,IAAI,CAAC;YACD,MAAM,YAAY,GAAG,UAAU,CAAC;gBAC5B,WAAW,EAAE,OAAO,CAAC,YAAY;gBACjC,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ,EAAE,OAAO,CAAC,SAAS;gBAC3B,UAAU,EAAE,OAAO,CAAC,WAAW;gBAC/B,YAAY,EAAE,OAAO,CAAC,aAAa;aACtC,CAAqB,CAAC;YACvB,mDAAmD;YACnD,OAAO;gBACH,OAAO,EAAE,YAAY,CAAC,OAAO;gBAC7B,YAAY,EAAE,YAAY,CAAC,WAAW;gBACtC,OAAO,EAAE,YAAY,CAAC,OAAO;gBAC7B,mBAAmB,EAAE,YAAY,CAAC,iBAAiB;gBACnD,aAAa,EAAE,YAAY,CAAC,YAAY;gBACxC,SAAS,EAAE,YAAY,CAAC,SAAS;gBACjC,KAAK,EAAE,YAAY,CAAC,KAAK;gBACzB,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAkB,EAAE,EAAE,CAAC,CAAC;oBACvD,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,WAAW,EAAE,CAAC,CAAC,UAAU;oBACzB,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,cAAc,EAAE,CAAC,CAAC,aAAa;oBAC/B,aAAa,EAAE,CAAC,CAAC,YAAY;iBAChC,CAAC,CAAC;aACN,CAAC;QACN,CAAC;QAAC,MAAM,CAAC;YACL,oCAAoC;QACxC,CAAC;IACL,CAAC;IAED,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,kDAAkD;AAClD,SAAS,eAAe,CAAC,OAA2B;IAChD,MAAM,EACF,YAAY,EACZ,OAAO,EACP,SAAS,GAAG,KAAK,EACjB,WAAW,GAAG,GAAG,EACjB,aAAa,GAAG,CAAC,GACpB,GAAG,OAAO,CAAC;IAEZ,IAAI,CAAC,IAAA,eAAU,EAAC,YAAY,CAAC,EAAE,CAAC;QAC5B,OAAO;YACH,OAAO,EAAE,KAAK;YACd,YAAY;YACZ,OAAO;YACP,mBAAmB,EAAE,CAAC;YACtB,aAAa,EAAE,CAAC;YAChB,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,2BAA2B,YAAY,EAAE;SACnD,CAAC;IACN,CAAC;IAED,gBAAgB;IAChB,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACD,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO;YACH,OAAO,EAAE,KAAK;YACd,YAAY;YACZ,OAAO;YACP,mBAAmB,EAAE,CAAC;YACtB,aAAa,EAAE,CAAC;YAChB,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,0BAA0B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SACtF,CAAC;IACN,CAAC;IAED,uBAAuB;IACvB,MAAM,aAAa,GAA6B;QAC5C,EAAE,EAAE,CAAC,KAAK,CAAC;QACX,IAAI,EAAE;YACF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ;YAC9C,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,qBAAqB;YACrD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS;YACpD,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,UAAU;YACnD,eAAe,EAAE,UAAU;SAC9B;QACD,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,MAAM,EAAE,CAAC,SAAS,CAAC;QACnB,KAAK,EAAE,CAAC,QAAQ,CAAC;QACjB,GAAG,EAAE,CAAC,MAAM,CAAC;QACb,IAAI,EAAE,CAAC,OAAO,CAAC;QACf,UAAU,EAAE,CAAC,aAAa,CAAC;QAC3B,GAAG,EAAE;YACD,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;YACpE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO;YACtE,UAAU,EAAE,SAAS,EAAE,SAAS;SACnC;KACJ,CAAC;IAEF,MAAM,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC;IACjE,MAAM,KAAK,GAAG,kBAAkB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAE3D,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAC1B,IAAI,SAAS,GAAG,KAAK,CAAC;IAEtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,oBAAoB;QACpB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7C,IAAI,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAEzC,iBAAiB,EAAE,CAAC;QAEpB,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACD,OAAO,GAAG,IAAA,iBAAY,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACL,SAAS;QACb,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvB,2CAA2C;gBAC3C,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;oBACpB,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC1C,CAAC;gBAED,MAAM,KAAK,GAAc;oBACrB,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,CAAC,GAAG,CAAC;oBAClB,IAAI;iBACP,CAAC;gBAEF,iCAAiC;gBACjC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;oBACpB,KAAK,CAAC,cAAc,GAAG,EAAE,CAAC;oBAC1B,KAAK,CAAC,aAAa,GAAG,EAAE,CAAC;oBAEzB,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBACtD,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBACvB,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG;4BAAE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;wBACtE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACvC,CAAC;oBAED,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC1E,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBACvB,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG;4BAAE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;wBACtE,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACtC,CAAC;gBACL,CAAC;gBAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEpB,IAAI,OAAO,CAAC,MAAM,IAAI,WAAW,EAAE,CAAC;oBAChC,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM;gBACV,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,SAAS;YAAE,MAAM;IACzB,CAAC;IAED,OAAO;QACH,OAAO,EAAE,IAAI;QACb,YAAY;QACZ,OAAO;QACP,mBAAmB,EAAE,iBAAiB;QACtC,aAAa,EAAE,OAAO,CAAC,MAAM;QAC7B,SAAS;QACT,OAAO;KACV,CAAC;AACN,CAAC"}
|