@xapps-platform/cli 0.1.2 → 0.1.3
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 +1 -1
- package/dist/cli.cjs +1 -1
- package/dist/cli.cjs.map +2 -2
- package/package.json +1 -1
package/dist/cli.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/cli.ts", "../src/devStatus.ts", "../src/contextCommands.ts", "../src/commands/manifestCommands.ts", "../src/commands/devCommands.ts", "../src/devFlow.ts", "../src/devCheckFlow.ts", "../src/aiCommands.ts", "../src/publisherCommands.ts"],
|
|
4
|
-
"sourcesContent": ["import fs from \"node:fs\";\nimport { createHash, createHmac } from \"node:crypto\";\nimport http, { type IncomingMessage } from \"node:http\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport readline from \"node:readline/promises\";\nimport {\n createPublisherApiClient,\n PublisherApiClientError,\n parseXappManifest,\n} from \"@xapps-platform/server-sdk\";\nimport { buildDevRefs } from \"./devStatus.js\";\nimport { runContextExportCommand } from \"./contextCommands.js\";\nimport {\n runImportCommand,\n runInitCommand,\n runTestCommand,\n runValidateCommand,\n} from \"./commands/manifestCommands.js\";\nimport {\n runAiCheckCliCommand,\n runAiPlanCliCommand,\n runDevCommand,\n runPublisherCliCommand,\n} from \"./commands/devCommands.js\";\n\ntype CliArgValue = string | boolean | string[];\ntype CliArgs = Record<string, CliArgValue>;\ntype CliConfigProfile = {\n token?: string;\n apiKey?: string;\n publishUrl?: string;\n releaseChannel?: string;\n registryTarget?: string;\n logsUrl?: string;\n tunnelToken?: string;\n signingKey?: string;\n versionConflict?: \"fail\" | \"allow\";\n};\ntype CliConfigFile = {\n defaultProfile?: string;\n profiles?: Record<string, CliConfigProfile>;\n};\n\nconst DEFAULT_PUBLISH_BUNDLES_DIR = path.join(\"artifacts\", \"xapps-publish\");\n\nexport class CliError extends Error {\n code: string;\n details?: Record<string, unknown>;\n exitCode?: number;\n\n constructor(\n code: string,\n message: string,\n details?: Record<string, unknown>,\n options?: { exitCode?: number },\n ) {\n super(message);\n this.name = \"CliError\";\n this.code = code;\n this.details = details;\n this.exitCode = options?.exitCode;\n }\n}\n\nfunction printUsage() {\n console.log(`xapps CLI\n\nUsage:\n Public/stable publish surface:\n xapps import --from <openapi-file-or-url> --out <manifest.json> [options]\n xapps init --out <directory> [options]\n xapps validate --from <manifest.json>\n xapps test --from <manifest.json> --vectors <test-vectors.json>\n xapps publish --from <manifest.json> [options]\n xapps logs [options]\n xapps publisher endpoint credential set [options]\n xapps publisher endpoint credential ensure [options]\n\n Local/repo-only helpers:\n xapps dev --from <manifest.json> [options]\n xapps context export --from <manifest.json> [options]\n xapps tunnel --target <base-url> [options]\n xapps ai plan --mode internal --from <manifest.json> [--preset <internal-v1>] [--flow <name>] [--mocks-dir <dir>] [--guidance <text> | --guidance-file <file> | --ask-guidance] [--llm] [--llm-model <model>] [--llm-timeout-ms <n>] [--apply-manifest-hints] [--json]\n Example guidance: \"Infer complete form fields from mockups, build a step wizard, add supported preview sections, and exclude payment screens because payment is handled by guards.\"\n LLM flags: --llm-api-key <key> --llm-base-url <url> --llm-model <model> --llm-timeout-ms <n> (default model: gpt-5.2, default timeout: 30000ms)\n xapps ai check --mode internal --plan <plan.json> [--policy <policy.json> | --policy-preset <internal-readonly>] [--json]\n xapps dev status refs [--json]\n xapps dev check v1 [--json]\n xapps dev check flow --name <flow> [--json] [--run] [--artifacts-dir <dir>]\n xapps dev check flow --from <flow.json> [--json] [--run] [--artifacts-dir <dir>]\n xapps dev check flow init --out <flow.json> --type <ai-artifacts|manual-loop> [--flow-id <id>] [--manifest <path>] [--policy <path>] [--smoke-script <path>] [--json]\n xapps dev check flow lint --from <flow.json> [--json]\n\nGlobal options:\n --profile <name> Profile name from ~/.xapps/config (or env XAPPS_CLI_PROFILE)\n\nImport options:\n --name <name> App name (default: OpenAPI info.title)\n --slug <slug> Manifest slug (default: slugified app name)\n --version <semver> Manifest version (default: 1.0.0)\n --description <text> Manifest description\n --endpoint <base_url> Endpoint base_url (default: https://api.example.com)\n --endpoint-env <env> Endpoint env key (default: prod)\n --fetch-timeout-ms <n> Remote OpenAPI fetch timeout in ms (default: 10000)\n\nInit options:\n --name <name> App name (default: My Xapp)\n --slug <slug> Manifest slug (default: slugified app name)\n --version <semver> Manifest version (default: 1.0.0)\n --force Overwrite existing files\n\nTest options:\n --from <manifest.json> Manifest file to validate against\n --vectors <vectors.json> Request/response contract vectors\n\nPublish options:\n --from <manifest.json> Manifest file to package\n --out <file-or-dir> Output file or directory (default: artifacts/xapps-publish/<slug>/<version>)\n --dry-run Validate + print summary only (no files written)\n --yes Skip release confirmation prompt (required in non-interactive mode)\n --force Overwrite target artifact if it exists\n --publish-url <url> Optional remote publish endpoint (POST bundle JSON)\n --publisher-gateway-url <url> Optional local gateway publisher API base URL (uses /publisher/* routes)\n --target-client-slug <slug> Resolve tenant slug to target_client_id via --publisher-gateway-url for publish\n --replace <A=B> Replace placeholder/text A with literal B in manifest before publish (repeatable)\n --replace-env <A=ENV> Replace placeholder/text A with process.env[ENV] before publish (repeatable)\n --bump-version <kind> Bump manifest version before publish: patch|minor|major\n --write-manifest-version Write bumped version back to source manifest file (only version field is persisted)\n --allow-unresolved-placeholders Skip preflight failure when __PLACEHOLDER__ tokens remain after replacements\n --token <token> Bearer token for --publish-url (or env XAPPS_CLI_TOKEN)\n --api-key <key> API key header value (or env XAPPS_CLI_API_KEY)\n --signing-key <key> HMAC key for signed publish metadata headers (or env XAPPS_CLI_SIGNING_KEY)\n --version-conflict <mode> Version conflict policy: fail|allow (default: fail)\n --release-channel <name> Release channel label for remote publish handoff (default: stable)\n --registry-target <name> Registry target/namespace label for remote publish handoff\n --idempotency-key <key> Idempotency key header for --publish-url handoff\n --timeout-ms <n> Remote publish timeout in ms (default: 10000)\n --retry-attempts <n> Remote publish retry attempts for transient failures (default: 1)\n --retry-backoff-ms <n> Base backoff between publish retries (default: 250)\n\nPublisher endpoint credential set/ensure options:\n --gateway-url <url> Gateway base URL (auto-uses /v1 if path omitted)\n --api-key <key> Publisher API key (or env XAPPS_CLI_API_KEY)\n --token <token> Publisher bearer token (or env XAPPS_CLI_TOKEN)\n --endpoint-id <id> Endpoint id (optional if using --xapp-slug + --env)\n --xapp-slug <slug> Resolve endpoint by publisher xapp slug\n --target-client-slug <slug> Resolve the tenant-scoped xapp variant before endpoint lookup\n --env <name> Endpoint env when resolving by xapp slug (default: prod)\n --auth-type <type> Endpoint auth type (default: api-key)\n --header-name <name> API key header name for api-key header auth (default: x-xplace-api-key)\n --secret-env <ENV> Read initial credential key secret from environment variable\n --secret-stdin Read initial credential key secret from stdin\n --secret-ref <ref> Store a gateway secret provider reference instead of literal secret\n --key-status <status> Initial key status (default: active)\n --key-algorithm <alg> Initial key algorithm (default: hmac-sha256)\n --json Machine-readable output\n\nLogs options:\n --from <bundle.json> Read a single local publish bundle\n --dir <path> Scan publish bundles in directory (default: artifacts/xapps-publish)\n --limit <n> Max entries (default: 10)\n --json Print JSON output\n --logs-url <url> Optional remote logs endpoint (GET)\n --token <token> Bearer token for --logs-url (or env XAPPS_CLI_TOKEN)\n --api-key <key> API key header value (or env XAPPS_CLI_API_KEY)\n --cursor <value> Optional pagination cursor for remote logs\n --lease-id <value> Optional managed log stream lease identifier\n --checkpoint <value> Optional managed log stream checkpoint token\n --severity <value> Optional remote filter (ex: error or error,warn)\n --since <iso> Optional remote filter start timestamp\n --until <iso> Optional remote filter end timestamp\n --follow Keep polling remote logs and resume from next cursor\n --follow-interval-ms <n> Poll interval for --follow mode (default: 2000)\n --follow-max-cycles <n> Optional max follow polling cycles (for automation/testing)\n --follow-cursor-file <path> Persist/restore follow cursor state to local file\n --timeout-ms <n> Remote logs timeout in ms (default: 10000)\n --retry-attempts <n> Remote logs retry attempts for transient failures (default: 1)\n --retry-backoff-ms <n> Base backoff between logs retries (default: 250)\n\nContext export options:\n export --from <manifest.json> Manifest file to export deterministic context from\n --out <file> Write context JSON to file (default: stdout)\n --preset <name> Optional repo-only context preset (Phase 1: internal-v1)\n\nTunnel options:\n --target <base-url> Relay target base URL (required)\n --allow-target-hosts <csv> Explicit target host allowlist (default: 127.0.0.1,localhost,::1)\n --host <host> Relay bind host (default: 127.0.0.1)\n --listen-port <port> Relay bind port (default: 4041)\n --session-id <id> Stable tunnel session id (optional)\n --session-file <path> Persist/reuse session id across restarts\n --session-policy <mode> Session lifecycle policy: reuse|require|rotate (default: reuse)\n --require-auth-token <tok> Require inbound relay token (header x-xapps-tunnel-token or Bearer)\n --upstream-timeout-ms <n> Upstream request timeout in ms (default: 15000)\n --retry-attempts <n> Upstream retry attempts for GET/HEAD/OPTIONS transient failures (default: 1)\n --retry-backoff-ms <n> Base backoff between upstream retries (default: 200)\n --once Start, print config, and exit\n\nDev options:\n --from <manifest.json> Manifest file to validate/watch\n --dry-run <request.json> Inspect a request payload against manifest tools\n --port <port> Mock callback server port (default: 4011)\n --host <host> Mock callback server host (default: 127.0.0.1)\n --once Validate + dry-run only; skip watch/server\n --no-watch Disable manifest watch loop\n\nNotes:\n - Public/stable surface focuses on manifest authoring, validation, publish, logs, and publisher endpoint credentials.\n - AI/internal preset/dev-check commands are repo-only helpers and require the xapps monorepo checkout.\n`);\n}\n\nfunction parseArgs(argv: string[]): { command: string; args: CliArgs } {\n const [command = \"\", ...rest] = argv;\n const args: CliArgs = {};\n let subcommandCount = 0;\n\n for (let i = 0; i < rest.length; i += 1) {\n const token = rest[i];\n if (!token.startsWith(\"--\")) {\n subcommandCount += 1;\n if (subcommandCount === 1) args._subcommand = token;\n else if (subcommandCount === 2) args._subcommand2 = token;\n else if (subcommandCount === 3) args._subcommand3 = token;\n continue;\n }\n\n const key = token.slice(2);\n const next = rest[i + 1];\n if (!next || next.startsWith(\"--\")) {\n if (args[key] === undefined) {\n args[key] = true;\n } else if (Array.isArray(args[key])) {\n (args[key] as string[]).push(\"true\");\n } else if (typeof args[key] === \"string\") {\n args[key] = [args[key] as string, \"true\"];\n }\n continue;\n }\n\n if (args[key] === undefined) {\n args[key] = next;\n } else if (Array.isArray(args[key])) {\n (args[key] as string[]).push(next);\n } else if (typeof args[key] === \"string\") {\n args[key] = [args[key] as string, next];\n } else {\n args[key] = [next];\n }\n i += 1;\n }\n\n return { command, args };\n}\n\nfunction argString(args: CliArgs, ...keys: string[]): string | undefined {\n for (const key of keys) {\n const value = args[key];\n if (Array.isArray(value)) {\n for (let i = value.length - 1; i >= 0; i -= 1) {\n const item = value[i];\n if (typeof item === \"string\" && item.trim()) return item.trim();\n }\n continue;\n }\n if (typeof value === \"string\" && value.trim()) {\n return value.trim();\n }\n }\n return undefined;\n}\n\nfunction argStrings(args: CliArgs, ...keys: string[]): string[] {\n const out: string[] = [];\n for (const key of keys) {\n const value = args[key];\n if (Array.isArray(value)) {\n for (const item of value) {\n if (typeof item === \"string\" && item.trim()) out.push(item.trim());\n }\n continue;\n }\n if (typeof value === \"string\" && value.trim()) {\n out.push(value.trim());\n }\n }\n return out;\n}\n\nfunction argFlag(args: CliArgs, key: string): boolean {\n const value = args[key];\n if (value === true) return true;\n if (Array.isArray(value)) return value.includes(\"true\");\n return false;\n}\n\nfunction shellEscapeArg(value: string): string {\n const input = String(value ?? \"\");\n if (/^[A-Za-z0-9_./:-]+$/.test(input)) return input;\n return `'${input.replace(/'/g, `'\"'\"'`)}'`;\n}\n\nfunction applyFlowCommandTemplates(command: string, params: { artifactsDir: string }): string {\n return String(command || \"\").replaceAll(\"{{ARTIFACTS_DIR}}\", params.artifactsDir);\n}\n\nfunction normalizePublisherGatewayApiBaseUrl(input: string): string {\n const raw = String(input || \"\").trim();\n if (!raw) return \"\";\n const parsed = new URL(raw);\n const pathname = parsed.pathname || \"/\";\n if (pathname === \"/\" || pathname === \"\") {\n parsed.pathname = \"/v1\";\n return parsed.toString().replace(/\\/+$/g, \"\");\n }\n return parsed.toString().replace(/\\/+$/g, \"\");\n}\n\nfunction defaultCliConfigPath() {\n return path.join(os.homedir(), \".xapps\", \"config\");\n}\n\nfunction parseVersionConflictPolicy(\n value: string | undefined,\n fallback: \"fail\" | \"allow\" = \"fail\",\n): \"fail\" | \"allow\" {\n if (!value) return fallback;\n const normalized = String(value).trim().toLowerCase();\n if (normalized === \"fail\" || normalized === \"allow\") return normalized;\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid --version-conflict: ${value} (expected fail|allow)`,\n { label: \"--version-conflict\", value },\n );\n}\n\ntype ManifestReplaceRule = {\n from: string;\n to: string;\n source: \"literal\" | \"env\";\n sourceName?: string;\n};\n\nfunction parseManifestReplaceLiteral(raw: string): ManifestReplaceRule {\n const idx = raw.indexOf(\"=\");\n if (idx <= 0) {\n throw new CliError(\"CLI_INVALID_OPTION\", `Invalid --replace value: ${raw} (expected FROM=TO)`, {\n label: \"--replace\",\n value: raw,\n });\n }\n const from = raw.slice(0, idx).trim();\n const to = raw.slice(idx + 1);\n if (!from) {\n throw new CliError(\"CLI_INVALID_OPTION\", `Invalid --replace value: ${raw} (empty FROM)`, {\n label: \"--replace\",\n value: raw,\n });\n }\n return { from, to, source: \"literal\" };\n}\n\nfunction parseManifestReplaceEnv(raw: string): ManifestReplaceRule {\n const idx = raw.indexOf(\"=\");\n if (idx <= 0) {\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid --replace-env value: ${raw} (expected FROM=ENV_VAR)`,\n { label: \"--replace-env\", value: raw },\n );\n }\n const from = raw.slice(0, idx).trim();\n const envName = raw.slice(idx + 1).trim();\n if (!from || !envName) {\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid --replace-env value: ${raw} (empty FROM or ENV_VAR)`,\n { label: \"--replace-env\", value: raw },\n );\n }\n const envValue = process.env[envName];\n if (typeof envValue !== \"string\" || envValue.length === 0) {\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Environment variable missing/empty for --replace-env ${envName}`,\n { label: \"--replace-env\", value: raw, env: envName },\n );\n }\n return { from, to: envValue, source: \"env\", sourceName: envName };\n}\n\nfunction applyManifestReplaceRulesDeep<T>(input: T, rules: ManifestReplaceRule[]): T {\n if (!rules.length) return input;\n const replaceToken = (raw: string): string => {\n let next = raw;\n for (const rule of rules) {\n next = next.split(rule.from).join(rule.to);\n }\n return next;\n };\n const walk = (value: unknown): unknown => {\n if (typeof value === \"string\") {\n return replaceToken(value);\n }\n if (Array.isArray(value)) return value.map(walk);\n if (value && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[replaceToken(k)] = walk(v);\n }\n return out;\n }\n return value;\n };\n return walk(input) as T;\n}\n\nfunction findUnresolvedPlaceholderTokens(input: unknown): string[] {\n const seen = new Set<string>();\n const re = /__[A-Z0-9_]+__/g;\n const collect = (raw: string) => {\n const matches = raw.match(re);\n if (matches) for (const m of matches) seen.add(m);\n };\n const walk = (value: unknown) => {\n if (typeof value === \"string\") {\n collect(value);\n return;\n }\n if (Array.isArray(value)) {\n for (const item of value) walk(item);\n return;\n }\n if (value && typeof value === \"object\") {\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n collect(k);\n walk(v);\n }\n return;\n }\n };\n walk(input);\n return Array.from(seen).sort();\n}\n\ntype VersionBumpKind = \"patch\" | \"minor\" | \"major\";\n\nfunction parseVersionBumpKind(value: string | undefined): VersionBumpKind | null {\n if (!value) return null;\n const normalized = String(value).trim().toLowerCase();\n if (normalized === \"patch\" || normalized === \"minor\" || normalized === \"major\") {\n return normalized;\n }\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid --bump-version: ${value} (expected patch|minor|major)`,\n { label: \"--bump-version\", value },\n );\n}\n\nfunction bumpSemverVersionOrThrow(version: string, kind: VersionBumpKind): string {\n const match = /^(\\d+)\\.(\\d+)\\.(\\d+)$/.exec(String(version || \"\").trim());\n if (!match) {\n throw new CliError(\"CLI_INVALID_OPTION\", `Cannot ${kind}-bump non-semver version: ${version}`, {\n label: \"--bump-version\",\n version,\n });\n }\n let major = Number(match[1]);\n let minor = Number(match[2]);\n let patch = Number(match[3]);\n if (kind === \"major\") {\n major += 1;\n minor = 0;\n patch = 0;\n } else if (kind === \"minor\") {\n minor += 1;\n patch = 0;\n } else {\n patch += 1;\n }\n return `${major}.${minor}.${patch}`;\n}\n\nfunction parseTunnelSessionPolicy(\n value: string | undefined,\n fallback: \"reuse\" | \"require\" | \"rotate\" = \"reuse\",\n): \"reuse\" | \"require\" | \"rotate\" {\n if (!value) return fallback;\n const normalized = String(value).trim().toLowerCase();\n if (normalized === \"reuse\" || normalized === \"require\" || normalized === \"rotate\") {\n return normalized;\n }\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid --session-policy: ${value} (expected reuse|require|rotate)`,\n { label: \"--session-policy\", value },\n );\n}\n\nfunction parseReleaseLabel(\n label: string | undefined,\n fallback: string,\n optionName: string,\n): string {\n const raw = String(label || fallback || \"\")\n .trim()\n .toLowerCase();\n if (!raw)\n return String(fallback || \"\")\n .trim()\n .toLowerCase();\n if (!/^[a-z0-9][a-z0-9._-]{0,63}$/.test(raw)) {\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid ${optionName}: ${label} (expected 1-64 chars: a-z, 0-9, ., _, -)`,\n { label: optionName, value: label },\n );\n }\n return raw;\n}\n\ntype TunnelSessionState = {\n sessionId: string;\n target?: string;\n updatedAt?: string;\n schemaVersion?: number;\n};\n\nfunction parseCsvSet(value: string | undefined, fallbackCsv: string): Set<string> {\n const raw = String(value || fallbackCsv);\n return new Set(\n raw\n .split(\",\")\n .map((item) => item.trim().toLowerCase())\n .filter(Boolean),\n );\n}\n\nfunction randomSessionId(prefix = \"tnl\"): string {\n return `${prefix}_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction resolveCursorStatePath(rawPath: string): string {\n return path.resolve(process.cwd(), rawPath);\n}\n\ntype LogsResumeState = {\n cursor?: string;\n leaseId?: string;\n checkpoint?: string;\n};\n\nfunction loadLogsResumeState(filePathRaw: string): LogsResumeState {\n const filePath = resolveCursorStatePath(filePathRaw);\n if (!fs.existsSync(filePath)) return {};\n try {\n const raw = fs.readFileSync(filePath, \"utf8\").trim();\n if (!raw) return {};\n if (!raw.startsWith(\"{\")) {\n // Backward compatible plain cursor-file format.\n return { cursor: raw };\n }\n const parsed = JSON.parse(raw);\n if (!isPlainObject(parsed)) {\n throw new Error(\"resume state must be a JSON object\");\n }\n const cursor =\n typeof (parsed as any).cursor === \"string\"\n ? String((parsed as any).cursor)\n : typeof (parsed as any).next_cursor === \"string\"\n ? String((parsed as any).next_cursor)\n : \"\";\n const leaseId =\n typeof (parsed as any).lease_id === \"string\"\n ? String((parsed as any).lease_id)\n : typeof (parsed as any).leaseId === \"string\"\n ? String((parsed as any).leaseId)\n : \"\";\n const checkpoint =\n typeof (parsed as any).checkpoint === \"string\"\n ? String((parsed as any).checkpoint)\n : typeof (parsed as any).checkpoint_token === \"string\"\n ? String((parsed as any).checkpoint_token)\n : typeof (parsed as any).checkpointToken === \"string\"\n ? String((parsed as any).checkpointToken)\n : \"\";\n return {\n ...(cursor ? { cursor } : {}),\n ...(leaseId ? { leaseId } : {}),\n ...(checkpoint ? { checkpoint } : {}),\n };\n } catch (err: any) {\n throw new CliError(\n \"CLI_CURSOR_STATE_IO\",\n `Failed reading cursor state file: ${filePath} (${err?.message || String(err)})`,\n { filePath },\n );\n }\n}\n\nfunction saveLogsResumeState(filePathRaw: string, state: LogsResumeState) {\n const filePath = resolveCursorStatePath(filePathRaw);\n try {\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n const cursor = String(state.cursor || \"\").trim();\n const leaseId = String(state.leaseId || \"\").trim();\n const checkpoint = String(state.checkpoint || \"\").trim();\n if (!leaseId && !checkpoint) {\n fs.writeFileSync(filePath, `${cursor}\\n`);\n return;\n }\n const payload = {\n v: 1,\n ...(cursor ? { cursor } : {}),\n ...(leaseId ? { lease_id: leaseId } : {}),\n ...(checkpoint ? { checkpoint } : {}),\n updated_at: new Date().toISOString(),\n };\n fs.writeFileSync(filePath, JSON.stringify(payload, null, 2));\n } catch (err: any) {\n throw new CliError(\n \"CLI_CURSOR_STATE_IO\",\n `Failed writing cursor state file: ${filePath} (${err?.message || String(err)})`,\n { filePath },\n );\n }\n}\n\nfunction loadTunnelSessionState(filePathRaw: string): TunnelSessionState | null {\n const filePath = path.resolve(process.cwd(), filePathRaw);\n if (!fs.existsSync(filePath)) return null;\n try {\n const raw = fs.readFileSync(filePath, \"utf8\").trim();\n if (!raw) return null;\n if (!raw.startsWith(\"{\")) {\n // Backward compatible session-id only format.\n return { sessionId: raw };\n }\n const parsed = JSON.parse(raw);\n if (!isPlainObject(parsed)) {\n throw new Error(\"session state must be a JSON object\");\n }\n const sessionId =\n typeof (parsed as any).session_id === \"string\"\n ? String((parsed as any).session_id).trim()\n : typeof (parsed as any).sessionId === \"string\"\n ? String((parsed as any).sessionId).trim()\n : \"\";\n if (!sessionId) {\n throw new Error(\"session_id is required\");\n }\n const target =\n typeof (parsed as any).target === \"string\" ? String((parsed as any).target).trim() : \"\";\n const updatedAt =\n typeof (parsed as any).updated_at === \"string\"\n ? String((parsed as any).updated_at).trim()\n : typeof (parsed as any).updatedAt === \"string\"\n ? String((parsed as any).updatedAt).trim()\n : \"\";\n const schemaVersion =\n typeof (parsed as any).v === \"number\"\n ? Number((parsed as any).v)\n : typeof (parsed as any).version === \"number\"\n ? Number((parsed as any).version)\n : undefined;\n return {\n sessionId,\n ...(target ? { target } : {}),\n ...(updatedAt ? { updatedAt } : {}),\n ...(schemaVersion !== undefined ? { schemaVersion } : {}),\n };\n } catch (err: any) {\n throw new CliError(\n \"CLI_TUNNEL_SESSION_IO\",\n `Failed reading tunnel session file: ${filePath} (${err?.message || String(err)})`,\n { filePath },\n );\n }\n}\n\nfunction saveTunnelSessionState(filePathRaw: string, state: TunnelSessionState) {\n const filePath = path.resolve(process.cwd(), filePathRaw);\n try {\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n const payload = {\n v: 1,\n session_id: state.sessionId,\n ...(state.target ? { target: state.target } : {}),\n updated_at: new Date().toISOString(),\n };\n fs.writeFileSync(filePath, `${JSON.stringify(payload, null, 2)}\\n`);\n } catch (err: any) {\n throw new CliError(\n \"CLI_TUNNEL_SESSION_IO\",\n `Failed writing tunnel session file: ${filePath} (${err?.message || String(err)})`,\n { filePath },\n );\n }\n}\n\nfunction base64url(input: Buffer): string {\n return input.toString(\"base64\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/g, \"\");\n}\n\nfunction stableStringify(input: Record<string, unknown>): string {\n const keys = Object.keys(input).sort((a, b) => a.localeCompare(b));\n const out: Record<string, unknown> = {};\n for (const key of keys) out[key] = input[key];\n return JSON.stringify(out);\n}\n\nfunction canonicalizeJson(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => canonicalizeJson(item));\n }\n if (value && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(value as Record<string, unknown>).sort((a, b) =>\n a.localeCompare(b),\n )) {\n out[key] = canonicalizeJson((value as Record<string, unknown>)[key]);\n }\n return out;\n }\n return value;\n}\n\nfunction parseCliConfig(raw: string, sourcePath: string): CliConfigFile {\n try {\n const parsed = JSON.parse(raw);\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new CliError(\"CLI_CONFIG_INVALID\", \"config root must be a JSON object\", {\n sourcePath,\n });\n }\n return parsed as CliConfigFile;\n } catch (err: any) {\n if (err instanceof CliError) throw err;\n throw new CliError(\n \"CLI_CONFIG_INVALID\",\n `Invalid CLI config JSON (${sourcePath}): ${err?.message || String(err)}`,\n { sourcePath },\n );\n }\n}\n\nfunction loadCliConfig(_args: CliArgs): { config: CliConfigFile; configPath: string | null } {\n const configPath = process.env.XAPPS_CLI_CONFIG || defaultCliConfigPath();\n if (!fs.existsSync(configPath)) {\n return { config: {}, configPath: null };\n }\n const raw = fs.readFileSync(configPath, \"utf8\");\n return { config: parseCliConfig(raw, configPath), configPath };\n}\n\nfunction getProfile(args: CliArgs): {\n profileName: string;\n profile: CliConfigProfile;\n configPath: string | null;\n} {\n const { config, configPath } = loadCliConfig(args);\n const profileName =\n argString(args, \"profile\") || process.env.XAPPS_CLI_PROFILE || config.defaultProfile || \"\";\n if (!profileName) {\n return { profileName: \"\", profile: {}, configPath };\n }\n const profile = config.profiles?.[profileName];\n if (!profile || typeof profile !== \"object\") {\n const configLabel = configPath || defaultCliConfigPath();\n throw new CliError(\n \"CLI_PROFILE_NOT_FOUND\",\n `Unknown CLI profile '${profileName}' in ${configLabel}`,\n {\n profileName,\n configPath: configLabel,\n },\n );\n }\n return { profileName, profile, configPath };\n}\n\nasync function confirmPublishOrThrow(summary: Record<string, unknown>) {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n throw new CliError(\n \"CLI_CONFIRM_REQUIRED\",\n \"Publish confirmation required in non-interactive mode. Re-run with --yes.\",\n );\n }\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n try {\n const answer = await rl.question(\n `Release ${summary.slug}@${summary.version} (tools=${summary.tools}, widgets=${summary.widgets})? [y/N] `,\n );\n const normalized = String(answer || \"\")\n .trim()\n .toLowerCase();\n if (normalized !== \"y\" && normalized !== \"yes\") {\n throw new CliError(\"CLI_CONFIRM_DECLINED\", \"Publish cancelled by user.\");\n }\n } finally {\n rl.close();\n }\n}\n\nasync function readInput(from: string, fetchTimeoutMs: number): Promise<string> {\n if (/^https?:\\/\\//i.test(from)) {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), fetchTimeoutMs);\n try {\n const res = await fetch(from, { signal: controller.signal });\n if (!res.ok) {\n throw new CliError(\n \"CLI_REMOTE_FETCH_ERROR\",\n `Failed to fetch OpenAPI URL (${res.status}): ${from}`,\n {\n from,\n status: res.status,\n timeout_ms: fetchTimeoutMs,\n },\n );\n }\n return await res.text();\n } catch (err: any) {\n if (err instanceof CliError) throw err;\n if (err?.name === \"AbortError\") {\n throw new CliError(\n \"CLI_REMOTE_FETCH_ERROR\",\n `OpenAPI fetch timed out after ${fetchTimeoutMs}ms: ${from}`,\n { from, timeout_ms: fetchTimeoutMs },\n );\n }\n throw new CliError(\"CLI_REMOTE_FETCH_ERROR\", `Failed to fetch OpenAPI URL: ${from}`, {\n from,\n timeout_ms: fetchTimeoutMs,\n cause: String(err?.message || err || \"fetch_failed\"),\n });\n } finally {\n clearTimeout(timer);\n }\n }\n const absolute = path.resolve(process.cwd(), from);\n return fs.readFileSync(absolute, \"utf8\");\n}\n\nfunction readJsonFile(file: string): unknown {\n const filePath = path.resolve(process.cwd(), file);\n const raw = fs.readFileSync(filePath, \"utf8\");\n try {\n return JSON.parse(raw);\n } catch (err: any) {\n throw new Error(`Invalid JSON in ${filePath}: ${err?.message || String(err)}`);\n }\n}\n\nfunction parseManifestFromFile(from: string): {\n manifest: ReturnType<typeof parseXappManifest>;\n filePath: string;\n} {\n const filePath = path.resolve(process.cwd(), from);\n const parsed = readJsonFile(from);\n return { manifest: parseXappManifest(parsed), filePath };\n}\n\nfunction runContextExport(args: CliArgs) {\n runContextExportCommand(args, {\n argString,\n findRepoRoot,\n parseManifestFromFile,\n buildDevRefs,\n canonicalizeJson,\n makeCliError: (code, message, details) => new CliError(code, message, details),\n });\n}\n\nasync function readRequestBody(req: IncomingMessage): Promise<unknown> {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n if (typeof chunk === \"string\") {\n chunks.push(Buffer.from(chunk));\n } else {\n chunks.push(chunk);\n }\n }\n if (!chunks.length) return {};\n const raw = Buffer.concat(chunks).toString(\"utf8\");\n try {\n return JSON.parse(raw);\n } catch {\n return { _raw: raw };\n }\n}\n\nasync function readRawRequestBody(req: IncomingMessage): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n if (typeof chunk === \"string\") chunks.push(Buffer.from(chunk));\n else chunks.push(chunk);\n }\n return Buffer.concat(chunks);\n}\n\nfunction runDryRun(args: CliArgs, manifest: ReturnType<typeof parseXappManifest>) {\n const dryRunFile = argString(args, \"dry-run\");\n if (!dryRunFile) return;\n\n const requestPath = path.resolve(process.cwd(), dryRunFile);\n const raw = fs.readFileSync(requestPath, \"utf8\");\n let payload: any;\n try {\n payload = JSON.parse(raw);\n } catch (err: any) {\n throw new Error(\n `Invalid JSON in dry-run payload ${requestPath}: ${err?.message || String(err)}`,\n );\n }\n\n const toolName = typeof payload?.tool_name === \"string\" ? payload.tool_name : \"\";\n const tool = manifest.tools.find((item) => item.tool_name === toolName);\n const inputKeys =\n payload && typeof payload.input === \"object\" && payload.input\n ? Object.keys(payload.input as Record<string, unknown>)\n : [];\n\n console.log(\n [\n `Dry-run payload: ${requestPath}`,\n `Request id: ${typeof payload?.request_id === \"string\" ? payload.request_id : \"n/a\"}`,\n `Tool: ${toolName || \"n/a\"}${tool ? \" (manifest match)\" : \" (not found in manifest)\"}`,\n `Input keys: ${inputKeys.length ? inputKeys.join(\", \") : \"(none)\"}`,\n ].join(\"\\n\"),\n );\n}\n\nfunction findRepoRoot(startDir = process.cwd()): string | null {\n let current = path.resolve(startDir);\n for (let i = 0; i < 8; i += 1) {\n if (\n fs.existsSync(path.join(current, \"package.json\")) &&\n fs.existsSync(path.join(current, \"dev\"))\n ) {\n return current;\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return null;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction resolvePublishBundlePath(\n outArg: string | undefined,\n slug: string,\n version: string,\n): string {\n if (!outArg) {\n return path.resolve(process.cwd(), DEFAULT_PUBLISH_BUNDLES_DIR, slug, version, \"bundle.json\");\n }\n const resolved = path.resolve(process.cwd(), outArg);\n if (resolved.toLowerCase().endsWith(\".json\")) {\n return resolved;\n }\n return path.join(resolved, \"bundle.json\");\n}\n\nfunction parsePositiveIntOrThrow(\n value: string | undefined,\n fallback: number,\n label: string,\n): number {\n if (!value) return fallback;\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || !Number.isInteger(parsed) || parsed <= 0) {\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid ${label}: ${value} (expected positive integer)`,\n { label, value },\n );\n }\n return parsed;\n}\n\nfunction parseHttpUrlOrThrow(value: string, label: string): string {\n let parsed: URL;\n try {\n parsed = new URL(String(value || \"\").trim());\n } catch {\n throw new CliError(\"CLI_INVALID_OPTION\", `Invalid ${label}: ${value}`, { label, value });\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid ${label} protocol (http/https required): ${value}`,\n { label, value },\n );\n }\n return parsed.toString();\n}\n\nfunction parseListenPortOrThrow(value: string | undefined, fallback: number): number {\n if (!value) return fallback;\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed < 1 || parsed > 65535) {\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid --listen-port: ${value} (expected integer 1-65535)`,\n { label: \"--listen-port\", value },\n );\n }\n return parsed;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));\n}\n\nfunction isRetryableStatus(status: number): boolean {\n return status === 408 || status === 425 || status === 429 || status >= 500;\n}\n\nfunction appendForwardedHeader(existing: string | null, next: string): string {\n const normalized = next.trim();\n if (!normalized) return existing || \"\";\n if (!existing) return normalized;\n return `${existing}, ${normalized}`;\n}\n\ntype RetryableError = Error & { retryable?: boolean };\n\nfunction makeRetryableError(message: string, retryable = false): RetryableError {\n const err = new Error(message) as RetryableError;\n err.retryable = retryable;\n return err;\n}\n\nfunction normalizeRemoteErrorDetails(bodyText: string): string {\n const text = String(bodyText || \"\").trim();\n if (!text) return \"\";\n try {\n const parsed = JSON.parse(text);\n if (!isPlainObject(parsed)) {\n return `body=${text.slice(0, 400)}`;\n }\n const errorCode =\n typeof parsed.error === \"string\"\n ? parsed.error\n : typeof parsed.code === \"string\"\n ? parsed.code\n : \"\";\n const message =\n typeof parsed.message === \"string\"\n ? parsed.message\n : typeof parsed.detail === \"string\"\n ? parsed.detail\n : \"\";\n const parts: string[] = [];\n if (errorCode) parts.push(`error=${errorCode}`);\n if (message) parts.push(`message=${message.slice(0, 300)}`);\n return parts.length ? parts.join(\" \") : `body=${text.slice(0, 400)}`;\n } catch {\n return `body=${text.slice(0, 400)}`;\n }\n}\n\nfunction buildRemoteHttpFailureMessage(input: {\n channel: \"publish\" | \"logs\";\n status: number;\n url: string;\n bodyText: string;\n}): string {\n const detail = normalizeRemoteErrorDetails(input.bodyText);\n const retryable = isRetryableStatus(input.status);\n return [\n `Remote ${input.channel} failed (status=${input.status})`,\n `url=${input.url}`,\n `retryable=${retryable ? \"yes\" : \"no\"}`,\n detail,\n ]\n .filter(Boolean)\n .join(\" \");\n}\n\nfunction normalizePublishOutcome(raw: unknown): \"created\" | \"updated\" | \"already_exists\" | \"\" {\n const normalized = String(raw ?? \"\")\n .trim()\n .toLowerCase();\n if (!normalized) return \"\";\n if (\n normalized === \"created\" ||\n normalized === \"new\" ||\n normalized === \"published\" ||\n normalized === \"success\"\n )\n return \"created\";\n if (normalized === \"updated\" || normalized === \"modified\" || normalized === \"replaced\")\n return \"updated\";\n if (\n normalized === \"already_exists\" ||\n normalized === \"already-exists\" ||\n normalized === \"exists\" ||\n normalized === \"version_exists\" ||\n normalized === \"version-exists\" ||\n normalized === \"conflict\"\n )\n return \"already_exists\";\n return \"\";\n}\n\nfunction pickPublishAckContainers(\n payload: Record<string, unknown>,\n): Array<Record<string, unknown>> {\n const containers: Array<Record<string, unknown>> = [payload];\n const nestedKeys = [\"ack\", \"data\", \"publish\", \"release\", \"result\"];\n for (const key of nestedKeys) {\n const value = payload[key];\n if (isPlainObject(value)) {\n containers.push(value);\n }\n }\n return containers;\n}\n\nfunction parsePublishAck(payload: unknown): {\n outcome?: \"created\" | \"updated\" | \"already_exists\";\n releaseId?: string;\n registryEntry?: string;\n provider?: string;\n hasOutcomeSignal: boolean;\n} {\n if (!isPlainObject(payload)) {\n return { hasOutcomeSignal: false };\n }\n const candidates = pickPublishAckContainers(payload);\n let outcome: \"created\" | \"updated\" | \"already_exists\" | \"\" = \"\";\n let hasOutcomeSignal = false;\n let releaseId = \"\";\n let registryEntry = \"\";\n let provider = \"\";\n for (const candidate of candidates) {\n const outcomeRaw =\n candidate.outcome ??\n candidate.result ??\n candidate.status ??\n candidate.state ??\n candidate.disposition;\n if (outcomeRaw !== undefined) {\n hasOutcomeSignal = true;\n const normalized = normalizePublishOutcome(outcomeRaw);\n if (normalized) outcome = normalized;\n }\n if (!releaseId) {\n const value = candidate.release_id ?? candidate.releaseId ?? candidate.id;\n if (typeof value === \"string\" && value.trim()) releaseId = value.trim();\n }\n if (!registryEntry) {\n const value = candidate.registry_entry ?? candidate.registryEntry;\n if (typeof value === \"string\" && value.trim()) registryEntry = value.trim();\n }\n if (!provider) {\n const value = candidate.provider ?? candidate.publisher ?? candidate.vendor;\n if (typeof value === \"string\" && value.trim()) provider = value.trim();\n }\n }\n return {\n ...(outcome ? { outcome } : {}),\n ...(releaseId ? { releaseId } : {}),\n ...(registryEntry ? { registryEntry } : {}),\n ...(provider ? { provider } : {}),\n hasOutcomeSignal,\n };\n}\n\nfunction detectPublishConflict(bodyText: string): boolean {\n const text = String(bodyText || \"\").trim();\n if (!text) return false;\n try {\n const parsed = JSON.parse(text);\n if (!isPlainObject(parsed)) return false;\n const parts: string[] = [];\n const pushIfString = (value: unknown) => {\n if (typeof value === \"string\" && value.trim()) parts.push(value.trim().toLowerCase());\n };\n const containers = pickPublishAckContainers(parsed);\n for (const item of containers) {\n pushIfString(item.error);\n pushIfString(item.code);\n pushIfString(item.reason);\n pushIfString(item.message);\n pushIfString(item.outcome);\n pushIfString(item.result);\n pushIfString(item.status);\n pushIfString(item.state);\n }\n return parts.some((value) =>\n /already[_-]?exists|version[_-]?exists|version[_-]?conflict|conflict/.test(value),\n );\n } catch {\n return false;\n }\n}\n\nasync function withRetries<T>(input: {\n attempts: number;\n backoffMs: number;\n action: (attempt: number) => Promise<T>;\n}): Promise<T> {\n const attempts = Math.max(1, input.attempts);\n let lastError: unknown = null;\n for (let attempt = 1; attempt <= attempts; attempt += 1) {\n try {\n return await input.action(attempt);\n } catch (err: any) {\n lastError = err;\n const retryable = Boolean(err?.retryable);\n const isLast = attempt >= attempts;\n if (!retryable || isLast) {\n break;\n }\n const backoff = Math.max(0, input.backoffMs) * attempt;\n await sleep(backoff);\n }\n }\n throw lastError;\n}\n\nasync function postPublishBundle(input: {\n publishUrl: string;\n token?: string;\n apiKey?: string;\n metadataHeaders?: {\n meta: string;\n signature: string;\n };\n versionConflictPolicy: \"fail\" | \"allow\";\n releaseChannel: string;\n registryTarget?: string;\n idempotencyKey?: string;\n timeoutMs: number;\n retryAttempts: number;\n retryBackoffMs: number;\n payload: unknown;\n}) {\n return withRetries({\n attempts: input.retryAttempts,\n backoffMs: input.retryBackoffMs,\n action: async (attempt) => {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), input.timeoutMs);\n try {\n const headers = new Headers({ \"content-type\": \"application/json\" });\n if (input.token) {\n headers.set(\"authorization\", `Bearer ${input.token}`);\n }\n if (input.apiKey) {\n headers.set(\"x-api-key\", input.apiKey);\n }\n if (input.metadataHeaders) {\n headers.set(\"x-xapps-meta\", input.metadataHeaders.meta);\n headers.set(\"x-xapps-meta-signature\", input.metadataHeaders.signature);\n }\n headers.set(\"x-xapps-version-conflict-policy\", input.versionConflictPolicy);\n headers.set(\"x-xapps-release-channel\", input.releaseChannel);\n if (input.registryTarget) {\n headers.set(\"x-xapps-registry-target\", input.registryTarget);\n }\n if (input.idempotencyKey) {\n headers.set(\"x-idempotency-key\", input.idempotencyKey);\n }\n const res = await fetch(input.publishUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify(input.payload),\n signal: controller.signal,\n });\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n if (res.status === 409) {\n const details = normalizeRemoteErrorDetails(body);\n const looksLikeConflict =\n detectPublishConflict(body) || details.includes(\"already_exists\");\n if (looksLikeConflict) {\n return {\n status: res.status,\n attempt,\n outcome: \"already_exists\" as const,\n detail: details,\n };\n }\n }\n const message = buildRemoteHttpFailureMessage({\n channel: \"publish\",\n status: res.status,\n url: input.publishUrl,\n bodyText: body,\n });\n throw makeRetryableError(message, isRetryableStatus(res.status));\n }\n const contentType = String(res.headers.get(\"content-type\") || \"\").toLowerCase();\n if (contentType.includes(\"application/json\")) {\n const payloadText = await res.text().catch(() => \"\");\n const trimmed = payloadText.trim();\n if (trimmed.length > 0) {\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed);\n } catch {\n throw makeRetryableError(\n `Remote publish returned malformed JSON ack url=${input.publishUrl}`,\n false,\n );\n }\n if (isPlainObject(parsed) && (parsed as any).ok === false) {\n const detail = normalizeRemoteErrorDetails(trimmed);\n throw makeRetryableError(\n `Remote publish rejected by ack url=${input.publishUrl} ${detail}`,\n false,\n );\n }\n if (isPlainObject(parsed)) {\n const ack = parsePublishAck(parsed);\n const outcome = ack.outcome || \"\";\n if (outcome === \"updated\") {\n return {\n status: res.status,\n attempt,\n outcome: \"updated\" as const,\n ...(ack.releaseId ? { releaseId: ack.releaseId } : {}),\n ...(ack.registryEntry ? { registryEntry: ack.registryEntry } : {}),\n ...(ack.provider ? { provider: ack.provider } : {}),\n };\n }\n if (outcome === \"already_exists\") {\n return {\n status: res.status,\n attempt,\n outcome: \"already_exists\" as const,\n ...(ack.releaseId ? { releaseId: ack.releaseId } : {}),\n ...(ack.registryEntry ? { registryEntry: ack.registryEntry } : {}),\n ...(ack.provider ? { provider: ack.provider } : {}),\n };\n }\n if (ack.hasOutcomeSignal && !outcome) {\n throw makeRetryableError(\n `Remote publish returned unsupported outcome url=${input.publishUrl}`,\n false,\n );\n }\n if (ack.releaseId || ack.registryEntry || ack.provider) {\n return {\n status: res.status,\n attempt,\n outcome: \"created\" as const,\n ...(ack.releaseId ? { releaseId: ack.releaseId } : {}),\n ...(ack.registryEntry ? { registryEntry: ack.registryEntry } : {}),\n ...(ack.provider ? { provider: ack.provider } : {}),\n };\n }\n }\n }\n }\n return { status: res.status, attempt, outcome: \"created\" as const };\n } catch (err: any) {\n if (err?.name === \"AbortError\") {\n throw makeRetryableError(\n `Remote publish timed out after ${input.timeoutMs}ms url=${input.publishUrl}`,\n true,\n );\n }\n if (err?.retryable) {\n throw err;\n }\n throw makeRetryableError(\n `Remote publish request failed url=${input.publishUrl} cause=${err?.message || String(err)}`,\n true,\n );\n } finally {\n clearTimeout(timer);\n }\n },\n });\n}\n\nasync function runPublish(args: CliArgs) {\n const from = argString(args, \"from\");\n if (!from) {\n throw new Error(\"Missing required argument: --from <manifest.json>\");\n }\n const dryRun = argFlag(args, \"dry-run\");\n const force = argFlag(args, \"force\");\n const filePath = path.resolve(process.cwd(), from);\n const sourceManifestObject = readJsonFile(from) as Record<string, unknown>;\n if (\n !sourceManifestObject ||\n typeof sourceManifestObject !== \"object\" ||\n Array.isArray(sourceManifestObject)\n ) {\n throw new CliError(\"CLI_INVALID_ARGS\", `Manifest file must contain a JSON object: ${filePath}`);\n }\n const replaceRules = [\n ...argStrings(args, \"replace\").map(parseManifestReplaceLiteral),\n ...argStrings(args, \"replace-env\").map(parseManifestReplaceEnv),\n ];\n const bumpVersionKind = parseVersionBumpKind(argString(args, \"bump-version\"));\n const writeManifestVersion = argFlag(args, \"write-manifest-version\");\n const allowUnresolvedPlaceholders = argFlag(args, \"allow-unresolved-placeholders\");\n if (writeManifestVersion && !bumpVersionKind) {\n throw new CliError(\n \"CLI_INVALID_ARGS\",\n \"--write-manifest-version requires --bump-version patch|minor|major\",\n );\n }\n\n let manifestSourceForPublish = JSON.parse(JSON.stringify(sourceManifestObject)) as Record<\n string,\n unknown\n >;\n if (replaceRules.length > 0) {\n manifestSourceForPublish = applyManifestReplaceRulesDeep(\n manifestSourceForPublish,\n replaceRules,\n );\n }\n const sourceVersionBeforeBump = String(manifestSourceForPublish.version ?? \"\").trim();\n let sourceVersionAfterBump = sourceVersionBeforeBump;\n if (bumpVersionKind) {\n sourceVersionAfterBump = bumpSemverVersionOrThrow(sourceVersionBeforeBump, bumpVersionKind);\n manifestSourceForPublish.version = sourceVersionAfterBump;\n }\n const unresolvedPlaceholders = findUnresolvedPlaceholderTokens(manifestSourceForPublish);\n if (unresolvedPlaceholders.length > 0 && !allowUnresolvedPlaceholders) {\n throw new CliError(\n \"CLI_INVALID_ARGS\",\n `Manifest contains unresolved placeholders after replacements: ${unresolvedPlaceholders.join(\", \")}`,\n { placeholders: unresolvedPlaceholders, manifest: filePath },\n );\n }\n const manifest = parseXappManifest(manifestSourceForPublish);\n const { profile } = getProfile(args);\n const publishUrlRaw =\n argString(args, \"publish-url\") || process.env.XAPPS_CLI_PUBLISH_URL || profile.publishUrl;\n const publishUrl = publishUrlRaw ? parseHttpUrlOrThrow(publishUrlRaw, \"--publish-url\") : \"\";\n const publisherGatewayUrlRaw =\n argString(args, \"publisher-gateway-url\") || process.env.XAPPS_CLI_PUBLISHER_GATEWAY_URL;\n const publisherGatewayUrl = publisherGatewayUrlRaw\n ? parseHttpUrlOrThrow(publisherGatewayUrlRaw, \"--publisher-gateway-url\")\n : \"\";\n const publisherGatewayApiBaseUrl = publisherGatewayUrl\n ? normalizePublisherGatewayApiBaseUrl(publisherGatewayUrl)\n : \"\";\n const targetClientSlug = argString(args, \"target-client-slug\", \"target_client_slug\");\n const token = argString(args, \"token\") || process.env.XAPPS_CLI_TOKEN || profile.token;\n const apiKey =\n argString(args, \"api-key\", \"apiKey\") || process.env.XAPPS_CLI_API_KEY || profile.apiKey;\n const signingKey =\n argString(args, \"signing-key\") || process.env.XAPPS_CLI_SIGNING_KEY || profile.signingKey;\n const versionConflictPolicy = parseVersionConflictPolicy(\n argString(args, \"version-conflict\"),\n profile.versionConflict || \"fail\",\n );\n const releaseChannel = parseReleaseLabel(\n argString(args, \"release-channel\") ||\n process.env.XAPPS_CLI_RELEASE_CHANNEL ||\n profile.releaseChannel,\n \"stable\",\n \"--release-channel\",\n );\n const registryTarget = parseReleaseLabel(\n argString(args, \"registry-target\") ||\n process.env.XAPPS_CLI_REGISTRY_TARGET ||\n profile.registryTarget,\n \"\",\n \"--registry-target\",\n );\n const retryAttempts = parsePositiveIntOrThrow(\n argString(args, \"retry-attempts\"),\n 1,\n \"--retry-attempts\",\n );\n const retryBackoffMs = parsePositiveIntOrThrow(\n argString(args, \"retry-backoff-ms\"),\n 250,\n \"--retry-backoff-ms\",\n );\n const timeoutMsStrict = parsePositiveIntOrThrow(\n argString(args, \"timeout-ms\"),\n 10000,\n \"--timeout-ms\",\n );\n\n let manifestForPublish = manifest as Record<string, unknown>;\n if (targetClientSlug) {\n if (!publisherGatewayApiBaseUrl) {\n throw new CliError(\n \"CLI_INVALID_ARGS\",\n \"Resolving --target-client-slug requires --publisher-gateway-url (tenant slug lookup uses publisher API).\",\n { target_client_slug: targetClientSlug },\n );\n }\n const client = createPublisherApiClient({\n baseUrl: publisherGatewayApiBaseUrl,\n apiKey,\n token,\n });\n let clientsPayload: { items: Array<Record<string, unknown>> };\n try {\n clientsPayload = (await client.listClients()) as { items: Array<Record<string, unknown>> };\n } catch (err: any) {\n if (err instanceof PublisherApiClientError) {\n throw new CliError(\n `CLI_${err.code}`,\n `Publisher tenant lookup failed: ${err.message}`,\n {\n url: publisherGatewayUrl,\n api_base_url: publisherGatewayApiBaseUrl,\n status: err.status,\n details: err.details,\n target_client_slug: targetClientSlug,\n },\n { exitCode: 4 },\n );\n }\n throw err;\n }\n const matches = clientsPayload.items.filter(\n (item) => String(item.slug || \"\").trim() === targetClientSlug,\n );\n if (matches.length === 0) {\n throw new CliError(\n \"CLI_INVALID_ARGS\",\n `Tenant slug not found via publisher API: ${targetClientSlug}`,\n { target_client_slug: targetClientSlug, api_base_url: publisherGatewayApiBaseUrl },\n );\n }\n if (matches.length > 1) {\n throw new CliError(\n \"CLI_INVALID_ARGS\",\n `Tenant slug resolved ambiguously via publisher API: ${targetClientSlug}`,\n { target_client_slug: targetClientSlug, matches: matches.map((m) => m.id || m.slug) },\n );\n }\n const resolvedClientId = String(matches[0]?.id || \"\").trim();\n if (!resolvedClientId) {\n throw new CliError(\n \"CLI_INVALID_ARGS\",\n `Publisher API returned tenant without id for slug: ${targetClientSlug}`,\n { target_client_slug: targetClientSlug, match: matches[0] },\n );\n }\n manifestForPublish = {\n ...(manifest as Record<string, unknown>),\n target_client_id: resolvedClientId,\n };\n }\n\n if (\n !Object.prototype.hasOwnProperty.call(manifestForPublish, \"target_client_id\") ||\n !String((manifestForPublish as any).target_client_id || \"\").trim()\n ) {\n throw new CliError(\n \"CLI_INVALID_ARGS\",\n \"Manifest publish requires target_client_id (tenant-aware publish is required). Use manifest.target_client_id or --target-client-slug with --publisher-gateway-url.\",\n { manifest: filePath },\n );\n }\n\n const manifestJson = JSON.stringify(manifestForPublish);\n const manifestSha256 = createHash(\"sha256\").update(manifestJson).digest(\"hex\");\n const idempotencyKey =\n argString(args, \"idempotency-key\") ||\n `xapps-cli:${manifest.slug}:${manifest.version}:${manifestSha256.slice(0, 16)}`;\n const outPath = resolvePublishBundlePath(argString(args, \"out\"), manifest.slug, manifest.version);\n\n const summary = {\n slug: manifest.slug,\n version: manifest.version,\n tools: manifest.tools.length,\n widgets: manifest.widgets.length,\n manifest_sha256: manifestSha256,\n release_channel: releaseChannel,\n ...(registryTarget ? { registry_target: registryTarget } : {}),\n };\n\n if (dryRun) {\n console.log(\n `Publish dry-run (no deploy)\\nManifest: ${filePath}\\nBundle target: ${outPath}\\nRemote target: ${publishUrl || \"(none)\"}\\nSummary: ${JSON.stringify(summary)}`,\n );\n return;\n }\n\n if (!argFlag(args, \"yes\")) {\n await confirmPublishOrThrow(summary);\n }\n\n if (!force && fs.existsSync(outPath)) {\n throw new Error(`Publish bundle already exists: ${outPath} (use --force to overwrite)`);\n }\n\n if (writeManifestVersion) {\n if (sourceVersionBeforeBump !== sourceVersionAfterBump) {\n const sourceUpdated = {\n ...(sourceManifestObject as Record<string, unknown>),\n version: sourceVersionAfterBump,\n };\n fs.writeFileSync(filePath, `${JSON.stringify(sourceUpdated, null, 2)}\\n`);\n }\n }\n\n const bundle = {\n schema_version: \"xapps.publish.v0\",\n generated_at: new Date().toISOString(),\n manifest_source: filePath,\n summary,\n ...(replaceRules.length > 0\n ? {\n manifest_transforms: {\n replacements: replaceRules.map((rule) => ({\n from: rule.from,\n source: rule.source,\n ...(rule.sourceName ? { source_name: rule.sourceName } : {}),\n })),\n ...(bumpVersionKind\n ? {\n version_bump: {\n kind: bumpVersionKind,\n from: sourceVersionBeforeBump,\n to: sourceVersionAfterBump,\n ...(writeManifestVersion ? { wrote_source_manifest_version: true } : {}),\n },\n }\n : {}),\n },\n }\n : bumpVersionKind\n ? {\n manifest_transforms: {\n version_bump: {\n kind: bumpVersionKind,\n from: sourceVersionBeforeBump,\n to: sourceVersionAfterBump,\n ...(writeManifestVersion ? { wrote_source_manifest_version: true } : {}),\n },\n },\n }\n : {}),\n release: {\n channel: releaseChannel,\n ...(registryTarget ? { registry_target: registryTarget } : {}),\n version_conflict_policy: versionConflictPolicy,\n },\n manifest: manifestForPublish,\n };\n\n fs.mkdirSync(path.dirname(outPath), { recursive: true });\n fs.writeFileSync(outPath, JSON.stringify(bundle, null, 2));\n const lines: string[] = [\n `Publish bundle created: ${outPath}`,\n `Summary: ${JSON.stringify(summary)}`,\n ];\n const metadataPayload = {\n generated_at: bundle.generated_at,\n idempotency_key: idempotencyKey,\n manifest_sha256: manifestSha256,\n slug: manifest.slug,\n version: manifest.version,\n release_channel: releaseChannel,\n ...(registryTarget ? { registry_target: registryTarget } : {}),\n };\n const metadataJson = stableStringify(metadataPayload);\n const metadataSignature = signingKey\n ? `hmac-sha256:${base64url(createHmac(\"sha256\", signingKey).update(metadataJson).digest())}`\n : \"\";\n if (publishUrl) {\n const remote = await postPublishBundle({\n publishUrl,\n token,\n apiKey,\n metadataHeaders: signingKey\n ? { meta: metadataJson, signature: metadataSignature }\n : undefined,\n versionConflictPolicy,\n releaseChannel,\n registryTarget,\n idempotencyKey,\n timeoutMs: timeoutMsStrict,\n retryAttempts,\n retryBackoffMs,\n payload: bundle,\n });\n if (remote.outcome === \"already_exists\") {\n if (versionConflictPolicy === \"allow\") {\n lines.push(\n `Remote publish version conflict allowed: outcome=already_exists url=${publishUrl} attempts=${remote.attempt}`,\n );\n if (remote.releaseId || remote.registryEntry || remote.provider) {\n lines.push(\n `Remote release metadata: release_id=${remote.releaseId || \"-\"} registry_entry=${remote.registryEntry || \"-\"} provider=${remote.provider || \"-\"}`,\n );\n }\n console.log(lines.join(\"\\n\"));\n return;\n }\n throw new CliError(\n \"CLI_VERSION_CONFLICT\",\n `Remote publish version conflict: already_exists url=${publishUrl} (set --version-conflict allow to continue)`,\n { url: publishUrl, outcome: remote.outcome },\n { exitCode: 3 },\n );\n }\n lines.push(\n `Remote publish delivered: status=${remote.status} url=${publishUrl} attempts=${remote.attempt} outcome=${remote.outcome}`,\n );\n if (remote.releaseId || remote.registryEntry || remote.provider) {\n lines.push(\n `Remote release metadata: release_id=${remote.releaseId || \"-\"} registry_entry=${remote.registryEntry || \"-\"} provider=${remote.provider || \"-\"}`,\n );\n }\n }\n if (publisherGatewayApiBaseUrl) {\n try {\n const client = createPublisherApiClient({\n baseUrl: publisherGatewayApiBaseUrl,\n apiKey,\n token,\n });\n const result = await client.importAndPublishManifest(manifestForPublish);\n const versionStatus =\n result && result.version && typeof result.version === \"object\"\n ? String((result.version as any).status || \"\")\n : \"\";\n lines.push(\n `Publisher gateway import+publish delivered: base=${publisherGatewayApiBaseUrl} xapp_id=${result.xappId} version_id=${result.versionId}${versionStatus ? ` status=${versionStatus}` : \"\"}`,\n );\n } catch (err: any) {\n if (err instanceof PublisherApiClientError) {\n if (err.code === \"PUBLISHER_API_CONFLICT\") {\n const conflictCode = String((err.details as any)?.code || \"\").trim();\n const isVersionConflict =\n conflictCode === \"VERSION_CONFLICT\" ||\n /version.*exist/i.test(String(err.message || \"\"));\n if (isVersionConflict) {\n if (versionConflictPolicy === \"allow\") {\n lines.push(\n `Publisher gateway version conflict allowed: base=${publisherGatewayApiBaseUrl} outcome=already_exists`,\n );\n console.log(lines.join(\"\\n\"));\n return;\n }\n throw new CliError(\n \"CLI_VERSION_CONFLICT\",\n `Publisher gateway version conflict: already_exists base=${publisherGatewayApiBaseUrl} (set --version-conflict allow to continue)`,\n {\n url: publisherGatewayUrl,\n api_base_url: publisherGatewayApiBaseUrl,\n status: err.status,\n details: err.details,\n },\n { exitCode: 3 },\n );\n }\n }\n throw new CliError(\n `CLI_${err.code}`,\n `Publisher gateway publish failed: ${err.message}`,\n {\n url: publisherGatewayUrl,\n api_base_url: publisherGatewayApiBaseUrl,\n status: err.status,\n details: err.details,\n },\n { exitCode: 4 },\n );\n }\n throw err;\n }\n }\n console.log(lines.join(\"\\n\"));\n}\n\ntype PublishBundleSummary = {\n bundle_path: string;\n generated_at: string;\n slug: string;\n version: string;\n tools: number;\n widgets: number;\n manifest_sha256: string;\n};\n\ntype RemoteLogsResult = {\n entries: PublishBundleSummary[];\n nextCursor?: string;\n leaseId?: string;\n checkpoint?: string;\n};\n\nfunction normalizeBundleSummary(\n value: unknown,\n fallbackPath: string,\n fallbackGeneratedAt = \"\",\n): PublishBundleSummary | null {\n if (!isPlainObject(value)) return null;\n const bundlePath =\n typeof value.bundle_path === \"string\"\n ? value.bundle_path\n : typeof value.path === \"string\"\n ? value.path\n : fallbackPath;\n const generatedAt =\n typeof value.generated_at === \"string\"\n ? value.generated_at\n : typeof value.created_at === \"string\"\n ? value.created_at\n : fallbackGeneratedAt;\n const slug = typeof value.slug === \"string\" ? value.slug.trim() : \"\";\n const version = typeof value.version === \"string\" ? value.version.trim() : \"\";\n const tools = typeof value.tools === \"number\" ? value.tools : NaN;\n const widgets = typeof value.widgets === \"number\" ? value.widgets : NaN;\n const manifestSha256 = typeof value.manifest_sha256 === \"string\" ? value.manifest_sha256 : \"\";\n if (!bundlePath || !generatedAt || !slug || !version) return null;\n if (!Number.isFinite(tools) || tools < 0 || !Number.isFinite(widgets) || widgets < 0) return null;\n return {\n bundle_path: bundlePath,\n generated_at: generatedAt,\n slug,\n version,\n tools,\n widgets,\n manifest_sha256: manifestSha256,\n };\n}\n\nfunction toBundleSummary(bundlePath: string, payload: unknown): PublishBundleSummary {\n if (!isPlainObject(payload)) {\n throw new Error(`Invalid bundle payload in ${bundlePath}`);\n }\n if (payload.schema_version !== \"xapps.publish.v0\") {\n throw new Error(`Unsupported bundle schema in ${bundlePath}`);\n }\n const summary = isPlainObject(payload.summary) ? payload.summary : {};\n return {\n bundle_path: bundlePath,\n generated_at: typeof payload.generated_at === \"string\" ? payload.generated_at : \"\",\n slug: typeof summary.slug === \"string\" ? summary.slug : \"\",\n version: typeof summary.version === \"string\" ? summary.version : \"\",\n tools: typeof summary.tools === \"number\" ? summary.tools : 0,\n widgets: typeof summary.widgets === \"number\" ? summary.widgets : 0,\n manifest_sha256: typeof summary.manifest_sha256 === \"string\" ? summary.manifest_sha256 : \"\",\n };\n}\n\nfunction collectBundleFiles(dirPath: string): string[] {\n const out: string[] = [];\n if (!fs.existsSync(dirPath)) {\n return out;\n }\n const entries = fs.readdirSync(dirPath, { withFileTypes: true });\n for (const entry of entries) {\n const full = path.join(dirPath, entry.name);\n if (entry.isDirectory()) {\n out.push(...collectBundleFiles(full));\n continue;\n }\n if (entry.isFile() && entry.name === \"bundle.json\") {\n out.push(full);\n }\n }\n return out;\n}\n\nasync function fetchRemoteLogs(input: {\n logsUrl: string;\n token?: string;\n apiKey?: string;\n timeoutMs: number;\n limit: number;\n cursor?: string;\n leaseId?: string;\n checkpoint?: string;\n severity?: string;\n since?: string;\n until?: string;\n retryAttempts: number;\n retryBackoffMs: number;\n}): Promise<RemoteLogsResult> {\n return withRetries({\n attempts: input.retryAttempts,\n backoffMs: input.retryBackoffMs,\n action: async () => {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), input.timeoutMs);\n try {\n const headers = new Headers();\n if (input.token) headers.set(\"authorization\", `Bearer ${input.token}`);\n if (input.apiKey) headers.set(\"x-api-key\", input.apiKey);\n const url = new URL(input.logsUrl);\n if (!url.searchParams.has(\"limit\")) {\n url.searchParams.set(\"limit\", String(input.limit));\n }\n if (input.cursor) url.searchParams.set(\"cursor\", input.cursor);\n if (input.leaseId) url.searchParams.set(\"lease_id\", input.leaseId);\n if (input.checkpoint) url.searchParams.set(\"checkpoint\", input.checkpoint);\n if (input.severity) url.searchParams.set(\"severity\", input.severity);\n if (input.since) url.searchParams.set(\"since\", input.since);\n if (input.until) url.searchParams.set(\"until\", input.until);\n const res = await fetch(url, {\n method: \"GET\",\n headers,\n signal: controller.signal,\n });\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n const message = buildRemoteHttpFailureMessage({\n channel: \"logs\",\n status: res.status,\n url: input.logsUrl,\n bodyText: body,\n });\n throw makeRetryableError(message, isRetryableStatus(res.status));\n }\n const payload = await res.json();\n const rowsRaw = Array.isArray(payload)\n ? payload\n : isPlainObject(payload) && Array.isArray((payload as any).entries)\n ? (payload as any).entries\n : null;\n if (!rowsRaw) {\n throw makeRetryableError(\n `Remote logs returned malformed payload url=${input.logsUrl}`,\n false,\n );\n }\n const rows = rowsRaw\n .map((entry) => normalizeBundleSummary(entry, \"remote://logs\"))\n .filter((entry): entry is PublishBundleSummary => !!entry);\n if (rowsRaw.length > 0 && rows.length === 0) {\n throw makeRetryableError(\n `Remote logs returned malformed entries url=${input.logsUrl}`,\n false,\n );\n }\n const nextCursor =\n isPlainObject(payload) &&\n (typeof (payload as any).next_cursor === \"string\" ||\n typeof (payload as any).nextCursor === \"string\")\n ? String((payload as any).next_cursor ?? (payload as any).nextCursor ?? \"\")\n : \"\";\n const payloadHasLease =\n isPlainObject(payload) &&\n (Object.prototype.hasOwnProperty.call(payload as object, \"lease_id\") ||\n Object.prototype.hasOwnProperty.call(payload as object, \"leaseId\"));\n const payloadHasCheckpoint =\n isPlainObject(payload) &&\n (Object.prototype.hasOwnProperty.call(payload as object, \"checkpoint\") ||\n Object.prototype.hasOwnProperty.call(payload as object, \"checkpoint_token\") ||\n Object.prototype.hasOwnProperty.call(payload as object, \"checkpointToken\"));\n const leaseId =\n isPlainObject(payload) &&\n (typeof (payload as any).lease_id === \"string\" ||\n typeof (payload as any).leaseId === \"string\")\n ? String((payload as any).lease_id ?? (payload as any).leaseId ?? \"\")\n : \"\";\n const checkpoint =\n isPlainObject(payload) &&\n (typeof (payload as any).checkpoint === \"string\" ||\n typeof (payload as any).checkpoint_token === \"string\" ||\n typeof (payload as any).checkpointToken === \"string\")\n ? String(\n (payload as any).checkpoint ??\n (payload as any).checkpoint_token ??\n (payload as any).checkpointToken ??\n \"\",\n )\n : \"\";\n if (payloadHasLease && !leaseId) {\n throw makeRetryableError(\n `Remote logs returned malformed lease_id field url=${input.logsUrl}`,\n false,\n );\n }\n if (payloadHasCheckpoint && !checkpoint) {\n throw makeRetryableError(\n `Remote logs returned malformed checkpoint field url=${input.logsUrl}`,\n false,\n );\n }\n return {\n entries: rows\n .sort((a, b) => String(b.generated_at).localeCompare(String(a.generated_at)))\n .slice(0, input.limit),\n ...(nextCursor ? { nextCursor } : {}),\n ...(leaseId ? { leaseId } : {}),\n ...(checkpoint ? { checkpoint } : {}),\n };\n } catch (err: any) {\n if (err?.name === \"AbortError\") {\n throw makeRetryableError(\n `Remote logs timed out after ${input.timeoutMs}ms url=${input.logsUrl}`,\n true,\n );\n }\n if (err?.retryable) {\n throw err;\n }\n throw makeRetryableError(\n `Remote logs request failed url=${input.logsUrl} cause=${err?.message || String(err)}`,\n true,\n );\n } finally {\n clearTimeout(timer);\n }\n },\n });\n}\n\nasync function runLogs(args: CliArgs) {\n const { profile } = getProfile(args);\n const json = argFlag(args, \"json\");\n const limit = parsePositiveIntOrThrow(argString(args, \"limit\"), 10, \"--limit\");\n const from = argString(args, \"from\");\n const dir = path.resolve(process.cwd(), argString(args, \"dir\") || DEFAULT_PUBLISH_BUNDLES_DIR);\n const logsUrlRaw =\n argString(args, \"logs-url\") || process.env.XAPPS_CLI_LOGS_URL || profile.logsUrl;\n const logsUrl = logsUrlRaw ? parseHttpUrlOrThrow(logsUrlRaw, \"--logs-url\") : \"\";\n const token = argString(args, \"token\") || process.env.XAPPS_CLI_TOKEN || profile.token;\n const apiKey =\n argString(args, \"api-key\", \"apiKey\") || process.env.XAPPS_CLI_API_KEY || profile.apiKey;\n const cursor = argString(args, \"cursor\");\n const leaseId = argString(args, \"lease-id\");\n const checkpoint = argString(args, \"checkpoint\");\n const severity = argString(args, \"severity\");\n const since = argString(args, \"since\");\n const until = argString(args, \"until\");\n const follow = argFlag(args, \"follow\");\n const followCursorFile = argString(args, \"follow-cursor-file\");\n const followIntervalMs = parsePositiveIntOrThrow(\n argString(args, \"follow-interval-ms\"),\n 2000,\n \"--follow-interval-ms\",\n );\n const followMaxCycles = parsePositiveIntOrThrow(\n argString(args, \"follow-max-cycles\"),\n 1,\n \"--follow-max-cycles\",\n );\n const timeoutMs = parsePositiveIntOrThrow(argString(args, \"timeout-ms\"), 10000, \"--timeout-ms\");\n const retryAttempts = parsePositiveIntOrThrow(\n argString(args, \"retry-attempts\"),\n 1,\n \"--retry-attempts\",\n );\n const retryBackoffMs = parsePositiveIntOrThrow(\n argString(args, \"retry-backoff-ms\"),\n 250,\n \"--retry-backoff-ms\",\n );\n\n const localSummaries = logsUrl\n ? null\n : (() => {\n const bundleFiles = from ? [path.resolve(process.cwd(), from)] : collectBundleFiles(dir);\n if (!bundleFiles.length) {\n throw new Error(\n from\n ? `Bundle not found: ${path.resolve(process.cwd(), from)}`\n : `No bundles found in ${dir}`,\n );\n }\n return bundleFiles\n .map((file) => toBundleSummary(file, readJsonFile(file)))\n .sort((a, b) => String(b.generated_at).localeCompare(String(a.generated_at)))\n .slice(0, limit);\n })();\n\n async function printRows(\n rows: PublishBundleSummary[],\n nextCursor?: string,\n leaseId?: string,\n checkpoint?: string,\n ) {\n if (!rows.length) return;\n if (json) {\n console.log(\n JSON.stringify(\n {\n count: rows.length,\n entries: rows,\n ...(nextCursor ? { next_cursor: nextCursor } : {}),\n ...(leaseId ? { lease_id: leaseId } : {}),\n ...(checkpoint ? { checkpoint } : {}),\n },\n null,\n 2,\n ),\n );\n return;\n }\n const lines: string[] = [`Logs entries: ${rows.length}`];\n for (const entry of rows) {\n lines.push(\n [\n `- ${entry.slug}@${entry.version}`,\n `generated_at=${entry.generated_at || \"n/a\"}`,\n `tools=${entry.tools}`,\n `widgets=${entry.widgets}`,\n `bundle=${entry.bundle_path}`,\n ].join(\" \"),\n );\n }\n if (nextCursor) lines.push(`next_cursor=${nextCursor}`);\n if (leaseId) lines.push(`lease_id=${leaseId}`);\n if (checkpoint) lines.push(`checkpoint=${checkpoint}`);\n console.log(lines.join(\"\\n\"));\n }\n\n if (!logsUrl && localSummaries) {\n if (!localSummaries.length) {\n throw new Error(\n from\n ? `Bundle not found: ${path.resolve(process.cwd(), from)}`\n : `No bundles found in ${dir}`,\n );\n }\n await printRows(localSummaries);\n return;\n }\n\n if (!logsUrl) return;\n\n let currentCursor = cursor || \"\";\n let currentLeaseId = leaseId || \"\";\n let currentCheckpoint = checkpoint || \"\";\n if (followCursorFile) {\n const state = loadLogsResumeState(followCursorFile);\n if (!currentCursor && state.cursor) currentCursor = state.cursor;\n if (state.leaseId) currentLeaseId = state.leaseId;\n if (state.checkpoint) currentCheckpoint = state.checkpoint;\n }\n let cycles = 0;\n let seen = 0;\n while (true) {\n cycles += 1;\n try {\n const remote = await fetchRemoteLogs({\n logsUrl,\n token,\n apiKey,\n timeoutMs,\n limit,\n cursor: currentCursor || undefined,\n leaseId: currentLeaseId || undefined,\n checkpoint: currentCheckpoint || undefined,\n severity,\n since,\n until,\n retryAttempts,\n retryBackoffMs,\n });\n if (remote.entries.length) {\n seen += remote.entries.length;\n await printRows(remote.entries, remote.nextCursor, remote.leaseId, remote.checkpoint);\n } else if (!follow && seen === 0) {\n throw new Error(`No log entries returned by remote endpoint: ${logsUrl}`);\n }\n if (remote.leaseId) currentLeaseId = remote.leaseId;\n if (remote.checkpoint) currentCheckpoint = remote.checkpoint;\n if (remote.nextCursor) {\n currentCursor = remote.nextCursor;\n }\n if (followCursorFile) {\n saveLogsResumeState(followCursorFile, {\n ...(currentCursor ? { cursor: currentCursor } : {}),\n ...(currentLeaseId ? { leaseId: currentLeaseId } : {}),\n ...(currentCheckpoint ? { checkpoint: currentCheckpoint } : {}),\n });\n }\n } catch (err: any) {\n if (!follow) throw err;\n console.error(`[logs-follow] reconnecting after error: ${err?.message || String(err)}`);\n }\n if (!follow) return;\n if (cycles >= followMaxCycles) return;\n await sleep(followIntervalMs);\n }\n}\n\nasync function runTunnel(args: CliArgs) {\n const { profile } = getProfile(args);\n const target = argString(args, \"target\");\n if (!target) {\n throw new Error(\"Missing required argument: --target <base-url>\");\n }\n const targetBase = parseHttpUrlOrThrow(String(target).replace(/\\/$/, \"\"), \"--target\").replace(\n /\\/$/,\n \"\",\n );\n const targetHostname = new URL(targetBase).hostname.toLowerCase();\n const allowTargetHosts = parseCsvSet(\n argString(args, \"allow-target-hosts\") || process.env.XAPPS_CLI_TUNNEL_ALLOW_TARGET_HOSTS,\n \"127.0.0.1,localhost,::1\",\n );\n if (!allowTargetHosts.has(targetHostname)) {\n throw new CliError(\n \"CLI_TUNNEL_TARGET_NOT_ALLOWED\",\n `Tunnel target host is not allowed: ${targetHostname} (allowlist=${Array.from(allowTargetHosts).join(\",\")})`,\n { targetHostname, allowlist: Array.from(allowTargetHosts) },\n );\n }\n const host = argString(args, \"host\") || \"127.0.0.1\";\n const port = parseListenPortOrThrow(argString(args, \"listen-port\"), 4041);\n const sessionFile = argString(args, \"session-file\");\n const sessionIdArg = argString(args, \"session-id\");\n const sessionPolicy = parseTunnelSessionPolicy(argString(args, \"session-policy\"), \"reuse\");\n const sessionStateFromFile = sessionFile ? loadTunnelSessionState(sessionFile) : null;\n let sessionId = \"\";\n let sessionSource: \"generated\" | \"arg\" | \"file\" | \"rotated\" = \"generated\";\n if (sessionPolicy === \"rotate\") {\n if (sessionIdArg) {\n sessionId = sessionIdArg;\n sessionSource = \"arg\";\n } else {\n sessionId = randomSessionId(\"tnl\");\n sessionSource = \"rotated\";\n }\n } else if (sessionIdArg) {\n if (\n sessionStateFromFile?.sessionId &&\n sessionStateFromFile.sessionId !== sessionIdArg &&\n sessionPolicy !== \"rotate\"\n ) {\n throw new CliError(\n \"CLI_TUNNEL_SESSION_CONFLICT\",\n `Provided --session-id does not match persisted session file (${sessionFile})`,\n {\n provided_session_id: sessionIdArg,\n persisted_session_id: sessionStateFromFile.sessionId,\n session_file: sessionFile,\n session_policy: sessionPolicy,\n },\n );\n }\n sessionId = sessionIdArg;\n sessionSource = \"arg\";\n } else if (sessionStateFromFile?.sessionId) {\n const persistedTarget = String(sessionStateFromFile.target || \"\").trim();\n if (persistedTarget && persistedTarget !== targetBase) {\n if (sessionPolicy === \"require\") {\n throw new CliError(\n \"CLI_TUNNEL_SESSION_TARGET_MISMATCH\",\n `Persisted tunnel session target does not match current --target (${persistedTarget} != ${targetBase})`,\n {\n persisted_target: persistedTarget,\n current_target: targetBase,\n session_file: sessionFile || \"\",\n },\n );\n }\n sessionId = randomSessionId(\"tnl\");\n sessionSource = \"rotated\";\n } else {\n sessionId = sessionStateFromFile.sessionId;\n sessionSource = \"file\";\n }\n } else if (sessionPolicy === \"require\") {\n throw new CliError(\n \"CLI_TUNNEL_SESSION_REQUIRED\",\n \"Session policy 'require' needs existing --session-file state or explicit --session-id\",\n {\n session_file: sessionFile || \"\",\n session_policy: sessionPolicy,\n },\n );\n } else {\n sessionId = randomSessionId(\"tnl\");\n sessionSource = \"generated\";\n }\n if (sessionFile) {\n saveTunnelSessionState(sessionFile, {\n sessionId,\n target: targetBase,\n });\n }\n const once = argFlag(args, \"once\");\n const requiredToken =\n argString(args, \"require-auth-token\") ||\n process.env.XAPPS_CLI_TUNNEL_TOKEN ||\n profile.tunnelToken ||\n undefined;\n const upstreamTimeoutMs = parsePositiveIntOrThrow(\n argString(args, \"upstream-timeout-ms\"),\n 15000,\n \"--upstream-timeout-ms\",\n );\n const retryAttempts = parsePositiveIntOrThrow(\n argString(args, \"retry-attempts\"),\n 1,\n \"--retry-attempts\",\n );\n const retryBackoffMs = parsePositiveIntOrThrow(\n argString(args, \"retry-backoff-ms\"),\n 200,\n \"--retry-backoff-ms\",\n );\n const idempotentMethods = new Set([\"GET\", \"HEAD\", \"OPTIONS\"]);\n const startedAt = new Date().toISOString();\n let proxiedRequests = 0;\n let proxyErrors = 0;\n let lastUpstreamStatus = 0;\n\n const announce = `xapps tunnel relay\\nSession: ${sessionId}\\nSession policy: ${sessionPolicy}\\nSession source: ${sessionSource}\\nListen: http://${host}:${port}\\nTarget: ${targetBase}\\nAllowlist: ${Array.from(allowTargetHosts).join(\",\")}\\nMode: local relay baseline (no external public URL)\\nUpstream timeout: ${upstreamTimeoutMs}ms`;\n if (once) {\n console.log(announce);\n return;\n }\n\n const server = http.createServer(async (req, res) => {\n const method = (req.method || \"GET\").toUpperCase();\n const requestUrl = req.url || \"/\";\n const headerToken =\n typeof req.headers[\"x-xapps-tunnel-token\"] === \"string\"\n ? req.headers[\"x-xapps-tunnel-token\"]\n : undefined;\n const authHeader =\n typeof req.headers.authorization === \"string\" ? req.headers.authorization.trim() : \"\";\n const bearerToken = authHeader.toLowerCase().startsWith(\"bearer \")\n ? authHeader.slice(7).trim()\n : undefined;\n const suppliedToken = headerToken || bearerToken;\n if (requiredToken && suppliedToken !== requiredToken) {\n res.statusCode = 401;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(\n JSON.stringify({\n ok: false,\n error: \"tunnel_auth_required\",\n message: \"Missing or invalid tunnel auth token\",\n }),\n );\n return;\n }\n\n if (requestUrl === \"/__ready\") {\n res.statusCode = 200;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(\n JSON.stringify({\n ok: true,\n tunnel: \"ready\",\n session_id: sessionId,\n session_policy: sessionPolicy,\n session_source: sessionSource,\n target: targetBase,\n }),\n );\n return;\n }\n\n if (requestUrl === \"/__status\") {\n res.statusCode = 200;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(\n JSON.stringify({\n ok: true,\n tunnel: \"status\",\n session_id: sessionId,\n session_policy: sessionPolicy,\n session_source: sessionSource,\n session_file: sessionFile || null,\n target: targetBase,\n listen: { host, port },\n started_at: startedAt,\n proxied_requests: proxiedRequests,\n proxy_errors: proxyErrors,\n last_upstream_status: lastUpstreamStatus || null,\n }),\n );\n return;\n }\n\n const body = await readRawRequestBody(req);\n const headers = new Headers();\n for (const [key, value] of Object.entries(req.headers)) {\n if (!value) continue;\n const lower = key.toLowerCase();\n if (lower === \"host\") continue;\n if (\n lower === \"connection\" ||\n lower === \"keep-alive\" ||\n lower === \"proxy-authorization\" ||\n lower === \"proxy-authenticate\" ||\n lower === \"te\" ||\n lower === \"trailers\" ||\n lower === \"transfer-encoding\" ||\n lower === \"upgrade\"\n ) {\n continue;\n }\n if (Array.isArray(value)) headers.set(key, value.join(\", \"));\n else headers.set(key, String(value));\n }\n headers.set(\n \"x-forwarded-host\",\n appendForwardedHeader(headers.get(\"x-forwarded-host\"), `${host}:${port}`),\n );\n headers.set(\n \"x-forwarded-proto\",\n appendForwardedHeader(headers.get(\"x-forwarded-proto\"), \"http\"),\n );\n headers.set(\n \"x-forwarded-port\",\n appendForwardedHeader(headers.get(\"x-forwarded-port\"), String(port)),\n );\n if (req.socket?.remoteAddress) {\n const existingForwardedFor = headers.get(\"x-forwarded-for\");\n headers.set(\n \"x-forwarded-for\",\n appendForwardedHeader(existingForwardedFor, req.socket.remoteAddress),\n );\n }\n\n const targetUrl = `${targetBase}${requestUrl}`;\n try {\n const attempts = idempotentMethods.has(method) ? retryAttempts : 1;\n const upstream = await withRetries({\n attempts,\n backoffMs: retryBackoffMs,\n action: async () => {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), upstreamTimeoutMs);\n try {\n const resUpstream = await fetch(targetUrl, {\n method,\n headers,\n body: method === \"GET\" || method === \"HEAD\" ? undefined : body,\n signal: controller.signal,\n });\n if (isRetryableStatus(resUpstream.status)) {\n throw makeRetryableError(`upstream status ${resUpstream.status}`, true);\n }\n return resUpstream;\n } catch (err: any) {\n if (err?.name === \"AbortError\") {\n throw makeRetryableError(\"upstream timeout\", true);\n }\n if (err?.retryable) throw err;\n throw makeRetryableError(err?.message || String(err), true);\n } finally {\n clearTimeout(timer);\n }\n },\n });\n const upstreamBody = Buffer.from(await upstream.arrayBuffer());\n res.statusCode = upstream.status;\n proxiedRequests += 1;\n lastUpstreamStatus = upstream.status;\n upstream.headers.forEach((value, key) => {\n if (key.toLowerCase() === \"transfer-encoding\") return;\n res.setHeader(key, value);\n });\n res.end(upstreamBody);\n console.log(\n `[tunnel] ${method} ${requestUrl} -> ${targetUrl} status=${upstream.status} bytes=${upstreamBody.length}`,\n );\n } catch (err: any) {\n proxyErrors += 1;\n const timeout = String(err?.message || \"\")\n .toLowerCase()\n .includes(\"timeout\");\n res.statusCode = timeout ? 504 : 502;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(\n JSON.stringify({\n ok: false,\n error: timeout ? \"upstream_timeout\" : \"upstream_unreachable\",\n message: err?.message || String(err),\n }),\n );\n console.error(\n `[tunnel] upstream error ${method} ${requestUrl}: ${err?.message || String(err)}`,\n );\n }\n });\n\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(port, host, () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n\n console.log(announce);\n\n await new Promise<void>((resolve) => {\n const shutdown = () => server.close(() => resolve());\n process.once(\"SIGINT\", shutdown);\n process.once(\"SIGTERM\", shutdown);\n });\n}\n\nexport async function runCli(argv: string[]) {\n try {\n const { command, args } = parseArgs(argv);\n if (!command || command === \"--help\" || command === \"-h\" || command === \"help\") {\n printUsage();\n return;\n }\n\n if (command === \"import\") {\n await runImportCommand(args, {\n argString,\n argFlag,\n readInput,\n parsePositiveIntOrThrow,\n parseManifestFromFile,\n readJsonFile,\n });\n return;\n }\n if (command === \"validate\") {\n runValidateCommand(args, {\n argString,\n argFlag,\n readInput,\n parsePositiveIntOrThrow,\n parseManifestFromFile,\n readJsonFile,\n });\n return;\n }\n if (command === \"test\") {\n runTestCommand(args, {\n argString,\n argFlag,\n readInput,\n parsePositiveIntOrThrow,\n parseManifestFromFile,\n readJsonFile,\n });\n return;\n }\n if (command === \"publish\") {\n await runPublish(args);\n return;\n }\n if (command === \"logs\") {\n await runLogs(args);\n return;\n }\n if (command === \"context\") {\n const subcommand = argString(args, \"_subcommand\");\n if (subcommand !== \"export\") {\n throw new CliError(\"CLI_INVALID_ARGS\", \"Missing required subcommand: context export\");\n }\n runContextExport(args);\n return;\n }\n if (command === \"tunnel\") {\n await runTunnel(args);\n return;\n }\n if (command === \"init\") {\n runInitCommand(args, {\n argString,\n argFlag,\n readInput,\n parsePositiveIntOrThrow,\n parseManifestFromFile,\n readJsonFile,\n });\n return;\n }\n if (command === \"dev\") {\n await runDevCommand(args, {\n argString,\n argFlag,\n shellEscapeArg,\n applyFlowCommandTemplates,\n findRepoRoot,\n readJsonFile,\n parseManifestFromFile,\n runDryRun,\n buildDevRefs,\n canonicalizeJson,\n readRequestBody,\n makeCliError: (code, message, details) => new CliError(code, message, details),\n });\n return;\n }\n if (command === \"ai\") {\n const subcommand = argString(args, \"_subcommand\");\n if (subcommand === \"plan\") {\n await runAiPlanCliCommand(args, {\n argString,\n argFlag,\n shellEscapeArg,\n applyFlowCommandTemplates,\n findRepoRoot,\n readJsonFile,\n parseManifestFromFile,\n runDryRun,\n buildDevRefs,\n canonicalizeJson,\n readRequestBody,\n makeCliError: (code, message, details) => new CliError(code, message, details),\n });\n return;\n }\n if (subcommand === \"check\") {\n await runAiCheckCliCommand(args, {\n argString,\n argFlag,\n shellEscapeArg,\n applyFlowCommandTemplates,\n findRepoRoot,\n readJsonFile,\n parseManifestFromFile,\n runDryRun,\n buildDevRefs,\n canonicalizeJson,\n readRequestBody,\n makeCliError: (code, message, details) => new CliError(code, message, details),\n });\n return;\n }\n throw new CliError(\"CLI_INVALID_ARGS\", \"Missing required subcommand: ai plan|check\");\n }\n if (command === \"publisher\") {\n await runPublisherCliCommand(args, {\n argString,\n argFlag,\n shellEscapeArg,\n applyFlowCommandTemplates,\n findRepoRoot,\n readJsonFile,\n parseManifestFromFile,\n runDryRun,\n buildDevRefs,\n canonicalizeJson,\n readRequestBody,\n makeCliError: (code, message, details) => new CliError(code, message, details),\n });\n return;\n }\n\n throw new CliError(\"CLI_UNKNOWN_COMMAND\", `Unknown command: ${command}`);\n } catch (err: any) {\n if (err instanceof CliError) throw err;\n const message = String(err?.message || err || \"Unknown CLI error\");\n let code = \"CLI_RUNTIME_ERROR\";\n if (message.includes(\"Missing required argument\")) code = \"CLI_INVALID_ARGS\";\n else if (message.includes(\"Missing required arguments\")) code = \"CLI_INVALID_ARGS\";\n else if (message.includes(\"Invalid --\")) code = \"CLI_INVALID_OPTION\";\n else if (message.includes(\"Invalid JSON\")) code = \"CLI_INVALID_JSON\";\n else if (message.includes(\"Unknown CLI profile\")) code = \"CLI_PROFILE_NOT_FOUND\";\n else if (message.includes(\"Invalid CLI config JSON\")) code = \"CLI_CONFIG_INVALID\";\n else if (message.includes(\"Unsupported --mode\")) code = \"CLI_AI_MODE_UNSUPPORTED\";\n else if (message.includes(\"Invalid AI policy JSON\")) code = \"CLI_AI_POLICY_INVALID\";\n else if (message.includes(\"ai check failed\")) code = \"CLI_AI_PLAN_INVALID\";\n else if (message.includes(\"unsupported outcome\")) code = \"CLI_REMOTE_PUBLISH_ACK_INVALID\";\n else if (message.includes(\"Remote publish\")) code = \"CLI_REMOTE_PUBLISH_ERROR\";\n else if (message.includes(\"Remote logs\")) code = \"CLI_REMOTE_LOGS_ERROR\";\n else if (message.includes(\"No bundles found\")) code = \"CLI_BUNDLE_NOT_FOUND\";\n else if (message.includes(\"Bundle not found\")) code = \"CLI_BUNDLE_NOT_FOUND\";\n throw new CliError(code, message);\n }\n}\n\nfunction shouldAutoRunCliEntrypoint(filePath: string): boolean {\n return /(?:^|[\\\\/])(?:xapps|cli(?:\\.(?:cjs|mjs|js))?)$/.test(String(filePath || \"\"));\n}\n\nif (shouldAutoRunCliEntrypoint(String(process.argv[1] || \"\"))) {\n runCli(process.argv.slice(2)).catch((err) => {\n const code = typeof err?.code === \"string\" ? err.code : \"CLI_RUNTIME_ERROR\";\n const message = err?.message || String(err);\n console.error(`[${code}] ${message}`);\n const exitCode = Number.isInteger(err?.exitCode) ? err.exitCode : 1;\n process.exit(exitCode);\n });\n}\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\n\ntype CliArgsLike = Record<string, string | boolean>;\ntype CliErrorFactory = (code: string, message: string, details?: Record<string, unknown>) => Error;\n\nexport type DevRefStatus = {\n key: string;\n path: string;\n exists: boolean;\n};\n\ntype DevStatusDeps = {\n argFlag: (args: CliArgsLike, key: string) => boolean;\n findRepoRoot: (startDir?: string) => string | null;\n makeCliError: CliErrorFactory;\n};\n\nexport function buildDevRefs(repoRoot: string): DevRefStatus[] {\n const refs = [\n [\"pm_readme\", \"dev/engineering/pm/README.md\"],\n [\"open_points\", \"dev/engineering/pm/OPEN_POINTS.md\"],\n [\"open_list\", \"dev/engineering/pm/OPEN_LIST.md\"],\n [\"open_list_v2\", \"dev/engineering/pm/OPEN_LIST_V2.md\"],\n [\"sprint_plan\", \"dev/engineering/pm/SPRINT_PLAN.md\"],\n [\"next_steps\", \"dev/engineering/pm/NEXT_STEPS.md\"],\n [\"done_points\", \"dev/engineering/pm/DONE_POINTS.md\"],\n [\"v1_review_audit\", \"dev/engineering/audits/V1_PRODUCTION_CODEBASE_REVIEW.md\"],\n [\"open067_phase1_plan\", \"dev/engineering/audits/OPEN_067_PHASE1_INTERNAL_REPO_PLAN.md\"],\n [\"sdk_cli_ai_checklist\", \"dev/engineering/checklists/SDK_CLI_AI_CHECKLIST.md\"],\n ] as const;\n return refs.map(([key, rel]) => ({\n key,\n path: rel,\n exists: fs.existsSync(path.join(repoRoot, rel)),\n }));\n}\n\nexport function runDevStatusRefsCommand(args: CliArgsLike, deps: DevStatusDeps) {\n const repoRoot = deps.findRepoRoot();\n if (!repoRoot) {\n throw deps.makeCliError(\n \"CLI_REPO_NOT_FOUND\",\n \"xapps dev status refs is repo-only and requires the xapps monorepo checkout\",\n );\n }\n const refs = buildDevRefs(repoRoot);\n const sampleXplace = {\n publisher: {\n server: \"apps/publishers/xplace/backend/server.js\",\n readme: \"apps/publishers/xplace/backend/README.md\",\n },\n xapp: {\n manifest: \"apps/publishers/xplace/xapps/xplace-certs/manifest.json\",\n ai_policy: \"apps/publishers/xplace/xapps/xplace-certs/ai/policy.readonly.internal-v1.json\",\n },\n };\n const sampleStatus = {\n xplace_certs: {\n publisher: Object.fromEntries(\n Object.entries(sampleXplace.publisher).map(([key, rel]) => [\n key,\n { path: rel, exists: fs.existsSync(path.join(repoRoot, rel)) },\n ]),\n ),\n xapp: Object.fromEntries(\n Object.entries(sampleXplace.xapp).map(([key, rel]) => [\n key,\n { path: rel, exists: fs.existsSync(path.join(repoRoot, rel)) },\n ]),\n ),\n defaults: {\n publisher_base_url: \"http://localhost:3012\",\n gateway_base_url: \"http://localhost:3000\",\n },\n },\n };\n const payload = {\n schema_version: \"xapps.dev.status.refs.v1\",\n ok: refs.every((ref) => ref.exists),\n repo_root: repoRoot,\n refs,\n samples: sampleStatus,\n };\n if (deps.argFlag(args, \"json\")) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n console.log(\n [\n `Repo root: ${repoRoot}`,\n ...refs.map((ref) => `${ref.exists ? \"OK\" : \"MISS\"} ${ref.key} -> ${ref.path}`),\n \"Sample refs:\",\n ...Object.entries(sampleStatus.xplace_certs.publisher).map(\n ([key, item]) =>\n `${(item as any).exists ? \"OK\" : \"MISS\"} xplace.publisher.${key} -> ${(item as any).path}`,\n ),\n ...Object.entries(sampleStatus.xplace_certs.xapp).map(\n ([key, item]) =>\n `${(item as any).exists ? \"OK\" : \"MISS\"} xplace.xapp.${key} -> ${(item as any).path}`,\n ),\n ].join(\"\\n\"),\n );\n}\n\nexport function runDevCheckV1Command(args: CliArgsLike, deps: DevStatusDeps) {\n const repoRoot = deps.findRepoRoot();\n if (!repoRoot) {\n throw deps.makeCliError(\n \"CLI_REPO_NOT_FOUND\",\n \"xapps dev check v1 is repo-only and requires the xapps monorepo checkout\",\n );\n }\n const refs = buildDevRefs(repoRoot);\n const mustRead = (relPath: string) => fs.readFileSync(path.join(repoRoot, relPath), \"utf8\");\n const openList = mustRead(\"dev/engineering/pm/OPEN_LIST.md\");\n const sprintPlan = mustRead(\"dev/engineering/pm/SPRINT_PLAN.md\");\n const checks = [\n {\n key: \"refs_exist\",\n ok: refs.every((ref) => ref.exists),\n details: { missing: refs.filter((ref) => !ref.exists).map((ref) => ref.path) },\n },\n {\n key: \"v1_list_has_must_have_section\",\n ok: /Must Have for First Publisher \\/ xplace/i.test(openList),\n details: {},\n },\n {\n key: \"sprint_plan_has_scope_rules\",\n ok:\n /Scope Proposal Discipline Rule/i.test(sprintPlan) &&\n /Documentation Scope Rule/i.test(sprintPlan),\n details: {},\n },\n {\n key: \"pm_readme_exists\",\n ok: fs.existsSync(path.join(repoRoot, \"dev/engineering/pm/README.md\")),\n details: {},\n },\n ];\n const payload = {\n schema_version: \"xapps.dev.check.v1\",\n ok: checks.every((check) => check.ok),\n repo_root: repoRoot,\n checks,\n suggested_flows: [\"pay-per-request\", \"guard-orchestration\", \"xplace-certs\"],\n };\n if (deps.argFlag(args, \"json\")) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n console.log(\n [\n `V1 check: ${payload.ok ? \"PASS\" : \"FAIL\"}`,\n ...checks.map((check) => `${check.ok ? \"OK\" : \"FAIL\"} ${check.key}`),\n ].join(\"\\n\"),\n );\n if (!payload.ok) {\n throw deps.makeCliError(\"CLI_DEV_CHECK_FAILED\", \"xapps dev check v1 failed\", { checks });\n }\n}\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport type { parseXappManifest } from \"@xapps-platform/server-sdk\";\nimport type { DevRefStatus } from \"./devStatus.js\";\n\ntype CliArgsLike = Record<string, string | boolean>;\ntype CliErrorFactory = (code: string, message: string, details?: Record<string, unknown>) => Error;\n\ntype ContextToolSummary = {\n tool_name: string;\n title: string;\n input_required: string[];\n output_properties: string[];\n};\n\ntype ContextWidgetSummary = {\n widget_name: string;\n type: string;\n renderer: string;\n bind_tool_name?: string;\n};\n\ntype ContextDeps = {\n argString: (args: CliArgsLike, ...keys: string[]) => string | undefined;\n findRepoRoot: (startDir?: string) => string | null;\n parseManifestFromFile: (from: string) => {\n manifest: ReturnType<typeof parseXappManifest>;\n filePath: string;\n };\n buildDevRefs: (repoRoot: string) => DevRefStatus[];\n canonicalizeJson: (value: unknown) => unknown;\n makeCliError: CliErrorFactory;\n};\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction collectContextTools(manifest: ReturnType<typeof parseXappManifest>): ContextToolSummary[] {\n return manifest.tools\n .map((tool) => {\n const inputSchema =\n tool.input_schema && typeof tool.input_schema === \"object\" ? tool.input_schema : {};\n const outputSchema =\n tool.output_schema && typeof tool.output_schema === \"object\" ? tool.output_schema : {};\n const requiredRaw = Array.isArray((inputSchema as any).required)\n ? ((inputSchema as any).required as unknown[])\n : [];\n const outputProps = isPlainObject((outputSchema as any).properties)\n ? Object.keys((outputSchema as any).properties)\n : [];\n return {\n tool_name: tool.tool_name,\n title: tool.title || \"\",\n input_required: requiredRaw\n .filter((item): item is string => typeof item === \"string\")\n .sort(),\n output_properties: outputProps.sort(),\n };\n })\n .sort((a, b) => a.tool_name.localeCompare(b.tool_name));\n}\n\nfunction collectContextWidgets(\n manifest: ReturnType<typeof parseXappManifest>,\n): ContextWidgetSummary[] {\n return manifest.widgets\n .map((widget) => ({\n widget_name: widget.widget_name,\n type: widget.type || \"\",\n renderer: widget.renderer || \"\",\n ...(widget.bind_tool_name ? { bind_tool_name: widget.bind_tool_name } : {}),\n }))\n .sort((a, b) => a.widget_name.localeCompare(b.widget_name));\n}\n\nexport function buildContextExportPayload(\n manifest: ReturnType<typeof parseXappManifest>,\n filePath: string,\n deps: Pick<ContextDeps, \"canonicalizeJson\">,\n): Record<string, unknown> {\n const manifestJson = JSON.stringify(manifest);\n const manifestSha256 = createHash(\"sha256\").update(manifestJson).digest(\"hex\");\n const tools = collectContextTools(manifest);\n const widgets = collectContextWidgets(manifest);\n return {\n schema_version: \"xapps.context.v1\",\n source: {\n manifest_path: filePath,\n manifest_sha256: manifestSha256,\n },\n summary: {\n name: manifest.name,\n slug: manifest.slug,\n version: manifest.version,\n tools: manifest.tools.length,\n widgets: manifest.widgets.length,\n },\n indexes: {\n tools,\n widgets,\n },\n manifest: deps.canonicalizeJson(manifest),\n };\n}\n\nexport function buildInternalV1ContextPreset(\n repoRoot: string,\n deps: Pick<ContextDeps, \"buildDevRefs\">,\n): Record<string, unknown> {\n return {\n name: \"internal-v1\",\n refs: deps.buildDevRefs(repoRoot),\n anchors: {\n specs: [\n \"docs/specifications/01-publisher-rendered-integration.md\",\n \"docs/specifications/02-platform-rendered-integration.md\",\n \"docs/specifications/04-guard-xapps.md\",\n \"docs/specifications/10-data-sharing-graph-policy-v2.md\",\n \"docs/specifications/13-ai-agent-xapp-authoring.md\",\n ],\n audits: [\n \"dev/engineering/audits/V1_PRODUCTION_CODEBASE_REVIEW.md\",\n \"dev/engineering/audits/OPEN_067_PHASE1_INTERNAL_REPO_PLAN.md\",\n ],\n tests: [\n \"src/__tests__/xappsCli.test.ts\",\n \"src/__tests__/guardBeforeToolRun.test.ts\",\n \"src/__tests__/openapiErrorContract.test.ts\",\n ],\n },\n };\n}\n\nexport function runContextExportCommand(args: CliArgsLike, deps: ContextDeps) {\n const from = deps.argString(args, \"from\");\n if (!from) {\n throw new Error(\"Missing required argument: --from <manifest.json>\");\n }\n const { manifest, filePath } = deps.parseManifestFromFile(from);\n const payload = buildContextExportPayload(manifest, filePath, deps) as Record<string, unknown>;\n const preset = deps.argString(args, \"preset\");\n if (preset) {\n const normalized = preset.trim().toLowerCase();\n if (normalized !== \"internal-v1\") {\n throw deps.makeCliError(\n \"CLI_INVALID_OPTION\",\n `Invalid --preset: ${preset} (expected internal-v1)`,\n {\n label: \"--preset\",\n value: preset,\n },\n );\n }\n const repoRoot = deps.findRepoRoot();\n if (!repoRoot) {\n throw deps.makeCliError(\n \"CLI_REPO_NOT_FOUND\",\n \"xapps context export --preset internal-v1 is repo-only and requires the xapps monorepo checkout\",\n );\n }\n payload.preset = buildInternalV1ContextPreset(repoRoot, deps);\n }\n const outPath = deps.argString(args, \"out\");\n const rendered = `${JSON.stringify(payload, null, 2)}\\n`;\n if (outPath) {\n const target = path.resolve(process.cwd(), outPath);\n fs.mkdirSync(path.dirname(target), { recursive: true });\n fs.writeFileSync(target, rendered);\n console.log(`Context exported: ${target}`);\n return;\n }\n process.stdout.write(rendered);\n}\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport {\n buildManifestFromOpenApiText,\n extractOpenApiInfoFromText,\n slugifyManifestName,\n} from \"@xapps-platform/openapi-import\";\n\ntype CliArgValue = string | boolean | string[];\ntype CliArgs = Record<string, CliArgValue>;\n\ntype ParsedManifest = {\n slug: string;\n tools: Array<{\n tool_name: string;\n input_schema: unknown;\n output_schema: unknown;\n }>;\n widgets: Array<unknown>;\n};\n\ntype ManifestDeps = {\n argString: (args: CliArgs, ...keys: string[]) => string | undefined;\n argFlag: (args: CliArgs, key: string) => boolean;\n readInput: (from: string, fetchTimeoutMs: number) => Promise<string>;\n parsePositiveIntOrThrow: (value: string | undefined, fallback: number, label: string) => number;\n parseManifestFromFile: (from: string) => { manifest: ParsedManifest; filePath: string };\n readJsonFile: (file: string) => unknown;\n};\n\ntype ContractVector = {\n name?: string;\n tool_name?: string;\n input?: unknown;\n expected_output?: unknown;\n};\n\ntype ContractVectorSet = {\n vectors?: ContractVector[];\n};\n\nfunction buildInitManifestTemplate(input: {\n name: string;\n slug: string;\n version: string;\n}): Record<string, unknown> {\n return {\n name: input.name,\n slug: input.slug,\n version: input.version,\n target_client_id: \"REPLACE_CLIENT_ID\",\n description: \"Generated by xapps init\",\n tools: [\n {\n tool_name: \"example_tool\",\n title: \"Example Tool\",\n input_schema: {\n type: \"object\",\n properties: {\n message: { type: \"string\" },\n },\n required: [\"message\"],\n },\n output_schema: {\n type: \"object\",\n properties: {\n echoed: { type: \"string\" },\n },\n },\n },\n ],\n widgets: [\n {\n widget_name: \"example_widget\",\n type: \"write\",\n renderer: \"json-forms\",\n bind_tool_name: \"example_tool\",\n entry: {\n kind: \"platform_template\",\n template: \"write_form\",\n },\n },\n ],\n };\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction jsonTypeMatches(type: string, value: unknown): boolean {\n if (type === \"string\") return typeof value === \"string\";\n if (type === \"number\") return typeof value === \"number\";\n if (type === \"integer\") return typeof value === \"number\" && Number.isInteger(value);\n if (type === \"boolean\") return typeof value === \"boolean\";\n if (type === \"array\") return Array.isArray(value);\n if (type === \"object\") return isPlainObject(value);\n if (type === \"null\") return value === null;\n return true;\n}\n\nfunction validatePayloadAgainstSchema(schema: unknown, payload: unknown, label: string): string[] {\n if (!isPlainObject(schema)) return [];\n if (!isPlainObject(payload)) {\n return [`${label} must be a JSON object`];\n }\n\n const errors: string[] = [];\n const required = Array.isArray(schema.required) ? schema.required : [];\n for (const key of required) {\n if (typeof key === \"string\" && !(key in payload)) {\n errors.push(`${label} missing required field: ${key}`);\n }\n }\n\n const properties = isPlainObject(schema.properties) ? schema.properties : {};\n for (const [key, propSchema] of Object.entries(properties)) {\n if (!(key in payload)) continue;\n if (!isPlainObject(propSchema)) continue;\n const expectedType = typeof propSchema.type === \"string\" ? propSchema.type : \"\";\n if (expectedType && !jsonTypeMatches(expectedType, payload[key])) {\n errors.push(\n `${label}.${key} type mismatch (expected ${expectedType}, got ${Array.isArray(payload[key]) ? \"array\" : typeof payload[key]})`,\n );\n }\n }\n\n return errors;\n}\n\nexport async function runImportCommand(args: CliArgs, deps: ManifestDeps) {\n const from = deps.argString(args, \"from\");\n const out = deps.argString(args, \"out\");\n const fetchTimeoutMs = deps.parsePositiveIntOrThrow(\n deps.argString(args, \"fetch-timeout-ms\"),\n 10000,\n \"--fetch-timeout-ms\",\n );\n if (!from || !out) {\n throw new Error(\"Missing required arguments: --from and --out\");\n }\n\n const openApiText = await deps.readInput(from, fetchTimeoutMs);\n const fallbackInfo = extractOpenApiInfoFromText(openApiText);\n const name = deps.argString(args, \"name\") || fallbackInfo.title || \"OpenAPI Imported App\";\n const slug = deps.argString(args, \"slug\") || slugifyManifestName(name) || \"openapi-imported-app\";\n\n const manifest = buildManifestFromOpenApiText(openApiText, {\n name,\n slug,\n version: deps.argString(args, \"version\") || \"1.0.0\",\n description: deps.argString(args, \"description\") || fallbackInfo.description,\n endpointBaseUrl: deps.argString(args, \"endpoint\") || \"https://api.example.com\",\n endpointEnv: deps.argString(args, \"endpoint-env\") || \"prod\",\n });\n\n const outPath = path.resolve(process.cwd(), out);\n fs.mkdirSync(path.dirname(outPath), { recursive: true });\n fs.writeFileSync(outPath, JSON.stringify(manifest, null, 2));\n console.log(\n `Manifest generated: ${outPath}\\nTools: ${manifest.tools.length}\\nWidgets: ${manifest.widgets.length}`,\n );\n}\n\nexport function runValidateCommand(args: CliArgs, deps: ManifestDeps) {\n const from = deps.argString(args, \"from\");\n if (!from) {\n throw new Error(\"Missing required argument: --from <manifest.json>\");\n }\n\n const { manifest, filePath } = deps.parseManifestFromFile(from);\n console.log(\n `Manifest valid: ${filePath}\\nSlug: ${manifest.slug}\\nTools: ${manifest.tools.length}\\nWidgets: ${manifest.widgets.length}`,\n );\n}\n\nexport function runInitCommand(args: CliArgs, deps: ManifestDeps) {\n const out = deps.argString(args, \"out\");\n if (!out) {\n throw new Error(\"Missing required argument: --out <directory>\");\n }\n\n const outDir = path.resolve(process.cwd(), out);\n fs.mkdirSync(outDir, { recursive: true });\n\n const name = deps.argString(args, \"name\") || \"My Xapp\";\n const slug = deps.argString(args, \"slug\") || slugifyManifestName(name) || \"my-xapp\";\n const version = deps.argString(args, \"version\") || \"1.0.0\";\n const force = deps.argFlag(args, \"force\");\n\n const manifestPath = path.join(outDir, \"manifest.json\");\n const readmePath = path.join(outDir, \"README.md\");\n\n if (!force) {\n for (const filePath of [manifestPath, readmePath]) {\n if (fs.existsSync(filePath)) {\n throw new Error(`File already exists: ${filePath} (use --force to overwrite)`);\n }\n }\n }\n\n const manifest = buildInitManifestTemplate({ name, slug, version });\n fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));\n fs.writeFileSync(\n readmePath,\n `# ${name}\\n\\nGenerated by xapps init.\\n\\nNext steps:\\n\\n1. Edit manifest.json (set target_client_id to the tenant client ID)\\n2. Validate: xapps validate --from manifest.json\\n3. Import/OpenAPI: xapps import ...\\n`,\n );\n\n console.log(`Initialized xapp scaffold in: ${outDir}`);\n}\n\nexport function runTestCommand(args: CliArgs, deps: ManifestDeps) {\n const from = deps.argString(args, \"from\");\n const vectorsPath = deps.argString(args, \"vectors\");\n if (!from || !vectorsPath) {\n throw new Error(\n \"Missing required arguments: --from <manifest.json> and --vectors <vectors.json>\",\n );\n }\n\n const { manifest, filePath: manifestPath } = deps.parseManifestFromFile(from);\n const vectorsRaw = deps.readJsonFile(vectorsPath);\n if (!isPlainObject(vectorsRaw)) {\n throw new Error(\"Vector file must be a JSON object with a vectors[] field\");\n }\n const vectorsContainer = vectorsRaw as ContractVectorSet;\n if (!Array.isArray(vectorsContainer.vectors)) {\n throw new Error(\"Vector file must contain vectors[]\");\n }\n\n const failures: string[] = [];\n for (let index = 0; index < vectorsContainer.vectors.length; index += 1) {\n const vector = vectorsContainer.vectors[index];\n const name = typeof vector?.name === \"string\" ? vector.name : `vector_${index + 1}`;\n const toolName = typeof vector?.tool_name === \"string\" ? vector.tool_name : \"\";\n if (!toolName) {\n failures.push(`${name}: missing tool_name`);\n continue;\n }\n const tool = manifest.tools.find((item) => item.tool_name === toolName);\n if (!tool) {\n failures.push(`${name}: unknown tool_name '${toolName}'`);\n continue;\n }\n\n const inputErrors = validatePayloadAgainstSchema(\n tool.input_schema,\n vector.input || {},\n \"input\",\n );\n const outputErrors = validatePayloadAgainstSchema(\n tool.output_schema,\n vector.expected_output || {},\n \"expected_output\",\n );\n for (const error of [...inputErrors, ...outputErrors]) {\n failures.push(`${name}: ${error}`);\n }\n }\n\n if (failures.length) {\n throw new Error(\n `Contract test failed (${failures.length} issues)\\n${failures.map((f) => `- ${f}`).join(\"\\n\")}`,\n );\n }\n\n console.log(\n `Contract test passed: ${vectorsContainer.vectors.length} vector(s)\\nManifest: ${manifestPath}\\nVectors: ${path.resolve(process.cwd(), vectorsPath)}`,\n );\n}\n", "import fs from \"node:fs\";\nimport http, { type IncomingMessage } from \"node:http\";\nimport path from \"node:path\";\nimport {\n buildDevFlowInitTemplate as buildDevFlowInitTemplateBase,\n lintDevFlowDefinition,\n parseDevFlowObject,\n} from \"../devFlow.js\";\nimport { buildBuiltInDevCheckFlows, executeDevCheckFlowCommands } from \"../devCheckFlow.js\";\nimport { runAiCheckCommand, runAiPlanCommand } from \"../aiCommands.js\";\nimport { runDevCheckV1Command, runDevStatusRefsCommand } from \"../devStatus.js\";\nimport { buildContextExportPayload, buildInternalV1ContextPreset } from \"../contextCommands.js\";\nimport {\n runPublisherEndpointCredentialEnsureCommand,\n runPublisherEndpointCredentialSetCommand,\n} from \"../publisherCommands.js\";\n\ntype CliArgValue = string | boolean | string[];\ntype CliArgs = Record<string, CliArgValue>;\n\ntype ParsedManifest = {\n slug: string;\n tools: Array<unknown>;\n widgets: Array<unknown>;\n};\n\ntype DevCommandDeps = {\n argString: (args: CliArgs, ...keys: string[]) => string | undefined;\n argFlag: (args: CliArgs, key: string) => boolean;\n shellEscapeArg: (value: string) => string;\n applyFlowCommandTemplates: (command: string, params: { artifactsDir: string }) => string;\n findRepoRoot: (startDir?: string) => string | null;\n readJsonFile: (file: string) => unknown;\n parseManifestFromFile: (from: string) => { manifest: ParsedManifest; filePath: string };\n runDryRun: (args: CliArgs, manifest: ParsedManifest) => void;\n buildDevRefs: (input: { repoRoot: string; manifestPath?: string | null }) => string[];\n canonicalizeJson: (value: unknown) => unknown;\n readRequestBody: (req: IncomingMessage) => Promise<unknown>;\n makeCliError: (code: string, message: string, details?: Record<string, unknown>) => Error;\n};\n\nexport function runDevStatusRefsCliCommand(args: CliArgs, deps: DevCommandDeps) {\n runDevStatusRefsCommand(args, {\n argFlag: deps.argFlag,\n findRepoRoot: deps.findRepoRoot,\n makeCliError: deps.makeCliError,\n });\n}\n\nexport function runDevCheckV1CliCommand(args: CliArgs, deps: DevCommandDeps) {\n runDevCheckV1Command(args, {\n argFlag: deps.argFlag,\n findRepoRoot: deps.findRepoRoot,\n makeCliError: deps.makeCliError,\n });\n}\n\nexport function runDevCheckFlowCliCommand(args: CliArgs, deps: DevCommandDeps) {\n const repoRoot = deps.findRepoRoot();\n if (!repoRoot) {\n throw deps.makeCliError(\n \"CLI_REPO_NOT_FOUND\",\n \"xapps dev check flow is repo-only and requires the xapps monorepo checkout\",\n );\n }\n const flowFile = deps.argString(args, \"from\");\n const flowName = deps.argString(args, \"name\");\n if (!flowFile && !flowName) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing required argument: --name <flow> or --from <flow.json>\",\n );\n }\n if (flowFile && flowName) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Use either --name <flow> or --from <flow.json>, not both\",\n );\n }\n const normalized = flowName ? flowName.trim().toLowerCase() : null;\n const artifactsDirRaw = deps.argString(args, \"artifacts-dir\");\n const artifactsDir = artifactsDirRaw\n ? path.resolve(repoRoot, String(artifactsDirRaw).trim())\n : \"/tmp\";\n const plans = buildBuiltInDevCheckFlows(artifactsDir);\n let selectedFlow:\n | { key: string; title: string; description: string; commands: string[]; refs: string[] }\n | undefined;\n const readFlowFromFile = (inputFlowFile: string) => {\n const filePath = path.resolve(repoRoot, inputFlowFile);\n const parsed = deps.readJsonFile(filePath);\n const parsedFlow = parseDevFlowObject(parsed, path.basename(filePath));\n if (parsedFlow.errors.length) {\n throw deps.makeCliError(\n \"CLI_INVALID_OPTION\",\n `Invalid flow file: ${inputFlowFile} (${parsedFlow.errors.join(\",\")})`,\n {\n label: \"--from\",\n value: inputFlowFile,\n errors: parsedFlow.errors,\n },\n );\n }\n return {\n filePath,\n flow: parsedFlow.flow,\n };\n };\n if (flowFile) {\n selectedFlow = readFlowFromFile(flowFile).flow;\n } else {\n const plan = normalized ? plans[normalized] : undefined;\n if (!plan) {\n throw deps.makeCliError(\"CLI_INVALID_OPTION\", `Unknown flow: ${flowName}`, {\n label: \"--name\",\n value: flowName,\n allowed: Object.keys(plans),\n });\n }\n selectedFlow = { key: normalized!, ...plan };\n }\n const resolvedCommands = selectedFlow.commands.map((cmd) =>\n deps.applyFlowCommandTemplates(cmd, { artifactsDir }),\n );\n const payload: Record<string, unknown> = {\n schema_version: \"xapps.dev.check.flow.v1\",\n ok: true,\n repo_root: repoRoot,\n flow: selectedFlow.key,\n artifacts_dir: artifactsDir,\n title: selectedFlow.title,\n description: selectedFlow.description,\n commands: resolvedCommands,\n refs: selectedFlow.refs,\n ...(flowFile ? { flow_file: path.relative(repoRoot, path.resolve(repoRoot, flowFile)) } : {}),\n };\n if (deps.argFlag(args, \"run\")) {\n try {\n fs.mkdirSync(artifactsDir, { recursive: true });\n } catch (error) {\n throw deps.makeCliError(\n \"CLI_DEV_CHECK_FAILED\",\n `Unable to prepare artifacts directory: ${artifactsDir}`,\n {\n flow: normalized || \"\",\n artifacts_dir: artifactsDir,\n error: String((error as Error)?.message || error),\n },\n );\n }\n }\n if (deps.argFlag(args, \"run\")) {\n const runs = executeDevCheckFlowCommands(resolvedCommands, repoRoot);\n const runSummary = {\n executed: true,\n ok: runs.every((run) => run.ok),\n runs,\n };\n payload.run = runSummary;\n payload.ok = runSummary.ok;\n }\n if (deps.argFlag(args, \"json\")) {\n console.log(JSON.stringify(payload, null, 2));\n if (!payload.ok) {\n throw deps.makeCliError(\n \"CLI_DEV_CHECK_FAILED\",\n `xapps dev check flow failed: ${String(selectedFlow.key || normalized || \"unknown\")}`,\n {\n flow: String(selectedFlow.key || normalized || \"\"),\n },\n );\n }\n return;\n }\n console.log(\n [\n `Flow check plan: ${payload.flow}`,\n `Title: ${payload.title}`,\n `Description: ${payload.description}`,\n \"Commands:\",\n ...(payload.commands as string[]).map((cmd) => `- ${cmd}`),\n ...(payload.run && typeof payload.run === \"object\" && Array.isArray((payload.run as any).runs)\n ? [\n \"Run results:\",\n ...((payload.run as any).runs as any[]).map(\n (run) => `- ${run.ok ? \"OK\" : \"FAIL\"} (${run.exit_code ?? \"?\"}) ${run.command}`,\n ),\n ]\n : []),\n \"Refs:\",\n ...(payload.refs as string[]).map((ref) => `- ${ref}`),\n ].join(\"\\n\"),\n );\n if (!payload.ok) {\n throw deps.makeCliError(\n \"CLI_DEV_CHECK_FAILED\",\n `xapps dev check flow failed: ${String(selectedFlow.key || normalized || \"unknown\")}`,\n {\n flow: String(selectedFlow.key || normalized || \"\"),\n },\n );\n }\n}\n\nexport function runDevCheckFlowLintCliCommand(args: CliArgs, deps: DevCommandDeps) {\n const repoRoot = deps.findRepoRoot();\n if (!repoRoot) {\n throw deps.makeCliError(\n \"CLI_REPO_NOT_FOUND\",\n \"xapps dev check flow lint is repo-only and requires the xapps monorepo checkout\",\n );\n }\n const flowFile = deps.argString(args, \"from\");\n if (!flowFile) {\n throw deps.makeCliError(\"CLI_INVALID_ARGS\", \"Missing required argument: --from <flow.json>\");\n }\n const filePath = path.resolve(repoRoot, flowFile);\n const parsed = deps.readJsonFile(filePath);\n const parsedFlow = parseDevFlowObject(parsed, path.basename(filePath));\n if (parsedFlow.errors.length) {\n throw deps.makeCliError(\n \"CLI_INVALID_OPTION\",\n `Invalid flow file: ${flowFile} (${parsedFlow.errors.join(\",\")})`,\n {\n label: \"--from\",\n value: flowFile,\n errors: parsedFlow.errors,\n },\n );\n }\n const checks = lintDevFlowDefinition(parsedFlow.flow);\n const payload = {\n schema_version: \"xapps.dev.check.flow.lint.v1\",\n ok: checks.every((c) => c.ok),\n repo_root: repoRoot,\n flow_file: path.relative(repoRoot, filePath),\n flow: parsedFlow.flow.key || null,\n checks,\n };\n if (deps.argFlag(args, \"json\")) {\n console.log(JSON.stringify(payload, null, 2));\n if (!payload.ok) {\n throw deps.makeCliError(\"CLI_DEV_CHECK_FAILED\", \"xapps dev check flow lint failed\", {\n flow_file: payload.flow_file,\n checks,\n });\n }\n return;\n }\n console.log(\n [\n `Flow lint: ${payload.ok ? \"PASS\" : \"FAIL\"}`,\n `Flow file: ${payload.flow_file}`,\n `Flow: ${payload.flow || \"n/a\"}`,\n ...checks.map((c) => `${c.ok ? \"OK\" : \"FAIL\"} ${c.key}`),\n ].join(\"\\n\"),\n );\n if (!payload.ok) {\n throw deps.makeCliError(\"CLI_DEV_CHECK_FAILED\", \"xapps dev check flow lint failed\", {\n flow_file: payload.flow_file,\n checks,\n });\n }\n}\n\nfunction buildDevFlowInitTemplate(type: string, makeCliError: DevCommandDeps[\"makeCliError\"]) {\n const template = buildDevFlowInitTemplateBase(type);\n if (template) return template;\n throw makeCliError(\"CLI_INVALID_OPTION\", `Unknown flow template type: ${type}`, {\n label: \"--type\",\n value: type,\n allowed: [\"ai-artifacts\", \"manual-loop\"],\n });\n}\n\nexport function runDevCheckFlowInitCliCommand(args: CliArgs, deps: DevCommandDeps) {\n const repoRoot = deps.findRepoRoot();\n if (!repoRoot) {\n throw deps.makeCliError(\n \"CLI_REPO_NOT_FOUND\",\n \"Could not locate repo root for xapps dev check flow init\",\n );\n }\n const out = deps.argString(args, \"out\");\n if (!out) {\n throw deps.makeCliError(\"CLI_INVALID_ARGS\", \"Missing required argument: --out <flow.json>\");\n }\n const type = deps.argString(args, \"type\");\n if (!type) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing required argument: --type <ai-artifacts|manual-loop>\",\n );\n }\n const normalizedType = String(type).trim().toLowerCase();\n const flowTemplate = buildDevFlowInitTemplate(type, deps.makeCliError);\n const flowId = deps.argString(args, \"flow-id\");\n if (flowId && String(flowId).trim()) {\n flowTemplate.flow = String(flowId).trim();\n }\n const manifestPathArg = deps.argString(args, \"manifest\");\n const policyPathArg = deps.argString(args, \"policy\");\n const smokeScriptArg = deps.argString(args, \"smoke-script\");\n if (normalizedType === \"ai-artifacts\") {\n const manifestPath = manifestPathArg ? String(manifestPathArg).trim() : \"\";\n const policyPath = policyPathArg ? String(policyPathArg).trim() : \"\";\n if (manifestPath) {\n flowTemplate.commands = flowTemplate.commands.map((cmd) =>\n cmd.replaceAll(\"./manifest.json\", manifestPath),\n );\n flowTemplate.refs = flowTemplate.refs.map((ref) =>\n ref === \"./manifest.json\" ? manifestPath : ref,\n );\n }\n if (policyPath) {\n flowTemplate.commands = flowTemplate.commands.map((cmd) =>\n cmd.replaceAll(\n \"--policy-preset internal-readonly\",\n `--policy ${deps.shellEscapeArg(policyPath)}`,\n ),\n );\n flowTemplate.refs = flowTemplate.refs.map((ref) =>\n ref === \"./ai/policy.readonly.internal-v1.json\" ? policyPath : ref,\n );\n }\n }\n if (normalizedType === \"manual-loop\") {\n const smokeScriptPath = smokeScriptArg ? String(smokeScriptArg).trim() : \"\";\n if (smokeScriptPath) {\n flowTemplate.commands = [`node ${deps.shellEscapeArg(smokeScriptPath)}`];\n flowTemplate.refs = flowTemplate.refs.map((ref) =>\n ref === \"./scripts/manual-loop-smoke.mjs\" ? smokeScriptPath : ref,\n );\n }\n }\n const target = path.resolve(process.cwd(), out);\n fs.mkdirSync(path.dirname(target), { recursive: true });\n const rendered = `${JSON.stringify(flowTemplate, null, 2)}\\n`;\n fs.writeFileSync(target, rendered);\n const payload = {\n schema_version: \"xapps.dev.check.flow.init.v1\",\n ok: true,\n type: String(type).trim().toLowerCase(),\n out: target,\n flow: flowTemplate.flow,\n ...(manifestPathArg ? { manifest: String(manifestPathArg).trim() } : {}),\n ...(policyPathArg ? { policy: String(policyPathArg).trim() } : {}),\n ...(smokeScriptArg ? { smoke_script: String(smokeScriptArg).trim() } : {}),\n };\n if (deps.argFlag(args, \"json\")) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n console.log(`Flow template created: ${target}\\nType: ${payload.type}\\nFlow: ${payload.flow}`);\n}\n\nexport async function runAiPlanCliCommand(args: CliArgs, deps: DevCommandDeps) {\n await runAiPlanCommand(args, {\n argString: deps.argString,\n argFlag: deps.argFlag,\n findRepoRoot: deps.findRepoRoot,\n parseManifestFromFile: deps.parseManifestFromFile,\n buildContextExportPayload: (manifest, filePath) =>\n buildContextExportPayload(manifest, filePath, {\n canonicalizeJson: deps.canonicalizeJson,\n }) as Record<string, unknown>,\n buildDevRefs: deps.buildDevRefs,\n buildInternalV1ContextPreset: (repoRoot) =>\n buildInternalV1ContextPreset(repoRoot, { buildDevRefs: deps.buildDevRefs }) as Record<\n string,\n unknown\n >,\n readJsonFile: deps.readJsonFile,\n makeCliError: deps.makeCliError,\n });\n}\n\nexport async function runAiCheckCliCommand(args: CliArgs, deps: DevCommandDeps) {\n await runAiCheckCommand(args, {\n argString: deps.argString,\n argFlag: deps.argFlag,\n findRepoRoot: deps.findRepoRoot,\n parseManifestFromFile: deps.parseManifestFromFile,\n buildContextExportPayload: (manifest, filePath) =>\n buildContextExportPayload(manifest, filePath, {\n canonicalizeJson: deps.canonicalizeJson,\n }) as Record<string, unknown>,\n buildDevRefs: deps.buildDevRefs,\n buildInternalV1ContextPreset: (repoRoot) =>\n buildInternalV1ContextPreset(repoRoot, { buildDevRefs: deps.buildDevRefs }) as Record<\n string,\n unknown\n >,\n readJsonFile: deps.readJsonFile,\n makeCliError: deps.makeCliError,\n });\n}\n\nexport async function runPublisherCliCommand(args: CliArgs, deps: DevCommandDeps) {\n const subcommand = deps.argString(args, \"_subcommand\");\n const subcommand2 = deps.argString(args, \"_subcommand2\");\n const subcommand3 = deps.argString(args, \"_subcommand3\");\n if (subcommand === \"endpoint\" && subcommand2 === \"credential\" && subcommand3 === \"set\") {\n await runPublisherEndpointCredentialSetCommand(args, {\n argString: deps.argString,\n argFlag: deps.argFlag,\n makeCliError: deps.makeCliError,\n });\n return;\n }\n if (subcommand === \"endpoint\" && subcommand2 === \"credential\" && subcommand3 === \"ensure\") {\n await runPublisherEndpointCredentialEnsureCommand(args, {\n argString: deps.argString,\n argFlag: deps.argFlag,\n makeCliError: deps.makeCliError,\n });\n return;\n }\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing required subcommand: publisher endpoint credential set|ensure\",\n );\n}\n\nexport async function runDevCommand(args: CliArgs, deps: DevCommandDeps) {\n const subcommand = deps.argString(args, \"_subcommand\");\n const subcommand2 = deps.argString(args, \"_subcommand2\");\n if (subcommand === \"status\" && subcommand2 === \"refs\") {\n runDevStatusRefsCliCommand(args, deps);\n return;\n }\n if (subcommand === \"check\" && subcommand2 === \"v1\") {\n runDevCheckV1CliCommand(args, deps);\n return;\n }\n if (subcommand === \"check\" && subcommand2 === \"flow\") {\n if (deps.argString(args, \"_subcommand3\") === \"init\") {\n runDevCheckFlowInitCliCommand(args, deps);\n return;\n }\n if (deps.argString(args, \"_subcommand3\") === \"lint\") {\n runDevCheckFlowLintCliCommand(args, deps);\n return;\n }\n runDevCheckFlowCliCommand(args, deps);\n return;\n }\n\n const from = deps.argString(args, \"from\");\n if (!from) {\n throw new Error(\"Missing required argument: --from <manifest.json>\");\n }\n\n const once = deps.argFlag(args, \"once\");\n const watchEnabled = !deps.argFlag(args, \"no-watch\");\n const host = deps.argString(args, \"host\") || \"127.0.0.1\";\n const port = Number(deps.argString(args, \"port\") || \"4011\");\n\n const first = deps.parseManifestFromFile(from);\n console.log(\n `Dev manifest loaded: ${first.filePath}\\nSlug: ${first.manifest.slug}\\nTools: ${first.manifest.tools.length}\\nWidgets: ${first.manifest.widgets.length}`,\n );\n deps.runDryRun(args, first.manifest);\n\n if (once) return;\n\n const manifestPath = first.filePath;\n let currentManifest = first.manifest;\n let watchTimer: NodeJS.Timeout | null = null;\n const watcher = watchEnabled\n ? fs.watch(manifestPath, () => {\n if (watchTimer) clearTimeout(watchTimer);\n watchTimer = setTimeout(() => {\n try {\n const parsed = deps.parseManifestFromFile(manifestPath);\n currentManifest = parsed.manifest;\n console.log(\n `Manifest revalidated: ${parsed.filePath}\\nSlug: ${parsed.manifest.slug}\\nTools: ${parsed.manifest.tools.length}\\nWidgets: ${parsed.manifest.widgets.length}`,\n );\n } catch (err: any) {\n console.error(`Manifest validation failed: ${err?.message || String(err)}`);\n }\n }, 120);\n })\n : null;\n\n const server = http.createServer(async (req, res) => {\n const method = (req.method || \"GET\").toUpperCase();\n const url = req.url || \"/\";\n const eventMatch = /^\\/v1\\/requests\\/([^/]+)\\/events\\/?$/.exec(url);\n const completeMatch = /^\\/v1\\/requests\\/([^/]+)\\/complete\\/?$/.exec(url);\n\n if (method === \"POST\" && (eventMatch || completeMatch)) {\n const requestId = decodeURIComponent((eventMatch || completeMatch)![1]);\n const payload = await deps.readRequestBody(req);\n const kind = eventMatch ? \"event\" : \"complete\";\n const payloadText = JSON.stringify(payload);\n console.log(\n `[dev-callback] ${kind} request_id=${requestId} slug=${currentManifest.slug} payload=${payloadText}`,\n );\n const response = {\n ok: true,\n simulated: true,\n kind,\n request_id: requestId,\n };\n res.statusCode = 200;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(JSON.stringify(response));\n return;\n }\n\n res.statusCode = 404;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(JSON.stringify({ ok: false, error: \"not_found\" }));\n });\n\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(port, host, () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n\n console.log(\n `xapps dev running\\nManifest watch: ${watchEnabled ? \"on\" : \"off\"}\\nMock callbacks: http://${host}:${port}\\nEndpoints: POST /v1/requests/:id/events and POST /v1/requests/:id/complete`,\n );\n\n await new Promise<void>((resolve) => {\n const shutdown = () => {\n if (watchTimer) {\n clearTimeout(watchTimer);\n }\n watcher?.close();\n server.close(() => resolve());\n };\n process.once(\"SIGINT\", shutdown);\n process.once(\"SIGTERM\", shutdown);\n });\n}\n", "export type DevFlowDefinition = {\n key: string;\n title: string;\n description: string;\n commands: string[];\n refs: string[];\n};\n\nexport type DevFlowLintCheck = {\n key: string;\n ok: boolean;\n details?: Record<string, unknown>;\n};\n\nexport function buildDevFlowInitTemplate(type: string): {\n flow: string;\n title: string;\n description: string;\n commands: string[];\n refs: string[];\n} | null {\n const normalized = String(type || \"\")\n .trim()\n .toLowerCase();\n if (normalized === \"ai-artifacts\") {\n return {\n flow: \"sample-ai-artifacts\",\n title: \"Sample AI plan/check artifacts workflow\",\n description:\n \"Edit paths for your app and policy. Uses {{ARTIFACTS_DIR}} for generated plan/check reports.\",\n commands: [\n \"npm run xapps -- validate --from ./manifest.json\",\n \"npm run xapps -- ai plan --mode internal --from ./manifest.json --preset internal-v1 --json --out {{ARTIFACTS_DIR}}/xapps.plan.json\",\n \"npm run xapps -- ai check --mode internal --plan {{ARTIFACTS_DIR}}/xapps.plan.json --policy-preset internal-readonly --json --out {{ARTIFACTS_DIR}}/xapps.check.json\",\n ],\n refs: [\n \"./manifest.json\",\n \"./ai/policy.readonly.internal-v1.json\",\n \"dev/engineering/checklists/SDK_CLI_AI_CHECKLIST.md\",\n ],\n };\n }\n if (normalized === \"manual-loop\") {\n return {\n flow: \"sample-manual-loop\",\n title: \"Sample publisher manual response loop smoke\",\n description:\n \"Edit the smoke script path for your publisher sample/workspace. Intended for async manual-response callback loops.\",\n commands: [\"node ./scripts/manual-loop-smoke.mjs\"],\n refs: [\"./scripts/manual-loop-smoke.mjs\", \"./README.md\"],\n };\n }\n return null;\n}\n\nexport function parseDevFlowObject(\n raw: unknown,\n fallbackFlowId = \"\",\n): { flow: DevFlowDefinition; errors: string[] } {\n const errors: string[] = [];\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) {\n return {\n flow: { key: \"\", title: \"\", description: \"\", commands: [], refs: [] },\n errors: [\"expected_object\"],\n };\n }\n const source = raw as Record<string, unknown>;\n const key = String(source.flow || source.key || fallbackFlowId || \"\")\n .trim()\n .toLowerCase();\n const title = String(source.title || \"\").trim();\n const description = String(source.description || \"\").trim();\n const commands = Array.isArray(source.commands)\n ? source.commands\n .filter((v): v is string => typeof v === \"string\")\n .map((v) => v.trim())\n .filter(Boolean)\n : [];\n const refs = Array.isArray(source.refs)\n ? source.refs\n .filter((v): v is string => typeof v === \"string\")\n .map((v) => v.trim())\n .filter(Boolean)\n : [];\n if (!key) errors.push(\"flow_id_missing\");\n if (!title) errors.push(\"title_missing\");\n if (!description) errors.push(\"description_missing\");\n if (!commands.length) errors.push(\"commands_missing\");\n return {\n flow: { key, title, description, commands, refs },\n errors,\n };\n}\n\nexport function lintDevFlowDefinition(flow: DevFlowDefinition): DevFlowLintCheck[] {\n const commands = Array.isArray(flow.commands) ? flow.commands : [];\n return [\n {\n key: \"flow_id_present\",\n ok: typeof flow.key === \"string\" && flow.key.trim().length > 0,\n details: { value: flow.key || null },\n },\n {\n key: \"title_present\",\n ok: typeof flow.title === \"string\" && flow.title.trim().length > 0,\n details: { value: flow.title || null },\n },\n {\n key: \"description_present\",\n ok: typeof flow.description === \"string\" && flow.description.trim().length > 0,\n details: { value: flow.description || null },\n },\n {\n key: \"commands_nonempty\",\n ok: commands.length > 0,\n details: { command_count: commands.length },\n },\n {\n key: \"commands_prefixed\",\n ok: commands.every((cmd) => /^(npm|npx|node|pnpm|yarn|bun)\\b/.test(String(cmd).trim())),\n details: {\n invalid_commands: commands.filter(\n (cmd) => !/^(npm|npx|node|pnpm|yarn|bun)\\b/.test(String(cmd).trim()),\n ),\n },\n },\n ];\n}\n", "import { spawnSync } from \"node:child_process\";\nimport path from \"node:path\";\nimport type { DevFlowDefinition } from \"./devFlow.js\";\n\nfunction shellEscapeArg(value: string): string {\n if (/^[A-Za-z0-9_./:-]+$/.test(value)) return value;\n return `'${String(value).replace(/'/g, `'\"'\"'`)}'`;\n}\n\nexport function buildBuiltInDevCheckFlows(\n artifactsDir: string,\n): Record<string, Omit<DevFlowDefinition, \"key\">> {\n const xplacePlanPath = path.join(artifactsDir, \"xapps-xplace-certs.plan.json\");\n const xplaceCheckPath = path.join(artifactsDir, \"xapps-xplace-certs.check.json\");\n return {\n \"pay-per-request\": {\n title: \"Pay-per-request baseline flow\",\n description:\n \"Verifies guarded payment orchestration baseline across widget/guards/contracts for V1.\",\n commands: [\n \"npm test -- src/__tests__/guardBeforeToolRun.test.ts\",\n \"npm test -- src/__tests__/widgetSdk.test.ts src/__tests__/extensionsLabJsonformsPayment.e2e.test.ts\",\n \"npm test -- src/__tests__/openapiErrorContract.test.ts\",\n ],\n refs: [\n \"dev/engineering/audits/V1_PRODUCTION_CODEBASE_REVIEW.md\",\n \"dev/engineering/pm/OPEN_LIST.md\",\n ],\n },\n \"guard-orchestration\": {\n title: \"Guard orchestration bridge flow\",\n description:\n \"Verifies blocked/confirm/payment orchestration bridge behavior across host/embed guard paths.\",\n commands: [\n \"npm test -- src/__tests__/guardContractParity.test.ts src/__tests__/integrationHostGuardContracts.test.ts\",\n \"npm test -- src/__tests__/widgetRuntime.guardBridge.test.ts\",\n \"npx playwright test e2e/extensions-guards.spec.ts --grep orchestration|guard\",\n ],\n refs: [\n \"dev/engineering/audits/V1_PRODUCTION_CODEBASE_REVIEW.md\",\n \"dev/engineering/pm/OPEN_POINTS.md\",\n ],\n },\n \"xplace-certs\": {\n title: \"xplace certs first-xapp internal workflow\",\n description:\n \"Validates and inspects the xplace-certs JSON Forms manifest using internal-repo CLI helpers.\",\n commands: [\n \"npm run xapps -- validate --from apps/publishers/xplace/xapps/xplace-certs/manifest.json\",\n `npm run xapps -- ai plan --mode internal --from apps/publishers/xplace/xapps/xplace-certs/manifest.json --preset internal-v1 --flow xplace-certs --json --out ${shellEscapeArg(xplacePlanPath)}`,\n `npm run xapps -- ai check --mode internal --plan ${shellEscapeArg(xplacePlanPath)} --policy apps/publishers/xplace/xapps/xplace-certs/ai/policy.readonly.internal-v1.json --json --out ${shellEscapeArg(xplaceCheckPath)}`,\n ],\n refs: [\n \"apps/publishers/xplace/xapps/xplace-certs/manifest.json\",\n \"apps/publishers/xplace/xapps/xplace-certs/ai/policy.readonly.internal-v1.json\",\n \"apps/publishers/xplace/backend/server.js\",\n \"dev/engineering/audits/OPEN_067_PHASE1_INTERNAL_REPO_PLAN.md\",\n ],\n },\n };\n}\n\nexport type DevCheckFlowRunResult = {\n command: string;\n ok: boolean;\n exit_code: number | null;\n signal: NodeJS.Signals | null;\n stdout: string;\n stderr: string;\n error: string | null;\n};\n\nexport function executeDevCheckFlowCommands(\n commands: string[],\n repoRoot: string,\n): DevCheckFlowRunResult[] {\n return commands.map((command) => {\n const parts = String(command).trim().split(/\\s+/).filter(Boolean);\n if (!parts.length) {\n return {\n command,\n ok: false,\n exit_code: null,\n signal: null,\n stdout: \"\",\n stderr: \"\",\n error: \"empty_command\",\n };\n }\n const result = spawnSync(parts[0], parts.slice(1), {\n cwd: repoRoot,\n encoding: \"utf8\",\n stdio: \"pipe\",\n });\n return {\n command,\n ok: (result.status ?? 1) === 0 && !result.error,\n exit_code: result.status ?? null,\n signal: result.signal ?? null,\n stdout: String(result.stdout || \"\"),\n stderr: String(result.stderr || \"\"),\n error: result.error ? String(result.error.message || result.error) : null,\n };\n });\n}\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport readline from \"node:readline/promises\";\nimport { stdin as input, stdout as output } from \"node:process\";\nimport { parseXappManifest } from \"@xapps-platform/server-sdk\";\n\ntype CliArgsLike = Record<string, string | boolean>;\ntype DevRefLike = { key: string; path: string; exists: boolean };\ntype PlanRendererFamily = \"publisher-rendered\" | \"jsonforms\" | \"platform\";\ntype MockAssetKind = \"image\" | \"json\" | \"text\" | \"other\";\ntype MockAssetRef = { path: string; name: string; kind: MockAssetKind; bytes?: number };\n\ntype AiPlanPayload = {\n schema_version: \"xapps.ai.plan.v1\";\n ok: boolean;\n mode: \"internal\";\n read_only: true;\n source: {\n manifest_path: string;\n manifest_sha256?: string;\n };\n context: {\n summary: Record<string, unknown>;\n refs: DevRefLike[];\n };\n actions: Array<Record<string, unknown>>;\n warnings: string[];\n errors: Array<Record<string, unknown>>;\n};\n\ntype AiCheckPolicy = {\n schema_version?: string;\n require_read_only?: boolean;\n max_actions?: number;\n allow_action_kinds?: string[];\n};\n\ntype CliErrorFactory = (code: string, message: string, details?: Record<string, unknown>) => Error;\n\ntype AiCommandDeps = {\n argString: (args: CliArgsLike, ...keys: string[]) => string | undefined;\n argFlag: (args: CliArgsLike, key: string) => boolean;\n findRepoRoot: (startDir?: string) => string | null;\n parseManifestFromFile: (from: string) => {\n manifest: ReturnType<typeof parseXappManifest>;\n filePath: string;\n };\n buildContextExportPayload: (\n manifest: ReturnType<typeof parseXappManifest>,\n filePath: string,\n ) => Record<string, unknown>;\n buildDevRefs: (repoRoot: string) => DevRefLike[];\n buildInternalV1ContextPreset: (repoRoot: string) => Record<string, unknown>;\n readJsonFile: (filePath: string) => unknown;\n makeCliError: CliErrorFactory;\n};\ntype ParsedManifest = ReturnType<typeof parseXappManifest>;\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction parseAiMode(args: CliArgsLike, deps: AiCommandDeps): \"internal\" {\n const mode = String(deps.argString(args, \"mode\") || \"internal\")\n .trim()\n .toLowerCase();\n if (mode !== \"internal\") {\n throw deps.makeCliError(\n \"CLI_AI_MODE_UNSUPPORTED\",\n `Unsupported --mode: ${mode} (only internal is implemented in this phase)`,\n { label: \"--mode\", value: mode, supported: [\"internal\"] },\n );\n }\n return \"internal\";\n}\n\nfunction parsePositiveIntOptionOrThrow(\n value: string | undefined,\n fallback: number,\n label: string,\n deps: AiCommandDeps,\n): number {\n if (!value) return fallback;\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || !Number.isInteger(parsed) || parsed <= 0) {\n throw deps.makeCliError(\n \"CLI_INVALID_OPTION\",\n `Invalid ${label}: ${value} (expected positive integer)`,\n { label, value },\n );\n }\n return parsed;\n}\n\nfunction detectPlanRendererFamilies(manifest: ParsedManifest): PlanRendererFamily[] {\n const found = new Set<PlanRendererFamily>();\n for (const widget of manifest.widgets || []) {\n const renderer = String((widget as any).renderer || \"\")\n .trim()\n .toLowerCase();\n if (renderer === \"publisher\") {\n found.add(\"publisher-rendered\");\n continue;\n }\n if (renderer === \"json-forms\") {\n found.add(\"jsonforms\");\n continue;\n }\n if (renderer === \"platform\") found.add(\"platform\");\n }\n return Array.from(found.values()).sort();\n}\n\nfunction normalizeLowerSet(values: string[]): Set<string> {\n return new Set(values.map((v) => v.trim().toLowerCase()).filter(Boolean));\n}\n\nfunction inferMockAssetKind(fileName: string): MockAssetKind {\n const lower = fileName.toLowerCase();\n if (/\\.(png|jpe?g|gif|webp|bmp|svg)$/.test(lower)) return \"image\";\n if (/\\.json$/.test(lower)) return \"json\";\n if (/\\.(txt|md|yaml|yml)$/.test(lower)) return \"text\";\n return \"other\";\n}\n\nfunction listMockAssets(\n manifestFilePath: string,\n args: CliArgsLike,\n deps: AiCommandDeps,\n): MockAssetRef[] {\n const rawMockDirs = [\n deps.argString(args, \"mocks\"),\n deps.argString(args, \"mocks-dir\"),\n path.join(path.dirname(manifestFilePath), \"mocks\"),\n ].filter((value): value is string => typeof value === \"string\" && value.trim().length > 0);\n const seenDirs = normalizeLowerSet([]);\n const out: MockAssetRef[] = [];\n for (const rawDir of rawMockDirs) {\n const dirPath = path.resolve(process.cwd(), rawDir);\n const dedupeKey = dirPath.toLowerCase();\n if (seenDirs.has(dedupeKey)) continue;\n seenDirs.add(dedupeKey);\n if (!fs.existsSync(dirPath)) continue;\n let entries: fs.Dirent[] = [];\n try {\n entries = fs.readdirSync(dirPath, { withFileTypes: true });\n } catch {\n continue;\n }\n for (const entry of entries) {\n if (!entry.isFile()) continue;\n const absPath = path.join(dirPath, entry.name);\n let size: number | undefined;\n try {\n size = fs.statSync(absPath).size;\n } catch {\n size = undefined;\n }\n out.push({\n path: path.relative(process.cwd(), absPath),\n name: entry.name,\n kind: inferMockAssetKind(entry.name),\n ...(typeof size === \"number\" ? { bytes: size } : {}),\n });\n }\n }\n return out.sort((a, b) => a.path.localeCompare(b.path));\n}\n\nfunction readAiGuidance(args: CliArgsLike, deps: AiCommandDeps): string | undefined {\n const inline = deps.argString(args, \"guidance\");\n const file = deps.argString(args, \"guidance-file\");\n if (inline && file) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Use either --guidance <text> or --guidance-file <path>, not both\",\n );\n }\n const raw = file\n ? fs.readFileSync(path.resolve(process.cwd(), file), \"utf8\")\n : typeof inline === \"string\"\n ? inline\n : \"\";\n const guidance = String(raw || \"\").trim();\n return guidance || undefined;\n}\n\nfunction getToolByName(manifest: ParsedManifest, toolName: string): Record<string, any> | null {\n for (const tool of manifest.tools || []) {\n if (String((tool as any).tool_name || \"\") === toolName) return tool as any;\n }\n return null;\n}\n\nfunction collectUiElements(uiSchema: any): any[] {\n if (!uiSchema || typeof uiSchema !== \"object\") return [];\n const stack: any[] = [uiSchema];\n const out: any[] = [];\n while (stack.length) {\n const node = stack.pop();\n if (!node || typeof node !== \"object\") continue;\n out.push(node);\n const elements = Array.isArray((node as any).elements) ? (node as any).elements : [];\n for (const child of elements) stack.push(child);\n }\n return out;\n}\n\nfunction hasStepperUiSchema(uiSchema: any): boolean {\n if (!uiSchema || typeof uiSchema !== \"object\") return false;\n if (String((uiSchema as any).type || \"\") !== \"Categorization\") return false;\n const options = (uiSchema as any).options;\n return (\n options &&\n typeof options === \"object\" &&\n String((options as any).variant || \"\").toLowerCase() === \"stepper\"\n );\n}\n\nfunction hasPreviewSections(uiSchema: any): boolean {\n return collectUiElements(uiSchema).some(\n (node) =>\n String((node as any).type || \"\") === \"XAppsDisplayPanel\" ||\n String((node as any).component || \"\")\n .toLowerCase()\n .includes(\"preview\"),\n );\n}\n\nfunction buildControlScope(propertyName: string) {\n return `#/properties/${propertyName}`;\n}\n\nfunction buildStepperUiSchemaSuggestion(\n inputSchema: any,\n options?: { includePreviewPanel?: boolean },\n) {\n const props =\n inputSchema &&\n typeof inputSchema === \"object\" &&\n inputSchema.properties &&\n typeof inputSchema.properties === \"object\"\n ? (inputSchema.properties as Record<string, any>)\n : {};\n const propertyNames = Object.keys(props);\n const nonAttachments: string[] = [];\n const attachments: string[] = [];\n for (const key of propertyNames) {\n const prop = props[key] || {};\n const isBinaryArray =\n String(prop.type || \"\") === \"array\" &&\n prop.items &&\n typeof prop.items === \"object\" &&\n String((prop.items as any).format || \"\").toLowerCase() === \"binary\";\n const isBinary = String(prop.format || \"\").toLowerCase() === \"binary\";\n if (isBinary || isBinaryArray) attachments.push(key);\n else nonAttachments.push(key);\n }\n\n const splitIndex =\n nonAttachments.length > 3 ? Math.ceil(nonAttachments.length / 2) : nonAttachments.length;\n const primary = nonAttachments.slice(0, splitIndex);\n const secondary = nonAttachments.slice(splitIndex);\n const categories: any[] = [];\n if (primary.length) {\n const elements = primary.map((key) => ({ type: \"Control\", scope: buildControlScope(key) }));\n if (options?.includePreviewPanel) {\n const previewScope = buildControlScope(attachments[0] || primary[0]);\n elements.push({\n type: \"XAppsDisplayPanel\",\n component: \"json-preview\",\n label: attachments[0] ? \"Attachments Preview\" : \"Form Preview\",\n scope: previewScope,\n });\n }\n categories.push({\n type: \"Category\",\n label: \"Basic Info\",\n elements,\n });\n }\n if (secondary.length) {\n categories.push({\n type: \"Category\",\n label: \"Details\",\n elements: secondary.map((key) => ({ type: \"Control\", scope: buildControlScope(key) })),\n });\n }\n if (attachments.length) {\n categories.push({\n type: \"Category\",\n label: \"Attachments\",\n elements: attachments.map((key) => ({ type: \"Control\", scope: buildControlScope(key) })),\n });\n }\n if (!categories.length) {\n categories.push({\n type: \"Category\",\n label: \"Form\",\n elements: options?.includePreviewPanel\n ? [\n {\n type: \"XAppsDisplayPanel\",\n component: \"json-preview\",\n label: \"Form Preview\",\n scope: \"#\",\n },\n ]\n : [],\n });\n }\n return {\n type: \"Categorization\",\n options: { variant: \"stepper\" },\n elements: categories,\n };\n}\n\nfunction buildPreviewSectionSuggestion(inputSchema: any) {\n const props =\n inputSchema &&\n typeof inputSchema === \"object\" &&\n inputSchema.properties &&\n typeof inputSchema.properties === \"object\"\n ? (inputSchema.properties as Record<string, any>)\n : {};\n const names = Object.keys(props);\n const attachmentKey = names.find((key) => {\n const prop = props[key] || {};\n return (\n (String(prop.type || \"\") === \"array\" &&\n prop.items &&\n typeof prop.items === \"object\" &&\n String((prop.items as any).format || \"\").toLowerCase() === \"binary\") ||\n String(prop.format || \"\").toLowerCase() === \"binary\"\n );\n });\n const fallbackKey = attachmentKey || names[0];\n return [\n {\n type: \"XAppsDisplayPanel\",\n component: \"json-preview\",\n label: attachmentKey ? \"Attachments Preview\" : \"Form Preview\",\n ...(fallbackKey ? { scope: buildControlScope(fallbackKey) } : { scope: \"#\" }),\n },\n ];\n}\n\nfunction buildManifestPatchHints(\n manifest: ParsedManifest,\n mockAssets: MockAssetRef[],\n guidance: string | undefined,\n): Array<Record<string, unknown>> {\n const hints: Array<Record<string, unknown>> = [];\n const guidanceLower = String(guidance || \"\").toLowerCase();\n const wantsStepper = /step(?:s|per)?|wizard/.test(guidanceLower);\n const wantsPreview = /preview|widget[- ]?preview|display panel/.test(guidanceLower);\n const hasImageMocks = mockAssets.some((asset) => asset.kind === \"image\");\n\n for (const widget of manifest.widgets || []) {\n const w: any = widget as any;\n if (String(w.renderer || \"\").toLowerCase() !== \"json-forms\") continue;\n const toolName = String(w.bind_tool_name || \"\").trim();\n if (!toolName) continue;\n const tool = getToolByName(manifest, toolName);\n if (!tool) continue;\n const uiSchema = (tool as any).input_ui_schema;\n const inputSchema = (tool as any).input_schema;\n const hasStepper = hasStepperUiSchema(uiSchema);\n const hasPreview = hasPreviewSections(uiSchema);\n const shouldSuggestStepper = !hasStepper && (wantsStepper || hasImageMocks);\n const shouldSuggestPreview = !hasPreview && (wantsPreview || hasImageMocks);\n if (!shouldSuggestStepper && !shouldSuggestPreview) continue;\n\n const proposedInputUiSchema = shouldSuggestStepper\n ? buildStepperUiSchemaSuggestion(inputSchema, { includePreviewPanel: shouldSuggestPreview })\n : undefined;\n const appendPreviewSections =\n !shouldSuggestStepper && shouldSuggestPreview\n ? buildPreviewSectionSuggestion(inputSchema)\n : undefined;\n\n hints.push({\n widget_name: String(w.widget_name || \"\"),\n bind_tool_name: toolName,\n reasons: [\n ...(hasImageMocks ? [\"mock_assets_detected\"] : []),\n ...(shouldSuggestStepper ? [\"missing_stepper_wizard_ui\"] : []),\n ...(shouldSuggestPreview ? [\"missing_preview_sections\"] : []),\n ],\n patch: {\n tool_name: toolName,\n field: \"input_ui_schema\",\n mode: shouldSuggestStepper ? \"replace\" : \"append_preview_sections\",\n ...(proposedInputUiSchema ? { value: proposedInputUiSchema } : {}),\n ...(appendPreviewSections ? { preview_sections: appendPreviewSections } : {}),\n },\n review_notes: [\n \"Review inferred step grouping and labels before applying.\",\n \"Preview panel suggestion is generic; customize component/scope for your UX.\",\n ],\n });\n }\n return hints;\n}\n\nfunction mimeTypeForMockAsset(fileName: string): string {\n const lower = fileName.toLowerCase();\n if (lower.endsWith(\".png\")) return \"image/png\";\n if (lower.endsWith(\".jpg\") || lower.endsWith(\".jpeg\")) return \"image/jpeg\";\n if (lower.endsWith(\".webp\")) return \"image/webp\";\n if (lower.endsWith(\".gif\")) return \"image/gif\";\n if (lower.endsWith(\".svg\")) return \"image/svg+xml\";\n return \"application/octet-stream\";\n}\n\nfunction toDataUrlFromFile(filePath: string): string {\n const abs = path.resolve(process.cwd(), filePath);\n const data = fs.readFileSync(abs);\n const mime = mimeTypeForMockAsset(filePath);\n return `data:${mime};base64,${data.toString(\"base64\")}`;\n}\n\nfunction extractJsonObjectFromText(text: string): Record<string, unknown> | null {\n const trimmed = String(text || \"\").trim();\n if (!trimmed) return null;\n try {\n const parsed = JSON.parse(trimmed);\n return isPlainObject(parsed) ? parsed : null;\n } catch {\n // try fenced code blocks\n }\n const fenceMatch = trimmed.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\n if (fenceMatch?.[1]) {\n try {\n const parsed = JSON.parse(fenceMatch[1].trim());\n return isPlainObject(parsed) ? parsed : null;\n } catch {\n return null;\n }\n }\n return null;\n}\n\nasync function buildLlmManifestPatchHints(\n manifest: ParsedManifest,\n mockAssets: MockAssetRef[],\n guidance: string | undefined,\n args: CliArgsLike,\n deps: AiCommandDeps,\n): Promise<{\n hints: Array<Record<string, unknown>>;\n provider: string;\n model: string;\n}> {\n const apiKey =\n deps.argString(args, \"llm-api-key\") ||\n process.env.OPENAI_API_KEY ||\n process.env.XAPPS_AI_API_KEY ||\n \"\";\n if (!apiKey) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing LLM API key. Provide --llm-api-key or set OPENAI_API_KEY/XAPPS_AI_API_KEY\",\n );\n }\n const baseUrl = String(\n deps.argString(args, \"llm-base-url\") ||\n process.env.OPENAI_BASE_URL ||\n \"https://api.openai.com/v1\",\n ).replace(/\\/+$/, \"\");\n const model = String(\n deps.argString(args, \"llm-model\") || process.env.XAPPS_AI_MODEL || \"gpt-5.2\",\n ).trim();\n const timeoutMs = parsePositiveIntOptionOrThrow(\n deps.argString(args, \"llm-timeout-ms\") || process.env.XAPPS_AI_TIMEOUT_MS,\n 30000,\n \"--llm-timeout-ms\",\n deps,\n );\n const imageAssets = mockAssets.filter((m) => m.kind === \"image\").slice(0, 4);\n const userContent: any[] = [\n {\n type: \"text\",\n text: [\n \"Analyze this xapp manifest and mock assets and propose JSON Forms manifest patch hints.\",\n \"Focus on json-forms widgets and infer complete form fields from mockups/guidance.\",\n \"When image mockups are provided, BOTH are needed: propose input_schema AND input_ui_schema (wizard + previews).\",\n 'Return STRICT JSON object only with shape: {\"hints\": [ ... ]}.',\n \"Each hint item must include: widget_name, bind_tool_name, reasons (array), patch (object), review_notes (array).\",\n \"Patch object must include tool_name, field, mode and target only input_schema or input_ui_schema.\",\n \"Supported patch modes: replace (for input_schema or input_ui_schema), append_preview_sections (input_ui_schema only).\",\n \"For image mockups, you MUST attempt complete input_schema inference first (best effort), then align input_ui_schema controls/previews to those fields.\",\n \"If confidence is low, still provide a best-effort input_schema and explain uncertainty in review_notes.\",\n \"For image mocks, prefer image-aware preview suggestions (e.g. attachment-scoped preview panels, data-view cards/list/table of image metadata, or publisher_preview-backed preview sections if endpoints already exist) instead of a generic form-level json-preview when possible.\",\n \"If you suggest preview sections, include component and any options needed (label, scope, options.view/options.dataSource, etc.).\",\n \"Use only supported preview/display components and views: components=[json-preview, location-map-preview, data-view]; data-view types=[key-value, list, table, badges, cards, json].\",\n \"Do not modify security/guards/connectivity.\",\n guidance ? `User guidance: ${guidance}` : \"User guidance: none\",\n `Manifest JSON:\\n${JSON.stringify(manifest, null, 2)}`,\n `Mock assets summary:\\n${JSON.stringify(mockAssets, null, 2)}`,\n ].join(\"\\n\\n\"),\n },\n ];\n for (const asset of imageAssets) {\n try {\n userContent.push({\n type: \"image_url\",\n image_url: { url: toDataUrlFromFile(asset.path) },\n });\n } catch {\n // skip unreadable asset\n }\n }\n\n const payload = {\n model,\n response_format: { type: \"json_object\" },\n messages: [\n {\n role: \"system\",\n content:\n \"You are an xapps manifest assistant. Propose minimal, safe JSON Forms manifest patch hints (input_schema and input_ui_schema only).\",\n },\n {\n role: \"user\",\n content: userContent,\n },\n ],\n temperature: 0.2,\n };\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n let response: Response;\n try {\n response = await fetch(`${baseUrl}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify(payload),\n signal: controller.signal,\n });\n } catch (err: any) {\n if (err?.name === \"AbortError\") {\n throw deps.makeCliError(\"CLI_RUNTIME_ERROR\", `LLM request timed out after ${timeoutMs}ms`, {\n provider: \"openai-compatible\",\n model,\n timeout_ms: timeoutMs,\n });\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n const rawText = await response.text();\n if (!response.ok) {\n throw deps.makeCliError(\"CLI_RUNTIME_ERROR\", `LLM request failed: status=${response.status}`, {\n status: response.status,\n body: rawText.slice(0, 2000),\n provider: \"openai-compatible\",\n model,\n });\n }\n let parsedResp: any = null;\n try {\n parsedResp = JSON.parse(rawText);\n } catch {\n throw deps.makeCliError(\"CLI_RUNTIME_ERROR\", \"LLM returned non-JSON response envelope\", {\n provider: \"openai-compatible\",\n model,\n });\n }\n const content = String(parsedResp?.choices?.[0]?.message?.content || \"\");\n const llmJson = extractJsonObjectFromText(content);\n if (!llmJson || !Array.isArray((llmJson as any).hints)) {\n throw deps.makeCliError(\"CLI_RUNTIME_ERROR\", \"LLM response missing hints[] JSON payload\", {\n provider: \"openai-compatible\",\n model,\n });\n }\n const hints = ((llmJson as any).hints as unknown[]).filter((item) =>\n isPlainObject(item),\n ) as Array<Record<string, unknown>>;\n return { hints, provider: \"openai-compatible\", model };\n}\n\nfunction evaluateLlmHintCompleteness(\n hints: Array<Record<string, unknown>>,\n options: { requireInputSchema: boolean; requireInputUiSchema: boolean },\n): { ok: boolean; missing: string[] } {\n const fields = new Set<string>();\n for (const hint of hints) {\n const patch = isPlainObject(hint.patch) ? (hint.patch as Record<string, unknown>) : null;\n const field = String(patch?.field || \"\").trim();\n if (field) fields.add(field);\n }\n const missing: string[] = [];\n if (options.requireInputSchema && !fields.has(\"input_schema\")) missing.push(\"input_schema\");\n if (options.requireInputUiSchema && !fields.has(\"input_ui_schema\"))\n missing.push(\"input_ui_schema\");\n return { ok: missing.length === 0, missing };\n}\n\nasync function readAiGuidanceInteractiveIfRequested(\n args: CliArgsLike,\n deps: AiCommandDeps,\n): Promise<string | undefined> {\n const guidance = readAiGuidance(args, deps);\n if (guidance) return guidance;\n if (!deps.argFlag(args, \"ask-guidance\")) return undefined;\n if (!input.isTTY || !output.isTTY) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"--ask-guidance requires an interactive terminal (TTY) or use --guidance/--guidance-file\",\n );\n }\n const rl = readline.createInterface({ input, output });\n try {\n const answer = await rl.question(\n \"AI guidance (optional). Example: infer complete form fields from mockups, build a step wizard, add supported preview sections, and exclude payment screens because payment is handled by guards.\\n> \",\n );\n const trimmed = String(answer || \"\").trim();\n return trimmed || undefined;\n } finally {\n rl.close();\n }\n}\n\nfunction applySingleManifestPatchHint(\n manifest: Record<string, any>,\n hint: Record<string, unknown>,\n): { changed: boolean; summary: string } {\n const patch = isPlainObject(hint.patch) ? (hint.patch as Record<string, unknown>) : null;\n if (!patch) return { changed: false, summary: \"skip: missing patch object\" };\n const toolName = String(patch.tool_name || \"\").trim();\n const field = String(patch.field || \"\").trim();\n const mode = String(patch.mode || \"\").trim();\n if (!toolName || (field !== \"input_ui_schema\" && field !== \"input_schema\") || !mode) {\n return {\n changed: false,\n summary: `skip: unsupported patch target (${toolName || \"?\"}:${field}:${mode})`,\n };\n }\n const tools = Array.isArray((manifest as any).tools) ? ((manifest as any).tools as any[]) : [];\n const tool = tools.find((t) => String(t?.tool_name || \"\") === toolName);\n if (!tool || typeof tool !== \"object\") {\n return { changed: false, summary: `skip: tool not found (${toolName})` };\n }\n\n if (mode === \"replace\") {\n if (!isPlainObject(patch.value)) {\n return { changed: false, summary: `skip: replace patch missing object value (${toolName})` };\n }\n const before = JSON.stringify((tool as any)[field] ?? null);\n (tool as any)[field] = patch.value;\n const after = JSON.stringify((tool as any)[field] ?? null);\n return { changed: before !== after, summary: `replace ${toolName}.${field}` };\n }\n\n if (mode === \"append_preview_sections\") {\n if (field !== \"input_ui_schema\") {\n return {\n changed: false,\n summary: `skip: append_preview_sections only supports input_ui_schema (${toolName})`,\n };\n }\n const previewSections = Array.isArray(patch.preview_sections)\n ? (patch.preview_sections.filter((s) => isPlainObject(s)) as Record<string, unknown>[])\n : [];\n if (!previewSections.length) {\n return { changed: false, summary: `skip: no preview_sections (${toolName})` };\n }\n const ui = isPlainObject((tool as any)[field])\n ? ((tool as any)[field] as Record<string, any>)\n : null;\n if (!ui) {\n (tool as any)[field] = { type: \"VerticalLayout\", elements: [...previewSections] };\n return { changed: true, summary: `create ${toolName}.${field} with preview sections` };\n }\n const uiType = String((ui as any).type || \"\");\n if (uiType === \"Categorization\" && Array.isArray((ui as any).elements)) {\n const categories = (ui as any).elements as any[];\n const attachmentCategory = categories.find((cat) => {\n if (!cat || typeof cat !== \"object\") return false;\n const label = String((cat as any).label || \"\").toLowerCase();\n if (label.includes(\"attachment\")) return true;\n const els = Array.isArray((cat as any).elements) ? (cat as any).elements : [];\n return els.some(\n (el: any) =>\n String(el?.type || \"\") === \"Control\" &&\n String(el?.scope || \"\")\n .toLowerCase()\n .includes(\"/attachments\"),\n );\n });\n if (attachmentCategory) {\n if (!Array.isArray((attachmentCategory as any).elements))\n (attachmentCategory as any).elements = [];\n const targetEls = (attachmentCategory as any).elements as any[];\n const before = JSON.stringify(targetEls);\n for (const section of previewSections) targetEls.push(section);\n return {\n changed: before !== JSON.stringify(targetEls),\n summary: `append preview sections to attachment category in ${toolName}.${field}`,\n };\n }\n categories.push({\n type: \"Category\",\n label: \"Preview\",\n elements: [...previewSections],\n });\n return { changed: true, summary: `append Preview category to ${toolName}.${field}` };\n }\n if (!Array.isArray((ui as any).elements)) (ui as any).elements = [];\n const targetEls = (ui as any).elements as any[];\n const before = JSON.stringify(targetEls);\n for (const section of previewSections) targetEls.push(section);\n return {\n changed: before !== JSON.stringify(targetEls),\n summary: `append preview sections to ${toolName}.${field}`,\n };\n }\n\n return { changed: false, summary: `skip: unsupported patch mode (${mode})` };\n}\n\nfunction renderSimpleJsonDiff(beforeText: string, afterText: string): string {\n if (beforeText === afterText) return \"(no changes)\";\n const before = beforeText.split(\"\\n\");\n const after = afterText.split(\"\\n\");\n let prefix = 0;\n while (prefix < before.length && prefix < after.length && before[prefix] === after[prefix])\n prefix += 1;\n let suffix = 0;\n while (\n suffix < before.length - prefix &&\n suffix < after.length - prefix &&\n before[before.length - 1 - suffix] === after[after.length - 1 - suffix]\n ) {\n suffix += 1;\n }\n const beforeMid = before.slice(prefix, before.length - suffix);\n const afterMid = after.slice(prefix, after.length - suffix);\n const outLines: string[] = [];\n const startLine = prefix + 1;\n outLines.push(`@@ manifest.json:${startLine} @@`);\n for (const line of beforeMid) outLines.push(`- ${line}`);\n for (const line of afterMid) outLines.push(`+ ${line}`);\n return outLines.join(\"\\n\");\n}\n\nfunction applyManifestPatchHintsToFile(\n filePath: string,\n manifest: ParsedManifest,\n hints: Array<Record<string, unknown>>,\n): {\n applied: boolean;\n changed: boolean;\n file: string;\n applied_count: number;\n summaries: string[];\n diff: string;\n} {\n const beforeObj = JSON.parse(JSON.stringify(manifest)) as Record<string, any>;\n const beforeText = `${JSON.stringify(beforeObj, null, 2)}\\n`;\n const workObj = JSON.parse(beforeText) as Record<string, any>;\n const summaries: string[] = [];\n let appliedCount = 0;\n let changed = false;\n for (const hint of hints) {\n const result = applySingleManifestPatchHint(workObj, hint);\n summaries.push(result.summary);\n if (result.summary.startsWith(\"skip:\")) continue;\n appliedCount += 1;\n changed = changed || result.changed;\n }\n const afterText = `${JSON.stringify(workObj, null, 2)}\\n`;\n if (changed) {\n // validate before write\n parseXappManifest(workObj);\n fs.writeFileSync(filePath, afterText, \"utf8\");\n }\n return {\n applied: true,\n changed,\n file: filePath,\n applied_count: appliedCount,\n summaries,\n diff: renderSimpleJsonDiff(beforeText, afterText),\n };\n}\n\nfunction parseAiCheckPolicy(\n rawPolicy: unknown,\n policyFile: string,\n deps: AiCommandDeps,\n): AiCheckPolicy {\n if (!isPlainObject(rawPolicy)) {\n throw deps.makeCliError(\"CLI_AI_POLICY_INVALID\", \"Invalid AI policy JSON: expected object\", {\n file: policyFile,\n });\n }\n const policy = rawPolicy as Record<string, unknown>;\n const schemaVersion =\n typeof policy.schema_version === \"string\" ? String(policy.schema_version).trim() : \"\";\n if (schemaVersion && schemaVersion !== \"xapps.ai.policy.v1\") {\n throw deps.makeCliError(\n \"CLI_AI_POLICY_INVALID\",\n `Invalid AI policy schema_version: ${schemaVersion} (expected xapps.ai.policy.v1)`,\n { file: policyFile, schema_version: schemaVersion },\n );\n }\n if (\n Object.prototype.hasOwnProperty.call(policy, \"require_read_only\") &&\n typeof policy.require_read_only !== \"boolean\"\n ) {\n throw deps.makeCliError(\n \"CLI_AI_POLICY_INVALID\",\n \"AI policy require_read_only must be boolean\",\n {\n file: policyFile,\n },\n );\n }\n if (Object.prototype.hasOwnProperty.call(policy, \"max_actions\")) {\n const value = policy.max_actions;\n if (!Number.isInteger(value) || Number(value) < 0) {\n throw deps.makeCliError(\n \"CLI_AI_POLICY_INVALID\",\n \"AI policy max_actions must be a non-negative integer\",\n { file: policyFile },\n );\n }\n }\n if (Object.prototype.hasOwnProperty.call(policy, \"allow_action_kinds\")) {\n const value = policy.allow_action_kinds;\n if (\n !Array.isArray(value) ||\n value.some((item) => typeof item !== \"string\" || !String(item).trim())\n ) {\n throw deps.makeCliError(\n \"CLI_AI_POLICY_INVALID\",\n \"AI policy allow_action_kinds must be an array of non-empty strings\",\n { file: policyFile },\n );\n }\n }\n return rawPolicy as AiCheckPolicy;\n}\n\nfunction buildAiCheckPolicyPreset(name: string, deps: AiCommandDeps): AiCheckPolicy {\n const normalized = String(name || \"\")\n .trim()\n .toLowerCase();\n if (normalized !== \"internal-readonly\") {\n throw deps.makeCliError(\n \"CLI_INVALID_OPTION\",\n `Unknown --policy-preset: ${name} (expected internal-readonly)`,\n { label: \"--policy-preset\", value: name, allowed: [\"internal-readonly\"] },\n );\n }\n return {\n schema_version: \"xapps.ai.policy.v1\",\n require_read_only: true,\n max_actions: 16,\n allow_action_kinds: [\n \"analyze.manifest\",\n \"suggest.flow_checks\",\n \"analyze.renderers\",\n \"suggest.renderer_checks\",\n \"suggest.manifest_patch\",\n \"suggest.context_refresh\",\n \"suggest.ai_policy_check\",\n \"suggest.flow_run\",\n ],\n };\n}\n\nexport async function runAiPlanCommand(args: CliArgsLike, deps: AiCommandDeps) {\n const subcommand = deps.argString(args, \"_subcommand\");\n if (subcommand !== \"plan\") {\n throw deps.makeCliError(\"CLI_INVALID_ARGS\", \"Missing required subcommand: ai plan|check\");\n }\n const mode = parseAiMode(args, deps);\n const from = deps.argString(args, \"from\");\n if (!from) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing required argument: --from <manifest.json>\",\n );\n }\n const repoRoot = deps.findRepoRoot();\n if (!repoRoot) {\n throw deps.makeCliError(\n \"CLI_REPO_NOT_FOUND\",\n \"xapps ai plan --mode internal is repo-only and requires the xapps monorepo checkout\",\n );\n }\n const { manifest, filePath } = deps.parseManifestFromFile(from);\n const mockAssets = listMockAssets(filePath, args, deps);\n const guidance = await readAiGuidanceInteractiveIfRequested(args, deps);\n const context = deps.buildContextExportPayload(manifest, filePath);\n const refs = deps.buildDevRefs(repoRoot);\n const rendererFamilies = detectPlanRendererFamilies(manifest);\n const preset = deps.argString(args, \"preset\");\n let presetPayload: Record<string, unknown> | undefined;\n if (preset) {\n const normalizedPreset = preset.trim().toLowerCase();\n if (normalizedPreset !== \"internal-v1\") {\n throw deps.makeCliError(\n \"CLI_INVALID_OPTION\",\n `Invalid --preset: ${preset} (expected internal-v1)`,\n {\n label: \"--preset\",\n value: preset,\n },\n );\n }\n presetPayload = deps.buildInternalV1ContextPreset(repoRoot);\n }\n const flow = deps.argString(args, \"flow\");\n const normalizedFlow = flow ? flow.trim().toLowerCase() : undefined;\n const supportedFlows = new Set([\"pay-per-request\", \"guard-orchestration\", \"xplace-certs\"]);\n if (normalizedFlow && !supportedFlows.has(normalizedFlow)) {\n throw deps.makeCliError(\"CLI_INVALID_OPTION\", `Unknown --flow: ${flow}`, {\n label: \"--flow\",\n value: flow,\n allowed: Array.from(supportedFlows),\n });\n }\n\n const actions: Array<Record<string, unknown>> = [\n {\n kind: \"analyze.manifest\",\n status: \"proposed\",\n description: \"Review manifest/tools/widgets against V1 baseline contracts\",\n },\n {\n kind: \"suggest.flow_checks\",\n status: \"proposed\",\n flows: [\"pay-per-request\", \"guard-orchestration\", \"xplace-certs\"],\n },\n {\n kind: \"analyze.renderers\",\n status: \"proposed\",\n renderers: rendererFamilies,\n description:\n \"Classify widget renderer families and map to V1 checks (publisher-rendered, jsonforms, platform)\",\n },\n ];\n if (rendererFamilies.includes(\"jsonforms\")) {\n actions.push({\n kind: \"suggest.renderer_checks\",\n status: \"proposed\",\n renderer: \"jsonforms\",\n command:\n \"npm test -- src/__tests__/jsonformsEmbed.test.ts src/__tests__/jsonformsStepDispatch.test.ts src/__tests__/jsonformsFiles.test.ts\",\n });\n }\n if (rendererFamilies.includes(\"publisher-rendered\")) {\n actions.push({\n kind: \"suggest.renderer_checks\",\n status: \"proposed\",\n renderer: \"publisher-rendered\",\n command:\n \"npm test -- src/__tests__/embedWidgets.test.ts src/__tests__/guardContractParity.test.ts src/__tests__/integrationHostGuardContracts.test.ts\",\n });\n }\n if (presetPayload) {\n actions.push({\n kind: \"suggest.context_refresh\",\n status: \"proposed\",\n command: `xapps context export --from ${filePath} --preset internal-v1`,\n });\n actions.push({\n kind: \"suggest.ai_policy_check\",\n status: \"proposed\",\n command: \"xapps ai check --mode internal --plan <plan.json> --policy <policy.json> --json\",\n });\n }\n if (normalizedFlow) {\n actions.push({\n kind: \"suggest.flow_run\",\n status: \"proposed\",\n flow: normalizedFlow,\n command: `xapps dev check flow --name ${normalizedFlow} --run --json`,\n });\n }\n const heuristicManifestPatchHints = buildManifestPatchHints(manifest, mockAssets, guidance);\n let manifestPatchHints = heuristicManifestPatchHints;\n let llmInfo:\n | {\n provider: string;\n model: string;\n enabled: true;\n used: boolean;\n }\n | undefined;\n if (deps.argFlag(args, \"llm\")) {\n llmInfo = { provider: \"openai-compatible\", model: \"unknown\", enabled: true, used: false };\n try {\n const llmHints = await buildLlmManifestPatchHints(manifest, mockAssets, guidance, args, deps);\n llmInfo = {\n provider: llmHints.provider,\n model: llmHints.model,\n enabled: true,\n used: true,\n };\n if (llmHints.hints.length > 0) {\n const hasImageMocks = mockAssets.some((m) => m.kind === \"image\");\n const completeness = evaluateLlmHintCompleteness(llmHints.hints, {\n requireInputSchema: hasImageMocks,\n requireInputUiSchema: hasImageMocks,\n });\n if (!completeness.ok && hasImageMocks) {\n (heuristicManifestPatchHints as any).__llm_error =\n `LLM hints incomplete for image mocks (missing: ${completeness.missing.join(\", \")})`;\n } else {\n manifestPatchHints = llmHints.hints;\n }\n }\n } catch (err: any) {\n // Preserve deterministic plan output with a warning + fallback heuristic hints.\n const msg = String(err?.message || err || \"LLM manifest hint generation failed\");\n llmInfo = {\n ...(llmInfo || { provider: \"openai-compatible\", model: \"unknown\", enabled: true }),\n used: false,\n };\n (manifestPatchHints as any).__llm_error = msg;\n }\n }\n if (manifestPatchHints.length > 0) {\n actions.push({\n kind: \"suggest.manifest_patch\",\n status: \"proposed\",\n target: \"manifest.json\",\n description:\n \"Mock-aware JSON Forms manifest upgrade hints (stepper wizard + preview sections) generated for review\",\n hints: manifestPatchHints,\n ...(llmInfo\n ? {\n source: llmInfo.used ? \"llm\" : \"heuristic_fallback\",\n llm: llmInfo,\n }\n : { source: \"heuristic\" }),\n ...(((manifestPatchHints as any).__llm_error as string | undefined)\n ? { llm_error: (manifestPatchHints as any).__llm_error }\n : {}),\n });\n }\n\n const payload: AiPlanPayload = {\n schema_version: \"xapps.ai.plan.v1\",\n ok: true,\n mode,\n read_only: true,\n source: {\n manifest_path: filePath,\n manifest_sha256:\n context &&\n isPlainObject(context.source) &&\n typeof context.source.manifest_sha256 === \"string\"\n ? context.source.manifest_sha256\n : undefined,\n },\n context: {\n summary: isPlainObject(context.summary) ? (context.summary as Record<string, unknown>) : {},\n refs,\n ...(guidance\n ? {\n ai_inputs: {\n guidance,\n },\n }\n : {}),\n ...(mockAssets.length > 0\n ? {\n mock_assets: {\n count: mockAssets.length,\n kinds: Array.from(new Set(mockAssets.map((item) => item.kind))).sort(),\n items: mockAssets,\n },\n }\n : {}),\n ...(llmInfo ? { llm: llmInfo } : {}),\n ...(presetPayload ? { preset: presetPayload } : {}),\n },\n actions,\n warnings: [\n ...(refs.every((ref) => ref.exists) ? [] : [\"Some internal engineering refs are missing\"]),\n ...(((manifestPatchHints as any).__llm_error as string | undefined)\n ? [\n `LLM manifest hint generation failed, heuristic fallback used: ${(manifestPatchHints as any).__llm_error}`,\n ]\n : []),\n ],\n errors: [],\n };\n if (normalizedFlow) (payload as any).flow = normalizedFlow;\n (payload as any).coverage = {\n renderers: rendererFamilies,\n flows_supported: Array.from(supportedFlows.values()),\n flow_selected: normalizedFlow || null,\n preset_selected: presetPayload ? \"internal-v1\" : null,\n };\n\n if (deps.argFlag(args, \"apply-manifest-hints\")) {\n const patchAction = actions.find((a) => a.kind === \"suggest.manifest_patch\");\n const hints = Array.isArray((patchAction as any)?.hints)\n ? (((patchAction as any).hints as unknown[]).filter((h) => isPlainObject(h)) as Array<\n Record<string, unknown>\n >)\n : [];\n if (!hints.length) {\n (payload as any).manifest_apply = {\n applied: true,\n changed: false,\n file: filePath,\n applied_count: 0,\n summaries: [\"skip: no manifest patch hints available\"],\n diff: \"(no changes)\",\n };\n } else {\n (payload as any).manifest_apply = applyManifestPatchHintsToFile(filePath, manifest, hints);\n }\n }\n\n const outPath = deps.argString(args, \"out\");\n const rendered = `${JSON.stringify(payload, null, 2)}\\n`;\n if (outPath) {\n const target = path.resolve(process.cwd(), outPath);\n fs.mkdirSync(path.dirname(target), { recursive: true });\n fs.writeFileSync(target, rendered);\n console.log(`AI plan exported: ${target}`);\n return;\n }\n if (deps.argFlag(args, \"json\")) {\n console.log(rendered.trimEnd());\n return;\n }\n if ((payload as any).manifest_apply) {\n const apply = (payload as any).manifest_apply as Record<string, unknown>;\n console.log(\n [\n \"Manifest hints apply:\",\n `File: ${String(apply.file || filePath)}`,\n `Changed: ${String(Boolean(apply.changed))}`,\n `Applied hints: ${String(apply.applied_count || 0)}`,\n ...(Array.isArray(apply.summaries)\n ? (apply.summaries as unknown[]).map((s) => `- ${String(s)}`)\n : []),\n \"Diff:\",\n String(apply.diff || \"(no diff)\"),\n \"\",\n ].join(\"\\n\"),\n );\n }\n console.log(\n [\n `AI plan (${mode}, read-only)`,\n `Manifest: ${payload.source.manifest_path}`,\n `Slug: ${String(payload.context.summary.slug || \"n/a\")}`,\n `Proposed actions: ${payload.actions.length}`,\n ].join(\"\\n\"),\n );\n}\n\nexport function runAiCheckCommand(args: CliArgsLike, deps: AiCommandDeps) {\n const subcommand = deps.argString(args, \"_subcommand\");\n if (subcommand !== \"check\") {\n throw deps.makeCliError(\"CLI_INVALID_ARGS\", \"Missing required subcommand: ai plan|check\");\n }\n const mode = parseAiMode(args, deps);\n const planFile = deps.argString(args, \"plan\");\n if (!planFile) {\n throw deps.makeCliError(\"CLI_INVALID_ARGS\", \"Missing required argument: --plan <plan.json>\");\n }\n const payload = deps.readJsonFile(planFile);\n const policyFile = deps.argString(args, \"policy\");\n const policyPreset = deps.argString(args, \"policy-preset\");\n if (policyFile && policyPreset) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Use either --policy <policy.json> or --policy-preset <name>, not both\",\n );\n }\n let policy: AiCheckPolicy | null = null;\n if (policyFile) {\n policy = parseAiCheckPolicy(deps.readJsonFile(policyFile), policyFile, deps);\n } else if (policyPreset) {\n policy = buildAiCheckPolicyPreset(policyPreset, deps);\n }\n\n const checks: Array<{ key: string; ok: boolean; details?: Record<string, unknown> }> = [];\n const plan = isPlainObject(payload) ? payload : {};\n checks.push({\n key: \"schema_version\",\n ok: plan.schema_version === \"xapps.ai.plan.v1\",\n details: { actual: plan.schema_version || null },\n });\n checks.push({\n key: \"mode\",\n ok: plan.mode === mode,\n details: { actual: plan.mode || null, expected: mode },\n });\n checks.push({\n key: \"read_only\",\n ok: plan.read_only === true,\n details: { actual: plan.read_only ?? null },\n });\n checks.push({\n key: \"actions_array\",\n ok: Array.isArray(plan.actions),\n details: { actualType: Array.isArray(plan.actions) ? \"array\" : typeof plan.actions },\n });\n\n if (policy) {\n const requireReadOnly = policy.require_read_only !== false;\n checks.push({\n key: \"policy_require_read_only\",\n ok: !requireReadOnly || plan.read_only === true,\n details: { required: requireReadOnly, actual: plan.read_only ?? null },\n });\n if (typeof policy.max_actions === \"number\" && Number.isFinite(policy.max_actions)) {\n const actionCount = Array.isArray(plan.actions) ? plan.actions.length : 0;\n checks.push({\n key: \"policy_max_actions\",\n ok: actionCount <= policy.max_actions,\n details: { max_actions: policy.max_actions, actual: actionCount },\n });\n }\n if (Array.isArray(policy.allow_action_kinds)) {\n const allowed = new Set(\n policy.allow_action_kinds\n .filter((item): item is string => typeof item === \"string\")\n .map((item) => item.trim())\n .filter(Boolean),\n );\n const disallowedKinds = Array.isArray(plan.actions)\n ? plan.actions\n .filter((item): item is Record<string, unknown> => isPlainObject(item))\n .map((item) => String(item.kind || \"\").trim())\n .filter((kind) => kind && !allowed.has(kind))\n : [];\n checks.push({\n key: \"policy_allow_action_kinds\",\n ok: disallowedKinds.length === 0,\n details: { disallowed_kinds: disallowedKinds },\n });\n }\n }\n\n const result = {\n schema_version: \"xapps.ai.check.v1\",\n ok: checks.every((check) => check.ok),\n mode,\n read_only: true,\n checks,\n errors: checks\n .filter((check) => !check.ok)\n .map((check) => ({ code: \"CLI_AI_PLAN_INVALID\", check: check.key })),\n ...(policy\n ? {\n policy: {\n applied: true,\n ...(policyFile ? { source: path.resolve(process.cwd(), policyFile) } : {}),\n ...(policyPreset ? { preset: String(policyPreset).trim().toLowerCase() } : {}),\n },\n }\n : {}),\n };\n const outPath = deps.argString(args, \"out\");\n const rendered = `${JSON.stringify(result, null, 2)}\\n`;\n if (outPath) {\n const target = path.resolve(process.cwd(), outPath);\n fs.mkdirSync(path.dirname(target), { recursive: true });\n fs.writeFileSync(target, rendered);\n console.log(`AI check exported: ${target}`);\n } else if (deps.argFlag(args, \"json\")) {\n console.log(rendered.trimEnd());\n } else {\n console.log(\n [\n `AI check (${mode}) ${result.ok ? \"PASS\" : \"FAIL\"}`,\n ...checks.map((check) => `${check.ok ? \"OK\" : \"FAIL\"} ${check.key}`),\n ].join(\"\\n\"),\n );\n }\n if (!result.ok) {\n throw deps.makeCliError(\"CLI_AI_PLAN_INVALID\", \"xapps ai check failed: invalid plan contract\", {\n checks,\n });\n }\n}\n", "import { createPublisherApiClient, PublisherApiClientError } from \"@xapps-platform/server-sdk\";\nimport fs from \"node:fs\";\n\ntype CliArgs = Record<string, string | boolean>;\n\ntype CliErrorFactory = (code: string, message: string, details?: Record<string, unknown>) => Error;\n\ntype PublisherCommandDeps = {\n argString: (args: CliArgs, ...keys: string[]) => string | undefined;\n argFlag: (args: CliArgs, key: string) => boolean;\n makeCliError: CliErrorFactory;\n};\n\nfunction normalizePublisherGatewayApiBaseUrl(input: string): string {\n const raw = String(input || \"\").trim();\n if (!raw) return \"\";\n const parsed = new URL(raw);\n const pathname = parsed.pathname || \"/\";\n if (pathname === \"/\" || pathname === \"\") {\n parsed.pathname = \"/v1\";\n }\n return parsed.toString().replace(/\\/+$/g, \"\");\n}\n\nfunction parseHttpUrlOrThrow(value: string, flagName: string): string {\n const trimmed = String(value || \"\").trim();\n if (!trimmed) throw new Error(`Invalid ${flagName}: empty`);\n try {\n const url = new URL(trimmed);\n if (!/^https?:$/.test(url.protocol)) {\n throw new Error(`unsupported protocol ${url.protocol}`);\n }\n return url.toString();\n } catch (err: any) {\n throw new Error(`Invalid ${flagName}: ${err?.message || String(err)}`);\n }\n}\n\nfunction resolveSecretInput(\n args: CliArgs,\n deps: PublisherCommandDeps,\n): {\n secret?: string;\n secretRef?: string;\n source: \"env\" | \"stdin\" | \"secret_ref\";\n sourceName?: string;\n} {\n const secretRef = deps.argString(args, \"secret-ref\");\n const secretEnvName = deps.argString(args, \"secret-env\");\n const secretStdin = deps.argFlag(args, \"secret-stdin\");\n const selected = [Boolean(secretRef), Boolean(secretEnvName), Boolean(secretStdin)].filter(\n Boolean,\n ).length;\n if (selected !== 1) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Provide exactly one of --secret-ref, --secret-env, or --secret-stdin\",\n );\n }\n if (secretRef) {\n return { secretRef, source: \"secret_ref\" };\n }\n if (secretEnvName) {\n const envValue = String(process.env[secretEnvName] || \"\");\n if (!envValue.trim()) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n `Environment variable is empty or missing for --secret-env ${secretEnvName}`,\n );\n }\n return { secret: envValue, source: \"env\", sourceName: secretEnvName };\n }\n // Read from fd 0 synchronously to keep CLI code simple/deterministic for scripts.\n const secret = fs.readFileSync(0, \"utf8\");\n if (!String(secret || \"\").trim()) {\n throw deps.makeCliError(\"CLI_INVALID_ARGS\", \"--secret-stdin provided but stdin is empty\");\n }\n return { secret, source: \"stdin\" };\n}\n\nfunction pickLatestVersion(items: Array<Record<string, unknown>>): Record<string, unknown> | null {\n if (!Array.isArray(items) || items.length === 0) return null;\n const published = items.filter((v) => String((v as any).status || \"\") === \"published\");\n const target = published.length > 0 ? published : items;\n return [...target].sort((a, b) =>\n String((b as any).published_at || (b as any).created_at || \"\").localeCompare(\n String((a as any).published_at || (a as any).created_at || \"\"),\n ),\n )[0] as Record<string, unknown>;\n}\n\nasync function resolveEndpointIdOrThrow(\n args: CliArgs,\n deps: PublisherCommandDeps,\n client: ReturnType<typeof createPublisherApiClient>,\n): Promise<{ endpointId: string; endpointEnv: string; xappSlug?: string }> {\n const endpointIdArg = deps.argString(args, \"endpoint-id\");\n const xappSlug = deps.argString(args, \"xapp-slug\");\n const targetClientSlug = deps.argString(args, \"target-client-slug\", \"target_client_slug\");\n const endpointEnv = deps.argString(args, \"env\") || \"prod\";\n if (endpointIdArg) {\n return { endpointId: endpointIdArg, endpointEnv, ...(xappSlug ? { xappSlug } : {}) };\n }\n if (!xappSlug) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Provide --endpoint-id or (--xapp-slug and optional --env)\",\n );\n }\n let targetClientId = \"\";\n if (targetClientSlug) {\n const clients = await client.listClients();\n const matches = (clients.items || []).filter(\n (item) => String((item as any).slug || \"\") === targetClientSlug,\n );\n if (matches.length === 0) {\n throw deps.makeCliError(\n \"CLI_NOT_FOUND\",\n `Publisher client not found for slug=${targetClientSlug}`,\n );\n }\n if (matches.length > 1) {\n throw deps.makeCliError(\n \"CLI_CONFLICT\",\n `Publisher client slug matched multiple rows: ${targetClientSlug}`,\n );\n }\n targetClientId = String((matches[0] as any).id || \"\").trim();\n if (!targetClientId) {\n throw deps.makeCliError(\n \"CLI_INVALID_RESPONSE\",\n `Resolved client id is missing for slug=${targetClientSlug}`,\n );\n }\n }\n const xapps = await client.listXapps();\n const candidates = (xapps.items || []).filter((item) => {\n if (String((item as any).slug || \"\") !== xappSlug) return false;\n if (!targetClientId) return true;\n return String((item as any).target_client_id || \"\") === targetClientId;\n });\n if (candidates.length === 0) {\n throw deps.makeCliError(\n \"CLI_NOT_FOUND\",\n targetClientId\n ? `Publisher xapp not found for slug=${xappSlug} target_client_slug=${targetClientSlug}`\n : `Publisher xapp not found for slug=${xappSlug}`,\n );\n }\n if (candidates.length > 1) {\n throw deps.makeCliError(\n \"CLI_CONFLICT\",\n targetClientId\n ? `Multiple publisher xapps matched slug=${xappSlug} target_client_slug=${targetClientSlug}`\n : `Multiple publisher xapps matched slug=${xappSlug}; pass --target-client-slug`,\n );\n }\n const xapp = candidates[0] as Record<string, unknown>;\n if (!String((xapp as any).id || \"\")) {\n throw deps.makeCliError(\"CLI_NOT_FOUND\", `Publisher xapp not found for slug=${xappSlug}`);\n }\n const versions = await client.listXappVersions(String((xapp as any).id));\n const version = pickLatestVersion(versions.items as Array<Record<string, unknown>>);\n if (!version || !String((version as any).id || \"\")) {\n throw deps.makeCliError(\n \"CLI_NOT_FOUND\",\n `No publisher xapp versions found for slug=${xappSlug}`,\n );\n }\n const endpoints = await client.listEndpoints(String((version as any).id));\n const endpoint = endpoints.items.find(\n (item) => String((item as any).env || \"\").trim() === endpointEnv,\n );\n if (!endpoint || !String((endpoint as any).id || \"\")) {\n throw deps.makeCliError(\n \"CLI_NOT_FOUND\",\n `Endpoint not found for xapp=${xappSlug} env=${endpointEnv}`,\n );\n }\n return { endpointId: String((endpoint as any).id), endpointEnv, xappSlug };\n}\n\nfunction normalizeAuthTypeForMatch(input: unknown): string {\n const raw = String(input || \"\")\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]/g, \"\");\n if (!raw) return \"\";\n if (raw === \"none\") return \"none\";\n if (raw.includes(\"api\") && raw.includes(\"key\")) return \"api_key_header\";\n if (raw === \"header\") return \"header\";\n if (raw === \"hmac\" || raw === \"hmacsha256\") return \"hmac\";\n return raw;\n}\n\nfunction readCredentialHeaderName(item: Record<string, unknown>): string {\n const direct = (item as any).auth_header_name;\n if (typeof direct === \"string\" && direct.trim()) return direct.trim();\n const configRaw = (item as any).config ?? (item as any).config_jsonb;\n const cfg =\n configRaw && typeof configRaw === \"string\"\n ? (() => {\n try {\n return JSON.parse(configRaw);\n } catch {\n return null;\n }\n })()\n : configRaw;\n if (cfg && typeof cfg === \"object\") {\n const header = (cfg as any).headerName ?? (cfg as any).header_name;\n if (typeof header === \"string\" && header.trim()) return header.trim();\n }\n return \"\";\n}\n\nfunction findMatchingEndpointCredential(\n items: Array<Record<string, unknown>>,\n input: { authType: string; headerName: string },\n): Record<string, unknown> | null {\n const wantAuth = normalizeAuthTypeForMatch(input.authType);\n const wantHeader = String(input.headerName || \"\")\n .trim()\n .toLowerCase();\n for (const item of items) {\n const authMatch = normalizeAuthTypeForMatch((item as any).auth_type) === wantAuth;\n if (!authMatch) continue;\n if (wantAuth === \"api_key_header\" || wantAuth === \"header\") {\n const existingHeader = readCredentialHeaderName(item).toLowerCase();\n if (wantHeader && existingHeader !== wantHeader) continue;\n }\n return item;\n }\n return null;\n}\n\nexport async function runPublisherEndpointCredentialSetCommand(\n args: CliArgs,\n deps: PublisherCommandDeps,\n) {\n const gatewayUrlRaw =\n deps.argString(args, \"gateway-url\", \"publisher-gateway-url\") ||\n process.env.XAPPS_CLI_PUBLISHER_GATEWAY_URL;\n if (!gatewayUrlRaw) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing required argument: --gateway-url <url> (or --publisher-gateway-url)\",\n );\n }\n const gatewayUrl = normalizePublisherGatewayApiBaseUrl(\n parseHttpUrlOrThrow(gatewayUrlRaw, \"--gateway-url\"),\n );\n const apiKey = deps.argString(args, \"api-key\", \"apiKey\") || process.env.XAPPS_CLI_API_KEY || \"\";\n const token = deps.argString(args, \"token\") || process.env.XAPPS_CLI_TOKEN || \"\";\n if (!apiKey && !token) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing auth: provide --api-key or --token (or XAPPS_CLI_API_KEY/XAPPS_CLI_TOKEN)\",\n );\n }\n\n let endpointId = \"\";\n\n const authType = deps.argString(args, \"auth-type\") || \"api-key\";\n const headerName = deps.argString(args, \"header-name\") || \"x-xplace-api-key\";\n const keyStatus = deps.argString(args, \"key-status\") || \"active\";\n const keyAlgorithm = deps.argString(args, \"key-algorithm\") || \"hmac-sha256\";\n const secretInput = resolveSecretInput(args, deps);\n\n const client = createPublisherApiClient({ baseUrl: gatewayUrl, apiKey, token });\n\n try {\n endpointId = (await resolveEndpointIdOrThrow(args, deps, client)).endpointId;\n\n const result = await client.createEndpointCredential(endpointId, {\n authType,\n config: {\n headerName,\n },\n initialKey: {\n ...(secretInput.secret ? { secret: secretInput.secret } : {}),\n ...(secretInput.secretRef ? { secretRef: secretInput.secretRef } : {}),\n status: keyStatus,\n algorithm: keyAlgorithm,\n },\n });\n\n const credential = (result as any).credential || {};\n const output = {\n ok: true,\n gateway_url: gatewayUrl,\n endpoint_id: endpointId,\n auth_type: String((credential as any).auth_type || authType),\n credential_id: String((credential as any).id || \"\"),\n active_kid: String((credential as any).active_kid || \"\"),\n secret_source: secretInput.source,\n ...(secretInput.sourceName ? { secret_env: secretInput.sourceName } : {}),\n header_name: headerName,\n };\n if (deps.argFlag(args, \"json\")) {\n console.log(JSON.stringify(output, null, 2));\n return;\n }\n console.log(\n `Publisher endpoint credential set: endpoint=${output.endpoint_id} credential=${output.credential_id || \"-\"} auth=${output.auth_type} header=${output.header_name} secret_source=${output.secret_source}`,\n );\n } catch (err: any) {\n if (err instanceof PublisherApiClientError) {\n throw deps.makeCliError(\n `CLI_${err.code}`,\n `Publisher endpoint credential set failed: ${err.message}`,\n { status: err.status, details: err.details, gateway_url: gatewayUrl },\n );\n }\n throw err;\n }\n}\n\nexport async function runPublisherEndpointCredentialEnsureCommand(\n args: CliArgs,\n deps: PublisherCommandDeps,\n) {\n const gatewayUrlRaw =\n deps.argString(args, \"gateway-url\", \"publisher-gateway-url\") ||\n process.env.XAPPS_CLI_PUBLISHER_GATEWAY_URL;\n if (!gatewayUrlRaw) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing required argument: --gateway-url <url> (or --publisher-gateway-url)\",\n );\n }\n const gatewayUrl = normalizePublisherGatewayApiBaseUrl(\n parseHttpUrlOrThrow(gatewayUrlRaw, \"--gateway-url\"),\n );\n const apiKey = deps.argString(args, \"api-key\", \"apiKey\") || process.env.XAPPS_CLI_API_KEY || \"\";\n const token = deps.argString(args, \"token\") || process.env.XAPPS_CLI_TOKEN || \"\";\n if (!apiKey && !token) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing auth: provide --api-key or --token (or XAPPS_CLI_API_KEY/XAPPS_CLI_TOKEN)\",\n );\n }\n\n const authType = deps.argString(args, \"auth-type\") || \"api-key\";\n const headerName = deps.argString(args, \"header-name\") || \"x-xplace-api-key\";\n const keyStatus = deps.argString(args, \"key-status\") || \"active\";\n const keyAlgorithm = deps.argString(args, \"key-algorithm\") || \"hmac-sha256\";\n\n const client = createPublisherApiClient({ baseUrl: gatewayUrl, apiKey, token });\n\n try {\n const resolved = await resolveEndpointIdOrThrow(args, deps, client);\n const endpointId = resolved.endpointId;\n const existing = await client.listEndpointCredentials(endpointId);\n const match = findMatchingEndpointCredential(existing.items as Array<Record<string, unknown>>, {\n authType,\n headerName,\n });\n if (match) {\n const output = {\n ok: true,\n ensured: true,\n created: false,\n gateway_url: gatewayUrl,\n endpoint_id: endpointId,\n credential_id: String((match as any).id || \"\"),\n auth_type: String((match as any).auth_type || authType),\n header_name: readCredentialHeaderName(match) || headerName,\n active_kid: String((match as any).active_kid || \"\"),\n };\n if (deps.argFlag(args, \"json\")) {\n console.log(JSON.stringify(output, null, 2));\n return;\n }\n console.log(\n `Publisher endpoint credential ensure: endpoint=${output.endpoint_id} credential=${output.credential_id || \"-\"} auth=${output.auth_type} header=${output.header_name} outcome=existing`,\n );\n return;\n }\n\n const secretInput = resolveSecretInput(args, deps);\n const result = await client.createEndpointCredential(endpointId, {\n authType,\n config: {\n headerName,\n },\n initialKey: {\n ...(secretInput.secret ? { secret: secretInput.secret } : {}),\n ...(secretInput.secretRef ? { secretRef: secretInput.secretRef } : {}),\n status: keyStatus,\n algorithm: keyAlgorithm,\n },\n });\n const credential = (result as any).credential || {};\n const output = {\n ok: true,\n ensured: true,\n created: true,\n gateway_url: gatewayUrl,\n endpoint_id: endpointId,\n auth_type: String((credential as any).auth_type || authType),\n credential_id: String((credential as any).id || \"\"),\n active_kid: String((credential as any).active_kid || \"\"),\n secret_source: secretInput.source,\n ...(secretInput.sourceName ? { secret_env: secretInput.sourceName } : {}),\n header_name: headerName,\n };\n if (deps.argFlag(args, \"json\")) {\n console.log(JSON.stringify(output, null, 2));\n return;\n }\n console.log(\n `Publisher endpoint credential ensure: endpoint=${output.endpoint_id} credential=${output.credential_id || \"-\"} auth=${output.auth_type} header=${output.header_name} outcome=created secret_source=${output.secret_source}`,\n );\n } catch (err: any) {\n if (err instanceof PublisherApiClientError) {\n throw deps.makeCliError(\n `CLI_${err.code}`,\n `Publisher endpoint credential ensure failed: ${err.message}`,\n { status: err.status, details: err.details, gateway_url: gatewayUrl },\n );\n }\n throw err;\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import fs from \"node:fs\";\nimport { createHash, createHmac } from \"node:crypto\";\nimport http, { type IncomingMessage } from \"node:http\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport readline from \"node:readline/promises\";\nimport {\n createPublisherApiClient,\n PublisherApiClientError,\n parseXappManifest,\n} from \"@xapps-platform/server-sdk\";\nimport { buildDevRefs } from \"./devStatus.js\";\nimport { runContextExportCommand } from \"./contextCommands.js\";\nimport {\n runImportCommand,\n runInitCommand,\n runTestCommand,\n runValidateCommand,\n} from \"./commands/manifestCommands.js\";\nimport {\n runAiCheckCliCommand,\n runAiPlanCliCommand,\n runDevCommand,\n runPublisherCliCommand,\n} from \"./commands/devCommands.js\";\n\ntype CliArgValue = string | boolean | string[];\ntype CliArgs = Record<string, CliArgValue>;\ntype CliConfigProfile = {\n token?: string;\n apiKey?: string;\n publishUrl?: string;\n releaseChannel?: string;\n registryTarget?: string;\n logsUrl?: string;\n tunnelToken?: string;\n signingKey?: string;\n versionConflict?: \"fail\" | \"allow\";\n};\ntype CliConfigFile = {\n defaultProfile?: string;\n profiles?: Record<string, CliConfigProfile>;\n};\n\nconst DEFAULT_PUBLISH_BUNDLES_DIR = path.join(\"artifacts\", \"xapps-publish\");\n\nexport class CliError extends Error {\n code: string;\n details?: Record<string, unknown>;\n exitCode?: number;\n\n constructor(\n code: string,\n message: string,\n details?: Record<string, unknown>,\n options?: { exitCode?: number },\n ) {\n super(message);\n this.name = \"CliError\";\n this.code = code;\n this.details = details;\n this.exitCode = options?.exitCode;\n }\n}\n\nfunction printUsage() {\n console.log(`xapps CLI\n\nUsage:\n Public/stable publish surface:\n xapps import --from <openapi-file-or-url> --out <manifest.json> [options]\n xapps init --out <directory> [options]\n xapps validate --from <manifest.json>\n xapps test --from <manifest.json> --vectors <test-vectors.json>\n xapps publish --from <manifest.json> [options]\n xapps logs [options]\n xapps publisher endpoint credential set [options]\n xapps publisher endpoint credential ensure [options]\n\n Local/repo-only helpers:\n xapps dev --from <manifest.json> [options]\n xapps context export --from <manifest.json> [options]\n xapps tunnel --target <base-url> [options]\n xapps ai plan --mode internal --from <manifest.json> [--preset <internal-v1>] [--flow <name>] [--mocks-dir <dir>] [--guidance <text> | --guidance-file <file> | --ask-guidance] [--llm] [--llm-model <model>] [--llm-timeout-ms <n>] [--apply-manifest-hints] [--json]\n Example guidance: \"Infer complete form fields from mockups, build a step wizard, add supported preview sections, and exclude payment screens because payment is handled by guards.\"\n LLM flags: --llm-api-key <key> --llm-base-url <url> --llm-model <model> --llm-timeout-ms <n> (default model: gpt-5.2, default timeout: 30000ms)\n xapps ai check --mode internal --plan <plan.json> [--policy <policy.json> | --policy-preset <internal-readonly>] [--json]\n xapps dev status refs [--json]\n xapps dev check v1 [--json]\n xapps dev check flow --name <flow> [--json] [--run] [--artifacts-dir <dir>]\n xapps dev check flow --from <flow.json> [--json] [--run] [--artifacts-dir <dir>]\n xapps dev check flow init --out <flow.json> --type <ai-artifacts|manual-loop> [--flow-id <id>] [--manifest <path>] [--policy <path>] [--smoke-script <path>] [--json]\n xapps dev check flow lint --from <flow.json> [--json]\n\nGlobal options:\n --profile <name> Profile name from ~/.xapps/config (or env XAPPS_CLI_PROFILE)\n\nImport options:\n --name <name> App name (default: OpenAPI info.title)\n --slug <slug> Manifest slug (default: slugified app name)\n --version <semver> Manifest version (default: 1.0.0)\n --description <text> Manifest description\n --endpoint <base_url> Endpoint base_url (default: https://api.example.com)\n --endpoint-env <env> Endpoint env key (default: prod)\n --fetch-timeout-ms <n> Remote OpenAPI fetch timeout in ms (default: 10000)\n\nInit options:\n --name <name> App name (default: My Xapp)\n --slug <slug> Manifest slug (default: slugified app name)\n --version <semver> Manifest version (default: 1.0.0)\n --force Overwrite existing files\n\nTest options:\n --from <manifest.json> Manifest file to validate against\n --vectors <vectors.json> Request/response contract vectors\n\nPublish options:\n --from <manifest.json> Manifest file to package\n --out <file-or-dir> Output file or directory (default: artifacts/xapps-publish/<slug>/<version>)\n --dry-run Validate + print summary only (no files written)\n --yes Skip release confirmation prompt (required in non-interactive mode)\n --force Overwrite target artifact if it exists\n --publish-url <url> Optional remote publish endpoint (POST bundle JSON)\n --publisher-gateway-url <url> Optional local gateway publisher API base URL (uses /publisher/* routes)\n --target-client-slug <slug> Resolve tenant slug to target_client_id via --publisher-gateway-url for publish\n --replace <A=B> Replace placeholder/text A with literal B in manifest before publish (repeatable)\n --replace-env <A=ENV> Replace placeholder/text A with process.env[ENV] before publish (repeatable)\n --bump-version <kind> Bump manifest version before publish: patch|minor|major\n --write-manifest-version Write bumped version back to source manifest file (only version field is persisted)\n --allow-unresolved-placeholders Skip preflight failure when __PLACEHOLDER__ tokens remain after replacements\n --token <token> Bearer token for --publish-url (or env XAPPS_CLI_TOKEN)\n --api-key <key> API key header value (or env XAPPS_CLI_API_KEY)\n --signing-key <key> HMAC key for signed publish metadata headers (or env XAPPS_CLI_SIGNING_KEY)\n --version-conflict <mode> Version conflict policy: fail|allow (default: fail)\n --release-channel <name> Release channel label for remote publish handoff (default: stable)\n --registry-target <name> Registry target/namespace label for remote publish handoff\n --idempotency-key <key> Idempotency key header for --publish-url handoff\n --timeout-ms <n> Remote publish timeout in ms (default: 10000)\n --retry-attempts <n> Remote publish retry attempts for transient failures (default: 1)\n --retry-backoff-ms <n> Base backoff between publish retries (default: 250)\n\nPublisher endpoint credential set/ensure options:\n --gateway-url <url> Gateway base URL (auto-uses /v1 if path omitted)\n --api-key <key> Publisher API key (or env XAPPS_CLI_API_KEY)\n --token <token> Publisher bearer token (or env XAPPS_CLI_TOKEN)\n --endpoint-id <id> Endpoint id (optional if using --xapp-slug + --env)\n --xapp-slug <slug> Resolve endpoint by publisher xapp slug\n --target-client-slug <slug> Resolve the tenant-scoped xapp variant before endpoint lookup\n --env <name> Endpoint env when resolving by xapp slug (default: prod)\n --auth-type <type> Endpoint auth type (default: api-key)\n --header-name <name> API key header name for api-key header auth (default: x-xplace-api-key)\n --secret-env <ENV> Read initial credential key secret from environment variable\n --secret-stdin Read initial credential key secret from stdin\n --secret-ref <ref> Store a gateway secret provider reference instead of literal secret\n --key-status <status> Initial key status (default: active)\n --key-algorithm <alg> Initial key algorithm (default: hmac-sha256)\n --json Machine-readable output\n\nLogs options:\n --from <bundle.json> Read a single local publish bundle\n --dir <path> Scan publish bundles in directory (default: artifacts/xapps-publish)\n --limit <n> Max entries (default: 10)\n --json Print JSON output\n --logs-url <url> Optional remote logs endpoint (GET)\n --token <token> Bearer token for --logs-url (or env XAPPS_CLI_TOKEN)\n --api-key <key> API key header value (or env XAPPS_CLI_API_KEY)\n --cursor <value> Optional pagination cursor for remote logs\n --lease-id <value> Optional managed log stream lease identifier\n --checkpoint <value> Optional managed log stream checkpoint token\n --severity <value> Optional remote filter (ex: error or error,warn)\n --since <iso> Optional remote filter start timestamp\n --until <iso> Optional remote filter end timestamp\n --follow Keep polling remote logs and resume from next cursor\n --follow-interval-ms <n> Poll interval for --follow mode (default: 2000)\n --follow-max-cycles <n> Optional max follow polling cycles (for automation/testing)\n --follow-cursor-file <path> Persist/restore follow cursor state to local file\n --timeout-ms <n> Remote logs timeout in ms (default: 10000)\n --retry-attempts <n> Remote logs retry attempts for transient failures (default: 1)\n --retry-backoff-ms <n> Base backoff between logs retries (default: 250)\n\nContext export options:\n export --from <manifest.json> Manifest file to export deterministic context from\n --out <file> Write context JSON to file (default: stdout)\n --preset <name> Optional repo-only context preset (Phase 1: internal-v1)\n\nTunnel options:\n --target <base-url> Relay target base URL (required)\n --allow-target-hosts <csv> Explicit target host allowlist (default: 127.0.0.1,localhost,::1)\n --host <host> Relay bind host (default: 127.0.0.1)\n --listen-port <port> Relay bind port (default: 4041)\n --session-id <id> Stable tunnel session id (optional)\n --session-file <path> Persist/reuse session id across restarts\n --session-policy <mode> Session lifecycle policy: reuse|require|rotate (default: reuse)\n --require-auth-token <tok> Require inbound relay token (header x-xapps-tunnel-token or Bearer)\n --upstream-timeout-ms <n> Upstream request timeout in ms (default: 15000)\n --retry-attempts <n> Upstream retry attempts for GET/HEAD/OPTIONS transient failures (default: 1)\n --retry-backoff-ms <n> Base backoff between upstream retries (default: 200)\n --once Start, print config, and exit\n\nDev options:\n --from <manifest.json> Manifest file to validate/watch\n --dry-run <request.json> Inspect a request payload against manifest tools\n --port <port> Mock callback server port (default: 4011)\n --host <host> Mock callback server host (default: 127.0.0.1)\n --once Validate + dry-run only; skip watch/server\n --no-watch Disable manifest watch loop\n\nNotes:\n - Public/stable surface focuses on manifest authoring, validation, publish, logs, and publisher endpoint credentials.\n - AI/internal preset/dev-check commands are repo-only helpers and require the xapps monorepo checkout.\n`);\n}\n\nfunction parseArgs(argv: string[]): { command: string; args: CliArgs } {\n const [command = \"\", ...rest] = argv;\n const args: CliArgs = {};\n let subcommandCount = 0;\n\n for (let i = 0; i < rest.length; i += 1) {\n const token = rest[i];\n if (!token.startsWith(\"--\")) {\n subcommandCount += 1;\n if (subcommandCount === 1) args._subcommand = token;\n else if (subcommandCount === 2) args._subcommand2 = token;\n else if (subcommandCount === 3) args._subcommand3 = token;\n continue;\n }\n\n const key = token.slice(2);\n const next = rest[i + 1];\n if (!next || next.startsWith(\"--\")) {\n if (args[key] === undefined) {\n args[key] = true;\n } else if (Array.isArray(args[key])) {\n (args[key] as string[]).push(\"true\");\n } else if (typeof args[key] === \"string\") {\n args[key] = [args[key] as string, \"true\"];\n }\n continue;\n }\n\n if (args[key] === undefined) {\n args[key] = next;\n } else if (Array.isArray(args[key])) {\n (args[key] as string[]).push(next);\n } else if (typeof args[key] === \"string\") {\n args[key] = [args[key] as string, next];\n } else {\n args[key] = [next];\n }\n i += 1;\n }\n\n return { command, args };\n}\n\nfunction argString(args: CliArgs, ...keys: string[]): string | undefined {\n for (const key of keys) {\n const value = args[key];\n if (Array.isArray(value)) {\n for (let i = value.length - 1; i >= 0; i -= 1) {\n const item = value[i];\n if (typeof item === \"string\" && item.trim()) return item.trim();\n }\n continue;\n }\n if (typeof value === \"string\" && value.trim()) {\n return value.trim();\n }\n }\n return undefined;\n}\n\nfunction argStrings(args: CliArgs, ...keys: string[]): string[] {\n const out: string[] = [];\n for (const key of keys) {\n const value = args[key];\n if (Array.isArray(value)) {\n for (const item of value) {\n if (typeof item === \"string\" && item.trim()) out.push(item.trim());\n }\n continue;\n }\n if (typeof value === \"string\" && value.trim()) {\n out.push(value.trim());\n }\n }\n return out;\n}\n\nfunction argFlag(args: CliArgs, key: string): boolean {\n const value = args[key];\n if (value === true) return true;\n if (Array.isArray(value)) return value.includes(\"true\");\n return false;\n}\n\nfunction shellEscapeArg(value: string): string {\n const input = String(value ?? \"\");\n if (/^[A-Za-z0-9_./:-]+$/.test(input)) return input;\n return `'${input.replace(/'/g, `'\"'\"'`)}'`;\n}\n\nfunction applyFlowCommandTemplates(command: string, params: { artifactsDir: string }): string {\n return String(command || \"\").replaceAll(\"{{ARTIFACTS_DIR}}\", params.artifactsDir);\n}\n\nfunction normalizePublisherGatewayApiBaseUrl(input: string): string {\n const raw = String(input || \"\").trim();\n if (!raw) return \"\";\n const parsed = new URL(raw);\n const pathname = parsed.pathname || \"/\";\n if (pathname === \"/\" || pathname === \"\") {\n parsed.pathname = \"/v1\";\n return parsed.toString().replace(/\\/+$/g, \"\");\n }\n return parsed.toString().replace(/\\/+$/g, \"\");\n}\n\nfunction defaultCliConfigPath() {\n return path.join(os.homedir(), \".xapps\", \"config\");\n}\n\nfunction parseVersionConflictPolicy(\n value: string | undefined,\n fallback: \"fail\" | \"allow\" = \"fail\",\n): \"fail\" | \"allow\" {\n if (!value) return fallback;\n const normalized = String(value).trim().toLowerCase();\n if (normalized === \"fail\" || normalized === \"allow\") return normalized;\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid --version-conflict: ${value} (expected fail|allow)`,\n { label: \"--version-conflict\", value },\n );\n}\n\ntype ManifestReplaceRule = {\n from: string;\n to: string;\n source: \"literal\" | \"env\";\n sourceName?: string;\n};\n\nfunction parseManifestReplaceLiteral(raw: string): ManifestReplaceRule {\n const idx = raw.indexOf(\"=\");\n if (idx <= 0) {\n throw new CliError(\"CLI_INVALID_OPTION\", `Invalid --replace value: ${raw} (expected FROM=TO)`, {\n label: \"--replace\",\n value: raw,\n });\n }\n const from = raw.slice(0, idx).trim();\n const to = raw.slice(idx + 1);\n if (!from) {\n throw new CliError(\"CLI_INVALID_OPTION\", `Invalid --replace value: ${raw} (empty FROM)`, {\n label: \"--replace\",\n value: raw,\n });\n }\n return { from, to, source: \"literal\" };\n}\n\nfunction parseManifestReplaceEnv(raw: string): ManifestReplaceRule {\n const idx = raw.indexOf(\"=\");\n if (idx <= 0) {\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid --replace-env value: ${raw} (expected FROM=ENV_VAR)`,\n { label: \"--replace-env\", value: raw },\n );\n }\n const from = raw.slice(0, idx).trim();\n const envName = raw.slice(idx + 1).trim();\n if (!from || !envName) {\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid --replace-env value: ${raw} (empty FROM or ENV_VAR)`,\n { label: \"--replace-env\", value: raw },\n );\n }\n const envValue = process.env[envName];\n if (typeof envValue !== \"string\" || envValue.length === 0) {\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Environment variable missing/empty for --replace-env ${envName}`,\n { label: \"--replace-env\", value: raw, env: envName },\n );\n }\n return { from, to: envValue, source: \"env\", sourceName: envName };\n}\n\nfunction applyManifestReplaceRulesDeep<T>(input: T, rules: ManifestReplaceRule[]): T {\n if (!rules.length) return input;\n const replaceToken = (raw: string): string => {\n let next = raw;\n for (const rule of rules) {\n next = next.split(rule.from).join(rule.to);\n }\n return next;\n };\n const walk = (value: unknown): unknown => {\n if (typeof value === \"string\") {\n return replaceToken(value);\n }\n if (Array.isArray(value)) return value.map(walk);\n if (value && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[replaceToken(k)] = walk(v);\n }\n return out;\n }\n return value;\n };\n return walk(input) as T;\n}\n\nfunction findUnresolvedPlaceholderTokens(input: unknown): string[] {\n const seen = new Set<string>();\n const re = /__[A-Z0-9_]+__/g;\n const collect = (raw: string) => {\n const matches = raw.match(re);\n if (matches) for (const m of matches) seen.add(m);\n };\n const walk = (value: unknown) => {\n if (typeof value === \"string\") {\n collect(value);\n return;\n }\n if (Array.isArray(value)) {\n for (const item of value) walk(item);\n return;\n }\n if (value && typeof value === \"object\") {\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n collect(k);\n walk(v);\n }\n return;\n }\n };\n walk(input);\n return Array.from(seen).sort();\n}\n\ntype VersionBumpKind = \"patch\" | \"minor\" | \"major\";\n\nfunction parseVersionBumpKind(value: string | undefined): VersionBumpKind | null {\n if (!value) return null;\n const normalized = String(value).trim().toLowerCase();\n if (normalized === \"patch\" || normalized === \"minor\" || normalized === \"major\") {\n return normalized;\n }\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid --bump-version: ${value} (expected patch|minor|major)`,\n { label: \"--bump-version\", value },\n );\n}\n\nfunction bumpSemverVersionOrThrow(version: string, kind: VersionBumpKind): string {\n const match = /^(\\d+)\\.(\\d+)\\.(\\d+)$/.exec(String(version || \"\").trim());\n if (!match) {\n throw new CliError(\"CLI_INVALID_OPTION\", `Cannot ${kind}-bump non-semver version: ${version}`, {\n label: \"--bump-version\",\n version,\n });\n }\n let major = Number(match[1]);\n let minor = Number(match[2]);\n let patch = Number(match[3]);\n if (kind === \"major\") {\n major += 1;\n minor = 0;\n patch = 0;\n } else if (kind === \"minor\") {\n minor += 1;\n patch = 0;\n } else {\n patch += 1;\n }\n return `${major}.${minor}.${patch}`;\n}\n\nfunction parseTunnelSessionPolicy(\n value: string | undefined,\n fallback: \"reuse\" | \"require\" | \"rotate\" = \"reuse\",\n): \"reuse\" | \"require\" | \"rotate\" {\n if (!value) return fallback;\n const normalized = String(value).trim().toLowerCase();\n if (normalized === \"reuse\" || normalized === \"require\" || normalized === \"rotate\") {\n return normalized;\n }\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid --session-policy: ${value} (expected reuse|require|rotate)`,\n { label: \"--session-policy\", value },\n );\n}\n\nfunction parseReleaseLabel(\n label: string | undefined,\n fallback: string,\n optionName: string,\n): string {\n const raw = String(label || fallback || \"\")\n .trim()\n .toLowerCase();\n if (!raw)\n return String(fallback || \"\")\n .trim()\n .toLowerCase();\n if (!/^[a-z0-9][a-z0-9._-]{0,63}$/.test(raw)) {\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid ${optionName}: ${label} (expected 1-64 chars: a-z, 0-9, ., _, -)`,\n { label: optionName, value: label },\n );\n }\n return raw;\n}\n\ntype TunnelSessionState = {\n sessionId: string;\n target?: string;\n updatedAt?: string;\n schemaVersion?: number;\n};\n\nfunction parseCsvSet(value: string | undefined, fallbackCsv: string): Set<string> {\n const raw = String(value || fallbackCsv);\n return new Set(\n raw\n .split(\",\")\n .map((item) => item.trim().toLowerCase())\n .filter(Boolean),\n );\n}\n\nfunction randomSessionId(prefix = \"tnl\"): string {\n return `${prefix}_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction resolveCursorStatePath(rawPath: string): string {\n return path.resolve(process.cwd(), rawPath);\n}\n\ntype LogsResumeState = {\n cursor?: string;\n leaseId?: string;\n checkpoint?: string;\n};\n\nfunction loadLogsResumeState(filePathRaw: string): LogsResumeState {\n const filePath = resolveCursorStatePath(filePathRaw);\n if (!fs.existsSync(filePath)) return {};\n try {\n const raw = fs.readFileSync(filePath, \"utf8\").trim();\n if (!raw) return {};\n if (!raw.startsWith(\"{\")) {\n // Backward compatible plain cursor-file format.\n return { cursor: raw };\n }\n const parsed = JSON.parse(raw);\n if (!isPlainObject(parsed)) {\n throw new Error(\"resume state must be a JSON object\");\n }\n const cursor =\n typeof (parsed as any).cursor === \"string\"\n ? String((parsed as any).cursor)\n : typeof (parsed as any).next_cursor === \"string\"\n ? String((parsed as any).next_cursor)\n : \"\";\n const leaseId =\n typeof (parsed as any).lease_id === \"string\"\n ? String((parsed as any).lease_id)\n : typeof (parsed as any).leaseId === \"string\"\n ? String((parsed as any).leaseId)\n : \"\";\n const checkpoint =\n typeof (parsed as any).checkpoint === \"string\"\n ? String((parsed as any).checkpoint)\n : typeof (parsed as any).checkpoint_token === \"string\"\n ? String((parsed as any).checkpoint_token)\n : typeof (parsed as any).checkpointToken === \"string\"\n ? String((parsed as any).checkpointToken)\n : \"\";\n return {\n ...(cursor ? { cursor } : {}),\n ...(leaseId ? { leaseId } : {}),\n ...(checkpoint ? { checkpoint } : {}),\n };\n } catch (err: any) {\n throw new CliError(\n \"CLI_CURSOR_STATE_IO\",\n `Failed reading cursor state file: ${filePath} (${err?.message || String(err)})`,\n { filePath },\n );\n }\n}\n\nfunction saveLogsResumeState(filePathRaw: string, state: LogsResumeState) {\n const filePath = resolveCursorStatePath(filePathRaw);\n try {\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n const cursor = String(state.cursor || \"\").trim();\n const leaseId = String(state.leaseId || \"\").trim();\n const checkpoint = String(state.checkpoint || \"\").trim();\n if (!leaseId && !checkpoint) {\n fs.writeFileSync(filePath, `${cursor}\\n`);\n return;\n }\n const payload = {\n v: 1,\n ...(cursor ? { cursor } : {}),\n ...(leaseId ? { lease_id: leaseId } : {}),\n ...(checkpoint ? { checkpoint } : {}),\n updated_at: new Date().toISOString(),\n };\n fs.writeFileSync(filePath, JSON.stringify(payload, null, 2));\n } catch (err: any) {\n throw new CliError(\n \"CLI_CURSOR_STATE_IO\",\n `Failed writing cursor state file: ${filePath} (${err?.message || String(err)})`,\n { filePath },\n );\n }\n}\n\nfunction loadTunnelSessionState(filePathRaw: string): TunnelSessionState | null {\n const filePath = path.resolve(process.cwd(), filePathRaw);\n if (!fs.existsSync(filePath)) return null;\n try {\n const raw = fs.readFileSync(filePath, \"utf8\").trim();\n if (!raw) return null;\n if (!raw.startsWith(\"{\")) {\n // Backward compatible session-id only format.\n return { sessionId: raw };\n }\n const parsed = JSON.parse(raw);\n if (!isPlainObject(parsed)) {\n throw new Error(\"session state must be a JSON object\");\n }\n const sessionId =\n typeof (parsed as any).session_id === \"string\"\n ? String((parsed as any).session_id).trim()\n : typeof (parsed as any).sessionId === \"string\"\n ? String((parsed as any).sessionId).trim()\n : \"\";\n if (!sessionId) {\n throw new Error(\"session_id is required\");\n }\n const target =\n typeof (parsed as any).target === \"string\" ? String((parsed as any).target).trim() : \"\";\n const updatedAt =\n typeof (parsed as any).updated_at === \"string\"\n ? String((parsed as any).updated_at).trim()\n : typeof (parsed as any).updatedAt === \"string\"\n ? String((parsed as any).updatedAt).trim()\n : \"\";\n const schemaVersion =\n typeof (parsed as any).v === \"number\"\n ? Number((parsed as any).v)\n : typeof (parsed as any).version === \"number\"\n ? Number((parsed as any).version)\n : undefined;\n return {\n sessionId,\n ...(target ? { target } : {}),\n ...(updatedAt ? { updatedAt } : {}),\n ...(schemaVersion !== undefined ? { schemaVersion } : {}),\n };\n } catch (err: any) {\n throw new CliError(\n \"CLI_TUNNEL_SESSION_IO\",\n `Failed reading tunnel session file: ${filePath} (${err?.message || String(err)})`,\n { filePath },\n );\n }\n}\n\nfunction saveTunnelSessionState(filePathRaw: string, state: TunnelSessionState) {\n const filePath = path.resolve(process.cwd(), filePathRaw);\n try {\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n const payload = {\n v: 1,\n session_id: state.sessionId,\n ...(state.target ? { target: state.target } : {}),\n updated_at: new Date().toISOString(),\n };\n fs.writeFileSync(filePath, `${JSON.stringify(payload, null, 2)}\\n`);\n } catch (err: any) {\n throw new CliError(\n \"CLI_TUNNEL_SESSION_IO\",\n `Failed writing tunnel session file: ${filePath} (${err?.message || String(err)})`,\n { filePath },\n );\n }\n}\n\nfunction base64url(input: Buffer): string {\n return input.toString(\"base64\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/g, \"\");\n}\n\nfunction stableStringify(input: Record<string, unknown>): string {\n const keys = Object.keys(input).sort((a, b) => a.localeCompare(b));\n const out: Record<string, unknown> = {};\n for (const key of keys) out[key] = input[key];\n return JSON.stringify(out);\n}\n\nfunction canonicalizeJson(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => canonicalizeJson(item));\n }\n if (value && typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const key of Object.keys(value as Record<string, unknown>).sort((a, b) =>\n a.localeCompare(b),\n )) {\n out[key] = canonicalizeJson((value as Record<string, unknown>)[key]);\n }\n return out;\n }\n return value;\n}\n\nfunction parseCliConfig(raw: string, sourcePath: string): CliConfigFile {\n try {\n const parsed = JSON.parse(raw);\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new CliError(\"CLI_CONFIG_INVALID\", \"config root must be a JSON object\", {\n sourcePath,\n });\n }\n return parsed as CliConfigFile;\n } catch (err: any) {\n if (err instanceof CliError) throw err;\n throw new CliError(\n \"CLI_CONFIG_INVALID\",\n `Invalid CLI config JSON (${sourcePath}): ${err?.message || String(err)}`,\n { sourcePath },\n );\n }\n}\n\nfunction loadCliConfig(_args: CliArgs): { config: CliConfigFile; configPath: string | null } {\n const configPath = process.env.XAPPS_CLI_CONFIG || defaultCliConfigPath();\n if (!fs.existsSync(configPath)) {\n return { config: {}, configPath: null };\n }\n const raw = fs.readFileSync(configPath, \"utf8\");\n return { config: parseCliConfig(raw, configPath), configPath };\n}\n\nfunction getProfile(args: CliArgs): {\n profileName: string;\n profile: CliConfigProfile;\n configPath: string | null;\n} {\n const { config, configPath } = loadCliConfig(args);\n const profileName =\n argString(args, \"profile\") || process.env.XAPPS_CLI_PROFILE || config.defaultProfile || \"\";\n if (!profileName) {\n return { profileName: \"\", profile: {}, configPath };\n }\n const profile = config.profiles?.[profileName];\n if (!profile || typeof profile !== \"object\") {\n const configLabel = configPath || defaultCliConfigPath();\n throw new CliError(\n \"CLI_PROFILE_NOT_FOUND\",\n `Unknown CLI profile '${profileName}' in ${configLabel}`,\n {\n profileName,\n configPath: configLabel,\n },\n );\n }\n return { profileName, profile, configPath };\n}\n\nasync function confirmPublishOrThrow(summary: Record<string, unknown>) {\n if (!process.stdin.isTTY || !process.stdout.isTTY) {\n throw new CliError(\n \"CLI_CONFIRM_REQUIRED\",\n \"Publish confirmation required in non-interactive mode. Re-run with --yes.\",\n );\n }\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n try {\n const answer = await rl.question(\n `Release ${summary.slug}@${summary.version} (tools=${summary.tools}, widgets=${summary.widgets})? [y/N] `,\n );\n const normalized = String(answer || \"\")\n .trim()\n .toLowerCase();\n if (normalized !== \"y\" && normalized !== \"yes\") {\n throw new CliError(\"CLI_CONFIRM_DECLINED\", \"Publish cancelled by user.\");\n }\n } finally {\n rl.close();\n }\n}\n\nasync function readInput(from: string, fetchTimeoutMs: number): Promise<string> {\n if (/^https?:\\/\\//i.test(from)) {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), fetchTimeoutMs);\n try {\n const res = await fetch(from, { signal: controller.signal });\n if (!res.ok) {\n throw new CliError(\n \"CLI_REMOTE_FETCH_ERROR\",\n `Failed to fetch OpenAPI URL (${res.status}): ${from}`,\n {\n from,\n status: res.status,\n timeout_ms: fetchTimeoutMs,\n },\n );\n }\n return await res.text();\n } catch (err: any) {\n if (err instanceof CliError) throw err;\n if (err?.name === \"AbortError\") {\n throw new CliError(\n \"CLI_REMOTE_FETCH_ERROR\",\n `OpenAPI fetch timed out after ${fetchTimeoutMs}ms: ${from}`,\n { from, timeout_ms: fetchTimeoutMs },\n );\n }\n throw new CliError(\"CLI_REMOTE_FETCH_ERROR\", `Failed to fetch OpenAPI URL: ${from}`, {\n from,\n timeout_ms: fetchTimeoutMs,\n cause: String(err?.message || err || \"fetch_failed\"),\n });\n } finally {\n clearTimeout(timer);\n }\n }\n const absolute = path.resolve(process.cwd(), from);\n return fs.readFileSync(absolute, \"utf8\");\n}\n\nfunction readJsonFile(file: string): unknown {\n const filePath = path.resolve(process.cwd(), file);\n const raw = fs.readFileSync(filePath, \"utf8\");\n try {\n return JSON.parse(raw);\n } catch (err: any) {\n throw new Error(`Invalid JSON in ${filePath}: ${err?.message || String(err)}`);\n }\n}\n\nfunction parseManifestFromFile(from: string): {\n manifest: ReturnType<typeof parseXappManifest>;\n filePath: string;\n} {\n const filePath = path.resolve(process.cwd(), from);\n const parsed = readJsonFile(from);\n return { manifest: parseXappManifest(parsed), filePath };\n}\n\nfunction runContextExport(args: CliArgs) {\n runContextExportCommand(args, {\n argString,\n findRepoRoot,\n parseManifestFromFile,\n buildDevRefs,\n canonicalizeJson,\n makeCliError: (code, message, details) => new CliError(code, message, details),\n });\n}\n\nasync function readRequestBody(req: IncomingMessage): Promise<unknown> {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n if (typeof chunk === \"string\") {\n chunks.push(Buffer.from(chunk));\n } else {\n chunks.push(chunk);\n }\n }\n if (!chunks.length) return {};\n const raw = Buffer.concat(chunks).toString(\"utf8\");\n try {\n return JSON.parse(raw);\n } catch {\n return { _raw: raw };\n }\n}\n\nasync function readRawRequestBody(req: IncomingMessage): Promise<Buffer> {\n const chunks: Buffer[] = [];\n for await (const chunk of req) {\n if (typeof chunk === \"string\") chunks.push(Buffer.from(chunk));\n else chunks.push(chunk);\n }\n return Buffer.concat(chunks);\n}\n\nfunction runDryRun(args: CliArgs, manifest: ReturnType<typeof parseXappManifest>) {\n const dryRunFile = argString(args, \"dry-run\");\n if (!dryRunFile) return;\n\n const requestPath = path.resolve(process.cwd(), dryRunFile);\n const raw = fs.readFileSync(requestPath, \"utf8\");\n let payload: any;\n try {\n payload = JSON.parse(raw);\n } catch (err: any) {\n throw new Error(\n `Invalid JSON in dry-run payload ${requestPath}: ${err?.message || String(err)}`,\n );\n }\n\n const toolName = typeof payload?.tool_name === \"string\" ? payload.tool_name : \"\";\n const tool = manifest.tools.find((item) => item.tool_name === toolName);\n const inputKeys =\n payload && typeof payload.input === \"object\" && payload.input\n ? Object.keys(payload.input as Record<string, unknown>)\n : [];\n\n console.log(\n [\n `Dry-run payload: ${requestPath}`,\n `Request id: ${typeof payload?.request_id === \"string\" ? payload.request_id : \"n/a\"}`,\n `Tool: ${toolName || \"n/a\"}${tool ? \" (manifest match)\" : \" (not found in manifest)\"}`,\n `Input keys: ${inputKeys.length ? inputKeys.join(\", \") : \"(none)\"}`,\n ].join(\"\\n\"),\n );\n}\n\nfunction findRepoRoot(startDir = process.cwd()): string | null {\n let current = path.resolve(startDir);\n for (let i = 0; i < 8; i += 1) {\n if (\n fs.existsSync(path.join(current, \"package.json\")) &&\n fs.existsSync(path.join(current, \"dev\"))\n ) {\n return current;\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return null;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction resolvePublishBundlePath(\n outArg: string | undefined,\n slug: string,\n version: string,\n): string {\n if (!outArg) {\n return path.resolve(process.cwd(), DEFAULT_PUBLISH_BUNDLES_DIR, slug, version, \"bundle.json\");\n }\n const resolved = path.resolve(process.cwd(), outArg);\n if (resolved.toLowerCase().endsWith(\".json\")) {\n return resolved;\n }\n return path.join(resolved, \"bundle.json\");\n}\n\nfunction parsePositiveIntOrThrow(\n value: string | undefined,\n fallback: number,\n label: string,\n): number {\n if (!value) return fallback;\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || !Number.isInteger(parsed) || parsed <= 0) {\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid ${label}: ${value} (expected positive integer)`,\n { label, value },\n );\n }\n return parsed;\n}\n\nfunction parseHttpUrlOrThrow(value: string, label: string): string {\n let parsed: URL;\n try {\n parsed = new URL(String(value || \"\").trim());\n } catch {\n throw new CliError(\"CLI_INVALID_OPTION\", `Invalid ${label}: ${value}`, { label, value });\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid ${label} protocol (http/https required): ${value}`,\n { label, value },\n );\n }\n return parsed.toString();\n}\n\nfunction parseListenPortOrThrow(value: string | undefined, fallback: number): number {\n if (!value) return fallback;\n const parsed = Number(value);\n if (!Number.isInteger(parsed) || parsed < 1 || parsed > 65535) {\n throw new CliError(\n \"CLI_INVALID_OPTION\",\n `Invalid --listen-port: ${value} (expected integer 1-65535)`,\n { label: \"--listen-port\", value },\n );\n }\n return parsed;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, Math.max(0, ms)));\n}\n\nfunction isRetryableStatus(status: number): boolean {\n return status === 408 || status === 425 || status === 429 || status >= 500;\n}\n\nfunction appendForwardedHeader(existing: string | null, next: string): string {\n const normalized = next.trim();\n if (!normalized) return existing || \"\";\n if (!existing) return normalized;\n return `${existing}, ${normalized}`;\n}\n\ntype RetryableError = Error & { retryable?: boolean };\n\nfunction makeRetryableError(message: string, retryable = false): RetryableError {\n const err = new Error(message) as RetryableError;\n err.retryable = retryable;\n return err;\n}\n\nfunction normalizeRemoteErrorDetails(bodyText: string): string {\n const text = String(bodyText || \"\").trim();\n if (!text) return \"\";\n try {\n const parsed = JSON.parse(text);\n if (!isPlainObject(parsed)) {\n return `body=${text.slice(0, 400)}`;\n }\n const errorCode =\n typeof parsed.error === \"string\"\n ? parsed.error\n : typeof parsed.code === \"string\"\n ? parsed.code\n : \"\";\n const message =\n typeof parsed.message === \"string\"\n ? parsed.message\n : typeof parsed.detail === \"string\"\n ? parsed.detail\n : \"\";\n const parts: string[] = [];\n if (errorCode) parts.push(`error=${errorCode}`);\n if (message) parts.push(`message=${message.slice(0, 300)}`);\n return parts.length ? parts.join(\" \") : `body=${text.slice(0, 400)}`;\n } catch {\n return `body=${text.slice(0, 400)}`;\n }\n}\n\nfunction buildRemoteHttpFailureMessage(input: {\n channel: \"publish\" | \"logs\";\n status: number;\n url: string;\n bodyText: string;\n}): string {\n const detail = normalizeRemoteErrorDetails(input.bodyText);\n const retryable = isRetryableStatus(input.status);\n return [\n `Remote ${input.channel} failed (status=${input.status})`,\n `url=${input.url}`,\n `retryable=${retryable ? \"yes\" : \"no\"}`,\n detail,\n ]\n .filter(Boolean)\n .join(\" \");\n}\n\nfunction normalizePublishOutcome(raw: unknown): \"created\" | \"updated\" | \"already_exists\" | \"\" {\n const normalized = String(raw ?? \"\")\n .trim()\n .toLowerCase();\n if (!normalized) return \"\";\n if (\n normalized === \"created\" ||\n normalized === \"new\" ||\n normalized === \"published\" ||\n normalized === \"success\"\n )\n return \"created\";\n if (normalized === \"updated\" || normalized === \"modified\" || normalized === \"replaced\")\n return \"updated\";\n if (\n normalized === \"already_exists\" ||\n normalized === \"already-exists\" ||\n normalized === \"exists\" ||\n normalized === \"version_exists\" ||\n normalized === \"version-exists\" ||\n normalized === \"conflict\"\n )\n return \"already_exists\";\n return \"\";\n}\n\nfunction pickPublishAckContainers(\n payload: Record<string, unknown>,\n): Array<Record<string, unknown>> {\n const containers: Array<Record<string, unknown>> = [payload];\n const nestedKeys = [\"ack\", \"data\", \"publish\", \"release\", \"result\"];\n for (const key of nestedKeys) {\n const value = payload[key];\n if (isPlainObject(value)) {\n containers.push(value);\n }\n }\n return containers;\n}\n\nfunction parsePublishAck(payload: unknown): {\n outcome?: \"created\" | \"updated\" | \"already_exists\";\n releaseId?: string;\n registryEntry?: string;\n provider?: string;\n hasOutcomeSignal: boolean;\n} {\n if (!isPlainObject(payload)) {\n return { hasOutcomeSignal: false };\n }\n const candidates = pickPublishAckContainers(payload);\n let outcome: \"created\" | \"updated\" | \"already_exists\" | \"\" = \"\";\n let hasOutcomeSignal = false;\n let releaseId = \"\";\n let registryEntry = \"\";\n let provider = \"\";\n for (const candidate of candidates) {\n const outcomeRaw =\n candidate.outcome ??\n candidate.result ??\n candidate.status ??\n candidate.state ??\n candidate.disposition;\n if (outcomeRaw !== undefined) {\n hasOutcomeSignal = true;\n const normalized = normalizePublishOutcome(outcomeRaw);\n if (normalized) outcome = normalized;\n }\n if (!releaseId) {\n const value = candidate.release_id ?? candidate.releaseId ?? candidate.id;\n if (typeof value === \"string\" && value.trim()) releaseId = value.trim();\n }\n if (!registryEntry) {\n const value = candidate.registry_entry ?? candidate.registryEntry;\n if (typeof value === \"string\" && value.trim()) registryEntry = value.trim();\n }\n if (!provider) {\n const value = candidate.provider ?? candidate.publisher ?? candidate.vendor;\n if (typeof value === \"string\" && value.trim()) provider = value.trim();\n }\n }\n return {\n ...(outcome ? { outcome } : {}),\n ...(releaseId ? { releaseId } : {}),\n ...(registryEntry ? { registryEntry } : {}),\n ...(provider ? { provider } : {}),\n hasOutcomeSignal,\n };\n}\n\nfunction detectPublishConflict(bodyText: string): boolean {\n const text = String(bodyText || \"\").trim();\n if (!text) return false;\n try {\n const parsed = JSON.parse(text);\n if (!isPlainObject(parsed)) return false;\n const parts: string[] = [];\n const pushIfString = (value: unknown) => {\n if (typeof value === \"string\" && value.trim()) parts.push(value.trim().toLowerCase());\n };\n const containers = pickPublishAckContainers(parsed);\n for (const item of containers) {\n pushIfString(item.error);\n pushIfString(item.code);\n pushIfString(item.reason);\n pushIfString(item.message);\n pushIfString(item.outcome);\n pushIfString(item.result);\n pushIfString(item.status);\n pushIfString(item.state);\n }\n return parts.some((value) =>\n /already[_-]?exists|version[_-]?exists|version[_-]?conflict|conflict/.test(value),\n );\n } catch {\n return false;\n }\n}\n\nasync function withRetries<T>(input: {\n attempts: number;\n backoffMs: number;\n action: (attempt: number) => Promise<T>;\n}): Promise<T> {\n const attempts = Math.max(1, input.attempts);\n let lastError: unknown = null;\n for (let attempt = 1; attempt <= attempts; attempt += 1) {\n try {\n return await input.action(attempt);\n } catch (err: any) {\n lastError = err;\n const retryable = Boolean(err?.retryable);\n const isLast = attempt >= attempts;\n if (!retryable || isLast) {\n break;\n }\n const backoff = Math.max(0, input.backoffMs) * attempt;\n await sleep(backoff);\n }\n }\n throw lastError;\n}\n\nasync function postPublishBundle(input: {\n publishUrl: string;\n token?: string;\n apiKey?: string;\n metadataHeaders?: {\n meta: string;\n signature: string;\n };\n versionConflictPolicy: \"fail\" | \"allow\";\n releaseChannel: string;\n registryTarget?: string;\n idempotencyKey?: string;\n timeoutMs: number;\n retryAttempts: number;\n retryBackoffMs: number;\n payload: unknown;\n}) {\n return withRetries({\n attempts: input.retryAttempts,\n backoffMs: input.retryBackoffMs,\n action: async (attempt) => {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), input.timeoutMs);\n try {\n const headers = new Headers({ \"content-type\": \"application/json\" });\n if (input.token) {\n headers.set(\"authorization\", `Bearer ${input.token}`);\n }\n if (input.apiKey) {\n headers.set(\"x-api-key\", input.apiKey);\n }\n if (input.metadataHeaders) {\n headers.set(\"x-xapps-meta\", input.metadataHeaders.meta);\n headers.set(\"x-xapps-meta-signature\", input.metadataHeaders.signature);\n }\n headers.set(\"x-xapps-version-conflict-policy\", input.versionConflictPolicy);\n headers.set(\"x-xapps-release-channel\", input.releaseChannel);\n if (input.registryTarget) {\n headers.set(\"x-xapps-registry-target\", input.registryTarget);\n }\n if (input.idempotencyKey) {\n headers.set(\"x-idempotency-key\", input.idempotencyKey);\n }\n const res = await fetch(input.publishUrl, {\n method: \"POST\",\n headers,\n body: JSON.stringify(input.payload),\n signal: controller.signal,\n });\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n if (res.status === 409) {\n const details = normalizeRemoteErrorDetails(body);\n const looksLikeConflict =\n detectPublishConflict(body) || details.includes(\"already_exists\");\n if (looksLikeConflict) {\n return {\n status: res.status,\n attempt,\n outcome: \"already_exists\" as const,\n detail: details,\n };\n }\n }\n const message = buildRemoteHttpFailureMessage({\n channel: \"publish\",\n status: res.status,\n url: input.publishUrl,\n bodyText: body,\n });\n throw makeRetryableError(message, isRetryableStatus(res.status));\n }\n const contentType = String(res.headers.get(\"content-type\") || \"\").toLowerCase();\n if (contentType.includes(\"application/json\")) {\n const payloadText = await res.text().catch(() => \"\");\n const trimmed = payloadText.trim();\n if (trimmed.length > 0) {\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed);\n } catch {\n throw makeRetryableError(\n `Remote publish returned malformed JSON ack url=${input.publishUrl}`,\n false,\n );\n }\n if (isPlainObject(parsed) && (parsed as any).ok === false) {\n const detail = normalizeRemoteErrorDetails(trimmed);\n throw makeRetryableError(\n `Remote publish rejected by ack url=${input.publishUrl} ${detail}`,\n false,\n );\n }\n if (isPlainObject(parsed)) {\n const ack = parsePublishAck(parsed);\n const outcome = ack.outcome || \"\";\n if (outcome === \"updated\") {\n return {\n status: res.status,\n attempt,\n outcome: \"updated\" as const,\n ...(ack.releaseId ? { releaseId: ack.releaseId } : {}),\n ...(ack.registryEntry ? { registryEntry: ack.registryEntry } : {}),\n ...(ack.provider ? { provider: ack.provider } : {}),\n };\n }\n if (outcome === \"already_exists\") {\n return {\n status: res.status,\n attempt,\n outcome: \"already_exists\" as const,\n ...(ack.releaseId ? { releaseId: ack.releaseId } : {}),\n ...(ack.registryEntry ? { registryEntry: ack.registryEntry } : {}),\n ...(ack.provider ? { provider: ack.provider } : {}),\n };\n }\n if (ack.hasOutcomeSignal && !outcome) {\n throw makeRetryableError(\n `Remote publish returned unsupported outcome url=${input.publishUrl}`,\n false,\n );\n }\n if (ack.releaseId || ack.registryEntry || ack.provider) {\n return {\n status: res.status,\n attempt,\n outcome: \"created\" as const,\n ...(ack.releaseId ? { releaseId: ack.releaseId } : {}),\n ...(ack.registryEntry ? { registryEntry: ack.registryEntry } : {}),\n ...(ack.provider ? { provider: ack.provider } : {}),\n };\n }\n }\n }\n }\n return { status: res.status, attempt, outcome: \"created\" as const };\n } catch (err: any) {\n if (err?.name === \"AbortError\") {\n throw makeRetryableError(\n `Remote publish timed out after ${input.timeoutMs}ms url=${input.publishUrl}`,\n true,\n );\n }\n if (err?.retryable) {\n throw err;\n }\n throw makeRetryableError(\n `Remote publish request failed url=${input.publishUrl} cause=${err?.message || String(err)}`,\n true,\n );\n } finally {\n clearTimeout(timer);\n }\n },\n });\n}\n\nasync function runPublish(args: CliArgs) {\n const from = argString(args, \"from\");\n if (!from) {\n throw new Error(\"Missing required argument: --from <manifest.json>\");\n }\n const dryRun = argFlag(args, \"dry-run\");\n const force = argFlag(args, \"force\");\n const filePath = path.resolve(process.cwd(), from);\n const sourceManifestObject = readJsonFile(from) as Record<string, unknown>;\n if (\n !sourceManifestObject ||\n typeof sourceManifestObject !== \"object\" ||\n Array.isArray(sourceManifestObject)\n ) {\n throw new CliError(\"CLI_INVALID_ARGS\", `Manifest file must contain a JSON object: ${filePath}`);\n }\n const replaceRules = [\n ...argStrings(args, \"replace\").map(parseManifestReplaceLiteral),\n ...argStrings(args, \"replace-env\").map(parseManifestReplaceEnv),\n ];\n const bumpVersionKind = parseVersionBumpKind(argString(args, \"bump-version\"));\n const writeManifestVersion = argFlag(args, \"write-manifest-version\");\n const allowUnresolvedPlaceholders = argFlag(args, \"allow-unresolved-placeholders\");\n if (writeManifestVersion && !bumpVersionKind) {\n throw new CliError(\n \"CLI_INVALID_ARGS\",\n \"--write-manifest-version requires --bump-version patch|minor|major\",\n );\n }\n\n let manifestSourceForPublish = JSON.parse(JSON.stringify(sourceManifestObject)) as Record<\n string,\n unknown\n >;\n if (replaceRules.length > 0) {\n manifestSourceForPublish = applyManifestReplaceRulesDeep(\n manifestSourceForPublish,\n replaceRules,\n );\n }\n const sourceVersionBeforeBump = String(manifestSourceForPublish.version ?? \"\").trim();\n let sourceVersionAfterBump = sourceVersionBeforeBump;\n if (bumpVersionKind) {\n sourceVersionAfterBump = bumpSemverVersionOrThrow(sourceVersionBeforeBump, bumpVersionKind);\n manifestSourceForPublish.version = sourceVersionAfterBump;\n }\n const unresolvedPlaceholders = findUnresolvedPlaceholderTokens(manifestSourceForPublish);\n if (unresolvedPlaceholders.length > 0 && !allowUnresolvedPlaceholders) {\n throw new CliError(\n \"CLI_INVALID_ARGS\",\n `Manifest contains unresolved placeholders after replacements: ${unresolvedPlaceholders.join(\", \")}`,\n { placeholders: unresolvedPlaceholders, manifest: filePath },\n );\n }\n const manifest = parseXappManifest(manifestSourceForPublish);\n const { profile } = getProfile(args);\n const publishUrlRaw =\n argString(args, \"publish-url\") || process.env.XAPPS_CLI_PUBLISH_URL || profile.publishUrl;\n const publishUrl = publishUrlRaw ? parseHttpUrlOrThrow(publishUrlRaw, \"--publish-url\") : \"\";\n const publisherGatewayUrlRaw =\n argString(args, \"publisher-gateway-url\") || process.env.XAPPS_CLI_PUBLISHER_GATEWAY_URL;\n const publisherGatewayUrl = publisherGatewayUrlRaw\n ? parseHttpUrlOrThrow(publisherGatewayUrlRaw, \"--publisher-gateway-url\")\n : \"\";\n const publisherGatewayApiBaseUrl = publisherGatewayUrl\n ? normalizePublisherGatewayApiBaseUrl(publisherGatewayUrl)\n : \"\";\n const targetClientSlug = argString(args, \"target-client-slug\", \"target_client_slug\");\n const token = argString(args, \"token\") || process.env.XAPPS_CLI_TOKEN || profile.token;\n const apiKey =\n argString(args, \"api-key\", \"apiKey\") || process.env.XAPPS_CLI_API_KEY || profile.apiKey;\n const signingKey =\n argString(args, \"signing-key\") || process.env.XAPPS_CLI_SIGNING_KEY || profile.signingKey;\n const versionConflictPolicy = parseVersionConflictPolicy(\n argString(args, \"version-conflict\"),\n profile.versionConflict || \"fail\",\n );\n const releaseChannel = parseReleaseLabel(\n argString(args, \"release-channel\") ||\n process.env.XAPPS_CLI_RELEASE_CHANNEL ||\n profile.releaseChannel,\n \"stable\",\n \"--release-channel\",\n );\n const registryTarget = parseReleaseLabel(\n argString(args, \"registry-target\") ||\n process.env.XAPPS_CLI_REGISTRY_TARGET ||\n profile.registryTarget,\n \"\",\n \"--registry-target\",\n );\n const retryAttempts = parsePositiveIntOrThrow(\n argString(args, \"retry-attempts\"),\n 1,\n \"--retry-attempts\",\n );\n const retryBackoffMs = parsePositiveIntOrThrow(\n argString(args, \"retry-backoff-ms\"),\n 250,\n \"--retry-backoff-ms\",\n );\n const timeoutMsStrict = parsePositiveIntOrThrow(\n argString(args, \"timeout-ms\"),\n 10000,\n \"--timeout-ms\",\n );\n\n let manifestForPublish = manifest as Record<string, unknown>;\n if (targetClientSlug) {\n if (!publisherGatewayApiBaseUrl) {\n throw new CliError(\n \"CLI_INVALID_ARGS\",\n \"Resolving --target-client-slug requires --publisher-gateway-url (tenant slug lookup uses publisher API).\",\n { target_client_slug: targetClientSlug },\n );\n }\n const client = createPublisherApiClient({\n baseUrl: publisherGatewayApiBaseUrl,\n apiKey,\n token,\n });\n let clientsPayload: { items: Array<Record<string, unknown>> };\n try {\n clientsPayload = (await client.listClients()) as { items: Array<Record<string, unknown>> };\n } catch (err: any) {\n if (err instanceof PublisherApiClientError) {\n throw new CliError(\n `CLI_${err.code}`,\n `Publisher tenant lookup failed: ${err.message}`,\n {\n url: publisherGatewayUrl,\n api_base_url: publisherGatewayApiBaseUrl,\n status: err.status,\n details: err.details,\n target_client_slug: targetClientSlug,\n },\n { exitCode: 4 },\n );\n }\n throw err;\n }\n const matches = clientsPayload.items.filter(\n (item) => String(item.slug || \"\").trim() === targetClientSlug,\n );\n if (matches.length === 0) {\n throw new CliError(\n \"CLI_INVALID_ARGS\",\n `Tenant slug not found via publisher API: ${targetClientSlug}`,\n { target_client_slug: targetClientSlug, api_base_url: publisherGatewayApiBaseUrl },\n );\n }\n if (matches.length > 1) {\n throw new CliError(\n \"CLI_INVALID_ARGS\",\n `Tenant slug resolved ambiguously via publisher API: ${targetClientSlug}`,\n { target_client_slug: targetClientSlug, matches: matches.map((m) => m.id || m.slug) },\n );\n }\n const resolvedClientId = String(matches[0]?.id || \"\").trim();\n if (!resolvedClientId) {\n throw new CliError(\n \"CLI_INVALID_ARGS\",\n `Publisher API returned tenant without id for slug: ${targetClientSlug}`,\n { target_client_slug: targetClientSlug, match: matches[0] },\n );\n }\n manifestForPublish = {\n ...(manifest as Record<string, unknown>),\n target_client_id: resolvedClientId,\n };\n }\n\n if (\n !Object.prototype.hasOwnProperty.call(manifestForPublish, \"target_client_id\") ||\n !String((manifestForPublish as any).target_client_id || \"\").trim()\n ) {\n throw new CliError(\n \"CLI_INVALID_ARGS\",\n \"Manifest publish requires target_client_id (tenant-aware publish is required). Use manifest.target_client_id or --target-client-slug with --publisher-gateway-url.\",\n { manifest: filePath },\n );\n }\n\n const manifestJson = JSON.stringify(manifestForPublish);\n const manifestSha256 = createHash(\"sha256\").update(manifestJson).digest(\"hex\");\n const idempotencyKey =\n argString(args, \"idempotency-key\") ||\n `xapps-cli:${manifest.slug}:${manifest.version}:${manifestSha256.slice(0, 16)}`;\n const outPath = resolvePublishBundlePath(argString(args, \"out\"), manifest.slug, manifest.version);\n\n const summary = {\n slug: manifest.slug,\n version: manifest.version,\n tools: manifest.tools.length,\n widgets: manifest.widgets.length,\n manifest_sha256: manifestSha256,\n release_channel: releaseChannel,\n ...(registryTarget ? { registry_target: registryTarget } : {}),\n };\n\n if (dryRun) {\n console.log(\n `Publish dry-run (no deploy)\\nManifest: ${filePath}\\nBundle target: ${outPath}\\nRemote target: ${publishUrl || \"(none)\"}\\nSummary: ${JSON.stringify(summary)}`,\n );\n return;\n }\n\n if (!argFlag(args, \"yes\")) {\n await confirmPublishOrThrow(summary);\n }\n\n if (!force && fs.existsSync(outPath)) {\n throw new Error(`Publish bundle already exists: ${outPath} (use --force to overwrite)`);\n }\n\n if (writeManifestVersion) {\n if (sourceVersionBeforeBump !== sourceVersionAfterBump) {\n const sourceUpdated = {\n ...(sourceManifestObject as Record<string, unknown>),\n version: sourceVersionAfterBump,\n };\n fs.writeFileSync(filePath, `${JSON.stringify(sourceUpdated, null, 2)}\\n`);\n }\n }\n\n const bundle = {\n schema_version: \"xapps.publish.v0\",\n generated_at: new Date().toISOString(),\n manifest_source: filePath,\n summary,\n ...(replaceRules.length > 0\n ? {\n manifest_transforms: {\n replacements: replaceRules.map((rule) => ({\n from: rule.from,\n source: rule.source,\n ...(rule.sourceName ? { source_name: rule.sourceName } : {}),\n })),\n ...(bumpVersionKind\n ? {\n version_bump: {\n kind: bumpVersionKind,\n from: sourceVersionBeforeBump,\n to: sourceVersionAfterBump,\n ...(writeManifestVersion ? { wrote_source_manifest_version: true } : {}),\n },\n }\n : {}),\n },\n }\n : bumpVersionKind\n ? {\n manifest_transforms: {\n version_bump: {\n kind: bumpVersionKind,\n from: sourceVersionBeforeBump,\n to: sourceVersionAfterBump,\n ...(writeManifestVersion ? { wrote_source_manifest_version: true } : {}),\n },\n },\n }\n : {}),\n release: {\n channel: releaseChannel,\n ...(registryTarget ? { registry_target: registryTarget } : {}),\n version_conflict_policy: versionConflictPolicy,\n },\n manifest: manifestForPublish,\n };\n\n fs.mkdirSync(path.dirname(outPath), { recursive: true });\n fs.writeFileSync(outPath, JSON.stringify(bundle, null, 2));\n const lines: string[] = [\n `Publish bundle created: ${outPath}`,\n `Summary: ${JSON.stringify(summary)}`,\n ];\n const metadataPayload = {\n generated_at: bundle.generated_at,\n idempotency_key: idempotencyKey,\n manifest_sha256: manifestSha256,\n slug: manifest.slug,\n version: manifest.version,\n release_channel: releaseChannel,\n ...(registryTarget ? { registry_target: registryTarget } : {}),\n };\n const metadataJson = stableStringify(metadataPayload);\n const metadataSignature = signingKey\n ? `hmac-sha256:${base64url(createHmac(\"sha256\", signingKey).update(metadataJson).digest())}`\n : \"\";\n if (publishUrl) {\n const remote = await postPublishBundle({\n publishUrl,\n token,\n apiKey,\n metadataHeaders: signingKey\n ? { meta: metadataJson, signature: metadataSignature }\n : undefined,\n versionConflictPolicy,\n releaseChannel,\n registryTarget,\n idempotencyKey,\n timeoutMs: timeoutMsStrict,\n retryAttempts,\n retryBackoffMs,\n payload: bundle,\n });\n if (remote.outcome === \"already_exists\") {\n if (versionConflictPolicy === \"allow\") {\n lines.push(\n `Remote publish version conflict allowed: outcome=already_exists url=${publishUrl} attempts=${remote.attempt}`,\n );\n if (remote.releaseId || remote.registryEntry || remote.provider) {\n lines.push(\n `Remote release metadata: release_id=${remote.releaseId || \"-\"} registry_entry=${remote.registryEntry || \"-\"} provider=${remote.provider || \"-\"}`,\n );\n }\n console.log(lines.join(\"\\n\"));\n return;\n }\n throw new CliError(\n \"CLI_VERSION_CONFLICT\",\n `Remote publish version conflict: already_exists url=${publishUrl} (set --version-conflict allow to continue)`,\n { url: publishUrl, outcome: remote.outcome },\n { exitCode: 3 },\n );\n }\n lines.push(\n `Remote publish delivered: status=${remote.status} url=${publishUrl} attempts=${remote.attempt} outcome=${remote.outcome}`,\n );\n if (remote.releaseId || remote.registryEntry || remote.provider) {\n lines.push(\n `Remote release metadata: release_id=${remote.releaseId || \"-\"} registry_entry=${remote.registryEntry || \"-\"} provider=${remote.provider || \"-\"}`,\n );\n }\n }\n if (publisherGatewayApiBaseUrl) {\n try {\n const client = createPublisherApiClient({\n baseUrl: publisherGatewayApiBaseUrl,\n apiKey,\n token,\n });\n const result = await client.importAndPublishManifest(manifestForPublish);\n const versionStatus =\n result && result.version && typeof result.version === \"object\"\n ? String((result.version as any).status || \"\")\n : \"\";\n lines.push(\n `Publisher gateway import+publish delivered: base=${publisherGatewayApiBaseUrl} xapp_id=${result.xappId} version_id=${result.versionId}${versionStatus ? ` status=${versionStatus}` : \"\"}`,\n );\n } catch (err: any) {\n if (err instanceof PublisherApiClientError) {\n if (err.code === \"PUBLISHER_API_CONFLICT\") {\n const conflictCode = String((err.details as any)?.code || \"\").trim();\n const isVersionConflict =\n conflictCode === \"VERSION_CONFLICT\" ||\n /version.*exist/i.test(String(err.message || \"\"));\n if (isVersionConflict) {\n if (versionConflictPolicy === \"allow\") {\n lines.push(\n `Publisher gateway version conflict allowed: base=${publisherGatewayApiBaseUrl} outcome=already_exists`,\n );\n console.log(lines.join(\"\\n\"));\n return;\n }\n throw new CliError(\n \"CLI_VERSION_CONFLICT\",\n `Publisher gateway version conflict: already_exists base=${publisherGatewayApiBaseUrl} (set --version-conflict allow to continue)`,\n {\n url: publisherGatewayUrl,\n api_base_url: publisherGatewayApiBaseUrl,\n status: err.status,\n details: err.details,\n },\n { exitCode: 3 },\n );\n }\n }\n throw new CliError(\n `CLI_${err.code}`,\n `Publisher gateway publish failed: ${err.message}`,\n {\n url: publisherGatewayUrl,\n api_base_url: publisherGatewayApiBaseUrl,\n status: err.status,\n details: err.details,\n },\n { exitCode: 4 },\n );\n }\n throw err;\n }\n }\n console.log(lines.join(\"\\n\"));\n}\n\ntype PublishBundleSummary = {\n bundle_path: string;\n generated_at: string;\n slug: string;\n version: string;\n tools: number;\n widgets: number;\n manifest_sha256: string;\n};\n\ntype RemoteLogsResult = {\n entries: PublishBundleSummary[];\n nextCursor?: string;\n leaseId?: string;\n checkpoint?: string;\n};\n\nfunction normalizeBundleSummary(\n value: unknown,\n fallbackPath: string,\n fallbackGeneratedAt = \"\",\n): PublishBundleSummary | null {\n if (!isPlainObject(value)) return null;\n const bundlePath =\n typeof value.bundle_path === \"string\"\n ? value.bundle_path\n : typeof value.path === \"string\"\n ? value.path\n : fallbackPath;\n const generatedAt =\n typeof value.generated_at === \"string\"\n ? value.generated_at\n : typeof value.created_at === \"string\"\n ? value.created_at\n : fallbackGeneratedAt;\n const slug = typeof value.slug === \"string\" ? value.slug.trim() : \"\";\n const version = typeof value.version === \"string\" ? value.version.trim() : \"\";\n const tools = typeof value.tools === \"number\" ? value.tools : NaN;\n const widgets = typeof value.widgets === \"number\" ? value.widgets : NaN;\n const manifestSha256 = typeof value.manifest_sha256 === \"string\" ? value.manifest_sha256 : \"\";\n if (!bundlePath || !generatedAt || !slug || !version) return null;\n if (!Number.isFinite(tools) || tools < 0 || !Number.isFinite(widgets) || widgets < 0) return null;\n return {\n bundle_path: bundlePath,\n generated_at: generatedAt,\n slug,\n version,\n tools,\n widgets,\n manifest_sha256: manifestSha256,\n };\n}\n\nfunction toBundleSummary(bundlePath: string, payload: unknown): PublishBundleSummary {\n if (!isPlainObject(payload)) {\n throw new Error(`Invalid bundle payload in ${bundlePath}`);\n }\n if (payload.schema_version !== \"xapps.publish.v0\") {\n throw new Error(`Unsupported bundle schema in ${bundlePath}`);\n }\n const summary = isPlainObject(payload.summary) ? payload.summary : {};\n return {\n bundle_path: bundlePath,\n generated_at: typeof payload.generated_at === \"string\" ? payload.generated_at : \"\",\n slug: typeof summary.slug === \"string\" ? summary.slug : \"\",\n version: typeof summary.version === \"string\" ? summary.version : \"\",\n tools: typeof summary.tools === \"number\" ? summary.tools : 0,\n widgets: typeof summary.widgets === \"number\" ? summary.widgets : 0,\n manifest_sha256: typeof summary.manifest_sha256 === \"string\" ? summary.manifest_sha256 : \"\",\n };\n}\n\nfunction collectBundleFiles(dirPath: string): string[] {\n const out: string[] = [];\n if (!fs.existsSync(dirPath)) {\n return out;\n }\n const entries = fs.readdirSync(dirPath, { withFileTypes: true });\n for (const entry of entries) {\n const full = path.join(dirPath, entry.name);\n if (entry.isDirectory()) {\n out.push(...collectBundleFiles(full));\n continue;\n }\n if (entry.isFile() && entry.name === \"bundle.json\") {\n out.push(full);\n }\n }\n return out;\n}\n\nasync function fetchRemoteLogs(input: {\n logsUrl: string;\n token?: string;\n apiKey?: string;\n timeoutMs: number;\n limit: number;\n cursor?: string;\n leaseId?: string;\n checkpoint?: string;\n severity?: string;\n since?: string;\n until?: string;\n retryAttempts: number;\n retryBackoffMs: number;\n}): Promise<RemoteLogsResult> {\n return withRetries({\n attempts: input.retryAttempts,\n backoffMs: input.retryBackoffMs,\n action: async () => {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), input.timeoutMs);\n try {\n const headers = new Headers();\n if (input.token) headers.set(\"authorization\", `Bearer ${input.token}`);\n if (input.apiKey) headers.set(\"x-api-key\", input.apiKey);\n const url = new URL(input.logsUrl);\n if (!url.searchParams.has(\"limit\")) {\n url.searchParams.set(\"limit\", String(input.limit));\n }\n if (input.cursor) url.searchParams.set(\"cursor\", input.cursor);\n if (input.leaseId) url.searchParams.set(\"lease_id\", input.leaseId);\n if (input.checkpoint) url.searchParams.set(\"checkpoint\", input.checkpoint);\n if (input.severity) url.searchParams.set(\"severity\", input.severity);\n if (input.since) url.searchParams.set(\"since\", input.since);\n if (input.until) url.searchParams.set(\"until\", input.until);\n const res = await fetch(url, {\n method: \"GET\",\n headers,\n signal: controller.signal,\n });\n if (!res.ok) {\n const body = await res.text().catch(() => \"\");\n const message = buildRemoteHttpFailureMessage({\n channel: \"logs\",\n status: res.status,\n url: input.logsUrl,\n bodyText: body,\n });\n throw makeRetryableError(message, isRetryableStatus(res.status));\n }\n const payload = await res.json();\n const rowsRaw = Array.isArray(payload)\n ? payload\n : isPlainObject(payload) && Array.isArray((payload as any).entries)\n ? (payload as any).entries\n : null;\n if (!rowsRaw) {\n throw makeRetryableError(\n `Remote logs returned malformed payload url=${input.logsUrl}`,\n false,\n );\n }\n const rows = rowsRaw\n .map((entry) => normalizeBundleSummary(entry, \"remote://logs\"))\n .filter((entry): entry is PublishBundleSummary => !!entry);\n if (rowsRaw.length > 0 && rows.length === 0) {\n throw makeRetryableError(\n `Remote logs returned malformed entries url=${input.logsUrl}`,\n false,\n );\n }\n const nextCursor =\n isPlainObject(payload) &&\n (typeof (payload as any).next_cursor === \"string\" ||\n typeof (payload as any).nextCursor === \"string\")\n ? String((payload as any).next_cursor ?? (payload as any).nextCursor ?? \"\")\n : \"\";\n const payloadHasLease =\n isPlainObject(payload) &&\n (Object.prototype.hasOwnProperty.call(payload as object, \"lease_id\") ||\n Object.prototype.hasOwnProperty.call(payload as object, \"leaseId\"));\n const payloadHasCheckpoint =\n isPlainObject(payload) &&\n (Object.prototype.hasOwnProperty.call(payload as object, \"checkpoint\") ||\n Object.prototype.hasOwnProperty.call(payload as object, \"checkpoint_token\") ||\n Object.prototype.hasOwnProperty.call(payload as object, \"checkpointToken\"));\n const leaseId =\n isPlainObject(payload) &&\n (typeof (payload as any).lease_id === \"string\" ||\n typeof (payload as any).leaseId === \"string\")\n ? String((payload as any).lease_id ?? (payload as any).leaseId ?? \"\")\n : \"\";\n const checkpoint =\n isPlainObject(payload) &&\n (typeof (payload as any).checkpoint === \"string\" ||\n typeof (payload as any).checkpoint_token === \"string\" ||\n typeof (payload as any).checkpointToken === \"string\")\n ? String(\n (payload as any).checkpoint ??\n (payload as any).checkpoint_token ??\n (payload as any).checkpointToken ??\n \"\",\n )\n : \"\";\n if (payloadHasLease && !leaseId) {\n throw makeRetryableError(\n `Remote logs returned malformed lease_id field url=${input.logsUrl}`,\n false,\n );\n }\n if (payloadHasCheckpoint && !checkpoint) {\n throw makeRetryableError(\n `Remote logs returned malformed checkpoint field url=${input.logsUrl}`,\n false,\n );\n }\n return {\n entries: rows\n .sort((a, b) => String(b.generated_at).localeCompare(String(a.generated_at)))\n .slice(0, input.limit),\n ...(nextCursor ? { nextCursor } : {}),\n ...(leaseId ? { leaseId } : {}),\n ...(checkpoint ? { checkpoint } : {}),\n };\n } catch (err: any) {\n if (err?.name === \"AbortError\") {\n throw makeRetryableError(\n `Remote logs timed out after ${input.timeoutMs}ms url=${input.logsUrl}`,\n true,\n );\n }\n if (err?.retryable) {\n throw err;\n }\n throw makeRetryableError(\n `Remote logs request failed url=${input.logsUrl} cause=${err?.message || String(err)}`,\n true,\n );\n } finally {\n clearTimeout(timer);\n }\n },\n });\n}\n\nasync function runLogs(args: CliArgs) {\n const { profile } = getProfile(args);\n const json = argFlag(args, \"json\");\n const limit = parsePositiveIntOrThrow(argString(args, \"limit\"), 10, \"--limit\");\n const from = argString(args, \"from\");\n const dir = path.resolve(process.cwd(), argString(args, \"dir\") || DEFAULT_PUBLISH_BUNDLES_DIR);\n const logsUrlRaw =\n argString(args, \"logs-url\") || process.env.XAPPS_CLI_LOGS_URL || profile.logsUrl;\n const logsUrl = logsUrlRaw ? parseHttpUrlOrThrow(logsUrlRaw, \"--logs-url\") : \"\";\n const token = argString(args, \"token\") || process.env.XAPPS_CLI_TOKEN || profile.token;\n const apiKey =\n argString(args, \"api-key\", \"apiKey\") || process.env.XAPPS_CLI_API_KEY || profile.apiKey;\n const cursor = argString(args, \"cursor\");\n const leaseId = argString(args, \"lease-id\");\n const checkpoint = argString(args, \"checkpoint\");\n const severity = argString(args, \"severity\");\n const since = argString(args, \"since\");\n const until = argString(args, \"until\");\n const follow = argFlag(args, \"follow\");\n const followCursorFile = argString(args, \"follow-cursor-file\");\n const followIntervalMs = parsePositiveIntOrThrow(\n argString(args, \"follow-interval-ms\"),\n 2000,\n \"--follow-interval-ms\",\n );\n const followMaxCycles = parsePositiveIntOrThrow(\n argString(args, \"follow-max-cycles\"),\n 1,\n \"--follow-max-cycles\",\n );\n const timeoutMs = parsePositiveIntOrThrow(argString(args, \"timeout-ms\"), 10000, \"--timeout-ms\");\n const retryAttempts = parsePositiveIntOrThrow(\n argString(args, \"retry-attempts\"),\n 1,\n \"--retry-attempts\",\n );\n const retryBackoffMs = parsePositiveIntOrThrow(\n argString(args, \"retry-backoff-ms\"),\n 250,\n \"--retry-backoff-ms\",\n );\n\n const localSummaries = logsUrl\n ? null\n : (() => {\n const bundleFiles = from ? [path.resolve(process.cwd(), from)] : collectBundleFiles(dir);\n if (!bundleFiles.length) {\n throw new Error(\n from\n ? `Bundle not found: ${path.resolve(process.cwd(), from)}`\n : `No bundles found in ${dir}`,\n );\n }\n return bundleFiles\n .map((file) => toBundleSummary(file, readJsonFile(file)))\n .sort((a, b) => String(b.generated_at).localeCompare(String(a.generated_at)))\n .slice(0, limit);\n })();\n\n async function printRows(\n rows: PublishBundleSummary[],\n nextCursor?: string,\n leaseId?: string,\n checkpoint?: string,\n ) {\n if (!rows.length) return;\n if (json) {\n console.log(\n JSON.stringify(\n {\n count: rows.length,\n entries: rows,\n ...(nextCursor ? { next_cursor: nextCursor } : {}),\n ...(leaseId ? { lease_id: leaseId } : {}),\n ...(checkpoint ? { checkpoint } : {}),\n },\n null,\n 2,\n ),\n );\n return;\n }\n const lines: string[] = [`Logs entries: ${rows.length}`];\n for (const entry of rows) {\n lines.push(\n [\n `- ${entry.slug}@${entry.version}`,\n `generated_at=${entry.generated_at || \"n/a\"}`,\n `tools=${entry.tools}`,\n `widgets=${entry.widgets}`,\n `bundle=${entry.bundle_path}`,\n ].join(\" \"),\n );\n }\n if (nextCursor) lines.push(`next_cursor=${nextCursor}`);\n if (leaseId) lines.push(`lease_id=${leaseId}`);\n if (checkpoint) lines.push(`checkpoint=${checkpoint}`);\n console.log(lines.join(\"\\n\"));\n }\n\n if (!logsUrl && localSummaries) {\n if (!localSummaries.length) {\n throw new Error(\n from\n ? `Bundle not found: ${path.resolve(process.cwd(), from)}`\n : `No bundles found in ${dir}`,\n );\n }\n await printRows(localSummaries);\n return;\n }\n\n if (!logsUrl) return;\n\n let currentCursor = cursor || \"\";\n let currentLeaseId = leaseId || \"\";\n let currentCheckpoint = checkpoint || \"\";\n if (followCursorFile) {\n const state = loadLogsResumeState(followCursorFile);\n if (!currentCursor && state.cursor) currentCursor = state.cursor;\n if (state.leaseId) currentLeaseId = state.leaseId;\n if (state.checkpoint) currentCheckpoint = state.checkpoint;\n }\n let cycles = 0;\n let seen = 0;\n while (true) {\n cycles += 1;\n try {\n const remote = await fetchRemoteLogs({\n logsUrl,\n token,\n apiKey,\n timeoutMs,\n limit,\n cursor: currentCursor || undefined,\n leaseId: currentLeaseId || undefined,\n checkpoint: currentCheckpoint || undefined,\n severity,\n since,\n until,\n retryAttempts,\n retryBackoffMs,\n });\n if (remote.entries.length) {\n seen += remote.entries.length;\n await printRows(remote.entries, remote.nextCursor, remote.leaseId, remote.checkpoint);\n } else if (!follow && seen === 0) {\n throw new Error(`No log entries returned by remote endpoint: ${logsUrl}`);\n }\n if (remote.leaseId) currentLeaseId = remote.leaseId;\n if (remote.checkpoint) currentCheckpoint = remote.checkpoint;\n if (remote.nextCursor) {\n currentCursor = remote.nextCursor;\n }\n if (followCursorFile) {\n saveLogsResumeState(followCursorFile, {\n ...(currentCursor ? { cursor: currentCursor } : {}),\n ...(currentLeaseId ? { leaseId: currentLeaseId } : {}),\n ...(currentCheckpoint ? { checkpoint: currentCheckpoint } : {}),\n });\n }\n } catch (err: any) {\n if (!follow) throw err;\n console.error(`[logs-follow] reconnecting after error: ${err?.message || String(err)}`);\n }\n if (!follow) return;\n if (cycles >= followMaxCycles) return;\n await sleep(followIntervalMs);\n }\n}\n\nasync function runTunnel(args: CliArgs) {\n const { profile } = getProfile(args);\n const target = argString(args, \"target\");\n if (!target) {\n throw new Error(\"Missing required argument: --target <base-url>\");\n }\n const targetBase = parseHttpUrlOrThrow(String(target).replace(/\\/$/, \"\"), \"--target\").replace(\n /\\/$/,\n \"\",\n );\n const targetHostname = new URL(targetBase).hostname.toLowerCase();\n const allowTargetHosts = parseCsvSet(\n argString(args, \"allow-target-hosts\") || process.env.XAPPS_CLI_TUNNEL_ALLOW_TARGET_HOSTS,\n \"127.0.0.1,localhost,::1\",\n );\n if (!allowTargetHosts.has(targetHostname)) {\n throw new CliError(\n \"CLI_TUNNEL_TARGET_NOT_ALLOWED\",\n `Tunnel target host is not allowed: ${targetHostname} (allowlist=${Array.from(allowTargetHosts).join(\",\")})`,\n { targetHostname, allowlist: Array.from(allowTargetHosts) },\n );\n }\n const host = argString(args, \"host\") || \"127.0.0.1\";\n const port = parseListenPortOrThrow(argString(args, \"listen-port\"), 4041);\n const sessionFile = argString(args, \"session-file\");\n const sessionIdArg = argString(args, \"session-id\");\n const sessionPolicy = parseTunnelSessionPolicy(argString(args, \"session-policy\"), \"reuse\");\n const sessionStateFromFile = sessionFile ? loadTunnelSessionState(sessionFile) : null;\n let sessionId = \"\";\n let sessionSource: \"generated\" | \"arg\" | \"file\" | \"rotated\" = \"generated\";\n if (sessionPolicy === \"rotate\") {\n if (sessionIdArg) {\n sessionId = sessionIdArg;\n sessionSource = \"arg\";\n } else {\n sessionId = randomSessionId(\"tnl\");\n sessionSource = \"rotated\";\n }\n } else if (sessionIdArg) {\n if (\n sessionStateFromFile?.sessionId &&\n sessionStateFromFile.sessionId !== sessionIdArg &&\n sessionPolicy !== \"rotate\"\n ) {\n throw new CliError(\n \"CLI_TUNNEL_SESSION_CONFLICT\",\n `Provided --session-id does not match persisted session file (${sessionFile})`,\n {\n provided_session_id: sessionIdArg,\n persisted_session_id: sessionStateFromFile.sessionId,\n session_file: sessionFile,\n session_policy: sessionPolicy,\n },\n );\n }\n sessionId = sessionIdArg;\n sessionSource = \"arg\";\n } else if (sessionStateFromFile?.sessionId) {\n const persistedTarget = String(sessionStateFromFile.target || \"\").trim();\n if (persistedTarget && persistedTarget !== targetBase) {\n if (sessionPolicy === \"require\") {\n throw new CliError(\n \"CLI_TUNNEL_SESSION_TARGET_MISMATCH\",\n `Persisted tunnel session target does not match current --target (${persistedTarget} != ${targetBase})`,\n {\n persisted_target: persistedTarget,\n current_target: targetBase,\n session_file: sessionFile || \"\",\n },\n );\n }\n sessionId = randomSessionId(\"tnl\");\n sessionSource = \"rotated\";\n } else {\n sessionId = sessionStateFromFile.sessionId;\n sessionSource = \"file\";\n }\n } else if (sessionPolicy === \"require\") {\n throw new CliError(\n \"CLI_TUNNEL_SESSION_REQUIRED\",\n \"Session policy 'require' needs existing --session-file state or explicit --session-id\",\n {\n session_file: sessionFile || \"\",\n session_policy: sessionPolicy,\n },\n );\n } else {\n sessionId = randomSessionId(\"tnl\");\n sessionSource = \"generated\";\n }\n if (sessionFile) {\n saveTunnelSessionState(sessionFile, {\n sessionId,\n target: targetBase,\n });\n }\n const once = argFlag(args, \"once\");\n const requiredToken =\n argString(args, \"require-auth-token\") ||\n process.env.XAPPS_CLI_TUNNEL_TOKEN ||\n profile.tunnelToken ||\n undefined;\n const upstreamTimeoutMs = parsePositiveIntOrThrow(\n argString(args, \"upstream-timeout-ms\"),\n 15000,\n \"--upstream-timeout-ms\",\n );\n const retryAttempts = parsePositiveIntOrThrow(\n argString(args, \"retry-attempts\"),\n 1,\n \"--retry-attempts\",\n );\n const retryBackoffMs = parsePositiveIntOrThrow(\n argString(args, \"retry-backoff-ms\"),\n 200,\n \"--retry-backoff-ms\",\n );\n const idempotentMethods = new Set([\"GET\", \"HEAD\", \"OPTIONS\"]);\n const startedAt = new Date().toISOString();\n let proxiedRequests = 0;\n let proxyErrors = 0;\n let lastUpstreamStatus = 0;\n\n const announce = `xapps tunnel relay\\nSession: ${sessionId}\\nSession policy: ${sessionPolicy}\\nSession source: ${sessionSource}\\nListen: http://${host}:${port}\\nTarget: ${targetBase}\\nAllowlist: ${Array.from(allowTargetHosts).join(\",\")}\\nMode: local relay baseline (no external public URL)\\nUpstream timeout: ${upstreamTimeoutMs}ms`;\n if (once) {\n console.log(announce);\n return;\n }\n\n const server = http.createServer(async (req, res) => {\n const method = (req.method || \"GET\").toUpperCase();\n const requestUrl = req.url || \"/\";\n const headerToken =\n typeof req.headers[\"x-xapps-tunnel-token\"] === \"string\"\n ? req.headers[\"x-xapps-tunnel-token\"]\n : undefined;\n const authHeader =\n typeof req.headers.authorization === \"string\" ? req.headers.authorization.trim() : \"\";\n const bearerToken = authHeader.toLowerCase().startsWith(\"bearer \")\n ? authHeader.slice(7).trim()\n : undefined;\n const suppliedToken = headerToken || bearerToken;\n if (requiredToken && suppliedToken !== requiredToken) {\n res.statusCode = 401;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(\n JSON.stringify({\n ok: false,\n error: \"tunnel_auth_required\",\n message: \"Missing or invalid tunnel auth token\",\n }),\n );\n return;\n }\n\n if (requestUrl === \"/__ready\") {\n res.statusCode = 200;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(\n JSON.stringify({\n ok: true,\n tunnel: \"ready\",\n session_id: sessionId,\n session_policy: sessionPolicy,\n session_source: sessionSource,\n target: targetBase,\n }),\n );\n return;\n }\n\n if (requestUrl === \"/__status\") {\n res.statusCode = 200;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(\n JSON.stringify({\n ok: true,\n tunnel: \"status\",\n session_id: sessionId,\n session_policy: sessionPolicy,\n session_source: sessionSource,\n session_file: sessionFile || null,\n target: targetBase,\n listen: { host, port },\n started_at: startedAt,\n proxied_requests: proxiedRequests,\n proxy_errors: proxyErrors,\n last_upstream_status: lastUpstreamStatus || null,\n }),\n );\n return;\n }\n\n const body = await readRawRequestBody(req);\n const headers = new Headers();\n for (const [key, value] of Object.entries(req.headers)) {\n if (!value) continue;\n const lower = key.toLowerCase();\n if (lower === \"host\") continue;\n if (\n lower === \"connection\" ||\n lower === \"keep-alive\" ||\n lower === \"proxy-authorization\" ||\n lower === \"proxy-authenticate\" ||\n lower === \"te\" ||\n lower === \"trailers\" ||\n lower === \"transfer-encoding\" ||\n lower === \"upgrade\"\n ) {\n continue;\n }\n if (Array.isArray(value)) headers.set(key, value.join(\", \"));\n else headers.set(key, String(value));\n }\n headers.set(\n \"x-forwarded-host\",\n appendForwardedHeader(headers.get(\"x-forwarded-host\"), `${host}:${port}`),\n );\n headers.set(\n \"x-forwarded-proto\",\n appendForwardedHeader(headers.get(\"x-forwarded-proto\"), \"http\"),\n );\n headers.set(\n \"x-forwarded-port\",\n appendForwardedHeader(headers.get(\"x-forwarded-port\"), String(port)),\n );\n if (req.socket?.remoteAddress) {\n const existingForwardedFor = headers.get(\"x-forwarded-for\");\n headers.set(\n \"x-forwarded-for\",\n appendForwardedHeader(existingForwardedFor, req.socket.remoteAddress),\n );\n }\n\n const targetUrl = `${targetBase}${requestUrl}`;\n try {\n const attempts = idempotentMethods.has(method) ? retryAttempts : 1;\n const upstream = await withRetries({\n attempts,\n backoffMs: retryBackoffMs,\n action: async () => {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), upstreamTimeoutMs);\n try {\n const resUpstream = await fetch(targetUrl, {\n method,\n headers,\n body: method === \"GET\" || method === \"HEAD\" ? undefined : body,\n signal: controller.signal,\n });\n if (isRetryableStatus(resUpstream.status)) {\n throw makeRetryableError(`upstream status ${resUpstream.status}`, true);\n }\n return resUpstream;\n } catch (err: any) {\n if (err?.name === \"AbortError\") {\n throw makeRetryableError(\"upstream timeout\", true);\n }\n if (err?.retryable) throw err;\n throw makeRetryableError(err?.message || String(err), true);\n } finally {\n clearTimeout(timer);\n }\n },\n });\n const upstreamBody = Buffer.from(await upstream.arrayBuffer());\n res.statusCode = upstream.status;\n proxiedRequests += 1;\n lastUpstreamStatus = upstream.status;\n upstream.headers.forEach((value, key) => {\n if (key.toLowerCase() === \"transfer-encoding\") return;\n res.setHeader(key, value);\n });\n res.end(upstreamBody);\n console.log(\n `[tunnel] ${method} ${requestUrl} -> ${targetUrl} status=${upstream.status} bytes=${upstreamBody.length}`,\n );\n } catch (err: any) {\n proxyErrors += 1;\n const timeout = String(err?.message || \"\")\n .toLowerCase()\n .includes(\"timeout\");\n res.statusCode = timeout ? 504 : 502;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(\n JSON.stringify({\n ok: false,\n error: timeout ? \"upstream_timeout\" : \"upstream_unreachable\",\n message: err?.message || String(err),\n }),\n );\n console.error(\n `[tunnel] upstream error ${method} ${requestUrl}: ${err?.message || String(err)}`,\n );\n }\n });\n\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(port, host, () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n\n console.log(announce);\n\n await new Promise<void>((resolve) => {\n const shutdown = () => server.close(() => resolve());\n process.once(\"SIGINT\", shutdown);\n process.once(\"SIGTERM\", shutdown);\n });\n}\n\nexport async function runCli(argv: string[]) {\n try {\n const { command, args } = parseArgs(argv);\n if (!command || command === \"--help\" || command === \"-h\" || command === \"help\") {\n printUsage();\n return;\n }\n\n if (command === \"import\") {\n await runImportCommand(args, {\n argString,\n argFlag,\n readInput,\n parsePositiveIntOrThrow,\n parseManifestFromFile,\n readJsonFile,\n });\n return;\n }\n if (command === \"validate\") {\n runValidateCommand(args, {\n argString,\n argFlag,\n readInput,\n parsePositiveIntOrThrow,\n parseManifestFromFile,\n readJsonFile,\n });\n return;\n }\n if (command === \"test\") {\n runTestCommand(args, {\n argString,\n argFlag,\n readInput,\n parsePositiveIntOrThrow,\n parseManifestFromFile,\n readJsonFile,\n });\n return;\n }\n if (command === \"publish\") {\n await runPublish(args);\n return;\n }\n if (command === \"logs\") {\n await runLogs(args);\n return;\n }\n if (command === \"context\") {\n const subcommand = argString(args, \"_subcommand\");\n if (subcommand !== \"export\") {\n throw new CliError(\"CLI_INVALID_ARGS\", \"Missing required subcommand: context export\");\n }\n runContextExport(args);\n return;\n }\n if (command === \"tunnel\") {\n await runTunnel(args);\n return;\n }\n if (command === \"init\") {\n runInitCommand(args, {\n argString,\n argFlag,\n readInput,\n parsePositiveIntOrThrow,\n parseManifestFromFile,\n readJsonFile,\n });\n return;\n }\n if (command === \"dev\") {\n await runDevCommand(args, {\n argString,\n argFlag,\n shellEscapeArg,\n applyFlowCommandTemplates,\n findRepoRoot,\n readJsonFile,\n parseManifestFromFile,\n runDryRun,\n buildDevRefs,\n canonicalizeJson,\n readRequestBody,\n makeCliError: (code, message, details) => new CliError(code, message, details),\n });\n return;\n }\n if (command === \"ai\") {\n const subcommand = argString(args, \"_subcommand\");\n if (subcommand === \"plan\") {\n await runAiPlanCliCommand(args, {\n argString,\n argFlag,\n shellEscapeArg,\n applyFlowCommandTemplates,\n findRepoRoot,\n readJsonFile,\n parseManifestFromFile,\n runDryRun,\n buildDevRefs,\n canonicalizeJson,\n readRequestBody,\n makeCliError: (code, message, details) => new CliError(code, message, details),\n });\n return;\n }\n if (subcommand === \"check\") {\n await runAiCheckCliCommand(args, {\n argString,\n argFlag,\n shellEscapeArg,\n applyFlowCommandTemplates,\n findRepoRoot,\n readJsonFile,\n parseManifestFromFile,\n runDryRun,\n buildDevRefs,\n canonicalizeJson,\n readRequestBody,\n makeCliError: (code, message, details) => new CliError(code, message, details),\n });\n return;\n }\n throw new CliError(\"CLI_INVALID_ARGS\", \"Missing required subcommand: ai plan|check\");\n }\n if (command === \"publisher\") {\n await runPublisherCliCommand(args, {\n argString,\n argFlag,\n shellEscapeArg,\n applyFlowCommandTemplates,\n findRepoRoot,\n readJsonFile,\n parseManifestFromFile,\n runDryRun,\n buildDevRefs,\n canonicalizeJson,\n readRequestBody,\n makeCliError: (code, message, details) => new CliError(code, message, details),\n });\n return;\n }\n\n throw new CliError(\"CLI_UNKNOWN_COMMAND\", `Unknown command: ${command}`);\n } catch (err: any) {\n if (err instanceof CliError) throw err;\n const message = String(err?.message || err || \"Unknown CLI error\");\n let code = \"CLI_RUNTIME_ERROR\";\n if (message.includes(\"Missing required argument\")) code = \"CLI_INVALID_ARGS\";\n else if (message.includes(\"Missing required arguments\")) code = \"CLI_INVALID_ARGS\";\n else if (message.includes(\"Invalid --\")) code = \"CLI_INVALID_OPTION\";\n else if (message.includes(\"Invalid JSON\")) code = \"CLI_INVALID_JSON\";\n else if (message.includes(\"Unknown CLI profile\")) code = \"CLI_PROFILE_NOT_FOUND\";\n else if (message.includes(\"Invalid CLI config JSON\")) code = \"CLI_CONFIG_INVALID\";\n else if (message.includes(\"Unsupported --mode\")) code = \"CLI_AI_MODE_UNSUPPORTED\";\n else if (message.includes(\"Invalid AI policy JSON\")) code = \"CLI_AI_POLICY_INVALID\";\n else if (message.includes(\"ai check failed\")) code = \"CLI_AI_PLAN_INVALID\";\n else if (message.includes(\"unsupported outcome\")) code = \"CLI_REMOTE_PUBLISH_ACK_INVALID\";\n else if (message.includes(\"Remote publish\")) code = \"CLI_REMOTE_PUBLISH_ERROR\";\n else if (message.includes(\"Remote logs\")) code = \"CLI_REMOTE_LOGS_ERROR\";\n else if (message.includes(\"No bundles found\")) code = \"CLI_BUNDLE_NOT_FOUND\";\n else if (message.includes(\"Bundle not found\")) code = \"CLI_BUNDLE_NOT_FOUND\";\n throw new CliError(code, message);\n }\n}\n\nfunction shouldAutoRunCliEntrypoint(filePath: string): boolean {\n return /(?:^|[\\\\/])(?:xapps|cli(?:\\.(?:cts|mts|ts|cjs|mjs|js))?)$/.test(String(filePath || \"\"));\n}\n\nif (shouldAutoRunCliEntrypoint(String(process.argv[1] || \"\"))) {\n runCli(process.argv.slice(2)).catch((err) => {\n const code = typeof err?.code === \"string\" ? err.code : \"CLI_RUNTIME_ERROR\";\n const message = err?.message || String(err);\n console.error(`[${code}] ${message}`);\n const exitCode = Number.isInteger(err?.exitCode) ? err.exitCode : 1;\n process.exit(exitCode);\n });\n}\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\n\ntype CliArgsLike = Record<string, string | boolean>;\ntype CliErrorFactory = (code: string, message: string, details?: Record<string, unknown>) => Error;\n\nexport type DevRefStatus = {\n key: string;\n path: string;\n exists: boolean;\n};\n\ntype DevStatusDeps = {\n argFlag: (args: CliArgsLike, key: string) => boolean;\n findRepoRoot: (startDir?: string) => string | null;\n makeCliError: CliErrorFactory;\n};\n\nexport function buildDevRefs(repoRoot: string): DevRefStatus[] {\n const refs = [\n [\"pm_readme\", \"dev/engineering/pm/README.md\"],\n [\"open_points\", \"dev/engineering/pm/OPEN_POINTS.md\"],\n [\"open_list\", \"dev/engineering/pm/OPEN_LIST.md\"],\n [\"open_list_v2\", \"dev/engineering/pm/OPEN_LIST_V2.md\"],\n [\"sprint_plan\", \"dev/engineering/pm/SPRINT_PLAN.md\"],\n [\"next_steps\", \"dev/engineering/pm/NEXT_STEPS.md\"],\n [\"done_points\", \"dev/engineering/pm/DONE_POINTS.md\"],\n [\"v1_review_audit\", \"dev/engineering/audits/V1_PRODUCTION_CODEBASE_REVIEW.md\"],\n [\"open067_phase1_plan\", \"dev/engineering/audits/OPEN_067_PHASE1_INTERNAL_REPO_PLAN.md\"],\n [\"sdk_cli_ai_checklist\", \"dev/engineering/checklists/SDK_CLI_AI_CHECKLIST.md\"],\n ] as const;\n return refs.map(([key, rel]) => ({\n key,\n path: rel,\n exists: fs.existsSync(path.join(repoRoot, rel)),\n }));\n}\n\nexport function runDevStatusRefsCommand(args: CliArgsLike, deps: DevStatusDeps) {\n const repoRoot = deps.findRepoRoot();\n if (!repoRoot) {\n throw deps.makeCliError(\n \"CLI_REPO_NOT_FOUND\",\n \"xapps dev status refs is repo-only and requires the xapps monorepo checkout\",\n );\n }\n const refs = buildDevRefs(repoRoot);\n const sampleXplace = {\n publisher: {\n server: \"apps/publishers/xplace/backend/server.js\",\n readme: \"apps/publishers/xplace/backend/README.md\",\n },\n xapp: {\n manifest: \"apps/publishers/xplace/xapps/xplace-certs/manifest.json\",\n ai_policy: \"apps/publishers/xplace/xapps/xplace-certs/ai/policy.readonly.internal-v1.json\",\n },\n };\n const sampleStatus = {\n xplace_certs: {\n publisher: Object.fromEntries(\n Object.entries(sampleXplace.publisher).map(([key, rel]) => [\n key,\n { path: rel, exists: fs.existsSync(path.join(repoRoot, rel)) },\n ]),\n ),\n xapp: Object.fromEntries(\n Object.entries(sampleXplace.xapp).map(([key, rel]) => [\n key,\n { path: rel, exists: fs.existsSync(path.join(repoRoot, rel)) },\n ]),\n ),\n defaults: {\n publisher_base_url: \"http://localhost:3012\",\n gateway_base_url: \"http://localhost:3000\",\n },\n },\n };\n const payload = {\n schema_version: \"xapps.dev.status.refs.v1\",\n ok: refs.every((ref) => ref.exists),\n repo_root: repoRoot,\n refs,\n samples: sampleStatus,\n };\n if (deps.argFlag(args, \"json\")) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n console.log(\n [\n `Repo root: ${repoRoot}`,\n ...refs.map((ref) => `${ref.exists ? \"OK\" : \"MISS\"} ${ref.key} -> ${ref.path}`),\n \"Sample refs:\",\n ...Object.entries(sampleStatus.xplace_certs.publisher).map(\n ([key, item]) =>\n `${(item as any).exists ? \"OK\" : \"MISS\"} xplace.publisher.${key} -> ${(item as any).path}`,\n ),\n ...Object.entries(sampleStatus.xplace_certs.xapp).map(\n ([key, item]) =>\n `${(item as any).exists ? \"OK\" : \"MISS\"} xplace.xapp.${key} -> ${(item as any).path}`,\n ),\n ].join(\"\\n\"),\n );\n}\n\nexport function runDevCheckV1Command(args: CliArgsLike, deps: DevStatusDeps) {\n const repoRoot = deps.findRepoRoot();\n if (!repoRoot) {\n throw deps.makeCliError(\n \"CLI_REPO_NOT_FOUND\",\n \"xapps dev check v1 is repo-only and requires the xapps monorepo checkout\",\n );\n }\n const refs = buildDevRefs(repoRoot);\n const mustRead = (relPath: string) => fs.readFileSync(path.join(repoRoot, relPath), \"utf8\");\n const openList = mustRead(\"dev/engineering/pm/OPEN_LIST.md\");\n const sprintPlan = mustRead(\"dev/engineering/pm/SPRINT_PLAN.md\");\n const checks = [\n {\n key: \"refs_exist\",\n ok: refs.every((ref) => ref.exists),\n details: { missing: refs.filter((ref) => !ref.exists).map((ref) => ref.path) },\n },\n {\n key: \"v1_list_has_must_have_section\",\n ok: /Must Have for First Publisher \\/ xplace/i.test(openList),\n details: {},\n },\n {\n key: \"sprint_plan_has_scope_rules\",\n ok:\n /Scope Proposal Discipline Rule/i.test(sprintPlan) &&\n /Documentation Scope Rule/i.test(sprintPlan),\n details: {},\n },\n {\n key: \"pm_readme_exists\",\n ok: fs.existsSync(path.join(repoRoot, \"dev/engineering/pm/README.md\")),\n details: {},\n },\n ];\n const payload = {\n schema_version: \"xapps.dev.check.v1\",\n ok: checks.every((check) => check.ok),\n repo_root: repoRoot,\n checks,\n suggested_flows: [\"pay-per-request\", \"guard-orchestration\", \"xplace-certs\"],\n };\n if (deps.argFlag(args, \"json\")) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n console.log(\n [\n `V1 check: ${payload.ok ? \"PASS\" : \"FAIL\"}`,\n ...checks.map((check) => `${check.ok ? \"OK\" : \"FAIL\"} ${check.key}`),\n ].join(\"\\n\"),\n );\n if (!payload.ok) {\n throw deps.makeCliError(\"CLI_DEV_CHECK_FAILED\", \"xapps dev check v1 failed\", { checks });\n }\n}\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport type { parseXappManifest } from \"@xapps-platform/server-sdk\";\nimport type { DevRefStatus } from \"./devStatus.js\";\n\ntype CliArgsLike = Record<string, string | boolean>;\ntype CliErrorFactory = (code: string, message: string, details?: Record<string, unknown>) => Error;\n\ntype ContextToolSummary = {\n tool_name: string;\n title: string;\n input_required: string[];\n output_properties: string[];\n};\n\ntype ContextWidgetSummary = {\n widget_name: string;\n type: string;\n renderer: string;\n bind_tool_name?: string;\n};\n\ntype ContextDeps = {\n argString: (args: CliArgsLike, ...keys: string[]) => string | undefined;\n findRepoRoot: (startDir?: string) => string | null;\n parseManifestFromFile: (from: string) => {\n manifest: ReturnType<typeof parseXappManifest>;\n filePath: string;\n };\n buildDevRefs: (repoRoot: string) => DevRefStatus[];\n canonicalizeJson: (value: unknown) => unknown;\n makeCliError: CliErrorFactory;\n};\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction collectContextTools(manifest: ReturnType<typeof parseXappManifest>): ContextToolSummary[] {\n return manifest.tools\n .map((tool) => {\n const inputSchema =\n tool.input_schema && typeof tool.input_schema === \"object\" ? tool.input_schema : {};\n const outputSchema =\n tool.output_schema && typeof tool.output_schema === \"object\" ? tool.output_schema : {};\n const requiredRaw = Array.isArray((inputSchema as any).required)\n ? ((inputSchema as any).required as unknown[])\n : [];\n const outputProps = isPlainObject((outputSchema as any).properties)\n ? Object.keys((outputSchema as any).properties)\n : [];\n return {\n tool_name: tool.tool_name,\n title: tool.title || \"\",\n input_required: requiredRaw\n .filter((item): item is string => typeof item === \"string\")\n .sort(),\n output_properties: outputProps.sort(),\n };\n })\n .sort((a, b) => a.tool_name.localeCompare(b.tool_name));\n}\n\nfunction collectContextWidgets(\n manifest: ReturnType<typeof parseXappManifest>,\n): ContextWidgetSummary[] {\n return manifest.widgets\n .map((widget) => ({\n widget_name: widget.widget_name,\n type: widget.type || \"\",\n renderer: widget.renderer || \"\",\n ...(widget.bind_tool_name ? { bind_tool_name: widget.bind_tool_name } : {}),\n }))\n .sort((a, b) => a.widget_name.localeCompare(b.widget_name));\n}\n\nexport function buildContextExportPayload(\n manifest: ReturnType<typeof parseXappManifest>,\n filePath: string,\n deps: Pick<ContextDeps, \"canonicalizeJson\">,\n): Record<string, unknown> {\n const manifestJson = JSON.stringify(manifest);\n const manifestSha256 = createHash(\"sha256\").update(manifestJson).digest(\"hex\");\n const tools = collectContextTools(manifest);\n const widgets = collectContextWidgets(manifest);\n return {\n schema_version: \"xapps.context.v1\",\n source: {\n manifest_path: filePath,\n manifest_sha256: manifestSha256,\n },\n summary: {\n name: manifest.name,\n slug: manifest.slug,\n version: manifest.version,\n tools: manifest.tools.length,\n widgets: manifest.widgets.length,\n },\n indexes: {\n tools,\n widgets,\n },\n manifest: deps.canonicalizeJson(manifest),\n };\n}\n\nexport function buildInternalV1ContextPreset(\n repoRoot: string,\n deps: Pick<ContextDeps, \"buildDevRefs\">,\n): Record<string, unknown> {\n return {\n name: \"internal-v1\",\n refs: deps.buildDevRefs(repoRoot),\n anchors: {\n specs: [\n \"docs/specifications/01-publisher-rendered-integration.md\",\n \"docs/specifications/02-platform-rendered-integration.md\",\n \"docs/specifications/04-guard-xapps.md\",\n \"docs/specifications/10-data-sharing-graph-policy-v2.md\",\n \"docs/specifications/13-ai-agent-xapp-authoring.md\",\n ],\n audits: [\n \"dev/engineering/audits/V1_PRODUCTION_CODEBASE_REVIEW.md\",\n \"dev/engineering/audits/OPEN_067_PHASE1_INTERNAL_REPO_PLAN.md\",\n ],\n tests: [\n \"src/__tests__/xappsCli.test.ts\",\n \"src/__tests__/guardBeforeToolRun.test.ts\",\n \"src/__tests__/openapiErrorContract.test.ts\",\n ],\n },\n };\n}\n\nexport function runContextExportCommand(args: CliArgsLike, deps: ContextDeps) {\n const from = deps.argString(args, \"from\");\n if (!from) {\n throw new Error(\"Missing required argument: --from <manifest.json>\");\n }\n const { manifest, filePath } = deps.parseManifestFromFile(from);\n const payload = buildContextExportPayload(manifest, filePath, deps) as Record<string, unknown>;\n const preset = deps.argString(args, \"preset\");\n if (preset) {\n const normalized = preset.trim().toLowerCase();\n if (normalized !== \"internal-v1\") {\n throw deps.makeCliError(\n \"CLI_INVALID_OPTION\",\n `Invalid --preset: ${preset} (expected internal-v1)`,\n {\n label: \"--preset\",\n value: preset,\n },\n );\n }\n const repoRoot = deps.findRepoRoot();\n if (!repoRoot) {\n throw deps.makeCliError(\n \"CLI_REPO_NOT_FOUND\",\n \"xapps context export --preset internal-v1 is repo-only and requires the xapps monorepo checkout\",\n );\n }\n payload.preset = buildInternalV1ContextPreset(repoRoot, deps);\n }\n const outPath = deps.argString(args, \"out\");\n const rendered = `${JSON.stringify(payload, null, 2)}\\n`;\n if (outPath) {\n const target = path.resolve(process.cwd(), outPath);\n fs.mkdirSync(path.dirname(target), { recursive: true });\n fs.writeFileSync(target, rendered);\n console.log(`Context exported: ${target}`);\n return;\n }\n process.stdout.write(rendered);\n}\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport {\n buildManifestFromOpenApiText,\n extractOpenApiInfoFromText,\n slugifyManifestName,\n} from \"@xapps-platform/openapi-import\";\n\ntype CliArgValue = string | boolean | string[];\ntype CliArgs = Record<string, CliArgValue>;\n\ntype ParsedManifest = {\n slug: string;\n tools: Array<{\n tool_name: string;\n input_schema: unknown;\n output_schema: unknown;\n }>;\n widgets: Array<unknown>;\n};\n\ntype ManifestDeps = {\n argString: (args: CliArgs, ...keys: string[]) => string | undefined;\n argFlag: (args: CliArgs, key: string) => boolean;\n readInput: (from: string, fetchTimeoutMs: number) => Promise<string>;\n parsePositiveIntOrThrow: (value: string | undefined, fallback: number, label: string) => number;\n parseManifestFromFile: (from: string) => { manifest: ParsedManifest; filePath: string };\n readJsonFile: (file: string) => unknown;\n};\n\ntype ContractVector = {\n name?: string;\n tool_name?: string;\n input?: unknown;\n expected_output?: unknown;\n};\n\ntype ContractVectorSet = {\n vectors?: ContractVector[];\n};\n\nfunction buildInitManifestTemplate(input: {\n name: string;\n slug: string;\n version: string;\n}): Record<string, unknown> {\n return {\n name: input.name,\n slug: input.slug,\n version: input.version,\n target_client_id: \"REPLACE_CLIENT_ID\",\n description: \"Generated by xapps init\",\n tools: [\n {\n tool_name: \"example_tool\",\n title: \"Example Tool\",\n input_schema: {\n type: \"object\",\n properties: {\n message: { type: \"string\" },\n },\n required: [\"message\"],\n },\n output_schema: {\n type: \"object\",\n properties: {\n echoed: { type: \"string\" },\n },\n },\n },\n ],\n widgets: [\n {\n widget_name: \"example_widget\",\n type: \"write\",\n renderer: \"json-forms\",\n bind_tool_name: \"example_tool\",\n entry: {\n kind: \"platform_template\",\n template: \"write_form\",\n },\n },\n ],\n };\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction jsonTypeMatches(type: string, value: unknown): boolean {\n if (type === \"string\") return typeof value === \"string\";\n if (type === \"number\") return typeof value === \"number\";\n if (type === \"integer\") return typeof value === \"number\" && Number.isInteger(value);\n if (type === \"boolean\") return typeof value === \"boolean\";\n if (type === \"array\") return Array.isArray(value);\n if (type === \"object\") return isPlainObject(value);\n if (type === \"null\") return value === null;\n return true;\n}\n\nfunction validatePayloadAgainstSchema(schema: unknown, payload: unknown, label: string): string[] {\n if (!isPlainObject(schema)) return [];\n if (!isPlainObject(payload)) {\n return [`${label} must be a JSON object`];\n }\n\n const errors: string[] = [];\n const required = Array.isArray(schema.required) ? schema.required : [];\n for (const key of required) {\n if (typeof key === \"string\" && !(key in payload)) {\n errors.push(`${label} missing required field: ${key}`);\n }\n }\n\n const properties = isPlainObject(schema.properties) ? schema.properties : {};\n for (const [key, propSchema] of Object.entries(properties)) {\n if (!(key in payload)) continue;\n if (!isPlainObject(propSchema)) continue;\n const expectedType = typeof propSchema.type === \"string\" ? propSchema.type : \"\";\n if (expectedType && !jsonTypeMatches(expectedType, payload[key])) {\n errors.push(\n `${label}.${key} type mismatch (expected ${expectedType}, got ${Array.isArray(payload[key]) ? \"array\" : typeof payload[key]})`,\n );\n }\n }\n\n return errors;\n}\n\nexport async function runImportCommand(args: CliArgs, deps: ManifestDeps) {\n const from = deps.argString(args, \"from\");\n const out = deps.argString(args, \"out\");\n const fetchTimeoutMs = deps.parsePositiveIntOrThrow(\n deps.argString(args, \"fetch-timeout-ms\"),\n 10000,\n \"--fetch-timeout-ms\",\n );\n if (!from || !out) {\n throw new Error(\"Missing required arguments: --from and --out\");\n }\n\n const openApiText = await deps.readInput(from, fetchTimeoutMs);\n const fallbackInfo = extractOpenApiInfoFromText(openApiText);\n const name = deps.argString(args, \"name\") || fallbackInfo.title || \"OpenAPI Imported App\";\n const slug = deps.argString(args, \"slug\") || slugifyManifestName(name) || \"openapi-imported-app\";\n\n const manifest = buildManifestFromOpenApiText(openApiText, {\n name,\n slug,\n version: deps.argString(args, \"version\") || \"1.0.0\",\n description: deps.argString(args, \"description\") || fallbackInfo.description,\n endpointBaseUrl: deps.argString(args, \"endpoint\") || \"https://api.example.com\",\n endpointEnv: deps.argString(args, \"endpoint-env\") || \"prod\",\n });\n\n const outPath = path.resolve(process.cwd(), out);\n fs.mkdirSync(path.dirname(outPath), { recursive: true });\n fs.writeFileSync(outPath, JSON.stringify(manifest, null, 2));\n console.log(\n `Manifest generated: ${outPath}\\nTools: ${manifest.tools.length}\\nWidgets: ${manifest.widgets.length}`,\n );\n}\n\nexport function runValidateCommand(args: CliArgs, deps: ManifestDeps) {\n const from = deps.argString(args, \"from\");\n if (!from) {\n throw new Error(\"Missing required argument: --from <manifest.json>\");\n }\n\n const { manifest, filePath } = deps.parseManifestFromFile(from);\n console.log(\n `Manifest valid: ${filePath}\\nSlug: ${manifest.slug}\\nTools: ${manifest.tools.length}\\nWidgets: ${manifest.widgets.length}`,\n );\n}\n\nexport function runInitCommand(args: CliArgs, deps: ManifestDeps) {\n const out = deps.argString(args, \"out\");\n if (!out) {\n throw new Error(\"Missing required argument: --out <directory>\");\n }\n\n const outDir = path.resolve(process.cwd(), out);\n fs.mkdirSync(outDir, { recursive: true });\n\n const name = deps.argString(args, \"name\") || \"My Xapp\";\n const slug = deps.argString(args, \"slug\") || slugifyManifestName(name) || \"my-xapp\";\n const version = deps.argString(args, \"version\") || \"1.0.0\";\n const force = deps.argFlag(args, \"force\");\n\n const manifestPath = path.join(outDir, \"manifest.json\");\n const readmePath = path.join(outDir, \"README.md\");\n\n if (!force) {\n for (const filePath of [manifestPath, readmePath]) {\n if (fs.existsSync(filePath)) {\n throw new Error(`File already exists: ${filePath} (use --force to overwrite)`);\n }\n }\n }\n\n const manifest = buildInitManifestTemplate({ name, slug, version });\n fs.writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));\n fs.writeFileSync(\n readmePath,\n `# ${name}\\n\\nGenerated by xapps init.\\n\\nNext steps:\\n\\n1. Edit manifest.json (set target_client_id to the tenant client ID)\\n2. Validate: xapps validate --from manifest.json\\n3. Import/OpenAPI: xapps import ...\\n`,\n );\n\n console.log(`Initialized xapp scaffold in: ${outDir}`);\n}\n\nexport function runTestCommand(args: CliArgs, deps: ManifestDeps) {\n const from = deps.argString(args, \"from\");\n const vectorsPath = deps.argString(args, \"vectors\");\n if (!from || !vectorsPath) {\n throw new Error(\n \"Missing required arguments: --from <manifest.json> and --vectors <vectors.json>\",\n );\n }\n\n const { manifest, filePath: manifestPath } = deps.parseManifestFromFile(from);\n const vectorsRaw = deps.readJsonFile(vectorsPath);\n if (!isPlainObject(vectorsRaw)) {\n throw new Error(\"Vector file must be a JSON object with a vectors[] field\");\n }\n const vectorsContainer = vectorsRaw as ContractVectorSet;\n if (!Array.isArray(vectorsContainer.vectors)) {\n throw new Error(\"Vector file must contain vectors[]\");\n }\n\n const failures: string[] = [];\n for (let index = 0; index < vectorsContainer.vectors.length; index += 1) {\n const vector = vectorsContainer.vectors[index];\n const name = typeof vector?.name === \"string\" ? vector.name : `vector_${index + 1}`;\n const toolName = typeof vector?.tool_name === \"string\" ? vector.tool_name : \"\";\n if (!toolName) {\n failures.push(`${name}: missing tool_name`);\n continue;\n }\n const tool = manifest.tools.find((item) => item.tool_name === toolName);\n if (!tool) {\n failures.push(`${name}: unknown tool_name '${toolName}'`);\n continue;\n }\n\n const inputErrors = validatePayloadAgainstSchema(\n tool.input_schema,\n vector.input || {},\n \"input\",\n );\n const outputErrors = validatePayloadAgainstSchema(\n tool.output_schema,\n vector.expected_output || {},\n \"expected_output\",\n );\n for (const error of [...inputErrors, ...outputErrors]) {\n failures.push(`${name}: ${error}`);\n }\n }\n\n if (failures.length) {\n throw new Error(\n `Contract test failed (${failures.length} issues)\\n${failures.map((f) => `- ${f}`).join(\"\\n\")}`,\n );\n }\n\n console.log(\n `Contract test passed: ${vectorsContainer.vectors.length} vector(s)\\nManifest: ${manifestPath}\\nVectors: ${path.resolve(process.cwd(), vectorsPath)}`,\n );\n}\n", "import fs from \"node:fs\";\nimport http, { type IncomingMessage } from \"node:http\";\nimport path from \"node:path\";\nimport {\n buildDevFlowInitTemplate as buildDevFlowInitTemplateBase,\n lintDevFlowDefinition,\n parseDevFlowObject,\n} from \"../devFlow.js\";\nimport { buildBuiltInDevCheckFlows, executeDevCheckFlowCommands } from \"../devCheckFlow.js\";\nimport { runAiCheckCommand, runAiPlanCommand } from \"../aiCommands.js\";\nimport { runDevCheckV1Command, runDevStatusRefsCommand } from \"../devStatus.js\";\nimport { buildContextExportPayload, buildInternalV1ContextPreset } from \"../contextCommands.js\";\nimport {\n runPublisherEndpointCredentialEnsureCommand,\n runPublisherEndpointCredentialSetCommand,\n} from \"../publisherCommands.js\";\n\ntype CliArgValue = string | boolean | string[];\ntype CliArgs = Record<string, CliArgValue>;\n\ntype ParsedManifest = {\n slug: string;\n tools: Array<unknown>;\n widgets: Array<unknown>;\n};\n\ntype DevCommandDeps = {\n argString: (args: CliArgs, ...keys: string[]) => string | undefined;\n argFlag: (args: CliArgs, key: string) => boolean;\n shellEscapeArg: (value: string) => string;\n applyFlowCommandTemplates: (command: string, params: { artifactsDir: string }) => string;\n findRepoRoot: (startDir?: string) => string | null;\n readJsonFile: (file: string) => unknown;\n parseManifestFromFile: (from: string) => { manifest: ParsedManifest; filePath: string };\n runDryRun: (args: CliArgs, manifest: ParsedManifest) => void;\n buildDevRefs: (input: { repoRoot: string; manifestPath?: string | null }) => string[];\n canonicalizeJson: (value: unknown) => unknown;\n readRequestBody: (req: IncomingMessage) => Promise<unknown>;\n makeCliError: (code: string, message: string, details?: Record<string, unknown>) => Error;\n};\n\nexport function runDevStatusRefsCliCommand(args: CliArgs, deps: DevCommandDeps) {\n runDevStatusRefsCommand(args, {\n argFlag: deps.argFlag,\n findRepoRoot: deps.findRepoRoot,\n makeCliError: deps.makeCliError,\n });\n}\n\nexport function runDevCheckV1CliCommand(args: CliArgs, deps: DevCommandDeps) {\n runDevCheckV1Command(args, {\n argFlag: deps.argFlag,\n findRepoRoot: deps.findRepoRoot,\n makeCliError: deps.makeCliError,\n });\n}\n\nexport function runDevCheckFlowCliCommand(args: CliArgs, deps: DevCommandDeps) {\n const repoRoot = deps.findRepoRoot();\n if (!repoRoot) {\n throw deps.makeCliError(\n \"CLI_REPO_NOT_FOUND\",\n \"xapps dev check flow is repo-only and requires the xapps monorepo checkout\",\n );\n }\n const flowFile = deps.argString(args, \"from\");\n const flowName = deps.argString(args, \"name\");\n if (!flowFile && !flowName) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing required argument: --name <flow> or --from <flow.json>\",\n );\n }\n if (flowFile && flowName) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Use either --name <flow> or --from <flow.json>, not both\",\n );\n }\n const normalized = flowName ? flowName.trim().toLowerCase() : null;\n const artifactsDirRaw = deps.argString(args, \"artifacts-dir\");\n const artifactsDir = artifactsDirRaw\n ? path.resolve(repoRoot, String(artifactsDirRaw).trim())\n : \"/tmp\";\n const plans = buildBuiltInDevCheckFlows(artifactsDir);\n let selectedFlow:\n | { key: string; title: string; description: string; commands: string[]; refs: string[] }\n | undefined;\n const readFlowFromFile = (inputFlowFile: string) => {\n const filePath = path.resolve(repoRoot, inputFlowFile);\n const parsed = deps.readJsonFile(filePath);\n const parsedFlow = parseDevFlowObject(parsed, path.basename(filePath));\n if (parsedFlow.errors.length) {\n throw deps.makeCliError(\n \"CLI_INVALID_OPTION\",\n `Invalid flow file: ${inputFlowFile} (${parsedFlow.errors.join(\",\")})`,\n {\n label: \"--from\",\n value: inputFlowFile,\n errors: parsedFlow.errors,\n },\n );\n }\n return {\n filePath,\n flow: parsedFlow.flow,\n };\n };\n if (flowFile) {\n selectedFlow = readFlowFromFile(flowFile).flow;\n } else {\n const plan = normalized ? plans[normalized] : undefined;\n if (!plan) {\n throw deps.makeCliError(\"CLI_INVALID_OPTION\", `Unknown flow: ${flowName}`, {\n label: \"--name\",\n value: flowName,\n allowed: Object.keys(plans),\n });\n }\n selectedFlow = { key: normalized!, ...plan };\n }\n const resolvedCommands = selectedFlow.commands.map((cmd) =>\n deps.applyFlowCommandTemplates(cmd, { artifactsDir }),\n );\n const payload: Record<string, unknown> = {\n schema_version: \"xapps.dev.check.flow.v1\",\n ok: true,\n repo_root: repoRoot,\n flow: selectedFlow.key,\n artifacts_dir: artifactsDir,\n title: selectedFlow.title,\n description: selectedFlow.description,\n commands: resolvedCommands,\n refs: selectedFlow.refs,\n ...(flowFile ? { flow_file: path.relative(repoRoot, path.resolve(repoRoot, flowFile)) } : {}),\n };\n if (deps.argFlag(args, \"run\")) {\n try {\n fs.mkdirSync(artifactsDir, { recursive: true });\n } catch (error) {\n throw deps.makeCliError(\n \"CLI_DEV_CHECK_FAILED\",\n `Unable to prepare artifacts directory: ${artifactsDir}`,\n {\n flow: normalized || \"\",\n artifacts_dir: artifactsDir,\n error: String((error as Error)?.message || error),\n },\n );\n }\n }\n if (deps.argFlag(args, \"run\")) {\n const runs = executeDevCheckFlowCommands(resolvedCommands, repoRoot);\n const runSummary = {\n executed: true,\n ok: runs.every((run) => run.ok),\n runs,\n };\n payload.run = runSummary;\n payload.ok = runSummary.ok;\n }\n if (deps.argFlag(args, \"json\")) {\n console.log(JSON.stringify(payload, null, 2));\n if (!payload.ok) {\n throw deps.makeCliError(\n \"CLI_DEV_CHECK_FAILED\",\n `xapps dev check flow failed: ${String(selectedFlow.key || normalized || \"unknown\")}`,\n {\n flow: String(selectedFlow.key || normalized || \"\"),\n },\n );\n }\n return;\n }\n console.log(\n [\n `Flow check plan: ${payload.flow}`,\n `Title: ${payload.title}`,\n `Description: ${payload.description}`,\n \"Commands:\",\n ...(payload.commands as string[]).map((cmd) => `- ${cmd}`),\n ...(payload.run && typeof payload.run === \"object\" && Array.isArray((payload.run as any).runs)\n ? [\n \"Run results:\",\n ...((payload.run as any).runs as any[]).map(\n (run) => `- ${run.ok ? \"OK\" : \"FAIL\"} (${run.exit_code ?? \"?\"}) ${run.command}`,\n ),\n ]\n : []),\n \"Refs:\",\n ...(payload.refs as string[]).map((ref) => `- ${ref}`),\n ].join(\"\\n\"),\n );\n if (!payload.ok) {\n throw deps.makeCliError(\n \"CLI_DEV_CHECK_FAILED\",\n `xapps dev check flow failed: ${String(selectedFlow.key || normalized || \"unknown\")}`,\n {\n flow: String(selectedFlow.key || normalized || \"\"),\n },\n );\n }\n}\n\nexport function runDevCheckFlowLintCliCommand(args: CliArgs, deps: DevCommandDeps) {\n const repoRoot = deps.findRepoRoot();\n if (!repoRoot) {\n throw deps.makeCliError(\n \"CLI_REPO_NOT_FOUND\",\n \"xapps dev check flow lint is repo-only and requires the xapps monorepo checkout\",\n );\n }\n const flowFile = deps.argString(args, \"from\");\n if (!flowFile) {\n throw deps.makeCliError(\"CLI_INVALID_ARGS\", \"Missing required argument: --from <flow.json>\");\n }\n const filePath = path.resolve(repoRoot, flowFile);\n const parsed = deps.readJsonFile(filePath);\n const parsedFlow = parseDevFlowObject(parsed, path.basename(filePath));\n if (parsedFlow.errors.length) {\n throw deps.makeCliError(\n \"CLI_INVALID_OPTION\",\n `Invalid flow file: ${flowFile} (${parsedFlow.errors.join(\",\")})`,\n {\n label: \"--from\",\n value: flowFile,\n errors: parsedFlow.errors,\n },\n );\n }\n const checks = lintDevFlowDefinition(parsedFlow.flow);\n const payload = {\n schema_version: \"xapps.dev.check.flow.lint.v1\",\n ok: checks.every((c) => c.ok),\n repo_root: repoRoot,\n flow_file: path.relative(repoRoot, filePath),\n flow: parsedFlow.flow.key || null,\n checks,\n };\n if (deps.argFlag(args, \"json\")) {\n console.log(JSON.stringify(payload, null, 2));\n if (!payload.ok) {\n throw deps.makeCliError(\"CLI_DEV_CHECK_FAILED\", \"xapps dev check flow lint failed\", {\n flow_file: payload.flow_file,\n checks,\n });\n }\n return;\n }\n console.log(\n [\n `Flow lint: ${payload.ok ? \"PASS\" : \"FAIL\"}`,\n `Flow file: ${payload.flow_file}`,\n `Flow: ${payload.flow || \"n/a\"}`,\n ...checks.map((c) => `${c.ok ? \"OK\" : \"FAIL\"} ${c.key}`),\n ].join(\"\\n\"),\n );\n if (!payload.ok) {\n throw deps.makeCliError(\"CLI_DEV_CHECK_FAILED\", \"xapps dev check flow lint failed\", {\n flow_file: payload.flow_file,\n checks,\n });\n }\n}\n\nfunction buildDevFlowInitTemplate(type: string, makeCliError: DevCommandDeps[\"makeCliError\"]) {\n const template = buildDevFlowInitTemplateBase(type);\n if (template) return template;\n throw makeCliError(\"CLI_INVALID_OPTION\", `Unknown flow template type: ${type}`, {\n label: \"--type\",\n value: type,\n allowed: [\"ai-artifacts\", \"manual-loop\"],\n });\n}\n\nexport function runDevCheckFlowInitCliCommand(args: CliArgs, deps: DevCommandDeps) {\n const repoRoot = deps.findRepoRoot();\n if (!repoRoot) {\n throw deps.makeCliError(\n \"CLI_REPO_NOT_FOUND\",\n \"Could not locate repo root for xapps dev check flow init\",\n );\n }\n const out = deps.argString(args, \"out\");\n if (!out) {\n throw deps.makeCliError(\"CLI_INVALID_ARGS\", \"Missing required argument: --out <flow.json>\");\n }\n const type = deps.argString(args, \"type\");\n if (!type) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing required argument: --type <ai-artifacts|manual-loop>\",\n );\n }\n const normalizedType = String(type).trim().toLowerCase();\n const flowTemplate = buildDevFlowInitTemplate(type, deps.makeCliError);\n const flowId = deps.argString(args, \"flow-id\");\n if (flowId && String(flowId).trim()) {\n flowTemplate.flow = String(flowId).trim();\n }\n const manifestPathArg = deps.argString(args, \"manifest\");\n const policyPathArg = deps.argString(args, \"policy\");\n const smokeScriptArg = deps.argString(args, \"smoke-script\");\n if (normalizedType === \"ai-artifacts\") {\n const manifestPath = manifestPathArg ? String(manifestPathArg).trim() : \"\";\n const policyPath = policyPathArg ? String(policyPathArg).trim() : \"\";\n if (manifestPath) {\n flowTemplate.commands = flowTemplate.commands.map((cmd) =>\n cmd.replaceAll(\"./manifest.json\", manifestPath),\n );\n flowTemplate.refs = flowTemplate.refs.map((ref) =>\n ref === \"./manifest.json\" ? manifestPath : ref,\n );\n }\n if (policyPath) {\n flowTemplate.commands = flowTemplate.commands.map((cmd) =>\n cmd.replaceAll(\n \"--policy-preset internal-readonly\",\n `--policy ${deps.shellEscapeArg(policyPath)}`,\n ),\n );\n flowTemplate.refs = flowTemplate.refs.map((ref) =>\n ref === \"./ai/policy.readonly.internal-v1.json\" ? policyPath : ref,\n );\n }\n }\n if (normalizedType === \"manual-loop\") {\n const smokeScriptPath = smokeScriptArg ? String(smokeScriptArg).trim() : \"\";\n if (smokeScriptPath) {\n flowTemplate.commands = [`node ${deps.shellEscapeArg(smokeScriptPath)}`];\n flowTemplate.refs = flowTemplate.refs.map((ref) =>\n ref === \"./scripts/manual-loop-smoke.mjs\" ? smokeScriptPath : ref,\n );\n }\n }\n const target = path.resolve(process.cwd(), out);\n fs.mkdirSync(path.dirname(target), { recursive: true });\n const rendered = `${JSON.stringify(flowTemplate, null, 2)}\\n`;\n fs.writeFileSync(target, rendered);\n const payload = {\n schema_version: \"xapps.dev.check.flow.init.v1\",\n ok: true,\n type: String(type).trim().toLowerCase(),\n out: target,\n flow: flowTemplate.flow,\n ...(manifestPathArg ? { manifest: String(manifestPathArg).trim() } : {}),\n ...(policyPathArg ? { policy: String(policyPathArg).trim() } : {}),\n ...(smokeScriptArg ? { smoke_script: String(smokeScriptArg).trim() } : {}),\n };\n if (deps.argFlag(args, \"json\")) {\n console.log(JSON.stringify(payload, null, 2));\n return;\n }\n console.log(`Flow template created: ${target}\\nType: ${payload.type}\\nFlow: ${payload.flow}`);\n}\n\nexport async function runAiPlanCliCommand(args: CliArgs, deps: DevCommandDeps) {\n await runAiPlanCommand(args, {\n argString: deps.argString,\n argFlag: deps.argFlag,\n findRepoRoot: deps.findRepoRoot,\n parseManifestFromFile: deps.parseManifestFromFile,\n buildContextExportPayload: (manifest, filePath) =>\n buildContextExportPayload(manifest, filePath, {\n canonicalizeJson: deps.canonicalizeJson,\n }) as Record<string, unknown>,\n buildDevRefs: deps.buildDevRefs,\n buildInternalV1ContextPreset: (repoRoot) =>\n buildInternalV1ContextPreset(repoRoot, { buildDevRefs: deps.buildDevRefs }) as Record<\n string,\n unknown\n >,\n readJsonFile: deps.readJsonFile,\n makeCliError: deps.makeCliError,\n });\n}\n\nexport async function runAiCheckCliCommand(args: CliArgs, deps: DevCommandDeps) {\n await runAiCheckCommand(args, {\n argString: deps.argString,\n argFlag: deps.argFlag,\n findRepoRoot: deps.findRepoRoot,\n parseManifestFromFile: deps.parseManifestFromFile,\n buildContextExportPayload: (manifest, filePath) =>\n buildContextExportPayload(manifest, filePath, {\n canonicalizeJson: deps.canonicalizeJson,\n }) as Record<string, unknown>,\n buildDevRefs: deps.buildDevRefs,\n buildInternalV1ContextPreset: (repoRoot) =>\n buildInternalV1ContextPreset(repoRoot, { buildDevRefs: deps.buildDevRefs }) as Record<\n string,\n unknown\n >,\n readJsonFile: deps.readJsonFile,\n makeCliError: deps.makeCliError,\n });\n}\n\nexport async function runPublisherCliCommand(args: CliArgs, deps: DevCommandDeps) {\n const subcommand = deps.argString(args, \"_subcommand\");\n const subcommand2 = deps.argString(args, \"_subcommand2\");\n const subcommand3 = deps.argString(args, \"_subcommand3\");\n if (subcommand === \"endpoint\" && subcommand2 === \"credential\" && subcommand3 === \"set\") {\n await runPublisherEndpointCredentialSetCommand(args, {\n argString: deps.argString,\n argFlag: deps.argFlag,\n makeCliError: deps.makeCliError,\n });\n return;\n }\n if (subcommand === \"endpoint\" && subcommand2 === \"credential\" && subcommand3 === \"ensure\") {\n await runPublisherEndpointCredentialEnsureCommand(args, {\n argString: deps.argString,\n argFlag: deps.argFlag,\n makeCliError: deps.makeCliError,\n });\n return;\n }\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing required subcommand: publisher endpoint credential set|ensure\",\n );\n}\n\nexport async function runDevCommand(args: CliArgs, deps: DevCommandDeps) {\n const subcommand = deps.argString(args, \"_subcommand\");\n const subcommand2 = deps.argString(args, \"_subcommand2\");\n if (subcommand === \"status\" && subcommand2 === \"refs\") {\n runDevStatusRefsCliCommand(args, deps);\n return;\n }\n if (subcommand === \"check\" && subcommand2 === \"v1\") {\n runDevCheckV1CliCommand(args, deps);\n return;\n }\n if (subcommand === \"check\" && subcommand2 === \"flow\") {\n if (deps.argString(args, \"_subcommand3\") === \"init\") {\n runDevCheckFlowInitCliCommand(args, deps);\n return;\n }\n if (deps.argString(args, \"_subcommand3\") === \"lint\") {\n runDevCheckFlowLintCliCommand(args, deps);\n return;\n }\n runDevCheckFlowCliCommand(args, deps);\n return;\n }\n\n const from = deps.argString(args, \"from\");\n if (!from) {\n throw new Error(\"Missing required argument: --from <manifest.json>\");\n }\n\n const once = deps.argFlag(args, \"once\");\n const watchEnabled = !deps.argFlag(args, \"no-watch\");\n const host = deps.argString(args, \"host\") || \"127.0.0.1\";\n const port = Number(deps.argString(args, \"port\") || \"4011\");\n\n const first = deps.parseManifestFromFile(from);\n console.log(\n `Dev manifest loaded: ${first.filePath}\\nSlug: ${first.manifest.slug}\\nTools: ${first.manifest.tools.length}\\nWidgets: ${first.manifest.widgets.length}`,\n );\n deps.runDryRun(args, first.manifest);\n\n if (once) return;\n\n const manifestPath = first.filePath;\n let currentManifest = first.manifest;\n let watchTimer: NodeJS.Timeout | null = null;\n const watcher = watchEnabled\n ? fs.watch(manifestPath, () => {\n if (watchTimer) clearTimeout(watchTimer);\n watchTimer = setTimeout(() => {\n try {\n const parsed = deps.parseManifestFromFile(manifestPath);\n currentManifest = parsed.manifest;\n console.log(\n `Manifest revalidated: ${parsed.filePath}\\nSlug: ${parsed.manifest.slug}\\nTools: ${parsed.manifest.tools.length}\\nWidgets: ${parsed.manifest.widgets.length}`,\n );\n } catch (err: any) {\n console.error(`Manifest validation failed: ${err?.message || String(err)}`);\n }\n }, 120);\n })\n : null;\n\n const server = http.createServer(async (req, res) => {\n const method = (req.method || \"GET\").toUpperCase();\n const url = req.url || \"/\";\n const eventMatch = /^\\/v1\\/requests\\/([^/]+)\\/events\\/?$/.exec(url);\n const completeMatch = /^\\/v1\\/requests\\/([^/]+)\\/complete\\/?$/.exec(url);\n\n if (method === \"POST\" && (eventMatch || completeMatch)) {\n const requestId = decodeURIComponent((eventMatch || completeMatch)![1]);\n const payload = await deps.readRequestBody(req);\n const kind = eventMatch ? \"event\" : \"complete\";\n const payloadText = JSON.stringify(payload);\n console.log(\n `[dev-callback] ${kind} request_id=${requestId} slug=${currentManifest.slug} payload=${payloadText}`,\n );\n const response = {\n ok: true,\n simulated: true,\n kind,\n request_id: requestId,\n };\n res.statusCode = 200;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(JSON.stringify(response));\n return;\n }\n\n res.statusCode = 404;\n res.setHeader(\"content-type\", \"application/json\");\n res.end(JSON.stringify({ ok: false, error: \"not_found\" }));\n });\n\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(port, host, () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n\n console.log(\n `xapps dev running\\nManifest watch: ${watchEnabled ? \"on\" : \"off\"}\\nMock callbacks: http://${host}:${port}\\nEndpoints: POST /v1/requests/:id/events and POST /v1/requests/:id/complete`,\n );\n\n await new Promise<void>((resolve) => {\n const shutdown = () => {\n if (watchTimer) {\n clearTimeout(watchTimer);\n }\n watcher?.close();\n server.close(() => resolve());\n };\n process.once(\"SIGINT\", shutdown);\n process.once(\"SIGTERM\", shutdown);\n });\n}\n", "export type DevFlowDefinition = {\n key: string;\n title: string;\n description: string;\n commands: string[];\n refs: string[];\n};\n\nexport type DevFlowLintCheck = {\n key: string;\n ok: boolean;\n details?: Record<string, unknown>;\n};\n\nexport function buildDevFlowInitTemplate(type: string): {\n flow: string;\n title: string;\n description: string;\n commands: string[];\n refs: string[];\n} | null {\n const normalized = String(type || \"\")\n .trim()\n .toLowerCase();\n if (normalized === \"ai-artifacts\") {\n return {\n flow: \"sample-ai-artifacts\",\n title: \"Sample AI plan/check artifacts workflow\",\n description:\n \"Edit paths for your app and policy. Uses {{ARTIFACTS_DIR}} for generated plan/check reports.\",\n commands: [\n \"npm run xapps -- validate --from ./manifest.json\",\n \"npm run xapps -- ai plan --mode internal --from ./manifest.json --preset internal-v1 --json --out {{ARTIFACTS_DIR}}/xapps.plan.json\",\n \"npm run xapps -- ai check --mode internal --plan {{ARTIFACTS_DIR}}/xapps.plan.json --policy-preset internal-readonly --json --out {{ARTIFACTS_DIR}}/xapps.check.json\",\n ],\n refs: [\n \"./manifest.json\",\n \"./ai/policy.readonly.internal-v1.json\",\n \"dev/engineering/checklists/SDK_CLI_AI_CHECKLIST.md\",\n ],\n };\n }\n if (normalized === \"manual-loop\") {\n return {\n flow: \"sample-manual-loop\",\n title: \"Sample publisher manual response loop smoke\",\n description:\n \"Edit the smoke script path for your publisher sample/workspace. Intended for async manual-response callback loops.\",\n commands: [\"node ./scripts/manual-loop-smoke.mjs\"],\n refs: [\"./scripts/manual-loop-smoke.mjs\", \"./README.md\"],\n };\n }\n return null;\n}\n\nexport function parseDevFlowObject(\n raw: unknown,\n fallbackFlowId = \"\",\n): { flow: DevFlowDefinition; errors: string[] } {\n const errors: string[] = [];\n if (!raw || typeof raw !== \"object\" || Array.isArray(raw)) {\n return {\n flow: { key: \"\", title: \"\", description: \"\", commands: [], refs: [] },\n errors: [\"expected_object\"],\n };\n }\n const source = raw as Record<string, unknown>;\n const key = String(source.flow || source.key || fallbackFlowId || \"\")\n .trim()\n .toLowerCase();\n const title = String(source.title || \"\").trim();\n const description = String(source.description || \"\").trim();\n const commands = Array.isArray(source.commands)\n ? source.commands\n .filter((v): v is string => typeof v === \"string\")\n .map((v) => v.trim())\n .filter(Boolean)\n : [];\n const refs = Array.isArray(source.refs)\n ? source.refs\n .filter((v): v is string => typeof v === \"string\")\n .map((v) => v.trim())\n .filter(Boolean)\n : [];\n if (!key) errors.push(\"flow_id_missing\");\n if (!title) errors.push(\"title_missing\");\n if (!description) errors.push(\"description_missing\");\n if (!commands.length) errors.push(\"commands_missing\");\n return {\n flow: { key, title, description, commands, refs },\n errors,\n };\n}\n\nexport function lintDevFlowDefinition(flow: DevFlowDefinition): DevFlowLintCheck[] {\n const commands = Array.isArray(flow.commands) ? flow.commands : [];\n return [\n {\n key: \"flow_id_present\",\n ok: typeof flow.key === \"string\" && flow.key.trim().length > 0,\n details: { value: flow.key || null },\n },\n {\n key: \"title_present\",\n ok: typeof flow.title === \"string\" && flow.title.trim().length > 0,\n details: { value: flow.title || null },\n },\n {\n key: \"description_present\",\n ok: typeof flow.description === \"string\" && flow.description.trim().length > 0,\n details: { value: flow.description || null },\n },\n {\n key: \"commands_nonempty\",\n ok: commands.length > 0,\n details: { command_count: commands.length },\n },\n {\n key: \"commands_prefixed\",\n ok: commands.every((cmd) => /^(npm|npx|node|pnpm|yarn|bun)\\b/.test(String(cmd).trim())),\n details: {\n invalid_commands: commands.filter(\n (cmd) => !/^(npm|npx|node|pnpm|yarn|bun)\\b/.test(String(cmd).trim()),\n ),\n },\n },\n ];\n}\n", "import { spawnSync } from \"node:child_process\";\nimport path from \"node:path\";\nimport type { DevFlowDefinition } from \"./devFlow.js\";\n\nfunction shellEscapeArg(value: string): string {\n if (/^[A-Za-z0-9_./:-]+$/.test(value)) return value;\n return `'${String(value).replace(/'/g, `'\"'\"'`)}'`;\n}\n\nexport function buildBuiltInDevCheckFlows(\n artifactsDir: string,\n): Record<string, Omit<DevFlowDefinition, \"key\">> {\n const xplacePlanPath = path.join(artifactsDir, \"xapps-xplace-certs.plan.json\");\n const xplaceCheckPath = path.join(artifactsDir, \"xapps-xplace-certs.check.json\");\n return {\n \"pay-per-request\": {\n title: \"Pay-per-request baseline flow\",\n description:\n \"Verifies guarded payment orchestration baseline across widget/guards/contracts for V1.\",\n commands: [\n \"npm test -- src/__tests__/guardBeforeToolRun.test.ts\",\n \"npm test -- src/__tests__/widgetSdk.test.ts src/__tests__/extensionsLabJsonformsPayment.e2e.test.ts\",\n \"npm test -- src/__tests__/openapiErrorContract.test.ts\",\n ],\n refs: [\n \"dev/engineering/audits/V1_PRODUCTION_CODEBASE_REVIEW.md\",\n \"dev/engineering/pm/OPEN_LIST.md\",\n ],\n },\n \"guard-orchestration\": {\n title: \"Guard orchestration bridge flow\",\n description:\n \"Verifies blocked/confirm/payment orchestration bridge behavior across host/embed guard paths.\",\n commands: [\n \"npm test -- src/__tests__/guardContractParity.test.ts src/__tests__/integrationHostGuardContracts.test.ts\",\n \"npm test -- src/__tests__/widgetRuntime.guardBridge.test.ts\",\n \"npx playwright test e2e/extensions-guards.spec.ts --grep orchestration|guard\",\n ],\n refs: [\n \"dev/engineering/audits/V1_PRODUCTION_CODEBASE_REVIEW.md\",\n \"dev/engineering/pm/OPEN_POINTS.md\",\n ],\n },\n \"xplace-certs\": {\n title: \"xplace certs first-xapp internal workflow\",\n description:\n \"Validates and inspects the xplace-certs JSON Forms manifest using internal-repo CLI helpers.\",\n commands: [\n \"npm run xapps -- validate --from apps/publishers/xplace/xapps/xplace-certs/manifest.json\",\n `npm run xapps -- ai plan --mode internal --from apps/publishers/xplace/xapps/xplace-certs/manifest.json --preset internal-v1 --flow xplace-certs --json --out ${shellEscapeArg(xplacePlanPath)}`,\n `npm run xapps -- ai check --mode internal --plan ${shellEscapeArg(xplacePlanPath)} --policy apps/publishers/xplace/xapps/xplace-certs/ai/policy.readonly.internal-v1.json --json --out ${shellEscapeArg(xplaceCheckPath)}`,\n ],\n refs: [\n \"apps/publishers/xplace/xapps/xplace-certs/manifest.json\",\n \"apps/publishers/xplace/xapps/xplace-certs/ai/policy.readonly.internal-v1.json\",\n \"apps/publishers/xplace/backend/server.js\",\n \"dev/engineering/audits/OPEN_067_PHASE1_INTERNAL_REPO_PLAN.md\",\n ],\n },\n };\n}\n\nexport type DevCheckFlowRunResult = {\n command: string;\n ok: boolean;\n exit_code: number | null;\n signal: NodeJS.Signals | null;\n stdout: string;\n stderr: string;\n error: string | null;\n};\n\nexport function executeDevCheckFlowCommands(\n commands: string[],\n repoRoot: string,\n): DevCheckFlowRunResult[] {\n return commands.map((command) => {\n const parts = String(command).trim().split(/\\s+/).filter(Boolean);\n if (!parts.length) {\n return {\n command,\n ok: false,\n exit_code: null,\n signal: null,\n stdout: \"\",\n stderr: \"\",\n error: \"empty_command\",\n };\n }\n const result = spawnSync(parts[0], parts.slice(1), {\n cwd: repoRoot,\n encoding: \"utf8\",\n stdio: \"pipe\",\n });\n return {\n command,\n ok: (result.status ?? 1) === 0 && !result.error,\n exit_code: result.status ?? null,\n signal: result.signal ?? null,\n stdout: String(result.stdout || \"\"),\n stderr: String(result.stderr || \"\"),\n error: result.error ? String(result.error.message || result.error) : null,\n };\n });\n}\n", "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport readline from \"node:readline/promises\";\nimport { stdin as input, stdout as output } from \"node:process\";\nimport { parseXappManifest } from \"@xapps-platform/server-sdk\";\n\ntype CliArgsLike = Record<string, string | boolean>;\ntype DevRefLike = { key: string; path: string; exists: boolean };\ntype PlanRendererFamily = \"publisher-rendered\" | \"jsonforms\" | \"platform\";\ntype MockAssetKind = \"image\" | \"json\" | \"text\" | \"other\";\ntype MockAssetRef = { path: string; name: string; kind: MockAssetKind; bytes?: number };\n\ntype AiPlanPayload = {\n schema_version: \"xapps.ai.plan.v1\";\n ok: boolean;\n mode: \"internal\";\n read_only: true;\n source: {\n manifest_path: string;\n manifest_sha256?: string;\n };\n context: {\n summary: Record<string, unknown>;\n refs: DevRefLike[];\n };\n actions: Array<Record<string, unknown>>;\n warnings: string[];\n errors: Array<Record<string, unknown>>;\n};\n\ntype AiCheckPolicy = {\n schema_version?: string;\n require_read_only?: boolean;\n max_actions?: number;\n allow_action_kinds?: string[];\n};\n\ntype CliErrorFactory = (code: string, message: string, details?: Record<string, unknown>) => Error;\n\ntype AiCommandDeps = {\n argString: (args: CliArgsLike, ...keys: string[]) => string | undefined;\n argFlag: (args: CliArgsLike, key: string) => boolean;\n findRepoRoot: (startDir?: string) => string | null;\n parseManifestFromFile: (from: string) => {\n manifest: ReturnType<typeof parseXappManifest>;\n filePath: string;\n };\n buildContextExportPayload: (\n manifest: ReturnType<typeof parseXappManifest>,\n filePath: string,\n ) => Record<string, unknown>;\n buildDevRefs: (repoRoot: string) => DevRefLike[];\n buildInternalV1ContextPreset: (repoRoot: string) => Record<string, unknown>;\n readJsonFile: (filePath: string) => unknown;\n makeCliError: CliErrorFactory;\n};\ntype ParsedManifest = ReturnType<typeof parseXappManifest>;\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction parseAiMode(args: CliArgsLike, deps: AiCommandDeps): \"internal\" {\n const mode = String(deps.argString(args, \"mode\") || \"internal\")\n .trim()\n .toLowerCase();\n if (mode !== \"internal\") {\n throw deps.makeCliError(\n \"CLI_AI_MODE_UNSUPPORTED\",\n `Unsupported --mode: ${mode} (only internal is implemented in this phase)`,\n { label: \"--mode\", value: mode, supported: [\"internal\"] },\n );\n }\n return \"internal\";\n}\n\nfunction parsePositiveIntOptionOrThrow(\n value: string | undefined,\n fallback: number,\n label: string,\n deps: AiCommandDeps,\n): number {\n if (!value) return fallback;\n const parsed = Number(value);\n if (!Number.isFinite(parsed) || !Number.isInteger(parsed) || parsed <= 0) {\n throw deps.makeCliError(\n \"CLI_INVALID_OPTION\",\n `Invalid ${label}: ${value} (expected positive integer)`,\n { label, value },\n );\n }\n return parsed;\n}\n\nfunction detectPlanRendererFamilies(manifest: ParsedManifest): PlanRendererFamily[] {\n const found = new Set<PlanRendererFamily>();\n for (const widget of manifest.widgets || []) {\n const renderer = String((widget as any).renderer || \"\")\n .trim()\n .toLowerCase();\n if (renderer === \"publisher\") {\n found.add(\"publisher-rendered\");\n continue;\n }\n if (renderer === \"json-forms\") {\n found.add(\"jsonforms\");\n continue;\n }\n if (renderer === \"platform\") found.add(\"platform\");\n }\n return Array.from(found.values()).sort();\n}\n\nfunction normalizeLowerSet(values: string[]): Set<string> {\n return new Set(values.map((v) => v.trim().toLowerCase()).filter(Boolean));\n}\n\nfunction inferMockAssetKind(fileName: string): MockAssetKind {\n const lower = fileName.toLowerCase();\n if (/\\.(png|jpe?g|gif|webp|bmp|svg)$/.test(lower)) return \"image\";\n if (/\\.json$/.test(lower)) return \"json\";\n if (/\\.(txt|md|yaml|yml)$/.test(lower)) return \"text\";\n return \"other\";\n}\n\nfunction listMockAssets(\n manifestFilePath: string,\n args: CliArgsLike,\n deps: AiCommandDeps,\n): MockAssetRef[] {\n const rawMockDirs = [\n deps.argString(args, \"mocks\"),\n deps.argString(args, \"mocks-dir\"),\n path.join(path.dirname(manifestFilePath), \"mocks\"),\n ].filter((value): value is string => typeof value === \"string\" && value.trim().length > 0);\n const seenDirs = normalizeLowerSet([]);\n const out: MockAssetRef[] = [];\n for (const rawDir of rawMockDirs) {\n const dirPath = path.resolve(process.cwd(), rawDir);\n const dedupeKey = dirPath.toLowerCase();\n if (seenDirs.has(dedupeKey)) continue;\n seenDirs.add(dedupeKey);\n if (!fs.existsSync(dirPath)) continue;\n let entries: fs.Dirent[] = [];\n try {\n entries = fs.readdirSync(dirPath, { withFileTypes: true });\n } catch {\n continue;\n }\n for (const entry of entries) {\n if (!entry.isFile()) continue;\n const absPath = path.join(dirPath, entry.name);\n let size: number | undefined;\n try {\n size = fs.statSync(absPath).size;\n } catch {\n size = undefined;\n }\n out.push({\n path: path.relative(process.cwd(), absPath),\n name: entry.name,\n kind: inferMockAssetKind(entry.name),\n ...(typeof size === \"number\" ? { bytes: size } : {}),\n });\n }\n }\n return out.sort((a, b) => a.path.localeCompare(b.path));\n}\n\nfunction readAiGuidance(args: CliArgsLike, deps: AiCommandDeps): string | undefined {\n const inline = deps.argString(args, \"guidance\");\n const file = deps.argString(args, \"guidance-file\");\n if (inline && file) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Use either --guidance <text> or --guidance-file <path>, not both\",\n );\n }\n const raw = file\n ? fs.readFileSync(path.resolve(process.cwd(), file), \"utf8\")\n : typeof inline === \"string\"\n ? inline\n : \"\";\n const guidance = String(raw || \"\").trim();\n return guidance || undefined;\n}\n\nfunction getToolByName(manifest: ParsedManifest, toolName: string): Record<string, any> | null {\n for (const tool of manifest.tools || []) {\n if (String((tool as any).tool_name || \"\") === toolName) return tool as any;\n }\n return null;\n}\n\nfunction collectUiElements(uiSchema: any): any[] {\n if (!uiSchema || typeof uiSchema !== \"object\") return [];\n const stack: any[] = [uiSchema];\n const out: any[] = [];\n while (stack.length) {\n const node = stack.pop();\n if (!node || typeof node !== \"object\") continue;\n out.push(node);\n const elements = Array.isArray((node as any).elements) ? (node as any).elements : [];\n for (const child of elements) stack.push(child);\n }\n return out;\n}\n\nfunction hasStepperUiSchema(uiSchema: any): boolean {\n if (!uiSchema || typeof uiSchema !== \"object\") return false;\n if (String((uiSchema as any).type || \"\") !== \"Categorization\") return false;\n const options = (uiSchema as any).options;\n return (\n options &&\n typeof options === \"object\" &&\n String((options as any).variant || \"\").toLowerCase() === \"stepper\"\n );\n}\n\nfunction hasPreviewSections(uiSchema: any): boolean {\n return collectUiElements(uiSchema).some(\n (node) =>\n String((node as any).type || \"\") === \"XAppsDisplayPanel\" ||\n String((node as any).component || \"\")\n .toLowerCase()\n .includes(\"preview\"),\n );\n}\n\nfunction buildControlScope(propertyName: string) {\n return `#/properties/${propertyName}`;\n}\n\nfunction buildStepperUiSchemaSuggestion(\n inputSchema: any,\n options?: { includePreviewPanel?: boolean },\n) {\n const props =\n inputSchema &&\n typeof inputSchema === \"object\" &&\n inputSchema.properties &&\n typeof inputSchema.properties === \"object\"\n ? (inputSchema.properties as Record<string, any>)\n : {};\n const propertyNames = Object.keys(props);\n const nonAttachments: string[] = [];\n const attachments: string[] = [];\n for (const key of propertyNames) {\n const prop = props[key] || {};\n const isBinaryArray =\n String(prop.type || \"\") === \"array\" &&\n prop.items &&\n typeof prop.items === \"object\" &&\n String((prop.items as any).format || \"\").toLowerCase() === \"binary\";\n const isBinary = String(prop.format || \"\").toLowerCase() === \"binary\";\n if (isBinary || isBinaryArray) attachments.push(key);\n else nonAttachments.push(key);\n }\n\n const splitIndex =\n nonAttachments.length > 3 ? Math.ceil(nonAttachments.length / 2) : nonAttachments.length;\n const primary = nonAttachments.slice(0, splitIndex);\n const secondary = nonAttachments.slice(splitIndex);\n const categories: any[] = [];\n if (primary.length) {\n const elements = primary.map((key) => ({ type: \"Control\", scope: buildControlScope(key) }));\n if (options?.includePreviewPanel) {\n const previewScope = buildControlScope(attachments[0] || primary[0]);\n elements.push({\n type: \"XAppsDisplayPanel\",\n component: \"json-preview\",\n label: attachments[0] ? \"Attachments Preview\" : \"Form Preview\",\n scope: previewScope,\n });\n }\n categories.push({\n type: \"Category\",\n label: \"Basic Info\",\n elements,\n });\n }\n if (secondary.length) {\n categories.push({\n type: \"Category\",\n label: \"Details\",\n elements: secondary.map((key) => ({ type: \"Control\", scope: buildControlScope(key) })),\n });\n }\n if (attachments.length) {\n categories.push({\n type: \"Category\",\n label: \"Attachments\",\n elements: attachments.map((key) => ({ type: \"Control\", scope: buildControlScope(key) })),\n });\n }\n if (!categories.length) {\n categories.push({\n type: \"Category\",\n label: \"Form\",\n elements: options?.includePreviewPanel\n ? [\n {\n type: \"XAppsDisplayPanel\",\n component: \"json-preview\",\n label: \"Form Preview\",\n scope: \"#\",\n },\n ]\n : [],\n });\n }\n return {\n type: \"Categorization\",\n options: { variant: \"stepper\" },\n elements: categories,\n };\n}\n\nfunction buildPreviewSectionSuggestion(inputSchema: any) {\n const props =\n inputSchema &&\n typeof inputSchema === \"object\" &&\n inputSchema.properties &&\n typeof inputSchema.properties === \"object\"\n ? (inputSchema.properties as Record<string, any>)\n : {};\n const names = Object.keys(props);\n const attachmentKey = names.find((key) => {\n const prop = props[key] || {};\n return (\n (String(prop.type || \"\") === \"array\" &&\n prop.items &&\n typeof prop.items === \"object\" &&\n String((prop.items as any).format || \"\").toLowerCase() === \"binary\") ||\n String(prop.format || \"\").toLowerCase() === \"binary\"\n );\n });\n const fallbackKey = attachmentKey || names[0];\n return [\n {\n type: \"XAppsDisplayPanel\",\n component: \"json-preview\",\n label: attachmentKey ? \"Attachments Preview\" : \"Form Preview\",\n ...(fallbackKey ? { scope: buildControlScope(fallbackKey) } : { scope: \"#\" }),\n },\n ];\n}\n\nfunction buildManifestPatchHints(\n manifest: ParsedManifest,\n mockAssets: MockAssetRef[],\n guidance: string | undefined,\n): Array<Record<string, unknown>> {\n const hints: Array<Record<string, unknown>> = [];\n const guidanceLower = String(guidance || \"\").toLowerCase();\n const wantsStepper = /step(?:s|per)?|wizard/.test(guidanceLower);\n const wantsPreview = /preview|widget[- ]?preview|display panel/.test(guidanceLower);\n const hasImageMocks = mockAssets.some((asset) => asset.kind === \"image\");\n\n for (const widget of manifest.widgets || []) {\n const w: any = widget as any;\n if (String(w.renderer || \"\").toLowerCase() !== \"json-forms\") continue;\n const toolName = String(w.bind_tool_name || \"\").trim();\n if (!toolName) continue;\n const tool = getToolByName(manifest, toolName);\n if (!tool) continue;\n const uiSchema = (tool as any).input_ui_schema;\n const inputSchema = (tool as any).input_schema;\n const hasStepper = hasStepperUiSchema(uiSchema);\n const hasPreview = hasPreviewSections(uiSchema);\n const shouldSuggestStepper = !hasStepper && (wantsStepper || hasImageMocks);\n const shouldSuggestPreview = !hasPreview && (wantsPreview || hasImageMocks);\n if (!shouldSuggestStepper && !shouldSuggestPreview) continue;\n\n const proposedInputUiSchema = shouldSuggestStepper\n ? buildStepperUiSchemaSuggestion(inputSchema, { includePreviewPanel: shouldSuggestPreview })\n : undefined;\n const appendPreviewSections =\n !shouldSuggestStepper && shouldSuggestPreview\n ? buildPreviewSectionSuggestion(inputSchema)\n : undefined;\n\n hints.push({\n widget_name: String(w.widget_name || \"\"),\n bind_tool_name: toolName,\n reasons: [\n ...(hasImageMocks ? [\"mock_assets_detected\"] : []),\n ...(shouldSuggestStepper ? [\"missing_stepper_wizard_ui\"] : []),\n ...(shouldSuggestPreview ? [\"missing_preview_sections\"] : []),\n ],\n patch: {\n tool_name: toolName,\n field: \"input_ui_schema\",\n mode: shouldSuggestStepper ? \"replace\" : \"append_preview_sections\",\n ...(proposedInputUiSchema ? { value: proposedInputUiSchema } : {}),\n ...(appendPreviewSections ? { preview_sections: appendPreviewSections } : {}),\n },\n review_notes: [\n \"Review inferred step grouping and labels before applying.\",\n \"Preview panel suggestion is generic; customize component/scope for your UX.\",\n ],\n });\n }\n return hints;\n}\n\nfunction mimeTypeForMockAsset(fileName: string): string {\n const lower = fileName.toLowerCase();\n if (lower.endsWith(\".png\")) return \"image/png\";\n if (lower.endsWith(\".jpg\") || lower.endsWith(\".jpeg\")) return \"image/jpeg\";\n if (lower.endsWith(\".webp\")) return \"image/webp\";\n if (lower.endsWith(\".gif\")) return \"image/gif\";\n if (lower.endsWith(\".svg\")) return \"image/svg+xml\";\n return \"application/octet-stream\";\n}\n\nfunction toDataUrlFromFile(filePath: string): string {\n const abs = path.resolve(process.cwd(), filePath);\n const data = fs.readFileSync(abs);\n const mime = mimeTypeForMockAsset(filePath);\n return `data:${mime};base64,${data.toString(\"base64\")}`;\n}\n\nfunction extractJsonObjectFromText(text: string): Record<string, unknown> | null {\n const trimmed = String(text || \"\").trim();\n if (!trimmed) return null;\n try {\n const parsed = JSON.parse(trimmed);\n return isPlainObject(parsed) ? parsed : null;\n } catch {\n // try fenced code blocks\n }\n const fenceMatch = trimmed.match(/```(?:json)?\\s*([\\s\\S]*?)```/i);\n if (fenceMatch?.[1]) {\n try {\n const parsed = JSON.parse(fenceMatch[1].trim());\n return isPlainObject(parsed) ? parsed : null;\n } catch {\n return null;\n }\n }\n return null;\n}\n\nasync function buildLlmManifestPatchHints(\n manifest: ParsedManifest,\n mockAssets: MockAssetRef[],\n guidance: string | undefined,\n args: CliArgsLike,\n deps: AiCommandDeps,\n): Promise<{\n hints: Array<Record<string, unknown>>;\n provider: string;\n model: string;\n}> {\n const apiKey =\n deps.argString(args, \"llm-api-key\") ||\n process.env.OPENAI_API_KEY ||\n process.env.XAPPS_AI_API_KEY ||\n \"\";\n if (!apiKey) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing LLM API key. Provide --llm-api-key or set OPENAI_API_KEY/XAPPS_AI_API_KEY\",\n );\n }\n const baseUrl = String(\n deps.argString(args, \"llm-base-url\") ||\n process.env.OPENAI_BASE_URL ||\n \"https://api.openai.com/v1\",\n ).replace(/\\/+$/, \"\");\n const model = String(\n deps.argString(args, \"llm-model\") || process.env.XAPPS_AI_MODEL || \"gpt-5.2\",\n ).trim();\n const timeoutMs = parsePositiveIntOptionOrThrow(\n deps.argString(args, \"llm-timeout-ms\") || process.env.XAPPS_AI_TIMEOUT_MS,\n 30000,\n \"--llm-timeout-ms\",\n deps,\n );\n const imageAssets = mockAssets.filter((m) => m.kind === \"image\").slice(0, 4);\n const userContent: any[] = [\n {\n type: \"text\",\n text: [\n \"Analyze this xapp manifest and mock assets and propose JSON Forms manifest patch hints.\",\n \"Focus on json-forms widgets and infer complete form fields from mockups/guidance.\",\n \"When image mockups are provided, BOTH are needed: propose input_schema AND input_ui_schema (wizard + previews).\",\n 'Return STRICT JSON object only with shape: {\"hints\": [ ... ]}.',\n \"Each hint item must include: widget_name, bind_tool_name, reasons (array), patch (object), review_notes (array).\",\n \"Patch object must include tool_name, field, mode and target only input_schema or input_ui_schema.\",\n \"Supported patch modes: replace (for input_schema or input_ui_schema), append_preview_sections (input_ui_schema only).\",\n \"For image mockups, you MUST attempt complete input_schema inference first (best effort), then align input_ui_schema controls/previews to those fields.\",\n \"If confidence is low, still provide a best-effort input_schema and explain uncertainty in review_notes.\",\n \"For image mocks, prefer image-aware preview suggestions (e.g. attachment-scoped preview panels, data-view cards/list/table of image metadata, or publisher_preview-backed preview sections if endpoints already exist) instead of a generic form-level json-preview when possible.\",\n \"If you suggest preview sections, include component and any options needed (label, scope, options.view/options.dataSource, etc.).\",\n \"Use only supported preview/display components and views: components=[json-preview, location-map-preview, data-view]; data-view types=[key-value, list, table, badges, cards, json].\",\n \"Do not modify security/guards/connectivity.\",\n guidance ? `User guidance: ${guidance}` : \"User guidance: none\",\n `Manifest JSON:\\n${JSON.stringify(manifest, null, 2)}`,\n `Mock assets summary:\\n${JSON.stringify(mockAssets, null, 2)}`,\n ].join(\"\\n\\n\"),\n },\n ];\n for (const asset of imageAssets) {\n try {\n userContent.push({\n type: \"image_url\",\n image_url: { url: toDataUrlFromFile(asset.path) },\n });\n } catch {\n // skip unreadable asset\n }\n }\n\n const payload = {\n model,\n response_format: { type: \"json_object\" },\n messages: [\n {\n role: \"system\",\n content:\n \"You are an xapps manifest assistant. Propose minimal, safe JSON Forms manifest patch hints (input_schema and input_ui_schema only).\",\n },\n {\n role: \"user\",\n content: userContent,\n },\n ],\n temperature: 0.2,\n };\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n let response: Response;\n try {\n response = await fetch(`${baseUrl}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${apiKey}`,\n },\n body: JSON.stringify(payload),\n signal: controller.signal,\n });\n } catch (err: any) {\n if (err?.name === \"AbortError\") {\n throw deps.makeCliError(\"CLI_RUNTIME_ERROR\", `LLM request timed out after ${timeoutMs}ms`, {\n provider: \"openai-compatible\",\n model,\n timeout_ms: timeoutMs,\n });\n }\n throw err;\n } finally {\n clearTimeout(timer);\n }\n const rawText = await response.text();\n if (!response.ok) {\n throw deps.makeCliError(\"CLI_RUNTIME_ERROR\", `LLM request failed: status=${response.status}`, {\n status: response.status,\n body: rawText.slice(0, 2000),\n provider: \"openai-compatible\",\n model,\n });\n }\n let parsedResp: any = null;\n try {\n parsedResp = JSON.parse(rawText);\n } catch {\n throw deps.makeCliError(\"CLI_RUNTIME_ERROR\", \"LLM returned non-JSON response envelope\", {\n provider: \"openai-compatible\",\n model,\n });\n }\n const content = String(parsedResp?.choices?.[0]?.message?.content || \"\");\n const llmJson = extractJsonObjectFromText(content);\n if (!llmJson || !Array.isArray((llmJson as any).hints)) {\n throw deps.makeCliError(\"CLI_RUNTIME_ERROR\", \"LLM response missing hints[] JSON payload\", {\n provider: \"openai-compatible\",\n model,\n });\n }\n const hints = ((llmJson as any).hints as unknown[]).filter((item) =>\n isPlainObject(item),\n ) as Array<Record<string, unknown>>;\n return { hints, provider: \"openai-compatible\", model };\n}\n\nfunction evaluateLlmHintCompleteness(\n hints: Array<Record<string, unknown>>,\n options: { requireInputSchema: boolean; requireInputUiSchema: boolean },\n): { ok: boolean; missing: string[] } {\n const fields = new Set<string>();\n for (const hint of hints) {\n const patch = isPlainObject(hint.patch) ? (hint.patch as Record<string, unknown>) : null;\n const field = String(patch?.field || \"\").trim();\n if (field) fields.add(field);\n }\n const missing: string[] = [];\n if (options.requireInputSchema && !fields.has(\"input_schema\")) missing.push(\"input_schema\");\n if (options.requireInputUiSchema && !fields.has(\"input_ui_schema\"))\n missing.push(\"input_ui_schema\");\n return { ok: missing.length === 0, missing };\n}\n\nasync function readAiGuidanceInteractiveIfRequested(\n args: CliArgsLike,\n deps: AiCommandDeps,\n): Promise<string | undefined> {\n const guidance = readAiGuidance(args, deps);\n if (guidance) return guidance;\n if (!deps.argFlag(args, \"ask-guidance\")) return undefined;\n if (!input.isTTY || !output.isTTY) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"--ask-guidance requires an interactive terminal (TTY) or use --guidance/--guidance-file\",\n );\n }\n const rl = readline.createInterface({ input, output });\n try {\n const answer = await rl.question(\n \"AI guidance (optional). Example: infer complete form fields from mockups, build a step wizard, add supported preview sections, and exclude payment screens because payment is handled by guards.\\n> \",\n );\n const trimmed = String(answer || \"\").trim();\n return trimmed || undefined;\n } finally {\n rl.close();\n }\n}\n\nfunction applySingleManifestPatchHint(\n manifest: Record<string, any>,\n hint: Record<string, unknown>,\n): { changed: boolean; summary: string } {\n const patch = isPlainObject(hint.patch) ? (hint.patch as Record<string, unknown>) : null;\n if (!patch) return { changed: false, summary: \"skip: missing patch object\" };\n const toolName = String(patch.tool_name || \"\").trim();\n const field = String(patch.field || \"\").trim();\n const mode = String(patch.mode || \"\").trim();\n if (!toolName || (field !== \"input_ui_schema\" && field !== \"input_schema\") || !mode) {\n return {\n changed: false,\n summary: `skip: unsupported patch target (${toolName || \"?\"}:${field}:${mode})`,\n };\n }\n const tools = Array.isArray((manifest as any).tools) ? ((manifest as any).tools as any[]) : [];\n const tool = tools.find((t) => String(t?.tool_name || \"\") === toolName);\n if (!tool || typeof tool !== \"object\") {\n return { changed: false, summary: `skip: tool not found (${toolName})` };\n }\n\n if (mode === \"replace\") {\n if (!isPlainObject(patch.value)) {\n return { changed: false, summary: `skip: replace patch missing object value (${toolName})` };\n }\n const before = JSON.stringify((tool as any)[field] ?? null);\n (tool as any)[field] = patch.value;\n const after = JSON.stringify((tool as any)[field] ?? null);\n return { changed: before !== after, summary: `replace ${toolName}.${field}` };\n }\n\n if (mode === \"append_preview_sections\") {\n if (field !== \"input_ui_schema\") {\n return {\n changed: false,\n summary: `skip: append_preview_sections only supports input_ui_schema (${toolName})`,\n };\n }\n const previewSections = Array.isArray(patch.preview_sections)\n ? (patch.preview_sections.filter((s) => isPlainObject(s)) as Record<string, unknown>[])\n : [];\n if (!previewSections.length) {\n return { changed: false, summary: `skip: no preview_sections (${toolName})` };\n }\n const ui = isPlainObject((tool as any)[field])\n ? ((tool as any)[field] as Record<string, any>)\n : null;\n if (!ui) {\n (tool as any)[field] = { type: \"VerticalLayout\", elements: [...previewSections] };\n return { changed: true, summary: `create ${toolName}.${field} with preview sections` };\n }\n const uiType = String((ui as any).type || \"\");\n if (uiType === \"Categorization\" && Array.isArray((ui as any).elements)) {\n const categories = (ui as any).elements as any[];\n const attachmentCategory = categories.find((cat) => {\n if (!cat || typeof cat !== \"object\") return false;\n const label = String((cat as any).label || \"\").toLowerCase();\n if (label.includes(\"attachment\")) return true;\n const els = Array.isArray((cat as any).elements) ? (cat as any).elements : [];\n return els.some(\n (el: any) =>\n String(el?.type || \"\") === \"Control\" &&\n String(el?.scope || \"\")\n .toLowerCase()\n .includes(\"/attachments\"),\n );\n });\n if (attachmentCategory) {\n if (!Array.isArray((attachmentCategory as any).elements))\n (attachmentCategory as any).elements = [];\n const targetEls = (attachmentCategory as any).elements as any[];\n const before = JSON.stringify(targetEls);\n for (const section of previewSections) targetEls.push(section);\n return {\n changed: before !== JSON.stringify(targetEls),\n summary: `append preview sections to attachment category in ${toolName}.${field}`,\n };\n }\n categories.push({\n type: \"Category\",\n label: \"Preview\",\n elements: [...previewSections],\n });\n return { changed: true, summary: `append Preview category to ${toolName}.${field}` };\n }\n if (!Array.isArray((ui as any).elements)) (ui as any).elements = [];\n const targetEls = (ui as any).elements as any[];\n const before = JSON.stringify(targetEls);\n for (const section of previewSections) targetEls.push(section);\n return {\n changed: before !== JSON.stringify(targetEls),\n summary: `append preview sections to ${toolName}.${field}`,\n };\n }\n\n return { changed: false, summary: `skip: unsupported patch mode (${mode})` };\n}\n\nfunction renderSimpleJsonDiff(beforeText: string, afterText: string): string {\n if (beforeText === afterText) return \"(no changes)\";\n const before = beforeText.split(\"\\n\");\n const after = afterText.split(\"\\n\");\n let prefix = 0;\n while (prefix < before.length && prefix < after.length && before[prefix] === after[prefix])\n prefix += 1;\n let suffix = 0;\n while (\n suffix < before.length - prefix &&\n suffix < after.length - prefix &&\n before[before.length - 1 - suffix] === after[after.length - 1 - suffix]\n ) {\n suffix += 1;\n }\n const beforeMid = before.slice(prefix, before.length - suffix);\n const afterMid = after.slice(prefix, after.length - suffix);\n const outLines: string[] = [];\n const startLine = prefix + 1;\n outLines.push(`@@ manifest.json:${startLine} @@`);\n for (const line of beforeMid) outLines.push(`- ${line}`);\n for (const line of afterMid) outLines.push(`+ ${line}`);\n return outLines.join(\"\\n\");\n}\n\nfunction applyManifestPatchHintsToFile(\n filePath: string,\n manifest: ParsedManifest,\n hints: Array<Record<string, unknown>>,\n): {\n applied: boolean;\n changed: boolean;\n file: string;\n applied_count: number;\n summaries: string[];\n diff: string;\n} {\n const beforeObj = JSON.parse(JSON.stringify(manifest)) as Record<string, any>;\n const beforeText = `${JSON.stringify(beforeObj, null, 2)}\\n`;\n const workObj = JSON.parse(beforeText) as Record<string, any>;\n const summaries: string[] = [];\n let appliedCount = 0;\n let changed = false;\n for (const hint of hints) {\n const result = applySingleManifestPatchHint(workObj, hint);\n summaries.push(result.summary);\n if (result.summary.startsWith(\"skip:\")) continue;\n appliedCount += 1;\n changed = changed || result.changed;\n }\n const afterText = `${JSON.stringify(workObj, null, 2)}\\n`;\n if (changed) {\n // validate before write\n parseXappManifest(workObj);\n fs.writeFileSync(filePath, afterText, \"utf8\");\n }\n return {\n applied: true,\n changed,\n file: filePath,\n applied_count: appliedCount,\n summaries,\n diff: renderSimpleJsonDiff(beforeText, afterText),\n };\n}\n\nfunction parseAiCheckPolicy(\n rawPolicy: unknown,\n policyFile: string,\n deps: AiCommandDeps,\n): AiCheckPolicy {\n if (!isPlainObject(rawPolicy)) {\n throw deps.makeCliError(\"CLI_AI_POLICY_INVALID\", \"Invalid AI policy JSON: expected object\", {\n file: policyFile,\n });\n }\n const policy = rawPolicy as Record<string, unknown>;\n const schemaVersion =\n typeof policy.schema_version === \"string\" ? String(policy.schema_version).trim() : \"\";\n if (schemaVersion && schemaVersion !== \"xapps.ai.policy.v1\") {\n throw deps.makeCliError(\n \"CLI_AI_POLICY_INVALID\",\n `Invalid AI policy schema_version: ${schemaVersion} (expected xapps.ai.policy.v1)`,\n { file: policyFile, schema_version: schemaVersion },\n );\n }\n if (\n Object.prototype.hasOwnProperty.call(policy, \"require_read_only\") &&\n typeof policy.require_read_only !== \"boolean\"\n ) {\n throw deps.makeCliError(\n \"CLI_AI_POLICY_INVALID\",\n \"AI policy require_read_only must be boolean\",\n {\n file: policyFile,\n },\n );\n }\n if (Object.prototype.hasOwnProperty.call(policy, \"max_actions\")) {\n const value = policy.max_actions;\n if (!Number.isInteger(value) || Number(value) < 0) {\n throw deps.makeCliError(\n \"CLI_AI_POLICY_INVALID\",\n \"AI policy max_actions must be a non-negative integer\",\n { file: policyFile },\n );\n }\n }\n if (Object.prototype.hasOwnProperty.call(policy, \"allow_action_kinds\")) {\n const value = policy.allow_action_kinds;\n if (\n !Array.isArray(value) ||\n value.some((item) => typeof item !== \"string\" || !String(item).trim())\n ) {\n throw deps.makeCliError(\n \"CLI_AI_POLICY_INVALID\",\n \"AI policy allow_action_kinds must be an array of non-empty strings\",\n { file: policyFile },\n );\n }\n }\n return rawPolicy as AiCheckPolicy;\n}\n\nfunction buildAiCheckPolicyPreset(name: string, deps: AiCommandDeps): AiCheckPolicy {\n const normalized = String(name || \"\")\n .trim()\n .toLowerCase();\n if (normalized !== \"internal-readonly\") {\n throw deps.makeCliError(\n \"CLI_INVALID_OPTION\",\n `Unknown --policy-preset: ${name} (expected internal-readonly)`,\n { label: \"--policy-preset\", value: name, allowed: [\"internal-readonly\"] },\n );\n }\n return {\n schema_version: \"xapps.ai.policy.v1\",\n require_read_only: true,\n max_actions: 16,\n allow_action_kinds: [\n \"analyze.manifest\",\n \"suggest.flow_checks\",\n \"analyze.renderers\",\n \"suggest.renderer_checks\",\n \"suggest.manifest_patch\",\n \"suggest.context_refresh\",\n \"suggest.ai_policy_check\",\n \"suggest.flow_run\",\n ],\n };\n}\n\nexport async function runAiPlanCommand(args: CliArgsLike, deps: AiCommandDeps) {\n const subcommand = deps.argString(args, \"_subcommand\");\n if (subcommand !== \"plan\") {\n throw deps.makeCliError(\"CLI_INVALID_ARGS\", \"Missing required subcommand: ai plan|check\");\n }\n const mode = parseAiMode(args, deps);\n const from = deps.argString(args, \"from\");\n if (!from) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing required argument: --from <manifest.json>\",\n );\n }\n const repoRoot = deps.findRepoRoot();\n if (!repoRoot) {\n throw deps.makeCliError(\n \"CLI_REPO_NOT_FOUND\",\n \"xapps ai plan --mode internal is repo-only and requires the xapps monorepo checkout\",\n );\n }\n const { manifest, filePath } = deps.parseManifestFromFile(from);\n const mockAssets = listMockAssets(filePath, args, deps);\n const guidance = await readAiGuidanceInteractiveIfRequested(args, deps);\n const context = deps.buildContextExportPayload(manifest, filePath);\n const refs = deps.buildDevRefs(repoRoot);\n const rendererFamilies = detectPlanRendererFamilies(manifest);\n const preset = deps.argString(args, \"preset\");\n let presetPayload: Record<string, unknown> | undefined;\n if (preset) {\n const normalizedPreset = preset.trim().toLowerCase();\n if (normalizedPreset !== \"internal-v1\") {\n throw deps.makeCliError(\n \"CLI_INVALID_OPTION\",\n `Invalid --preset: ${preset} (expected internal-v1)`,\n {\n label: \"--preset\",\n value: preset,\n },\n );\n }\n presetPayload = deps.buildInternalV1ContextPreset(repoRoot);\n }\n const flow = deps.argString(args, \"flow\");\n const normalizedFlow = flow ? flow.trim().toLowerCase() : undefined;\n const supportedFlows = new Set([\"pay-per-request\", \"guard-orchestration\", \"xplace-certs\"]);\n if (normalizedFlow && !supportedFlows.has(normalizedFlow)) {\n throw deps.makeCliError(\"CLI_INVALID_OPTION\", `Unknown --flow: ${flow}`, {\n label: \"--flow\",\n value: flow,\n allowed: Array.from(supportedFlows),\n });\n }\n\n const actions: Array<Record<string, unknown>> = [\n {\n kind: \"analyze.manifest\",\n status: \"proposed\",\n description: \"Review manifest/tools/widgets against V1 baseline contracts\",\n },\n {\n kind: \"suggest.flow_checks\",\n status: \"proposed\",\n flows: [\"pay-per-request\", \"guard-orchestration\", \"xplace-certs\"],\n },\n {\n kind: \"analyze.renderers\",\n status: \"proposed\",\n renderers: rendererFamilies,\n description:\n \"Classify widget renderer families and map to V1 checks (publisher-rendered, jsonforms, platform)\",\n },\n ];\n if (rendererFamilies.includes(\"jsonforms\")) {\n actions.push({\n kind: \"suggest.renderer_checks\",\n status: \"proposed\",\n renderer: \"jsonforms\",\n command:\n \"npm test -- src/__tests__/jsonformsEmbed.test.ts src/__tests__/jsonformsStepDispatch.test.ts src/__tests__/jsonformsFiles.test.ts\",\n });\n }\n if (rendererFamilies.includes(\"publisher-rendered\")) {\n actions.push({\n kind: \"suggest.renderer_checks\",\n status: \"proposed\",\n renderer: \"publisher-rendered\",\n command:\n \"npm test -- src/__tests__/embedWidgets.test.ts src/__tests__/guardContractParity.test.ts src/__tests__/integrationHostGuardContracts.test.ts\",\n });\n }\n if (presetPayload) {\n actions.push({\n kind: \"suggest.context_refresh\",\n status: \"proposed\",\n command: `xapps context export --from ${filePath} --preset internal-v1`,\n });\n actions.push({\n kind: \"suggest.ai_policy_check\",\n status: \"proposed\",\n command: \"xapps ai check --mode internal --plan <plan.json> --policy <policy.json> --json\",\n });\n }\n if (normalizedFlow) {\n actions.push({\n kind: \"suggest.flow_run\",\n status: \"proposed\",\n flow: normalizedFlow,\n command: `xapps dev check flow --name ${normalizedFlow} --run --json`,\n });\n }\n const heuristicManifestPatchHints = buildManifestPatchHints(manifest, mockAssets, guidance);\n let manifestPatchHints = heuristicManifestPatchHints;\n let llmInfo:\n | {\n provider: string;\n model: string;\n enabled: true;\n used: boolean;\n }\n | undefined;\n if (deps.argFlag(args, \"llm\")) {\n llmInfo = { provider: \"openai-compatible\", model: \"unknown\", enabled: true, used: false };\n try {\n const llmHints = await buildLlmManifestPatchHints(manifest, mockAssets, guidance, args, deps);\n llmInfo = {\n provider: llmHints.provider,\n model: llmHints.model,\n enabled: true,\n used: true,\n };\n if (llmHints.hints.length > 0) {\n const hasImageMocks = mockAssets.some((m) => m.kind === \"image\");\n const completeness = evaluateLlmHintCompleteness(llmHints.hints, {\n requireInputSchema: hasImageMocks,\n requireInputUiSchema: hasImageMocks,\n });\n if (!completeness.ok && hasImageMocks) {\n (heuristicManifestPatchHints as any).__llm_error =\n `LLM hints incomplete for image mocks (missing: ${completeness.missing.join(\", \")})`;\n } else {\n manifestPatchHints = llmHints.hints;\n }\n }\n } catch (err: any) {\n // Preserve deterministic plan output with a warning + fallback heuristic hints.\n const msg = String(err?.message || err || \"LLM manifest hint generation failed\");\n llmInfo = {\n ...(llmInfo || { provider: \"openai-compatible\", model: \"unknown\", enabled: true }),\n used: false,\n };\n (manifestPatchHints as any).__llm_error = msg;\n }\n }\n if (manifestPatchHints.length > 0) {\n actions.push({\n kind: \"suggest.manifest_patch\",\n status: \"proposed\",\n target: \"manifest.json\",\n description:\n \"Mock-aware JSON Forms manifest upgrade hints (stepper wizard + preview sections) generated for review\",\n hints: manifestPatchHints,\n ...(llmInfo\n ? {\n source: llmInfo.used ? \"llm\" : \"heuristic_fallback\",\n llm: llmInfo,\n }\n : { source: \"heuristic\" }),\n ...(((manifestPatchHints as any).__llm_error as string | undefined)\n ? { llm_error: (manifestPatchHints as any).__llm_error }\n : {}),\n });\n }\n\n const payload: AiPlanPayload = {\n schema_version: \"xapps.ai.plan.v1\",\n ok: true,\n mode,\n read_only: true,\n source: {\n manifest_path: filePath,\n manifest_sha256:\n context &&\n isPlainObject(context.source) &&\n typeof context.source.manifest_sha256 === \"string\"\n ? context.source.manifest_sha256\n : undefined,\n },\n context: {\n summary: isPlainObject(context.summary) ? (context.summary as Record<string, unknown>) : {},\n refs,\n ...(guidance\n ? {\n ai_inputs: {\n guidance,\n },\n }\n : {}),\n ...(mockAssets.length > 0\n ? {\n mock_assets: {\n count: mockAssets.length,\n kinds: Array.from(new Set(mockAssets.map((item) => item.kind))).sort(),\n items: mockAssets,\n },\n }\n : {}),\n ...(llmInfo ? { llm: llmInfo } : {}),\n ...(presetPayload ? { preset: presetPayload } : {}),\n },\n actions,\n warnings: [\n ...(refs.every((ref) => ref.exists) ? [] : [\"Some internal engineering refs are missing\"]),\n ...(((manifestPatchHints as any).__llm_error as string | undefined)\n ? [\n `LLM manifest hint generation failed, heuristic fallback used: ${(manifestPatchHints as any).__llm_error}`,\n ]\n : []),\n ],\n errors: [],\n };\n if (normalizedFlow) (payload as any).flow = normalizedFlow;\n (payload as any).coverage = {\n renderers: rendererFamilies,\n flows_supported: Array.from(supportedFlows.values()),\n flow_selected: normalizedFlow || null,\n preset_selected: presetPayload ? \"internal-v1\" : null,\n };\n\n if (deps.argFlag(args, \"apply-manifest-hints\")) {\n const patchAction = actions.find((a) => a.kind === \"suggest.manifest_patch\");\n const hints = Array.isArray((patchAction as any)?.hints)\n ? (((patchAction as any).hints as unknown[]).filter((h) => isPlainObject(h)) as Array<\n Record<string, unknown>\n >)\n : [];\n if (!hints.length) {\n (payload as any).manifest_apply = {\n applied: true,\n changed: false,\n file: filePath,\n applied_count: 0,\n summaries: [\"skip: no manifest patch hints available\"],\n diff: \"(no changes)\",\n };\n } else {\n (payload as any).manifest_apply = applyManifestPatchHintsToFile(filePath, manifest, hints);\n }\n }\n\n const outPath = deps.argString(args, \"out\");\n const rendered = `${JSON.stringify(payload, null, 2)}\\n`;\n if (outPath) {\n const target = path.resolve(process.cwd(), outPath);\n fs.mkdirSync(path.dirname(target), { recursive: true });\n fs.writeFileSync(target, rendered);\n console.log(`AI plan exported: ${target}`);\n return;\n }\n if (deps.argFlag(args, \"json\")) {\n console.log(rendered.trimEnd());\n return;\n }\n if ((payload as any).manifest_apply) {\n const apply = (payload as any).manifest_apply as Record<string, unknown>;\n console.log(\n [\n \"Manifest hints apply:\",\n `File: ${String(apply.file || filePath)}`,\n `Changed: ${String(Boolean(apply.changed))}`,\n `Applied hints: ${String(apply.applied_count || 0)}`,\n ...(Array.isArray(apply.summaries)\n ? (apply.summaries as unknown[]).map((s) => `- ${String(s)}`)\n : []),\n \"Diff:\",\n String(apply.diff || \"(no diff)\"),\n \"\",\n ].join(\"\\n\"),\n );\n }\n console.log(\n [\n `AI plan (${mode}, read-only)`,\n `Manifest: ${payload.source.manifest_path}`,\n `Slug: ${String(payload.context.summary.slug || \"n/a\")}`,\n `Proposed actions: ${payload.actions.length}`,\n ].join(\"\\n\"),\n );\n}\n\nexport function runAiCheckCommand(args: CliArgsLike, deps: AiCommandDeps) {\n const subcommand = deps.argString(args, \"_subcommand\");\n if (subcommand !== \"check\") {\n throw deps.makeCliError(\"CLI_INVALID_ARGS\", \"Missing required subcommand: ai plan|check\");\n }\n const mode = parseAiMode(args, deps);\n const planFile = deps.argString(args, \"plan\");\n if (!planFile) {\n throw deps.makeCliError(\"CLI_INVALID_ARGS\", \"Missing required argument: --plan <plan.json>\");\n }\n const payload = deps.readJsonFile(planFile);\n const policyFile = deps.argString(args, \"policy\");\n const policyPreset = deps.argString(args, \"policy-preset\");\n if (policyFile && policyPreset) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Use either --policy <policy.json> or --policy-preset <name>, not both\",\n );\n }\n let policy: AiCheckPolicy | null = null;\n if (policyFile) {\n policy = parseAiCheckPolicy(deps.readJsonFile(policyFile), policyFile, deps);\n } else if (policyPreset) {\n policy = buildAiCheckPolicyPreset(policyPreset, deps);\n }\n\n const checks: Array<{ key: string; ok: boolean; details?: Record<string, unknown> }> = [];\n const plan = isPlainObject(payload) ? payload : {};\n checks.push({\n key: \"schema_version\",\n ok: plan.schema_version === \"xapps.ai.plan.v1\",\n details: { actual: plan.schema_version || null },\n });\n checks.push({\n key: \"mode\",\n ok: plan.mode === mode,\n details: { actual: plan.mode || null, expected: mode },\n });\n checks.push({\n key: \"read_only\",\n ok: plan.read_only === true,\n details: { actual: plan.read_only ?? null },\n });\n checks.push({\n key: \"actions_array\",\n ok: Array.isArray(plan.actions),\n details: { actualType: Array.isArray(plan.actions) ? \"array\" : typeof plan.actions },\n });\n\n if (policy) {\n const requireReadOnly = policy.require_read_only !== false;\n checks.push({\n key: \"policy_require_read_only\",\n ok: !requireReadOnly || plan.read_only === true,\n details: { required: requireReadOnly, actual: plan.read_only ?? null },\n });\n if (typeof policy.max_actions === \"number\" && Number.isFinite(policy.max_actions)) {\n const actionCount = Array.isArray(plan.actions) ? plan.actions.length : 0;\n checks.push({\n key: \"policy_max_actions\",\n ok: actionCount <= policy.max_actions,\n details: { max_actions: policy.max_actions, actual: actionCount },\n });\n }\n if (Array.isArray(policy.allow_action_kinds)) {\n const allowed = new Set(\n policy.allow_action_kinds\n .filter((item): item is string => typeof item === \"string\")\n .map((item) => item.trim())\n .filter(Boolean),\n );\n const disallowedKinds = Array.isArray(plan.actions)\n ? plan.actions\n .filter((item): item is Record<string, unknown> => isPlainObject(item))\n .map((item) => String(item.kind || \"\").trim())\n .filter((kind) => kind && !allowed.has(kind))\n : [];\n checks.push({\n key: \"policy_allow_action_kinds\",\n ok: disallowedKinds.length === 0,\n details: { disallowed_kinds: disallowedKinds },\n });\n }\n }\n\n const result = {\n schema_version: \"xapps.ai.check.v1\",\n ok: checks.every((check) => check.ok),\n mode,\n read_only: true,\n checks,\n errors: checks\n .filter((check) => !check.ok)\n .map((check) => ({ code: \"CLI_AI_PLAN_INVALID\", check: check.key })),\n ...(policy\n ? {\n policy: {\n applied: true,\n ...(policyFile ? { source: path.resolve(process.cwd(), policyFile) } : {}),\n ...(policyPreset ? { preset: String(policyPreset).trim().toLowerCase() } : {}),\n },\n }\n : {}),\n };\n const outPath = deps.argString(args, \"out\");\n const rendered = `${JSON.stringify(result, null, 2)}\\n`;\n if (outPath) {\n const target = path.resolve(process.cwd(), outPath);\n fs.mkdirSync(path.dirname(target), { recursive: true });\n fs.writeFileSync(target, rendered);\n console.log(`AI check exported: ${target}`);\n } else if (deps.argFlag(args, \"json\")) {\n console.log(rendered.trimEnd());\n } else {\n console.log(\n [\n `AI check (${mode}) ${result.ok ? \"PASS\" : \"FAIL\"}`,\n ...checks.map((check) => `${check.ok ? \"OK\" : \"FAIL\"} ${check.key}`),\n ].join(\"\\n\"),\n );\n }\n if (!result.ok) {\n throw deps.makeCliError(\"CLI_AI_PLAN_INVALID\", \"xapps ai check failed: invalid plan contract\", {\n checks,\n });\n }\n}\n", "import { createPublisherApiClient, PublisherApiClientError } from \"@xapps-platform/server-sdk\";\nimport fs from \"node:fs\";\n\ntype CliArgs = Record<string, string | boolean>;\n\ntype CliErrorFactory = (code: string, message: string, details?: Record<string, unknown>) => Error;\n\ntype PublisherCommandDeps = {\n argString: (args: CliArgs, ...keys: string[]) => string | undefined;\n argFlag: (args: CliArgs, key: string) => boolean;\n makeCliError: CliErrorFactory;\n};\n\nfunction normalizePublisherGatewayApiBaseUrl(input: string): string {\n const raw = String(input || \"\").trim();\n if (!raw) return \"\";\n const parsed = new URL(raw);\n const pathname = parsed.pathname || \"/\";\n if (pathname === \"/\" || pathname === \"\") {\n parsed.pathname = \"/v1\";\n }\n return parsed.toString().replace(/\\/+$/g, \"\");\n}\n\nfunction parseHttpUrlOrThrow(value: string, flagName: string): string {\n const trimmed = String(value || \"\").trim();\n if (!trimmed) throw new Error(`Invalid ${flagName}: empty`);\n try {\n const url = new URL(trimmed);\n if (!/^https?:$/.test(url.protocol)) {\n throw new Error(`unsupported protocol ${url.protocol}`);\n }\n return url.toString();\n } catch (err: any) {\n throw new Error(`Invalid ${flagName}: ${err?.message || String(err)}`);\n }\n}\n\nfunction resolveSecretInput(\n args: CliArgs,\n deps: PublisherCommandDeps,\n): {\n secret?: string;\n secretRef?: string;\n source: \"env\" | \"stdin\" | \"secret_ref\";\n sourceName?: string;\n} {\n const secretRef = deps.argString(args, \"secret-ref\");\n const secretEnvName = deps.argString(args, \"secret-env\");\n const secretStdin = deps.argFlag(args, \"secret-stdin\");\n const selected = [Boolean(secretRef), Boolean(secretEnvName), Boolean(secretStdin)].filter(\n Boolean,\n ).length;\n if (selected !== 1) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Provide exactly one of --secret-ref, --secret-env, or --secret-stdin\",\n );\n }\n if (secretRef) {\n return { secretRef, source: \"secret_ref\" };\n }\n if (secretEnvName) {\n const envValue = String(process.env[secretEnvName] || \"\");\n if (!envValue.trim()) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n `Environment variable is empty or missing for --secret-env ${secretEnvName}`,\n );\n }\n return { secret: envValue, source: \"env\", sourceName: secretEnvName };\n }\n // Read from fd 0 synchronously to keep CLI code simple/deterministic for scripts.\n const secret = fs.readFileSync(0, \"utf8\");\n if (!String(secret || \"\").trim()) {\n throw deps.makeCliError(\"CLI_INVALID_ARGS\", \"--secret-stdin provided but stdin is empty\");\n }\n return { secret, source: \"stdin\" };\n}\n\nfunction pickLatestVersion(items: Array<Record<string, unknown>>): Record<string, unknown> | null {\n if (!Array.isArray(items) || items.length === 0) return null;\n const published = items.filter((v) => String((v as any).status || \"\") === \"published\");\n const target = published.length > 0 ? published : items;\n return [...target].sort((a, b) =>\n String((b as any).published_at || (b as any).created_at || \"\").localeCompare(\n String((a as any).published_at || (a as any).created_at || \"\"),\n ),\n )[0] as Record<string, unknown>;\n}\n\nasync function resolveEndpointIdOrThrow(\n args: CliArgs,\n deps: PublisherCommandDeps,\n client: ReturnType<typeof createPublisherApiClient>,\n): Promise<{ endpointId: string; endpointEnv: string; xappSlug?: string }> {\n const endpointIdArg = deps.argString(args, \"endpoint-id\");\n const xappSlug = deps.argString(args, \"xapp-slug\");\n const targetClientSlug = deps.argString(args, \"target-client-slug\", \"target_client_slug\");\n const endpointEnv = deps.argString(args, \"env\") || \"prod\";\n if (endpointIdArg) {\n return { endpointId: endpointIdArg, endpointEnv, ...(xappSlug ? { xappSlug } : {}) };\n }\n if (!xappSlug) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Provide --endpoint-id or (--xapp-slug and optional --env)\",\n );\n }\n let targetClientId = \"\";\n if (targetClientSlug) {\n const clients = await client.listClients();\n const matches = (clients.items || []).filter(\n (item) => String((item as any).slug || \"\") === targetClientSlug,\n );\n if (matches.length === 0) {\n throw deps.makeCliError(\n \"CLI_NOT_FOUND\",\n `Publisher client not found for slug=${targetClientSlug}`,\n );\n }\n if (matches.length > 1) {\n throw deps.makeCliError(\n \"CLI_CONFLICT\",\n `Publisher client slug matched multiple rows: ${targetClientSlug}`,\n );\n }\n targetClientId = String((matches[0] as any).id || \"\").trim();\n if (!targetClientId) {\n throw deps.makeCliError(\n \"CLI_INVALID_RESPONSE\",\n `Resolved client id is missing for slug=${targetClientSlug}`,\n );\n }\n }\n const xapps = await client.listXapps();\n const candidates = (xapps.items || []).filter((item) => {\n if (String((item as any).slug || \"\") !== xappSlug) return false;\n if (!targetClientId) return true;\n return String((item as any).target_client_id || \"\") === targetClientId;\n });\n if (candidates.length === 0) {\n throw deps.makeCliError(\n \"CLI_NOT_FOUND\",\n targetClientId\n ? `Publisher xapp not found for slug=${xappSlug} target_client_slug=${targetClientSlug}`\n : `Publisher xapp not found for slug=${xappSlug}`,\n );\n }\n if (candidates.length > 1) {\n throw deps.makeCliError(\n \"CLI_CONFLICT\",\n targetClientId\n ? `Multiple publisher xapps matched slug=${xappSlug} target_client_slug=${targetClientSlug}`\n : `Multiple publisher xapps matched slug=${xappSlug}; pass --target-client-slug`,\n );\n }\n const xapp = candidates[0] as Record<string, unknown>;\n if (!String((xapp as any).id || \"\")) {\n throw deps.makeCliError(\"CLI_NOT_FOUND\", `Publisher xapp not found for slug=${xappSlug}`);\n }\n const versions = await client.listXappVersions(String((xapp as any).id));\n const version = pickLatestVersion(versions.items as Array<Record<string, unknown>>);\n if (!version || !String((version as any).id || \"\")) {\n throw deps.makeCliError(\n \"CLI_NOT_FOUND\",\n `No publisher xapp versions found for slug=${xappSlug}`,\n );\n }\n const endpoints = await client.listEndpoints(String((version as any).id));\n const endpoint = endpoints.items.find(\n (item) => String((item as any).env || \"\").trim() === endpointEnv,\n );\n if (!endpoint || !String((endpoint as any).id || \"\")) {\n throw deps.makeCliError(\n \"CLI_NOT_FOUND\",\n `Endpoint not found for xapp=${xappSlug} env=${endpointEnv}`,\n );\n }\n return { endpointId: String((endpoint as any).id), endpointEnv, xappSlug };\n}\n\nfunction normalizeAuthTypeForMatch(input: unknown): string {\n const raw = String(input || \"\")\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]/g, \"\");\n if (!raw) return \"\";\n if (raw === \"none\") return \"none\";\n if (raw.includes(\"api\") && raw.includes(\"key\")) return \"api_key_header\";\n if (raw === \"header\") return \"header\";\n if (raw === \"hmac\" || raw === \"hmacsha256\") return \"hmac\";\n return raw;\n}\n\nfunction readCredentialHeaderName(item: Record<string, unknown>): string {\n const direct = (item as any).auth_header_name;\n if (typeof direct === \"string\" && direct.trim()) return direct.trim();\n const configRaw = (item as any).config ?? (item as any).config_jsonb;\n const cfg =\n configRaw && typeof configRaw === \"string\"\n ? (() => {\n try {\n return JSON.parse(configRaw);\n } catch {\n return null;\n }\n })()\n : configRaw;\n if (cfg && typeof cfg === \"object\") {\n const header = (cfg as any).headerName ?? (cfg as any).header_name;\n if (typeof header === \"string\" && header.trim()) return header.trim();\n }\n return \"\";\n}\n\nfunction findMatchingEndpointCredential(\n items: Array<Record<string, unknown>>,\n input: { authType: string; headerName: string },\n): Record<string, unknown> | null {\n const wantAuth = normalizeAuthTypeForMatch(input.authType);\n const wantHeader = String(input.headerName || \"\")\n .trim()\n .toLowerCase();\n for (const item of items) {\n const authMatch = normalizeAuthTypeForMatch((item as any).auth_type) === wantAuth;\n if (!authMatch) continue;\n if (wantAuth === \"api_key_header\" || wantAuth === \"header\") {\n const existingHeader = readCredentialHeaderName(item).toLowerCase();\n if (wantHeader && existingHeader !== wantHeader) continue;\n }\n return item;\n }\n return null;\n}\n\nexport async function runPublisherEndpointCredentialSetCommand(\n args: CliArgs,\n deps: PublisherCommandDeps,\n) {\n const gatewayUrlRaw =\n deps.argString(args, \"gateway-url\", \"publisher-gateway-url\") ||\n process.env.XAPPS_CLI_PUBLISHER_GATEWAY_URL;\n if (!gatewayUrlRaw) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing required argument: --gateway-url <url> (or --publisher-gateway-url)\",\n );\n }\n const gatewayUrl = normalizePublisherGatewayApiBaseUrl(\n parseHttpUrlOrThrow(gatewayUrlRaw, \"--gateway-url\"),\n );\n const apiKey = deps.argString(args, \"api-key\", \"apiKey\") || process.env.XAPPS_CLI_API_KEY || \"\";\n const token = deps.argString(args, \"token\") || process.env.XAPPS_CLI_TOKEN || \"\";\n if (!apiKey && !token) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing auth: provide --api-key or --token (or XAPPS_CLI_API_KEY/XAPPS_CLI_TOKEN)\",\n );\n }\n\n let endpointId = \"\";\n\n const authType = deps.argString(args, \"auth-type\") || \"api-key\";\n const headerName = deps.argString(args, \"header-name\") || \"x-xplace-api-key\";\n const keyStatus = deps.argString(args, \"key-status\") || \"active\";\n const keyAlgorithm = deps.argString(args, \"key-algorithm\") || \"hmac-sha256\";\n const secretInput = resolveSecretInput(args, deps);\n\n const client = createPublisherApiClient({ baseUrl: gatewayUrl, apiKey, token });\n\n try {\n endpointId = (await resolveEndpointIdOrThrow(args, deps, client)).endpointId;\n\n const result = await client.createEndpointCredential(endpointId, {\n authType,\n config: {\n headerName,\n },\n initialKey: {\n ...(secretInput.secret ? { secret: secretInput.secret } : {}),\n ...(secretInput.secretRef ? { secretRef: secretInput.secretRef } : {}),\n status: keyStatus,\n algorithm: keyAlgorithm,\n },\n });\n\n const credential = (result as any).credential || {};\n const output = {\n ok: true,\n gateway_url: gatewayUrl,\n endpoint_id: endpointId,\n auth_type: String((credential as any).auth_type || authType),\n credential_id: String((credential as any).id || \"\"),\n active_kid: String((credential as any).active_kid || \"\"),\n secret_source: secretInput.source,\n ...(secretInput.sourceName ? { secret_env: secretInput.sourceName } : {}),\n header_name: headerName,\n };\n if (deps.argFlag(args, \"json\")) {\n console.log(JSON.stringify(output, null, 2));\n return;\n }\n console.log(\n `Publisher endpoint credential set: endpoint=${output.endpoint_id} credential=${output.credential_id || \"-\"} auth=${output.auth_type} header=${output.header_name} secret_source=${output.secret_source}`,\n );\n } catch (err: any) {\n if (err instanceof PublisherApiClientError) {\n throw deps.makeCliError(\n `CLI_${err.code}`,\n `Publisher endpoint credential set failed: ${err.message}`,\n { status: err.status, details: err.details, gateway_url: gatewayUrl },\n );\n }\n throw err;\n }\n}\n\nexport async function runPublisherEndpointCredentialEnsureCommand(\n args: CliArgs,\n deps: PublisherCommandDeps,\n) {\n const gatewayUrlRaw =\n deps.argString(args, \"gateway-url\", \"publisher-gateway-url\") ||\n process.env.XAPPS_CLI_PUBLISHER_GATEWAY_URL;\n if (!gatewayUrlRaw) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing required argument: --gateway-url <url> (or --publisher-gateway-url)\",\n );\n }\n const gatewayUrl = normalizePublisherGatewayApiBaseUrl(\n parseHttpUrlOrThrow(gatewayUrlRaw, \"--gateway-url\"),\n );\n const apiKey = deps.argString(args, \"api-key\", \"apiKey\") || process.env.XAPPS_CLI_API_KEY || \"\";\n const token = deps.argString(args, \"token\") || process.env.XAPPS_CLI_TOKEN || \"\";\n if (!apiKey && !token) {\n throw deps.makeCliError(\n \"CLI_INVALID_ARGS\",\n \"Missing auth: provide --api-key or --token (or XAPPS_CLI_API_KEY/XAPPS_CLI_TOKEN)\",\n );\n }\n\n const authType = deps.argString(args, \"auth-type\") || \"api-key\";\n const headerName = deps.argString(args, \"header-name\") || \"x-xplace-api-key\";\n const keyStatus = deps.argString(args, \"key-status\") || \"active\";\n const keyAlgorithm = deps.argString(args, \"key-algorithm\") || \"hmac-sha256\";\n\n const client = createPublisherApiClient({ baseUrl: gatewayUrl, apiKey, token });\n\n try {\n const resolved = await resolveEndpointIdOrThrow(args, deps, client);\n const endpointId = resolved.endpointId;\n const existing = await client.listEndpointCredentials(endpointId);\n const match = findMatchingEndpointCredential(existing.items as Array<Record<string, unknown>>, {\n authType,\n headerName,\n });\n if (match) {\n const output = {\n ok: true,\n ensured: true,\n created: false,\n gateway_url: gatewayUrl,\n endpoint_id: endpointId,\n credential_id: String((match as any).id || \"\"),\n auth_type: String((match as any).auth_type || authType),\n header_name: readCredentialHeaderName(match) || headerName,\n active_kid: String((match as any).active_kid || \"\"),\n };\n if (deps.argFlag(args, \"json\")) {\n console.log(JSON.stringify(output, null, 2));\n return;\n }\n console.log(\n `Publisher endpoint credential ensure: endpoint=${output.endpoint_id} credential=${output.credential_id || \"-\"} auth=${output.auth_type} header=${output.header_name} outcome=existing`,\n );\n return;\n }\n\n const secretInput = resolveSecretInput(args, deps);\n const result = await client.createEndpointCredential(endpointId, {\n authType,\n config: {\n headerName,\n },\n initialKey: {\n ...(secretInput.secret ? { secret: secretInput.secret } : {}),\n ...(secretInput.secretRef ? { secretRef: secretInput.secretRef } : {}),\n status: keyStatus,\n algorithm: keyAlgorithm,\n },\n });\n const credential = (result as any).credential || {};\n const output = {\n ok: true,\n ensured: true,\n created: true,\n gateway_url: gatewayUrl,\n endpoint_id: endpointId,\n auth_type: String((credential as any).auth_type || authType),\n credential_id: String((credential as any).id || \"\"),\n active_kid: String((credential as any).active_kid || \"\"),\n secret_source: secretInput.source,\n ...(secretInput.sourceName ? { secret_env: secretInput.sourceName } : {}),\n header_name: headerName,\n };\n if (deps.argFlag(args, \"json\")) {\n console.log(JSON.stringify(output, null, 2));\n return;\n }\n console.log(\n `Publisher endpoint credential ensure: endpoint=${output.endpoint_id} credential=${output.credential_id || \"-\"} auth=${output.auth_type} header=${output.header_name} outcome=created secret_source=${output.secret_source}`,\n );\n } catch (err: any) {\n if (err instanceof PublisherApiClientError) {\n throw deps.makeCliError(\n `CLI_${err.code}`,\n `Publisher endpoint credential ensure failed: ${err.message}`,\n { status: err.status, details: err.details, gateway_url: gatewayUrl },\n );\n }\n throw err;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_node_fs", "import_node_crypto", "import_node_http", "import_node_path", "import_promises", "import_server_sdk", "fs", "path", "import_node_fs", "import_node_path", "path", "fs", "import_node_fs", "import_node_path", "input", "isPlainObject", "path", "fs", "import_node_fs", "import_node_path", "import_node_path", "path", "import_node_fs", "import_node_path", "isPlainObject", "path", "fs", "input", "output", "readline", "targetEls", "before", "import_server_sdk", "import_node_fs", "input", "fs", "output", "path", "fs", "buildDevFlowInitTemplate", "http", "path", "shellEscapeArg", "input", "normalizePublisherGatewayApiBaseUrl", "os", "fs", "isPlainObject", "readline", "parseHttpUrlOrThrow", "leaseId", "checkpoint", "http"]
|
|
7
7
|
}
|