@useorgx/wizard 0.1.6 → 0.1.8
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 +8 -2
- package/dist/cli.js +2314 -271
- package/dist/cli.js.map +1 -1
- package/package.json +2 -2
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/banner.ts","../src/constants.ts","../src/lib/browser-auth.ts","../src/lib/fs.ts","../src/surfaces/openclaw-config.ts","../src/lib/auth-store.ts","../src/lib/auth.ts","../src/lib/openclaw-health.ts","../src/lib/hosted-mcp-health.ts","../src/lib/hosted-mcp-tool-check.ts","../src/lib/npm-registry-health.ts","../src/lib/workspaces.ts","../src/lib/workspace-connectivity.ts","../src/surfaces/mcp-config.ts","../src/surfaces/names.ts","../src/surfaces/detection.ts","../src/surfaces/registry.ts","../src/lib/wizard-state.ts","../src/lib/continuity.ts","../src/lib/initiatives.ts","../src/lib/skills.ts","../src/lib/setup-workspace.ts","../src/lib/founder-preset.ts","../src/lib/mutation-output.ts","../src/spinner.ts"],"sourcesContent":["import * as clack from \"@clack/prompts\";\nimport { hostname } from \"node:os\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\n\ndeclare const __PKG_VERSION__: string;\n\nimport { renderBanner } from \"./banner.js\";\nimport { ORGX_WIZARD_AUTH_PATH } from \"./constants.js\";\nimport {\n acknowledgeBrowserPairing,\n openBrowser,\n startBrowserPairing,\n waitForBrowserPairing,\n} from \"./lib/browser-auth.js\";\nimport {\n checkOrgxAuth,\n normalizeOrgxBaseUrl,\n resolveOrgxAuth,\n verifyOrgxAuth,\n type OrgxAuthCheckResult,\n} from \"./lib/auth.js\";\nimport { clearWizardAuth, writeWizardAuth } from \"./lib/auth-store.js\";\nimport { persistContinuityDefaults } from \"./lib/continuity.js\";\nimport { runFounderPreset, type FounderPresetResult } from \"./lib/founder-preset.js\";\nimport { getOrCreateWizardInstallationId } from \"./lib/wizard-state.js\";\nimport {\n installOrgxSkills,\n type SkillsInstallReport,\n} from \"./lib/skills.js\";\nimport { summarizeMutationResults } from \"./lib/mutation-output.js\";\nimport {\n createWorkspace,\n getCurrentWorkspace,\n listWorkspaces,\n setDefaultWorkspace,\n type OrgxWorkspace,\n} from \"./lib/workspaces.js\";\nimport { runWorkspaceSetup, type WorkspaceSetupResult } from \"./lib/setup-workspace.js\";\nimport { createOrgxSpinner } from \"./spinner.js\";\nimport { detectSurface } from \"./surfaces/detection.js\";\nimport {\n assessDoctorReport,\n addMcpSurface,\n addSurface,\n listSurfaceStatuses,\n removeMcpSurface,\n removeSurface,\n runDoctor,\n setupDetectedSurfaces,\n type SurfaceMutationResult,\n type SurfaceStatus,\n} from \"./surfaces/registry.js\";\n\nconst ICON = {\n ok: pc.green(\"✓\"),\n err: pc.red(\"✗\"),\n warn: pc.yellow(\"!\"),\n skip: pc.dim(\"·\"),\n} as const;\n\n/**\n * Returns the right command prefix based on how the wizard was invoked.\n * When run via `npx @useorgx/wizard`, `orgx-wizard` won't be in PATH — hints\n * should use the npx form so users can copy-paste them directly.\n */\nfunction getCmd(): string {\n const argv1 = process.argv[1] ?? \"\";\n return argv1.includes(\"_npx\") || argv1.includes(\"/.npm/\") || argv1.includes(\"/npm/_npx\")\n ? \"npx @useorgx/wizard\"\n : \"orgx-wizard\";\n}\n\nfunction formatAuthSource(source: OrgxAuthCheckResult[\"source\"]): string {\n switch (source) {\n case \"environment\":\n return \"env ORGX_API_KEY\";\n case \"wizard-store\":\n return \"wizard auth store\";\n case \"openclaw-config-file\":\n return \"openclaw config\";\n default:\n return \"not configured\";\n }\n}\n\nfunction printSurfaceTable(statuses: SurfaceStatus[]): void {\n for (const status of statuses) {\n const icon = status.configured ? ICON.ok : status.detected ? ICON.warn : ICON.skip;\n const state = status.configured\n ? pc.green(\"configured\")\n : status.detected\n ? pc.yellow(\"detected\")\n : pc.dim(\"not found\");\n const mode = pc.dim(status.mode === \"automated\" ? \"auto \" : \"manual\");\n console.log(` ${icon} ${pc.bold(status.name.padEnd(10))} ${mode} ${state}`);\n }\n}\n\nfunction printMutationResults(results: SurfaceMutationResult[]): void {\n for (const result of summarizeMutationResults(results)) {\n const icon = result.state === \"updated\" ? ICON.ok : ICON.skip;\n const state = result.state === \"updated\" ? pc.green(\"updated \") : pc.dim(\"unchanged\");\n console.log(` ${icon} ${pc.bold(result.name.padEnd(10))} ${state} ${pc.dim(result.message)}`);\n }\n}\n\nfunction printSkillInstallReport(report: SkillsInstallReport): void {\n for (const write of report.writes) {\n const icon = write.changed ? ICON.ok : ICON.skip;\n const state = write.changed ? pc.green(\"updated \") : pc.dim(\"unchanged\");\n console.log(` ${icon} ${pc.bold(write.label.padEnd(10))} ${state}`);\n }\n\n for (const pack of report.packs) {\n const changedCount = pack.files.filter((f) => f.changed).length;\n const icon = changedCount > 0 ? ICON.ok : ICON.skip;\n const state = changedCount > 0 ? pc.green(`${changedCount} updated `) : pc.dim(\"unchanged\");\n console.log(` ${icon} ${pc.bold(pack.name.padEnd(10))} ${state} ${pc.dim(`${pack.files.length} files`)}`);\n }\n}\n\nfunction printWorkspace(workspace: OrgxWorkspace): void {\n console.log(\n `${pc.bold(workspace.name)}${workspace.isDefault ? ` ${pc.green(\"(default)\")}` : \"\"}`,\n );\n console.log(` id: ${workspace.id}`);\n if (workspace.description) {\n console.log(` description: ${workspace.description}`);\n }\n if (workspace.createdAt) {\n console.log(` created: ${workspace.createdAt}`);\n }\n if (workspace.updatedAt) {\n console.log(` updated: ${workspace.updatedAt}`);\n }\n}\n\nfunction printWorkspaceList(workspaces: OrgxWorkspace[]): void {\n if (workspaces.length === 0) {\n console.log(pc.yellow(\"No workspaces found for this OrgX user.\"));\n return;\n }\n\n for (const workspace of workspaces) {\n printWorkspace(workspace);\n }\n}\n\nfunction printWorkspaceSetupResult(result: WorkspaceSetupResult): void {\n if (result.workspace) {\n const icon = result.status === \"updated\" ? ICON.ok : ICON.skip;\n console.log(` ${icon} ${pc.green(\"workspace \")} ${pc.bold(result.workspace.name)}`);\n } else {\n console.log(` ${ICON.skip} ${pc.dim(result.message)}`);\n }\n}\n\nfunction printFounderPresetResult(result: FounderPresetResult): void {\n printMutationResults(result.surfaceResults);\n console.log(\"\");\n printSkillInstallReport(result.skillReport);\n\n if (result.workspaceSetup) {\n console.log(\"\");\n printWorkspaceSetupResult(result.workspaceSetup);\n }\n\n if (result.demoInitiative) {\n console.log(\"\");\n console.log(pc.bold(\"demo initiative\"));\n console.log(\n ` ${result.demoInitiative.created ? pc.green(\"created\") : pc.yellow(\"unchanged\")} ${result.demoInitiative.initiative.title}`,\n );\n console.log(` live: ${result.demoInitiative.liveUrl}`);\n }\n}\n\nfunction normalizePromptResult<T>(value: T | symbol): T | symbol {\n return value;\n}\n\nasync function secretPrompt(message: string): Promise<string | null> {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n return null;\n }\n\n process.stdout.write(`${message}: `);\n\n const stdin = process.stdin;\n const stdout = process.stdout;\n const previousRawMode = stdin.isRaw === true;\n\n return await new Promise<string | null>((resolve) => {\n let value = \"\";\n\n const cleanup = (result: string | null) => {\n stdin.off(\"data\", onData);\n if (stdin.isTTY) {\n stdin.setRawMode(previousRawMode);\n }\n stdin.pause();\n stdout.write(\"\\n\");\n resolve(result);\n };\n\n const onData = (chunk: Buffer | string) => {\n const text = chunk.toString(\"utf8\");\n\n for (const char of text) {\n if (char === \"\\u0003\") {\n cleanup(null);\n return;\n }\n\n if (char === \"\\r\" || char === \"\\n\") {\n cleanup(value.trim());\n return;\n }\n\n if (char === \"\\u007f\" || char === \"\\b\") {\n value = value.slice(0, -1);\n continue;\n }\n\n if (char >= \" \") {\n value += char;\n }\n }\n };\n\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.on(\"data\", onData);\n });\n}\n\nasync function selectPrompt(input: {\n initialValue?: string | undefined;\n message: string;\n options: { hint?: string; label: string; value: string }[];\n}): Promise<string | symbol> {\n const promptInput = input.initialValue\n ? { ...input, initialValue: input.initialValue }\n : { message: input.message, options: input.options };\n\n return normalizePromptResult(await clack.select<string>(promptInput));\n}\n\nasync function textPrompt(input: {\n initialValue?: string | undefined;\n message: string;\n placeholder?: string;\n validate?: (value: string | undefined) => Error | string | undefined;\n}): Promise<string | symbol> {\n const promptInput = input.initialValue\n ? { ...input, initialValue: input.initialValue }\n : {\n message: input.message,\n ...(input.placeholder ? { placeholder: input.placeholder } : {}),\n ...(input.validate ? { validate: input.validate } : {}),\n };\n\n return normalizePromptResult(await clack.text(promptInput));\n}\n\nasync function verifyAndPersistAuth(\n apiKey: string,\n options: { baseUrl?: string },\n): Promise<{\n verification: OrgxAuthCheckResult;\n} | {\n openclawResults: SurfaceMutationResult[];\n stored: Awaited<ReturnType<typeof writeWizardAuth>>;\n verification: OrgxAuthCheckResult;\n}> {\n const trimmedKey = apiKey.trim();\n if (!trimmedKey.toLowerCase().startsWith(\"oxk_\")) {\n throw new Error(\"Expected a per-user OrgX API key that starts with oxk_.\");\n }\n\n const baseUrl = normalizeOrgxBaseUrl(options.baseUrl);\n const verification = await verifyOrgxAuth({\n apiKey: trimmedKey,\n keyPrefix: trimmedKey.slice(0, 12),\n baseUrl,\n source: \"wizard-store\",\n });\n\n if (!verification.ok) {\n return { verification };\n }\n\n const stored = await writeWizardAuth({\n apiKey: trimmedKey,\n baseUrl,\n verifiedAt: new Date().toISOString(),\n });\n const openclawResults = detectSurface(\"openclaw\").detected\n ? await addSurface(\"openclaw\")\n : [];\n\n return { openclawResults, stored, verification };\n}\n\nasync function syncContinuityAfterAuth(seed: {\n executionMode?: \"cloud\" | \"local\" | null;\n workspaceName?: string | null;\n} = {}): Promise<void> {\n try {\n const workspace = await getCurrentWorkspace().catch(() => null);\n persistContinuityDefaults({\n ...(seed.executionMode !== undefined ? { executionMode: seed.executionMode } : {}),\n workspace,\n workspaceName: seed.workspaceName ?? workspace?.name ?? null,\n });\n } catch {\n // Auth success should not depend on workspace or continuity writes.\n }\n}\n\nfunction parseTimeoutSeconds(value: string): number {\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw new Error(\"--timeout must be a positive number of seconds.\");\n }\n return parsed;\n}\n\n\nfunction printAuthStatus(status: OrgxAuthCheckResult): void {\n if (!status.configured) {\n console.log(` ${ICON.warn} ${pc.yellow(\"no account\")} run ${pc.cyan(`${getCmd()} auth login`)} to connect`);\n return;\n }\n\n const icon = status.ok ? ICON.ok : ICON.err;\n const state = status.ok ? pc.green(\"verified \") : status.skipped ? pc.yellow(\"skipped \") : pc.red(\"invalid \");\n const via = pc.dim(formatAuthSource(status.source));\n console.log(` ${icon} ${state} ${pc.bold(status.keyPrefix ?? \"unknown\")} ${via}`);\n if (!status.ok && status.error) {\n console.log(` ${pc.red(status.error)}`);\n }\n}\n\nfunction printDoctorReport(\n report: Awaited<ReturnType<typeof runDoctor>>,\n assessment: ReturnType<typeof assessDoctorReport>,\n): void {\n // — Surfaces —\n console.log(pc.dim(\" surfaces\"));\n printSurfaceTable(report.surfaces);\n\n // — Account —\n console.log(\"\");\n console.log(pc.dim(\" account\"));\n printAuthStatus(report.auth);\n\n // — Services —\n console.log(\"\");\n console.log(pc.dim(\" services\"));\n\n // Hosted MCP\n const mcp = report.hostedMcp;\n {\n const icon = mcp.skipped ? ICON.skip : mcp.ok ? ICON.ok : ICON.err;\n const label = pc.dim(\"cloud mcp \".padEnd(14));\n const state = mcp.skipped ? pc.dim(\"skipped\") : mcp.ok ? pc.green(\"reachable\") : pc.red(\"unreachable\");\n const tail = !mcp.ok && !mcp.skipped && mcp.error ? ` ${pc.dim(mcp.error)}` : \"\";\n console.log(` ${icon} ${label} ${state}${tail}`);\n }\n\n // Tool call\n const tool = report.hostedMcpTool;\n {\n const icon = tool.skipped ? ICON.skip : tool.ok ? ICON.ok : ICON.err;\n const label = pc.dim(\"tool call \".padEnd(14));\n const state = tool.skipped ? pc.dim(\"skipped\") : tool.ok ? pc.green(\"authenticated\") : pc.red(\"failed\");\n const tail = !tool.ok && !tool.skipped && tool.error ? ` ${pc.dim(tool.error)}` : \"\";\n console.log(` ${icon} ${label} ${state}${tail}`);\n }\n\n // Workspace\n const ws = report.workspace;\n {\n const icon = !ws.configured ? ICON.skip : ws.ok ? ICON.ok : ICON.err;\n const label = pc.dim(\"workspace \".padEnd(14));\n const state = !ws.configured\n ? pc.dim(\"not configured\")\n : ws.ok && ws.workspace\n ? pc.green(ws.workspace.name)\n : pc.red(`unreachable${ws.error ? `: ${ws.error}` : \"\"}`);\n console.log(` ${icon} ${label} ${state}`);\n }\n\n // OpenClaw\n const openclaw = report.openclaw;\n {\n const icon = openclaw.skipped ? ICON.skip : openclaw.ok ? ICON.ok : ICON.err;\n const label = pc.dim(\"openclaw \".padEnd(14));\n const state = openclaw.skipped\n ? pc.dim(\"not installed\")\n : openclaw.ok\n ? pc.green(`healthy${openclaw.method && openclaw.method !== \"none\" ? ` (${openclaw.method})` : \"\"}`)\n : pc.red(`unhealthy${openclaw.error ? `: ${openclaw.error}` : \"\"}`);\n console.log(` ${icon} ${label} ${state}`);\n }\n\n // — Summary —\n console.log(\"\");\n const configuredCount = report.surfaces.filter((s) => s.configured).length;\n if (assessment.issues.length === 0) {\n console.log(` ${ICON.ok} ${pc.green(\"All systems ready.\")}`);\n if (!report.auth.configured) {\n console.log(`\\n ${pc.dim(\"→\")} ${pc.cyan(`${getCmd()} auth login`)} ${pc.dim(\"to connect your account\")}`);\n } else {\n console.log(` ${pc.dim(\"→\")} ${pc.dim(`OrgX is active across ${configuredCount} editor${configuredCount !== 1 ? \"s\" : \"\"}`)}`);\n }\n } else {\n const hasError = assessment.issues.some((i) => i.level === \"error\");\n const headline = hasError\n ? `${ICON.err} ${pc.red(\"Issues detected\")}`\n : `${ICON.warn} ${pc.yellow(\"Warnings detected\")}`;\n console.log(` ${headline}`);\n for (const issue of assessment.issues) {\n const label = issue.level === \"error\" ? pc.red(\"error\") : pc.yellow(\"warn \");\n console.log(`\\n ${label} ${issue.title}`);\n console.log(` ${pc.dim(\"→\")} ${issue.suggestion}`);\n }\n }\n}\n\nasync function main(): Promise<void> {\n const program = new Command();\n program\n .name(\"orgx-wizard\")\n .description(\"One-line CLI onboarding for OrgX surfaces.\")\n .showHelpAfterError();\n\n const pkgVersion = typeof __PKG_VERSION__ !== \"undefined\" ? __PKG_VERSION__ : undefined;\n program.version(pkgVersion ?? \"unknown\", \"-V, --version\");\n\n program.hook(\"preAction\", () => {\n console.log(renderBanner(pkgVersion));\n });\n\n program\n .command(\"setup\")\n .description(\"Patch all detected automated OrgX surfaces.\")\n .option(\"--preset <name>\", \"run a setup bundle (currently: founder)\")\n .action(async (options: { preset?: string }) => {\n if (options.preset) {\n if (options.preset !== \"founder\") {\n throw new Error(`Unknown setup preset '${options.preset}'. Supported presets: founder.`);\n }\n\n const spinner = createOrgxSpinner(\"Running founder setup preset\");\n spinner.start();\n const presetResult = await runFounderPreset(\n {\n cancel: clack.cancel,\n isCancel: clack.isCancel,\n select: selectPrompt,\n text: textPrompt,\n },\n {\n interactive: Boolean(process.stdin.isTTY && process.stdout.isTTY),\n },\n );\n\n if (\"status\" in presetResult) {\n spinner.stop();\n if (presetResult.status === \"cancelled\") {\n return;\n }\n printWorkspaceSetupResult(presetResult);\n return;\n }\n\n spinner.succeed(\"Founder setup preset complete\");\n printFounderPresetResult(presetResult);\n\n console.log(\"\");\n const doctor = await runDoctor();\n const assessment = assessDoctorReport(doctor);\n printDoctorReport(doctor, assessment);\n if (!assessment.ok) {\n process.exitCode = 1;\n }\n return;\n }\n\n const spinner = createOrgxSpinner(\"Configuring detected OrgX surfaces\");\n spinner.start();\n const results = await setupDetectedSurfaces();\n spinner.succeed(\"Detected surfaces configured\");\n printMutationResults(results);\n\n let resolvedAuth = await resolveOrgxAuth();\n if (!resolvedAuth) {\n console.log(\"\");\n const interactive = Boolean(process.stdin.isTTY && process.stdout.isTTY);\n if (interactive) {\n const choice = await selectPrompt({\n message: \"Connect your OrgX account to enable workspace and AI tool access\",\n options: [\n { value: \"login\", label: \"Open browser to connect\", hint: \"recommended\" },\n { value: \"skip\", label: \"Skip for now\", hint: `run \\`${getCmd()} auth login\\` later` },\n ],\n });\n if (clack.isCancel(choice)) {\n clack.cancel(\"Setup cancelled.\");\n return;\n }\n if (choice === \"login\") {\n const loginOk = await runBrowserLogin();\n if (!loginOk) {\n // Pairing failed — show clean next steps, don't dump the full doctor\n console.log(`\\n ${pc.dim(\"→\")} ${pc.cyan(`${getCmd()} auth login`)} ${pc.dim(\"to try again\")}`);\n console.log(` ${pc.dim(\"→\")} ${pc.cyan(`${getCmd()} auth login --api-key`)} ${pc.dim(\"to paste a key directly\")}`);\n return;\n }\n resolvedAuth = await resolveOrgxAuth();\n } else {\n // User skipped\n console.log(`\\n ${pc.dim(\"→\")} ${pc.cyan(`${getCmd()} auth login`)} ${pc.dim(\"to connect when ready\")}`);\n return;\n }\n } else {\n console.log(\n ` ${ICON.warn} ${pc.yellow(\"No account connected.\")} Run ${pc.cyan(`${getCmd()} auth login`)} to connect.`,\n );\n return;\n }\n }\n\n if (resolvedAuth) {\n console.log(\"\");\n const workspaceSetup = await runWorkspaceSetup(\n {\n createWorkspace,\n getCurrentWorkspace,\n listWorkspaces,\n setDefaultWorkspace,\n },\n {\n cancel: clack.cancel,\n isCancel: clack.isCancel,\n select: selectPrompt,\n text: textPrompt,\n },\n {\n interactive: Boolean(process.stdin.isTTY && process.stdout.isTTY),\n },\n );\n if (workspaceSetup.status === \"cancelled\") {\n return;\n }\n if (workspaceSetup.workspace) {\n console.log(` ${ICON.ok} ${pc.green(\"workspace \")} ${pc.bold(workspaceSetup.workspace.name)}`);\n }\n }\n\n // Compact final status — surfaces already shown above, just give the bottom line\n const doctor = await runDoctor();\n const assessment = assessDoctorReport(doctor);\n const configuredCount = doctor.surfaces.filter((s) => s.configured).length;\n console.log(\"\");\n if (assessment.issues.length === 0) {\n console.log(` ${ICON.ok} ${pc.green(\"You're all set.\")} ${pc.dim(`OrgX is active across ${configuredCount} editor${configuredCount !== 1 ? \"s\" : \"\"}`)}`);\n } else {\n // Something needs attention — show full report\n printDoctorReport(doctor, assessment);\n if (!assessment.ok) {\n process.exitCode = 1;\n }\n }\n });\n\n async function runBrowserLogin(opts: {\n baseUrl?: string;\n deviceName?: string;\n open?: boolean;\n timeout?: number;\n } = {}): Promise<boolean> {\n const installationId = getOrCreateWizardInstallationId();\n const spinner = createOrgxSpinner(\"Starting OrgX browser pairing\");\n spinner.start();\n\n try {\n const pairing = await startBrowserPairing({\n installationId,\n baseUrl: opts.baseUrl,\n deviceName: opts.deviceName ?? hostname(),\n platform: process.platform,\n });\n spinner.succeed(\"Browser pairing session opened\");\n\n console.log(`\\n ${pc.dim(\"Open this URL to connect:\")}`);\n console.log(` ${pc.cyan(pairing.connectUrl)}\\n`);\n if (opts.open !== false) {\n const openResult = openBrowser(pairing.connectUrl);\n if (!openResult.ok && openResult.error) {\n console.log(pc.yellow(`Browser open failed: ${openResult.error}`));\n }\n }\n\n spinner.start();\n spinner.text = \"Waiting for browser approval...\";\n const ready = await waitForBrowserPairing({\n baseUrl: opts.baseUrl,\n pairingId: pairing.pairingId,\n pollIntervalMs: pairing.pollIntervalMs,\n pollToken: pairing.pollToken,\n timeoutMs: (opts.timeout ?? 600) * 1000,\n });\n\n spinner.text = \"Verifying API key...\";\n const result = await verifyAndPersistAuth(ready.key!, {\n ...(opts.baseUrl !== undefined ? { baseUrl: opts.baseUrl } : {}),\n });\n\n if (!(\"stored\" in result)) {\n spinner.fail(\"Pairing completed but key was rejected\");\n console.log(` ${pc.red(result.verification.error ?? `HTTP ${result.verification.status ?? \"error\"}`)}`);\n console.log(` ${pc.dim(\"The browser flow finished, but OrgX rejected the key. Try again or check your account at useorgx.com.\")}`);\n return false;\n }\n\n await acknowledgeBrowserPairing({\n baseUrl: opts.baseUrl,\n pairingId: pairing.pairingId,\n pollToken: pairing.pollToken,\n }).catch((error: unknown) => {\n console.log(pc.dim(`Pairing ack failed: ${error instanceof Error ? error.message : String(error)}`));\n });\n\n spinner.succeed(\"OrgX account connected\");\n await syncContinuityAfterAuth({\n executionMode: ready.executionMode,\n workspaceName: ready.workspaceName,\n });\n\n console.log(` ${ICON.ok} ${pc.green(\"verified \")} ${pc.bold(result.stored.keyPrefix ?? result.verification.keyPrefix ?? \"unknown\")} ${pc.dim(\"wizard auth store\")}`);\n if (ready.workspaceName) {\n console.log(` ${ICON.ok} ${pc.green(\"workspace \")} ${pc.bold(ready.workspaceName)}`);\n }\n\n if (result.openclawResults.length > 0) {\n console.log(\"\");\n printMutationResults(result.openclawResults);\n }\n\n return true;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n spinner.fail(\"Browser pairing failed\");\n console.log(` ${pc.red(message)}`);\n return false;\n }\n }\n\n const auth = program.command(\"auth\").description(\"Manage OrgX API key auth for the wizard.\");\n\n auth\n .command(\"status\")\n .description(\"Show the resolved OrgX API key source and verify it against OrgX.\")\n .action(async () => {\n const spinner = createOrgxSpinner(\"Checking OrgX auth\");\n spinner.start();\n const status = await checkOrgxAuth();\n spinner.stop();\n console.log(pc.dim(\" account\"));\n printAuthStatus(status);\n });\n\n auth\n .command(\"login\")\n .description(\"Start browser pairing for OrgX auth, with direct API key fallback for CI and blocked browsers.\")\n .option(\"--api-key <key>\", \"Bypass browser pairing and verify this OrgX API key directly.\")\n .option(\"--base-url <url>\", \"OrgX base URL\")\n .option(\"--device-name <name>\", \"Device name shown during browser approval.\")\n .option(\"--no-open\", \"Do not automatically open the browser connect URL.\")\n .option(\"--timeout <seconds>\", \"How long to wait for browser pairing before giving up.\", parseTimeoutSeconds, 600)\n .action(async (options: { apiKey?: string; baseUrl?: string; deviceName?: string; open?: boolean; timeout: number }) => {\n if (options.apiKey) {\n const spinner = createOrgxSpinner(\"Verifying OrgX API key\");\n spinner.start();\n const result = await verifyAndPersistAuth(options.apiKey, options);\n\n if (!(\"stored\" in result)) {\n spinner.fail(\"OrgX API key verification failed\");\n printAuthStatus(result.verification);\n return;\n }\n\n spinner.succeed(\"OrgX account connected\");\n await syncContinuityAfterAuth();\n console.log(` ${ICON.ok} ${pc.green(\"verified \")} ${pc.bold(result.stored.keyPrefix ?? result.verification.keyPrefix ?? \"unknown\")} ${pc.dim(\"wizard auth store\")}`);\n\n if (result.openclawResults.length > 0) {\n console.log(\"\");\n printMutationResults(result.openclawResults);\n }\n return;\n }\n\n await runBrowserLogin({\n ...(options.baseUrl !== undefined ? { baseUrl: options.baseUrl } : {}),\n ...(options.deviceName !== undefined ? { deviceName: options.deviceName } : {}),\n ...(options.open !== undefined ? { open: options.open } : {}),\n timeout: options.timeout,\n });\n });\n\n auth\n .command(\"set-key\")\n .description(\"Verify and persist a per-user OrgX API key for the wizard.\")\n .argument(\"<apiKey>\", \"per-user OrgX API key (oxk_...)\")\n .option(\"--base-url <url>\", \"OrgX base URL\")\n .action(async (apiKey: string, options: { baseUrl?: string }) => {\n const spinner = createOrgxSpinner(\"Verifying OrgX API key\");\n spinner.start();\n const result = await verifyAndPersistAuth(apiKey, options);\n\n if (!(\"stored\" in result)) {\n spinner.fail(\"OrgX API key verification failed\");\n printAuthStatus(result.verification);\n return;\n }\n\n spinner.succeed(\"OrgX account connected\");\n await syncContinuityAfterAuth();\n console.log(` ${ICON.ok} ${pc.green(\"verified \")} ${pc.bold(result.stored.keyPrefix ?? result.verification.keyPrefix ?? \"unknown\")} ${pc.dim(\"wizard auth store\")}`);\n\n if (result.openclawResults.length > 0) {\n console.log(\"\");\n printMutationResults(result.openclawResults);\n }\n });\n\n auth\n .command(\"clear\")\n .description(\"Remove the wizard-local saved OrgX API key.\")\n .action(async () => {\n const removed = await clearWizardAuth();\n if (removed) {\n console.log(pc.green(\"Removed the wizard-local OrgX API key.\"));\n } else {\n console.log(pc.yellow(\"No wizard-local OrgX API key was stored.\"));\n }\n\n const resolved = await resolveOrgxAuth();\n if (resolved) {\n console.log(\n `Effective OrgX auth still resolves from ${formatAuthSource(resolved.source)} (${resolved.keyPrefix}).`,\n );\n }\n });\n\n const surface = program.command(\"surface\").description(\"Manage supported OrgX surfaces.\");\n\n surface\n .command(\"list\")\n .description(\"Show supported surfaces and their current status.\")\n .action(() => {\n printSurfaceTable(listSurfaceStatuses());\n });\n\n surface\n .command(\"add\")\n .description(\"Patch one surface or all automated surfaces.\")\n .argument(\"<names...>\", \"surface names or 'all'\")\n .action(async (names: string[]) => {\n const results = await addSurface(names as Parameters<typeof addSurface>[0]);\n printMutationResults(results);\n });\n\n surface\n .command(\"remove\")\n .description(\"Remove OrgX-managed config from one surface or all automated surfaces.\")\n .argument(\"<names...>\", \"surface names or 'all'\")\n .action((names: string[]) => {\n const results = removeSurface(names as Parameters<typeof removeSurface>[0]);\n printMutationResults(results);\n });\n\n const mcp = program\n .command(\"mcp\")\n .description(\"Manage OrgX MCP entries for Claude, Cursor, Codex, VS Code, Windsurf, and Zed.\");\n\n mcp\n .command(\"add\")\n .description(\"Add OrgX MCP entries to one client or all supported MCP clients.\")\n .argument(\"[surfaces...]\", \"claude, cursor, codex, vscode, windsurf, zed, or all\", [\"all\"])\n .action(async (names: string[]) => {\n const results = await addMcpSurface(names as Parameters<typeof addMcpSurface>[0]);\n printMutationResults(results);\n });\n\n mcp\n .command(\"remove\")\n .description(\"Remove OrgX MCP entries from one client or all supported MCP clients.\")\n .argument(\"[surfaces...]\", \"claude, cursor, codex, vscode, windsurf, zed, or all\", [\"all\"])\n .action((names: string[]) => {\n const results = removeMcpSurface(names as Parameters<typeof removeMcpSurface>[0]);\n printMutationResults(results);\n });\n\n const workspace = program\n .command(\"workspace\")\n .description(\"Inspect and create OrgX workspaces.\");\n\n workspace\n .command(\"current\")\n .description(\"Show the current OrgX workspace.\")\n .action(async () => {\n const spinner = createOrgxSpinner(\"Loading current OrgX workspace\");\n spinner.start();\n const current = await getCurrentWorkspace();\n spinner.stop();\n\n if (!current) {\n console.log(pc.yellow(\"No OrgX workspaces found for the current user.\"));\n return;\n }\n\n printWorkspace(current);\n });\n\n workspace\n .command(\"list\")\n .description(\"List OrgX workspaces accessible with the current API key.\")\n .action(async () => {\n const spinner = createOrgxSpinner(\"Loading OrgX workspaces\");\n spinner.start();\n const workspaces = await listWorkspaces();\n spinner.stop();\n printWorkspaceList(workspaces);\n });\n\n workspace\n .command(\"create\")\n .description(\"Create a new OrgX workspace.\")\n .argument(\"<name>\", \"workspace name\")\n .option(\"--description <text>\", \"workspace description\")\n .action(async (name: string, options: { description?: string }) => {\n const spinner = createOrgxSpinner(\"Creating OrgX workspace\");\n spinner.start();\n const created = await createWorkspace(\n {\n name,\n ...(options.description ? { description: options.description } : {}),\n },\n );\n spinner.succeed(\"OrgX workspace created\");\n printWorkspace(created);\n if (!created.isDefault) {\n console.log(\"\");\n console.log(pc.dim(`Run \\`wizard workspace set-default ${created.id}\\` to promote it.`));\n }\n });\n\n workspace\n .command(\"set-default\")\n .description(\"Set the default OrgX workspace.\")\n .argument(\"<id>\", \"workspace id\")\n .action(async (id: string) => {\n const spinner = createOrgxSpinner(\"Updating default OrgX workspace\");\n spinner.start();\n const result = await setDefaultWorkspace({ id });\n spinner.succeed(\n result.changed ? \"Default OrgX workspace updated\" : \"OrgX workspace already set as default\",\n );\n printWorkspace(result.workspace);\n });\n\n program\n .command(\"doctor\")\n .description(\"Verify local OrgX surface config and optional remote setup status.\")\n .action(async () => {\n const spinner = createOrgxSpinner(\"Running OrgX health check\");\n spinner.start();\n const report = await runDoctor();\n spinner.stop();\n const assessment = assessDoctorReport(report);\n printDoctorReport(report, assessment);\n if (!assessment.ok) {\n process.exitCode = 1;\n }\n });\n\n const skills = program\n .command(\"skills\")\n .description(\"Install OrgX rules and Claude skill packs.\");\n\n skills\n .command(\"add\")\n .description(\"Write Cursor and Claude OrgX rules and install OrgX Claude skill packs.\")\n .argument(\"[packs...]\", \"skill pack names or 'all'\", [\"all\"])\n .action(async (packs: string[]) => {\n const spinner = createOrgxSpinner(\"Installing OrgX rules and skills\");\n spinner.start();\n const report = await installOrgxSkills({ skillNames: packs });\n spinner.succeed(\"OrgX rules and skills installed\");\n printSkillInstallReport(report);\n });\n\n await program.parseAsync(process.argv);\n}\n\nmain().catch((error) => {\n console.error(pc.red(error instanceof Error ? error.message : String(error)));\n process.exitCode = 1;\n});\n","import pc from \"picocolors\";\n\nexport function renderBanner(version?: string): string {\n const lines = [\n \" ____ ____ _______ __\",\n \" / __ \\\\/ __ \\\\ / ____/ |/ /\",\n \"/ / / / /_/ // / __ | / \",\n \"/ /_/ / _, _// /_/ // | \",\n \"\\\\____/_/ |_| \\\\____//_/|_| \",\n ];\n\n const art = lines.map((line) => pc.cyan(line)).join(\"\\n\");\n const tag = version ? ` ${pc.dim(`v${version}`)}` : \"\";\n return `${art}${tag}`;\n}\n\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport const ORGX_HOSTED_MCP_KEY = \"orgx\";\nexport const ORGX_LOCAL_MCP_KEY = \"orgx-openclaw\";\nexport const ORGX_HOSTED_MCP_URL = \"https://mcp.useorgx.com/mcp\";\nexport const ORGX_HOSTED_MCP_HEALTH_URL = \"https://mcp.useorgx.com/health\";\nexport const ORGX_WIZARD_NPM_PACKAGE_NAME = \"@useorgx/wizard\";\nexport const NPM_REGISTRY_BASE_URL = \"https://registry.npmjs.org\";\nexport const DEFAULT_OPENCLAW_GATEWAY_PORT = 18_789;\nexport const DEFAULT_ORGX_BASE_URL =\n process.env.ORGX_BASE_URL?.trim() || \"https://useorgx.com\";\n\nconst HOME = homedir();\nconst APPDATA = process.env.APPDATA?.trim();\nconst LOCAL_APPDATA = process.env.LOCALAPPDATA?.trim();\nconst XDG_CONFIG_HOME =\n process.env.XDG_CONFIG_HOME?.trim() || join(HOME, \".config\");\nexport const ORGX_WIZARD_CONFIG_HOME =\n process.env.ORGX_WIZARD_CONFIG_HOME?.trim() ||\n join(XDG_CONFIG_HOME, \"useorgx\", \"wizard\");\nexport const ORGX_WIZARD_AUTH_PATH = join(ORGX_WIZARD_CONFIG_HOME, \"auth.json\");\nexport const ORGX_WIZARD_STATE_PATH = join(ORGX_WIZARD_CONFIG_HOME, \"state.json\");\nexport const ORGX_WIZARD_KEYTAR_SERVICE = \"@useorgx/wizard\";\nexport const ORGX_WIZARD_KEYTAR_ACCOUNT = \"orgx-api-key\";\n\nfunction normalizeOrgxApiBaseUrl(baseUrl: string): string {\n const normalized = baseUrl.replace(/\\/+$/, \"\");\n if (/\\/api(\\/|$)/.test(normalized)) {\n return normalized;\n }\n return `${normalized}/api`;\n}\n\nconst ORGX_API_BASE_URL = normalizeOrgxApiBaseUrl(DEFAULT_ORGX_BASE_URL);\nexport const ORGX_SETUP_STATUS_URL = `${ORGX_API_BASE_URL}/setup/status`;\nexport const ORGX_AUTH_VERIFY_URL = `${ORGX_API_BASE_URL}/auth/verify`;\nexport const ORGX_CLIENT_SYNC_URL = `${ORGX_API_BASE_URL}/client/sync`;\n\nfunction uniquePaths(paths: Array<string | undefined>): string[] {\n return [...new Set(paths.filter((path): path is string => Boolean(path)))];\n}\n\nexport const CLAUDE_DIR = join(HOME, \".claude\");\nexport const CURSOR_DIR = join(HOME, \".cursor\");\nexport const CODEX_DIR = join(HOME, \".codex\");\nexport const OPENCLAW_DIR = join(HOME, \".openclaw\");\nexport const CLAUDE_SKILLS_DIR = join(CLAUDE_DIR, \"skills\");\nexport const CLAUDE_ORGX_SKILL_DIR = join(CLAUDE_SKILLS_DIR, \"orgx\");\nexport const CLAUDE_ORGX_SKILL_PATH = join(CLAUDE_ORGX_SKILL_DIR, \"SKILL.md\");\nexport const CURSOR_RULES_DIR = join(CURSOR_DIR, \"rules\");\nexport const CURSOR_ORGX_RULE_PATH = join(CURSOR_RULES_DIR, \"orgx.md\");\n\nexport const CLAUDE_MCP_PATHS = uniquePaths([join(CLAUDE_DIR, \"mcp.json\")]);\nexport const CURSOR_MCP_PATHS = uniquePaths([join(CURSOR_DIR, \"mcp.json\")]);\nexport const CODEX_CONFIG_PATHS = uniquePaths([join(CODEX_DIR, \"config.toml\")]);\nexport const OPENCLAW_CONFIG_PATHS = uniquePaths([\n join(OPENCLAW_DIR, \"openclaw.json\"),\n]);\n\nexport const CLAUDE_MCP_PATH = CLAUDE_MCP_PATHS[0];\nexport const CURSOR_MCP_PATH = CURSOR_MCP_PATHS[0];\nexport const CODEX_CONFIG_PATH = CODEX_CONFIG_PATHS[0];\nexport const OPENCLAW_CONFIG_PATH = OPENCLAW_CONFIG_PATHS[0];\n\nexport const CLAUDE_INSTALL_PATHS = uniquePaths([CLAUDE_DIR]);\nexport const CURSOR_INSTALL_PATHS = uniquePaths([CURSOR_DIR]);\nexport const CODEX_INSTALL_PATHS = uniquePaths([CODEX_DIR]);\nexport const OPENCLAW_INSTALL_PATHS = uniquePaths([OPENCLAW_DIR]);\n\nexport const VSCODE_MCP_PATHS = uniquePaths([\n join(HOME, \"Library\", \"Application Support\", \"Code\", \"User\", \"mcp.json\"),\n join(XDG_CONFIG_HOME, \"Code\", \"User\", \"mcp.json\"),\n APPDATA ? join(APPDATA, \"Code\", \"User\", \"mcp.json\") : undefined,\n]);\nexport const VSCODE_INSTALL_PATHS = uniquePaths([\n join(HOME, \"Library\", \"Application Support\", \"Code\", \"User\"),\n join(XDG_CONFIG_HOME, \"Code\", \"User\"),\n APPDATA ? join(APPDATA, \"Code\", \"User\") : undefined,\n LOCAL_APPDATA ? join(LOCAL_APPDATA, \"Programs\", \"Microsoft VS Code\") : undefined,\n]);\n\nexport const WINDSURF_MCP_PATHS = uniquePaths([\n join(HOME, \".codeium\", \"windsurf\", \"mcp_config.json\"),\n]);\nexport const WINDSURF_INSTALL_PATHS = uniquePaths([\n join(HOME, \".codeium\", \"windsurf\"),\n LOCAL_APPDATA ? join(LOCAL_APPDATA, \"Programs\", \"Windsurf\") : undefined,\n]);\n\nexport const ZED_SETTINGS_PATHS = uniquePaths([\n join(HOME, \"Library\", \"Application Support\", \"Zed\", \"settings.json\"),\n join(XDG_CONFIG_HOME, \"zed\", \"settings.json\"),\n APPDATA ? join(APPDATA, \"Zed\", \"settings.json\") : undefined,\n]);\nexport const ZED_INSTALL_PATHS = uniquePaths([\n join(HOME, \"Library\", \"Application Support\", \"Zed\"),\n join(XDG_CONFIG_HOME, \"zed\"),\n APPDATA ? join(APPDATA, \"Zed\") : undefined,\n LOCAL_APPDATA ? join(LOCAL_APPDATA, \"Programs\", \"Zed\") : undefined,\n]);\n\nexport const CHATGPT_APP_PATHS = uniquePaths([\n join(HOME, \"Library\", \"Application Support\", \"OpenAI\"),\n join(HOME, \"Library\", \"Application Support\", \"com.openai.chat\"),\n join(XDG_CONFIG_HOME, \"OpenAI\"),\n join(XDG_CONFIG_HOME, \"openai\"),\n APPDATA ? join(APPDATA, \"OpenAI\") : undefined,\n LOCAL_APPDATA ? join(LOCAL_APPDATA, \"OpenAI\") : undefined,\n]);\n","import { spawnSync } from \"node:child_process\";\n\nimport { buildOrgxApiUrl, normalizeOrgxBaseUrl } from \"./auth.js\";\nimport { isRecord } from \"./fs.js\";\n\nexport type PairingStatus =\n | \"pending\"\n | \"authorized\"\n | \"ready\"\n | \"consumed\"\n | \"expired\"\n | \"cancelled\"\n | \"failed\";\n\nexport interface BrowserPairingStartResult {\n pairingId: string;\n pollToken: string;\n connectUrl: string;\n expiresAt: string;\n pollIntervalMs: number;\n}\n\nexport interface BrowserPairingPollResult {\n pairingId: string;\n status: PairingStatus;\n expiresAt: string;\n workspaceName: string | null;\n keyPrefix: string | null;\n executionMode: \"cloud\" | \"local\" | null;\n errorCode: string | null;\n errorMessage: string | null;\n key?: string;\n}\n\nexport interface BrowserPairingOpenResult {\n ok: boolean;\n error?: string;\n}\n\ninterface FetchJsonOptions {\n body?: string | undefined;\n fetchImpl?: typeof fetch | undefined;\n method: string;\n url: string;\n}\n\nfunction asString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : null;\n}\n\nfunction parseJsonBody(text: string): unknown {\n if (!text) return null;\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nasync function fetchJson<T>({\n url,\n method,\n body,\n fetchImpl = fetch,\n}: FetchJsonOptions): Promise<T> {\n const response = await fetchImpl(url, {\n method,\n headers: {\n Accept: \"application/json\",\n ...(body ? { \"Content-Type\": \"application/json\" } : {}),\n },\n ...(body ? { body } : {}),\n signal: AbortSignal.timeout(7_000),\n });\n\n const payload = parseJsonBody(await response.text());\n\n if (!response.ok) {\n const errorMessage = isRecord(payload)\n ? asString(payload.error) ?? asString(payload.message)\n : typeof payload === \"string\"\n ? payload\n : null;\n throw new Error(errorMessage ?? `HTTP ${response.status}`);\n }\n\n if (isRecord(payload) && payload.ok === true && \"data\" in payload) {\n return payload.data as T;\n }\n\n return payload as T;\n}\n\nfunction parsePairingStartResult(value: unknown): BrowserPairingStartResult {\n if (!isRecord(value)) {\n throw new Error(\"OrgX pairing start returned an invalid response.\");\n }\n\n const pairingId = asString(value.pairingId);\n const pollToken = asString(value.pollToken);\n const connectUrl = asString(value.connectUrl);\n const expiresAt = asString(value.expiresAt);\n const pollIntervalMs = typeof value.pollIntervalMs === \"number\"\n ? value.pollIntervalMs\n : Number.NaN;\n\n if (!pairingId || !pollToken || !connectUrl || !expiresAt || !Number.isFinite(pollIntervalMs)) {\n throw new Error(\"OrgX pairing start returned an incomplete response.\");\n }\n\n return { pairingId, pollToken, connectUrl, expiresAt, pollIntervalMs };\n}\n\nfunction parsePairingPollResult(value: unknown): BrowserPairingPollResult {\n if (!isRecord(value)) {\n throw new Error(\"OrgX pairing poll returned an invalid response.\");\n }\n\n const pairingId = asString(value.pairingId);\n const status = asString(value.status) as PairingStatus | null;\n const expiresAt = asString(value.expiresAt);\n\n if (!pairingId || !status || !expiresAt) {\n throw new Error(\"OrgX pairing poll returned an incomplete response.\");\n }\n\n return {\n pairingId,\n status,\n expiresAt,\n workspaceName: asString(value.workspaceName),\n keyPrefix: asString(value.keyPrefix),\n executionMode: value.executionMode === \"cloud\" || value.executionMode === \"local\"\n ? value.executionMode\n : null,\n errorCode: asString(value.errorCode),\n errorMessage: asString(value.errorMessage),\n ...(asString(value.key) ? { key: asString(value.key)! } : {}),\n };\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function startBrowserPairing(\n options: {\n baseUrl?: string | undefined;\n deviceName?: string | undefined;\n installationId: string;\n platform?: string | undefined;\n },\n fetchImpl?: typeof fetch,\n): Promise<BrowserPairingStartResult> {\n const data = await fetchJson<unknown>({\n url: buildOrgxApiUrl(\"/plugin/openclaw/pairings\", options.baseUrl),\n method: \"POST\",\n body: JSON.stringify({\n installationId: options.installationId,\n clientType: 'orgx-wizard',\n ...(options.deviceName ? { deviceName: options.deviceName } : {}),\n ...(options.platform ? { platform: options.platform } : {}),\n }),\n fetchImpl,\n });\n\n return parsePairingStartResult(data);\n}\n\nexport async function pollBrowserPairing(\n options: {\n baseUrl?: string | undefined;\n pairingId: string;\n pollToken: string;\n },\n fetchImpl?: typeof fetch,\n): Promise<BrowserPairingPollResult> {\n const baseUrl = normalizeOrgxBaseUrl(options.baseUrl);\n const url = new URL(buildOrgxApiUrl(`/plugin/openclaw/pairings/${options.pairingId}`, baseUrl));\n url.searchParams.set(\"pollToken\", options.pollToken);\n\n const data = await fetchJson<unknown>({\n url: url.toString(),\n method: \"GET\",\n fetchImpl,\n });\n\n return parsePairingPollResult(data);\n}\n\nexport async function waitForBrowserPairing(\n options: {\n baseUrl?: string | undefined;\n pairingId: string;\n pollIntervalMs?: number | undefined;\n pollToken: string;\n timeoutMs?: number | undefined;\n },\n fetchImpl?: typeof fetch,\n): Promise<BrowserPairingPollResult> {\n const timeoutMs = options.timeoutMs ?? 10 * 60_000;\n const pollIntervalMs = options.pollIntervalMs ?? 1_500;\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() <= deadline) {\n const result = await pollBrowserPairing(\n {\n baseUrl: options.baseUrl,\n pairingId: options.pairingId,\n pollToken: options.pollToken,\n },\n fetchImpl,\n );\n\n if (result.status === \"ready\") {\n if (!result.key) {\n throw new Error(\"OrgX pairing completed without returning an API key.\");\n }\n return result;\n }\n\n if (result.status === \"failed\") {\n throw new Error(result.errorMessage ?? \"OrgX pairing failed.\");\n }\n\n if (result.status === \"expired\") {\n throw new Error(\"OrgX pairing expired before it was approved.\");\n }\n\n if (result.status === \"cancelled\") {\n throw new Error(\"OrgX pairing was cancelled in the browser.\");\n }\n\n if (result.status === \"consumed\") {\n throw new Error(\"OrgX pairing was already consumed by another client.\");\n }\n\n await sleep(Math.min(5_000, Math.max(350, pollIntervalMs)));\n }\n\n throw new Error(\n `Timed out waiting for OrgX pairing after ${Math.round(timeoutMs / 1000)} seconds.`,\n );\n}\n\nexport async function acknowledgeBrowserPairing(\n options: {\n baseUrl?: string | undefined;\n pairingId: string;\n pollToken: string;\n },\n fetchImpl?: typeof fetch,\n): Promise<void> {\n await fetchJson<unknown>({\n url: buildOrgxApiUrl(`/plugin/openclaw/pairings/${options.pairingId}/ack`, options.baseUrl),\n method: \"POST\",\n body: JSON.stringify({ pollToken: options.pollToken }),\n fetchImpl,\n });\n}\n\nexport function openBrowser(url: string): BrowserPairingOpenResult {\n const platform = process.platform;\n const result = platform === \"darwin\"\n ? spawnSync(\"open\", [url], { stdio: \"ignore\" })\n : platform === \"win32\"\n ? spawnSync(\"cmd\", [\"/c\", \"start\", \"\", url], { stdio: \"ignore\" })\n : spawnSync(\"xdg-open\", [url], { stdio: \"ignore\" });\n\n if (result.error) {\n return { ok: false, error: result.error.message };\n }\n\n if (typeof result.status === \"number\" && result.status !== 0) {\n return { ok: false, error: `Browser open command exited with code ${result.status}.` };\n }\n\n return { ok: true };\n}\n","import {\n chmodSync,\n existsSync,\n mkdirSync,\n readFileSync,\n statSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname } from \"node:path\";\n\nexport function fileExists(path: string): boolean {\n return existsSync(path);\n}\n\nexport function readTextIfExists(path: string): string | null {\n if (!existsSync(path)) return null;\n\n try {\n if (!statSync(path).isFile()) {\n return null;\n }\n\n return readFileSync(path, \"utf8\");\n } catch (error) {\n const code = typeof error === \"object\" && error && \"code\" in error\n ? String(error.code)\n : undefined;\n\n if (code === \"ENOENT\" || code === \"ENOTDIR\" || code === \"EISDIR\") {\n return null;\n }\n\n throw error;\n }\n}\n\nexport function writeTextFile(\n path: string,\n content: string,\n options: { mode?: number } = {},\n): void {\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, content, {\n encoding: \"utf8\",\n ...(options.mode === undefined ? {} : { mode: options.mode }),\n });\n\n if (options.mode !== undefined) {\n chmodSync(path, options.mode);\n }\n}\n\nexport function writeJsonFile(\n path: string,\n value: unknown,\n options: { mode?: number } = {},\n): void {\n writeTextFile(path, `${JSON.stringify(value, null, 2)}\\n`, options);\n}\n\nexport function deleteFileIfExists(path: string): boolean {\n if (!existsSync(path)) return false;\n\n try {\n if (!statSync(path).isFile()) {\n return false;\n }\n\n unlinkSync(path);\n return true;\n } catch (error) {\n const code = typeof error === \"object\" && error && \"code\" in error\n ? String(error.code)\n : undefined;\n\n if (code === \"ENOENT\" || code === \"ENOTDIR\" || code === \"EISDIR\") {\n return false;\n }\n\n throw error;\n }\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nexport function parseJsonObject(input: string | null): Record<string, unknown> {\n if (!input) return {};\n\n try {\n const parsed = JSON.parse(input);\n return isRecord(parsed) ? parsed : {};\n } catch {\n return {};\n }\n}\n\nexport function readObject(\n value: unknown,\n fallback: Record<string, unknown> = {},\n): Record<string, unknown> {\n return isRecord(value) ? value : fallback;\n}\n","import {\n DEFAULT_OPENCLAW_GATEWAY_PORT,\n DEFAULT_ORGX_BASE_URL,\n} from \"../constants.js\";\nimport { isRecord, parseJsonObject, readObject } from \"../lib/fs.js\";\n\ntype JsonObject = Record<string, unknown>;\n\nexport interface OpenClawInspection {\n configured: boolean;\n installed: boolean;\n pluginKey: \"orgx\" | \"openclaw-plugin\" | null;\n details: string[];\n}\n\nexport interface OpenClawAuthConfig {\n apiKey: string;\n baseUrl: string;\n pluginKey: \"orgx\" | \"openclaw-plugin\" | null;\n enabled: boolean;\n}\n\nexport interface OpenClawOrgxDefaultsInput {\n apiKey?: string;\n baseUrl?: string;\n}\n\nfunction cleanupEmptyObjects(value: JsonObject): void {\n for (const [key, child] of Object.entries(value)) {\n if (!isRecord(child)) continue;\n cleanupEmptyObjects(child);\n if (Object.keys(child).length === 0) {\n delete value[key];\n }\n }\n}\n\nexport function readOpenClawGatewayPort(raw: unknown): number {\n const isValidPort = (value: number): boolean =>\n Number.isFinite(value) && value >= 1 && value <= 65_535;\n\n const root = isRecord(raw) ? raw : {};\n const gateway = readObject(root.gateway);\n const port = gateway.port;\n\n if (typeof port === \"number\" && isValidPort(port)) {\n return Math.floor(port);\n }\n\n if (typeof port === \"string\") {\n const parsed = Number.parseInt(port, 10);\n if (isValidPort(parsed)) {\n return parsed;\n }\n }\n\n return DEFAULT_OPENCLAW_GATEWAY_PORT;\n}\n\nexport function buildLocalMcpUrl(raw: unknown): string {\n return `http://127.0.0.1:${readOpenClawGatewayPort(raw)}/orgx/mcp`;\n}\n\nfunction resolvePluginKey(entries: JsonObject): \"orgx\" | \"openclaw-plugin\" {\n if (isRecord(entries[\"openclaw-plugin\"])) {\n return \"openclaw-plugin\";\n }\n\n if (isRecord(entries.orgx)) {\n return \"orgx\";\n }\n\n return \"orgx\";\n}\n\nexport function readOpenClawAuth(input: string | null): OpenClawAuthConfig {\n const current = parseJsonObject(input);\n const plugins = readObject(current.plugins);\n const entries = readObject(plugins.entries);\n const pluginKey = isRecord(entries[\"openclaw-plugin\"])\n ? \"openclaw-plugin\"\n : isRecord(entries.orgx)\n ? \"orgx\"\n : null;\n const entry = pluginKey ? readObject(entries[pluginKey]) : {};\n const config = readObject(entry.config);\n\n return {\n apiKey: typeof config.apiKey === \"string\" ? config.apiKey.trim() : \"\",\n baseUrl:\n typeof config.baseUrl === \"string\" && config.baseUrl.trim().length > 0\n ? config.baseUrl.trim()\n : DEFAULT_ORGX_BASE_URL,\n pluginKey,\n enabled: entry.enabled !== false,\n };\n}\n\nexport function patchOpenClawConfig(\n input: string | null,\n auth: OpenClawOrgxDefaultsInput = {},\n): string {\n const current = parseJsonObject(input);\n const plugins = readObject(current.plugins);\n const entries = readObject(plugins.entries);\n const pluginKey = resolvePluginKey(entries);\n const entry = readObject(entries[pluginKey]);\n const config = readObject(entry.config);\n const apiKey =\n typeof auth.apiKey === \"string\" && auth.apiKey.trim().length > 0\n ? auth.apiKey.trim()\n : typeof config.apiKey === \"string\" && config.apiKey.trim().length > 0\n ? config.apiKey.trim()\n : undefined;\n const baseUrl =\n typeof auth.baseUrl === \"string\" && auth.baseUrl.trim().length > 0\n ? auth.baseUrl.trim()\n : typeof config.baseUrl === \"string\" && config.baseUrl.trim().length > 0\n ? config.baseUrl.trim()\n : DEFAULT_ORGX_BASE_URL;\n\n entries[pluginKey] = {\n ...entry,\n enabled: true,\n config: {\n ...config,\n ...(apiKey ? { apiKey } : {}),\n baseUrl,\n dashboardEnabled:\n typeof config.dashboardEnabled === \"boolean\"\n ? config.dashboardEnabled\n : true,\n autoInstallAgentSuiteOnConnect:\n typeof config.autoInstallAgentSuiteOnConnect === \"boolean\"\n ? config.autoInstallAgentSuiteOnConnect\n : true,\n autoConfigureMcpClientsOnConnect:\n typeof config.autoConfigureMcpClientsOnConnect === \"boolean\"\n ? config.autoConfigureMcpClientsOnConnect\n : true,\n },\n };\n\n plugins.entries = entries;\n current.plugins = plugins;\n\n return `${JSON.stringify(current, null, 2)}\\n`;\n}\n\nexport function removeOpenClawConfig(input: string | null): string {\n const current = parseJsonObject(input);\n const plugins = readObject(current.plugins);\n const entries = readObject(plugins.entries);\n\n for (const key of [\"openclaw-plugin\", \"orgx\"]) {\n const entry = readObject(entries[key]);\n if (!Object.keys(entry).length) continue;\n const config = readObject(entry.config);\n delete config.baseUrl;\n delete config.dashboardEnabled;\n delete config.autoInstallAgentSuiteOnConnect;\n delete config.autoConfigureMcpClientsOnConnect;\n if (Object.keys(config).length > 0) {\n entry.config = config;\n } else {\n delete entry.config;\n }\n entries[key] = entry;\n }\n\n plugins.entries = entries;\n current.plugins = plugins;\n cleanupEmptyObjects(current);\n\n return `${JSON.stringify(current, null, 2)}\\n`;\n}\n\nexport function inspectOpenClawConfig(input: string | null): OpenClawInspection {\n const current = parseJsonObject(input);\n const plugins = readObject(current.plugins);\n const entries = readObject(plugins.entries);\n const installs = readObject(plugins.installs);\n const pluginKey = isRecord(entries[\"openclaw-plugin\"])\n ? \"openclaw-plugin\"\n : isRecord(entries.orgx)\n ? \"orgx\"\n : null;\n const entry = pluginKey ? readObject(entries[pluginKey]) : {};\n const config = readObject(entry.config);\n const installed =\n pluginKey !== null ||\n isRecord(installs[\"openclaw-plugin\"]) ||\n isRecord(installs.orgx);\n const configured =\n installed &&\n entry.enabled === true &&\n (typeof config.baseUrl === \"string\" ||\n typeof config.autoInstallAgentSuiteOnConnect === \"boolean\" ||\n typeof config.autoConfigureMcpClientsOnConnect === \"boolean\");\n\n return {\n configured,\n installed,\n pluginKey,\n details: [\n `plugin key: ${pluginKey ?? \"missing\"}`,\n `enabled: ${entry.enabled === true ? \"yes\" : \"no\"}`,\n `gateway port: ${readOpenClawGatewayPort(current)}`,\n ],\n };\n}\n","import {\n ORGX_WIZARD_AUTH_PATH,\n ORGX_WIZARD_KEYTAR_ACCOUNT,\n ORGX_WIZARD_KEYTAR_SERVICE,\n} from \"../constants.js\";\nimport {\n deleteFileIfExists,\n parseJsonObject,\n readTextIfExists,\n writeJsonFile,\n} from \"./fs.js\";\n\nexport type WizardAuthStorage = \"file\" | \"keytar\";\n\nexport interface WizardAuthRecord {\n apiKey: string;\n keyPrefix: string;\n baseUrl: string;\n source: \"manual\";\n storage: WizardAuthStorage;\n verifiedAt: string;\n}\n\nexport interface WizardSecretStore {\n deletePassword(service: string, account: string): Promise<boolean>;\n getPassword(service: string, account: string): Promise<string | null>;\n setPassword(service: string, account: string, password: string): Promise<void>;\n}\n\ninterface StoredWizardAuthRecord {\n apiKey?: string;\n baseUrl: string;\n keyPrefix: string;\n storage: WizardAuthStorage;\n verifiedAt: string;\n}\n\ninterface WizardAuthStoreOptions {\n preferSecureStorage?: boolean;\n secretStore?: WizardSecretStore | null;\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nexport function extractKeyPrefix(apiKey: string): string {\n return apiKey.trim().slice(0, 12);\n}\n\nfunction parseStoredWizardAuthRecord(raw: string | null): StoredWizardAuthRecord | null {\n const parsed = parseJsonObject(raw);\n\n if (\n !isNonEmptyString(parsed.keyPrefix) ||\n !isNonEmptyString(parsed.baseUrl) ||\n !isNonEmptyString(parsed.verifiedAt)\n ) {\n return null;\n }\n\n const storage = parsed.storage === \"keytar\" ? \"keytar\" : \"file\";\n\n return {\n baseUrl: parsed.baseUrl.trim(),\n ...(isNonEmptyString(parsed.apiKey) ? { apiKey: parsed.apiKey.trim() } : {}),\n keyPrefix: parsed.keyPrefix.trim(),\n storage,\n verifiedAt: parsed.verifiedAt.trim(),\n };\n}\n\nasync function loadDefaultSecretStore(): Promise<WizardSecretStore | null> {\n if (process.env.ORGX_WIZARD_DISABLE_KEYTAR === \"1\") {\n return null;\n }\n\n try {\n const imported = await import(\"keytar\");\n const candidate = (\n \"default\" in imported && imported.default ? imported.default : imported\n ) as Partial<WizardSecretStore>;\n\n if (\n typeof candidate.getPassword === \"function\" &&\n typeof candidate.setPassword === \"function\" &&\n typeof candidate.deletePassword === \"function\"\n ) {\n return candidate as WizardSecretStore;\n }\n } catch {\n return null;\n }\n\n return null;\n}\n\nasync function resolveSecretStore(\n options: WizardAuthStoreOptions,\n): Promise<WizardSecretStore | null> {\n if (options.secretStore !== undefined) {\n return options.secretStore;\n }\n\n return loadDefaultSecretStore();\n}\n\nfunction buildStoredRecord(\n value: Omit<WizardAuthRecord, \"source\">,\n): StoredWizardAuthRecord {\n return {\n ...(value.storage === \"file\" ? { apiKey: value.apiKey } : {}),\n baseUrl: value.baseUrl,\n keyPrefix: value.keyPrefix,\n storage: value.storage,\n verifiedAt: value.verifiedAt,\n };\n}\n\nexport async function readWizardAuth(\n authPath: string = ORGX_WIZARD_AUTH_PATH,\n options: WizardAuthStoreOptions = {},\n): Promise<WizardAuthRecord | null> {\n const stored = parseStoredWizardAuthRecord(readTextIfExists(authPath));\n if (!stored) {\n return null;\n }\n\n const apiKeyFromFile =\n stored.storage === \"file\" && isNonEmptyString(stored.apiKey)\n ? stored.apiKey.trim()\n : null;\n\n if (apiKeyFromFile) {\n return {\n apiKey: apiKeyFromFile,\n baseUrl: stored.baseUrl,\n keyPrefix: stored.keyPrefix,\n source: \"manual\",\n storage: \"file\",\n verifiedAt: stored.verifiedAt,\n };\n }\n\n if (stored.storage !== \"keytar\") {\n return null;\n }\n\n const secretStore = await resolveSecretStore(options);\n if (!secretStore) {\n return null;\n }\n\n const apiKey = await secretStore.getPassword(\n ORGX_WIZARD_KEYTAR_SERVICE,\n ORGX_WIZARD_KEYTAR_ACCOUNT,\n );\n\n if (!isNonEmptyString(apiKey)) {\n return null;\n }\n\n return {\n apiKey: apiKey.trim(),\n baseUrl: stored.baseUrl,\n keyPrefix: stored.keyPrefix,\n source: \"manual\",\n storage: \"keytar\",\n verifiedAt: stored.verifiedAt,\n };\n}\n\nexport async function writeWizardAuth(\n value: {\n apiKey: string;\n baseUrl: string;\n keyPrefix?: string;\n verifiedAt: string;\n },\n authPath: string = ORGX_WIZARD_AUTH_PATH,\n options: WizardAuthStoreOptions = {},\n): Promise<WizardAuthRecord> {\n const secretStore = options.preferSecureStorage === false\n ? null\n : await resolveSecretStore(options);\n\n const record: WizardAuthRecord = {\n apiKey: value.apiKey.trim(),\n keyPrefix: value.keyPrefix?.trim() || extractKeyPrefix(value.apiKey),\n baseUrl: value.baseUrl.trim(),\n source: \"manual\",\n storage: secretStore ? \"keytar\" : \"file\",\n verifiedAt: value.verifiedAt.trim(),\n };\n\n if (secretStore) {\n await secretStore.setPassword(\n ORGX_WIZARD_KEYTAR_SERVICE,\n ORGX_WIZARD_KEYTAR_ACCOUNT,\n record.apiKey,\n );\n }\n\n writeJsonFile(authPath, buildStoredRecord(record), { mode: 0o600 });\n return record;\n}\n\nexport async function clearWizardAuth(\n authPath: string = ORGX_WIZARD_AUTH_PATH,\n options: WizardAuthStoreOptions = {},\n): Promise<boolean> {\n const secretStore = await resolveSecretStore(options);\n const secretRemoved = secretStore\n ? await secretStore.deletePassword(\n ORGX_WIZARD_KEYTAR_SERVICE,\n ORGX_WIZARD_KEYTAR_ACCOUNT,\n )\n : false;\n const fileRemoved = deleteFileIfExists(authPath);\n return secretRemoved || fileRemoved;\n}\n","import {\n DEFAULT_ORGX_BASE_URL,\n OPENCLAW_CONFIG_PATH,\n ORGX_WIZARD_AUTH_PATH,\n} from \"../constants.js\";\nimport { readOpenClawAuth } from \"../surfaces/openclaw-config.js\";\nimport { readTextIfExists } from \"./fs.js\";\nimport { extractKeyPrefix, readWizardAuth } from \"./auth-store.js\";\n\nexport type OrgxAuthSource =\n | \"environment\"\n | \"wizard-store\"\n | \"openclaw-config-file\";\n\nexport interface ResolvedOrgxAuth {\n apiKey: string;\n keyPrefix: string;\n baseUrl: string;\n source: OrgxAuthSource;\n path?: string;\n verifiedAt?: string;\n}\n\nexport interface OrgxAuthCheckResult {\n configured: boolean;\n ok: boolean;\n skipped: boolean;\n source: OrgxAuthSource | \"none\";\n keyPrefix?: string;\n baseUrl?: string;\n path?: string;\n verifiedAt?: string;\n status?: number;\n url?: string;\n error?: string;\n data?: unknown;\n}\n\nexport interface ResolveOrgxAuthOptions {\n authPath?: string;\n openclawConfigPath?: string;\n}\n\nfunction normalizeHost(value: string): string {\n return value.trim().toLowerCase().replace(/^\\[|\\]$/g, \"\");\n}\n\nfunction isLoopbackHostname(hostname: string): boolean {\n const normalized = normalizeHost(hostname);\n return normalized === \"localhost\" || normalized === \"127.0.0.1\" || normalized === \"::1\";\n}\n\nexport function normalizeOrgxBaseUrl(raw?: string): string {\n const candidate = raw?.trim() || DEFAULT_ORGX_BASE_URL;\n\n try {\n const parsed = new URL(candidate);\n if (parsed.protocol !== \"https:\" && parsed.protocol !== \"http:\") {\n return DEFAULT_ORGX_BASE_URL;\n }\n\n if (parsed.username || parsed.password) {\n return DEFAULT_ORGX_BASE_URL;\n }\n\n if (parsed.protocol === \"http:\" && !isLoopbackHostname(parsed.hostname)) {\n return DEFAULT_ORGX_BASE_URL;\n }\n\n parsed.search = \"\";\n parsed.hash = \"\";\n parsed.pathname = parsed.pathname.replace(/\\/api\\/?$/, \"\").replace(/\\/+$/, \"\");\n return parsed.toString().replace(/\\/+$/, \"\");\n } catch {\n return DEFAULT_ORGX_BASE_URL;\n }\n}\n\nexport function buildOrgxApiUrl(path: string, baseUrl?: string): string {\n const normalizedBase = normalizeOrgxBaseUrl(baseUrl).replace(/\\/+$/, \"\");\n const apiBase = normalizedBase.endsWith(\"/api\") ? normalizedBase : `${normalizedBase}/api`;\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n return `${apiBase}${normalizedPath}`;\n}\n\nfunction withResolvedBaseUrl(baseUrl: string, envBaseUrl?: string): string {\n return normalizeOrgxBaseUrl(envBaseUrl?.trim() || baseUrl);\n}\n\nfunction buildResolvedAuth(\n apiKey: string,\n baseUrl: string,\n source: OrgxAuthSource,\n extras: Pick<ResolvedOrgxAuth, \"path\" | \"verifiedAt\"> = {},\n): ResolvedOrgxAuth {\n return {\n apiKey: apiKey.trim(),\n keyPrefix: extractKeyPrefix(apiKey),\n baseUrl,\n source,\n ...(extras.path ? { path: extras.path } : {}),\n ...(extras.verifiedAt ? { verifiedAt: extras.verifiedAt } : {}),\n };\n}\n\nexport async function resolveOrgxAuth(\n options: ResolveOrgxAuthOptions = {},\n): Promise<ResolvedOrgxAuth | null> {\n const envApiKey = process.env.ORGX_API_KEY?.trim();\n const envBaseUrl = process.env.ORGX_BASE_URL?.trim();\n if (envApiKey) {\n return buildResolvedAuth(\n envApiKey,\n withResolvedBaseUrl(DEFAULT_ORGX_BASE_URL, envBaseUrl),\n \"environment\",\n );\n }\n\n const authPath = options.authPath ?? ORGX_WIZARD_AUTH_PATH;\n const stored = await readWizardAuth(authPath);\n if (stored) {\n return buildResolvedAuth(\n stored.apiKey,\n withResolvedBaseUrl(stored.baseUrl, envBaseUrl),\n \"wizard-store\",\n {\n path: authPath,\n verifiedAt: stored.verifiedAt,\n },\n );\n }\n\n const openclawConfigPath = options.openclawConfigPath ?? OPENCLAW_CONFIG_PATH;\n const openclawAuth = readOpenClawAuth(\n openclawConfigPath ? readTextIfExists(openclawConfigPath) : null,\n );\n if (openclawAuth.apiKey && openclawConfigPath) {\n return buildResolvedAuth(\n openclawAuth.apiKey,\n withResolvedBaseUrl(openclawAuth.baseUrl || DEFAULT_ORGX_BASE_URL, envBaseUrl),\n \"openclaw-config-file\",\n { path: openclawConfigPath },\n );\n }\n\n return null;\n}\n\nasync function parseResponseBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) return null;\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nexport async function verifyOrgxAuth(\n auth: Pick<ResolvedOrgxAuth, \"apiKey\" | \"baseUrl\" | \"source\" | \"keyPrefix\"> & {\n path?: string;\n verifiedAt?: string;\n },\n): Promise<OrgxAuthCheckResult> {\n const url = buildOrgxApiUrl(\"/client/sync\", auth.baseUrl);\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${auth.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: \"{}\",\n signal: AbortSignal.timeout(7_000),\n });\n\n const data = await parseResponseBody(response);\n\n return {\n configured: true,\n ok: response.ok,\n skipped: false,\n source: auth.source,\n keyPrefix: auth.keyPrefix,\n baseUrl: auth.baseUrl,\n ...(auth.path ? { path: auth.path } : {}),\n ...(auth.verifiedAt ? { verifiedAt: auth.verifiedAt } : {}),\n status: response.status,\n url,\n data,\n ...(response.ok ? {} : { error: `HTTP ${response.status}` }),\n };\n } catch (error) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n keyPrefix: auth.keyPrefix,\n baseUrl: auth.baseUrl,\n ...(auth.path ? { path: auth.path } : {}),\n ...(auth.verifiedAt ? { verifiedAt: auth.verifiedAt } : {}),\n url,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\nexport async function checkOrgxAuth(\n options: ResolveOrgxAuthOptions = {},\n): Promise<OrgxAuthCheckResult> {\n const auth = await resolveOrgxAuth(options);\n if (!auth) {\n return {\n configured: false,\n ok: false,\n skipped: true,\n source: \"none\",\n error: \"No OrgX account connected. Run `orgx-wizard auth login` to connect.\",\n url: buildOrgxApiUrl(\"/client/sync\", DEFAULT_ORGX_BASE_URL),\n };\n }\n\n return verifyOrgxAuth(auth);\n}\n\nexport function describeSetupStatusScope(): string {\n return \"The setup-status endpoint is still service-key-only and uses ORGX_SERVICE_KEY.\";\n}\n","import { spawnSync } from \"node:child_process\";\n\nimport { readTextIfExists } from \"./fs.js\";\nimport { readOpenClawGatewayPort } from \"../surfaces/openclaw-config.js\";\n\nexport interface OpenClawHealthCheck {\n ok: boolean;\n skipped: boolean;\n method: \"cli\" | \"http\" | \"none\";\n url?: string;\n details: string[];\n error?: string;\n}\n\nfunction trimOutput(value: string | null | undefined): string | undefined {\n const next = value?.trim();\n return next ? next : undefined;\n}\n\nexport async function checkOpenClawHealth(\n configPath?: string,\n): Promise<OpenClawHealthCheck> {\n const rawConfig = configPath ? readTextIfExists(configPath) : null;\n const port = readOpenClawGatewayPort(rawConfig);\n const url = `http://127.0.0.1:${port}/orgx/live`;\n\n const cli = spawnSync(\"openclaw\", [\"gateway\", \"status\"], {\n encoding: \"utf8\",\n timeout: 5_000,\n });\n\n if (!cli.error) {\n const stdout = trimOutput(cli.stdout);\n const stderr = trimOutput(cli.stderr);\n const details = [`gateway port: ${port}`];\n if (stdout) details.push(`cli: ${stdout}`);\n if (stderr) details.push(`cli stderr: ${stderr}`);\n\n if (cli.status === 0) {\n return {\n ok: true,\n skipped: false,\n method: \"cli\",\n url,\n details,\n };\n }\n }\n\n try {\n const response = await fetch(url, {\n redirect: \"manual\",\n signal: AbortSignal.timeout(5_000),\n });\n\n if (response.ok || (response.status >= 300 && response.status < 400)) {\n return {\n ok: true,\n skipped: false,\n method: \"http\",\n url,\n details: [`gateway port: ${port}`, `http status: ${response.status}`],\n };\n }\n\n return {\n ok: false,\n skipped: false,\n method: \"http\",\n url,\n error: `HTTP ${response.status}`,\n details: [`gateway port: ${port}`, `http status: ${response.status}`],\n };\n } catch (error) {\n const cliError = cli.error instanceof Error ? cli.error.message : undefined;\n return {\n ok: false,\n skipped: false,\n method: cliError ? \"none\" : \"http\",\n url,\n error: error instanceof Error ? error.message : String(error),\n details: [\n `gateway port: ${port}`,\n ...(cliError ? [`openclaw cli unavailable: ${cliError}`] : []),\n ],\n };\n }\n}\n","import { ORGX_HOSTED_MCP_HEALTH_URL } from \"../constants.js\";\n\nexport interface HostedMcpHealthCheck {\n ok: boolean;\n skipped: boolean;\n status?: number;\n url: string;\n body?: string;\n error?: string;\n details: string[];\n}\n\nfunction trimBody(value: string): string | undefined {\n const next = value.trim();\n if (!next) return undefined;\n return next.length > 120 ? `${next.slice(0, 117)}...` : next;\n}\n\nexport async function checkHostedMcpHealth(): Promise<HostedMcpHealthCheck> {\n try {\n const response = await fetch(ORGX_HOSTED_MCP_HEALTH_URL, {\n method: \"GET\",\n signal: AbortSignal.timeout(5_000),\n });\n const text = await response.text();\n const body = trimBody(text);\n\n return {\n ok: response.ok,\n skipped: false,\n status: response.status,\n url: ORGX_HOSTED_MCP_HEALTH_URL,\n ...(body ? { body } : {}),\n ...(response.ok ? {} : { error: `HTTP ${response.status}` }),\n details: [\n `http status: ${response.status}`,\n ...(body ? [`body: ${body}`] : []),\n ],\n };\n } catch (error) {\n return {\n ok: false,\n skipped: false,\n url: ORGX_HOSTED_MCP_HEALTH_URL,\n error: error instanceof Error ? error.message : String(error),\n details: [],\n };\n }\n}\n","import { ORGX_HOSTED_MCP_URL } from \"../constants.js\";\nimport {\n resolveOrgxAuth,\n type OrgxAuthSource,\n type ResolveOrgxAuthOptions,\n} from \"./auth.js\";\n\nconst DEFAULT_TOOL_NAME = \"get_setup_status\";\n\ninterface JsonRpcErrorPayload {\n error?: {\n message?: string;\n };\n result?: unknown;\n}\n\nexport interface HostedMcpToolCheck {\n configured: boolean;\n ok: boolean;\n skipped: boolean;\n source: OrgxAuthSource | \"none\";\n toolName: string;\n url: string;\n baseUrl?: string;\n initializeStatus?: number;\n callStatus?: number;\n error?: string;\n details: string[];\n response?: unknown;\n}\n\nfunction buildHeaders(apiKey: string, sessionId?: string): Record<string, string> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n Accept: \"application/json, text/event-stream\",\n };\n\n if (sessionId) {\n headers[\"Mcp-Session-Id\"] = sessionId;\n }\n\n return headers;\n}\n\nasync function readJsonSafe(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) return null;\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction readJsonRpcError(payload: unknown): string | undefined {\n if (!payload || typeof payload !== \"object\") {\n return undefined;\n }\n\n const maybeError = (payload as JsonRpcErrorPayload).error;\n if (!maybeError || typeof maybeError !== \"object\") {\n return undefined;\n }\n\n return typeof maybeError.message === \"string\"\n ? maybeError.message\n : \"Unknown MCP JSON-RPC error.\";\n}\n\nfunction readSessionId(response: Response): string | undefined {\n return response.headers.get(\"mcp-session-id\") ?? response.headers.get(\"Mcp-Session-Id\") ?? undefined;\n}\n\nexport async function checkHostedMcpToolAccess(\n options: ResolveOrgxAuthOptions = {},\n toolName = DEFAULT_TOOL_NAME,\n): Promise<HostedMcpToolCheck> {\n const auth = await resolveOrgxAuth(options);\n if (!auth) {\n return {\n configured: false,\n ok: false,\n skipped: true,\n source: \"none\",\n toolName,\n url: ORGX_HOSTED_MCP_URL,\n error: \"No OrgX API key configured; hosted MCP tool verification skipped.\",\n details: [],\n };\n }\n\n try {\n const initializeResponse = await fetch(ORGX_HOSTED_MCP_URL, {\n method: \"POST\",\n headers: buildHeaders(auth.apiKey),\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method: \"initialize\",\n params: {\n protocolVersion: \"2024-11-05\",\n clientInfo: {\n name: \"orgx-wizard\",\n version: \"0.1.0\",\n },\n capabilities: {},\n },\n }),\n signal: AbortSignal.timeout(10_000),\n });\n\n const initializePayload = await readJsonSafe(initializeResponse);\n const initializeError = readJsonRpcError(initializePayload);\n const sessionId = readSessionId(initializeResponse);\n\n if (!initializeResponse.ok) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n toolName,\n url: ORGX_HOSTED_MCP_URL,\n baseUrl: auth.baseUrl,\n initializeStatus: initializeResponse.status,\n error: `MCP initialize failed with HTTP ${initializeResponse.status}.`,\n details: [`auth source: ${auth.source}`],\n response: initializePayload,\n };\n }\n\n if (initializeError) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n toolName,\n url: ORGX_HOSTED_MCP_URL,\n baseUrl: auth.baseUrl,\n initializeStatus: initializeResponse.status,\n error: `MCP initialize returned JSON-RPC error: ${initializeError}`,\n details: [`auth source: ${auth.source}`],\n response: initializePayload,\n };\n }\n\n if (!sessionId) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n toolName,\n url: ORGX_HOSTED_MCP_URL,\n baseUrl: auth.baseUrl,\n initializeStatus: initializeResponse.status,\n error: \"MCP initialize succeeded but no Mcp-Session-Id header was returned.\",\n details: [`auth source: ${auth.source}`],\n response: initializePayload,\n };\n }\n\n const callResponse = await fetch(ORGX_HOSTED_MCP_URL, {\n method: \"POST\",\n headers: buildHeaders(auth.apiKey, sessionId),\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: 2,\n method: \"tools/call\",\n params: {\n name: toolName,\n arguments: {},\n },\n }),\n signal: AbortSignal.timeout(10_000),\n });\n\n const callPayload = await readJsonSafe(callResponse);\n const callError = readJsonRpcError(callPayload);\n\n if (!callResponse.ok) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n toolName,\n url: ORGX_HOSTED_MCP_URL,\n baseUrl: auth.baseUrl,\n initializeStatus: initializeResponse.status,\n callStatus: callResponse.status,\n error: `MCP tool call failed with HTTP ${callResponse.status}.`,\n details: [\n `auth source: ${auth.source}`,\n `session established: ${sessionId}`,\n ],\n response: callPayload,\n };\n }\n\n if (callError) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n toolName,\n url: ORGX_HOSTED_MCP_URL,\n baseUrl: auth.baseUrl,\n initializeStatus: initializeResponse.status,\n callStatus: callResponse.status,\n error: `MCP tool call returned JSON-RPC error: ${callError}`,\n details: [\n `auth source: ${auth.source}`,\n `session established: ${sessionId}`,\n ],\n response: callPayload,\n };\n }\n\n return {\n configured: true,\n ok: true,\n skipped: false,\n source: auth.source,\n toolName,\n url: ORGX_HOSTED_MCP_URL,\n baseUrl: auth.baseUrl,\n initializeStatus: initializeResponse.status,\n callStatus: callResponse.status,\n details: [\n `auth source: ${auth.source}`,\n `session established: ${sessionId}`,\n `tool call: ${toolName}`,\n ],\n response: callPayload,\n };\n } catch (error) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n toolName,\n url: ORGX_HOSTED_MCP_URL,\n baseUrl: auth.baseUrl,\n error: error instanceof Error ? error.message : String(error),\n details: [`auth source: ${auth.source}`],\n };\n }\n}\n","import {\n NPM_REGISTRY_BASE_URL,\n ORGX_WIZARD_NPM_PACKAGE_NAME,\n} from \"../constants.js\";\nimport { isRecord } from \"./fs.js\";\n\nexport interface NpmRegistryCheck {\n ok: boolean;\n skipped: boolean;\n reachable: boolean;\n published: boolean;\n url: string;\n packageName: string;\n version?: string;\n error?: string;\n details: string[];\n}\n\nfunction resolvePackageUrl(packageName: string): string {\n return `${NPM_REGISTRY_BASE_URL}/${encodeURIComponent(packageName)}`;\n}\n\nfunction getLatestVersion(payload: unknown): string | undefined {\n if (!isRecord(payload) || !isRecord(payload[\"dist-tags\"])) {\n return undefined;\n }\n\n const latest = payload[\"dist-tags\"].latest;\n return typeof latest === \"string\" && latest.trim().length > 0 ? latest : undefined;\n}\n\nexport async function checkNpmRegistryHealth(\n packageName: string = ORGX_WIZARD_NPM_PACKAGE_NAME,\n): Promise<NpmRegistryCheck> {\n const url = resolvePackageUrl(packageName);\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: { Accept: \"application/json\" },\n signal: AbortSignal.timeout(7_000),\n });\n\n const text = await response.text();\n let payload: unknown = text;\n try {\n payload = text.length > 0 ? JSON.parse(text) : null;\n } catch {\n payload = text;\n }\n\n if (response.ok) {\n const version = getLatestVersion(payload);\n return {\n ok: true,\n skipped: false,\n reachable: true,\n published: true,\n url,\n packageName,\n ...(version ? { version } : {}),\n details: [\n `http status: ${response.status}`,\n ...(version ? [`latest version: ${version}`] : [\"latest version: unavailable\"]),\n ],\n };\n }\n\n if (response.status === 404) {\n return {\n ok: true,\n skipped: false,\n reachable: true,\n published: false,\n url,\n packageName,\n error: `${packageName} is not published on npm yet.`,\n details: [`http status: ${response.status}`],\n };\n }\n\n return {\n ok: false,\n skipped: false,\n reachable: false,\n published: false,\n url,\n packageName,\n error: `npm registry returned HTTP ${response.status}`,\n details: [`http status: ${response.status}`],\n };\n } catch (error) {\n return {\n ok: false,\n skipped: false,\n reachable: false,\n published: false,\n url,\n packageName,\n error: error instanceof Error ? error.message : String(error),\n details: [],\n };\n }\n}\n","import { buildOrgxApiUrl, resolveOrgxAuth, type ResolveOrgxAuthOptions } from \"./auth.js\";\nimport { isRecord } from \"./fs.js\";\n\nexport interface OrgxWorkspace {\n id: string;\n name: string;\n description?: string;\n isDefault: boolean;\n createdAt?: string;\n updatedAt?: string;\n}\n\nexport interface CreateWorkspaceInput {\n name: string;\n description?: string;\n}\n\nexport interface SetDefaultWorkspaceInput {\n id: string;\n}\n\nexport interface OrgxWorkspaceClientOptions extends ResolveOrgxAuthOptions {}\n\nasync function requireOrgxAuth(options: OrgxWorkspaceClientOptions = {}) {\n const auth = await resolveOrgxAuth(options);\n if (!auth) {\n throw new Error(\n \"No OrgX API key configured. Run `wizard auth login` or `wizard auth set-key <oxk_...>` first.\",\n );\n }\n\n return auth;\n}\n\nasync function parseResponseBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) return null;\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction parseWorkspace(value: unknown): OrgxWorkspace | null {\n if (!isRecord(value)) return null;\n\n const id = typeof value.id === \"string\" ? value.id : null;\n const name = typeof value.name === \"string\" ? value.name : null;\n if (!id || !name) return null;\n\n return {\n id,\n name,\n ...(typeof value.description === \"string\" && value.description.trim().length > 0\n ? { description: value.description }\n : {}),\n isDefault: value.is_default === true,\n ...(typeof value.created_at === \"string\" ? { createdAt: value.created_at } : {}),\n ...(typeof value.updated_at === \"string\" ? { updatedAt: value.updated_at } : {}),\n };\n}\n\nfunction sortWorkspaces(workspaces: OrgxWorkspace[]): OrgxWorkspace[] {\n return [...workspaces].sort((left, right) => {\n if (left.isDefault !== right.isDefault) {\n return left.isDefault ? -1 : 1;\n }\n\n const nameCompare = left.name.localeCompare(right.name);\n if (nameCompare !== 0) {\n return nameCompare;\n }\n\n return left.id.localeCompare(right.id);\n });\n}\n\nfunction parseWorkspaceList(payload: unknown): OrgxWorkspace[] {\n if (!isRecord(payload) || !Array.isArray(payload.data)) {\n return [];\n }\n\n return sortWorkspaces(payload.data.map(parseWorkspace).filter((item): item is OrgxWorkspace => item !== null));\n}\n\nfunction parseWorkspaceResponse(payload: unknown): OrgxWorkspace | null {\n if (!isRecord(payload)) return null;\n return parseWorkspace(payload.data);\n}\n\nfunction parseCurrentWorkspaceResponse(payload: unknown): OrgxWorkspace | null {\n if (!isRecord(payload)) return null;\n\n const id = typeof payload.id === \"string\" ? payload.id : null;\n const name = typeof payload.name === \"string\" ? payload.name : null;\n if (!id || !name) return null;\n\n return {\n id,\n name,\n isDefault: true,\n ...(typeof payload.createdAt === \"string\" ? { createdAt: payload.createdAt } : {}),\n };\n}\n\nfunction buildRequestHeaders(apiKey: string): Record<string, string> {\n return {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n };\n}\n\nfunction formatHttpError(status: number, body: unknown): string {\n if (typeof body === \"string\" && body.trim().length > 0) {\n return `HTTP ${status}: ${body}`;\n }\n\n if (isRecord(body) && typeof body.error === \"string\" && body.error.trim().length > 0) {\n return `HTTP ${status}: ${body.error}`;\n }\n\n return `HTTP ${status}`;\n}\n\nexport async function listWorkspaces(\n options: OrgxWorkspaceClientOptions = {},\n): Promise<OrgxWorkspace[]> {\n const auth = await requireOrgxAuth(options);\n const url = buildOrgxApiUrl(\"/entities?type=command_center&limit=100\", auth.baseUrl);\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${auth.apiKey}`,\n },\n signal: AbortSignal.timeout(7_000),\n });\n const body = await parseResponseBody(response);\n\n if (!response.ok) {\n throw new Error(`Failed to list workspaces. ${formatHttpError(response.status, body)}`);\n }\n\n return parseWorkspaceList(body);\n}\n\nexport async function getCurrentWorkspace(\n options: OrgxWorkspaceClientOptions = {},\n): Promise<OrgxWorkspace | null> {\n const auth = await requireOrgxAuth(options);\n const url = buildOrgxApiUrl(\"/v1/workspaces/current\", auth.baseUrl);\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${auth.apiKey}`,\n },\n signal: AbortSignal.timeout(7_000),\n });\n const body = await parseResponseBody(response);\n\n if (response.ok) {\n const workspace = parseCurrentWorkspaceResponse(body);\n if (!workspace) {\n throw new Error(\"OrgX returned an unexpected current workspace payload.\");\n }\n return workspace;\n }\n\n if (response.status === 404) {\n const workspaces = await listWorkspaces(options);\n return workspaces[0] ?? null;\n }\n\n throw new Error(`Failed to load current workspace. ${formatHttpError(response.status, body)}`);\n}\n\nexport async function createWorkspace(\n input: CreateWorkspaceInput,\n options: OrgxWorkspaceClientOptions = {},\n): Promise<OrgxWorkspace> {\n const name = input.name.trim();\n if (!name) {\n throw new Error(\"Workspace name is required.\");\n }\n\n const auth = await requireOrgxAuth(options);\n const url = buildOrgxApiUrl(\"/entities\", auth.baseUrl);\n const payload = {\n type: \"command_center\",\n name,\n ...(input.description?.trim()\n ? { description: input.description.trim() }\n : {}),\n };\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: buildRequestHeaders(auth.apiKey),\n body: JSON.stringify(payload),\n signal: AbortSignal.timeout(7_000),\n });\n const body = await parseResponseBody(response);\n\n if (!response.ok) {\n throw new Error(`Failed to create workspace. ${formatHttpError(response.status, body)}`);\n }\n\n const workspace = parseWorkspaceResponse(body);\n if (!workspace) {\n throw new Error(\"OrgX returned an unexpected workspace payload.\");\n }\n\n return workspace;\n}\n\nasync function updateWorkspace(\n input: SetDefaultWorkspaceInput,\n patch: Record<string, unknown>,\n options: OrgxWorkspaceClientOptions = {},\n): Promise<OrgxWorkspace> {\n const auth = await requireOrgxAuth(options);\n const url = buildOrgxApiUrl(\"/entities\", auth.baseUrl);\n const response = await fetch(url, {\n method: \"PATCH\",\n headers: buildRequestHeaders(auth.apiKey),\n body: JSON.stringify({\n type: \"command_center\",\n id: input.id,\n ...patch,\n }),\n signal: AbortSignal.timeout(7_000),\n });\n const body = await parseResponseBody(response);\n\n if (!response.ok) {\n throw new Error(`Failed to update workspace. ${formatHttpError(response.status, body)}`);\n }\n\n const workspace = parseWorkspaceResponse(body);\n if (!workspace) {\n throw new Error(\"OrgX returned an unexpected workspace update payload.\");\n }\n\n return workspace;\n}\n\nexport async function setDefaultWorkspace(\n input: SetDefaultWorkspaceInput,\n options: OrgxWorkspaceClientOptions = {},\n): Promise<{ changed: boolean; workspace: OrgxWorkspace }> {\n const workspaceId = input.id.trim();\n if (!workspaceId) {\n throw new Error(\"Workspace id is required.\");\n }\n\n const workspaces = await listWorkspaces(options);\n const target = workspaces.find((workspace) => workspace.id === workspaceId);\n if (!target) {\n throw new Error(`Workspace ${workspaceId} was not found in the current OrgX account.`);\n }\n\n if (target.isDefault) {\n return {\n changed: false,\n workspace: target,\n };\n }\n\n const currentDefault = workspaces.find((workspace) => workspace.isDefault);\n if (currentDefault) {\n await updateWorkspace({ id: currentDefault.id }, { is_default: false }, options);\n }\n\n try {\n const updated = await updateWorkspace({ id: workspaceId }, { is_default: true }, options);\n return {\n changed: true,\n workspace: updated,\n };\n } catch (error) {\n if (currentDefault) {\n try {\n await updateWorkspace({ id: currentDefault.id }, { is_default: true }, options);\n } catch {\n // Preserve the original failure while best-effort restoring the prior default.\n }\n }\n throw error;\n }\n}\n","import {\n resolveOrgxAuth,\n type OrgxAuthSource,\n type ResolveOrgxAuthOptions,\n} from \"./auth.js\";\nimport { getCurrentWorkspace, type OrgxWorkspace } from \"./workspaces.js\";\n\nexport interface WorkspaceConnectivityCheck {\n configured: boolean;\n ok: boolean;\n skipped: boolean;\n source: OrgxAuthSource | \"none\";\n baseUrl?: string;\n workspace?: OrgxWorkspace;\n error?: string;\n details: string[];\n}\n\nexport async function checkWorkspaceConnectivity(\n options: ResolveOrgxAuthOptions = {},\n): Promise<WorkspaceConnectivityCheck> {\n const auth = await resolveOrgxAuth(options);\n if (!auth) {\n return {\n configured: false,\n ok: false,\n skipped: true,\n source: \"none\",\n error: \"No OrgX API key configured; workspace connectivity check skipped.\",\n details: [],\n };\n }\n\n try {\n const workspace = await getCurrentWorkspace(options);\n if (!workspace) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n baseUrl: auth.baseUrl,\n error: \"OrgX auth resolved, but no accessible workspace was returned.\",\n details: [],\n };\n }\n\n return {\n configured: true,\n ok: true,\n skipped: false,\n source: auth.source,\n baseUrl: auth.baseUrl,\n workspace,\n details: [\n `workspace id: ${workspace.id}`,\n ...(workspace.isDefault ? [\"workspace is marked as default\"] : []),\n ],\n };\n } catch (error) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n baseUrl: auth.baseUrl,\n error: error instanceof Error ? error.message : String(error),\n details: [],\n };\n }\n}\n","import * as TOML from \"@iarna/toml\";\n\nimport {\n ORGX_HOSTED_MCP_KEY,\n ORGX_HOSTED_MCP_URL,\n ORGX_LOCAL_MCP_KEY,\n} from \"../constants.js\";\nimport { isRecord, parseJsonObject, readObject } from \"../lib/fs.js\";\n\ntype JsonObject = Record<string, unknown>;\n\nexport interface McpConfigInspection {\n configured: boolean;\n hostedConfigured?: boolean;\n localConfigured?: boolean;\n details: string[];\n}\n\nfunction cloneConfigCollection(config: JsonObject, key: string): JsonObject {\n return { ...readObject(config[key]) };\n}\n\nfunction removeLegacyScopedMcpServers(servers: JsonObject): boolean {\n const scopedPrefix = `${ORGX_LOCAL_MCP_KEY}-`;\n let updated = false;\n\n for (const key of Object.keys(servers)) {\n if (key === ORGX_LOCAL_MCP_KEY) continue;\n if (!key.startsWith(scopedPrefix)) continue;\n delete servers[key];\n updated = true;\n }\n\n return updated;\n}\n\nfunction stringifyJsonConfig(config: JsonObject): string {\n return `${JSON.stringify(config, null, 2)}\\n`;\n}\n\nfunction clearStdioFields(entry: JsonObject): JsonObject {\n const next = { ...entry };\n delete next.command;\n delete next.args;\n delete next.env;\n return next;\n}\n\nfunction matchHttpEntry(value: unknown, url: string): boolean {\n if (!isRecord(value)) return false;\n return value.type === \"http\" && value.url === url;\n}\n\nfunction matchUrlEntry(value: unknown, url: string): boolean {\n if (!isRecord(value)) return false;\n return value.url === url;\n}\n\nexport function patchClaudeMcpConfig(\n input: string | null,\n localMcpUrl?: string,\n): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n const existingOrgx = readObject(servers[ORGX_HOSTED_MCP_KEY]);\n const existingLocal = readObject(servers[ORGX_LOCAL_MCP_KEY]);\n const hostedUrl = typeof existingOrgx.url === \"string\" ? existingOrgx.url : \"\";\n const hostedType = typeof existingOrgx.type === \"string\" ? existingOrgx.type : \"\";\n const shouldSetHostedOrgx =\n !isRecord(servers[ORGX_HOSTED_MCP_KEY]) ||\n (hostedUrl === localMcpUrl && hostedType === \"http\");\n\n if (shouldSetHostedOrgx) {\n servers[ORGX_HOSTED_MCP_KEY] = {\n ...existingOrgx,\n type: \"http\",\n url: ORGX_HOSTED_MCP_URL,\n description:\n typeof existingOrgx.description === \"string\" &&\n existingOrgx.description.trim().length > 0\n ? existingOrgx.description\n : \"OrgX cloud MCP (OAuth)\",\n };\n }\n\n if (localMcpUrl) {\n servers[ORGX_LOCAL_MCP_KEY] = {\n ...existingLocal,\n type: \"http\",\n url: localMcpUrl,\n description:\n typeof existingLocal.description === \"string\" &&\n existingLocal.description.trim().length > 0\n ? existingLocal.description\n : \"OrgX platform via local OpenClaw plugin (no OAuth)\",\n };\n }\n\n removeLegacyScopedMcpServers(servers);\n\n return stringifyJsonConfig({\n ...current,\n mcpServers: servers,\n });\n}\n\nexport function removeClaudeMcpConfig(\n input: string | null,\n): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n\n if (isRecord(servers[ORGX_LOCAL_MCP_KEY])) {\n delete servers[ORGX_LOCAL_MCP_KEY];\n }\n\n if (matchHttpEntry(servers[ORGX_HOSTED_MCP_KEY], ORGX_HOSTED_MCP_URL)) {\n delete servers[ORGX_HOSTED_MCP_KEY];\n }\n\n removeLegacyScopedMcpServers(servers);\n\n return stringifyJsonConfig({\n ...current,\n mcpServers: servers,\n });\n}\n\nexport function inspectClaudeMcpConfig(input: string | null): McpConfigInspection {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n const local = readObject(servers[ORGX_LOCAL_MCP_KEY]);\n const hostedConfigured = matchHttpEntry(servers[ORGX_HOSTED_MCP_KEY], ORGX_HOSTED_MCP_URL);\n const localConfigured =\n local.type === \"http\" &&\n typeof local.url === \"string\";\n const localUrl = localConfigured ? String(local.url) : \"missing\";\n\n return {\n configured: hostedConfigured && localConfigured,\n hostedConfigured,\n localConfigured,\n details: [\n `hosted orgx: ${hostedConfigured ? \"ok\" : \"missing\"}`,\n `local orgx-openclaw: ${localUrl}`,\n ],\n };\n}\n\nexport function patchCursorMcpConfig(\n input: string | null,\n localMcpUrl: string,\n): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n const existingLocal = readObject(servers[ORGX_LOCAL_MCP_KEY]);\n\n servers[ORGX_LOCAL_MCP_KEY] = {\n ...clearStdioFields(existingLocal),\n url: localMcpUrl,\n };\n\n removeLegacyScopedMcpServers(servers);\n\n return stringifyJsonConfig({\n ...current,\n mcpServers: servers,\n });\n}\n\nexport function removeCursorMcpConfig(\n input: string | null,\n): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n\n if (isRecord(servers[ORGX_LOCAL_MCP_KEY])) {\n delete servers[ORGX_LOCAL_MCP_KEY];\n }\n\n removeLegacyScopedMcpServers(servers);\n\n return stringifyJsonConfig({\n ...current,\n mcpServers: servers,\n });\n}\n\nexport function inspectCursorMcpConfig(input: string | null): McpConfigInspection {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n const local = readObject(servers[ORGX_LOCAL_MCP_KEY]);\n const localConfigured =\n typeof local.url === \"string\";\n const localUrl = localConfigured ? String(local.url) : \"missing\";\n\n return {\n configured: localConfigured,\n localConfigured,\n details: [`local orgx-openclaw: ${localUrl}`],\n };\n}\n\nexport function patchVscodeMcpConfig(input: string | null): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"servers\");\n const existingHosted = readObject(servers[ORGX_HOSTED_MCP_KEY]);\n\n servers[ORGX_HOSTED_MCP_KEY] = {\n ...clearStdioFields(existingHosted),\n type: \"http\",\n url: ORGX_HOSTED_MCP_URL,\n };\n\n return stringifyJsonConfig({\n ...current,\n servers,\n });\n}\n\nexport function removeVscodeMcpConfig(input: string | null): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"servers\");\n\n if (matchHttpEntry(servers[ORGX_HOSTED_MCP_KEY], ORGX_HOSTED_MCP_URL)) {\n delete servers[ORGX_HOSTED_MCP_KEY];\n }\n\n return stringifyJsonConfig({\n ...current,\n servers,\n });\n}\n\nexport function inspectVscodeMcpConfig(input: string | null): McpConfigInspection {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"servers\");\n const hostedConfigured = matchHttpEntry(servers[ORGX_HOSTED_MCP_KEY], ORGX_HOSTED_MCP_URL);\n\n return {\n configured: hostedConfigured,\n hostedConfigured,\n details: [`hosted orgx: ${hostedConfigured ? \"ok\" : \"missing\"}`],\n };\n}\n\nfunction matchServerUrlEntry(value: unknown, url: string): boolean {\n if (!isRecord(value)) return false;\n return value.serverUrl === url || value.url === url;\n}\n\nexport function patchWindsurfMcpConfig(input: string | null): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n const existingHosted = readObject(servers[ORGX_HOSTED_MCP_KEY]);\n const nextEntry = clearStdioFields(existingHosted);\n\n delete nextEntry.url;\n servers[ORGX_HOSTED_MCP_KEY] = {\n ...nextEntry,\n serverUrl: ORGX_HOSTED_MCP_URL,\n };\n\n return stringifyJsonConfig({\n ...current,\n mcpServers: servers,\n });\n}\n\nexport function removeWindsurfMcpConfig(input: string | null): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n\n if (matchServerUrlEntry(servers[ORGX_HOSTED_MCP_KEY], ORGX_HOSTED_MCP_URL)) {\n delete servers[ORGX_HOSTED_MCP_KEY];\n }\n\n return stringifyJsonConfig({\n ...current,\n mcpServers: servers,\n });\n}\n\nexport function inspectWindsurfMcpConfig(input: string | null): McpConfigInspection {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n const hostedConfigured = matchServerUrlEntry(servers[ORGX_HOSTED_MCP_KEY], ORGX_HOSTED_MCP_URL);\n\n return {\n configured: hostedConfigured,\n hostedConfigured,\n details: [`hosted orgx: ${hostedConfigured ? \"ok\" : \"missing\"}`],\n };\n}\n\nexport function patchZedMcpConfig(input: string | null): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"context_servers\");\n const existingHosted = readObject(servers[ORGX_HOSTED_MCP_KEY]);\n\n servers[ORGX_HOSTED_MCP_KEY] = {\n ...clearStdioFields(existingHosted),\n url: ORGX_HOSTED_MCP_URL,\n };\n\n return stringifyJsonConfig({\n ...current,\n context_servers: servers,\n });\n}\n\nexport function removeZedMcpConfig(input: string | null): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"context_servers\");\n\n if (matchUrlEntry(servers[ORGX_HOSTED_MCP_KEY], ORGX_HOSTED_MCP_URL)) {\n delete servers[ORGX_HOSTED_MCP_KEY];\n }\n\n return stringifyJsonConfig({\n ...current,\n context_servers: servers,\n });\n}\n\nexport function inspectZedMcpConfig(input: string | null): McpConfigInspection {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"context_servers\");\n const hostedConfigured = matchUrlEntry(servers[ORGX_HOSTED_MCP_KEY], ORGX_HOSTED_MCP_URL);\n\n return {\n configured: hostedConfigured,\n hostedConfigured,\n details: [`hosted orgx: ${hostedConfigured ? \"ok\" : \"missing\"}`],\n };\n}\n\nfunction parseTomlDocument(input: string | null): JsonObject {\n if (!input) return {};\n\n try {\n const parsed = TOML.parse(input) as unknown;\n return isRecord(parsed) ? parsed : {};\n } catch {\n return {};\n }\n}\n\nfunction stringifyTomlDocument(document: JsonObject): string {\n const rendered = TOML.stringify(document as TOML.JsonMap);\n return rendered.endsWith(\"\\n\") ? rendered : `${rendered}\\n`;\n}\n\nfunction upsertCodexEntry(servers: JsonObject, key: string, url: string): void {\n const current = readObject(servers[key]);\n const next: JsonObject = {\n ...current,\n url,\n };\n delete next.command;\n delete next.args;\n delete next.startup_timeout_sec;\n servers[key] = next;\n}\n\nfunction removeLegacyCodexEntries(servers: JsonObject): boolean {\n const scopedPrefix = `${ORGX_LOCAL_MCP_KEY}-`;\n let updated = false;\n\n for (const key of Object.keys(servers)) {\n if (key === ORGX_LOCAL_MCP_KEY) continue;\n if (!key.startsWith(scopedPrefix)) continue;\n delete servers[key];\n updated = true;\n }\n\n return updated;\n}\n\nexport function patchCodexConfigToml(\n input: string | null,\n localMcpUrl?: string,\n): string {\n const current = parseTomlDocument(input);\n const servers = readObject(current.mcp_servers);\n\n upsertCodexEntry(servers, ORGX_HOSTED_MCP_KEY, ORGX_HOSTED_MCP_URL);\n if (localMcpUrl) {\n upsertCodexEntry(servers, ORGX_LOCAL_MCP_KEY, localMcpUrl);\n }\n removeLegacyCodexEntries(servers);\n\n current.mcp_servers = servers;\n return stringifyTomlDocument(current);\n}\n\nexport function removeCodexConfigToml(\n input: string | null,\n): string {\n const current = parseTomlDocument(input);\n const servers = readObject(current.mcp_servers);\n const hosted = readObject(servers[ORGX_HOSTED_MCP_KEY]);\n\n if (isRecord(servers[ORGX_LOCAL_MCP_KEY])) {\n delete servers[ORGX_LOCAL_MCP_KEY];\n }\n\n if (hosted.url === ORGX_HOSTED_MCP_URL) {\n delete servers[ORGX_HOSTED_MCP_KEY];\n }\n\n removeLegacyCodexEntries(servers);\n current.mcp_servers = servers;\n\n return stringifyTomlDocument(current);\n}\n\nexport function inspectCodexConfigToml(input: string | null): McpConfigInspection {\n const current = parseTomlDocument(input);\n const servers = readObject(current.mcp_servers);\n const hosted = readObject(servers[ORGX_HOSTED_MCP_KEY]);\n const local = readObject(servers[ORGX_LOCAL_MCP_KEY]);\n const hostedConfigured = hosted.url === ORGX_HOSTED_MCP_URL;\n const localConfigured = typeof local.url === \"string\";\n\n return {\n configured: hostedConfigured && localConfigured,\n hostedConfigured,\n localConfigured,\n details: [\n `hosted orgx: ${hostedConfigured ? \"ok\" : \"missing\"}`,\n `local orgx-openclaw: ${localConfigured ? local.url : \"missing\"}`,\n ],\n };\n}\n","export const SURFACE_NAMES = [\n \"claude\",\n \"cursor\",\n \"codex\",\n \"openclaw\",\n \"vscode\",\n \"windsurf\",\n \"zed\",\n \"chatgpt\",\n] as const;\n\nexport type SurfaceName = (typeof SURFACE_NAMES)[number];\nexport type SurfaceMode = \"automated\" | \"manual\";\n\nexport const AUTOMATED_SURFACE_NAMES = [\n \"claude\",\n \"cursor\",\n \"codex\",\n \"openclaw\",\n \"vscode\",\n \"windsurf\",\n \"zed\",\n] as const satisfies readonly SurfaceName[];\n\nexport const MCP_SURFACE_NAMES = [\n \"claude\",\n \"cursor\",\n \"codex\",\n \"vscode\",\n \"windsurf\",\n \"zed\",\n] as const;\n","import { existsSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\n\nimport {\n CHATGPT_APP_PATHS,\n CLAUDE_INSTALL_PATHS,\n CLAUDE_MCP_PATHS,\n CODEX_CONFIG_PATHS,\n CODEX_INSTALL_PATHS,\n CURSOR_INSTALL_PATHS,\n CURSOR_MCP_PATHS,\n OPENCLAW_CONFIG_PATHS,\n OPENCLAW_INSTALL_PATHS,\n VSCODE_INSTALL_PATHS,\n VSCODE_MCP_PATHS,\n WINDSURF_INSTALL_PATHS,\n WINDSURF_MCP_PATHS,\n ZED_INSTALL_PATHS,\n ZED_SETTINGS_PATHS,\n} from \"../constants.js\";\nimport type { SurfaceName } from \"./names.js\";\n\nexport interface SurfaceLocator {\n configPaths: string[];\n installPaths: string[];\n}\n\nexport interface SurfaceDetection {\n detected: boolean;\n preferredPath?: string;\n existingPath?: string;\n evidence: string[];\n}\n\ntype Exists = (path: string) => boolean;\n\nconst SURFACE_LOCATORS: Record<SurfaceName, SurfaceLocator> = {\n claude: {\n configPaths: CLAUDE_MCP_PATHS,\n installPaths: CLAUDE_INSTALL_PATHS,\n },\n cursor: {\n configPaths: CURSOR_MCP_PATHS,\n installPaths: CURSOR_INSTALL_PATHS,\n },\n codex: {\n configPaths: CODEX_CONFIG_PATHS,\n installPaths: CODEX_INSTALL_PATHS,\n },\n openclaw: {\n configPaths: OPENCLAW_CONFIG_PATHS,\n installPaths: OPENCLAW_INSTALL_PATHS,\n },\n vscode: {\n configPaths: VSCODE_MCP_PATHS,\n installPaths: VSCODE_INSTALL_PATHS,\n },\n windsurf: {\n configPaths: WINDSURF_MCP_PATHS,\n installPaths: WINDSURF_INSTALL_PATHS,\n },\n zed: {\n configPaths: ZED_SETTINGS_PATHS,\n installPaths: ZED_INSTALL_PATHS,\n },\n chatgpt: {\n configPaths: [],\n installPaths: CHATGPT_APP_PATHS,\n },\n};\n\nfunction firstExistingPath(paths: string[], exists: Exists): string | undefined {\n return paths.find((path) => exists(path));\n}\n\nfunction buildFallbackInstallPaths(configPaths: string[]): string[] {\n return [...new Set(configPaths.map((path) => dirname(path)))];\n}\n\nexport function getSurfaceLocator(name: SurfaceName): SurfaceLocator {\n return SURFACE_LOCATORS[name];\n}\n\nexport function detectSurface(name: SurfaceName, exists: Exists = existsSync): SurfaceDetection {\n const locator = getSurfaceLocator(name);\n const existingConfigPath = firstExistingPath(locator.configPaths, exists);\n const preferredPath = locator.configPaths[0] ?? locator.installPaths[0];\n const installCandidates = [\n ...locator.installPaths,\n ...buildFallbackInstallPaths(locator.configPaths),\n ];\n const existingInstallPath = firstExistingPath(installCandidates, exists);\n const existingPath = existingConfigPath ?? existingInstallPath;\n const evidence: string[] = [];\n\n if (existingConfigPath) {\n evidence.push(`config found: ${existingConfigPath}`);\n }\n if (existingInstallPath && existingInstallPath !== existingConfigPath) {\n evidence.push(`install marker found: ${existingInstallPath}`);\n }\n if (!existingConfigPath && !existingInstallPath) {\n evidence.push(\"no candidate paths found on disk\");\n }\n\n const detection: SurfaceDetection = {\n detected: Boolean(existingConfigPath || existingInstallPath),\n evidence,\n };\n\n if (preferredPath) {\n detection.preferredPath = preferredPath;\n }\n if (existingPath) {\n detection.existingPath = existingPath;\n }\n\n return detection;\n}\n","import {\n checkOrgxAuth,\n resolveOrgxAuth,\n type OrgxAuthCheckResult,\n} from \"../lib/auth.js\";\nimport { checkOpenClawHealth, type OpenClawHealthCheck } from \"../lib/openclaw-health.js\";\nimport { checkHostedMcpHealth, type HostedMcpHealthCheck } from \"../lib/hosted-mcp-health.js\";\nimport {\n checkHostedMcpToolAccess,\n type HostedMcpToolCheck,\n} from \"../lib/hosted-mcp-tool-check.js\";\nimport { checkNpmRegistryHealth, type NpmRegistryCheck } from \"../lib/npm-registry-health.js\";\nimport {\n checkWorkspaceConnectivity,\n type WorkspaceConnectivityCheck,\n} from \"../lib/workspace-connectivity.js\";\nimport { readTextIfExists, writeTextFile } from \"../lib/fs.js\";\nimport {\n inspectClaudeMcpConfig,\n inspectCodexConfigToml,\n inspectCursorMcpConfig,\n inspectVscodeMcpConfig,\n inspectWindsurfMcpConfig,\n inspectZedMcpConfig,\n patchClaudeMcpConfig,\n patchCodexConfigToml,\n patchCursorMcpConfig,\n patchVscodeMcpConfig,\n patchWindsurfMcpConfig,\n patchZedMcpConfig,\n removeClaudeMcpConfig,\n removeCodexConfigToml,\n removeCursorMcpConfig,\n removeVscodeMcpConfig,\n removeWindsurfMcpConfig,\n removeZedMcpConfig,\n} from \"./mcp-config.js\";\nimport {\n buildLocalMcpUrl,\n inspectOpenClawConfig,\n patchOpenClawConfig,\n removeOpenClawConfig,\n} from \"./openclaw-config.js\";\nimport {\n AUTOMATED_SURFACE_NAMES,\n MCP_SURFACE_NAMES,\n SURFACE_NAMES,\n type SurfaceMode,\n type SurfaceName,\n} from \"./names.js\";\nimport { detectSurface, getSurfaceLocator } from \"./detection.js\";\n\nexport { SURFACE_NAMES } from \"./names.js\";\nexport type { SurfaceName } from \"./names.js\";\n\nexport interface SurfaceStatus {\n name: SurfaceName;\n mode: SurfaceMode;\n detected: boolean;\n configured: boolean;\n path?: string;\n details: string[];\n summary: string;\n}\n\nexport interface SurfaceMutationResult {\n name: SurfaceName;\n changed: boolean;\n path?: string;\n message: string;\n}\n\ntype SurfaceSelection<T extends string> = T | \"all\" | readonly (T | \"all\")[];\n\ninterface OpenClawDependencyState {\n detected: boolean;\n configured: boolean;\n path?: string;\n url?: string;\n}\n\nfunction getSurfaceMode(name: SurfaceName): SurfaceMode {\n return AUTOMATED_SURFACE_NAMES.includes(name as (typeof AUTOMATED_SURFACE_NAMES)[number])\n ? \"automated\"\n : \"manual\";\n}\n\nfunction getSurfacePath(name: SurfaceName): string | undefined {\n const detection = detectSurface(name);\n const locator = getSurfaceLocator(name);\n const existingPath = detection.existingPath;\n\n if (existingPath && locator.configPaths.includes(existingPath)) {\n return existingPath;\n }\n\n return locator.configPaths[0] ?? detection.preferredPath ?? existingPath;\n}\n\nfunction getOpenClawDependencyState(): OpenClawDependencyState {\n const detection = detectSurface(\"openclaw\");\n const path = detection.existingPath ?? detection.preferredPath;\n const raw = path ? readTextIfExists(path) : null;\n const inspection = inspectOpenClawConfig(raw);\n\n const result: OpenClawDependencyState = {\n detected: detection.detected,\n configured: inspection.configured,\n };\n\n if (path) {\n result.path = path;\n }\n\n if (detection.detected) {\n result.url = buildLocalMcpUrl(raw);\n }\n\n return result;\n}\n\nfunction automatedSurfaceStatus(\n name: Extract<\n SurfaceName,\n \"claude\" | \"cursor\" | \"codex\" | \"openclaw\" | \"vscode\" | \"windsurf\" | \"zed\"\n >,\n): SurfaceStatus {\n const detection = detectSurface(name);\n const path = detection.existingPath ?? detection.preferredPath;\n const openclaw = getOpenClawDependencyState();\n\n if (name === \"claude\") {\n const inspection = inspectClaudeMcpConfig(path ? readTextIfExists(path) : null);\n const configured = inspection.hostedConfigured === true &&\n (openclaw.detected ? inspection.localConfigured === true : true);\n return {\n name,\n mode: \"automated\",\n detected: detection.detected,\n configured,\n ...(path ? { path } : {}),\n details: [\n ...inspection.details,\n ...(openclaw.detected\n ? [`OpenClaw bridge: ${openclaw.configured ? \"configured\" : \"detected but not configured\"}`]\n : [\"OpenClaw bridge: not detected; hosted OrgX is the only available route.\"]),\n ...detection.evidence,\n ],\n summary: configured\n ? openclaw.detected\n ? \"OrgX is connected in Claude with the local OpenClaw bridge.\"\n : \"OrgX cloud MCP is connected in Claude.\"\n : detection.detected\n ? openclaw.detected\n ? `Claude is missing either hosted OrgX or the local OpenClaw bridge (${openclaw.url ?? \"unknown\"}).`\n : \"Claude is missing the hosted OrgX MCP entry.\"\n : \"Claude config directory was not detected on disk.\",\n };\n }\n\n if (name === \"cursor\") {\n const inspection = inspectCursorMcpConfig(path ? readTextIfExists(path) : null);\n const configured = openclaw.detected && inspection.localConfigured === true;\n return {\n name,\n mode: \"automated\",\n detected: detection.detected,\n configured,\n ...(path ? { path } : {}),\n details: [\n ...inspection.details,\n ...(openclaw.detected\n ? [`OpenClaw bridge: ${openclaw.configured ? \"configured\" : \"detected but not configured\"}`]\n : [\"OpenClaw bridge: not detected; Cursor cannot use the local OrgX bridge yet.\"]),\n ...detection.evidence,\n ],\n summary: configured\n ? \"OrgX is connected in Cursor through the local OpenClaw bridge.\"\n : detection.detected\n ? openclaw.detected\n ? `Cursor is missing the local OrgX OpenClaw bridge (${openclaw.url ?? \"unknown\"}).`\n : \"Cursor is ready to wire, but OpenClaw must be installed first.\"\n : \"Cursor config directory was not detected on disk.\",\n };\n }\n\n if (name === \"codex\") {\n const inspection = inspectCodexConfigToml(path ? readTextIfExists(path) : null);\n const configured = inspection.hostedConfigured === true &&\n (openclaw.detected ? inspection.localConfigured === true : true);\n return {\n name,\n mode: \"automated\",\n detected: detection.detected,\n configured,\n ...(path ? { path } : {}),\n details: [\n ...inspection.details,\n ...(openclaw.detected\n ? [`OpenClaw bridge: ${openclaw.configured ? \"configured\" : \"detected but not configured\"}`]\n : [\"OpenClaw bridge: not detected; hosted OrgX is the only available route.\"]),\n ...detection.evidence,\n ],\n summary: configured\n ? openclaw.detected\n ? \"OrgX is connected in Codex with the local OpenClaw bridge.\"\n : \"OrgX cloud MCP is connected in Codex.\"\n : detection.detected\n ? openclaw.detected\n ? `Codex is missing either hosted OrgX or the local OpenClaw bridge (${openclaw.url ?? \"unknown\"}).`\n : \"Codex is missing the hosted OrgX MCP entry.\"\n : \"Codex config directory was not detected on disk.\",\n };\n }\n\n if (name === \"vscode\") {\n const inspection = inspectVscodeMcpConfig(path ? readTextIfExists(path) : null);\n return {\n name,\n mode: \"automated\",\n detected: detection.detected,\n configured: inspection.hostedConfigured === true,\n ...(path ? { path } : {}),\n details: [...inspection.details, ...detection.evidence],\n summary: inspection.hostedConfigured\n ? \"OrgX cloud MCP is connected in VS Code.\"\n : detection.detected\n ? \"VS Code is missing the hosted OrgX MCP entry.\"\n : \"VS Code config directory was not detected on disk.\",\n };\n }\n\n if (name === \"windsurf\") {\n const inspection = inspectWindsurfMcpConfig(path ? readTextIfExists(path) : null);\n return {\n name,\n mode: \"automated\",\n detected: detection.detected,\n configured: inspection.hostedConfigured === true,\n ...(path ? { path } : {}),\n details: [...inspection.details, ...detection.evidence],\n summary: inspection.hostedConfigured\n ? \"OrgX cloud MCP is connected in Windsurf.\"\n : detection.detected\n ? \"Windsurf is missing the hosted OrgX MCP entry.\"\n : \"Windsurf config directory was not detected on disk.\",\n };\n }\n\n if (name === \"zed\") {\n const inspection = inspectZedMcpConfig(path ? readTextIfExists(path) : null);\n return {\n name,\n mode: \"automated\",\n detected: detection.detected,\n configured: inspection.hostedConfigured === true,\n ...(path ? { path } : {}),\n details: [...inspection.details, ...detection.evidence],\n summary: inspection.hostedConfigured\n ? \"OrgX cloud MCP is connected in Zed.\"\n : detection.detected\n ? \"Zed is missing the hosted OrgX MCP entry.\"\n : \"Zed config directory was not detected on disk.\",\n };\n }\n\n const inspection = inspectOpenClawConfig(path ? readTextIfExists(path) : null);\n return {\n name,\n mode: \"automated\",\n detected: detection.detected,\n configured: inspection.configured,\n ...(path ? { path } : {}),\n details: [...inspection.details, ...detection.evidence],\n summary: inspection.configured\n ? `OpenClaw plugin entry ${inspection.pluginKey ?? \"missing\"} is configured.`\n : inspection.installed\n ? \"OpenClaw is installed but OrgX defaults have not been written.\"\n : detection.detected\n ? \"OpenClaw support files exist but no OrgX plugin entry was found.\"\n : \"OpenClaw is not installed or no support files were found.\",\n };\n}\n\nfunction manualSurfaceStatus(name: Extract<SurfaceName, \"chatgpt\">): SurfaceStatus {\n const detection = detectSurface(name);\n const path = detection.existingPath ?? detection.preferredPath;\n\n const shared = {\n name,\n mode: \"manual\" as const,\n detected: detection.detected,\n configured: false,\n ...(path ? { path } : {}),\n };\n\n switch (name) {\n case \"chatgpt\":\n return {\n ...shared,\n details: [\n ...detection.evidence,\n \"ChatGPT desktop support is not automated yet.\",\n \"Manual follow-up: wire the OrgX surface once the app-side config contract is finalized.\",\n ],\n summary: detection.detected\n ? \"ChatGPT support files detected; manual OrgX wiring still required.\"\n : \"ChatGPT desktop support files were not found on disk.\",\n };\n }\n}\n\nfunction getSurfaceStatus(name: SurfaceName): SurfaceStatus {\n if (AUTOMATED_SURFACE_NAMES.includes(name as (typeof AUTOMATED_SURFACE_NAMES)[number])) {\n return automatedSurfaceStatus(\n name as Extract<\n SurfaceName,\n \"claude\" | \"cursor\" | \"codex\" | \"openclaw\" | \"vscode\" | \"windsurf\" | \"zed\"\n >,\n );\n }\n\n return manualSurfaceStatus(name as Extract<SurfaceName, \"chatgpt\">);\n}\n\nexport function listSurfaceStatuses(): SurfaceStatus[] {\n return SURFACE_NAMES.map(getSurfaceStatus);\n}\n\nfunction resolveTargets<T extends string>(\n selection: SurfaceSelection<T>,\n allTargets: readonly T[],\n): T[] {\n const values = Array.isArray(selection) ? selection : [selection];\n\n if (values.includes(\"all\")) {\n return [...allTargets];\n }\n\n return [...new Set(values)] as T[];\n}\n\nexport function resolveSurfaceSelection(\n selection: SurfaceSelection<SurfaceName>,\n): SurfaceName[] {\n return resolveTargets(selection, SURFACE_NAMES);\n}\n\nexport function resolveMcpSurfaceSelection(\n selection: SurfaceSelection<(typeof MCP_SURFACE_NAMES)[number]>,\n): Array<(typeof MCP_SURFACE_NAMES)[number]> {\n return resolveTargets(selection, MCP_SURFACE_NAMES);\n}\n\nasync function addAutomatedSurface(name: SurfaceName): Promise<SurfaceMutationResult> {\n const path = getSurfacePath(name);\n const openclaw = getOpenClawDependencyState();\n\n if (!path) {\n return {\n name,\n changed: false,\n message: `${name} has no writable config path on this platform.`,\n };\n }\n\n switch (name) {\n case \"claude\": {\n const previous = readTextIfExists(path);\n const next = patchClaudeMcpConfig(previous, openclaw.url);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: openclaw.detected\n ? \"OrgX is connected in Claude with the local OpenClaw bridge.\"\n : \"OrgX cloud MCP is connected in Claude.\",\n };\n }\n case \"cursor\": {\n if (!openclaw.detected || !openclaw.url) {\n return {\n name,\n changed: false,\n path,\n message: \"Cursor needs OpenClaw installed before OrgX can be connected locally.\",\n };\n }\n const previous = readTextIfExists(path);\n const next = patchCursorMcpConfig(previous, openclaw.url);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: \"OrgX is connected in Cursor through the local OpenClaw bridge.\",\n };\n }\n case \"codex\": {\n const previous = readTextIfExists(path);\n const next = patchCodexConfigToml(previous, openclaw.url);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: openclaw.detected\n ? \"OrgX is connected in Codex with the local OpenClaw bridge.\"\n : \"OrgX cloud MCP is connected in Codex.\",\n };\n }\n case \"openclaw\": {\n const previous = readTextIfExists(path);\n const auth = await resolveOrgxAuth();\n const next = patchOpenClawConfig(previous, auth ?? {});\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: auth\n ? \"OpenClaw is configured as the local OrgX bridge with the resolved OrgX auth.\"\n : \"OpenClaw is configured as the local OrgX bridge.\",\n };\n }\n case \"vscode\": {\n const previous = readTextIfExists(path);\n if (inspectVscodeMcpConfig(previous).hostedConfigured) {\n return { name, changed: false, path, message: \"OrgX cloud MCP is connected in VS Code.\" };\n }\n const next = patchVscodeMcpConfig(previous);\n writeTextFile(path, next);\n return { name, changed: true, path, message: \"OrgX cloud MCP is connected in VS Code.\" };\n }\n case \"windsurf\": {\n const previous = readTextIfExists(path);\n if (inspectWindsurfMcpConfig(previous).hostedConfigured) {\n return { name, changed: false, path, message: \"OrgX cloud MCP is connected in Windsurf.\" };\n }\n const next = patchWindsurfMcpConfig(previous);\n writeTextFile(path, next);\n return { name, changed: true, path, message: \"OrgX cloud MCP is connected in Windsurf.\" };\n }\n case \"zed\": {\n const previous = readTextIfExists(path);\n if (inspectZedMcpConfig(previous).hostedConfigured) {\n return { name, changed: false, path, message: \"OrgX cloud MCP is connected in Zed.\" };\n }\n const next = patchZedMcpConfig(previous);\n writeTextFile(path, next);\n return { name, changed: true, path, message: \"OrgX cloud MCP is connected in Zed.\" };\n }\n default:\n return {\n name,\n changed: false,\n message: `${name} is not automated yet.`,\n };\n }\n}\n\nfunction removeAutomatedSurface(name: SurfaceName): SurfaceMutationResult {\n const path = getSurfacePath(name);\n\n if (!path) {\n return {\n name,\n changed: false,\n message: `${name} has no writable config path on this platform.`,\n };\n }\n\n switch (name) {\n case \"claude\": {\n const previous = readTextIfExists(path);\n const next = removeClaudeMcpConfig(previous);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: \"OrgX connection was removed from Claude.\",\n };\n }\n case \"cursor\": {\n const previous = readTextIfExists(path);\n const next = removeCursorMcpConfig(previous);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: \"OrgX connection was removed from Cursor.\",\n };\n }\n case \"codex\": {\n const previous = readTextIfExists(path);\n const next = removeCodexConfigToml(previous);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: \"OrgX connection was removed from Codex.\",\n };\n }\n case \"openclaw\": {\n const previous = readTextIfExists(path);\n const next = removeOpenClawConfig(previous);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: \"OpenClaw OrgX defaults were removed.\",\n };\n }\n case \"vscode\": {\n const previous = readTextIfExists(path);\n const next = removeVscodeMcpConfig(previous);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: \"OrgX connection was removed from VS Code.\",\n };\n }\n case \"windsurf\": {\n const previous = readTextIfExists(path);\n const next = removeWindsurfMcpConfig(previous);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: \"OrgX connection was removed from Windsurf.\",\n };\n }\n case \"zed\": {\n const previous = readTextIfExists(path);\n const next = removeZedMcpConfig(previous);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: \"OrgX connection was removed from Zed.\",\n };\n }\n default:\n return {\n name,\n changed: false,\n message: `${name} is not automated yet.`,\n };\n }\n}\n\nexport async function addSurface(\n selection: SurfaceSelection<SurfaceName>,\n): Promise<SurfaceMutationResult[]> {\n const targets = resolveSurfaceSelection(selection);\n const results: SurfaceMutationResult[] = [];\n\n for (const surface of targets) {\n results.push(await addAutomatedSurface(surface));\n }\n\n return results;\n}\n\nexport function removeSurface(selection: SurfaceSelection<SurfaceName>): SurfaceMutationResult[] {\n const targets = resolveSurfaceSelection(selection);\n return targets.map((surface) => removeAutomatedSurface(surface));\n}\n\nexport async function addMcpSurface(\n selection: SurfaceSelection<(typeof MCP_SURFACE_NAMES)[number]>,\n): Promise<SurfaceMutationResult[]> {\n const targets = resolveMcpSurfaceSelection(selection);\n const results: SurfaceMutationResult[] = [];\n\n for (const surface of targets) {\n results.push(await addAutomatedSurface(surface));\n }\n\n return results;\n}\n\nexport function removeMcpSurface(\n selection: SurfaceSelection<(typeof MCP_SURFACE_NAMES)[number]>,\n): SurfaceMutationResult[] {\n const targets = resolveMcpSurfaceSelection(selection);\n return targets.map((surface) => removeAutomatedSurface(surface));\n}\n\nexport async function setupDetectedSurfaces(): Promise<SurfaceMutationResult[]> {\n const targets = AUTOMATED_SURFACE_NAMES.filter((name) => getSurfaceStatus(name).detected);\n\n targets.sort((left, right) => {\n if (left === \"openclaw\") return -1;\n if (right === \"openclaw\") return 1;\n return 0;\n });\n\n const results: SurfaceMutationResult[] = [];\n\n for (const name of targets) {\n results.push(await addAutomatedSurface(name));\n }\n\n return results;\n}\n\nexport interface DoctorReport {\n surfaces: SurfaceStatus[];\n auth: OrgxAuthCheckResult;\n hostedMcp: HostedMcpHealthCheck;\n hostedMcpTool: HostedMcpToolCheck;\n npmRegistry: NpmRegistryCheck;\n workspace: WorkspaceConnectivityCheck;\n openclaw: OpenClawHealthCheck;\n}\n\nexport interface DoctorAssessmentIssue {\n level: \"error\" | \"warning\";\n title: string;\n suggestion: string;\n}\n\nexport interface DoctorAssessment {\n ok: boolean;\n issues: DoctorAssessmentIssue[];\n}\n\nfunction skippedOpenClawHealth(): OpenClawHealthCheck {\n return {\n ok: false,\n skipped: true,\n method: \"none\",\n error: \"OpenClaw support files were not detected; skipping gateway health check.\",\n details: [],\n };\n}\n\nexport async function runDoctor(): Promise<DoctorReport> {\n const surfaces = listSurfaceStatuses();\n const openclawSurface = surfaces.find((surface) => surface.name === \"openclaw\");\n const auth = await checkOrgxAuth();\n const hostedMcp = await checkHostedMcpHealth();\n const hostedMcpTool = await checkHostedMcpToolAccess();\n const npmRegistry = await checkNpmRegistryHealth();\n const workspace = await checkWorkspaceConnectivity();\n const openclaw = openclawSurface?.detected\n ? await checkOpenClawHealth(openclawSurface.path)\n : skippedOpenClawHealth();\n return { surfaces, auth, hostedMcp, hostedMcpTool, npmRegistry, workspace, openclaw };\n}\n\nexport function assessDoctorReport(report: DoctorReport): DoctorAssessment {\n const issues: DoctorAssessmentIssue[] = [];\n\n if (!report.hostedMcp.ok) {\n issues.push({\n level: \"error\",\n title: \"Hosted OrgX MCP is unreachable.\",\n suggestion:\n \"Retry later or verify https://mcp.useorgx.com/health. Hosted-only clients will stay broken until that endpoint recovers.\",\n });\n }\n\n if (\n report.hostedMcp.ok &&\n report.hostedMcpTool.configured &&\n !report.hostedMcpTool.ok &&\n !report.hostedMcpTool.skipped\n ) {\n issues.push({\n level: \"error\",\n title: `Hosted OrgX MCP tool verification failed (${report.hostedMcpTool.toolName}).`,\n suggestion:\n \"Re-run `wizard auth login` to refresh the per-user key, then retry `wizard doctor` to confirm the hosted MCP can initialize and execute tools.\",\n });\n }\n\n if (report.auth.configured && !report.auth.ok && !report.auth.skipped) {\n issues.push({\n level: \"error\",\n title: \"OrgX user auth could not be verified.\",\n suggestion:\n \"Run `wizard auth set-key <oxk_...>` again or correct the resolved ORGX_API_KEY / base URL before retrying.\",\n });\n }\n\n if (report.workspace.configured && !report.workspace.ok) {\n issues.push({\n level: \"error\",\n title: \"Current workspace lookup failed.\",\n suggestion:\n \"Verify the resolved OrgX base URL and that the authenticated user still has access to a workspace.\",\n });\n }\n\n if (!report.npmRegistry.reachable) {\n issues.push({\n level: \"warning\",\n title: \"npm registry is unreachable.\",\n suggestion:\n \"Check outbound network access to https://registry.npmjs.org before relying on npm-based installation flows.\",\n });\n } else if (!report.npmRegistry.published) {\n issues.push({\n level: \"warning\",\n title: `${report.npmRegistry.packageName} is not published on npm yet.`,\n suggestion:\n \"This is expected before launch. Publish the package in the release workstream before asking users to install from npm.\",\n });\n }\n\n if (!report.openclaw.skipped && !report.openclaw.ok) {\n issues.push({\n level: \"warning\",\n title: \"OpenClaw is installed but its local gateway health check failed.\",\n suggestion:\n \"Run `openclaw doctor` or `openclaw doctor --repair` before relying on local bridge clients like Cursor.\",\n });\n }\n\n return {\n ok: !issues.some((issue) => issue.level === \"error\"),\n issues,\n };\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport { ORGX_WIZARD_STATE_PATH } from \"../constants.js\";\nimport { parseJsonObject, readTextIfExists, writeJsonFile } from \"./fs.js\";\nimport { SURFACE_NAMES, type SurfaceName } from \"../surfaces/names.js\";\n\nexport interface WizardContinuityDefaults {\n executionMode?: \"cloud\" | \"local\";\n reviewSurface?: SurfaceName;\n workspaceId?: string;\n workspaceName?: string;\n}\n\nexport interface WizardDemoInitiativeRecord {\n createdAt: string;\n id: string;\n liveUrl: string;\n title: string;\n workspaceId?: string;\n workspaceName?: string;\n}\n\nexport interface WizardStateRecord {\n continuity?: WizardContinuityDefaults;\n installationId: string;\n demoInitiative?: WizardDemoInitiativeRecord;\n createdAt: string;\n updatedAt: string;\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction isSurfaceName(value: unknown): value is SurfaceName {\n return typeof value === \"string\" && SURFACE_NAMES.includes(value as SurfaceName);\n}\n\nfunction parseContinuityDefaults(value: unknown): WizardContinuityDefaults | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n\n const record = value as Record<string, unknown>;\n const parsed: WizardContinuityDefaults = {};\n\n if (record.executionMode === \"cloud\" || record.executionMode === \"local\") {\n parsed.executionMode = record.executionMode;\n }\n\n if (isSurfaceName(record.reviewSurface)) {\n parsed.reviewSurface = record.reviewSurface;\n }\n\n if (isNonEmptyString(record.workspaceId)) {\n parsed.workspaceId = record.workspaceId.trim();\n }\n\n if (isNonEmptyString(record.workspaceName)) {\n parsed.workspaceName = record.workspaceName.trim();\n }\n\n return Object.keys(parsed).length > 0 ? parsed : undefined;\n}\n\nfunction parseDemoInitiative(value: unknown): WizardDemoInitiativeRecord | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n\n const record = value as Record<string, unknown>;\n if (\n !isNonEmptyString(record.id) ||\n !isNonEmptyString(record.title) ||\n !isNonEmptyString(record.liveUrl) ||\n !isNonEmptyString(record.createdAt)\n ) {\n return undefined;\n }\n\n return {\n createdAt: record.createdAt.trim(),\n id: record.id.trim(),\n liveUrl: record.liveUrl.trim(),\n title: record.title.trim(),\n ...(isNonEmptyString(record.workspaceId)\n ? { workspaceId: record.workspaceId.trim() }\n : {}),\n ...(isNonEmptyString(record.workspaceName)\n ? { workspaceName: record.workspaceName.trim() }\n : {}),\n };\n}\n\nfunction createWizardState(now = new Date().toISOString()): WizardStateRecord {\n return {\n installationId: `wizard-${randomUUID()}`,\n createdAt: now,\n updatedAt: now,\n };\n}\n\nfunction sanitizeWizardStateRecord(record: WizardStateRecord): WizardStateRecord {\n const continuity = parseContinuityDefaults(record.continuity);\n const demoInitiative = parseDemoInitiative(record.demoInitiative);\n\n return {\n installationId: record.installationId.trim(),\n createdAt: record.createdAt.trim(),\n updatedAt: record.updatedAt.trim(),\n ...(continuity ? { continuity } : {}),\n ...(demoInitiative ? { demoInitiative } : {}),\n };\n}\n\nexport function readWizardState(\n statePath: string = ORGX_WIZARD_STATE_PATH,\n): WizardStateRecord | null {\n const parsed = parseJsonObject(readTextIfExists(statePath));\n\n if (\n !isNonEmptyString(parsed.installationId) ||\n !isNonEmptyString(parsed.createdAt) ||\n !isNonEmptyString(parsed.updatedAt)\n ) {\n return null;\n }\n\n const state: WizardStateRecord = {\n installationId: parsed.installationId.trim(),\n createdAt: parsed.createdAt.trim(),\n updatedAt: parsed.updatedAt.trim(),\n };\n const continuity = parseContinuityDefaults(parsed.continuity);\n if (continuity !== undefined) state.continuity = continuity;\n const demoInitiative = parseDemoInitiative(parsed.demoInitiative);\n if (demoInitiative !== undefined) state.demoInitiative = demoInitiative;\n return state;\n}\n\nexport function writeWizardState(\n value: WizardStateRecord,\n statePath: string = ORGX_WIZARD_STATE_PATH,\n): WizardStateRecord {\n const record = sanitizeWizardStateRecord(value);\n writeJsonFile(statePath, record, { mode: 0o600 });\n return record;\n}\n\nexport function updateWizardState(\n updater: (current: WizardStateRecord) => WizardStateRecord,\n statePath: string = ORGX_WIZARD_STATE_PATH,\n): WizardStateRecord {\n const current = readWizardState(statePath) ?? createWizardState();\n const next = updater(current);\n const sanitized = sanitizeWizardStateRecord({\n ...next,\n installationId: next.installationId || current.installationId,\n createdAt: next.createdAt || current.createdAt,\n updatedAt: new Date().toISOString(),\n });\n writeJsonFile(statePath, sanitized, { mode: 0o600 });\n return sanitized;\n}\n\nexport function getOrCreateWizardInstallationId(\n statePath: string = ORGX_WIZARD_STATE_PATH,\n): string {\n const existing = readWizardState(statePath);\n if (existing) {\n return existing.installationId;\n }\n\n const record = createWizardState();\n writeWizardState(record, statePath);\n return record.installationId;\n}\n","import { listSurfaceStatuses, type SurfaceStatus } from \"../surfaces/registry.js\";\nimport type { SurfaceName } from \"../surfaces/names.js\";\nimport type { OrgxWorkspace } from \"./workspaces.js\";\nimport {\n updateWizardState,\n type WizardContinuityDefaults,\n type WizardStateRecord,\n} from \"./wizard-state.js\";\n\nconst REVIEW_SURFACE_ORDER: SurfaceName[] = [\n \"claude\",\n \"cursor\",\n \"codex\",\n \"vscode\",\n \"windsurf\",\n \"zed\",\n \"chatgpt\",\n];\n\nexport interface ContinuitySeed {\n executionMode?: \"cloud\" | \"local\" | null;\n statuses?: SurfaceStatus[];\n workspace?: Pick<OrgxWorkspace, \"id\" | \"name\"> | null;\n workspaceName?: string | null;\n}\n\nfunction selectReviewSurface(statuses: SurfaceStatus[]): SurfaceName | undefined {\n for (const name of REVIEW_SURFACE_ORDER) {\n const configured = statuses.find((status) => status.name === name && status.configured);\n if (configured) {\n return configured.name;\n }\n }\n\n for (const name of REVIEW_SURFACE_ORDER) {\n const detected = statuses.find((status) => status.name === name && status.detected);\n if (detected) {\n return detected.name;\n }\n }\n\n return undefined;\n}\n\nfunction inferExecutionMode(\n explicitMode: \"cloud\" | \"local\" | null | undefined,\n statuses: SurfaceStatus[],\n): \"cloud\" | \"local\" | undefined {\n if (explicitMode) {\n return explicitMode;\n }\n\n const openclaw = statuses.find((status) => status.name === \"openclaw\");\n if (openclaw?.configured || openclaw?.detected) {\n return \"local\";\n }\n\n const hostedSurface = statuses.find(\n (status) => status.name !== \"openclaw\" && (status.configured || status.detected),\n );\n\n return hostedSurface ? \"cloud\" : undefined;\n}\n\nexport function inferContinuityDefaults(seed: ContinuitySeed = {}): WizardContinuityDefaults {\n const statuses = seed.statuses ?? listSurfaceStatuses();\n const continuity: WizardContinuityDefaults = {};\n\n const reviewSurface = selectReviewSurface(statuses);\n if (reviewSurface) {\n continuity.reviewSurface = reviewSurface;\n }\n\n const executionMode = inferExecutionMode(seed.executionMode, statuses);\n if (executionMode) {\n continuity.executionMode = executionMode;\n }\n\n if (seed.workspace?.id) {\n continuity.workspaceId = seed.workspace.id;\n }\n\n const workspaceName = seed.workspace?.name ?? seed.workspaceName ?? undefined;\n if (workspaceName?.trim()) {\n continuity.workspaceName = workspaceName.trim();\n }\n\n return continuity;\n}\n\nfunction mergeContinuityDefaults(\n current: WizardContinuityDefaults | undefined,\n next: WizardContinuityDefaults,\n): WizardContinuityDefaults {\n return {\n ...(current ?? {}),\n ...next,\n };\n}\n\nexport function persistContinuityDefaults(\n seed: ContinuitySeed = {},\n statePath?: string,\n): WizardStateRecord {\n const next = inferContinuityDefaults(seed);\n\n return updateWizardState(\n (current) => ({\n ...current,\n continuity: mergeContinuityDefaults(current.continuity, next),\n }),\n statePath,\n );\n}\n","import { buildOrgxApiUrl, resolveOrgxAuth, type ResolveOrgxAuthOptions } from \"./auth.js\";\nimport { isRecord } from \"./fs.js\";\nimport type { OrgxWorkspace } from \"./workspaces.js\";\nimport {\n readWizardState,\n updateWizardState,\n type WizardDemoInitiativeRecord,\n} from \"./wizard-state.js\";\n\nconst FOUNDER_DEMO_INITIATIVE_TITLE = \"Founder Demo Initiative\";\nconst FOUNDER_DEMO_INITIATIVE_SUMMARY =\n \"Starter initiative created by @useorgx/wizard to validate workspace routing, live views, and the default OrgX skill pack.\";\n\nexport interface OrgxInitiative {\n id: string;\n summary?: string;\n title: string;\n}\n\nexport interface FounderDemoInitiativeResult {\n created: boolean;\n initiative: OrgxInitiative;\n liveUrl: string;\n}\n\ninterface InitiativeClientOptions extends ResolveOrgxAuthOptions {\n statePath?: string;\n}\n\nfunction parseResponseBody(text: string): unknown {\n if (!text) {\n return null;\n }\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction formatHttpError(status: number, body: unknown): string {\n if (typeof body === \"string\" && body.trim().length > 0) {\n return `HTTP ${status}: ${body}`;\n }\n\n if (isRecord(body) && typeof body.error === \"string\" && body.error.trim().length > 0) {\n return `HTTP ${status}: ${body.error}`;\n }\n\n return `HTTP ${status}`;\n}\n\nfunction parseInitiative(payload: unknown): OrgxInitiative {\n const entity = isRecord(payload) && isRecord(payload.data) ? payload.data : payload;\n if (!isRecord(entity)) {\n throw new Error(\"OrgX returned an unexpected initiative payload.\");\n }\n\n const id = typeof entity.id === \"string\" ? entity.id.trim() : \"\";\n const title = typeof entity.title === \"string\"\n ? entity.title.trim()\n : typeof entity.name === \"string\"\n ? entity.name.trim()\n : \"\";\n\n if (!id || !title) {\n throw new Error(\"OrgX returned an incomplete initiative payload.\");\n }\n\n return {\n id,\n title,\n ...(typeof entity.summary === \"string\" && entity.summary.trim().length > 0\n ? { summary: entity.summary.trim() }\n : {}),\n };\n}\n\nfunction toDemoInitiativeRecord(\n initiative: OrgxInitiative,\n liveUrl: string,\n workspace: Pick<OrgxWorkspace, \"id\" | \"name\">,\n): WizardDemoInitiativeRecord {\n return {\n createdAt: new Date().toISOString(),\n id: initiative.id,\n liveUrl,\n title: initiative.title,\n workspaceId: workspace.id,\n workspaceName: workspace.name,\n };\n}\n\nasync function requireOrgxAuth(options: InitiativeClientOptions = {}) {\n const auth = await resolveOrgxAuth(options);\n if (!auth) {\n throw new Error(\n \"No OrgX API key configured. Run `wizard auth login` or `wizard auth set-key <oxk_...>` first.\",\n );\n }\n\n return auth;\n}\n\nexport async function createInitiative(\n input: {\n summary?: string;\n title: string;\n workspaceId?: string;\n },\n options: InitiativeClientOptions = {},\n): Promise<OrgxInitiative> {\n const title = input.title.trim();\n if (!title) {\n throw new Error(\"Initiative title is required.\");\n }\n\n const auth = await requireOrgxAuth(options);\n const response = await fetch(buildOrgxApiUrl(\"/entities\", auth.baseUrl), {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${auth.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n type: \"initiative\",\n title,\n status: \"active\",\n ...(input.summary?.trim() ? { summary: input.summary.trim() } : {}),\n ...(input.workspaceId?.trim() ? { workspace_id: input.workspaceId.trim() } : {}),\n }),\n signal: AbortSignal.timeout(7_000),\n });\n\n const body = parseResponseBody(await response.text());\n if (!response.ok) {\n throw new Error(`Failed to create initiative. ${formatHttpError(response.status, body)}`);\n }\n\n return parseInitiative(body);\n}\n\nexport async function ensureFounderDemoInitiative(\n workspace: Pick<OrgxWorkspace, \"id\" | \"name\">,\n options: InitiativeClientOptions = {},\n): Promise<FounderDemoInitiativeResult> {\n const existingRecord = readWizardState(options.statePath)?.demoInitiative;\n\n if (existingRecord?.workspaceId === workspace.id) {\n return {\n created: false,\n initiative: {\n id: existingRecord.id,\n title: existingRecord.title,\n },\n liveUrl: existingRecord.liveUrl,\n };\n }\n\n const auth = await requireOrgxAuth(options);\n const initiative = await createInitiative(\n {\n title: FOUNDER_DEMO_INITIATIVE_TITLE,\n summary: FOUNDER_DEMO_INITIATIVE_SUMMARY,\n workspaceId: workspace.id,\n },\n options,\n );\n const liveUrl = `${auth.baseUrl.replace(/\\/+$/, \"\")}/live/${initiative.id}`;\n const record = toDemoInitiativeRecord(initiative, liveUrl, workspace);\n\n updateWizardState(\n (current) => ({\n ...current,\n demoInitiative: record,\n }),\n options.statePath,\n );\n\n return {\n created: true,\n initiative,\n liveUrl,\n };\n}\n","import { join } from \"node:path\";\n\nimport {\n CLAUDE_ORGX_SKILL_PATH,\n CLAUDE_SKILLS_DIR,\n CURSOR_ORGX_RULE_PATH,\n} from \"../constants.js\";\nimport { readTextIfExists, writeTextFile } from \"./fs.js\";\n\nexport const DEFAULT_ORGX_SKILL_PACKS = [\n \"morning-briefing\",\n \"initiative-kickoff\",\n \"bulk-create\",\n \"nightly-recap\",\n] as const;\n\n// Directory entries in the useorgx/skills repo root that are not skill packs.\nconst EXCLUDED_PACK_DIRS = new Set([\".github\", \"scripts\"]);\n\nconst ORGX_SKILLS_OWNER = \"useorgx\";\nconst ORGX_SKILLS_REPO = \"skills\";\nconst ORGX_SKILLS_REF = \"main\";\n\nexport interface ManagedFileWrite {\n label: string;\n path: string;\n changed: boolean;\n sourceUrl?: string;\n}\n\nexport interface InstalledSkillPack {\n name: string;\n files: ManagedFileWrite[];\n}\n\nexport interface SkillsInstallReport {\n writes: ManagedFileWrite[];\n packs: InstalledSkillPack[];\n}\n\nexport interface InstallOrgxSkillsOptions {\n skillNames?: readonly string[];\n claudeSkillsDir?: string;\n claudeOrgxSkillPath?: string;\n cursorRulePath?: string;\n fetchImpl?: typeof fetch;\n ref?: string;\n}\n\ninterface GithubDirectoryEntry {\n name: string;\n path: string;\n type: \"file\" | \"dir\";\n download_url: string | null;\n}\n\ninterface RemoteSkillFile {\n path: string;\n sourceUrl: string;\n}\n\nconst CURSOR_RULES_CONTENT = `# OrgX Rules\n\n- Prefer \\`workspace_id\\` on OrgX tool calls. \\`command_center_id\\` is a deprecated alias and should only be used for backwards compatibility. If both are present, they must match.\n- Treat \\`entity_action\\` with \\`force: true\\` as an escape hatch. It bypasses hierarchy and proof checks, so only use it when the user explicitly wants that behavior and say why.\n- Treat \\`scaffold_initiative continue_on_error\\` as best-effort creation. Use it only when partial scaffolds are acceptable, and follow up on any failed children.\n- Preserve \\`_context\\` when widget or app-rendering flows depend on client, conversation, session, or user metadata. Do not strip or rename it.\n- Prefer \\`list_entities\\` for pending approvals and state inspection before reaching for legacy aliases.\n- Keep hosted OrgX MCP calls distinct from local OpenClaw/plugin surfaces before mutating config or entity state.\n`;\n\nconst CLAUDE_ORGX_SKILL_CONTENT = `---\nname: orgx\ndescription: Use when working against the hosted OrgX MCP server for workspace-scoped planning, entity mutations, progress reporting, and decision handling.\nversion: 1.0.0\nuser-invocable: true\ntags:\n - orchestration\n - productivity\n - workspace\n---\n\n# OrgX Hosted MCP\n\nUse this skill when Claude is connected to the hosted OrgX MCP server at \\`https://mcp.useorgx.com/mcp\\`.\n\nThis skill is for the hosted OrgX tool surface, not the local OpenClaw plugin. Keep those surfaces distinct before mutating config or entity state.\n\n## Operating Rules\n\n- Prefer \\`workspace_id\\` on OrgX tools. \\`command_center_id\\` is a deprecated alias kept for compatibility.\n- Treat \\`entity_action\\` with \\`force: true\\` as a deliberate override only. It bypasses hierarchy and proof-chain checks.\n- Treat \\`scaffold_initiative continue_on_error\\` as best-effort scaffolding. Use it only when partial creation is acceptable and inspect failures afterward.\n- Preserve \\`_context\\` when widget or app rendering depends on client, conversation, session, or user metadata.\n- Prefer \\`list_entities\\` over older aliases when you need pending decisions, blockers, or entity state.\n\n## Suggested Skill Packs\n\nInstall and use these packs alongside this base skill:\n\n- \\`morning-briefing\\`\n- \\`initiative-kickoff\\`\n- \\`bulk-create\\`\n- \\`nightly-recap\\`\n\n## Suggested Workflow\n\n1. Inspect state with \\`mcp__orgx__list_entities\\`, \\`mcp__orgx__get_initiative_pulse\\`, or the relevant workspace-scoped read tool.\n2. Mutate state with the narrowest tool that matches the task.\n3. When you need a hard override, explain why before using \\`force: true\\`.\n4. When you scaffold, decide up front whether \\`continue_on_error\\` is acceptable.\n5. Carry \\`_context\\` through any widget-producing flows so the UI can render and resume correctly.\n`;\n\nfunction encodeRepoPath(value: string): string {\n return value\n .split(\"/\")\n .filter((segment) => segment.length > 0)\n .map((segment) => encodeURIComponent(segment))\n .join(\"/\");\n}\n\nfunction buildContentsUrl(path: string, ref: string): string {\n const encodedPath = encodeRepoPath(path);\n return `https://api.github.com/repos/${ORGX_SKILLS_OWNER}/${ORGX_SKILLS_REPO}/contents/${encodedPath}?ref=${encodeURIComponent(ref)}`;\n}\n\nfunction resolveGitHubError(status: number, path: string): string {\n if (status === 404) {\n return `OrgX skill pack '${path}' was not found in ${ORGX_SKILLS_OWNER}/${ORGX_SKILLS_REPO}.`;\n }\n\n return `GitHub returned HTTP ${status} while loading '${path}' from ${ORGX_SKILLS_OWNER}/${ORGX_SKILLS_REPO}.`;\n}\n\nasync function readResponseText(response: Response): Promise<string> {\n return response.text();\n}\n\nasync function fetchDirectoryEntries(\n path: string,\n fetchImpl: typeof fetch,\n ref: string,\n): Promise<GithubDirectoryEntry[]> {\n const response = await fetchImpl(buildContentsUrl(path, ref), {\n headers: {\n Accept: \"application/vnd.github+json\",\n },\n signal: AbortSignal.timeout(10_000),\n });\n\n if (!response.ok) {\n throw new Error(resolveGitHubError(response.status, path));\n }\n\n const data = await response.json();\n if (!Array.isArray(data)) {\n throw new Error(`Expected '${path}' to be a directory in ${ORGX_SKILLS_OWNER}/${ORGX_SKILLS_REPO}.`);\n }\n\n return data\n .filter((entry): entry is GithubDirectoryEntry => {\n if (!entry || typeof entry !== \"object\") return false;\n return entry.type === \"file\" || entry.type === \"dir\";\n })\n .sort((left, right) => left.path.localeCompare(right.path));\n}\n\nasync function listRemoteSkillFiles(\n path: string,\n fetchImpl: typeof fetch,\n ref: string,\n): Promise<RemoteSkillFile[]> {\n const entries = await fetchDirectoryEntries(path, fetchImpl, ref);\n const files: RemoteSkillFile[] = [];\n\n for (const entry of entries) {\n if (entry.type === \"dir\") {\n files.push(...await listRemoteSkillFiles(entry.path, fetchImpl, ref));\n continue;\n }\n\n if (!entry.download_url) {\n throw new Error(`GitHub did not provide a download URL for '${entry.path}'.`);\n }\n\n files.push({\n path: entry.path,\n sourceUrl: entry.download_url,\n });\n }\n\n return files;\n}\n\nasync function fetchRemoteText(sourceUrl: string, fetchImpl: typeof fetch): Promise<string> {\n const response = await fetchImpl(sourceUrl, {\n headers: {\n Accept: \"text/plain\",\n },\n signal: AbortSignal.timeout(10_000),\n });\n\n if (!response.ok) {\n throw new Error(`GitHub returned HTTP ${response.status} while downloading ${sourceUrl}.`);\n }\n\n return readResponseText(response);\n}\n\nfunction writeManagedFile(\n path: string,\n content: string,\n label: string,\n sourceUrl?: string,\n): ManagedFileWrite {\n const existing = readTextIfExists(path);\n const changed = existing !== content;\n\n if (changed) {\n writeTextFile(path, content);\n }\n\n return {\n label,\n path,\n changed,\n ...(sourceUrl ? { sourceUrl } : {}),\n };\n}\n\nexport function resolveSkillPackNames(\n requested: readonly string[] = [],\n): string[] {\n if (requested.length === 0 || requested.includes(\"all\")) {\n return [...DEFAULT_ORGX_SKILL_PACKS];\n }\n\n const seen = new Set<string>();\n const normalized: string[] = [];\n\n for (const name of requested) {\n const next = name.trim();\n if (!next || seen.has(next)) {\n continue;\n }\n seen.add(next);\n normalized.push(next);\n }\n\n return normalized;\n}\n\nasync function fetchAvailablePackNames(\n fetchImpl: typeof fetch,\n ref: string,\n): Promise<string[]> {\n const entries = await fetchDirectoryEntries(\"\", fetchImpl, ref);\n return entries\n .filter((e) => e.type === \"dir\" && !EXCLUDED_PACK_DIRS.has(e.name))\n .map((e) => e.name);\n}\n\nasync function installSkillPack(\n skillName: string,\n claudeSkillsDir: string,\n fetchImpl: typeof fetch,\n ref: string,\n): Promise<InstalledSkillPack> {\n const rootPath = skillName;\n const files = await listRemoteSkillFiles(rootPath, fetchImpl, ref);\n const writes: ManagedFileWrite[] = [];\n\n for (const file of files) {\n const content = await fetchRemoteText(file.sourceUrl, fetchImpl);\n const relativePath = file.path.slice(`${rootPath}/`.length);\n writes.push(\n writeManagedFile(\n join(claudeSkillsDir, skillName, relativePath),\n content,\n `${skillName}/${relativePath}`,\n file.sourceUrl,\n ),\n );\n }\n\n return {\n name: skillName,\n files: writes,\n };\n}\n\nexport async function installOrgxSkills(\n options: InstallOrgxSkillsOptions = {},\n): Promise<SkillsInstallReport> {\n const fetchImpl = options.fetchImpl ?? globalThis.fetch;\n if (!fetchImpl) {\n throw new Error(\"Global fetch is unavailable in this runtime.\");\n }\n\n const ref = options.ref ?? ORGX_SKILLS_REF;\n const claudeSkillsDir = options.claudeSkillsDir ?? CLAUDE_SKILLS_DIR;\n const claudeOrgxSkillPath = options.claudeOrgxSkillPath ?? CLAUDE_ORGX_SKILL_PATH;\n const cursorRulePath = options.cursorRulePath ?? CURSOR_ORGX_RULE_PATH;\n const requestedNames = options.skillNames ?? [];\n let skillNames: string[];\n if (requestedNames.length === 0 || requestedNames.includes(\"all\")) {\n try {\n skillNames = await fetchAvailablePackNames(fetchImpl, ref);\n } catch {\n skillNames = [...DEFAULT_ORGX_SKILL_PACKS];\n }\n } else {\n skillNames = resolveSkillPackNames(requestedNames);\n }\n\n const writes: ManagedFileWrite[] = [\n writeManagedFile(cursorRulePath, CURSOR_RULES_CONTENT, \"cursor-rules\"),\n writeManagedFile(claudeOrgxSkillPath, CLAUDE_ORGX_SKILL_CONTENT, \"claude-orgx-skill\"),\n ];\n\n const packs: InstalledSkillPack[] = [];\n for (const skillName of skillNames) {\n packs.push(await installSkillPack(skillName, claudeSkillsDir, fetchImpl, ref));\n }\n\n return {\n writes,\n packs,\n };\n}\n","import type { CreateWorkspaceInput, OrgxWorkspace, SetDefaultWorkspaceInput } from \"./workspaces.js\";\n\nconst CREATE_WORKSPACE_VALUE = \"__create_workspace__\";\nconst SKIP_WORKSPACE_VALUE = \"__skip_workspace__\";\n\nexport interface WorkspaceSetupClient {\n createWorkspace(input: CreateWorkspaceInput): Promise<OrgxWorkspace>;\n getCurrentWorkspace(): Promise<OrgxWorkspace | null>;\n listWorkspaces(): Promise<OrgxWorkspace[]>;\n setDefaultWorkspace(\n input: SetDefaultWorkspaceInput,\n ): Promise<{ changed: boolean; workspace: OrgxWorkspace }>;\n}\n\nexport interface WorkspaceSelectOption {\n hint?: string;\n label: string;\n value: string;\n}\n\nexport interface WorkspaceSetupPrompts {\n cancel(message: string): void;\n isCancel(value: unknown): boolean;\n select(input: {\n initialValue?: string | undefined;\n message: string;\n options: WorkspaceSelectOption[];\n }): Promise<string | symbol>;\n text(input: {\n initialValue?: string | undefined;\n message: string;\n placeholder?: string;\n validate?: (value: string | undefined) => Error | string | undefined;\n }): Promise<string | symbol>;\n}\n\nexport interface WorkspaceSetupOptions {\n interactive: boolean;\n}\n\nexport interface WorkspaceSetupResult {\n created?: boolean;\n defaultChanged?: boolean;\n message: string;\n status: \"cancelled\" | \"skipped\" | \"unchanged\" | \"updated\";\n workspace?: OrgxWorkspace;\n}\n\nfunction trimDescription(value: string): string | undefined {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction cancelResult(\n prompts: WorkspaceSetupPrompts,\n message = \"Workspace bootstrap cancelled.\",\n): WorkspaceSetupResult {\n prompts.cancel(message);\n return {\n message,\n status: \"cancelled\",\n };\n}\n\nfunction buildWorkspaceLabel(workspace: OrgxWorkspace, currentWorkspaceId?: string): string {\n const suffixes: string[] = [];\n\n if (workspace.isDefault) {\n suffixes.push(\"default\");\n }\n\n if (workspace.id === currentWorkspaceId) {\n suffixes.push(\"current\");\n }\n\n if (suffixes.length === 0) {\n return workspace.name;\n }\n\n return `${workspace.name} (${suffixes.join(\", \")})`;\n}\n\nexport function buildWorkspaceSelectOptions(\n workspaces: OrgxWorkspace[],\n currentWorkspaceId?: string,\n): WorkspaceSelectOption[] {\n const options = workspaces.map((workspace) => ({\n value: workspace.id,\n label: buildWorkspaceLabel(workspace, currentWorkspaceId),\n ...(workspace.description ? { hint: workspace.description } : {}),\n }));\n\n options.push(\n {\n value: CREATE_WORKSPACE_VALUE,\n label: \"Create a new workspace\",\n hint: \"Name it here and set it as the default for this machine.\",\n },\n {\n value: SKIP_WORKSPACE_VALUE,\n label: \"Skip for now\",\n hint: \"Leave workspace selection unchanged and finish setup.\",\n },\n );\n\n return options;\n}\n\nasync function promptForWorkspaceName(prompts: WorkspaceSetupPrompts): Promise<string | symbol> {\n return prompts.text({\n message: \"Workspace name\",\n placeholder: \"Founders\",\n validate(value) {\n if (!value || value.trim().length === 0) {\n return \"Workspace name is required.\";\n }\n\n return undefined;\n },\n });\n}\n\nasync function promptForWorkspaceDescription(\n prompts: WorkspaceSetupPrompts,\n): Promise<string | symbol> {\n return prompts.text({\n message: \"Workspace description\",\n placeholder: \"Optional\",\n });\n}\n\nasync function createAndSelectWorkspace(\n client: WorkspaceSetupClient,\n prompts: WorkspaceSetupPrompts,\n): Promise<WorkspaceSetupResult> {\n const name = await promptForWorkspaceName(prompts);\n if (prompts.isCancel(name)) {\n return cancelResult(prompts);\n }\n if (typeof name !== \"string\") {\n return cancelResult(prompts);\n }\n\n const description = await promptForWorkspaceDescription(prompts);\n if (prompts.isCancel(description)) {\n return cancelResult(prompts);\n }\n if (typeof description !== \"string\") {\n return cancelResult(prompts);\n }\n\n const trimmedDescription = trimDescription(description);\n const createWorkspaceInput: CreateWorkspaceInput = trimmedDescription\n ? { name, description: trimmedDescription }\n : { name };\n\n const created = await client.createWorkspace(createWorkspaceInput);\n\n if (created.isDefault) {\n return {\n created: true,\n defaultChanged: false,\n message: `Created \"${created.name}\" and it is already the default OrgX workspace.`,\n status: \"updated\",\n workspace: created,\n };\n }\n\n const promoted = await client.setDefaultWorkspace({ id: created.id });\n return {\n created: true,\n defaultChanged: promoted.changed,\n message: `Created \"${promoted.workspace.name}\" and set it as the default OrgX workspace.`,\n status: \"updated\",\n workspace: promoted.workspace,\n };\n}\n\nexport async function runWorkspaceSetup(\n client: WorkspaceSetupClient,\n prompts: WorkspaceSetupPrompts,\n options: WorkspaceSetupOptions,\n): Promise<WorkspaceSetupResult> {\n if (!options.interactive) {\n return {\n message:\n \"Interactive workspace bootstrap skipped because this shell is not attached to a TTY.\",\n status: \"skipped\",\n };\n }\n\n const workspaces = await client.listWorkspaces();\n const currentWorkspace =\n workspaces.length > 0\n ? await client.getCurrentWorkspace().catch(() => workspaces.find((workspace) => workspace.isDefault) ?? null)\n : null;\n\n if (workspaces.length === 0) {\n const action = await prompts.select({\n message: \"No OrgX workspaces were found. What should setup do next?\",\n options: [\n {\n value: CREATE_WORKSPACE_VALUE,\n label: \"Create a new workspace\",\n hint: \"Create one now and set it as the default for this machine.\",\n },\n {\n value: SKIP_WORKSPACE_VALUE,\n label: \"Skip for now\",\n hint: \"Finish surface setup without creating a workspace.\",\n },\n ],\n initialValue: CREATE_WORKSPACE_VALUE,\n });\n\n if (prompts.isCancel(action)) {\n return cancelResult(prompts);\n }\n\n if (action === SKIP_WORKSPACE_VALUE) {\n return {\n message: \"Workspace bootstrap skipped.\",\n status: \"skipped\",\n };\n }\n\n return createAndSelectWorkspace(client, prompts);\n }\n\n const initialWorkspaceId =\n currentWorkspace?.id ??\n workspaces.find((workspace) => workspace.isDefault)?.id ??\n workspaces[0]?.id;\n const selected = await prompts.select({\n message: \"Choose the OrgX workspace this machine should use by default.\",\n options: buildWorkspaceSelectOptions(\n workspaces,\n currentWorkspace?.id ?? workspaces.find((workspace) => workspace.isDefault)?.id,\n ),\n ...(initialWorkspaceId ? { initialValue: initialWorkspaceId } : {}),\n });\n\n if (prompts.isCancel(selected)) {\n return cancelResult(prompts);\n }\n if (typeof selected !== \"string\") {\n return cancelResult(prompts);\n }\n\n if (selected === SKIP_WORKSPACE_VALUE) {\n return {\n message: \"Workspace bootstrap skipped.\",\n status: \"skipped\",\n ...(currentWorkspace ? { workspace: currentWorkspace } : {}),\n };\n }\n\n if (selected === CREATE_WORKSPACE_VALUE) {\n return createAndSelectWorkspace(client, prompts);\n }\n\n const chosenWorkspace = workspaces.find((workspace) => workspace.id === selected);\n if (!chosenWorkspace) {\n throw new Error(`Selected workspace ${selected} is no longer available.`);\n }\n\n if (chosenWorkspace.isDefault) {\n return {\n defaultChanged: false,\n message: `\"${chosenWorkspace.name}\" is already the default OrgX workspace.`,\n status: \"unchanged\",\n workspace: chosenWorkspace,\n };\n }\n\n const promoted = await client.setDefaultWorkspace({ id: chosenWorkspace.id });\n return {\n defaultChanged: promoted.changed,\n message: `Set \"${promoted.workspace.name}\" as the default OrgX workspace.`,\n status: promoted.changed ? \"updated\" : \"unchanged\",\n workspace: promoted.workspace,\n };\n}\n","import {\n ensureFounderDemoInitiative,\n type FounderDemoInitiativeResult,\n} from \"./initiatives.js\";\nimport { persistContinuityDefaults, type ContinuitySeed } from \"./continuity.js\";\nimport {\n DEFAULT_ORGX_SKILL_PACKS,\n installOrgxSkills,\n type SkillsInstallReport,\n} from \"./skills.js\";\nimport {\n runWorkspaceSetup,\n type WorkspaceSetupOptions,\n type WorkspaceSetupPrompts,\n type WorkspaceSetupResult,\n} from \"./setup-workspace.js\";\nimport { listSurfaceStatuses, setupDetectedSurfaces, type SurfaceMutationResult } from \"../surfaces/registry.js\";\nimport {\n createWorkspace,\n getCurrentWorkspace,\n listWorkspaces,\n setDefaultWorkspace,\n type OrgxWorkspace,\n} from \"./workspaces.js\";\nimport type { WizardStateRecord } from \"./wizard-state.js\";\n\nexport interface FounderPresetResult {\n continuity: WizardStateRecord;\n demoInitiative?: FounderDemoInitiativeResult;\n skillReport: SkillsInstallReport;\n surfaceResults: SurfaceMutationResult[];\n workspace: OrgxWorkspace | null;\n workspaceSetup?: WorkspaceSetupResult;\n}\n\nexport async function runFounderPreset(\n prompts: WorkspaceSetupPrompts,\n options: WorkspaceSetupOptions,\n): Promise<FounderPresetResult | WorkspaceSetupResult> {\n const surfaceResults = await setupDetectedSurfaces();\n const skillReport = await installOrgxSkills({\n skillNames: [...DEFAULT_ORGX_SKILL_PACKS],\n });\n\n let workspaceSetup: WorkspaceSetupResult | undefined;\n let workspace = await getCurrentWorkspace().catch(() => null);\n\n if (workspace || options.interactive) {\n workspaceSetup = await runWorkspaceSetup(\n {\n createWorkspace,\n getCurrentWorkspace,\n listWorkspaces,\n setDefaultWorkspace,\n },\n prompts,\n options,\n );\n\n if (workspaceSetup.status === \"cancelled\") {\n return workspaceSetup;\n }\n\n workspace = workspaceSetup.workspace ?? workspace ?? await getCurrentWorkspace().catch(() => null);\n }\n\n const continuity = persistContinuityDefaults({\n statuses: listSurfaceStatuses(),\n workspace,\n });\n\n let demoInitiative: FounderDemoInitiativeResult | undefined;\n if (workspace) {\n demoInitiative = await ensureFounderDemoInitiative(workspace);\n }\n\n return {\n continuity,\n ...(demoInitiative ? { demoInitiative } : {}),\n skillReport,\n surfaceResults,\n workspace,\n ...(workspaceSetup ? { workspaceSetup } : {}),\n };\n}\n","import type { SurfaceMutationResult } from \"../surfaces/registry.js\";\n\nexport type MutationSummary = {\n name: string;\n state: \"updated\" | \"unchanged\";\n message: string;\n};\n\nexport function summarizeMutationResults(\n results: SurfaceMutationResult[],\n): MutationSummary[] {\n return results.map((result) => ({\n name: result.name,\n state: result.changed ? \"updated\" : \"unchanged\",\n message: result.message,\n }));\n}\n","import ora, { type Ora } from \"ora\";\nimport pc from \"picocolors\";\n\nconst frames = [\"[ ]\", \"[= ]\", \"[== ]\", \"[=== ]\", \"[ ===]\", \"[ ==]\", \"[ =]\"];\n\nexport function createOrgxSpinner(text: string): Ora {\n return ora({\n text: pc.cyan(text),\n spinner: {\n interval: 90,\n frames,\n },\n });\n}\n\n"],"mappings":"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","names":["pc","hostname","text","text","spawnSync","spawnSync","text","text","text","parseResponseBody","text","existsSync","dirname","dirname","existsSync","inspection","isNonEmptyString","parseResponseBody","text","formatHttpError","requireOrgxAuth","join","join","pc","text","pc","pc","spinner","doctor","assessment"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/banner.ts","../src/constants.ts","../src/lib/browser-auth.ts","../src/lib/fs.ts","../src/surfaces/openclaw-config.ts","../src/lib/auth-store.ts","../src/lib/auth.ts","../src/lib/wizard-state.ts","../src/surfaces/names.ts","../src/lib/agent-roster.ts","../src/lib/openclaw-health.ts","../src/lib/hosted-mcp-health.ts","../src/lib/hosted-mcp-tool-check.ts","../src/lib/npm-registry-health.ts","../src/lib/workspaces.ts","../src/lib/workspace-connectivity.ts","../src/surfaces/mcp-config.ts","../src/surfaces/detection.ts","../src/surfaces/registry.ts","../src/lib/continuity.ts","../src/lib/initiatives.ts","../src/lib/skills.ts","../src/lib/plugins.ts","../src/lib/setup-workspace.ts","../src/lib/founder-preset.ts","../src/lib/mutation-output.ts","../src/lib/setup-verification.ts","../src/lib/telemetry-events.ts","../src/lib/telemetry.ts","../src/spinner.ts"],"sourcesContent":["import * as clack from \"@clack/prompts\";\nimport { hostname } from \"node:os\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\n\ndeclare const __PKG_VERSION__: string;\n\nimport { renderBanner } from \"./banner.js\";\nimport { ORGX_WIZARD_AUTH_PATH } from \"./constants.js\";\nimport {\n acknowledgeBrowserPairing,\n openBrowser,\n startBrowserPairing,\n waitForBrowserPairing,\n} from \"./lib/browser-auth.js\";\nimport {\n checkOrgxAuth,\n normalizeOrgxBaseUrl,\n resolveOrgxAuth,\n verifyOrgxAuth,\n type OrgxAuthCheckResult,\n} from \"./lib/auth.js\";\nimport { clearWizardAuth, writeWizardAuth } from \"./lib/auth-store.js\";\nimport {\n AGENT_ROSTER_DOMAINS,\n configureAgentRoster,\n ensureDefaultAgentRoster,\n listAgentRosterProfiles,\n type AgentRosterAssignment,\n} from \"./lib/agent-roster.js\";\nimport { persistContinuityDefaults } from \"./lib/continuity.js\";\nimport { runFounderPreset, type FounderPresetResult } from \"./lib/founder-preset.js\";\nimport { ensureOnboardingTask } from \"./lib/initiatives.js\";\nimport {\n countPluginReportChanges,\n installOrgxPlugins,\n listOrgxPluginStatuses,\n uninstallOrgxPlugins,\n type OrgxPluginMutationReport,\n type OrgxPluginStatus,\n} from \"./lib/plugins.js\";\nimport {\n installOrgxSkills,\n type SkillsInstallReport,\n} from \"./lib/skills.js\";\nimport { summarizeMutationResults } from \"./lib/mutation-output.js\";\nimport {\n HOSTED_MCP_OUTAGE_TITLE,\n getSetupVerificationHeadline,\n summarizeSetupVerification,\n} from \"./lib/setup-verification.js\";\nimport {\n buildAgentRosterTelemetryProperties,\n buildDoctorTelemetryProperties,\n buildFounderDemoTelemetryProperties,\n buildOnboardingTaskTelemetryProperties,\n buildWorkspaceSetupTelemetryProperties,\n} from \"./lib/telemetry-events.js\";\nimport { trackWizardTelemetry } from \"./lib/telemetry.js\";\nimport {\n getOrCreateWizardInstallationId,\n readWizardState,\n type WizardAgentRosterRecord,\n} from \"./lib/wizard-state.js\";\nimport {\n createWorkspace,\n getCurrentWorkspace,\n listWorkspaces,\n setDefaultWorkspace,\n type OrgxWorkspace,\n} from \"./lib/workspaces.js\";\nimport { runWorkspaceSetup, type WorkspaceSetupResult } from \"./lib/setup-workspace.js\";\nimport { createOrgxSpinner } from \"./spinner.js\";\nimport { detectSurface } from \"./surfaces/detection.js\";\nimport {\n assessDoctorReport,\n addMcpSurface,\n addSurface,\n listSurfaceStatuses,\n removeMcpSurface,\n removeSurface,\n runDoctor,\n setupDetectedSurfaces,\n type SurfaceMutationResult,\n type SurfaceStatus,\n} from \"./surfaces/registry.js\";\n\nconst ICON = {\n ok: pc.green(\"✓\"),\n err: pc.red(\"✗\"),\n warn: pc.yellow(\"!\"),\n skip: pc.dim(\"·\"),\n} as const;\n\n/**\n * Returns the right command prefix based on how the wizard was invoked.\n * When run via `npx @useorgx/wizard`, `orgx-wizard` won't be in PATH — hints\n * should use the npx form so users can copy-paste them directly.\n */\nfunction getCmd(): string {\n const argv1 = process.argv[1] ?? \"\";\n return argv1.includes(\"_npx\") || argv1.includes(\"/.npm/\") || argv1.includes(\"/npm/_npx\")\n ? \"npx @useorgx/wizard\"\n : \"orgx-wizard\";\n}\n\nfunction formatAuthSource(source: OrgxAuthCheckResult[\"source\"]): string {\n switch (source) {\n case \"environment\":\n return \"env ORGX_API_KEY\";\n case \"wizard-store\":\n return \"wizard auth store\";\n case \"openclaw-config-file\":\n return \"openclaw config\";\n default:\n return \"not configured\";\n }\n}\n\nfunction formatPluginTargetLabel(target: OrgxPluginStatus[\"target\"]): string {\n switch (target) {\n case \"claude\":\n return \"Claude Code\";\n case \"codex\":\n return \"Codex\";\n case \"openclaw\":\n return \"OpenClaw\";\n }\n}\n\nfunction printSurfaceTable(statuses: SurfaceStatus[]): void {\n for (const status of statuses) {\n const icon = status.configured ? ICON.ok : status.detected ? ICON.warn : ICON.skip;\n const state = status.configured\n ? pc.green(\"configured\")\n : status.detected\n ? pc.yellow(\"detected\")\n : pc.dim(\"not found\");\n const mode = pc.dim(status.mode === \"automated\" ? \"auto \" : \"manual\");\n console.log(` ${icon} ${pc.bold(status.name.padEnd(10))} ${mode} ${state}`);\n if (status.mode === \"manual\") {\n console.log(` ${pc.dim(status.summary)}`);\n }\n }\n}\n\nfunction printPluginStatusReport(statuses: OrgxPluginStatus[]): void {\n for (const status of statuses) {\n const icon = status.installed ? ICON.ok : status.available ? ICON.warn : ICON.skip;\n const state = status.installed\n ? pc.green(\"installed\")\n : status.available\n ? pc.yellow(\"available\")\n : pc.dim(\"not found\");\n console.log(\n ` ${icon} ${pc.bold(formatPluginTargetLabel(status.target).padEnd(12))} ${state} ${pc.dim(status.message)}`,\n );\n }\n}\n\nfunction printMutationResults(results: SurfaceMutationResult[]): void {\n for (const result of summarizeMutationResults(results)) {\n const icon = result.state === \"updated\" ? ICON.ok : ICON.skip;\n const state = result.state === \"updated\" ? pc.green(\"updated \") : pc.dim(\"unchanged\");\n console.log(` ${icon} ${pc.bold(result.name.padEnd(10))} ${state} ${pc.dim(result.message)}`);\n }\n}\n\nfunction printPluginMutationReport(report: OrgxPluginMutationReport): void {\n for (const result of report.results) {\n const icon = result.changed ? ICON.ok : ICON.skip;\n const state = result.changed ? pc.green(\"updated \") : pc.dim(\"unchanged\");\n console.log(\n ` ${icon} ${pc.bold(formatPluginTargetLabel(result.target).padEnd(12))} ${state} ${pc.dim(result.message)}`,\n );\n }\n}\n\nfunction printSkillInstallReport(report: SkillsInstallReport): void {\n for (const write of report.writes) {\n const icon = write.changed ? ICON.ok : ICON.skip;\n const state = write.changed ? pc.green(\"updated \") : pc.dim(\"unchanged\");\n console.log(` ${icon} ${pc.bold(write.label.padEnd(10))} ${state}`);\n }\n\n for (const pack of report.packs) {\n const changedCount = pack.files.filter((f) => f.changed).length;\n const icon = changedCount > 0 ? ICON.ok : ICON.skip;\n const state = changedCount > 0 ? pc.green(`${changedCount} updated `) : pc.dim(\"unchanged\");\n console.log(` ${icon} ${pc.bold(pack.name.padEnd(10))} ${state} ${pc.dim(`${pack.files.length} files`)}`);\n }\n\n for (const note of report.notes) {\n console.log(` ${ICON.skip} ${pc.dim(note)}`);\n }\n}\n\nfunction countSkillReportChanges(report: SkillsInstallReport): number {\n const writeChanges = report.writes.filter((write) => write.changed).length;\n const packChanges = report.packs.reduce(\n (count, pack) => count + pack.files.filter((file) => file.changed).length,\n 0,\n );\n return writeChanges + packChanges;\n}\n\nasync function safeTrackWizardTelemetry(\n event: string,\n properties: Record<string, unknown> = {},\n): Promise<void> {\n try {\n await trackWizardTelemetry(event, properties);\n } catch {\n // Telemetry should never block setup/auth flows.\n }\n}\n\nfunction printWorkspace(workspace: OrgxWorkspace): void {\n console.log(\n `${pc.bold(workspace.name)}${workspace.isDefault ? ` ${pc.green(\"(default)\")}` : \"\"}`,\n );\n console.log(` id: ${workspace.id}`);\n if (workspace.description) {\n console.log(` description: ${workspace.description}`);\n }\n if (workspace.createdAt) {\n console.log(` created: ${workspace.createdAt}`);\n }\n if (workspace.updatedAt) {\n console.log(` updated: ${workspace.updatedAt}`);\n }\n}\n\nfunction printWorkspaceList(workspaces: OrgxWorkspace[]): void {\n if (workspaces.length === 0) {\n console.log(pc.yellow(\"No workspaces found for this OrgX user.\"));\n return;\n }\n\n for (const workspace of workspaces) {\n printWorkspace(workspace);\n }\n}\n\nfunction printWorkspaceSetupResult(result: WorkspaceSetupResult): void {\n if (result.workspace) {\n const icon = result.status === \"updated\" ? ICON.ok : ICON.skip;\n console.log(` ${icon} ${pc.green(\"workspace \")} ${pc.bold(result.workspace.name)}`);\n } else {\n console.log(` ${ICON.skip} ${pc.dim(result.message)}`);\n }\n}\n\nfunction printFounderPresetResult(result: FounderPresetResult): void {\n printMutationResults(result.surfaceResults);\n console.log(\"\");\n printSkillInstallReport(result.skillReport);\n\n if (result.workspaceSetup) {\n console.log(\"\");\n printWorkspaceSetupResult(result.workspaceSetup);\n }\n\n if (result.demoInitiative) {\n console.log(\"\");\n console.log(pc.bold(\"demo initiative\"));\n console.log(\n ` ${result.demoInitiative.created ? pc.green(\"created\") : pc.yellow(\"unchanged\")} ${result.demoInitiative.initiative.title}`,\n );\n console.log(` live: ${result.demoInitiative.liveUrl}`);\n console.log(\n ` decision: ${result.demoInitiative.decision.title} ${pc.dim(`(${result.demoInitiative.decision.status ?? \"pending\"})`)}`,\n );\n console.log(\n ` artifact: ${result.demoInitiative.artifact.name}${result.demoInitiative.artifact.url ? ` ${pc.dim(result.demoInitiative.artifact.url)}` : \"\"}`,\n );\n }\n}\n\nfunction normalizePromptResult<T>(value: T | symbol): T | symbol {\n return value;\n}\n\nasync function secretPrompt(message: string): Promise<string | null> {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n return null;\n }\n\n process.stdout.write(`${message}: `);\n\n const stdin = process.stdin;\n const stdout = process.stdout;\n const previousRawMode = stdin.isRaw === true;\n\n return await new Promise<string | null>((resolve) => {\n let value = \"\";\n\n const cleanup = (result: string | null) => {\n stdin.off(\"data\", onData);\n if (stdin.isTTY) {\n stdin.setRawMode(previousRawMode);\n }\n stdin.pause();\n stdout.write(\"\\n\");\n resolve(result);\n };\n\n const onData = (chunk: Buffer | string) => {\n const text = chunk.toString(\"utf8\");\n\n for (const char of text) {\n if (char === \"\\u0003\") {\n cleanup(null);\n return;\n }\n\n if (char === \"\\r\" || char === \"\\n\") {\n cleanup(value.trim());\n return;\n }\n\n if (char === \"\\u007f\" || char === \"\\b\") {\n value = value.slice(0, -1);\n continue;\n }\n\n if (char >= \" \") {\n value += char;\n }\n }\n };\n\n if (stdin.isTTY) {\n stdin.setRawMode(true);\n }\n stdin.resume();\n stdin.on(\"data\", onData);\n });\n}\n\nasync function selectPrompt(input: {\n initialValue?: string | undefined;\n message: string;\n options: { hint?: string; label: string; value: string }[];\n}): Promise<string | symbol> {\n const promptInput = input.initialValue\n ? { ...input, initialValue: input.initialValue }\n : { message: input.message, options: input.options };\n\n return normalizePromptResult(await clack.select<string>(promptInput));\n}\n\nasync function textPrompt(input: {\n initialValue?: string | undefined;\n message: string;\n placeholder?: string;\n validate?: (value: string | undefined) => Error | string | undefined;\n}): Promise<string | symbol> {\n const promptInput = input.initialValue\n ? { ...input, initialValue: input.initialValue }\n : {\n message: input.message,\n ...(input.placeholder ? { placeholder: input.placeholder } : {}),\n ...(input.validate ? { validate: input.validate } : {}),\n };\n\n return normalizePromptResult(await clack.text(promptInput));\n}\n\nasync function multiselectPrompt(input: {\n message: string;\n options: { disabled?: boolean; hint?: string; label: string; value: string }[];\n required?: boolean;\n}): Promise<string[] | symbol> {\n const promptInput = {\n message: input.message,\n options: input.options,\n ...(input.required !== undefined ? { required: input.required } : {}),\n };\n\n return normalizePromptResult(await clack.multiselect<string>(promptInput));\n}\n\nfunction printAgentRoster(roster: WizardAgentRosterRecord): void {\n console.log(` ${ICON.ok} ${pc.green(\"agent roster\")} ${pc.bold(`${roster.agents.length} agents`)}`);\n for (const agent of roster.agents) {\n console.log(\n ` ${pc.dim(agent.domain.padEnd(12))} ${pc.bold(agent.name)} ${pc.dim(agent.agentType)}`,\n );\n }\n}\n\nasync function promptForGuidedAgentRoster(\n workspace: OrgxWorkspace,\n): Promise<\"cancelled\" | WizardAgentRosterRecord | null> {\n const remainingAgents = listAgentRosterProfiles();\n const assignments: AgentRosterAssignment[] = [];\n\n for (const domain of AGENT_ROSTER_DOMAINS) {\n if (remainingAgents.length === 0) {\n break;\n }\n\n const defaultAgent = remainingAgents.find((agent) => agent.defaultDomain === domain);\n const choice = await selectPrompt({\n initialValue: defaultAgent?.name ?? \"skip\",\n message: `Assign an OrgX agent to the ${domain} domain`,\n options: [\n ...remainingAgents.map((agent) => ({\n value: agent.name,\n label: agent.name,\n hint: `${agent.agentType} · default ${agent.defaultDomain}`,\n })),\n { value: \"skip\", label: `Leave ${domain} unassigned`, hint: \"optional\" },\n ],\n });\n\n if (clack.isCancel(choice)) {\n clack.cancel(\"Setup cancelled.\");\n return \"cancelled\";\n }\n\n if (choice === \"skip\") {\n continue;\n }\n\n const index = remainingAgents.findIndex((agent) => agent.name === choice);\n if (index === -1) {\n continue;\n }\n\n const [selectedAgent] = remainingAgents.splice(index, 1);\n if (!selectedAgent) {\n continue;\n }\n\n assignments.push({ domain, name: selectedAgent.name });\n }\n\n if (assignments.length === 0) {\n return null;\n }\n\n return configureAgentRoster(workspace, assignments);\n}\n\nasync function verifyAndPersistAuth(\n apiKey: string,\n options: { baseUrl?: string; telemetrySource?: string },\n): Promise<{\n verification: OrgxAuthCheckResult;\n} | {\n openclawResults: SurfaceMutationResult[];\n stored: Awaited<ReturnType<typeof writeWizardAuth>>;\n verification: OrgxAuthCheckResult;\n}> {\n const trimmedKey = apiKey.trim();\n if (!trimmedKey.toLowerCase().startsWith(\"oxk_\")) {\n throw new Error(\"Expected a per-user OrgX API key that starts with oxk_.\");\n }\n\n const baseUrl = normalizeOrgxBaseUrl(options.baseUrl);\n const verification = await verifyOrgxAuth({\n apiKey: trimmedKey,\n keyPrefix: trimmedKey.slice(0, 12),\n baseUrl,\n source: \"wizard-store\",\n });\n\n if (!verification.ok) {\n return { verification };\n }\n\n const stored = await writeWizardAuth({\n apiKey: trimmedKey,\n baseUrl,\n verifiedAt: new Date().toISOString(),\n });\n await safeTrackWizardTelemetry(\"auth_completed\", {\n auth_source: options.telemetrySource ?? \"manual_api_key\",\n has_base_url: Boolean(baseUrl),\n });\n const openclawResults = detectSurface(\"openclaw\").detected\n ? await addSurface(\"openclaw\")\n : [];\n\n return { openclawResults, stored, verification };\n}\n\nasync function syncContinuityAfterAuth(seed: {\n executionMode?: \"cloud\" | \"local\" | null;\n workspaceName?: string | null;\n} = {}): Promise<void> {\n try {\n const workspace = await getCurrentWorkspace().catch(() => null);\n persistContinuityDefaults({\n ...(seed.executionMode !== undefined ? { executionMode: seed.executionMode } : {}),\n workspace,\n workspaceName: seed.workspaceName ?? workspace?.name ?? null,\n });\n } catch {\n // Auth success should not depend on workspace or continuity writes.\n }\n}\n\nfunction parseTimeoutSeconds(value: string): number {\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || parsed <= 0) {\n throw new Error(\"--timeout must be a positive number of seconds.\");\n }\n return parsed;\n}\n\nasync function maybeConfigureOptionalWorkspaceAddOns(input: {\n initiativeId?: string;\n interactive: boolean;\n telemetry?: {\n command: string;\n preset?: string;\n };\n workspace: OrgxWorkspace | null;\n}): Promise<\"cancelled\" | \"configured\" | \"skipped\"> {\n if (!input.interactive || !input.workspace) {\n return \"skipped\";\n }\n\n const existingState = readWizardState();\n const hasOnboardingTask = existingState?.onboardingTask?.workspaceId === input.workspace.id;\n if (!hasOnboardingTask) {\n const onboardingChoice = await selectPrompt({\n message: `Create a starter onboarding task for ${input.workspace.name}?`,\n options: [\n { value: \"yes\", label: \"Create onboarding task\", hint: \"recommended\" },\n { value: \"no\", label: \"Skip task creation\" },\n ],\n });\n if (clack.isCancel(onboardingChoice)) {\n clack.cancel(\"Setup cancelled.\");\n return \"cancelled\";\n }\n if (onboardingChoice === \"yes\") {\n const task = await ensureOnboardingTask(input.workspace, {\n ...(input.initiativeId ? { initiativeId: input.initiativeId } : {}),\n });\n console.log(` ${ICON.ok} ${pc.green(\"onboarding\")} ${pc.bold(task.title)}`);\n await safeTrackWizardTelemetry(\n \"onboarding_task_created\",\n buildOnboardingTaskTelemetryProperties(\n {\n created: true,\n hasInitiative: Boolean(input.initiativeId),\n task,\n },\n {\n command: input.telemetry?.command ?? \"setup\",\n ...(input.telemetry?.preset ? { preset: input.telemetry.preset } : {}),\n },\n ),\n );\n }\n }\n\n const refreshedState = readWizardState();\n const hasAgentRoster = refreshedState?.agentRoster?.workspaceId === input.workspace.id;\n if (!hasAgentRoster) {\n const rosterChoice = await selectPrompt({\n message: `Set up an OrgX agent roster for ${input.workspace.name}?`,\n options: [\n { value: \"guided\", label: \"Choose agents and domains\", hint: \"recommended\" },\n { value: \"default\", label: \"Install the full default roster\" },\n { value: \"no\", label: \"Skip roster setup\" },\n ],\n });\n if (clack.isCancel(rosterChoice)) {\n clack.cancel(\"Setup cancelled.\");\n return \"cancelled\";\n }\n if (rosterChoice === \"guided\") {\n const roster = await promptForGuidedAgentRoster(input.workspace);\n if (roster === \"cancelled\") {\n return \"cancelled\";\n }\n if (roster) {\n printAgentRoster(roster);\n await safeTrackWizardTelemetry(\n \"agent_roster_configured\",\n buildAgentRosterTelemetryProperties(\n {\n roster,\n strategy: \"guided\",\n },\n {\n command: input.telemetry?.command ?? \"setup\",\n ...(input.telemetry?.preset ? { preset: input.telemetry.preset } : {}),\n },\n ),\n );\n } else {\n console.log(` ${ICON.skip} ${pc.dim(\"agent roster skipped\")} ${pc.dim(\"(no agents selected)\")}`);\n }\n } else if (rosterChoice === \"default\") {\n const roster = ensureDefaultAgentRoster(input.workspace);\n printAgentRoster(roster);\n await safeTrackWizardTelemetry(\n \"agent_roster_configured\",\n buildAgentRosterTelemetryProperties(\n {\n roster,\n strategy: \"default\",\n },\n {\n command: input.telemetry?.command ?? \"setup\",\n ...(input.telemetry?.preset ? { preset: input.telemetry.preset } : {}),\n },\n ),\n );\n }\n }\n\n return \"configured\";\n}\n\nasync function promptOptionalCompanionPluginTargets(input: {\n interactive: boolean;\n}): Promise<\"cancelled\" | OrgxPluginStatus[\"target\"][]> {\n if (!input.interactive) {\n return [];\n }\n\n const statuses = await listOrgxPluginStatuses();\n const installable = statuses.filter((status) => status.available && !status.installed);\n if (installable.length === 0) {\n return [];\n }\n\n const selection = await multiselectPrompt({\n message: \"Install companion OrgX plugins into detected tools?\",\n options: installable.map((status) => ({\n value: status.target,\n label: `Install ${formatPluginTargetLabel(status.target)}`,\n hint: status.message,\n })),\n required: false,\n });\n\n if (clack.isCancel(selection)) {\n clack.cancel(\"Setup cancelled.\");\n return \"cancelled\";\n }\n\n return selection as OrgxPluginStatus[\"target\"][];\n}\n\nfunction printPluginSkillOwnershipNote(targets: readonly OrgxPluginStatus[\"target\"][]): void {\n if (!targets.some((target) => target === \"claude\" || target === \"codex\")) {\n return;\n }\n\n console.log(\n ` ${ICON.skip} ${pc.dim(\n \"Claude Code and Codex companion plugins carry their own OrgX skills. Use 'wizard skills add' for Cursor rules or standalone Claude setup when those plugins are not in play.\",\n )}`,\n );\n}\n\nasync function installSelectedCompanionPlugins(input: {\n targets: readonly OrgxPluginStatus[\"target\"][];\n telemetry?: {\n command: string;\n preset?: string;\n };\n}): Promise<\"configured\" | \"skipped\"> {\n if (input.targets.length === 0) {\n return \"skipped\";\n }\n\n const spinner = createOrgxSpinner(\"Installing OrgX companion plugins\");\n spinner.start();\n const report = await installOrgxPlugins({ targets: input.targets });\n spinner.succeed(\"OrgX companion plugins processed\");\n printPluginMutationReport(report);\n printPluginSkillOwnershipNote(input.targets);\n\n await safeTrackWizardTelemetry(\"plugins_installed\", {\n changed_count: countPluginReportChanges(report),\n command: input.telemetry?.command ?? \"setup\",\n ...(input.telemetry?.preset ? { preset: input.telemetry.preset } : {}),\n requested_target_count: input.targets.length,\n target_count: report.results.length,\n });\n\n return countPluginReportChanges(report) > 0 ? \"configured\" : \"skipped\";\n}\n\nasync function maybeInstallOptionalCompanionPlugins(input: {\n interactive: boolean;\n telemetry?: {\n command: string;\n preset?: string;\n };\n}): Promise<\"cancelled\" | \"configured\" | \"skipped\"> {\n const selection = await promptOptionalCompanionPluginTargets({\n interactive: input.interactive,\n });\n if (selection === \"cancelled\") {\n return \"cancelled\";\n }\n\n return await installSelectedCompanionPlugins({\n targets: selection,\n ...(input.telemetry ? { telemetry: input.telemetry } : {}),\n });\n}\n\n\nfunction printAuthStatus(status: OrgxAuthCheckResult): void {\n if (!status.configured) {\n console.log(` ${ICON.warn} ${pc.yellow(\"no account\")} run ${pc.cyan(`${getCmd()} auth login`)} to connect`);\n return;\n }\n\n const icon = status.ok ? ICON.ok : ICON.err;\n const state = status.ok ? pc.green(\"verified \") : status.skipped ? pc.yellow(\"skipped \") : pc.red(\"invalid \");\n const via = pc.dim(formatAuthSource(status.source));\n console.log(` ${icon} ${state} ${pc.bold(status.keyPrefix ?? \"unknown\")} ${via}`);\n if (!status.ok && status.error) {\n console.log(` ${pc.red(status.error)}`);\n }\n}\n\nfunction printDoctorReport(\n report: Awaited<ReturnType<typeof runDoctor>>,\n assessment: ReturnType<typeof assessDoctorReport>,\n): void {\n const verification = summarizeSetupVerification(assessment);\n // — Surfaces —\n console.log(pc.dim(\" surfaces\"));\n printSurfaceTable(report.surfaces);\n\n // — Account —\n console.log(\"\");\n console.log(pc.dim(\" account\"));\n printAuthStatus(report.auth);\n\n // — Services —\n console.log(\"\");\n console.log(pc.dim(\" services\"));\n\n // Hosted MCP\n const mcp = report.hostedMcp;\n {\n const icon = mcp.skipped ? ICON.skip : mcp.ok ? ICON.ok : ICON.err;\n const label = pc.dim(\"cloud mcp \".padEnd(14));\n const state = mcp.skipped ? pc.dim(\"skipped\") : mcp.ok ? pc.green(\"reachable\") : pc.red(\"unreachable\");\n const tail = !mcp.ok && !mcp.skipped && mcp.error ? ` ${pc.dim(mcp.error)}` : \"\";\n console.log(` ${icon} ${label} ${state}${tail}`);\n }\n\n // Tool call\n const tool = report.hostedMcpTool;\n {\n const icon = tool.skipped ? ICON.skip : tool.ok ? ICON.ok : ICON.err;\n const label = pc.dim(\"tool call \".padEnd(14));\n const state = tool.skipped ? pc.dim(\"skipped\") : tool.ok ? pc.green(\"authenticated\") : pc.red(\"failed\");\n const tail = !tool.ok && !tool.skipped && tool.error ? ` ${pc.dim(tool.error)}` : \"\";\n console.log(` ${icon} ${label} ${state}${tail}`);\n }\n\n // Workspace\n const ws = report.workspace;\n {\n const icon = !ws.configured ? ICON.skip : ws.ok ? ICON.ok : ICON.err;\n const label = pc.dim(\"workspace \".padEnd(14));\n const state = !ws.configured\n ? pc.dim(\"not configured\")\n : ws.ok && ws.workspace\n ? pc.green(ws.workspace.name)\n : pc.red(`unreachable${ws.error ? `: ${ws.error}` : \"\"}`);\n console.log(` ${icon} ${label} ${state}`);\n }\n\n // OpenClaw\n const openclaw = report.openclaw;\n {\n const icon = openclaw.skipped ? ICON.skip : openclaw.ok ? ICON.ok : ICON.err;\n const label = pc.dim(\"openclaw \".padEnd(14));\n const state = openclaw.skipped\n ? pc.dim(\"not installed\")\n : openclaw.ok\n ? pc.green(`healthy${openclaw.method && openclaw.method !== \"none\" ? ` (${openclaw.method})` : \"\"}`)\n : pc.red(`unhealthy${openclaw.error ? `: ${openclaw.error}` : \"\"}`);\n console.log(` ${icon} ${label} ${state}`);\n }\n\n // — Summary —\n console.log(\"\");\n const configuredCount = report.surfaces.filter((s) => s.configured).length;\n if (assessment.issues.length === 0) {\n console.log(` ${ICON.ok} ${pc.green(\"All systems ready.\")}`);\n if (!report.auth.configured) {\n console.log(`\\n ${pc.dim(\"→\")} ${pc.cyan(`${getCmd()} auth login`)} ${pc.dim(\"to connect your account\")}`);\n } else {\n console.log(` ${pc.dim(\"→\")} ${pc.dim(`OrgX is active across ${configuredCount} editor${configuredCount !== 1 ? \"s\" : \"\"}`)}`);\n }\n } else {\n const headlineText = getSetupVerificationHeadline(verification);\n const headline = verification.status === \"error\"\n ? `${ICON.err} ${pc.red(headlineText)}`\n : `${ICON.warn} ${pc.yellow(headlineText)}`;\n console.log(` ${headline}`);\n for (const issue of assessment.issues) {\n const degradedHostedMcpIssue =\n verification.hostedMcpDegraded && issue.title === HOSTED_MCP_OUTAGE_TITLE;\n const label = degradedHostedMcpIssue\n ? pc.yellow(\"degr \")\n : issue.level === \"error\"\n ? pc.red(\"error\")\n : pc.yellow(\"warn \");\n console.log(`\\n ${label} ${issue.title}`);\n console.log(` ${pc.dim(\"→\")} ${issue.suggestion}`);\n }\n }\n}\n\nasync function main(): Promise<void> {\n const program = new Command();\n program\n .name(\"orgx-wizard\")\n .description(\"One-line CLI onboarding for OrgX surfaces.\")\n .showHelpAfterError();\n\n const pkgVersion = typeof __PKG_VERSION__ !== \"undefined\" ? __PKG_VERSION__ : undefined;\n program.version(pkgVersion ?? \"unknown\", \"-V, --version\");\n\n program.hook(\"preAction\", () => {\n console.log(renderBanner(pkgVersion));\n });\n\n program\n .command(\"setup\")\n .description(\"Patch all detected automated OrgX surfaces.\")\n .option(\"--preset <name>\", \"run a setup bundle (currently: founder)\")\n .action(async (options: { preset?: string }) => {\n const interactive = Boolean(process.stdin.isTTY && process.stdout.isTTY);\n await safeTrackWizardTelemetry(\"wizard_started\", {\n command: \"setup\",\n interactive,\n preset: options.preset ?? \"standard\",\n });\n\n if (options.preset) {\n if (options.preset !== \"founder\") {\n throw new Error(`Unknown setup preset '${options.preset}'. Supported presets: founder.`);\n }\n\n const founderPluginTargets = await promptOptionalCompanionPluginTargets({\n interactive,\n });\n if (founderPluginTargets === \"cancelled\") {\n return;\n }\n\n const spinner = createOrgxSpinner(\"Running founder setup preset\");\n spinner.start();\n const presetResult = await runFounderPreset(\n {\n cancel: clack.cancel,\n isCancel: clack.isCancel,\n select: selectPrompt,\n text: textPrompt,\n },\n {\n interactive,\n pluginTargets: founderPluginTargets,\n },\n );\n\n if (\"status\" in presetResult) {\n spinner.stop();\n if (presetResult.status === \"cancelled\") {\n return;\n }\n printWorkspaceSetupResult(presetResult);\n return;\n }\n\n spinner.succeed(\"Founder setup preset complete\");\n printFounderPresetResult(presetResult);\n await safeTrackWizardTelemetry(\"mcp_injected\", {\n changed_count: presetResult.surfaceResults.filter((result) => result.changed).length,\n preset: \"founder\",\n surface_count: presetResult.surfaceResults.length,\n });\n await safeTrackWizardTelemetry(\"skills_installed\", {\n changed_count: countSkillReportChanges(presetResult.skillReport),\n pack_count: presetResult.skillReport.packs.length,\n preset: \"founder\",\n write_count: presetResult.skillReport.writes.length,\n });\n if (presetResult.workspaceSetup) {\n await safeTrackWizardTelemetry(\n \"workspace_bootstrapped\",\n buildWorkspaceSetupTelemetryProperties(presetResult.workspaceSetup, {\n command: \"setup\",\n interactive,\n preset: \"founder\",\n }),\n );\n }\n if (presetResult.demoInitiative) {\n await safeTrackWizardTelemetry(\n \"founder_demo_ready\",\n buildFounderDemoTelemetryProperties(presetResult.demoInitiative, {\n command: \"setup\",\n preset: \"founder\",\n }),\n );\n }\n\n const addOnResult = await maybeConfigureOptionalWorkspaceAddOns({\n interactive,\n telemetry: { command: \"setup\", preset: \"founder\" },\n workspace: presetResult.workspace,\n ...(presetResult.demoInitiative\n ? { initiativeId: presetResult.demoInitiative.initiative.id }\n : {}),\n });\n if (addOnResult === \"cancelled\") {\n return;\n }\n\n await installSelectedCompanionPlugins({\n telemetry: { command: \"setup\", preset: \"founder\" },\n targets: founderPluginTargets,\n });\n\n console.log(\"\");\n const doctor = await runDoctor();\n const assessment = assessDoctorReport(doctor);\n const verification = summarizeSetupVerification(assessment);\n await safeTrackWizardTelemetry(\n \"setup_verified\",\n buildDoctorTelemetryProperties(doctor, assessment, verification, {\n command: \"setup\",\n preset: \"founder\",\n }),\n );\n printDoctorReport(doctor, assessment);\n if (verification.status === \"error\") {\n process.exitCode = 1;\n }\n return;\n }\n\n const spinner = createOrgxSpinner(\"Configuring detected OrgX surfaces\");\n spinner.start();\n const results = await setupDetectedSurfaces();\n spinner.succeed(\"Detected surfaces configured\");\n printMutationResults(results);\n await safeTrackWizardTelemetry(\"mcp_injected\", {\n changed_count: results.filter((result) => result.changed).length,\n preset: \"standard\",\n surface_count: results.length,\n });\n\n let resolvedAuth = await resolveOrgxAuth();\n if (!resolvedAuth) {\n console.log(\"\");\n if (interactive) {\n const choice = await selectPrompt({\n message: \"Connect your OrgX account to enable workspace and AI tool access\",\n options: [\n { value: \"login\", label: \"Open browser to connect\", hint: \"recommended\" },\n { value: \"skip\", label: \"Skip for now\", hint: `run \\`${getCmd()} auth login\\` later` },\n ],\n });\n if (clack.isCancel(choice)) {\n clack.cancel(\"Setup cancelled.\");\n return;\n }\n if (choice === \"login\") {\n const loginOk = await runBrowserLogin({ telemetrySource: \"browser_pairing\" });\n if (!loginOk) {\n // Pairing failed — show clean next steps, don't dump the full doctor\n console.log(`\\n ${pc.dim(\"→\")} ${pc.cyan(`${getCmd()} auth login`)} ${pc.dim(\"to try again\")}`);\n console.log(` ${pc.dim(\"→\")} ${pc.cyan(`${getCmd()} auth login --api-key`)} ${pc.dim(\"to paste a key directly\")}`);\n return;\n }\n resolvedAuth = await resolveOrgxAuth();\n } else {\n // User skipped\n console.log(`\\n ${pc.dim(\"→\")} ${pc.cyan(`${getCmd()} auth login`)} ${pc.dim(\"to connect when ready\")}`);\n return;\n }\n } else {\n console.log(\n ` ${ICON.warn} ${pc.yellow(\"No account connected.\")} Run ${pc.cyan(`${getCmd()} auth login`)} to connect.`,\n );\n return;\n }\n }\n\n if (resolvedAuth) {\n console.log(\"\");\n const workspaceSetup = await runWorkspaceSetup(\n {\n createWorkspace,\n getCurrentWorkspace,\n listWorkspaces,\n setDefaultWorkspace,\n },\n {\n cancel: clack.cancel,\n isCancel: clack.isCancel,\n select: selectPrompt,\n text: textPrompt,\n },\n {\n interactive,\n },\n );\n if (workspaceSetup.status === \"cancelled\") {\n return;\n }\n await safeTrackWizardTelemetry(\n \"workspace_bootstrapped\",\n buildWorkspaceSetupTelemetryProperties(workspaceSetup, {\n command: \"setup\",\n interactive,\n preset: \"standard\",\n }),\n );\n const resolvedWorkspace = workspaceSetup.workspace ?? await getCurrentWorkspace().catch(() => null);\n if (resolvedWorkspace) {\n persistContinuityDefaults({ workspace: resolvedWorkspace });\n }\n if (workspaceSetup.workspace) {\n console.log(` ${ICON.ok} ${pc.green(\"workspace \")} ${pc.bold(workspaceSetup.workspace.name)}`);\n }\n\n const addOnResult = await maybeConfigureOptionalWorkspaceAddOns({\n interactive,\n telemetry: { command: \"setup\", preset: \"standard\" },\n workspace: resolvedWorkspace,\n });\n if (addOnResult === \"cancelled\") {\n return;\n }\n\n const pluginInstallResult = await maybeInstallOptionalCompanionPlugins({\n interactive,\n telemetry: { command: \"setup\", preset: \"standard\" },\n });\n if (pluginInstallResult === \"cancelled\") {\n return;\n }\n }\n\n // Compact final status — surfaces already shown above, just give the bottom line\n const doctor = await runDoctor();\n const assessment = assessDoctorReport(doctor);\n const verification = summarizeSetupVerification(assessment);\n await safeTrackWizardTelemetry(\n \"setup_verified\",\n buildDoctorTelemetryProperties(doctor, assessment, verification, {\n command: \"setup\",\n preset: \"standard\",\n }),\n );\n const configuredCount = doctor.surfaces.filter((s) => s.configured).length;\n console.log(\"\");\n if (assessment.issues.length === 0) {\n console.log(` ${ICON.ok} ${pc.green(\"You're all set.\")} ${pc.dim(`OrgX is active across ${configuredCount} editor${configuredCount !== 1 ? \"s\" : \"\"}`)}`);\n } else {\n // Something needs attention — show full report\n printDoctorReport(doctor, assessment);\n if (verification.status === \"error\") {\n process.exitCode = 1;\n }\n }\n });\n\n async function runBrowserLogin(opts: {\n baseUrl?: string;\n deviceName?: string;\n open?: boolean;\n telemetrySource?: string;\n timeout?: number;\n } = {}): Promise<boolean> {\n const installationId = getOrCreateWizardInstallationId();\n const spinner = createOrgxSpinner(\"Starting OrgX browser pairing\");\n spinner.start();\n\n try {\n const pairing = await startBrowserPairing({\n installationId,\n baseUrl: opts.baseUrl,\n deviceName: opts.deviceName ?? hostname(),\n platform: process.platform,\n });\n spinner.succeed(\"Browser pairing session opened\");\n\n console.log(`\\n ${pc.dim(\"Open this URL to connect:\")}`);\n console.log(` ${pc.cyan(pairing.connectUrl)}\\n`);\n if (opts.open !== false) {\n const openResult = openBrowser(pairing.connectUrl);\n if (!openResult.ok && openResult.error) {\n console.log(pc.yellow(`Browser open failed: ${openResult.error}`));\n }\n }\n\n spinner.start();\n spinner.text = \"Waiting for browser approval...\";\n const ready = await waitForBrowserPairing({\n baseUrl: opts.baseUrl,\n pairingId: pairing.pairingId,\n pollIntervalMs: pairing.pollIntervalMs,\n pollToken: pairing.pollToken,\n timeoutMs: (opts.timeout ?? 600) * 1000,\n });\n\n spinner.text = \"Verifying API key...\";\n const result = await verifyAndPersistAuth(ready.key!, {\n ...(opts.baseUrl !== undefined ? { baseUrl: opts.baseUrl } : {}),\n ...(opts.telemetrySource ? { telemetrySource: opts.telemetrySource } : {}),\n });\n\n if (!(\"stored\" in result)) {\n spinner.fail(\"Pairing completed but key was rejected\");\n console.log(` ${pc.red(result.verification.error ?? `HTTP ${result.verification.status ?? \"error\"}`)}`);\n console.log(` ${pc.dim(\"The browser flow finished, but OrgX rejected the key. Try again or check your account at useorgx.com.\")}`);\n return false;\n }\n\n await acknowledgeBrowserPairing({\n baseUrl: opts.baseUrl,\n pairingId: pairing.pairingId,\n pollToken: pairing.pollToken,\n }).catch((error: unknown) => {\n console.log(pc.dim(`Pairing ack failed: ${error instanceof Error ? error.message : String(error)}`));\n });\n\n spinner.succeed(\"OrgX account connected\");\n await syncContinuityAfterAuth({\n executionMode: ready.executionMode,\n workspaceName: ready.workspaceName,\n });\n\n console.log(` ${ICON.ok} ${pc.green(\"verified \")} ${pc.bold(result.stored.keyPrefix ?? result.verification.keyPrefix ?? \"unknown\")} ${pc.dim(\"wizard auth store\")}`);\n if (ready.workspaceName) {\n console.log(` ${ICON.ok} ${pc.green(\"workspace \")} ${pc.bold(ready.workspaceName)}`);\n }\n\n if (result.openclawResults.length > 0) {\n console.log(\"\");\n printMutationResults(result.openclawResults);\n }\n\n return true;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n spinner.fail(\"Browser pairing failed\");\n console.log(` ${pc.red(message)}`);\n return false;\n }\n }\n\n const auth = program.command(\"auth\").description(\"Manage OrgX API key auth for the wizard.\");\n\n auth\n .command(\"status\")\n .description(\"Show the resolved OrgX API key source and verify it against OrgX.\")\n .action(async () => {\n const spinner = createOrgxSpinner(\"Checking OrgX auth\");\n spinner.start();\n const status = await checkOrgxAuth();\n spinner.stop();\n console.log(pc.dim(\" account\"));\n printAuthStatus(status);\n });\n\n auth\n .command(\"login\")\n .description(\"Start browser pairing for OrgX auth, with direct API key fallback for CI and blocked browsers.\")\n .option(\"--api-key <key>\", \"Bypass browser pairing and verify this OrgX API key directly.\")\n .option(\"--base-url <url>\", \"OrgX base URL\")\n .option(\"--device-name <name>\", \"Device name shown during browser approval.\")\n .option(\"--no-open\", \"Do not automatically open the browser connect URL.\")\n .option(\"--timeout <seconds>\", \"How long to wait for browser pairing before giving up.\", parseTimeoutSeconds, 600)\n .action(async (options: { apiKey?: string; baseUrl?: string; deviceName?: string; open?: boolean; timeout: number }) => {\n if (options.apiKey) {\n const spinner = createOrgxSpinner(\"Verifying OrgX API key\");\n spinner.start();\n const result = await verifyAndPersistAuth(options.apiKey, {\n ...options,\n telemetrySource: \"manual_api_key\",\n });\n\n if (!(\"stored\" in result)) {\n spinner.fail(\"OrgX API key verification failed\");\n printAuthStatus(result.verification);\n return;\n }\n\n spinner.succeed(\"OrgX account connected\");\n await syncContinuityAfterAuth();\n console.log(` ${ICON.ok} ${pc.green(\"verified \")} ${pc.bold(result.stored.keyPrefix ?? result.verification.keyPrefix ?? \"unknown\")} ${pc.dim(\"wizard auth store\")}`);\n\n if (result.openclawResults.length > 0) {\n console.log(\"\");\n printMutationResults(result.openclawResults);\n }\n return;\n }\n\n await runBrowserLogin({\n ...(options.baseUrl !== undefined ? { baseUrl: options.baseUrl } : {}),\n ...(options.deviceName !== undefined ? { deviceName: options.deviceName } : {}),\n ...(options.open !== undefined ? { open: options.open } : {}),\n telemetrySource: \"browser_pairing\",\n timeout: options.timeout,\n });\n });\n\n auth\n .command(\"set-key\")\n .description(\"Verify and persist a per-user OrgX API key for the wizard.\")\n .argument(\"<apiKey>\", \"per-user OrgX API key (oxk_...)\")\n .option(\"--base-url <url>\", \"OrgX base URL\")\n .action(async (apiKey: string, options: { baseUrl?: string }) => {\n const spinner = createOrgxSpinner(\"Verifying OrgX API key\");\n spinner.start();\n const result = await verifyAndPersistAuth(apiKey, {\n ...options,\n telemetrySource: \"manual_api_key\",\n });\n\n if (!(\"stored\" in result)) {\n spinner.fail(\"OrgX API key verification failed\");\n printAuthStatus(result.verification);\n return;\n }\n\n spinner.succeed(\"OrgX account connected\");\n await syncContinuityAfterAuth();\n console.log(` ${ICON.ok} ${pc.green(\"verified \")} ${pc.bold(result.stored.keyPrefix ?? result.verification.keyPrefix ?? \"unknown\")} ${pc.dim(\"wizard auth store\")}`);\n\n if (result.openclawResults.length > 0) {\n console.log(\"\");\n printMutationResults(result.openclawResults);\n }\n });\n\n auth\n .command(\"clear\")\n .description(\"Remove the wizard-local saved OrgX API key.\")\n .action(async () => {\n const removed = await clearWizardAuth();\n if (removed) {\n console.log(pc.green(\"Removed the wizard-local OrgX API key.\"));\n } else {\n console.log(pc.yellow(\"No wizard-local OrgX API key was stored.\"));\n }\n\n const resolved = await resolveOrgxAuth();\n if (resolved) {\n console.log(\n `Effective OrgX auth still resolves from ${formatAuthSource(resolved.source)} (${resolved.keyPrefix}).`,\n );\n }\n });\n\n const surface = program.command(\"surface\").description(\"Manage supported OrgX surfaces.\");\n\n surface\n .command(\"list\")\n .description(\"Show supported surfaces and their current status.\")\n .action(() => {\n printSurfaceTable(listSurfaceStatuses());\n });\n\n surface\n .command(\"add\")\n .description(\"Patch one surface or all automated surfaces.\")\n .argument(\"<names...>\", \"surface names or 'all'\")\n .action(async (names: string[]) => {\n const results = await addSurface(names as Parameters<typeof addSurface>[0]);\n printMutationResults(results);\n });\n\n surface\n .command(\"remove\")\n .description(\"Remove OrgX-managed config from one surface or all automated surfaces.\")\n .argument(\"<names...>\", \"surface names or 'all'\")\n .action((names: string[]) => {\n const results = removeSurface(names as Parameters<typeof removeSurface>[0]);\n printMutationResults(results);\n });\n\n const mcp = program\n .command(\"mcp\")\n .description(\"Manage OrgX MCP entries for Claude, Cursor, Codex, VS Code, Windsurf, and Zed.\");\n\n mcp\n .command(\"add\")\n .description(\"Add OrgX MCP entries to one client or all supported MCP clients.\")\n .argument(\"[surfaces...]\", \"claude, cursor, codex, vscode, windsurf, zed, or all\", [\"all\"])\n .action(async (names: string[]) => {\n const results = await addMcpSurface(names as Parameters<typeof addMcpSurface>[0]);\n printMutationResults(results);\n });\n\n mcp\n .command(\"remove\")\n .description(\"Remove OrgX MCP entries from one client or all supported MCP clients.\")\n .argument(\"[surfaces...]\", \"claude, cursor, codex, vscode, windsurf, zed, or all\", [\"all\"])\n .action((names: string[]) => {\n const results = removeMcpSurface(names as Parameters<typeof removeMcpSurface>[0]);\n printMutationResults(results);\n });\n\n const plugins = program\n .command(\"plugins\")\n .description(\"Install or remove companion OrgX plugins for Claude Code, Codex, and OpenClaw.\");\n\n plugins\n .command(\"list\")\n .description(\"Show companion plugin availability and install status.\")\n .action(async () => {\n const spinner = createOrgxSpinner(\"Checking companion plugin status\");\n spinner.start();\n const statuses = await listOrgxPluginStatuses();\n spinner.stop();\n printPluginStatusReport(statuses);\n });\n\n plugins\n .command(\"add\")\n .description(\"Install OrgX companion plugins into Claude Code, Codex, or OpenClaw.\")\n .argument(\"[targets...]\", \"claude, codex, openclaw, or all\", [\"all\"])\n .action(async (targets: string[]) => {\n const spinner = createOrgxSpinner(\"Installing OrgX companion plugins\");\n spinner.start();\n const report = await installOrgxPlugins({ targets });\n spinner.succeed(\"OrgX companion plugins processed\");\n printPluginMutationReport(report);\n printPluginSkillOwnershipNote(report.results.map((result) => result.target));\n await safeTrackWizardTelemetry(\"plugins_installed\", {\n changed_count: countPluginReportChanges(report),\n command: \"plugins:add\",\n requested_target_count: targets.length,\n target_count: report.results.length,\n });\n });\n\n plugins\n .command(\"remove\")\n .description(\"Uninstall managed OrgX companion plugins from Claude Code, Codex, or OpenClaw.\")\n .argument(\"[targets...]\", \"claude, codex, openclaw, or all\", [\"all\"])\n .action(async (targets: string[]) => {\n const spinner = createOrgxSpinner(\"Removing OrgX companion plugins\");\n spinner.start();\n const report = await uninstallOrgxPlugins({ targets });\n spinner.succeed(\"OrgX companion plugins removed\");\n printPluginMutationReport(report);\n await safeTrackWizardTelemetry(\"plugins_removed\", {\n changed_count: countPluginReportChanges(report),\n command: \"plugins:remove\",\n requested_target_count: targets.length,\n target_count: report.results.length,\n });\n });\n\n const workspace = program\n .command(\"workspace\")\n .description(\"Inspect and create OrgX workspaces.\");\n\n workspace\n .command(\"current\")\n .description(\"Show the current OrgX workspace.\")\n .action(async () => {\n const spinner = createOrgxSpinner(\"Loading current OrgX workspace\");\n spinner.start();\n const current = await getCurrentWorkspace();\n spinner.stop();\n\n if (!current) {\n console.log(pc.yellow(\"No OrgX workspaces found for the current user.\"));\n return;\n }\n\n printWorkspace(current);\n });\n\n workspace\n .command(\"list\")\n .description(\"List OrgX workspaces accessible with the current API key.\")\n .action(async () => {\n const spinner = createOrgxSpinner(\"Loading OrgX workspaces\");\n spinner.start();\n const workspaces = await listWorkspaces();\n spinner.stop();\n printWorkspaceList(workspaces);\n });\n\n workspace\n .command(\"create\")\n .description(\"Create a new OrgX workspace.\")\n .argument(\"<name>\", \"workspace name\")\n .option(\"--description <text>\", \"workspace description\")\n .action(async (name: string, options: { description?: string }) => {\n const spinner = createOrgxSpinner(\"Creating OrgX workspace\");\n spinner.start();\n const created = await createWorkspace(\n {\n name,\n ...(options.description ? { description: options.description } : {}),\n },\n );\n spinner.succeed(\"OrgX workspace created\");\n if (created.isDefault) {\n persistContinuityDefaults({ workspace: created });\n }\n printWorkspace(created);\n if (!created.isDefault) {\n console.log(\"\");\n console.log(pc.dim(`Run \\`wizard workspace set-default ${created.id}\\` to promote it.`));\n }\n });\n\n workspace\n .command(\"set-default\")\n .description(\"Set the default OrgX workspace.\")\n .argument(\"<id>\", \"workspace id\")\n .action(async (id: string) => {\n const spinner = createOrgxSpinner(\"Updating default OrgX workspace\");\n spinner.start();\n const result = await setDefaultWorkspace({ id });\n spinner.succeed(\n result.changed ? \"Default OrgX workspace updated\" : \"OrgX workspace already set as default\",\n );\n persistContinuityDefaults({ workspace: result.workspace });\n printWorkspace(result.workspace);\n });\n\n program\n .command(\"doctor\")\n .description(\"Verify local OrgX surface config and optional remote setup status.\")\n .action(async () => {\n const spinner = createOrgxSpinner(\"Running OrgX health check\");\n spinner.start();\n const report = await runDoctor();\n spinner.stop();\n const assessment = assessDoctorReport(report);\n const verification = summarizeSetupVerification(assessment);\n await safeTrackWizardTelemetry(\n \"doctor_ran\",\n buildDoctorTelemetryProperties(report, assessment, verification, {\n command: \"doctor\",\n }),\n );\n printDoctorReport(report, assessment);\n if (verification.status === \"error\") {\n process.exitCode = 1;\n }\n });\n\n const skills = program\n .command(\"skills\")\n .description(\"Install OrgX rules and Claude skill packs.\");\n\n skills\n .command(\"add\")\n .description(\"Write standalone OrgX editor rules and Claude skill packs, skipping surfaces already owned by companion plugins.\")\n .argument(\"[packs...]\", \"skill pack names or 'all'\", [\"all\"])\n .action(async (packs: string[]) => {\n const pluginTargets = (await listOrgxPluginStatuses())\n .filter((status) => status.installed)\n .map((status) => status.target);\n const spinner = createOrgxSpinner(\"Installing OrgX rules and skills\");\n spinner.start();\n const report = await installOrgxSkills({\n pluginTargets,\n skillNames: packs,\n });\n spinner.succeed(\"OrgX rules and skills installed\");\n printSkillInstallReport(report);\n await safeTrackWizardTelemetry(\"skills_installed\", {\n changed_count: countSkillReportChanges(report),\n command: \"skills:add\",\n pack_count: report.packs.length,\n plugin_managed_target_count: pluginTargets.length,\n requested_pack_count: packs.length,\n write_count: report.writes.length,\n });\n });\n\n await program.parseAsync(process.argv);\n}\n\nmain().catch((error) => {\n console.error(pc.red(error instanceof Error ? error.message : String(error)));\n process.exitCode = 1;\n});\n","import pc from \"picocolors\";\n\nexport function renderBanner(version?: string): string {\n const lines = [\n \" ____ ____ _______ __\",\n \" / __ \\\\/ __ \\\\ / ____/ |/ /\",\n \"/ / / / /_/ // / __ | / \",\n \"/ /_/ / _, _// /_/ // | \",\n \"\\\\____/_/ |_| \\\\____//_/|_| \",\n ];\n\n const art = lines.map((line) => pc.cyan(line)).join(\"\\n\");\n const tag = version ? ` ${pc.dim(`v${version}`)}` : \"\";\n return `${art}${tag}`;\n}\n\n","import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nexport const ORGX_HOSTED_MCP_KEY = \"orgx\";\nexport const ORGX_LOCAL_MCP_KEY = \"orgx-openclaw\";\nexport const ORGX_HOSTED_MCP_URL = \"https://mcp.useorgx.com/mcp\";\nexport const ORGX_HOSTED_MCP_HEALTH_URL = \"https://mcp.useorgx.com/health\";\nexport const ORGX_HOSTED_OAUTH_BASE_URL = \"https://mcp.useorgx.com\";\nexport const ORGX_HOSTED_OAUTH_AUTHORIZE_URL = `${ORGX_HOSTED_OAUTH_BASE_URL}/authorize`;\nexport const ORGX_HOSTED_OAUTH_TOKEN_URL = `${ORGX_HOSTED_OAUTH_BASE_URL}/token`;\nexport const ORGX_HOSTED_OAUTH_REGISTER_URL = `${ORGX_HOSTED_OAUTH_BASE_URL}/register`;\nexport const ORGX_WIZARD_NPM_PACKAGE_NAME = \"@useorgx/wizard\";\nexport const NPM_REGISTRY_BASE_URL = \"https://registry.npmjs.org\";\nexport const DEFAULT_OPENCLAW_GATEWAY_PORT = 18_789;\nexport const DEFAULT_ORGX_BASE_URL =\n process.env.ORGX_BASE_URL?.trim() || \"https://useorgx.com\";\nexport const ORGX_WIZARD_OAUTH_CALLBACK_HOST = \"127.0.0.1\";\nexport const ORGX_WIZARD_OAUTH_CALLBACK_PATH = \"/oauth/callback\";\nexport const ORGX_WIZARD_OAUTH_PREFERRED_PORT = 6_274;\nexport const ORGX_WIZARD_OAUTH_SCOPES = [\n \"decisions:read\",\n \"decisions:write\",\n \"agents:read\",\n \"agents:write\",\n \"initiatives:read\",\n \"initiatives:write\",\n \"memory:read\",\n \"offline_access\",\n] as const;\nexport const ORGX_WIZARD_OAUTH_SCOPE = ORGX_WIZARD_OAUTH_SCOPES.join(\" \");\n\nconst HOME = homedir();\nconst APPDATA = process.env.APPDATA?.trim();\nconst LOCAL_APPDATA = process.env.LOCALAPPDATA?.trim();\nconst XDG_CONFIG_HOME =\n process.env.XDG_CONFIG_HOME?.trim() || join(HOME, \".config\");\nexport const ORGX_WIZARD_CONFIG_HOME =\n process.env.ORGX_WIZARD_CONFIG_HOME?.trim() ||\n join(XDG_CONFIG_HOME, \"useorgx\", \"wizard\");\nexport const ORGX_WIZARD_AUTH_PATH = join(ORGX_WIZARD_CONFIG_HOME, \"auth.json\");\nexport const ORGX_WIZARD_STATE_PATH = join(ORGX_WIZARD_CONFIG_HOME, \"state.json\");\nexport const ORGX_WIZARD_KEYTAR_SERVICE = \"@useorgx/wizard\";\nexport const ORGX_WIZARD_KEYTAR_ACCOUNT = \"orgx-api-key\";\n\nfunction normalizeOrgxApiBaseUrl(baseUrl: string): string {\n const normalized = baseUrl.replace(/\\/+$/, \"\");\n if (/\\/api(\\/|$)/.test(normalized)) {\n return normalized;\n }\n return `${normalized}/api`;\n}\n\nconst ORGX_API_BASE_URL = normalizeOrgxApiBaseUrl(DEFAULT_ORGX_BASE_URL);\nexport const ORGX_SETUP_STATUS_URL = `${ORGX_API_BASE_URL}/setup/status`;\nexport const ORGX_AUTH_VERIFY_URL = `${ORGX_API_BASE_URL}/auth/verify`;\nexport const ORGX_CLIENT_SYNC_URL = `${ORGX_API_BASE_URL}/client/sync`;\n\nfunction uniquePaths(paths: Array<string | undefined>): string[] {\n return [...new Set(paths.filter((path): path is string => Boolean(path)))];\n}\n\nexport const CLAUDE_DIR = join(HOME, \".claude\");\nexport const CURSOR_DIR = join(HOME, \".cursor\");\nexport const CODEX_DIR = join(HOME, \".codex\");\nexport const OPENCLAW_DIR = join(HOME, \".openclaw\");\nexport const AGENTS_DIR = join(HOME, \".agents\");\nexport const CLAUDE_SKILLS_DIR = join(CLAUDE_DIR, \"skills\");\nexport const CLAUDE_ORGX_SKILL_DIR = join(CLAUDE_SKILLS_DIR, \"orgx\");\nexport const CLAUDE_ORGX_SKILL_PATH = join(CLAUDE_ORGX_SKILL_DIR, \"SKILL.md\");\nexport const CURSOR_RULES_DIR = join(CURSOR_DIR, \"rules\");\nexport const CURSOR_ORGX_RULE_PATH = join(CURSOR_RULES_DIR, \"orgx.md\");\nexport const CODEX_PLUGINS_DIR = join(CODEX_DIR, \"plugins\");\nexport const CODEX_ORGX_PLUGIN_DIR = join(CODEX_PLUGINS_DIR, \"orgx-codex-plugin\");\nexport const CODEX_MARKETPLACE_DIR = join(AGENTS_DIR, \"plugins\");\nexport const CODEX_MARKETPLACE_PATH = join(CODEX_MARKETPLACE_DIR, \"marketplace.json\");\nexport const CLAUDE_MANAGED_MARKETPLACE_DIR = join(\n ORGX_WIZARD_CONFIG_HOME,\n \"plugins\",\n \"claude-marketplace\",\n);\nexport const CLAUDE_MANAGED_MARKETPLACE_MANIFEST_PATH = join(\n CLAUDE_MANAGED_MARKETPLACE_DIR,\n \".claude-plugin\",\n \"marketplace.json\",\n);\nexport const CLAUDE_MANAGED_PLUGIN_DIR = join(\n CLAUDE_MANAGED_MARKETPLACE_DIR,\n \"plugins\",\n \"orgx-claude-code-plugin\",\n);\n\nexport const CLAUDE_MCP_PATHS = uniquePaths([join(CLAUDE_DIR, \"mcp.json\")]);\nexport const CURSOR_MCP_PATHS = uniquePaths([join(CURSOR_DIR, \"mcp.json\")]);\nexport const CODEX_CONFIG_PATHS = uniquePaths([join(CODEX_DIR, \"config.toml\")]);\nexport const OPENCLAW_CONFIG_PATHS = uniquePaths([\n join(OPENCLAW_DIR, \"openclaw.json\"),\n]);\n\nexport const CLAUDE_MCP_PATH = CLAUDE_MCP_PATHS[0];\nexport const CURSOR_MCP_PATH = CURSOR_MCP_PATHS[0];\nexport const CODEX_CONFIG_PATH = CODEX_CONFIG_PATHS[0];\nexport const OPENCLAW_CONFIG_PATH = OPENCLAW_CONFIG_PATHS[0];\n\nexport const CLAUDE_INSTALL_PATHS = uniquePaths([CLAUDE_DIR]);\nexport const CURSOR_INSTALL_PATHS = uniquePaths([CURSOR_DIR]);\nexport const CODEX_INSTALL_PATHS = uniquePaths([CODEX_DIR]);\nexport const OPENCLAW_INSTALL_PATHS = uniquePaths([OPENCLAW_DIR]);\n\nexport const VSCODE_MCP_PATHS = uniquePaths([\n join(HOME, \"Library\", \"Application Support\", \"Code\", \"User\", \"mcp.json\"),\n join(XDG_CONFIG_HOME, \"Code\", \"User\", \"mcp.json\"),\n APPDATA ? join(APPDATA, \"Code\", \"User\", \"mcp.json\") : undefined,\n]);\nexport const VSCODE_INSTALL_PATHS = uniquePaths([\n join(HOME, \"Library\", \"Application Support\", \"Code\", \"User\"),\n join(XDG_CONFIG_HOME, \"Code\", \"User\"),\n APPDATA ? join(APPDATA, \"Code\", \"User\") : undefined,\n LOCAL_APPDATA ? join(LOCAL_APPDATA, \"Programs\", \"Microsoft VS Code\") : undefined,\n]);\n\nexport const WINDSURF_MCP_PATHS = uniquePaths([\n join(HOME, \".codeium\", \"windsurf\", \"mcp_config.json\"),\n]);\nexport const WINDSURF_INSTALL_PATHS = uniquePaths([\n join(HOME, \".codeium\", \"windsurf\"),\n LOCAL_APPDATA ? join(LOCAL_APPDATA, \"Programs\", \"Windsurf\") : undefined,\n]);\n\nexport const ZED_SETTINGS_PATHS = uniquePaths([\n join(HOME, \"Library\", \"Application Support\", \"Zed\", \"settings.json\"),\n join(XDG_CONFIG_HOME, \"zed\", \"settings.json\"),\n APPDATA ? join(APPDATA, \"Zed\", \"settings.json\") : undefined,\n]);\nexport const ZED_INSTALL_PATHS = uniquePaths([\n join(HOME, \"Library\", \"Application Support\", \"Zed\"),\n join(XDG_CONFIG_HOME, \"zed\"),\n APPDATA ? join(APPDATA, \"Zed\") : undefined,\n LOCAL_APPDATA ? join(LOCAL_APPDATA, \"Programs\", \"Zed\") : undefined,\n]);\n\nexport const CHATGPT_APP_PATHS = uniquePaths([\n join(HOME, \"Library\", \"Application Support\", \"OpenAI\"),\n join(HOME, \"Library\", \"Application Support\", \"com.openai.chat\"),\n join(XDG_CONFIG_HOME, \"OpenAI\"),\n join(XDG_CONFIG_HOME, \"openai\"),\n APPDATA ? join(APPDATA, \"OpenAI\") : undefined,\n LOCAL_APPDATA ? join(LOCAL_APPDATA, \"OpenAI\") : undefined,\n]);\n","import { spawnSync } from \"node:child_process\";\n\nimport { buildOrgxApiUrl, normalizeOrgxBaseUrl } from \"./auth.js\";\nimport { isRecord } from \"./fs.js\";\n\nexport type PairingStatus =\n | \"pending\"\n | \"authorized\"\n | \"ready\"\n | \"consumed\"\n | \"expired\"\n | \"cancelled\"\n | \"failed\";\n\nexport interface BrowserPairingStartResult {\n pairingId: string;\n pollToken: string;\n connectUrl: string;\n expiresAt: string;\n pollIntervalMs: number;\n}\n\nexport interface BrowserPairingPollResult {\n pairingId: string;\n status: PairingStatus;\n expiresAt: string;\n workspaceName: string | null;\n keyPrefix: string | null;\n executionMode: \"cloud\" | \"local\" | null;\n errorCode: string | null;\n errorMessage: string | null;\n key?: string;\n}\n\nexport interface BrowserPairingOpenResult {\n ok: boolean;\n error?: string;\n}\n\ninterface FetchJsonOptions {\n body?: string | undefined;\n fetchImpl?: typeof fetch | undefined;\n method: string;\n url: string;\n}\n\nfunction asString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : null;\n}\n\nfunction parseJsonBody(text: string): unknown {\n if (!text) return null;\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nasync function fetchJson<T>({\n url,\n method,\n body,\n fetchImpl = fetch,\n}: FetchJsonOptions): Promise<T> {\n const response = await fetchImpl(url, {\n method,\n headers: {\n Accept: \"application/json\",\n ...(body ? { \"Content-Type\": \"application/json\" } : {}),\n },\n ...(body ? { body } : {}),\n signal: AbortSignal.timeout(7_000),\n });\n\n const payload = parseJsonBody(await response.text());\n\n if (!response.ok) {\n const errorMessage = isRecord(payload)\n ? asString(payload.error) ?? asString(payload.message)\n : typeof payload === \"string\"\n ? payload\n : null;\n throw new Error(errorMessage ?? `HTTP ${response.status}`);\n }\n\n if (isRecord(payload) && payload.ok === true && \"data\" in payload) {\n return payload.data as T;\n }\n\n return payload as T;\n}\n\nfunction parsePairingStartResult(value: unknown): BrowserPairingStartResult {\n if (!isRecord(value)) {\n throw new Error(\"OrgX pairing start returned an invalid response.\");\n }\n\n const pairingId = asString(value.pairingId);\n const pollToken = asString(value.pollToken);\n const connectUrl = asString(value.connectUrl);\n const expiresAt = asString(value.expiresAt);\n const pollIntervalMs = typeof value.pollIntervalMs === \"number\"\n ? value.pollIntervalMs\n : Number.NaN;\n\n if (!pairingId || !pollToken || !connectUrl || !expiresAt || !Number.isFinite(pollIntervalMs)) {\n throw new Error(\"OrgX pairing start returned an incomplete response.\");\n }\n\n return { pairingId, pollToken, connectUrl, expiresAt, pollIntervalMs };\n}\n\nfunction parsePairingPollResult(value: unknown): BrowserPairingPollResult {\n if (!isRecord(value)) {\n throw new Error(\"OrgX pairing poll returned an invalid response.\");\n }\n\n const pairingId = asString(value.pairingId);\n const status = asString(value.status) as PairingStatus | null;\n const expiresAt = asString(value.expiresAt);\n\n if (!pairingId || !status || !expiresAt) {\n throw new Error(\"OrgX pairing poll returned an incomplete response.\");\n }\n\n return {\n pairingId,\n status,\n expiresAt,\n workspaceName: asString(value.workspaceName),\n keyPrefix: asString(value.keyPrefix),\n executionMode: value.executionMode === \"cloud\" || value.executionMode === \"local\"\n ? value.executionMode\n : null,\n errorCode: asString(value.errorCode),\n errorMessage: asString(value.errorMessage),\n ...(asString(value.key) ? { key: asString(value.key)! } : {}),\n };\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function startBrowserPairing(\n options: {\n baseUrl?: string | undefined;\n deviceName?: string | undefined;\n installationId: string;\n platform?: string | undefined;\n },\n fetchImpl?: typeof fetch,\n): Promise<BrowserPairingStartResult> {\n const data = await fetchJson<unknown>({\n url: buildOrgxApiUrl(\"/plugin/openclaw/pairings\", options.baseUrl),\n method: \"POST\",\n body: JSON.stringify({\n installationId: options.installationId,\n clientType: 'orgx-wizard',\n ...(options.deviceName ? { deviceName: options.deviceName } : {}),\n ...(options.platform ? { platform: options.platform } : {}),\n }),\n fetchImpl,\n });\n\n return parsePairingStartResult(data);\n}\n\nexport async function pollBrowserPairing(\n options: {\n baseUrl?: string | undefined;\n pairingId: string;\n pollToken: string;\n },\n fetchImpl?: typeof fetch,\n): Promise<BrowserPairingPollResult> {\n const baseUrl = normalizeOrgxBaseUrl(options.baseUrl);\n const url = new URL(buildOrgxApiUrl(`/plugin/openclaw/pairings/${options.pairingId}`, baseUrl));\n url.searchParams.set(\"pollToken\", options.pollToken);\n\n const data = await fetchJson<unknown>({\n url: url.toString(),\n method: \"GET\",\n fetchImpl,\n });\n\n return parsePairingPollResult(data);\n}\n\nexport async function waitForBrowserPairing(\n options: {\n baseUrl?: string | undefined;\n pairingId: string;\n pollIntervalMs?: number | undefined;\n pollToken: string;\n timeoutMs?: number | undefined;\n },\n fetchImpl?: typeof fetch,\n): Promise<BrowserPairingPollResult> {\n const timeoutMs = options.timeoutMs ?? 10 * 60_000;\n const pollIntervalMs = options.pollIntervalMs ?? 1_500;\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() <= deadline) {\n const result = await pollBrowserPairing(\n {\n baseUrl: options.baseUrl,\n pairingId: options.pairingId,\n pollToken: options.pollToken,\n },\n fetchImpl,\n );\n\n if (result.status === \"ready\") {\n if (!result.key) {\n throw new Error(\"OrgX pairing completed without returning an API key.\");\n }\n return result;\n }\n\n if (result.status === \"failed\") {\n throw new Error(result.errorMessage ?? \"OrgX pairing failed.\");\n }\n\n if (result.status === \"expired\") {\n throw new Error(\"OrgX pairing expired before it was approved.\");\n }\n\n if (result.status === \"cancelled\") {\n throw new Error(\"OrgX pairing was cancelled in the browser.\");\n }\n\n if (result.status === \"consumed\") {\n throw new Error(\"OrgX pairing was already consumed by another client.\");\n }\n\n await sleep(Math.min(5_000, Math.max(350, pollIntervalMs)));\n }\n\n throw new Error(\n `Timed out waiting for OrgX pairing after ${Math.round(timeoutMs / 1000)} seconds.`,\n );\n}\n\nexport async function acknowledgeBrowserPairing(\n options: {\n baseUrl?: string | undefined;\n pairingId: string;\n pollToken: string;\n },\n fetchImpl?: typeof fetch,\n): Promise<void> {\n await fetchJson<unknown>({\n url: buildOrgxApiUrl(`/plugin/openclaw/pairings/${options.pairingId}/ack`, options.baseUrl),\n method: \"POST\",\n body: JSON.stringify({ pollToken: options.pollToken }),\n fetchImpl,\n });\n}\n\nexport function openBrowser(url: string): BrowserPairingOpenResult {\n const platform = process.platform;\n const result = platform === \"darwin\"\n ? spawnSync(\"open\", [url], { stdio: \"ignore\" })\n : platform === \"win32\"\n ? spawnSync(\"cmd\", [\"/c\", \"start\", \"\", url], { stdio: \"ignore\" })\n : spawnSync(\"xdg-open\", [url], { stdio: \"ignore\" });\n\n if (result.error) {\n return { ok: false, error: result.error.message };\n }\n\n if (typeof result.status === \"number\" && result.status !== 0) {\n return { ok: false, error: `Browser open command exited with code ${result.status}.` };\n }\n\n return { ok: true };\n}\n","import {\n chmodSync,\n existsSync,\n mkdirSync,\n readFileSync,\n statSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname } from \"node:path\";\n\nexport function fileExists(path: string): boolean {\n return existsSync(path);\n}\n\nexport function readTextIfExists(path: string): string | null {\n if (!existsSync(path)) return null;\n\n try {\n if (!statSync(path).isFile()) {\n return null;\n }\n\n return readFileSync(path, \"utf8\");\n } catch (error) {\n const code = typeof error === \"object\" && error && \"code\" in error\n ? String(error.code)\n : undefined;\n\n if (code === \"ENOENT\" || code === \"ENOTDIR\" || code === \"EISDIR\") {\n return null;\n }\n\n throw error;\n }\n}\n\nexport function writeTextFile(\n path: string,\n content: string,\n options: { mode?: number } = {},\n): void {\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, content, {\n encoding: \"utf8\",\n ...(options.mode === undefined ? {} : { mode: options.mode }),\n });\n\n if (options.mode !== undefined) {\n chmodSync(path, options.mode);\n }\n}\n\nexport function writeJsonFile(\n path: string,\n value: unknown,\n options: { mode?: number } = {},\n): void {\n writeTextFile(path, `${JSON.stringify(value, null, 2)}\\n`, options);\n}\n\nexport function deleteFileIfExists(path: string): boolean {\n if (!existsSync(path)) return false;\n\n try {\n if (!statSync(path).isFile()) {\n return false;\n }\n\n unlinkSync(path);\n return true;\n } catch (error) {\n const code = typeof error === \"object\" && error && \"code\" in error\n ? String(error.code)\n : undefined;\n\n if (code === \"ENOENT\" || code === \"ENOTDIR\" || code === \"EISDIR\") {\n return false;\n }\n\n throw error;\n }\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value && typeof value === \"object\" && !Array.isArray(value));\n}\n\nexport function parseJsonObject(input: string | null): Record<string, unknown> {\n if (!input) return {};\n\n try {\n const parsed = JSON.parse(input);\n return isRecord(parsed) ? parsed : {};\n } catch {\n return {};\n }\n}\n\nexport function readObject(\n value: unknown,\n fallback: Record<string, unknown> = {},\n): Record<string, unknown> {\n return isRecord(value) ? value : fallback;\n}\n","import {\n DEFAULT_OPENCLAW_GATEWAY_PORT,\n DEFAULT_ORGX_BASE_URL,\n} from \"../constants.js\";\nimport { isRecord, parseJsonObject, readObject } from \"../lib/fs.js\";\n\ntype JsonObject = Record<string, unknown>;\n\nexport interface OpenClawInspection {\n configured: boolean;\n installed: boolean;\n pluginKey: \"orgx\" | \"openclaw-plugin\" | null;\n details: string[];\n}\n\nexport interface OpenClawAuthConfig {\n apiKey: string;\n baseUrl: string;\n pluginKey: \"orgx\" | \"openclaw-plugin\" | null;\n enabled: boolean;\n}\n\nexport interface OpenClawOrgxDefaultsInput {\n apiKey?: string;\n baseUrl?: string;\n}\n\nfunction cleanupEmptyObjects(value: JsonObject): void {\n for (const [key, child] of Object.entries(value)) {\n if (!isRecord(child)) continue;\n cleanupEmptyObjects(child);\n if (Object.keys(child).length === 0) {\n delete value[key];\n }\n }\n}\n\nexport function readOpenClawGatewayPort(raw: unknown): number {\n const isValidPort = (value: number): boolean =>\n Number.isFinite(value) && value >= 1 && value <= 65_535;\n\n const root = isRecord(raw) ? raw : {};\n const gateway = readObject(root.gateway);\n const port = gateway.port;\n\n if (typeof port === \"number\" && isValidPort(port)) {\n return Math.floor(port);\n }\n\n if (typeof port === \"string\") {\n const parsed = Number.parseInt(port, 10);\n if (isValidPort(parsed)) {\n return parsed;\n }\n }\n\n return DEFAULT_OPENCLAW_GATEWAY_PORT;\n}\n\nexport function buildLocalMcpUrl(raw: unknown): string {\n return `http://127.0.0.1:${readOpenClawGatewayPort(raw)}/orgx/mcp`;\n}\n\nfunction resolvePluginKey(entries: JsonObject): \"orgx\" | \"openclaw-plugin\" {\n if (isRecord(entries[\"openclaw-plugin\"])) {\n return \"openclaw-plugin\";\n }\n\n if (isRecord(entries.orgx)) {\n return \"orgx\";\n }\n\n return \"orgx\";\n}\n\nexport function readOpenClawAuth(input: string | null): OpenClawAuthConfig {\n const current = parseJsonObject(input);\n const plugins = readObject(current.plugins);\n const entries = readObject(plugins.entries);\n const pluginKey = isRecord(entries[\"openclaw-plugin\"])\n ? \"openclaw-plugin\"\n : isRecord(entries.orgx)\n ? \"orgx\"\n : null;\n const entry = pluginKey ? readObject(entries[pluginKey]) : {};\n const config = readObject(entry.config);\n\n return {\n apiKey: typeof config.apiKey === \"string\" ? config.apiKey.trim() : \"\",\n baseUrl:\n typeof config.baseUrl === \"string\" && config.baseUrl.trim().length > 0\n ? config.baseUrl.trim()\n : DEFAULT_ORGX_BASE_URL,\n pluginKey,\n enabled: entry.enabled !== false,\n };\n}\n\nexport function patchOpenClawConfig(\n input: string | null,\n auth: OpenClawOrgxDefaultsInput = {},\n): string {\n const current = parseJsonObject(input);\n const plugins = readObject(current.plugins);\n const entries = readObject(plugins.entries);\n const pluginKey = resolvePluginKey(entries);\n const entry = readObject(entries[pluginKey]);\n const config = readObject(entry.config);\n const apiKey =\n typeof auth.apiKey === \"string\" && auth.apiKey.trim().length > 0\n ? auth.apiKey.trim()\n : typeof config.apiKey === \"string\" && config.apiKey.trim().length > 0\n ? config.apiKey.trim()\n : undefined;\n const baseUrl =\n typeof auth.baseUrl === \"string\" && auth.baseUrl.trim().length > 0\n ? auth.baseUrl.trim()\n : typeof config.baseUrl === \"string\" && config.baseUrl.trim().length > 0\n ? config.baseUrl.trim()\n : DEFAULT_ORGX_BASE_URL;\n\n entries[pluginKey] = {\n ...entry,\n enabled: true,\n config: {\n ...config,\n ...(apiKey ? { apiKey } : {}),\n baseUrl,\n dashboardEnabled:\n typeof config.dashboardEnabled === \"boolean\"\n ? config.dashboardEnabled\n : true,\n autoInstallAgentSuiteOnConnect:\n typeof config.autoInstallAgentSuiteOnConnect === \"boolean\"\n ? config.autoInstallAgentSuiteOnConnect\n : true,\n autoConfigureMcpClientsOnConnect:\n typeof config.autoConfigureMcpClientsOnConnect === \"boolean\"\n ? config.autoConfigureMcpClientsOnConnect\n : true,\n },\n };\n\n plugins.entries = entries;\n current.plugins = plugins;\n\n return `${JSON.stringify(current, null, 2)}\\n`;\n}\n\nexport function removeOpenClawConfig(input: string | null): string {\n const current = parseJsonObject(input);\n const plugins = readObject(current.plugins);\n const entries = readObject(plugins.entries);\n\n for (const key of [\"openclaw-plugin\", \"orgx\"]) {\n const entry = readObject(entries[key]);\n if (!Object.keys(entry).length) continue;\n const config = readObject(entry.config);\n delete config.baseUrl;\n delete config.dashboardEnabled;\n delete config.autoInstallAgentSuiteOnConnect;\n delete config.autoConfigureMcpClientsOnConnect;\n if (Object.keys(config).length > 0) {\n entry.config = config;\n } else {\n delete entry.config;\n }\n entries[key] = entry;\n }\n\n plugins.entries = entries;\n current.plugins = plugins;\n cleanupEmptyObjects(current);\n\n return `${JSON.stringify(current, null, 2)}\\n`;\n}\n\nexport function inspectOpenClawConfig(input: string | null): OpenClawInspection {\n const current = parseJsonObject(input);\n const plugins = readObject(current.plugins);\n const entries = readObject(plugins.entries);\n const installs = readObject(plugins.installs);\n const pluginKey = isRecord(entries[\"openclaw-plugin\"])\n ? \"openclaw-plugin\"\n : isRecord(entries.orgx)\n ? \"orgx\"\n : null;\n const entry = pluginKey ? readObject(entries[pluginKey]) : {};\n const config = readObject(entry.config);\n const installed =\n pluginKey !== null ||\n isRecord(installs[\"openclaw-plugin\"]) ||\n isRecord(installs.orgx);\n const configured =\n installed &&\n entry.enabled === true &&\n (typeof config.baseUrl === \"string\" ||\n typeof config.autoInstallAgentSuiteOnConnect === \"boolean\" ||\n typeof config.autoConfigureMcpClientsOnConnect === \"boolean\");\n\n return {\n configured,\n installed,\n pluginKey,\n details: [\n `plugin key: ${pluginKey ?? \"missing\"}`,\n `enabled: ${entry.enabled === true ? \"yes\" : \"no\"}`,\n `gateway port: ${readOpenClawGatewayPort(current)}`,\n ],\n };\n}\n","import {\n ORGX_WIZARD_AUTH_PATH,\n ORGX_WIZARD_KEYTAR_ACCOUNT,\n ORGX_WIZARD_KEYTAR_SERVICE,\n} from \"../constants.js\";\nimport {\n deleteFileIfExists,\n parseJsonObject,\n readTextIfExists,\n writeJsonFile,\n} from \"./fs.js\";\n\nexport type WizardAuthStorage = \"file\" | \"keytar\";\n\nexport interface WizardAuthRecord {\n apiKey: string;\n keyPrefix: string;\n baseUrl: string;\n source: \"manual\";\n storage: WizardAuthStorage;\n verifiedAt: string;\n}\n\nexport interface WizardAuthMetadata {\n baseUrl: string;\n keyPrefix: string;\n source: \"manual\";\n storage: WizardAuthStorage;\n verifiedAt: string;\n}\n\nexport interface WizardSecretStore {\n deletePassword(service: string, account: string): Promise<boolean>;\n getPassword(service: string, account: string): Promise<string | null>;\n setPassword(service: string, account: string, password: string): Promise<void>;\n}\n\ninterface StoredWizardAuthRecord {\n apiKey?: string;\n baseUrl: string;\n keyPrefix: string;\n storage: WizardAuthStorage;\n verifiedAt: string;\n}\n\ninterface WizardAuthStoreOptions {\n preferSecureStorage?: boolean;\n secretStore?: WizardSecretStore | null;\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nexport function extractKeyPrefix(apiKey: string): string {\n return apiKey.trim().slice(0, 12);\n}\n\nfunction parseStoredWizardAuthRecord(raw: string | null): StoredWizardAuthRecord | null {\n const parsed = parseJsonObject(raw);\n\n if (\n !isNonEmptyString(parsed.keyPrefix) ||\n !isNonEmptyString(parsed.baseUrl) ||\n !isNonEmptyString(parsed.verifiedAt)\n ) {\n return null;\n }\n\n const storage = parsed.storage === \"keytar\" ? \"keytar\" : \"file\";\n\n return {\n baseUrl: parsed.baseUrl.trim(),\n ...(isNonEmptyString(parsed.apiKey) ? { apiKey: parsed.apiKey.trim() } : {}),\n keyPrefix: parsed.keyPrefix.trim(),\n storage,\n verifiedAt: parsed.verifiedAt.trim(),\n };\n}\n\nasync function loadDefaultSecretStore(): Promise<WizardSecretStore | null> {\n if (process.env.ORGX_WIZARD_DISABLE_KEYTAR === \"1\") {\n return null;\n }\n\n try {\n const imported = await import(\"keytar\");\n const candidate = (\n \"default\" in imported && imported.default ? imported.default : imported\n ) as Partial<WizardSecretStore>;\n\n if (\n typeof candidate.getPassword === \"function\" &&\n typeof candidate.setPassword === \"function\" &&\n typeof candidate.deletePassword === \"function\"\n ) {\n return candidate as WizardSecretStore;\n }\n } catch {\n return null;\n }\n\n return null;\n}\n\nasync function resolveSecretStore(\n options: WizardAuthStoreOptions,\n): Promise<WizardSecretStore | null> {\n if (options.secretStore !== undefined) {\n return options.secretStore;\n }\n\n return loadDefaultSecretStore();\n}\n\nfunction buildStoredRecord(\n value: Omit<WizardAuthRecord, \"source\">,\n): StoredWizardAuthRecord {\n return {\n ...(value.storage === \"file\" ? { apiKey: value.apiKey } : {}),\n baseUrl: value.baseUrl,\n keyPrefix: value.keyPrefix,\n storage: value.storage,\n verifiedAt: value.verifiedAt,\n };\n}\n\nexport function readWizardAuthMetadata(\n authPath: string = ORGX_WIZARD_AUTH_PATH,\n): WizardAuthMetadata | null {\n const stored = parseStoredWizardAuthRecord(readTextIfExists(authPath));\n if (!stored) {\n return null;\n }\n\n return {\n baseUrl: stored.baseUrl,\n keyPrefix: stored.keyPrefix,\n source: \"manual\",\n storage: stored.storage,\n verifiedAt: stored.verifiedAt,\n };\n}\n\nexport async function readWizardAuth(\n authPath: string = ORGX_WIZARD_AUTH_PATH,\n options: WizardAuthStoreOptions = {},\n): Promise<WizardAuthRecord | null> {\n const stored = parseStoredWizardAuthRecord(readTextIfExists(authPath));\n if (!stored) {\n return null;\n }\n\n const apiKeyFromFile =\n stored.storage === \"file\" && isNonEmptyString(stored.apiKey)\n ? stored.apiKey.trim()\n : null;\n\n if (apiKeyFromFile) {\n return {\n apiKey: apiKeyFromFile,\n baseUrl: stored.baseUrl,\n keyPrefix: stored.keyPrefix,\n source: \"manual\",\n storage: \"file\",\n verifiedAt: stored.verifiedAt,\n };\n }\n\n if (stored.storage !== \"keytar\") {\n return null;\n }\n\n const secretStore = await resolveSecretStore(options);\n if (!secretStore) {\n return null;\n }\n\n const apiKey = await secretStore.getPassword(\n ORGX_WIZARD_KEYTAR_SERVICE,\n ORGX_WIZARD_KEYTAR_ACCOUNT,\n );\n\n if (!isNonEmptyString(apiKey)) {\n return null;\n }\n\n return {\n apiKey: apiKey.trim(),\n baseUrl: stored.baseUrl,\n keyPrefix: stored.keyPrefix,\n source: \"manual\",\n storage: \"keytar\",\n verifiedAt: stored.verifiedAt,\n };\n}\n\nexport async function writeWizardAuth(\n value: {\n apiKey: string;\n baseUrl: string;\n keyPrefix?: string;\n verifiedAt: string;\n },\n authPath: string = ORGX_WIZARD_AUTH_PATH,\n options: WizardAuthStoreOptions = {},\n): Promise<WizardAuthRecord> {\n const secretStore = options.preferSecureStorage === false\n ? null\n : await resolveSecretStore(options);\n\n const record: WizardAuthRecord = {\n apiKey: value.apiKey.trim(),\n keyPrefix: value.keyPrefix?.trim() || extractKeyPrefix(value.apiKey),\n baseUrl: value.baseUrl.trim(),\n source: \"manual\",\n storage: secretStore ? \"keytar\" : \"file\",\n verifiedAt: value.verifiedAt.trim(),\n };\n\n if (secretStore) {\n await secretStore.setPassword(\n ORGX_WIZARD_KEYTAR_SERVICE,\n ORGX_WIZARD_KEYTAR_ACCOUNT,\n record.apiKey,\n );\n }\n\n writeJsonFile(authPath, buildStoredRecord(record), { mode: 0o600 });\n return record;\n}\n\nexport async function clearWizardAuth(\n authPath: string = ORGX_WIZARD_AUTH_PATH,\n options: WizardAuthStoreOptions = {},\n): Promise<boolean> {\n const secretStore = await resolveSecretStore(options);\n const secretRemoved = secretStore\n ? await secretStore.deletePassword(\n ORGX_WIZARD_KEYTAR_SERVICE,\n ORGX_WIZARD_KEYTAR_ACCOUNT,\n )\n : false;\n const fileRemoved = deleteFileIfExists(authPath);\n return secretRemoved || fileRemoved;\n}\n","import {\n DEFAULT_ORGX_BASE_URL,\n OPENCLAW_CONFIG_PATH,\n ORGX_WIZARD_AUTH_PATH,\n} from \"../constants.js\";\nimport { readOpenClawAuth } from \"../surfaces/openclaw-config.js\";\nimport { readTextIfExists } from \"./fs.js\";\nimport {\n extractKeyPrefix,\n readWizardAuth,\n readWizardAuthMetadata,\n} from \"./auth-store.js\";\n\nexport type OrgxAuthSource =\n | \"environment\"\n | \"wizard-store\"\n | \"openclaw-config-file\";\n\nexport interface ResolvedOrgxAuth {\n apiKey: string;\n keyPrefix: string;\n baseUrl: string;\n source: OrgxAuthSource;\n path?: string;\n verifiedAt?: string;\n}\n\nexport interface OrgxAuthCheckResult {\n configured: boolean;\n ok: boolean;\n skipped: boolean;\n source: OrgxAuthSource | \"none\";\n keyPrefix?: string;\n baseUrl?: string;\n path?: string;\n verifiedAt?: string;\n status?: number;\n url?: string;\n error?: string;\n data?: unknown;\n}\n\nexport interface ResolveOrgxAuthOptions {\n authPath?: string;\n openclawConfigPath?: string;\n}\n\nexport interface OrgxAuthHint {\n keyPrefix: string;\n baseUrl: string;\n source: OrgxAuthSource;\n path?: string;\n verifiedAt?: string;\n}\n\nfunction normalizeHost(value: string): string {\n return value.trim().toLowerCase().replace(/^\\[|\\]$/g, \"\");\n}\n\nfunction isLoopbackHostname(hostname: string): boolean {\n const normalized = normalizeHost(hostname);\n return normalized === \"localhost\" || normalized === \"127.0.0.1\" || normalized === \"::1\";\n}\n\nexport function normalizeOrgxBaseUrl(raw?: string): string {\n const candidate = raw?.trim() || DEFAULT_ORGX_BASE_URL;\n\n try {\n const parsed = new URL(candidate);\n if (parsed.protocol !== \"https:\" && parsed.protocol !== \"http:\") {\n return DEFAULT_ORGX_BASE_URL;\n }\n\n if (parsed.username || parsed.password) {\n return DEFAULT_ORGX_BASE_URL;\n }\n\n if (parsed.protocol === \"http:\" && !isLoopbackHostname(parsed.hostname)) {\n return DEFAULT_ORGX_BASE_URL;\n }\n\n parsed.search = \"\";\n parsed.hash = \"\";\n parsed.pathname = parsed.pathname.replace(/\\/api\\/?$/, \"\").replace(/\\/+$/, \"\");\n return parsed.toString().replace(/\\/+$/, \"\");\n } catch {\n return DEFAULT_ORGX_BASE_URL;\n }\n}\n\nexport function buildOrgxApiUrl(path: string, baseUrl?: string): string {\n const parsedBase = new URL(normalizeOrgxBaseUrl(baseUrl));\n if (parsedBase.protocol === \"https:\" && normalizeHost(parsedBase.hostname) === \"useorgx.com\") {\n parsedBase.hostname = \"www.useorgx.com\";\n }\n\n const normalizedBase = parsedBase.toString().replace(/\\/+$/, \"\");\n const apiBase = normalizedBase.endsWith(\"/api\") ? normalizedBase : `${normalizedBase}/api`;\n const normalizedPath = path.startsWith(\"/\") ? path : `/${path}`;\n return `${apiBase}${normalizedPath}`;\n}\n\nfunction withResolvedBaseUrl(baseUrl: string, envBaseUrl?: string): string {\n return normalizeOrgxBaseUrl(envBaseUrl?.trim() || baseUrl);\n}\n\nfunction buildResolvedAuth(\n apiKey: string,\n baseUrl: string,\n source: OrgxAuthSource,\n extras: Pick<ResolvedOrgxAuth, \"path\" | \"verifiedAt\"> = {},\n): ResolvedOrgxAuth {\n return {\n apiKey: apiKey.trim(),\n keyPrefix: extractKeyPrefix(apiKey),\n baseUrl,\n source,\n ...(extras.path ? { path: extras.path } : {}),\n ...(extras.verifiedAt ? { verifiedAt: extras.verifiedAt } : {}),\n };\n}\n\nfunction buildAuthHint(\n keyPrefix: string,\n baseUrl: string,\n source: OrgxAuthSource,\n extras: Pick<OrgxAuthHint, \"path\" | \"verifiedAt\"> = {},\n): OrgxAuthHint {\n return {\n keyPrefix: keyPrefix.trim(),\n baseUrl,\n source,\n ...(extras.path ? { path: extras.path } : {}),\n ...(extras.verifiedAt ? { verifiedAt: extras.verifiedAt } : {}),\n };\n}\n\nexport function peekResolvedOrgxAuth(\n options: ResolveOrgxAuthOptions = {},\n): OrgxAuthHint | null {\n const envApiKey = process.env.ORGX_API_KEY?.trim();\n const envBaseUrl = process.env.ORGX_BASE_URL?.trim();\n if (envApiKey) {\n return buildAuthHint(\n extractKeyPrefix(envApiKey),\n withResolvedBaseUrl(DEFAULT_ORGX_BASE_URL, envBaseUrl),\n \"environment\",\n );\n }\n\n const authPath = options.authPath ?? ORGX_WIZARD_AUTH_PATH;\n const stored = readWizardAuthMetadata(authPath);\n if (stored) {\n return buildAuthHint(\n stored.keyPrefix,\n withResolvedBaseUrl(stored.baseUrl, envBaseUrl),\n \"wizard-store\",\n {\n path: authPath,\n verifiedAt: stored.verifiedAt,\n },\n );\n }\n\n const openclawConfigPath = options.openclawConfigPath ?? OPENCLAW_CONFIG_PATH;\n const openclawAuth = readOpenClawAuth(\n openclawConfigPath ? readTextIfExists(openclawConfigPath) : null,\n );\n if (openclawAuth.apiKey && openclawConfigPath) {\n return buildAuthHint(\n extractKeyPrefix(openclawAuth.apiKey),\n withResolvedBaseUrl(openclawAuth.baseUrl || DEFAULT_ORGX_BASE_URL, envBaseUrl),\n \"openclaw-config-file\",\n { path: openclawConfigPath },\n );\n }\n\n return null;\n}\n\nexport async function resolveOrgxAuth(\n options: ResolveOrgxAuthOptions = {},\n): Promise<ResolvedOrgxAuth | null> {\n const envApiKey = process.env.ORGX_API_KEY?.trim();\n const envBaseUrl = process.env.ORGX_BASE_URL?.trim();\n if (envApiKey) {\n return buildResolvedAuth(\n envApiKey,\n withResolvedBaseUrl(DEFAULT_ORGX_BASE_URL, envBaseUrl),\n \"environment\",\n );\n }\n\n const authPath = options.authPath ?? ORGX_WIZARD_AUTH_PATH;\n const stored = await readWizardAuth(authPath);\n if (stored) {\n return buildResolvedAuth(\n stored.apiKey,\n withResolvedBaseUrl(stored.baseUrl, envBaseUrl),\n \"wizard-store\",\n {\n path: authPath,\n verifiedAt: stored.verifiedAt,\n },\n );\n }\n\n const openclawConfigPath = options.openclawConfigPath ?? OPENCLAW_CONFIG_PATH;\n const openclawAuth = readOpenClawAuth(\n openclawConfigPath ? readTextIfExists(openclawConfigPath) : null,\n );\n if (openclawAuth.apiKey && openclawConfigPath) {\n return buildResolvedAuth(\n openclawAuth.apiKey,\n withResolvedBaseUrl(openclawAuth.baseUrl || DEFAULT_ORGX_BASE_URL, envBaseUrl),\n \"openclaw-config-file\",\n { path: openclawConfigPath },\n );\n }\n\n return null;\n}\n\nasync function parseResponseBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) return null;\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nexport async function verifyOrgxAuth(\n auth: Pick<ResolvedOrgxAuth, \"apiKey\" | \"baseUrl\" | \"source\" | \"keyPrefix\"> & {\n path?: string;\n verifiedAt?: string;\n },\n): Promise<OrgxAuthCheckResult> {\n const url = buildOrgxApiUrl(\"/client/sync\", auth.baseUrl);\n\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${auth.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: \"{}\",\n signal: AbortSignal.timeout(7_000),\n });\n\n const data = await parseResponseBody(response);\n\n return {\n configured: true,\n ok: response.ok,\n skipped: false,\n source: auth.source,\n keyPrefix: auth.keyPrefix,\n baseUrl: auth.baseUrl,\n ...(auth.path ? { path: auth.path } : {}),\n ...(auth.verifiedAt ? { verifiedAt: auth.verifiedAt } : {}),\n status: response.status,\n url,\n data,\n ...(response.ok ? {} : { error: `HTTP ${response.status}` }),\n };\n } catch (error) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n keyPrefix: auth.keyPrefix,\n baseUrl: auth.baseUrl,\n ...(auth.path ? { path: auth.path } : {}),\n ...(auth.verifiedAt ? { verifiedAt: auth.verifiedAt } : {}),\n url,\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\nexport async function checkOrgxAuth(\n options: ResolveOrgxAuthOptions = {},\n): Promise<OrgxAuthCheckResult> {\n const auth = await resolveOrgxAuth(options);\n if (!auth) {\n return {\n configured: false,\n ok: false,\n skipped: true,\n source: \"none\",\n error: \"No OrgX account connected. Run `orgx-wizard auth login` to connect.\",\n url: buildOrgxApiUrl(\"/client/sync\", DEFAULT_ORGX_BASE_URL),\n };\n }\n\n return verifyOrgxAuth(auth);\n}\n\nexport function describeSetupStatusScope(): string {\n return \"The setup-status endpoint is still service-key-only and uses ORGX_SERVICE_KEY.\";\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport { ORGX_WIZARD_STATE_PATH } from \"../constants.js\";\nimport { parseJsonObject, readTextIfExists, writeJsonFile } from \"./fs.js\";\nimport { SURFACE_NAMES, type SurfaceName } from \"../surfaces/names.js\";\n\nexport interface WizardContinuityDefaults {\n executionMode?: \"cloud\" | \"local\";\n reviewSurface?: SurfaceName;\n workspaceId?: string;\n workspaceName?: string;\n}\n\nexport interface WizardDemoInitiativeRecord {\n createdAt: string;\n artifactId?: string;\n artifactName?: string;\n artifactType?: string;\n artifactUrl?: string;\n decisionId?: string;\n decisionStatus?: string;\n decisionTitle?: string;\n id: string;\n liveUrl: string;\n title: string;\n workspaceId?: string;\n workspaceName?: string;\n}\n\nexport interface WizardOnboardingTaskRecord {\n createdAt: string;\n id: string;\n initiativeId?: string;\n status?: string;\n title: string;\n workspaceId?: string;\n workspaceName?: string;\n}\n\nexport interface WizardAgentRosterEntry {\n agentType: string;\n domain: string;\n name: string;\n}\n\nexport interface WizardAgentRosterRecord {\n agents: WizardAgentRosterEntry[];\n configuredAt: string;\n workspaceId?: string;\n workspaceName?: string;\n}\n\nexport interface WizardStateRecord {\n continuity?: WizardContinuityDefaults;\n installationId: string;\n agentRoster?: WizardAgentRosterRecord;\n demoInitiative?: WizardDemoInitiativeRecord;\n onboardingTask?: WizardOnboardingTaskRecord;\n createdAt: string;\n updatedAt: string;\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction isSurfaceName(value: unknown): value is SurfaceName {\n return typeof value === \"string\" && SURFACE_NAMES.includes(value as SurfaceName);\n}\n\nfunction parseContinuityDefaults(value: unknown): WizardContinuityDefaults | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n\n const record = value as Record<string, unknown>;\n const parsed: WizardContinuityDefaults = {};\n\n if (record.executionMode === \"cloud\" || record.executionMode === \"local\") {\n parsed.executionMode = record.executionMode;\n }\n\n if (isSurfaceName(record.reviewSurface)) {\n parsed.reviewSurface = record.reviewSurface;\n }\n\n if (isNonEmptyString(record.workspaceId)) {\n parsed.workspaceId = record.workspaceId.trim();\n }\n\n if (isNonEmptyString(record.workspaceName)) {\n parsed.workspaceName = record.workspaceName.trim();\n }\n\n return Object.keys(parsed).length > 0 ? parsed : undefined;\n}\n\nfunction parseDemoInitiative(value: unknown): WizardDemoInitiativeRecord | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n\n const record = value as Record<string, unknown>;\n if (\n !isNonEmptyString(record.id) ||\n !isNonEmptyString(record.title) ||\n !isNonEmptyString(record.liveUrl) ||\n !isNonEmptyString(record.createdAt)\n ) {\n return undefined;\n }\n\n return {\n createdAt: record.createdAt.trim(),\n ...(isNonEmptyString(record.artifactId)\n ? { artifactId: record.artifactId.trim() }\n : {}),\n ...(isNonEmptyString(record.artifactName)\n ? { artifactName: record.artifactName.trim() }\n : {}),\n ...(isNonEmptyString(record.artifactType)\n ? { artifactType: record.artifactType.trim() }\n : {}),\n ...(isNonEmptyString(record.artifactUrl)\n ? { artifactUrl: record.artifactUrl.trim() }\n : {}),\n ...(isNonEmptyString(record.decisionId)\n ? { decisionId: record.decisionId.trim() }\n : {}),\n ...(isNonEmptyString(record.decisionStatus)\n ? { decisionStatus: record.decisionStatus.trim() }\n : {}),\n ...(isNonEmptyString(record.decisionTitle)\n ? { decisionTitle: record.decisionTitle.trim() }\n : {}),\n id: record.id.trim(),\n liveUrl: record.liveUrl.trim(),\n title: record.title.trim(),\n ...(isNonEmptyString(record.workspaceId)\n ? { workspaceId: record.workspaceId.trim() }\n : {}),\n ...(isNonEmptyString(record.workspaceName)\n ? { workspaceName: record.workspaceName.trim() }\n : {}),\n };\n}\n\nfunction parseOnboardingTask(value: unknown): WizardOnboardingTaskRecord | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n\n const record = value as Record<string, unknown>;\n if (\n !isNonEmptyString(record.id) ||\n !isNonEmptyString(record.title) ||\n !isNonEmptyString(record.createdAt)\n ) {\n return undefined;\n }\n\n return {\n createdAt: record.createdAt.trim(),\n id: record.id.trim(),\n ...(isNonEmptyString(record.initiativeId)\n ? { initiativeId: record.initiativeId.trim() }\n : {}),\n ...(isNonEmptyString(record.status)\n ? { status: record.status.trim() }\n : {}),\n title: record.title.trim(),\n ...(isNonEmptyString(record.workspaceId)\n ? { workspaceId: record.workspaceId.trim() }\n : {}),\n ...(isNonEmptyString(record.workspaceName)\n ? { workspaceName: record.workspaceName.trim() }\n : {}),\n };\n}\n\nfunction parseAgentRosterEntry(value: unknown): WizardAgentRosterEntry | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n\n const record = value as Record<string, unknown>;\n if (\n !isNonEmptyString(record.agentType) ||\n !isNonEmptyString(record.domain) ||\n !isNonEmptyString(record.name)\n ) {\n return undefined;\n }\n\n return {\n agentType: record.agentType.trim(),\n domain: record.domain.trim(),\n name: record.name.trim(),\n };\n}\n\nfunction parseAgentRoster(value: unknown): WizardAgentRosterRecord | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n\n const record = value as Record<string, unknown>;\n if (!isNonEmptyString(record.configuredAt) || !Array.isArray(record.agents)) {\n return undefined;\n }\n\n const agents = record.agents\n .map((entry) => parseAgentRosterEntry(entry))\n .filter((entry): entry is WizardAgentRosterEntry => Boolean(entry));\n if (agents.length === 0) {\n return undefined;\n }\n\n return {\n agents,\n configuredAt: record.configuredAt.trim(),\n ...(isNonEmptyString(record.workspaceId)\n ? { workspaceId: record.workspaceId.trim() }\n : {}),\n ...(isNonEmptyString(record.workspaceName)\n ? { workspaceName: record.workspaceName.trim() }\n : {}),\n };\n}\n\nfunction createWizardState(now = new Date().toISOString()): WizardStateRecord {\n return {\n installationId: `wizard-${randomUUID()}`,\n createdAt: now,\n updatedAt: now,\n };\n}\n\nfunction sanitizeWizardStateRecord(record: WizardStateRecord): WizardStateRecord {\n const continuity = parseContinuityDefaults(record.continuity);\n const agentRoster = parseAgentRoster(record.agentRoster);\n const demoInitiative = parseDemoInitiative(record.demoInitiative);\n const onboardingTask = parseOnboardingTask(record.onboardingTask);\n\n return {\n installationId: record.installationId.trim(),\n createdAt: record.createdAt.trim(),\n updatedAt: record.updatedAt.trim(),\n ...(continuity ? { continuity } : {}),\n ...(agentRoster ? { agentRoster } : {}),\n ...(demoInitiative ? { demoInitiative } : {}),\n ...(onboardingTask ? { onboardingTask } : {}),\n };\n}\n\nexport function readWizardState(\n statePath: string = ORGX_WIZARD_STATE_PATH,\n): WizardStateRecord | null {\n const parsed = parseJsonObject(readTextIfExists(statePath));\n\n if (\n !isNonEmptyString(parsed.installationId) ||\n !isNonEmptyString(parsed.createdAt) ||\n !isNonEmptyString(parsed.updatedAt)\n ) {\n return null;\n }\n\n const state: WizardStateRecord = {\n installationId: parsed.installationId.trim(),\n createdAt: parsed.createdAt.trim(),\n updatedAt: parsed.updatedAt.trim(),\n };\n const continuity = parseContinuityDefaults(parsed.continuity);\n if (continuity !== undefined) state.continuity = continuity;\n const agentRoster = parseAgentRoster(parsed.agentRoster);\n if (agentRoster !== undefined) state.agentRoster = agentRoster;\n const demoInitiative = parseDemoInitiative(parsed.demoInitiative);\n if (demoInitiative !== undefined) state.demoInitiative = demoInitiative;\n const onboardingTask = parseOnboardingTask(parsed.onboardingTask);\n if (onboardingTask !== undefined) state.onboardingTask = onboardingTask;\n return state;\n}\n\nexport function writeWizardState(\n value: WizardStateRecord,\n statePath: string = ORGX_WIZARD_STATE_PATH,\n): WizardStateRecord {\n const record = sanitizeWizardStateRecord(value);\n writeJsonFile(statePath, record, { mode: 0o600 });\n return record;\n}\n\nexport function updateWizardState(\n updater: (current: WizardStateRecord) => WizardStateRecord,\n statePath: string = ORGX_WIZARD_STATE_PATH,\n): WizardStateRecord {\n const current = readWizardState(statePath) ?? createWizardState();\n const next = updater(current);\n const sanitized = sanitizeWizardStateRecord({\n ...next,\n installationId: next.installationId || current.installationId,\n createdAt: next.createdAt || current.createdAt,\n updatedAt: new Date().toISOString(),\n });\n writeJsonFile(statePath, sanitized, { mode: 0o600 });\n return sanitized;\n}\n\nexport function getOrCreateWizardInstallationId(\n statePath: string = ORGX_WIZARD_STATE_PATH,\n): string {\n const existing = readWizardState(statePath);\n if (existing) {\n return existing.installationId;\n }\n\n const record = createWizardState();\n writeWizardState(record, statePath);\n return record.installationId;\n}\n","export const SURFACE_NAMES = [\n \"claude\",\n \"cursor\",\n \"codex\",\n \"openclaw\",\n \"vscode\",\n \"windsurf\",\n \"zed\",\n \"chatgpt\",\n] as const;\n\nexport type SurfaceName = (typeof SURFACE_NAMES)[number];\nexport type SurfaceMode = \"automated\" | \"manual\";\n\nexport const AUTOMATED_SURFACE_NAMES = [\n \"claude\",\n \"cursor\",\n \"codex\",\n \"openclaw\",\n \"vscode\",\n \"windsurf\",\n \"zed\",\n] as const satisfies readonly SurfaceName[];\n\nexport const MCP_SURFACE_NAMES = [\n \"claude\",\n \"cursor\",\n \"codex\",\n \"vscode\",\n \"windsurf\",\n \"zed\",\n] as const;\n","import type { OrgxWorkspace } from \"./workspaces.js\";\nimport {\n readWizardState,\n updateWizardState,\n type WizardAgentRosterEntry,\n type WizardAgentRosterRecord,\n} from \"./wizard-state.js\";\n\nexport interface AgentRosterProfile {\n agentType: string;\n defaultDomain: string;\n name: string;\n}\n\nexport interface AgentRosterAssignment {\n domain: string;\n name: string;\n}\n\nexport const AGENT_ROSTER_PROFILES: AgentRosterProfile[] = [\n { agentType: \"orchestrator-agent\", defaultDomain: \"orchestrator\", name: \"Xandy\" },\n { agentType: \"product-agent\", defaultDomain: \"product\", name: \"Pace\" },\n { agentType: \"engineering-agent\", defaultDomain: \"engineering\", name: \"Eli\" },\n { agentType: \"marketing-agent\", defaultDomain: \"marketing\", name: \"Mark\" },\n { agentType: \"sales-agent\", defaultDomain: \"sales\", name: \"Sage\" },\n { agentType: \"operations-agent\", defaultDomain: \"operations\", name: \"Orion\" },\n { agentType: \"design-agent\", defaultDomain: \"design\", name: \"Dana\" },\n];\n\nexport const AGENT_ROSTER_DOMAINS = AGENT_ROSTER_PROFILES.map((profile) => profile.defaultDomain);\n\nexport const DEFAULT_AGENT_ROSTER: WizardAgentRosterEntry[] = AGENT_ROSTER_PROFILES.map(\n ({ agentType, defaultDomain, name }) => ({\n agentType,\n domain: defaultDomain,\n name,\n }),\n);\n\nfunction findAgentRosterProfile(name: string): AgentRosterProfile | undefined {\n return AGENT_ROSTER_PROFILES.find((profile) => profile.name === name);\n}\n\nexport function listAgentRosterProfiles(): AgentRosterProfile[] {\n return AGENT_ROSTER_PROFILES.map((profile) => ({ ...profile }));\n}\n\nexport function buildAgentRosterEntries(\n assignments: AgentRosterAssignment[],\n): WizardAgentRosterEntry[] {\n const seenNames = new Set<string>();\n\n return assignments.map((assignment) => {\n const name = assignment.name.trim();\n const domain = assignment.domain.trim();\n if (domain.length === 0) {\n throw new Error(\"OrgX agent roster domains must be non-empty.\");\n }\n\n const profile = findAgentRosterProfile(name);\n if (!profile) {\n throw new Error(`Unknown OrgX agent '${assignment.name}'.`);\n }\n\n if (seenNames.has(profile.name)) {\n throw new Error(`OrgX agent '${profile.name}' can only be assigned once.`);\n }\n seenNames.add(profile.name);\n\n return {\n agentType: profile.agentType,\n domain,\n name: profile.name,\n };\n });\n}\n\nfunction toAgentRosterRecord(\n workspace: Pick<OrgxWorkspace, \"id\" | \"name\">,\n agents: WizardAgentRosterEntry[],\n): WizardAgentRosterRecord {\n return {\n agents: agents.map((agent) => ({ ...agent })),\n configuredAt: new Date().toISOString(),\n workspaceId: workspace.id,\n workspaceName: workspace.name,\n };\n}\n\nexport function configureAgentRoster(\n workspace: Pick<OrgxWorkspace, \"id\" | \"name\">,\n assignments: AgentRosterAssignment[],\n options: { statePath?: string } = {},\n): WizardAgentRosterRecord {\n const agents = buildAgentRosterEntries(assignments);\n if (agents.length === 0) {\n throw new Error(\"Select at least one OrgX agent before saving the roster.\");\n }\n\n const roster = toAgentRosterRecord(workspace, agents);\n updateWizardState(\n (current) => ({\n ...current,\n agentRoster: roster,\n }),\n options.statePath,\n );\n return roster;\n}\n\nexport function ensureDefaultAgentRoster(\n workspace: Pick<OrgxWorkspace, \"id\" | \"name\">,\n options: { statePath?: string } = {},\n): WizardAgentRosterRecord {\n const existing = readWizardState(options.statePath)?.agentRoster;\n if (existing?.workspaceId === workspace.id && existing.agents.length > 0) {\n return existing;\n }\n\n const roster = toAgentRosterRecord(workspace, DEFAULT_AGENT_ROSTER);\n updateWizardState(\n (current) => ({\n ...current,\n agentRoster: roster,\n }),\n options.statePath,\n );\n return roster;\n}\n","import { spawnSync } from \"node:child_process\";\n\nimport { readTextIfExists } from \"./fs.js\";\nimport { readOpenClawGatewayPort } from \"../surfaces/openclaw-config.js\";\n\nexport interface OpenClawHealthCheck {\n ok: boolean;\n skipped: boolean;\n method: \"cli\" | \"http\" | \"none\";\n url?: string;\n details: string[];\n error?: string;\n}\n\nfunction trimOutput(value: string | null | undefined): string | undefined {\n const next = value?.trim();\n return next ? next : undefined;\n}\n\nexport async function checkOpenClawHealth(\n configPath?: string,\n): Promise<OpenClawHealthCheck> {\n const rawConfig = configPath ? readTextIfExists(configPath) : null;\n const port = readOpenClawGatewayPort(rawConfig);\n const url = `http://127.0.0.1:${port}/orgx/live`;\n\n const cli = spawnSync(\"openclaw\", [\"gateway\", \"status\"], {\n encoding: \"utf8\",\n timeout: 5_000,\n });\n\n if (!cli.error) {\n const stdout = trimOutput(cli.stdout);\n const stderr = trimOutput(cli.stderr);\n const details = [`gateway port: ${port}`];\n if (stdout) details.push(`cli: ${stdout}`);\n if (stderr) details.push(`cli stderr: ${stderr}`);\n\n if (cli.status === 0) {\n return {\n ok: true,\n skipped: false,\n method: \"cli\",\n url,\n details,\n };\n }\n }\n\n try {\n const response = await fetch(url, {\n redirect: \"manual\",\n signal: AbortSignal.timeout(5_000),\n });\n\n if (response.ok || (response.status >= 300 && response.status < 400)) {\n return {\n ok: true,\n skipped: false,\n method: \"http\",\n url,\n details: [`gateway port: ${port}`, `http status: ${response.status}`],\n };\n }\n\n return {\n ok: false,\n skipped: false,\n method: \"http\",\n url,\n error: `HTTP ${response.status}`,\n details: [`gateway port: ${port}`, `http status: ${response.status}`],\n };\n } catch (error) {\n const cliError = cli.error instanceof Error ? cli.error.message : undefined;\n return {\n ok: false,\n skipped: false,\n method: cliError ? \"none\" : \"http\",\n url,\n error: error instanceof Error ? error.message : String(error),\n details: [\n `gateway port: ${port}`,\n ...(cliError ? [`openclaw cli unavailable: ${cliError}`] : []),\n ],\n };\n }\n}\n","import { ORGX_HOSTED_MCP_HEALTH_URL } from \"../constants.js\";\n\nexport interface HostedMcpHealthCheck {\n ok: boolean;\n skipped: boolean;\n status?: number;\n url: string;\n body?: string;\n error?: string;\n details: string[];\n}\n\nfunction trimBody(value: string): string | undefined {\n const next = value.trim();\n if (!next) return undefined;\n return next.length > 120 ? `${next.slice(0, 117)}...` : next;\n}\n\nexport async function checkHostedMcpHealth(): Promise<HostedMcpHealthCheck> {\n try {\n const response = await fetch(ORGX_HOSTED_MCP_HEALTH_URL, {\n method: \"GET\",\n signal: AbortSignal.timeout(5_000),\n });\n const text = await response.text();\n const body = trimBody(text);\n\n return {\n ok: response.ok,\n skipped: false,\n status: response.status,\n url: ORGX_HOSTED_MCP_HEALTH_URL,\n ...(body ? { body } : {}),\n ...(response.ok ? {} : { error: `HTTP ${response.status}` }),\n details: [\n `http status: ${response.status}`,\n ...(body ? [`body: ${body}`] : []),\n ],\n };\n } catch (error) {\n return {\n ok: false,\n skipped: false,\n url: ORGX_HOSTED_MCP_HEALTH_URL,\n error: error instanceof Error ? error.message : String(error),\n details: [],\n };\n }\n}\n","import { ORGX_HOSTED_MCP_URL } from \"../constants.js\";\nimport {\n resolveOrgxAuth,\n type OrgxAuthSource,\n type ResolveOrgxAuthOptions,\n} from \"./auth.js\";\n\nconst DEFAULT_TOOL_NAME = \"get_setup_status\";\n\ninterface JsonRpcErrorPayload {\n error?: {\n message?: string;\n };\n result?: unknown;\n}\n\nexport interface HostedMcpToolCheck {\n configured: boolean;\n ok: boolean;\n skipped: boolean;\n source: OrgxAuthSource | \"none\";\n toolName: string;\n url: string;\n baseUrl?: string;\n initializeStatus?: number;\n callStatus?: number;\n error?: string;\n details: string[];\n response?: unknown;\n}\n\nfunction buildHeaders(apiKey: string, sessionId?: string): Record<string, string> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n Accept: \"application/json, text/event-stream\",\n };\n\n if (sessionId) {\n headers[\"Mcp-Session-Id\"] = sessionId;\n }\n\n return headers;\n}\n\nasync function readJsonSafe(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) return null;\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction readJsonRpcError(payload: unknown): string | undefined {\n if (!payload || typeof payload !== \"object\") {\n return undefined;\n }\n\n const maybeError = (payload as JsonRpcErrorPayload).error;\n if (!maybeError || typeof maybeError !== \"object\") {\n return undefined;\n }\n\n return typeof maybeError.message === \"string\"\n ? maybeError.message\n : \"Unknown MCP JSON-RPC error.\";\n}\n\nfunction readSessionId(response: Response): string | undefined {\n return response.headers.get(\"mcp-session-id\") ?? response.headers.get(\"Mcp-Session-Id\") ?? undefined;\n}\n\nexport async function checkHostedMcpToolAccess(\n options: ResolveOrgxAuthOptions = {},\n toolName = DEFAULT_TOOL_NAME,\n): Promise<HostedMcpToolCheck> {\n const auth = await resolveOrgxAuth(options);\n if (!auth) {\n return {\n configured: false,\n ok: false,\n skipped: true,\n source: \"none\",\n toolName,\n url: ORGX_HOSTED_MCP_URL,\n error: \"No OrgX API key configured; hosted MCP tool verification skipped.\",\n details: [],\n };\n }\n\n try {\n const initializeResponse = await fetch(ORGX_HOSTED_MCP_URL, {\n method: \"POST\",\n headers: buildHeaders(auth.apiKey),\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method: \"initialize\",\n params: {\n protocolVersion: \"2024-11-05\",\n clientInfo: {\n name: \"orgx-wizard\",\n version: \"0.1.0\",\n },\n capabilities: {},\n },\n }),\n signal: AbortSignal.timeout(10_000),\n });\n\n const initializePayload = await readJsonSafe(initializeResponse);\n const initializeError = readJsonRpcError(initializePayload);\n const sessionId = readSessionId(initializeResponse);\n\n if (!initializeResponse.ok) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n toolName,\n url: ORGX_HOSTED_MCP_URL,\n baseUrl: auth.baseUrl,\n initializeStatus: initializeResponse.status,\n error: `MCP initialize failed with HTTP ${initializeResponse.status}.`,\n details: [`auth source: ${auth.source}`],\n response: initializePayload,\n };\n }\n\n if (initializeError) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n toolName,\n url: ORGX_HOSTED_MCP_URL,\n baseUrl: auth.baseUrl,\n initializeStatus: initializeResponse.status,\n error: `MCP initialize returned JSON-RPC error: ${initializeError}`,\n details: [`auth source: ${auth.source}`],\n response: initializePayload,\n };\n }\n\n if (!sessionId) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n toolName,\n url: ORGX_HOSTED_MCP_URL,\n baseUrl: auth.baseUrl,\n initializeStatus: initializeResponse.status,\n error: \"MCP initialize succeeded but no Mcp-Session-Id header was returned.\",\n details: [`auth source: ${auth.source}`],\n response: initializePayload,\n };\n }\n\n const callResponse = await fetch(ORGX_HOSTED_MCP_URL, {\n method: \"POST\",\n headers: buildHeaders(auth.apiKey, sessionId),\n body: JSON.stringify({\n jsonrpc: \"2.0\",\n id: 2,\n method: \"tools/call\",\n params: {\n name: toolName,\n arguments: {},\n },\n }),\n signal: AbortSignal.timeout(10_000),\n });\n\n const callPayload = await readJsonSafe(callResponse);\n const callError = readJsonRpcError(callPayload);\n\n if (!callResponse.ok) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n toolName,\n url: ORGX_HOSTED_MCP_URL,\n baseUrl: auth.baseUrl,\n initializeStatus: initializeResponse.status,\n callStatus: callResponse.status,\n error: `MCP tool call failed with HTTP ${callResponse.status}.`,\n details: [\n `auth source: ${auth.source}`,\n `session established: ${sessionId}`,\n ],\n response: callPayload,\n };\n }\n\n if (callError) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n toolName,\n url: ORGX_HOSTED_MCP_URL,\n baseUrl: auth.baseUrl,\n initializeStatus: initializeResponse.status,\n callStatus: callResponse.status,\n error: `MCP tool call returned JSON-RPC error: ${callError}`,\n details: [\n `auth source: ${auth.source}`,\n `session established: ${sessionId}`,\n ],\n response: callPayload,\n };\n }\n\n return {\n configured: true,\n ok: true,\n skipped: false,\n source: auth.source,\n toolName,\n url: ORGX_HOSTED_MCP_URL,\n baseUrl: auth.baseUrl,\n initializeStatus: initializeResponse.status,\n callStatus: callResponse.status,\n details: [\n `auth source: ${auth.source}`,\n `session established: ${sessionId}`,\n `tool call: ${toolName}`,\n ],\n response: callPayload,\n };\n } catch (error) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n toolName,\n url: ORGX_HOSTED_MCP_URL,\n baseUrl: auth.baseUrl,\n error: error instanceof Error ? error.message : String(error),\n details: [`auth source: ${auth.source}`],\n };\n }\n}\n","import {\n NPM_REGISTRY_BASE_URL,\n ORGX_WIZARD_NPM_PACKAGE_NAME,\n} from \"../constants.js\";\nimport { isRecord } from \"./fs.js\";\n\nexport interface NpmRegistryCheck {\n ok: boolean;\n skipped: boolean;\n reachable: boolean;\n published: boolean;\n url: string;\n packageName: string;\n version?: string;\n error?: string;\n details: string[];\n}\n\nfunction resolvePackageUrl(packageName: string): string {\n return `${NPM_REGISTRY_BASE_URL}/${encodeURIComponent(packageName)}`;\n}\n\nfunction getLatestVersion(payload: unknown): string | undefined {\n if (!isRecord(payload) || !isRecord(payload[\"dist-tags\"])) {\n return undefined;\n }\n\n const latest = payload[\"dist-tags\"].latest;\n return typeof latest === \"string\" && latest.trim().length > 0 ? latest : undefined;\n}\n\nexport async function checkNpmRegistryHealth(\n packageName: string = ORGX_WIZARD_NPM_PACKAGE_NAME,\n): Promise<NpmRegistryCheck> {\n const url = resolvePackageUrl(packageName);\n\n try {\n const response = await fetch(url, {\n method: \"GET\",\n headers: { Accept: \"application/json\" },\n signal: AbortSignal.timeout(7_000),\n });\n\n const text = await response.text();\n let payload: unknown = text;\n try {\n payload = text.length > 0 ? JSON.parse(text) : null;\n } catch {\n payload = text;\n }\n\n if (response.ok) {\n const version = getLatestVersion(payload);\n return {\n ok: true,\n skipped: false,\n reachable: true,\n published: true,\n url,\n packageName,\n ...(version ? { version } : {}),\n details: [\n `http status: ${response.status}`,\n ...(version ? [`latest version: ${version}`] : [\"latest version: unavailable\"]),\n ],\n };\n }\n\n if (response.status === 404) {\n return {\n ok: true,\n skipped: false,\n reachable: true,\n published: false,\n url,\n packageName,\n error: `${packageName} is not published on npm yet.`,\n details: [`http status: ${response.status}`],\n };\n }\n\n return {\n ok: false,\n skipped: false,\n reachable: false,\n published: false,\n url,\n packageName,\n error: `npm registry returned HTTP ${response.status}`,\n details: [`http status: ${response.status}`],\n };\n } catch (error) {\n return {\n ok: false,\n skipped: false,\n reachable: false,\n published: false,\n url,\n packageName,\n error: error instanceof Error ? error.message : String(error),\n details: [],\n };\n }\n}\n","import { buildOrgxApiUrl, resolveOrgxAuth, type ResolveOrgxAuthOptions } from \"./auth.js\";\nimport { isRecord } from \"./fs.js\";\n\nexport interface OrgxWorkspace {\n id: string;\n name: string;\n description?: string;\n isDefault: boolean;\n createdAt?: string;\n updatedAt?: string;\n}\n\nexport interface CreateWorkspaceInput {\n name: string;\n description?: string;\n}\n\nexport interface SetDefaultWorkspaceInput {\n id: string;\n}\n\nexport interface OrgxWorkspaceClientOptions extends ResolveOrgxAuthOptions {}\n\nasync function requireOrgxAuth(options: OrgxWorkspaceClientOptions = {}) {\n const auth = await resolveOrgxAuth(options);\n if (!auth) {\n throw new Error(\n \"No OrgX API key configured. Run `wizard auth login` or `wizard auth set-key <oxk_...>` first.\",\n );\n }\n\n return auth;\n}\n\nasync function parseResponseBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) return null;\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction parseWorkspace(value: unknown): OrgxWorkspace | null {\n if (!isRecord(value)) return null;\n\n const id = typeof value.id === \"string\" ? value.id : null;\n const name = typeof value.name === \"string\" ? value.name : null;\n if (!id || !name) return null;\n\n return {\n id,\n name,\n ...(typeof value.description === \"string\" && value.description.trim().length > 0\n ? { description: value.description }\n : {}),\n isDefault: value.is_default === true,\n ...(typeof value.created_at === \"string\" ? { createdAt: value.created_at } : {}),\n ...(typeof value.updated_at === \"string\" ? { updatedAt: value.updated_at } : {}),\n };\n}\n\nfunction sortWorkspaces(workspaces: OrgxWorkspace[]): OrgxWorkspace[] {\n return [...workspaces].sort((left, right) => {\n if (left.isDefault !== right.isDefault) {\n return left.isDefault ? -1 : 1;\n }\n\n const nameCompare = left.name.localeCompare(right.name);\n if (nameCompare !== 0) {\n return nameCompare;\n }\n\n return left.id.localeCompare(right.id);\n });\n}\n\nfunction parseWorkspaceList(payload: unknown): OrgxWorkspace[] {\n if (!isRecord(payload) || !Array.isArray(payload.data)) {\n return [];\n }\n\n return sortWorkspaces(payload.data.map(parseWorkspace).filter((item): item is OrgxWorkspace => item !== null));\n}\n\nfunction parseWorkspaceResponse(payload: unknown): OrgxWorkspace | null {\n if (!isRecord(payload)) return null;\n return parseWorkspace(payload.data);\n}\n\nfunction parseCurrentWorkspaceResponse(payload: unknown): OrgxWorkspace | null {\n if (!isRecord(payload)) return null;\n\n const id = typeof payload.id === \"string\" ? payload.id : null;\n const name = typeof payload.name === \"string\" ? payload.name : null;\n if (!id || !name) return null;\n\n return {\n id,\n name,\n isDefault: true,\n ...(typeof payload.createdAt === \"string\" ? { createdAt: payload.createdAt } : {}),\n };\n}\n\nfunction buildRequestHeaders(apiKey: string): Record<string, string> {\n return {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n };\n}\n\nfunction formatHttpError(status: number, body: unknown): string {\n if (typeof body === \"string\" && body.trim().length > 0) {\n return `HTTP ${status}: ${body}`;\n }\n\n if (isRecord(body) && typeof body.error === \"string\" && body.error.trim().length > 0) {\n return `HTTP ${status}: ${body.error}`;\n }\n\n return `HTTP ${status}`;\n}\n\nexport async function listWorkspaces(\n options: OrgxWorkspaceClientOptions = {},\n): Promise<OrgxWorkspace[]> {\n const auth = await requireOrgxAuth(options);\n const url = buildOrgxApiUrl(\"/entities?type=command_center&limit=100\", auth.baseUrl);\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${auth.apiKey}`,\n },\n signal: AbortSignal.timeout(7_000),\n });\n const body = await parseResponseBody(response);\n\n if (!response.ok) {\n throw new Error(`Failed to list workspaces. ${formatHttpError(response.status, body)}`);\n }\n\n return parseWorkspaceList(body);\n}\n\nexport async function getCurrentWorkspace(\n options: OrgxWorkspaceClientOptions = {},\n): Promise<OrgxWorkspace | null> {\n const auth = await requireOrgxAuth(options);\n const url = buildOrgxApiUrl(\"/v1/workspaces/current\", auth.baseUrl);\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${auth.apiKey}`,\n },\n signal: AbortSignal.timeout(7_000),\n });\n const body = await parseResponseBody(response);\n\n if (response.ok) {\n const workspace = parseCurrentWorkspaceResponse(body);\n if (!workspace) {\n throw new Error(\"OrgX returned an unexpected current workspace payload.\");\n }\n return workspace;\n }\n\n if (response.status === 404) {\n const workspaces = await listWorkspaces(options);\n return workspaces[0] ?? null;\n }\n\n throw new Error(`Failed to load current workspace. ${formatHttpError(response.status, body)}`);\n}\n\nexport async function createWorkspace(\n input: CreateWorkspaceInput,\n options: OrgxWorkspaceClientOptions = {},\n): Promise<OrgxWorkspace> {\n const name = input.name.trim();\n if (!name) {\n throw new Error(\"Workspace name is required.\");\n }\n\n const auth = await requireOrgxAuth(options);\n const url = buildOrgxApiUrl(\"/entities\", auth.baseUrl);\n const payload = {\n type: \"command_center\",\n name,\n ...(input.description?.trim()\n ? { description: input.description.trim() }\n : {}),\n };\n\n const response = await fetch(url, {\n method: \"POST\",\n headers: buildRequestHeaders(auth.apiKey),\n body: JSON.stringify(payload),\n signal: AbortSignal.timeout(7_000),\n });\n const body = await parseResponseBody(response);\n\n if (!response.ok) {\n throw new Error(`Failed to create workspace. ${formatHttpError(response.status, body)}`);\n }\n\n const workspace = parseWorkspaceResponse(body);\n if (!workspace) {\n throw new Error(\"OrgX returned an unexpected workspace payload.\");\n }\n\n return workspace;\n}\n\nasync function updateWorkspace(\n input: SetDefaultWorkspaceInput,\n patch: Record<string, unknown>,\n options: OrgxWorkspaceClientOptions = {},\n): Promise<OrgxWorkspace> {\n const auth = await requireOrgxAuth(options);\n const url = buildOrgxApiUrl(\"/entities\", auth.baseUrl);\n const response = await fetch(url, {\n method: \"PATCH\",\n headers: buildRequestHeaders(auth.apiKey),\n body: JSON.stringify({\n type: \"command_center\",\n id: input.id,\n ...patch,\n }),\n signal: AbortSignal.timeout(7_000),\n });\n const body = await parseResponseBody(response);\n\n if (!response.ok) {\n throw new Error(`Failed to update workspace. ${formatHttpError(response.status, body)}`);\n }\n\n const workspace = parseWorkspaceResponse(body);\n if (!workspace) {\n throw new Error(\"OrgX returned an unexpected workspace update payload.\");\n }\n\n return workspace;\n}\n\nexport async function setDefaultWorkspace(\n input: SetDefaultWorkspaceInput,\n options: OrgxWorkspaceClientOptions = {},\n): Promise<{ changed: boolean; workspace: OrgxWorkspace }> {\n const workspaceId = input.id.trim();\n if (!workspaceId) {\n throw new Error(\"Workspace id is required.\");\n }\n\n const workspaces = await listWorkspaces(options);\n const target = workspaces.find((workspace) => workspace.id === workspaceId);\n if (!target) {\n throw new Error(`Workspace ${workspaceId} was not found in the current OrgX account.`);\n }\n\n if (target.isDefault) {\n return {\n changed: false,\n workspace: target,\n };\n }\n\n const currentDefault = workspaces.find((workspace) => workspace.isDefault);\n if (currentDefault) {\n await updateWorkspace({ id: currentDefault.id }, { is_default: false }, options);\n }\n\n try {\n const updated = await updateWorkspace({ id: workspaceId }, { is_default: true }, options);\n return {\n changed: true,\n workspace: updated,\n };\n } catch (error) {\n if (currentDefault) {\n try {\n await updateWorkspace({ id: currentDefault.id }, { is_default: true }, options);\n } catch {\n // Preserve the original failure while best-effort restoring the prior default.\n }\n }\n throw error;\n }\n}\n","import {\n resolveOrgxAuth,\n type OrgxAuthSource,\n type ResolveOrgxAuthOptions,\n} from \"./auth.js\";\nimport { getCurrentWorkspace, type OrgxWorkspace } from \"./workspaces.js\";\n\nexport interface WorkspaceConnectivityCheck {\n configured: boolean;\n ok: boolean;\n skipped: boolean;\n source: OrgxAuthSource | \"none\";\n baseUrl?: string;\n workspace?: OrgxWorkspace;\n error?: string;\n details: string[];\n}\n\nexport async function checkWorkspaceConnectivity(\n options: ResolveOrgxAuthOptions = {},\n): Promise<WorkspaceConnectivityCheck> {\n const auth = await resolveOrgxAuth(options);\n if (!auth) {\n return {\n configured: false,\n ok: false,\n skipped: true,\n source: \"none\",\n error: \"No OrgX API key configured; workspace connectivity check skipped.\",\n details: [],\n };\n }\n\n try {\n const workspace = await getCurrentWorkspace(options);\n if (!workspace) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n baseUrl: auth.baseUrl,\n error: \"OrgX auth resolved, but no accessible workspace was returned.\",\n details: [],\n };\n }\n\n return {\n configured: true,\n ok: true,\n skipped: false,\n source: auth.source,\n baseUrl: auth.baseUrl,\n workspace,\n details: [\n `workspace id: ${workspace.id}`,\n ...(workspace.isDefault ? [\"workspace is marked as default\"] : []),\n ],\n };\n } catch (error) {\n return {\n configured: true,\n ok: false,\n skipped: false,\n source: auth.source,\n baseUrl: auth.baseUrl,\n error: error instanceof Error ? error.message : String(error),\n details: [],\n };\n }\n}\n","import * as TOML from \"@iarna/toml\";\n\nimport {\n ORGX_HOSTED_MCP_KEY,\n ORGX_HOSTED_MCP_URL,\n ORGX_LOCAL_MCP_KEY,\n} from \"../constants.js\";\nimport { isRecord, parseJsonObject, readObject } from \"../lib/fs.js\";\n\ntype JsonObject = Record<string, unknown>;\n\nexport interface McpConfigInspection {\n configured: boolean;\n hostedConfigured?: boolean;\n localConfigured?: boolean;\n details: string[];\n}\n\nfunction cloneConfigCollection(config: JsonObject, key: string): JsonObject {\n return { ...readObject(config[key]) };\n}\n\nfunction removeLegacyScopedMcpServers(servers: JsonObject): boolean {\n const scopedPrefix = `${ORGX_LOCAL_MCP_KEY}-`;\n let updated = false;\n\n for (const key of Object.keys(servers)) {\n if (key === ORGX_LOCAL_MCP_KEY) continue;\n if (!key.startsWith(scopedPrefix)) continue;\n delete servers[key];\n updated = true;\n }\n\n return updated;\n}\n\nfunction stringifyJsonConfig(config: JsonObject): string {\n return `${JSON.stringify(config, null, 2)}\\n`;\n}\n\nfunction clearStdioFields(entry: JsonObject): JsonObject {\n const next = { ...entry };\n delete next.command;\n delete next.args;\n delete next.env;\n return next;\n}\n\nfunction matchHttpEntry(value: unknown, url: string): boolean {\n if (!isRecord(value)) return false;\n return value.type === \"http\" && value.url === url;\n}\n\nfunction matchUrlEntry(value: unknown, url: string): boolean {\n if (!isRecord(value)) return false;\n return value.url === url;\n}\n\nexport function patchClaudeMcpConfig(\n input: string | null,\n localMcpUrl?: string,\n): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n const existingOrgx = readObject(servers[ORGX_HOSTED_MCP_KEY]);\n const existingLocal = readObject(servers[ORGX_LOCAL_MCP_KEY]);\n const hostedUrl = typeof existingOrgx.url === \"string\" ? existingOrgx.url : \"\";\n const hostedType = typeof existingOrgx.type === \"string\" ? existingOrgx.type : \"\";\n const shouldSetHostedOrgx =\n !isRecord(servers[ORGX_HOSTED_MCP_KEY]) ||\n (hostedUrl === localMcpUrl && hostedType === \"http\");\n\n if (shouldSetHostedOrgx) {\n servers[ORGX_HOSTED_MCP_KEY] = {\n ...existingOrgx,\n type: \"http\",\n url: ORGX_HOSTED_MCP_URL,\n description:\n typeof existingOrgx.description === \"string\" &&\n existingOrgx.description.trim().length > 0\n ? existingOrgx.description\n : \"OrgX cloud MCP (OAuth)\",\n };\n }\n\n if (localMcpUrl) {\n servers[ORGX_LOCAL_MCP_KEY] = {\n ...existingLocal,\n type: \"http\",\n url: localMcpUrl,\n description:\n typeof existingLocal.description === \"string\" &&\n existingLocal.description.trim().length > 0\n ? existingLocal.description\n : \"OrgX platform via local OpenClaw plugin (no OAuth)\",\n };\n }\n\n removeLegacyScopedMcpServers(servers);\n\n return stringifyJsonConfig({\n ...current,\n mcpServers: servers,\n });\n}\n\nexport function removeClaudeMcpConfig(\n input: string | null,\n): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n\n if (isRecord(servers[ORGX_LOCAL_MCP_KEY])) {\n delete servers[ORGX_LOCAL_MCP_KEY];\n }\n\n if (matchHttpEntry(servers[ORGX_HOSTED_MCP_KEY], ORGX_HOSTED_MCP_URL)) {\n delete servers[ORGX_HOSTED_MCP_KEY];\n }\n\n removeLegacyScopedMcpServers(servers);\n\n return stringifyJsonConfig({\n ...current,\n mcpServers: servers,\n });\n}\n\nexport function inspectClaudeMcpConfig(input: string | null): McpConfigInspection {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n const local = readObject(servers[ORGX_LOCAL_MCP_KEY]);\n const hostedConfigured = matchHttpEntry(servers[ORGX_HOSTED_MCP_KEY], ORGX_HOSTED_MCP_URL);\n const localConfigured =\n local.type === \"http\" &&\n typeof local.url === \"string\";\n const localUrl = localConfigured ? String(local.url) : \"missing\";\n\n return {\n configured: hostedConfigured && localConfigured,\n hostedConfigured,\n localConfigured,\n details: [\n `hosted orgx: ${hostedConfigured ? \"ok\" : \"missing\"}`,\n `local orgx-openclaw: ${localUrl}`,\n ],\n };\n}\n\nexport function patchCursorMcpConfig(\n input: string | null,\n localMcpUrl: string,\n): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n const existingLocal = readObject(servers[ORGX_LOCAL_MCP_KEY]);\n\n servers[ORGX_LOCAL_MCP_KEY] = {\n ...clearStdioFields(existingLocal),\n url: localMcpUrl,\n };\n\n removeLegacyScopedMcpServers(servers);\n\n return stringifyJsonConfig({\n ...current,\n mcpServers: servers,\n });\n}\n\nexport function removeCursorMcpConfig(\n input: string | null,\n): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n\n if (isRecord(servers[ORGX_LOCAL_MCP_KEY])) {\n delete servers[ORGX_LOCAL_MCP_KEY];\n }\n\n removeLegacyScopedMcpServers(servers);\n\n return stringifyJsonConfig({\n ...current,\n mcpServers: servers,\n });\n}\n\nexport function inspectCursorMcpConfig(input: string | null): McpConfigInspection {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n const local = readObject(servers[ORGX_LOCAL_MCP_KEY]);\n const localConfigured =\n typeof local.url === \"string\";\n const localUrl = localConfigured ? String(local.url) : \"missing\";\n\n return {\n configured: localConfigured,\n localConfigured,\n details: [`local orgx-openclaw: ${localUrl}`],\n };\n}\n\nexport function patchVscodeMcpConfig(input: string | null): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"servers\");\n const existingHosted = readObject(servers[ORGX_HOSTED_MCP_KEY]);\n\n servers[ORGX_HOSTED_MCP_KEY] = {\n ...clearStdioFields(existingHosted),\n type: \"http\",\n url: ORGX_HOSTED_MCP_URL,\n };\n\n return stringifyJsonConfig({\n ...current,\n servers,\n });\n}\n\nexport function removeVscodeMcpConfig(input: string | null): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"servers\");\n\n if (matchHttpEntry(servers[ORGX_HOSTED_MCP_KEY], ORGX_HOSTED_MCP_URL)) {\n delete servers[ORGX_HOSTED_MCP_KEY];\n }\n\n return stringifyJsonConfig({\n ...current,\n servers,\n });\n}\n\nexport function inspectVscodeMcpConfig(input: string | null): McpConfigInspection {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"servers\");\n const hostedConfigured = matchHttpEntry(servers[ORGX_HOSTED_MCP_KEY], ORGX_HOSTED_MCP_URL);\n\n return {\n configured: hostedConfigured,\n hostedConfigured,\n details: [`hosted orgx: ${hostedConfigured ? \"ok\" : \"missing\"}`],\n };\n}\n\nfunction matchServerUrlEntry(value: unknown, url: string): boolean {\n if (!isRecord(value)) return false;\n return value.serverUrl === url || value.url === url;\n}\n\nexport function patchWindsurfMcpConfig(input: string | null): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n const existingHosted = readObject(servers[ORGX_HOSTED_MCP_KEY]);\n const nextEntry = clearStdioFields(existingHosted);\n\n delete nextEntry.url;\n servers[ORGX_HOSTED_MCP_KEY] = {\n ...nextEntry,\n serverUrl: ORGX_HOSTED_MCP_URL,\n };\n\n return stringifyJsonConfig({\n ...current,\n mcpServers: servers,\n });\n}\n\nexport function removeWindsurfMcpConfig(input: string | null): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n\n if (matchServerUrlEntry(servers[ORGX_HOSTED_MCP_KEY], ORGX_HOSTED_MCP_URL)) {\n delete servers[ORGX_HOSTED_MCP_KEY];\n }\n\n return stringifyJsonConfig({\n ...current,\n mcpServers: servers,\n });\n}\n\nexport function inspectWindsurfMcpConfig(input: string | null): McpConfigInspection {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"mcpServers\");\n const hostedConfigured = matchServerUrlEntry(servers[ORGX_HOSTED_MCP_KEY], ORGX_HOSTED_MCP_URL);\n\n return {\n configured: hostedConfigured,\n hostedConfigured,\n details: [`hosted orgx: ${hostedConfigured ? \"ok\" : \"missing\"}`],\n };\n}\n\nexport function patchZedMcpConfig(input: string | null): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"context_servers\");\n const existingHosted = readObject(servers[ORGX_HOSTED_MCP_KEY]);\n\n servers[ORGX_HOSTED_MCP_KEY] = {\n ...clearStdioFields(existingHosted),\n url: ORGX_HOSTED_MCP_URL,\n };\n\n return stringifyJsonConfig({\n ...current,\n context_servers: servers,\n });\n}\n\nexport function removeZedMcpConfig(input: string | null): string {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"context_servers\");\n\n if (matchUrlEntry(servers[ORGX_HOSTED_MCP_KEY], ORGX_HOSTED_MCP_URL)) {\n delete servers[ORGX_HOSTED_MCP_KEY];\n }\n\n return stringifyJsonConfig({\n ...current,\n context_servers: servers,\n });\n}\n\nexport function inspectZedMcpConfig(input: string | null): McpConfigInspection {\n const current = parseJsonObject(input);\n const servers = cloneConfigCollection(current, \"context_servers\");\n const hostedConfigured = matchUrlEntry(servers[ORGX_HOSTED_MCP_KEY], ORGX_HOSTED_MCP_URL);\n\n return {\n configured: hostedConfigured,\n hostedConfigured,\n details: [`hosted orgx: ${hostedConfigured ? \"ok\" : \"missing\"}`],\n };\n}\n\nfunction parseTomlDocument(input: string | null): JsonObject {\n if (!input) return {};\n\n try {\n const parsed = TOML.parse(input) as unknown;\n return isRecord(parsed) ? parsed : {};\n } catch {\n return {};\n }\n}\n\nfunction stringifyTomlDocument(document: JsonObject): string {\n const rendered = TOML.stringify(document as TOML.JsonMap);\n return rendered.endsWith(\"\\n\") ? rendered : `${rendered}\\n`;\n}\n\nfunction upsertCodexEntry(servers: JsonObject, key: string, url: string): void {\n const current = readObject(servers[key]);\n const next: JsonObject = {\n ...current,\n url,\n };\n delete next.command;\n delete next.args;\n delete next.startup_timeout_sec;\n servers[key] = next;\n}\n\nfunction removeLegacyCodexEntries(servers: JsonObject): boolean {\n const scopedPrefix = `${ORGX_LOCAL_MCP_KEY}-`;\n let updated = false;\n\n for (const key of Object.keys(servers)) {\n if (key === ORGX_LOCAL_MCP_KEY) continue;\n if (!key.startsWith(scopedPrefix)) continue;\n delete servers[key];\n updated = true;\n }\n\n return updated;\n}\n\nexport function patchCodexConfigToml(\n input: string | null,\n localMcpUrl?: string,\n): string {\n const current = parseTomlDocument(input);\n const servers = readObject(current.mcp_servers);\n\n upsertCodexEntry(servers, ORGX_HOSTED_MCP_KEY, ORGX_HOSTED_MCP_URL);\n if (localMcpUrl) {\n upsertCodexEntry(servers, ORGX_LOCAL_MCP_KEY, localMcpUrl);\n }\n removeLegacyCodexEntries(servers);\n\n current.mcp_servers = servers;\n return stringifyTomlDocument(current);\n}\n\nexport function removeCodexConfigToml(\n input: string | null,\n): string {\n const current = parseTomlDocument(input);\n const servers = readObject(current.mcp_servers);\n const hosted = readObject(servers[ORGX_HOSTED_MCP_KEY]);\n\n if (isRecord(servers[ORGX_LOCAL_MCP_KEY])) {\n delete servers[ORGX_LOCAL_MCP_KEY];\n }\n\n if (hosted.url === ORGX_HOSTED_MCP_URL) {\n delete servers[ORGX_HOSTED_MCP_KEY];\n }\n\n removeLegacyCodexEntries(servers);\n current.mcp_servers = servers;\n\n return stringifyTomlDocument(current);\n}\n\nexport function inspectCodexConfigToml(input: string | null): McpConfigInspection {\n const current = parseTomlDocument(input);\n const servers = readObject(current.mcp_servers);\n const hosted = readObject(servers[ORGX_HOSTED_MCP_KEY]);\n const local = readObject(servers[ORGX_LOCAL_MCP_KEY]);\n const hostedConfigured = hosted.url === ORGX_HOSTED_MCP_URL;\n const localConfigured = typeof local.url === \"string\";\n\n return {\n configured: hostedConfigured && localConfigured,\n hostedConfigured,\n localConfigured,\n details: [\n `hosted orgx: ${hostedConfigured ? \"ok\" : \"missing\"}`,\n `local orgx-openclaw: ${localConfigured ? local.url : \"missing\"}`,\n ],\n };\n}\n","import { existsSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\n\nimport {\n CHATGPT_APP_PATHS,\n CLAUDE_INSTALL_PATHS,\n CLAUDE_MCP_PATHS,\n CODEX_CONFIG_PATHS,\n CODEX_INSTALL_PATHS,\n CURSOR_INSTALL_PATHS,\n CURSOR_MCP_PATHS,\n OPENCLAW_CONFIG_PATHS,\n OPENCLAW_INSTALL_PATHS,\n VSCODE_INSTALL_PATHS,\n VSCODE_MCP_PATHS,\n WINDSURF_INSTALL_PATHS,\n WINDSURF_MCP_PATHS,\n ZED_INSTALL_PATHS,\n ZED_SETTINGS_PATHS,\n} from \"../constants.js\";\nimport type { SurfaceName } from \"./names.js\";\n\nexport interface SurfaceLocator {\n configPaths: string[];\n installPaths: string[];\n}\n\nexport interface SurfaceDetection {\n detected: boolean;\n preferredPath?: string;\n existingPath?: string;\n evidence: string[];\n}\n\ntype Exists = (path: string) => boolean;\n\nconst SURFACE_LOCATORS: Record<SurfaceName, SurfaceLocator> = {\n claude: {\n configPaths: CLAUDE_MCP_PATHS,\n installPaths: CLAUDE_INSTALL_PATHS,\n },\n cursor: {\n configPaths: CURSOR_MCP_PATHS,\n installPaths: CURSOR_INSTALL_PATHS,\n },\n codex: {\n configPaths: CODEX_CONFIG_PATHS,\n installPaths: CODEX_INSTALL_PATHS,\n },\n openclaw: {\n configPaths: OPENCLAW_CONFIG_PATHS,\n installPaths: OPENCLAW_INSTALL_PATHS,\n },\n vscode: {\n configPaths: VSCODE_MCP_PATHS,\n installPaths: VSCODE_INSTALL_PATHS,\n },\n windsurf: {\n configPaths: WINDSURF_MCP_PATHS,\n installPaths: WINDSURF_INSTALL_PATHS,\n },\n zed: {\n configPaths: ZED_SETTINGS_PATHS,\n installPaths: ZED_INSTALL_PATHS,\n },\n chatgpt: {\n configPaths: [],\n installPaths: CHATGPT_APP_PATHS,\n },\n};\n\nfunction firstExistingPath(paths: string[], exists: Exists): string | undefined {\n return paths.find((path) => exists(path));\n}\n\nfunction buildFallbackInstallPaths(configPaths: string[]): string[] {\n return [...new Set(configPaths.map((path) => dirname(path)))];\n}\n\nexport function getSurfaceLocator(name: SurfaceName): SurfaceLocator {\n return SURFACE_LOCATORS[name];\n}\n\nexport function detectSurface(name: SurfaceName, exists: Exists = existsSync): SurfaceDetection {\n const locator = getSurfaceLocator(name);\n const existingConfigPath = firstExistingPath(locator.configPaths, exists);\n const preferredPath = locator.configPaths[0] ?? locator.installPaths[0];\n const installCandidates = [\n ...locator.installPaths,\n ...buildFallbackInstallPaths(locator.configPaths),\n ];\n const existingInstallPath = firstExistingPath(installCandidates, exists);\n const existingPath = existingConfigPath ?? existingInstallPath;\n const evidence: string[] = [];\n\n if (existingConfigPath) {\n evidence.push(`config found: ${existingConfigPath}`);\n }\n if (existingInstallPath && existingInstallPath !== existingConfigPath) {\n evidence.push(`install marker found: ${existingInstallPath}`);\n }\n if (!existingConfigPath && !existingInstallPath) {\n evidence.push(\"no candidate paths found on disk\");\n }\n\n const detection: SurfaceDetection = {\n detected: Boolean(existingConfigPath || existingInstallPath),\n evidence,\n };\n\n if (preferredPath) {\n detection.preferredPath = preferredPath;\n }\n if (existingPath) {\n detection.existingPath = existingPath;\n }\n\n return detection;\n}\n","import {\n checkOrgxAuth,\n peekResolvedOrgxAuth,\n resolveOrgxAuth,\n type OrgxAuthHint,\n type OrgxAuthCheckResult,\n} from \"../lib/auth.js\";\nimport { checkOpenClawHealth, type OpenClawHealthCheck } from \"../lib/openclaw-health.js\";\nimport { checkHostedMcpHealth, type HostedMcpHealthCheck } from \"../lib/hosted-mcp-health.js\";\nimport {\n checkHostedMcpToolAccess,\n type HostedMcpToolCheck,\n} from \"../lib/hosted-mcp-tool-check.js\";\nimport { checkNpmRegistryHealth, type NpmRegistryCheck } from \"../lib/npm-registry-health.js\";\nimport {\n checkWorkspaceConnectivity,\n type WorkspaceConnectivityCheck,\n} from \"../lib/workspace-connectivity.js\";\nimport { readTextIfExists, writeTextFile } from \"../lib/fs.js\";\nimport { ORGX_HOSTED_MCP_URL } from \"../constants.js\";\nimport {\n inspectClaudeMcpConfig,\n inspectCodexConfigToml,\n inspectCursorMcpConfig,\n inspectVscodeMcpConfig,\n inspectWindsurfMcpConfig,\n inspectZedMcpConfig,\n patchClaudeMcpConfig,\n patchCodexConfigToml,\n patchCursorMcpConfig,\n patchVscodeMcpConfig,\n patchWindsurfMcpConfig,\n patchZedMcpConfig,\n removeClaudeMcpConfig,\n removeCodexConfigToml,\n removeCursorMcpConfig,\n removeVscodeMcpConfig,\n removeWindsurfMcpConfig,\n removeZedMcpConfig,\n} from \"./mcp-config.js\";\nimport {\n buildLocalMcpUrl,\n inspectOpenClawConfig,\n patchOpenClawConfig,\n removeOpenClawConfig,\n} from \"./openclaw-config.js\";\nimport {\n AUTOMATED_SURFACE_NAMES,\n MCP_SURFACE_NAMES,\n SURFACE_NAMES,\n type SurfaceMode,\n type SurfaceName,\n} from \"./names.js\";\nimport {\n detectSurface,\n getSurfaceLocator,\n type SurfaceDetection,\n} from \"./detection.js\";\n\nexport { SURFACE_NAMES } from \"./names.js\";\nexport type { SurfaceName } from \"./names.js\";\n\nexport interface SurfaceStatus {\n name: SurfaceName;\n mode: SurfaceMode;\n detected: boolean;\n configured: boolean;\n path?: string;\n details: string[];\n summary: string;\n}\n\nexport interface SurfaceMutationResult {\n name: SurfaceName;\n changed: boolean;\n path?: string;\n message: string;\n}\n\ntype SurfaceSelection<T extends string> = T | \"all\" | readonly (T | \"all\")[];\n\ninterface OpenClawDependencyState {\n detected: boolean;\n configured: boolean;\n path?: string;\n url?: string;\n}\n\nconst AUTH_SETUP_HINT = \"orgx-wizard auth login\";\nconst AUTH_SET_KEY_HINT = \"orgx-wizard auth set-key\";\nconst DOCTOR_HINT = \"orgx-wizard doctor\";\n\nfunction getSurfaceMode(name: SurfaceName): SurfaceMode {\n return AUTOMATED_SURFACE_NAMES.includes(name as (typeof AUTOMATED_SURFACE_NAMES)[number])\n ? \"automated\"\n : \"manual\";\n}\n\nfunction getSurfacePath(name: SurfaceName): string | undefined {\n const detection = detectSurface(name);\n const locator = getSurfaceLocator(name);\n const existingPath = detection.existingPath;\n\n if (existingPath && locator.configPaths.includes(existingPath)) {\n return existingPath;\n }\n\n return locator.configPaths[0] ?? detection.preferredPath ?? existingPath;\n}\n\nfunction getOpenClawDependencyState(): OpenClawDependencyState {\n const detection = detectSurface(\"openclaw\");\n const path = detection.existingPath ?? detection.preferredPath;\n const raw = path ? readTextIfExists(path) : null;\n const inspection = inspectOpenClawConfig(raw);\n\n const result: OpenClawDependencyState = {\n detected: detection.detected,\n configured: inspection.configured,\n };\n\n if (path) {\n result.path = path;\n }\n\n if (detection.detected) {\n result.url = buildLocalMcpUrl(raw);\n }\n\n return result;\n}\n\nfunction automatedSurfaceStatus(\n name: Extract<\n SurfaceName,\n \"claude\" | \"cursor\" | \"codex\" | \"openclaw\" | \"vscode\" | \"windsurf\" | \"zed\"\n >,\n): SurfaceStatus {\n const detection = detectSurface(name);\n const path = detection.existingPath ?? detection.preferredPath;\n const openclaw = getOpenClawDependencyState();\n\n if (name === \"claude\") {\n const inspection = inspectClaudeMcpConfig(path ? readTextIfExists(path) : null);\n const configured = inspection.hostedConfigured === true &&\n (openclaw.detected ? inspection.localConfigured === true : true);\n return {\n name,\n mode: \"automated\",\n detected: detection.detected,\n configured,\n ...(path ? { path } : {}),\n details: [\n ...inspection.details,\n ...(openclaw.detected\n ? [`OpenClaw bridge: ${openclaw.configured ? \"configured\" : \"detected but not configured\"}`]\n : [\"OpenClaw bridge: not detected; hosted OrgX is the only available route.\"]),\n ...detection.evidence,\n ],\n summary: configured\n ? openclaw.detected\n ? \"OrgX is connected in Claude with the local OpenClaw bridge.\"\n : \"OrgX cloud MCP is connected in Claude.\"\n : detection.detected\n ? openclaw.detected\n ? `Claude is missing either hosted OrgX or the local OpenClaw bridge (${openclaw.url ?? \"unknown\"}).`\n : \"Claude is missing the hosted OrgX MCP entry.\"\n : \"Claude config directory was not detected on disk.\",\n };\n }\n\n if (name === \"cursor\") {\n const inspection = inspectCursorMcpConfig(path ? readTextIfExists(path) : null);\n const configured = openclaw.detected && inspection.localConfigured === true;\n return {\n name,\n mode: \"automated\",\n detected: detection.detected,\n configured,\n ...(path ? { path } : {}),\n details: [\n ...inspection.details,\n ...(openclaw.detected\n ? [`OpenClaw bridge: ${openclaw.configured ? \"configured\" : \"detected but not configured\"}`]\n : [\"OpenClaw bridge: not detected; Cursor cannot use the local OrgX bridge yet.\"]),\n ...detection.evidence,\n ],\n summary: configured\n ? \"OrgX is connected in Cursor through the local OpenClaw bridge.\"\n : detection.detected\n ? openclaw.detected\n ? `Cursor is missing the local OrgX OpenClaw bridge (${openclaw.url ?? \"unknown\"}).`\n : \"Cursor is ready to wire, but OpenClaw must be installed first.\"\n : \"Cursor config directory was not detected on disk.\",\n };\n }\n\n if (name === \"codex\") {\n const inspection = inspectCodexConfigToml(path ? readTextIfExists(path) : null);\n const configured = inspection.hostedConfigured === true &&\n (openclaw.detected ? inspection.localConfigured === true : true);\n return {\n name,\n mode: \"automated\",\n detected: detection.detected,\n configured,\n ...(path ? { path } : {}),\n details: [\n ...inspection.details,\n ...(openclaw.detected\n ? [`OpenClaw bridge: ${openclaw.configured ? \"configured\" : \"detected but not configured\"}`]\n : [\"OpenClaw bridge: not detected; hosted OrgX is the only available route.\"]),\n ...detection.evidence,\n ],\n summary: configured\n ? openclaw.detected\n ? \"OrgX is connected in Codex with the local OpenClaw bridge.\"\n : \"OrgX cloud MCP is connected in Codex.\"\n : detection.detected\n ? openclaw.detected\n ? `Codex is missing either hosted OrgX or the local OpenClaw bridge (${openclaw.url ?? \"unknown\"}).`\n : \"Codex is missing the hosted OrgX MCP entry.\"\n : \"Codex config directory was not detected on disk.\",\n };\n }\n\n if (name === \"vscode\") {\n const inspection = inspectVscodeMcpConfig(path ? readTextIfExists(path) : null);\n return {\n name,\n mode: \"automated\",\n detected: detection.detected,\n configured: inspection.hostedConfigured === true,\n ...(path ? { path } : {}),\n details: [...inspection.details, ...detection.evidence],\n summary: inspection.hostedConfigured\n ? \"OrgX cloud MCP is connected in VS Code.\"\n : detection.detected\n ? \"VS Code is missing the hosted OrgX MCP entry.\"\n : \"VS Code config directory was not detected on disk.\",\n };\n }\n\n if (name === \"windsurf\") {\n const inspection = inspectWindsurfMcpConfig(path ? readTextIfExists(path) : null);\n return {\n name,\n mode: \"automated\",\n detected: detection.detected,\n configured: inspection.hostedConfigured === true,\n ...(path ? { path } : {}),\n details: [...inspection.details, ...detection.evidence],\n summary: inspection.hostedConfigured\n ? \"OrgX cloud MCP is connected in Windsurf.\"\n : detection.detected\n ? \"Windsurf is missing the hosted OrgX MCP entry.\"\n : \"Windsurf config directory was not detected on disk.\",\n };\n }\n\n if (name === \"zed\") {\n const inspection = inspectZedMcpConfig(path ? readTextIfExists(path) : null);\n return {\n name,\n mode: \"automated\",\n detected: detection.detected,\n configured: inspection.hostedConfigured === true,\n ...(path ? { path } : {}),\n details: [...inspection.details, ...detection.evidence],\n summary: inspection.hostedConfigured\n ? \"OrgX cloud MCP is connected in Zed.\"\n : detection.detected\n ? \"Zed is missing the hosted OrgX MCP entry.\"\n : \"Zed config directory was not detected on disk.\",\n };\n }\n\n const inspection = inspectOpenClawConfig(path ? readTextIfExists(path) : null);\n return {\n name,\n mode: \"automated\",\n detected: detection.detected,\n configured: inspection.configured,\n ...(path ? { path } : {}),\n details: [...inspection.details, ...detection.evidence],\n summary: inspection.configured\n ? `OpenClaw plugin entry ${inspection.pluginKey ?? \"missing\"} is configured.`\n : inspection.installed\n ? \"OpenClaw is installed but OrgX defaults have not been written.\"\n : detection.detected\n ? \"OpenClaw support files exist but no OrgX plugin entry was found.\"\n : \"OpenClaw is not installed or no support files were found.\",\n };\n}\n\nfunction formatAuthHintSource(authHint: OrgxAuthHint): string {\n switch (authHint.source) {\n case \"environment\":\n return \"env ORGX_API_KEY\";\n case \"wizard-store\":\n return \"wizard auth store\";\n case \"openclaw-config-file\":\n return \"openclaw config\";\n }\n}\n\nexport function buildChatgptManualStatus(\n detection: SurfaceDetection,\n authHint: OrgxAuthHint | null,\n): SurfaceStatus {\n const path = detection.existingPath ?? detection.preferredPath;\n\n const details = [...detection.evidence];\n if (authHint) {\n details.push(\n `OrgX auth ready via ${formatAuthHintSource(authHint)} (${authHint.keyPrefix})`,\n );\n details.push(`Hosted connector URL: ${ORGX_HOSTED_MCP_URL}`);\n details.push(\n \"Manual step: in ChatGPT desktop developer mode, add a custom connector pointing at the hosted OrgX MCP URL.\",\n );\n details.push(\n \"After connecting ChatGPT, run `orgx-wizard doctor` to verify hosted MCP tool access.\",\n );\n } else {\n details.push(\n \"OrgX auth is not configured yet. Run `orgx-wizard auth login` or `orgx-wizard auth set-key` first.\",\n );\n details.push(\n \"After auth is configured, add a custom ChatGPT developer connector pointing at the hosted OrgX MCP URL.\",\n );\n }\n\n let summary: string;\n if (!authHint) {\n summary = detection.detected\n ? \"ChatGPT is installed, but OrgX auth is not configured yet.\"\n : \"ChatGPT support files were not found; configure OrgX auth first, then add the hosted connector manually.\";\n } else {\n summary = detection.detected\n ? \"ChatGPT is installed; finish the manual developer connector setup.\"\n : \"OrgX auth is ready, but ChatGPT desktop support files were not found on disk.\";\n }\n\n return {\n name: \"chatgpt\",\n mode: \"manual\",\n detected: detection.detected,\n configured: false,\n ...(path ? { path } : {}),\n details,\n summary,\n };\n}\n\nexport function buildChatgptAddResult(\n path: string | undefined,\n authHint: OrgxAuthHint | null,\n toolCheck?: HostedMcpToolCheck,\n): SurfaceMutationResult {\n if (!authHint) {\n return {\n name: \"chatgpt\",\n changed: false,\n ...(path ? { path } : {}),\n message:\n `Run \\`${AUTH_SETUP_HINT}\\` or \\`${AUTH_SET_KEY_HINT}\\` first, then add ${ORGX_HOSTED_MCP_URL} as a custom connector in ChatGPT developer mode.`,\n };\n }\n\n if (!toolCheck || !toolCheck.ok) {\n const failure = toolCheck?.error ?? \"hosted MCP verification did not complete.\";\n return {\n name: \"chatgpt\",\n changed: false,\n ...(path ? { path } : {}),\n message:\n `OrgX auth is configured via ${formatAuthHintSource(authHint)}, but hosted MCP verification failed (${failure}). Fix that first, then add ${ORGX_HOSTED_MCP_URL} in ChatGPT developer mode.`,\n };\n }\n\n return {\n name: \"chatgpt\",\n changed: false,\n ...(path ? { path } : {}),\n message:\n `OrgX auth and hosted MCP access are verified. Add ${ORGX_HOSTED_MCP_URL} as a custom connector in ChatGPT developer mode, then run \\`${DOCTOR_HINT}\\` to confirm \\`${toolCheck.toolName}\\`.`,\n };\n}\n\nexport function buildChatgptRemoveResult(path: string | undefined): SurfaceMutationResult {\n return {\n name: \"chatgpt\",\n changed: false,\n ...(path ? { path } : {}),\n message:\n \"Remove the custom OrgX connector from ChatGPT developer mode; the wizard does not manage ChatGPT config files directly.\",\n };\n}\n\nfunction manualSurfaceStatus(name: Extract<SurfaceName, \"chatgpt\">): SurfaceStatus {\n const detection = detectSurface(name);\n\n switch (name) {\n case \"chatgpt\":\n return buildChatgptManualStatus(detection, peekResolvedOrgxAuth());\n }\n}\n\nfunction getSurfaceStatus(name: SurfaceName): SurfaceStatus {\n if (AUTOMATED_SURFACE_NAMES.includes(name as (typeof AUTOMATED_SURFACE_NAMES)[number])) {\n return automatedSurfaceStatus(\n name as Extract<\n SurfaceName,\n \"claude\" | \"cursor\" | \"codex\" | \"openclaw\" | \"vscode\" | \"windsurf\" | \"zed\"\n >,\n );\n }\n\n return manualSurfaceStatus(name as Extract<SurfaceName, \"chatgpt\">);\n}\n\nexport function listSurfaceStatuses(): SurfaceStatus[] {\n return SURFACE_NAMES.map(getSurfaceStatus);\n}\n\nfunction resolveTargets<T extends string>(\n selection: SurfaceSelection<T>,\n allTargets: readonly T[],\n): T[] {\n const values = Array.isArray(selection) ? selection : [selection];\n\n if (values.includes(\"all\")) {\n return [...allTargets];\n }\n\n return [...new Set(values)] as T[];\n}\n\nexport function resolveSurfaceSelection(\n selection: SurfaceSelection<SurfaceName>,\n): SurfaceName[] {\n return resolveTargets(selection, SURFACE_NAMES);\n}\n\nexport function resolveMcpSurfaceSelection(\n selection: SurfaceSelection<(typeof MCP_SURFACE_NAMES)[number]>,\n): Array<(typeof MCP_SURFACE_NAMES)[number]> {\n return resolveTargets(selection, MCP_SURFACE_NAMES);\n}\n\nasync function addAutomatedSurface(name: SurfaceName): Promise<SurfaceMutationResult> {\n const path = getSurfacePath(name);\n const openclaw = getOpenClawDependencyState();\n\n if (!path) {\n return {\n name,\n changed: false,\n message: `${name} has no writable config path on this platform.`,\n };\n }\n\n switch (name) {\n case \"claude\": {\n const previous = readTextIfExists(path);\n const next = patchClaudeMcpConfig(previous, openclaw.url);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: openclaw.detected\n ? \"OrgX is connected in Claude with the local OpenClaw bridge.\"\n : \"OrgX cloud MCP is connected in Claude.\",\n };\n }\n case \"cursor\": {\n if (!openclaw.detected || !openclaw.url) {\n return {\n name,\n changed: false,\n path,\n message: \"Cursor needs OpenClaw installed before OrgX can be connected locally.\",\n };\n }\n const previous = readTextIfExists(path);\n const next = patchCursorMcpConfig(previous, openclaw.url);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: \"OrgX is connected in Cursor through the local OpenClaw bridge.\",\n };\n }\n case \"codex\": {\n const previous = readTextIfExists(path);\n const next = patchCodexConfigToml(previous, openclaw.url);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: openclaw.detected\n ? \"OrgX is connected in Codex with the local OpenClaw bridge.\"\n : \"OrgX cloud MCP is connected in Codex.\",\n };\n }\n case \"openclaw\": {\n const previous = readTextIfExists(path);\n const auth = await resolveOrgxAuth();\n const next = patchOpenClawConfig(previous, auth ?? {});\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: auth\n ? \"OpenClaw is configured as the local OrgX bridge with the resolved OrgX auth.\"\n : \"OpenClaw is configured as the local OrgX bridge.\",\n };\n }\n case \"vscode\": {\n const previous = readTextIfExists(path);\n if (inspectVscodeMcpConfig(previous).hostedConfigured) {\n return { name, changed: false, path, message: \"OrgX cloud MCP is connected in VS Code.\" };\n }\n const next = patchVscodeMcpConfig(previous);\n writeTextFile(path, next);\n return { name, changed: true, path, message: \"OrgX cloud MCP is connected in VS Code.\" };\n }\n case \"windsurf\": {\n const previous = readTextIfExists(path);\n if (inspectWindsurfMcpConfig(previous).hostedConfigured) {\n return { name, changed: false, path, message: \"OrgX cloud MCP is connected in Windsurf.\" };\n }\n const next = patchWindsurfMcpConfig(previous);\n writeTextFile(path, next);\n return { name, changed: true, path, message: \"OrgX cloud MCP is connected in Windsurf.\" };\n }\n case \"zed\": {\n const previous = readTextIfExists(path);\n if (inspectZedMcpConfig(previous).hostedConfigured) {\n return { name, changed: false, path, message: \"OrgX cloud MCP is connected in Zed.\" };\n }\n const next = patchZedMcpConfig(previous);\n writeTextFile(path, next);\n return { name, changed: true, path, message: \"OrgX cloud MCP is connected in Zed.\" };\n }\n case \"chatgpt\": {\n const authHint = peekResolvedOrgxAuth();\n if (!authHint) {\n return buildChatgptAddResult(path, null);\n }\n const toolCheck = await checkHostedMcpToolAccess();\n return buildChatgptAddResult(path, authHint, toolCheck);\n }\n default:\n return {\n name,\n changed: false,\n message: `${name} is not supported by the wizard.`,\n };\n }\n}\n\nfunction removeAutomatedSurface(name: SurfaceName): SurfaceMutationResult {\n const path = getSurfacePath(name);\n\n if (!path) {\n return {\n name,\n changed: false,\n message: `${name} has no writable config path on this platform.`,\n };\n }\n\n switch (name) {\n case \"claude\": {\n const previous = readTextIfExists(path);\n const next = removeClaudeMcpConfig(previous);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: \"OrgX connection was removed from Claude.\",\n };\n }\n case \"cursor\": {\n const previous = readTextIfExists(path);\n const next = removeCursorMcpConfig(previous);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: \"OrgX connection was removed from Cursor.\",\n };\n }\n case \"codex\": {\n const previous = readTextIfExists(path);\n const next = removeCodexConfigToml(previous);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: \"OrgX connection was removed from Codex.\",\n };\n }\n case \"openclaw\": {\n const previous = readTextIfExists(path);\n const next = removeOpenClawConfig(previous);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: \"OpenClaw OrgX defaults were removed.\",\n };\n }\n case \"vscode\": {\n const previous = readTextIfExists(path);\n const next = removeVscodeMcpConfig(previous);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: \"OrgX connection was removed from VS Code.\",\n };\n }\n case \"windsurf\": {\n const previous = readTextIfExists(path);\n const next = removeWindsurfMcpConfig(previous);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: \"OrgX connection was removed from Windsurf.\",\n };\n }\n case \"zed\": {\n const previous = readTextIfExists(path);\n const next = removeZedMcpConfig(previous);\n writeTextFile(path, next);\n return {\n name,\n changed: previous !== next,\n path,\n message: \"OrgX connection was removed from Zed.\",\n };\n }\n case \"chatgpt\":\n return buildChatgptRemoveResult(path);\n default:\n return {\n name,\n changed: false,\n message: `${name} is not supported by the wizard.`,\n };\n }\n}\n\nexport async function addSurface(\n selection: SurfaceSelection<SurfaceName>,\n): Promise<SurfaceMutationResult[]> {\n const targets = resolveSurfaceSelection(selection);\n const results: SurfaceMutationResult[] = [];\n\n for (const surface of targets) {\n results.push(await addAutomatedSurface(surface));\n }\n\n return results;\n}\n\nexport function removeSurface(selection: SurfaceSelection<SurfaceName>): SurfaceMutationResult[] {\n const targets = resolveSurfaceSelection(selection);\n return targets.map((surface) => removeAutomatedSurface(surface));\n}\n\nexport async function addMcpSurface(\n selection: SurfaceSelection<(typeof MCP_SURFACE_NAMES)[number]>,\n): Promise<SurfaceMutationResult[]> {\n const targets = resolveMcpSurfaceSelection(selection);\n const results: SurfaceMutationResult[] = [];\n\n for (const surface of targets) {\n results.push(await addAutomatedSurface(surface));\n }\n\n return results;\n}\n\nexport function removeMcpSurface(\n selection: SurfaceSelection<(typeof MCP_SURFACE_NAMES)[number]>,\n): SurfaceMutationResult[] {\n const targets = resolveMcpSurfaceSelection(selection);\n return targets.map((surface) => removeAutomatedSurface(surface));\n}\n\nexport async function setupDetectedSurfaces(): Promise<SurfaceMutationResult[]> {\n const targets = AUTOMATED_SURFACE_NAMES.filter((name) => getSurfaceStatus(name).detected);\n\n targets.sort((left, right) => {\n if (left === \"openclaw\") return -1;\n if (right === \"openclaw\") return 1;\n return 0;\n });\n\n const results: SurfaceMutationResult[] = [];\n\n for (const name of targets) {\n results.push(await addAutomatedSurface(name));\n }\n\n return results;\n}\n\nexport interface DoctorReport {\n surfaces: SurfaceStatus[];\n auth: OrgxAuthCheckResult;\n hostedMcp: HostedMcpHealthCheck;\n hostedMcpTool: HostedMcpToolCheck;\n npmRegistry: NpmRegistryCheck;\n workspace: WorkspaceConnectivityCheck;\n openclaw: OpenClawHealthCheck;\n}\n\nexport interface DoctorAssessmentIssue {\n level: \"error\" | \"warning\";\n title: string;\n suggestion: string;\n}\n\nexport interface DoctorAssessment {\n ok: boolean;\n issues: DoctorAssessmentIssue[];\n}\n\nfunction skippedOpenClawHealth(): OpenClawHealthCheck {\n return {\n ok: false,\n skipped: true,\n method: \"none\",\n error: \"OpenClaw support files were not detected; skipping gateway health check.\",\n details: [],\n };\n}\n\nexport async function runDoctor(): Promise<DoctorReport> {\n const surfaces = listSurfaceStatuses();\n const openclawSurface = surfaces.find((surface) => surface.name === \"openclaw\");\n const auth = await checkOrgxAuth();\n const hostedMcp = await checkHostedMcpHealth();\n const hostedMcpTool = await checkHostedMcpToolAccess();\n const npmRegistry = await checkNpmRegistryHealth();\n const workspace = await checkWorkspaceConnectivity();\n const openclaw = openclawSurface?.detected\n ? await checkOpenClawHealth(openclawSurface.path)\n : skippedOpenClawHealth();\n return { surfaces, auth, hostedMcp, hostedMcpTool, npmRegistry, workspace, openclaw };\n}\n\nexport function assessDoctorReport(report: DoctorReport): DoctorAssessment {\n const issues: DoctorAssessmentIssue[] = [];\n\n if (!report.hostedMcp.ok) {\n issues.push({\n level: \"error\",\n title: \"Hosted OrgX MCP is unreachable.\",\n suggestion:\n \"Retry later or verify https://mcp.useorgx.com/health. Hosted-only clients will stay broken until that endpoint recovers.\",\n });\n }\n\n if (\n report.hostedMcp.ok &&\n report.hostedMcpTool.configured &&\n !report.hostedMcpTool.ok &&\n !report.hostedMcpTool.skipped\n ) {\n issues.push({\n level: \"error\",\n title: `Hosted OrgX MCP tool verification failed (${report.hostedMcpTool.toolName}).`,\n suggestion:\n \"Re-run `wizard auth login` to refresh the per-user key, then retry `wizard doctor` to confirm the hosted MCP can initialize and execute tools.\",\n });\n }\n\n if (report.auth.configured && !report.auth.ok && !report.auth.skipped) {\n issues.push({\n level: \"error\",\n title: \"OrgX user auth could not be verified.\",\n suggestion:\n \"Run `wizard auth set-key <oxk_...>` again or correct the resolved ORGX_API_KEY / base URL before retrying.\",\n });\n }\n\n if (report.workspace.configured && !report.workspace.ok) {\n issues.push({\n level: \"error\",\n title: \"Current workspace lookup failed.\",\n suggestion:\n \"Verify the resolved OrgX base URL and that the authenticated user still has access to a workspace.\",\n });\n }\n\n if (!report.npmRegistry.reachable) {\n issues.push({\n level: \"warning\",\n title: \"npm registry is unreachable.\",\n suggestion:\n \"Check outbound network access to https://registry.npmjs.org before relying on npm-based installation flows.\",\n });\n } else if (!report.npmRegistry.published) {\n issues.push({\n level: \"warning\",\n title: `${report.npmRegistry.packageName} is not published on npm yet.`,\n suggestion:\n \"This is expected before launch. Publish the package in the release workstream before asking users to install from npm.\",\n });\n }\n\n if (!report.openclaw.skipped && !report.openclaw.ok) {\n issues.push({\n level: \"warning\",\n title: \"OpenClaw is installed but its local gateway health check failed.\",\n suggestion:\n \"Run `openclaw doctor` or `openclaw doctor --repair` before relying on local bridge clients like Cursor.\",\n });\n }\n\n return {\n ok: !issues.some((issue) => issue.level === \"error\"),\n issues,\n };\n}\n","import { listSurfaceStatuses, type SurfaceStatus } from \"../surfaces/registry.js\";\nimport type { SurfaceName } from \"../surfaces/names.js\";\nimport type { OrgxWorkspace } from \"./workspaces.js\";\nimport {\n updateWizardState,\n type WizardContinuityDefaults,\n type WizardStateRecord,\n} from \"./wizard-state.js\";\n\nconst REVIEW_SURFACE_ORDER: SurfaceName[] = [\n \"claude\",\n \"cursor\",\n \"codex\",\n \"vscode\",\n \"windsurf\",\n \"zed\",\n \"chatgpt\",\n];\n\nexport interface ContinuitySeed {\n executionMode?: \"cloud\" | \"local\" | null;\n statuses?: SurfaceStatus[];\n workspace?: Pick<OrgxWorkspace, \"id\" | \"name\"> | null;\n workspaceName?: string | null;\n}\n\nfunction selectReviewSurface(statuses: SurfaceStatus[]): SurfaceName | undefined {\n for (const name of REVIEW_SURFACE_ORDER) {\n const configured = statuses.find((status) => status.name === name && status.configured);\n if (configured) {\n return configured.name;\n }\n }\n\n for (const name of REVIEW_SURFACE_ORDER) {\n const detected = statuses.find((status) => status.name === name && status.detected);\n if (detected) {\n return detected.name;\n }\n }\n\n return undefined;\n}\n\nfunction inferExecutionMode(\n explicitMode: \"cloud\" | \"local\" | null | undefined,\n statuses: SurfaceStatus[],\n): \"cloud\" | \"local\" | undefined {\n if (explicitMode) {\n return explicitMode;\n }\n\n const openclaw = statuses.find((status) => status.name === \"openclaw\");\n if (openclaw?.configured || openclaw?.detected) {\n return \"local\";\n }\n\n const hostedSurface = statuses.find(\n (status) => status.name !== \"openclaw\" && (status.configured || status.detected),\n );\n\n return hostedSurface ? \"cloud\" : undefined;\n}\n\nexport function inferContinuityDefaults(seed: ContinuitySeed = {}): WizardContinuityDefaults {\n const statuses = seed.statuses ?? listSurfaceStatuses();\n const continuity: WizardContinuityDefaults = {};\n\n const reviewSurface = selectReviewSurface(statuses);\n if (reviewSurface) {\n continuity.reviewSurface = reviewSurface;\n }\n\n const executionMode = inferExecutionMode(seed.executionMode, statuses);\n if (executionMode) {\n continuity.executionMode = executionMode;\n }\n\n if (seed.workspace?.id) {\n continuity.workspaceId = seed.workspace.id;\n }\n\n const workspaceName = seed.workspace?.name ?? seed.workspaceName ?? undefined;\n if (workspaceName?.trim()) {\n continuity.workspaceName = workspaceName.trim();\n }\n\n return continuity;\n}\n\nfunction mergeContinuityDefaults(\n current: WizardContinuityDefaults | undefined,\n next: WizardContinuityDefaults,\n): WizardContinuityDefaults {\n return {\n ...(current ?? {}),\n ...next,\n };\n}\n\nexport function persistContinuityDefaults(\n seed: ContinuitySeed = {},\n statePath?: string,\n): WizardStateRecord {\n const next = inferContinuityDefaults(seed);\n\n return updateWizardState(\n (current) => ({\n ...current,\n continuity: mergeContinuityDefaults(current.continuity, next),\n }),\n statePath,\n );\n}\n","import {\n buildOrgxApiUrl,\n normalizeOrgxBaseUrl,\n resolveOrgxAuth,\n type ResolveOrgxAuthOptions,\n} from \"./auth.js\";\nimport { isRecord } from \"./fs.js\";\nimport type { OrgxWorkspace } from \"./workspaces.js\";\nimport {\n readWizardState,\n updateWizardState,\n type WizardDemoInitiativeRecord,\n type WizardOnboardingTaskRecord,\n} from \"./wizard-state.js\";\n\nconst FOUNDER_DEMO_INITIATIVE_TITLE = \"Founder Demo Initiative\";\nconst FOUNDER_DEMO_INITIATIVE_SUMMARY =\n \"Starter initiative created by @useorgx/wizard to validate workspace routing, live views, and the default OrgX skill pack.\";\nconst FOUNDER_DEMO_DECISION_TITLE = \"Approve founder demo workspace\";\nconst FOUNDER_DEMO_DECISION_SUMMARY =\n \"Initial decision created by @useorgx/wizard so the founder preset leaves the workspace with a resolved approval trail.\";\nconst FOUNDER_DEMO_DECISION_RESOLUTION =\n \"Approved automatically by @useorgx/wizard after the founder preset finished creating the live demo workspace.\";\nconst FOUNDER_DEMO_ARTIFACT_NAME = \"Founder Demo Live View\";\nconst FOUNDER_DEMO_ARTIFACT_TYPE = \"document\";\nconst FOUNDER_DEMO_ARTIFACT_DESCRIPTION =\n \"Live founder demo generated by @useorgx/wizard after workspace bootstrap completed.\";\nexport const ONBOARDING_TASK_TITLE = \"Complete OrgX onboarding\";\nexport const ONBOARDING_TASK_SUMMARY =\n \"Starter onboarding task created by @useorgx/wizard so the first workspace has a clear follow-up after setup.\";\n\nexport interface OrgxInitiative {\n id: string;\n summary?: string;\n title: string;\n}\n\nexport interface OrgxDecision {\n id: string;\n status?: string;\n summary?: string;\n title: string;\n}\n\nexport interface OrgxArtifact {\n id: string;\n name: string;\n type?: string;\n url?: string;\n}\n\nexport interface OrgxTask {\n id: string;\n status?: string;\n summary?: string;\n title: string;\n}\n\nexport interface FounderDemoInitiativeResult {\n created: boolean;\n artifact: OrgxArtifact;\n decision: OrgxDecision;\n initiative: OrgxInitiative;\n liveUrl: string;\n}\n\ninterface InitiativeClientOptions extends ResolveOrgxAuthOptions {\n statePath?: string;\n}\n\nfunction parseResponseBody(text: string): unknown {\n if (!text) {\n return null;\n }\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction formatHttpError(status: number, body: unknown): string {\n if (typeof body === \"string\" && body.trim().length > 0) {\n return `HTTP ${status}: ${body}`;\n }\n\n if (isRecord(body) && typeof body.error === \"string\" && body.error.trim().length > 0) {\n return `HTTP ${status}: ${body.error}`;\n }\n\n return `HTTP ${status}`;\n}\n\nfunction extractEntity(payload: unknown): Record<string, unknown> {\n const entity = isRecord(payload) && isRecord(payload.data) ? payload.data : payload;\n if (!isRecord(entity)) {\n throw new Error(\"OrgX returned an unexpected entity payload.\");\n }\n\n return entity;\n}\n\nfunction parseInitiative(payload: unknown): OrgxInitiative {\n const entity = extractEntity(payload);\n\n const id = typeof entity.id === \"string\" ? entity.id.trim() : \"\";\n const title = typeof entity.title === \"string\"\n ? entity.title.trim()\n : typeof entity.name === \"string\"\n ? entity.name.trim()\n : \"\";\n\n if (!id || !title) {\n throw new Error(\"OrgX returned an incomplete initiative payload.\");\n }\n\n return {\n id,\n title,\n ...(typeof entity.summary === \"string\" && entity.summary.trim().length > 0\n ? { summary: entity.summary.trim() }\n : {}),\n };\n}\n\nfunction parseDecision(payload: unknown): OrgxDecision {\n const entity = extractEntity(payload);\n const id = typeof entity.id === \"string\" ? entity.id.trim() : \"\";\n const title = typeof entity.title === \"string\"\n ? entity.title.trim()\n : typeof entity.name === \"string\"\n ? entity.name.trim()\n : \"\";\n\n if (!id || !title) {\n throw new Error(\"OrgX returned an incomplete decision payload.\");\n }\n\n return {\n id,\n title,\n ...(typeof entity.status === \"string\" && entity.status.trim().length > 0\n ? { status: entity.status.trim() }\n : {}),\n ...(typeof entity.summary === \"string\" && entity.summary.trim().length > 0\n ? { summary: entity.summary.trim() }\n : {}),\n };\n}\n\nfunction parseArtifact(payload: unknown): OrgxArtifact {\n const entity = extractEntity(payload);\n const id = typeof entity.id === \"string\" ? entity.id.trim() : \"\";\n const name = typeof entity.name === \"string\"\n ? entity.name.trim()\n : typeof entity.title === \"string\"\n ? entity.title.trim()\n : \"\";\n const type = typeof entity.artifact_type === \"string\"\n ? entity.artifact_type.trim()\n : typeof entity.type === \"string\"\n ? entity.type.trim()\n : \"\";\n const url = typeof entity.external_url === \"string\"\n ? entity.external_url.trim()\n : typeof entity.url === \"string\"\n ? entity.url.trim()\n : \"\";\n\n if (!id || !name) {\n throw new Error(\"OrgX returned an incomplete artifact payload.\");\n }\n\n return {\n id,\n name,\n ...(type ? { type } : {}),\n ...(url ? { url } : {}),\n };\n}\n\nfunction parseTask(payload: unknown): OrgxTask {\n const entity = extractEntity(payload);\n const id = typeof entity.id === \"string\" ? entity.id.trim() : \"\";\n const title = typeof entity.title === \"string\"\n ? entity.title.trim()\n : typeof entity.name === \"string\"\n ? entity.name.trim()\n : \"\";\n\n if (!id || !title) {\n throw new Error(\"OrgX returned an incomplete task payload.\");\n }\n\n return {\n id,\n title,\n ...(typeof entity.status === \"string\" && entity.status.trim().length > 0\n ? { status: entity.status.trim() }\n : {}),\n ...(typeof entity.summary === \"string\" && entity.summary.trim().length > 0\n ? { summary: entity.summary.trim() }\n : {}),\n };\n}\n\nfunction toDemoInitiativeRecord(\n artifact: OrgxArtifact,\n decision: OrgxDecision,\n initiative: OrgxInitiative,\n liveUrl: string,\n workspace: Pick<OrgxWorkspace, \"id\" | \"name\">,\n): WizardDemoInitiativeRecord {\n return {\n createdAt: new Date().toISOString(),\n artifactId: artifact.id,\n artifactName: artifact.name,\n ...(artifact.type ? { artifactType: artifact.type } : {}),\n ...(artifact.url ? { artifactUrl: artifact.url } : {}),\n decisionId: decision.id,\n ...(decision.status ? { decisionStatus: decision.status } : {}),\n decisionTitle: decision.title,\n id: initiative.id,\n liveUrl,\n title: initiative.title,\n workspaceId: workspace.id,\n workspaceName: workspace.name,\n };\n}\n\nfunction toOnboardingTaskRecord(\n task: OrgxTask,\n workspace: Pick<OrgxWorkspace, \"id\" | \"name\">,\n initiativeId?: string,\n): WizardOnboardingTaskRecord {\n return {\n createdAt: new Date().toISOString(),\n id: task.id,\n ...(initiativeId ? { initiativeId } : {}),\n ...(task.status ? { status: task.status } : {}),\n title: task.title,\n workspaceId: workspace.id,\n workspaceName: workspace.name,\n };\n}\n\nasync function requireOrgxAuth(options: InitiativeClientOptions = {}) {\n const auth = await resolveOrgxAuth(options);\n if (!auth) {\n throw new Error(\n \"No OrgX API key configured. Run `wizard auth login` or `wizard auth set-key <oxk_...>` first.\",\n );\n }\n\n return auth;\n}\n\nasync function createEntity<T>(\n type: string,\n body: Record<string, unknown>,\n parse: (payload: unknown) => T,\n options: InitiativeClientOptions = {},\n): Promise<T> {\n const auth = await requireOrgxAuth(options);\n const response = await fetch(buildOrgxApiUrl(\"/entities\", auth.baseUrl), {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${auth.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n type,\n ...body,\n }),\n signal: AbortSignal.timeout(7_000),\n });\n\n const responseBody = parseResponseBody(await response.text());\n if (!response.ok) {\n throw new Error(`Failed to create ${type}. ${formatHttpError(response.status, responseBody)}`);\n }\n\n return parse(responseBody);\n}\n\nasync function updateEntity<T>(\n type: string,\n id: string,\n body: Record<string, unknown>,\n parse: (payload: unknown) => T,\n options: InitiativeClientOptions = {},\n): Promise<T> {\n const auth = await requireOrgxAuth(options);\n const response = await fetch(buildOrgxApiUrl(\"/entities\", auth.baseUrl), {\n method: \"PATCH\",\n headers: {\n Authorization: `Bearer ${auth.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n type,\n id,\n ...body,\n }),\n signal: AbortSignal.timeout(7_000),\n });\n\n const responseBody = parseResponseBody(await response.text());\n if (!response.ok) {\n throw new Error(`Failed to update ${type}. ${formatHttpError(response.status, responseBody)}`);\n }\n\n return parse(responseBody);\n}\n\nfunction buildLiveUrl(baseUrl: string, initiativeId: string): string {\n const parsed = new URL(normalizeOrgxBaseUrl(baseUrl));\n if (parsed.protocol === \"https:\" && parsed.hostname === \"useorgx.com\") {\n parsed.hostname = \"www.useorgx.com\";\n }\n parsed.pathname = `/live/${initiativeId}`;\n parsed.search = \"\";\n parsed.hash = \"\";\n return parsed.toString();\n}\n\nasync function createFounderDemoDecision(\n initiative: OrgxInitiative,\n workspaceId: string,\n options: InitiativeClientOptions = {},\n): Promise<OrgxDecision> {\n return createEntity(\n \"decision\",\n {\n initiative_id: initiative.id,\n summary: FOUNDER_DEMO_DECISION_SUMMARY,\n title: FOUNDER_DEMO_DECISION_TITLE,\n workspace_id: workspaceId,\n },\n parseDecision,\n options,\n );\n}\n\nasync function approveFounderDemoDecision(\n decisionId: string,\n options: InitiativeClientOptions = {},\n): Promise<OrgxDecision> {\n return updateEntity(\n \"decision\",\n decisionId,\n {\n resolution_summary: FOUNDER_DEMO_DECISION_RESOLUTION,\n status: \"approved\",\n },\n parseDecision,\n options,\n );\n}\n\nasync function createFounderDemoArtifact(\n initiative: OrgxInitiative,\n liveUrl: string,\n workspaceId: string,\n options: InitiativeClientOptions = {},\n): Promise<OrgxArtifact> {\n return createEntity(\n \"artifact\",\n {\n artifact_type: FOUNDER_DEMO_ARTIFACT_TYPE,\n description: FOUNDER_DEMO_ARTIFACT_DESCRIPTION,\n entity_id: initiative.id,\n entity_type: \"initiative\",\n external_url: liveUrl,\n initiative_id: initiative.id,\n name: FOUNDER_DEMO_ARTIFACT_NAME,\n workspace_id: workspaceId,\n },\n parseArtifact,\n options,\n );\n}\n\nexport async function createInitiative(\n input: {\n summary?: string;\n title: string;\n workspaceId?: string;\n },\n options: InitiativeClientOptions = {},\n): Promise<OrgxInitiative> {\n const title = input.title.trim();\n if (!title) {\n throw new Error(\"Initiative title is required.\");\n }\n\n return createEntity(\n \"initiative\",\n {\n title,\n status: \"active\",\n ...(input.summary?.trim() ? { summary: input.summary.trim() } : {}),\n ...(input.workspaceId?.trim() ? { workspace_id: input.workspaceId.trim() } : {}),\n },\n parseInitiative,\n options,\n );\n}\n\nexport async function ensureFounderDemoInitiative(\n workspace: Pick<OrgxWorkspace, \"id\" | \"name\">,\n options: InitiativeClientOptions = {},\n): Promise<FounderDemoInitiativeResult> {\n const existingRecord = readWizardState(options.statePath)?.demoInitiative;\n const matchingRecord = existingRecord?.workspaceId === workspace.id ? existingRecord : undefined;\n const auth = await requireOrgxAuth(options);\n\n const initiative = matchingRecord\n ? {\n id: matchingRecord.id,\n title: matchingRecord.title,\n }\n : await createInitiative(\n {\n title: FOUNDER_DEMO_INITIATIVE_TITLE,\n summary: FOUNDER_DEMO_INITIATIVE_SUMMARY,\n workspaceId: workspace.id,\n },\n options,\n );\n const liveUrl = matchingRecord?.liveUrl || buildLiveUrl(auth.baseUrl, initiative.id);\n const decision = matchingRecord?.decisionId\n ? matchingRecord.decisionStatus === \"approved\" && matchingRecord.decisionTitle\n ? {\n id: matchingRecord.decisionId,\n status: matchingRecord.decisionStatus,\n title: matchingRecord.decisionTitle,\n }\n : await approveFounderDemoDecision(matchingRecord.decisionId, options)\n : await approveFounderDemoDecision(\n (\n await createFounderDemoDecision(initiative, workspace.id, options)\n ).id,\n options,\n );\n const artifact = matchingRecord?.artifactId && matchingRecord.artifactName\n ? {\n id: matchingRecord.artifactId,\n name: matchingRecord.artifactName,\n ...(matchingRecord.artifactType ? { type: matchingRecord.artifactType } : {}),\n ...(matchingRecord.artifactUrl ? { url: matchingRecord.artifactUrl } : {}),\n }\n : await createFounderDemoArtifact(initiative, liveUrl, workspace.id, options);\n const record = toDemoInitiativeRecord(artifact, decision, initiative, liveUrl, workspace);\n\n updateWizardState(\n (current) => ({\n ...current,\n demoInitiative: record,\n }),\n options.statePath,\n );\n\n return {\n artifact,\n created: !matchingRecord,\n decision,\n initiative,\n liveUrl,\n };\n}\n\nexport async function ensureOnboardingTask(\n workspace: Pick<OrgxWorkspace, \"id\" | \"name\">,\n options: InitiativeClientOptions & { initiativeId?: string } = {},\n): Promise<OrgxTask> {\n const existingRecord = readWizardState(options.statePath)?.onboardingTask;\n if (existingRecord?.workspaceId === workspace.id) {\n return {\n id: existingRecord.id,\n title: existingRecord.title,\n ...(existingRecord.status ? { status: existingRecord.status } : {}),\n };\n }\n\n const task = await createEntity(\n \"task\",\n {\n status: \"todo\",\n summary: ONBOARDING_TASK_SUMMARY,\n title: ONBOARDING_TASK_TITLE,\n workspace_id: workspace.id,\n ...(options.initiativeId ? { initiative_id: options.initiativeId } : {}),\n },\n parseTask,\n options,\n );\n\n updateWizardState(\n (current) => ({\n ...current,\n onboardingTask: toOnboardingTaskRecord(task, workspace, options.initiativeId),\n }),\n options.statePath,\n );\n\n return task;\n}\n","import { join } from \"node:path\";\n\nimport {\n CLAUDE_ORGX_SKILL_PATH,\n CLAUDE_SKILLS_DIR,\n CURSOR_ORGX_RULE_PATH,\n} from \"../constants.js\";\nimport { readTextIfExists, writeTextFile } from \"./fs.js\";\nimport type { OrgxPluginTarget } from \"./plugins.js\";\n\nexport const DEFAULT_ORGX_SKILL_PACKS = [\n \"morning-briefing\",\n \"initiative-kickoff\",\n \"bulk-create\",\n \"nightly-recap\",\n] as const;\nexport const PLUGIN_MANAGED_SKILL_TARGETS = [\"claude\", \"codex\"] as const;\n\n// Directory entries in the useorgx/skills repo root that are not skill packs.\nconst EXCLUDED_PACK_DIRS = new Set([\".github\", \"scripts\"]);\n\nconst ORGX_SKILLS_OWNER = \"useorgx\";\nconst ORGX_SKILLS_REPO = \"skills\";\nconst ORGX_SKILLS_REF = \"main\";\n\nexport interface ManagedFileWrite {\n label: string;\n path: string;\n changed: boolean;\n sourceUrl?: string;\n}\n\nexport interface InstalledSkillPack {\n name: string;\n files: ManagedFileWrite[];\n}\n\nexport interface SkillsInstallReport {\n writes: ManagedFileWrite[];\n packs: InstalledSkillPack[];\n notes: string[];\n}\n\nexport interface InstallOrgxSkillsOptions {\n skillNames?: readonly string[];\n claudeSkillsDir?: string;\n claudeOrgxSkillPath?: string;\n cursorRulePath?: string;\n fetchImpl?: typeof fetch;\n pluginTargets?: readonly string[];\n ref?: string;\n}\n\nexport interface OrgxSkillsInstallPlan {\n installClaudeSkillBootstrap: boolean;\n installClaudeSkillPacks: boolean;\n notes: string[];\n pluginManagedTargets: OrgxPluginTarget[];\n}\n\ninterface GithubDirectoryEntry {\n name: string;\n path: string;\n type: \"file\" | \"dir\";\n download_url: string | null;\n}\n\ninterface RemoteSkillFile {\n path: string;\n sourceUrl: string;\n}\n\nconst CURSOR_RULES_CONTENT = `# OrgX Rules\n\n- Prefer \\`workspace_id\\` on OrgX tool calls. \\`command_center_id\\` is a deprecated alias and should only be used for backwards compatibility. If both are present, they must match.\n- Treat \\`entity_action\\` with \\`force: true\\` as an escape hatch. It bypasses hierarchy and proof checks, so only use it when the user explicitly wants that behavior and say why.\n- Treat \\`scaffold_initiative continue_on_error\\` as best-effort creation. Use it only when partial scaffolds are acceptable, and follow up on any failed children.\n- Preserve \\`_context\\` when widget or app-rendering flows depend on client, conversation, session, or user metadata. Do not strip or rename it.\n- Prefer \\`list_entities\\` for pending approvals and state inspection before reaching for legacy aliases.\n- Keep hosted OrgX MCP calls distinct from local OpenClaw/plugin surfaces before mutating config or entity state.\n- Artifact proof must use durable sources: GitHub PR/commit/blob permalinks, published/public URLs, or absolute file paths / \\`file://...\\`.\n- Never use OrgX wrapper pages like \\`/live/...\\`, \\`/artifacts/...\\`, or \\`/console/...\\` as proof links. \\`preview_markdown\\` is supplemental, not proof.\n`;\n\nconst CLAUDE_ORGX_SKILL_CONTENT = `---\nname: orgx\ndescription: Use when working against the hosted OrgX MCP server for workspace-scoped planning, entity mutations, progress reporting, and decision handling.\nversion: 1.0.0\nuser-invocable: true\ntags:\n - orchestration\n - productivity\n - workspace\n---\n\n# OrgX Hosted MCP\n\nUse this skill when Claude is connected to the hosted OrgX MCP server at \\`https://mcp.useorgx.com/mcp\\`.\n\nThis skill is for the hosted OrgX tool surface, not the local OpenClaw plugin. Keep those surfaces distinct before mutating config or entity state.\n\n## Operating Rules\n\n- Prefer \\`workspace_id\\` on OrgX tools. \\`command_center_id\\` is a deprecated alias kept for compatibility.\n- Treat \\`entity_action\\` with \\`force: true\\` as a deliberate override only. It bypasses hierarchy and proof-chain checks.\n- Treat \\`scaffold_initiative continue_on_error\\` as best-effort scaffolding. Use it only when partial creation is acceptable and inspect failures afterward.\n- Preserve \\`_context\\` when widget or app rendering depends on client, conversation, session, or user metadata.\n- Prefer \\`list_entities\\` over older aliases when you need pending decisions, blockers, or entity state.\n- Artifact proof must use durable sources: GitHub PR/commit/blob permalinks, published/public URLs, or absolute file paths / \\`file://...\\`.\n- Never use OrgX wrapper pages like \\`/live/...\\`, \\`/artifacts/...\\`, or \\`/console/...\\` as proof links. \\`preview_markdown\\` is supporting context only.\n\n## Suggested Skill Packs\n\nInstall and use these packs alongside this base skill:\n\n- \\`morning-briefing\\`\n- \\`initiative-kickoff\\`\n- \\`bulk-create\\`\n- \\`nightly-recap\\`\n\n## Suggested Workflow\n\n1. Inspect state with \\`mcp__orgx__list_entities\\`, \\`mcp__orgx__get_initiative_pulse\\`, or the relevant workspace-scoped read tool.\n2. Mutate state with the narrowest tool that matches the task.\n3. When you need a hard override, explain why before using \\`force: true\\`.\n4. When you scaffold, decide up front whether \\`continue_on_error\\` is acceptable.\n5. Carry \\`_context\\` through any widget-producing flows so the UI can render and resume correctly.\n`;\n\nfunction encodeRepoPath(value: string): string {\n return value\n .split(\"/\")\n .filter((segment) => segment.length > 0)\n .map((segment) => encodeURIComponent(segment))\n .join(\"/\");\n}\n\nfunction buildContentsUrl(path: string, ref: string): string {\n const encodedPath = encodeRepoPath(path);\n return `https://api.github.com/repos/${ORGX_SKILLS_OWNER}/${ORGX_SKILLS_REPO}/contents/${encodedPath}?ref=${encodeURIComponent(ref)}`;\n}\n\nfunction resolveGitHubError(status: number, path: string): string {\n if (status === 404) {\n return `OrgX skill pack '${path}' was not found in ${ORGX_SKILLS_OWNER}/${ORGX_SKILLS_REPO}.`;\n }\n\n return `GitHub returned HTTP ${status} while loading '${path}' from ${ORGX_SKILLS_OWNER}/${ORGX_SKILLS_REPO}.`;\n}\n\nasync function readResponseText(response: Response): Promise<string> {\n return response.text();\n}\n\nasync function fetchDirectoryEntries(\n path: string,\n fetchImpl: typeof fetch,\n ref: string,\n): Promise<GithubDirectoryEntry[]> {\n const response = await fetchImpl(buildContentsUrl(path, ref), {\n headers: {\n Accept: \"application/vnd.github+json\",\n },\n signal: AbortSignal.timeout(10_000),\n });\n\n if (!response.ok) {\n throw new Error(resolveGitHubError(response.status, path));\n }\n\n const data = await response.json();\n if (!Array.isArray(data)) {\n throw new Error(`Expected '${path}' to be a directory in ${ORGX_SKILLS_OWNER}/${ORGX_SKILLS_REPO}.`);\n }\n\n return data\n .filter((entry): entry is GithubDirectoryEntry => {\n if (!entry || typeof entry !== \"object\") return false;\n return entry.type === \"file\" || entry.type === \"dir\";\n })\n .sort((left, right) => left.path.localeCompare(right.path));\n}\n\nasync function listRemoteSkillFiles(\n path: string,\n fetchImpl: typeof fetch,\n ref: string,\n): Promise<RemoteSkillFile[]> {\n const entries = await fetchDirectoryEntries(path, fetchImpl, ref);\n const files: RemoteSkillFile[] = [];\n\n for (const entry of entries) {\n if (entry.type === \"dir\") {\n files.push(...await listRemoteSkillFiles(entry.path, fetchImpl, ref));\n continue;\n }\n\n if (!entry.download_url) {\n throw new Error(`GitHub did not provide a download URL for '${entry.path}'.`);\n }\n\n files.push({\n path: entry.path,\n sourceUrl: entry.download_url,\n });\n }\n\n return files;\n}\n\nasync function fetchRemoteText(sourceUrl: string, fetchImpl: typeof fetch): Promise<string> {\n const response = await fetchImpl(sourceUrl, {\n headers: {\n Accept: \"text/plain\",\n },\n signal: AbortSignal.timeout(10_000),\n });\n\n if (!response.ok) {\n throw new Error(`GitHub returned HTTP ${response.status} while downloading ${sourceUrl}.`);\n }\n\n return readResponseText(response);\n}\n\nfunction writeManagedFile(\n path: string,\n content: string,\n label: string,\n sourceUrl?: string,\n): ManagedFileWrite {\n const existing = readTextIfExists(path);\n const changed = existing !== content;\n\n if (changed) {\n writeTextFile(path, content);\n }\n\n return {\n label,\n path,\n changed,\n ...(sourceUrl ? { sourceUrl } : {}),\n };\n}\n\nexport function resolveSkillPackNames(\n requested: readonly string[] = [],\n): string[] {\n if (requested.length === 0 || requested.includes(\"all\")) {\n return [...DEFAULT_ORGX_SKILL_PACKS];\n }\n\n const seen = new Set<string>();\n const normalized: string[] = [];\n\n for (const name of requested) {\n const next = name.trim();\n if (!next || seen.has(next)) {\n continue;\n }\n seen.add(next);\n normalized.push(next);\n }\n\n return normalized;\n}\n\nexport function resolvePluginManagedSkillTargets(\n requested: readonly string[] = [],\n): OrgxPluginTarget[] {\n const seen = new Set<OrgxPluginTarget>();\n const targets: OrgxPluginTarget[] = [];\n\n for (const rawTarget of requested) {\n const target = rawTarget.trim().toLowerCase() as OrgxPluginTarget;\n if (!PLUGIN_MANAGED_SKILL_TARGETS.includes(target as typeof PLUGIN_MANAGED_SKILL_TARGETS[number])) {\n continue;\n }\n if (seen.has(target)) {\n continue;\n }\n\n seen.add(target);\n targets.push(target);\n }\n\n return targets;\n}\n\nexport function planOrgxSkillsInstall(\n pluginTargets: readonly string[] = [],\n): OrgxSkillsInstallPlan {\n const pluginManagedTargets = resolvePluginManagedSkillTargets(pluginTargets);\n const managesClaudeSkills = pluginManagedTargets.includes(\"claude\");\n const notes: string[] = [];\n\n if (managesClaudeSkills) {\n notes.push(\n \"Claude Code plugin is installed, so the wizard skipped overlapping standalone Claude OrgX skill files and Claude skill-pack sync.\",\n );\n }\n if (pluginManagedTargets.includes(\"codex\")) {\n notes.push(\n \"Codex companion plugin bundles its own OrgX skills, so `wizard skills add` only manages standalone editor assets outside Codex.\",\n );\n }\n\n return {\n installClaudeSkillBootstrap: !managesClaudeSkills,\n installClaudeSkillPacks: !managesClaudeSkills,\n notes,\n pluginManagedTargets,\n };\n}\n\nasync function fetchAvailablePackNames(\n fetchImpl: typeof fetch,\n ref: string,\n): Promise<string[]> {\n const entries = await fetchDirectoryEntries(\"\", fetchImpl, ref);\n return entries\n .filter((e) => e.type === \"dir\" && !EXCLUDED_PACK_DIRS.has(e.name))\n .map((e) => e.name);\n}\n\nasync function installSkillPack(\n skillName: string,\n claudeSkillsDir: string,\n fetchImpl: typeof fetch,\n ref: string,\n): Promise<InstalledSkillPack> {\n const rootPath = skillName;\n const files = await listRemoteSkillFiles(rootPath, fetchImpl, ref);\n const writes: ManagedFileWrite[] = [];\n\n for (const file of files) {\n const content = await fetchRemoteText(file.sourceUrl, fetchImpl);\n const relativePath = file.path.slice(`${rootPath}/`.length);\n writes.push(\n writeManagedFile(\n join(claudeSkillsDir, skillName, relativePath),\n content,\n `${skillName}/${relativePath}`,\n file.sourceUrl,\n ),\n );\n }\n\n return {\n name: skillName,\n files: writes,\n };\n}\n\nexport async function installOrgxSkills(\n options: InstallOrgxSkillsOptions = {},\n): Promise<SkillsInstallReport> {\n const fetchImpl = options.fetchImpl ?? globalThis.fetch;\n if (!fetchImpl) {\n throw new Error(\"Global fetch is unavailable in this runtime.\");\n }\n\n const ref = options.ref ?? ORGX_SKILLS_REF;\n const claudeSkillsDir = options.claudeSkillsDir ?? CLAUDE_SKILLS_DIR;\n const claudeOrgxSkillPath = options.claudeOrgxSkillPath ?? CLAUDE_ORGX_SKILL_PATH;\n const cursorRulePath = options.cursorRulePath ?? CURSOR_ORGX_RULE_PATH;\n const plan = planOrgxSkillsInstall(options.pluginTargets ?? []);\n const requestedNames = options.skillNames ?? [];\n let skillNames: string[];\n if (requestedNames.length === 0 || requestedNames.includes(\"all\")) {\n try {\n skillNames = await fetchAvailablePackNames(fetchImpl, ref);\n } catch {\n skillNames = [...DEFAULT_ORGX_SKILL_PACKS];\n }\n } else {\n skillNames = resolveSkillPackNames(requestedNames);\n }\n\n const writes: ManagedFileWrite[] = [\n writeManagedFile(cursorRulePath, CURSOR_RULES_CONTENT, \"cursor-rules\"),\n ];\n if (plan.installClaudeSkillBootstrap) {\n writes.push(\n writeManagedFile(claudeOrgxSkillPath, CLAUDE_ORGX_SKILL_CONTENT, \"claude-orgx-skill\"),\n );\n }\n\n const packs: InstalledSkillPack[] = [];\n if (plan.installClaudeSkillPacks) {\n for (const skillName of skillNames) {\n packs.push(await installSkillPack(skillName, claudeSkillsDir, fetchImpl, ref));\n }\n }\n\n return {\n notes: plan.notes,\n writes,\n packs,\n };\n}\n","import { spawn } from \"node:child_process\";\nimport {\n existsSync,\n mkdirSync,\n mkdtempSync,\n readFileSync,\n readdirSync,\n rmSync,\n statSync,\n writeFileSync,\n} from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join, relative } from \"node:path\";\n\nimport {\n CLAUDE_MANAGED_MARKETPLACE_DIR,\n CLAUDE_MANAGED_MARKETPLACE_MANIFEST_PATH,\n CLAUDE_MANAGED_PLUGIN_DIR,\n CODEX_MARKETPLACE_PATH,\n CODEX_ORGX_PLUGIN_DIR,\n NPM_REGISTRY_BASE_URL,\n} from \"../constants.js\";\nimport { detectSurface } from \"../surfaces/detection.js\";\nimport { parseJsonObject, readObject, readTextIfExists } from \"./fs.js\";\n\nexport const DEFAULT_ORGX_PLUGIN_TARGETS = [\"claude\", \"codex\", \"openclaw\"] as const;\n\nexport type OrgxPluginTarget = typeof DEFAULT_ORGX_PLUGIN_TARGETS[number];\n\nexport interface OrgxPluginStatus {\n target: OrgxPluginTarget;\n available: boolean;\n installed: boolean;\n message: string;\n}\n\nexport interface OrgxPluginMutation {\n target: OrgxPluginTarget;\n changed: boolean;\n message: string;\n}\n\nexport interface OrgxPluginMutationReport {\n results: OrgxPluginMutation[];\n}\n\nexport interface PluginCommandResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n errorCode?: string;\n}\n\nexport type PluginCommandRunner = (\n command: string,\n args: readonly string[],\n) => Promise<PluginCommandResult>;\n\nexport interface OrgxPluginPaths {\n claudeMarketplaceDir: string;\n claudeMarketplaceManifestPath: string;\n claudePluginDir: string;\n codexMarketplacePath: string;\n codexPluginDir: string;\n}\n\nexport interface ListOrgxPluginStatusesOptions {\n commandRunner?: PluginCommandRunner;\n paths?: Partial<OrgxPluginPaths>;\n}\n\nexport interface InstallOrgxPluginsOptions {\n targets?: readonly string[];\n commandRunner?: PluginCommandRunner;\n fetchImpl?: typeof fetch;\n paths?: Partial<OrgxPluginPaths>;\n}\n\nexport interface UninstallOrgxPluginsOptions {\n targets?: readonly string[];\n commandRunner?: PluginCommandRunner;\n paths?: Partial<OrgxPluginPaths>;\n}\n\ninterface RepoDirectoryEntry {\n name: string;\n path: string;\n type: \"dir\" | \"file\";\n download_url: string | null;\n}\n\ninterface RemoteRepoFile {\n localPath: string;\n path: string;\n sourceUrl: string;\n}\n\ninterface RepoSyncSpec {\n owner: string;\n repo: string;\n ref: string;\n include: Array<{ localPath: string; remotePath: string }>;\n}\n\nconst ORGX_PLUGIN_GITHUB_OWNER = \"useorgx\";\nconst ORGX_PLUGIN_GITHUB_REF = \"main\";\nconst ORGX_CLAUDE_PLUGIN_NAME = \"orgx-claude-code-plugin\";\nconst ORGX_CLAUDE_MARKETPLACE_NAME = \"orgx-local\";\nconst ORGX_CODEX_PLUGIN_NAME = \"orgx-codex-plugin\";\nconst ORGX_OPENCLAW_PLUGIN_ID = \"orgx\";\nconst ORGX_OPENCLAW_PLUGIN_PACKAGE_NAME = \"@useorgx/openclaw-plugin\";\n\nconst CLAUDE_PLUGIN_SYNC_SPEC: RepoSyncSpec = {\n owner: ORGX_PLUGIN_GITHUB_OWNER,\n repo: ORGX_CLAUDE_PLUGIN_NAME,\n ref: ORGX_PLUGIN_GITHUB_REF,\n include: [\n { localPath: \".claude-plugin\", remotePath: \".claude-plugin\" },\n { localPath: \"agents\", remotePath: \"agents\" },\n { localPath: \"commands\", remotePath: \"commands\" },\n { localPath: \"hooks\", remotePath: \"hooks\" },\n { localPath: \"lib\", remotePath: \"lib\" },\n { localPath: \"scripts\", remotePath: \"scripts\" },\n { localPath: \"skills\", remotePath: \"skills\" },\n ],\n};\n\nconst CODEX_PLUGIN_SYNC_SPEC: RepoSyncSpec = {\n owner: ORGX_PLUGIN_GITHUB_OWNER,\n repo: ORGX_CODEX_PLUGIN_NAME,\n ref: ORGX_PLUGIN_GITHUB_REF,\n include: [\n { localPath: \".codex-plugin\", remotePath: \".codex-plugin\" },\n { localPath: \".mcp.json\", remotePath: \".mcp.json\" },\n { localPath: \"assets\", remotePath: \"assets\" },\n { localPath: \"skills\", remotePath: \"skills\" },\n ],\n};\n\nfunction defaultPluginPaths(): OrgxPluginPaths {\n return {\n claudeMarketplaceDir: CLAUDE_MANAGED_MARKETPLACE_DIR,\n claudeMarketplaceManifestPath: CLAUDE_MANAGED_MARKETPLACE_MANIFEST_PATH,\n claudePluginDir: CLAUDE_MANAGED_PLUGIN_DIR,\n codexMarketplacePath: CODEX_MARKETPLACE_PATH,\n codexPluginDir: CODEX_ORGX_PLUGIN_DIR,\n };\n}\n\nfunction resolvePluginPaths(paths: Partial<OrgxPluginPaths> = {}): OrgxPluginPaths {\n return {\n ...defaultPluginPaths(),\n ...paths,\n };\n}\n\nfunction isRepoDirectoryEntry(value: unknown): value is RepoDirectoryEntry {\n if (!value || typeof value !== \"object\") return false;\n\n const entry = value as Partial<RepoDirectoryEntry>;\n const hasType = entry.type === \"file\" || entry.type === \"dir\";\n return typeof entry.name === \"string\" && typeof entry.path === \"string\" && hasType;\n}\n\nfunction encodeRepoPath(value: string): string {\n return value\n .split(\"/\")\n .filter((segment) => segment.length > 0)\n .map((segment) => encodeURIComponent(segment))\n .join(\"/\");\n}\n\nfunction isLikelyRepoFilePath(path: string): boolean {\n const basename = path.split(\"/\").pop() ?? path;\n return basename.includes(\".\") && !/^\\.[^./]+$/.test(basename);\n}\n\nfunction buildContentsUrl(spec: RepoSyncSpec, path: string): string {\n const encodedPath = encodeRepoPath(path);\n return `https://api.github.com/repos/${spec.owner}/${spec.repo}/contents/${encodedPath}?ref=${encodeURIComponent(spec.ref)}`;\n}\n\nfunction resolveGitHubError(spec: RepoSyncSpec, status: number, path: string): string {\n const repoName = `${spec.owner}/${spec.repo}`;\n if (status === 404) {\n return `Could not find '${path}' in ${repoName}.`;\n }\n\n return `GitHub returned HTTP ${status} while loading '${path}' from ${repoName}.`;\n}\n\nasync function fetchDirectoryEntries(\n spec: RepoSyncSpec,\n path: string,\n fetchImpl: typeof fetch,\n): Promise<RepoDirectoryEntry[]> {\n const response = await fetchImpl(buildContentsUrl(spec, path), {\n headers: {\n Accept: \"application/vnd.github+json\",\n },\n signal: AbortSignal.timeout(10_000),\n });\n\n if (!response.ok) {\n throw new Error(resolveGitHubError(spec, response.status, path));\n }\n\n const data = await response.json();\n if (!Array.isArray(data)) {\n throw new Error(`Expected '${path}' to be a directory in ${spec.owner}/${spec.repo}.`);\n }\n\n return data\n .filter(isRepoDirectoryEntry)\n .sort((left, right) => left.path.localeCompare(right.path));\n}\n\nasync function fetchRepoFile(\n spec: RepoSyncSpec,\n path: string,\n fetchImpl: typeof fetch,\n): Promise<RepoDirectoryEntry> {\n const response = await fetchImpl(buildContentsUrl(spec, path), {\n headers: {\n Accept: \"application/vnd.github+json\",\n },\n signal: AbortSignal.timeout(10_000),\n });\n\n if (!response.ok) {\n throw new Error(resolveGitHubError(spec, response.status, path));\n }\n\n const data = await response.json();\n if (!isRepoDirectoryEntry(data) || data.type !== \"file\" || typeof data.download_url !== \"string\") {\n throw new Error(`Expected '${path}' to be a file in ${spec.owner}/${spec.repo}.`);\n }\n\n return data;\n}\n\nasync function listRemoteRepoFiles(\n spec: RepoSyncSpec,\n path: string,\n localPath: string,\n fetchImpl: typeof fetch,\n): Promise<RemoteRepoFile[]> {\n const files: RemoteRepoFile[] = [];\n\n if (isLikelyRepoFilePath(path) && !path.endsWith(\"/\")) {\n const file = await fetchRepoFile(spec, path, fetchImpl);\n files.push({\n localPath,\n path: file.path,\n sourceUrl: file.download_url ?? \"\",\n });\n return files;\n }\n\n const entries = await fetchDirectoryEntries(spec, path, fetchImpl);\n for (const entry of entries) {\n if (entry.type === \"dir\") {\n files.push(\n ...await listRemoteRepoFiles(\n spec,\n entry.path,\n join(localPath, entry.name),\n fetchImpl,\n ),\n );\n continue;\n }\n\n if (!entry.download_url) {\n throw new Error(`GitHub did not provide a download URL for '${entry.path}'.`);\n }\n\n files.push({\n localPath: join(localPath, entry.name),\n path: entry.path,\n sourceUrl: entry.download_url,\n });\n }\n\n return files;\n}\n\nasync function collectRemoteRepoFiles(spec: RepoSyncSpec, fetchImpl: typeof fetch): Promise<RemoteRepoFile[]> {\n const files: RemoteRepoFile[] = [];\n for (const entry of spec.include) {\n const isFile = isLikelyRepoFilePath(entry.remotePath) && !entry.remotePath.endsWith(\"/\");\n if (isFile) {\n const file = await fetchRepoFile(spec, entry.remotePath, fetchImpl);\n files.push({\n localPath: entry.localPath,\n path: file.path,\n sourceUrl: file.download_url ?? \"\",\n });\n continue;\n }\n\n files.push(...await listRemoteRepoFiles(spec, entry.remotePath, entry.localPath, fetchImpl));\n }\n\n return files.sort((left, right) => left.localPath.localeCompare(right.localPath));\n}\n\nasync function fetchRemoteBytes(sourceUrl: string, fetchImpl: typeof fetch): Promise<Buffer> {\n const response = await fetchImpl(sourceUrl, {\n headers: {\n Accept: \"application/octet-stream\",\n },\n signal: AbortSignal.timeout(10_000),\n });\n\n if (!response.ok) {\n throw new Error(`GitHub returned HTTP ${response.status} while downloading ${sourceUrl}.`);\n }\n\n return Buffer.from(await response.arrayBuffer());\n}\n\nfunction readBytesIfExists(path: string): Buffer | null {\n if (!existsSync(path)) return null;\n\n try {\n if (!statSync(path).isFile()) {\n return null;\n }\n return readFileSync(path);\n } catch (error) {\n const code = typeof error === \"object\" && error && \"code\" in error\n ? String(error.code)\n : undefined;\n if (code === \"ENOENT\" || code === \"ENOTDIR\" || code === \"EISDIR\") {\n return null;\n }\n throw error;\n }\n}\n\nfunction writeBytesIfChanged(path: string, bytes: Buffer): boolean {\n const existing = readBytesIfExists(path);\n if (existing && Buffer.compare(existing, bytes) === 0) {\n return false;\n }\n\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, bytes);\n return true;\n}\n\nfunction removePathIfExists(path: string): boolean {\n if (!existsSync(path)) return false;\n rmSync(path, { force: true, recursive: true });\n return true;\n}\n\nfunction listRelativeFiles(root: string, base = root): string[] {\n if (!existsSync(root)) return [];\n if (!statSync(root).isDirectory()) {\n return [];\n }\n\n const files: string[] = [];\n for (const entry of readdirSync(root, { withFileTypes: true })) {\n const nextPath = join(root, entry.name);\n if (entry.isDirectory()) {\n files.push(...listRelativeFiles(nextPath, base));\n continue;\n }\n if (entry.isFile()) {\n files.push(relative(base, nextPath));\n }\n }\n return files.sort();\n}\n\nfunction pruneEmptyDirectories(root: string, current = root): boolean {\n if (!existsSync(current) || !statSync(current).isDirectory()) {\n return false;\n }\n\n let changed = false;\n for (const entry of readdirSync(current, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n changed = pruneEmptyDirectories(root, join(current, entry.name)) || changed;\n }\n\n if (current !== root && readdirSync(current).length === 0) {\n rmSync(current, { force: true, recursive: true });\n return true;\n }\n\n return changed;\n}\n\nasync function syncManagedRepoTree(\n spec: RepoSyncSpec,\n destinationRoot: string,\n fetchImpl: typeof fetch,\n): Promise<{ changed: boolean; fileCount: number }> {\n const remoteFiles = await collectRemoteRepoFiles(spec, fetchImpl);\n let changed = false;\n const expected = new Set(remoteFiles.map((file) => file.localPath));\n\n if (existsSync(destinationRoot) && !statSync(destinationRoot).isDirectory()) {\n rmSync(destinationRoot, { force: true, recursive: true });\n changed = true;\n }\n\n for (const file of listRelativeFiles(destinationRoot)) {\n if (expected.has(file)) continue;\n rmSync(join(destinationRoot, file), { force: true });\n changed = true;\n }\n changed = pruneEmptyDirectories(destinationRoot) || changed;\n\n for (const file of remoteFiles) {\n const bytes = await fetchRemoteBytes(file.sourceUrl, fetchImpl);\n if (writeBytesIfChanged(join(destinationRoot, file.localPath), bytes)) {\n changed = true;\n }\n }\n\n return { changed, fileCount: remoteFiles.length };\n}\n\nfunction serializeJson(value: unknown): string {\n return `${JSON.stringify(value, null, 2)}\\n`;\n}\n\nfunction writeJsonIfChanged(path: string, value: unknown): boolean {\n const next = serializeJson(value);\n const existing = readTextIfExists(path);\n if (existing === next) {\n return false;\n }\n\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, next, \"utf8\");\n return true;\n}\n\nfunction buildClaudeMarketplaceManifest(): Record<string, unknown> {\n return {\n $schema: \"https://anthropic.com/claude-code/marketplace.schema.json\",\n name: ORGX_CLAUDE_MARKETPLACE_NAME,\n description: \"Local OrgX plugins\",\n owner: {\n name: \"OrgX Team\",\n },\n plugins: [\n {\n name: ORGX_CLAUDE_PLUGIN_NAME,\n description: \"OrgX MCP tools and runtime telemetry hooks for Claude Code.\",\n source: `./plugins/${ORGX_CLAUDE_PLUGIN_NAME}`,\n },\n ],\n };\n}\n\nfunction buildCodexMarketplaceEntry(): Record<string, unknown> {\n return {\n name: ORGX_CODEX_PLUGIN_NAME,\n source: {\n source: \"local\",\n path: `./.codex/plugins/${ORGX_CODEX_PLUGIN_NAME}`,\n },\n policy: {\n installation: \"AVAILABLE\",\n authentication: \"ON_INSTALL\",\n },\n category: \"Productivity\",\n };\n}\n\nfunction readMarketplacePlugins(path: string): {\n document: Record<string, unknown>;\n plugins: Record<string, unknown>[];\n} {\n const document = parseJsonObject(readTextIfExists(path));\n const plugins = Array.isArray(document.plugins)\n ? document.plugins.filter((value): value is Record<string, unknown> => Boolean(value) && typeof value === \"object\" && !Array.isArray(value))\n : [];\n\n return { document, plugins };\n}\n\nfunction upsertCodexMarketplaceEntry(path: string): boolean {\n const { document, plugins } = readMarketplacePlugins(path);\n const nextEntry = buildCodexMarketplaceEntry();\n let replaced = false;\n\n const nextPlugins = plugins.map((plugin) => {\n if (plugin.name !== ORGX_CODEX_PLUGIN_NAME) {\n return plugin;\n }\n replaced = true;\n return nextEntry;\n });\n\n if (!replaced) {\n nextPlugins.push(nextEntry);\n }\n\n const nextDocument: Record<string, unknown> = {\n ...document,\n ...(document.name ? {} : { name: ORGX_CLAUDE_MARKETPLACE_NAME }),\n ...(readObject(document.interface).displayName ? {} : { interface: { displayName: \"OrgX Local\" } }),\n plugins: nextPlugins,\n };\n\n return writeJsonIfChanged(path, nextDocument);\n}\n\nfunction removeCodexMarketplaceEntry(path: string): boolean {\n if (!existsSync(path)) {\n return false;\n }\n\n const { document, plugins } = readMarketplacePlugins(path);\n const nextPlugins = plugins.filter((plugin) => plugin.name !== ORGX_CODEX_PLUGIN_NAME);\n if (nextPlugins.length === plugins.length) {\n return false;\n }\n\n if (nextPlugins.length === 0) {\n rmSync(path, { force: true });\n return true;\n }\n\n return writeJsonIfChanged(path, {\n ...document,\n plugins: nextPlugins,\n });\n}\n\nfunction codexMarketplaceHasOrgxEntry(path: string): boolean {\n const { plugins } = readMarketplacePlugins(path);\n return plugins.some((plugin) => plugin.name === ORGX_CODEX_PLUGIN_NAME);\n}\n\nfunction extractClaudePluginNames(payload: string): string[] {\n try {\n const parsed = JSON.parse(payload);\n if (!Array.isArray(parsed)) return [];\n return parsed.flatMap((entry) => {\n if (typeof entry === \"string\") return [entry];\n if (!entry || typeof entry !== \"object\") return [];\n if (typeof entry.name === \"string\") return [entry.name];\n if (typeof entry.id === \"string\") return [entry.id];\n return [];\n });\n } catch {\n return [];\n }\n}\n\nfunction extractOpenclawPluginIds(payload: string): string[] {\n try {\n const parsed = JSON.parse(payload);\n if (Array.isArray(parsed)) {\n return parsed.flatMap((entry) => {\n if (!entry || typeof entry !== \"object\") return [];\n if (typeof entry.id === \"string\") return [entry.id];\n if (typeof entry.name === \"string\") return [entry.name];\n return [];\n });\n }\n\n const root = readObject(parsed);\n const plugins = Array.isArray(root.plugins) ? root.plugins : [];\n return plugins.flatMap((entry) => {\n if (!entry || typeof entry !== \"object\") return [];\n const item = entry as Record<string, unknown>;\n if (typeof item.id === \"string\") return [item.id];\n if (typeof item.name === \"string\") return [item.name];\n return [];\n });\n } catch {\n return [];\n }\n}\n\nfunction formatCommandFailure(\n command: string,\n args: readonly string[],\n result: PluginCommandResult,\n): string {\n const detail = [result.stderr.trim(), result.stdout.trim()].find((value) => value.length > 0);\n if (result.errorCode === \"ENOENT\") {\n return `Command '${command}' is not available on PATH.`;\n }\n\n return `${command} ${args.join(\" \")} failed${result.exitCode >= 0 ? ` with exit code ${result.exitCode}` : \"\"}${detail ? `: ${detail}` : \".\"}`;\n}\n\nasync function defaultCommandRunner(command: string, args: readonly string[]): Promise<PluginCommandResult> {\n return await new Promise((resolve) => {\n const child = spawn(command, [...args], {\n env: process.env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n let stdout = \"\";\n let stderr = \"\";\n\n child.stdout.on(\"data\", (chunk) => {\n stdout += chunk.toString();\n });\n child.stderr.on(\"data\", (chunk) => {\n stderr += chunk.toString();\n });\n\n child.on(\"error\", (error) => {\n const errorCode = typeof error === \"object\" && error && \"code\" in error\n ? String(error.code)\n : undefined;\n resolve({\n exitCode: -1,\n stdout,\n stderr,\n ...(errorCode ? { errorCode } : {}),\n });\n });\n\n child.on(\"close\", (code) => {\n resolve({\n exitCode: code ?? -1,\n stdout,\n stderr,\n });\n });\n });\n}\n\nfunction resolveCommandRunner(runner?: PluginCommandRunner): PluginCommandRunner {\n return runner ?? defaultCommandRunner;\n}\n\nasync function commandExists(command: string, runner: PluginCommandRunner): Promise<boolean> {\n const result = await runner(command, [\"--help\"]);\n return result.errorCode !== \"ENOENT\" && result.exitCode !== 127;\n}\n\nasync function getClaudeInstallState(runner: PluginCommandRunner): Promise<{ available: boolean; installed: boolean }> {\n const available = detectSurface(\"claude\").detected || await commandExists(\"claude\", runner);\n if (!available) {\n return { available: false, installed: false };\n }\n\n const result = await runner(\"claude\", [\"plugin\", \"list\", \"--json\"]);\n if (result.exitCode !== 0) {\n return { available: true, installed: false };\n }\n\n return {\n available: true,\n installed: extractClaudePluginNames(result.stdout).includes(ORGX_CLAUDE_PLUGIN_NAME),\n };\n}\n\nasync function getOpenclawInstallState(runner: PluginCommandRunner): Promise<{ available: boolean; installed: boolean }> {\n const available = detectSurface(\"openclaw\").detected || await commandExists(\"openclaw\", runner);\n if (!available) {\n return { available: false, installed: false };\n }\n\n const result = await runner(\"openclaw\", [\"plugins\", \"list\", \"--json\"]);\n if (result.exitCode !== 0) {\n return { available: true, installed: false };\n }\n\n return {\n available: true,\n installed: extractOpenclawPluginIds(result.stdout).includes(ORGX_OPENCLAW_PLUGIN_ID),\n };\n}\n\nasync function buildClaudeStatus(paths: OrgxPluginPaths, runner: PluginCommandRunner): Promise<OrgxPluginStatus> {\n const state = await getClaudeInstallState(runner);\n if (state.installed) {\n return {\n target: \"claude\",\n available: true,\n installed: true,\n message: \"Claude Code plugin is installed.\",\n };\n }\n\n if (!state.available) {\n return {\n target: \"claude\",\n available: false,\n installed: false,\n message: \"Claude Code was not detected.\",\n };\n }\n\n const marketplaceExists = existsSync(paths.claudeMarketplaceManifestPath);\n return {\n target: \"claude\",\n available: true,\n installed: false,\n message: marketplaceExists\n ? \"Claude marketplace wrapper exists, but the plugin is not installed.\"\n : \"Claude Code is available and ready for plugin install.\",\n };\n}\n\nfunction buildCodexStatus(paths: OrgxPluginPaths, runner: PluginCommandRunner): Promise<OrgxPluginStatus> {\n return (async () => {\n const available = detectSurface(\"codex\").detected || await commandExists(\"codex\", runner);\n const pluginExists = existsSync(paths.codexPluginDir);\n const marketplaceExists = codexMarketplaceHasOrgxEntry(paths.codexMarketplacePath);\n const installed = pluginExists && marketplaceExists;\n\n if (installed) {\n return {\n target: \"codex\",\n available: true,\n installed: true,\n message: \"Codex plugin files and marketplace entry are present.\",\n };\n }\n\n if (!available) {\n return {\n target: \"codex\",\n available: false,\n installed: false,\n message: \"Codex was not detected.\",\n };\n }\n\n if (pluginExists && !marketplaceExists) {\n return {\n target: \"codex\",\n available: true,\n installed: false,\n message: \"Codex plugin files exist, but the marketplace entry is missing.\",\n };\n }\n\n if (!pluginExists && marketplaceExists) {\n return {\n target: \"codex\",\n available: true,\n installed: false,\n message: \"Codex marketplace entry exists, but plugin files are missing.\",\n };\n }\n\n return {\n target: \"codex\",\n available: true,\n installed: false,\n message: \"Codex is available and ready for plugin install.\",\n };\n })();\n}\n\nasync function buildOpenclawStatus(runner: PluginCommandRunner): Promise<OrgxPluginStatus> {\n const state = await getOpenclawInstallState(runner);\n if (state.installed) {\n return {\n target: \"openclaw\",\n available: true,\n installed: true,\n message: \"OpenClaw plugin is installed.\",\n };\n }\n\n return {\n target: \"openclaw\",\n available: state.available,\n installed: false,\n message: state.available\n ? \"OpenClaw is available and ready for plugin install.\"\n : \"OpenClaw was not detected.\",\n };\n}\n\nasync function resolveOpenclawTarball(fetchImpl: typeof fetch): Promise<{ tarballUrl: string; version: string }> {\n const response = await fetchImpl(\n `${NPM_REGISTRY_BASE_URL}/${encodeURIComponent(ORGX_OPENCLAW_PLUGIN_PACKAGE_NAME)}`,\n {\n headers: {\n Accept: \"application/json\",\n },\n signal: AbortSignal.timeout(10_000),\n },\n );\n\n if (!response.ok) {\n throw new Error(\n `npm registry returned HTTP ${response.status} while resolving ${ORGX_OPENCLAW_PLUGIN_PACKAGE_NAME}.`,\n );\n }\n\n const data = await response.json() as {\n \"dist-tags\"?: Record<string, string>;\n versions?: Record<string, { dist?: { tarball?: string } }>;\n };\n const latestVersion = data[\"dist-tags\"]?.latest;\n const tarballUrl = latestVersion ? data.versions?.[latestVersion]?.dist?.tarball : undefined;\n\n if (!latestVersion || !tarballUrl) {\n throw new Error(`Could not resolve a tarball URL for ${ORGX_OPENCLAW_PLUGIN_PACKAGE_NAME}.`);\n }\n\n return {\n tarballUrl,\n version: latestVersion,\n };\n}\n\nasync function installClaudePlugin(\n paths: OrgxPluginPaths,\n fetchImpl: typeof fetch,\n runner: PluginCommandRunner,\n): Promise<OrgxPluginMutation> {\n const state = await getClaudeInstallState(runner);\n if (!state.available) {\n return {\n target: \"claude\",\n changed: false,\n message: \"Claude Code is not available on this machine.\",\n };\n }\n\n const syncResult = await syncManagedRepoTree(CLAUDE_PLUGIN_SYNC_SPEC, paths.claudePluginDir, fetchImpl);\n const manifestChanged = writeJsonIfChanged(\n paths.claudeMarketplaceManifestPath,\n buildClaudeMarketplaceManifest(),\n );\n\n const marketplaceAdd = await runner(\"claude\", [\"plugin\", \"marketplace\", \"add\", paths.claudeMarketplaceDir]);\n if (marketplaceAdd.exitCode !== 0) {\n throw new Error(formatCommandFailure(\"claude\", [\"plugin\", \"marketplace\", \"add\", paths.claudeMarketplaceDir], marketplaceAdd));\n }\n\n let installedChanged = false;\n if (!state.installed) {\n const install = await runner(\"claude\", [\n \"plugin\",\n \"install\",\n `${ORGX_CLAUDE_PLUGIN_NAME}@${ORGX_CLAUDE_MARKETPLACE_NAME}`,\n \"--scope\",\n \"user\",\n ]);\n if (install.exitCode !== 0) {\n throw new Error(\n formatCommandFailure(\n \"claude\",\n [\n \"plugin\",\n \"install\",\n `${ORGX_CLAUDE_PLUGIN_NAME}@${ORGX_CLAUDE_MARKETPLACE_NAME}`,\n \"--scope\",\n \"user\",\n ],\n install,\n ),\n );\n }\n installedChanged = true;\n }\n\n const changed = syncResult.changed || manifestChanged || installedChanged;\n return {\n target: \"claude\",\n changed,\n message: changed\n ? `Synced ${syncResult.fileCount} Claude plugin files and ensured the plugin is installed.`\n : \"Claude Code plugin is already installed and up to date.\",\n };\n}\n\nasync function installCodexPlugin(\n paths: OrgxPluginPaths,\n fetchImpl: typeof fetch,\n runner: PluginCommandRunner,\n): Promise<OrgxPluginMutation> {\n const available = detectSurface(\"codex\").detected || await commandExists(\"codex\", runner);\n if (!available) {\n return {\n target: \"codex\",\n changed: false,\n message: \"Codex is not available on this machine.\",\n };\n }\n\n const syncResult = await syncManagedRepoTree(CODEX_PLUGIN_SYNC_SPEC, paths.codexPluginDir, fetchImpl);\n const marketplaceChanged = upsertCodexMarketplaceEntry(paths.codexMarketplacePath);\n const changed = syncResult.changed || marketplaceChanged;\n\n return {\n target: \"codex\",\n changed,\n message: changed\n ? `Synced ${syncResult.fileCount} Codex plugin files and updated the marketplace entry.`\n : \"Codex plugin files and marketplace entry already match the managed OrgX plugin.\",\n };\n}\n\nasync function installOpenclawPlugin(\n fetchImpl: typeof fetch,\n runner: PluginCommandRunner,\n): Promise<OrgxPluginMutation> {\n const state = await getOpenclawInstallState(runner);\n if (!state.available) {\n return {\n target: \"openclaw\",\n changed: false,\n message: \"OpenClaw is not available on this machine.\",\n };\n }\n if (state.installed) {\n return {\n target: \"openclaw\",\n changed: false,\n message: \"OpenClaw plugin is already installed.\",\n };\n }\n\n const { tarballUrl, version } = await resolveOpenclawTarball(fetchImpl);\n const tarballBytes = await fetchRemoteBytes(tarballUrl, fetchImpl);\n const tempRoot = mkdtempSync(join(tmpdir(), \"orgx-wizard-openclaw-\"));\n const archivePath = join(tempRoot, `orgx-openclaw-plugin-${version}.tgz`);\n\n try {\n writeFileSync(archivePath, tarballBytes);\n const install = await runner(\"openclaw\", [\"plugins\", \"install\", archivePath]);\n if (install.exitCode !== 0) {\n throw new Error(\n formatCommandFailure(\"openclaw\", [\"plugins\", \"install\", archivePath], install),\n );\n }\n } finally {\n rmSync(tempRoot, { force: true, recursive: true });\n }\n\n return {\n target: \"openclaw\",\n changed: true,\n message: `Installed OpenClaw plugin ${ORGX_OPENCLAW_PLUGIN_ID} from ${ORGX_OPENCLAW_PLUGIN_PACKAGE_NAME}@${version}.`,\n };\n}\n\nasync function uninstallClaudePlugin(\n paths: OrgxPluginPaths,\n runner: PluginCommandRunner,\n): Promise<OrgxPluginMutation> {\n const state = await getClaudeInstallState(runner);\n let changed = false;\n\n if (state.available && state.installed) {\n const uninstall = await runner(\"claude\", [\n \"plugin\",\n \"uninstall\",\n ORGX_CLAUDE_PLUGIN_NAME,\n \"--scope\",\n \"user\",\n ]);\n if (uninstall.exitCode !== 0) {\n throw new Error(\n formatCommandFailure(\n \"claude\",\n [\"plugin\", \"uninstall\", ORGX_CLAUDE_PLUGIN_NAME, \"--scope\", \"user\"],\n uninstall,\n ),\n );\n }\n changed = true;\n }\n\n if (state.available) {\n const removeMarketplace = await runner(\"claude\", [\"plugin\", \"marketplace\", \"remove\", ORGX_CLAUDE_MARKETPLACE_NAME]);\n if (removeMarketplace.exitCode === 0) {\n changed = true;\n }\n }\n\n changed = removePathIfExists(paths.claudeMarketplaceDir) || changed;\n\n return {\n target: \"claude\",\n changed,\n message: changed\n ? \"Removed the managed Claude Code plugin and marketplace wrapper.\"\n : \"Claude Code plugin was not installed.\",\n };\n}\n\nasync function uninstallCodexPlugin(paths: OrgxPluginPaths): Promise<OrgxPluginMutation> {\n const removedPluginDir = removePathIfExists(paths.codexPluginDir);\n const removedMarketplaceEntry = removeCodexMarketplaceEntry(paths.codexMarketplacePath);\n const changed = removedPluginDir || removedMarketplaceEntry;\n\n return {\n target: \"codex\",\n changed,\n message: changed\n ? \"Removed the managed Codex plugin files and marketplace entry.\"\n : \"Codex plugin was not installed.\",\n };\n}\n\nasync function uninstallOpenclawPlugin(runner: PluginCommandRunner): Promise<OrgxPluginMutation> {\n const state = await getOpenclawInstallState(runner);\n if (!state.available || !state.installed) {\n return {\n target: \"openclaw\",\n changed: false,\n message: \"OpenClaw plugin was not installed.\",\n };\n }\n\n const uninstall = await runner(\"openclaw\", [\"plugins\", \"uninstall\", ORGX_OPENCLAW_PLUGIN_ID, \"--force\"]);\n if (uninstall.exitCode !== 0) {\n throw new Error(\n formatCommandFailure(\n \"openclaw\",\n [\"plugins\", \"uninstall\", ORGX_OPENCLAW_PLUGIN_ID, \"--force\"],\n uninstall,\n ),\n );\n }\n\n return {\n target: \"openclaw\",\n changed: true,\n message: \"Removed the managed OpenClaw plugin.\",\n };\n}\n\nexport function resolvePluginTargets(requested: readonly string[] = []): OrgxPluginTarget[] {\n if (requested.length === 0 || requested.includes(\"all\")) {\n return [...DEFAULT_ORGX_PLUGIN_TARGETS];\n }\n\n const seen = new Set<OrgxPluginTarget>();\n const normalized: OrgxPluginTarget[] = [];\n\n for (const rawTarget of requested) {\n const target = rawTarget.trim().toLowerCase();\n if (target === \"\" || target === \"all\") continue;\n if (!DEFAULT_ORGX_PLUGIN_TARGETS.includes(target as OrgxPluginTarget)) {\n throw new Error(\n `Unknown plugin target '${rawTarget}'. Supported targets: ${DEFAULT_ORGX_PLUGIN_TARGETS.join(\", \")}.`,\n );\n }\n\n const nextTarget = target as OrgxPluginTarget;\n if (seen.has(nextTarget)) continue;\n seen.add(nextTarget);\n normalized.push(nextTarget);\n }\n\n return normalized;\n}\n\nexport async function listOrgxPluginStatuses(\n options: ListOrgxPluginStatusesOptions = {},\n): Promise<OrgxPluginStatus[]> {\n const paths = resolvePluginPaths(options.paths);\n const runner = resolveCommandRunner(options.commandRunner);\n\n return await Promise.all([\n buildClaudeStatus(paths, runner),\n buildCodexStatus(paths, runner),\n buildOpenclawStatus(runner),\n ]);\n}\n\nexport async function installOrgxPlugins(\n options: InstallOrgxPluginsOptions = {},\n): Promise<OrgxPluginMutationReport> {\n const targets = resolvePluginTargets(options.targets ?? []);\n const fetchImpl = options.fetchImpl ?? globalThis.fetch;\n if (!fetchImpl) {\n throw new Error(\"Global fetch is unavailable in this runtime.\");\n }\n\n const paths = resolvePluginPaths(options.paths);\n const runner = resolveCommandRunner(options.commandRunner);\n const results: OrgxPluginMutation[] = [];\n\n for (const target of targets) {\n switch (target) {\n case \"claude\":\n results.push(await installClaudePlugin(paths, fetchImpl, runner));\n break;\n case \"codex\":\n results.push(await installCodexPlugin(paths, fetchImpl, runner));\n break;\n case \"openclaw\":\n results.push(await installOpenclawPlugin(fetchImpl, runner));\n break;\n }\n }\n\n return { results };\n}\n\nexport async function uninstallOrgxPlugins(\n options: UninstallOrgxPluginsOptions = {},\n): Promise<OrgxPluginMutationReport> {\n const targets = resolvePluginTargets(options.targets ?? []);\n const paths = resolvePluginPaths(options.paths);\n const runner = resolveCommandRunner(options.commandRunner);\n const results: OrgxPluginMutation[] = [];\n\n for (const target of targets) {\n switch (target) {\n case \"claude\":\n results.push(await uninstallClaudePlugin(paths, runner));\n break;\n case \"codex\":\n results.push(await uninstallCodexPlugin(paths));\n break;\n case \"openclaw\":\n results.push(await uninstallOpenclawPlugin(runner));\n break;\n }\n }\n\n return { results };\n}\n\nexport function countPluginReportChanges(report: OrgxPluginMutationReport): number {\n return report.results.filter((result) => result.changed).length;\n}\n","import type { CreateWorkspaceInput, OrgxWorkspace, SetDefaultWorkspaceInput } from \"./workspaces.js\";\n\nconst CREATE_WORKSPACE_VALUE = \"__create_workspace__\";\nconst SKIP_WORKSPACE_VALUE = \"__skip_workspace__\";\n\nexport interface WorkspaceSetupClient {\n createWorkspace(input: CreateWorkspaceInput): Promise<OrgxWorkspace>;\n getCurrentWorkspace(): Promise<OrgxWorkspace | null>;\n listWorkspaces(): Promise<OrgxWorkspace[]>;\n setDefaultWorkspace(\n input: SetDefaultWorkspaceInput,\n ): Promise<{ changed: boolean; workspace: OrgxWorkspace }>;\n}\n\nexport interface WorkspaceSelectOption {\n hint?: string;\n label: string;\n value: string;\n}\n\nexport interface WorkspaceSetupPrompts {\n cancel(message: string): void;\n isCancel(value: unknown): boolean;\n select(input: {\n initialValue?: string | undefined;\n message: string;\n options: WorkspaceSelectOption[];\n }): Promise<string | symbol>;\n text(input: {\n initialValue?: string | undefined;\n message: string;\n placeholder?: string;\n validate?: (value: string | undefined) => Error | string | undefined;\n }): Promise<string | symbol>;\n}\n\nexport interface WorkspaceSetupOptions {\n interactive: boolean;\n}\n\nexport interface WorkspaceSetupResult {\n created?: boolean;\n defaultChanged?: boolean;\n message: string;\n status: \"cancelled\" | \"skipped\" | \"unchanged\" | \"updated\";\n workspace?: OrgxWorkspace;\n}\n\nfunction trimDescription(value: string): string | undefined {\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction cancelResult(\n prompts: WorkspaceSetupPrompts,\n message = \"Workspace bootstrap cancelled.\",\n): WorkspaceSetupResult {\n prompts.cancel(message);\n return {\n message,\n status: \"cancelled\",\n };\n}\n\nfunction buildWorkspaceLabel(workspace: OrgxWorkspace, currentWorkspaceId?: string): string {\n const suffixes: string[] = [];\n\n if (workspace.isDefault) {\n suffixes.push(\"default\");\n }\n\n if (workspace.id === currentWorkspaceId) {\n suffixes.push(\"current\");\n }\n\n if (suffixes.length === 0) {\n return workspace.name;\n }\n\n return `${workspace.name} (${suffixes.join(\", \")})`;\n}\n\nexport function buildWorkspaceSelectOptions(\n workspaces: OrgxWorkspace[],\n currentWorkspaceId?: string,\n): WorkspaceSelectOption[] {\n const options = workspaces.map((workspace) => ({\n value: workspace.id,\n label: buildWorkspaceLabel(workspace, currentWorkspaceId),\n ...(workspace.description ? { hint: workspace.description } : {}),\n }));\n\n options.push(\n {\n value: CREATE_WORKSPACE_VALUE,\n label: \"Create a new workspace\",\n hint: \"Name it here and set it as the default for this machine.\",\n },\n {\n value: SKIP_WORKSPACE_VALUE,\n label: \"Skip for now\",\n hint: \"Leave workspace selection unchanged and finish setup.\",\n },\n );\n\n return options;\n}\n\nasync function promptForWorkspaceName(prompts: WorkspaceSetupPrompts): Promise<string | symbol> {\n return prompts.text({\n message: \"Workspace name\",\n placeholder: \"Founders\",\n validate(value) {\n if (!value || value.trim().length === 0) {\n return \"Workspace name is required.\";\n }\n\n return undefined;\n },\n });\n}\n\nasync function promptForWorkspaceDescription(\n prompts: WorkspaceSetupPrompts,\n): Promise<string | symbol> {\n return prompts.text({\n message: \"Workspace description\",\n placeholder: \"Optional\",\n });\n}\n\nasync function createAndSelectWorkspace(\n client: WorkspaceSetupClient,\n prompts: WorkspaceSetupPrompts,\n): Promise<WorkspaceSetupResult> {\n const name = await promptForWorkspaceName(prompts);\n if (prompts.isCancel(name)) {\n return cancelResult(prompts);\n }\n if (typeof name !== \"string\") {\n return cancelResult(prompts);\n }\n\n const description = await promptForWorkspaceDescription(prompts);\n if (prompts.isCancel(description)) {\n return cancelResult(prompts);\n }\n if (typeof description !== \"string\") {\n return cancelResult(prompts);\n }\n\n const trimmedDescription = trimDescription(description);\n const createWorkspaceInput: CreateWorkspaceInput = trimmedDescription\n ? { name, description: trimmedDescription }\n : { name };\n\n const created = await client.createWorkspace(createWorkspaceInput);\n\n if (created.isDefault) {\n return {\n created: true,\n defaultChanged: false,\n message: `Created \"${created.name}\" and it is already the default OrgX workspace.`,\n status: \"updated\",\n workspace: created,\n };\n }\n\n const promoted = await client.setDefaultWorkspace({ id: created.id });\n return {\n created: true,\n defaultChanged: promoted.changed,\n message: `Created \"${promoted.workspace.name}\" and set it as the default OrgX workspace.`,\n status: \"updated\",\n workspace: promoted.workspace,\n };\n}\n\nexport async function runWorkspaceSetup(\n client: WorkspaceSetupClient,\n prompts: WorkspaceSetupPrompts,\n options: WorkspaceSetupOptions,\n): Promise<WorkspaceSetupResult> {\n if (!options.interactive) {\n return {\n message:\n \"Interactive workspace bootstrap skipped because this shell is not attached to a TTY.\",\n status: \"skipped\",\n };\n }\n\n const workspaces = await client.listWorkspaces();\n const currentWorkspace =\n workspaces.length > 0\n ? await client.getCurrentWorkspace().catch(() => workspaces.find((workspace) => workspace.isDefault) ?? null)\n : null;\n\n if (workspaces.length === 0) {\n const action = await prompts.select({\n message: \"No OrgX workspaces were found. What should setup do next?\",\n options: [\n {\n value: CREATE_WORKSPACE_VALUE,\n label: \"Create a new workspace\",\n hint: \"Create one now and set it as the default for this machine.\",\n },\n {\n value: SKIP_WORKSPACE_VALUE,\n label: \"Skip for now\",\n hint: \"Finish surface setup without creating a workspace.\",\n },\n ],\n initialValue: CREATE_WORKSPACE_VALUE,\n });\n\n if (prompts.isCancel(action)) {\n return cancelResult(prompts);\n }\n\n if (action === SKIP_WORKSPACE_VALUE) {\n return {\n message: \"Workspace bootstrap skipped.\",\n status: \"skipped\",\n };\n }\n\n return createAndSelectWorkspace(client, prompts);\n }\n\n const initialWorkspaceId =\n currentWorkspace?.id ??\n workspaces.find((workspace) => workspace.isDefault)?.id ??\n workspaces[0]?.id;\n const selected = await prompts.select({\n message: \"Choose the OrgX workspace this machine should use by default.\",\n options: buildWorkspaceSelectOptions(\n workspaces,\n currentWorkspace?.id ?? workspaces.find((workspace) => workspace.isDefault)?.id,\n ),\n ...(initialWorkspaceId ? { initialValue: initialWorkspaceId } : {}),\n });\n\n if (prompts.isCancel(selected)) {\n return cancelResult(prompts);\n }\n if (typeof selected !== \"string\") {\n return cancelResult(prompts);\n }\n\n if (selected === SKIP_WORKSPACE_VALUE) {\n return {\n message: \"Workspace bootstrap skipped.\",\n status: \"skipped\",\n ...(currentWorkspace ? { workspace: currentWorkspace } : {}),\n };\n }\n\n if (selected === CREATE_WORKSPACE_VALUE) {\n return createAndSelectWorkspace(client, prompts);\n }\n\n const chosenWorkspace = workspaces.find((workspace) => workspace.id === selected);\n if (!chosenWorkspace) {\n throw new Error(`Selected workspace ${selected} is no longer available.`);\n }\n\n if (chosenWorkspace.isDefault) {\n return {\n defaultChanged: false,\n message: `\"${chosenWorkspace.name}\" is already the default OrgX workspace.`,\n status: \"unchanged\",\n workspace: chosenWorkspace,\n };\n }\n\n const promoted = await client.setDefaultWorkspace({ id: chosenWorkspace.id });\n return {\n defaultChanged: promoted.changed,\n message: `Set \"${promoted.workspace.name}\" as the default OrgX workspace.`,\n status: promoted.changed ? \"updated\" : \"unchanged\",\n workspace: promoted.workspace,\n };\n}\n","import {\n ensureFounderDemoInitiative,\n type FounderDemoInitiativeResult,\n} from \"./initiatives.js\";\nimport { persistContinuityDefaults, type ContinuitySeed } from \"./continuity.js\";\nimport {\n DEFAULT_ORGX_SKILL_PACKS,\n installOrgxSkills,\n type SkillsInstallReport,\n} from \"./skills.js\";\nimport { listOrgxPluginStatuses } from \"./plugins.js\";\nimport {\n runWorkspaceSetup,\n type WorkspaceSetupOptions,\n type WorkspaceSetupPrompts,\n type WorkspaceSetupResult,\n} from \"./setup-workspace.js\";\nimport { listSurfaceStatuses, setupDetectedSurfaces, type SurfaceMutationResult } from \"../surfaces/registry.js\";\nimport {\n createWorkspace,\n getCurrentWorkspace,\n listWorkspaces,\n setDefaultWorkspace,\n type OrgxWorkspace,\n} from \"./workspaces.js\";\nimport type { WizardStateRecord } from \"./wizard-state.js\";\n\nexport interface FounderPresetResult {\n continuity: WizardStateRecord;\n demoInitiative?: FounderDemoInitiativeResult;\n skillReport: SkillsInstallReport;\n surfaceResults: SurfaceMutationResult[];\n workspace: OrgxWorkspace | null;\n workspaceSetup?: WorkspaceSetupResult;\n}\n\nexport async function runFounderPreset(\n prompts: WorkspaceSetupPrompts,\n options: WorkspaceSetupOptions & { pluginTargets?: readonly string[] },\n): Promise<FounderPresetResult | WorkspaceSetupResult> {\n const surfaceResults = await setupDetectedSurfaces();\n const pluginTargets = options.pluginTargets ?? (\n await listOrgxPluginStatuses()\n )\n .filter((status) => status.installed)\n .map((status) => status.target);\n const skillReport = await installOrgxSkills({\n pluginTargets,\n skillNames: [...DEFAULT_ORGX_SKILL_PACKS],\n });\n\n let workspaceSetup: WorkspaceSetupResult | undefined;\n let workspace = await getCurrentWorkspace().catch(() => null);\n\n if (workspace || options.interactive) {\n workspaceSetup = await runWorkspaceSetup(\n {\n createWorkspace,\n getCurrentWorkspace,\n listWorkspaces,\n setDefaultWorkspace,\n },\n prompts,\n options,\n );\n\n if (workspaceSetup.status === \"cancelled\") {\n return workspaceSetup;\n }\n\n workspace = workspaceSetup.workspace ?? workspace ?? await getCurrentWorkspace().catch(() => null);\n }\n\n const continuity = persistContinuityDefaults({\n statuses: listSurfaceStatuses(),\n workspace,\n });\n\n let demoInitiative: FounderDemoInitiativeResult | undefined;\n if (workspace) {\n demoInitiative = await ensureFounderDemoInitiative(workspace);\n }\n\n return {\n continuity,\n ...(demoInitiative ? { demoInitiative } : {}),\n skillReport,\n surfaceResults,\n workspace,\n ...(workspaceSetup ? { workspaceSetup } : {}),\n };\n}\n","import type { SurfaceMutationResult } from \"../surfaces/registry.js\";\n\nexport type MutationSummary = {\n name: string;\n state: \"updated\" | \"unchanged\";\n message: string;\n};\n\nexport function summarizeMutationResults(\n results: SurfaceMutationResult[],\n): MutationSummary[] {\n return results.map((result) => ({\n name: result.name,\n state: result.changed ? \"updated\" : \"unchanged\",\n message: result.message,\n }));\n}\n","import type { DoctorAssessment } from \"../surfaces/registry.js\";\n\nexport const HOSTED_MCP_OUTAGE_TITLE = \"Hosted OrgX MCP is unreachable.\";\n\nexport interface SetupVerificationSummary {\n hostedMcpDegraded: boolean;\n status: \"degraded\" | \"error\" | \"ok\" | \"warning\";\n}\n\nexport function getSetupVerificationHeadline(summary: SetupVerificationSummary): string {\n switch (summary.status) {\n case \"degraded\":\n return \"Hosted OrgX MCP is down; local setup can still continue.\";\n case \"error\":\n return \"Issues detected\";\n case \"warning\":\n return \"Warnings detected\";\n case \"ok\":\n return \"All systems ready.\";\n }\n}\n\nexport function summarizeSetupVerification(\n assessment: DoctorAssessment,\n): SetupVerificationSummary {\n const errors = assessment.issues.filter((issue) => issue.level === \"error\");\n if (errors.length === 0) {\n return {\n hostedMcpDegraded: false,\n status: assessment.issues.length > 0 ? \"warning\" : \"ok\",\n };\n }\n\n const hostedMcpDegraded = errors.every((issue) => issue.title === HOSTED_MCP_OUTAGE_TITLE);\n return {\n hostedMcpDegraded,\n status: hostedMcpDegraded ? \"degraded\" : \"error\",\n };\n}\n","import type { DoctorAssessment, DoctorReport } from \"../surfaces/registry.js\";\nimport type { FounderDemoInitiativeResult, OrgxTask } from \"./initiatives.js\";\nimport type { SetupVerificationSummary } from \"./setup-verification.js\";\nimport type { WorkspaceSetupResult } from \"./setup-workspace.js\";\nimport type { WizardAgentRosterRecord } from \"./wizard-state.js\";\n\nfunction withBaseProperties(\n properties: Record<string, unknown>,\n base: Record<string, unknown>,\n): Record<string, unknown> {\n return {\n ...base,\n ...properties,\n };\n}\n\nexport function buildWorkspaceSetupTelemetryProperties(\n result: WorkspaceSetupResult,\n base: Record<string, unknown> = {},\n): Record<string, unknown> {\n return withBaseProperties(\n {\n created: result.created === true,\n default_changed: result.defaultChanged === true,\n has_workspace: Boolean(result.workspace),\n status: result.status,\n },\n base,\n );\n}\n\nexport function buildOnboardingTaskTelemetryProperties(\n input: {\n created: boolean;\n hasInitiative: boolean;\n task: Pick<OrgxTask, \"status\">;\n },\n base: Record<string, unknown> = {},\n): Record<string, unknown> {\n return withBaseProperties(\n {\n created: input.created,\n has_initiative: input.hasInitiative,\n task_status: input.task.status ?? \"unknown\",\n },\n base,\n );\n}\n\nexport function buildAgentRosterTelemetryProperties(\n input: {\n roster: WizardAgentRosterRecord;\n strategy: \"default\" | \"guided\";\n },\n base: Record<string, unknown> = {},\n): Record<string, unknown> {\n return withBaseProperties(\n {\n agent_count: input.roster.agents.length,\n domain_count: new Set(input.roster.agents.map((agent) => agent.domain)).size,\n strategy: input.strategy,\n },\n base,\n );\n}\n\nexport function buildFounderDemoTelemetryProperties(\n result: FounderDemoInitiativeResult,\n base: Record<string, unknown> = {},\n): Record<string, unknown> {\n return withBaseProperties(\n {\n created: result.created,\n decision_status: result.decision.status ?? \"unknown\",\n has_artifact_url: Boolean(result.artifact.url),\n },\n base,\n );\n}\n\nexport function buildDoctorTelemetryProperties(\n report: DoctorReport,\n assessment: DoctorAssessment,\n verification: SetupVerificationSummary,\n base: Record<string, unknown> = {},\n): Record<string, unknown> {\n const errorCount = assessment.issues.filter((issue) => issue.level === \"error\").length;\n const warningCount = assessment.issues.filter((issue) => issue.level === \"warning\").length;\n\n return withBaseProperties(\n {\n auth_configured: report.auth.configured,\n auth_ok: report.auth.ok,\n configured_surface_count: report.surfaces.filter((surface) => surface.configured).length,\n detected_surface_count: report.surfaces.filter((surface) => surface.detected).length,\n error_count: errorCount,\n hosted_mcp_degraded: verification.hostedMcpDegraded,\n hosted_mcp_ok: report.hostedMcp.ok,\n hosted_mcp_tool_ok: report.hostedMcpTool.ok,\n issue_count: assessment.issues.length,\n openclaw_available: !report.openclaw.skipped,\n openclaw_ok: report.openclaw.ok,\n status: verification.status,\n warning_count: warningCount,\n workspace_configured: report.workspace.configured,\n workspace_ok: report.workspace.ok,\n },\n base,\n );\n}\n","import { getOrCreateWizardInstallationId } from \"./wizard-state.js\";\n\nconst POSTHOG_DEFAULT_HOST = \"https://us.i.posthog.com\";\nconst WIZARD_LIB = \"@useorgx/wizard\";\n\nfunction isTruthyEnv(value: string | undefined): boolean {\n if (!value) return false;\n\n switch (value.trim().toLowerCase()) {\n case \"1\":\n case \"true\":\n case \"yes\":\n case \"y\":\n case \"on\":\n return true;\n default:\n return false;\n }\n}\n\nfunction isWizardTelemetryDisabled(): boolean {\n const explicitEnable = isTruthyEnv(process.env.ORGX_TELEMETRY_ENABLED);\n if (!explicitEnable) return true;\n\n return (\n isTruthyEnv(process.env.ORGX_TELEMETRY_DISABLED) ||\n isTruthyEnv(process.env.OPENCLAW_TELEMETRY_DISABLED) ||\n isTruthyEnv(process.env.POSTHOG_DISABLED)\n );\n}\n\nfunction resolvePosthogApiKey(): string | null {\n const value =\n process.env.ORGX_POSTHOG_API_KEY ??\n process.env.POSTHOG_API_KEY ??\n process.env.ORGX_POSTHOG_KEY ??\n process.env.POSTHOG_KEY ??\n \"\";\n const trimmed = value.trim();\n return trimmed || null;\n}\n\nfunction resolvePosthogHost(): string {\n const value =\n process.env.ORGX_POSTHOG_HOST ??\n process.env.POSTHOG_HOST ??\n process.env.ORGX_POSTHOG_API_HOST ??\n process.env.POSTHOG_API_HOST ??\n \"\";\n const trimmed = value.trim();\n return trimmed || POSTHOG_DEFAULT_HOST;\n}\n\nfunction toPosthogBatchUrl(host: string): string {\n try {\n return new URL(\"/batch/\", host).toString();\n } catch {\n return `${POSTHOG_DEFAULT_HOST}/batch/`;\n }\n}\n\nexport async function trackWizardTelemetry(\n event: string,\n properties: Record<string, unknown> = {},\n options: { statePath?: string; timestamp?: string } = {},\n): Promise<boolean> {\n if (isWizardTelemetryDisabled()) return false;\n\n const apiKey = resolvePosthogApiKey();\n if (!apiKey) return false;\n\n const installationId = getOrCreateWizardInstallationId(options.statePath);\n const timestamp = options.timestamp ?? new Date().toISOString();\n const response = await fetch(toPosthogBatchUrl(resolvePosthogHost()), {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n api_key: apiKey,\n batch: [\n {\n type: \"capture\",\n event,\n distinct_id: installationId,\n properties: {\n $lib: WIZARD_LIB,\n source: WIZARD_LIB,\n wizard_installation_id: installationId,\n ...properties,\n },\n timestamp,\n },\n ],\n sent_at: timestamp,\n }),\n }).catch(() => null);\n\n return response?.ok === true;\n}\n","import ora, { type Ora } from \"ora\";\nimport pc from \"picocolors\";\n\nconst frames = [\"[ ]\", \"[= ]\", \"[== ]\", \"[=== ]\", \"[ ===]\", \"[ ==]\", \"[ =]\"];\n\nexport function createOrgxSpinner(text: string): Ora {\n return ora({\n text: pc.cyan(text),\n spinner: {\n interval: 90,\n frames,\n },\n });\n}\n\n"],"mappings":"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","names":["pc","hostname","text","text","isNonEmptyString","spawnSync","spawnSync","text","text","text","parseResponseBody","text","existsSync","dirname","dirname","existsSync","inspection","parseResponseBody","text","formatHttpError","requireOrgxAuth","parse","join","join","existsSync","mkdirSync","readFileSync","statSync","writeFileSync","dirname","join","encodeRepoPath","buildContentsUrl","resolveGitHubError","fetchDirectoryEntries","join","existsSync","statSync","readFileSync","mkdirSync","dirname","writeFileSync","pc","text","pc","pc","spinner","doctor","assessment","verification"]}
|