ysagc-agent 0.2.0 → 0.4.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 +36 -66
- package/dist/agent.d.ts +17 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +293 -0
- package/dist/agent.js.map +1 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +267 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +52 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +135 -0
- package/dist/config.js.map +1 -0
- package/dist/executor.d.ts +46 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +397 -0
- package/dist/executor.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +37 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +121 -0
- package/dist/logger.js.map +1 -0
- package/dist/path-utils.d.ts +44 -0
- package/dist/path-utils.d.ts.map +1 -0
- package/dist/path-utils.js +206 -0
- package/dist/path-utils.js.map +1 -0
- package/dist/protocol.d.ts +77 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +94 -0
- package/dist/protocol.js.map +1 -0
- package/dist/security.d.ts +32 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +228 -0
- package/dist/security.js.map +1 -0
- package/dist/tools.d.ts +36 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +498 -0
- package/dist/tools.js.map +1 -0
- package/package.json +36 -21
- package/src/config.js +0 -94
- package/src/http-fs.js +0 -178
- package/src/index.js +0 -439
- package/src/logger.js +0 -84
- package/src/methods/dialog.js +0 -84
- package/src/methods/fs.js +0 -674
- package/src/methods/git.js +0 -391
- package/src/methods/project.js +0 -57
- package/src/methods/scaffold.js +0 -131
- package/src/methods/skill.js +0 -347
- package/src/methods/system.js +0 -82
- package/src/methods/terminal.js +0 -234
- package/src/origin.js +0 -38
- package/src/pairing.js +0 -168
- package/src/rpc.js +0 -62
- package/src/sandbox.js +0 -178
package/dist/executor.js
ADDED
|
@@ -0,0 +1,397 @@
|
|
|
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.tokenize = tokenize;
|
|
37
|
+
exports.shouldUseShell = shouldUseShell;
|
|
38
|
+
exports.sanitizeEnv = sanitizeEnv;
|
|
39
|
+
exports.runCommand = runCommand;
|
|
40
|
+
const node_child_process_1 = require("node:child_process");
|
|
41
|
+
const fs = __importStar(require("node:fs"));
|
|
42
|
+
const os = __importStar(require("node:os"));
|
|
43
|
+
const path = __importStar(require("node:path"));
|
|
44
|
+
/** POSIX shell built-ins that cannot be executed as standalone binaries. */
|
|
45
|
+
const POSIX_BUILTINS = new Set([
|
|
46
|
+
'cd',
|
|
47
|
+
'.',
|
|
48
|
+
'source',
|
|
49
|
+
'export',
|
|
50
|
+
'set',
|
|
51
|
+
'unset',
|
|
52
|
+
'alias',
|
|
53
|
+
'unalias',
|
|
54
|
+
'umask',
|
|
55
|
+
'type',
|
|
56
|
+
'printf',
|
|
57
|
+
'read',
|
|
58
|
+
'exit',
|
|
59
|
+
'break',
|
|
60
|
+
'continue',
|
|
61
|
+
'echo',
|
|
62
|
+
'true',
|
|
63
|
+
'false',
|
|
64
|
+
]);
|
|
65
|
+
/** Characters that make a command require interpretation by a shell. */
|
|
66
|
+
const SHELL_META = /[|&;`<>()[\]{}*?~%!\n]/;
|
|
67
|
+
const ENV_MAJOR = /\$\(|\$\{|`/;
|
|
68
|
+
function needsShell(command) {
|
|
69
|
+
return SHELL_META.test(command) || ENV_MAJOR.test(command);
|
|
70
|
+
}
|
|
71
|
+
function startsWithBuiltin(program) {
|
|
72
|
+
return POSIX_BUILTINS.has(path.basename(program).toLowerCase());
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Split a simple command string into argv (respects single/double quotes and
|
|
76
|
+
* backslash escape). Do not use for commands with shell metacharacters.
|
|
77
|
+
*/
|
|
78
|
+
function tokenize(input) {
|
|
79
|
+
const tokens = [];
|
|
80
|
+
let cur = '';
|
|
81
|
+
let quote = null;
|
|
82
|
+
let escaped = false;
|
|
83
|
+
for (const ch of input) {
|
|
84
|
+
if (escaped) {
|
|
85
|
+
cur += ch;
|
|
86
|
+
escaped = false;
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (ch === '\\') {
|
|
90
|
+
escaped = true;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
if (quote) {
|
|
94
|
+
if (ch === quote) {
|
|
95
|
+
quote = null;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
cur += ch;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
if (ch === '"' || ch === "'") {
|
|
102
|
+
quote = ch;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (/\s/.test(ch)) {
|
|
106
|
+
if (cur !== '') {
|
|
107
|
+
tokens.push(cur);
|
|
108
|
+
cur = '';
|
|
109
|
+
}
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
cur += ch;
|
|
113
|
+
}
|
|
114
|
+
if (cur !== '')
|
|
115
|
+
tokens.push(cur);
|
|
116
|
+
return tokens;
|
|
117
|
+
}
|
|
118
|
+
/** Decide whether a command must run through a shell. On Windows the shell is
|
|
119
|
+
* always used because many common commands are cmd builtins. */
|
|
120
|
+
function shouldUseShell(command, override) {
|
|
121
|
+
if (override !== undefined)
|
|
122
|
+
return override;
|
|
123
|
+
if (process.platform === 'win32')
|
|
124
|
+
return true;
|
|
125
|
+
return needsShell(command) || startsWithBuiltin(tokenize(command)[0] ?? '');
|
|
126
|
+
}
|
|
127
|
+
/** Build a sanitised env so agent/platform credentials never reach child
|
|
128
|
+
* processes. Essential environment (PATH, HOME, LANG, ...) is preserved. */
|
|
129
|
+
function sanitizeEnv(base, extra) {
|
|
130
|
+
const out = {};
|
|
131
|
+
const merged = { ...base, ...(extra ?? {}) };
|
|
132
|
+
for (const [key, value] of Object.entries(merged)) {
|
|
133
|
+
const upper = key.toUpperCase();
|
|
134
|
+
// Drop agent config variables and obvious credentials.
|
|
135
|
+
if (/^YSAGC_/i.test(key) || upper === 'WS_URL')
|
|
136
|
+
continue;
|
|
137
|
+
if (/TOKEN$|SECRET$|PASSWORD$|PASSWD$|API[_-]?KEY$|ACCESS[_-]?KEY$|PRIVATE[_-]?KEY$|AUTHORIZATION$|CREDENTIALS?$|AUTH[_-]?TOKEN$/.test(upper)) {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
out[key] = value;
|
|
141
|
+
}
|
|
142
|
+
return out;
|
|
143
|
+
}
|
|
144
|
+
/** Create a directory for capturing command output. Tries the OS temp dir
|
|
145
|
+
* first, then the current working directory (which is normally writable even
|
|
146
|
+
* when the system temp is not). */
|
|
147
|
+
function makeTempDir() {
|
|
148
|
+
const candidates = [
|
|
149
|
+
path.join(os.tmpdir(), `ysagc-out-${process.pid}-${Date.now().toString(36)}`),
|
|
150
|
+
path.join(process.cwd(), `.ysagc-tmp-${process.pid}-${Date.now().toString(36)}`),
|
|
151
|
+
];
|
|
152
|
+
for (const dir of candidates) {
|
|
153
|
+
try {
|
|
154
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
155
|
+
return dir;
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
/* try next */
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
throw new Error('Unable to create a temporary output directory');
|
|
162
|
+
}
|
|
163
|
+
/** Kill a process and its whole tree (best-effort, cross-platform). */
|
|
164
|
+
function killTree(child) {
|
|
165
|
+
if (child.pid === undefined)
|
|
166
|
+
return;
|
|
167
|
+
if (process.platform === 'win32') {
|
|
168
|
+
try {
|
|
169
|
+
(0, node_child_process_1.spawn)('taskkill', ['/pid', String(child.pid), '/T', '/F'], { windowsHide: true });
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
child.kill('SIGKILL');
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
try {
|
|
177
|
+
process.kill(-child.pid, 'SIGKILL'); // negative pid = process group (detached)
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
child.kill('SIGKILL');
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/** Read the first `maxBytes` bytes of a file as UTF-8. */
|
|
185
|
+
function readCapped(file, maxBytes) {
|
|
186
|
+
const total = fs.statSync(file).size;
|
|
187
|
+
const readLen = Math.min(maxBytes, total);
|
|
188
|
+
const fd = fs.openSync(file, 'r');
|
|
189
|
+
try {
|
|
190
|
+
const buf = Buffer.alloc(readLen);
|
|
191
|
+
const n = fs.readSync(fd, buf, 0, readLen, 0);
|
|
192
|
+
return { text: buf.subarray(0, n).toString('utf8'), truncated: total > maxBytes, total };
|
|
193
|
+
}
|
|
194
|
+
finally {
|
|
195
|
+
fs.closeSync(fd);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Run a command, capturing stdout/stderr (spilled to a temp file when it
|
|
200
|
+
* exceeds `maxBytes`), enforcing a timeout, and killing the process tree on
|
|
201
|
+
* timeout or abort. Non-zero exit codes are returned, not thrown. Output is
|
|
202
|
+
* captured through file-descriptor redirection rather than a pipe so it is
|
|
203
|
+
* robust on constrained platforms and for very large outputs.
|
|
204
|
+
*/
|
|
205
|
+
function runCommand(opts) {
|
|
206
|
+
const timeoutMs = opts.timeoutMs ?? 120000;
|
|
207
|
+
const maxBytes = opts.maxBytes ?? 64000;
|
|
208
|
+
const useShell = shouldUseShell(opts.command, opts.shell);
|
|
209
|
+
const env = sanitizeEnv(process.env, opts.env ?? {});
|
|
210
|
+
return new Promise((resolve) => {
|
|
211
|
+
const started = process.hrtime();
|
|
212
|
+
// Choose capture mode: file redirection (preferred) or pipe fallback.
|
|
213
|
+
let capture = 'file';
|
|
214
|
+
let tempDir;
|
|
215
|
+
let stdoutPath = '';
|
|
216
|
+
let stderrPath = '';
|
|
217
|
+
let stdoutFd = -1;
|
|
218
|
+
let stderrFd = -1;
|
|
219
|
+
try {
|
|
220
|
+
tempDir = makeTempDir();
|
|
221
|
+
stdoutPath = path.join(tempDir, 'stdout.log');
|
|
222
|
+
stderrPath = path.join(tempDir, 'stderr.log');
|
|
223
|
+
stdoutFd = fs.openSync(stdoutPath, 'w');
|
|
224
|
+
stderrFd = fs.openSync(stderrPath, 'w');
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
capture = 'pipe';
|
|
228
|
+
tempDir = undefined;
|
|
229
|
+
}
|
|
230
|
+
const stdio = capture === 'file' ? ['ignore', stdoutFd, stderrFd] : undefined;
|
|
231
|
+
let child;
|
|
232
|
+
if (useShell) {
|
|
233
|
+
child = (0, node_child_process_1.spawn)(opts.command, { cwd: opts.cwd, env, shell: true, windowsHide: true, ...(stdio ? { stdio } : {}) });
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
const args = tokenize(opts.command);
|
|
237
|
+
child = (0, node_child_process_1.spawn)(args[0] ?? '', args.slice(1), {
|
|
238
|
+
cwd: opts.cwd,
|
|
239
|
+
env,
|
|
240
|
+
shell: false,
|
|
241
|
+
windowsHide: true,
|
|
242
|
+
...(stdio ? { stdio } : {}),
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
// The child now owns the file descriptors; close the parent's copies.
|
|
246
|
+
if (capture === 'file') {
|
|
247
|
+
if (stdoutFd >= 0) {
|
|
248
|
+
try {
|
|
249
|
+
fs.closeSync(stdoutFd);
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
/* ignore */
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
if (stderrFd >= 0) {
|
|
256
|
+
try {
|
|
257
|
+
fs.closeSync(stderrFd);
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
/* ignore */
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
let pipeStdout = '';
|
|
265
|
+
let pipeStderr = '';
|
|
266
|
+
let pipeTruncated = false;
|
|
267
|
+
if (capture === 'pipe') {
|
|
268
|
+
const readPipe = (stream, target) => {
|
|
269
|
+
if (!stream)
|
|
270
|
+
return;
|
|
271
|
+
stream.setEncoding('utf8');
|
|
272
|
+
stream.on('data', (chunk) => {
|
|
273
|
+
const text = typeof chunk === 'string' ? chunk : chunk.toString('utf8');
|
|
274
|
+
if (target === 'stdout') {
|
|
275
|
+
if (pipeStdout.length < maxBytes) {
|
|
276
|
+
const room = maxBytes - pipeStdout.length;
|
|
277
|
+
pipeStdout += text.slice(0, room);
|
|
278
|
+
if (text.length > room)
|
|
279
|
+
pipeTruncated = true;
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
pipeTruncated = true;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
if (pipeStderr.length < maxBytes) {
|
|
287
|
+
const room = maxBytes - pipeStderr.length;
|
|
288
|
+
pipeStderr += text.slice(0, room);
|
|
289
|
+
if (text.length > room)
|
|
290
|
+
pipeTruncated = true;
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
pipeTruncated = true;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
};
|
|
298
|
+
readPipe(child.stdout, 'stdout');
|
|
299
|
+
readPipe(child.stderr, 'stderr');
|
|
300
|
+
}
|
|
301
|
+
let timedOut = false;
|
|
302
|
+
let settled = false;
|
|
303
|
+
let timer;
|
|
304
|
+
const collect = (exitCode) => {
|
|
305
|
+
if (settled)
|
|
306
|
+
return;
|
|
307
|
+
settled = true;
|
|
308
|
+
if (timer)
|
|
309
|
+
clearTimeout(timer);
|
|
310
|
+
const hr = process.hrtime(started);
|
|
311
|
+
const durationMs = Math.round(hr[0] * 1000 + hr[1] / 1e6);
|
|
312
|
+
if (capture === 'pipe') {
|
|
313
|
+
resolve({
|
|
314
|
+
stdout: pipeStdout,
|
|
315
|
+
stderr: pipeStderr,
|
|
316
|
+
exitCode,
|
|
317
|
+
durationMs,
|
|
318
|
+
timedOut,
|
|
319
|
+
truncated: pipeTruncated,
|
|
320
|
+
});
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
try {
|
|
324
|
+
const so = readCapped(stdoutPath, maxBytes);
|
|
325
|
+
const se = readCapped(stderrPath, maxBytes);
|
|
326
|
+
const truncated = so.truncated || se.truncated;
|
|
327
|
+
let stdoutFile;
|
|
328
|
+
let stderrFile;
|
|
329
|
+
if (truncated) {
|
|
330
|
+
// Keep the temp directory so the platform can retrieve full output.
|
|
331
|
+
stdoutFile = stdoutPath;
|
|
332
|
+
stderrFile = stderrPath;
|
|
333
|
+
}
|
|
334
|
+
else if (tempDir) {
|
|
335
|
+
try {
|
|
336
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
/* best-effort cleanup */
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
resolve({
|
|
343
|
+
stdout: so.text,
|
|
344
|
+
stderr: se.text,
|
|
345
|
+
exitCode,
|
|
346
|
+
durationMs,
|
|
347
|
+
timedOut,
|
|
348
|
+
truncated,
|
|
349
|
+
...(stdoutFile ? { stdoutFile } : {}),
|
|
350
|
+
...(stderrFile ? { stderrFile } : {}),
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
catch (err) {
|
|
354
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
355
|
+
resolve({
|
|
356
|
+
stdout: '',
|
|
357
|
+
stderr: msg,
|
|
358
|
+
exitCode,
|
|
359
|
+
durationMs,
|
|
360
|
+
timedOut,
|
|
361
|
+
truncated: false,
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
};
|
|
365
|
+
child.on('error', (err) => {
|
|
366
|
+
if (capture === 'pipe' && !pipeStderr)
|
|
367
|
+
pipeStderr = err.message;
|
|
368
|
+
collect(127);
|
|
369
|
+
});
|
|
370
|
+
let exitCode = 0;
|
|
371
|
+
child.on('exit', (code, signal) => {
|
|
372
|
+
exitCode = code ?? (signal ? 1 : 0);
|
|
373
|
+
});
|
|
374
|
+
// 'close' fires after all stdio is closed, so output is final.
|
|
375
|
+
child.on('close', (code, signal) => {
|
|
376
|
+
exitCode = code ?? (signal ? 1 : 0);
|
|
377
|
+
collect(exitCode);
|
|
378
|
+
});
|
|
379
|
+
timer = setTimeout(() => {
|
|
380
|
+
timedOut = true;
|
|
381
|
+
killTree(child);
|
|
382
|
+
// Timeout kills surface via close; fall back if the OS is slow.
|
|
383
|
+
const killTimer = setTimeout(() => {
|
|
384
|
+
if (!settled)
|
|
385
|
+
collect(124);
|
|
386
|
+
}, 2000);
|
|
387
|
+
killTimer.unref?.();
|
|
388
|
+
}, timeoutMs);
|
|
389
|
+
if (opts.signal) {
|
|
390
|
+
opts.signal.addEventListener('abort', () => {
|
|
391
|
+
timedOut = false;
|
|
392
|
+
killTree(child);
|
|
393
|
+
}, { once: true });
|
|
394
|
+
}
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export { startAgent, AGENT_VERSION } from './agent';
|
|
2
|
+
export type { AgentHandle, AgentEvents } from './agent';
|
|
3
|
+
export { runSelfTest } from './cli';
|
|
4
|
+
export type { SelfTest } from './cli';
|
|
5
|
+
export { canonicalize, isWithinRoot, assertInsideRoot, safeResolve } from './path-utils';
|
|
6
|
+
export type { WithinRootOptions } from './path-utils';
|
|
7
|
+
export { isDangerCommand, isSensitivePath, maskSecrets, MASK, } from './security';
|
|
8
|
+
export type { DangerAssessment, DangerSeverity } from './security';
|
|
9
|
+
export { createToolRegistry } from './tools';
|
|
10
|
+
export type { ToolRegistry, ToolContext, ToolResult, ToolOutcome } from './tools';
|
|
11
|
+
export { loadConfig, validateConfig } from './config';
|
|
12
|
+
export type { AgentConfig, ConfigOverrides, PermissionMode } from './config';
|
|
13
|
+
export { encodeMessage, decodeMessage, computeIdempotencyKey, stableStringify } from './protocol';
|
|
14
|
+
export type { ClientMessage, ServerMessage, PlatformMessage, ToolCallMessage, ToolResultMessage, PingMessage, WelcomeMessage, CancelMessage, HelloMessage, ClientState, } from './protocol';
|
|
15
|
+
export { Logger } from './logger';
|
|
16
|
+
export type { LogLevel, LoggerOptions } from './logger';
|
|
17
|
+
import { startAgent } from './agent';
|
|
18
|
+
export default startAgent;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AACzF,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EACL,eAAe,EACf,eAAe,EACf,WAAW,EACX,IAAI,GACL,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAElF,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AACtD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClG,YAAY,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,cAAc,EACd,aAAa,EACb,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,eAAe,UAAU,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Public API for ysagc-agent.
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Logger = exports.stableStringify = exports.computeIdempotencyKey = exports.decodeMessage = exports.encodeMessage = exports.validateConfig = exports.loadConfig = exports.createToolRegistry = exports.MASK = exports.maskSecrets = exports.isSensitivePath = exports.isDangerCommand = exports.safeResolve = exports.assertInsideRoot = exports.isWithinRoot = exports.canonicalize = exports.runSelfTest = exports.AGENT_VERSION = exports.startAgent = void 0;
|
|
5
|
+
var agent_1 = require("./agent");
|
|
6
|
+
Object.defineProperty(exports, "startAgent", { enumerable: true, get: function () { return agent_1.startAgent; } });
|
|
7
|
+
Object.defineProperty(exports, "AGENT_VERSION", { enumerable: true, get: function () { return agent_1.AGENT_VERSION; } });
|
|
8
|
+
var cli_1 = require("./cli");
|
|
9
|
+
Object.defineProperty(exports, "runSelfTest", { enumerable: true, get: function () { return cli_1.runSelfTest; } });
|
|
10
|
+
var path_utils_1 = require("./path-utils");
|
|
11
|
+
Object.defineProperty(exports, "canonicalize", { enumerable: true, get: function () { return path_utils_1.canonicalize; } });
|
|
12
|
+
Object.defineProperty(exports, "isWithinRoot", { enumerable: true, get: function () { return path_utils_1.isWithinRoot; } });
|
|
13
|
+
Object.defineProperty(exports, "assertInsideRoot", { enumerable: true, get: function () { return path_utils_1.assertInsideRoot; } });
|
|
14
|
+
Object.defineProperty(exports, "safeResolve", { enumerable: true, get: function () { return path_utils_1.safeResolve; } });
|
|
15
|
+
var security_1 = require("./security");
|
|
16
|
+
Object.defineProperty(exports, "isDangerCommand", { enumerable: true, get: function () { return security_1.isDangerCommand; } });
|
|
17
|
+
Object.defineProperty(exports, "isSensitivePath", { enumerable: true, get: function () { return security_1.isSensitivePath; } });
|
|
18
|
+
Object.defineProperty(exports, "maskSecrets", { enumerable: true, get: function () { return security_1.maskSecrets; } });
|
|
19
|
+
Object.defineProperty(exports, "MASK", { enumerable: true, get: function () { return security_1.MASK; } });
|
|
20
|
+
var tools_1 = require("./tools");
|
|
21
|
+
Object.defineProperty(exports, "createToolRegistry", { enumerable: true, get: function () { return tools_1.createToolRegistry; } });
|
|
22
|
+
var config_1 = require("./config");
|
|
23
|
+
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_1.loadConfig; } });
|
|
24
|
+
Object.defineProperty(exports, "validateConfig", { enumerable: true, get: function () { return config_1.validateConfig; } });
|
|
25
|
+
var protocol_1 = require("./protocol");
|
|
26
|
+
Object.defineProperty(exports, "encodeMessage", { enumerable: true, get: function () { return protocol_1.encodeMessage; } });
|
|
27
|
+
Object.defineProperty(exports, "decodeMessage", { enumerable: true, get: function () { return protocol_1.decodeMessage; } });
|
|
28
|
+
Object.defineProperty(exports, "computeIdempotencyKey", { enumerable: true, get: function () { return protocol_1.computeIdempotencyKey; } });
|
|
29
|
+
Object.defineProperty(exports, "stableStringify", { enumerable: true, get: function () { return protocol_1.stableStringify; } });
|
|
30
|
+
var logger_1 = require("./logger");
|
|
31
|
+
Object.defineProperty(exports, "Logger", { enumerable: true, get: function () { return logger_1.Logger; } });
|
|
32
|
+
const agent_2 = require("./agent");
|
|
33
|
+
exports.default = agent_2.startAgent;
|
|
34
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,8BAA8B;;;AAE9B,iCAAoD;AAA3C,mGAAA,UAAU,OAAA;AAAE,sGAAA,aAAa,OAAA;AAGlC,6BAAoC;AAA3B,kGAAA,WAAW,OAAA;AAGpB,2CAAyF;AAAhF,0GAAA,YAAY,OAAA;AAAE,0GAAA,YAAY,OAAA;AAAE,8GAAA,gBAAgB,OAAA;AAAE,yGAAA,WAAW,OAAA;AAGlE,uCAKoB;AAJlB,2GAAA,eAAe,OAAA;AACf,2GAAA,eAAe,OAAA;AACf,uGAAA,WAAW,OAAA;AACX,gGAAA,IAAI,OAAA;AAIN,iCAA6C;AAApC,2GAAA,kBAAkB,OAAA;AAG3B,mCAAsD;AAA7C,oGAAA,UAAU,OAAA;AAAE,wGAAA,cAAc,OAAA;AAGnC,uCAAkG;AAAzF,yGAAA,aAAa,OAAA;AAAE,yGAAA,aAAa,OAAA;AAAE,iHAAA,qBAAqB,OAAA;AAAE,2GAAA,eAAe,OAAA;AAc7E,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AAGf,mCAAqC;AACrC,kBAAe,kBAAU,CAAC"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured logger. It redacts secret-looking values before they ever reach
|
|
3
|
+
* stdout/stderr. Log depth is controlled by {@link LogLevel}.
|
|
4
|
+
*/
|
|
5
|
+
export type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug';
|
|
6
|
+
export interface LoggerOptions {
|
|
7
|
+
/** Minimum level that is emitted. */
|
|
8
|
+
level?: LogLevel;
|
|
9
|
+
/** Optional namespace prefix, e.g. "agent". */
|
|
10
|
+
name?: string;
|
|
11
|
+
/** Write target. Defaults to process.stdout. */
|
|
12
|
+
stream?: NodeJS.WriteStream;
|
|
13
|
+
/** Emit ISO timestamps (default true). */
|
|
14
|
+
timestamps?: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* A tiny structured logger. Never throws; any internal failure degrades to a
|
|
18
|
+
* raw console write so a logging bug cannot take down the agent.
|
|
19
|
+
*/
|
|
20
|
+
export declare class Logger {
|
|
21
|
+
private readonly min;
|
|
22
|
+
private readonly name;
|
|
23
|
+
private readonly stream;
|
|
24
|
+
private readonly timestamps;
|
|
25
|
+
constructor(opts?: LoggerOptions);
|
|
26
|
+
/** Create a child logger with an extra namespace segment. */
|
|
27
|
+
child(name: string): Logger;
|
|
28
|
+
debug(msg: string, context?: Record<string, unknown>): void;
|
|
29
|
+
info(msg: string, context?: Record<string, unknown>): void;
|
|
30
|
+
warn(msg: string, context?: Record<string, unknown>): void;
|
|
31
|
+
error(msg: string, context?: Record<string, unknown>): void;
|
|
32
|
+
private write;
|
|
33
|
+
private sanitize;
|
|
34
|
+
private maskValue;
|
|
35
|
+
private format;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAUtE,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAC5B,0CAA0C;IAC1C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AASD;;;GAGG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;gBAEzB,IAAI,GAAE,aAAkB;IAOpC,6DAA6D;IAC7D,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAW3B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI1D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI1D,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAI3D,OAAO,CAAC,KAAK;IAsBb,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,MAAM;CAWf"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Logger = void 0;
|
|
4
|
+
const security_1 = require("./security");
|
|
5
|
+
const LEVEL_RANK = {
|
|
6
|
+
silent: 0,
|
|
7
|
+
error: 1,
|
|
8
|
+
warn: 2,
|
|
9
|
+
info: 3,
|
|
10
|
+
debug: 4,
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* A tiny structured logger. Never throws; any internal failure degrades to a
|
|
14
|
+
* raw console write so a logging bug cannot take down the agent.
|
|
15
|
+
*/
|
|
16
|
+
class Logger {
|
|
17
|
+
constructor(opts = {}) {
|
|
18
|
+
this.min = LEVEL_RANK[opts.level ?? 'info'];
|
|
19
|
+
this.name = opts.name ?? 'ysagc-agent';
|
|
20
|
+
this.stream = opts.stream ?? process.stdout;
|
|
21
|
+
this.timestamps = opts.timestamps ?? true;
|
|
22
|
+
}
|
|
23
|
+
/** Create a child logger with an extra namespace segment. */
|
|
24
|
+
child(name) {
|
|
25
|
+
return new Logger({
|
|
26
|
+
level: Object.keys(LEVEL_RANK).find((l) => LEVEL_RANK[l] === this.min),
|
|
27
|
+
name: `${this.name}.${name}`,
|
|
28
|
+
stream: this.stream,
|
|
29
|
+
timestamps: this.timestamps,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
debug(msg, context) {
|
|
33
|
+
this.write('debug', msg, context);
|
|
34
|
+
}
|
|
35
|
+
info(msg, context) {
|
|
36
|
+
this.write('info', msg, context);
|
|
37
|
+
}
|
|
38
|
+
warn(msg, context) {
|
|
39
|
+
this.write('warn', msg, context);
|
|
40
|
+
}
|
|
41
|
+
error(msg, context) {
|
|
42
|
+
this.write('error', msg, context);
|
|
43
|
+
}
|
|
44
|
+
write(level, msg, context) {
|
|
45
|
+
if (LEVEL_RANK[level] > this.min)
|
|
46
|
+
return;
|
|
47
|
+
try {
|
|
48
|
+
const entry = {
|
|
49
|
+
level,
|
|
50
|
+
msg: (0, security_1.maskSecrets)(msg),
|
|
51
|
+
at: this.timestamps ? new Date().toISOString() : '',
|
|
52
|
+
};
|
|
53
|
+
const safeCtx = this.sanitize(context);
|
|
54
|
+
const line = this.format(entry, safeCtx);
|
|
55
|
+
this.stream.write(line + '\n');
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Never allow logging to break the agent.
|
|
59
|
+
try {
|
|
60
|
+
// eslint-disable-next-line no-console
|
|
61
|
+
console.error(`[${level}] ${msg}`);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
/* ignore */
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
sanitize(context) {
|
|
69
|
+
if (!context)
|
|
70
|
+
return undefined;
|
|
71
|
+
const out = {};
|
|
72
|
+
for (const [k, v] of Object.entries(context)) {
|
|
73
|
+
out[k] = this.maskValue(k, v);
|
|
74
|
+
}
|
|
75
|
+
return out;
|
|
76
|
+
}
|
|
77
|
+
maskValue(key, value) {
|
|
78
|
+
const k = key.toLowerCase();
|
|
79
|
+
if (/token|secret|password|passwd|apikey|api[_-]key|authorization|credential|private[_-]key|access[_-]key|session/.test(k)) {
|
|
80
|
+
return (0, security_1.maskSecrets)(String(value));
|
|
81
|
+
}
|
|
82
|
+
if (typeof value === 'string')
|
|
83
|
+
return (0, security_1.maskSecrets)(value);
|
|
84
|
+
if (typeof value === 'object' && value !== null) {
|
|
85
|
+
return this.sanitize(value);
|
|
86
|
+
}
|
|
87
|
+
return value;
|
|
88
|
+
}
|
|
89
|
+
format(entry, context) {
|
|
90
|
+
const parts = [];
|
|
91
|
+
if (entry.at)
|
|
92
|
+
parts.push(entry.at);
|
|
93
|
+
parts.push(`[${entry.level.toUpperCase().padEnd(5)}]`);
|
|
94
|
+
parts.push(`[${this.name}]`);
|
|
95
|
+
parts.push(entry.msg);
|
|
96
|
+
if (context && Object.keys(context).length > 0) {
|
|
97
|
+
parts.push(safeStringify(context));
|
|
98
|
+
}
|
|
99
|
+
return parts.join(' ');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.Logger = Logger;
|
|
103
|
+
function safeStringify(value) {
|
|
104
|
+
try {
|
|
105
|
+
const seen = new WeakSet();
|
|
106
|
+
return JSON.stringify(value, (_key, v) => {
|
|
107
|
+
if (typeof v === 'object' && v !== null) {
|
|
108
|
+
if (seen.has(v))
|
|
109
|
+
return '[Circular]';
|
|
110
|
+
seen.add(v);
|
|
111
|
+
}
|
|
112
|
+
if (typeof v === 'bigint')
|
|
113
|
+
return v.toString();
|
|
114
|
+
return v;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return String(value);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|