@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,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @yuaone/tools — Common validation utilities
|
|
3
|
+
*
|
|
4
|
+
* Security-first validators for path traversal, shell injection,
|
|
5
|
+
* sensitive file detection, binary detection, and output truncation.
|
|
6
|
+
*
|
|
7
|
+
* Security rules SSOT: @yuaone/core/security.ts
|
|
8
|
+
* This module delegates to the SSOT and provides tool-specific wrappers.
|
|
9
|
+
*/
|
|
10
|
+
import { resolve, relative, extname, sep, dirname } from 'node:path';
|
|
11
|
+
import { open } from 'node:fs/promises';
|
|
12
|
+
import { realpathSync, existsSync } from 'node:fs';
|
|
13
|
+
import { validateCommand as coreValidateCommand, isSensitiveFile as securityIsSensitiveFile, SHELL_META_PATTERN, } from '@yuaone/core';
|
|
14
|
+
// ─── Symlink-Aware Path Resolution ──────────────────────────────────
|
|
15
|
+
/**
|
|
16
|
+
* Resolve a path and verify that it (and its symlink target) stays within the
|
|
17
|
+
* allowed project directory. Defends against symlink-based path traversal.
|
|
18
|
+
*
|
|
19
|
+
* @returns `{ valid, resolved, reason? }` — `resolved` is the real path if valid.
|
|
20
|
+
*/
|
|
21
|
+
export function resolveAndValidatePath(filePath, projectRoot) {
|
|
22
|
+
const resolved = resolve(projectRoot, filePath);
|
|
23
|
+
const normalizedRoot = resolve(projectRoot);
|
|
24
|
+
// Check the resolved string first
|
|
25
|
+
if (!resolved.startsWith(normalizedRoot + sep) && resolved !== normalizedRoot) {
|
|
26
|
+
return { valid: false, resolved, reason: 'path escapes project directory' };
|
|
27
|
+
}
|
|
28
|
+
// If file exists, resolve symlinks and check again
|
|
29
|
+
if (existsSync(resolved)) {
|
|
30
|
+
try {
|
|
31
|
+
const real = realpathSync(resolved);
|
|
32
|
+
if (!real.startsWith(normalizedRoot + sep) && real !== normalizedRoot) {
|
|
33
|
+
return { valid: false, resolved: real, reason: 'symlink target escapes project directory' };
|
|
34
|
+
}
|
|
35
|
+
return { valid: true, resolved: real };
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return { valid: false, resolved, reason: 'cannot resolve symlink' };
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// File doesn't exist yet — check parent directories for symlinks
|
|
42
|
+
let current = dirname(resolved);
|
|
43
|
+
while (current !== normalizedRoot && current.startsWith(normalizedRoot)) {
|
|
44
|
+
if (existsSync(current)) {
|
|
45
|
+
try {
|
|
46
|
+
const realParent = realpathSync(current);
|
|
47
|
+
if (!realParent.startsWith(normalizedRoot + sep) && realParent !== normalizedRoot) {
|
|
48
|
+
return { valid: false, resolved, reason: 'parent directory is a symlink escaping project' };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Can't resolve — safer to reject
|
|
53
|
+
return { valid: false, resolved, reason: 'cannot resolve parent symlink' };
|
|
54
|
+
}
|
|
55
|
+
break; // Found existing parent, it's safe
|
|
56
|
+
}
|
|
57
|
+
current = dirname(current);
|
|
58
|
+
}
|
|
59
|
+
return { valid: true, resolved };
|
|
60
|
+
}
|
|
61
|
+
// ─── Path Traversal Defence ─────────────────────────────────────────
|
|
62
|
+
/**
|
|
63
|
+
* Resolve and validate a path to ensure it stays within workDir.
|
|
64
|
+
* Returns the resolved absolute path.
|
|
65
|
+
* Throws on path traversal attempts (including symlink-based).
|
|
66
|
+
*/
|
|
67
|
+
export function validatePath(inputPath, workDir) {
|
|
68
|
+
// Reject null bytes
|
|
69
|
+
if (inputPath.includes('\0')) {
|
|
70
|
+
throw new Error('Path contains null byte');
|
|
71
|
+
}
|
|
72
|
+
const resolved = resolve(workDir, inputPath);
|
|
73
|
+
const rel = relative(workDir, resolved);
|
|
74
|
+
// rel must not start with '..' and must not be absolute (outside workDir)
|
|
75
|
+
if (rel.startsWith('..') || resolve(rel) === rel) {
|
|
76
|
+
throw new Error(`Path traversal detected: "${inputPath}" resolves outside workDir "${workDir}"`);
|
|
77
|
+
}
|
|
78
|
+
// Symlink defence: verify the real path stays within workDir
|
|
79
|
+
const symlinkCheck = resolveAndValidatePath(inputPath, workDir);
|
|
80
|
+
if (!symlinkCheck.valid) {
|
|
81
|
+
throw new Error(`Symlink traversal blocked: "${inputPath}" — ${symlinkCheck.reason}`);
|
|
82
|
+
}
|
|
83
|
+
return symlinkCheck.resolved;
|
|
84
|
+
}
|
|
85
|
+
// ─── Shell Metacharacter Defence ────────────────────────────────────
|
|
86
|
+
/**
|
|
87
|
+
* Validate that neither executable nor args contain shell metacharacters.
|
|
88
|
+
* Prevents shell injection when using execFile.
|
|
89
|
+
* Delegates to SHELL_META_PATTERN from @yuaone/core/security (SSOT).
|
|
90
|
+
*/
|
|
91
|
+
export function validateNoShellMeta(executable, args) {
|
|
92
|
+
if (SHELL_META_PATTERN.test(executable)) {
|
|
93
|
+
throw new Error(`Shell metacharacter in executable: ${executable}`);
|
|
94
|
+
}
|
|
95
|
+
for (const arg of args) {
|
|
96
|
+
if (SHELL_META_PATTERN.test(arg)) {
|
|
97
|
+
throw new Error(`Shell metacharacter in arg: ${arg}`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// ─── Blocked Commands (delegates to @yuaone/core/security SSOT) ───────
|
|
102
|
+
/**
|
|
103
|
+
* Check whether an executable + args combination is blocked.
|
|
104
|
+
* Throws with explanation if blocked.
|
|
105
|
+
* Delegates to @yuaone/core/security.validateCommand (SSOT).
|
|
106
|
+
*/
|
|
107
|
+
export function validateCommand(executable, args) {
|
|
108
|
+
const result = coreValidateCommand(executable, args);
|
|
109
|
+
if (!result.allowed) {
|
|
110
|
+
throw new Error(result.reason ?? 'Command blocked by security policy');
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// ─── Sensitive File Detection (delegates to @yuaone/core/security SSOT) ───
|
|
114
|
+
/**
|
|
115
|
+
* Check whether a file path matches known sensitive file patterns.
|
|
116
|
+
* Delegates to @yuaone/core/security.isSensitiveFile (SSOT).
|
|
117
|
+
*/
|
|
118
|
+
export function isSensitiveFile(filePath) {
|
|
119
|
+
return securityIsSensitiveFile(filePath);
|
|
120
|
+
}
|
|
121
|
+
// ─── Binary File Detection ──────────────────────────────────────────
|
|
122
|
+
const TEXT_EXTENSIONS = new Set([
|
|
123
|
+
'.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs',
|
|
124
|
+
'.json', '.yaml', '.yml', '.toml', '.xml', '.html', '.htm',
|
|
125
|
+
'.css', '.scss', '.less', '.sass',
|
|
126
|
+
'.md', '.mdx', '.txt', '.csv', '.tsv',
|
|
127
|
+
'.py', '.rb', '.go', '.rs', '.java', '.kt', '.scala',
|
|
128
|
+
'.c', '.cpp', '.h', '.hpp', '.cs', '.swift', '.m',
|
|
129
|
+
'.sh', '.bash', '.zsh', '.fish', '.ps1', '.bat', '.cmd',
|
|
130
|
+
'.sql', '.graphql', '.gql', '.prisma',
|
|
131
|
+
'.vue', '.svelte', '.astro',
|
|
132
|
+
'.env', '.gitignore', '.dockerignore', '.editorconfig',
|
|
133
|
+
'.lock', '.cfg', '.ini', '.conf',
|
|
134
|
+
'Makefile', 'Dockerfile', 'Jenkinsfile', 'Procfile',
|
|
135
|
+
]);
|
|
136
|
+
const IMAGE_EXTENSIONS = new Set([
|
|
137
|
+
'.png', '.jpg', '.jpeg', '.gif', '.bmp', '.webp',
|
|
138
|
+
'.svg', '.ico', '.tiff', '.tif',
|
|
139
|
+
]);
|
|
140
|
+
/**
|
|
141
|
+
* Check whether a file is likely binary by extension and (optionally) content sniffing.
|
|
142
|
+
*/
|
|
143
|
+
export async function isBinaryFile(filePath) {
|
|
144
|
+
const ext = extname(filePath).toLowerCase();
|
|
145
|
+
if (TEXT_EXTENSIONS.has(ext))
|
|
146
|
+
return false;
|
|
147
|
+
if (IMAGE_EXTENSIONS.has(ext))
|
|
148
|
+
return true;
|
|
149
|
+
// Sniff first 8KB for null bytes (avoid reading entire file)
|
|
150
|
+
try {
|
|
151
|
+
const fh = await open(filePath, 'r');
|
|
152
|
+
try {
|
|
153
|
+
const buf = Buffer.alloc(8192);
|
|
154
|
+
const { bytesRead } = await fh.read(buf, 0, 8192, 0);
|
|
155
|
+
const sample = buf.subarray(0, bytesRead);
|
|
156
|
+
for (let i = 0; i < sample.length; i++) {
|
|
157
|
+
if (sample[i] === 0)
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
await fh.close();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Check whether a file is an image.
|
|
172
|
+
*/
|
|
173
|
+
export function isImageFile(filePath) {
|
|
174
|
+
const ext = extname(filePath).toLowerCase();
|
|
175
|
+
return IMAGE_EXTENSIONS.has(ext);
|
|
176
|
+
}
|
|
177
|
+
// ─── Output Truncation ─────────────────────────────────────────────
|
|
178
|
+
const DEFAULT_MAX_BYTES = 50_000; // 50KB
|
|
179
|
+
/**
|
|
180
|
+
* Truncate output to maxBytes. Uses head/tail strategy.
|
|
181
|
+
*/
|
|
182
|
+
export function truncateOutput(output, maxBytes = DEFAULT_MAX_BYTES) {
|
|
183
|
+
if (output.length <= maxBytes)
|
|
184
|
+
return output;
|
|
185
|
+
const head = Math.floor(maxBytes * 0.4);
|
|
186
|
+
const tail = Math.floor(maxBytes * 0.4);
|
|
187
|
+
const truncated = output.length - head - tail;
|
|
188
|
+
return (output.slice(0, head) +
|
|
189
|
+
`\n\n... (${truncated} chars truncated) ...\n\n` +
|
|
190
|
+
output.slice(-tail));
|
|
191
|
+
}
|
|
192
|
+
// ─── Language Detection (by extension) ──────────────────────────────
|
|
193
|
+
const EXT_TO_LANGUAGE = {
|
|
194
|
+
'.ts': 'typescript', '.tsx': 'tsx', '.js': 'javascript', '.jsx': 'jsx',
|
|
195
|
+
'.mjs': 'javascript', '.cjs': 'javascript',
|
|
196
|
+
'.json': 'json', '.yaml': 'yaml', '.yml': 'yaml', '.toml': 'toml',
|
|
197
|
+
'.xml': 'xml', '.html': 'html', '.htm': 'html',
|
|
198
|
+
'.css': 'css', '.scss': 'scss', '.less': 'less',
|
|
199
|
+
'.md': 'markdown', '.mdx': 'mdx', '.txt': 'plaintext',
|
|
200
|
+
'.py': 'python', '.rb': 'ruby', '.go': 'go', '.rs': 'rust',
|
|
201
|
+
'.java': 'java', '.kt': 'kotlin', '.scala': 'scala',
|
|
202
|
+
'.c': 'c', '.cpp': 'cpp', '.h': 'c', '.hpp': 'cpp',
|
|
203
|
+
'.cs': 'csharp', '.swift': 'swift',
|
|
204
|
+
'.sh': 'bash', '.bash': 'bash', '.zsh': 'zsh',
|
|
205
|
+
'.sql': 'sql', '.graphql': 'graphql',
|
|
206
|
+
'.vue': 'vue', '.svelte': 'svelte',
|
|
207
|
+
'.dockerfile': 'dockerfile',
|
|
208
|
+
};
|
|
209
|
+
export function detectLanguage(filePath) {
|
|
210
|
+
const ext = extname(filePath).toLowerCase();
|
|
211
|
+
const basename = filePath.split('/').pop() ?? '';
|
|
212
|
+
if (basename === 'Dockerfile')
|
|
213
|
+
return 'dockerfile';
|
|
214
|
+
if (basename === 'Makefile')
|
|
215
|
+
return 'makefile';
|
|
216
|
+
return EXT_TO_LANGUAGE[ext] ?? 'plaintext';
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=validators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../src/validators.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@yuaone/tools",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "YUAN Agent Tool Implementations",
|
|
5
|
+
"license": "AGPL-3.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"files": ["dist/", "README.md", "LICENSE"],
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"access": "public"
|
|
12
|
+
},
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "https://github.com/yuaone/yuan.git",
|
|
16
|
+
"directory": "packages/yuan-tools"
|
|
17
|
+
},
|
|
18
|
+
"homepage": "https://github.com/yuaone/yuan#readme",
|
|
19
|
+
"bugs": {
|
|
20
|
+
"url": "https://github.com/yuaone/yuan/issues"
|
|
21
|
+
},
|
|
22
|
+
"keywords": ["coding-agent", "ai", "tools", "file-operations", "shell"],
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=18"
|
|
25
|
+
},
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsc",
|
|
28
|
+
"dev": "tsc --watch",
|
|
29
|
+
"clean": "rm -rf dist",
|
|
30
|
+
"lint": "tsc --noEmit",
|
|
31
|
+
"test": "node --test dist/__tests__/*.test.js"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@yuaone/core": "workspace:*",
|
|
35
|
+
"fast-glob": "^3.3.3",
|
|
36
|
+
"playwright": "^1.52.0"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^25.3.5",
|
|
40
|
+
"typescript": "^5.7.0"
|
|
41
|
+
}
|
|
42
|
+
}
|