@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.
Files changed (62) hide show
  1. package/dist/git-url.d.ts +43 -0
  2. package/dist/git-url.d.ts.map +1 -0
  3. package/dist/git-url.js +135 -0
  4. package/dist/git-url.js.map +1 -0
  5. package/dist/index.d.ts +7 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +8 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/link-auth/build-headers.d.ts +34 -0
  10. package/dist/link-auth/build-headers.d.ts.map +1 -0
  11. package/dist/link-auth/build-headers.js +58 -0
  12. package/dist/link-auth/build-headers.js.map +1 -0
  13. package/dist/link-auth/expand-macro.d.ts +38 -0
  14. package/dist/link-auth/expand-macro.d.ts.map +1 -0
  15. package/dist/link-auth/expand-macro.js +131 -0
  16. package/dist/link-auth/expand-macro.js.map +1 -0
  17. package/dist/link-auth/macros.yaml +50 -0
  18. package/dist/link-auth/resolve-token.d.ts +49 -0
  19. package/dist/link-auth/resolve-token.d.ts.map +1 -0
  20. package/dist/link-auth/resolve-token.js +72 -0
  21. package/dist/link-auth/resolve-token.js.map +1 -0
  22. package/dist/link-auth/resolve.d.ts +58 -0
  23. package/dist/link-auth/resolve.d.ts.map +1 -0
  24. package/dist/link-auth/resolve.js +55 -0
  25. package/dist/link-auth/resolve.js.map +1 -0
  26. package/dist/link-auth/rewrite.d.ts +52 -0
  27. package/dist/link-auth/rewrite.d.ts.map +1 -0
  28. package/dist/link-auth/rewrite.js +102 -0
  29. package/dist/link-auth/rewrite.js.map +1 -0
  30. package/dist/link-auth/select-provider.d.ts +30 -0
  31. package/dist/link-auth/select-provider.d.ts.map +1 -0
  32. package/dist/link-auth/select-provider.js +55 -0
  33. package/dist/link-auth/select-provider.js.map +1 -0
  34. package/dist/link-auth/template.d.ts +40 -0
  35. package/dist/link-auth/template.d.ts.map +1 -0
  36. package/dist/link-auth/template.js +89 -0
  37. package/dist/link-auth/template.js.map +1 -0
  38. package/dist/link-auth/transforms.d.ts +46 -0
  39. package/dist/link-auth/transforms.d.ts.map +1 -0
  40. package/dist/link-auth/transforms.js +52 -0
  41. package/dist/link-auth/transforms.js.map +1 -0
  42. package/dist/path-utils.d.ts +35 -3
  43. package/dist/path-utils.d.ts.map +1 -1
  44. package/dist/path-utils.js +63 -3
  45. package/dist/path-utils.js.map +1 -1
  46. package/dist/skill-test/auth-resolver.d.ts +34 -0
  47. package/dist/skill-test/auth-resolver.d.ts.map +1 -0
  48. package/dist/skill-test/auth-resolver.js +68 -0
  49. package/dist/skill-test/auth-resolver.js.map +1 -0
  50. package/dist/skill-test/env-scrub.d.ts +61 -0
  51. package/dist/skill-test/env-scrub.d.ts.map +1 -0
  52. package/dist/skill-test/env-scrub.js +112 -0
  53. package/dist/skill-test/env-scrub.js.map +1 -0
  54. package/dist/skill-test/index.d.ts +4 -0
  55. package/dist/skill-test/index.d.ts.map +1 -0
  56. package/dist/skill-test/index.js +4 -0
  57. package/dist/skill-test/index.js.map +1 -0
  58. package/dist/skill-test/spawn-claude.d.ts +45 -0
  59. package/dist/skill-test/spawn-claude.d.ts.map +1 -0
  60. package/dist/skill-test/spawn-claude.js +92 -0
  61. package/dist/skill-test/spawn-claude.js.map +1 -0
  62. 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.1",
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"