@yuaone/tools 0.1.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/LICENSE +663 -0
- package/README.md +15 -0
- package/dist/__tests__/file-edit.test.d.ts +8 -0
- package/dist/__tests__/file-edit.test.d.ts.map +1 -0
- package/dist/__tests__/file-edit.test.js +125 -0
- package/dist/__tests__/file-edit.test.js.map +1 -0
- package/dist/__tests__/registry.test.d.ts +7 -0
- package/dist/__tests__/registry.test.d.ts.map +1 -0
- package/dist/__tests__/registry.test.js +83 -0
- package/dist/__tests__/registry.test.js.map +1 -0
- package/dist/__tests__/validators.test.d.ts +8 -0
- package/dist/__tests__/validators.test.d.ts.map +1 -0
- package/dist/__tests__/validators.test.js +189 -0
- package/dist/__tests__/validators.test.js.map +1 -0
- package/dist/base-tool.d.ts +45 -0
- package/dist/base-tool.d.ts.map +1 -0
- package/dist/base-tool.js +87 -0
- package/dist/base-tool.js.map +1 -0
- package/dist/browser-tool.d.ts +39 -0
- package/dist/browser-tool.d.ts.map +1 -0
- package/dist/browser-tool.js +518 -0
- package/dist/browser-tool.js.map +1 -0
- package/dist/code-search.d.ts +42 -0
- package/dist/code-search.d.ts.map +1 -0
- package/dist/code-search.js +298 -0
- package/dist/code-search.js.map +1 -0
- package/dist/design-tools.d.ts +70 -0
- package/dist/design-tools.d.ts.map +1 -0
- package/dist/design-tools.js +471 -0
- package/dist/design-tools.js.map +1 -0
- package/dist/dev-server-manager.d.ts +32 -0
- package/dist/dev-server-manager.d.ts.map +1 -0
- package/dist/dev-server-manager.js +183 -0
- package/dist/dev-server-manager.js.map +1 -0
- package/dist/file-edit.d.ts +19 -0
- package/dist/file-edit.d.ts.map +1 -0
- package/dist/file-edit.js +217 -0
- package/dist/file-edit.js.map +1 -0
- package/dist/file-read.d.ts +19 -0
- package/dist/file-read.d.ts.map +1 -0
- package/dist/file-read.js +142 -0
- package/dist/file-read.js.map +1 -0
- package/dist/file-write.d.ts +18 -0
- package/dist/file-write.d.ts.map +1 -0
- package/dist/file-write.js +139 -0
- package/dist/file-write.js.map +1 -0
- package/dist/git-ops.d.ts +25 -0
- package/dist/git-ops.d.ts.map +1 -0
- package/dist/git-ops.js +219 -0
- package/dist/git-ops.js.map +1 -0
- package/dist/glob.d.ts +18 -0
- package/dist/glob.d.ts.map +1 -0
- package/dist/glob.js +91 -0
- package/dist/glob.js.map +1 -0
- package/dist/grep.d.ts +19 -0
- package/dist/grep.d.ts.map +1 -0
- package/dist/grep.js +177 -0
- package/dist/grep.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/security-scan.d.ts +62 -0
- package/dist/security-scan.d.ts.map +1 -0
- package/dist/security-scan.js +445 -0
- package/dist/security-scan.js.map +1 -0
- package/dist/shell-exec.d.ts +20 -0
- package/dist/shell-exec.d.ts.map +1 -0
- package/dist/shell-exec.js +206 -0
- package/dist/shell-exec.js.map +1 -0
- package/dist/test-run.d.ts +51 -0
- package/dist/test-run.d.ts.map +1 -0
- package/dist/test-run.js +359 -0
- package/dist/test-run.js.map +1 -0
- package/dist/tool-registry.d.ts +70 -0
- package/dist/tool-registry.d.ts.map +1 -0
- package/dist/tool-registry.js +181 -0
- package/dist/tool-registry.js.map +1 -0
- package/dist/types.d.ts +137 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/validators.d.ts +57 -0
- package/dist/validators.d.ts.map +1 -0
- package/dist/validators.js +218 -0
- package/dist/validators.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @yuaone/tools — code_search tool
|
|
3
|
+
*
|
|
4
|
+
* Phase 1: Symbol-based code search using regex patterns.
|
|
5
|
+
* (Embedding-based semantic search planned for Phase 2)
|
|
6
|
+
*
|
|
7
|
+
* Search modes:
|
|
8
|
+
* 1. symbol: Find function/class/variable/type/interface definitions by name
|
|
9
|
+
* 2. reference: Find usages of a specific symbol
|
|
10
|
+
* 3. definition: Find where a symbol is defined
|
|
11
|
+
*
|
|
12
|
+
* Supports: TypeScript, JavaScript, Python
|
|
13
|
+
* Excludes: node_modules, dist, .git, build, coverage, __pycache__
|
|
14
|
+
*
|
|
15
|
+
* riskLevel: 'low' (read-only)
|
|
16
|
+
*/
|
|
17
|
+
import { readFile } from 'node:fs/promises';
|
|
18
|
+
import { relative } from 'node:path';
|
|
19
|
+
import fg from 'fast-glob';
|
|
20
|
+
import { BaseTool } from './base-tool.js';
|
|
21
|
+
const MAX_RESULTS = 50;
|
|
22
|
+
const MAX_FILE_SIZE = 512_000; // 512KB — skip huge files
|
|
23
|
+
const SNIPPET_CONTEXT_LINES = 3;
|
|
24
|
+
/** Language-specific definition patterns. */
|
|
25
|
+
const DEFINITION_PATTERNS = {
|
|
26
|
+
typescript: (name) => [
|
|
27
|
+
new RegExp(`(?:export\\s+)?(?:async\\s+)?function\\s+${escapeRegex(name)}\\s*[(<]`, 'gm'),
|
|
28
|
+
new RegExp(`(?:export\\s+)?class\\s+${escapeRegex(name)}\\s*[{<]`, 'gm'),
|
|
29
|
+
new RegExp(`(?:export\\s+)?interface\\s+${escapeRegex(name)}\\s*[{<]`, 'gm'),
|
|
30
|
+
new RegExp(`(?:export\\s+)?type\\s+${escapeRegex(name)}\\s*[=<]`, 'gm'),
|
|
31
|
+
new RegExp(`(?:export\\s+)?(?:const|let|var)\\s+${escapeRegex(name)}\\s*[=:]`, 'gm'),
|
|
32
|
+
new RegExp(`(?:export\\s+)?enum\\s+${escapeRegex(name)}\\s*\\{`, 'gm'),
|
|
33
|
+
// Method definitions
|
|
34
|
+
new RegExp(`^\\s*(?:async\\s+)?${escapeRegex(name)}\\s*\\(`, 'gm'),
|
|
35
|
+
],
|
|
36
|
+
javascript: (name) => [
|
|
37
|
+
new RegExp(`(?:export\\s+)?(?:async\\s+)?function\\s+${escapeRegex(name)}\\s*[(<]`, 'gm'),
|
|
38
|
+
new RegExp(`(?:export\\s+)?class\\s+${escapeRegex(name)}\\s*[{<]`, 'gm'),
|
|
39
|
+
new RegExp(`(?:export\\s+)?(?:const|let|var)\\s+${escapeRegex(name)}\\s*[=:]`, 'gm'),
|
|
40
|
+
new RegExp(`^\\s*(?:async\\s+)?${escapeRegex(name)}\\s*\\(`, 'gm'),
|
|
41
|
+
],
|
|
42
|
+
python: (name) => [
|
|
43
|
+
new RegExp(`^\\s*def\\s+${escapeRegex(name)}\\s*\\(`, 'gm'),
|
|
44
|
+
new RegExp(`^\\s*class\\s+${escapeRegex(name)}\\s*[:(]`, 'gm'),
|
|
45
|
+
new RegExp(`^${escapeRegex(name)}\\s*=`, 'gm'),
|
|
46
|
+
],
|
|
47
|
+
};
|
|
48
|
+
/** Map file extensions to language keys. */
|
|
49
|
+
const EXT_TO_LANG = {
|
|
50
|
+
'.ts': 'typescript', '.tsx': 'typescript',
|
|
51
|
+
'.js': 'javascript', '.jsx': 'javascript', '.mjs': 'javascript', '.cjs': 'javascript',
|
|
52
|
+
'.py': 'python',
|
|
53
|
+
};
|
|
54
|
+
/** File globs per language. */
|
|
55
|
+
const LANG_GLOBS = {
|
|
56
|
+
typescript: ['**/*.ts', '**/*.tsx'],
|
|
57
|
+
javascript: ['**/*.js', '**/*.jsx', '**/*.mjs', '**/*.cjs'],
|
|
58
|
+
python: ['**/*.py'],
|
|
59
|
+
};
|
|
60
|
+
const IGNORE_DIRS = [
|
|
61
|
+
'**/node_modules/**', '**/dist/**', '**/.git/**', '**/build/**',
|
|
62
|
+
'**/coverage/**', '**/__pycache__/**', '**/.next/**', '**/.nuxt/**',
|
|
63
|
+
'**/vendor/**', '**/.venv/**', '**/venv/**',
|
|
64
|
+
];
|
|
65
|
+
export class CodeSearchTool extends BaseTool {
|
|
66
|
+
name = 'code_search';
|
|
67
|
+
description = 'Search for code symbols (functions, classes, types, variables) by name. ' +
|
|
68
|
+
'Modes: symbol (definitions), reference (usages), definition (where defined). ' +
|
|
69
|
+
'Supports TypeScript, JavaScript, Python.';
|
|
70
|
+
riskLevel = 'low';
|
|
71
|
+
parameters = {
|
|
72
|
+
query: {
|
|
73
|
+
type: 'string',
|
|
74
|
+
description: 'Symbol name or pattern to search for',
|
|
75
|
+
required: true,
|
|
76
|
+
},
|
|
77
|
+
mode: {
|
|
78
|
+
type: 'string',
|
|
79
|
+
description: 'Search mode: symbol (find definitions), reference (find usages), definition (find where defined)',
|
|
80
|
+
required: false,
|
|
81
|
+
enum: ['symbol', 'reference', 'definition'],
|
|
82
|
+
default: 'symbol',
|
|
83
|
+
},
|
|
84
|
+
path: {
|
|
85
|
+
type: 'string',
|
|
86
|
+
description: 'Search scope directory (relative to project root, default: entire project)',
|
|
87
|
+
required: false,
|
|
88
|
+
},
|
|
89
|
+
language: {
|
|
90
|
+
type: 'string',
|
|
91
|
+
description: 'Language filter: typescript, javascript, python (default: all supported)',
|
|
92
|
+
required: false,
|
|
93
|
+
enum: ['typescript', 'javascript', 'python'],
|
|
94
|
+
},
|
|
95
|
+
maxResults: {
|
|
96
|
+
type: 'number',
|
|
97
|
+
description: 'Maximum results to return (default: 20)',
|
|
98
|
+
required: false,
|
|
99
|
+
default: 20,
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
async execute(args, workDir) {
|
|
103
|
+
const toolCallId = args._toolCallId ?? '';
|
|
104
|
+
const query = args.query;
|
|
105
|
+
const mode = args.mode ?? 'symbol';
|
|
106
|
+
const searchPath = args.path;
|
|
107
|
+
const language = args.language;
|
|
108
|
+
const maxResults = Math.min(args.maxResults ?? 20, MAX_RESULTS);
|
|
109
|
+
if (!query) {
|
|
110
|
+
return this.fail(toolCallId, 'Missing required parameter: query');
|
|
111
|
+
}
|
|
112
|
+
// Validate path if provided
|
|
113
|
+
let searchDir = workDir;
|
|
114
|
+
if (searchPath) {
|
|
115
|
+
try {
|
|
116
|
+
searchDir = this.validatePath(searchPath, workDir);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
return this.fail(toolCallId, err.message);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
// Collect file globs
|
|
124
|
+
let globs;
|
|
125
|
+
if (language && LANG_GLOBS[language]) {
|
|
126
|
+
globs = LANG_GLOBS[language];
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
globs = Object.values(LANG_GLOBS).flat();
|
|
130
|
+
}
|
|
131
|
+
// Find files
|
|
132
|
+
const files = await fg(globs, {
|
|
133
|
+
cwd: searchDir,
|
|
134
|
+
ignore: IGNORE_DIRS,
|
|
135
|
+
absolute: true,
|
|
136
|
+
onlyFiles: true,
|
|
137
|
+
followSymbolicLinks: false,
|
|
138
|
+
});
|
|
139
|
+
// Search files
|
|
140
|
+
const results = [];
|
|
141
|
+
for (const filePath of files) {
|
|
142
|
+
if (results.length >= maxResults)
|
|
143
|
+
break;
|
|
144
|
+
try {
|
|
145
|
+
const content = await readFile(filePath, 'utf-8');
|
|
146
|
+
if (content.length > MAX_FILE_SIZE)
|
|
147
|
+
continue;
|
|
148
|
+
const relPath = relative(workDir, filePath);
|
|
149
|
+
const ext = filePath.match(/\.[^.]+$/)?.[0] ?? '';
|
|
150
|
+
const lang = EXT_TO_LANG[ext];
|
|
151
|
+
if (!lang)
|
|
152
|
+
continue;
|
|
153
|
+
const fileResults = this.searchFile(content, relPath, lang, query, mode);
|
|
154
|
+
for (const r of fileResults) {
|
|
155
|
+
if (results.length >= maxResults)
|
|
156
|
+
break;
|
|
157
|
+
results.push(r);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Skip unreadable files
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Format output
|
|
165
|
+
const output = this.formatResults(results, query, mode);
|
|
166
|
+
return this.ok(toolCallId, output);
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
return this.fail(toolCallId, `Code search failed: ${err.message}`);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Search a single file for matching symbols.
|
|
174
|
+
*/
|
|
175
|
+
searchFile(content, relPath, lang, query, mode) {
|
|
176
|
+
const lines = content.split('\n');
|
|
177
|
+
const results = [];
|
|
178
|
+
if (mode === 'symbol' || mode === 'definition') {
|
|
179
|
+
// Find definitions of the symbol
|
|
180
|
+
const patterns = DEFINITION_PATTERNS[lang]?.(query) ?? DEFINITION_PATTERNS.typescript(query);
|
|
181
|
+
for (const pattern of patterns) {
|
|
182
|
+
pattern.lastIndex = 0;
|
|
183
|
+
let match;
|
|
184
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
185
|
+
const lineNumber = content.slice(0, match.index).split('\n').length;
|
|
186
|
+
const lineContent = lines[lineNumber - 1]?.trim() ?? '';
|
|
187
|
+
const kind = this.inferKind(lineContent, lang);
|
|
188
|
+
const column = match.index - content.lastIndexOf('\n', match.index - 1);
|
|
189
|
+
results.push({
|
|
190
|
+
file: relPath,
|
|
191
|
+
line: lineNumber,
|
|
192
|
+
column,
|
|
193
|
+
content: this.getSnippet(lines, lineNumber),
|
|
194
|
+
kind,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else if (mode === 'reference') {
|
|
200
|
+
// Find all usages of the symbol (excluding definitions for cleaner results)
|
|
201
|
+
const refPattern = new RegExp(`\\b${escapeRegex(query)}\\b`, 'g');
|
|
202
|
+
const defPatterns = DEFINITION_PATTERNS[lang]?.(query) ?? DEFINITION_PATTERNS.typescript(query);
|
|
203
|
+
// Collect definition line numbers to exclude
|
|
204
|
+
const defLines = new Set();
|
|
205
|
+
for (const dp of defPatterns) {
|
|
206
|
+
dp.lastIndex = 0;
|
|
207
|
+
let m;
|
|
208
|
+
while ((m = dp.exec(content)) !== null) {
|
|
209
|
+
const ln = content.slice(0, m.index).split('\n').length;
|
|
210
|
+
defLines.add(ln);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
let match;
|
|
214
|
+
while ((match = refPattern.exec(content)) !== null) {
|
|
215
|
+
const lineNumber = content.slice(0, match.index).split('\n').length;
|
|
216
|
+
if (defLines.has(lineNumber))
|
|
217
|
+
continue; // Skip definition lines
|
|
218
|
+
const lineContent = lines[lineNumber - 1]?.trim() ?? '';
|
|
219
|
+
const column = match.index - content.lastIndexOf('\n', match.index - 1);
|
|
220
|
+
results.push({
|
|
221
|
+
file: relPath,
|
|
222
|
+
line: lineNumber,
|
|
223
|
+
column,
|
|
224
|
+
content: lineContent,
|
|
225
|
+
kind: 'reference',
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return results;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Infer the kind of symbol from the line content.
|
|
233
|
+
*/
|
|
234
|
+
inferKind(line, lang) {
|
|
235
|
+
if (lang === 'python') {
|
|
236
|
+
if (/^\s*def\s/.test(line))
|
|
237
|
+
return 'function';
|
|
238
|
+
if (/^\s*class\s/.test(line))
|
|
239
|
+
return 'class';
|
|
240
|
+
return 'variable';
|
|
241
|
+
}
|
|
242
|
+
// TypeScript / JavaScript
|
|
243
|
+
if (/\bfunction\b/.test(line))
|
|
244
|
+
return 'function';
|
|
245
|
+
if (/\bclass\b/.test(line))
|
|
246
|
+
return 'class';
|
|
247
|
+
if (/\binterface\b/.test(line))
|
|
248
|
+
return 'interface';
|
|
249
|
+
if (/\btype\b/.test(line))
|
|
250
|
+
return 'type';
|
|
251
|
+
if (/\benum\b/.test(line))
|
|
252
|
+
return 'enum';
|
|
253
|
+
if (/\bconst\b|\blet\b|\bvar\b/.test(line))
|
|
254
|
+
return 'variable';
|
|
255
|
+
if (/\basync\b/.test(line))
|
|
256
|
+
return 'function';
|
|
257
|
+
return 'symbol';
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Get a snippet with context lines around a match.
|
|
261
|
+
*/
|
|
262
|
+
getSnippet(lines, lineNumber) {
|
|
263
|
+
const start = Math.max(0, lineNumber - 1 - SNIPPET_CONTEXT_LINES);
|
|
264
|
+
const end = Math.min(lines.length, lineNumber + SNIPPET_CONTEXT_LINES);
|
|
265
|
+
return lines
|
|
266
|
+
.slice(start, end)
|
|
267
|
+
.map((l, i) => {
|
|
268
|
+
const ln = start + i + 1;
|
|
269
|
+
const marker = ln === lineNumber ? '>' : ' ';
|
|
270
|
+
return `${marker} ${ln}: ${l}`;
|
|
271
|
+
})
|
|
272
|
+
.join('\n');
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Format results for output.
|
|
276
|
+
*/
|
|
277
|
+
formatResults(results, query, mode) {
|
|
278
|
+
if (results.length === 0) {
|
|
279
|
+
return `No results found for "${query}" (mode: ${mode})`;
|
|
280
|
+
}
|
|
281
|
+
const lines = [];
|
|
282
|
+
lines.push(`[Code Search: "${query}" — mode: ${mode}]`);
|
|
283
|
+
lines.push(`Found ${results.length} result(s)\n`);
|
|
284
|
+
for (const r of results) {
|
|
285
|
+
lines.push(`--- ${r.file}:${r.line} [${r.kind}] ---`);
|
|
286
|
+
lines.push(r.content);
|
|
287
|
+
lines.push('');
|
|
288
|
+
}
|
|
289
|
+
return lines.join('\n');
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Escape special regex characters in a string.
|
|
294
|
+
*/
|
|
295
|
+
function escapeRegex(str) {
|
|
296
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
297
|
+
}
|
|
298
|
+
//# sourceMappingURL=code-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-search.js","sourceRoot":"","sources":["../src/code-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @yuaone/tools — Design Mode Tools
|
|
3
|
+
*
|
|
4
|
+
* 6 design-specific tools that wrap BrowserTool for visual design iteration:
|
|
5
|
+
* - design_snapshot: Get DOM accessibility tree
|
|
6
|
+
* - design_screenshot: Capture page screenshot
|
|
7
|
+
* - design_navigate: Navigate to URL/route
|
|
8
|
+
* - design_resize: Change viewport size (presets or custom)
|
|
9
|
+
* - design_inspect: Get computed CSS styles for an element
|
|
10
|
+
* - design_scroll: Scroll to element or position
|
|
11
|
+
*
|
|
12
|
+
* These tools share a single browser session managed via
|
|
13
|
+
* setDesignBrowserSession() / clearDesignBrowserSession().
|
|
14
|
+
*/
|
|
15
|
+
import type { ParameterDef, RiskLevel } from './types.js';
|
|
16
|
+
import type { ToolResult } from '@yuaone/core';
|
|
17
|
+
import { BaseTool } from './base-tool.js';
|
|
18
|
+
import { BrowserTool } from './browser-tool.js';
|
|
19
|
+
/**
|
|
20
|
+
* Set the shared browser session used by all design tools.
|
|
21
|
+
* Call this after opening a browser via BrowserTool's "open" action.
|
|
22
|
+
*/
|
|
23
|
+
export declare function setDesignBrowserSession(sessionId: string, browserTool: BrowserTool): void;
|
|
24
|
+
/** Clear the shared browser session. */
|
|
25
|
+
export declare function clearDesignBrowserSession(): void;
|
|
26
|
+
export declare class DesignSnapshotTool extends BaseTool {
|
|
27
|
+
readonly name = "design_snapshot";
|
|
28
|
+
readonly description: string;
|
|
29
|
+
readonly riskLevel: RiskLevel;
|
|
30
|
+
readonly parameters: Record<string, ParameterDef>;
|
|
31
|
+
execute(args: Record<string, unknown>, workDir: string, _abortSignal?: AbortSignal): Promise<ToolResult>;
|
|
32
|
+
}
|
|
33
|
+
export declare class DesignScreenshotTool extends BaseTool {
|
|
34
|
+
readonly name = "design_screenshot";
|
|
35
|
+
readonly description: string;
|
|
36
|
+
readonly riskLevel: RiskLevel;
|
|
37
|
+
readonly parameters: Record<string, ParameterDef>;
|
|
38
|
+
execute(args: Record<string, unknown>, workDir: string, _abortSignal?: AbortSignal): Promise<ToolResult>;
|
|
39
|
+
}
|
|
40
|
+
export declare class DesignNavigateTool extends BaseTool {
|
|
41
|
+
readonly name = "design_navigate";
|
|
42
|
+
readonly description: string;
|
|
43
|
+
readonly riskLevel: RiskLevel;
|
|
44
|
+
readonly parameters: Record<string, ParameterDef>;
|
|
45
|
+
execute(args: Record<string, unknown>, workDir: string, _abortSignal?: AbortSignal): Promise<ToolResult>;
|
|
46
|
+
}
|
|
47
|
+
export declare class DesignResizeTool extends BaseTool {
|
|
48
|
+
readonly name = "design_resize";
|
|
49
|
+
readonly description: string;
|
|
50
|
+
readonly riskLevel: RiskLevel;
|
|
51
|
+
readonly parameters: Record<string, ParameterDef>;
|
|
52
|
+
execute(args: Record<string, unknown>, workDir: string, _abortSignal?: AbortSignal): Promise<ToolResult>;
|
|
53
|
+
}
|
|
54
|
+
export declare class DesignInspectTool extends BaseTool {
|
|
55
|
+
readonly name = "design_inspect";
|
|
56
|
+
readonly description: string;
|
|
57
|
+
readonly riskLevel: RiskLevel;
|
|
58
|
+
readonly parameters: Record<string, ParameterDef>;
|
|
59
|
+
execute(args: Record<string, unknown>, workDir: string, _abortSignal?: AbortSignal): Promise<ToolResult>;
|
|
60
|
+
}
|
|
61
|
+
export declare class DesignScrollTool extends BaseTool {
|
|
62
|
+
readonly name = "design_scroll";
|
|
63
|
+
readonly description: string;
|
|
64
|
+
readonly riskLevel: RiskLevel;
|
|
65
|
+
readonly parameters: Record<string, ParameterDef>;
|
|
66
|
+
execute(args: Record<string, unknown>, workDir: string, _abortSignal?: AbortSignal): Promise<ToolResult>;
|
|
67
|
+
}
|
|
68
|
+
/** Create instances of all 6 design tools. */
|
|
69
|
+
export declare function createDesignTools(): BaseTool[];
|
|
70
|
+
//# sourceMappingURL=design-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"design-tools.d.ts","sourceRoot":"","sources":["../src/design-tools.ts"],"names":[],"mappings":"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"}
|