@posthog/wizard 2.45.0 → 2.46.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.
Files changed (112) hide show
  1. package/README.md +5 -1
  2. package/dist/{add-mcp-server-to-clients-CNzZMSat.js → add-mcp-server-to-clients-Bv2CBSil.js} +53 -6
  3. package/dist/add-mcp-server-to-clients-Bv2CBSil.js.map +1 -0
  4. package/dist/{agent-interface-CF7GsdFf.js → agent-interface-B8roB2UP.js} +833 -8
  5. package/dist/agent-interface-B8roB2UP.js.map +1 -0
  6. package/dist/{agent-runner-B0LTVFfw.js → agent-runner-CV3qh_2p.js} +204 -48
  7. package/dist/agent-runner-CV3qh_2p.js.map +1 -0
  8. package/dist/analytics-D7vUZgzf.js +2 -0
  9. package/dist/{analytics-DQEuL6qS.js → analytics-k76OWsl0.js} +20 -6
  10. package/dist/analytics-k76OWsl0.js.map +1 -0
  11. package/dist/{api-uCMvDII5.js → api-CmIWcW-U.js} +3 -3
  12. package/dist/{api-uCMvDII5.js.map → api-CmIWcW-U.js.map} +1 -1
  13. package/dist/bin.js +228 -985
  14. package/dist/bin.js.map +1 -1
  15. package/dist/{ci-install-Bow8-f0j.js → ci-install-CNEJxdHf.js} +4 -4
  16. package/dist/{ci-install-Bow8-f0j.js.map → ci-install-CNEJxdHf.js.map} +1 -1
  17. package/dist/{commandments-CyB7Icr1.js → commandments-DSNrOeOC.js} +1 -1
  18. package/dist/{commandments-CyB7Icr1.js.map → commandments-DSNrOeOC.js.map} +1 -1
  19. package/dist/commandments-qTW7pwaT.js +2 -0
  20. package/dist/{debug-BixHZmHv.js → debug-BwIo7nwn.js} +1 -1
  21. package/dist/{debug-DBmxx59Q.js → debug-C9HmIrwx.js} +19 -5
  22. package/dist/debug-C9HmIrwx.js.map +1 -0
  23. package/dist/{defaults-8zjNjGGi.js → defaults-CtWMmC8s.js} +1 -1
  24. package/dist/{defaults-8zjNjGGi.js.map → defaults-CtWMmC8s.js.map} +1 -1
  25. package/dist/{env-api-key-AcC_tz8G.js → env-api-key-C3LzH8Lr.js} +1 -1
  26. package/dist/{env-api-key-AcC_tz8G.js.map → env-api-key-C3LzH8Lr.js.map} +1 -1
  27. package/dist/{environment-kZtkp7eG.js → environment-NJykOp33.js} +3 -3
  28. package/dist/{environment-kZtkp7eG.js.map → environment-NJykOp33.js.map} +1 -1
  29. package/dist/{file-utils-BAhYy5vC.js → file-utils-CLMcNIKi.js} +2 -2
  30. package/dist/{file-utils-BAhYy5vC.js.map → file-utils-CLMcNIKi.js.map} +1 -1
  31. package/dist/{file-watcher-BL-IRbR7.js → file-watcher-CBDCNQVV.js} +2 -2
  32. package/dist/{file-watcher-BL-IRbR7.js.map → file-watcher-CBDCNQVV.js.map} +1 -1
  33. package/dist/{headless-ui-DWmMyhaP.js → headless-ui-B3QKxbz8.js} +2 -2
  34. package/dist/{headless-ui-DWmMyhaP.js.map → headless-ui-B3QKxbz8.js.map} +1 -1
  35. package/dist/{interactive-Cyic0bGL.js → interactive-CIJRex02.js} +2 -2
  36. package/dist/{interactive-Cyic0bGL.js.map → interactive-CIJRex02.js.map} +1 -1
  37. package/dist/{mcp-prompt-streaming-C227vG1X.js → mcp-prompt-streaming-D6OgW3lC.js} +3 -3
  38. package/dist/{mcp-prompt-streaming-C227vG1X.js.map → mcp-prompt-streaming-D6OgW3lC.js.map} +1 -1
  39. package/dist/{mcp-BSGmEWjt.js → mcp-qTjKHqXN.js} +2 -2
  40. package/dist/{mcp-BSGmEWjt.js.map → mcp-qTjKHqXN.js.map} +1 -1
  41. package/dist/{non-interactive-DQA9vn9f.js → non-interactive-8Eypq_h-.js} +2 -2
  42. package/dist/{non-interactive-DQA9vn9f.js.map → non-interactive-8Eypq_h-.js.map} +1 -1
  43. package/dist/{orchestrator-tools-NuWONNkF.js → orchestrator-tools-DVXOV-kz.js} +3 -3
  44. package/dist/{orchestrator-tools-NuWONNkF.js.map → orchestrator-tools-DVXOV-kz.js.map} +1 -1
  45. package/dist/{package-manager-DKtR3xzM.js → package-manager-CAD9Uklp.js} +2 -2
  46. package/dist/{package-manager-DKtR3xzM.js.map → package-manager-CAD9Uklp.js.map} +1 -1
  47. package/dist/{pi-DJCln9jJ.js → pi-C9iHv5uG.js} +48 -32
  48. package/dist/pi-C9iHv5uG.js.map +1 -0
  49. package/dist/{playground-CbEndzc8.js → playground-C-9Q3ETa.js} +7 -7
  50. package/dist/{playground-CbEndzc8.js.map → playground-C-9Q3ETa.js.map} +1 -1
  51. package/dist/{posthog-DFyux4Vw.js → posthog-DZZbziJ1.js} +1 -1
  52. package/dist/{posthog-DFyux4Vw.js.map → posthog-DZZbziJ1.js.map} +1 -1
  53. package/dist/{posthog-integration-dmWJZ8mj.js → posthog-integration-Do997QON.js} +2006 -17
  54. package/dist/posthog-integration-Do997QON.js.map +1 -0
  55. package/dist/{provisioning-CcxCry5p.js → provisioning-DpqnGk3z.js} +3 -3
  56. package/dist/{provisioning-CcxCry5p.js.map → provisioning-DpqnGk3z.js.map} +1 -1
  57. package/dist/{queue-tools-Bw-AANLM.js → queue-tools-CTUgbOU8.js} +2 -2
  58. package/dist/{queue-tools-Bw-AANLM.js.map → queue-tools-CTUgbOU8.js.map} +1 -1
  59. package/dist/{registry-D2V88NoC.js → registry-DT58jEYr.js} +4 -4
  60. package/dist/{registry-D2V88NoC.js.map → registry-DT58jEYr.js.map} +1 -1
  61. package/dist/{security-DOtBCBvx.js → security-CTigdAWm.js} +10 -8
  62. package/dist/security-CTigdAWm.js.map +1 -0
  63. package/dist/{setup-utils-Qp-u6BZk.js → setup-utils-Cb5uACEO.js} +31 -9
  64. package/dist/setup-utils-Cb5uACEO.js.map +1 -0
  65. package/dist/{start-tui-DHa_9aiB.js → start-tui-Cwc-PFma.js} +36 -30
  66. package/dist/start-tui-Cwc-PFma.js.map +1 -0
  67. package/dist/{steps-D07HUQyE.js → steps-DyEKYM4I.js} +7 -7
  68. package/dist/{steps-D07HUQyE.js.map → steps-DyEKYM4I.js.map} +1 -1
  69. package/dist/{store-DSwsITKX.js → store-4sj-vWr5.js} +4 -4
  70. package/dist/{store-DSwsITKX.js.map → store-4sj-vWr5.js.map} +1 -1
  71. package/dist/{subagent-Dk4K5MDa.js → subagent-D8_yDgCB.js} +2 -2
  72. package/dist/{subagent-Dk4K5MDa.js.map → subagent-D8_yDgCB.js.map} +1 -1
  73. package/dist/{task-CQnV9Qd2.js → task-D8Y8pkzd.js} +12 -13
  74. package/dist/task-D8Y8pkzd.js.map +1 -0
  75. package/dist/{task-stream-B7qia9eW.js → task-stream-DQT3vjwS.js} +4 -4
  76. package/dist/{task-stream-B7qia9eW.js.map → task-stream-DQT3vjwS.js.map} +1 -1
  77. package/dist/{tasks-C7BQp659.js → tasks-D2WKssA5.js} +2 -2
  78. package/dist/{tasks-C7BQp659.js.map → tasks-D2WKssA5.js.map} +1 -1
  79. package/dist/{telemetry-DgahJGSx.js → telemetry-CYr4HgS2.js} +3 -3
  80. package/dist/{telemetry-DgahJGSx.js.map → telemetry-CYr4HgS2.js.map} +1 -1
  81. package/dist/{terminal-Bb6tZkf-.js → terminal-1RfyHQC2.js} +12 -12
  82. package/dist/{terminal-Bb6tZkf-.js.map → terminal-1RfyHQC2.js.map} +1 -1
  83. package/dist/tools-DQCUOQZX.js +199 -0
  84. package/dist/tools-DQCUOQZX.js.map +1 -0
  85. package/dist/{wizard-abort-DpDmuCfA.js → wizard-abort-D_-v1zvS.js} +1 -1
  86. package/dist/{wizard-abort-BxtdkgI-.js → wizard-abort-FuyIaI_0.js} +3 -3
  87. package/dist/{wizard-abort-BxtdkgI-.js.map → wizard-abort-FuyIaI_0.js.map} +1 -1
  88. package/dist/yara-hooks-6gNnPFPo.js +2 -0
  89. package/dist/{yara-hooks-pw86rZ8y.js → yara-hooks-DdYRRxfH.js} +82 -21
  90. package/dist/yara-hooks-DdYRRxfH.js.map +1 -0
  91. package/package.json +1 -1
  92. package/dist/add-mcp-server-to-clients-CNzZMSat.js.map +0 -1
  93. package/dist/agent-interface-CF7GsdFf.js.map +0 -1
  94. package/dist/agent-runner-B0LTVFfw.js.map +0 -1
  95. package/dist/analytics-DQEuL6qS.js.map +0 -1
  96. package/dist/analytics-YD3D38z2.js +0 -2
  97. package/dist/commandments-DguPfCX8.js +0 -2
  98. package/dist/debug-DBmxx59Q.js.map +0 -1
  99. package/dist/pi-DJCln9jJ.js.map +0 -1
  100. package/dist/posthog-integration-dmWJZ8mj.js.map +0 -1
  101. package/dist/security-DOtBCBvx.js.map +0 -1
  102. package/dist/setup-utils-Qp-u6BZk.js.map +0 -1
  103. package/dist/start-tui-DHa_9aiB.js.map +0 -1
  104. package/dist/task-CQnV9Qd2.js.map +0 -1
  105. package/dist/tools-BJEvSUWN.js +0 -122
  106. package/dist/tools-BJEvSUWN.js.map +0 -1
  107. package/dist/types-BRe_EzTW.js +0 -46
  108. package/dist/types-BRe_EzTW.js.map +0 -1
  109. package/dist/wizard-tools-Dg8o2lcH.js +0 -783
  110. package/dist/wizard-tools-Dg8o2lcH.js.map +0 -1
  111. package/dist/yara-hooks-CncaWRuC.js +0 -2
  112. package/dist/yara-hooks-pw86rZ8y.js.map +0 -1
@@ -1,20 +1,20 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-B_-DWIq7.js";
2
- import { A as GPT5_4_MODEL, D as DEFAULT_AGENT_MODEL, F as GPT5_MINI_MODEL, I as GPT5_MODEL, M as GPT5_6_LUNA_MODEL, N as GPT5_6_SOL_MODEL, P as GPT5_6_TERRA_MODEL, St as runtimeEnv, _ as evaluateWizardReadiness, _t as getSkillsBaseUrl, a as getLogFilePath, c as WIZARD_BENCHMARK_FILE, dt as WIZARD_PI_MODEL_FLAG_KEY, f as getUI, g as SIGNUP_WIZARD_READINESS_CONFIG, gt as WIZARD_USE_PI_HARNESS_FLAG_KEY, h as SERVICE_LABELS, i as enableDebugLogs, j as GPT5_5_MODEL, l as WIZARD_LOG_FILE, lt as WIZARD_ORCHESTRATOR_FLAG_KEY, o as initLogFile, rt as SONNET_5_MODEL, s as logToFile, t as configureLogFile, ut as WIZARD_PI_EFFORT_FLAG_KEY, v as getBlockingServiceKeys, xt as RUN_SURFACE } from "./debug-DBmxx59Q.js";
3
- import { a as ciExcludedTaskTypes, n as analytics, r as groupsFromUser } from "./analytics-DQEuL6qS.js";
4
- import { t as getOrAskForProjectData } from "./setup-utils-Qp-u6BZk.js";
2
+ import { A as GPT5_4_MODEL, Ct as runtimeEnv, D as DEFAULT_AGENT_MODEL, F as GPT5_MINI_MODEL, I as GPT5_MODEL, M as GPT5_6_LUNA_MODEL, N as GPT5_6_SOL_MODEL, P as GPT5_6_TERRA_MODEL, R as Harness, St as RUN_SURFACE, _ as evaluateWizardReadiness, _t as WIZARD_USE_PI_HARNESS_FLAG_KEY, a as getLogFilePath, c as WIZARD_BENCHMARK_FILE, dt as WIZARD_PI_MODEL_FLAG_KEY, f as getUI, g as SIGNUP_WIZARD_READINESS_CONFIG, h as SERVICE_LABELS, i as enableDebugLogs, it as Sequence, j as GPT5_5_MODEL, l as WIZARD_LOG_FILE, lt as WIZARD_ORCHESTRATOR_FLAG_KEY, mt as WIZARD_SELF_DRIVING_USE_PI_HARNESS_FLAG_KEY, o as initLogFile, rt as SONNET_5_MODEL, s as logToFile, t as configureLogFile, ut as WIZARD_PI_EFFORT_FLAG_KEY, v as getBlockingServiceKeys, vt as getSkillsBaseUrl } from "./debug-C9HmIrwx.js";
3
+ import { a as ciExcludedTaskTypes, n as analytics, r as groupsFromUser } from "./analytics-k76OWsl0.js";
4
+ import { t as getOrAskForProjectData } from "./setup-utils-Cb5uACEO.js";
5
5
  import "./wizard-session-tp4Zdbwl.js";
6
- import { i as wizardAbort, n as registerCleanup, t as WizardError } from "./wizard-abort-BxtdkgI-.js";
7
- import { n as isNonInteractiveEnvironment } from "./environment-kZtkp7eG.js";
8
- import { c as classifySettingsConflicts, i as runAgent$1, n as buildRunTags, o as backupAndFixClaudeSettings, p as AgentSignals, r as initializeAgent, s as checkAllSettingsConflicts, u as restoreClaudeSettings } from "./agent-interface-CF7GsdFf.js";
9
- import { a as QUEUE_DIR_NAME, o as QueueStore, s as TaskStatus } from "./queue-tools-Bw-AANLM.js";
10
- import { a as installSkillById, i as fetchSkillMenu, l as fetchWithRetry, u as createWizardAskBridge } from "./wizard-tools-Dg8o2lcH.js";
11
- import { a as flushScanReport, o as formatScanReport, p as writeScanReport, s as formatYaraAbortMessage } from "./yara-hooks-pw86rZ8y.js";
12
- import { r as detectNodePackageManagers } from "./package-manager-DKtR3xzM.js";
13
- import { a as piBackend, l as isThinkingLevel } from "./pi-DJCln9jJ.js";
14
- import { t as FRAMEWORK_REGISTRY } from "./registry-D2V88NoC.js";
6
+ import { i as wizardAbort, n as registerCleanup, t as WizardError } from "./wizard-abort-FuyIaI_0.js";
7
+ import { n as isNonInteractiveEnvironment } from "./environment-NJykOp33.js";
8
+ import { O as fetchWithRetry, S as installSkillById, c as classifySettingsConflicts, i as runAgent$1, k as createWizardAskBridge, n as buildRunTags, o as backupAndFixClaudeSettings, p as AgentSignals, r as initializeAgent, s as checkAllSettingsConflicts, u as restoreClaudeSettings, x as fetchSkillMenu } from "./agent-interface-B8roB2UP.js";
9
+ import { a as QUEUE_DIR_NAME, o as QueueStore, s as TaskStatus } from "./queue-tools-CTUgbOU8.js";
10
+ import { a as flushScanReport, o as formatScanReport, p as writeScanReport, s as formatYaraAbortMessage } from "./yara-hooks-DdYRRxfH.js";
11
+ import { r as detectNodePackageManagers } from "./package-manager-CAD9Uklp.js";
12
+ import { a as piBackend, l as isThinkingLevel } from "./pi-C9iHv5uG.js";
13
+ import { t as FRAMEWORK_REGISTRY } from "./registry-DT58jEYr.js";
15
14
  import fs, { existsSync, rmSync } from "fs";
16
15
  import * as path$1 from "path";
17
16
  import path from "path";
17
+ import { z } from "zod";
18
18
  import { randomUUID } from "crypto";
19
19
  //#region src/lib/agent/runner/shared/authenticate.ts
20
20
  async function authenticate(session, programId) {
@@ -149,6 +149,7 @@ async function bootstrapProgram(session, config, programConfig) {
149
149
  }
150
150
  }
151
151
  const wizardFlags = await analytics.getAllFlagsForWizard();
152
+ const wizardFlagPayloads = analytics.getWizardFlagPayloads();
152
153
  const wizardMetadata = buildRunTags({
153
154
  programId: programConfig.id,
154
155
  integration: config.integrationLabel,
@@ -160,6 +161,7 @@ async function bootstrapProgram(session, config, programConfig) {
160
161
  skillsBaseUrl,
161
162
  credentials: session.credentials,
162
163
  wizardFlags,
164
+ wizardFlagPayloads,
163
165
  wizardMetadata,
164
166
  project
165
167
  };
@@ -247,21 +249,67 @@ const anthropicBackend = {
247
249
  }
248
250
  };
249
251
  //#endregion
250
- //#region src/lib/agent/runner/switchboard/harness.ts
252
+ //#region src/lib/agent/runner/switchboard/flags/basic-integration.ts
251
253
  /**
252
- * Harness axis: registry, middleware, resolver. Mirrors `sequence.ts`.
254
+ * Basic-integration pi experiment.
255
+ *
256
+ * Flags: wizard-use-pi-harness (bool) + wizard-pi-model + wizard-pi-effort
257
+ * Routes: ONLY `posthog-integration` — harness, model, and effort axes.
253
258
  */
254
- const HARNESS_OPTIONS = {
255
- ["anthropic"]: anthropicBackend,
256
- ["pi"]: piBackend
259
+ const BASIC_INTEGRATION_EXPERIMENT = {
260
+ program: "posthog-integration",
261
+ flags: {
262
+ useFlag: WIZARD_USE_PI_HARNESS_FLAG_KEY,
263
+ modelFlag: WIZARD_PI_MODEL_FLAG_KEY,
264
+ effortFlag: WIZARD_PI_EFFORT_FLAG_KEY,
265
+ fallbackModel: GPT5_4_MODEL
266
+ }
257
267
  };
258
- function getHarness(name) {
259
- const harness = HARNESS_OPTIONS[name];
260
- if (!harness) throw new Error(`No harness registered for '${name}'.`);
261
- return harness;
268
+ //#endregion
269
+ //#region src/lib/agent/runner/switchboard/flags/orchestrator.ts
270
+ /**
271
+ * Orchestrator experiment.
272
+ *
273
+ * Flag: wizard-orchestrator (bool)
274
+ * Routes: ONLY the programs listed below — sequence axis. context-mill
275
+ * publishes orchestrator agent prompts (seed + per-task) per flow, so
276
+ * a program joins the experiment by shipping prompts AND being added
277
+ * here. Other programs can still pin `sequence` via their own flag
278
+ * route's payload.
279
+ */
280
+ const ORCHESTRATOR_EXPERIMENT = {
281
+ programs: ["posthog-integration"],
282
+ flag: WIZARD_ORCHESTRATOR_FLAG_KEY,
283
+ sequence: "orchestrator"
284
+ };
285
+ /** Raw flag read — for telemetry/log lines only, never for routing. */
286
+ function isOrchestratorEnabled(flags = {}) {
287
+ return flags[ORCHESTRATOR_EXPERIMENT.flag] === "true";
262
288
  }
263
- /** `wizard-pi-model` variant key → gateway id (variant keys can't carry `/` or `.`). */
264
- const PI_MODEL_FLAG_VARIANTS = {
289
+ //#endregion
290
+ //#region src/lib/agent/runner/switchboard/flags/self-driving.ts
291
+ /**
292
+ * Self-driving pi experiment.
293
+ *
294
+ * Flag: wizard-self-driving-use-pi-harness (bool; payload `{model, effort?,
295
+ * harness?, sequence?}`)
296
+ * Routes: ONLY `self-driving` — any axis the payload pins. A missing or
297
+ * invalid payload keeps the non-flagged binding default.
298
+ */
299
+ const SELF_DRIVING_EXPERIMENT = {
300
+ program: "self-driving",
301
+ flags: { useFlag: WIZARD_SELF_DRIVING_USE_PI_HARNESS_FLAG_KEY }
302
+ };
303
+ //#endregion
304
+ //#region src/lib/agent/runner/switchboard/flags/schemes.ts
305
+ /**
306
+ * Flag config schemes — the shapes a PostHog flag set can take to route a
307
+ * program to the pi harness, plus the shared vocabulary and the per-config
308
+ * resolution. Experiment modules in this folder declare *which* flags they
309
+ * use; this module owns *how* a config resolves to a route.
310
+ */
311
+ /** Model variant key → gateway id (variant keys can't carry `/` or `.`). */
312
+ const MODEL_FLAG_VARIANTS = {
265
313
  "gpt-5": GPT5_MODEL,
266
314
  "gpt-5-4": GPT5_4_MODEL,
267
315
  "gpt-5-mini": GPT5_MINI_MODEL,
@@ -272,25 +320,107 @@ const PI_MODEL_FLAG_VARIANTS = {
272
320
  "sonnet-4-6": DEFAULT_AGENT_MODEL,
273
321
  "sonnet-5": SONNET_5_MODEL
274
322
  };
275
- /** Programs the wizard-use-pi-harness flag may switch to pi; off this set the flag is a no-op and the binding default stands. */
276
- const PI_FLAG_PROGRAMS = new Set(["posthog-integration"]);
323
+ /** Valid effort variants; anything else leaves the model's table default. */
324
+ const EFFORT_FLAG_VARIANTS = [
325
+ "minimal",
326
+ "low",
327
+ "medium",
328
+ "high",
329
+ "xhigh"
330
+ ];
331
+ /** `{model, effort?, harness?, sequence?}` payload shape; extra keys tolerated for forward compat. */
332
+ const payloadConfigFlagSchema = z.object({
333
+ model: z.string().refine((key) => key in MODEL_FLAG_VARIANTS),
334
+ effort: z.enum(EFFORT_FLAG_VARIANTS).optional(),
335
+ harness: z.nativeEnum(Harness).optional(),
336
+ sequence: z.nativeEnum(Sequence).optional()
337
+ });
338
+ /** Validate a payload (object or JSON string) into a route; undefined on any unexpected shape. */
339
+ function parseFlagPayload(raw) {
340
+ let value = raw;
341
+ if (typeof raw === "string") try {
342
+ value = JSON.parse(raw);
343
+ } catch {
344
+ return;
345
+ }
346
+ const parsed = payloadConfigFlagSchema.safeParse(value);
347
+ if (!parsed.success) return void 0;
348
+ return {
349
+ model: MODEL_FLAG_VARIANTS[parsed.data.model],
350
+ thinkingLevel: parsed.data.effort,
351
+ harness: parsed.data.harness,
352
+ sequence: parsed.data.sequence
353
+ };
354
+ }
355
+ /**
356
+ * Resolve one config against the flag snapshot, or undefined when it doesn't
357
+ * validly route: use flag off, or a payload that fails validation — the
358
+ * caller then keeps the non-flagged binding default.
359
+ */
360
+ function routeFromConfigFlag(cfg, flags, flagPayloads) {
361
+ if (flags[cfg.useFlag] !== "true") return void 0;
362
+ if (cfg.modelFlag) {
363
+ const effort = flags[cfg.effortFlag];
364
+ return {
365
+ model: MODEL_FLAG_VARIANTS[flags[cfg.modelFlag] ?? ""] ?? cfg.fallbackModel,
366
+ thinkingLevel: EFFORT_FLAG_VARIANTS.includes(effort) ? effort : void 0
367
+ };
368
+ }
369
+ const route = parseFlagPayload(flagPayloads?.[cfg.useFlag]);
370
+ if (!route) logToFile(`[switchboard] ${cfg.useFlag} on but payload missing/invalid — keeping the non-flagged default`);
371
+ return route;
372
+ }
373
+ //#endregion
374
+ //#region src/lib/agent/runner/switchboard/flags/index.ts
375
+ /**
376
+ * Switchboard flags, one module per experiment. Every experiment declares its
377
+ * own scope — which program(s) its flags route — so the flag→program mapping
378
+ * is readable per file, never implied. `schemes.ts` owns the shared config
379
+ * shapes and resolution.
380
+ */
381
+ /** Every experiment on each axis. An experiment routes ONLY by being listed here, and only for the programs it declares. */
382
+ const HARNESS_EXPERIMENTS = [BASIC_INTEGRATION_EXPERIMENT, SELF_DRIVING_EXPERIMENT];
383
+ const SEQUENCE_EXPERIMENTS = [ORCHESTRATOR_EXPERIMENT];
384
+ /** The flag-driven route for a program, or undefined when no experiment covers it or its flags don't validly route. */
385
+ function resolveFlagRoute(program, flags, flagPayloads) {
386
+ if (RUN_SURFACE === "cloud") return void 0;
387
+ const experiment = HARNESS_EXPERIMENTS.find((e) => e.program === program);
388
+ return experiment && routeFromConfigFlag(experiment.flags, flags, flagPayloads);
389
+ }
390
+ /** The flag-driven sequence for a program, or undefined when no sequence experiment covers it with its flag on. */
391
+ function resolveFlagSequence(program, flags) {
392
+ return SEQUENCE_EXPERIMENTS.find((e) => e.programs.includes(program) && flags[e.flag] === "true")?.sequence;
393
+ }
394
+ //#endregion
395
+ //#region src/lib/agent/runner/switchboard/harness.ts
396
+ /**
397
+ * Harness axis: registry, middleware, resolver. Mirrors `sequence.ts`.
398
+ */
399
+ const HARNESS_OPTIONS = {
400
+ ["anthropic"]: anthropicBackend,
401
+ ["pi"]: piBackend
402
+ };
403
+ function getHarness(name) {
404
+ const harness = HARNESS_OPTIONS[name];
405
+ if (!harness) throw new Error(`No harness registered for '${name}'.`);
406
+ return harness;
407
+ }
277
408
  /**
278
- * `wizard-use-pi-harness` on → pi, paired with the `wizard-pi-model` variant
279
- * (unknown/missing variant → gpt-5.4). Off `PI_FLAG_PROGRAMS`, the flag is
280
- * ignored and the binding default stands.
409
+ * PostHog-flag routing to pi (see `./flags`). No valid route — flag off, no
410
+ * config, or an invalid payload — keeps the non-flagged binding default.
281
411
  */
282
412
  const flagRunnerOverride = (ctx, next) => {
283
413
  const pick = next();
284
- if (ctx.flags["wizard-use-pi-harness"] !== "true") return pick;
285
- if (RUN_SURFACE === "cloud") return pick;
286
- if (!PI_FLAG_PROGRAMS.has(ctx.program)) return pick;
414
+ const route = resolveFlagRoute(ctx.program, ctx.flags, ctx.flagPayloads);
415
+ if (!route) return pick;
287
416
  if (ctx.trace) Object.assign(ctx.trace, {
288
417
  harness: "flag",
289
418
  model: "flag"
290
419
  });
291
420
  return {
292
- harness: "pi",
293
- model: PI_MODEL_FLAG_VARIANTS[ctx.flags["wizard-pi-model"] ?? ""] ?? "openai/gpt-5.4"
421
+ harness: route.harness ?? "pi",
422
+ model: route.model,
423
+ thinkingLevel: route.thinkingLevel
294
424
  };
295
425
  };
296
426
  const HARNESS_MIDDLEWARE = [...[], flagRunnerOverride];
@@ -308,6 +438,7 @@ function resolveHarness(ctx, role = "default") {
308
438
  return {
309
439
  harness: binding.harness,
310
440
  model: binding.model,
441
+ thinkingLevel: binding.thinkingLevel,
311
442
  ...binding.contextMillOverride?.[role]
312
443
  };
313
444
  });
@@ -1378,6 +1509,7 @@ async function runLinearProgram(session, config, programConfig, boot, composed =
1378
1509
  const pick = resolveHarness({
1379
1510
  program: programConfig.id,
1380
1511
  flags: wizardFlags,
1512
+ flagPayloads: boot.wizardFlagPayloads,
1381
1513
  cliHarness: session.harness,
1382
1514
  cliModel: session.model
1383
1515
  });
@@ -1391,7 +1523,8 @@ async function runLinearProgram(session, config, programConfig, boot, composed =
1391
1523
  spinner,
1392
1524
  askBridge,
1393
1525
  middleware,
1394
- model: pick.model
1526
+ model: pick.model,
1527
+ thinkingLevel: pick.thinkingLevel
1395
1528
  });
1396
1529
  if (agentResult.error === "WIZARD_ABORT") {
1397
1530
  const reason = agentResult.message ?? "";
@@ -1910,6 +2043,7 @@ async function runOrchestrator(session, programConfig, boot) {
1910
2043
  const switchboardCtx = {
1911
2044
  program: programConfig.id,
1912
2045
  flags: boot.wizardFlags,
2046
+ flagPayloads: boot.wizardFlagPayloads,
1913
2047
  cliHarness: session.harness,
1914
2048
  cliSequence: session.sequence,
1915
2049
  cliModel: session.model
@@ -2161,15 +2295,29 @@ function getSequence(name) {
2161
2295
  if (!sequence) throw new Error(`No sequence registered for '${name}'.`);
2162
2296
  return sequence;
2163
2297
  }
2164
- /** The `wizard-orchestrator` flag is on. */
2165
- function isOrchestratorEnabled(flags = {}) {
2166
- return flags[WIZARD_ORCHESTRATOR_FLAG_KEY] === "true";
2167
- }
2168
- /** PostHog `wizard-orchestrator` flag → orchestrator. */
2169
- const orchestratorFeatureFlagMw = (ctx, next) => {
2170
- if (!isOrchestratorEnabled(ctx.flags)) return next();
2298
+ /**
2299
+ * A composed sub-run (integration inside self-driving) is structurally
2300
+ * linear: the orchestrator owns the full run lifecycle (queue, outro) and
2301
+ * cannot nest. Sits above every override, including CLI.
2302
+ */
2303
+ const composedClampMw = (ctx, next) => {
2304
+ if (!ctx.composed) return next();
2305
+ if (ctx.trace) ctx.trace.sequence = "composed";
2306
+ return "linear";
2307
+ };
2308
+ /** A program's own flag route may pin the sequence; wins over the global orchestrator flag. Traced as 'payload' to stay distinguishable from sequence experiments ('flag'). */
2309
+ const flagRouteSequenceMw = (ctx, next) => {
2310
+ const route = resolveFlagRoute(ctx.program, ctx.flags, ctx.flagPayloads);
2311
+ if (!route?.sequence) return next();
2312
+ if (ctx.trace) ctx.trace.sequence = "payload";
2313
+ return route.sequence;
2314
+ };
2315
+ /** Sequence experiments (e.g. wizard-orchestrator), each inert outside its declared programs. */
2316
+ const sequenceExperimentMw = (ctx, next) => {
2317
+ const sequence = resolveFlagSequence(ctx.program, ctx.flags);
2318
+ if (!sequence) return next();
2171
2319
  if (ctx.trace) ctx.trace.sequence = "flag";
2172
- return "orchestrator";
2320
+ return sequence;
2173
2321
  };
2174
2322
  /**
2175
2323
  * The orchestrator drives harnesses through `runTask`; a harness that has not
@@ -2186,9 +2334,11 @@ const runTaskCapabilityClampMw = (ctx, next) => {
2186
2334
  return "linear";
2187
2335
  };
2188
2336
  const SEQUENCE_MIDDLEWARE = [
2337
+ composedClampMw,
2189
2338
  ...[],
2190
2339
  runTaskCapabilityClampMw,
2191
- orchestratorFeatureFlagMw
2340
+ flagRouteSequenceMw,
2341
+ sequenceExperimentMw
2192
2342
  ];
2193
2343
  /** CLI wins over `wizard-orchestrator` flag wins over binding default. */
2194
2344
  function resolveSequence(ctx) {
@@ -2264,11 +2414,12 @@ const PROGRAM_BINDINGS = {
2264
2414
  function resolveBinding(ctx, role = "default") {
2265
2415
  ctx.trace ??= {};
2266
2416
  const sequence = resolveSequence(ctx);
2267
- const { harness, model } = resolveHarness(ctx, role);
2417
+ const { harness, model, thinkingLevel } = resolveHarness(ctx, role);
2268
2418
  return {
2269
2419
  sequence,
2270
2420
  harness,
2271
- model
2421
+ model,
2422
+ thinkingLevel
2272
2423
  };
2273
2424
  }
2274
2425
  //#endregion
@@ -2292,7 +2443,7 @@ async function runProgram(session, config, programConfig, options = {}) {
2292
2443
  const boot = await bootstrapProgram(session, config, programConfig);
2293
2444
  registerCleanup(() => flushScanReport(session));
2294
2445
  try {
2295
- const binding = resolveProgramRunner(session, programConfig, boot);
2446
+ const binding = resolveProgramRunner(session, programConfig, boot, options.composed ?? false);
2296
2447
  if (binding.sequence === "orchestrator") getUI().log.info("Task-queue orchestrator enabled.");
2297
2448
  return await getSequence(binding.sequence).run(session, config, programConfig, boot, options.composed ?? false);
2298
2449
  } finally {
@@ -2308,10 +2459,12 @@ async function runProgram(session, config, programConfig, options = {}) {
2308
2459
  * concern (bootstrap, cleanup, dispatch, per-task per-role harness picks) is
2309
2460
  * either upstream or downstream of this call.
2310
2461
  */
2311
- function resolveProgramRunner(session, programConfig, boot) {
2462
+ function resolveProgramRunner(session, programConfig, boot, composed) {
2312
2463
  const ctx = {
2313
2464
  program: programConfig.id,
2465
+ composed,
2314
2466
  flags: boot.wizardFlags,
2467
+ flagPayloads: boot.wizardFlagPayloads,
2315
2468
  cliHarness: session.harness,
2316
2469
  cliSequence: session.sequence,
2317
2470
  cliModel: session.model
@@ -2332,6 +2485,8 @@ function captureSwitchboardDecision(ctx, binding) {
2332
2485
  flag_use_pi_harness: ctx.flags[WIZARD_USE_PI_HARNESS_FLAG_KEY],
2333
2486
  flag_pi_model: ctx.flags[WIZARD_PI_MODEL_FLAG_KEY],
2334
2487
  flag_pi_effort: ctx.flags[WIZARD_PI_EFFORT_FLAG_KEY],
2488
+ flag_self_driving_use_pi_harness: ctx.flags[WIZARD_SELF_DRIVING_USE_PI_HARNESS_FLAG_KEY],
2489
+ flag_self_driving_pi_payload: JSON.stringify(ctx.flagPayloads?.["wizard-self-driving-use-pi-harness"] ?? null),
2335
2490
  flag_orchestrator: ctx.flags[WIZARD_ORCHESTRATOR_FLAG_KEY],
2336
2491
  cli_harness: ctx.cliHarness,
2337
2492
  cli_sequence: ctx.cliSequence,
@@ -2341,6 +2496,7 @@ function captureSwitchboardDecision(ctx, binding) {
2341
2496
  sequence_source: trace.sequence,
2342
2497
  harness: binding.harness,
2343
2498
  model: binding.model,
2499
+ thinking_level: binding.thinkingLevel,
2344
2500
  sequence: binding.sequence
2345
2501
  });
2346
2502
  logToFile(`[switchboard] decision: program=${ctx.program} in(use-pi-harness=${ctx.flags["wizard-use-pi-harness"] ?? "-"}, orchestrator=${ctx.flags["wizard-orchestrator"] ?? "-"}, cli=${ctx.cliHarness ?? "-"}/${ctx.cliSequence ?? "-"}/${ctx.cliModel ?? "-"}) → harness=${binding.harness} (${trace.harness ?? "?"}) model=${binding.model} (${trace.model ?? "?"}) sequence=${binding.sequence} (${trace.sequence ?? "?"})`);
@@ -2363,4 +2519,4 @@ var agent_runner_exports = /* @__PURE__ */ __exportAll({ runAgent: () => runAgen
2363
2519
  //#endregion
2364
2520
  export { formatTokenCount as a, formatCostUsd as i, runAgent as n, authenticate as o, computeTokenCostUsd as r, agent_runner_exports as t };
2365
2521
 
2366
- //# sourceMappingURL=agent-runner-B0LTVFfw.js.map
2522
+ //# sourceMappingURL=agent-runner-CV3qh_2p.js.map