@vibe-agent-toolkit/utils 0.1.39-rc.1 → 0.1.39-rc.10
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/dist/git-url.d.ts +43 -0
- package/dist/git-url.d.ts.map +1 -0
- package/dist/git-url.js +135 -0
- package/dist/git-url.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/link-auth/build-headers.d.ts +34 -0
- package/dist/link-auth/build-headers.d.ts.map +1 -0
- package/dist/link-auth/build-headers.js +58 -0
- package/dist/link-auth/build-headers.js.map +1 -0
- package/dist/link-auth/expand-macro.d.ts +38 -0
- package/dist/link-auth/expand-macro.d.ts.map +1 -0
- package/dist/link-auth/expand-macro.js +131 -0
- package/dist/link-auth/expand-macro.js.map +1 -0
- package/dist/link-auth/macros.yaml +50 -0
- package/dist/link-auth/resolve-token.d.ts +49 -0
- package/dist/link-auth/resolve-token.d.ts.map +1 -0
- package/dist/link-auth/resolve-token.js +72 -0
- package/dist/link-auth/resolve-token.js.map +1 -0
- package/dist/link-auth/resolve.d.ts +58 -0
- package/dist/link-auth/resolve.d.ts.map +1 -0
- package/dist/link-auth/resolve.js +55 -0
- package/dist/link-auth/resolve.js.map +1 -0
- package/dist/link-auth/rewrite.d.ts +52 -0
- package/dist/link-auth/rewrite.d.ts.map +1 -0
- package/dist/link-auth/rewrite.js +102 -0
- package/dist/link-auth/rewrite.js.map +1 -0
- package/dist/link-auth/select-provider.d.ts +30 -0
- package/dist/link-auth/select-provider.d.ts.map +1 -0
- package/dist/link-auth/select-provider.js +55 -0
- package/dist/link-auth/select-provider.js.map +1 -0
- package/dist/link-auth/template.d.ts +40 -0
- package/dist/link-auth/template.d.ts.map +1 -0
- package/dist/link-auth/template.js +89 -0
- package/dist/link-auth/template.js.map +1 -0
- package/dist/link-auth/transforms.d.ts +46 -0
- package/dist/link-auth/transforms.d.ts.map +1 -0
- package/dist/link-auth/transforms.js +52 -0
- package/dist/link-auth/transforms.js.map +1 -0
- package/dist/path-utils.d.ts +35 -3
- package/dist/path-utils.d.ts.map +1 -1
- package/dist/path-utils.js +63 -3
- package/dist/path-utils.js.map +1 -1
- package/dist/skill-test/auth-resolver.d.ts +34 -0
- package/dist/skill-test/auth-resolver.d.ts.map +1 -0
- package/dist/skill-test/auth-resolver.js +68 -0
- package/dist/skill-test/auth-resolver.js.map +1 -0
- package/dist/skill-test/env-scrub.d.ts +61 -0
- package/dist/skill-test/env-scrub.d.ts.map +1 -0
- package/dist/skill-test/env-scrub.js +112 -0
- package/dist/skill-test/env-scrub.js.map +1 -0
- package/dist/skill-test/index.d.ts +4 -0
- package/dist/skill-test/index.d.ts.map +1 -0
- package/dist/skill-test/index.js +4 -0
- package/dist/skill-test/index.js.map +1 -0
- package/dist/skill-test/spawn-claude.d.ts +45 -0
- package/dist/skill-test/spawn-claude.d.ts.map +1 -0
- package/dist/skill-test/spawn-claude.js +92 -0
- package/dist/skill-test/spawn-claude.js.map +1 -0
- package/package.json +4 -3
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { createReadStream } from 'node:fs';
|
|
3
|
+
import which from 'which';
|
|
4
|
+
/**
|
|
5
|
+
* Pure assembly of the headless `claude -p` argv (spec §9). The prompt is never
|
|
6
|
+
* inlined as an argv string (Windows cmd-quoting safety) and claude 2.x has no
|
|
7
|
+
* `--prompt-file` flag — the prompt is fed to the child's stdin by
|
|
8
|
+
* {@link spawnHeadlessClaude} instead. `--setting-sources ""` suppresses
|
|
9
|
+
* user/project settings; built-in skills remain (§5).
|
|
10
|
+
*/
|
|
11
|
+
export function assembleClaudeArgs(opts) {
|
|
12
|
+
const args = [
|
|
13
|
+
'-p',
|
|
14
|
+
// claude 2.x rejects `-p --output-format stream-json` unless --verbose is
|
|
15
|
+
// also passed ("--output-format=stream-json requires --verbose"). The
|
|
16
|
+
// streamed JSON is piped to stderr for progress visibility.
|
|
17
|
+
'--output-format', 'stream-json',
|
|
18
|
+
'--verbose',
|
|
19
|
+
'--setting-sources', '',
|
|
20
|
+
'--permission-mode', 'bypassPermissions',
|
|
21
|
+
'--add-dir', opts.sandboxDir,
|
|
22
|
+
];
|
|
23
|
+
for (const dir of opts.pluginDirs) {
|
|
24
|
+
args.push('--plugin-dir', dir);
|
|
25
|
+
}
|
|
26
|
+
if (opts.model !== undefined)
|
|
27
|
+
args.push('--model', opts.model);
|
|
28
|
+
if (opts.maxTurns !== undefined)
|
|
29
|
+
args.push('--max-turns', String(opts.maxTurns));
|
|
30
|
+
if (opts.maxBudgetUsd !== undefined)
|
|
31
|
+
args.push('--max-budget-usd', String(opts.maxBudgetUsd));
|
|
32
|
+
return args;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Spawn the headless `claude`. The prompt file is streamed to the child's stdin
|
|
36
|
+
* so the session reads its prompt and then sees EOF (it cannot block on input,
|
|
37
|
+
* §16). Wall-clock kill on timeout. If `stallMs` is set, a resettable stall
|
|
38
|
+
* watchdog kills the child when no output is received for that duration
|
|
39
|
+
* (stalled: true in result).
|
|
40
|
+
*/
|
|
41
|
+
export async function spawnHeadlessClaude(opts) {
|
|
42
|
+
const bin = which.sync('claude');
|
|
43
|
+
const args = assembleClaudeArgs(opts);
|
|
44
|
+
return await new Promise((resolve, reject) => {
|
|
45
|
+
const child = spawn(bin, args, { cwd: opts.cwd, env: opts.env, stdio: ['pipe', 'pipe', 'pipe'] });
|
|
46
|
+
let timedOut = false;
|
|
47
|
+
let stalled = false;
|
|
48
|
+
const wallTimer = setTimeout(() => {
|
|
49
|
+
timedOut = true;
|
|
50
|
+
child.kill('SIGKILL');
|
|
51
|
+
}, opts.timeoutMs);
|
|
52
|
+
// Stall watchdog: reset on every stdout/stderr chunk; fire if silent for stallMs.
|
|
53
|
+
let stallTimer;
|
|
54
|
+
if (opts.stallMs !== undefined) {
|
|
55
|
+
const stallMs = opts.stallMs;
|
|
56
|
+
const resetStallTimer = () => {
|
|
57
|
+
if (stallTimer !== undefined)
|
|
58
|
+
clearTimeout(stallTimer);
|
|
59
|
+
stallTimer = setTimeout(() => {
|
|
60
|
+
stalled = true;
|
|
61
|
+
child.kill('SIGKILL');
|
|
62
|
+
}, stallMs);
|
|
63
|
+
};
|
|
64
|
+
resetStallTimer();
|
|
65
|
+
child.stdout.on('data', () => { resetStallTimer(); });
|
|
66
|
+
child.stderr.on('data', () => { resetStallTimer(); });
|
|
67
|
+
}
|
|
68
|
+
const clearAllTimers = () => {
|
|
69
|
+
clearTimeout(wallTimer);
|
|
70
|
+
if (stallTimer !== undefined)
|
|
71
|
+
clearTimeout(stallTimer);
|
|
72
|
+
};
|
|
73
|
+
// Feed the prompt to the child via stdin (claude 2.x has no --prompt-file).
|
|
74
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename -- our own derived prompt path
|
|
75
|
+
const promptStream = createReadStream(opts.promptFile);
|
|
76
|
+
promptStream.on('error', err => {
|
|
77
|
+
clearAllTimers();
|
|
78
|
+
child.kill('SIGKILL');
|
|
79
|
+
reject(err);
|
|
80
|
+
});
|
|
81
|
+
// Swallow EPIPE: if the child exits before consuming all stdin, the write
|
|
82
|
+
// end errors — that is not a harness failure (the close handler reports the
|
|
83
|
+
// child's real exit status).
|
|
84
|
+
child.stdin.on('error', () => { });
|
|
85
|
+
promptStream.pipe(child.stdin);
|
|
86
|
+
child.stdout.on('data', (d) => { opts.onStdout?.(d.toString()); });
|
|
87
|
+
child.stderr.on('data', (d) => { opts.onStderr?.(d.toString()); });
|
|
88
|
+
child.on('error', err => { clearAllTimers(); reject(err); });
|
|
89
|
+
child.on('close', code => { clearAllTimers(); resolve({ status: code ?? -1, timedOut, stalled }); });
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=spawn-claude.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spawn-claude.js","sourceRoot":"","sources":["../../src/skill-test/spawn-claude.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibe-agent-toolkit/utils",
|
|
3
|
-
"version": "0.1.39-rc.
|
|
3
|
+
"version": "0.1.39-rc.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Core utility functions with no external dependencies",
|
|
6
6
|
"keywords": [
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"README.md"
|
|
24
24
|
],
|
|
25
25
|
"scripts": {
|
|
26
|
-
"build": "tsc",
|
|
26
|
+
"build": "tsc && tsx ../dev-tools/src/copy-yaml-assets.ts",
|
|
27
27
|
"test": "vitest run",
|
|
28
28
|
"test:watch": "vitest",
|
|
29
29
|
"typecheck": "tsc --noEmit",
|
|
@@ -33,7 +33,8 @@
|
|
|
33
33
|
"handlebars": "^4.7.8",
|
|
34
34
|
"ignore": "^7.0.5",
|
|
35
35
|
"picomatch": "^4.0.3",
|
|
36
|
-
"which": "^5.0.0"
|
|
36
|
+
"which": "^5.0.0",
|
|
37
|
+
"yaml": "^2.6.1"
|
|
37
38
|
},
|
|
38
39
|
"peerDependencies": {
|
|
39
40
|
"zod": "^3.25.0 || ^4.0.0"
|