@agent-native/skills 0.2.403 → 0.2.405

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -432,6 +432,11 @@ export async function runSkillsCli(argv, options = {}) {
432
432
  error: error instanceof Error ? error.message : String(error),
433
433
  durationMs: Date.now() - startedAt,
434
434
  });
435
+ telemetry.captureException(error, {
436
+ handled: false,
437
+ tags: { source: "skills-command", command: parsed.command },
438
+ extra: { durationMs: Date.now() - startedAt },
439
+ });
435
440
  throw error;
436
441
  }
437
442
  finally {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { resolveAppForSkill, type BuiltInAppMcp } from \"./built-in-apps.js\";\nimport { registerMcpServer } from \"./connect.js\";\nimport type { ClientId } from \"./mcp-config-writers.js\";\nimport { createCliTelemetry, type CliTelemetry } from \"./telemetry.js\";\n\nexport type SkillClient =\n | \"codex\"\n | \"claude-code\"\n | \"cowork\"\n | \"pi\"\n | \"cursor\"\n | \"opencode\"\n | \"github-copilot\";\nexport type SkillScope = \"project\" | \"user\";\nexport type PlanMode = \"hosted\" | \"local-files\" | \"self-hosted\";\n\nexport interface SkillEntry {\n name: string;\n dir: string;\n description?: string;\n}\n\nexport interface InstallSkillsOptions {\n source?: string;\n skillNames?: string[];\n clients?: SkillClient[];\n scope?: SkillScope;\n baseDir?: string;\n yes?: boolean;\n dryRun?: boolean;\n updateInstructions?: boolean;\n instructionFiles?: string[];\n withGithubAction?: boolean;\n force?: boolean;\n connect?: boolean;\n quiet?: boolean;\n deviceFlowTimeoutMs?: number;\n log?: (message: string) => void;\n isInteractive?: () => boolean;\n telemetry?: CliTelemetry;\n promptSkills?: (context: SkillsPromptContext) => Promise<string[] | null>;\n promptClients?: (\n context: ClientsPromptContext,\n ) => Promise<SkillClient[] | null>;\n promptScope?: (context: ScopePromptContext) => Promise<SkillScope | null>;\n promptUpdateInstructions?: () => Promise<boolean | null>;\n promptGithubAction?: (\n context: GithubActionPromptContext,\n ) => Promise<boolean | null>;\n promptPlanMode?: (context: PlanModePromptContext) => Promise<PlanMode | null>;\n promptPlanMcpUrl?: () => Promise<string | null>;\n /**\n * Register the hosted MCP server for app-backed skills (e.g. visual-plan /\n * visual-recap → the Agent-Native Plan MCP). Defaults to `true`; pass\n * `false` (CLI `--no-mcp`) to install the skill files only.\n */\n mcp?: boolean;\n planMode?: PlanMode;\n mcpUrl?: string;\n}\n\nexport interface InstalledMcpServer {\n serverName: string;\n mcpUrl: string;\n clients: SkillClient[];\n registeredClients: SkillClient[];\n files: string[];\n authenticated: boolean;\n guidance: string[];\n}\n\nexport interface InstallSkillsResult {\n source: string;\n skills: string[];\n clients: SkillClient[];\n scope: SkillScope;\n written: string[];\n instructionFiles: string[];\n githubActionPath?: string;\n mcpServers: InstalledMcpServer[];\n planMode?: PlanMode;\n dryRun: boolean;\n}\n\ninterface ParsedArgs {\n command: \"add\" | \"list\" | \"status\" | \"update\" | \"help\";\n source?: string;\n copySource: boolean;\n skillNames: string[];\n clients: SkillClient[];\n scope: SkillScope;\n scopeExplicit: boolean;\n yes: boolean;\n dryRun: boolean;\n printJson: boolean;\n updateInstructions?: boolean;\n instructionFiles: string[];\n withGithubAction: boolean;\n force: boolean;\n connect: boolean;\n baseDir?: string;\n mcp: boolean;\n planMode?: PlanMode;\n mcpUrl?: string;\n quiet: boolean;\n}\n\ninterface PromptOption<T extends string> {\n value: T;\n label: string;\n hint: string;\n}\n\nexport interface SkillsPromptContext {\n initialSkills: string[];\n options: Array<PromptOption<string>>;\n}\n\nexport interface ClientsPromptContext {\n initialClients: SkillClient[];\n options: Array<PromptOption<SkillClient>>;\n}\n\nexport interface ScopePromptContext {\n initialScope: SkillScope;\n}\n\nexport interface GithubActionPromptContext {\n workflowPath: string;\n setupCommand: string;\n docsUrl: string;\n}\n\nexport interface PlanModePromptContext {\n initialMode: PlanMode;\n}\n\nconst HELP = `@agent-native/skills\n\nUsage:\n npx @agent-native/skills@latest add [options]\n npx @agent-native/skills@latest list\n npx @agent-native/skills@latest status [skill|scaffold] [options]\n npx @agent-native/skills@latest update [skill|scaffold] [options]\n\nOptions:\n --skill <name> Install only this skill (repeatable)\n --client, -a <client> codex, claude-code, cowork, pi, cursor, opencode, github-copilot, or all\n (default: all; repeatable or comma-separated)\n --scope <user|project> Install globally or into the current project (default: user)\n -g, --global Alias for --scope user\n --project Alias for --scope project\n --update-instructions Add managed AGENTS.md / CLAUDE.md instructions when useful\n --no-update-instructions Skip managed instruction file updates\n --instructions-file <path> File to receive managed instructions (repeatable)\n --with-github-action Add .github/workflows/pr-visual-recap.yml when visual-recap is installed\n --mode <mode> App-backed skill mode: hosted, local-files, or self-hosted\n --mcp-url <url> Self-hosted app/MCP URL for app-backed skills\n --force Overwrite a different existing PR Visual Recap workflow\n --no-mcp Install skill files only; skip registering the app's MCP server\n --no-connect Register MCP where possible but skip inline browser/device authentication\n -y, --yes Use defaults in non-interactive mode\n --dry-run Print intended writes without changing files\n --json Print the result as JSON\n\nApp-backed skills (visual-plan, visual-recap, visualize-repo, content) register\ntheir hosted MCP server in your agent config by default so the agent can\nactually use them. Use --no-mcp to skip that and copy the files only.\nFor visual-plan/visual-recap/visualize-repo/content, choose --mode local-files\nfor local-file workflows, or --mode self-hosted --mcp-url <url> for your own app.\n\nExamples:\n npx @agent-native/skills@latest add\n npx @agent-native/skills@latest add --skill quick-recap\n npx @agent-native/skills@latest add --skill visual-recap --with-github-action\n npx @agent-native/skills@latest update scaffold --project\n`;\n\nconst CLIENTS: SkillClient[] = [\n \"codex\",\n \"claude-code\",\n \"cowork\",\n \"pi\",\n \"cursor\",\n \"opencode\",\n \"github-copilot\",\n];\nconst DEFAULT_SKILLS_SOURCE = \"BuilderIO/skills\";\nconst MANAGED_INSTRUCTIONS_START = \"<!-- BEGIN @agent-native/skills -->\";\nconst MANAGED_INSTRUCTIONS_END = \"<!-- END @agent-native/skills -->\";\n\nexport function parseSkillsCliArgs(argv: string[]): ParsedArgs {\n const first = argv[0];\n if (!first || first === \"help\" || first === \"--help\" || first === \"-h\") {\n return defaultArgs(\"help\");\n }\n\n const command =\n first === \"list\" ||\n first === \"status\" ||\n first === \"update\" ||\n first === \"add\"\n ? first\n : \"add\";\n const args =\n first === \"add\" ||\n first === \"list\" ||\n first === \"status\" ||\n first === \"update\"\n ? argv.slice(1)\n : argv;\n const out = defaultArgs(command);\n\n for (let i = 0; i < args.length; i += 1) {\n const arg = args[i];\n const eat = (flag: string): string | undefined => {\n if (arg === flag) {\n const next = args[++i];\n if (!next || next.startsWith(\"-\")) {\n throw new Error(`Missing value for ${flag}.`);\n }\n return next;\n }\n if (arg.startsWith(`${flag}=`)) {\n const value = arg.slice(flag.length + 1);\n if (!value) throw new Error(`Missing value for ${flag}.`);\n return value;\n }\n return undefined;\n };\n\n let value: string | undefined;\n if ((value = eat(\"--skill\")) !== undefined) out.skillNames.push(value);\n else if ((value = eat(\"-s\")) !== undefined) out.skillNames.push(value);\n else if ((value = eat(\"--client\")) !== undefined)\n out.clients.push(...normalizeClients(value));\n else if ((value = eat(\"--agent\")) !== undefined)\n out.clients.push(...normalizeClients(value));\n else if ((value = eat(\"-a\")) !== undefined)\n out.clients.push(...normalizeClients(value));\n else if ((value = eat(\"--scope\")) !== undefined) {\n out.scope = parseScope(value);\n out.scopeExplicit = true;\n } else if ((value = eat(\"--instructions-file\")) !== undefined)\n out.instructionFiles.push(value);\n else if ((value = eat(\"--cwd\")) !== undefined) out.baseDir = value;\n else if (arg === \"-g\" || arg === \"--global\") {\n out.scope = \"user\";\n out.scopeExplicit = true;\n } else if (arg === \"--project\") {\n out.scope = \"project\";\n out.scopeExplicit = true;\n } else if (arg === \"--copy\") {\n // Compatibility with the open `skills` CLI. This installer always copies.\n out.copySource = true;\n } else if (arg === \"-y\" || arg === \"--yes\") out.yes = true;\n else if (arg === \"--dry-run\") out.dryRun = true;\n else if (arg === \"--json\") out.printJson = true;\n else if (arg === \"--quiet\") out.quiet = true;\n else if (arg === \"--update-instructions\") out.updateInstructions = true;\n else if (arg === \"--no-update-instructions\") out.updateInstructions = false;\n else if (arg === \"--with-github-action\" || arg === \"--with-github-actions\")\n out.withGithubAction = true;\n else if ((value = eat(\"--mode\")) !== undefined) {\n out.planMode = parsePlanMode(value);\n } else if ((value = eat(\"--mcp-url\")) !== undefined) {\n out.mcpUrl = value;\n } else if (arg === \"--force\") out.force = true;\n else if (arg === \"--no-mcp\") out.mcp = false;\n else if (arg === \"--mcp\") out.mcp = true;\n else if (arg === \"--no-connect\" || arg === \"--skip-connect\")\n out.connect = false;\n else if (arg === \"--connect\") out.connect = true;\n else if (arg.startsWith(\"-\")) throw new Error(`Unknown option: ${arg}`);\n else if (!out.source) out.source = arg;\n else throw new Error(`Unexpected argument: ${arg}`);\n }\n\n if (\n out.command === \"add\" &&\n out.source &&\n out.source !== DEFAULT_SKILLS_SOURCE &&\n !out.copySource\n ) {\n throw new Error(\n `Unexpected argument: ${out.source}. @agent-native/skills installs the BuilderIO skills collection; use --skill <name> to choose a skill.`,\n );\n }\n if (\n out.command === \"add\" &&\n out.source === DEFAULT_SKILLS_SOURCE &&\n !out.copySource\n ) {\n out.source = undefined;\n }\n\n out.skillNames = unique(out.skillNames.map(normalizeSkillName));\n out.clients = unique(out.clients);\n out.instructionFiles = unique(out.instructionFiles);\n if (out.planMode && out.mcpUrl && out.planMode !== \"self-hosted\") {\n throw new Error(\"--mcp-url can only be used with --mode self-hosted.\");\n }\n if (out.mcpUrl && !out.planMode) out.planMode = \"self-hosted\";\n return out;\n}\n\n/**\n * Translate this package's parsed args into the argv shape `@agent-native/core`\n * skills expects. Core takes a single positional target + compatible flags; we\n * forward one explicit skill as that target and let core's interactive picker\n * handle 0-or-many selections.\n */\nfunction toCoreSkillsArgv(parsed: ParsedArgs): string[] {\n const out: string[] = [parsed.command];\n if (parsed.command === \"add\") {\n if (parsed.copySource && parsed.source && parsed.skillNames.length > 0) {\n out.push(parsed.source);\n for (const skill of parsed.skillNames) out.push(\"--skill\", skill);\n } else if (parsed.skillNames.length === 1) {\n out.push(parsed.skillNames[0]);\n } else if (parsed.skillNames.length > 1) {\n const appIds = unique(\n parsed.skillNames\n .map((name) => resolveAppForSkill(name)?.appId)\n .filter((appId): appId is string => Boolean(appId)),\n );\n if (\n appIds.length === 1 &&\n parsed.skillNames.every((name) => resolveAppForSkill(name))\n ) {\n out.push(appIds[0]);\n } else {\n for (const skill of parsed.skillNames) out.push(\"--skill\", skill);\n }\n }\n } else if (parsed.command === \"status\" || parsed.command === \"update\") {\n if (parsed.source) out.push(parsed.source);\n else if (parsed.skillNames.length === 1) out.push(parsed.skillNames[0]);\n }\n if (\n (parsed.command === \"add\" ||\n parsed.command === \"status\" ||\n parsed.command === \"update\") &&\n parsed.clients.length\n ) {\n out.push(\"--client\", parsed.clients.join(\",\"));\n }\n if (\n (parsed.command === \"add\" ||\n parsed.command === \"status\" ||\n parsed.command === \"update\") &&\n parsed.scopeExplicit\n ) {\n out.push(\"--scope\", parsed.scope);\n }\n if (parsed.command === \"add\" && parsed.yes) out.push(\"--yes\");\n if (parsed.dryRun) out.push(\"--dry-run\");\n if (parsed.printJson) out.push(\"--json\");\n if (parsed.command === \"add\" && parsed.withGithubAction)\n out.push(\"--with-github-action\");\n if (parsed.command === \"add\" && parsed.planMode)\n out.push(\"--mode\", parsed.planMode);\n if (parsed.command === \"add\" && parsed.mcpUrl)\n out.push(\"--mcp-url\", parsed.mcpUrl);\n if (parsed.command === \"add\" && parsed.force) out.push(\"--force\");\n if (parsed.command === \"add\" && parsed.mcp === false) out.push(\"--no-mcp\");\n if (parsed.command === \"add\" && parsed.connect === false)\n out.push(\"--no-connect\");\n if (parsed.command === \"add\" && parsed.updateInstructions === true)\n out.push(\"--update-instructions\");\n if (parsed.command === \"add\" && parsed.updateInstructions === false)\n out.push(\"--no-update-instructions\");\n return out;\n}\n\nfunction shouldLoadPublicCatalog(parsed: ParsedArgs): boolean {\n if (parsed.command === \"list\") return true;\n if (parsed.command !== \"add\") return false;\n if (parsed.copySource && parsed.source) return true;\n if (parsed.skillNames.length === 0) return true;\n return parsed.skillNames.some((name) => !resolveAppForSkill(name));\n}\n\nconst HIDDEN_STANDALONE_BUILT_INS = [\n \"assets\",\n \"content\",\n \"design-exploration\",\n \"visual-edit\",\n \"context-xray\",\n];\n\nfunction shouldShowDelegatedStartupProgress(\n parsed: ParsedArgs,\n options: Pick<InstallSkillsOptions, \"isInteractive\">,\n): boolean {\n return (\n parsed.command !== \"help\" &&\n !parsed.printJson &&\n !parsed.quiet &&\n cliInteractive(parsed, options)\n );\n}\n\nexport async function runSkillsCli(\n argv: string[],\n options: Pick<\n InstallSkillsOptions,\n | \"log\"\n | \"isInteractive\"\n | \"baseDir\"\n | \"promptSkills\"\n | \"promptClients\"\n | \"promptScope\"\n | \"promptUpdateInstructions\"\n | \"promptGithubAction\"\n | \"promptPlanMode\"\n | \"promptPlanMcpUrl\"\n > = {},\n): Promise<void> {\n const parsed = parseSkillsCliArgs(argv);\n\n // `@agent-native/skills` normally uses the exact same core flow as\n // `agent-native skills`; it only passes a broader public skill catalog.\n // AGENT_NATIVE_SKILLS_DIRECT=1 is set by core when it shells out to this\n // package as a headless file-copy worker for public/plain skill repos. That\n // direct mode is intentionally non-user-facing prompt plumbing.\n if (process.env.AGENT_NATIVE_SKILLS_DIRECT !== \"1\") {\n if (parsed.command === \"help\") {\n process.stdout.write(`${HELP}\\n`);\n return;\n }\n if (shouldShowDelegatedStartupProgress(parsed, options)) {\n process.stderr.write(\"Preparing Agent Native skills...\\n\");\n }\n const loadedSource = shouldLoadPublicCatalog(parsed)\n ? await materializeSource(parsed.source ?? DEFAULT_SKILLS_SOURCE)\n : null;\n try {\n const { runSkills } = (await import(\"@agent-native/core/cli/skills\")) as {\n runSkills: (\n argv: string[],\n options: Record<string, unknown>,\n ) => Promise<void>;\n };\n const publicSkillEntries = loadedSource\n ? discoverSkills(loadedSource.root).map((entry) => ({\n name: entry.name,\n description: entry.description,\n }))\n : [];\n await runSkills(toCoreSkillsArgv(parsed), {\n log: options.log,\n isInteractive: options.isInteractive,\n baseDir: parsed.baseDir ?? options.baseDir,\n catalogMode: \"all\",\n hiddenBuiltInSkillTargets: HIDDEN_STANDALONE_BUILT_INS,\n publicSkillSource:\n loadedSource?.root ?? parsed.source ?? DEFAULT_SKILLS_SOURCE,\n publicSkillEntries,\n promptSkills: options.promptSkills\n ? async (context: any) =>\n options.promptSkills?.({\n initialSkills: context.initialTargets,\n options: context.options,\n }) ?? null\n : undefined,\n promptClients: options.promptClients as any,\n promptScope: options.promptScope,\n promptGithubAction: options.promptGithubAction\n ? async (context: any) =>\n options.promptGithubAction?.({\n workflowPath: context.workflowPath,\n setupCommand: context.setupCommand,\n docsUrl: context.docsUrl,\n }) ?? null\n : undefined,\n promptPlanMode: options.promptPlanMode,\n promptPlanMcpUrl: options.promptPlanMcpUrl,\n promptUpdateInstructions: options.promptUpdateInstructions,\n });\n return;\n } finally {\n loadedSource?.cleanup?.();\n }\n }\n\n const startedAt = Date.now();\n const telemetry = createCliTelemetry({\n cli: \"skills-installer\",\n cliVersion: readCliVersion(),\n command: parsed.command,\n interactive: cliInteractive(parsed, options),\n });\n\n try {\n if (parsed.command === \"help\") {\n process.stdout.write(`${HELP}\\n`);\n return;\n }\n telemetry.track(\"skills_cli started\");\n const skillSource = parsed.source ?? DEFAULT_SKILLS_SOURCE;\n\n if (parsed.command === \"list\") {\n const source = await materializeSource(skillSource);\n try {\n const skills = discoverSkills(source.root);\n telemetry.track(\"skills_cli skills listed\", {\n availableCount: skills.length,\n available: skills.map((skill) => skill.name).join(\",\"),\n });\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(skills, null, 2)}\\n`);\n return;\n }\n for (const skill of skills) {\n process.stdout.write(\n `${skill.name}${skill.description ? ` - ${skill.description}` : \"\"}\\n`,\n );\n }\n return;\n } finally {\n source.cleanup?.();\n }\n }\n\n const stdoutLog =\n parsed.printJson || options.log\n ? options.log\n : (message: string) => process.stdout.write(`${message}\\n`);\n\n const result = await installSkills({\n source: skillSource,\n skillNames: parsed.skillNames,\n clients: parsed.clients,\n // Leave scope undefined unless the user passed --scope/-g/--project so the\n // installer can prompt for it interactively.\n scope: parsed.scopeExplicit ? parsed.scope : undefined,\n baseDir: parsed.baseDir ?? options.baseDir,\n yes: parsed.yes,\n dryRun: parsed.dryRun,\n updateInstructions: parsed.updateInstructions,\n instructionFiles: parsed.instructionFiles,\n withGithubAction: parsed.withGithubAction,\n force: parsed.force,\n connect: parsed.connect,\n quiet: parsed.printJson || parsed.quiet,\n log: parsed.printJson || parsed.quiet ? undefined : stdoutLog,\n isInteractive: options.isInteractive,\n promptSkills: options.promptSkills,\n promptClients: options.promptClients,\n promptScope: options.promptScope,\n promptUpdateInstructions: options.promptUpdateInstructions,\n promptGithubAction: options.promptGithubAction,\n promptPlanMode: options.promptPlanMode,\n promptPlanMcpUrl: options.promptPlanMcpUrl,\n telemetry,\n mcp: parsed.mcp,\n planMode: parsed.planMode,\n mcpUrl: parsed.mcpUrl,\n });\n\n telemetry.track(\"skills_cli completed\", {\n skills: result.skills.join(\",\"),\n clients: result.clients.join(\",\"),\n scope: result.scope,\n dryRun: result.dryRun,\n durationMs: Date.now() - startedAt,\n });\n\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n\n if (parsed.quiet) return;\n\n await printInstallResult(result, {\n baseDir: parsed.baseDir ?? options.baseDir ?? process.cwd(),\n dryRun: parsed.dryRun,\n });\n } catch (error) {\n telemetry.track(\"skills_cli failed\", {\n command: parsed.command,\n error: error instanceof Error ? error.message : String(error),\n durationMs: Date.now() - startedAt,\n });\n throw error;\n } finally {\n await telemetry.flush();\n }\n}\n\nfunction readCliVersion(): string {\n try {\n const here = path.dirname(fileURLToPath(import.meta.url));\n // dist/index.js → ../package.json\n const pkg = JSON.parse(\n fs.readFileSync(path.resolve(here, \"../package.json\"), \"utf8\"),\n ) as { version?: unknown };\n return typeof pkg.version === \"string\" ? pkg.version : \"unknown\";\n } catch {\n return \"unknown\";\n }\n}\n\nfunction cliInteractive(\n parsed: ParsedArgs,\n options: Pick<InstallSkillsOptions, \"isInteractive\">,\n): boolean {\n if (parsed.yes) return false;\n if (options.isInteractive) return options.isInteractive();\n if (process.env.CI === \"true\") return false;\n return Boolean(process.stdin.isTTY && process.stdout.isTTY);\n}\n\nexport async function installSkills(\n options: InstallSkillsOptions,\n): Promise<InstallSkillsResult> {\n const baseDir = path.resolve(options.baseDir ?? process.cwd());\n const log = options.log ?? (() => {});\n const sourceInput = options.source ?? DEFAULT_SKILLS_SOURCE;\n const source = await materializeSource(sourceInput);\n try {\n const entries = discoverSkills(source.root);\n if (entries.length === 0) {\n throw new Error(\n `No skills found in ${sourceInput}. Expected skills/*/SKILL.md.`,\n );\n }\n\n const preselected = (options.skillNames ?? []).length > 0;\n const selected = await resolveSelectedSkills(entries, options);\n options.telemetry?.track(\"skills_cli skills selected\", {\n selected: selected.map((skill) => skill.name).join(\",\"),\n selectedCount: selected.length,\n selectedAll: selected.length === entries.length,\n preselected,\n });\n\n const skillNames = selected.map((skill) => skill.name);\n const modeAwareApp = selectedModeAwareApp(skillNames);\n const planMode = await resolvePlanModeForSkills(skillNames, options);\n const planMcpOverride = await resolvePlanMcpOverrideForMode(\n planMode,\n options,\n modeAwareApp?.appId,\n );\n\n const clients = await resolveSelectedClients(options);\n options.telemetry?.track(\"skills_cli clients selected\", {\n clients: clients.join(\",\"),\n clientCount: clients.length,\n });\n\n const scope = await resolveSelectedScope(options);\n options.telemetry?.track(\"skills_cli scope selected\", { scope });\n\n const instructionBlocks = managedInstructionBlocksForSkills(skillNames);\n const shouldUpdateInstructions = await shouldUpdateManagedInstructions(\n instructionBlocks,\n options,\n );\n const shouldWriteGithubAction = await shouldWritePrVisualRecapWorkflow(\n selected.some((skill) => skill.name === \"visual-recap\"),\n options,\n baseDir,\n );\n const mcpApps =\n options.mcp === false || planMode === \"local-files\"\n ? []\n : mcpAppsForSkills(skillNames, planMcpOverride);\n const skillFileClients = clients.filter(supportsSkillFiles);\n if (skillFileClients.length === 0 && mcpApps.length === 0) {\n throw new Error(\n \"Claude Cowork is MCP-only for Agent Native skills. Choose Codex, Claude Code, Pi, Cursor, OpenCode, or GitHub Copilot for local skill files, or install an app-backed skill with MCP enabled.\",\n );\n }\n\n const progress = await createInstallProgress(\n options,\n 1 +\n (shouldUpdateInstructions ? 1 : 0) +\n (shouldWriteGithubAction ? 1 : 0) +\n mcpApps.length,\n );\n\n const written: string[] = [];\n let instructionFiles: string[] = [];\n let githubActionPath: string | undefined;\n const mcpServers: InstalledMcpServer[] = [];\n\n try {\n progress?.start(\"Installing skill files...\");\n for (const root of unique(\n skillFileClients.map((client) =>\n installRootForClient(client, scope, baseDir),\n ),\n )) {\n for (const skill of selected) {\n const destination = path.join(root, skill.name);\n written.push(destination);\n if (!options.dryRun) {\n fs.rmSync(destination, { recursive: true, force: true });\n fs.mkdirSync(path.dirname(destination), { recursive: true });\n fs.cpSync(skill.dir, destination, { recursive: true });\n }\n }\n }\n progress?.advance(\"Skill files installed\");\n\n options.telemetry?.track(\"skills_cli install completed\", {\n skills: skillNames.join(\",\"),\n clients: clients.join(\",\"),\n scope,\n writtenCount: written.length,\n dryRun: Boolean(options.dryRun),\n });\n\n if (shouldUpdateInstructions) {\n progress?.message(\"Updating managed instructions...\");\n instructionFiles = writeManagedInstructions(\n instructionBlocks,\n baseDir,\n skillFileClients,\n scope,\n options,\n );\n progress?.advance(\"Managed instructions updated\");\n if (instructionFiles.length) {\n options.telemetry?.track(\"skills_cli instructions updated\", {\n fileCount: instructionFiles.length,\n });\n }\n }\n\n if (shouldWriteGithubAction) {\n progress?.message(\"Writing PR Visual Recap workflow...\");\n githubActionPath = writePrVisualRecapWorkflow(baseDir, options);\n progress?.advance(\"PR Visual Recap workflow ready\");\n if (githubActionPath) {\n options.telemetry?.track(\"skills_cli github action added\");\n }\n }\n\n // Register the hosted MCP server for app-backed skills (visual-plan /\n // visual-recap → Agent-Native Plan) so the agent can actually call them,\n // not just read the SKILL.md. On by default; `--no-mcp` installs the\n // skill files only. One registration per app, so visual-plan +\n // visual-recap share a single \"plan\" server.\n if (mcpApps.length > 0) {\n const mcpClients: ClientId[] = clients\n .map(skillClientToMcpClient)\n .filter((client): client is ClientId => Boolean(client));\n if (mcpClients.length === 0) {\n throw new Error(\n \"MCP setup supports Claude Code, Codex, Cursor, OpenCode, GitHub Copilot / VS Code, or Claude Cowork. Use --mode local-files or --no-mcp for Pi.\",\n );\n }\n for (const app of mcpApps) {\n progress?.message(`Registering ${app.displayName} MCP server...`);\n if (!options.dryRun) {\n const registration = await registerMcpServer({\n descriptor: {\n serverName: app.serverName,\n mcpUrl: app.mcpUrl,\n aliases: app.aliases,\n authMode: app.authMode,\n hostedUrl: app.hostedUrl,\n },\n clients: mcpClients,\n scope,\n baseDir,\n interactive: options.connect !== false && isInteractive(options),\n log,\n deviceFlowTimeoutMs: options.deviceFlowTimeoutMs,\n });\n mcpServers.push({\n serverName: app.serverName,\n mcpUrl: app.mcpUrl,\n clients,\n registeredClients: unique(\n registration.written.map(\n (entry) => entry.client as SkillClient,\n ),\n ),\n files: [\n ...new Set(registration.written.map((entry) => entry.file)),\n ],\n authenticated: registration.authenticated,\n guidance: registration.guidance,\n });\n options.telemetry?.track(\"skills_cli mcp registered\", {\n serverName: app.serverName,\n clients: clients.join(\",\"),\n authenticated: registration.authenticated,\n });\n } else {\n mcpServers.push({\n serverName: app.serverName,\n mcpUrl: app.mcpUrl,\n clients,\n registeredClients: clients,\n files: [],\n authenticated: false,\n guidance: [],\n });\n }\n progress?.advance(`${app.displayName} MCP server ready`);\n }\n }\n progress?.stop(\"Installation complete\");\n } catch (err) {\n progress?.error(\"Installation failed\");\n throw err;\n }\n\n return {\n source: source.root,\n skills: skillNames,\n clients,\n scope,\n written,\n instructionFiles,\n githubActionPath,\n mcpServers,\n planMode,\n dryRun: Boolean(options.dryRun),\n };\n } finally {\n source.cleanup?.();\n }\n}\n\nfunction defaultArgs(command: ParsedArgs[\"command\"]): ParsedArgs {\n return {\n command,\n copySource: false,\n skillNames: [],\n clients: [],\n scope: \"user\",\n scopeExplicit: false,\n yes: false,\n dryRun: false,\n printJson: false,\n instructionFiles: [],\n withGithubAction: false,\n force: false,\n connect: true,\n mcp: true,\n quiet: false,\n };\n}\n\nfunction selectedModeAwareApp(skillNames: string[]): BuiltInAppMcp | undefined {\n return skillNames\n .map((skillName) => resolveAppForSkill(skillName))\n .find(\n (app): app is BuiltInAppMcp =>\n app?.appId === \"visual-plans\" || app?.appId === \"content\",\n );\n}\n\nasync function resolvePlanModeForSkills(\n skillNames: string[],\n options: InstallSkillsOptions,\n): Promise<PlanMode | undefined> {\n const modeAwareApp = selectedModeAwareApp(skillNames);\n if (options.planMode && !modeAwareApp) {\n throw new Error(\n \"--mode only applies to visual-plan / visual-recap / visualize-repo / content.\",\n );\n }\n if (options.mcpUrl && !modeAwareApp) {\n throw new Error(\n \"--mcp-url only applies to visual-plan / visual-recap / visualize-repo / content.\",\n );\n }\n if (!modeAwareApp) return undefined;\n\n if (options.mcpUrl && !options.planMode) return \"self-hosted\";\n if (options.planMode) return options.planMode;\n return modeAwareApp.appId === \"visual-plans\" ? \"hosted\" : undefined;\n}\n\nfunction resolvePlanMcpUrlOverride(input: string): {\n hostedUrl: string;\n mcpUrl: string;\n} {\n let parsed: URL;\n try {\n parsed = new URL(input);\n } catch {\n throw new Error(`--mcp-url must be a valid URL (got \"${input}\").`);\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\"--mcp-url must use http:// or https://.\");\n }\n const publicMcpSuffix = \"/mcp\";\n const legacyMcpSuffix = \"/_agent-native/mcp\";\n const trimmedPath = parsed.pathname.replace(/\\/+$/, \"\");\n const mcpSuffix = trimmedPath.endsWith(legacyMcpSuffix)\n ? legacyMcpSuffix\n : trimmedPath.endsWith(publicMcpSuffix)\n ? publicMcpSuffix\n : undefined;\n const appPath = mcpSuffix\n ? trimmedPath.slice(0, -mcpSuffix.length)\n : trimmedPath;\n const mcpPath = `${appPath || \"\"}${publicMcpSuffix}`;\n return {\n hostedUrl: `${parsed.origin}${appPath}`,\n mcpUrl: `${parsed.origin}${mcpPath}`,\n };\n}\n\nasync function resolvePlanMcpOverrideForMode(\n planMode: PlanMode | undefined,\n options: InstallSkillsOptions,\n appId: string | undefined,\n): Promise<{ appId: string; hostedUrl: string; mcpUrl: string } | undefined> {\n if (planMode === \"local-files\" && options.mcpUrl) {\n throw new Error(\"--mode local-files cannot be combined with --mcp-url.\");\n }\n if (planMode !== \"self-hosted\") return undefined;\n if (!options.mcpUrl) {\n throw new Error(\n \"--mode self-hosted requires --mcp-url <url> in direct mode.\",\n );\n }\n if (!appId) {\n throw new Error(\"--mode self-hosted requires an app-backed skill.\");\n }\n return { appId, ...resolvePlanMcpUrlOverride(options.mcpUrl) };\n}\n\nfunction parsePlanMode(value: string): PlanMode {\n if (value === \"hosted\" || value === \"local-files\" || value === \"self-hosted\")\n return value;\n throw new Error('--mode must be \"hosted\", \"local-files\", or \"self-hosted\".');\n}\n\nfunction parseScope(value: string): SkillScope {\n if (value === \"user\" || value === \"project\") return value;\n throw new Error(\"--scope must be user or project.\");\n}\n\nfunction normalizeClients(value: string): SkillClient[] {\n return value.split(\",\").flatMap((raw) => {\n const client = raw.trim().toLowerCase();\n if (!client) return [];\n if (client === \"all\") return CLIENTS;\n if (client === \"codex\") return [\"codex\" as const];\n if (client === \"cowork\" || client === \"claude-cowork\") {\n return [\"cowork\" as const];\n }\n if (client === \"pi\") return [\"pi\" as const];\n if (client === \"cursor\") return [\"cursor\" as const];\n if (client === \"opencode\" || client === \"open-code\") {\n return [\"opencode\" as const];\n }\n if (\n client === \"github-copilot\" ||\n client === \"copilot\" ||\n client === \"vscode\" ||\n client === \"vs-code\"\n ) {\n return [\"github-copilot\" as const];\n }\n if (\n client === \"claude\" ||\n client === \"claude-code\" ||\n client === \"claude-code-cli\"\n ) {\n return [\"claude-code\" as const];\n }\n throw new Error(\n `Unsupported client \"${raw}\". Use codex, claude-code, cowork, pi, cursor, opencode, github-copilot, or all.`,\n );\n });\n}\n\nfunction skillClientToMcpClient(client: SkillClient): ClientId | null {\n if (client === \"pi\") return null;\n if (client === \"claude-code\") return \"claude-code\";\n return client;\n}\n\nfunction supportsSkillFiles(client: SkillClient): boolean {\n return client !== \"cowork\";\n}\n\nfunction normalizeSkillName(value: string): string {\n const normalized = value.trim().toLowerCase();\n if (!/^[a-z0-9][a-z0-9._-]*$/.test(normalized)) {\n throw new Error(`Invalid skill name \"${value}\".`);\n }\n return normalized;\n}\n\nfunction unique<T>(values: T[]): T[] {\n return [...new Set(values)];\n}\n\nfunction plural(count: number, singular: string, pluralForm = `${singular}s`) {\n return `${count} ${count === 1 ? singular : pluralForm}`;\n}\n\nfunction shortenPathForOutput(file: string, baseDir: string): string {\n const resolved = path.resolve(file);\n const home = process.env.HOME || os.homedir();\n if (resolved === home || resolved.startsWith(`${home}${path.sep}`)) {\n return `~${resolved.slice(home.length)}`;\n }\n const base = path.resolve(baseDir);\n const relative = path.relative(base, resolved);\n if (relative && !relative.startsWith(\"..\") && !path.isAbsolute(relative)) {\n return `.${path.sep}${relative}`;\n }\n return file;\n}\n\nfunction summarizePaths(files: string[], baseDir: string, max = 4): string {\n const shortened = unique(files).map((file) =>\n shortenPathForOutput(file, baseDir),\n );\n if (shortened.length <= max) return shortened.join(\", \");\n return `${shortened.slice(0, max).join(\", \")} +${shortened.length - max} more`;\n}\n\nasync function createInstallProgress(\n options: InstallSkillsOptions,\n max: number,\n) {\n if (options.quiet || !isInteractive(options) || max <= 0) return null;\n const clack = await import(\"@clack/prompts\");\n const progress = clack.progress({ max, indicator: \"timer\" });\n let active = false;\n return {\n start(message: string) {\n active = true;\n progress.start(message);\n },\n message(message: string) {\n if (active) progress.message(message);\n },\n advance(message: string) {\n if (active) progress.advance(1, message);\n },\n stop(message: string) {\n if (!active) return;\n progress.stop(message);\n active = false;\n },\n error(message: string) {\n if (!active) return;\n progress.error(message);\n active = false;\n },\n };\n}\n\nfunction mcpAppsForSkills(\n skillNames: string[],\n planOverride?: { appId: string; hostedUrl: string; mcpUrl: string },\n): BuiltInAppMcp[] {\n const apps: BuiltInAppMcp[] = [];\n const seen = new Set<string>();\n for (const skillName of skillNames) {\n const app = resolveAppForSkill(skillName);\n if (!app || seen.has(app.appId)) continue;\n seen.add(app.appId);\n if (app.appId === planOverride?.appId) {\n apps.push({\n ...app,\n hostedUrl: planOverride.hostedUrl,\n mcpUrl: planOverride.mcpUrl,\n });\n } else {\n apps.push(app);\n }\n }\n return apps;\n}\n\nfunction mcpStatus(server: InstalledMcpServer, dryRun: boolean): string {\n if (dryRun) return `would register for ${server.clients.join(\", \")}`;\n\n const registered = server.registeredClients;\n const pending = server.clients.filter(\n (client) => !registered.includes(client),\n );\n const parts: string[] = [];\n if (registered.length > 0) {\n parts.push(\n `${server.authenticated ? \"registered and authenticated\" : \"registered\"} for ${registered.join(\", \")}`,\n );\n }\n if (pending.length > 0) {\n parts.push(`authentication pending for ${pending.join(\", \")}`);\n }\n return (\n parts.join(\"; \") ||\n `authentication pending for ${server.clients.join(\", \")}`\n );\n}\n\nasync function printInstallResult(\n result: InstallSkillsResult,\n options: { baseDir: string; dryRun: boolean },\n): Promise<void> {\n const clack = await import(\"@clack/prompts\");\n const verb = options.dryRun ? \"Would install\" : \"Installed\";\n const summary = [\n `Skills ${result.skills.join(\", \") || \"none\"}`,\n `Agents ${result.clients.join(\", \") || \"none\"}`,\n `Scope ${result.scope}`,\n result.planMode ? `Install mode ${result.planMode}` : \"\",\n result.written.length\n ? `Skill folders ${plural(result.written.length, \"folder\")} (${summarizePaths(\n result.written,\n options.baseDir,\n )})`\n : \"\",\n ].filter(Boolean);\n\n clack.note(summary.join(\"\\n\"), verb);\n\n if (result.instructionFiles.length) {\n clack.note(\n summarizePaths(result.instructionFiles, options.baseDir),\n \"Managed instructions\",\n );\n }\n\n if (result.githubActionPath) {\n clack.note(\n shortenPathForOutput(result.githubActionPath, options.baseDir),\n \"PR Visual Recap workflow\",\n );\n }\n\n if (result.mcpServers.length) {\n const mcpLines = result.mcpServers.map((server) => {\n const status = mcpStatus(server, options.dryRun);\n const files = server.files.length\n ? ` (${summarizePaths(server.files, options.baseDir, 2)})`\n : \"\";\n return `${server.serverName}: ${status}${files}`;\n });\n clack.note(mcpLines.join(\"\\n\"), \"MCP\");\n\n const guidance = result.mcpServers.flatMap((server) => server.guidance);\n if (guidance.length) {\n clack.note(guidance.join(\"\\n\"), \"Next steps\");\n }\n }\n\n if (\n result.planMode === \"local-files\" &&\n result.skills.some((skill) =>\n [\"visual-plan\", \"visual-recap\", \"visualize-repo\"].includes(skill),\n )\n ) {\n clack.note(\n [\n \"No sharing, all local.\",\n \"Run: npx @agent-native/core@latest plan blocks --out plan-blocks.md\",\n \"Check: npx @agent-native/core@latest plan local check --dir plans/<slug>\",\n \"Serve: npx @agent-native/core@latest plan local serve --dir plans/<slug> --open\",\n \"Verify: npx @agent-native/core@latest plan local verify --dir plans/<slug>\",\n ].join(\"\\n\"),\n \"Local Plan files\",\n );\n }\n\n if (!options.dryRun) {\n clack.note(\"Restart or reload selected agent clients if needed.\", \"Reload\");\n }\n\n clack.outro(`${options.dryRun ? \"Dry run complete\" : \"All set\"} ✅`);\n}\n\nasync function resolveSelectedSkills(\n entries: SkillEntry[],\n options: InstallSkillsOptions,\n): Promise<SkillEntry[]> {\n const byName = new Map(entries.map((entry) => [entry.name, entry]));\n const requested = unique((options.skillNames ?? []).map(normalizeSkillName));\n if (requested.length > 0) {\n const missing = requested.filter((name) => !byName.has(name));\n if (missing.length > 0) {\n throw new Error(\n `Unknown skill${missing.length === 1 ? \"\" : \"s\"}: ${missing.join(\", \")}. Available: ${entries\n .map((entry) => entry.name)\n .join(\", \")}.`,\n );\n }\n return requested.map((name) => byName.get(name)!);\n }\n\n return entries;\n}\n\nasync function resolveSelectedScope(\n options: InstallSkillsOptions,\n): Promise<SkillScope> {\n if (options.scope) return options.scope;\n return \"user\";\n}\n\nasync function resolveSelectedClients(\n options: InstallSkillsOptions,\n): Promise<SkillClient[]> {\n const requested = unique(options.clients ?? []);\n if (requested.length > 0) return requested;\n return CLIENTS;\n}\n\nfunction isInteractive(\n options: Pick<InstallSkillsOptions, \"isInteractive\">,\n): boolean {\n if (options.isInteractive) return options.isInteractive();\n if (process.env.CI === \"true\") return false;\n return Boolean(process.stdin.isTTY && process.stdout.isTTY);\n}\n\nfunction installRootForClient(\n client: SkillClient,\n scope: SkillScope,\n baseDir: string,\n): string {\n const home = process.env.HOME || os.homedir();\n if (scope === \"project\") {\n if (client !== \"claude-code\") {\n return path.join(baseDir, \".agents\", \"skills\");\n }\n return path.join(baseDir, \".claude\", \"skills\");\n }\n if (client === \"codex\") {\n return process.env.CODEX_HOME\n ? path.join(process.env.CODEX_HOME, \"skills\")\n : path.join(home, \".codex\", \"skills\");\n }\n if (client === \"pi\") {\n return path.join(home, \".agents\", \"skills\");\n }\n if (\n client === \"cursor\" ||\n client === \"opencode\" ||\n client === \"github-copilot\"\n ) {\n return path.join(home, \".agents\", \"skills\");\n }\n return path.join(home, \".claude\", \"skills\");\n}\n\nfunction discoverSkills(root: string): SkillEntry[] {\n const skillsRoot = resolveSkillsRoot(root);\n const directSkill = path.join(skillsRoot, \"SKILL.md\");\n if (fs.existsSync(directSkill)) {\n const entry = skillEntry(skillsRoot);\n return entry ? [entry] : [];\n }\n const entries = fs\n .readdirSync(skillsRoot, { withFileTypes: true })\n .filter((entry) => entry.isDirectory() && !entry.name.startsWith(\".\"))\n .map((entry) => skillEntry(path.join(skillsRoot, entry.name)))\n .filter((entry): entry is SkillEntry => Boolean(entry));\n return entries.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nfunction resolveSkillsRoot(root: string): string {\n for (const manifestPath of [\n path.join(root, \".codex-plugin\", \"plugin.json\"),\n path.join(root, \".claude-plugin\", \"plugin.json\"),\n ]) {\n if (!fs.existsSync(manifestPath)) continue;\n try {\n const manifest = JSON.parse(fs.readFileSync(manifestPath, \"utf-8\")) as {\n skills?: unknown;\n };\n if (typeof manifest.skills === \"string\") {\n const resolved = path.resolve(root, manifest.skills);\n if (fs.existsSync(resolved)) return resolved;\n }\n } catch {}\n }\n const conventional = path.join(root, \"skills\");\n if (fs.existsSync(conventional)) return conventional;\n return root;\n}\n\nfunction skillEntry(dir: string): SkillEntry | null {\n const skillFile = path.join(dir, \"SKILL.md\");\n if (!fs.existsSync(skillFile)) return null;\n const body = fs.readFileSync(skillFile, \"utf-8\");\n const frontmatter = body.match(/^---\\n([\\s\\S]*?)\\n---/);\n const name = frontmatterField(frontmatter?.[1], \"name\") ?? path.basename(dir);\n const description = frontmatterField(frontmatter?.[1], \"description\");\n return { name: normalizeSkillName(name), dir, description };\n}\n\nfunction frontmatterField(\n frontmatter: string | undefined,\n field: string,\n): string | undefined {\n if (!frontmatter) return undefined;\n const lines = frontmatter.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i += 1) {\n const match = lines[i].match(new RegExp(`^${field}:\\\\s*(.*)$`));\n if (!match) continue;\n const raw = match[1].trim();\n if (raw === \">-\" || raw === \">\" || raw === \"|-\" || raw === \"|\") {\n const block: string[] = [];\n for (let j = i + 1; j < lines.length; j += 1) {\n const line = lines[j];\n if (line.trim() && !/^\\s/.test(line)) break;\n block.push(line.replace(/^\\s+/, \"\"));\n }\n const value = raw.startsWith(\"|\") ? block.join(\"\\n\") : block.join(\" \");\n return value.replace(/\\s+/g, \" \").trim() || undefined;\n }\n return raw.replace(/^[\"']|[\"']$/g, \"\").trim() || undefined;\n }\n return undefined;\n}\n\nasync function materializeSource(input: string): Promise<{\n root: string;\n cleanup?: () => void;\n}> {\n const local = path.resolve(input);\n if (fs.existsSync(local)) return { root: local };\n\n const parsed = parseGitHubSource(input);\n if (!parsed) {\n throw new Error(\n `Skill source not found: ${input}. Use a local path, GitHub owner/repo, or GitHub URL.`,\n );\n }\n\n const tmpRoot = fs.mkdtempSync(\n path.join(os.tmpdir(), \"agent-native-skills-\"),\n );\n const archive = path.join(tmpRoot, \"source.tgz\");\n const ref = parsed.ref ?? \"main\";\n const url = `https://codeload.github.com/${parsed.owner}/${parsed.repo}/tar.gz/${encodeURIComponent(ref)}`;\n const response = await fetch(url, {\n headers: { \"user-agent\": \"@agent-native/skills\" },\n });\n if (!response.ok) {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n throw new Error(\n `Could not download ${parsed.owner}/${parsed.repo}@${ref}: HTTP ${response.status}.`,\n );\n }\n fs.writeFileSync(archive, Buffer.from(await response.arrayBuffer()));\n\n const extractDir = path.join(tmpRoot, \"extract\");\n fs.mkdirSync(extractDir, { recursive: true });\n const extracted = spawnSync(\"tar\", [\"-xzf\", archive, \"-C\", extractDir], {\n stdio: \"pipe\",\n encoding: \"utf-8\",\n });\n if (extracted.status !== 0) {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n throw new Error(\n `Could not extract ${input}: ${extracted.stderr || extracted.stdout}`,\n );\n }\n const [first] = fs\n .readdirSync(extractDir, { withFileTypes: true })\n .filter((entry) => entry.isDirectory());\n if (!first) {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n throw new Error(\n `Downloaded archive for ${input} did not contain a repo directory.`,\n );\n }\n return {\n root: path.join(extractDir, first.name),\n cleanup: () => fs.rmSync(tmpRoot, { recursive: true, force: true }),\n };\n}\n\nfunction parseGitHubSource(\n input: string,\n): { owner: string; repo: string; ref?: string } | null {\n const shorthand = input.match(\n /^([A-Za-z0-9_.-]+)\\/([A-Za-z0-9_.-]+)(?:#(.+))?$/,\n );\n if (shorthand) {\n return {\n owner: shorthand[1],\n repo: shorthand[2].replace(/\\.git$/, \"\"),\n ref: shorthand[3],\n };\n }\n\n let url: URL;\n try {\n url = new URL(input);\n } catch {\n return null;\n }\n if (url.hostname !== \"github.com\") return null;\n const parts = url.pathname.split(\"/\").filter(Boolean);\n if (parts.length < 2) return null;\n const treeIndex = parts.indexOf(\"tree\");\n return {\n owner: parts[0],\n repo: parts[1].replace(/\\.git$/, \"\"),\n ref:\n treeIndex >= 0 && parts[treeIndex + 1]\n ? parts.slice(treeIndex + 1).join(\"/\")\n : url.hash.slice(1) || undefined,\n };\n}\n\nfunction instructionContentForSkill(skillName: string): string | null {\n if (skillName === \"quick-recap\") {\n return \"When writing final response status indicators, use the /quick-recap skill always.\";\n }\n if (skillName === \"efficient-fable\") {\n return \"When operating as Claude Fable, use the /efficient-fable skill always.\";\n }\n if (skillName === \"efficient-frontier\") {\n return \"When using a high-cost frontier model for codebase-heavy work, use the /efficient-frontier skill always.\";\n }\n if (skillName === \"stay-within-limits\") {\n return \"When long-running or parallel work needs usage-limit checks, use the /stay-within-limits skill always.\";\n }\n if (skillName === \"visual-plan\") {\n return \"When work needs an interactive visual plan before implementation, use the /visual-plan skill always.\";\n }\n if (skillName === \"visual-recap\") {\n return \"When a PR, branch, commit, or diff needs an interactive visual recap, use the /visual-recap skill always.\";\n }\n if (skillName === \"visualize-repo\") {\n return \"When a repository needs local visual docs or a navigable Plan-backed repo viewer, use the /visualize-repo skill always.\";\n }\n return null;\n}\n\nfunction managedInstructionBlocksForSkills(skillNames: string[]): string[] {\n return skillNames\n .map((name) => instructionContentForSkill(name))\n .filter((block): block is string => Boolean(block));\n}\n\nasync function shouldUpdateManagedInstructions(\n blocks: string[],\n options: InstallSkillsOptions,\n): Promise<boolean> {\n if (blocks.length === 0) return false;\n let shouldUpdate = options.updateInstructions;\n if (shouldUpdate !== undefined) return shouldUpdate;\n if (options.yes) return true;\n return false;\n}\n\nfunction writeManagedInstructions(\n blocks: string[],\n baseDir: string,\n clients: SkillClient[],\n scope: SkillScope,\n options: InstallSkillsOptions,\n): string[] {\n if (blocks.length === 0) return [];\n const files = resolveInstructionFiles(\n baseDir,\n options.instructionFiles,\n clients,\n scope,\n );\n const content = `${MANAGED_INSTRUCTIONS_START}\n${blocks.join(\"\\n\")}\n${MANAGED_INSTRUCTIONS_END}`;\n for (const file of files) {\n if (options.dryRun) continue;\n upsertManagedBlock(file, content);\n }\n return files;\n}\n\nasync function maybeUpdateInstructions(\n skillNames: string[],\n baseDir: string,\n options: InstallSkillsOptions,\n): Promise<string[]> {\n const blocks = managedInstructionBlocksForSkills(skillNames);\n const clients = options.clients?.length ? options.clients : CLIENTS;\n const scope = options.scope ?? \"user\";\n if (!(await shouldUpdateManagedInstructions(blocks, options))) return [];\n return writeManagedInstructions(blocks, baseDir, clients, scope, options);\n}\n\nfunction resolveInstructionFiles(\n baseDir: string,\n explicit: string[] | undefined,\n clients: SkillClient[],\n scope: SkillScope,\n): string[] {\n if (explicit && explicit.length > 0) {\n return explicit.map((file) => path.resolve(baseDir, file));\n }\n const instructionClients = clients.filter(supportsSkillFiles);\n if (instructionClients.length === 0) return [];\n if (scope === \"user\") {\n const home = process.env.HOME || os.homedir();\n const files: string[] = [];\n if (instructionClients.includes(\"codex\")) {\n const codexHome = process.env.CODEX_HOME || path.join(home, \".codex\");\n files.push(path.join(codexHome, \"AGENTS.md\"));\n }\n if (instructionClients.includes(\"claude-code\")) {\n files.push(path.join(home, \".claude\", \"CLAUDE.md\"));\n }\n return unique(files);\n }\n const candidates = [\"AGENTS.md\", \"CLAUDE.md\"].map((file) =>\n path.join(baseDir, file),\n );\n const existing = candidates.filter((file) => fs.existsSync(file));\n return existing.length > 0 ? existing : [path.join(baseDir, \"AGENTS.md\")];\n}\n\nfunction stripManagedInstructionBlocks(text: string): string {\n const pattern = new RegExp(\n `${escapeRegExp(MANAGED_INSTRUCTIONS_START)}[\\\\s\\\\S]*?${escapeRegExp(MANAGED_INSTRUCTIONS_END)}`,\n \"g\",\n );\n return text.replace(pattern, \"\");\n}\n\nfunction upsertManagedBlock(file: string, block: string): void {\n fs.mkdirSync(path.dirname(file), { recursive: true });\n const existing = fs.existsSync(file) ? fs.readFileSync(file, \"utf-8\") : \"\";\n const firstAt = existing.indexOf(MANAGED_INSTRUCTIONS_START);\n let next: string;\n if (firstAt >= 0) {\n // Collapse EVERY managed block into a single fresh one re-inserted where the\n // first one began, so repeated installs or pre-existing duplicates never\n // leave the same instructions written more than once.\n const before = existing.slice(0, firstAt).trimEnd();\n const after = stripManagedInstructionBlocks(\n existing.slice(firstAt),\n ).trimStart();\n next =\n (before ? `${before}\\n\\n` : \"\") +\n `${block.trimEnd()}\\n` +\n (after ? `\\n${after}` : \"\");\n } else {\n next = `${existing.trimEnd()}${existing.trim() ? \"\\n\\n\" : \"\"}${block.trimEnd()}\\n`;\n }\n fs.writeFileSync(file, next, \"utf-8\");\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nconst PR_VISUAL_RECAP_DOCS_URL =\n \"https://www.agent-native.com/docs/pr-visual-recap\";\n\nfunction prVisualRecapWorkflowPath(baseDir: string): string {\n return path.join(baseDir, \".github\", \"workflows\", \"pr-visual-recap.yml\");\n}\n\nfunction prVisualRecapSetupCommand(): string {\n return \"npx @agent-native/core@latest recap setup\";\n}\n\nasync function promptForGithubAction(\n context: GithubActionPromptContext,\n): Promise<boolean | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.confirm({\n message:\n \"Optional: add automatic PR Visual Recaps? (GitHub Action)\\n\" +\n \" Posts a human-friendly recap on every pull request.\\n\" +\n ` Learn more: ${context.docsUrl}\\n` +\n ` Writes ${context.workflowPath}; ${context.setupCommand} finishes the GitHub secrets.`,\n initialValue: false,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Skipped PR Visual Recap workflow.\");\n return null;\n }\n return Boolean(result);\n}\n\nasync function shouldWritePrVisualRecapWorkflow(\n hasVisualRecap: boolean,\n options: InstallSkillsOptions,\n baseDir: string,\n): Promise<boolean> {\n if (!hasVisualRecap) return false;\n if (options.withGithubAction) return true;\n if (fs.existsSync(prVisualRecapWorkflowPath(baseDir))) return false;\n if (options.yes || !isInteractive(options)) return false;\n const prompt = options.promptGithubAction ?? promptForGithubAction;\n const choice = await prompt({\n workflowPath: path.join(\".github\", \"workflows\", \"pr-visual-recap.yml\"),\n setupCommand: prVisualRecapSetupCommand(),\n docsUrl: PR_VISUAL_RECAP_DOCS_URL,\n });\n return choice === true;\n}\n\nconst PR_VISUAL_RECAP_REUSABLE_WORKFLOW = `name: PR Visual Recap\n\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review, labeled, closed]\n\npermissions:\n contents: read\n\nconcurrency:\n group: pr-visual-recap-\\${{ github.event.pull_request.number }}\n cancel-in-progress: true\n\njobs:\n visual-recap:\n if: github.event.action != 'labeled' || vars.VISUAL_RECAP_REQUIRED_LABELS != ''\n permissions:\n checks: write\n contents: read\n issues: write\n pull-requests: read\n uses: BuilderIO/agent-native/.github/workflows/pr-visual-recap-reusable.yml@main\n with:\n skill-source: repo\n runs-on: \\${{ vars.VISUAL_RECAP_RUNS_ON || '\"ubuntu-latest\"' }}\n gate-runs-on: \\${{ vars.VISUAL_RECAP_GATE_RUNS_ON || 'ubuntu-latest' }}\n required-labels: \\${{ vars.VISUAL_RECAP_REQUIRED_LABELS || '' }}\n secrets:\n PLAN_RECAP_TOKEN: \\${{ secrets.PLAN_RECAP_TOKEN }}\n ANTHROPIC_API_KEY: \\${{ secrets.ANTHROPIC_API_KEY }}\n OPENAI_API_KEY: \\${{ secrets.OPENAI_API_KEY }}\n PLAN_RECAP_APP_URL: \\${{ secrets.PLAN_RECAP_APP_URL }}\n`;\n\nfunction writePrVisualRecapWorkflow(\n baseDir: string,\n options: InstallSkillsOptions,\n): string {\n const file = path.join(\n baseDir,\n \".github\",\n \"workflows\",\n \"pr-visual-recap.yml\",\n );\n if (options.dryRun) return file;\n if (fs.existsSync(file)) {\n const current = fs.readFileSync(file, \"utf-8\");\n if (current === PR_VISUAL_RECAP_REUSABLE_WORKFLOW) return file;\n if (!options.force) {\n throw new Error(\n `${file} already exists and differs. Re-run with --force to overwrite it.`,\n );\n }\n }\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(file, PR_VISUAL_RECAP_REUSABLE_WORKFLOW, \"utf-8\");\n return file;\n}\n\nexport function createInstallId(): string {\n return randomUUID();\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,kBAAkB,EAAsB,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,kBAAkB,EAAqB,MAAM,gBAAgB,CAAC;AAsIvE,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCZ,CAAC;AAEF,MAAM,OAAO,GAAkB;IAC7B,OAAO;IACP,aAAa;IACb,QAAQ;IACR,IAAI;IACJ,QAAQ;IACR,UAAU;IACV,gBAAgB;CACjB,CAAC;AACF,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AACjD,MAAM,0BAA0B,GAAG,qCAAqC,CAAC;AACzE,MAAM,wBAAwB,GAAG,mCAAmC,CAAC;AAErE,MAAM,UAAU,kBAAkB,CAAC,IAAc;IAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACvE,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,OAAO,GACX,KAAK,KAAK,MAAM;QAChB,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,KAAK;QACb,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,KAAK,CAAC;IACZ,MAAM,IAAI,GACR,KAAK,KAAK,KAAK;QACf,KAAK,KAAK,MAAM;QAChB,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,QAAQ;QAChB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACf,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,GAAG,GAAG,CAAC,IAAY,EAAsB,EAAE;YAC/C,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACvB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClC,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAC;gBAChD,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACzC,IAAI,CAAC,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAC;gBAC1D,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC;QAEF,IAAI,KAAyB,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAClE,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAClE,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,KAAK,SAAS;YAC9C,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;aAC1C,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,SAAS;YAC7C,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;aAC1C,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,SAAS;YACxC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;aAC1C,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAChD,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAC9B,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;QAC3B,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,qBAAqB,CAAC,CAAC,KAAK,SAAS;YAC3D,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC9B,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,SAAS;YAAE,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;aAC9D,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YAC5C,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC;YACnB,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;QAC3B,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YAC/B,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC;YACtB,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;QAC3B,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,0EAA0E;YAC1E,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;QACxB,CAAC;aAAM,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,OAAO;YAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;aACtD,IAAI,GAAG,KAAK,WAAW;YAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;aAC3C,IAAI,GAAG,KAAK,QAAQ;YAAE,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;aAC3C,IAAI,GAAG,KAAK,SAAS;YAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;aACxC,IAAI,GAAG,KAAK,uBAAuB;YAAE,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC;aACnE,IAAI,GAAG,KAAK,0BAA0B;YAAE,GAAG,CAAC,kBAAkB,GAAG,KAAK,CAAC;aACvE,IAAI,GAAG,KAAK,sBAAsB,IAAI,GAAG,KAAK,uBAAuB;YACxE,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC;aACzB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC/C,GAAG,CAAC,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACpD,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC;QACrB,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS;YAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;aAC1C,IAAI,GAAG,KAAK,UAAU;YAAE,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC;aACxC,IAAI,GAAG,KAAK,OAAO;YAAE,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;aACpC,IAAI,GAAG,KAAK,cAAc,IAAI,GAAG,KAAK,gBAAgB;YACzD,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;aACjB,IAAI,GAAG,KAAK,WAAW;YAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;aAC5C,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;aACnE,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;;YAClC,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,IACE,GAAG,CAAC,OAAO,KAAK,KAAK;QACrB,GAAG,CAAC,MAAM;QACV,GAAG,CAAC,MAAM,KAAK,qBAAqB;QACpC,CAAC,GAAG,CAAC,UAAU,EACf,CAAC;QACD,MAAM,IAAI,KAAK,CACb,wBAAwB,GAAG,CAAC,MAAM,wGAAwG,CAC3I,CAAC;IACJ,CAAC;IACD,IACE,GAAG,CAAC,OAAO,KAAK,KAAK;QACrB,GAAG,CAAC,MAAM,KAAK,qBAAqB;QACpC,CAAC,GAAG,CAAC,UAAU,EACf,CAAC;QACD,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC;IACzB,CAAC;IAED,GAAG,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAChE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,GAAG,CAAC,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACpD,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ;QAAE,GAAG,CAAC,QAAQ,GAAG,aAAa,CAAC;IAC9D,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,MAAkB;IAC1C,MAAM,GAAG,GAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACxB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU;gBAAE,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;aAAM,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1C,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;aAAM,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,MAAM,CACnB,MAAM,CAAC,UAAU;iBACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;iBAC9C,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CACtD,CAAC;YACF,IACE,MAAM,CAAC,MAAM,KAAK,CAAC;gBACnB,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAC3D,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,UAAU;oBAAE,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACtE,IAAI,MAAM,CAAC,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;aACtC,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,IACE,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK;QACvB,MAAM,CAAC,OAAO,KAAK,QAAQ;QAC3B,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC;QAC9B,MAAM,CAAC,OAAO,CAAC,MAAM,EACrB,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,IACE,CAAC,MAAM,CAAC,OAAO,KAAK,KAAK;QACvB,MAAM,CAAC,OAAO,KAAK,QAAQ;QAC3B,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC;QAC9B,MAAM,CAAC,aAAa,EACpB,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,GAAG;QAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,MAAM;QAAE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,SAAS;QAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,gBAAgB;QACrD,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACnC,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,QAAQ;QAC7C,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,MAAM;QAC3C,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK;QAAE,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClE,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK;QAAE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK;QACtD,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3B,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,kBAAkB,KAAK,IAAI;QAChE,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,kBAAkB,KAAK,KAAK;QACjE,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,uBAAuB,CAAC,MAAkB;IACjD,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACpD,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,2BAA2B,GAAG;IAClC,QAAQ;IACR,SAAS;IACT,oBAAoB;IACpB,aAAa;IACb,cAAc;CACf,CAAC;AAEF,SAAS,kCAAkC,CACzC,MAAkB,EAClB,OAAoD;IAEpD,OAAO,CACL,MAAM,CAAC,OAAO,KAAK,MAAM;QACzB,CAAC,MAAM,CAAC,SAAS;QACjB,CAAC,MAAM,CAAC,KAAK;QACb,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAc,EACd,OAAO,GAYH,EAAE;IAEN,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAExC,mEAAmE;IACnE,wEAAwE;IACxE,yEAAyE;IACzE,4EAA4E;IAC5E,gEAAgE;IAChE,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,GAAG,EAAE,CAAC;QACnD,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QACD,IAAI,kCAAkC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;YACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,YAAY,GAAG,uBAAuB,CAAC,MAAM,CAAC;YAClD,CAAC,CAAC,MAAM,iBAAiB,CAAC,MAAM,CAAC,MAAM,IAAI,qBAAqB,CAAC;YACjE,CAAC,CAAC,IAAI,CAAC;QACT,IAAI,CAAC;YACH,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAKnE,CAAC;YACF,MAAM,kBAAkB,GAAG,YAAY;gBACrC,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAChD,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,WAAW,EAAE,KAAK,CAAC,WAAW;iBAC/B,CAAC,CAAC;gBACL,CAAC,CAAC,EAAE,CAAC;YACP,MAAM,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE;gBACxC,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,aAAa,EAAE,OAAO,CAAC,aAAa;gBACpC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;gBAC1C,WAAW,EAAE,KAAK;gBAClB,yBAAyB,EAAE,2BAA2B;gBACtD,iBAAiB,EACf,YAAY,EAAE,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,qBAAqB;gBAC9D,kBAAkB;gBAClB,YAAY,EAAE,OAAO,CAAC,YAAY;oBAChC,CAAC,CAAC,KAAK,EAAE,OAAY,EAAE,EAAE,CACrB,OAAO,CAAC,YAAY,EAAE,CAAC;wBACrB,aAAa,EAAE,OAAO,CAAC,cAAc;wBACrC,OAAO,EAAE,OAAO,CAAC,OAAO;qBACzB,CAAC,IAAI,IAAI;oBACd,CAAC,CAAC,SAAS;gBACb,aAAa,EAAE,OAAO,CAAC,aAAoB;gBAC3C,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;oBAC5C,CAAC,CAAC,KAAK,EAAE,OAAY,EAAE,EAAE,CACrB,OAAO,CAAC,kBAAkB,EAAE,CAAC;wBAC3B,YAAY,EAAE,OAAO,CAAC,YAAY;wBAClC,YAAY,EAAE,OAAO,CAAC,YAAY;wBAClC,OAAO,EAAE,OAAO,CAAC,OAAO;qBACzB,CAAC,IAAI,IAAI;oBACd,CAAC,CAAC,SAAS;gBACb,cAAc,EAAE,OAAO,CAAC,cAAc;gBACtC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;gBAC1C,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;aAC3D,CAAC,CAAC;YACH,OAAO;QACT,CAAC;gBAAS,CAAC;YACT,YAAY,EAAE,OAAO,EAAE,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,kBAAkB,CAAC;QACnC,GAAG,EAAE,kBAAkB;QACvB,UAAU,EAAE,cAAc,EAAE;QAC5B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC;KAC7C,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QACD,SAAS,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,IAAI,qBAAqB,CAAC;QAE3D,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACpD,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC3C,SAAS,CAAC,KAAK,CAAC,0BAA0B,EAAE;oBAC1C,cAAc,EAAE,MAAM,CAAC,MAAM;oBAC7B,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;iBACvD,CAAC,CAAC;gBACH,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC7D,OAAO;gBACT,CAAC;gBACD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CACvE,CAAC;gBACJ,CAAC;gBACD,OAAO;YACT,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GACb,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG;YAC7B,CAAC,CAAC,OAAO,CAAC,GAAG;YACb,CAAC,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;QAEhE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YACjC,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,2EAA2E;YAC3E,6CAA6C;YAC7C,KAAK,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACtD,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO;YAC1C,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;YAC7C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK;YACvC,GAAG,EAAE,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;YAC7D,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;YAC1D,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,SAAS;YACT,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;QAEH,SAAS,CAAC,KAAK,CAAC,sBAAsB,EAAE;YACtC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YAC/B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YACjC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,KAAK;YAAE,OAAO;QAEzB,MAAM,kBAAkB,CAAC,MAAM,EAAE;YAC/B,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE;YAC3D,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,SAAS,CAAC,KAAK,CAAC,mBAAmB,EAAE;YACnC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC7D,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;SACnC,CAAC,CAAC;QACH,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE;YAChC,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;YAC3D,KAAK,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EAAE;SAC9C,CAAC,CAAC;QACH,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,kCAAkC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC,CACtC,CAAC;QAC3B,OAAO,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,MAAkB,EAClB,OAAoD;IAEpD,IAAI,MAAM,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IAC7B,IAAI,OAAO,CAAC,aAAa;QAAE,OAAO,OAAO,CAAC,aAAa,EAAE,CAAC;IAC1D,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAA6B;IAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,IAAI,qBAAqB,CAAC;IAC5D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,sBAAsB,WAAW,+BAA+B,CACjE,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/D,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,4BAA4B,EAAE;YACrD,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACvD,aAAa,EAAE,QAAQ,CAAC,MAAM;YAC9B,WAAW,EAAE,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;YAC/C,WAAW;SACZ,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrE,MAAM,eAAe,GAAG,MAAM,6BAA6B,CACzD,QAAQ,EACR,OAAO,EACP,YAAY,EAAE,KAAK,CACpB,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,6BAA6B,EAAE;YACtD,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YAC1B,WAAW,EAAE,OAAO,CAAC,MAAM;SAC5B,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAEjE,MAAM,iBAAiB,GAAG,iCAAiC,CAAC,UAAU,CAAC,CAAC;QACxE,MAAM,wBAAwB,GAAG,MAAM,+BAA+B,CACpE,iBAAiB,EACjB,OAAO,CACR,CAAC;QACF,MAAM,uBAAuB,GAAG,MAAM,gCAAgC,CACpE,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC,EACvD,OAAO,EACP,OAAO,CACR,CAAC;QACF,MAAM,OAAO,GACX,OAAO,CAAC,GAAG,KAAK,KAAK,IAAI,QAAQ,KAAK,aAAa;YACjD,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,gBAAgB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;QACpD,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC5D,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CACb,+LAA+L,CAChM,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAC1C,OAAO,EACP,CAAC;YACC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,OAAO,CAAC,MAAM,CACjB,CAAC;QAEF,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,gBAAgB,GAAa,EAAE,CAAC;QACpC,IAAI,gBAAoC,CAAC;QACzC,MAAM,UAAU,GAAyB,EAAE,CAAC;QAE5C,IAAI,CAAC;YACH,QAAQ,EAAE,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAC7C,KAAK,MAAM,IAAI,IAAI,MAAM,CACvB,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAC9B,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAC7C,CACF,EAAE,CAAC;gBACF,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;oBAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;oBAChD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;wBACpB,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;wBACzD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;wBAC7D,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACzD,CAAC;gBACH,CAAC;YACH,CAAC;YACD,QAAQ,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;YAE3C,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,8BAA8B,EAAE;gBACvD,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC5B,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC1B,KAAK;gBACL,YAAY,EAAE,OAAO,CAAC,MAAM;gBAC5B,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;aAChC,CAAC,CAAC;YAEH,IAAI,wBAAwB,EAAE,CAAC;gBAC7B,QAAQ,EAAE,OAAO,CAAC,kCAAkC,CAAC,CAAC;gBACtD,gBAAgB,GAAG,wBAAwB,CACzC,iBAAiB,EACjB,OAAO,EACP,gBAAgB,EAChB,KAAK,EACL,OAAO,CACR,CAAC;gBACF,QAAQ,EAAE,OAAO,CAAC,8BAA8B,CAAC,CAAC;gBAClD,IAAI,gBAAgB,CAAC,MAAM,EAAE,CAAC;oBAC5B,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,iCAAiC,EAAE;wBAC1D,SAAS,EAAE,gBAAgB,CAAC,MAAM;qBACnC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,IAAI,uBAAuB,EAAE,CAAC;gBAC5B,QAAQ,EAAE,OAAO,CAAC,qCAAqC,CAAC,CAAC;gBACzD,gBAAgB,GAAG,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAChE,QAAQ,EAAE,OAAO,CAAC,gCAAgC,CAAC,CAAC;gBACpD,IAAI,gBAAgB,EAAE,CAAC;oBACrB,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;YAED,sEAAsE;YACtE,yEAAyE;YACzE,qEAAqE;YACrE,+DAA+D;YAC/D,6CAA6C;YAC7C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,MAAM,UAAU,GAAe,OAAO;qBACnC,GAAG,CAAC,sBAAsB,CAAC;qBAC3B,MAAM,CAAC,CAAC,MAAM,EAAsB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC3D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC5B,MAAM,IAAI,KAAK,CACb,iJAAiJ,CAClJ,CAAC;gBACJ,CAAC;gBACD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;oBAC1B,QAAQ,EAAE,OAAO,CAAC,eAAe,GAAG,CAAC,WAAW,gBAAgB,CAAC,CAAC;oBAClE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;wBACpB,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC;4BAC3C,UAAU,EAAE;gCACV,UAAU,EAAE,GAAG,CAAC,UAAU;gCAC1B,MAAM,EAAE,GAAG,CAAC,MAAM;gCAClB,OAAO,EAAE,GAAG,CAAC,OAAO;gCACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gCACtB,SAAS,EAAE,GAAG,CAAC,SAAS;6BACzB;4BACD,OAAO,EAAE,UAAU;4BACnB,KAAK;4BACL,OAAO;4BACP,WAAW,EAAE,OAAO,CAAC,OAAO,KAAK,KAAK,IAAI,aAAa,CAAC,OAAO,CAAC;4BAChE,GAAG;4BACH,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;yBACjD,CAAC,CAAC;wBACH,UAAU,CAAC,IAAI,CAAC;4BACd,UAAU,EAAE,GAAG,CAAC,UAAU;4BAC1B,MAAM,EAAE,GAAG,CAAC,MAAM;4BAClB,OAAO;4BACP,iBAAiB,EAAE,MAAM,CACvB,YAAY,CAAC,OAAO,CAAC,GAAG,CACtB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAqB,CACvC,CACF;4BACD,KAAK,EAAE;gCACL,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;6BAC5D;4BACD,aAAa,EAAE,YAAY,CAAC,aAAa;4BACzC,QAAQ,EAAE,YAAY,CAAC,QAAQ;yBAChC,CAAC,CAAC;wBACH,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,2BAA2B,EAAE;4BACpD,UAAU,EAAE,GAAG,CAAC,UAAU;4BAC1B,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;4BAC1B,aAAa,EAAE,YAAY,CAAC,aAAa;yBAC1C,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,UAAU,CAAC,IAAI,CAAC;4BACd,UAAU,EAAE,GAAG,CAAC,UAAU;4BAC1B,MAAM,EAAE,GAAG,CAAC,MAAM;4BAClB,OAAO;4BACP,iBAAiB,EAAE,OAAO;4BAC1B,KAAK,EAAE,EAAE;4BACT,aAAa,EAAE,KAAK;4BACpB,QAAQ,EAAE,EAAE;yBACb,CAAC,CAAC;oBACL,CAAC;oBACD,QAAQ,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,WAAW,mBAAmB,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;YACD,QAAQ,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACvC,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,IAAI;YACnB,MAAM,EAAE,UAAU;YAClB,OAAO;YACP,KAAK;YACL,OAAO;YACP,gBAAgB;YAChB,gBAAgB;YAChB,UAAU;YACV,QAAQ;YACR,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;SAChC,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,OAA8B;IACjD,OAAO;QACL,OAAO;QACP,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,MAAM;QACb,aAAa,EAAE,KAAK;QACpB,GAAG,EAAE,KAAK;QACV,MAAM,EAAE,KAAK;QACb,SAAS,EAAE,KAAK;QAChB,gBAAgB,EAAE,EAAE;QACpB,gBAAgB,EAAE,KAAK;QACvB,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,IAAI;QACT,KAAK,EAAE,KAAK;KACb,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,UAAoB;IAChD,OAAO,UAAU;SACd,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;SACjD,IAAI,CACH,CAAC,GAAG,EAAwB,EAAE,CAC5B,GAAG,EAAE,KAAK,KAAK,cAAc,IAAI,GAAG,EAAE,KAAK,KAAK,SAAS,CAC5D,CAAC;AACN,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,UAAoB,EACpB,OAA6B;IAE7B,MAAM,YAAY,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACtD,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CACb,kFAAkF,CACnF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IAEpC,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ;QAAE,OAAO,aAAa,CAAC;IAC9D,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;IAC9C,OAAO,YAAY,CAAC,KAAK,KAAK,cAAc,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACtE,CAAC;AAED,SAAS,yBAAyB,CAAC,KAAa;IAI9C,IAAI,MAAW,CAAC;IAChB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,KAAK,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,eAAe,GAAG,MAAM,CAAC;IAC/B,MAAM,eAAe,GAAG,oBAAoB,CAAC;IAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC;QACrD,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC;YACrC,CAAC,CAAC,eAAe;YACjB,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,OAAO,GAAG,SAAS;QACvB,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC;QACzC,CAAC,CAAC,WAAW,CAAC;IAChB,MAAM,OAAO,GAAG,GAAG,OAAO,IAAI,EAAE,GAAG,eAAe,EAAE,CAAC;IACrD,OAAO;QACL,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE;QACvC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,EAAE;KACrC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,6BAA6B,CAC1C,QAA8B,EAC9B,OAA6B,EAC7B,KAAyB;IAEzB,IAAI,QAAQ,KAAK,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,QAAQ,KAAK,aAAa;QAAE,OAAO,SAAS,CAAC;IACjD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,yBAAyB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACjE,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,aAAa;QAC1E,OAAO,KAAK,CAAC;IACf,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QACvB,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,OAAO,CAAC;QACrC,IAAI,MAAM,KAAK,OAAO;YAAE,OAAO,CAAC,OAAgB,CAAC,CAAC;QAClD,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,eAAe,EAAE,CAAC;YACtD,OAAO,CAAC,QAAiB,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,CAAC,IAAa,CAAC,CAAC;QAC5C,IAAI,MAAM,KAAK,QAAQ;YAAE,OAAO,CAAC,QAAiB,CAAC,CAAC;QACpD,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YACpD,OAAO,CAAC,UAAmB,CAAC,CAAC;QAC/B,CAAC;QACD,IACE,MAAM,KAAK,gBAAgB;YAC3B,MAAM,KAAK,SAAS;YACpB,MAAM,KAAK,QAAQ;YACnB,MAAM,KAAK,SAAS,EACpB,CAAC;YACD,OAAO,CAAC,gBAAyB,CAAC,CAAC;QACrC,CAAC;QACD,IACE,MAAM,KAAK,QAAQ;YACnB,MAAM,KAAK,aAAa;YACxB,MAAM,KAAK,iBAAiB,EAC5B,CAAC;YACD,OAAO,CAAC,aAAsB,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,IAAI,KAAK,CACb,uBAAuB,GAAG,kFAAkF,CAC7G,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,MAAmB;IACjD,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,MAAM,KAAK,aAAa;QAAE,OAAO,aAAa,CAAC;IACnD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAmB;IAC7C,OAAO,MAAM,KAAK,QAAQ,CAAC;AAC7B,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,IAAI,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,MAAM,CAAI,MAAW;IAC5B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,MAAM,CAAC,KAAa,EAAE,QAAgB,EAAE,UAAU,GAAG,GAAG,QAAQ,GAAG;IAC1E,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAE,OAAe;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC9C,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;QACnE,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IAC3C,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/C,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzE,OAAO,IAAI,IAAI,CAAC,GAAG,GAAG,QAAQ,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,cAAc,CAAC,KAAe,EAAE,OAAe,EAAE,GAAG,GAAG,CAAC;IAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3C,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CACpC,CAAC;IACF,IAAI,SAAS,CAAC,MAAM,IAAI,GAAG;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,MAAM,GAAG,GAAG,OAAO,CAAC;AACjF,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,OAA6B,EAC7B,GAAW;IAEX,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtE,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7D,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,OAAO;QACL,KAAK,CAAC,OAAe;YACnB,MAAM,GAAG,IAAI,CAAC;YACd,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,CAAC,OAAe;YACrB,IAAI,MAAM;gBAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,CAAC,OAAe;YACrB,IAAI,MAAM;gBAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,OAAe;YAClB,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACvB,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;QACD,KAAK,CAAC,OAAe;YACnB,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxB,MAAM,GAAG,KAAK,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,UAAoB,EACpB,YAAmE;IAEnE,MAAM,IAAI,GAAoB,EAAE,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAS;QAC1C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,KAAK,KAAK,YAAY,EAAE,KAAK,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC;gBACR,GAAG,GAAG;gBACN,SAAS,EAAE,YAAY,CAAC,SAAS;gBACjC,MAAM,EAAE,YAAY,CAAC,MAAM;aAC5B,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,MAA0B,EAAE,MAAe;IAC5D,IAAI,MAAM;QAAE,OAAO,sBAAsB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAErE,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CACnC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CACzC,CAAC;IACF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CACR,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,YAAY,QAAQ,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACvG,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,8BAA8B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,OAAO,CACL,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAChB,8BAA8B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,MAA2B,EAC3B,OAA6C;IAE7C,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC;IAC5D,MAAM,OAAO,GAAG;QACd,iBAAiB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE;QACrD,iBAAiB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE;QACtD,iBAAiB,MAAM,CAAC,KAAK,EAAE;QAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE;QACzD,MAAM,CAAC,OAAO,CAAC,MAAM;YACnB,CAAC,CAAC,iBAAiB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,cAAc,CACzE,MAAM,CAAC,OAAO,EACd,OAAO,CAAC,OAAO,CAChB,GAAG;YACN,CAAC,CAAC,EAAE;KACP,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAElB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAErC,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CACR,cAAc,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,EACxD,sBAAsB,CACvB,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CACR,oBAAoB,CAAC,MAAM,CAAC,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,EAC9D,0BAA0B,CAC3B,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YAChD,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM;gBAC/B,CAAC,CAAC,KAAK,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG;gBAC1D,CAAC,CAAC,EAAE,CAAC;YACP,OAAO,GAAG,MAAM,CAAC,UAAU,KAAK,MAAM,GAAG,KAAK,EAAE,CAAC;QACnD,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QAEvC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxE,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,IACE,MAAM,CAAC,QAAQ,KAAK,aAAa;QACjC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAC3B,CAAC,aAAa,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAClE,EACD,CAAC;QACD,KAAK,CAAC,IAAI,CACR;YACE,wBAAwB;YACxB,qEAAqE;YACrE,0EAA0E;YAC1E,iFAAiF;YACjF,4EAA4E;SAC7E,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,qDAAqD,EAAE,QAAQ,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,OAAqB,EACrB,OAA6B;IAE7B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC7E,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,gBAAgB,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,OAAO;iBAC1F,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;iBAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CACjB,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,OAA6B;IAE7B,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC;IACxC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,OAA6B;IAE7B,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAChD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CACpB,OAAoD;IAEpD,IAAI,OAAO,CAAC,aAAa;QAAE,OAAO,OAAO,CAAC,aAAa,EAAE,CAAC;IAC1D,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAAmB,EACnB,KAAiB,EACjB,OAAe;IAEf,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;IAC9C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,IAAI,MAAM,KAAK,aAAa,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU;YAC3B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC;YAC7C,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IACD,IACE,MAAM,KAAK,QAAQ;QACnB,MAAM,KAAK,UAAU;QACrB,MAAM,KAAK,gBAAgB,EAC3B,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IACtD,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;QACrC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9B,CAAC;IACD,MAAM,OAAO,GAAG,EAAE;SACf,WAAW,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAChD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;SACrE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;SAC7D,MAAM,CAAC,CAAC,KAAK,EAAuB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAY;IACrC,KAAK,MAAM,YAAY,IAAI;QACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE,aAAa,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,EAAE,aAAa,CAAC;KACjD,EAAE,CAAC;QACF,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;YAAE,SAAS;QAC3C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAEjE,CAAC;YACF,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACrD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAAE,OAAO,QAAQ,CAAC;YAC/C,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,YAAY,CAAC;IACrD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACxD,MAAM,IAAI,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC9E,MAAM,WAAW,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IACtE,OAAO,EAAE,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC;AAC9D,CAAC;AAED,SAAS,gBAAgB,CACvB,WAA+B,EAC/B,KAAa;IAEb,IAAI,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IACnC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YAC/D,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,MAAM;gBAC5C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;YACvC,CAAC;YACD,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvE,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;QACxD,CAAC;QACD,OAAO,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IAC7D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,KAAa;IAI5C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAEjD,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,2BAA2B,KAAK,uDAAuD,CACxF,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAC5B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAC/C,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC;IACjC,MAAM,GAAG,GAAG,+BAA+B,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,WAAW,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;IAC3G,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,OAAO,EAAE,EAAE,YAAY,EAAE,sBAAsB,EAAE;KAClD,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,IAAI,KAAK,CACb,sBAAsB,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,IAAI,GAAG,UAAU,QAAQ,CAAC,MAAM,GAAG,CACrF,CAAC;IACJ,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAErE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACjD,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE;QACtE,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;IACH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,IAAI,KAAK,CACb,qBAAqB,KAAK,KAAK,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,CACtE,CAAC;IACJ,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;SACf,WAAW,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAChD,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,IAAI,KAAK,CACb,0BAA0B,KAAK,oCAAoC,CACpE,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC;QACvC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;KACpE,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CACxB,KAAa;IAEb,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAC3B,kDAAkD,CACnD,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,OAAO;YACL,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;YACnB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;YACxC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;SAClB,CAAC;IACJ,CAAC;IAED,IAAI,GAAQ,CAAC;IACb,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,GAAG,CAAC,QAAQ,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACf,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;QACpC,GAAG,EACD,SAAS,IAAI,CAAC,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;YACpC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YACtC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS;KACrC,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,SAAiB;IACnD,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;QAChC,OAAO,mFAAmF,CAAC;IAC7F,CAAC;IACD,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;QACpC,OAAO,wEAAwE,CAAC;IAClF,CAAC;IACD,IAAI,SAAS,KAAK,oBAAoB,EAAE,CAAC;QACvC,OAAO,0GAA0G,CAAC;IACpH,CAAC;IACD,IAAI,SAAS,KAAK,oBAAoB,EAAE,CAAC;QACvC,OAAO,wGAAwG,CAAC;IAClH,CAAC;IACD,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;QAChC,OAAO,sGAAsG,CAAC;IAChH,CAAC;IACD,IAAI,SAAS,KAAK,cAAc,EAAE,CAAC;QACjC,OAAO,2GAA2G,CAAC;IACrH,CAAC;IACD,IAAI,SAAS,KAAK,gBAAgB,EAAE,CAAC;QACnC,OAAO,yHAAyH,CAAC;IACnI,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,iCAAiC,CAAC,UAAoB;IAC7D,OAAO,UAAU;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;SAC/C,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,+BAA+B,CAC5C,MAAgB,EAChB,OAA6B;IAE7B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAC9C,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,YAAY,CAAC;IACpD,IAAI,OAAO,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,wBAAwB,CAC/B,MAAgB,EAChB,OAAe,EACf,OAAsB,EACtB,KAAiB,EACjB,OAA6B;IAE7B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,uBAAuB,CACnC,OAAO,EACP,OAAO,CAAC,gBAAgB,EACxB,OAAO,EACP,KAAK,CACN,CAAC;IACF,MAAM,OAAO,GAAG,GAAG,0BAA0B;EAC7C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;EACjB,wBAAwB,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,MAAM;YAAE,SAAS;QAC7B,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,uBAAuB,CACpC,UAAoB,EACpB,OAAe,EACf,OAA6B;IAE7B,MAAM,MAAM,GAAG,iCAAiC,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IACpE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC;IACtC,IAAI,CAAC,CAAC,MAAM,+BAA+B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACzE,OAAO,wBAAwB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAe,EACf,QAA8B,EAC9B,OAAsB,EACtB,KAAiB;IAEjB,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC9D,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAC/C,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACtE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACzD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CACzB,CAAC;IACF,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAClE,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,6BAA6B,CAAC,IAAY;IACjD,MAAM,OAAO,GAAG,IAAI,MAAM,CACxB,GAAG,YAAY,CAAC,0BAA0B,CAAC,aAAa,YAAY,CAAC,wBAAwB,CAAC,EAAE,EAChG,GAAG,CACJ,CAAC;IACF,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY,EAAE,KAAa;IACrD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IAC7D,IAAI,IAAY,CAAC;IACjB,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACjB,6EAA6E;QAC7E,yEAAyE;QACzE,sDAAsD;QACtD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,6BAA6B,CACzC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CACxB,CAAC,SAAS,EAAE,CAAC;QACd,IAAI;YACF,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/B,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI;gBACtB,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;IACrF,CAAC;IACD,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,wBAAwB,GAC5B,mDAAmD,CAAC;AAEtD,SAAS,yBAAyB,CAAC,OAAe;IAChD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,qBAAqB,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,yBAAyB;IAChC,OAAO,2CAA2C,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,qBAAqB,CAClC,OAAkC;IAElC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;QACjC,OAAO,EACL,6DAA6D;YAC7D,yDAAyD;YACzD,iBAAiB,OAAO,CAAC,OAAO,IAAI;YACpC,YAAY,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,+BAA+B;QAC1F,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,gCAAgC,CAC7C,cAAuB,EACvB,OAA6B,EAC7B,OAAe;IAEf,IAAI,CAAC,cAAc;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,OAAO,CAAC,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,EAAE,CAAC,UAAU,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACpE,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACzD,MAAM,MAAM,GAAG,OAAO,CAAC,kBAAkB,IAAI,qBAAqB,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC;QAC1B,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,qBAAqB,CAAC;QACtE,YAAY,EAAE,yBAAyB,EAAE;QACzC,OAAO,EAAE,wBAAwB;KAClC,CAAC,CAAC;IACH,OAAO,MAAM,KAAK,IAAI,CAAC;AACzB,CAAC;AAED,MAAM,iCAAiC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCzC,CAAC;AAEF,SAAS,0BAA0B,CACjC,OAAe,EACf,OAA6B;IAE7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CACpB,OAAO,EACP,SAAS,EACT,WAAW,EACX,qBAAqB,CACtB,CAAC;IACF,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/C,IAAI,OAAO,KAAK,iCAAiC;YAAE,OAAO,IAAI,CAAC;QAC/D,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,GAAG,IAAI,mEAAmE,CAC3E,CAAC;QACJ,CAAC;IACH,CAAC;IACD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,iCAAiC,EAAE,OAAO,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC","sourcesContent":["import { spawnSync } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { resolveAppForSkill, type BuiltInAppMcp } from \"./built-in-apps.js\";\nimport { registerMcpServer } from \"./connect.js\";\nimport type { ClientId } from \"./mcp-config-writers.js\";\nimport { createCliTelemetry, type CliTelemetry } from \"./telemetry.js\";\n\nexport type SkillClient =\n | \"codex\"\n | \"claude-code\"\n | \"cowork\"\n | \"pi\"\n | \"cursor\"\n | \"opencode\"\n | \"github-copilot\";\nexport type SkillScope = \"project\" | \"user\";\nexport type PlanMode = \"hosted\" | \"local-files\" | \"self-hosted\";\n\nexport interface SkillEntry {\n name: string;\n dir: string;\n description?: string;\n}\n\nexport interface InstallSkillsOptions {\n source?: string;\n skillNames?: string[];\n clients?: SkillClient[];\n scope?: SkillScope;\n baseDir?: string;\n yes?: boolean;\n dryRun?: boolean;\n updateInstructions?: boolean;\n instructionFiles?: string[];\n withGithubAction?: boolean;\n force?: boolean;\n connect?: boolean;\n quiet?: boolean;\n deviceFlowTimeoutMs?: number;\n log?: (message: string) => void;\n isInteractive?: () => boolean;\n telemetry?: CliTelemetry;\n promptSkills?: (context: SkillsPromptContext) => Promise<string[] | null>;\n promptClients?: (\n context: ClientsPromptContext,\n ) => Promise<SkillClient[] | null>;\n promptScope?: (context: ScopePromptContext) => Promise<SkillScope | null>;\n promptUpdateInstructions?: () => Promise<boolean | null>;\n promptGithubAction?: (\n context: GithubActionPromptContext,\n ) => Promise<boolean | null>;\n promptPlanMode?: (context: PlanModePromptContext) => Promise<PlanMode | null>;\n promptPlanMcpUrl?: () => Promise<string | null>;\n /**\n * Register the hosted MCP server for app-backed skills (e.g. visual-plan /\n * visual-recap → the Agent-Native Plan MCP). Defaults to `true`; pass\n * `false` (CLI `--no-mcp`) to install the skill files only.\n */\n mcp?: boolean;\n planMode?: PlanMode;\n mcpUrl?: string;\n}\n\nexport interface InstalledMcpServer {\n serverName: string;\n mcpUrl: string;\n clients: SkillClient[];\n registeredClients: SkillClient[];\n files: string[];\n authenticated: boolean;\n guidance: string[];\n}\n\nexport interface InstallSkillsResult {\n source: string;\n skills: string[];\n clients: SkillClient[];\n scope: SkillScope;\n written: string[];\n instructionFiles: string[];\n githubActionPath?: string;\n mcpServers: InstalledMcpServer[];\n planMode?: PlanMode;\n dryRun: boolean;\n}\n\ninterface ParsedArgs {\n command: \"add\" | \"list\" | \"status\" | \"update\" | \"help\";\n source?: string;\n copySource: boolean;\n skillNames: string[];\n clients: SkillClient[];\n scope: SkillScope;\n scopeExplicit: boolean;\n yes: boolean;\n dryRun: boolean;\n printJson: boolean;\n updateInstructions?: boolean;\n instructionFiles: string[];\n withGithubAction: boolean;\n force: boolean;\n connect: boolean;\n baseDir?: string;\n mcp: boolean;\n planMode?: PlanMode;\n mcpUrl?: string;\n quiet: boolean;\n}\n\ninterface PromptOption<T extends string> {\n value: T;\n label: string;\n hint: string;\n}\n\nexport interface SkillsPromptContext {\n initialSkills: string[];\n options: Array<PromptOption<string>>;\n}\n\nexport interface ClientsPromptContext {\n initialClients: SkillClient[];\n options: Array<PromptOption<SkillClient>>;\n}\n\nexport interface ScopePromptContext {\n initialScope: SkillScope;\n}\n\nexport interface GithubActionPromptContext {\n workflowPath: string;\n setupCommand: string;\n docsUrl: string;\n}\n\nexport interface PlanModePromptContext {\n initialMode: PlanMode;\n}\n\nconst HELP = `@agent-native/skills\n\nUsage:\n npx @agent-native/skills@latest add [options]\n npx @agent-native/skills@latest list\n npx @agent-native/skills@latest status [skill|scaffold] [options]\n npx @agent-native/skills@latest update [skill|scaffold] [options]\n\nOptions:\n --skill <name> Install only this skill (repeatable)\n --client, -a <client> codex, claude-code, cowork, pi, cursor, opencode, github-copilot, or all\n (default: all; repeatable or comma-separated)\n --scope <user|project> Install globally or into the current project (default: user)\n -g, --global Alias for --scope user\n --project Alias for --scope project\n --update-instructions Add managed AGENTS.md / CLAUDE.md instructions when useful\n --no-update-instructions Skip managed instruction file updates\n --instructions-file <path> File to receive managed instructions (repeatable)\n --with-github-action Add .github/workflows/pr-visual-recap.yml when visual-recap is installed\n --mode <mode> App-backed skill mode: hosted, local-files, or self-hosted\n --mcp-url <url> Self-hosted app/MCP URL for app-backed skills\n --force Overwrite a different existing PR Visual Recap workflow\n --no-mcp Install skill files only; skip registering the app's MCP server\n --no-connect Register MCP where possible but skip inline browser/device authentication\n -y, --yes Use defaults in non-interactive mode\n --dry-run Print intended writes without changing files\n --json Print the result as JSON\n\nApp-backed skills (visual-plan, visual-recap, visualize-repo, content) register\ntheir hosted MCP server in your agent config by default so the agent can\nactually use them. Use --no-mcp to skip that and copy the files only.\nFor visual-plan/visual-recap/visualize-repo/content, choose --mode local-files\nfor local-file workflows, or --mode self-hosted --mcp-url <url> for your own app.\n\nExamples:\n npx @agent-native/skills@latest add\n npx @agent-native/skills@latest add --skill quick-recap\n npx @agent-native/skills@latest add --skill visual-recap --with-github-action\n npx @agent-native/skills@latest update scaffold --project\n`;\n\nconst CLIENTS: SkillClient[] = [\n \"codex\",\n \"claude-code\",\n \"cowork\",\n \"pi\",\n \"cursor\",\n \"opencode\",\n \"github-copilot\",\n];\nconst DEFAULT_SKILLS_SOURCE = \"BuilderIO/skills\";\nconst MANAGED_INSTRUCTIONS_START = \"<!-- BEGIN @agent-native/skills -->\";\nconst MANAGED_INSTRUCTIONS_END = \"<!-- END @agent-native/skills -->\";\n\nexport function parseSkillsCliArgs(argv: string[]): ParsedArgs {\n const first = argv[0];\n if (!first || first === \"help\" || first === \"--help\" || first === \"-h\") {\n return defaultArgs(\"help\");\n }\n\n const command =\n first === \"list\" ||\n first === \"status\" ||\n first === \"update\" ||\n first === \"add\"\n ? first\n : \"add\";\n const args =\n first === \"add\" ||\n first === \"list\" ||\n first === \"status\" ||\n first === \"update\"\n ? argv.slice(1)\n : argv;\n const out = defaultArgs(command);\n\n for (let i = 0; i < args.length; i += 1) {\n const arg = args[i];\n const eat = (flag: string): string | undefined => {\n if (arg === flag) {\n const next = args[++i];\n if (!next || next.startsWith(\"-\")) {\n throw new Error(`Missing value for ${flag}.`);\n }\n return next;\n }\n if (arg.startsWith(`${flag}=`)) {\n const value = arg.slice(flag.length + 1);\n if (!value) throw new Error(`Missing value for ${flag}.`);\n return value;\n }\n return undefined;\n };\n\n let value: string | undefined;\n if ((value = eat(\"--skill\")) !== undefined) out.skillNames.push(value);\n else if ((value = eat(\"-s\")) !== undefined) out.skillNames.push(value);\n else if ((value = eat(\"--client\")) !== undefined)\n out.clients.push(...normalizeClients(value));\n else if ((value = eat(\"--agent\")) !== undefined)\n out.clients.push(...normalizeClients(value));\n else if ((value = eat(\"-a\")) !== undefined)\n out.clients.push(...normalizeClients(value));\n else if ((value = eat(\"--scope\")) !== undefined) {\n out.scope = parseScope(value);\n out.scopeExplicit = true;\n } else if ((value = eat(\"--instructions-file\")) !== undefined)\n out.instructionFiles.push(value);\n else if ((value = eat(\"--cwd\")) !== undefined) out.baseDir = value;\n else if (arg === \"-g\" || arg === \"--global\") {\n out.scope = \"user\";\n out.scopeExplicit = true;\n } else if (arg === \"--project\") {\n out.scope = \"project\";\n out.scopeExplicit = true;\n } else if (arg === \"--copy\") {\n // Compatibility with the open `skills` CLI. This installer always copies.\n out.copySource = true;\n } else if (arg === \"-y\" || arg === \"--yes\") out.yes = true;\n else if (arg === \"--dry-run\") out.dryRun = true;\n else if (arg === \"--json\") out.printJson = true;\n else if (arg === \"--quiet\") out.quiet = true;\n else if (arg === \"--update-instructions\") out.updateInstructions = true;\n else if (arg === \"--no-update-instructions\") out.updateInstructions = false;\n else if (arg === \"--with-github-action\" || arg === \"--with-github-actions\")\n out.withGithubAction = true;\n else if ((value = eat(\"--mode\")) !== undefined) {\n out.planMode = parsePlanMode(value);\n } else if ((value = eat(\"--mcp-url\")) !== undefined) {\n out.mcpUrl = value;\n } else if (arg === \"--force\") out.force = true;\n else if (arg === \"--no-mcp\") out.mcp = false;\n else if (arg === \"--mcp\") out.mcp = true;\n else if (arg === \"--no-connect\" || arg === \"--skip-connect\")\n out.connect = false;\n else if (arg === \"--connect\") out.connect = true;\n else if (arg.startsWith(\"-\")) throw new Error(`Unknown option: ${arg}`);\n else if (!out.source) out.source = arg;\n else throw new Error(`Unexpected argument: ${arg}`);\n }\n\n if (\n out.command === \"add\" &&\n out.source &&\n out.source !== DEFAULT_SKILLS_SOURCE &&\n !out.copySource\n ) {\n throw new Error(\n `Unexpected argument: ${out.source}. @agent-native/skills installs the BuilderIO skills collection; use --skill <name> to choose a skill.`,\n );\n }\n if (\n out.command === \"add\" &&\n out.source === DEFAULT_SKILLS_SOURCE &&\n !out.copySource\n ) {\n out.source = undefined;\n }\n\n out.skillNames = unique(out.skillNames.map(normalizeSkillName));\n out.clients = unique(out.clients);\n out.instructionFiles = unique(out.instructionFiles);\n if (out.planMode && out.mcpUrl && out.planMode !== \"self-hosted\") {\n throw new Error(\"--mcp-url can only be used with --mode self-hosted.\");\n }\n if (out.mcpUrl && !out.planMode) out.planMode = \"self-hosted\";\n return out;\n}\n\n/**\n * Translate this package's parsed args into the argv shape `@agent-native/core`\n * skills expects. Core takes a single positional target + compatible flags; we\n * forward one explicit skill as that target and let core's interactive picker\n * handle 0-or-many selections.\n */\nfunction toCoreSkillsArgv(parsed: ParsedArgs): string[] {\n const out: string[] = [parsed.command];\n if (parsed.command === \"add\") {\n if (parsed.copySource && parsed.source && parsed.skillNames.length > 0) {\n out.push(parsed.source);\n for (const skill of parsed.skillNames) out.push(\"--skill\", skill);\n } else if (parsed.skillNames.length === 1) {\n out.push(parsed.skillNames[0]);\n } else if (parsed.skillNames.length > 1) {\n const appIds = unique(\n parsed.skillNames\n .map((name) => resolveAppForSkill(name)?.appId)\n .filter((appId): appId is string => Boolean(appId)),\n );\n if (\n appIds.length === 1 &&\n parsed.skillNames.every((name) => resolveAppForSkill(name))\n ) {\n out.push(appIds[0]);\n } else {\n for (const skill of parsed.skillNames) out.push(\"--skill\", skill);\n }\n }\n } else if (parsed.command === \"status\" || parsed.command === \"update\") {\n if (parsed.source) out.push(parsed.source);\n else if (parsed.skillNames.length === 1) out.push(parsed.skillNames[0]);\n }\n if (\n (parsed.command === \"add\" ||\n parsed.command === \"status\" ||\n parsed.command === \"update\") &&\n parsed.clients.length\n ) {\n out.push(\"--client\", parsed.clients.join(\",\"));\n }\n if (\n (parsed.command === \"add\" ||\n parsed.command === \"status\" ||\n parsed.command === \"update\") &&\n parsed.scopeExplicit\n ) {\n out.push(\"--scope\", parsed.scope);\n }\n if (parsed.command === \"add\" && parsed.yes) out.push(\"--yes\");\n if (parsed.dryRun) out.push(\"--dry-run\");\n if (parsed.printJson) out.push(\"--json\");\n if (parsed.command === \"add\" && parsed.withGithubAction)\n out.push(\"--with-github-action\");\n if (parsed.command === \"add\" && parsed.planMode)\n out.push(\"--mode\", parsed.planMode);\n if (parsed.command === \"add\" && parsed.mcpUrl)\n out.push(\"--mcp-url\", parsed.mcpUrl);\n if (parsed.command === \"add\" && parsed.force) out.push(\"--force\");\n if (parsed.command === \"add\" && parsed.mcp === false) out.push(\"--no-mcp\");\n if (parsed.command === \"add\" && parsed.connect === false)\n out.push(\"--no-connect\");\n if (parsed.command === \"add\" && parsed.updateInstructions === true)\n out.push(\"--update-instructions\");\n if (parsed.command === \"add\" && parsed.updateInstructions === false)\n out.push(\"--no-update-instructions\");\n return out;\n}\n\nfunction shouldLoadPublicCatalog(parsed: ParsedArgs): boolean {\n if (parsed.command === \"list\") return true;\n if (parsed.command !== \"add\") return false;\n if (parsed.copySource && parsed.source) return true;\n if (parsed.skillNames.length === 0) return true;\n return parsed.skillNames.some((name) => !resolveAppForSkill(name));\n}\n\nconst HIDDEN_STANDALONE_BUILT_INS = [\n \"assets\",\n \"content\",\n \"design-exploration\",\n \"visual-edit\",\n \"context-xray\",\n];\n\nfunction shouldShowDelegatedStartupProgress(\n parsed: ParsedArgs,\n options: Pick<InstallSkillsOptions, \"isInteractive\">,\n): boolean {\n return (\n parsed.command !== \"help\" &&\n !parsed.printJson &&\n !parsed.quiet &&\n cliInteractive(parsed, options)\n );\n}\n\nexport async function runSkillsCli(\n argv: string[],\n options: Pick<\n InstallSkillsOptions,\n | \"log\"\n | \"isInteractive\"\n | \"baseDir\"\n | \"promptSkills\"\n | \"promptClients\"\n | \"promptScope\"\n | \"promptUpdateInstructions\"\n | \"promptGithubAction\"\n | \"promptPlanMode\"\n | \"promptPlanMcpUrl\"\n > = {},\n): Promise<void> {\n const parsed = parseSkillsCliArgs(argv);\n\n // `@agent-native/skills` normally uses the exact same core flow as\n // `agent-native skills`; it only passes a broader public skill catalog.\n // AGENT_NATIVE_SKILLS_DIRECT=1 is set by core when it shells out to this\n // package as a headless file-copy worker for public/plain skill repos. That\n // direct mode is intentionally non-user-facing prompt plumbing.\n if (process.env.AGENT_NATIVE_SKILLS_DIRECT !== \"1\") {\n if (parsed.command === \"help\") {\n process.stdout.write(`${HELP}\\n`);\n return;\n }\n if (shouldShowDelegatedStartupProgress(parsed, options)) {\n process.stderr.write(\"Preparing Agent Native skills...\\n\");\n }\n const loadedSource = shouldLoadPublicCatalog(parsed)\n ? await materializeSource(parsed.source ?? DEFAULT_SKILLS_SOURCE)\n : null;\n try {\n const { runSkills } = (await import(\"@agent-native/core/cli/skills\")) as {\n runSkills: (\n argv: string[],\n options: Record<string, unknown>,\n ) => Promise<void>;\n };\n const publicSkillEntries = loadedSource\n ? discoverSkills(loadedSource.root).map((entry) => ({\n name: entry.name,\n description: entry.description,\n }))\n : [];\n await runSkills(toCoreSkillsArgv(parsed), {\n log: options.log,\n isInteractive: options.isInteractive,\n baseDir: parsed.baseDir ?? options.baseDir,\n catalogMode: \"all\",\n hiddenBuiltInSkillTargets: HIDDEN_STANDALONE_BUILT_INS,\n publicSkillSource:\n loadedSource?.root ?? parsed.source ?? DEFAULT_SKILLS_SOURCE,\n publicSkillEntries,\n promptSkills: options.promptSkills\n ? async (context: any) =>\n options.promptSkills?.({\n initialSkills: context.initialTargets,\n options: context.options,\n }) ?? null\n : undefined,\n promptClients: options.promptClients as any,\n promptScope: options.promptScope,\n promptGithubAction: options.promptGithubAction\n ? async (context: any) =>\n options.promptGithubAction?.({\n workflowPath: context.workflowPath,\n setupCommand: context.setupCommand,\n docsUrl: context.docsUrl,\n }) ?? null\n : undefined,\n promptPlanMode: options.promptPlanMode,\n promptPlanMcpUrl: options.promptPlanMcpUrl,\n promptUpdateInstructions: options.promptUpdateInstructions,\n });\n return;\n } finally {\n loadedSource?.cleanup?.();\n }\n }\n\n const startedAt = Date.now();\n const telemetry = createCliTelemetry({\n cli: \"skills-installer\",\n cliVersion: readCliVersion(),\n command: parsed.command,\n interactive: cliInteractive(parsed, options),\n });\n\n try {\n if (parsed.command === \"help\") {\n process.stdout.write(`${HELP}\\n`);\n return;\n }\n telemetry.track(\"skills_cli started\");\n const skillSource = parsed.source ?? DEFAULT_SKILLS_SOURCE;\n\n if (parsed.command === \"list\") {\n const source = await materializeSource(skillSource);\n try {\n const skills = discoverSkills(source.root);\n telemetry.track(\"skills_cli skills listed\", {\n availableCount: skills.length,\n available: skills.map((skill) => skill.name).join(\",\"),\n });\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(skills, null, 2)}\\n`);\n return;\n }\n for (const skill of skills) {\n process.stdout.write(\n `${skill.name}${skill.description ? ` - ${skill.description}` : \"\"}\\n`,\n );\n }\n return;\n } finally {\n source.cleanup?.();\n }\n }\n\n const stdoutLog =\n parsed.printJson || options.log\n ? options.log\n : (message: string) => process.stdout.write(`${message}\\n`);\n\n const result = await installSkills({\n source: skillSource,\n skillNames: parsed.skillNames,\n clients: parsed.clients,\n // Leave scope undefined unless the user passed --scope/-g/--project so the\n // installer can prompt for it interactively.\n scope: parsed.scopeExplicit ? parsed.scope : undefined,\n baseDir: parsed.baseDir ?? options.baseDir,\n yes: parsed.yes,\n dryRun: parsed.dryRun,\n updateInstructions: parsed.updateInstructions,\n instructionFiles: parsed.instructionFiles,\n withGithubAction: parsed.withGithubAction,\n force: parsed.force,\n connect: parsed.connect,\n quiet: parsed.printJson || parsed.quiet,\n log: parsed.printJson || parsed.quiet ? undefined : stdoutLog,\n isInteractive: options.isInteractive,\n promptSkills: options.promptSkills,\n promptClients: options.promptClients,\n promptScope: options.promptScope,\n promptUpdateInstructions: options.promptUpdateInstructions,\n promptGithubAction: options.promptGithubAction,\n promptPlanMode: options.promptPlanMode,\n promptPlanMcpUrl: options.promptPlanMcpUrl,\n telemetry,\n mcp: parsed.mcp,\n planMode: parsed.planMode,\n mcpUrl: parsed.mcpUrl,\n });\n\n telemetry.track(\"skills_cli completed\", {\n skills: result.skills.join(\",\"),\n clients: result.clients.join(\",\"),\n scope: result.scope,\n dryRun: result.dryRun,\n durationMs: Date.now() - startedAt,\n });\n\n if (parsed.printJson) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n return;\n }\n\n if (parsed.quiet) return;\n\n await printInstallResult(result, {\n baseDir: parsed.baseDir ?? options.baseDir ?? process.cwd(),\n dryRun: parsed.dryRun,\n });\n } catch (error) {\n telemetry.track(\"skills_cli failed\", {\n command: parsed.command,\n error: error instanceof Error ? error.message : String(error),\n durationMs: Date.now() - startedAt,\n });\n telemetry.captureException(error, {\n handled: false,\n tags: { source: \"skills-command\", command: parsed.command },\n extra: { durationMs: Date.now() - startedAt },\n });\n throw error;\n } finally {\n await telemetry.flush();\n }\n}\n\nfunction readCliVersion(): string {\n try {\n const here = path.dirname(fileURLToPath(import.meta.url));\n // dist/index.js → ../package.json\n const pkg = JSON.parse(\n fs.readFileSync(path.resolve(here, \"../package.json\"), \"utf8\"),\n ) as { version?: unknown };\n return typeof pkg.version === \"string\" ? pkg.version : \"unknown\";\n } catch {\n return \"unknown\";\n }\n}\n\nfunction cliInteractive(\n parsed: ParsedArgs,\n options: Pick<InstallSkillsOptions, \"isInteractive\">,\n): boolean {\n if (parsed.yes) return false;\n if (options.isInteractive) return options.isInteractive();\n if (process.env.CI === \"true\") return false;\n return Boolean(process.stdin.isTTY && process.stdout.isTTY);\n}\n\nexport async function installSkills(\n options: InstallSkillsOptions,\n): Promise<InstallSkillsResult> {\n const baseDir = path.resolve(options.baseDir ?? process.cwd());\n const log = options.log ?? (() => {});\n const sourceInput = options.source ?? DEFAULT_SKILLS_SOURCE;\n const source = await materializeSource(sourceInput);\n try {\n const entries = discoverSkills(source.root);\n if (entries.length === 0) {\n throw new Error(\n `No skills found in ${sourceInput}. Expected skills/*/SKILL.md.`,\n );\n }\n\n const preselected = (options.skillNames ?? []).length > 0;\n const selected = await resolveSelectedSkills(entries, options);\n options.telemetry?.track(\"skills_cli skills selected\", {\n selected: selected.map((skill) => skill.name).join(\",\"),\n selectedCount: selected.length,\n selectedAll: selected.length === entries.length,\n preselected,\n });\n\n const skillNames = selected.map((skill) => skill.name);\n const modeAwareApp = selectedModeAwareApp(skillNames);\n const planMode = await resolvePlanModeForSkills(skillNames, options);\n const planMcpOverride = await resolvePlanMcpOverrideForMode(\n planMode,\n options,\n modeAwareApp?.appId,\n );\n\n const clients = await resolveSelectedClients(options);\n options.telemetry?.track(\"skills_cli clients selected\", {\n clients: clients.join(\",\"),\n clientCount: clients.length,\n });\n\n const scope = await resolveSelectedScope(options);\n options.telemetry?.track(\"skills_cli scope selected\", { scope });\n\n const instructionBlocks = managedInstructionBlocksForSkills(skillNames);\n const shouldUpdateInstructions = await shouldUpdateManagedInstructions(\n instructionBlocks,\n options,\n );\n const shouldWriteGithubAction = await shouldWritePrVisualRecapWorkflow(\n selected.some((skill) => skill.name === \"visual-recap\"),\n options,\n baseDir,\n );\n const mcpApps =\n options.mcp === false || planMode === \"local-files\"\n ? []\n : mcpAppsForSkills(skillNames, planMcpOverride);\n const skillFileClients = clients.filter(supportsSkillFiles);\n if (skillFileClients.length === 0 && mcpApps.length === 0) {\n throw new Error(\n \"Claude Cowork is MCP-only for Agent Native skills. Choose Codex, Claude Code, Pi, Cursor, OpenCode, or GitHub Copilot for local skill files, or install an app-backed skill with MCP enabled.\",\n );\n }\n\n const progress = await createInstallProgress(\n options,\n 1 +\n (shouldUpdateInstructions ? 1 : 0) +\n (shouldWriteGithubAction ? 1 : 0) +\n mcpApps.length,\n );\n\n const written: string[] = [];\n let instructionFiles: string[] = [];\n let githubActionPath: string | undefined;\n const mcpServers: InstalledMcpServer[] = [];\n\n try {\n progress?.start(\"Installing skill files...\");\n for (const root of unique(\n skillFileClients.map((client) =>\n installRootForClient(client, scope, baseDir),\n ),\n )) {\n for (const skill of selected) {\n const destination = path.join(root, skill.name);\n written.push(destination);\n if (!options.dryRun) {\n fs.rmSync(destination, { recursive: true, force: true });\n fs.mkdirSync(path.dirname(destination), { recursive: true });\n fs.cpSync(skill.dir, destination, { recursive: true });\n }\n }\n }\n progress?.advance(\"Skill files installed\");\n\n options.telemetry?.track(\"skills_cli install completed\", {\n skills: skillNames.join(\",\"),\n clients: clients.join(\",\"),\n scope,\n writtenCount: written.length,\n dryRun: Boolean(options.dryRun),\n });\n\n if (shouldUpdateInstructions) {\n progress?.message(\"Updating managed instructions...\");\n instructionFiles = writeManagedInstructions(\n instructionBlocks,\n baseDir,\n skillFileClients,\n scope,\n options,\n );\n progress?.advance(\"Managed instructions updated\");\n if (instructionFiles.length) {\n options.telemetry?.track(\"skills_cli instructions updated\", {\n fileCount: instructionFiles.length,\n });\n }\n }\n\n if (shouldWriteGithubAction) {\n progress?.message(\"Writing PR Visual Recap workflow...\");\n githubActionPath = writePrVisualRecapWorkflow(baseDir, options);\n progress?.advance(\"PR Visual Recap workflow ready\");\n if (githubActionPath) {\n options.telemetry?.track(\"skills_cli github action added\");\n }\n }\n\n // Register the hosted MCP server for app-backed skills (visual-plan /\n // visual-recap → Agent-Native Plan) so the agent can actually call them,\n // not just read the SKILL.md. On by default; `--no-mcp` installs the\n // skill files only. One registration per app, so visual-plan +\n // visual-recap share a single \"plan\" server.\n if (mcpApps.length > 0) {\n const mcpClients: ClientId[] = clients\n .map(skillClientToMcpClient)\n .filter((client): client is ClientId => Boolean(client));\n if (mcpClients.length === 0) {\n throw new Error(\n \"MCP setup supports Claude Code, Codex, Cursor, OpenCode, GitHub Copilot / VS Code, or Claude Cowork. Use --mode local-files or --no-mcp for Pi.\",\n );\n }\n for (const app of mcpApps) {\n progress?.message(`Registering ${app.displayName} MCP server...`);\n if (!options.dryRun) {\n const registration = await registerMcpServer({\n descriptor: {\n serverName: app.serverName,\n mcpUrl: app.mcpUrl,\n aliases: app.aliases,\n authMode: app.authMode,\n hostedUrl: app.hostedUrl,\n },\n clients: mcpClients,\n scope,\n baseDir,\n interactive: options.connect !== false && isInteractive(options),\n log,\n deviceFlowTimeoutMs: options.deviceFlowTimeoutMs,\n });\n mcpServers.push({\n serverName: app.serverName,\n mcpUrl: app.mcpUrl,\n clients,\n registeredClients: unique(\n registration.written.map(\n (entry) => entry.client as SkillClient,\n ),\n ),\n files: [\n ...new Set(registration.written.map((entry) => entry.file)),\n ],\n authenticated: registration.authenticated,\n guidance: registration.guidance,\n });\n options.telemetry?.track(\"skills_cli mcp registered\", {\n serverName: app.serverName,\n clients: clients.join(\",\"),\n authenticated: registration.authenticated,\n });\n } else {\n mcpServers.push({\n serverName: app.serverName,\n mcpUrl: app.mcpUrl,\n clients,\n registeredClients: clients,\n files: [],\n authenticated: false,\n guidance: [],\n });\n }\n progress?.advance(`${app.displayName} MCP server ready`);\n }\n }\n progress?.stop(\"Installation complete\");\n } catch (err) {\n progress?.error(\"Installation failed\");\n throw err;\n }\n\n return {\n source: source.root,\n skills: skillNames,\n clients,\n scope,\n written,\n instructionFiles,\n githubActionPath,\n mcpServers,\n planMode,\n dryRun: Boolean(options.dryRun),\n };\n } finally {\n source.cleanup?.();\n }\n}\n\nfunction defaultArgs(command: ParsedArgs[\"command\"]): ParsedArgs {\n return {\n command,\n copySource: false,\n skillNames: [],\n clients: [],\n scope: \"user\",\n scopeExplicit: false,\n yes: false,\n dryRun: false,\n printJson: false,\n instructionFiles: [],\n withGithubAction: false,\n force: false,\n connect: true,\n mcp: true,\n quiet: false,\n };\n}\n\nfunction selectedModeAwareApp(skillNames: string[]): BuiltInAppMcp | undefined {\n return skillNames\n .map((skillName) => resolveAppForSkill(skillName))\n .find(\n (app): app is BuiltInAppMcp =>\n app?.appId === \"visual-plans\" || app?.appId === \"content\",\n );\n}\n\nasync function resolvePlanModeForSkills(\n skillNames: string[],\n options: InstallSkillsOptions,\n): Promise<PlanMode | undefined> {\n const modeAwareApp = selectedModeAwareApp(skillNames);\n if (options.planMode && !modeAwareApp) {\n throw new Error(\n \"--mode only applies to visual-plan / visual-recap / visualize-repo / content.\",\n );\n }\n if (options.mcpUrl && !modeAwareApp) {\n throw new Error(\n \"--mcp-url only applies to visual-plan / visual-recap / visualize-repo / content.\",\n );\n }\n if (!modeAwareApp) return undefined;\n\n if (options.mcpUrl && !options.planMode) return \"self-hosted\";\n if (options.planMode) return options.planMode;\n return modeAwareApp.appId === \"visual-plans\" ? \"hosted\" : undefined;\n}\n\nfunction resolvePlanMcpUrlOverride(input: string): {\n hostedUrl: string;\n mcpUrl: string;\n} {\n let parsed: URL;\n try {\n parsed = new URL(input);\n } catch {\n throw new Error(`--mcp-url must be a valid URL (got \"${input}\").`);\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new Error(\"--mcp-url must use http:// or https://.\");\n }\n const publicMcpSuffix = \"/mcp\";\n const legacyMcpSuffix = \"/_agent-native/mcp\";\n const trimmedPath = parsed.pathname.replace(/\\/+$/, \"\");\n const mcpSuffix = trimmedPath.endsWith(legacyMcpSuffix)\n ? legacyMcpSuffix\n : trimmedPath.endsWith(publicMcpSuffix)\n ? publicMcpSuffix\n : undefined;\n const appPath = mcpSuffix\n ? trimmedPath.slice(0, -mcpSuffix.length)\n : trimmedPath;\n const mcpPath = `${appPath || \"\"}${publicMcpSuffix}`;\n return {\n hostedUrl: `${parsed.origin}${appPath}`,\n mcpUrl: `${parsed.origin}${mcpPath}`,\n };\n}\n\nasync function resolvePlanMcpOverrideForMode(\n planMode: PlanMode | undefined,\n options: InstallSkillsOptions,\n appId: string | undefined,\n): Promise<{ appId: string; hostedUrl: string; mcpUrl: string } | undefined> {\n if (planMode === \"local-files\" && options.mcpUrl) {\n throw new Error(\"--mode local-files cannot be combined with --mcp-url.\");\n }\n if (planMode !== \"self-hosted\") return undefined;\n if (!options.mcpUrl) {\n throw new Error(\n \"--mode self-hosted requires --mcp-url <url> in direct mode.\",\n );\n }\n if (!appId) {\n throw new Error(\"--mode self-hosted requires an app-backed skill.\");\n }\n return { appId, ...resolvePlanMcpUrlOverride(options.mcpUrl) };\n}\n\nfunction parsePlanMode(value: string): PlanMode {\n if (value === \"hosted\" || value === \"local-files\" || value === \"self-hosted\")\n return value;\n throw new Error('--mode must be \"hosted\", \"local-files\", or \"self-hosted\".');\n}\n\nfunction parseScope(value: string): SkillScope {\n if (value === \"user\" || value === \"project\") return value;\n throw new Error(\"--scope must be user or project.\");\n}\n\nfunction normalizeClients(value: string): SkillClient[] {\n return value.split(\",\").flatMap((raw) => {\n const client = raw.trim().toLowerCase();\n if (!client) return [];\n if (client === \"all\") return CLIENTS;\n if (client === \"codex\") return [\"codex\" as const];\n if (client === \"cowork\" || client === \"claude-cowork\") {\n return [\"cowork\" as const];\n }\n if (client === \"pi\") return [\"pi\" as const];\n if (client === \"cursor\") return [\"cursor\" as const];\n if (client === \"opencode\" || client === \"open-code\") {\n return [\"opencode\" as const];\n }\n if (\n client === \"github-copilot\" ||\n client === \"copilot\" ||\n client === \"vscode\" ||\n client === \"vs-code\"\n ) {\n return [\"github-copilot\" as const];\n }\n if (\n client === \"claude\" ||\n client === \"claude-code\" ||\n client === \"claude-code-cli\"\n ) {\n return [\"claude-code\" as const];\n }\n throw new Error(\n `Unsupported client \"${raw}\". Use codex, claude-code, cowork, pi, cursor, opencode, github-copilot, or all.`,\n );\n });\n}\n\nfunction skillClientToMcpClient(client: SkillClient): ClientId | null {\n if (client === \"pi\") return null;\n if (client === \"claude-code\") return \"claude-code\";\n return client;\n}\n\nfunction supportsSkillFiles(client: SkillClient): boolean {\n return client !== \"cowork\";\n}\n\nfunction normalizeSkillName(value: string): string {\n const normalized = value.trim().toLowerCase();\n if (!/^[a-z0-9][a-z0-9._-]*$/.test(normalized)) {\n throw new Error(`Invalid skill name \"${value}\".`);\n }\n return normalized;\n}\n\nfunction unique<T>(values: T[]): T[] {\n return [...new Set(values)];\n}\n\nfunction plural(count: number, singular: string, pluralForm = `${singular}s`) {\n return `${count} ${count === 1 ? singular : pluralForm}`;\n}\n\nfunction shortenPathForOutput(file: string, baseDir: string): string {\n const resolved = path.resolve(file);\n const home = process.env.HOME || os.homedir();\n if (resolved === home || resolved.startsWith(`${home}${path.sep}`)) {\n return `~${resolved.slice(home.length)}`;\n }\n const base = path.resolve(baseDir);\n const relative = path.relative(base, resolved);\n if (relative && !relative.startsWith(\"..\") && !path.isAbsolute(relative)) {\n return `.${path.sep}${relative}`;\n }\n return file;\n}\n\nfunction summarizePaths(files: string[], baseDir: string, max = 4): string {\n const shortened = unique(files).map((file) =>\n shortenPathForOutput(file, baseDir),\n );\n if (shortened.length <= max) return shortened.join(\", \");\n return `${shortened.slice(0, max).join(\", \")} +${shortened.length - max} more`;\n}\n\nasync function createInstallProgress(\n options: InstallSkillsOptions,\n max: number,\n) {\n if (options.quiet || !isInteractive(options) || max <= 0) return null;\n const clack = await import(\"@clack/prompts\");\n const progress = clack.progress({ max, indicator: \"timer\" });\n let active = false;\n return {\n start(message: string) {\n active = true;\n progress.start(message);\n },\n message(message: string) {\n if (active) progress.message(message);\n },\n advance(message: string) {\n if (active) progress.advance(1, message);\n },\n stop(message: string) {\n if (!active) return;\n progress.stop(message);\n active = false;\n },\n error(message: string) {\n if (!active) return;\n progress.error(message);\n active = false;\n },\n };\n}\n\nfunction mcpAppsForSkills(\n skillNames: string[],\n planOverride?: { appId: string; hostedUrl: string; mcpUrl: string },\n): BuiltInAppMcp[] {\n const apps: BuiltInAppMcp[] = [];\n const seen = new Set<string>();\n for (const skillName of skillNames) {\n const app = resolveAppForSkill(skillName);\n if (!app || seen.has(app.appId)) continue;\n seen.add(app.appId);\n if (app.appId === planOverride?.appId) {\n apps.push({\n ...app,\n hostedUrl: planOverride.hostedUrl,\n mcpUrl: planOverride.mcpUrl,\n });\n } else {\n apps.push(app);\n }\n }\n return apps;\n}\n\nfunction mcpStatus(server: InstalledMcpServer, dryRun: boolean): string {\n if (dryRun) return `would register for ${server.clients.join(\", \")}`;\n\n const registered = server.registeredClients;\n const pending = server.clients.filter(\n (client) => !registered.includes(client),\n );\n const parts: string[] = [];\n if (registered.length > 0) {\n parts.push(\n `${server.authenticated ? \"registered and authenticated\" : \"registered\"} for ${registered.join(\", \")}`,\n );\n }\n if (pending.length > 0) {\n parts.push(`authentication pending for ${pending.join(\", \")}`);\n }\n return (\n parts.join(\"; \") ||\n `authentication pending for ${server.clients.join(\", \")}`\n );\n}\n\nasync function printInstallResult(\n result: InstallSkillsResult,\n options: { baseDir: string; dryRun: boolean },\n): Promise<void> {\n const clack = await import(\"@clack/prompts\");\n const verb = options.dryRun ? \"Would install\" : \"Installed\";\n const summary = [\n `Skills ${result.skills.join(\", \") || \"none\"}`,\n `Agents ${result.clients.join(\", \") || \"none\"}`,\n `Scope ${result.scope}`,\n result.planMode ? `Install mode ${result.planMode}` : \"\",\n result.written.length\n ? `Skill folders ${plural(result.written.length, \"folder\")} (${summarizePaths(\n result.written,\n options.baseDir,\n )})`\n : \"\",\n ].filter(Boolean);\n\n clack.note(summary.join(\"\\n\"), verb);\n\n if (result.instructionFiles.length) {\n clack.note(\n summarizePaths(result.instructionFiles, options.baseDir),\n \"Managed instructions\",\n );\n }\n\n if (result.githubActionPath) {\n clack.note(\n shortenPathForOutput(result.githubActionPath, options.baseDir),\n \"PR Visual Recap workflow\",\n );\n }\n\n if (result.mcpServers.length) {\n const mcpLines = result.mcpServers.map((server) => {\n const status = mcpStatus(server, options.dryRun);\n const files = server.files.length\n ? ` (${summarizePaths(server.files, options.baseDir, 2)})`\n : \"\";\n return `${server.serverName}: ${status}${files}`;\n });\n clack.note(mcpLines.join(\"\\n\"), \"MCP\");\n\n const guidance = result.mcpServers.flatMap((server) => server.guidance);\n if (guidance.length) {\n clack.note(guidance.join(\"\\n\"), \"Next steps\");\n }\n }\n\n if (\n result.planMode === \"local-files\" &&\n result.skills.some((skill) =>\n [\"visual-plan\", \"visual-recap\", \"visualize-repo\"].includes(skill),\n )\n ) {\n clack.note(\n [\n \"No sharing, all local.\",\n \"Run: npx @agent-native/core@latest plan blocks --out plan-blocks.md\",\n \"Check: npx @agent-native/core@latest plan local check --dir plans/<slug>\",\n \"Serve: npx @agent-native/core@latest plan local serve --dir plans/<slug> --open\",\n \"Verify: npx @agent-native/core@latest plan local verify --dir plans/<slug>\",\n ].join(\"\\n\"),\n \"Local Plan files\",\n );\n }\n\n if (!options.dryRun) {\n clack.note(\"Restart or reload selected agent clients if needed.\", \"Reload\");\n }\n\n clack.outro(`${options.dryRun ? \"Dry run complete\" : \"All set\"} ✅`);\n}\n\nasync function resolveSelectedSkills(\n entries: SkillEntry[],\n options: InstallSkillsOptions,\n): Promise<SkillEntry[]> {\n const byName = new Map(entries.map((entry) => [entry.name, entry]));\n const requested = unique((options.skillNames ?? []).map(normalizeSkillName));\n if (requested.length > 0) {\n const missing = requested.filter((name) => !byName.has(name));\n if (missing.length > 0) {\n throw new Error(\n `Unknown skill${missing.length === 1 ? \"\" : \"s\"}: ${missing.join(\", \")}. Available: ${entries\n .map((entry) => entry.name)\n .join(\", \")}.`,\n );\n }\n return requested.map((name) => byName.get(name)!);\n }\n\n return entries;\n}\n\nasync function resolveSelectedScope(\n options: InstallSkillsOptions,\n): Promise<SkillScope> {\n if (options.scope) return options.scope;\n return \"user\";\n}\n\nasync function resolveSelectedClients(\n options: InstallSkillsOptions,\n): Promise<SkillClient[]> {\n const requested = unique(options.clients ?? []);\n if (requested.length > 0) return requested;\n return CLIENTS;\n}\n\nfunction isInteractive(\n options: Pick<InstallSkillsOptions, \"isInteractive\">,\n): boolean {\n if (options.isInteractive) return options.isInteractive();\n if (process.env.CI === \"true\") return false;\n return Boolean(process.stdin.isTTY && process.stdout.isTTY);\n}\n\nfunction installRootForClient(\n client: SkillClient,\n scope: SkillScope,\n baseDir: string,\n): string {\n const home = process.env.HOME || os.homedir();\n if (scope === \"project\") {\n if (client !== \"claude-code\") {\n return path.join(baseDir, \".agents\", \"skills\");\n }\n return path.join(baseDir, \".claude\", \"skills\");\n }\n if (client === \"codex\") {\n return process.env.CODEX_HOME\n ? path.join(process.env.CODEX_HOME, \"skills\")\n : path.join(home, \".codex\", \"skills\");\n }\n if (client === \"pi\") {\n return path.join(home, \".agents\", \"skills\");\n }\n if (\n client === \"cursor\" ||\n client === \"opencode\" ||\n client === \"github-copilot\"\n ) {\n return path.join(home, \".agents\", \"skills\");\n }\n return path.join(home, \".claude\", \"skills\");\n}\n\nfunction discoverSkills(root: string): SkillEntry[] {\n const skillsRoot = resolveSkillsRoot(root);\n const directSkill = path.join(skillsRoot, \"SKILL.md\");\n if (fs.existsSync(directSkill)) {\n const entry = skillEntry(skillsRoot);\n return entry ? [entry] : [];\n }\n const entries = fs\n .readdirSync(skillsRoot, { withFileTypes: true })\n .filter((entry) => entry.isDirectory() && !entry.name.startsWith(\".\"))\n .map((entry) => skillEntry(path.join(skillsRoot, entry.name)))\n .filter((entry): entry is SkillEntry => Boolean(entry));\n return entries.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nfunction resolveSkillsRoot(root: string): string {\n for (const manifestPath of [\n path.join(root, \".codex-plugin\", \"plugin.json\"),\n path.join(root, \".claude-plugin\", \"plugin.json\"),\n ]) {\n if (!fs.existsSync(manifestPath)) continue;\n try {\n const manifest = JSON.parse(fs.readFileSync(manifestPath, \"utf-8\")) as {\n skills?: unknown;\n };\n if (typeof manifest.skills === \"string\") {\n const resolved = path.resolve(root, manifest.skills);\n if (fs.existsSync(resolved)) return resolved;\n }\n } catch {}\n }\n const conventional = path.join(root, \"skills\");\n if (fs.existsSync(conventional)) return conventional;\n return root;\n}\n\nfunction skillEntry(dir: string): SkillEntry | null {\n const skillFile = path.join(dir, \"SKILL.md\");\n if (!fs.existsSync(skillFile)) return null;\n const body = fs.readFileSync(skillFile, \"utf-8\");\n const frontmatter = body.match(/^---\\n([\\s\\S]*?)\\n---/);\n const name = frontmatterField(frontmatter?.[1], \"name\") ?? path.basename(dir);\n const description = frontmatterField(frontmatter?.[1], \"description\");\n return { name: normalizeSkillName(name), dir, description };\n}\n\nfunction frontmatterField(\n frontmatter: string | undefined,\n field: string,\n): string | undefined {\n if (!frontmatter) return undefined;\n const lines = frontmatter.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i += 1) {\n const match = lines[i].match(new RegExp(`^${field}:\\\\s*(.*)$`));\n if (!match) continue;\n const raw = match[1].trim();\n if (raw === \">-\" || raw === \">\" || raw === \"|-\" || raw === \"|\") {\n const block: string[] = [];\n for (let j = i + 1; j < lines.length; j += 1) {\n const line = lines[j];\n if (line.trim() && !/^\\s/.test(line)) break;\n block.push(line.replace(/^\\s+/, \"\"));\n }\n const value = raw.startsWith(\"|\") ? block.join(\"\\n\") : block.join(\" \");\n return value.replace(/\\s+/g, \" \").trim() || undefined;\n }\n return raw.replace(/^[\"']|[\"']$/g, \"\").trim() || undefined;\n }\n return undefined;\n}\n\nasync function materializeSource(input: string): Promise<{\n root: string;\n cleanup?: () => void;\n}> {\n const local = path.resolve(input);\n if (fs.existsSync(local)) return { root: local };\n\n const parsed = parseGitHubSource(input);\n if (!parsed) {\n throw new Error(\n `Skill source not found: ${input}. Use a local path, GitHub owner/repo, or GitHub URL.`,\n );\n }\n\n const tmpRoot = fs.mkdtempSync(\n path.join(os.tmpdir(), \"agent-native-skills-\"),\n );\n const archive = path.join(tmpRoot, \"source.tgz\");\n const ref = parsed.ref ?? \"main\";\n const url = `https://codeload.github.com/${parsed.owner}/${parsed.repo}/tar.gz/${encodeURIComponent(ref)}`;\n const response = await fetch(url, {\n headers: { \"user-agent\": \"@agent-native/skills\" },\n });\n if (!response.ok) {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n throw new Error(\n `Could not download ${parsed.owner}/${parsed.repo}@${ref}: HTTP ${response.status}.`,\n );\n }\n fs.writeFileSync(archive, Buffer.from(await response.arrayBuffer()));\n\n const extractDir = path.join(tmpRoot, \"extract\");\n fs.mkdirSync(extractDir, { recursive: true });\n const extracted = spawnSync(\"tar\", [\"-xzf\", archive, \"-C\", extractDir], {\n stdio: \"pipe\",\n encoding: \"utf-8\",\n });\n if (extracted.status !== 0) {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n throw new Error(\n `Could not extract ${input}: ${extracted.stderr || extracted.stdout}`,\n );\n }\n const [first] = fs\n .readdirSync(extractDir, { withFileTypes: true })\n .filter((entry) => entry.isDirectory());\n if (!first) {\n fs.rmSync(tmpRoot, { recursive: true, force: true });\n throw new Error(\n `Downloaded archive for ${input} did not contain a repo directory.`,\n );\n }\n return {\n root: path.join(extractDir, first.name),\n cleanup: () => fs.rmSync(tmpRoot, { recursive: true, force: true }),\n };\n}\n\nfunction parseGitHubSource(\n input: string,\n): { owner: string; repo: string; ref?: string } | null {\n const shorthand = input.match(\n /^([A-Za-z0-9_.-]+)\\/([A-Za-z0-9_.-]+)(?:#(.+))?$/,\n );\n if (shorthand) {\n return {\n owner: shorthand[1],\n repo: shorthand[2].replace(/\\.git$/, \"\"),\n ref: shorthand[3],\n };\n }\n\n let url: URL;\n try {\n url = new URL(input);\n } catch {\n return null;\n }\n if (url.hostname !== \"github.com\") return null;\n const parts = url.pathname.split(\"/\").filter(Boolean);\n if (parts.length < 2) return null;\n const treeIndex = parts.indexOf(\"tree\");\n return {\n owner: parts[0],\n repo: parts[1].replace(/\\.git$/, \"\"),\n ref:\n treeIndex >= 0 && parts[treeIndex + 1]\n ? parts.slice(treeIndex + 1).join(\"/\")\n : url.hash.slice(1) || undefined,\n };\n}\n\nfunction instructionContentForSkill(skillName: string): string | null {\n if (skillName === \"quick-recap\") {\n return \"When writing final response status indicators, use the /quick-recap skill always.\";\n }\n if (skillName === \"efficient-fable\") {\n return \"When operating as Claude Fable, use the /efficient-fable skill always.\";\n }\n if (skillName === \"efficient-frontier\") {\n return \"When using a high-cost frontier model for codebase-heavy work, use the /efficient-frontier skill always.\";\n }\n if (skillName === \"stay-within-limits\") {\n return \"When long-running or parallel work needs usage-limit checks, use the /stay-within-limits skill always.\";\n }\n if (skillName === \"visual-plan\") {\n return \"When work needs an interactive visual plan before implementation, use the /visual-plan skill always.\";\n }\n if (skillName === \"visual-recap\") {\n return \"When a PR, branch, commit, or diff needs an interactive visual recap, use the /visual-recap skill always.\";\n }\n if (skillName === \"visualize-repo\") {\n return \"When a repository needs local visual docs or a navigable Plan-backed repo viewer, use the /visualize-repo skill always.\";\n }\n return null;\n}\n\nfunction managedInstructionBlocksForSkills(skillNames: string[]): string[] {\n return skillNames\n .map((name) => instructionContentForSkill(name))\n .filter((block): block is string => Boolean(block));\n}\n\nasync function shouldUpdateManagedInstructions(\n blocks: string[],\n options: InstallSkillsOptions,\n): Promise<boolean> {\n if (blocks.length === 0) return false;\n let shouldUpdate = options.updateInstructions;\n if (shouldUpdate !== undefined) return shouldUpdate;\n if (options.yes) return true;\n return false;\n}\n\nfunction writeManagedInstructions(\n blocks: string[],\n baseDir: string,\n clients: SkillClient[],\n scope: SkillScope,\n options: InstallSkillsOptions,\n): string[] {\n if (blocks.length === 0) return [];\n const files = resolveInstructionFiles(\n baseDir,\n options.instructionFiles,\n clients,\n scope,\n );\n const content = `${MANAGED_INSTRUCTIONS_START}\n${blocks.join(\"\\n\")}\n${MANAGED_INSTRUCTIONS_END}`;\n for (const file of files) {\n if (options.dryRun) continue;\n upsertManagedBlock(file, content);\n }\n return files;\n}\n\nasync function maybeUpdateInstructions(\n skillNames: string[],\n baseDir: string,\n options: InstallSkillsOptions,\n): Promise<string[]> {\n const blocks = managedInstructionBlocksForSkills(skillNames);\n const clients = options.clients?.length ? options.clients : CLIENTS;\n const scope = options.scope ?? \"user\";\n if (!(await shouldUpdateManagedInstructions(blocks, options))) return [];\n return writeManagedInstructions(blocks, baseDir, clients, scope, options);\n}\n\nfunction resolveInstructionFiles(\n baseDir: string,\n explicit: string[] | undefined,\n clients: SkillClient[],\n scope: SkillScope,\n): string[] {\n if (explicit && explicit.length > 0) {\n return explicit.map((file) => path.resolve(baseDir, file));\n }\n const instructionClients = clients.filter(supportsSkillFiles);\n if (instructionClients.length === 0) return [];\n if (scope === \"user\") {\n const home = process.env.HOME || os.homedir();\n const files: string[] = [];\n if (instructionClients.includes(\"codex\")) {\n const codexHome = process.env.CODEX_HOME || path.join(home, \".codex\");\n files.push(path.join(codexHome, \"AGENTS.md\"));\n }\n if (instructionClients.includes(\"claude-code\")) {\n files.push(path.join(home, \".claude\", \"CLAUDE.md\"));\n }\n return unique(files);\n }\n const candidates = [\"AGENTS.md\", \"CLAUDE.md\"].map((file) =>\n path.join(baseDir, file),\n );\n const existing = candidates.filter((file) => fs.existsSync(file));\n return existing.length > 0 ? existing : [path.join(baseDir, \"AGENTS.md\")];\n}\n\nfunction stripManagedInstructionBlocks(text: string): string {\n const pattern = new RegExp(\n `${escapeRegExp(MANAGED_INSTRUCTIONS_START)}[\\\\s\\\\S]*?${escapeRegExp(MANAGED_INSTRUCTIONS_END)}`,\n \"g\",\n );\n return text.replace(pattern, \"\");\n}\n\nfunction upsertManagedBlock(file: string, block: string): void {\n fs.mkdirSync(path.dirname(file), { recursive: true });\n const existing = fs.existsSync(file) ? fs.readFileSync(file, \"utf-8\") : \"\";\n const firstAt = existing.indexOf(MANAGED_INSTRUCTIONS_START);\n let next: string;\n if (firstAt >= 0) {\n // Collapse EVERY managed block into a single fresh one re-inserted where the\n // first one began, so repeated installs or pre-existing duplicates never\n // leave the same instructions written more than once.\n const before = existing.slice(0, firstAt).trimEnd();\n const after = stripManagedInstructionBlocks(\n existing.slice(firstAt),\n ).trimStart();\n next =\n (before ? `${before}\\n\\n` : \"\") +\n `${block.trimEnd()}\\n` +\n (after ? `\\n${after}` : \"\");\n } else {\n next = `${existing.trimEnd()}${existing.trim() ? \"\\n\\n\" : \"\"}${block.trimEnd()}\\n`;\n }\n fs.writeFileSync(file, next, \"utf-8\");\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nconst PR_VISUAL_RECAP_DOCS_URL =\n \"https://www.agent-native.com/docs/pr-visual-recap\";\n\nfunction prVisualRecapWorkflowPath(baseDir: string): string {\n return path.join(baseDir, \".github\", \"workflows\", \"pr-visual-recap.yml\");\n}\n\nfunction prVisualRecapSetupCommand(): string {\n return \"npx @agent-native/core@latest recap setup\";\n}\n\nasync function promptForGithubAction(\n context: GithubActionPromptContext,\n): Promise<boolean | null> {\n const clack = await import(\"@clack/prompts\");\n const result = await clack.confirm({\n message:\n \"Optional: add automatic PR Visual Recaps? (GitHub Action)\\n\" +\n \" Posts a human-friendly recap on every pull request.\\n\" +\n ` Learn more: ${context.docsUrl}\\n` +\n ` Writes ${context.workflowPath}; ${context.setupCommand} finishes the GitHub secrets.`,\n initialValue: false,\n });\n if (clack.isCancel(result)) {\n clack.cancel(\"Skipped PR Visual Recap workflow.\");\n return null;\n }\n return Boolean(result);\n}\n\nasync function shouldWritePrVisualRecapWorkflow(\n hasVisualRecap: boolean,\n options: InstallSkillsOptions,\n baseDir: string,\n): Promise<boolean> {\n if (!hasVisualRecap) return false;\n if (options.withGithubAction) return true;\n if (fs.existsSync(prVisualRecapWorkflowPath(baseDir))) return false;\n if (options.yes || !isInteractive(options)) return false;\n const prompt = options.promptGithubAction ?? promptForGithubAction;\n const choice = await prompt({\n workflowPath: path.join(\".github\", \"workflows\", \"pr-visual-recap.yml\"),\n setupCommand: prVisualRecapSetupCommand(),\n docsUrl: PR_VISUAL_RECAP_DOCS_URL,\n });\n return choice === true;\n}\n\nconst PR_VISUAL_RECAP_REUSABLE_WORKFLOW = `name: PR Visual Recap\n\non:\n pull_request:\n types: [opened, synchronize, reopened, ready_for_review, labeled, closed]\n\npermissions:\n contents: read\n\nconcurrency:\n group: pr-visual-recap-\\${{ github.event.pull_request.number }}\n cancel-in-progress: true\n\njobs:\n visual-recap:\n if: github.event.action != 'labeled' || vars.VISUAL_RECAP_REQUIRED_LABELS != ''\n permissions:\n checks: write\n contents: read\n issues: write\n pull-requests: read\n uses: BuilderIO/agent-native/.github/workflows/pr-visual-recap-reusable.yml@main\n with:\n skill-source: repo\n runs-on: \\${{ vars.VISUAL_RECAP_RUNS_ON || '\"ubuntu-latest\"' }}\n gate-runs-on: \\${{ vars.VISUAL_RECAP_GATE_RUNS_ON || 'ubuntu-latest' }}\n required-labels: \\${{ vars.VISUAL_RECAP_REQUIRED_LABELS || '' }}\n secrets:\n PLAN_RECAP_TOKEN: \\${{ secrets.PLAN_RECAP_TOKEN }}\n ANTHROPIC_API_KEY: \\${{ secrets.ANTHROPIC_API_KEY }}\n OPENAI_API_KEY: \\${{ secrets.OPENAI_API_KEY }}\n PLAN_RECAP_APP_URL: \\${{ secrets.PLAN_RECAP_APP_URL }}\n`;\n\nfunction writePrVisualRecapWorkflow(\n baseDir: string,\n options: InstallSkillsOptions,\n): string {\n const file = path.join(\n baseDir,\n \".github\",\n \"workflows\",\n \"pr-visual-recap.yml\",\n );\n if (options.dryRun) return file;\n if (fs.existsSync(file)) {\n const current = fs.readFileSync(file, \"utf-8\");\n if (current === PR_VISUAL_RECAP_REUSABLE_WORKFLOW) return file;\n if (!options.force) {\n throw new Error(\n `${file} already exists and differs. Re-run with --force to overwrite it.`,\n );\n }\n }\n fs.mkdirSync(path.dirname(file), { recursive: true });\n fs.writeFileSync(file, PR_VISUAL_RECAP_REUSABLE_WORKFLOW, \"utf-8\");\n return file;\n}\n\nexport function createInstallId(): string {\n return randomUUID();\n}\n"]}
@@ -7,7 +7,14 @@ export interface CliTelemetryOptions {
7
7
  }
8
8
  export interface CliTelemetry {
9
9
  track(event: string, properties?: Record<string, unknown>): void;
10
+ captureException(error: unknown, context?: CliExceptionContext): void;
10
11
  flush(): Promise<void>;
11
12
  }
13
+ export interface CliExceptionContext {
14
+ handled?: boolean;
15
+ level?: "fatal" | "error" | "warning" | "info" | "debug";
16
+ tags?: Record<string, string | number | boolean | null | undefined>;
17
+ extra?: Record<string, unknown>;
18
+ }
12
19
  export declare function createCliTelemetry(options: CliTelemetryOptions): CliTelemetry;
13
20
  //# sourceMappingURL=telemetry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACjE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AA2CD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAmD7E"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACjE,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACtE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;IACpE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAmJD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAwD7E"}
package/dist/telemetry.js CHANGED
@@ -39,6 +39,92 @@ function telemetryDisabled() {
39
39
  process.env.NODE_ENV === "test" ||
40
40
  typeof fetch !== "function");
41
41
  }
42
+ const MAX_EXCEPTION_MESSAGE_LENGTH = 1000;
43
+ const MAX_EXCEPTION_STACK_LENGTH = 8000;
44
+ const MAX_EXCEPTION_TAGS = 30;
45
+ const MAX_EXCEPTION_EXTRA_KEYS = 30;
46
+ const MAX_EXCEPTION_VALUE_LENGTH = 1000;
47
+ const SECRET_RE = /\b(?:bearer|basic)\s+[^\s]+/gi;
48
+ const SECRET_KEY_RE = /(?:authorization|cookie|set[-_]?cookie|token|secret|password|passwd|pwd|api[-_]?key|apikey|credential)/i;
49
+ function redactExceptionText(value) {
50
+ return value
51
+ .replace(SECRET_RE, (match) => `${match.split(/\s+/, 1)[0]} <redacted>`)
52
+ .replace(/([A-Za-z0-9_$.-]*(?:authorization|cookie|token|secret|password|passwd|pwd|api[-_]?key|apikey|credential)[A-Za-z0-9_$.-]*\s*[:=]\s*)([^\s,;}]+)/gi, "$1<redacted>");
53
+ }
54
+ function boundedExceptionText(value, max) {
55
+ const text = typeof value === "string" ? value : String(value ?? "Unknown error");
56
+ const safe = redactExceptionText(text);
57
+ return safe.length > max ? safe.slice(0, max) : safe;
58
+ }
59
+ function safeExceptionValue(value, depth = 2) {
60
+ if (value == null ||
61
+ typeof value === "boolean" ||
62
+ typeof value === "number") {
63
+ return value;
64
+ }
65
+ if (typeof value === "string") {
66
+ return boundedExceptionText(value, MAX_EXCEPTION_VALUE_LENGTH);
67
+ }
68
+ if (depth <= 0)
69
+ return boundedExceptionText(value, MAX_EXCEPTION_VALUE_LENGTH);
70
+ if (Array.isArray(value)) {
71
+ return value
72
+ .slice(0, 20)
73
+ .map((item) => safeExceptionValue(item, depth - 1));
74
+ }
75
+ if (typeof value === "object") {
76
+ const out = {};
77
+ for (const [key, child] of Object.entries(value)) {
78
+ if (Object.keys(out).length >= MAX_EXCEPTION_EXTRA_KEYS)
79
+ break;
80
+ const safeKey = boundedExceptionText(key, 100);
81
+ out[safeKey] = SECRET_KEY_RE.test(safeKey)
82
+ ? "<redacted>"
83
+ : safeExceptionValue(child, depth - 1);
84
+ }
85
+ return out;
86
+ }
87
+ return boundedExceptionText(value, MAX_EXCEPTION_VALUE_LENGTH);
88
+ }
89
+ function captureException(error, context, trackEvent) {
90
+ const exception = error instanceof Error
91
+ ? {
92
+ type: boundedExceptionText(error.name || "Error", 200),
93
+ message: boundedExceptionText(error.message || error.name || "Error", MAX_EXCEPTION_MESSAGE_LENGTH),
94
+ stack: error.stack
95
+ ? boundedExceptionText(error.stack, MAX_EXCEPTION_STACK_LENGTH)
96
+ : undefined,
97
+ }
98
+ : {
99
+ type: "Error",
100
+ message: boundedExceptionText(error, MAX_EXCEPTION_MESSAGE_LENGTH),
101
+ stack: undefined,
102
+ };
103
+ const tags = {};
104
+ for (const [key, value] of Object.entries(context.tags ?? {})) {
105
+ if (Object.keys(tags).length >= MAX_EXCEPTION_TAGS || value == null)
106
+ break;
107
+ const safeKey = boundedExceptionText(key, 100);
108
+ tags[safeKey] = SECRET_KEY_RE.test(safeKey)
109
+ ? "<redacted>"
110
+ : boundedExceptionText(value, 200);
111
+ }
112
+ const extra = safeExceptionValue(context.extra);
113
+ trackEvent("$exception", {
114
+ app: "agent-native-cli",
115
+ template: "cli",
116
+ runtime: "cli",
117
+ source: "cli",
118
+ exceptionType: exception.type,
119
+ exceptionMessage: exception.message,
120
+ ...(exception.stack ? { exceptionStack: exception.stack } : {}),
121
+ handled: context.handled ?? false,
122
+ level: context.level ?? "error",
123
+ occurredAt: new Date().toISOString(),
124
+ ...(Object.keys(tags).length ? { exceptionTags: tags } : {}),
125
+ ...(extra && typeof extra === "object" ? { exceptionExtra: extra } : {}),
126
+ });
127
+ }
42
128
  /**
43
129
  * Read (or lazily create) a stable per-machine install id, shared across both
44
130
  * skills CLIs so one developer counts once. Best-effort: an unwritable home
@@ -110,6 +196,10 @@ export function createCliTelemetry(options) {
110
196
  new Promise((resolve) => setTimeout(resolve, FLUSH_TIMEOUT_MS)),
111
197
  ]);
112
198
  }
113
- return { track, flush };
199
+ return {
200
+ track,
201
+ captureException: (error, context = {}) => captureException(error, context, track),
202
+ flush,
203
+ };
114
204
  }
115
205
  //# sourceMappingURL=telemetry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Best-effort install-funnel telemetry for the skills CLI.\n *\n * Events are POSTed to the first-party Agent Native Analytics endpoint\n * (analytics.agent-native.com/track) using a PUBLIC, write-only key — the same\n * mechanism every agent-native app uses to report client-side events. Nothing\n * here ever blocks or throws into the install flow: sends are fire-and-forget\n * and `flush()` awaits any in-flight requests with a short cap before exit.\n *\n * Privacy: we report skill NAMES, client ids, scope, counts, platform, and the\n * CLI version — never file paths, repo names, cwd, skill sources, or anything\n * user-identifying. A random per-machine install id (unique installs) and a\n * per-invocation run id (step-by-step dropoff) are the only identifiers.\n *\n * Opt out with DO_NOT_TRACK=1 or AGENT_NATIVE_TELEMETRY_DISABLED=1.\n */\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\n// Public, write-only analytics key. Safe to embed (revocable from the Analytics\n// settings UI). Override with AGENT_NATIVE_ANALYTICS_PUBLIC_KEY for testing or\n// to point telemetry at a different first-party analytics instance.\n// guard:allow-public-key -- first-party analytics write key is public by design.\nconst EMBEDDED_PUBLIC_KEY =\n \"anpk_dc523e34b99bc34d76e82d94c46593544e4a8509a4bfc93c\";\nconst DEFAULT_ENDPOINT = \"https://analytics.agent-native.com/track\";\nconst FLUSH_TIMEOUT_MS = 1500;\n\nexport interface CliTelemetryOptions {\n /** Stable identifier for the emitting CLI, e.g. \"skills-installer\". */\n cli: string;\n cliVersion: string;\n command: string;\n interactive: boolean;\n}\n\nexport interface CliTelemetry {\n track(event: string, properties?: Record<string, unknown>): void;\n flush(): Promise<void>;\n}\n\nfunction resolvePublicKey(): string {\n const fromEnv = process.env.AGENT_NATIVE_ANALYTICS_PUBLIC_KEY?.trim();\n return fromEnv || EMBEDDED_PUBLIC_KEY;\n}\n\nfunction resolveEndpoint(): string {\n const fromEnv = process.env.AGENT_NATIVE_ANALYTICS_ENDPOINT?.trim();\n return (fromEnv || DEFAULT_ENDPOINT).replace(/\\/+$/, \"\");\n}\n\nfunction telemetryDisabled(): boolean {\n return (\n process.env.DO_NOT_TRACK === \"1\" ||\n process.env.AGENT_NATIVE_TELEMETRY_DISABLED === \"1\" ||\n process.env.NODE_ENV === \"test\" ||\n typeof fetch !== \"function\"\n );\n}\n\n/**\n * Read (or lazily create) a stable per-machine install id, shared across both\n * skills CLIs so one developer counts once. Best-effort: an unwritable home\n * directory just yields an ephemeral id for this run.\n */\nfunction resolveInstallId(): string {\n try {\n const dir = path.join(os.homedir(), \".agent-native\");\n const file = path.join(dir, \"installation-id\");\n const existing = fs.existsSync(file)\n ? fs.readFileSync(file, \"utf8\").trim()\n : \"\";\n if (existing) return existing;\n const id = crypto.randomUUID();\n fs.mkdirSync(dir, { recursive: true });\n fs.writeFileSync(file, `${id}\\n`, \"utf8\");\n return id;\n } catch {\n return crypto.randomUUID();\n }\n}\n\nexport function createCliTelemetry(options: CliTelemetryOptions): CliTelemetry {\n const publicKey = resolvePublicKey();\n const disabled = telemetryDisabled() || !publicKey;\n const endpoint = resolveEndpoint();\n const installId = disabled ? \"\" : resolveInstallId();\n const runId = crypto.randomUUID();\n const inFlight = new Set<Promise<void>>();\n\n const base = {\n cli: options.cli,\n cliVersion: options.cliVersion,\n command: options.command,\n node: process.version,\n platform: process.platform,\n ci: process.env.CI === \"true\",\n interactive: options.interactive,\n runId,\n installId,\n };\n\n function track(event: string, properties?: Record<string, unknown>): void {\n if (disabled) return;\n const body = JSON.stringify({\n publicKey,\n event,\n anonymousId: installId,\n sessionId: runId,\n timestamp: new Date().toISOString(),\n properties: { ...base, ...properties },\n });\n const promise = fetch(endpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n keepalive: true,\n })\n .then(() => undefined)\n .catch(() => undefined);\n inFlight.add(promise);\n void promise.finally(() => inFlight.delete(promise));\n }\n\n async function flush(): Promise<void> {\n if (disabled || inFlight.size === 0) return;\n await Promise.race([\n Promise.allSettled([...inFlight]),\n new Promise((resolve) => setTimeout(resolve, FLUSH_TIMEOUT_MS)),\n ]);\n }\n\n return { track, flush };\n}\n"]}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Best-effort install-funnel telemetry for the skills CLI.\n *\n * Events are POSTed to the first-party Agent Native Analytics endpoint\n * (analytics.agent-native.com/track) using a PUBLIC, write-only key — the same\n * mechanism every agent-native app uses to report client-side events. Nothing\n * here ever blocks or throws into the install flow: sends are fire-and-forget\n * and `flush()` awaits any in-flight requests with a short cap before exit.\n *\n * Privacy: we report skill NAMES, client ids, scope, counts, platform, and the\n * CLI version — never file paths, repo names, cwd, skill sources, or anything\n * user-identifying. A random per-machine install id (unique installs) and a\n * per-invocation run id (step-by-step dropoff) are the only identifiers.\n *\n * Opt out with DO_NOT_TRACK=1 or AGENT_NATIVE_TELEMETRY_DISABLED=1.\n */\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\n// Public, write-only analytics key. Safe to embed (revocable from the Analytics\n// settings UI). Override with AGENT_NATIVE_ANALYTICS_PUBLIC_KEY for testing or\n// to point telemetry at a different first-party analytics instance.\n// guard:allow-public-key -- first-party analytics write key is public by design.\nconst EMBEDDED_PUBLIC_KEY =\n \"anpk_dc523e34b99bc34d76e82d94c46593544e4a8509a4bfc93c\";\nconst DEFAULT_ENDPOINT = \"https://analytics.agent-native.com/track\";\nconst FLUSH_TIMEOUT_MS = 1500;\n\nexport interface CliTelemetryOptions {\n /** Stable identifier for the emitting CLI, e.g. \"skills-installer\". */\n cli: string;\n cliVersion: string;\n command: string;\n interactive: boolean;\n}\n\nexport interface CliTelemetry {\n track(event: string, properties?: Record<string, unknown>): void;\n captureException(error: unknown, context?: CliExceptionContext): void;\n flush(): Promise<void>;\n}\n\nexport interface CliExceptionContext {\n handled?: boolean;\n level?: \"fatal\" | \"error\" | \"warning\" | \"info\" | \"debug\";\n tags?: Record<string, string | number | boolean | null | undefined>;\n extra?: Record<string, unknown>;\n}\n\nfunction resolvePublicKey(): string {\n const fromEnv = process.env.AGENT_NATIVE_ANALYTICS_PUBLIC_KEY?.trim();\n return fromEnv || EMBEDDED_PUBLIC_KEY;\n}\n\nfunction resolveEndpoint(): string {\n const fromEnv = process.env.AGENT_NATIVE_ANALYTICS_ENDPOINT?.trim();\n return (fromEnv || DEFAULT_ENDPOINT).replace(/\\/+$/, \"\");\n}\n\nfunction telemetryDisabled(): boolean {\n return (\n process.env.DO_NOT_TRACK === \"1\" ||\n process.env.AGENT_NATIVE_TELEMETRY_DISABLED === \"1\" ||\n process.env.NODE_ENV === \"test\" ||\n typeof fetch !== \"function\"\n );\n}\n\nconst MAX_EXCEPTION_MESSAGE_LENGTH = 1000;\nconst MAX_EXCEPTION_STACK_LENGTH = 8000;\nconst MAX_EXCEPTION_TAGS = 30;\nconst MAX_EXCEPTION_EXTRA_KEYS = 30;\nconst MAX_EXCEPTION_VALUE_LENGTH = 1000;\nconst SECRET_RE = /\\b(?:bearer|basic)\\s+[^\\s]+/gi;\nconst SECRET_KEY_RE =\n /(?:authorization|cookie|set[-_]?cookie|token|secret|password|passwd|pwd|api[-_]?key|apikey|credential)/i;\n\nfunction redactExceptionText(value: string): string {\n return value\n .replace(SECRET_RE, (match) => `${match.split(/\\s+/, 1)[0]} <redacted>`)\n .replace(\n /([A-Za-z0-9_$.-]*(?:authorization|cookie|token|secret|password|passwd|pwd|api[-_]?key|apikey|credential)[A-Za-z0-9_$.-]*\\s*[:=]\\s*)([^\\s,;}]+)/gi,\n \"$1<redacted>\",\n );\n}\n\nfunction boundedExceptionText(value: unknown, max: number): string {\n const text =\n typeof value === \"string\" ? value : String(value ?? \"Unknown error\");\n const safe = redactExceptionText(text);\n return safe.length > max ? safe.slice(0, max) : safe;\n}\n\nfunction safeExceptionValue(value: unknown, depth = 2): unknown {\n if (\n value == null ||\n typeof value === \"boolean\" ||\n typeof value === \"number\"\n ) {\n return value;\n }\n if (typeof value === \"string\") {\n return boundedExceptionText(value, MAX_EXCEPTION_VALUE_LENGTH);\n }\n if (depth <= 0)\n return boundedExceptionText(value, MAX_EXCEPTION_VALUE_LENGTH);\n if (Array.isArray(value)) {\n return value\n .slice(0, 20)\n .map((item) => safeExceptionValue(item, depth - 1));\n }\n if (typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n if (Object.keys(out).length >= MAX_EXCEPTION_EXTRA_KEYS) break;\n const safeKey = boundedExceptionText(key, 100);\n out[safeKey] = SECRET_KEY_RE.test(safeKey)\n ? \"<redacted>\"\n : safeExceptionValue(child, depth - 1);\n }\n return out;\n }\n return boundedExceptionText(value, MAX_EXCEPTION_VALUE_LENGTH);\n}\n\nfunction captureException(\n error: unknown,\n context: CliExceptionContext,\n trackEvent: (event: string, properties?: Record<string, unknown>) => void,\n): void {\n const exception =\n error instanceof Error\n ? {\n type: boundedExceptionText(error.name || \"Error\", 200),\n message: boundedExceptionText(\n error.message || error.name || \"Error\",\n MAX_EXCEPTION_MESSAGE_LENGTH,\n ),\n stack: error.stack\n ? boundedExceptionText(error.stack, MAX_EXCEPTION_STACK_LENGTH)\n : undefined,\n }\n : {\n type: \"Error\",\n message: boundedExceptionText(error, MAX_EXCEPTION_MESSAGE_LENGTH),\n stack: undefined,\n };\n const tags: Record<string, string> = {};\n for (const [key, value] of Object.entries(context.tags ?? {})) {\n if (Object.keys(tags).length >= MAX_EXCEPTION_TAGS || value == null) break;\n const safeKey = boundedExceptionText(key, 100);\n tags[safeKey] = SECRET_KEY_RE.test(safeKey)\n ? \"<redacted>\"\n : boundedExceptionText(value, 200);\n }\n const extra = safeExceptionValue(context.extra);\n trackEvent(\"$exception\", {\n app: \"agent-native-cli\",\n template: \"cli\",\n runtime: \"cli\",\n source: \"cli\",\n exceptionType: exception.type,\n exceptionMessage: exception.message,\n ...(exception.stack ? { exceptionStack: exception.stack } : {}),\n handled: context.handled ?? false,\n level: context.level ?? \"error\",\n occurredAt: new Date().toISOString(),\n ...(Object.keys(tags).length ? { exceptionTags: tags } : {}),\n ...(extra && typeof extra === \"object\" ? { exceptionExtra: extra } : {}),\n });\n}\n\n/**\n * Read (or lazily create) a stable per-machine install id, shared across both\n * skills CLIs so one developer counts once. Best-effort: an unwritable home\n * directory just yields an ephemeral id for this run.\n */\nfunction resolveInstallId(): string {\n try {\n const dir = path.join(os.homedir(), \".agent-native\");\n const file = path.join(dir, \"installation-id\");\n const existing = fs.existsSync(file)\n ? fs.readFileSync(file, \"utf8\").trim()\n : \"\";\n if (existing) return existing;\n const id = crypto.randomUUID();\n fs.mkdirSync(dir, { recursive: true });\n fs.writeFileSync(file, `${id}\\n`, \"utf8\");\n return id;\n } catch {\n return crypto.randomUUID();\n }\n}\n\nexport function createCliTelemetry(options: CliTelemetryOptions): CliTelemetry {\n const publicKey = resolvePublicKey();\n const disabled = telemetryDisabled() || !publicKey;\n const endpoint = resolveEndpoint();\n const installId = disabled ? \"\" : resolveInstallId();\n const runId = crypto.randomUUID();\n const inFlight = new Set<Promise<void>>();\n\n const base = {\n cli: options.cli,\n cliVersion: options.cliVersion,\n command: options.command,\n node: process.version,\n platform: process.platform,\n ci: process.env.CI === \"true\",\n interactive: options.interactive,\n runId,\n installId,\n };\n\n function track(event: string, properties?: Record<string, unknown>): void {\n if (disabled) return;\n const body = JSON.stringify({\n publicKey,\n event,\n anonymousId: installId,\n sessionId: runId,\n timestamp: new Date().toISOString(),\n properties: { ...base, ...properties },\n });\n const promise = fetch(endpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n keepalive: true,\n })\n .then(() => undefined)\n .catch(() => undefined);\n inFlight.add(promise);\n void promise.finally(() => inFlight.delete(promise));\n }\n\n async function flush(): Promise<void> {\n if (disabled || inFlight.size === 0) return;\n await Promise.race([\n Promise.allSettled([...inFlight]),\n new Promise((resolve) => setTimeout(resolve, FLUSH_TIMEOUT_MS)),\n ]);\n }\n\n return {\n track,\n captureException: (error, context = {}) =>\n captureException(error, context, track),\n flush,\n };\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/skills",
3
- "version": "0.2.403",
3
+ "version": "0.2.405",
4
4
  "description": "Install BuilderIO skills for coding agents.",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -32,7 +32,7 @@
32
32
  },
33
33
  "dependencies": {
34
34
  "@clack/prompts": "^1.5.1",
35
- "@agent-native/core": "0.120.2"
35
+ "@agent-native/core": "0.120.4"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/node": "^25.9.2",