@pcamarajr/scout 0.6.0 → 0.7.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.
package/README.md CHANGED
@@ -1,281 +1,117 @@
1
1
  # 🔭 Scout
2
2
 
3
- Self-healing browser QA. Scenarios written in **natural language** as versioned `.scout.md` files, verified by an **AI agent** in a real browser (Playwright), and recorded as a **deterministic script** that runs cheaply and quickly in CI — AI only kicks in when the script breaks.
3
+ **Describe a test in plain English. Scout verifies it in a real browser, then replays it for free, forever.**
4
4
 
5
- > Status: functional POC.
5
+ [![npm](https://img.shields.io/npm/v/@pcamarajr/scout.svg)](https://www.npmjs.com/package/@pcamarajr/scout)
6
+ [![license](https://img.shields.io/npm/l/@pcamarajr/scout.svg)](./LICENSE)
6
7
 
7
- ## Why not just Playwright? Why not just AI?
8
+ Scout is self-healing browser QA. You write a scenario in one sentence; an AI agent drives a real browser (Playwright) to verify it and records a deterministic script. Every run after that is pure replay — no LLM, fast and free — and AI only steps back in when the UI changes and the script breaks.
8
9
 
9
- | | Pure Playwright | Pure AI | Scout (hybrid) |
10
- |---|---|---|---|
11
- | Authoring | expensive (code + selectors) | cheap (1 sentence) | cheap (1 sentence) |
12
- | Cost per CI run | ~zero | $$ + slow | ~zero (replay) |
13
- | Resilience to UI changes | breaks | adapts | breaks AI re-verifies and re-records |
14
- | Judges behavior ("paywall MUST NOT appear") | only what was coded | yes | yes |
10
+ - ✍️ **Author in one sentence** no selectors, no code. Just the flow and what should happen.
11
+ - 🤖 **Verified in a real browser** — an agent judges behavior ("the paywall must *not* appear"), not just clicks.
12
+ - **Replays for free** recorded runs are pure Playwright. ~zero cost, seconds per scenario, CI-ready.
13
+ - 🔧 **Self-heals** when the UI changes, AI re-verifies and re-records; you review the diff.
14
+ - 🧠 **Works with Claude, Gemini, or OpenAI** zero-config with Claude Code; one env var for the rest.
15
15
 
16
- **Scenario lifecycle:**
16
+ ## How it works
17
17
 
18
18
  ```
19
- scout create "Paywall free" -f paywall -c "Open ep 3 of series X without login; paywall should appear with signup CTA"
20
- (writes a `## Paywall free` section into .scout/specs/paywall.scout.md)
21
-
22
- scout go ──── 1st run: AI agent runs in browser, judges (verified/failed/partial/blocked)
23
- and records .scout/scripts/paywall/paywall-free.json (deterministic steps + assertions)
24
-
25
- CI / subsequent runs: pure Playwright replay, no LLM, seconds per scenario
26
-
27
-
28
- UI changed and replay broke? ── AI re-runs, re-judges, re-records the script (self-healing)
29
- (`--no-heal` disables this, e.g. in CI without API key)
19
+ You write: "On the homepage, search for 'shoes' and results appear."
20
+
21
+ scout go (first run)
22
+ AI agent runs it in a real browser, judges the outcome (verified / failed /),
23
+ and records a deterministic script (steps + assertions).
24
+
25
+ ▼ scout go (every run after)
26
+ Pure Playwright replay — no LLM, seconds per scenario, ~zero cost.
27
+
28
+ UI changed and replay broke?
29
+ AI re-runs, re-judges, re-records the script (self-healing). You review the diff.
30
30
  ```
31
31
 
32
- ## Quickstart
33
-
34
- ```bash
35
- npm install @pcamarajr/scout # or npm link during POC
36
- npx playwright install chromium # browser engine
37
-
38
- scout init # creates scout.config.json + .scout/specs/
39
- scout create "Login with Google" \
40
- -f auth \
41
- -c "On logged-out home, click Sign In; login page should show Google and email/password options" \
42
- -p anon
43
- scout go # 1st run = AI (requires Anthropic credentials)
44
- scout go # subsequent runs = deterministic replay
45
- scout report # markdown ready to embed in PR body
46
- ```
47
-
48
- ### AI runner credentials
49
-
50
- - **Local:** if you use Claude Code, the Agent SDK reuses your machine credentials — zero config.
51
- - **CI/headless:** export `ANTHROPIC_API_KEY`. The SDK is self-contained (Claude Code CLI not required).
52
- - Deterministic replay **does not use LLM** — in CI without a key, use `scout go --no-heal` (failure becomes ❌ in the report instead of healing).
32
+ | | Pure Playwright | Pure AI | **Scout** |
33
+ |---|---|---|---|
34
+ | Authoring | code + selectors | one sentence | **one sentence** |
35
+ | Cost per CI run | ~zero | $$ + slow | **~zero (replay)** |
36
+ | Survives UI changes | breaks | adapts | **breaks → AI re-records** |
37
+ | Judges behavior | only what you coded | yes | **yes** |
53
38
 
54
- ## Scenarios are files (`.scout.md`)
39
+ ## Quickstart try it on any live URL (~2 min)
55
40
 
56
- Scenarios live as markdown under `.scout/specs/**/*.scout.md` **one file per feature/component**, versioned and reviewed like the rest of your tests. The markdown is the **source of truth and a pure input**: a run never writes back to it. Status and last-run derive from `.scout/runs/` instead, so the spec diff only ever reflects an intent change, never run noise. The layout mirrors the Playwright Agents test-plan format, with YAML frontmatter as a scout superset.
41
+ No codebase required. Point Scout at a site you already have and watch it verify a real flow.
57
42
 
58
- ```markdown
59
- ---
60
- feature: Paywall # optional; defaults to the filename
61
- profile: anon # default auth profile for scenarios below
62
- tags: [monetization] # optional
63
- ---
43
+ ```bash
44
+ npm install -g @pcamarajr/scout # or: npx @pcamarajr/scout <command>
45
+ npx playwright install chromium # the browser engine
64
46
 
65
- ## Free user hits paywall on ep 3
66
- Open ep 3 of series X without login; paywall appears with a signup CTA.
47
+ scout init --base-url https://your-app.com # or run `scout init` and answer the prompt
48
+ scout doctor # check your AI credentials (see below)
67
49
 
68
- ## Subscriber bypasses paywall
69
- profile: qa # per-scenario override (also: notes, tags)
50
+ scout create "Homepage search" \
51
+ -f home \
52
+ -c "On the homepage, search for 'shoes'; a list of results appears"
70
53
 
71
- Logged-in subscriber opens ep 3; plays with no paywall.
54
+ scout go # first run: the AI agent verifies it in a real browser
55
+ scout go # again: deterministic replay, no LLM, seconds
72
56
  ```
73
57
 
74
- - Each `##` heading is one scenario; its **logical slug** is `<file>/<scenario>` (e.g. `paywall/free-user-hits-paywall-on-ep-3`), unique across the suite.
75
- - Optional `profile`/`notes`/`tags` lines right after a heading override the file-level defaults.
76
- - Author by hand, or via `scout create <name> -f <feature> -c <text>` / the `scout_create_scenario` MCP tool.
58
+ That's it you have a verified test that replays for free.
77
59
 
78
- ### Migrating from a legacy `scenarios.json`
60
+ ### AI credentials
79
61
 
80
- Older scouts kept a single `.scout/scenarios.json`. Convert it once:
62
+ The first `scout go` needs an AI provider. Run `scout doctor` anytime to check.
81
63
 
82
- ```bash
83
- scout migrate # one .scout/specs/<slug>.scout.md per scenario, relocates cached scripts, backs up the JSON
84
- ```
64
+ - **Claude Code (zero-config) — the happy path.** If you're signed in to [Claude Code](https://claude.com/claude-code), Scout reuses that session automatically. Nothing to set.
65
+ - **Or an API key:** `export ANTHROPIC_API_KEY=…` (Claude), `export GEMINI_API_KEY=…` (Gemini), or `export OPENAI_API_KEY=…` (OpenAI). Scout picks the provider from the `model` in `scout.config.json`.
85
66
 
86
- It's idempotent and preserves cached scripts (so replay still works without re-recording). Re-run `scout go` once afterward to repopulate run status. Review the generated `feature:` frontmatter and delete the `.scout/scenarios.json.bak` when happy.
67
+ Full provider setup [`docs/providers/`](./docs/providers). Deterministic **replay never uses an LLM**, so CI needs no credentials (`scout go --no-heal`).
87
68
 
88
- ## Auth profiles (storageState)
69
+ ## Use it in your codebase
89
70
 
90
- Authenticated flows use sessions captured once per environment:
91
-
92
- ```jsonc
93
- // scout.config.json
94
- {
95
- "baseUrl": "http://localhost:3000",
96
- "model": "claude-sonnet-4-6",
97
- "profiles": {
98
- "anon": { "description": "Logged-out session" },
99
- "subscriber": { "description": "User with active subscription", "env": ["QA_SUB_EMAIL", "QA_SUB_PASSWORD"] },
100
- "free-no-coins": { "description": "Free user with no coin balance" }
101
- }
102
- }
103
- ```
71
+ Same flow, committed alongside your app the suite travels with the branch and runs as a PR gate.
104
72
 
105
73
  ```bash
106
- scout login subscriber # opens headed browser, log in, press Enter → saves .scout/state/subscriber.json (gitignored)
74
+ cd your-project
75
+ npm install --save-dev @pcamarajr/scout
76
+ npx playwright install chromium
77
+ scout init # writes scout.config.json, .scout/, and AI agent files (below)
107
78
  ```
108
79
 
109
- In CI, generate the storageState in a setup step (login via script) or let the agent log in using `$ENV:QA_SUB_EMAIL` / `$ENV:QA_SUB_PASSWORD` — placeholders are resolved from the environment at runtime; **secrets never enter the committed script or pass through the LLM**.
110
-
111
- ## Worktrees and environments
112
-
113
- Everything is relative to the project directory and the target can be overridden per run — two worktrees run in parallel without colliding:
80
+ - `.scout/specs/*.scout.md` (your scenarios) and `.scout/scripts/` are **committed**; runs and sessions are gitignored.
81
+ - Gate a PR on it: `scout report --check` exits non-zero if any scenario isn't `verified`. → [CI setup](./docs/environments.md)
114
82
 
115
- ```bash
116
- scout go --base-url http://localhost:3001 # worktree B pointing to its ephemeral server
117
- SCOUT_BASE_URL=http://localhost:3001 scout go # same, via env
118
- SCOUT_BASE_URL=https://staging.myapp.com scout go --no-heal # against staging
119
- ```
83
+ ## Use it with your AI agent
120
84
 
121
- Precedence: `--base-url` flag (or the `baseUrl` param of the `scout_run` MCP tool) > `SCOUT_BASE_URL` > `baseUrl` in `scout.config.json`. Recorded scripts store navigation **relative to the baseUrl in effect at recording time**, so a script recorded against `:3000` replays unchanged against `:3001` or staging.
85
+ `scout init` also scaffolds onboarding for coding agents, so the agent that builds a feature can write and verify its test:
122
86
 
123
- - `.scout/specs/` (the `.scout.md` suite) and `.scout/scripts/` are **committed** the suite travels with the branch.
124
- - `.scout/runs/` and `.scout/state/` are **gitignored** artifacts and sessions are per-machine.
87
+ - **`AGENTS.md`** (repo root) — the canonical guide; the source of truth for how an agent uses Scout.
88
+ - **`.claude/skills/scout/SKILL.md`** + **`.cursor/rules/scout.mdc`** point your agent at it automatically.
89
+ - **MCP server** (`scout mcp`) — exposes `scout_create_scenario`, `scout_run`, `scout_report`, … so the agent runs the loop end-to-end.
125
90
 
126
- ## Per-run artifacts
91
+ The loop: you describe a flow → the agent writes the `.scout.md` → runs `scout go` → reports the **real** verdict (never claims success without running it) → iterates with you until it's green. Full guide → [`docs/ai-agents.md`](./docs/ai-agents.md).
127
92
 
128
- Each run records in `.scout/runs/<timestamp>-<slug>/`:
93
+ ## Docs
129
94
 
130
- | File | What |
95
+ | Topic | |
131
96
  |---|---|
132
- | `trace.zip` | Playwright trace — screenshots, DOM snapshots, network, console (`npx playwright show-trace trace.zip`) |
133
- | `*.png` | Evidence screenshots (captured by the agent or at the end of replay/failure) |
134
- | `report.md` | Verdict + reason + recorded script + evidence |
135
- | `result.json` | Structured result (consumable by automation) |
136
- | `transcript.md` | Agent reasoning (AI runs only) |
137
- | `video.mp4` | Paced preview of the verified flow with baked step labels + verdict card — only with `--record-video` (see below) |
138
- | `video.timeline.json` | Step→timestamp map the overlays are burned from |
139
-
140
- ### Preview video (`--record-video`)
141
-
142
- Opt-in, off by default (zero overhead otherwise). When enabled, a **verified** scenario gets one extra, deterministic replay — recorded, paced for human viewing, and rendered by `ffmpeg` into a GitHub-playable MP4 with the scenario title, per-step captions, and a green/red verdict card burned in. It's meant as a **rich PR artifact**: a reviewer plays it and sees the implemented feature working, no tooling required.
143
-
144
- - Always sourced from the clean deterministic replay — never the exploratory AI run.
145
- - Pacing via `videoSpeed` in `scout.config.json` (`(0,1]`, default `0.4` = slower; `1` = natural speed).
146
- - A verified scenario never yields zero video: if the paced replay trips on timing the authoritative run handled fine, scout silently records a non-paced fallback clip instead. The verdict is never affected.
147
- - Requires `ffmpeg` on `PATH` (or `FFMPEG_PATH`). Missing it isn't fatal — scout keeps the raw `.webm` and warns with an install hint. Font autodetected, or set `SCOUT_VIDEO_FONT` to a `.ttf`.
148
- - Enable per-run with `--record-video`, via `SCOUT_RECORD_VIDEO=1`, or `"recordVideo": true` in the config.
149
-
150
- ## MCP — usage by coding agents (Claude Code, cloud sessions)
151
-
152
- Scout's main flow is to be called **by the agent that developed the feature**: the agent writes the scenario (in NL — never the script; the script is born from the verified execution) and triggers the verification.
153
-
154
- ```jsonc
155
- // .mcp.json of the target project
156
- {
157
- "mcpServers": {
158
- "scout": { "command": "npx", "args": ["scout", "mcp"] }
159
- }
160
- }
161
- ```
162
-
163
- Exposed tools: `scout_list_scenarios`, `scout_create_scenario`, `scout_run`, `scout_report`, `scout_get_run_report`.
164
-
165
- ## CI (GitHub Actions)
166
-
167
- ```yaml
168
- qa-browser:
169
- runs-on: ubuntu-latest
170
- steps:
171
- - uses: actions/checkout@v4
172
- - uses: actions/setup-node@v4
173
- with: { node-version: 24 }
174
- - run: npm ci && npx playwright install --with-deps chromium
175
- - run: npm run start:test-server & # app running
176
- - run: npx scout go --no-heal # pure replay, no LLM, exit 1 on failure
177
- env: { SCOUT_BASE_URL: "http://localhost:3000" }
178
- - run: npx scout report >> "$GITHUB_STEP_SUMMARY"
179
- if: always()
180
- - uses: actions/upload-artifact@v4 # traces + screenshots in the action run
181
- if: always()
182
- with: { name: scout-runs, path: .scout/runs/ }
183
- ```
184
-
185
- With heal in CI: add `ANTHROPIC_API_KEY` and switch to `npx scout go` — when the UI changes legitimately, the job re-records the script and the `.scout/scripts/` diff shows up for commit (e.g. via PR bot).
186
-
187
- ## Full CLI
188
-
189
- ```
190
- scout init # bootstrap in the project (.scout/specs/ + config)
191
- scout create <name> -f <feature> -c <scenario> [-p profile] [-n notes]
192
- scout list # scenarios + status + 📜 if cached script exists
193
- scout go [-s slug|name] [--ai] [--no-heal] [--headed] [--record-video] [--base-url <url>]
194
- scout report [--json] [--check] # suite summary (markdown default)
195
- scout migrate # legacy scenarios.json → .scout.md specs
196
- scout login <profile> [--base-url <url>] # capture storageState in headed browser
197
- scout mcp # MCP server stdio
198
- ```
199
-
200
- ### `scout report` — markdown, JSON and gate mode
201
-
202
- By default `scout report` prints the markdown suite summary (embeddable in a PR body). Two flags make it consumable by scripts and CI gates — they compose freely:
203
-
204
- ```bash
205
- scout report # markdown summary (default)
206
- scout report --json # machine-readable JSON (below)
207
- scout report --check # exit 1 if ANY scenario is not `verified`, exit 0 otherwise
208
- scout report --json --check # prints the JSON AND sets the exit code
209
- ```
210
-
211
- `--json` shape:
212
-
213
- ```jsonc
214
- {
215
- "scenarios": [
216
- { "slug": "paywall/paywall-free", "name": "Paywall free", "feature": "Paywall", "profile": "anon", "status": "verified", "lastRun": "2026-06-10T12:00:00.000Z" }
217
- ],
218
- "summary": { "total": 4, "verified": 3, "failed": 1, "partial": 0, "blocked": 0, "pending": 0 }
219
- }
220
- ```
221
-
222
- `--check` is the PR-gate primitive: no grepping the markdown for emojis/words. A scenario counts as passing only with status `verified` — `failed`, `partial`, `blocked` and `pending` all fail the check. An empty suite passes vacuously (gate scripts that require scenarios should test `summary.total`).
223
-
224
- ```bash
225
- # typical gate script
226
- npx scout report --check || { echo "Scout gate: non-verified scenarios"; exit 1; }
227
- ```
97
+ | [Writing scenarios](./docs/scenarios.md) | the `.scout.md` format, slugs, per-scenario overrides |
98
+ | [Providers & credentials](./docs/providers) | Claude, Gemini, OpenAI detection order + `scout doctor` |
99
+ | [Auth profiles](./docs/auth.md) | logged-in flows, `scout login`, `$ENV:` secrets |
100
+ | [Environments & CI](./docs/environments.md) | base-URL overrides, worktrees, the PR gate |
101
+ | [Run artifacts](./docs/artifacts.md) | traces, screenshots, the preview video |
102
+ | [AI agents & MCP](./docs/ai-agents.md) | the co-author loop, the scaffolded files, MCP tools |
103
+ | [CLI reference](./docs/cli.md) | every command, `scout report --json/--check` |
104
+ | [Architecture](./docs/architecture.md) | how it works inside + design decisions + limitations |
228
105
 
229
106
  ## Verdicts
230
107
 
231
108
  | | Meaning |
232
109
  |---|---|
233
110
  | ✅ `verified` | All expected behavior confirmed by assertions |
234
- | ❌ `failed` | Broken behavior (the reason says exactly what) |
235
- | ⚠️ `partial` | Partially verified |
111
+ | ❌ `failed` | Broken behavior the reason says what |
112
+ | ⚠️ `partial` | Only part of the expected behavior confirmed |
236
113
  | 🚫 `blocked` | Couldn't reach the flow (app down, login broken) |
237
114
 
238
- ### Runner failure ≠ UI verdict
239
-
240
- An AI run can also die without any verdict — agent ran out of turns, SDK error, dead subprocess. Scout treats that as an **infrastructure failure**, never as a judgment about the app:
241
-
242
- 1. **Forced verdict:** when the agent ends without calling `scout_verdict` (typically `maxTurns` exhausted), Scout resumes the same session with a tiny turn budget and demands a verdict based on what was already observed — a `partial` with context beats a silent death.
243
- 2. **Automatic retry:** if the rescue also fails, the whole AI run is retried once with a fresh browser and agent.
244
- 3. **Honest reporting:** if it still fails, the result is `blocked` with `runnerFailure` set in `result.json` (and flagged in `report.md` and the CLI output: 💥 *runner failure — not a UI judgment*), naming the cause (e.g. "agent exhausted the 40-turn limit") and pointing at the run artifacts. Rerun it instead of debugging the app.
245
-
246
- Every AI run aborts its Agent SDK query on completion (success or failure), so no `claude` subprocess outlives the run.
247
-
248
- ## Architecture
249
-
250
- ```
251
- src/
252
- ├── cli.ts # commander CLI
253
- ├── engine.ts # orchestrates: replay → (failed?) → AI heal → re-record
254
- ├── config.ts # scout.config.json + env overrides
255
- ├── specs.ts # .scout.md parser + slug model + scenario writer
256
- ├── store.ts # .scout/ (specs, scripts, runs)
257
- ├── report.ts # per-run markdown + suite summary
258
- ├── runner/
259
- │ ├── browser.ts # Playwright wrapper: snapshot with refs, trace, screenshots,
260
- │ │ # ref→locator resolution (getByRole when unique, CSS fallback)
261
- │ ├── ai-runner.ts # Claude Agent SDK + in-process browser tools; records steps
262
- │ └── script-runner.ts # deterministic step replay
263
- └── mcp/server.ts # MCP interface (stdio)
264
- ```
265
-
266
- Design decisions:
267
-
268
- - **The agent never writes test code.** It acts in the browser; the script is recorded from actions that actually worked (`getByRole` + accessible name when unique on the page, CSS path as fallback). Eliminates hallucinated selectors.
269
- - **Assertions are tools.** The agent registers each expectation via `browser_assert` — that's what makes the replay a real test, not just a click macro.
270
- - **Recorded scripts are pruned before caching.** Agent retries (e.g. re-filling the same field) are deduplicated conservatively: an earlier `fill`/`select` is dropped only when a later one targets the same element and nothing in between (click/press/navigate) could have consumed the value. Clicks are never deduplicated.
271
- - **Trace for debugging, video for humans.** Playwright's trace.zip is the deep-debug artifact (per-action screenshots, DOM, network, console). The opt-in preview video is a different job: a low-friction, GitHub-playable clip a reviewer watches in the PR to see the feature working — sourced from the clean replay and paced + annotated so it's worth watching, not "video for the sake of video".
272
- - **Scenarios are versioned source, not database rows.** One `.scout.md` per feature, reviewed in PRs like a `.test.ts`; the spec is a pure input that a run never mutates (status derives from `.scout/runs/`). The recorded JSON script is a derived sidecar — clean diffs, no run noise in history.
273
- - **No server/dashboard.** State is the filesystem in the target repo; report is markdown. Pluggable into any project with `npm i` + 2 files.
274
-
275
- ## Known POC limitations
115
+ ---
276
116
 
277
- - Replay runs sequentially (no sharding/parallelism).
278
- - Snapshot covers interactive elements + text; canvas/video are verified indirectly (element presence, surrounding UI state).
279
- - Flows that depend on reading email are not verifiable — covers UI + redirects.
280
- - Heal re-records the script locally; committing the updated script is manual (intentional: script diff is reviewable).
281
- - Fixed mobile viewport (390×844) — multi-viewport is a simple enhancement (per-scenario variant).
117
+ Early but functional, and published on npm. Issues and PRs welcome — see [`docs/architecture.md`](./docs/architecture.md) for internals. MIT licensed.
package/dist/cli.js CHANGED
@@ -5,6 +5,8 @@ import readline from "node:readline";
5
5
  import { Command } from "commander";
6
6
  import { chromium } from "playwright";
7
7
  import { CONFIG_FILE, SCOUT_DIR, loadConfig } from "./config.js";
8
+ import { detectAiCredentials, inferProvider } from "./credentials.js";
9
+ import { resolveEngineKind } from "./runner/engines/index.js";
8
10
  import { runScenario } from "./engine.js";
9
11
  import { runInit } from "./init.js";
10
12
  import { buildReport, renderSummary, scenarioStatus } from "./report.js";
@@ -163,7 +165,7 @@ program
163
165
  });
164
166
  program
165
167
  .command("login <profile>")
166
- .description("Opens headed browser to capture a profile session (storageState)")
168
+ .description("Captures YOUR APP's logged-in session (storageState) via a headed browser. This is your application's auth, NOT AI credentials / model provider auth — for those, run `scout doctor`.")
167
169
  .option("--base-url <url>", "Target app URL (precedence: flag > SCOUT_BASE_URL > scout.config.json)")
168
170
  .action(async (profileName, opts) => {
169
171
  const config = loadConfig(process.cwd(), { baseUrl: opts.baseUrl });
@@ -189,6 +191,124 @@ program
189
191
  await browser.close();
190
192
  console.log(`✓ Session saved to ${statePath} (gitignored).`);
191
193
  });
194
+ /**
195
+ * Cheapest correct proof that an Anthropic credential actually works: a 1-turn
196
+ * agent query with a trivial prompt. It authenticates via the SAME path the
197
+ * real run uses (ANTHROPIC_API_KEY / CLAUDE_CODE_OAUTH_TOKEN / Claude Code
198
+ * session — including the macOS keychain-backed session the file probe can't
199
+ * see), so a green ping here means a real run will authenticate too.
200
+ * Token cost: a one-word system prompt + a one-word reply (a handful of tokens).
201
+ */
202
+ async function livePingAnthropic(model) {
203
+ try {
204
+ const { query } = await import("@anthropic-ai/claude-agent-sdk");
205
+ const controller = new AbortController();
206
+ let ended;
207
+ try {
208
+ for await (const message of query({
209
+ prompt: "Reply with the single word: ok",
210
+ options: {
211
+ model,
212
+ systemPrompt: "You are a connectivity probe. Reply with exactly one word.",
213
+ mcpServers: {},
214
+ allowedTools: [],
215
+ tools: [],
216
+ settingSources: [],
217
+ permissionMode: "bypassPermissions",
218
+ maxTurns: 1,
219
+ abortController: controller,
220
+ },
221
+ })) {
222
+ if (message.type === "result") {
223
+ ended = {
224
+ subtype: message.subtype,
225
+ errors: "errors" in message ? message.errors : undefined,
226
+ };
227
+ break;
228
+ }
229
+ }
230
+ }
231
+ finally {
232
+ controller.abort();
233
+ }
234
+ if (ended && ended.subtype !== "success" && ended.errors?.length) {
235
+ return { ok: false, error: ended.errors.join("; ") };
236
+ }
237
+ return { ok: true };
238
+ }
239
+ catch (error) {
240
+ return { ok: false, error: error instanceof Error ? error.message : String(error) };
241
+ }
242
+ }
243
+ /**
244
+ * Provider-aware live ping for the AI SDK engine (google/openai). Resolves the
245
+ * same provider model the engine would use and runs a 1-step `generateText`
246
+ * asking for the single word "ok". Token cost: a one-word system prompt + a
247
+ * one-word reply (a handful of tokens). Any thrown error (bad/absent key, wrong
248
+ * project, network) is surfaced as the failure reason.
249
+ */
250
+ async function livePingAiSdk(provider, model) {
251
+ try {
252
+ const { generateText } = await import("ai");
253
+ const { resolveModel } = await import("./runner/engines/ai-sdk.js");
254
+ await generateText({
255
+ model: resolveModel(provider, model),
256
+ system: "You are a connectivity probe. Reply with exactly one word.",
257
+ prompt: "Reply with the single word: ok",
258
+ maxOutputTokens: 8,
259
+ });
260
+ return { ok: true };
261
+ }
262
+ catch (error) {
263
+ return { ok: false, error: error instanceof Error ? error.message : String(error) };
264
+ }
265
+ }
266
+ program
267
+ .command("doctor")
268
+ .description("Diagnoses AI credentials (model provider auth) for the configured model — CI-usable exit code")
269
+ .action(async () => {
270
+ const config = loadConfig();
271
+ const provider = inferProvider(config.model);
272
+ const engine = resolveEngineKind(provider, config.engine);
273
+ const status = detectAiCredentials(provider, { engine });
274
+ console.log(`Model: ${config.model}`);
275
+ console.log(`Provider: ${provider}`);
276
+ console.log(`Engine: ${engine}`);
277
+ if (status.ok) {
278
+ console.log(`Detection: ✓ matched ${status.source}`);
279
+ }
280
+ else if (provider === "anthropic") {
281
+ // The file/env probe missed — but a macOS keychain-backed Claude Code
282
+ // session is invisible to it, yet the SDK can still authenticate. Don't
283
+ // give up here; let the live ping be the authority for Anthropic.
284
+ console.log("Detection: ✗ no credential file or env var found (a macOS keychain session would not show here).");
285
+ }
286
+ else {
287
+ // google/openai have no invisible-credential path: if detection failed,
288
+ // there is nothing to ping. Report remediation and stop.
289
+ console.log(`Detection: ✗ no usable ${provider} credentials found.`);
290
+ console.log(`\n${status.remediation}`);
291
+ process.exit(1);
292
+ }
293
+ process.stdout.write("Live check: pinging the model... ");
294
+ const ping = provider === "anthropic"
295
+ ? await livePingAnthropic(config.model)
296
+ : await livePingAiSdk(provider, config.model);
297
+ if (ping.ok) {
298
+ console.log("✓ credentials valid");
299
+ process.exit(0);
300
+ }
301
+ console.log("✗");
302
+ console.log(`The live check failed: ${ping.error ?? "unknown error"}`);
303
+ // When detection passed, the credentials are present but the live key was
304
+ // rejected (invalid/expired key, wrong project, no quota) — the ping error
305
+ // above is the actionable message. Only fall back to detection remediation
306
+ // when detection itself had something to say.
307
+ const remediation = status.remediation ?? detectAiCredentials(provider, { engine }).remediation;
308
+ if (remediation)
309
+ console.log(`\n${remediation}`);
310
+ process.exit(1);
311
+ });
192
312
  program
193
313
  .command("mcp")
194
314
  .description("Starts the MCP server (stdio) — for Claude Code and cloud coding sessions")
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAmB,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,8EAA8E;AAC9E,+EAA+E;AAC/E,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,4BAA4B,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACzG,CAAC,CAAC,CAAC;AAEH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAwB,CAAC;AAEpH,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,kFAAkF,CAAC;KAC/F,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,8DAA8D,CAAC;KAC3E,MAAM,CAAC,kBAAkB,EAAE,2CAA2C,CAAC;KACvE,MAAM,CAAC,WAAW,EAAE,gDAAgD,EAAE,KAAK,CAAC;KAC5E,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,qEAAqE,CAAC;KAClF,cAAc,CAAC,yBAAyB,EAAE,2DAA2D,CAAC;KACtG,cAAc,CAAC,uBAAuB,EAAE,wDAAwD,CAAC;KACjG,MAAM,CAAC,yBAAyB,EAAE,uCAAuC,CAAC;KAC1E,MAAM,CAAC,qBAAqB,EAAE,2BAA2B,CAAC;KAC1D,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,QAAQ,GAAG,WAAW,CAAC;QAC3B,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,IAAI;QACJ,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,KAAK,EAAE,IAAI,CAAC,KAAK;KAClB,CAAC,CAAC;IACH,OAAO,CAAC,GAAG,CAAC,uBAAuB,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;AACzE,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QACrD,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,IAAI,WAAW,GAAG,CAAC,CAAC;IACvG,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,IAAI,CAAC;KACb,WAAW,CAAC,iFAAiF,CAAC;KAC9F,MAAM,CAAC,2BAA2B,EAAE,uBAAuB,CAAC;KAC5D,MAAM,CAAC,MAAM,EAAE,6CAA6C,EAAE,KAAK,CAAC;KACpE,MAAM,CAAC,WAAW,EAAE,qDAAqD,CAAC;KAC1E,MAAM,CAAC,UAAU,EAAE,+BAA+B,EAAE,KAAK,CAAC;KAC1D,MAAM,CAAC,gBAAgB,EAAE,mEAAmE,EAAE,KAAK,CAAC;KACpG,MAAM,CAAC,kBAAkB,EAAE,qFAAqF,CAAC;KACjH,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IACnG,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ;QAC3B,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ,CAAC;QACzE,CAAC,CAAC,GAAG,CAAC;IACR,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,QAAQ,cAAc,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC;QAC9G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,IAAI,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE;gBACxD,OAAO,EAAE,IAAI,CAAC,EAAE;gBAChB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3H,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,mDAAmD,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5F,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,OAAO,GAAG,GAAG,KAAK,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACzI,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;gBACrC,MAAM,EAAE,CAAC;YACX,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC9E,IAAI,MAAM,CAAC,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3E,MAAM,EAAE,CAAC;QACX,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,mEAAmE,CAAC;KAChF,MAAM,CAAC,QAAQ,EAAE,sDAAsD,EAAE,KAAK,CAAC;KAC/E,MAAM,CAAC,SAAS,EAAE,qDAAqD,EAAE,KAAK,CAAC;KAC/E,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;IACf,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;IACxC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;IAClC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,mGAAmG,CAAC;KAChH,MAAM,CAAC,GAAG,EAAE;IACX,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACrE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAMpD,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnE,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,CAAC;YACV,SAAS;QACX,CAAC;QACD,wEAAwE;QACxE,uEAAuE;QACvE,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QACzG,OAAO,EAAE,CAAC;QACV,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;QACnF,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACzC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YACpC,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IACD,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CACT,cAAc,OAAO,2BAA2B,OAAO,oBAAoB,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,kBAAkB,CAAC,CAAC,CAAC,EAAE,GAAG,CACpI,CAAC;IACF,OAAO,CAAC,GAAG,CACT,gIAAgI,CACjI,CAAC;AACJ,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CACV,uLAAuL,CACxL;KACA,MAAM,CAAC,kBAAkB,EAAE,wEAAwE,CAAC;KACpG,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;IAClC,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,YAAY,WAAW,uBAAuB,WAAW,iBAAiB,CAAC,CAAC;QAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAC5B,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,WAAW,OAAO,CAAC,CAClG,CAAC;IACF,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC,CAAC;IAC/E,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEhC,OAAO,CAAC,GAAG,CAAC,gBAAgB,WAAW,0BAA0B,CAAC,CAAC;IACnE,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACtF,EAAE,CAAC,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;YAC5C,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAChD,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,sBAAsB,SAAS,gBAAgB,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEL;;;;;;;GAOG;AACH,KAAK,UAAU,iBAAiB,CAAC,KAAa;IAC5C,IAAI,CAAC;QACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,IAAI,KAAyD,CAAC;QAC9D,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,KAAK,CAAC;gBAChC,MAAM,EAAE,gCAAgC;gBACxC,OAAO,EAAE;oBACP,KAAK;oBACL,YAAY,EAAE,4DAA4D;oBAC1E,UAAU,EAAE,EAAE;oBACd,YAAY,EAAE,EAAQ;oBACtB,KAAK,EAAE,EAAQ;oBACf,cAAc,EAAE,EAAQ;oBACxB,cAAc,EAAE,mBAA4B;oBAC5C,QAAQ,EAAE,CAAC;oBACX,eAAe,EAAE,UAAU;iBAC5B;aACF,CAAC,EAAE,CAAC;gBACH,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC9B,KAAK,GAAG;wBACN,OAAO,EAAE,OAAO,CAAC,OAAO;wBACxB,MAAM,EAAE,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;qBACzD,CAAC;oBACF,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACtF,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,aAAa,CAC1B,QAAoB,EACpB,KAAa;IAEb,IAAI,CAAC;QACH,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;QACpE,MAAM,YAAY,CAAC;YACjB,KAAK,EAAE,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC;YACpC,MAAM,EAAE,4DAA4D;YACpE,MAAM,EAAE,gCAAgC;YACxC,eAAe,EAAE,CAAC;SACnB,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACtF,CAAC;AACH,CAAC;AAED,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,+FAA+F,CAAC;KAC5G,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAEzD,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC;IAEnC,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,CAAC;SAAM,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QACpC,sEAAsE;QACtE,wEAAwE;QACxE,kEAAkE;QAClE,OAAO,CAAC,GAAG,CAAC,kGAAkG,CAAC,CAAC;IAClH,CAAC;SAAM,CAAC;QACN,wEAAwE;QACxE,yDAAyD;QACzD,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,qBAAqB,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC1D,MAAM,IAAI,GACR,QAAQ,KAAK,WAAW;QACtB,CAAC,CAAC,MAAM,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC;QACvC,CAAC,CAAC,MAAM,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,CAAC;IACvE,0EAA0E;IAC1E,2EAA2E;IAC3E,2EAA2E;IAC3E,8CAA8C;IAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,mBAAmB,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC;IAChG,IAAI,WAAW;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,2EAA2E,CAAC;KACxF,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,UAAU,EAAE,CAAC"}
package/dist/config.d.ts CHANGED
@@ -27,6 +27,13 @@ export interface ScoutConfig {
27
27
  recordVideo?: boolean;
28
28
  /** Preview pacing in (0,1]; <1 = slower so a human can follow. Default 0.4. */
29
29
  videoSpeed?: number;
30
+ /**
31
+ * Agent engine for AI runs. `agent-sdk` (default) uses the trusted
32
+ * @anthropic-ai/claude-agent-sdk; `ai-sdk` uses the Vercel AI SDK. Override
33
+ * with SCOUT_ENGINE. Unset = provider-aware default (agent-sdk for Anthropic,
34
+ * ai-sdk for other providers).
35
+ */
36
+ engine?: "agent-sdk" | "ai-sdk";
30
37
  profiles: Record<string, ScoutProfile>;
31
38
  }
32
39
  export declare const CONFIG_FILE = "scout.config.json";
package/dist/config.js CHANGED
@@ -28,6 +28,9 @@ export function loadConfig(cwd = process.cwd(), overrides = {}) {
28
28
  merged.headless = false;
29
29
  if (process.env.SCOUT_RECORD_VIDEO === "1")
30
30
  merged.recordVideo = true;
31
+ if (process.env.SCOUT_ENGINE === "agent-sdk" || process.env.SCOUT_ENGINE === "ai-sdk") {
32
+ merged.engine = process.env.SCOUT_ENGINE;
33
+ }
31
34
  if (overrides.baseUrl)
32
35
  merged.baseUrl = overrides.baseUrl;
33
36
  if (overrides.recordVideo)
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}