@posthog/wizard 2.14.2 → 2.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +43 -1
- package/dist/{TextBlock-B3cm43YY.js → TextBlock-B_8bXLLs.js} +33 -2
- package/dist/TextBlock-B_8bXLLs.js.map +1 -0
- package/dist/{add-mcp-server-to-clients-BL0trzId.js → add-mcp-server-to-clients-Dq0n2yzq.js} +5 -5
- package/dist/add-mcp-server-to-clients-Dq0n2yzq.js.map +1 -0
- package/dist/{agent-interface-HBWLfIDs.js → agent-interface-yB_27jG8.js} +106 -21
- package/dist/agent-interface-yB_27jG8.js.map +1 -0
- package/dist/{agent-runner-PUFQDL4S.js → agent-runner-C9sSudE0.js} +7 -8
- package/dist/agent-runner-C9sSudE0.js.map +1 -0
- package/dist/analytics-BnR9904x.js +2 -0
- package/dist/{analytics-D1-WXmxH.js → analytics-Da4QHjMw.js} +2 -2
- package/dist/analytics-Da4QHjMw.js.map +1 -0
- package/dist/bin.js +901 -108
- package/dist/bin.js.map +1 -1
- package/dist/{debug-BuBfx2GP.js → debug-D5kt4fxB.js} +1 -1
- package/dist/{debug-Dmx2Q7HM.js → debug-DRKLej5r.js} +55 -46
- package/dist/debug-DRKLej5r.js.map +1 -0
- package/dist/{defaults-DgKAzsD1.js → defaults-CPH6eWhN.js} +1 -1
- package/dist/{defaults-DgKAzsD1.js.map → defaults-CPH6eWhN.js.map} +1 -1
- package/dist/{detection-CM90aZAk.js → detection-0Pz2NncX.js} +3 -3
- package/dist/detection-0Pz2NncX.js.map +1 -0
- package/dist/{env-api-key-D5G2PrXW.js → env-api-key-HFqv1l-z.js} +1 -1
- package/dist/{env-api-key-D5G2PrXW.js.map → env-api-key-HFqv1l-z.js.map} +1 -1
- package/dist/{file-utils-DPmgn9Vm.js → file-utils-DnTSiTJw.js} +1 -1
- package/dist/file-utils-DnTSiTJw.js.map +1 -0
- package/dist/package-json-Cttzi3C8.js +2 -0
- package/dist/package-json-v_g2YlN1.js +35 -0
- package/dist/package-json-v_g2YlN1.js.map +1 -0
- package/dist/{package-manager-D6MvXiGG.js → package-manager-DlTISyej.js} +2 -2
- package/dist/package-manager-DlTISyej.js.map +1 -0
- package/dist/posthog-B1G0raJU.js +120 -0
- package/dist/posthog-B1G0raJU.js.map +1 -0
- package/dist/{posthog-integration-C4yP5ZMX.js → posthog-integration-D-DyEJvz.js} +14 -40
- package/dist/posthog-integration-D-DyEJvz.js.map +1 -0
- package/dist/provisioning-COeHnCVG.js +2 -0
- package/dist/{provisioning-Buru4Hui.js → provisioning-DmN8ZDbE.js} +3 -3
- package/dist/provisioning-DmN8ZDbE.js.map +1 -0
- package/dist/{registry-C9-54_aB.js → registry-CofBzIdU.js} +31 -31
- package/dist/registry-CofBzIdU.js.map +1 -0
- package/dist/setup-utils-C5iSJ3eg.js +2 -0
- package/dist/{setup-utils-Cra9hsR5.js → setup-utils-_P-or31U.js} +91 -51
- package/dist/setup-utils-_P-or31U.js.map +1 -0
- package/dist/{slides-DtXq03Cd.js → slides-D3I6JzlG.js} +41 -8
- package/dist/slides-D3I6JzlG.js.map +1 -0
- package/dist/smoke-test-ci.sh +5 -2
- package/dist/smoke-test.sh +43 -0
- package/dist/{start-playground-BZUi05v7.js → start-playground-Bxd2KG2L.js} +5 -6
- package/dist/start-playground-Bxd2KG2L.js.map +1 -0
- package/dist/{start-tui-BFtVjPvL.js → start-tui-Bl8fCbp_.js} +576 -23
- package/dist/start-tui-Bl8fCbp_.js.map +1 -0
- package/dist/{steps-PV5CP6fe.js → steps-B-vmvb2V.js} +6 -6
- package/dist/steps-B-vmvb2V.js.map +1 -0
- package/dist/task-stream-z6QFZtpC.js +195 -0
- package/dist/task-stream-z6QFZtpC.js.map +1 -0
- package/dist/{telemetry-CeitxLMv.js → telemetry-XO0SlTFs.js} +2 -2
- package/dist/telemetry-XO0SlTFs.js.map +1 -0
- package/dist/{wizard-abort-DwlDCXy5.js → wizard-abort-CuaS1eXn.js} +1 -1
- package/dist/{wizard-abort-gatjLP05.js → wizard-abort-uolun8Q3.js} +3 -3
- package/dist/wizard-abort-uolun8Q3.js.map +1 -0
- package/dist/{wizard-session-CsI33S4_.js → wizard-session-BlgiX-5d.js} +16 -2
- package/dist/wizard-session-BlgiX-5d.js.map +1 -0
- package/dist/wizard-session-DxU5ZMBN.js +2 -0
- package/dist/wizard-ui-YdGFRyu_.js.map +1 -1
- package/package.json +5 -2
- package/dist/TextBlock-B3cm43YY.js.map +0 -1
- package/dist/add-mcp-server-to-clients-BL0trzId.js.map +0 -1
- package/dist/agent-interface-HBWLfIDs.js.map +0 -1
- package/dist/agent-runner-PUFQDL4S.js.map +0 -1
- package/dist/analytics-D1-WXmxH.js.map +0 -1
- package/dist/analytics-DVT_xa3O.js +0 -2
- package/dist/craft-pre-release.sh +0 -10
- package/dist/debug-Dmx2Q7HM.js.map +0 -1
- package/dist/detection-CM90aZAk.js.map +0 -1
- package/dist/file-BKbKreWF.js +0 -16
- package/dist/file-BKbKreWF.js.map +0 -1
- package/dist/file-utils-DPmgn9Vm.js.map +0 -1
- package/dist/package-json-DZpnf6vU.js +0 -23
- package/dist/package-json-DZpnf6vU.js.map +0 -1
- package/dist/package-json-_4PEss19.js +0 -2
- package/dist/package-manager-D6MvXiGG.js.map +0 -1
- package/dist/paths-DJS47p5x.js +0 -26
- package/dist/paths-DJS47p5x.js.map +0 -1
- package/dist/posthog-BbQf_Hzq.js +0 -11
- package/dist/posthog-BbQf_Hzq.js.map +0 -1
- package/dist/posthog-integration-C4yP5ZMX.js.map +0 -1
- package/dist/provisioning-BbpTbU7J.js +0 -2
- package/dist/provisioning-Buru4Hui.js.map +0 -1
- package/dist/registry-C9-54_aB.js.map +0 -1
- package/dist/setup-utils-BAQfaP4a.js +0 -2
- package/dist/setup-utils-Cra9hsR5.js.map +0 -1
- package/dist/slides-DtXq03Cd.js.map +0 -1
- package/dist/start-playground-BZUi05v7.js.map +0 -1
- package/dist/start-tui-BFtVjPvL.js.map +0 -1
- package/dist/steps-PV5CP6fe.js.map +0 -1
- package/dist/task-stream-DUpUZmFQ.js +0 -61
- package/dist/task-stream-DUpUZmFQ.js.map +0 -1
- package/dist/telemetry-CeitxLMv.js.map +0 -1
- package/dist/wizard-abort-gatjLP05.js.map +0 -1
- package/dist/wizard-session-CPhhll4P.js +0 -2
- package/dist/wizard-session-CsI33S4_.js.map +0 -1
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import "./wizard-ui-YdGFRyu_.js";
|
|
2
|
-
import "./file-BKbKreWF.js";
|
|
3
|
-
import "./posthog-BbQf_Hzq.js";
|
|
4
|
-
//#region src/lib/task-stream/task-stream-push.ts
|
|
5
|
-
const STATUS_MAP = {
|
|
6
|
-
["pending"]: "pending",
|
|
7
|
-
["in_progress"]: "in_progress",
|
|
8
|
-
["completed"]: "completed"
|
|
9
|
-
};
|
|
10
|
-
function buildTasks(items) {
|
|
11
|
-
return items.map((item, i) => ({
|
|
12
|
-
id: String(i),
|
|
13
|
-
title: item.label,
|
|
14
|
-
status: STATUS_MAP[item.status] ?? "pending"
|
|
15
|
-
}));
|
|
16
|
-
}
|
|
17
|
-
var TaskStreamPush = class {
|
|
18
|
-
store;
|
|
19
|
-
destinations;
|
|
20
|
-
startedAt;
|
|
21
|
-
programId;
|
|
22
|
-
sessionId = null;
|
|
23
|
-
created = false;
|
|
24
|
-
constructor(opts) {
|
|
25
|
-
this.store = opts.store;
|
|
26
|
-
this.programId = opts.programId;
|
|
27
|
-
this.destinations = opts.destinations;
|
|
28
|
-
this.startedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
29
|
-
}
|
|
30
|
-
/** Send a final push. */
|
|
31
|
-
async dispose() {
|
|
32
|
-
await this.push();
|
|
33
|
-
}
|
|
34
|
-
async push() {
|
|
35
|
-
const { session, tasks, eventPlan } = this.store;
|
|
36
|
-
const skillId = session.skillId ?? this.programId;
|
|
37
|
-
if (!this.sessionId) this.sessionId = `${this.programId}-${skillId}-${this.startedAt}`;
|
|
38
|
-
const payload = {
|
|
39
|
-
session_id: this.sessionId,
|
|
40
|
-
program_id: this.programId,
|
|
41
|
-
skill_id: skillId,
|
|
42
|
-
started_at: this.startedAt,
|
|
43
|
-
run_phase: session.runPhase,
|
|
44
|
-
tasks: buildTasks(tasks),
|
|
45
|
-
event_plan: eventPlan.length > 0 ? eventPlan : void 0,
|
|
46
|
-
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
47
|
-
};
|
|
48
|
-
let event;
|
|
49
|
-
if (!this.created) {
|
|
50
|
-
this.created = true;
|
|
51
|
-
event = "CREATE";
|
|
52
|
-
} else if (payload.run_phase === "completed") event = "COMPLETE";
|
|
53
|
-
else if (payload.run_phase === "error") event = "ERROR";
|
|
54
|
-
else event = "UPDATE";
|
|
55
|
-
await Promise.all(this.destinations.map((d) => d.send(event, payload).catch(() => {})));
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
//#endregion
|
|
59
|
-
export { TaskStreamPush };
|
|
60
|
-
|
|
61
|
-
//# sourceMappingURL=task-stream-DUpUZmFQ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-stream-DUpUZmFQ.js","names":[],"sources":["../src/lib/task-stream/task-stream-push.ts"],"sourcesContent":["/**\n * Task-stream push — subscribes to WizardStore, builds payloads,\n * and fans out async to all registered destinations.\n */\n\nimport type { WizardStore, TaskItem } from '../../ui/tui/store';\nimport { TaskStatus } from '../../ui/wizard-ui';\nimport { RunPhase } from '../wizard-session';\nimport {\n type TaskStreamDestination,\n type TaskStreamUpdate,\n type StreamTask,\n StreamTaskStatus,\n StreamEvent,\n} from './types';\n\nconst STATUS_MAP: Record<TaskStatus, StreamTaskStatus> = {\n [TaskStatus.Pending]: StreamTaskStatus.Pending,\n [TaskStatus.InProgress]: StreamTaskStatus.InProgress,\n [TaskStatus.Completed]: StreamTaskStatus.Completed,\n};\n\nfunction buildTasks(items: TaskItem[]): StreamTask[] {\n return items.map((item, i) => ({\n id: String(i),\n title: item.label,\n status: STATUS_MAP[item.status] ?? StreamTaskStatus.Pending,\n }));\n}\n\nexport interface TaskStreamPushOptions {\n store: WizardStore;\n programId: string;\n destinations: TaskStreamDestination[];\n}\n\nexport class TaskStreamPush {\n private readonly store: WizardStore;\n private readonly destinations: TaskStreamDestination[];\n private readonly startedAt: string;\n private readonly programId: string;\n\n private sessionId: string | null = null;\n private created = false;\n\n constructor(opts: TaskStreamPushOptions) {\n this.store = opts.store;\n this.programId = opts.programId;\n this.destinations = opts.destinations;\n this.startedAt = new Date().toISOString();\n }\n\n /** Send a final push. */\n async dispose(): Promise<void> {\n await this.push();\n }\n\n async push(): Promise<void> {\n const { session, tasks, eventPlan } = this.store;\n const skillId = session.skillId ?? this.programId;\n\n // Lock session ID on first push so it stays stable\n if (!this.sessionId) {\n this.sessionId = `${this.programId}-${skillId}-${this.startedAt}`;\n }\n\n const payload: TaskStreamUpdate = {\n session_id: this.sessionId,\n program_id: this.programId,\n skill_id: skillId,\n started_at: this.startedAt,\n run_phase: session.runPhase,\n tasks: buildTasks(tasks),\n event_plan: eventPlan.length > 0 ? eventPlan : undefined,\n timestamp: new Date().toISOString(),\n };\n\n let event: StreamEvent;\n if (!this.created) {\n this.created = true;\n event = StreamEvent.Create;\n } else if (payload.run_phase === RunPhase.Completed) {\n event = StreamEvent.Complete;\n } else if (payload.run_phase === RunPhase.Error) {\n event = StreamEvent.Error;\n } else {\n event = StreamEvent.Update;\n }\n\n await Promise.all(\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n this.destinations.map((d) => d.send(event, payload).catch(() => {})),\n );\n }\n}\n"],"mappings":";;;;AAgBA,MAAM,aAAmD;;;;CAIxD;AAED,SAAS,WAAW,OAAiC;AACnD,QAAO,MAAM,KAAK,MAAM,OAAO;EAC7B,IAAI,OAAO,EAAE;EACb,OAAO,KAAK;EACZ,QAAQ,WAAW,KAAK,WAAA;EACzB,EAAE;;AASL,IAAa,iBAAb,MAA4B;CAC1B;CACA;CACA;CACA;CAEA,YAAmC;CACnC,UAAkB;CAElB,YAAY,MAA6B;AACvC,OAAK,QAAQ,KAAK;AAClB,OAAK,YAAY,KAAK;AACtB,OAAK,eAAe,KAAK;AACzB,OAAK,6BAAY,IAAI,MAAM,EAAC,aAAa;;;CAI3C,MAAM,UAAyB;AAC7B,QAAM,KAAK,MAAM;;CAGnB,MAAM,OAAsB;EAC1B,MAAM,EAAE,SAAS,OAAO,cAAc,KAAK;EAC3C,MAAM,UAAU,QAAQ,WAAW,KAAK;AAGxC,MAAI,CAAC,KAAK,UACR,MAAK,YAAY,GAAG,KAAK,UAAU,GAAG,QAAQ,GAAG,KAAK;EAGxD,MAAM,UAA4B;GAChC,YAAY,KAAK;GACjB,YAAY,KAAK;GACjB,UAAU;GACV,YAAY,KAAK;GACjB,WAAW,QAAQ;GACnB,OAAO,WAAW,MAAM;GACxB,YAAY,UAAU,SAAS,IAAI,YAAY,KAAA;GAC/C,4BAAW,IAAI,MAAM,EAAC,aAAa;GACpC;EAED,IAAI;AACJ,MAAI,CAAC,KAAK,SAAS;AACjB,QAAK,UAAU;AACf,WAAA;aACS,QAAQ,cAAA,YACjB,SAAA;WACS,QAAQ,cAAA,QACjB,SAAA;MAEA,SAAA;AAGF,QAAM,QAAQ,IAEZ,KAAK,aAAa,KAAK,MAAM,EAAE,KAAK,OAAO,QAAQ,CAAC,YAAY,GAAG,CAAC,CACrE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry-CeitxLMv.js","names":[],"sources":["../src/telemetry.ts"],"sourcesContent":["import { analytics } from './utils/analytics';\n\nexport function withProgress<T>(step: string, callback: () => T): T {\n updateProgress(step);\n return callback();\n}\n\nexport function updateProgress(step: string) {\n analytics.setTag('progress', step);\n}\n"],"mappings":";;AAEA,SAAgB,aAAgB,MAAc,UAAsB;AAClE,gBAAe,KAAK;AACpB,QAAO,UAAU;;AAGnB,SAAgB,eAAe,MAAc;AAC3C,WAAU,OAAO,YAAY,KAAK"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wizard-abort-gatjLP05.js","names":[],"sources":["../src/utils/wizard-abort.ts"],"sourcesContent":["/**\n * Single exit point for the wizard. Use instead of process.exit() directly.\n *\n * Sequence: cleanup -> error capture (optional) -> analytics shutdown -> outro -> process.exit\n *\n * WizardError is a data carrier passed to wizardAbort() for analytics context, never thrown.\n * The legacy abort() in setup-utils.ts delegates here.\n */\nimport { analytics } from './analytics';\nimport { getUI } from '../ui';\nimport { OutroKind, type OutroData } from '../lib/wizard-session';\n\nexport class WizardError extends Error {\n constructor(\n message: string,\n public readonly context?: Record<string, unknown>,\n ) {\n super(message);\n this.name = 'WizardError';\n }\n}\n\ninterface WizardAbortOptions {\n message?: string;\n /** Structured error data. Renders via `outroError` instead of `outro`. */\n outroData?: OutroData;\n error?: Error | WizardError;\n exitCode?: number;\n}\n\nconst cleanupFns: Array<() => void> = [];\n\nexport function registerCleanup(fn: () => void): void {\n cleanupFns.push(fn);\n}\n\nexport function clearCleanup(): void {\n cleanupFns.length = 0;\n}\n\nexport async function wizardAbort(\n options?: WizardAbortOptions,\n): Promise<never> {\n const {\n message = 'Wizard setup cancelled.',\n outroData,\n error,\n exitCode = 1,\n } = options ?? {};\n\n // 1. Run registered cleanup functions\n for (const fn of cleanupFns) {\n try {\n fn();\n } catch {\n /* cleanup should not prevent exit */\n }\n }\n\n // 2. Capture error in analytics (if provided)\n if (error) {\n analytics.captureException(error, {\n ...((error instanceof WizardError && error.context) || {}),\n });\n }\n\n // 3. Shutdown analytics\n await analytics.shutdown(error ? 'error' : 'cancelled');\n\n // 4. Render the error outro. Synthesize OutroData from `message`\n // when the caller didn't provide structured data.\n const ui = getUI();\n ui.outroError(outroData ?? { kind: OutroKind.Error, message });\n\n // 5. Wait for the user to dismiss the outro screen. In a TUI this gives\n // them time to read the error; in non-TUI environments it resolves\n // immediately.\n await ui.waitForOutroDismissed();\n\n // 6. Exit (fires 'exit' event so TUI cleanup runs)\n return process.exit(exitCode);\n}\n"],"mappings":";;;;;;;;;;;AAYA,IAAa,cAAb,cAAiC,MAAM;CACrC,YACE,SACA,SACA;AACA,QAAM,QAAQ;AAFE,OAAA,UAAA;AAGhB,OAAK,OAAO;;;AAYhB,MAAM,aAAgC,EAAE;AAExC,SAAgB,gBAAgB,IAAsB;AACpD,YAAW,KAAK,GAAG;;AAOrB,eAAsB,YACpB,SACgB;CAChB,MAAM,EACJ,UAAU,2BACV,WACA,OACA,WAAW,MACT,WAAW,EAAE;AAGjB,MAAK,MAAM,MAAM,WACf,KAAI;AACF,MAAI;SACE;AAMV,KAAI,MACF,WAAU,iBAAiB,OAAO,EAChC,GAAK,iBAAiB,eAAe,MAAM,WAAY,EAAE,EAC1D,CAAC;AAIJ,OAAM,UAAU,SAAS,QAAQ,UAAU,YAAY;CAIvD,MAAM,KAAK,OAAO;AAClB,IAAG,WAAW,aAAa;EAAE,MAAA;EAAuB;EAAS,CAAC;AAK9D,OAAM,GAAG,uBAAuB;AAGhC,QAAO,QAAQ,KAAK,SAAS"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wizard-session-CsI33S4_.js","names":[],"sources":["../src/lib/wizard-session.ts"],"sourcesContent":["/**\n * WizardSession — single source of truth for every decision the wizard needs.\n *\n * Populated in layers:\n * CLI args / env vars → populate fields directly\n * Auto-detection → framework, typescript, package manager\n * TUI screens → region, framework disambiguation, etc.\n * OAuth → credentials\n *\n * Business logic reads from the session. Never calls a prompt.\n */\n\nimport type { Integration } from './constants';\nimport type { FrameworkConfig } from './framework-config';\nimport type { WizardReadinessResult } from './health-checks/readiness';\nimport type { SettingsConflict } from './agent/agent-interface';\n\nexport interface Credentials {\n accessToken: string;\n projectApiKey: string;\n host: string;\n projectId: number;\n}\n\nfunction parseProjectIdArg(value: string | undefined): number | undefined {\n if (value === undefined || value === '') return undefined;\n const n = Number(value);\n return Number.isInteger(n) && n > 0 ? n : undefined;\n}\n\nexport type CloudRegion = 'us' | 'eu';\n\n/** Lifecycle phase of the main work (agent run, MCP install, etc.) */\nexport enum RunPhase {\n /** Still gathering input (intro, setup screens) */\n Idle = 'idle',\n /** Main work is in progress */\n Running = 'running',\n /** Main work finished successfully */\n Completed = 'completed',\n /** Main work finished with an error */\n Error = 'error',\n}\n\n/** Features discovered by the feature-discovery subagent */\nexport enum DiscoveredFeature {\n Stripe = 'stripe',\n LLM = 'llm',\n}\n\n/** Additional features the agent can integrate after the main setup */\nexport enum AdditionalFeature {\n LLM = 'llm',\n}\n\n/** Human-readable labels for additional features (used in TUI progress) */\nexport const ADDITIONAL_FEATURE_LABELS: Record<AdditionalFeature, string> = {\n [AdditionalFeature.LLM]: 'LLM analytics',\n};\n\n/** Agent prompts for each additional feature, injected via the stop hook */\nexport const ADDITIONAL_FEATURE_PROMPTS: Record<AdditionalFeature, string> = {\n [AdditionalFeature.LLM]: `Now integrate LLM analytics with PostHog. Use the PostHog MCP server to find the appropriate LLM analytics skill, install it, and follow its workflow. PostHog basics are already installed. Update the setup report markdown file when complete with additions from this task. `,\n};\n\n/** Outcome of the MCP server installation step */\nexport enum McpOutcome {\n NoClients = 'no_clients',\n Skipped = 'skipped',\n Installed = 'installed',\n Failed = 'failed',\n}\n\n/** Outcome kind for the outro screen */\nexport enum OutroKind {\n Success = 'success',\n Error = 'error',\n Cancel = 'cancel',\n}\n\nexport interface OutroData {\n kind: OutroKind;\n /** Main headline (green check for Success, red X for Error, etc.) */\n message?: string;\n /** Free-form body text shown under the headline. Use \\n for paragraph breaks. */\n body?: string;\n /** Success-only: bulleted list of \"what the agent did\" */\n changes?: string[];\n docsUrl?: string;\n continueUrl?: string;\n /** Report file the agent wrote (e.g. \"posthog-setup-report.md\") */\n reportFile?: string;\n /** PostHog dashboard URL the program created on the user's behalf. */\n dashboardUrl?: string;\n}\n\n/** A single question rendered by the WizardAsk overlay. */\nexport interface AskQuestion {\n /** Key for the response map */\n id: string;\n prompt: string;\n /** text = single-line free input; single/multi = picker */\n kind: 'single' | 'multi' | 'text';\n /** Required for `single` and `multi`. Ignored for `text`. */\n options?: { label: string; value: string }[];\n /** Defaults to true */\n required?: boolean;\n}\n\n/** Map of question id → answer (string for single/text, string[] for multi). */\nexport type AskAnswers = Record<string, string | string[]>;\n\n/** A pending wizard_ask request held by the store. */\nexport interface PendingQuestion {\n id: string;\n questions: AskQuestion[];\n /** Skill id of the caller. Set by the wizard from session.skillId. */\n source: string;\n}\n\n/**\n * PostHog dashboard URL emitted by the agent during a program run.\n * Populated via the `[DASHBOARD_URL]` text marker in agent assistant messages\n * — see `handleSDKMessage` in `agent/agent-interface.ts`. Read by programs\n * (e.g. events-audit) inside `buildOutroData` to surface a dashboard link\n * the agent actually created.\n */\n\nexport interface WizardSession {\n // From CLI args\n debug: boolean;\n forceInstall: boolean;\n installDir: string;\n ci: boolean;\n signup: boolean;\n localMcp: boolean;\n mcpFeatures?: string[];\n apiKey?: string;\n email?: string;\n region?: CloudRegion;\n menu: boolean;\n benchmark: boolean;\n yaraReport: boolean;\n projectId?: number;\n\n // From detection + screens\n setupConfirmed: boolean;\n integration: Integration | null;\n frameworkContext: Record<string, unknown>;\n typescript: boolean;\n\n /** Human-readable label for the detected framework variant (e.g., \"Django with Wagtail CMS\") */\n detectedFrameworkLabel: string | null;\n\n /** True once framework detection has run (whether it found something or not) */\n detectionComplete: boolean;\n\n /** Set when the detected framework version is too old for the wizard */\n unsupportedVersion: {\n current: string;\n minimum: string;\n docsUrl: string;\n } | null;\n\n // From OAuth\n credentials: Credentials | null;\n\n // Lifecycle\n runPhase: RunPhase;\n loginUrl: string | null;\n\n // Feature discovery\n discoveredFeatures: DiscoveredFeature[];\n llmOptIn: boolean;\n\n // ScreenId completion\n mcpComplete: boolean;\n mcpOutcome: McpOutcome | null;\n mcpInstalledClients: string[];\n skillsComplete: boolean;\n outroDismissed: boolean;\n\n // Runtime\n readinessResult: WizardReadinessResult | null;\n outageDismissed: boolean;\n settingsOverrideKeys: string[] | null;\n settingsConflicts: SettingsConflict[] | null;\n authErrorDetail: {\n hasSettingsConflict: boolean;\n logFilePath: string;\n } | null;\n portConflictProcess: {\n command: string;\n pid: string;\n port: number;\n user: string;\n } | null;\n outroData: OutroData | null;\n dashboardUrl: string | null;\n\n // Additional features queue (drained via stop hook after main integration)\n additionalFeatureQueue: AdditionalFeature[];\n\n // Program metadata (set by runWizard in bin.ts)\n programLabel: string | null;\n skillId: string | null;\n\n // Resolved framework config (set after integration is known)\n frameworkConfig: FrameworkConfig | null;\n\n /** Active wizard_ask request, set by the bridge when the agent calls the tool. */\n pendingQuestion: PendingQuestion | null;\n}\n\n/**\n * Build a WizardSession from CLI args, pre-populating whatever is known.\n */\nexport function buildSession(args: {\n debug?: boolean;\n forceInstall?: boolean;\n installDir?: string;\n ci?: boolean;\n signup?: boolean;\n localMcp?: boolean;\n mcpFeatures?: string[];\n apiKey?: string;\n email?: string;\n region?: CloudRegion;\n menu?: boolean;\n integration?: Integration;\n benchmark?: boolean;\n yaraReport?: boolean;\n projectId?: string;\n}): WizardSession {\n return {\n debug: args.debug ?? false,\n forceInstall: args.forceInstall ?? false,\n installDir: args.installDir ?? process.cwd(),\n ci: args.ci ?? false,\n signup: args.signup ?? false,\n localMcp: args.localMcp ?? false,\n mcpFeatures: args.mcpFeatures,\n apiKey: args.apiKey,\n email: args.email,\n region: args.region,\n menu: args.menu ?? false,\n benchmark: args.benchmark ?? false,\n yaraReport: args.yaraReport ?? false,\n projectId: parseProjectIdArg(args.projectId),\n\n setupConfirmed: false,\n integration: args.integration ?? null,\n frameworkContext: {},\n typescript: false,\n detectedFrameworkLabel: null,\n detectionComplete: false,\n unsupportedVersion: null,\n\n runPhase: RunPhase.Idle,\n discoveredFeatures: [],\n llmOptIn: false,\n mcpComplete: false,\n mcpOutcome: null,\n mcpInstalledClients: [],\n skillsComplete: false,\n outroDismissed: false,\n loginUrl: null,\n credentials: null,\n readinessResult: null,\n outageDismissed: false,\n settingsOverrideKeys: null,\n settingsConflicts: null,\n authErrorDetail: null,\n portConflictProcess: null,\n outroData: null,\n dashboardUrl: null,\n additionalFeatureQueue: [],\n programLabel: null,\n skillId: null,\n frameworkConfig: null,\n pendingQuestion: null,\n };\n}\n"],"mappings":";AAwBA,SAAS,kBAAkB,OAA+C;AACxE,KAAI,UAAU,KAAA,KAAa,UAAU,GAAI,QAAO,KAAA;CAChD,MAAM,IAAI,OAAO,MAAM;AACvB,QAAO,OAAO,UAAU,EAAE,IAAI,IAAI,IAAI,IAAI,KAAA;;;AA6B5C,MAAa,4BAA+D,GAAA,QACjD,iBAC1B;;AAGD,MAAa,6BAAgE,GAAA,QAClD,oRAC1B;;;;AA0JD,SAAgB,aAAa,MAgBX;AAChB,QAAO;EACL,OAAO,KAAK,SAAS;EACrB,cAAc,KAAK,gBAAgB;EACnC,YAAY,KAAK,cAAc,QAAQ,KAAK;EAC5C,IAAI,KAAK,MAAM;EACf,QAAQ,KAAK,UAAU;EACvB,UAAU,KAAK,YAAY;EAC3B,aAAa,KAAK;EAClB,QAAQ,KAAK;EACb,OAAO,KAAK;EACZ,QAAQ,KAAK;EACb,MAAM,KAAK,QAAQ;EACnB,WAAW,KAAK,aAAa;EAC7B,YAAY,KAAK,cAAc;EAC/B,WAAW,kBAAkB,KAAK,UAAU;EAE5C,gBAAgB;EAChB,aAAa,KAAK,eAAe;EACjC,kBAAkB,EAAE;EACpB,YAAY;EACZ,wBAAwB;EACxB,mBAAmB;EACnB,oBAAoB;EAEpB,UAAA;EACA,oBAAoB,EAAE;EACtB,UAAU;EACV,aAAa;EACb,YAAY;EACZ,qBAAqB,EAAE;EACvB,gBAAgB;EAChB,gBAAgB;EAChB,UAAU;EACV,aAAa;EACb,iBAAiB;EACjB,iBAAiB;EACjB,sBAAsB;EACtB,mBAAmB;EACnB,iBAAiB;EACjB,qBAAqB;EACrB,WAAW;EACX,cAAc;EACd,wBAAwB,EAAE;EAC1B,cAAc;EACd,SAAS;EACT,iBAAiB;EACjB,iBAAiB;EAClB"}
|