@agentex/agent 0.0.1

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 (102) hide show
  1. package/README.md +167 -0
  2. package/dist/index.d.ts +5 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +5 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/providers/claude/codec.d.ts +3 -0
  7. package/dist/providers/claude/codec.d.ts.map +1 -0
  8. package/dist/providers/claude/codec.js +43 -0
  9. package/dist/providers/claude/codec.js.map +1 -0
  10. package/dist/providers/claude/execute.d.ts +3 -0
  11. package/dist/providers/claude/execute.d.ts.map +1 -0
  12. package/dist/providers/claude/execute.js +224 -0
  13. package/dist/providers/claude/execute.js.map +1 -0
  14. package/dist/providers/claude/index.d.ts +3 -0
  15. package/dist/providers/claude/index.d.ts.map +1 -0
  16. package/dist/providers/claude/index.js +47 -0
  17. package/dist/providers/claude/index.js.map +1 -0
  18. package/dist/providers/claude/parse.d.ts +21 -0
  19. package/dist/providers/claude/parse.d.ts.map +1 -0
  20. package/dist/providers/claude/parse.js +247 -0
  21. package/dist/providers/claude/parse.js.map +1 -0
  22. package/dist/providers/claude/test.d.ts +3 -0
  23. package/dist/providers/claude/test.d.ts.map +1 -0
  24. package/dist/providers/claude/test.js +140 -0
  25. package/dist/providers/claude/test.js.map +1 -0
  26. package/dist/providers/codex/codec.d.ts +3 -0
  27. package/dist/providers/codex/codec.d.ts.map +1 -0
  28. package/dist/providers/codex/codec.js +47 -0
  29. package/dist/providers/codex/codec.js.map +1 -0
  30. package/dist/providers/codex/execute.d.ts +3 -0
  31. package/dist/providers/codex/execute.d.ts.map +1 -0
  32. package/dist/providers/codex/execute.js +215 -0
  33. package/dist/providers/codex/execute.js.map +1 -0
  34. package/dist/providers/codex/index.d.ts +3 -0
  35. package/dist/providers/codex/index.d.ts.map +1 -0
  36. package/dist/providers/codex/index.js +10 -0
  37. package/dist/providers/codex/index.js.map +1 -0
  38. package/dist/providers/codex/parse.d.ts +20 -0
  39. package/dist/providers/codex/parse.d.ts.map +1 -0
  40. package/dist/providers/codex/parse.js +202 -0
  41. package/dist/providers/codex/parse.js.map +1 -0
  42. package/dist/providers/codex/test.d.ts +3 -0
  43. package/dist/providers/codex/test.d.ts.map +1 -0
  44. package/dist/providers/codex/test.js +58 -0
  45. package/dist/providers/codex/test.js.map +1 -0
  46. package/dist/providers/openclaw/codec.d.ts +3 -0
  47. package/dist/providers/openclaw/codec.d.ts.map +1 -0
  48. package/dist/providers/openclaw/codec.js +41 -0
  49. package/dist/providers/openclaw/codec.js.map +1 -0
  50. package/dist/providers/openclaw/execute.d.ts +3 -0
  51. package/dist/providers/openclaw/execute.d.ts.map +1 -0
  52. package/dist/providers/openclaw/execute.js +138 -0
  53. package/dist/providers/openclaw/execute.js.map +1 -0
  54. package/dist/providers/openclaw/index.d.ts +3 -0
  55. package/dist/providers/openclaw/index.d.ts.map +1 -0
  56. package/dist/providers/openclaw/index.js +10 -0
  57. package/dist/providers/openclaw/index.js.map +1 -0
  58. package/dist/providers/openclaw/test.d.ts +3 -0
  59. package/dist/providers/openclaw/test.d.ts.map +1 -0
  60. package/dist/providers/openclaw/test.js +50 -0
  61. package/dist/providers/openclaw/test.js.map +1 -0
  62. package/dist/providers/process/execute.d.ts +3 -0
  63. package/dist/providers/process/execute.d.ts.map +1 -0
  64. package/dist/providers/process/execute.js +105 -0
  65. package/dist/providers/process/execute.js.map +1 -0
  66. package/dist/providers/process/index.d.ts +3 -0
  67. package/dist/providers/process/index.d.ts.map +1 -0
  68. package/dist/providers/process/index.js +49 -0
  69. package/dist/providers/process/index.js.map +1 -0
  70. package/dist/registry.d.ts +5 -0
  71. package/dist/registry.d.ts.map +1 -0
  72. package/dist/registry.js +25 -0
  73. package/dist/registry.js.map +1 -0
  74. package/dist/types.d.ts +121 -0
  75. package/dist/types.d.ts.map +1 -0
  76. package/dist/types.js +2 -0
  77. package/dist/types.js.map +1 -0
  78. package/dist/utils/binary.d.ts +9 -0
  79. package/dist/utils/binary.d.ts.map +1 -0
  80. package/dist/utils/binary.js +137 -0
  81. package/dist/utils/binary.js.map +1 -0
  82. package/dist/utils/env.d.ts +4 -0
  83. package/dist/utils/env.d.ts.map +1 -0
  84. package/dist/utils/env.js +39 -0
  85. package/dist/utils/env.js.map +1 -0
  86. package/dist/utils/process.d.ts +23 -0
  87. package/dist/utils/process.d.ts.map +1 -0
  88. package/dist/utils/process.js +144 -0
  89. package/dist/utils/process.js.map +1 -0
  90. package/dist/utils/skills.d.ts +4 -0
  91. package/dist/utils/skills.d.ts.map +1 -0
  92. package/dist/utils/skills.js +33 -0
  93. package/dist/utils/skills.js.map +1 -0
  94. package/dist/utils/template.d.ts +3 -0
  95. package/dist/utils/template.d.ts.map +1 -0
  96. package/dist/utils/template.js +17 -0
  97. package/dist/utils/template.js.map +1 -0
  98. package/dist/utils/uuid.d.ts +2 -0
  99. package/dist/utils/uuid.d.ts.map +1 -0
  100. package/dist/utils/uuid.js +2 -0
  101. package/dist/utils/uuid.js.map +1 -0
  102. package/package.json +48 -0
@@ -0,0 +1,137 @@
1
+ import * as fs from "node:fs/promises";
2
+ import * as path from "node:path";
3
+ import * as os from "node:os";
4
+ import { execFile } from "node:child_process";
5
+ const cache = new Map();
6
+ const COMMON_PATHS_UNIX = {
7
+ claude: [
8
+ path.join(os.homedir(), ".local", "bin", "claude"),
9
+ "/usr/local/bin/claude",
10
+ path.join(os.homedir(), ".npm-global", "bin", "claude"),
11
+ ],
12
+ codex: [
13
+ path.join(os.homedir(), ".local", "bin", "codex"),
14
+ "/usr/local/bin/codex",
15
+ path.join(os.homedir(), ".npm-global", "bin", "codex"),
16
+ ],
17
+ };
18
+ function getCommonPathsWindows(name) {
19
+ const appData = process.env["APPDATA"] ?? "";
20
+ const localAppData = process.env["LOCALAPPDATA"] ?? "";
21
+ const userProfile = process.env["USERPROFILE"] ?? "";
22
+ return [
23
+ path.join(appData, "npm", `${name}.cmd`),
24
+ path.join(localAppData, "pnpm", `${name}.cmd`),
25
+ path.join(userProfile, ".local", "bin", `${name}.exe`),
26
+ ];
27
+ }
28
+ async function fileExists(p) {
29
+ try {
30
+ await fs.access(p);
31
+ return true;
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ function runWhich(name) {
38
+ const cmd = process.platform === "win32" ? "where" : "which";
39
+ return new Promise((resolve) => {
40
+ const child = execFile(cmd, [name], { timeout: 5000 }, (err, stdout) => {
41
+ if (err) {
42
+ resolve(null);
43
+ return;
44
+ }
45
+ const result = stdout.trim().split("\n")[0]?.trim();
46
+ resolve(result ?? null);
47
+ });
48
+ child.on("error", () => resolve(null));
49
+ });
50
+ }
51
+ export async function resolveWindowsCmdShim(cmdPath) {
52
+ try {
53
+ const content = await fs.readFile(cmdPath, "utf-8");
54
+ // Match patterns like: "%dp0%\node_modules\...\.js" or "%~dp0\...\entry.js"
55
+ const match = content.match(/%(?:~dp0|dp0)[\\\/]([^\s"]+\.js)/i);
56
+ if (match?.[1]) {
57
+ const dir = path.dirname(cmdPath);
58
+ const jsPath = path.resolve(dir, match[1]);
59
+ if (await fileExists(jsPath)) {
60
+ return { bin: "node", prefixArgs: [jsPath] };
61
+ }
62
+ }
63
+ }
64
+ catch {
65
+ // Not a .cmd shim or can't read
66
+ }
67
+ return null;
68
+ }
69
+ export async function findBinary(name, configOverride) {
70
+ // 1. Config override
71
+ if (configOverride) {
72
+ if (await fileExists(configOverride)) {
73
+ return { bin: configOverride, prefixArgs: [] };
74
+ }
75
+ throw new Error(`Configured binary path "${configOverride}" does not exist. ` +
76
+ `Verify the path is correct.`);
77
+ }
78
+ // Check cache
79
+ const cached = cache.get(name);
80
+ if (cached)
81
+ return cached;
82
+ // 2. Platform-specific common paths
83
+ const isWin = process.platform === "win32";
84
+ const commonPaths = isWin
85
+ ? getCommonPathsWindows(name)
86
+ : (COMMON_PATHS_UNIX[name] ?? []);
87
+ for (const p of commonPaths) {
88
+ if (await fileExists(p)) {
89
+ if (isWin && p.endsWith(".cmd")) {
90
+ const resolved = await resolveWindowsCmdShim(p);
91
+ if (resolved) {
92
+ cache.set(name, resolved);
93
+ return resolved;
94
+ }
95
+ }
96
+ const result = { bin: p, prefixArgs: [] };
97
+ cache.set(name, result);
98
+ return result;
99
+ }
100
+ }
101
+ // 3. PATH via which/where
102
+ const whichResult = await runWhich(name);
103
+ if (whichResult) {
104
+ if (isWin && whichResult.endsWith(".cmd")) {
105
+ const resolved = await resolveWindowsCmdShim(whichResult);
106
+ if (resolved) {
107
+ cache.set(name, resolved);
108
+ return resolved;
109
+ }
110
+ }
111
+ const result = { bin: whichResult, prefixArgs: [] };
112
+ cache.set(name, result);
113
+ return result;
114
+ }
115
+ throw new Error(`Could not find "${name}" binary. Searched common install paths and PATH. ` +
116
+ `Install ${name} and ensure it's available in your PATH. ` +
117
+ (name === "claude"
118
+ ? `Install: npm install -g @anthropic-ai/claude-code`
119
+ : name === "codex"
120
+ ? `Install: npm install -g @openai/codex`
121
+ : `Ensure "${name}" is installed and on your PATH.`));
122
+ }
123
+ export async function ensureCommandResolvable(command) {
124
+ // If it's a path (contains separator), check existence directly
125
+ if (command.includes(path.sep) || command.includes("/")) {
126
+ if (await fileExists(command)) {
127
+ return { bin: command, prefixArgs: [] };
128
+ }
129
+ throw new Error(`Command not found: "${command}"`);
130
+ }
131
+ // Otherwise treat as a binary name
132
+ return findBinary(command);
133
+ }
134
+ export function clearBinaryCache() {
135
+ cache.clear();
136
+ }
137
+ //# sourceMappingURL=binary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary.js","sourceRoot":"","sources":["../../src/utils/binary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function buildEnv(callerEnv?: Record<string, string>): Record<string, string>;
2
+ export declare function redactEnvForLogs(env: Record<string, string>): Record<string, string>;
3
+ export declare function ensurePathInEnv(env: Record<string, string>): void;
4
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAYA,wBAAgB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQnF;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMpF;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAUjE"}
@@ -0,0 +1,39 @@
1
+ import process from "node:process";
2
+ const BASE_ALLOW_LIST = [
3
+ "PATH", "HOME", "TMPDIR", "TEMP", "TMP", "USER", "LOGNAME", "LANG", "LC_ALL",
4
+ // Windows essentials
5
+ "SystemRoot", "WINDIR", "COMSPEC", "PATHEXT", "APPDATA", "LOCALAPPDATA", "USERPROFILE",
6
+ ];
7
+ const SENSITIVE_PATTERNS = /KEY|SECRET|TOKEN|PASSWORD|CREDENTIAL|AUTH/i;
8
+ const ESSENTIAL_PATHS_UNIX = ["/usr/local/bin", "/usr/bin", "/bin"];
9
+ export function buildEnv(callerEnv) {
10
+ const env = {};
11
+ for (const key of BASE_ALLOW_LIST) {
12
+ const val = process.env[key];
13
+ if (val !== undefined)
14
+ env[key] = val;
15
+ }
16
+ if (callerEnv)
17
+ Object.assign(env, callerEnv);
18
+ return env;
19
+ }
20
+ export function redactEnvForLogs(env) {
21
+ const redacted = {};
22
+ for (const [key, value] of Object.entries(env)) {
23
+ redacted[key] = SENSITIVE_PATTERNS.test(key) ? "[REDACTED]" : value;
24
+ }
25
+ return redacted;
26
+ }
27
+ export function ensurePathInEnv(env) {
28
+ const isWin = process.platform === "win32";
29
+ const sep = isWin ? ";" : ":";
30
+ const essentials = isWin ? [] : ESSENTIAL_PATHS_UNIX;
31
+ const current = env["PATH"] ?? env["Path"] ?? "";
32
+ const parts = current.split(sep);
33
+ for (const p of essentials) {
34
+ if (!parts.includes(p))
35
+ parts.push(p);
36
+ }
37
+ env["PATH"] = parts.join(sep);
38
+ }
39
+ //# sourceMappingURL=env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/utils/env.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,eAAe,GAAG;IACtB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ;IAC5E,qBAAqB;IACrB,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa;CACvF,CAAC;AAEF,MAAM,kBAAkB,GAAG,4CAA4C,CAAC;AAExE,MAAM,oBAAoB,GAAG,CAAC,gBAAgB,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAEpE,MAAM,UAAU,QAAQ,CAAC,SAAkC;IACzD,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,GAAG,KAAK,SAAS;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACxC,CAAC;IACD,IAAI,SAAS;QAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC7C,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAA2B;IAC1D,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,QAAQ,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;IACtE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAA2B;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC;IACrD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjC,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,23 @@
1
+ export interface RunProcessOptions {
2
+ runId: string;
3
+ command: string;
4
+ args: string[];
5
+ cwd: string;
6
+ env: Record<string, string>;
7
+ stdin?: string;
8
+ timeoutSec?: number;
9
+ graceSec?: number;
10
+ maxCaptureBytes?: number;
11
+ onOutput?: (stream: "stdout" | "stderr", chunk: string) => void | Promise<void>;
12
+ }
13
+ export interface RunProcessResult {
14
+ exitCode: number | null;
15
+ signal: string | null;
16
+ timedOut: boolean;
17
+ stdout: string;
18
+ stderr: string;
19
+ }
20
+ export declare function deriveErrorCode(result: RunProcessResult): string | null;
21
+ export declare function killProcessTree(pid: number, signal?: NodeJS.Signals): void;
22
+ export declare function runChildProcess(opts: RunProcessOptions): Promise<RunProcessResult>;
23
+ //# sourceMappingURL=process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/utils/process.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAKD,wBAAgB,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAIvE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,OAAmB,GAAG,IAAI,CAqBrF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsHlF"}
@@ -0,0 +1,144 @@
1
+ import { spawn } from "node:child_process";
2
+ import process from "node:process";
3
+ const DEFAULT_MAX_CAPTURE = 4 * 1024 * 1024; // 4MB
4
+ const DEFAULT_GRACE_SEC = 5;
5
+ export function deriveErrorCode(result) {
6
+ if (result.timedOut)
7
+ return "timeout";
8
+ if (result.signal && !result.timedOut)
9
+ return "killed";
10
+ return null;
11
+ }
12
+ export function killProcessTree(pid, signal = "SIGTERM") {
13
+ if (process.platform === "win32") {
14
+ try {
15
+ spawn("taskkill", ["/PID", String(pid), "/T", "/F"], { stdio: "ignore" });
16
+ }
17
+ catch {
18
+ // Best effort
19
+ }
20
+ return;
21
+ }
22
+ // Unix: try process group kill
23
+ try {
24
+ process.kill(-pid, signal);
25
+ }
26
+ catch {
27
+ // Fallback: kill individual process
28
+ try {
29
+ process.kill(pid, signal);
30
+ }
31
+ catch {
32
+ // Process already dead
33
+ }
34
+ }
35
+ }
36
+ export function runChildProcess(opts) {
37
+ return new Promise((resolve) => {
38
+ const maxCapture = opts.maxCaptureBytes ?? DEFAULT_MAX_CAPTURE;
39
+ const graceSec = opts.graceSec ?? DEFAULT_GRACE_SEC;
40
+ let stdoutBuf = "";
41
+ let stderrBuf = "";
42
+ let stdoutBytes = 0;
43
+ let stderrBytes = 0;
44
+ let timedOut = false;
45
+ let timeoutHandle = null;
46
+ let graceHandle = null;
47
+ // Chained promise for ordered callback execution
48
+ let callbackChain = Promise.resolve();
49
+ const child = spawn(opts.command, opts.args, {
50
+ cwd: opts.cwd,
51
+ env: opts.env,
52
+ stdio: ["pipe", "pipe", "pipe"],
53
+ shell: false,
54
+ detached: process.platform !== "win32", // Enable process group on Unix
55
+ });
56
+ // Write stdin and close
57
+ if (opts.stdin != null) {
58
+ child.stdin.write(opts.stdin);
59
+ }
60
+ child.stdin.end();
61
+ const appendWithCap = (stream, chunk) => {
62
+ const bytes = Buffer.byteLength(chunk, "utf-8");
63
+ if (stream === "stdout") {
64
+ if (stdoutBytes < maxCapture) {
65
+ const remaining = maxCapture - stdoutBytes;
66
+ stdoutBuf += bytes <= remaining ? chunk : chunk.slice(0, remaining);
67
+ }
68
+ stdoutBytes += bytes;
69
+ }
70
+ else {
71
+ if (stderrBytes < maxCapture) {
72
+ const remaining = maxCapture - stderrBytes;
73
+ stderrBuf += bytes <= remaining ? chunk : chunk.slice(0, remaining);
74
+ }
75
+ stderrBytes += bytes;
76
+ }
77
+ if (opts.onOutput) {
78
+ const cb = opts.onOutput;
79
+ callbackChain = callbackChain
80
+ .then(() => cb(stream, chunk))
81
+ .catch(() => {
82
+ // Callback errors must not crash the process
83
+ });
84
+ }
85
+ };
86
+ child.stdout.setEncoding("utf-8");
87
+ child.stderr.setEncoding("utf-8");
88
+ child.stdout.on("data", (chunk) => appendWithCap("stdout", chunk));
89
+ child.stderr.on("data", (chunk) => appendWithCap("stderr", chunk));
90
+ // Timeout handling
91
+ if (opts.timeoutSec && opts.timeoutSec > 0) {
92
+ timeoutHandle = setTimeout(() => {
93
+ timedOut = true;
94
+ if (child.pid != null) {
95
+ killProcessTree(child.pid, "SIGTERM");
96
+ // Grace period then SIGKILL
97
+ graceHandle = setTimeout(() => {
98
+ if (child.pid != null) {
99
+ killProcessTree(child.pid, "SIGKILL");
100
+ }
101
+ }, graceSec * 1000);
102
+ }
103
+ }, opts.timeoutSec * 1000);
104
+ }
105
+ child.on("close", (code, signal) => {
106
+ if (timeoutHandle)
107
+ clearTimeout(timeoutHandle);
108
+ if (graceHandle)
109
+ clearTimeout(graceHandle);
110
+ // Wait for callbacks to complete before resolving
111
+ callbackChain.then(() => {
112
+ resolve({
113
+ exitCode: code,
114
+ signal: signal ?? null,
115
+ timedOut,
116
+ stdout: stdoutBuf,
117
+ stderr: stderrBuf,
118
+ });
119
+ }).catch(() => {
120
+ resolve({
121
+ exitCode: code,
122
+ signal: signal ?? null,
123
+ timedOut,
124
+ stdout: stdoutBuf,
125
+ stderr: stderrBuf,
126
+ });
127
+ });
128
+ });
129
+ child.on("error", (err) => {
130
+ if (timeoutHandle)
131
+ clearTimeout(timeoutHandle);
132
+ if (graceHandle)
133
+ clearTimeout(graceHandle);
134
+ resolve({
135
+ exitCode: null,
136
+ signal: null,
137
+ timedOut: false,
138
+ stdout: stdoutBuf,
139
+ stderr: err.message,
140
+ });
141
+ });
142
+ });
143
+ }
144
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/utils/process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export type SkillRuntime = "claude" | "codex";
2
+ export declare function buildSkillsDir(skillDirs: string[], runtime: SkillRuntime): Promise<string>;
3
+ export declare function cleanupSkillsDir(tmpDir: string): Promise<void>;
4
+ //# sourceMappingURL=skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/utils/skills.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE9C,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBhG;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMpE"}
@@ -0,0 +1,33 @@
1
+ import * as fs from "node:fs/promises";
2
+ import * as path from "node:path";
3
+ import * as os from "node:os";
4
+ export async function buildSkillsDir(skillDirs, runtime) {
5
+ const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "agentex-skills-"));
6
+ let skillsRoot;
7
+ if (runtime === "claude") {
8
+ skillsRoot = path.join(tmpDir, ".claude", "skills");
9
+ }
10
+ else {
11
+ skillsRoot = path.join(tmpDir, "skills");
12
+ }
13
+ await fs.mkdir(skillsRoot, { recursive: true });
14
+ for (const dir of skillDirs) {
15
+ const name = path.basename(dir);
16
+ try {
17
+ await fs.symlink(dir, path.join(skillsRoot, name), "dir");
18
+ }
19
+ catch (err) {
20
+ console.warn(`Failed to symlink skill "${name}": ${err}`);
21
+ }
22
+ }
23
+ return tmpDir;
24
+ }
25
+ export async function cleanupSkillsDir(tmpDir) {
26
+ try {
27
+ await fs.rm(tmpDir, { recursive: true, force: true });
28
+ }
29
+ catch {
30
+ // Best effort cleanup
31
+ }
32
+ }
33
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/utils/skills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAI9B,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAmB,EAAE,OAAqB;IAC7E,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAE3E,IAAI,UAAkB,CAAC;IACvB,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC3C,CAAC;IACD,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,4BAA4B,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAc;IACnD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function resolvePathValue(obj: unknown, dottedPath: string): unknown;
2
+ export declare function renderTemplate(template: string, data: Record<string, unknown>): string;
3
+ //# sourceMappingURL=template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAQ1E;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAKtF"}
@@ -0,0 +1,17 @@
1
+ export function resolvePathValue(obj, dottedPath) {
2
+ const keys = dottedPath.split(".");
3
+ let current = obj;
4
+ for (const key of keys) {
5
+ if (current == null || typeof current !== "object")
6
+ return undefined;
7
+ current = current[key];
8
+ }
9
+ return current;
10
+ }
11
+ export function renderTemplate(template, data) {
12
+ return template.replace(/\{\{([^}]+)\}\}/g, (_, path) => {
13
+ const value = resolvePathValue(data, path.trim());
14
+ return value == null ? "" : String(value);
15
+ });
16
+ }
17
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/utils/template.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,GAAY,EAAE,UAAkB;IAC/D,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnC,IAAI,OAAO,GAAG,GAAG,CAAC;IAClB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACrE,OAAO,GAAI,OAAmC,CAAC,GAAG,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB,EAAE,IAA6B;IAC5E,OAAO,QAAQ,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,IAAY,EAAE,EAAE;QAC9D,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAClD,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { v7 as uuidv7 } from "uuid";
2
+ //# sourceMappingURL=uuid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid.d.ts","sourceRoot":"","sources":["../../src/utils/uuid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { v7 as uuidv7 } from "uuid";
2
+ //# sourceMappingURL=uuid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../src/utils/uuid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@agentex/agent",
3
+ "version": "0.0.1",
4
+ "description": "Programmatic execution of AI coding agents (Claude Code, Codex, OpenClaw)",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "import": "./dist/index.js",
9
+ "types": "./dist/index.d.ts"
10
+ }
11
+ },
12
+ "main": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "test": "vitest run",
20
+ "test:watch": "vitest",
21
+ "typecheck": "tsc --noEmit",
22
+ "smoke": "tsx scripts/smoke.ts"
23
+ },
24
+ "keywords": [
25
+ "ai",
26
+ "agent",
27
+ "claude",
28
+ "codex",
29
+ "openclaw",
30
+ "provider",
31
+ "execution"
32
+ ],
33
+ "author": "",
34
+ "license": "MIT",
35
+ "packageManager": "pnpm@10.32.0",
36
+ "engines": {
37
+ "node": ">=18.0.0"
38
+ },
39
+ "devDependencies": {
40
+ "@types/node": "^25.3.5",
41
+ "tsx": "^4.21.0",
42
+ "typescript": "^5.7.0",
43
+ "vitest": "^3.0.0"
44
+ },
45
+ "dependencies": {
46
+ "uuid": "^13.0.0"
47
+ }
48
+ }