@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
package/README.md ADDED
@@ -0,0 +1,167 @@
1
+ # @agentex/agent
2
+
3
+ Programmatic execution of AI coding agents. Spawn and manage Claude Code, Codex, OpenClaw, or any CLI-based agent as a child process with streaming output, session resume, and a unified interface.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @agentex/agent
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```typescript
14
+ import { getProvider } from "@agentex/agent";
15
+
16
+ const claude = getProvider("claude");
17
+
18
+ const result = await claude.execute({
19
+ prompt: "Add error handling to server.ts",
20
+ config: {
21
+ skipPermissions: true,
22
+ maxTurns: 5,
23
+ timeoutSec: 120,
24
+ },
25
+ onEvent: (event) => {
26
+ if (event.type === "assistant") process.stdout.write(event.text);
27
+ if (event.type === "tool_call") console.log(`Tool: ${event.name}`);
28
+ },
29
+ });
30
+
31
+ console.log(result.exitCode); // 0
32
+ console.log(result.summary); // "Added try/catch to all route handlers..."
33
+ console.log(result.durationMs); // 12340
34
+ console.log(result.costUsd); // 0.0342
35
+ console.log(result.usage); // { inputTokens: 1200, outputTokens: 350, cachedInputTokens: 800 }
36
+ ```
37
+
38
+ ## Built-in Providers
39
+
40
+ | Provider | CLI | Description |
41
+ | ---------- | ---------------- | ----------------------------------- |
42
+ | `claude` | `claude` | Claude Code (Anthropic) |
43
+ | `codex` | `codex` | Codex CLI (OpenAI) |
44
+ | `openclaw` | `openclaw` | OpenClaw agent |
45
+ | `process` | any executable | Generic process executor |
46
+
47
+ ## Custom Providers
48
+
49
+ ```typescript
50
+ import { registerProvider } from "@agentex/agent";
51
+ import type { ProviderModule } from "@agentex/agent";
52
+
53
+ const myProvider: ProviderModule = {
54
+ type: "my-agent",
55
+ async execute(ctx) {
56
+ const startedAt = new Date().toISOString();
57
+ // Spawn your agent, stream events via ctx.onEvent...
58
+ return {
59
+ runId: ctx.runId ?? "generated-id",
60
+ exitCode: 0,
61
+ signal: null,
62
+ timedOut: false,
63
+ startedAt,
64
+ completedAt: new Date().toISOString(),
65
+ durationMs: 0,
66
+ errorMessage: null,
67
+ errorCode: null,
68
+ costUsd: null,
69
+ model: null,
70
+ summary: "Done",
71
+ sessionParams: null,
72
+ sessionDisplayId: null,
73
+ clearSession: false,
74
+ billingType: null,
75
+ };
76
+ },
77
+ async testEnvironment(ctx) {
78
+ return { providerType: ctx.providerType, status: "pass", checks: [], testedAt: new Date().toISOString() };
79
+ },
80
+ };
81
+
82
+ registerProvider(myProvider);
83
+ ```
84
+
85
+ ## API
86
+
87
+ ### `getProvider(type: string): ProviderModule`
88
+
89
+ Returns a registered provider by name. Throws if not found.
90
+
91
+ ### `listProviders(): string[]`
92
+
93
+ Returns all registered provider type names.
94
+
95
+ ### `registerProvider(provider: ProviderModule): void`
96
+
97
+ Registers a custom provider, making it available via `getProvider()`.
98
+
99
+ ### `renderTemplate(template: string, context: Record<string, string>): string`
100
+
101
+ Renders a template string with `{{variable}}` interpolation.
102
+
103
+ ### `redactEnvForLogs(env: Record<string, string>): Record<string, string>`
104
+
105
+ Returns a copy of env vars with sensitive values redacted for safe logging.
106
+
107
+ ## Execution Context
108
+
109
+ Only `prompt` is required. Everything else has sensible defaults.
110
+
111
+ ```typescript
112
+ interface ExecutionContext {
113
+ prompt: string; // The task to execute
114
+ model?: string; // Model override (e.g. "claude-sonnet-4-20250514")
115
+ runId?: string; // Auto-generated UUIDv7 if omitted
116
+ cwd?: string; // Defaults to process.cwd()
117
+ env?: Record<string, string>;
118
+ sessionParams?: Record<string, unknown> | null;
119
+ config?: ProviderConfig;
120
+ onOutput?: (stream: "stdout" | "stderr", chunk: string) => void;
121
+ onEvent?: (event: StreamEvent) => void;
122
+ }
123
+ ```
124
+
125
+ ## Execution Result
126
+
127
+ ```typescript
128
+ interface ExecutionResult {
129
+ runId: string;
130
+ exitCode: number | null;
131
+ signal: string | null;
132
+ timedOut: boolean;
133
+ startedAt: string; // ISO timestamp
134
+ completedAt: string; // ISO timestamp
135
+ durationMs: number; // Wall-clock duration
136
+ errorMessage: string | null;
137
+ errorCode: string | null;
138
+ usage?: { inputTokens: number; outputTokens: number; cachedInputTokens?: number };
139
+ costUsd: number | null;
140
+ model: string | null;
141
+ summary: string | null;
142
+ sessionParams: Record<string, unknown> | null;
143
+ sessionDisplayId: string | null;
144
+ clearSession: boolean;
145
+ billingType: "api" | "subscription" | null;
146
+ }
147
+ ```
148
+
149
+ ## Stream Events
150
+
151
+ Events emitted during execution via `onEvent`. All events include a `timestamp` field.
152
+
153
+ - `system` — Session init (`event.sessionId`, `event.model`)
154
+ - `assistant` — Text output from the agent (`event.text`)
155
+ - `thinking` — Agent's internal reasoning (`event.text`)
156
+ - `tool_call` — Agent invoked a tool (`event.name`, `event.input`)
157
+ - `tool_result` — Tool returned a result (`event.content`, `event.isError`)
158
+ - `result` — Final result (`event.text`, `event.cost`)
159
+
160
+ ## Requirements
161
+
162
+ - Node.js >= 18
163
+ - The CLI for each provider must be installed and on `$PATH` (e.g., `claude` for the Claude provider)
164
+
165
+ ## License
166
+
167
+ MIT
@@ -0,0 +1,5 @@
1
+ export { getProvider, listProviders, registerProvider } from "./registry.js";
2
+ export { renderTemplate } from "./utils/template.js";
3
+ export { redactEnvForLogs } from "./utils/env.js";
4
+ export type { ProviderModule, ExecutionContext, ExecutionResult, ProviderConfig, McpServerConfig, StreamEvent, SessionCodec, EnvironmentTestContext, EnvironmentTestResult, EnvironmentCheck, ProviderModel, } from "./types.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,eAAe,EACf,WAAW,EACX,YAAY,EACZ,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,GACd,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ // Functions
2
+ export { getProvider, listProviders, registerProvider } from "./registry.js";
3
+ export { renderTemplate } from "./utils/template.js";
4
+ export { redactEnvForLogs } from "./utils/env.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY;AACZ,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SessionCodec } from "../../types.js";
2
+ export declare const claudeSessionCodec: SessionCodec;
3
+ //# sourceMappingURL=codec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAWnD,eAAO,MAAM,kBAAkB,EAAE,YA+BhC,CAAC"}
@@ -0,0 +1,43 @@
1
+ function readNonEmptyString(value) {
2
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
3
+ }
4
+ function parseAsObject(raw) {
5
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw))
6
+ return null;
7
+ return raw;
8
+ }
9
+ export const claudeSessionCodec = {
10
+ deserialize(raw) {
11
+ const obj = parseAsObject(raw);
12
+ if (!obj)
13
+ return null;
14
+ const sessionId = readNonEmptyString(obj["sessionId"]) ?? readNonEmptyString(obj["session_id"]);
15
+ if (!sessionId)
16
+ return null;
17
+ const cwd = readNonEmptyString(obj["cwd"]) ??
18
+ readNonEmptyString(obj["workdir"]) ??
19
+ readNonEmptyString(obj["folder"]);
20
+ return {
21
+ sessionId,
22
+ ...(cwd ? { cwd } : {}),
23
+ };
24
+ },
25
+ serialize(params) {
26
+ if (!params)
27
+ return null;
28
+ const sessionId = readNonEmptyString(params["sessionId"]) ?? readNonEmptyString(params["session_id"]);
29
+ if (!sessionId)
30
+ return null;
31
+ const cwd = readNonEmptyString(params["cwd"]);
32
+ return {
33
+ sessionId,
34
+ ...(cwd ? { cwd } : {}),
35
+ };
36
+ },
37
+ getDisplayId(params) {
38
+ if (!params)
39
+ return null;
40
+ return readNonEmptyString(params["sessionId"]) ?? readNonEmptyString(params["session_id"]);
41
+ },
42
+ };
43
+ //# sourceMappingURL=codec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codec.js","sourceRoot":"","sources":["../../../src/providers/claude/codec.ts"],"names":[],"mappings":"AAEA,SAAS,kBAAkB,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,CAAC;AAED,SAAS,aAAa,CAAC,GAAY;IACjC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/E,OAAO,GAA8B,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAiB;IAC9C,WAAW,CAAC,GAAY;QACtB,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QAChG,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,MAAM,GAAG,GACP,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC9B,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAClC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QACpC,OAAO;YACL,SAAS;YACT,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxB,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,MAAsC;QAC9C,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;QACtG,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAC5B,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,OAAO;YACL,SAAS;YACT,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACxB,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,MAAsC;QACjD,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,OAAO,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IAC7F,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ExecutionContext, ExecutionResult } from "../../types.js";
2
+ export declare function executeClaudeAdapter(ctx: ExecutionContext): Promise<ExecutionResult>;
3
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/execute.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAaxE,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CA4M1F"}
@@ -0,0 +1,224 @@
1
+ import * as path from "node:path";
2
+ import { findBinary } from "../../utils/binary.js";
3
+ import { buildEnv, ensurePathInEnv } from "../../utils/env.js";
4
+ import { runChildProcess, deriveErrorCode } from "../../utils/process.js";
5
+ import { buildSkillsDir, cleanupSkillsDir } from "../../utils/skills.js";
6
+ import { uuidv7 } from "../../utils/uuid.js";
7
+ import { parseClaudeStreamJson, parseStreamLine, isClaudeUnknownSessionError, isClaudeAuthRequired } from "./parse.js";
8
+ function hasNonEmptyEnvValue(env, key) {
9
+ const raw = env[key];
10
+ return typeof raw === "string" && raw.trim().length > 0;
11
+ }
12
+ export async function executeClaudeAdapter(ctx) {
13
+ const runId = ctx.runId ?? uuidv7();
14
+ const cwd = ctx.cwd ?? process.cwd();
15
+ const model = ctx.model ?? ctx.config?.model;
16
+ const config = ctx.config ?? {};
17
+ const startedAt = new Date().toISOString();
18
+ // 1. Resolve binary
19
+ let resolvedBinary;
20
+ try {
21
+ resolvedBinary = await findBinary("claude", config.command);
22
+ }
23
+ catch (err) {
24
+ return {
25
+ runId,
26
+ exitCode: null,
27
+ signal: null,
28
+ timedOut: false,
29
+ startedAt,
30
+ completedAt: new Date().toISOString(),
31
+ durationMs: Date.now() - new Date(startedAt).getTime(),
32
+ errorMessage: err instanceof Error ? err.message : "Binary not found",
33
+ errorCode: "binary_not_found",
34
+ costUsd: null,
35
+ model: null,
36
+ summary: null,
37
+ sessionParams: null,
38
+ sessionDisplayId: null,
39
+ clearSession: false,
40
+ billingType: null,
41
+ };
42
+ }
43
+ // 2. Build env & detect billing
44
+ const env = buildEnv(ctx.env);
45
+ ensurePathInEnv(env);
46
+ const billingType = hasNonEmptyEnvValue(env, "ANTHROPIC_API_KEY") ? "api" : "subscription";
47
+ // 3. Build skills dir
48
+ let skillsDir = null;
49
+ if (config.skillDirs && config.skillDirs.length > 0) {
50
+ try {
51
+ skillsDir = await buildSkillsDir(config.skillDirs, "claude");
52
+ }
53
+ catch {
54
+ // Skill injection failure is non-fatal
55
+ }
56
+ }
57
+ // 4. Build args
58
+ const buildArgs = (resumeSessionId) => {
59
+ const args = [...resolvedBinary.prefixArgs, "--print", "-", "--output-format", "stream-json", "--verbose"];
60
+ if (resumeSessionId)
61
+ args.push("--resume", resumeSessionId);
62
+ if (config.skipPermissions)
63
+ args.push("--dangerously-skip-permissions");
64
+ if (model)
65
+ args.push("--model", model);
66
+ if (config.effort)
67
+ args.push("--effort", config.effort);
68
+ if (config.maxTurns && config.maxTurns > 0)
69
+ args.push("--max-turns", String(config.maxTurns));
70
+ if (config.instructionsFile)
71
+ args.push("--append-system-prompt-file", config.instructionsFile);
72
+ if (skillsDir)
73
+ args.push("--add-dir", skillsDir);
74
+ if (config.mcpServers) {
75
+ for (const mcp of config.mcpServers) {
76
+ args.push("--mcp-server", mcp.name, "--", mcp.command, ...(mcp.args ?? []));
77
+ }
78
+ }
79
+ if (config.extraArgs)
80
+ args.push(...config.extraArgs);
81
+ return args;
82
+ };
83
+ // 5. Determine session resume
84
+ const sessionParams = ctx.sessionParams ?? null;
85
+ const sessionId = (() => {
86
+ if (!sessionParams)
87
+ return null;
88
+ const id = sessionParams["sessionId"] ?? sessionParams["session_id"];
89
+ if (!id || typeof id !== "string")
90
+ return null;
91
+ const sessionCwd = sessionParams["cwd"];
92
+ if (sessionCwd && path.resolve(sessionCwd) !== path.resolve(cwd))
93
+ return null;
94
+ return id;
95
+ })();
96
+ // 6. Run attempt
97
+ const runAttempt = async (resumeSessionId) => {
98
+ const args = buildArgs(resumeSessionId);
99
+ // stdout line buffer for real-time event parsing
100
+ let lineBuffer = "";
101
+ const proc = await runChildProcess({
102
+ runId,
103
+ command: resolvedBinary.bin,
104
+ args,
105
+ cwd,
106
+ env,
107
+ stdin: ctx.prompt,
108
+ timeoutSec: config.timeoutSec,
109
+ graceSec: config.graceSec,
110
+ onOutput: async (stream, chunk) => {
111
+ // Forward raw output
112
+ if (ctx.onOutput) {
113
+ try {
114
+ await ctx.onOutput(stream, chunk);
115
+ }
116
+ catch { /* swallow */ }
117
+ }
118
+ // Parse stdout lines for stream events
119
+ if (stream === "stdout" && ctx.onEvent) {
120
+ lineBuffer += chunk;
121
+ const lines = lineBuffer.split("\n");
122
+ // Keep the last (possibly incomplete) line in the buffer
123
+ lineBuffer = lines.pop() ?? "";
124
+ for (const line of lines) {
125
+ const trimmed = line.trim();
126
+ if (!trimmed)
127
+ continue;
128
+ for (const event of parseStreamLine(trimmed)) {
129
+ try {
130
+ await ctx.onEvent(event);
131
+ }
132
+ catch { /* swallow */ }
133
+ }
134
+ }
135
+ }
136
+ },
137
+ });
138
+ // Parse remaining buffer
139
+ if (lineBuffer.trim() && ctx.onEvent) {
140
+ for (const event of parseStreamLine(lineBuffer.trim())) {
141
+ try {
142
+ await ctx.onEvent(event);
143
+ }
144
+ catch { /* swallow */ }
145
+ }
146
+ }
147
+ return proc;
148
+ };
149
+ try {
150
+ // 7. Initial attempt
151
+ let proc = await runAttempt(sessionId);
152
+ let clearSession = false;
153
+ // 8. Check for unknown session — retry once
154
+ if (sessionId &&
155
+ !proc.timedOut &&
156
+ (proc.exitCode ?? 0) !== 0 &&
157
+ isClaudeUnknownSessionError(proc.stdout, proc.stderr)) {
158
+ proc = await runAttempt(null);
159
+ clearSession = true;
160
+ }
161
+ // 9. Parse result
162
+ const parsed = parseClaudeStreamJson(proc.stdout);
163
+ const processErrorCode = deriveErrorCode(proc);
164
+ // Determine error code: process-level errors take precedence, then adapter-specific
165
+ let errorCode = processErrorCode;
166
+ if (!errorCode && parsed.errorCode) {
167
+ errorCode = parsed.errorCode;
168
+ }
169
+ if (!errorCode && isClaudeAuthRequired(proc.stdout, proc.stderr)) {
170
+ errorCode = "auth_required";
171
+ }
172
+ const errorMessage = (() => {
173
+ if (proc.timedOut)
174
+ return `Timed out after ${config.timeoutSec ?? 0}s`;
175
+ if (errorCode === "auth_required")
176
+ return "Claude requires authentication. Run `claude login`.";
177
+ if ((proc.exitCode ?? 0) !== 0 && !parsed.summary) {
178
+ const stderrLine = proc.stderr.split(/\r?\n/).map((l) => l.trim()).find(Boolean);
179
+ return stderrLine ?? `Claude exited with code ${proc.exitCode ?? -1}`;
180
+ }
181
+ if (parsed.isError)
182
+ return parsed.summary;
183
+ return null;
184
+ })();
185
+ const resolvedSessionId = parsed.sessionId;
186
+ const resultSessionParams = resolvedSessionId
187
+ ? { sessionId: resolvedSessionId, cwd }
188
+ : null;
189
+ const completedAt = new Date().toISOString();
190
+ return {
191
+ runId,
192
+ exitCode: proc.exitCode,
193
+ signal: proc.signal ?? null,
194
+ timedOut: proc.timedOut,
195
+ startedAt,
196
+ completedAt,
197
+ durationMs: new Date(completedAt).getTime() - new Date(startedAt).getTime(),
198
+ errorMessage,
199
+ errorCode,
200
+ usage: parsed.usage
201
+ ? {
202
+ inputTokens: parsed.usage.inputTokens,
203
+ outputTokens: parsed.usage.outputTokens,
204
+ cachedInputTokens: parsed.usage.cachedInputTokens,
205
+ }
206
+ : undefined,
207
+ costUsd: parsed.costUsd,
208
+ model: parsed.model,
209
+ summary: parsed.summary,
210
+ sessionParams: resultSessionParams,
211
+ sessionDisplayId: resolvedSessionId,
212
+ clearSession,
213
+ billingType,
214
+ raw: null,
215
+ };
216
+ }
217
+ finally {
218
+ // 10. Clean up skills dir
219
+ if (skillsDir) {
220
+ await cleanupSkillsDir(skillsDir);
221
+ }
222
+ }
223
+ }
224
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../../src/providers/claude/execute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ProviderModule } from "../../types.js";
2
+ export declare const claudeAdapter: ProviderModule;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,gBAAgB,CAAC;AA2CpE,eAAO,MAAM,aAAa,EAAE,cAM3B,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { executeClaudeAdapter } from "./execute.js";
2
+ import { testClaudeEnvironment } from "./test.js";
3
+ import { claudeSessionCodec } from "./codec.js";
4
+ import { findBinary } from "../../utils/binary.js";
5
+ import { buildEnv, ensurePathInEnv } from "../../utils/env.js";
6
+ import { runChildProcess } from "../../utils/process.js";
7
+ async function listModels() {
8
+ try {
9
+ const resolved = await findBinary("claude");
10
+ const env = buildEnv();
11
+ ensurePathInEnv(env);
12
+ const proc = await runChildProcess({
13
+ runId: "list-models",
14
+ command: resolved.bin,
15
+ args: [...resolved.prefixArgs, "--list-models"],
16
+ cwd: process.cwd(),
17
+ env,
18
+ timeoutSec: 10,
19
+ });
20
+ if ((proc.exitCode ?? 1) === 0 && proc.stdout.trim()) {
21
+ return proc.stdout
22
+ .trim()
23
+ .split(/\r?\n/)
24
+ .filter((line) => line.trim())
25
+ .map((line) => {
26
+ const id = line.trim();
27
+ return { id, name: id, provider: "anthropic" };
28
+ });
29
+ }
30
+ }
31
+ catch {
32
+ // Fallback to hardcoded list
33
+ }
34
+ return [
35
+ { id: "claude-sonnet-4-20250514", name: "Claude Sonnet 4", provider: "anthropic" },
36
+ { id: "claude-opus-4-20250514", name: "Claude Opus 4", provider: "anthropic" },
37
+ { id: "claude-haiku-3-5-20241022", name: "Claude Haiku 3.5", provider: "anthropic" },
38
+ ];
39
+ }
40
+ export const claudeAdapter = {
41
+ type: "claude",
42
+ execute: executeClaudeAdapter,
43
+ testEnvironment: testClaudeEnvironment,
44
+ sessionCodec: claudeSessionCodec,
45
+ listModels,
46
+ };
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/claude/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,KAAK,UAAU,UAAU;IACvB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;QACvB,eAAe,CAAC,GAAG,CAAC,CAAC;QACrB,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC;YACjC,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE,QAAQ,CAAC,GAAG;YACrB,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;YAC/C,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,GAAG;YACH,UAAU,EAAE,EAAE;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC,MAAM;iBACf,IAAI,EAAE;iBACN,KAAK,CAAC,OAAO,CAAC;iBACd,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACZ,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACvB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;YACjD,CAAC,CAAC,CAAC;QACP,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,6BAA6B;IAC/B,CAAC;IAED,OAAO;QACL,EAAE,EAAE,EAAE,0BAA0B,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE;QAClF,EAAE,EAAE,EAAE,wBAAwB,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE;QAC9E,EAAE,EAAE,EAAE,2BAA2B,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,WAAW,EAAE;KACrF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAmB;IAC3C,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,oBAAoB;IAC7B,eAAe,EAAE,qBAAqB;IACtC,YAAY,EAAE,kBAAkB;IAChC,UAAU;CACX,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { StreamEvent } from "../../types.js";
2
+ export interface ClaudeParsedResult {
3
+ sessionId: string | null;
4
+ model: string | null;
5
+ usage: {
6
+ inputTokens: number;
7
+ outputTokens: number;
8
+ cachedInputTokens: number;
9
+ } | null;
10
+ costUsd: number | null;
11
+ summary: string | null;
12
+ isError: boolean;
13
+ errorCode: string | null;
14
+ }
15
+ export declare function parseClaudeStreamJson(stdout: string): ClaudeParsedResult;
16
+ export declare function toStreamEvents(stdout: string): StreamEvent[];
17
+ export declare function parseStreamLine(line: string): StreamEvent[];
18
+ export declare function isClaudeUnknownSessionError(stdout: string, stderr: string): boolean;
19
+ export declare function isClaudeAuthRequired(stdout: string, stderr: string): boolean;
20
+ export declare function isClaudeMaxTurns(stdout: string): boolean;
21
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,iBAAiB,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACvF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AA6BD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CA+ExE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,EAAE,CA0D5D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAuD3D;AAKD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAE5E;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAcxD"}