@netlify/axis 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +977 -0
- package/dist/adapters/base/acp-adapter.d.ts +44 -0
- package/dist/adapters/base/acp-adapter.d.ts.map +1 -0
- package/dist/adapters/base/acp-adapter.js +559 -0
- package/dist/adapters/base/acp-adapter.js.map +1 -0
- package/dist/adapters/base/agent-adapter.d.ts +132 -0
- package/dist/adapters/base/agent-adapter.d.ts.map +1 -0
- package/dist/adapters/base/agent-adapter.js +212 -0
- package/dist/adapters/base/agent-adapter.js.map +1 -0
- package/dist/adapters/claude-code.d.ts +3 -0
- package/dist/adapters/claude-code.d.ts.map +1 -0
- package/dist/adapters/claude-code.js +138 -0
- package/dist/adapters/claude-code.js.map +1 -0
- package/dist/adapters/claude-sdk.d.ts +11 -0
- package/dist/adapters/claude-sdk.d.ts.map +1 -0
- package/dist/adapters/claude-sdk.js +46 -0
- package/dist/adapters/claude-sdk.js.map +1 -0
- package/dist/adapters/codex.d.ts +3 -0
- package/dist/adapters/codex.d.ts.map +1 -0
- package/dist/adapters/codex.js +183 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/gemini-acp.d.ts +11 -0
- package/dist/adapters/gemini-acp.d.ts.map +1 -0
- package/dist/adapters/gemini-acp.js +60 -0
- package/dist/adapters/gemini-acp.js.map +1 -0
- package/dist/adapters/gemini.d.ts +3 -0
- package/dist/adapters/gemini.d.ts.map +1 -0
- package/dist/adapters/gemini.js +222 -0
- package/dist/adapters/gemini.js.map +1 -0
- package/dist/adapters/goose.d.ts +3 -0
- package/dist/adapters/goose.d.ts.map +1 -0
- package/dist/adapters/goose.js +9 -0
- package/dist/adapters/goose.js.map +1 -0
- package/dist/adapters/registry.d.ts +7 -0
- package/dist/adapters/registry.d.ts.map +1 -0
- package/dist/adapters/registry.js +37 -0
- package/dist/adapters/registry.js.map +1 -0
- package/dist/adapters/utils/mcp.d.ts +23 -0
- package/dist/adapters/utils/mcp.d.ts.map +1 -0
- package/dist/adapters/utils/mcp.js +114 -0
- package/dist/adapters/utils/mcp.js.map +1 -0
- package/dist/adapters/utils/resolve.d.ts +20 -0
- package/dist/adapters/utils/resolve.d.ts.map +1 -0
- package/dist/adapters/utils/resolve.js +48 -0
- package/dist/adapters/utils/resolve.js.map +1 -0
- package/dist/adapters/utils/skills.d.ts +17 -0
- package/dist/adapters/utils/skills.d.ts.map +1 -0
- package/dist/adapters/utils/skills.js +52 -0
- package/dist/adapters/utils/skills.js.map +1 -0
- package/dist/adapters/utils/token-estimator.d.ts +21 -0
- package/dist/adapters/utils/token-estimator.d.ts.map +1 -0
- package/dist/adapters/utils/token-estimator.js +37 -0
- package/dist/adapters/utils/token-estimator.js.map +1 -0
- package/dist/baselines/diff.d.ts +9 -0
- package/dist/baselines/diff.d.ts.map +1 -0
- package/dist/baselines/diff.js +83 -0
- package/dist/baselines/diff.js.map +1 -0
- package/dist/baselines/index.d.ts +3 -0
- package/dist/baselines/index.d.ts.map +1 -0
- package/dist/baselines/index.js +3 -0
- package/dist/baselines/index.js.map +1 -0
- package/dist/baselines/store.d.ts +19 -0
- package/dist/baselines/store.d.ts.map +1 -0
- package/dist/baselines/store.js +104 -0
- package/dist/baselines/store.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +487 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/loader.d.ts +8 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +99 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/validator.d.ts +11 -0
- package/dist/config/validator.d.ts.map +1 -0
- package/dist/config/validator.js +203 -0
- package/dist/config/validator.js.map +1 -0
- package/dist/docs-site/_astro/cli.DDWZtG0-.css +1 -0
- package/dist/docs-site/cli/index.html +18 -0
- package/dist/docs-site/configuration/index.html +121 -0
- package/dist/docs-site/content-assets.mjs +1 -0
- package/dist/docs-site/content-modules.mjs +1 -0
- package/dist/docs-site/data-store.json +9 -0
- package/dist/docs-site/index.html +69 -0
- package/dist/docs-site/quickstart/index.html +59 -0
- package/dist/docs-site/running/index.html +87 -0
- package/dist/docs-site/scoring/index.html +135 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/report-ui/index.html +291 -0
- package/dist/report-ui/mock-data.json +298 -0
- package/dist/reports/html.d.ts +7 -0
- package/dist/reports/html.d.ts.map +1 -0
- package/dist/reports/html.js +27 -0
- package/dist/reports/html.js.map +1 -0
- package/dist/reports/reader.d.ts +21 -0
- package/dist/reports/reader.d.ts.map +1 -0
- package/dist/reports/reader.js +110 -0
- package/dist/reports/reader.js.map +1 -0
- package/dist/reports/writer.d.ts +14 -0
- package/dist/reports/writer.d.ts.map +1 -0
- package/dist/reports/writer.js +106 -0
- package/dist/reports/writer.js.map +1 -0
- package/dist/runner/lifecycle.d.ts +10 -0
- package/dist/runner/lifecycle.d.ts.map +1 -0
- package/dist/runner/lifecycle.js +58 -0
- package/dist/runner/lifecycle.js.map +1 -0
- package/dist/runner/runner.d.ts +34 -0
- package/dist/runner/runner.d.ts.map +1 -0
- package/dist/runner/runner.js +330 -0
- package/dist/runner/runner.js.map +1 -0
- package/dist/scoring/category-score.d.ts +52 -0
- package/dist/scoring/category-score.d.ts.map +1 -0
- package/dist/scoring/category-score.js +157 -0
- package/dist/scoring/category-score.js.map +1 -0
- package/dist/scoring/composite.d.ts +5 -0
- package/dist/scoring/composite.d.ts.map +1 -0
- package/dist/scoring/composite.js +24 -0
- package/dist/scoring/composite.js.map +1 -0
- package/dist/scoring/deep-eval.d.ts +25 -0
- package/dist/scoring/deep-eval.d.ts.map +1 -0
- package/dist/scoring/deep-eval.js +382 -0
- package/dist/scoring/deep-eval.js.map +1 -0
- package/dist/scoring/goal-achievement.d.ts +5 -0
- package/dist/scoring/goal-achievement.d.ts.map +1 -0
- package/dist/scoring/goal-achievement.js +241 -0
- package/dist/scoring/goal-achievement.js.map +1 -0
- package/dist/scoring/index.d.ts +22 -0
- package/dist/scoring/index.d.ts.map +1 -0
- package/dist/scoring/index.js +115 -0
- package/dist/scoring/index.js.map +1 -0
- package/dist/scoring/parse-json.d.ts +6 -0
- package/dist/scoring/parse-json.d.ts.map +1 -0
- package/dist/scoring/parse-json.js +18 -0
- package/dist/scoring/parse-json.js.map +1 -0
- package/dist/scoring/sparse-index.d.ts +15 -0
- package/dist/scoring/sparse-index.d.ts.map +1 -0
- package/dist/scoring/sparse-index.js +338 -0
- package/dist/scoring/sparse-index.js.map +1 -0
- package/dist/scoring/triage.d.ts +15 -0
- package/dist/scoring/triage.d.ts.map +1 -0
- package/dist/scoring/triage.js +204 -0
- package/dist/scoring/triage.js.map +1 -0
- package/dist/skills/resolver.d.ts +19 -0
- package/dist/skills/resolver.d.ts.map +1 -0
- package/dist/skills/resolver.js +95 -0
- package/dist/skills/resolver.js.map +1 -0
- package/dist/transcript/categorize.d.ts +24 -0
- package/dist/transcript/categorize.d.ts.map +1 -0
- package/dist/transcript/categorize.js +233 -0
- package/dist/transcript/categorize.js.map +1 -0
- package/dist/transcript/classify.d.ts +7 -0
- package/dist/transcript/classify.d.ts.map +1 -0
- package/dist/transcript/classify.js +32 -0
- package/dist/transcript/classify.js.map +1 -0
- package/dist/transcript/extract.d.ts +24 -0
- package/dist/transcript/extract.d.ts.map +1 -0
- package/dist/transcript/extract.js +266 -0
- package/dist/transcript/extract.js.map +1 -0
- package/dist/transcript/index.d.ts +3 -0
- package/dist/transcript/index.d.ts.map +1 -0
- package/dist/transcript/index.js +2 -0
- package/dist/transcript/index.js.map +1 -0
- package/dist/transcript/normalize.d.ts +15 -0
- package/dist/transcript/normalize.d.ts.map +1 -0
- package/dist/transcript/normalize.js +160 -0
- package/dist/transcript/normalize.js.map +1 -0
- package/dist/transcript/types.d.ts +92 -0
- package/dist/transcript/types.d.ts.map +1 -0
- package/dist/transcript/types.js +2 -0
- package/dist/transcript/types.js.map +1 -0
- package/dist/transcript/urls.d.ts +10 -0
- package/dist/transcript/urls.d.ts.map +1 -0
- package/dist/transcript/urls.js +31 -0
- package/dist/transcript/urls.js.map +1 -0
- package/dist/types/agent.d.ts +80 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +2 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/baseline.d.ts +65 -0
- package/dist/types/baseline.d.ts.map +1 -0
- package/dist/types/baseline.js +2 -0
- package/dist/types/baseline.js.map +1 -0
- package/dist/types/config.d.ts +76 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/output.d.ts +70 -0
- package/dist/types/output.d.ts.map +1 -0
- package/dist/types/output.js +15 -0
- package/dist/types/output.js.map +1 -0
- package/dist/types/report.d.ts +37 -0
- package/dist/types/report.d.ts.map +1 -0
- package/dist/types/report.js +2 -0
- package/dist/types/report.js.map +1 -0
- package/dist/types/scenario.d.ts +23 -0
- package/dist/types/scenario.d.ts.map +1 -0
- package/dist/types/scenario.js +2 -0
- package/dist/types/scenario.js.map +1 -0
- package/dist/types/scoring.d.ts +176 -0
- package/dist/types/scoring.d.ts.map +1 -0
- package/dist/types/scoring.js +2 -0
- package/dist/types/scoring.js.map +1 -0
- package/dist/ui/AnimatedTokens.d.ts +29 -0
- package/dist/ui/AnimatedTokens.d.ts.map +1 -0
- package/dist/ui/AnimatedTokens.js +53 -0
- package/dist/ui/AnimatedTokens.js.map +1 -0
- package/dist/ui/App.d.ts +6 -0
- package/dist/ui/App.d.ts.map +1 -0
- package/dist/ui/App.js +16 -0
- package/dist/ui/App.js.map +1 -0
- package/dist/ui/LiveDuration.d.ts +20 -0
- package/dist/ui/LiveDuration.d.ts.map +1 -0
- package/dist/ui/LiveDuration.js +31 -0
- package/dist/ui/LiveDuration.js.map +1 -0
- package/dist/ui/LiveStatus.d.ts +7 -0
- package/dist/ui/LiveStatus.d.ts.map +1 -0
- package/dist/ui/LiveStatus.js +52 -0
- package/dist/ui/LiveStatus.js.map +1 -0
- package/dist/ui/format.d.ts +29 -0
- package/dist/ui/format.d.ts.map +1 -0
- package/dist/ui/format.js +514 -0
- package/dist/ui/format.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import type { AgentAdapter, AgentInput, AgentMetadata, TranscriptEntry } from "../../types/agent.js";
|
|
2
|
+
import { type ResolvedCommand } from "../utils/resolve.js";
|
|
3
|
+
/** Default timeout for agent execution (10 minutes). */
|
|
4
|
+
export declare const DEFAULT_TIMEOUT_MS: number;
|
|
5
|
+
/** Maximum bytes of stderr to buffer before truncating. */
|
|
6
|
+
export declare const MAX_STDERR_BYTES = 100000;
|
|
7
|
+
/** Grace period between SIGTERM and SIGKILL for non-responsive processes. */
|
|
8
|
+
export declare const SIGTERM_TO_SIGKILL_MS = 5000;
|
|
9
|
+
/** Context handed to `prepare` before the agent process is spawned. */
|
|
10
|
+
export interface SetupContext {
|
|
11
|
+
readonly input: AgentInput;
|
|
12
|
+
readonly workingDirectory: string;
|
|
13
|
+
/**
|
|
14
|
+
* Authoritative env the child will actually receive. The runner merges
|
|
15
|
+
* `isolationEnv(workspace)` into `input.env` before calling `run`, so this
|
|
16
|
+
* already contains e.g. `CODEX_HOME` / `GEMINI_CLI_HOME`.
|
|
17
|
+
*/
|
|
18
|
+
readonly env: Record<string, string> | undefined;
|
|
19
|
+
}
|
|
20
|
+
/** Context available during stdout streaming (`onLine` / `onChunk` / `onEnd`). */
|
|
21
|
+
export interface StreamContext<State> {
|
|
22
|
+
readonly state: State;
|
|
23
|
+
readonly transcript: TranscriptEntry[];
|
|
24
|
+
/**
|
|
25
|
+
* Feed assistant text to the live token estimator. Call with any text the
|
|
26
|
+
* agent produced (assistant messages, reasoning, etc.).
|
|
27
|
+
*/
|
|
28
|
+
feedAssistantText(text: string): void;
|
|
29
|
+
}
|
|
30
|
+
/** Context handed to `getResult` after the agent process exits. */
|
|
31
|
+
export interface ResultContext<State> {
|
|
32
|
+
readonly state: State;
|
|
33
|
+
readonly transcript: TranscriptEntry[];
|
|
34
|
+
readonly exitCode: number;
|
|
35
|
+
readonly stderr: string;
|
|
36
|
+
readonly startTime: Date;
|
|
37
|
+
readonly endTime: Date;
|
|
38
|
+
}
|
|
39
|
+
/** Return shape for `getResult`. Merged on top of base-computed metadata. */
|
|
40
|
+
export interface AdapterResult {
|
|
41
|
+
/**
|
|
42
|
+
* The final assistant-visible result. Use `null` for "no result" — do NOT
|
|
43
|
+
* return `""`, as the base uses `null` as the sentinel for missing output.
|
|
44
|
+
*/
|
|
45
|
+
result: string | null;
|
|
46
|
+
/**
|
|
47
|
+
* Metadata overrides. Spread on top of base-computed fields (`startTime`,
|
|
48
|
+
* `endTime`, `durationMs`, `exitCode`), so e.g. `{ durationMs: upstream }`
|
|
49
|
+
* replaces the wall-clock duration with a CLI-reported value.
|
|
50
|
+
*/
|
|
51
|
+
metadata?: Partial<AgentMetadata>;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A declarative spec for an agent adapter. Pass to `createAgentAdapter`
|
|
55
|
+
* to get back an `AgentAdapter`.
|
|
56
|
+
*
|
|
57
|
+
* `streamConfig` defines how the adapter processes the agent's stdout stream.
|
|
58
|
+
* It's a discriminated union: `lines` mode hands you parsed NDJSON-style lines,
|
|
59
|
+
* `aggregate` mode hands you raw stdout chunks. This is encoded at the type
|
|
60
|
+
* level so `mode` and its handler can never be out of sync.
|
|
61
|
+
*/
|
|
62
|
+
export type AgentAdapterSpec<State> = {
|
|
63
|
+
/** Adapter name. Used in logs, error messages, and `AgentAdapter.name`. */
|
|
64
|
+
name: string;
|
|
65
|
+
/**
|
|
66
|
+
* CLI binary resolved via `resolveCommand` + npx fallback. Omit if the
|
|
67
|
+
* adapter gets its command from `input.config.command` at runtime.
|
|
68
|
+
*/
|
|
69
|
+
cliCommand?: string;
|
|
70
|
+
/** Execution timeout. Defaults to `DEFAULT_TIMEOUT_MS` (10 min). */
|
|
71
|
+
timeoutMs?: number;
|
|
72
|
+
/** Stderr buffer cap. Defaults to `MAX_STDERR_BYTES` (100 KB). */
|
|
73
|
+
maxStderrBytes?: number;
|
|
74
|
+
/** Env vars the adapter requires (validated by runner pre-flight). */
|
|
75
|
+
requiredEnv?: () => string[];
|
|
76
|
+
/** Workspace isolation env vars (merged into child env by runner). */
|
|
77
|
+
isolationEnv?: (workspace: string) => Record<string, string>;
|
|
78
|
+
/**
|
|
79
|
+
* Pre-spawn side effects: mkdir, MCP config writers, skills writers, etc.
|
|
80
|
+
* Runs after env is finalized and before the process is spawned.
|
|
81
|
+
*/
|
|
82
|
+
prepare?: (ctx: SetupContext) => void | Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Override how the CLI command is resolved. Default: prefer the CLI resolved
|
|
85
|
+
* from `cliCommand` via npx fallback; otherwise fall back to
|
|
86
|
+
* `input.config.command`; otherwise throw.
|
|
87
|
+
*/
|
|
88
|
+
resolveCommand?: (input: AgentInput, resolved: ResolvedCommand | null) => ResolvedCommand;
|
|
89
|
+
/** Build the CLI arguments for the agent process. Prefix args from command resolution are prepended automatically. */
|
|
90
|
+
buildArgs: (input: AgentInput) => string[];
|
|
91
|
+
/** Per-run mutable state. Called once per run to create a fresh state bag for `streamConfig` handlers and `getResult`. */
|
|
92
|
+
initialState: () => State;
|
|
93
|
+
/**
|
|
94
|
+
* How to process the agent's stdout stream. Choose a mode:
|
|
95
|
+
*
|
|
96
|
+
* - **`lines`** — readline-based: each line is delivered to `onLine`. Use for agents that emit NDJSON.
|
|
97
|
+
* - **`aggregate`** — raw chunks: each `data` event is delivered to `onChunk`. Use for agents
|
|
98
|
+
* that write plain text or when you just need the full output.
|
|
99
|
+
*/
|
|
100
|
+
streamConfig: {
|
|
101
|
+
mode: "lines";
|
|
102
|
+
/** Called once per stdout line. Parse JSON inside the callback. */
|
|
103
|
+
onLine: (line: string, ctx: StreamContext<State>) => void;
|
|
104
|
+
/** Called in `finally` after stream ends (success, error, or timeout). */
|
|
105
|
+
onEnd?: (ctx: StreamContext<State>) => void;
|
|
106
|
+
} | {
|
|
107
|
+
mode: "aggregate";
|
|
108
|
+
/**
|
|
109
|
+
* Called once per stdout chunk. The base automatically feeds each chunk
|
|
110
|
+
* to the token estimator, so typically just accumulate into state.
|
|
111
|
+
*/
|
|
112
|
+
onChunk: (chunk: string, ctx: StreamContext<State>) => void;
|
|
113
|
+
/** Called after data has fully drained (success, error, or timeout). */
|
|
114
|
+
onEnd?: (ctx: StreamContext<State>) => void;
|
|
115
|
+
};
|
|
116
|
+
/** Build the final result + metadata from accumulated state after the process exits. */
|
|
117
|
+
getResult: (ctx: ResultContext<State>) => AdapterResult;
|
|
118
|
+
};
|
|
119
|
+
/**
|
|
120
|
+
* Build an `AgentAdapter` from a declarative spec. The returned adapter owns:
|
|
121
|
+
* spawn, stdin close, cleanup registration, stderr cap, timeout →
|
|
122
|
+
* SIGTERM → SIGKILL (with proper timer cleanup), exit promise ordering, raw
|
|
123
|
+
* output capture, token estimator wiring, and the three outcome branches
|
|
124
|
+
* (timed-out / non-zero exit with no result / success).
|
|
125
|
+
*
|
|
126
|
+
* Error precedence on failure:
|
|
127
|
+
* 1. `getResult(...).metadata.error` — wins if set
|
|
128
|
+
* 2. `stderr` — if non-empty
|
|
129
|
+
* 3. Generic `"Agent process exited with non-zero code"`
|
|
130
|
+
*/
|
|
131
|
+
export declare function createAgentAdapter<State>(spec: AgentAdapterSpec<State>): AgentAdapter;
|
|
132
|
+
//# sourceMappingURL=agent-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/base/agent-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { createInterface } from "node:readline";
|
|
3
|
+
import { resolveCommand } from "../utils/resolve.js";
|
|
4
|
+
import { createTokenEstimator } from "../utils/token-estimator.js";
|
|
5
|
+
/** Default timeout for agent execution (10 minutes). */
|
|
6
|
+
export const DEFAULT_TIMEOUT_MS = 10 * 60 * 1000;
|
|
7
|
+
/** Maximum bytes of stderr to buffer before truncating. */
|
|
8
|
+
export const MAX_STDERR_BYTES = 100_000;
|
|
9
|
+
/** Grace period between SIGTERM and SIGKILL for non-responsive processes. */
|
|
10
|
+
export const SIGTERM_TO_SIGKILL_MS = 5_000;
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Factory
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
/**
|
|
15
|
+
* Build an `AgentAdapter` from a declarative spec. The returned adapter owns:
|
|
16
|
+
* spawn, stdin close, cleanup registration, stderr cap, timeout →
|
|
17
|
+
* SIGTERM → SIGKILL (with proper timer cleanup), exit promise ordering, raw
|
|
18
|
+
* output capture, token estimator wiring, and the three outcome branches
|
|
19
|
+
* (timed-out / non-zero exit with no result / success).
|
|
20
|
+
*
|
|
21
|
+
* Error precedence on failure:
|
|
22
|
+
* 1. `getResult(...).metadata.error` — wins if set
|
|
23
|
+
* 2. `stderr` — if non-empty
|
|
24
|
+
* 3. Generic `"Agent process exited with non-zero code"`
|
|
25
|
+
*/
|
|
26
|
+
export function createAgentAdapter(spec) {
|
|
27
|
+
const timeoutMs = spec.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
28
|
+
const maxStderrBytes = spec.maxStderrBytes ?? MAX_STDERR_BYTES;
|
|
29
|
+
// Cached resolved command from ensureInstalled. Null until resolved.
|
|
30
|
+
let resolved = null;
|
|
31
|
+
async function doResolve() {
|
|
32
|
+
if (!spec.cliCommand)
|
|
33
|
+
return;
|
|
34
|
+
resolved = await resolveCommand(spec.name, spec.cliCommand);
|
|
35
|
+
}
|
|
36
|
+
function defaultResolveCommand(input) {
|
|
37
|
+
if (resolved)
|
|
38
|
+
return resolved;
|
|
39
|
+
if (input.config.command)
|
|
40
|
+
return { command: input.config.command, prefixArgs: [] };
|
|
41
|
+
throw new Error(`The "${spec.name}" adapter has no command to spawn.`);
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
name: spec.name,
|
|
45
|
+
requiredEnv: spec.requiredEnv,
|
|
46
|
+
isolationEnv: spec.isolationEnv,
|
|
47
|
+
async ensureInstalled(_logger) {
|
|
48
|
+
await doResolve();
|
|
49
|
+
},
|
|
50
|
+
async run(input) {
|
|
51
|
+
// 1. Defensive: resolve if pre-flight was skipped (e.g. direct use)
|
|
52
|
+
if (spec.cliCommand && !resolved) {
|
|
53
|
+
await doResolve();
|
|
54
|
+
}
|
|
55
|
+
// 2. Pre-spawn side effects
|
|
56
|
+
await spec.prepare?.({
|
|
57
|
+
input,
|
|
58
|
+
workingDirectory: input.workingDirectory,
|
|
59
|
+
env: input.env,
|
|
60
|
+
});
|
|
61
|
+
// 3. Resolve the command
|
|
62
|
+
const resolveFn = spec.resolveCommand ?? defaultResolveCommand;
|
|
63
|
+
const { command, prefixArgs } = resolveFn(input, resolved);
|
|
64
|
+
// 4. Build args
|
|
65
|
+
const args = spec.buildArgs(input);
|
|
66
|
+
const startTime = new Date();
|
|
67
|
+
const state = spec.initialState();
|
|
68
|
+
const transcript = [];
|
|
69
|
+
const estimator = createTokenEstimator(input.onTokenProgress);
|
|
70
|
+
const rawOutput = input.captureRawOutput ? [] : undefined;
|
|
71
|
+
const streamCtx = {
|
|
72
|
+
state,
|
|
73
|
+
transcript,
|
|
74
|
+
feedAssistantText: (text) => estimator.addText(text),
|
|
75
|
+
};
|
|
76
|
+
// 5. Spawn
|
|
77
|
+
const child = spawn(command, [...prefixArgs, ...args], {
|
|
78
|
+
cwd: input.workingDirectory,
|
|
79
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
80
|
+
env: input.env ?? { ...process.env },
|
|
81
|
+
});
|
|
82
|
+
child.stdin?.end();
|
|
83
|
+
// 6. Cleanup handler for Ctrl-C
|
|
84
|
+
input.registerCleanup?.(() => {
|
|
85
|
+
child.kill("SIGTERM");
|
|
86
|
+
});
|
|
87
|
+
// 7. Register close listener BEFORE reading stdout (ordering matters)
|
|
88
|
+
const exitPromise = new Promise((resolve) => {
|
|
89
|
+
child.on("close", (code) => resolve(code ?? 1));
|
|
90
|
+
});
|
|
91
|
+
// 8. Buffer stderr with a size cap
|
|
92
|
+
let stderr = "";
|
|
93
|
+
child.stderr?.on("data", (data) => {
|
|
94
|
+
if (stderr.length < maxStderrBytes) {
|
|
95
|
+
stderr += data.toString();
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
// 9. Timeout → SIGTERM → SIGKILL, with proper timer cleanup
|
|
99
|
+
let timedOut = false;
|
|
100
|
+
let killTimer;
|
|
101
|
+
const outerTimer = setTimeout(() => {
|
|
102
|
+
timedOut = true;
|
|
103
|
+
child.kill("SIGTERM");
|
|
104
|
+
killTimer = setTimeout(() => child.kill("SIGKILL"), SIGTERM_TO_SIGKILL_MS);
|
|
105
|
+
}, timeoutMs);
|
|
106
|
+
child.on("close", () => {
|
|
107
|
+
if (killTimer)
|
|
108
|
+
clearTimeout(killTimer);
|
|
109
|
+
});
|
|
110
|
+
// 10. Stream stdout — capture spec locally so TS narrowing survives closures
|
|
111
|
+
const streamSpec = spec.streamConfig;
|
|
112
|
+
try {
|
|
113
|
+
if (streamSpec.mode === "lines") {
|
|
114
|
+
const stdout = child.stdout;
|
|
115
|
+
if (stdout) {
|
|
116
|
+
const rl = createInterface({ input: stdout });
|
|
117
|
+
try {
|
|
118
|
+
for await (const line of rl) {
|
|
119
|
+
if (!line.trim())
|
|
120
|
+
continue;
|
|
121
|
+
rawOutput?.push(line);
|
|
122
|
+
streamSpec.onLine(line, streamCtx);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
// Stream error — process may have been killed
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
child.stdout?.on("data", (data) => {
|
|
132
|
+
const chunk = data.toString();
|
|
133
|
+
rawOutput?.push(chunk);
|
|
134
|
+
estimator.addText(chunk);
|
|
135
|
+
streamSpec.onChunk(chunk, streamCtx);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
finally {
|
|
140
|
+
// Flush on lines mode before awaiting exit; aggregate mode flushes
|
|
141
|
+
// after exit so data has fully drained (see below).
|
|
142
|
+
if (streamSpec.mode === "lines") {
|
|
143
|
+
try {
|
|
144
|
+
streamSpec.onEnd?.(streamCtx);
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// Never let a faulty flush hook mask the primary outcome
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
clearTimeout(outerTimer);
|
|
151
|
+
}
|
|
152
|
+
// 11. Wait for process exit
|
|
153
|
+
const exitCode = await exitPromise;
|
|
154
|
+
const endTime = new Date();
|
|
155
|
+
// Aggregate: run onEnd after data has drained (close fires after stdout).
|
|
156
|
+
if (streamSpec.mode === "aggregate") {
|
|
157
|
+
try {
|
|
158
|
+
streamSpec.onEnd?.(streamCtx);
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Never let a faulty flush hook mask the primary outcome
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// 12. Timeout path — never calls getResult
|
|
165
|
+
if (timedOut) {
|
|
166
|
+
return {
|
|
167
|
+
transcript,
|
|
168
|
+
result: null,
|
|
169
|
+
rawOutput,
|
|
170
|
+
metadata: {
|
|
171
|
+
startTime: startTime.toISOString(),
|
|
172
|
+
endTime: endTime.toISOString(),
|
|
173
|
+
durationMs: endTime.getTime() - startTime.getTime(),
|
|
174
|
+
exitCode,
|
|
175
|
+
error: `Agent timed out after ${timeoutMs / 1000}s`,
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
// 13. Build result + metadata overrides
|
|
180
|
+
const extracted = spec.getResult({
|
|
181
|
+
state,
|
|
182
|
+
transcript,
|
|
183
|
+
exitCode,
|
|
184
|
+
stderr,
|
|
185
|
+
startTime,
|
|
186
|
+
endTime,
|
|
187
|
+
});
|
|
188
|
+
// 14. Error precedence
|
|
189
|
+
let error = extracted.metadata?.error;
|
|
190
|
+
if (!error && exitCode !== 0 && extracted.result === null) {
|
|
191
|
+
error = stderr || "Agent process exited with non-zero code";
|
|
192
|
+
}
|
|
193
|
+
// 15. Merge metadata
|
|
194
|
+
const metadata = {
|
|
195
|
+
startTime: startTime.toISOString(),
|
|
196
|
+
endTime: endTime.toISOString(),
|
|
197
|
+
durationMs: endTime.getTime() - startTime.getTime(),
|
|
198
|
+
exitCode,
|
|
199
|
+
...extracted.metadata,
|
|
200
|
+
...(error ? { error } : {}),
|
|
201
|
+
};
|
|
202
|
+
const result = {
|
|
203
|
+
transcript,
|
|
204
|
+
result: extracted.result,
|
|
205
|
+
rawOutput,
|
|
206
|
+
metadata,
|
|
207
|
+
};
|
|
208
|
+
return result;
|
|
209
|
+
},
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=agent-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-adapter.js","sourceRoot":"","sources":["../../../src/adapters/base/agent-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,mBAAmB,CAAC;AASvE,wBAAgB,uBAAuB,IAAI,YAAY,CA2FtD"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import * as path from "node:path";
|
|
2
|
+
import { createAgentAdapter } from "./base/agent-adapter.js";
|
|
3
|
+
import { writeClaudeMcpConfig } from "./utils/mcp.js";
|
|
4
|
+
import { writeClaudeSkills } from "./utils/skills.js";
|
|
5
|
+
export function createClaudeCodeAdapter() {
|
|
6
|
+
return createAgentAdapter({
|
|
7
|
+
name: "claude-code",
|
|
8
|
+
cliCommand: "claude",
|
|
9
|
+
requiredEnv: () => ["ANTHROPIC_API_KEY"],
|
|
10
|
+
isolationEnv: (workspace) => ({
|
|
11
|
+
CLAUDE_CONFIG_DIR: path.join(workspace, ".claude"),
|
|
12
|
+
CLAUDE_CODE_DISABLE_AUTO_MEMORY: "1",
|
|
13
|
+
DISABLE_AUTOUPDATER: "1",
|
|
14
|
+
DISABLE_TELEMETRY: "1",
|
|
15
|
+
}),
|
|
16
|
+
prepare: (ctx) => {
|
|
17
|
+
// Claude Code discovers .mcp.json in the workspace root
|
|
18
|
+
if (ctx.input.mcpServers && Object.keys(ctx.input.mcpServers).length > 0) {
|
|
19
|
+
writeClaudeMcpConfig(ctx.workingDirectory, ctx.input.mcpServers);
|
|
20
|
+
}
|
|
21
|
+
// Claude Code discovers .claude/skills/ in the workspace
|
|
22
|
+
if (ctx.input.resolvedSkills?.length) {
|
|
23
|
+
writeClaudeSkills(ctx.workingDirectory, ctx.input.resolvedSkills);
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
buildArgs: (input) => {
|
|
27
|
+
const flags = input.config.flags ?? {};
|
|
28
|
+
// Default dangerously-skip-permissions to true — AXIS runs agents headlessly
|
|
29
|
+
const skipPermissions = flags["dangerously-skip-permissions"] ?? true;
|
|
30
|
+
const args = ["-p", input.prompt, "--output-format", "stream-json", "--verbose"];
|
|
31
|
+
if (skipPermissions)
|
|
32
|
+
args.push("--dangerously-skip-permissions");
|
|
33
|
+
if (input.config.model)
|
|
34
|
+
args.push("--model", input.config.model);
|
|
35
|
+
for (const [key, value] of Object.entries(flags)) {
|
|
36
|
+
if (key === "dangerously-skip-permissions")
|
|
37
|
+
continue;
|
|
38
|
+
if (value === true) {
|
|
39
|
+
args.push(`--${key}`);
|
|
40
|
+
}
|
|
41
|
+
else if (value !== false) {
|
|
42
|
+
args.push(`--${key}`, String(value));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return args;
|
|
46
|
+
},
|
|
47
|
+
initialState: () => ({ resultMessage: null }),
|
|
48
|
+
streamConfig: {
|
|
49
|
+
mode: "lines",
|
|
50
|
+
onLine: (line, ctx) => {
|
|
51
|
+
let msg;
|
|
52
|
+
try {
|
|
53
|
+
msg = JSON.parse(line);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (msg.type === "result") {
|
|
59
|
+
ctx.state.resultMessage = msg;
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
feedStreamText(msg, ctx.feedAssistantText);
|
|
63
|
+
const entry = mapToTranscriptEntry(msg);
|
|
64
|
+
if (entry)
|
|
65
|
+
ctx.transcript.push(entry);
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
getResult: (ctx) => {
|
|
69
|
+
const r = ctx.state.resultMessage;
|
|
70
|
+
const usage = r?.usage;
|
|
71
|
+
return {
|
|
72
|
+
result: r?.result ?? null,
|
|
73
|
+
metadata: {
|
|
74
|
+
// Claude emits its own duration_ms in the result message; prefer it over wall clock
|
|
75
|
+
durationMs: r?.duration_ms ?? ctx.endTime.getTime() - ctx.startTime.getTime(),
|
|
76
|
+
totalCostUsd: r?.total_cost_usd,
|
|
77
|
+
sessionId: r?.session_id,
|
|
78
|
+
tokenUsage: usage
|
|
79
|
+
? {
|
|
80
|
+
input: usage.input_tokens ?? 0,
|
|
81
|
+
output: usage.output_tokens ?? 0,
|
|
82
|
+
cacheReadInput: usage.cache_read_input_tokens,
|
|
83
|
+
}
|
|
84
|
+
: undefined,
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Feed textual content from stream events to the token estimator so the live
|
|
92
|
+
* counter keeps moving during tool execution, not just assistant messages.
|
|
93
|
+
*
|
|
94
|
+
* Claude Code events:
|
|
95
|
+
* - `assistant` → `message.content[].text` blocks (assistant reasoning/responses)
|
|
96
|
+
* - `user` → `message.content[].text` blocks (tool results fed back to the model)
|
|
97
|
+
*/
|
|
98
|
+
function feedStreamText(msg, addText) {
|
|
99
|
+
if (msg.type !== "assistant" && msg.type !== "user")
|
|
100
|
+
return;
|
|
101
|
+
const message = msg.message;
|
|
102
|
+
const content = message?.content;
|
|
103
|
+
if (!Array.isArray(content))
|
|
104
|
+
return;
|
|
105
|
+
for (const block of content) {
|
|
106
|
+
if (block && typeof block === "object") {
|
|
107
|
+
const b = block;
|
|
108
|
+
if (b.type === "text" && typeof b.text === "string") {
|
|
109
|
+
addText(b.text);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function mapToTranscriptEntry(msg) {
|
|
115
|
+
const type = msg.type;
|
|
116
|
+
// Skip streaming/progress events — not meaningful for transcript
|
|
117
|
+
if (type === "stream_event" || type === "tool_progress") {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
type: mapMessageType(type),
|
|
122
|
+
timestamp: new Date().toISOString(),
|
|
123
|
+
content: msg,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
function mapMessageType(claudeType) {
|
|
127
|
+
switch (claudeType) {
|
|
128
|
+
case "assistant":
|
|
129
|
+
return "assistant";
|
|
130
|
+
case "user":
|
|
131
|
+
return "tool_result";
|
|
132
|
+
case "system":
|
|
133
|
+
return "system";
|
|
134
|
+
default:
|
|
135
|
+
return "system";
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=claude-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../src/adapters/claude-code.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AgentAdapter } from "../types/agent.js";
|
|
2
|
+
/**
|
|
3
|
+
* SDK-based Claude adapter. Uses `claude-agent-acp` — an ACP bridge built
|
|
4
|
+
* on the official Claude Agent SDK — to communicate with Claude via the
|
|
5
|
+
* Agent Client Protocol over stdio.
|
|
6
|
+
*
|
|
7
|
+
* MCP servers are passed through the ACP `session/new` call rather than
|
|
8
|
+
* written to .mcp.json in the workspace.
|
|
9
|
+
*/
|
|
10
|
+
export declare function createClaudeSdkAdapter(): AgentAdapter;
|
|
11
|
+
//# sourceMappingURL=claude-sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-sdk.d.ts","sourceRoot":"","sources":["../../src/adapters/claude-sdk.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,IAAI,YAAY,CAoCrD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as path from "node:path";
|
|
2
|
+
import { createAcpBasedAdapter } from "./base/acp-adapter.js";
|
|
3
|
+
import { writeClaudeSkills } from "./utils/skills.js";
|
|
4
|
+
/**
|
|
5
|
+
* SDK-based Claude adapter. Uses `claude-agent-acp` — an ACP bridge built
|
|
6
|
+
* on the official Claude Agent SDK — to communicate with Claude via the
|
|
7
|
+
* Agent Client Protocol over stdio.
|
|
8
|
+
*
|
|
9
|
+
* MCP servers are passed through the ACP `session/new` call rather than
|
|
10
|
+
* written to .mcp.json in the workspace.
|
|
11
|
+
*/
|
|
12
|
+
export function createClaudeSdkAdapter() {
|
|
13
|
+
return createAcpBasedAdapter({
|
|
14
|
+
name: "claude-sdk",
|
|
15
|
+
cliCommand: "claude-agent-acp",
|
|
16
|
+
requiredEnv: () => ["ANTHROPIC_API_KEY"],
|
|
17
|
+
isolationEnv: (workspace) => ({
|
|
18
|
+
CLAUDE_CONFIG_DIR: path.join(workspace, ".claude"),
|
|
19
|
+
CLAUDE_CODE_DISABLE_AUTO_MEMORY: "1",
|
|
20
|
+
DISABLE_AUTOUPDATER: "1",
|
|
21
|
+
DISABLE_TELEMETRY: "1",
|
|
22
|
+
}),
|
|
23
|
+
buildArgs: (input) => {
|
|
24
|
+
const args = [];
|
|
25
|
+
if (input.config.model)
|
|
26
|
+
args.push("--model", input.config.model);
|
|
27
|
+
const flags = input.config.flags ?? {};
|
|
28
|
+
for (const [key, value] of Object.entries(flags)) {
|
|
29
|
+
if (value === true) {
|
|
30
|
+
args.push(`--${key}`);
|
|
31
|
+
}
|
|
32
|
+
else if (value !== false) {
|
|
33
|
+
args.push(`--${key}`, String(value));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return args;
|
|
37
|
+
},
|
|
38
|
+
prepare: (ctx) => {
|
|
39
|
+
// Skills are file-based — write them so the agent SDK discovers them
|
|
40
|
+
if (ctx.input.resolvedSkills?.length) {
|
|
41
|
+
writeClaudeSkills(ctx.workingDirectory, ctx.input.resolvedSkills);
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=claude-sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-sdk.js","sourceRoot":"","sources":["../../src/adapters/claude-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,qBAAqB,CAAC;QAC3B,IAAI,EAAE,YAAY;QAClB,UAAU,EAAE,kBAAkB;QAE9B,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,mBAAmB,CAAC;QAExC,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC5B,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;YAClD,+BAA+B,EAAE,GAAG;YACpC,mBAAmB,EAAE,GAAG;YACxB,iBAAiB,EAAE,GAAG;SACvB,CAAC;QAEF,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACnB,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK;gBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEjE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YACvC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnB,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;gBACxB,CAAC;qBAAM,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;oBAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACf,qEAAqE;YACrE,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC;gBACrC,iBAAiB,CAAC,GAAG,CAAC,gBAAgB,EAAE,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAA+B,MAAM,mBAAmB,CAAC;AAUnF,wBAAgB,kBAAkB,IAAI,YAAY,CA2EjD"}
|