@posthog/wizard 2.45.0 → 2.47.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 (113) hide show
  1. package/README.md +5 -1
  2. package/dist/{add-mcp-server-to-clients-CNzZMSat.js → add-mcp-server-to-clients-Dg64O4OZ.js} +53 -6
  3. package/dist/add-mcp-server-to-clients-Dg64O4OZ.js.map +1 -0
  4. package/dist/{agent-interface-CF7GsdFf.js → agent-interface-RZY46R62.js} +837 -8
  5. package/dist/agent-interface-RZY46R62.js.map +1 -0
  6. package/dist/{agent-runner-B0LTVFfw.js → agent-runner-D8pEOs_2.js} +209 -48
  7. package/dist/agent-runner-D8pEOs_2.js.map +1 -0
  8. package/dist/{analytics-DQEuL6qS.js → analytics-B4dny8FA.js} +20 -6
  9. package/dist/analytics-B4dny8FA.js.map +1 -0
  10. package/dist/analytics-BAhDPsPK.js +2 -0
  11. package/dist/{api-uCMvDII5.js → api-CdPvsnUm.js} +3 -3
  12. package/dist/{api-uCMvDII5.js.map → api-CdPvsnUm.js.map} +1 -1
  13. package/dist/bin.js +300 -986
  14. package/dist/bin.js.map +1 -1
  15. package/dist/{ci-install-Bow8-f0j.js → ci-install-g8govb-6.js} +4 -4
  16. package/dist/{ci-install-Bow8-f0j.js.map → ci-install-g8govb-6.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-DBmxx59Q.js → debug-BiU-S12q.js} +19 -5
  21. package/dist/debug-BiU-S12q.js.map +1 -0
  22. package/dist/{debug-BixHZmHv.js → debug-DQWRmiju.js} +1 -1
  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-BT0RRheV.js} +3 -3
  28. package/dist/{environment-kZtkp7eG.js.map → environment-BT0RRheV.js.map} +1 -1
  29. package/dist/{file-utils-BAhYy5vC.js → file-utils-B1_Eciop.js} +2 -2
  30. package/dist/{file-utils-BAhYy5vC.js.map → file-utils-B1_Eciop.js.map} +1 -1
  31. package/dist/{file-watcher-BL-IRbR7.js → file-watcher-4frv2dFl.js} +2 -2
  32. package/dist/{file-watcher-BL-IRbR7.js.map → file-watcher-4frv2dFl.js.map} +1 -1
  33. package/dist/{headless-ui-DWmMyhaP.js → headless-ui-DQVBpo0v.js} +2 -2
  34. package/dist/{headless-ui-DWmMyhaP.js.map → headless-ui-DQVBpo0v.js.map} +1 -1
  35. package/dist/{interactive-Cyic0bGL.js → interactive-Bgb8njPS.js} +2 -2
  36. package/dist/{interactive-Cyic0bGL.js.map → interactive-Bgb8njPS.js.map} +1 -1
  37. package/dist/{mcp-BSGmEWjt.js → mcp-BEWwXAXk.js} +2 -2
  38. package/dist/{mcp-BSGmEWjt.js.map → mcp-BEWwXAXk.js.map} +1 -1
  39. package/dist/{mcp-prompt-streaming-C227vG1X.js → mcp-prompt-streaming-MfYiLHox.js} +3 -3
  40. package/dist/{mcp-prompt-streaming-C227vG1X.js.map → mcp-prompt-streaming-MfYiLHox.js.map} +1 -1
  41. package/dist/{non-interactive-DQA9vn9f.js → non-interactive-C0NbQTcD.js} +2 -2
  42. package/dist/{non-interactive-DQA9vn9f.js.map → non-interactive-C0NbQTcD.js.map} +1 -1
  43. package/dist/{orchestrator-tools-NuWONNkF.js → orchestrator-tools-KtXpYp6j.js} +3 -3
  44. package/dist/{orchestrator-tools-NuWONNkF.js.map → orchestrator-tools-KtXpYp6j.js.map} +1 -1
  45. package/dist/{package-manager-DKtR3xzM.js → package-manager-L1RLE1ne.js} +2 -2
  46. package/dist/{package-manager-DKtR3xzM.js.map → package-manager-L1RLE1ne.js.map} +1 -1
  47. package/dist/{pi-DJCln9jJ.js → pi-BMs3MY7y.js} +48 -32
  48. package/dist/pi-BMs3MY7y.js.map +1 -0
  49. package/dist/{playground-CbEndzc8.js → playground-DZoNrDEM.js} +7 -7
  50. package/dist/{playground-CbEndzc8.js.map → playground-DZoNrDEM.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-BnWgrvts.js} +2006 -17
  54. package/dist/posthog-integration-BnWgrvts.js.map +1 -0
  55. package/dist/{provisioning-CcxCry5p.js → provisioning-DS8zDveH.js} +3 -3
  56. package/dist/{provisioning-CcxCry5p.js.map → provisioning-DS8zDveH.js.map} +1 -1
  57. package/dist/{queue-tools-Bw-AANLM.js → queue-tools-rAN2wwDC.js} +2 -2
  58. package/dist/{queue-tools-Bw-AANLM.js.map → queue-tools-rAN2wwDC.js.map} +1 -1
  59. package/dist/{registry-D2V88NoC.js → registry-Zp3B2L4q.js} +4 -4
  60. package/dist/{registry-D2V88NoC.js.map → registry-Zp3B2L4q.js.map} +1 -1
  61. package/dist/{security-DOtBCBvx.js → security-R8m9JSHq.js} +10 -8
  62. package/dist/security-R8m9JSHq.js.map +1 -0
  63. package/dist/{setup-utils-Qp-u6BZk.js → setup-utils-BMy5Zj3Z.js} +31 -9
  64. package/dist/setup-utils-BMy5Zj3Z.js.map +1 -0
  65. package/dist/{start-tui-DHa_9aiB.js → start-tui-CJ7i0pbr.js} +114 -30
  66. package/dist/start-tui-CJ7i0pbr.js.map +1 -0
  67. package/dist/{steps-D07HUQyE.js → steps-CsvYRuTV.js} +7 -7
  68. package/dist/{steps-D07HUQyE.js.map → steps-CsvYRuTV.js.map} +1 -1
  69. package/dist/{store-DSwsITKX.js → store-CVZL9JJe.js} +4 -4
  70. package/dist/store-CVZL9JJe.js.map +1 -0
  71. package/dist/{subagent-Dk4K5MDa.js → subagent-C1OOk1kh.js} +2 -2
  72. package/dist/{subagent-Dk4K5MDa.js.map → subagent-C1OOk1kh.js.map} +1 -1
  73. package/dist/{task-CQnV9Qd2.js → task-BMaazWIr.js} +12 -13
  74. package/dist/task-BMaazWIr.js.map +1 -0
  75. package/dist/{task-stream-B7qia9eW.js → task-stream-DlgLKdMC.js} +4 -4
  76. package/dist/{task-stream-B7qia9eW.js.map → task-stream-DlgLKdMC.js.map} +1 -1
  77. package/dist/{tasks-C7BQp659.js → tasks-BcsQlnuL.js} +2 -2
  78. package/dist/{tasks-C7BQp659.js.map → tasks-BcsQlnuL.js.map} +1 -1
  79. package/dist/{telemetry-DgahJGSx.js → telemetry-3Y8LxNVU.js} +3 -3
  80. package/dist/{telemetry-DgahJGSx.js.map → telemetry-3Y8LxNVU.js.map} +1 -1
  81. package/dist/{terminal-Bb6tZkf-.js → terminal-B4cCBtMj.js} +12 -12
  82. package/dist/{terminal-Bb6tZkf-.js.map → terminal-B4cCBtMj.js.map} +1 -1
  83. package/dist/tools-C07lR0s-.js +199 -0
  84. package/dist/tools-C07lR0s-.js.map +1 -0
  85. package/dist/{wizard-abort-BxtdkgI-.js → wizard-abort-D1UxHeiE.js} +3 -3
  86. package/dist/{wizard-abort-BxtdkgI-.js.map → wizard-abort-D1UxHeiE.js.map} +1 -1
  87. package/dist/{wizard-abort-DpDmuCfA.js → wizard-abort-DoI_ZWM-.js} +1 -1
  88. package/dist/yara-hooks-ChkXWyzs.js +2 -0
  89. package/dist/{yara-hooks-pw86rZ8y.js → yara-hooks-D9PSjEqo.js} +82 -21
  90. package/dist/yara-hooks-D9PSjEqo.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/store-DSwsITKX.js.map +0 -1
  105. package/dist/task-CQnV9Qd2.js.map +0 -1
  106. package/dist/tools-BJEvSUWN.js +0 -122
  107. package/dist/tools-BJEvSUWN.js.map +0 -1
  108. package/dist/types-BRe_EzTW.js +0 -46
  109. package/dist/types-BRe_EzTW.js.map +0 -1
  110. package/dist/wizard-tools-Dg8o2lcH.js +0 -783
  111. package/dist/wizard-tools-Dg8o2lcH.js.map +0 -1
  112. package/dist/yara-hooks-CncaWRuC.js +0 -2
  113. 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-BiU-S12q.js";
3
+ import { a as ciExcludedTaskTypes, n as analytics, r as groupsFromUser } from "./analytics-B4dny8FA.js";
4
+ import { t as getOrAskForProjectData } from "./setup-utils-BMy5Zj3Z.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-D1UxHeiE.js";
7
+ import { n as isNonInteractiveEnvironment } from "./environment-BT0RRheV.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-RZY46R62.js";
9
+ import { a as QUEUE_DIR_NAME, o as QueueStore, s as TaskStatus } from "./queue-tools-rAN2wwDC.js";
10
+ import { a as flushScanReport, o as formatScanReport, p as writeScanReport, s as formatYaraAbortMessage } from "./yara-hooks-D9PSjEqo.js";
11
+ import { r as detectNodePackageManagers } from "./package-manager-L1RLE1ne.js";
12
+ import { a as piBackend, l as isThinkingLevel } from "./pi-BMs3MY7y.js";
13
+ import { t as FRAMEWORK_REGISTRY } from "./registry-Zp3B2L4q.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
+ }
277
355
  /**
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.
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
+ }
408
+ /**
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) {
@@ -2258,17 +2408,23 @@ const PROGRAM_BINDINGS = {
2258
2408
  "mcp-remove": DEFAULT_BINDING,
2259
2409
  "mcp-tutorial": DEFAULT_BINDING,
2260
2410
  "mcp-analytics": DEFAULT_BINDING,
2411
+ "ai-observability": {
2412
+ sequence: "linear",
2413
+ harness: "anthropic",
2414
+ model: SONNET_5_MODEL
2415
+ },
2261
2416
  slack: DEFAULT_BINDING
2262
2417
  };
2263
2418
  /** Compose both axes. Callers needing only one axis use the per-axis resolver. */
2264
2419
  function resolveBinding(ctx, role = "default") {
2265
2420
  ctx.trace ??= {};
2266
2421
  const sequence = resolveSequence(ctx);
2267
- const { harness, model } = resolveHarness(ctx, role);
2422
+ const { harness, model, thinkingLevel } = resolveHarness(ctx, role);
2268
2423
  return {
2269
2424
  sequence,
2270
2425
  harness,
2271
- model
2426
+ model,
2427
+ thinkingLevel
2272
2428
  };
2273
2429
  }
2274
2430
  //#endregion
@@ -2292,7 +2448,7 @@ async function runProgram(session, config, programConfig, options = {}) {
2292
2448
  const boot = await bootstrapProgram(session, config, programConfig);
2293
2449
  registerCleanup(() => flushScanReport(session));
2294
2450
  try {
2295
- const binding = resolveProgramRunner(session, programConfig, boot);
2451
+ const binding = resolveProgramRunner(session, programConfig, boot, options.composed ?? false);
2296
2452
  if (binding.sequence === "orchestrator") getUI().log.info("Task-queue orchestrator enabled.");
2297
2453
  return await getSequence(binding.sequence).run(session, config, programConfig, boot, options.composed ?? false);
2298
2454
  } finally {
@@ -2308,10 +2464,12 @@ async function runProgram(session, config, programConfig, options = {}) {
2308
2464
  * concern (bootstrap, cleanup, dispatch, per-task per-role harness picks) is
2309
2465
  * either upstream or downstream of this call.
2310
2466
  */
2311
- function resolveProgramRunner(session, programConfig, boot) {
2467
+ function resolveProgramRunner(session, programConfig, boot, composed) {
2312
2468
  const ctx = {
2313
2469
  program: programConfig.id,
2470
+ composed,
2314
2471
  flags: boot.wizardFlags,
2472
+ flagPayloads: boot.wizardFlagPayloads,
2315
2473
  cliHarness: session.harness,
2316
2474
  cliSequence: session.sequence,
2317
2475
  cliModel: session.model
@@ -2332,6 +2490,8 @@ function captureSwitchboardDecision(ctx, binding) {
2332
2490
  flag_use_pi_harness: ctx.flags[WIZARD_USE_PI_HARNESS_FLAG_KEY],
2333
2491
  flag_pi_model: ctx.flags[WIZARD_PI_MODEL_FLAG_KEY],
2334
2492
  flag_pi_effort: ctx.flags[WIZARD_PI_EFFORT_FLAG_KEY],
2493
+ flag_self_driving_use_pi_harness: ctx.flags[WIZARD_SELF_DRIVING_USE_PI_HARNESS_FLAG_KEY],
2494
+ flag_self_driving_pi_payload: JSON.stringify(ctx.flagPayloads?.["wizard-self-driving-use-pi-harness"] ?? null),
2335
2495
  flag_orchestrator: ctx.flags[WIZARD_ORCHESTRATOR_FLAG_KEY],
2336
2496
  cli_harness: ctx.cliHarness,
2337
2497
  cli_sequence: ctx.cliSequence,
@@ -2341,6 +2501,7 @@ function captureSwitchboardDecision(ctx, binding) {
2341
2501
  sequence_source: trace.sequence,
2342
2502
  harness: binding.harness,
2343
2503
  model: binding.model,
2504
+ thinking_level: binding.thinkingLevel,
2344
2505
  sequence: binding.sequence
2345
2506
  });
2346
2507
  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 +2524,4 @@ var agent_runner_exports = /* @__PURE__ */ __exportAll({ runAgent: () => runAgen
2363
2524
  //#endregion
2364
2525
  export { formatTokenCount as a, formatCostUsd as i, runAgent as n, authenticate as o, computeTokenCostUsd as r, agent_runner_exports as t };
2365
2526
 
2366
- //# sourceMappingURL=agent-runner-B0LTVFfw.js.map
2527
+ //# sourceMappingURL=agent-runner-D8pEOs_2.js.map