@edukors/ai-cli 0.0.0-stage → 0.1.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 (106) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +162 -2
  3. package/dist/cli/main.d.ts +2 -0
  4. package/dist/cli/main.js +256 -0
  5. package/dist/cli/main.js.map +1 -0
  6. package/dist/constants.d.ts +2 -0
  7. package/dist/constants.js +3 -0
  8. package/dist/constants.js.map +1 -0
  9. package/dist/diagnostics.d.ts +28 -0
  10. package/dist/diagnostics.js +35 -0
  11. package/dist/diagnostics.js.map +1 -0
  12. package/dist/engine.d.ts +157 -0
  13. package/dist/engine.js +395 -0
  14. package/dist/engine.js.map +1 -0
  15. package/dist/errors.d.ts +27 -0
  16. package/dist/errors.js +59 -0
  17. package/dist/errors.js.map +1 -0
  18. package/dist/events.d.ts +95 -0
  19. package/dist/events.js +8 -0
  20. package/dist/events.js.map +1 -0
  21. package/dist/host/main.d.ts +2 -0
  22. package/dist/host/main.js +30 -0
  23. package/dist/host/main.js.map +1 -0
  24. package/dist/host/stdio.d.ts +34 -0
  25. package/dist/host/stdio.js +254 -0
  26. package/dist/host/stdio.js.map +1 -0
  27. package/dist/index.d.ts +34 -0
  28. package/dist/index.js +21 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/mcp/config.d.ts +19 -0
  31. package/dist/mcp/config.js +63 -0
  32. package/dist/mcp/config.js.map +1 -0
  33. package/dist/mcp/external.d.ts +55 -0
  34. package/dist/mcp/external.js +129 -0
  35. package/dist/mcp/external.js.map +1 -0
  36. package/dist/mcp/toolServer.d.ts +30 -0
  37. package/dist/mcp/toolServer.js +102 -0
  38. package/dist/mcp/toolServer.js.map +1 -0
  39. package/dist/platform/discovery.d.ts +23 -0
  40. package/dist/platform/discovery.js +64 -0
  41. package/dist/platform/discovery.js.map +1 -0
  42. package/dist/platform/env.d.ts +12 -0
  43. package/dist/platform/env.js +104 -0
  44. package/dist/platform/env.js.map +1 -0
  45. package/dist/platform/login.d.ts +16 -0
  46. package/dist/platform/login.js +42 -0
  47. package/dist/platform/login.js.map +1 -0
  48. package/dist/platform/paths.d.ts +19 -0
  49. package/dist/platform/paths.js +46 -0
  50. package/dist/platform/paths.js.map +1 -0
  51. package/dist/platform/process.d.ts +55 -0
  52. package/dist/platform/process.js +186 -0
  53. package/dist/platform/process.js.map +1 -0
  54. package/dist/provider.d.ts +156 -0
  55. package/dist/provider.js +2 -0
  56. package/dist/provider.js.map +1 -0
  57. package/dist/providers/claude/adapter.d.ts +43 -0
  58. package/dist/providers/claude/adapter.js +398 -0
  59. package/dist/providers/claude/adapter.js.map +1 -0
  60. package/dist/providers/claude/events.d.ts +36 -0
  61. package/dist/providers/claude/events.js +90 -0
  62. package/dist/providers/claude/events.js.map +1 -0
  63. package/dist/providers/codex/adapter.d.ts +28 -0
  64. package/dist/providers/codex/adapter.js +497 -0
  65. package/dist/providers/codex/adapter.js.map +1 -0
  66. package/dist/providers/codex/rpc.d.ts +17 -0
  67. package/dist/providers/codex/rpc.js +75 -0
  68. package/dist/providers/codex/rpc.js.map +1 -0
  69. package/dist/providers.d.ts +9 -0
  70. package/dist/providers.js +15 -0
  71. package/dist/providers.js.map +1 -0
  72. package/dist/redact.d.ts +7 -0
  73. package/dist/redact.js +48 -0
  74. package/dist/redact.js.map +1 -0
  75. package/dist/registry/lock.d.ts +18 -0
  76. package/dist/registry/lock.js +83 -0
  77. package/dist/registry/lock.js.map +1 -0
  78. package/dist/registry/registry.d.ts +38 -0
  79. package/dist/registry/registry.js +119 -0
  80. package/dist/registry/registry.js.map +1 -0
  81. package/dist/session.d.ts +126 -0
  82. package/dist/session.js +333 -0
  83. package/dist/session.js.map +1 -0
  84. package/dist/settings.d.ts +8 -0
  85. package/dist/settings.js +7 -0
  86. package/dist/settings.js.map +1 -0
  87. package/dist/skills.d.ts +24 -0
  88. package/dist/skills.js +91 -0
  89. package/dist/skills.js.map +1 -0
  90. package/dist/testing/fakeProvider.d.ts +22 -0
  91. package/dist/testing/fakeProvider.js +266 -0
  92. package/dist/testing/fakeProvider.js.map +1 -0
  93. package/dist/testing/index.d.ts +2 -0
  94. package/dist/testing/index.js +2 -0
  95. package/dist/testing/index.js.map +1 -0
  96. package/dist/tools.d.ts +45 -0
  97. package/dist/tools.js +32 -0
  98. package/dist/tools.js.map +1 -0
  99. package/dist/version.d.ts +2 -0
  100. package/dist/version.js +3 -0
  101. package/dist/version.js.map +1 -0
  102. package/fixtures/fake-ai.mjs +230 -0
  103. package/fixtures/fake-claude.mjs +62 -0
  104. package/fixtures/fake-codex.mjs +281 -0
  105. package/fixtures/fake-mcp-server.mjs +14 -0
  106. package/package.json +74 -4
@@ -0,0 +1,398 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { existsSync, mkdirSync, rmSync, symlinkSync, writeFileSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { dirname, join } from "node:path";
5
+ import { z } from "zod";
6
+ import { AiCliError, toAiCliError } from "../../errors.js";
7
+ import { createToolMcpServer, TOOL_SERVER_NAME } from "../../mcp/toolServer.js";
8
+ import { listSkills } from "../../skills.js";
9
+ const PLUGIN_NAME = "edukors";
10
+ /**
11
+ * The application's skills as a local Claude Code plugin, made in the
12
+ * session's work dir: a manifest and a link to the skills folder. Returns the
13
+ * plugin's path and the ids that enable those skills, and only those.
14
+ */
15
+ function skillsPlugin(workDir, skillsDir) {
16
+ const path = join(workDir, ".edukors-plugin");
17
+ rmSync(path, { recursive: true, force: true });
18
+ mkdirSync(join(path, ".claude-plugin"), { recursive: true });
19
+ writeFileSync(join(path, ".claude-plugin", "plugin.json"), JSON.stringify({ name: PLUGIN_NAME, description: "Skills offered by the EDUKORS application." }) + "\n");
20
+ // A junction on Windows needs no privileges; elsewhere the type is ignored.
21
+ symlinkSync(skillsDir, join(path, "skills"), "junction");
22
+ const ids = new Set();
23
+ for (const skill of listSkills(skillsDir)) {
24
+ ids.add(`${PLUGIN_NAME}:${skill.folder}`);
25
+ ids.add(`${PLUGIN_NAME}:${skill.name}`);
26
+ }
27
+ return { path, ids: [...ids] };
28
+ }
29
+ import { compareVersions, findExecutable, readVersion } from "../../platform/discovery.js";
30
+ import { buildEnv } from "../../platform/env.js";
31
+ import { runLoginCommand } from "../../platform/login.js";
32
+ import { runCommand } from "../../platform/process.js";
33
+ import { interpret } from "./events.js";
34
+ /** The address `claude auth login` prints for signing in without the browser it tried to open. */
35
+ const LOGIN_URL = /https:\/\/\S+\/oauth\/authorize\S*/;
36
+ /** Older builds miss parts of the protocol used here (effort, partial messages, auth status). */
37
+ const MIN_VERSION = "2.1.0";
38
+ const loadRealSdk = async () => (await import("@anthropic-ai/claude-agent-sdk"));
39
+ /** An npm install on Windows leaves a .cmd shim; the SDK needs what the shim runs. */
40
+ function unshim(path) {
41
+ if (!path.toLowerCase().endsWith(".cmd"))
42
+ return path;
43
+ const pkg = join(dirname(path), "node_modules", "@anthropic-ai", "claude-code");
44
+ return [join(pkg, "bin", "claude.exe"), join(pkg, "cli.js")].find((p) => existsSync(p)) ?? null;
45
+ }
46
+ const AuthStatus = z.looseObject({
47
+ loggedIn: z.boolean(),
48
+ authMethod: z.string().optional(),
49
+ email: z.string().optional(),
50
+ account: z.looseObject({ email: z.string().optional() }).optional(),
51
+ orgName: z.string().optional(),
52
+ });
53
+ /** Logged out, Claude Code still reports `tokenSource: "none"`; a source counts only when it names one. */
54
+ export function signedIn(account) {
55
+ if (!account)
56
+ return false;
57
+ if (account.apiProvider && account.apiProvider !== "firstParty")
58
+ return true;
59
+ const source = (s) => typeof s === "string" && s !== "" && s !== "none";
60
+ return Boolean(account.email || account.subscriptionType || source(account.apiKeySource) || source(account.tokenSource));
61
+ }
62
+ /** The prompt of a streaming query: yields each message sent, and waits in between. */
63
+ class Inbox {
64
+ items = [];
65
+ waiting = [];
66
+ closed = false;
67
+ push(message) {
68
+ const next = this.waiting.shift();
69
+ if (next)
70
+ next({ value: message, done: false });
71
+ else
72
+ this.items.push(message);
73
+ }
74
+ close() {
75
+ this.closed = true;
76
+ for (const next of this.waiting.splice(0))
77
+ next({ value: undefined, done: true });
78
+ }
79
+ [Symbol.asyncIterator]() {
80
+ return {
81
+ next: () => {
82
+ const item = this.items.shift();
83
+ if (item)
84
+ return Promise.resolve({ value: item, done: false });
85
+ if (this.closed)
86
+ return Promise.resolve({ value: undefined, done: true });
87
+ return new Promise((resolve) => this.waiting.push(resolve));
88
+ },
89
+ };
90
+ }
91
+ }
92
+ function withTimeout(work, ms, message) {
93
+ let timer;
94
+ return Promise.race([work, new Promise((_, reject) => (timer = setTimeout(() => reject(new AiCliError("TIMEOUT", message)), ms)))]).finally(() => clearTimeout(timer));
95
+ }
96
+ export function createClaudeProvider(options = {}) {
97
+ const minVersion = options.minVersion ?? MIN_VERSION;
98
+ const builtIns = options.builtInTools ?? ["AskUserQuestion"];
99
+ const loadSdk = options.loadSdk ?? loadRealSdk;
100
+ const startupTimeoutMs = options.startupTimeoutMs ?? 60_000;
101
+ const env = (context) => buildEnv({
102
+ // Extra variables first: they can never replace the account's directory.
103
+ set: {
104
+ ...options.env,
105
+ CLAUDE_CONFIG_DIR: context.homeDir,
106
+ CLAUDE_AGENT_SDK_CLIENT_APP: "edukors-ai-cli",
107
+ CLAUDE_CODE_DISABLE_AUTO_MEMORY: "1",
108
+ CLAUDE_CODE_ENABLE_TASKS: "0",
109
+ ENABLE_CLAUDEAI_MCP_SERVERS: "false",
110
+ MAX_MCP_OUTPUT_TOKENS: "60000",
111
+ },
112
+ });
113
+ const cli = (context, args, timeoutMs = 20_000) => runCommand({ file: context.detection.executable, args, env: env(context), timeoutMs, ...(context.signal ? { signal: context.signal } : {}) });
114
+ const capabilities = {
115
+ login: "browser",
116
+ accountStatus: true,
117
+ // Expected from the per-directory Keychain entry; verified with live accounts before release.
118
+ multiAccount: true,
119
+ logout: true,
120
+ persistentSessions: true,
121
+ models: true,
122
+ efforts: true,
123
+ usage: false,
124
+ tools: true,
125
+ questions: builtIns.includes("AskUserQuestion"),
126
+ liveOptions: true,
127
+ };
128
+ /** A query with no prompt yet: it starts Claude Code and initializes, without a model call. */
129
+ async function initialize(context) {
130
+ const sdk = await loadSdk();
131
+ const inbox = new Inbox();
132
+ const q = sdk.query({
133
+ prompt: inbox,
134
+ options: { cwd: context.homeDir, settingSources: [], strictMcpConfig: true, persistSession: false, env: env(context), pathToClaudeCodeExecutable: context.detection.executable },
135
+ });
136
+ try {
137
+ return await withTimeout(q.initializationResult(), startupTimeoutMs, "Claude Code did not start in time");
138
+ }
139
+ finally {
140
+ inbox.close();
141
+ q.close();
142
+ }
143
+ }
144
+ return {
145
+ id: "claude",
146
+ displayName: "Claude",
147
+ installUrl: "https://claude.com/claude-code",
148
+ async detect(log) {
149
+ const found = await findExecutable({
150
+ names: ["claude"],
151
+ envVar: "EDUKORS_CLAUDE",
152
+ ...(options.executable ? { override: options.executable } : {}),
153
+ extraDirs: [join(homedir(), ".claude", "local")],
154
+ ...(options.searchEnv ? { env: options.searchEnv } : {}),
155
+ });
156
+ const path = found ? unshim(found) : null;
157
+ if (!path)
158
+ return { providerId: "claude", status: "missing" };
159
+ const version = await readVersion(path, ["--version"], buildEnv({ set: { ...options.env } }));
160
+ if (!version) {
161
+ log.warn("could not read the Claude Code version", { path });
162
+ return { providerId: "claude", status: "error", executable: path, detail: "unrecognized version output" };
163
+ }
164
+ if (compareVersions(version, minVersion) < 0)
165
+ return { providerId: "claude", status: "incompatible", executable: path, version, requiredVersion: minVersion };
166
+ return { providerId: "claude", status: "ready", executable: path, version };
167
+ },
168
+ capabilities: () => capabilities,
169
+ async connectAccount(context) {
170
+ // Opens the browser and waits. Without one, the address it prints ends in a
171
+ // code the user pastes; the application relays it to the command's input.
172
+ const result = await runLoginCommand({ file: context.detection.executable, args: ["auth", "login", "--claudeai"], env: env(context) }, context, { urlPattern: LOGIN_URL, acceptsCode: true });
173
+ if (result.timedOut)
174
+ throw new AiCliError("TIMEOUT", "sign-in did not finish in time");
175
+ if (result.code !== 0)
176
+ throw new AiCliError("LOGIN_FAILED", "Claude sign-in failed", { meta: { detail: (result.stderr.trim() || result.stdout.trim()).slice(-300) } });
177
+ return this.accountStatus(context);
178
+ },
179
+ async accountStatus(context) {
180
+ // Exits 1 when signed out, still printing the JSON.
181
+ const result = await cli(context, ["auth", "status", "--json"]);
182
+ let parsed;
183
+ try {
184
+ parsed = AuthStatus.parse(JSON.parse(result.stdout));
185
+ }
186
+ catch (e) {
187
+ throw new AiCliError("PROVIDER_PROTOCOL", "unexpected output from claude auth status", { cause: e, meta: { code: result.code } });
188
+ }
189
+ if (!parsed.loggedIn)
190
+ return { state: "disconnected" };
191
+ const identity = parsed.email ?? parsed.account?.email ?? parsed.orgName;
192
+ return { state: "connected", ...(identity ? { identity } : {}) };
193
+ },
194
+ async logout(context) {
195
+ const result = await cli(context, ["auth", "logout"]);
196
+ if (result.code !== 0)
197
+ throw new AiCliError("PROVIDER_ERROR", "Claude sign-out failed", { meta: { detail: result.stderr.trim().slice(-300) } });
198
+ },
199
+ async listModels(context) {
200
+ const init = await initialize(context);
201
+ return init.models.map((m) => ({
202
+ id: m.value,
203
+ label: m.displayName,
204
+ ...(m.supportedEffortLevels?.length ? { efforts: [...m.supportedEffortLevels] } : {}),
205
+ ...(m.value === "default" ? { default: true } : {}),
206
+ }));
207
+ },
208
+ openSession: async (context, hooks) => ClaudeSession.open(await loadSdk(), context, hooks, { env: env(context), builtIns, startupTimeoutMs }),
209
+ };
210
+ }
211
+ class ClaudeSession {
212
+ q;
213
+ inbox;
214
+ log;
215
+ hooks;
216
+ resumeId;
217
+ pending = null;
218
+ closing = false;
219
+ pump = Promise.resolve();
220
+ constructor(q, inbox, log, hooks, sessionId) {
221
+ this.q = q;
222
+ this.inbox = inbox;
223
+ this.log = log;
224
+ this.hooks = hooks;
225
+ this.resumeId = sessionId;
226
+ }
227
+ static async open(sdk, context, hooks, opts) {
228
+ const sessionId = context.resumeId ?? randomUUID();
229
+ const inbox = new Inbox();
230
+ let session = null;
231
+ const idle = Promise.resolve({ content: "No request is active.", isError: true });
232
+ // In-process MCP servers: the application's tools, and each of the user's servers through the core.
233
+ const servers = {};
234
+ if (context.tools.length) {
235
+ const instance = createToolMcpServer(context.tools, (name, args) => (session?.pending ? session.pending.sink.callTool(name, args) : idle));
236
+ servers[TOOL_SERVER_NAME] = { type: "sdk", name: TOOL_SERVER_NAME, instance };
237
+ }
238
+ for (const external of context.externalServers) {
239
+ const instance = createToolMcpServer(external.tools, (name, args) => (session?.pending ? session.pending.sink.callExternal(external.name, name, args) : idle), external.name);
240
+ servers[external.name] = { type: "sdk", name: external.name, instance };
241
+ }
242
+ const plugin = context.skillsDir ? skillsPlugin(context.workDir, context.skillsDir) : null;
243
+ const served = Object.keys(servers);
244
+ // The one place that decides. The application's tools validate themselves and the
245
+ // user's servers are authorized by the core; loading a skill only reads its text.
246
+ const canUseTool = async (toolName, input) => {
247
+ if (served.some((name) => toolName.startsWith(`mcp__${name}__`)))
248
+ return { behavior: "allow", updatedInput: input };
249
+ if (toolName === "Skill" && plugin)
250
+ return { behavior: "allow", updatedInput: input };
251
+ if (toolName === "AskUserQuestion")
252
+ return session ? session.answerQuestions(input) : { behavior: "deny", message: "No request is active." };
253
+ return { behavior: "deny", message: "This tool is not available here." };
254
+ };
255
+ const q = sdk.query({
256
+ prompt: inbox,
257
+ options: {
258
+ cwd: context.workDir,
259
+ ...(context.resumeId ? { resume: context.resumeId } : { sessionId }),
260
+ ...(context.options.model ? { model: context.options.model } : {}),
261
+ ...(context.options.effort ? { effort: context.options.effort } : {}),
262
+ ...(context.instructions ? { systemPrompt: context.instructions } : {}),
263
+ tools: plugin ? [...opts.builtIns, "Skill"] : opts.builtIns,
264
+ mcpServers: servers,
265
+ ...(plugin ? { plugins: [{ type: "local", path: plugin.path }], skills: plugin.ids } : {}),
266
+ strictMcpConfig: true,
267
+ settingSources: [],
268
+ canUseTool,
269
+ includePartialMessages: true,
270
+ persistSession: true,
271
+ env: opts.env,
272
+ pathToClaudeCodeExecutable: context.detection.executable,
273
+ stderr: (text) => context.log.debug(`claude: ${text.trimEnd()}`),
274
+ },
275
+ });
276
+ session = new ClaudeSession(q, inbox, context.log, hooks, sessionId);
277
+ session.pump = session.run();
278
+ try {
279
+ const init = await withTimeout(q.initializationResult(), opts.startupTimeoutMs, "Claude Code did not start in time");
280
+ if (!signedIn(init.account))
281
+ throw new AiCliError("ACCOUNT_DISCONNECTED", "Claude is not signed in on this account");
282
+ }
283
+ catch (e) {
284
+ await session.close();
285
+ throw toAiCliError(e, "PROVIDER_START_FAILED");
286
+ }
287
+ return session;
288
+ }
289
+ send(input, sink) {
290
+ if (this.pending)
291
+ return Promise.reject(new AiCliError("SESSION_BUSY", "a turn is already running"));
292
+ if (this.closing)
293
+ return Promise.reject(new AiCliError("SESSION_CLOSED", "the session is closed"));
294
+ return new Promise((resolve, reject) => {
295
+ this.pending = { requestId: input.requestId, sink, error: null, resolve, reject };
296
+ const text = input.context ? `${input.text}\n\n<document>\n${input.context}\n</document>` : input.text;
297
+ this.inbox.push({ type: "user", uuid: input.requestId, session_id: this.resumeId ?? "", parent_tool_use_id: null, message: { role: "user", content: text } });
298
+ });
299
+ }
300
+ async interrupt() {
301
+ if (this.pending)
302
+ await this.q.interrupt();
303
+ }
304
+ async updateOptions(options) {
305
+ if (options.model !== undefined)
306
+ await this.q.setModel(options.model || undefined);
307
+ if (options.effort !== undefined)
308
+ await this.q.applyFlagSettings({ effortLevel: (options.effort || null) });
309
+ }
310
+ async close() {
311
+ if (this.closing)
312
+ return this.pump;
313
+ this.closing = true;
314
+ this.inbox.close();
315
+ try {
316
+ this.q.close();
317
+ }
318
+ catch (e) {
319
+ this.log.debug("claude close", e);
320
+ }
321
+ await withTimeout(this.pump, 10_000, "Claude Code did not stop in time").catch((e) => this.log.warn("claude did not stop", e));
322
+ this.settle((p) => p.reject(new AiCliError("SESSION_CLOSED", "the session was closed")));
323
+ }
324
+ /** Claude Code's own question tool: each question goes to the user, and the answers back as its input. */
325
+ async answerQuestions(input) {
326
+ const pending = this.pending;
327
+ if (!pending)
328
+ return { behavior: "deny", message: "No request is active." };
329
+ const questions = Array.isArray(input.questions) ? input.questions : [];
330
+ const answers = {};
331
+ try {
332
+ for (const q of questions) {
333
+ const prompt = String(q.question ?? "");
334
+ if (!prompt)
335
+ continue;
336
+ const options = (q.options ?? []).map((o) => String(o.label ?? "")).filter(Boolean);
337
+ answers[prompt] = await pending.sink.ask({ prompt, ...(options.length ? { options } : {}) });
338
+ }
339
+ }
340
+ catch {
341
+ return { behavior: "deny", message: "The user did not answer." };
342
+ }
343
+ return { behavior: "allow", updatedInput: { ...input, answers } };
344
+ }
345
+ async run() {
346
+ let failure = null;
347
+ try {
348
+ for await (const msg of this.q)
349
+ this.handle(msg);
350
+ }
351
+ catch (e) {
352
+ failure = e;
353
+ }
354
+ if (this.closing)
355
+ return;
356
+ const error = new AiCliError("PROVIDER_CRASHED", "Claude Code stopped unexpectedly", { cause: failure ?? undefined });
357
+ this.hooks.exited(error);
358
+ this.settle((p) => p.reject(error));
359
+ }
360
+ handle(msg) {
361
+ for (const action of interpret(msg)) {
362
+ if (action.kind === "sessionId") {
363
+ this.resumeId = action.id;
364
+ continue;
365
+ }
366
+ const pending = this.pending;
367
+ if (!pending)
368
+ continue;
369
+ switch (action.kind) {
370
+ case "text":
371
+ pending.sink.text(action.text);
372
+ break;
373
+ case "activity":
374
+ pending.sink.activity(action.phase);
375
+ break;
376
+ case "usage":
377
+ pending.sink.usage(action.usage);
378
+ break;
379
+ case "error":
380
+ pending.error = action.error;
381
+ break;
382
+ case "end":
383
+ this.settle((p) => (p.error && action.outcome === "completed" && p.error.code !== "PROVIDER_ERROR" ? p.reject(p.error) : p.resolve(action.outcome)));
384
+ break;
385
+ case "fail":
386
+ this.settle((p) => p.reject(p.error ?? action.error));
387
+ break;
388
+ }
389
+ }
390
+ }
391
+ settle(fn) {
392
+ const pending = this.pending;
393
+ this.pending = null;
394
+ if (pending)
395
+ fn(pending);
396
+ }
397
+ }
398
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/providers/claude/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { SDKMessage } from "@anthropic-ai/claude-agent-sdk";
2
+ import { AiCliError } from "../../errors.js";
3
+ import { type ActivityPhase, type Usage } from "../../events.js";
4
+ /**
5
+ * Claude Code's messages, as what a turn needs. This file has no SDK runtime
6
+ * import, so it is tested on its own (test/claude.test.ts). Messages of a
7
+ * subagent (`parent_tool_use_id`) are not the conversation's own and are
8
+ * ignored, except for the result, which always belongs to the turn.
9
+ */
10
+ export type ClaudeAction = {
11
+ kind: "sessionId";
12
+ id: string;
13
+ } | {
14
+ kind: "text";
15
+ text: string;
16
+ } | {
17
+ kind: "activity";
18
+ phase: ActivityPhase;
19
+ } | {
20
+ kind: "usage";
21
+ usage: Omit<Usage, "observedAt">;
22
+ }
23
+ /** A failure reported mid-turn; the turn ends with it unless it recovers. */
24
+ | {
25
+ kind: "error";
26
+ error: AiCliError;
27
+ } | {
28
+ kind: "end";
29
+ outcome: "completed" | "cancelled";
30
+ } | {
31
+ kind: "fail";
32
+ error: AiCliError;
33
+ };
34
+ /** Claude Code's error names on a message, as stable codes. */
35
+ export declare function claudeError(name: string, detail?: string): AiCliError;
36
+ export declare function interpret(msg: SDKMessage): ClaudeAction[];
@@ -0,0 +1,90 @@
1
+ import { AiCliError } from "../../errors.js";
2
+ import { fromWindows } from "../../events.js";
3
+ /** Claude Code's error names on a message, as stable codes. */
4
+ export function claudeError(name, detail) {
5
+ const meta = { providerCode: name, ...(detail ? { detail: detail.slice(0, 300) } : {}) };
6
+ switch (name) {
7
+ case "authentication_failed":
8
+ case "oauth_org_not_allowed":
9
+ return new AiCliError("ACCOUNT_EXPIRED", "Claude needs to be signed in again", { meta });
10
+ case "rate_limit":
11
+ return new AiCliError("RATE_LIMITED", "Claude's usage limit was reached", { meta });
12
+ case "overloaded":
13
+ case "server_error":
14
+ return new AiCliError("PROVIDER_ERROR", "Claude is temporarily unavailable", { meta, retryable: true });
15
+ default:
16
+ return new AiCliError("PROVIDER_ERROR", "Claude could not complete the request", { meta });
17
+ }
18
+ }
19
+ const WEB_TOOLS = new Set(["WebSearch", "WebFetch"]);
20
+ const when = (seconds) => new Date(seconds * (seconds < 1e12 ? 1000 : 1)).toISOString();
21
+ /** A share from 0 to 1, whichever scale the provider used. */
22
+ const share = (value) => (value > 1 ? value / 100 : value);
23
+ export function interpret(msg) {
24
+ switch (msg.type) {
25
+ case "system":
26
+ return msg.subtype === "init" ? [{ kind: "sessionId", id: msg.session_id }] : [];
27
+ case "stream_event": {
28
+ if (msg.parent_tool_use_id)
29
+ return [];
30
+ const event = msg.event;
31
+ if (event.type === "content_block_delta" && event.delta.type === "text_delta")
32
+ return [{ kind: "text", text: event.delta.text }];
33
+ if (event.type === "content_block_start") {
34
+ const block = event.content_block;
35
+ if (block.type === "thinking" || block.type === "redacted_thinking")
36
+ return [{ kind: "activity", phase: "thinking" }];
37
+ if (block.type === "tool_use" || block.type === "mcp_tool_use" || block.type === "server_tool_use") {
38
+ return [{ kind: "activity", phase: WEB_TOOLS.has(block.name) || block.type === "server_tool_use" ? "researching" : "applying" }];
39
+ }
40
+ }
41
+ return [];
42
+ }
43
+ case "assistant":
44
+ if (msg.parent_tool_use_id || !msg.error)
45
+ return [];
46
+ return [{ kind: "error", error: claudeError(msg.error) }];
47
+ case "auth_status":
48
+ return msg.error ? [{ kind: "error", error: claudeError("authentication_failed", msg.error) }] : [];
49
+ case "rate_limit_event": {
50
+ // `unifiedWindows` holds every window; the top-level fields describe only `rateLimitType`.
51
+ const info = msg.rate_limit_info;
52
+ const entries = info.unifiedWindows
53
+ ? Object.entries(info.unifiedWindows)
54
+ : [[info.rateLimitType ?? "limit", { ...(info.utilization !== undefined ? { utilization: info.utilization } : {}), ...(info.resetsAt !== undefined ? { resetsAt: info.resetsAt } : {}) }]];
55
+ const windows = [];
56
+ for (const [name, w] of entries) {
57
+ if (typeof w?.utilization !== "number")
58
+ continue;
59
+ windows.push({ name, used: share(w.utilization), ...(typeof w.resetsAt === "number" ? { resetsAt: when(w.resetsAt) } : {}) });
60
+ }
61
+ return windows.length ? [{ kind: "usage", usage: fromWindows(windows) }] : [];
62
+ }
63
+ case "result": {
64
+ const u = msg.usage;
65
+ const actions = [
66
+ {
67
+ kind: "usage",
68
+ usage: {
69
+ inputTokens: u.input_tokens,
70
+ outputTokens: u.output_tokens,
71
+ cachedInputTokens: u.cache_read_input_tokens,
72
+ costUsd: msg.total_cost_usd,
73
+ },
74
+ },
75
+ ];
76
+ if (msg.subtype === "success" && !msg.is_error)
77
+ actions.push({ kind: "end", outcome: "completed" });
78
+ else if (msg.terminal_reason?.startsWith("aborted"))
79
+ actions.push({ kind: "end", outcome: "cancelled" });
80
+ else {
81
+ const detail = "errors" in msg ? msg.errors.join("\n") : msg.result;
82
+ actions.push({ kind: "fail", error: new AiCliError("PROVIDER_ERROR", "Claude could not complete the request", { meta: { providerCode: msg.subtype, detail: detail.slice(0, 300) } }) });
83
+ }
84
+ return actions;
85
+ }
86
+ default:
87
+ return [];
88
+ }
89
+ }
90
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/providers/claude/events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAoD,MAAM,iBAAiB,CAAC;AAmBhG,+DAA+D;AAC/D,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAe;IACvD,MAAM,IAAI,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,uBAAuB,CAAC;QAC7B,KAAK,uBAAuB;YAC1B,OAAO,IAAI,UAAU,CAAC,iBAAiB,EAAE,oCAAoC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3F,KAAK,YAAY;YACf,OAAO,IAAI,UAAU,CAAC,cAAc,EAAE,kCAAkC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACtF,KAAK,YAAY,CAAC;QAClB,KAAK,cAAc;YACjB,OAAO,IAAI,UAAU,CAAC,gBAAgB,EAAE,mCAAmC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1G;YACE,OAAO,IAAI,UAAU,CAAC,gBAAgB,EAAE,uCAAuC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;AAErD,MAAM,IAAI,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAEhG,8DAA8D;AAC9D,MAAM,KAAK,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAEnE,MAAM,UAAU,SAAS,CAAC,GAAe;IACvC,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,GAAG,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEnF,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,IAAI,GAAG,CAAC,kBAAkB;gBAAE,OAAO,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;YACxB,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY;gBAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACjI,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC;gBAClC,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB;oBAAE,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;gBACtH,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;oBACnG,OAAO,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;gBACnI,CAAC;YACH,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,KAAK,WAAW;YACd,IAAI,GAAG,CAAC,kBAAkB,IAAI,CAAC,GAAG,CAAC,KAAK;gBAAE,OAAO,EAAE,CAAC;YACpD,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAE5D,KAAK,aAAa;YAChB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,uBAAuB,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEtG,KAAK,kBAAkB,CAAC,CAAC,CAAC;YACxB,2FAA2F;YAC3F,MAAM,IAAI,GAAG,GAAG,CAAC,eAAgI,CAAC;YAClJ,MAAM,OAAO,GAA4D,IAAI,CAAC,cAAc;gBAC1F,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC;gBACrC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,OAAO,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7L,MAAM,OAAO,GAAkB,EAAE,CAAC;YAClC,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;gBAChC,IAAI,OAAO,CAAC,EAAE,WAAW,KAAK,QAAQ;oBAAE,SAAS;gBACjD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAChI,CAAC;YACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC;YACpB,MAAM,OAAO,GAAmB;gBAC9B;oBACE,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE;wBACL,WAAW,EAAE,CAAC,CAAC,YAAY;wBAC3B,YAAY,EAAE,CAAC,CAAC,aAAa;wBAC7B,iBAAiB,EAAE,CAAC,CAAC,uBAAuB;wBAC5C,OAAO,EAAE,GAAG,CAAC,cAAc;qBAC5B;iBACF;aACF,CAAC;YACF,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,QAAQ;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;iBAC/F,IAAI,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,SAAS,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;iBACpG,CAAC;gBACJ,MAAM,MAAM,GAAG,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;gBACpE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,gBAAgB,EAAE,uCAAuC,EAAE,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;YAC1L,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QAED;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { AiCliError } from "../../errors.js";
2
+ import { type Usage } from "../../events.js";
3
+ import type { ProviderAdapter } from "../../provider.js";
4
+ /**
5
+ * OpenAI Codex, through its app server (`codex app-server`): JSON-RPC over
6
+ * stdio, the interface Codex's own editor extensions use.
7
+ *
8
+ * Each account is a Codex home of its own (CODEX_HOME, the account's managed
9
+ * home), where Codex keeps its sign-in. The user's own ~/.codex is never read
10
+ * or copied. The application's tools reach Codex as an MCP server on
11
+ * 127.0.0.1 (agent bridge), given on the command line with `-c` so that two
12
+ * documents on the same account never share or rewrite a config file; the
13
+ * bridge token travels in the environment, not in argv.
14
+ */
15
+ export interface CodexProviderOptions {
16
+ executable?: string;
17
+ minVersion?: string;
18
+ /** Extra variables for the provider process (advanced settings, tests). */
19
+ env?: Record<string, string>;
20
+ /** For tests: where to look for `codex`. */
21
+ searchEnv?: NodeJS.ProcessEnv;
22
+ startupTimeoutMs?: number;
23
+ }
24
+ /** Every window of every limit, from 0 to 1; the most used one leads. */
25
+ export declare function codexLimits(read: any): Omit<Usage, "observedAt"> | null;
26
+ /** Codex's turn errors, as stable codes. */
27
+ export declare function codexError(error: any): AiCliError;
28
+ export declare function createCodexProvider(options?: CodexProviderOptions): ProviderAdapter;