@yuaone/tools 0.5.0 → 0.7.0

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 CHANGED
@@ -1,15 +1,35 @@
1
- # @yuan/tools
1
+ # @yuaone/tools
2
2
 
3
3
  Tool implementations for YUAN coding agent.
4
4
 
5
- Part of [YUAN](../../README.md).
5
+ ```bash
6
+ npm install @yuaone/tools
7
+ ```
6
8
 
7
- ## Install
9
+ ## Available Tools
8
10
 
9
- ```bash
10
- npm install @yuan/tools
11
+ | Tool | Description |
12
+ |------|-------------|
13
+ | `file_read` | Read file contents |
14
+ | `file_write` | Write or create a file |
15
+ | `file_edit` | Surgical string replacement in a file |
16
+ | `shell_exec` | Execute shell commands |
17
+ | `grep` | Search file contents with regex |
18
+ | `glob` | Find files by pattern |
19
+ | `git_ops` | Git status/diff/log/commit |
20
+ | `web_search` | Search the web |
21
+ | `web_fetch` | Fetch a URL |
22
+ | `code_search` | Semantic code search |
23
+
24
+ ## Usage
25
+
26
+ ```typescript
27
+ import { ToolRegistry } from "@yuaone/tools";
28
+
29
+ const registry = new ToolRegistry({ workDir: process.cwd() });
30
+ const result = await registry.execute("file_read", { path: "src/index.ts" });
11
31
  ```
12
32
 
13
33
  ## License
14
34
 
15
- AGPL-3.0
35
+ AGPL-3.0 — part of [YUAN](https://github.com/yuaone/yuan).
@@ -1 +1 @@
1
- {"version":3,"file":"file-write.d.ts","sourceRoot":"","sources":["../src/file-write.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,qBAAa,aAAc,SAAQ,QAAQ;IACzC,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,WAAW,SAE0B;IAC9C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAU;IAEvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAiB/C;IAEI,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CA4GnF"}
1
+ {"version":3,"file":"file-write.d.ts","sourceRoot":"","sources":["../src/file-write.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,qBAAa,aAAc,SAAQ,QAAQ;IACzC,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,WAAW,SAE0B;IAC9C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAU;IAEvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAiB/C;IAEI,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CA2GnF"}
@@ -94,8 +94,16 @@ export class FileWriteTool extends BaseTool {
94
94
  // Best-effort backup — don't block write on backup failure
95
95
  }
96
96
  }
97
- // Write file using O_NOFOLLOW to atomically prevent symlink TOCTOU attacks.
98
- // This eliminates the race window between symlink check and write.
97
+ // Read old content for diff (before writing)
98
+ let oldContent = '';
99
+ if (existed) {
100
+ try {
101
+ oldContent = await readFile(resolvedPath, 'utf-8');
102
+ }
103
+ catch {
104
+ // Could not read old content — diff will show all lines as additions
105
+ }
106
+ }
99
107
  try {
100
108
  const flags = existed
101
109
  ? fsConstants.O_WRONLY | fsConstants.O_TRUNC | fsConstants.O_NOFOLLOW
@@ -108,22 +116,12 @@ export class FileWriteTool extends BaseTool {
108
116
  await fh.close();
109
117
  }
110
118
  const bytesWritten = Buffer.byteLength(contentStr, 'utf-8');
111
- let output = existed
119
+ // Generate unified diff
120
+ const diff = generateUnifiedDiff(oldContent, contentStr, path, existed);
121
+ const header = existed
112
122
  ? `File overwritten: ${path} (${bytesWritten} bytes, backup created)`
113
123
  : `File created: ${path} (${bytesWritten} bytes)`;
114
- // If the file existed, show a brief diff hint
115
- if (existed) {
116
- try {
117
- const originalContent = await readFile(resolvedPath + '.yuan-backup', 'utf-8');
118
- const origLines = originalContent.split('\n').length;
119
- const newLines = contentStr.split('\n').length;
120
- output += `\nPrevious: ${origLines} lines → New: ${newLines} lines`;
121
- }
122
- catch {
123
- // Backup read failed — skip diff info
124
- }
125
- }
126
- return this.ok(toolCallId, output, {
124
+ return this.ok(toolCallId, `${header}\n\n${diff}`, {
127
125
  bytesWritten,
128
126
  created: !existed,
129
127
  });
@@ -136,4 +134,241 @@ export class FileWriteTool extends BaseTool {
136
134
  }
137
135
  }
138
136
  }
137
+ /**
138
+ * Generate a unified diff string between oldContent and newContent.
139
+ * If the file is new (existed=false), all lines are shown as additions.
140
+ * Truncates if more than 500 lines changed to avoid huge output.
141
+ */
142
+ function generateUnifiedDiff(oldContent, newContent, filePath, existed) {
143
+ const oldLines = oldContent ? oldContent.split('\n') : [];
144
+ const newLines = newContent.split('\n');
145
+ // New file: all additions
146
+ if (!existed || oldLines.length === 0) {
147
+ const header = [`--- /dev/null`, `+++ b/${filePath}`, `@@ -0,0 +1,${newLines.length} @@`];
148
+ const MAX_NEW_LINES = 500;
149
+ if (newLines.length > MAX_NEW_LINES) {
150
+ const shown = newLines.slice(0, MAX_NEW_LINES).map(l => `+${l}`);
151
+ return [
152
+ ...header,
153
+ ...shown,
154
+ `... (${newLines.length - MAX_NEW_LINES} more lines)`,
155
+ ].join('\n');
156
+ }
157
+ return [...header, ...newLines.map(l => `+${l}`)].join('\n');
158
+ }
159
+ // Existing file: compute diff hunks
160
+ const hunks = computeHunks(oldLines, newLines);
161
+ if (hunks.length === 0)
162
+ return 'No changes detected.';
163
+ const result = [
164
+ `--- a/${filePath}`,
165
+ `+++ b/${filePath}`,
166
+ ...hunks,
167
+ ].join('\n');
168
+ // Truncate if result is very large
169
+ const MAX_DIFF_CHARS = 8000;
170
+ if (result.length > MAX_DIFF_CHARS) {
171
+ return result.slice(0, MAX_DIFF_CHARS) + '\n... (diff truncated)';
172
+ }
173
+ return result;
174
+ }
175
+ /**
176
+ * Compute unified diff hunks between oldLines and newLines.
177
+ * Uses a simple O(n) greedy approach: compare line-by-line with context.
178
+ */
179
+ function computeHunks(oldLines, newLines) {
180
+ const CONTEXT = 3;
181
+ const MAX_CHANGED = 500;
182
+ // Build edit script: for each position mark as equal, delete, or insert
183
+ // We use a simple patience-like approach: find equal regions greedily
184
+ const ops = diffLines(oldLines, newLines);
185
+ // Count total changes
186
+ const totalChanged = ops.filter(op => op.type !== 'equal').length;
187
+ if (totalChanged === 0)
188
+ return [];
189
+ if (totalChanged > MAX_CHANGED) {
190
+ // Just show summary line
191
+ const addCount = ops.filter(op => op.type === 'insert').length;
192
+ const delCount = ops.filter(op => op.type === 'delete').length;
193
+ return [`@@ (large diff) @@\n... ${delCount} lines removed, ${addCount} lines added ...`];
194
+ }
195
+ // Group ops into hunks (continuous regions with context)
196
+ const hunks = [];
197
+ let i = 0;
198
+ while (i < ops.length) {
199
+ // Skip equal regions before next change
200
+ if (ops[i].type === 'equal') {
201
+ i++;
202
+ continue;
203
+ }
204
+ // Found a change — find the hunk range
205
+ const hunkStart = i;
206
+ let hunkEnd = i;
207
+ // Extend to include all changes within CONTEXT distance of each other
208
+ while (hunkEnd < ops.length) {
209
+ if (ops[hunkEnd].type !== 'equal') {
210
+ hunkEnd++;
211
+ }
212
+ else {
213
+ // Check if next change is within CONTEXT*2 equal lines
214
+ let equalCount = 0;
215
+ let j = hunkEnd;
216
+ while (j < ops.length && ops[j].type === 'equal') {
217
+ equalCount++;
218
+ j++;
219
+ }
220
+ if (equalCount <= CONTEXT * 2 && j < ops.length && ops[j].type !== 'equal') {
221
+ hunkEnd = j;
222
+ }
223
+ else {
224
+ break;
225
+ }
226
+ }
227
+ }
228
+ // Build context around hunk
229
+ const contextBefore = Math.max(0, hunkStart - CONTEXT);
230
+ const contextAfter = Math.min(ops.length, hunkEnd + CONTEXT);
231
+ // Compute old/new line numbers for hunk header
232
+ let oldLine = 1;
233
+ let newLine = 1;
234
+ for (let k = 0; k < contextBefore; k++) {
235
+ const op = ops[k];
236
+ if (op.type === 'equal' || op.type === 'delete')
237
+ oldLine++;
238
+ if (op.type === 'equal' || op.type === 'insert')
239
+ newLine++;
240
+ }
241
+ let oldCount = 0;
242
+ let newCount = 0;
243
+ const hunkLines = [];
244
+ for (let k = contextBefore; k < contextAfter; k++) {
245
+ const op = ops[k];
246
+ if (op.type === 'equal') {
247
+ hunkLines.push(` ${op.line}`);
248
+ oldCount++;
249
+ newCount++;
250
+ }
251
+ else if (op.type === 'delete') {
252
+ hunkLines.push(`-${op.line}`);
253
+ oldCount++;
254
+ }
255
+ else {
256
+ hunkLines.push(`+${op.line}`);
257
+ newCount++;
258
+ }
259
+ }
260
+ hunks.push(`@@ -${oldLine},${oldCount} +${newLine},${newCount} @@`);
261
+ hunks.push(...hunkLines);
262
+ i = hunkEnd;
263
+ }
264
+ return hunks;
265
+ }
266
+ /**
267
+ * Simple line diff using LCS via dynamic programming (capped at 200 lines each for performance).
268
+ * Falls back to full delete+insert for larger inputs.
269
+ */
270
+ function diffLines(oldLines, newLines) {
271
+ const MAX_LCS = 200;
272
+ if (oldLines.length > MAX_LCS || newLines.length > MAX_LCS) {
273
+ // Large file: use greedy block diff
274
+ return greedyDiff(oldLines, newLines);
275
+ }
276
+ // LCS-based diff
277
+ const m = oldLines.length;
278
+ const n = newLines.length;
279
+ // Build LCS table
280
+ const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
281
+ for (let i = m - 1; i >= 0; i--) {
282
+ for (let j = n - 1; j >= 0; j--) {
283
+ if (oldLines[i] === newLines[j]) {
284
+ dp[i][j] = (dp[i + 1][j + 1] ?? 0) + 1;
285
+ }
286
+ else {
287
+ dp[i][j] = Math.max(dp[i + 1][j] ?? 0, dp[i][j + 1] ?? 0);
288
+ }
289
+ }
290
+ }
291
+ // Trace back
292
+ const ops = [];
293
+ let i = 0;
294
+ let j = 0;
295
+ while (i < m || j < n) {
296
+ if (i < m && j < n && oldLines[i] === newLines[j]) {
297
+ ops.push({ type: 'equal', line: oldLines[i] });
298
+ i++;
299
+ j++;
300
+ }
301
+ else if (j < n && (i >= m || (dp[i][j + 1] ?? 0) >= (dp[i + 1][j] ?? 0))) {
302
+ ops.push({ type: 'insert', line: newLines[j] });
303
+ j++;
304
+ }
305
+ else {
306
+ ops.push({ type: 'delete', line: oldLines[i] });
307
+ i++;
308
+ }
309
+ }
310
+ return ops;
311
+ }
312
+ /**
313
+ * Greedy diff for large files: find matching blocks and emit deletes/inserts for gaps.
314
+ */
315
+ function greedyDiff(oldLines, newLines) {
316
+ const ops = [];
317
+ let oi = 0;
318
+ let ni = 0;
319
+ // Build index of new lines for quick lookup
320
+ const newIndex = new Map();
321
+ for (let i = 0; i < newLines.length; i++) {
322
+ const line = newLines[i];
323
+ const arr = newIndex.get(line);
324
+ if (arr)
325
+ arr.push(i);
326
+ else
327
+ newIndex.set(line, [i]);
328
+ }
329
+ while (oi < oldLines.length || ni < newLines.length) {
330
+ if (oi < oldLines.length && ni < newLines.length && oldLines[oi] === newLines[ni]) {
331
+ ops.push({ type: 'equal', line: oldLines[oi] });
332
+ oi++;
333
+ ni++;
334
+ }
335
+ else {
336
+ // Find next match
337
+ let bestOld = -1;
338
+ let bestNew = -1;
339
+ let bestScore = Infinity;
340
+ for (let lookAhead = 0; lookAhead < 20; lookAhead++) {
341
+ const checkOld = oi + lookAhead;
342
+ if (checkOld < oldLines.length) {
343
+ const candidates = newIndex.get(oldLines[checkOld]) ?? [];
344
+ for (const cn of candidates) {
345
+ if (cn >= ni) {
346
+ const score = lookAhead + (cn - ni);
347
+ if (score < bestScore) {
348
+ bestScore = score;
349
+ bestOld = checkOld;
350
+ bestNew = cn;
351
+ }
352
+ break;
353
+ }
354
+ }
355
+ }
356
+ }
357
+ if (bestOld === -1) {
358
+ // No match found in lookahead — emit remaining as delete/insert
359
+ while (oi < oldLines.length)
360
+ ops.push({ type: 'delete', line: oldLines[oi++] });
361
+ while (ni < newLines.length)
362
+ ops.push({ type: 'insert', line: newLines[ni++] });
363
+ break;
364
+ }
365
+ // Emit deletions and insertions up to the match
366
+ while (oi < bestOld)
367
+ ops.push({ type: 'delete', line: oldLines[oi++] });
368
+ while (ni < bestNew)
369
+ ops.push({ type: 'insert', line: newLines[ni++] });
370
+ }
371
+ }
372
+ return ops;
373
+ }
139
374
  //# sourceMappingURL=file-write.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-write.js","sourceRoot":"","sources":["../src/file-write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-write.js","sourceRoot":"","sources":["../src/file-write.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../src/glob.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,qBAAa,QAAS,SAAQ,QAAQ;IACpC,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,WAAW,SAEiC;IACrD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAS;IAEtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAiB/C;IAEI,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CA0DnF"}
1
+ {"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../src/glob.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,qBAAa,QAAS,SAAQ,QAAQ;IACpC,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,WAAW,SAEiC;IACrD,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAS;IAEtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAqB/C;IAEI,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CAqFnF"}
package/dist/glob.js CHANGED
@@ -17,12 +17,14 @@ export class GlobTool extends BaseTool {
17
17
  parameters = {
18
18
  pattern: {
19
19
  type: 'string',
20
- description: 'Glob pattern (e.g., "src/**/*.tsx", "**/*.test.ts")',
20
+ description: 'Glob pattern (e.g., "src/**/*.tsx", "**/*.test.ts"). ' +
21
+ 'For directories outside the project use the `path` parameter instead of putting "../" in the pattern.',
21
22
  required: true,
22
23
  },
23
24
  path: {
24
25
  type: 'string',
25
- description: 'Base directory relative to project root (default: project root)',
26
+ description: 'Base directory to search from (default: project root). ' +
27
+ 'Can be an absolute path or relative path including "../" to reach sibling directories.',
26
28
  required: false,
27
29
  },
28
30
  maxResults: {
@@ -42,6 +44,7 @@ export class GlobTool extends BaseTool {
42
44
  }
43
45
  // Resolve base directory
44
46
  let cwd = workDir;
47
+ let resolvedPattern = pattern;
45
48
  if (basePath) {
46
49
  try {
47
50
  cwd = this.validatePath(basePath, workDir, true);
@@ -50,8 +53,37 @@ export class GlobTool extends BaseTool {
50
53
  return this.fail(toolCallId, err.message);
51
54
  }
52
55
  }
56
+ else if (/^\.\.[\\/]|^\//.test(pattern)) {
57
+ // Pattern starts with ../ or ../../ etc — auto-split into cwd + pattern.
58
+ // fast-glob does not support ".." traversal in patterns, so we extract
59
+ // any leading path segments (up to the first glob character) as cwd.
60
+ const firstGlob = pattern.search(/[*?{[]/);
61
+ if (firstGlob > 0) {
62
+ const pathPrefix = pattern.slice(0, firstGlob);
63
+ // Strip trailing separator
64
+ const cleanPrefix = pathPrefix.replace(/[\\/]+$/, '');
65
+ resolvedPattern = pattern.slice(firstGlob);
66
+ try {
67
+ cwd = this.validatePath(cleanPrefix, workDir, true);
68
+ }
69
+ catch (err) {
70
+ return this.fail(toolCallId, err.message);
71
+ }
72
+ }
73
+ else if (firstGlob === -1) {
74
+ // No glob chars at all — treat the whole pattern as a path to list
75
+ const cleanPrefix = pattern.replace(/[\\/]+$/, '');
76
+ resolvedPattern = '**';
77
+ try {
78
+ cwd = this.validatePath(cleanPrefix, workDir, true);
79
+ }
80
+ catch (err) {
81
+ return this.fail(toolCallId, err.message);
82
+ }
83
+ }
84
+ }
53
85
  try {
54
- const allFiles = await fg(pattern, {
86
+ const allFiles = await fg(resolvedPattern, {
55
87
  cwd,
56
88
  ignore: [
57
89
  '**/node_modules/**',
package/dist/glob.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"glob.js","sourceRoot":"","sources":["../src/glob.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,WAAW,CAAC;AAE3B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,MAAM,OAAO,QAAS,SAAQ,QAAQ;IAC3B,IAAI,GAAG,MAAM,CAAC;IACd,WAAW,GAClB,sCAAsC;QACtC,kDAAkD,CAAC;IAC5C,SAAS,GAAc,KAAK,CAAC;IAE7B,UAAU,GAAiC;QAClD,OAAO,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,qDAAqD;YAClE,QAAQ,EAAE,IAAI;SACf;QACD,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,iEAAiE;YAC9E,QAAQ,EAAE,KAAK;SAChB;QACD,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,6BAA6B,mBAAmB,GAAG;YAChE,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,mBAAmB;SAC7B;KACF,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,IAA6B,EAAE,OAAe;QAC1D,MAAM,UAAU,GAAI,IAAI,CAAC,WAAsB,IAAI,EAAE,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,OAA6B,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAA0B,CAAC;QACjD,MAAM,UAAU,GAAI,IAAI,CAAC,UAAqB,IAAI,mBAAmB,CAAC;QAEtE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,qCAAqC,CAAC,CAAC;QACtE,CAAC;QAED,yBAAyB;QACzB,IAAI,GAAG,GAAG,OAAO,CAAC;QAClB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC;gBACH,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACnD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,OAAO,EAAE;gBACjC,GAAG;gBACH,MAAM,EAAE;oBACN,oBAAoB;oBACpB,YAAY;oBACZ,YAAY;oBACZ,aAAa;oBACb,aAAa;oBACb,gBAAgB;iBACjB;gBACD,SAAS,EAAE,IAAI;gBACf,mBAAmB,EAAE,KAAK;aAC3B,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC;YACrC,MAAM,SAAS,GAAG,YAAY,GAAG,UAAU,CAAC;YAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAE5C,IAAI,MAAc,CAAC;YACnB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,GAAG,oCAAoC,OAAO,EAAE,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,IAAI,oBAAoB,UAAU,OAAO,YAAY,iBAAiB,CAAC;gBAC/E,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE;gBACjC,YAAY;gBACZ,aAAa,EAAE,KAAK,CAAC,MAAM;gBAC3B,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,uBAAwB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"glob.js","sourceRoot":"","sources":["../src/glob.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuaone/tools",
3
- "version": "0.5.0",
3
+ "version": "0.7.0",
4
4
  "description": "YUAN Agent Tool Implementations",
5
5
  "license": "AGPL-3.0",
6
6
  "type": "module",
@@ -36,7 +36,7 @@
36
36
  "dependencies": {
37
37
  "fast-glob": "^3.3.3",
38
38
  "playwright": "^1.52.0",
39
- "@yuaone/core": "0.5.0"
39
+ "@yuaone/core": "0.7.0"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/node": "^25.3.5",