Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
a68377b
chore(runner): restore WIZARD_RUNNER_FLAG_KEY constant
gewenyu99 Jun 26, 2026
b1d8ab7
chore(runner): consolidate model literals onto DEFAULT_AGENT_MODEL
gewenyu99 Jun 26, 2026
79cafb3
feat(runner): central runner plan + anthropic runner seam (#692a)
gewenyu99 Jun 26, 2026
1ad2caf
feat(runner): pi.dev runner — gateway provider + model-from-pair, reg…
gewenyu99 Jun 27, 2026
9fc690c
feat(runner): wizard tools as pi custom tools (#694)
gewenyu99 Jun 27, 2026
8f2decf
feat(runner): fail-closed security parity on the pi runner (#697)
gewenyu99 Jun 27, 2026
c9517dc
feat(runner): Task/todo + controlled subagents on pi (#698)
gewenyu99 Jun 27, 2026
01168ca
perf(pi): steer to native tools, anti-spiral runtime notes, parity tw…
gewenyu99 Jun 27, 2026
dd84209
feat(pi): real PostHog MCP dashboard + scrubbed-env lockdown (#701)
gewenyu99 Jun 27, 2026
fb16a81
feat(pi): harnesses and sequences (#778)
edwinyjlim Jul 2, 2026
b543c29
feat(pi): switchboard interface (#780)
edwinyjlim Jul 2, 2026
978ef73
Merge remote-tracking branch 'origin/main' into mcp-merge
gewenyu99 Jul 2, 2026
064a1ba
feat(pi): --model override, third switchboard axis
gewenyu99 Jul 2, 2026
515e549
test(pi): switchboard snapshot variations as e2e.json data
gewenyu99 Jul 2, 2026
c6fc1ed
test(pi): snapshot driver runs e2e.json variations
gewenyu99 Jul 2, 2026
b4a8409
revert(pi): tui-snapshots back to single-run (workbench contract)
gewenyu99 Jul 2, 2026
6549a9f
fix(pi): make pi runner deps optional so Node 20 keeps installing
gewenyu99 Jul 2, 2026
38a9dcd
docs(pi): explain the lazy @earendil imports (Node 20 support)
gewenyu99 Jul 2, 2026
0059f16
revert(pi): drop Node 20 — the wizard requires Node 22+
gewenyu99 Jul 2, 2026
1cd5e35
fix(pi): resolve model reasoning via a switchboard capability matrix
gewenyu99 Jul 2, 2026
2ef3ef4
feat(switchboard): pair the pi runner with gpt-5-mini + per-model rea…
gewenyu99 Jul 2, 2026
ff5a877
fix(pi): require real SDK init, forbid the maybe-installed require guard
gewenyu99 Jul 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ jobs:
strategy:
fail-fast: false
matrix:
node: ['20.20.0', '22.22.0', 24]
node: ['22.22.0', 24]
steps:
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1
- name: Install pnpm
Expand Down
23 changes: 23 additions & 0 deletions e2e-harness/e2e-profile.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,29 @@ export const DEFAULT_E2E_PROFILE: WizardE2eProfile = {
ask: 'first',
};

/**
* A switchboard configuration to snapshot for a program — the same `profile`/
* `path` run once per variation. Omitted fields fall back to the resolved
* default (linear / anthropic / sonnet), so `{ name: 'default' }` is the
* no-override baseline. The harness maps each field to its `--harness` /
* `--sequence` / `--model` override.
*/
export interface WizardE2eVariation {
/** Snapshot id, e.g. `pi-openai-linear`. */
name: string;
summary?: string;
harness?: 'anthropic' | 'pi';
sequence?: 'linear' | 'orchestrator';
/** Gateway model id, e.g. `openai/gpt-5`. */
model?: string;
}

/** The baseline variation when a program declares none: no overrides. */
export const DEFAULT_E2E_VARIATION: WizardE2eVariation = {
name: 'default',
summary: 'linear / anthropic / sonnet — parity with main',
};

/** What the harness should do for the current screen. */
export interface E2eDecision {
/** A driver action to commit, if any. */
Expand Down
20 changes: 19 additions & 1 deletion e2e-harness/profiles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,24 @@
*/

import { Program, type ProgramId } from '@lib/programs/program-registry';
import { DEFAULT_E2E_PROFILE, type WizardE2eProfile } from './e2e-profile.js';
import {
DEFAULT_E2E_PROFILE,
DEFAULT_E2E_VARIATION,
type WizardE2eProfile,
type WizardE2eVariation,
} from './e2e-profile.js';
import posthogIntegrationE2e from '@lib/programs/posthog-integration/test/e2e.json';

const PROFILES: Partial<Record<ProgramId, WizardE2eProfile>> = {
[Program.PostHogIntegration]:
posthogIntegrationE2e.profile as WizardE2eProfile,
};

const VARIATIONS: Partial<Record<ProgramId, WizardE2eVariation[]>> = {
[Program.PostHogIntegration]:
posthogIntegrationE2e.variations as WizardE2eVariation[],
};

/** The e2e profile for a program, or the happy-path default if none is set. */
export function profileFor(program: ProgramId): WizardE2eProfile {
return PROFILES[program] ?? DEFAULT_E2E_PROFILE;
Expand All @@ -26,3 +36,11 @@ export function profileFor(program: ProgramId): WizardE2eProfile {
export function hasProfile(program: ProgramId): boolean {
return program in PROFILES;
}

/**
* The switchboard variations to snapshot for a program — one run each. Falls
* back to the single no-override baseline when a program declares none.
*/
export function variationsFor(program: ProgramId): WizardE2eVariation[] {
return VARIATIONS[program] ?? [DEFAULT_E2E_VARIATION];
}
7 changes: 6 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@
},
"dependencies": {
"@anthropic-ai/claude-agent-sdk": "0.3.169",
"@earendil-works/pi-ai": "^0.79.1",
"@earendil-works/pi-coding-agent": "^0.79.1",
"@inkjs/ui": "^2.0.0",
"@langchain/core": "^0.3.40",
"@posthog/warlock": "0.2.2",
Expand All @@ -41,16 +43,19 @@
"glob": "9.3.5",
"ink": "^6.8.0",
"inquirer": "^6.2.0",
"jiti": "^2.7.0",
"jsonc-parser": "^3.3.1",
"lodash": "^4.17.21",
"magicast": "^0.2.10",
"nanostores": "^1.1.1",
"opn": "^5.4.0",
"pi-mcp-adapter": "^2.9.0",
"posthog-node": "^5.24.17",
"react": "^19.2.4",
"read-env": "^1.3.0",
"recast": "^0.23.3",
"semver": "^7.5.3",
"typebox": "1.1.38",
"uuid": "^11.1.0",
"xcode": "3.0.1",
"xml-js": "^1.6.11",
Expand Down Expand Up @@ -100,7 +105,7 @@
"vitest": "^3.2.4"
},
"engines": {
"node": "^20.20.0 || >=22.22.0",
"node": ">=22.22.0",
"npm": ">=3.10.7"
},
"packageManager": "pnpm@10.23.0+sha512.21c4e5698002ade97e4efe8b8b4a89a8de3c85a37919f957e7a0f30f38fbc5bbdd05980ffe29179b2fb6e6e691242e098d945d1601772cad0fef5fb6411e2a4b",
Expand Down
Loading
Loading