@skaile/workspaces 0.15.1 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -0
- package/dist/asset-feeds-L4ROBIAZ.js +90 -0
- package/dist/asset-feeds-L4ROBIAZ.js.map +1 -0
- package/dist/asset-manager/index.js +5 -5
- package/dist/asset-manager/installer.js +4 -4
- package/dist/asset-manager/src/index.d.ts.map +1 -1
- package/dist/base-assets/connectors/deploy.js +5 -5
- package/dist/base-assets/connectors/devserver.js +5 -5
- package/dist/base-assets/connectors/flow/adapter.js +5 -5
- package/dist/base-assets/connectors/flow/run-flow.js +6 -6
- package/dist/base-assets/connectors/flow.js +5 -5
- package/dist/base-assets/connectors/git.js +5 -5
- package/dist/base-assets/connectors/gmail.js +5 -5
- package/dist/base-assets/connectors/googledrive.js +5 -5
- package/dist/base-assets/connectors/local.js +5 -5
- package/dist/base-assets/connectors/mattermost.js +5 -5
- package/dist/base-assets/connectors/memory.js +5 -5
- package/dist/base-assets/connectors/minio.js +5 -5
- package/dist/base-assets/connectors/postgres.js +5 -5
- package/dist/base-assets/connectors/redis.js +5 -5
- package/dist/base-assets/connectors/s3.js +5 -5
- package/dist/base-assets/connectors/sharepoint.js +5 -5
- package/dist/base-assets/connectors/sqlite.js +5 -5
- package/dist/base-assets/connectors/static-server.js +5 -5
- package/dist/base-assets/connectors/tunnel.js +5 -5
- package/dist/base-assets/connectors/webdav.js +5 -5
- package/dist/base-assets/connectors/xstate-store.js +5 -5
- package/dist/base-assets/connectors/xstate.js +5 -5
- package/dist/base-assets/connectors/yjs.js +5 -5
- package/dist/{chunk-SVNFQSU3.js → chunk-3DS5VIQP.js} +3 -3
- package/dist/{chunk-SVNFQSU3.js.map → chunk-3DS5VIQP.js.map} +1 -1
- package/dist/{chunk-ERCOCLW5.js → chunk-42YLNYFK.js} +4 -4
- package/dist/{chunk-ERCOCLW5.js.map → chunk-42YLNYFK.js.map} +1 -1
- package/dist/{chunk-4RUVG5GX.js → chunk-4BRSVK7Q.js} +46 -3
- package/dist/chunk-4BRSVK7Q.js.map +1 -0
- package/dist/{chunk-HJV7MHG5.js → chunk-75M5W7FX.js} +8 -8
- package/dist/{chunk-HJV7MHG5.js.map → chunk-75M5W7FX.js.map} +1 -1
- package/dist/{chunk-67TJEQJE.js → chunk-ALJM24WL.js} +5 -5
- package/dist/{chunk-67TJEQJE.js.map → chunk-ALJM24WL.js.map} +1 -1
- package/dist/{chunk-W75ASXH4.js → chunk-KJ2LLWRF.js} +3 -3
- package/dist/{chunk-W75ASXH4.js.map → chunk-KJ2LLWRF.js.map} +1 -1
- package/dist/{chunk-6DEGWPAR.js → chunk-SMFZFFIZ.js} +3 -3
- package/dist/{chunk-6DEGWPAR.js.map → chunk-SMFZFFIZ.js.map} +1 -1
- package/dist/{chunk-GAZINYCS.js → chunk-SOQMVRQL.js} +19 -3
- package/dist/chunk-SOQMVRQL.js.map +1 -0
- package/dist/{chunk-DEZVZSBN.js → chunk-YMMWP3YL.js} +21 -6
- package/dist/chunk-YMMWP3YL.js.map +1 -0
- package/dist/{chunk-HSOEX3TA.js → chunk-YW36VEVN.js} +4 -4
- package/dist/{chunk-HSOEX3TA.js.map → chunk-YW36VEVN.js.map} +1 -1
- package/dist/{chunk-G7O7WDXX.js → chunk-ZUQXHBEH.js} +2 -2
- package/dist/{chunk-G7O7WDXX.js.map → chunk-ZUQXHBEH.js.map} +1 -1
- package/dist/cli/index.js +238 -117
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/asset-feeds.d.ts +42 -0
- package/dist/cli/src/asset-feeds.d.ts.map +1 -0
- package/dist/cli/src/commands/manage.d.ts.map +1 -1
- package/dist/cli/src/commands/project.d.ts.map +1 -1
- package/dist/cli/src/commands/source.d.ts +6 -4
- package/dist/cli/src/commands/source.d.ts.map +1 -1
- package/dist/cli/src/ensure-sources.d.ts +25 -0
- package/dist/cli/src/ensure-sources.d.ts.map +1 -0
- package/dist/connectors/config.js +4 -4
- package/dist/connectors/index.js +5 -5
- package/dist/core/index.js +3 -3
- package/dist/core/runtime-assets.js +2 -2
- package/dist/core/src/index.d.ts +1 -1
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts +27 -0
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/src/workspace-yaml-editor.d.ts +10 -1
- package/dist/core/src/workspace-yaml-editor.d.ts.map +1 -1
- package/dist/core/workspace-config.js +1 -1
- package/dist/ensure-sources-V26CZNJF.js +68 -0
- package/dist/ensure-sources-V26CZNJF.js.map +1 -0
- package/dist/runner/index.js +7 -7
- package/dist/sdk/asset-manager.js +5 -5
- package/dist/sdk/core.js +3 -3
- package/dist/sdk/index.js +7 -7
- package/dist/sdk/runner.js +7 -7
- package/dist/{setup-WZFCLQ2J.js → setup-R6VWIPLL.js} +5 -5
- package/dist/{setup-WZFCLQ2J.js.map → setup-R6VWIPLL.js.map} +1 -1
- package/dist/{store-client-BM3IBDPT.js → store-client-FLD3XUY7.js} +6 -6
- package/dist/{store-client-BM3IBDPT.js.map → store-client-FLD3XUY7.js.map} +1 -1
- package/dist/tui/index.js +7 -7
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-4RUVG5GX.js.map +0 -1
- package/dist/chunk-DEZVZSBN.js.map +0 -1
- package/dist/chunk-GAZINYCS.js.map +0 -1
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../cli/src/commands/asset-cmd.ts","../../cli/src/commands/auth.ts","../../cli/src/commands/catalog.ts","../../cli/src/commands/catalog-cmd.ts","../../cli/src/completion.ts","../../cli/src/skill-walker.ts","../../cli/src/commands/complete-resolvers.ts","../../cli/src/commands/complete.ts","../../cli/src/commands/config.ts","../../cli/src/commands/connect.ts","../../cli/src/commands/connector.ts","../../cli/src/commands/debug.ts","../../cli/src/commands/diff.ts","../../cli/src/commands/flow.ts","../../cli/src/commands/history.ts","../../cli/src/commands/library-cmd.ts","../../cli/src/commands/logs.ts","../../cli/src/commands/manage.ts","../../cli/src/commands/mcp-server.ts","../../cli/src/commands/npx.ts","../../cli/src/commands/outdated.ts","../../cli/src/commands/patch.ts","../../cli/src/commands/plugin/claude-code.ts","../../cli/src/commands/plugin/codex.ts","../../cli/src/commands/plugin/omp.ts","../../cli/src/commands/plugin.ts","../../cli/src/commands/preset-cmd.ts","../../cli/src/commands/project.ts","../../cli/src/commands/rebuild.ts","../../cli/src/commands/run.ts","../../cli/src/commands/serve.ts","../../cli/src/commands/session-logs/format.ts","../../cli/src/commands/session-logs/sqlite-row.ts","../../cli/src/commands/session-logs/local-query.ts","../../cli/src/commands/session-logs/local-tail.ts","../../cli/src/commands/session-logs/parse-time.ts","../../cli/src/commands/session-logs/remote-query.ts","../../cli/src/commands/session-logs/remote-tail.ts","../../cli/src/commands/session-logs/resolve-mode.ts","../../cli/src/commands/session-logs/index.ts","../../cli/src/commands/session.ts","../../cli/src/commands/show.ts","../../cli/src/commands/source-manifest.ts","../../cli/src/commands/source.ts","../../cli/src/commands/store.ts","../../cli/src/commands/tree.ts","../../cli/src/commands/update.ts","../../cli/src/commands/validate.ts","../../cli/src/commands/verify.ts","../../cli/src/commands/why.ts","../../cli/src/index.ts"],"names":["fs","basename","path","spawnSync","Command","am","getStoreConfig","storeFetch","spinner","p","pc","status","program","resolve","createInterface","existsSync","path10","fs4","Option","p2","LocalSecretsProvider","openLibraryManager","skaileHomeDir","sourcesDir","isSourceRow","idx","p3","disabled","next","updated","list","SKAILE_MCP_NAME","parseToml","stringifyToml","install","uninstall","p4","openCatalogSource","openLibrary","confirm","flows","logOk","logErr","logInfo","S","dirname","join","fileURLToPath","portableSpawnSync","normalizeTrpcUrl","createTRPCUntypedClient","homedir","readFileSync","notWired","path26","readline","URL","p6","result","parseYaml","relPath","parsed","execSync","a","c","mkdirSync","writeFileSync","SUPPORTED_DRIVER_TARGETS"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * skaile asset — author and install AI assets.\n *\n * Subcommands:\n * migrate <path> move/copy/link a workspace asset into a library\n * install <ref> install an asset from a library into a workspace\n * list list installed/available assets\n * show <ref> inspect an asset by canonical ref\n *\n * The former `asset publish` stub has moved to `library publish` so the push\n * + register flow is atomic with the underlying git push. Asset creation\n * lives under `library create <kind> <name>`.\n *\n * @docLink cli/commands/asset\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { resolveLibraryDir } from \"@skaile/workspaces/library\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport { openLibraryManager } from \"../open-library.ts\";\n\nexport function makeAssetCommand(): Command {\n const cmd = new Command(\"asset\").description(\"Author and install AI assets\");\n\n // ── asset migrate ────────────────────────────────────────────────────────\n cmd\n .command(\"migrate <path>\")\n .description(\"Move/copy/link a workspace asset into a library\")\n .option(\"--to <library>\", \"Target library (default: auto)\")\n .option(\"--domain <name>\", \"Place inside this domain (domain-structured libs)\")\n .option(\"--mode <mode>\", \"copy | move | link\", \"copy\")\n .option(\"--commit\", \"Auto-commit in git-backed libraries\", false)\n .action(\n async (\n srcPath: string,\n opts: {\n to?: string;\n domain?: string;\n mode: \"copy\" | \"move\" | \"link\";\n commit: boolean;\n },\n ) => {\n if (![\"copy\", \"move\", \"link\"].includes(opts.mode)) {\n logErr(`Invalid --mode \"${opts.mode}\". Expected: copy | move | link.`);\n process.exit(1);\n }\n if (!fs.existsSync(srcPath)) {\n logErr(`Source path does not exist: ${srcPath}`);\n process.exit(1);\n }\n const { manager, close } = await openLibraryManager();\n try {\n // Resolve target library.\n let target: Awaited<ReturnType<typeof manager.requireLibrary>>;\n if (opts.to) {\n target = await manager.requireLibrary(opts.to);\n } else {\n const all = await manager.listLibraries();\n const def = all.find(\n (l) => l.isDefault && (l.ownership === \"owner\" || l.ownership === \"contributor\"),\n );\n if (def) {\n target = def;\n } else {\n // Auto-init personal silently.\n const res = await manager.ensurePersonalLibrary(resolveLibraryDir());\n target = res.library;\n }\n }\n if (target.ownership === \"reader\") {\n logErr(\n `Library \"${target.name}\" is read-only (ownership=reader). Choose another with --to.`,\n );\n process.exit(1);\n }\n // Destination path.\n const basename = path.basename(srcPath);\n const destDir =\n target.structure === \"domain\" && opts.domain\n ? path.join(target.path, opts.domain)\n : target.path;\n fs.mkdirSync(destDir, { recursive: true });\n const destPath = path.join(destDir, basename);\n if (fs.existsSync(destPath)) {\n logErr(`Destination already exists: ${destPath}`);\n process.exit(1);\n }\n\n switch (opts.mode) {\n case \"copy\":\n fs.cpSync(srcPath, destPath, { recursive: true });\n break;\n case \"move\":\n fs.renameSync(srcPath, destPath);\n break;\n case \"link\":\n fs.symlinkSync(path.resolve(srcPath), destPath);\n break;\n }\n\n if (target.backend === \"git\" && opts.commit) {\n const { spawnSync } = await import(\"node:child_process\");\n spawnSync(\"git\", [\"add\", \"-A\"], { cwd: target.path, stdio: \"ignore\" });\n spawnSync(\"git\", [\"commit\", \"-m\", `skaile: migrate ${basename}`], {\n cwd: target.path,\n stdio: \"ignore\",\n });\n }\n\n logOk(`Migrated ${basename} → ${target.name} (${opts.mode})`);\n if (opts.mode === \"move\") {\n logInfo(\"Source moved into the library — future edits modify the library copy.\");\n } else if (opts.mode === \"copy\") {\n logInfo(\"Original kept; workspace edits will NOT reach the library.\");\n } else {\n logInfo(\"Symlinked — workspace edits propagate to the library immediately.\");\n }\n } finally {\n close();\n }\n },\n );\n\n // ── asset install ────────────────────────────────────────────────────────\n cmd\n .command(\"install <ref>\")\n .description(\"Install an asset from a library into a workspace\")\n .option(\"--target <dir>\", \"Workspace target (default: cwd)\")\n .option(\"--mode <mode>\", \"copy | link\", \"copy\")\n .option(\"--from <library>\", \"Library to install from (default: any)\")\n .action(\n async (ref: string, opts: { target?: string; mode: \"copy\" | \"link\"; from?: string }) => {\n if (![\"copy\", \"link\"].includes(opts.mode)) {\n logErr(`Invalid --mode \"${opts.mode}\". Expected: copy | link.`);\n process.exit(1);\n }\n const { manager, library, close } = await openLibraryManager();\n try {\n const def = await library.getAssetDef(ref);\n if (!def) {\n logErr(`No asset found for ref \"${ref}\". Try \\`skaile asset list\\`.`);\n process.exit(1);\n }\n const target = opts.target ?? process.cwd();\n const lib = def.libraryId\n ? (await manager.listLibraries()).find((l) => l.id === def.libraryId)\n : undefined;\n if (!lib) {\n logErr(`Asset has no associated library; install path unknown.`);\n process.exit(1);\n }\n if (opts.from && lib.name !== opts.from) {\n logWarn(`Asset belongs to \"${lib.name}\", but --from=${opts.from} was specified.`);\n }\n // Discover asset's on-disk path via manifest convention.\n // For MVP, we assume the asset's `manifest.path` field if present, else `<library>/<name>`.\n const manifestPath = (def.manifest as Record<string, unknown>).path;\n const candidateSubpath =\n typeof manifestPath === \"string\" && manifestPath.length > 0 ? manifestPath : def.name;\n const srcPath = path.join(lib.path, candidateSubpath);\n if (!fs.existsSync(srcPath)) {\n logErr(`Asset path not found: ${srcPath}`);\n process.exit(1);\n }\n const destPath = path.join(target, candidateSubpath);\n fs.mkdirSync(path.dirname(destPath), { recursive: true });\n if (opts.mode === \"copy\") {\n fs.cpSync(srcPath, destPath, { recursive: true });\n } else {\n fs.symlinkSync(path.resolve(srcPath), destPath);\n }\n logOk(`Installed ${ref} → ${destPath} (${opts.mode})`);\n } finally {\n close();\n }\n },\n );\n\n // ── asset list ───────────────────────────────────────────────────────────\n cmd\n .command(\"list\")\n .description(\"List asset definitions across libraries\")\n .option(\"--library <name>\", \"Filter by library\")\n .option(\"--domain <name>\", \"Filter by domain\")\n .option(\"--kind <kind>\", \"Filter by kind\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { library?: string; domain?: string; kind?: string; json?: boolean }) => {\n const { manager, library, close } = await openLibraryManager();\n try {\n let defs = await library.listAssetDefs(opts.kind ? { kind: opts.kind } : undefined);\n if (opts.library) {\n const lib = await manager.requireLibrary(opts.library);\n defs = defs.filter((d) => d.libraryId === lib.id);\n }\n if (opts.json) return console.log(JSON.stringify(defs, null, 2));\n if (defs.length === 0) {\n logInfo(\"No assets cached. Run `skaile library sync <name>` first.\");\n return;\n }\n for (const d of defs) {\n console.log(` ${S.cmd(d.id.padEnd(40))} ${d.kind.padEnd(10)} ${d.description ?? \"\"}`);\n }\n console.log(`\\n ${S.dim(`${defs.length} asset(s)`)}\\n`);\n } finally {\n close();\n }\n });\n\n // ── asset show ───────────────────────────────────────────────────────────\n cmd\n .command(\"show <ref>\")\n .description(\"Show details for an asset by canonical ref\")\n .action(async (ref: string) => {\n const { library, close } = await openLibraryManager();\n try {\n const def = await library.getAssetDef(ref);\n if (!def) {\n logErr(`Not found: ${ref}`);\n process.exit(1);\n }\n console.log(JSON.stringify(def, null, 2));\n } finally {\n close();\n }\n });\n\n return cmd;\n}\n","/**\n * skaile auth — manage CLI master-key strategy and secret provider status.\n */\n\nimport { type KeyStrategy, LocalSecretsProvider } from \"@skaile/workspaces/secrets\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk } from \"../helpers.ts\";\n\nconst VALID_STRATEGIES: KeyStrategy[] = [\"keychain\", \"passphrase\", \"machine\"];\n\n/**\n * Creates the `skaile auth` command group.\n *\n * Manages the CLI master-key strategy and secret provider health. Subcommands:\n * `status` (show current strategy and provider health), `set-key-strategy`\n * (switch between `keychain`, `passphrase`, and `machine`).\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/auth#make-auth-command\n */\nexport function makeAuthCommand(): Command {\n const cmd = new Command(\"auth\").description(\"Manage secret key strategy and provider status\");\n\n cmd\n .command(\"status\")\n .description(\"Show current key strategy and provider health\")\n .action(async () => {\n const provider = new LocalSecretsProvider();\n const strategy = provider.getKeyStrategy();\n logInfo(`Key strategy: ${strategy}`);\n\n const health = await provider.testConnection();\n if (health.ok) {\n logOk(`Local provider: healthy (${health.latencyMs}ms)`);\n } else {\n logErr(`Local provider: ${health.error ?? \"unhealthy\"}`);\n }\n });\n\n cmd\n .command(\"set-key-strategy\")\n .description(\"Set the master key strategy (keychain, passphrase, or machine)\")\n .argument(\"<strategy>\", `One of: ${VALID_STRATEGIES.join(\", \")}`)\n .option(\n \"--passphrase <value>\",\n \"Passphrase value (required for passphrase strategy; alternative to SKAILE_SECRETS_PASSPHRASE env var)\",\n )\n .action(async (strategy: string, opts: { passphrase?: string }) => {\n if (!VALID_STRATEGIES.includes(strategy as KeyStrategy)) {\n logErr(`Invalid strategy \"${strategy}\". Must be one of: ${VALID_STRATEGIES.join(\", \")}`);\n process.exit(1);\n }\n\n if (strategy === \"passphrase\" && !opts.passphrase && !process.env.SKAILE_SECRETS_PASSPHRASE) {\n logErr(\n \"Passphrase required. Provide via --passphrase or set SKAILE_SECRETS_PASSPHRASE:\\n\" +\n \" export SKAILE_SECRETS_PASSPHRASE='...'\\n\" +\n \" skaile auth set-key-strategy passphrase\",\n );\n process.exit(1);\n }\n\n const provider = new LocalSecretsProvider();\n try {\n await provider.setKeyStrategy(strategy as KeyStrategy, opts.passphrase);\n logOk(`Key strategy set to: ${strategy}`);\n } catch (e) {\n logErr(`Failed to set strategy: ${e instanceof Error ? e.message : String(e)}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n","/**\n * Asset management commands — search, add, remove, list, info, create, doctor.\n * All delegate to @skaile/workspaces/asset-manager's AssetManager class.\n */\n\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { ASSET_KINDS, SUPPORTED_DRIVER_TARGETS } from \"@skaile/workspaces/core\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command, Option } from \"commander\";\nimport pc from \"picocolors\";\nimport { colorRef, kindColor, kindColorPad, logErr, logInfo, logOk, S } from \"../helpers.ts\";\n\n/**\n * Create the `skaile search` command.\n *\n * Searches across all locally indexed repos (via {@link AssetManager}) and\n * optionally the remote store. Results are grouped by asset kind and printed in\n * a compact table. Pass `--store` to limit to the remote store, `--local` to\n * limit to local repos, or omit both to query both sources. Accepts an optional\n * `kind` positional to filter by asset type and a `query` positional for\n * keyword matching.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/catalog#make-search-command\n */\nexport function makeSearchCommand(): Command {\n return new Command(\"search\")\n .description(\"Search across all repos\")\n .argument(\"[kind]\", \"Filter by asset kind\")\n .argument(\"[query]\", \"Search query\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--store\", \"Search only the store\")\n .option(\"--local\", \"Search only local repos\")\n .action(async (kind?: string, query?: string, opts?: any) => {\n if (kind?.includes(\":\")) {\n query = kind;\n kind = undefined;\n }\n\n const showLocal = !opts.store;\n const showStore = !opts.local;\n\n if (showLocal) {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const entries = am.search(query, kind);\n if (entries.length === 0) {\n if (!showStore) {\n logInfo(\n query\n ? `No entries matching \"${query}\".`\n : \"No assets found. Run `skaile source sync` first.\",\n );\n }\n } else {\n if (showStore) {\n console.log(`\\n ${S.heading(\"Local:\")}`);\n }\n const byKind = new Map<string, typeof entries>();\n for (const e of entries) {\n if (!byKind.has(e.kind)) byKind.set(e.kind, []);\n byKind.get(e.kind)!.push(e);\n }\n for (const [k, items] of byKind) {\n const nameW = Math.max(4, ...items.map((e) => e.name.length));\n console.log();\n console.log(\n ` ${kindColor(k)} ${S.heading(`${k.toUpperCase()}S`)} ${S.dim(`(${items.length})`)}`,\n );\n console.log(` ${S.rule(nameW + 62)}`);\n for (const e of items) {\n const ver = e.version ? S.dim(` v${e.version}`) : \"\";\n console.log(` ${S.cmd(e.name.padEnd(nameW))} ${e.description.slice(0, 60)}${ver}`);\n }\n }\n console.log(`\\n ${S.dim(`${entries.length} total`)}\\n`);\n }\n }\n\n if (showStore) {\n try {\n const { getStoreConfig, storeFetch } = await import(\"../store-client.js\");\n const config = getStoreConfig();\n const params: Record<string, string> = {};\n if (query) params.q = query;\n if (kind) params.kind = kind;\n\n const storeRes = await storeFetch<{ results: any[] }>(config, \"/api/assets\", { params });\n\n if (storeRes.results.length > 0) {\n console.log(`\\n ${S.heading(\"Store:\")}`);\n for (const asset of storeRes.results) {\n const ref = `${asset.kind}:@${asset.publisher}/${asset.slug}`;\n console.log(\n ` ⬡ ${kindColorPad(asset.kind)} ${colorRef(ref).padEnd(40)} ${S.dim(asset.description?.slice(0, 50) || \"\")} ${S.dim(`↓${asset.downloads}`)}`,\n );\n }\n } else if (opts.store) {\n logInfo(\"No results in store\");\n }\n } catch (e: any) {\n if (opts.store) {\n logErr(`Store search failed: ${e.message}`);\n }\n // Silently skip store if --store wasn't explicitly requested\n }\n }\n });\n}\n\n/**\n * Create the `skaile add` command.\n *\n * Installs a skill, agent, flow, or bundle from the catalog into the current\n * workspace. Resolves transitive dependencies declared in the asset's manifest\n * and deploys all files to the driver target directory (default: `claude-code`).\n * Accepts `--global` to deploy to `~/.claude` instead of the project directory.\n * The asset reference format is `kind:name[@repo]`.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/catalog#make-add-command\n */\nexport function makeAddCommand(): Command {\n return new Command(\"add\")\n .description(\"Add to skaile.yaml + deploy\")\n .argument(\"<ref>\", \"Asset reference (kind:name[@repo])\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--global\", \"Deploy to global dir (~/.claude)\")\n .option(\"--target <agent>\", \"Driver target\", \"claude-code\")\n .action((ref: string, opts) => {\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n global: opts.global,\n driverTarget: opts.target,\n });\n const spinner = p.spinner();\n spinner.start(`Adding ${ref}`);\n try {\n const added = am.add(ref);\n spinner.stop(\"Done\");\n if (added.length === 0) logInfo(\"Nothing added (already up to date or not found).\");\n else for (const a of added) logOk(a);\n } catch (err) {\n spinner.stop(\"Failed\");\n logErr(String(err));\n process.exit(1);\n }\n });\n}\n\n/**\n * Create the `skaile remove` command.\n *\n * Removes a deployed asset from the workspace by reference (`kind:name`). Cleans\n * up all files tracked in `.skaile/deployed.yaml` for that asset. Accepts\n * `--global` to target the global deployment in `~/.claude` and `--target` to\n * specify the driver target directory.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/catalog#make-remove-command\n */\nexport function makeRemoveCommand(): Command {\n return new Command(\"remove\")\n .description(\"Remove from skaile.yaml + undeploy\")\n .argument(\"<ref>\", \"Asset reference (kind:name)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--global\", \"Remove from global dir\")\n .option(\"--target <agent>\", \"Driver target\", \"claude-code\")\n .action((ref: string, opts) => {\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n global: opts.global,\n driverTarget: opts.target,\n });\n const ok = am.remove(ref);\n if (ok) logOk(`Removed ${ref}`);\n else logErr(`Not deployed: ${ref}`);\n });\n}\n\n/**\n * Create the `skaile list` command.\n *\n * Lists all assets currently deployed in the workspace (or globally with\n * `--global`), optionally filtered by asset kind. Output is a two-column table\n * of kind and name. Delegates to {@link AssetManager.listDeployed}.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/catalog#make-list-command\n */\nexport function makeListCommand(): Command {\n return new Command(\"list\")\n .description(\"List deployed assets\")\n .argument(\"[kind]\", \"Filter by asset kind\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"-g, --global\", \"List global deployment\")\n .addOption(\n new Option(\"--target <agent>\", \"Driver target\")\n .default(\"claude-code\")\n .choices(SUPPORTED_DRIVER_TARGETS),\n )\n .action((kind: string | undefined, opts) => {\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n global: opts.global,\n driverTarget: opts.target,\n });\n const deployed = am.listDeployed(kind);\n if (deployed.length === 0) {\n logInfo(\"Nothing deployed.\");\n return;\n }\n const kindW = Math.max(5, ...deployed.map((e) => e.kind.length));\n const nameW = Math.max(4, ...deployed.map((e) => e.name.length));\n console.log();\n console.log(` ${S.dim(\"KIND\".padEnd(kindW))} ${S.dim(\"NAME\".padEnd(nameW))}`);\n console.log(` ${S.rule(kindW + nameW + 4)}`);\n for (const e of deployed) {\n console.log(` ${kindColorPad(e.kind, kindW)} ${e.name.padEnd(nameW)}`);\n }\n console.log(`\\n ${S.dim(`${deployed.length} deployed`)}\\n`);\n });\n}\n\n/**\n * Create the `skaile info` command.\n *\n * Shows metadata for a catalog entry identified by `kind:name`: description,\n * version, source repository, required platform resources, and transitive skill\n * dependencies. Exits with an error if the entry is not found in any indexed\n * repo — run `skaile source sync` first if needed.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/catalog#make-info-command\n */\nexport function makeInfoCommand(): Command {\n return new Command(\"info\")\n .description(\"Show asset metadata, deps, deploy status\")\n .argument(\"<ref>\", \"Asset reference (kind:name)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((ref: string, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const entry = am.info(ref);\n if (!entry) {\n logErr(\n `'${ref}' not found. Run ${S.cmd(\"skaile source sync\")} then ${S.cmd(\"skaile search\")}.`,\n );\n process.exit(1);\n }\n console.log();\n console.log(` ${S.heading(entry.name)}`);\n console.log(` ${S.rule(40)}`);\n console.log(` kind: ${kindColor(entry.kind)}`);\n if (entry.version) console.log(` version: ${entry.version}`);\n if (entry.description) console.log(` description: ${entry.description}`);\n if (entry.repository) console.log(` repository: ${S.dim(entry.repository)}`);\n console.log(` source: ${S.dim(entry.source)}`);\n if (entry.requires.length) {\n console.log(` requires:`);\n for (const d of entry.requires)\n console.log(` ${S.dim(\"·\")} ${kindColor(d.kind)}:${d.name}`);\n }\n if (entry.dependencies.length) {\n console.log(` dependencies:`);\n for (const s of entry.dependencies) console.log(` ${S.dim(\"·\")} ${colorRef(s)}`);\n }\n console.log();\n });\n}\n\n/**\n * Create the `skaile create` command.\n *\n * Scaffolds a new skill, agent, flow, or bundle in the target directory using\n * the AI skill builder via {@link AssetManager.create}. Accepts `-k`/`--kind`\n * to specify the asset type (default: `skill`) and `-d`/`--dir` to set the\n * destination directory (default: current working directory).\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/catalog#make-create-command\n */\nexport function makeCreateCommand(): Command {\n return new Command(\"create\")\n .description(\"Scaffold a new asset\")\n .argument(\"<name>\", \"Asset name\")\n .addOption(\n new Option(\"-k, --kind <kind>\", \"Asset kind\").default(\"skill\").choices([...ASSET_KINDS]),\n )\n .option(\"-d, --dir <dir>\", \"Target directory (default: cwd)\")\n .action((name: string, opts) => {\n const am = new AssetManager({ projectDir: process.cwd() });\n const destDir = opts.dir ? path.resolve(opts.dir) : process.cwd();\n const result = am.create(name, opts.kind, destDir);\n if (result.ok) logOk(`Created ${kindColor(opts.kind)}: ${pc.dim(result.path)}`);\n else {\n logErr(result.path);\n process.exit(1);\n }\n });\n}\n\n/**\n * Create the `skaile doctor` command.\n *\n * Scans all deployed assets for missing transitive dependency chains. For each\n * gap it reports the affected asset, the missing dependency, and whether the dep\n * is available in a known repo (fixable) or completely absent. Delegates to\n * {@link AssetManager.doctor}.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/catalog#make-doctor-command\n */\nexport function makeDoctorCommand(): Command {\n return new Command(\"doctor\")\n .description(\"Scan for missing dependency chains\")\n .argument(\"[name]\", \"Check a specific asset (kind:name)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((name: string | undefined, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const issues = am.doctor();\n if (issues.length === 0) {\n logOk(\"No missing dependencies.\");\n return;\n }\n const assetW = Math.max(5, ...issues.map((i) => `${i.assetKind}:${i.assetName}`.length));\n const depW = Math.max(11, ...issues.map((i) => `${i.depKind}:${i.depName}`.length));\n console.log();\n console.log(\n ` ${S.dim(\"ASSET\".padEnd(assetW))} ${S.dim(\"MISSING DEP\".padEnd(depW))} ${S.dim(\"IN REPOS\")}`,\n );\n console.log(` ${S.rule(assetW + depW + 15)}`);\n for (const i of issues) {\n const asset = `${i.assetKind}:${i.assetName}`;\n const dep = `${i.depKind}:${i.depName}`;\n const status = i.inRepos ? S.warn(\"fixable\") : S.err(\"not found\");\n console.log(` ${asset.padEnd(assetW)} ${dep.padEnd(depW)} ${status}`);\n }\n console.log();\n });\n}\n","/**\n * `skaile catalog` — Catalog source health and configuration commands.\n *\n * Phase 2 / Task 2.7 surface. Sub-commands:\n *\n * - `skaile catalog test` — probe the configured catalog source and report OK\n * or a clear actionable error. In `catalog.url: local` mode, lists the\n * registered local source instead. In air-gapped mode (`cache_ttl: 0`) the\n * command does NOT touch the network; pass `--force` to probe anyway.\n *\n * Read-only diagnostics — does NOT mutate config or library state.\n *\n * @docLink cli/commands/catalog#make-catalog-command\n */\n\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\n\n/**\n * Creates the `skaile catalog` command group.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/catalog#make-catalog-command\n */\nexport function makeCatalogCommand(): Command {\n const catalog = new Command(\"catalog\").description(\"Catalog source health and configuration\");\n\n catalog\n .command(\"test\")\n .description(\"Probe the configured catalog source and report status\")\n .option(\"--project-dir <path>\", \"Project directory (for project-level config overlay)\")\n .option(\"--url <url>\", \"Override the catalog URL for this probe\")\n .option(\"--force\", \"Probe the network even in air-gapped mode (cache_ttl: 0)\")\n .action(async (opts: { projectDir?: string; url?: string; force?: boolean }) => {\n const { resolveConfig, isLocalCatalogUrl, trpcGetUrl } = await import(\n \"@skaile/workspaces/library\"\n );\n const projectDir = opts.projectDir ? path.resolve(opts.projectDir) : undefined;\n const cfg = resolveConfig({ projectDir });\n const baseUrl = opts.url ?? cfg.catalog.url;\n\n // ── Local mode ─────────────────────────────────────────────────────\n if (isLocalCatalogUrl(baseUrl)) {\n const { resolveCatalogSource } = await import(\"../open-library.ts\");\n let resolved: Awaited<ReturnType<typeof resolveCatalogSource>> | undefined;\n try {\n resolved = await resolveCatalogSource({ projectDir: opts.projectDir });\n const sources = await resolved.source.listSources();\n logOk(\"Catalog mode: local\");\n if (sources.length === 0) {\n logInfo(\"No local sources registered. Run `skaile source add <path>` first.\");\n } else {\n for (const s of sources) {\n console.log(` ${S.dim(\"•\")} ${s.type} ${S.heading(s.url)}`);\n }\n }\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n } finally {\n resolved?.close();\n }\n return;\n }\n\n // ── Air-gapped mode (cache_ttl: 0) — refuse network probe by default ──\n // The user has explicitly told us not to reach out. Honour that intent.\n if (cfg.catalog.cache_ttl === 0 && !opts.force) {\n logOk(`Catalog mode: air-gapped (${S.heading(baseUrl)})`);\n logInfo(\n \"Network probe skipped because cache_ttl is 0. \" +\n \"Use `skaile update` to refresh the cache, or `skaile catalog test --force` to probe anyway.\",\n );\n return;\n }\n\n // ── Remote mode — probe a real catalog tRPC route ──────────────────\n // We hit `catalog.listKinds` rather than `/health` because it exercises\n // the actual surface the CLI depends on. A working backend with the\n // catalog router unmounted (or behind a path prefix that doesn't match\n // `~/.skaile/config.yaml`) is exactly the failure we want to surface.\n const probeUrl = trpcGetUrl(baseUrl, \"catalog.listKinds\", undefined);\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 5_000);\n try {\n const started = Date.now();\n const res = await fetch(probeUrl, {\n signal: controller.signal,\n headers: { accept: \"application/json\" },\n });\n const ms = Date.now() - started;\n if (!res.ok) {\n logErr(`${probeUrl} responded ${res.status} ${res.statusText} (${ms}ms)`);\n if (res.status === 404) {\n logInfo(\n \"Got 404 from catalog.listKinds. Check the URL prefix in ~/.skaile/config.yaml — \" +\n \"Skaile mirrors must expose `/trpc/catalog.*` at the configured baseUrl.\",\n );\n } else {\n logInfo(\n \"Verify the URL in ~/.skaile/config.yaml and any auth requirements on private mirrors.\",\n );\n }\n process.exitCode = 1;\n return;\n }\n // Validate the response actually parses as a tRPC superjson envelope.\n const text = (await res.text()).trim();\n let valid = false;\n try {\n const body = JSON.parse(text);\n // tRPC GET shape: `{result: {data: {json: <payload>}}}`\n valid =\n typeof body === \"object\" &&\n body !== null &&\n \"result\" in body &&\n typeof (body as { result: unknown }).result === \"object\";\n } catch {\n valid = false;\n }\n if (!valid) {\n logWarn(\n `Catalog reachable at ${baseUrl} (${ms}ms) but the response is not a valid tRPC envelope.`,\n );\n logInfo(\n \"The host responded 200 but the body is not Skaile's catalog router shape. \" +\n \"Check that `catalog.listKinds` is mounted at the configured baseUrl.\",\n );\n process.exitCode = 1;\n return;\n }\n logOk(`Catalog reachable at ${S.heading(baseUrl)} (${ms}ms)`);\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") {\n logErr(`Timeout reaching ${probeUrl} after 5s`);\n } else {\n logErr(\n `Could not reach ${probeUrl}: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n logInfo(\n \"Verify the URL in ~/.skaile/config.yaml and that the catalog backend is deployed.\",\n );\n process.exitCode = 1;\n } finally {\n clearTimeout(timeout);\n }\n });\n\n catalog\n .command(\"info\")\n .description(\"Print the resolved catalog configuration (url, framing, cacheTtlMs)\")\n .option(\"--project-dir <path>\", \"Project directory (for project-level config overlay)\")\n .action(async (opts: { projectDir?: string }) => {\n const { resolveConfig } = await import(\"@skaile/workspaces/library\");\n const projectDir = opts.projectDir ? path.resolve(opts.projectDir) : undefined;\n const cfg = resolveConfig({ projectDir });\n console.log(`url: ${cfg.catalog.url}`);\n console.log(`framing: ${cfg.catalog.framing}`);\n console.log(`cacheTtlMs: ${cfg.catalog.cache_ttl * 1000}`);\n });\n\n return catalog;\n}\n","import type { Command } from \"commander\";\n\n/**\n * Recursively walk a commander program tree and collect all static candidates\n * for a given word position.\n *\n * @param program - The root Commander program instance.\n * @param words - The words typed so far (including the binary name as `words[0]`).\n * @returns Array of candidate strings that start with the current partial word.\n * @docLink cli/dev-guide#completion\n */\nexport function getStaticCandidates(program: Command, words: string[]): string[] {\n // words[0] is always the binary name ('skaile'), skip it\n const relevant = words.slice(1);\n\n let current: Command = program;\n for (let i = 0; i < relevant.length - 1; i++) {\n const word = relevant[i]!;\n const sub = current.commands.find((c) => c.name() === word || c.aliases().includes(word));\n if (!sub) break;\n current = sub;\n }\n\n const last = relevant[relevant.length - 1] ?? \"\";\n\n // If last word starts with -, suggest flags; otherwise suggest subcommands + flags\n const candidates: string[] = [\n ...current.commands.map((c) => c.name()),\n ...current.options.flatMap((o) => [o.short, o.long].filter(Boolean) as string[]),\n ];\n\n return candidates.filter((c) => c.startsWith(last));\n}\n\n/**\n * Shell script templates — one per shell.\n * The script calls the CLI's `complete -- $cword $words` form at tab time.\n *\n * @docLink cli/dev-guide#completion\n */\nexport const SHELL_SCRIPTS: Record<string, (bin: string) => string> = {\n zsh: (bin) => `\\\n_${bin}_completion() {\n local words=(\"\\${words[@]}\")\n local cword=$((CURRENT - 1))\n local completions\n completions=$(${bin} complete -- $cword \"\\${words[@]}\" 2>/dev/null)\n local -a items\n items=(\\${(f)completions})\n compadd -a items\n}\ncompdef _${bin}_completion ${bin}`,\n\n bash: (bin) => `\\\n_${bin}_completion() {\n local cword=$COMP_CWORD\n local words=(\"\\${COMP_WORDS[@]}\")\n local completions\n completions=$(${bin} complete -- \"$cword\" \"\\${words[@]}\" 2>/dev/null)\n COMPREPLY=($(compgen -W \"$completions\" -- \"\\${COMP_WORDS[$COMP_CWORD]}\"))\n}\ncomplete -F _${bin}_completion ${bin}`,\n\n fish: (bin) => `\\\nfunction __${bin}_complete\n set -l words (commandline -opc)\n set -l cword (count $words)\n ${bin} complete -- $cword $words 2>/dev/null\nend\ncomplete -c ${bin} -f -a '(__${bin}_complete)'`,\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { AI_RESOURCES } from \"./paths.ts\";\n\n/**\n * A single skill discovered under `AI_RESOURCES`.\n *\n * @docLink cli/dev-guide#skill-walker\n */\nexport interface SkillEntry {\n name: string;\n path: string;\n skillPath: string;\n domain: string;\n}\n\n/**\n * Return all skill entries discovered under `AI_RESOURCES`, optionally\n * filtered to a single domain.\n *\n * @param domain - Optional domain name to restrict the search.\n * @returns Array of {@link SkillEntry} objects found under the domain's `skills/` directory.\n * @docLink cli/dev-guide#skill-walker\n */\nexport function findSkills(domain?: string): SkillEntry[] {\n const skills: SkillEntry[] = [];\n if (!fs.existsSync(AI_RESOURCES)) return skills;\n const domains = fs\n .readdirSync(AI_RESOURCES, { withFileTypes: true })\n .filter((d) => d.isDirectory())\n .filter((d) => !domain || d.name === domain);\n for (const d of domains) {\n const skillsDir = path.join(AI_RESOURCES, d.name, \"skills\");\n if (!fs.existsSync(skillsDir)) continue;\n walkSkills(skillsDir, d.name, skills);\n }\n return skills;\n}\n\n/**\n * Recursively walk a directory tree looking for skill directories (those\n * containing a `SKILL.md` file) and push results into `out`.\n *\n * @param dir - Directory to walk.\n * @param domain - Domain label attached to every discovered entry.\n * @param out - Accumulator array mutated in-place.\n * @docLink cli/dev-guide#skill-walker\n */\nexport function walkSkills(dir: string, domain: string, out: SkillEntry[]): void {\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n const skillMd = path.join(full, \"SKILL.md\");\n if (fs.existsSync(skillMd)) {\n out.push({ name: entry.name, path: full, skillPath: skillMd, domain });\n } else {\n walkSkills(full, domain, out);\n }\n }\n }\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { loadAllFlows } from \"@skaile/workspaces/base-assets/connectors/flow/engine\";\nimport { AI_RESOURCES } from \"../paths.ts\";\nimport { findSkills } from \"../skill-walker.ts\";\n\n/**\n * Return skill names for tab-completion of `skaile skill show <TAB>`.\n *\n * @docLink cli/dev-guide#completion\n */\nexport function resolveSkillNames(): string[] {\n return findSkills().map((s) => s.name);\n}\n\n/**\n * Return skill domain names for tab-completion of `skaile skill list <TAB>`.\n *\n * @docLink cli/dev-guide#completion\n */\nexport function resolveDomains(): string[] {\n if (!fs.existsSync(AI_RESOURCES)) return [];\n return fs\n .readdirSync(AI_RESOURCES, { withFileTypes: true })\n .filter((d) => d.isDirectory())\n .map((d) => d.name);\n}\n\n/**\n * Return flow IDs for tab-completion of `skaile run <TAB>` and `skaile flow show <TAB>`.\n *\n * @docLink cli/dev-guide#completion\n */\nexport function resolveFlowIds(): string[] {\n try {\n return loadAllFlows(AI_RESOURCES).map((f) => f.id);\n } catch {\n return [];\n }\n}\n\n/**\n * Return session run-IDs for tab-completion of `skaile session show/switch/delete <TAB>`.\n *\n * Synchronous filesystem walk — completer callers cannot await. Reads filenames\n * from `<projectDir>/.skaile/sessions/*.json` without parsing each session file.\n *\n * @param projectDir - Project directory to scan for sessions.\n * @docLink cli/dev-guide#completion\n */\nexport function resolveSessionIds(projectDir: string): string[] {\n const sessionsDir = path.join(projectDir, \".skaile\", \"sessions\");\n if (!fs.existsSync(sessionsDir)) return [];\n try {\n return fs\n .readdirSync(sessionsDir)\n .filter((f) => f.endsWith(\".json\"))\n .map((f) => f.slice(0, -\".json\".length));\n } catch {\n return [];\n }\n}\n\n/**\n * Static list of config key names for tab-completion of `skaile config get/set <TAB>`.\n *\n * @docLink cli/dev-guide#completion\n */\nexport const CONFIG_KEYS = [\"provider\", \"model\", \"driver\", \"framework\", \"projectDir\", \"apiKey\"];\n","import { Command } from \"commander\";\nimport { getStaticCandidates, SHELL_SCRIPTS } from \"../completion.ts\";\nimport {\n CONFIG_KEYS,\n resolveDomains,\n resolveFlowIds,\n resolveSessionIds,\n resolveSkillNames,\n} from \"./complete-resolvers.ts\";\n\n/**\n * Creates the `skaile complete` command.\n *\n * Provides shell tab-completion support. With `--shell zsh|bash|fish` outputs\n * a shell script for `eval`. With `-- <cword> <words...>` returns newline-\n * separated completion candidates at tab time.\n *\n * @param program - The root Commander program instance (used for static tree walk).\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#complete\n */\nexport function makeCompleteCommand(program: Command): Command {\n const cmd = new Command(\"complete\")\n .description(\"Generate shell completion\")\n .addHelpText(\"before\", 'Usage: eval \"$(skaile complete --shell zsh)\"\\n')\n .option(\"--shell <shell>\", \"Output completion script for shell (zsh|bash|fish)\")\n .passThroughOptions()\n .argument(\"[args...]\", \"Inline completion args: <cword> <words...>\")\n .action((args: string[], opts) => {\n // Shell script output mode\n if (opts.shell) {\n const gen = SHELL_SCRIPTS[opts.shell];\n if (!gen) {\n process.stderr.write(`Unknown shell: ${opts.shell}\\n`);\n process.exit(1);\n }\n process.stdout.write(`${gen(\"skaile\")}\\n`);\n return;\n }\n\n // Inline completion mode: skaile complete -- <cword> <words...>\n // Commander passes everything after '--' as the variadic args\n if (args.length >= 1) {\n const ci = parseInt(args[0], 10);\n const allWords = args.slice(1);\n\n // Try dynamic resolution based on context\n const dynamic = resolveDynamic(allWords, ci);\n if (dynamic !== null) {\n process.stdout.write(`${dynamic.join(\"\\n\")}\\n`);\n return;\n }\n\n // Fall back to static commander tree walk\n const candidates = getStaticCandidates(program, allWords);\n process.stdout.write(`${candidates.join(\"\\n\")}\\n`);\n return;\n }\n\n // No args — show help\n cmd.help();\n });\n\n return cmd;\n}\n\nfunction resolveDynamic(words: string[], cword: number): string[] | null {\n // words[0] = 'skaile', words[1] = command, etc.\n const cmd = words[1];\n const sub = words[2];\n const isLast = (i: number) => cword === i;\n\n if (cmd === \"run\" && isLast(2)) return resolveFlowIds();\n if (cmd === \"flow\" && sub === \"show\" && isLast(3)) return resolveFlowIds();\n if (cmd === \"skill\" && sub === \"show\" && isLast(3)) return resolveSkillNames();\n if (cmd === \"skill\" && sub === \"list\" && isLast(3)) return resolveDomains();\n if (cmd === \"session\" && [\"show\", \"switch\", \"delete\"].includes(sub!) && isLast(3)) {\n return resolveSessionIds(process.cwd());\n }\n if (cmd === \"config\" && [\"get\", \"set\"].includes(sub!) && isLast(3)) return CONFIG_KEYS;\n\n return null;\n}\n","import path from \"node:path\";\nimport {\n DRIVER_DEFAULTS,\n globalSettingsPath,\n loadSettings,\n projectSettingsPath,\n resolveSettings,\n resolveSkWorkspaceConfig,\n saveSettings,\n} from \"@skaile/workspaces/core\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { logErr, logOk, S } from \"../helpers.ts\";\n\n/** Keys that belong in .skaile/settings.json (personal, gitignored). */\nconst PERSONAL_KEYS = new Set([\"driver\", \"model\", \"provider\"]);\n\n/** API key prefix — `apiKey.<provider>` routes into the apiKeys map. */\nconst API_KEY_PREFIX = \"apiKey.\";\n\n/**\n * Create the `skaile config` command group.\n *\n * Manages personal settings stored in `.skaile/settings.json` (gitignored).\n * Subcommands: `show` (display effective config from both personal and workspace\n * layers, with resolved paths and masked API keys), `get <key>` (print a single\n * effective value), `set <key> <value>` (write a value — only `driver`, `model`,\n * `provider`, and `apiKey.<provider>` are accepted; project-level config belongs\n * in `skaile.yaml`). Pass `--global` to `set` to write to\n * `~/.skaile/settings.json` instead of the project directory.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/config#make-config-command\n */\nexport function makeConfigCommand(): Command {\n const cmd = new Command(\"config\").description(\"Manage personal config (.skaile/settings.json)\");\n\n // ── show ──────────────────────────────────────────────────────────────────\n\n cmd\n .command(\"show\")\n .description(\"Show effective config with sources\")\n .option(\"--project-dir <path>\", \"Project directory\")\n .action(async (opts) => {\n const projectDir = opts.projectDir ? path.resolve(opts.projectDir) : process.cwd();\n const config = await resolveSettings(projectDir);\n\n // Workspace config defaults (for display only — reads agent_config.default)\n const wsDefaults: Record<string, string> = {};\n try {\n const ws = resolveSkWorkspaceConfig(projectDir);\n const p = ws.agent_config?.default ?? {};\n if (p.driver) wsDefaults.driver = p.driver;\n if (p.provider) wsDefaults.provider = p.provider;\n if (p.model) wsDefaults.model = p.model;\n if (p.skills_dir) wsDefaults.skills_dir = p.skills_dir;\n if (p.agents_dir) wsDefaults.agents_dir = p.agents_dir;\n if (p.prompts_dir) wsDefaults.prompts_dir = p.prompts_dir;\n } catch {}\n\n console.log();\n console.log(S.heading(\" Effective Config\"));\n console.log(` ${S.rule(40)}`);\n for (const key of [\"driver\", \"provider\", \"model\"] as const) {\n const value = config[key];\n if (value !== undefined) {\n console.log(` ${S.label(`${key}:`.padEnd(16))} ${value}`);\n }\n }\n\n if (Object.keys(wsDefaults).length > 0) {\n console.log();\n console.log(` ${S.heading(\"Workspace Defaults\")} ${S.dim(\"(skaile.yaml)\")}`);\n console.log(` ${S.rule(40)}`);\n for (const [key, value] of Object.entries(wsDefaults)) {\n console.log(` ${S.label(`${key}:`.padEnd(16))} ${value}`);\n }\n }\n\n if (config.apiKeys && Object.keys(config.apiKeys).length > 0) {\n console.log();\n console.log(` ${S.heading(\"API Keys\")}`);\n console.log(` ${S.rule(40)}`);\n for (const [provider, key] of Object.entries(config.apiKeys)) {\n const fromEnv = !!process.env[`${provider.toUpperCase()}_API_KEY`];\n if (key) {\n console.log(\n ` ${S.label(`${provider}:`.padEnd(16))} ****${key.slice(-4)}` +\n (fromEnv ? ` ${S.dim(\"[env]\")}` : \"\"),\n );\n }\n }\n }\n\n const fw = config.driver ?? \"omp\";\n const paths = DRIVER_DEFAULTS[fw] ?? DRIVER_DEFAULTS.omp;\n if (paths) {\n console.log();\n console.log(` ${S.heading(\"Resolved Paths\")} ${S.dim(`(${fw})`)}`);\n console.log(` ${S.rule(40)}`);\n console.log(` ${S.label(\"skills:\".padEnd(16))} ${config.skillsDir ?? paths.skillsDir}`);\n console.log(` ${S.label(\"agents:\".padEnd(16))} ${config.agentsDir ?? paths.agentsDir}`);\n console.log(` ${S.label(\"prompts:\".padEnd(16))} ${config.promptsDir ?? paths.promptsDir}`);\n }\n console.log();\n });\n\n // ── get ───────────────────────────────────────────────────────────────────\n\n cmd\n .command(\"get <key>\")\n .description(\"Get an effective config value\")\n .option(\"--project-dir <path>\", \"Project directory\")\n .action(async (key: string, opts) => {\n const projectDir = opts.projectDir ? path.resolve(opts.projectDir) : process.cwd();\n const config = await resolveSettings(projectDir);\n const value = (config as any)[key];\n console.log(value ?? S.dim(\"(not set)\"));\n });\n\n // ── set ───────────────────────────────────────────────────────────────────\n\n cmd\n .command(\"set <key> <value>\")\n .description(\"Set a personal config value (driver, model, provider, apiKey.<provider>)\")\n .option(\"--project-dir <path>\", \"Project directory\")\n .option(\"--global\", \"Write to ~/.skaile/settings.json instead of project-local\")\n .action(async (key: string, value: string, opts) => {\n const projectDir = opts.projectDir ? path.resolve(opts.projectDir) : process.cwd();\n\n // Validate key is a personal setting\n const isApiKey = key.startsWith(API_KEY_PREFIX);\n if (!PERSONAL_KEYS.has(key) && !isApiKey) {\n logErr(\n `'${key}' is not a personal setting.\\n` +\n ` Personal keys: ${[...PERSONAL_KEYS].join(\", \")}, ${API_KEY_PREFIX}<provider>\\n` +\n ` Project config (framework, paths, resources) belongs in skaile.yaml`,\n );\n process.exit(1);\n }\n\n const filePath = opts.global ? globalSettingsPath() : projectSettingsPath(projectDir);\n\n const existing = await loadSettings(filePath);\n\n if (isApiKey) {\n const provider = key.slice(API_KEY_PREFIX.length);\n existing.apiKeys = { ...existing.apiKeys, [provider]: value };\n await saveSettings(existing, filePath);\n logOk(`Set ${pc.bold(`apiKeys.${provider}`)} = ****${value.slice(-4)}`);\n } else {\n (existing as any)[key] = value;\n await saveSettings(existing, filePath);\n logOk(`Set ${pc.bold(key)} = ${value}`);\n }\n\n console.log(S.dim(` → ${filePath}`));\n });\n\n cmd.action(() => {\n cmd.commands.find((c) => c.name() === \"show\")!.parse(process.argv);\n });\n\n return cmd;\n}\n","import * as readline from \"node:readline\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, S } from \"../helpers.ts\";\n\nfunction parseShorthand(input: string): Record<string, unknown> | null {\n const trimmed = input.trim();\n\n if (trimmed.startsWith(\"{\")) {\n try {\n return JSON.parse(trimmed);\n } catch {\n return null;\n }\n }\n\n const parts = trimmed.split(/\\s+/);\n const verb = parts[0];\n\n switch (verb) {\n case \"tools\":\n return { type: \"debug\", query: \"tools\" };\n case \"connectors\":\n return { type: \"debug\", query: \"connectors\" };\n case \"mcp\":\n return { type: \"debug\", query: \"mcp\" };\n case \"config\":\n return { type: \"debug\", query: \"config\" };\n case \"state\": {\n const store = parts[1];\n return { type: \"debug\", query: \"state\", ...(store ? { args: { store } } : {}) };\n }\n case \"prompt\": {\n const text = parts.slice(1).join(\" \");\n return { type: \"prompt\", prompt: text };\n }\n case \"configure\": {\n try {\n const json = parts.slice(1).join(\" \");\n return { type: \"configure\", config: JSON.parse(json) };\n } catch {\n return null;\n }\n }\n case \"shutdown\":\n return { type: \"shutdown\" };\n default:\n return null;\n }\n}\n\nfunction formatEvent(event: Record<string, unknown>): string {\n const type = event.type as string;\n switch (type) {\n case \"text\":\n return String(event.content ?? \"\");\n case \"tool_call\":\n return S.dim(`[tool] ${event.tool}: ${JSON.stringify(event.input).slice(0, 80)}`);\n case \"tool_result\":\n return S.dim(`[result] ${event.tool}: ${JSON.stringify(event.output).slice(0, 80)}`);\n case \"error\":\n return S.err(`[error] ${event.message}`);\n case \"debug_result\":\n return `[debug:${event.query}]\\n${JSON.stringify(event.data, null, 2)}`;\n case \"finished\": {\n const cost = typeof event.costUsd === \"number\" ? ` ($${event.costUsd.toFixed(4)})` : \"\";\n return S.dim(`[finished]${cost} ${event.summary ?? \"\"}`);\n }\n default:\n return S.dim(`[${type}] ${JSON.stringify(event).slice(0, 120)}`);\n }\n}\n\n/**\n * Creates the `skaile connect` command.\n *\n * Opens an interactive WebSocket REPL connected to a running agent server.\n * Supports shorthand verbs (`tools`, `connectors`, `prompt <text>`, etc.)\n * or raw JSON messages. Use `--cmd <json>` for non-interactive single-shot mode.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#connect\n */\nexport function makeConnectCommand(): Command {\n return new Command(\"connect\")\n .description(\"Interactive WebSocket REPL for a running agent server\")\n .argument(\"<url>\", \"WebSocket server URL (e.g. ws://localhost:8080)\")\n .option(\"--cmd <json>\", \"Send a single command and exit (non-interactive)\")\n .action(async (url: string, opts: { cmd?: string }) => {\n const { WebSocketClientTransport } = await import(\"@skaile/workspaces/transport/ws/client\");\n\n const client = new WebSocketClientTransport({\n url,\n reconnect: { maxAttempts: 0 },\n });\n\n try {\n await client.connect();\n } catch (err) {\n logErr(`Could not connect to ${url}: ${err instanceof Error ? err.message : String(err)}`);\n process.exitCode = 1;\n return;\n }\n\n // Non-interactive mode\n if (opts.cmd) {\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(opts.cmd);\n } catch {\n logErr(\"--cmd value is not valid JSON\");\n await client.disconnect();\n process.exitCode = 1;\n return;\n }\n\n await new Promise<void>((resolve) => {\n client.onMessage((event) => {\n console.log(formatEvent(event as unknown as Record<string, unknown>));\n if (event.type === \"finished\" || event.type === \"debug_result\") {\n resolve();\n }\n });\n client.send(parsed as any);\n });\n\n await client.disconnect();\n return;\n }\n\n // Interactive REPL\n console.log();\n logInfo(`Connected to ${url}`);\n logInfo(\"Type a command shorthand (tools, connectors, mcp, config, state, prompt <text>)\");\n logInfo('or raw JSON. Type \"exit\" to quit.');\n console.log();\n\n client.onMessage((event) => {\n const line = formatEvent(event as unknown as Record<string, unknown>);\n if (line) process.stdout.write(`${line}\\n`);\n });\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: S.dim(\"> \"),\n terminal: true,\n });\n\n rl.prompt();\n\n rl.on(\"line\", (line) => {\n const trimmed = line.trim();\n if (!trimmed) {\n rl.prompt();\n return;\n }\n if (trimmed === \"exit\" || trimmed === \"quit\") {\n rl.close();\n return;\n }\n\n const cmd = parseShorthand(trimmed);\n if (!cmd) {\n logErr(`Unknown command: ${trimmed}`);\n rl.prompt();\n return;\n }\n\n client.send(cmd as any);\n rl.prompt();\n });\n\n await new Promise<void>((resolve) => {\n rl.on(\"close\", resolve);\n client.onDisconnect(() => {\n logErr(\"Server disconnected\");\n rl.close();\n resolve();\n });\n });\n\n await client.disconnect();\n });\n}\n","/**\n * `skaile connector` — operate on connectors declared in skaile.yaml.\n *\n * Usage:\n * skaile connector catalog [--project-dir]\n * skaile connector add <driver> [--id] [--access] [--no-install] [--project-dir]\n * skaile connector remove <id> [--project-dir]\n * skaile connector status [id] [--project-dir]\n * skaile connector list [--project-dir]\n * skaile connector sync [id] [--all] [--project-dir]\n * skaile connector ops <id> [--project-dir]\n * skaile connector read <id> <path> [--project-dir]\n * skaile connector write <id> <path> <content> [--project-dir]\n * skaile connector entries <id> [path] [--project-dir]\n * skaile connector search <id> <query> [--project-dir]\n * skaile connector delete <id> <path> [--project-dir]\n * skaile connector run <id> <op> [--key value ...] [--project-dir]\n */\n\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport type { ConnectorFieldSpec } from \"@skaile/workspaces/connectors\";\nimport { Command } from \"commander\";\nimport { logErr } from \"../helpers.ts\";\n\n// ── Shared connector setup ───────────────────────────────────────────────────\n\nasync function connectConnectors(projectDir: string) {\n const res = await import(\"@skaile/workspaces/connectors\");\n res.registerBuiltinConnectors();\n\n const declarations = res.loadConnectorDeclarations(projectDir);\n if (declarations.length === 0) {\n logErr(\"No connectors configured. Add connectors to skaile.yaml\");\n process.exit(1);\n }\n\n const manager = new res.ConnectorManager(projectDir, {\n secrets: res.createCliSecretProviderChain(),\n });\n const report = await manager.connectAll(declarations);\n for (const r of report.results) {\n if (!r.connected) {\n console.error(`Warning: Connector \"${r.id}\" failed to connect: ${r.error}`);\n }\n }\n\n return manager;\n}\n\nfunction parseOpArgs(args: string[]): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n let i = 0;\n const positional: string[] = [];\n\n while (i < args.length) {\n const arg = args[i]!;\n if (arg.startsWith(\"--\")) {\n const key = arg.slice(2);\n const next = args[i + 1];\n if (next && !next.startsWith(\"--\")) {\n try {\n result[key] = JSON.parse(next);\n } catch {\n result[key] = next;\n }\n i += 2;\n } else {\n result[key] = true;\n i += 1;\n }\n } else {\n positional.push(arg);\n i += 1;\n }\n }\n\n if (positional.length === 1) {\n result._positional = positional[0];\n if (!result.sql && !result.key && !result.message && !result.query) {\n result.sql = positional[0];\n result.key = positional[0];\n result.message = positional[0];\n result.query = positional[0];\n }\n } else if (positional.length > 0) {\n result._positional = positional;\n }\n\n return result;\n}\n\n// ── Interactive prompt helpers ─────────────────────────────────────────────\n\nasync function promptText(label: string, defaultVal?: string): Promise<string> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n const hint = defaultVal ? ` [${defaultVal}]` : \"\";\n return new Promise((resolve) => {\n rl.question(` ${label}${hint}: `, (answer) => {\n rl.close();\n resolve(answer.trim() || defaultVal || \"\");\n });\n });\n}\n\nasync function promptSecret(label: string): Promise<string> {\n return new Promise((resolve) => {\n process.stdout.write(` ${label} (hidden): `);\n const stdin = process.stdin;\n stdin.setRawMode?.(true);\n stdin.resume();\n stdin.setEncoding(\"utf8\");\n let value = \"\";\n const onData = (char: string) => {\n if (char === \"\\r\" || char === \"\\n\") {\n stdin.setRawMode?.(false);\n stdin.pause();\n stdin.removeListener(\"data\", onData);\n process.stdout.write(\"\\n\");\n resolve(value);\n } else if (char === \"\\u0003\") {\n process.exit(1); // Ctrl+C\n } else if (char === \"\\u007f\") {\n value = value.slice(0, -1);\n } else {\n value += char;\n }\n };\n stdin.on(\"data\", onData);\n });\n}\n\nasync function promptField(field: ConnectorFieldSpec): Promise<string | undefined> {\n if (field.sensitive || field.type === \"password\" || field.type === \"api-key\") {\n return promptSecret(field.label);\n }\n return promptText(field.label, field.default);\n}\n\n// ── Command builder ──────────────────────────────────────────────────────────\n\n/**\n * Creates the `skaile connector` command group.\n *\n * Operates on connectors declared in `skaile.yaml`. Subcommands: `catalog`,\n * `add`, `remove`, `status`, `list`, `sync`, `ops`, `read`, `write`, `entries`,\n * `search`, `delete`, `run`. All subcommands accept `--project-dir`.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/connector#make-connector-command\n */\nexport function makeConnectorCommand(): Command {\n const cmd = new Command(\"connector\").description(\"Operate on connectors in a workspace\");\n\n // skaile connector catalog\n cmd\n .command(\"catalog\")\n .description(\"List all available connector drivers and their dependencies\")\n .action(async () => {\n const { scanDirectory, resolveBaseAssetsRoot } = await import(\"@skaile/workspaces/core\");\n const baseAssetsDir = resolveBaseAssetsRoot();\n const entries = scanDirectory(baseAssetsDir, \"base-assets\").filter(\n (e) => e.kind === \"connector\",\n );\n\n if (entries.length === 0) {\n console.log(\"No connector descriptors found.\");\n return;\n }\n\n console.log(\"\\nAvailable connector drivers:\\n\");\n for (const entry of entries) {\n const npmDeps =\n (entry.metadata?.npm_deps as { required?: string[]; optional?: string[] }) ?? {};\n const allDeps = [\n ...(npmDeps.required ?? []),\n ...(npmDeps.optional ?? []).map((d: string) => `${d} (optional)`),\n ];\n const depsStr = allDeps.length > 0 ? ` deps: ${allDeps.join(\", \")}` : \"\";\n console.log(` ${entry.name.padEnd(18)} ${entry.name}`);\n console.log(` ${\"\".padEnd(18)} ${entry.description}`);\n if (depsStr) console.log(` ${\"\".padEnd(18)} ${depsStr}`);\n console.log();\n }\n console.log(`Run: skaile connector add <driver> to add one to your project.\\n`);\n });\n\n // skaile connector add <driver>\n cmd\n .command(\"add <driver>\")\n .option(\"--id <id>\", \"Connector instance ID (defaults to driver name)\")\n .option(\"--access <level>\", \"Access level: read-only | read-write\", \"read-only\")\n .option(\"--no-install\", \"Skip npm dependency installation\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .description(\"Add a connector to skaile.yaml and install its npm deps\")\n .action(\n async (\n driver: string,\n opts: { id?: string; access: string; install: boolean; projectDir: string },\n ) => {\n const { installNpmPackages } = await import(\"@skaile/workspaces/connectors\");\n const { scanDirectory, resolveBaseAssetsRoot, WorkspaceYamlEditor } = await import(\n \"@skaile/workspaces/core\"\n );\n\n const projectDir = path.resolve(opts.projectDir);\n const yamlPath = path.join(projectDir, \"skaile.yaml\");\n\n if (!existsSync(yamlPath)) {\n logErr(\"No skaile.yaml found in current directory. Run 'skaile init' first.\");\n process.exit(1);\n }\n\n const baseAssetsDir = resolveBaseAssetsRoot();\n const entries = scanDirectory(baseAssetsDir, \"base-assets\").filter(\n (e) => e.kind === \"connector\",\n );\n const entry = entries.find((e) => e.name === driver);\n if (!entry) {\n logErr(\n `Unknown driver: \"${driver}\". ` +\n `Run 'skaile connector catalog' to see available drivers.`,\n );\n process.exit(1);\n }\n\n console.log(`\\nAdding connector: ${entry.name} (${driver})\\n`);\n\n const id = opts.id ?? (await promptText(\"Connector ID\", driver));\n const access = (opts.access as \"read-only\" | \"read-write\") ?? \"read-only\";\n\n // Prompt for required fields only\n const fields = (entry.metadata?.fields ?? []) as ConnectorFieldSpec[];\n const fieldValues: Record<string, unknown> = {};\n const requiredFields = fields.filter((f) => f.required);\n if (requiredFields.length > 0) {\n console.log(\" Configure required fields:\");\n for (const field of requiredFields) {\n const value = await promptField(field);\n if (value) fieldValues[field.key] = value;\n }\n }\n\n // Install npm deps\n const npmDeps =\n (entry.metadata?.npm_deps as { required?: string[]; optional?: string[] }) ?? {};\n const allDeps = [...(npmDeps.required ?? []), ...(npmDeps.optional ?? [])];\n if (opts.install && allDeps.length > 0) {\n console.log(`\\nInstalling npm deps: ${allDeps.join(\", \")}...`);\n const installResult = await installNpmPackages(allDeps, projectDir);\n if (!installResult.success) {\n logErr(`Failed to install dependencies:\\n${installResult.output}`);\n process.exit(1);\n }\n console.log(\" ✓ Dependencies installed\");\n } else if (!opts.install && allDeps.length > 0) {\n console.log(\n ` ⚠ Skipping install. Add manually: bun add --optional ${allDeps.join(\" \")}`,\n );\n }\n\n // Write to skaile.yaml\n const editor = WorkspaceYamlEditor.load(yamlPath);\n editor.setConnector({\n id,\n driver,\n access,\n options: Object.keys(fieldValues).length > 0 ? fieldValues : undefined,\n });\n editor.save();\n\n console.log(`\\n✓ Connector '${id}' (${driver}) added to skaile.yaml\\n`);\n },\n );\n\n // skaile connector remove <id>\n cmd\n .command(\"remove <id>\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .description(\"Remove a connector from skaile.yaml by its instance ID\")\n .action(async (id: string, opts: { projectDir: string }) => {\n const { WorkspaceYamlEditor } = await import(\"@skaile/workspaces/core\");\n\n const projectDir = path.resolve(opts.projectDir);\n const yamlPath = path.join(projectDir, \"skaile.yaml\");\n\n if (!existsSync(yamlPath)) {\n logErr(\"No skaile.yaml found in current directory.\");\n process.exit(1);\n }\n\n const editor = WorkspaceYamlEditor.load(yamlPath);\n const removed = editor.removeConnector(id);\n\n if (!removed) {\n logErr(`No connector with id '${id}' found in skaile.yaml.`);\n process.exit(1);\n }\n\n editor.save();\n console.log(`✓ Connector '${id}' removed from skaile.yaml`);\n });\n\n // skaile connector status [id]\n cmd\n .command(\"status [id]\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .description(\"Connect and report health status for one or all connectors\")\n .action(async (id: string | undefined, opts: { projectDir: string }) => {\n const res = await import(\"@skaile/workspaces/connectors\");\n res.registerBuiltinConnectors();\n\n const projectDir = path.resolve(opts.projectDir);\n const declarations = res.loadConnectorDeclarations(projectDir);\n\n if (declarations.length === 0) {\n console.log(\"No connectors configured in skaile.yaml.\");\n return;\n }\n\n const targets = id ? declarations.filter((d) => d.id === id) : declarations;\n if (targets.length === 0) {\n logErr(`No connector with id '${id}' found.`);\n process.exit(1);\n }\n\n const manager = new res.ConnectorManager(projectDir, {\n secrets: res.createCliSecretProviderChain(),\n });\n const report = await manager.connectAll(targets);\n\n for (const r of report.results) {\n const symbol = r.connected ? \"✓\" : \"✗\";\n const detail = r.error ? ` error: ${r.error}` : \"\";\n const decl = targets.find((d) => d.id === r.id);\n console.log(` ${symbol} ${r.id.padEnd(20)} driver: ${decl?.driver ?? \"?\"}${detail}`);\n }\n\n await manager.disconnectAll();\n });\n\n // skaile connector list\n cmd\n .command(\"list\")\n .description(\"List all configured connectors\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .action(async (opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n console.log(JSON.stringify(manager.listConnectors(), null, 2));\n } finally {\n await manager.disconnectAll();\n }\n });\n\n // skaile connector sync [id] / --all\n cmd\n .command(\"sync [id]\")\n .description(\"Re-sync a filesystem-face connector or all of them (git pull, S3 refresh, etc.)\")\n .option(\"--all\", \"Sync all connectors\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .action(async (id: string | undefined, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n if (opts.all) {\n const results = await manager.syncAll();\n console.log(JSON.stringify(results, null, 2));\n } else if (id) {\n if (!manager.has(id)) {\n logErr(\n `Unknown connector: \"${id}\". Available: ${manager\n .listConnectors()\n .map((r) => r.id)\n .join(\", \")}`,\n );\n process.exit(1);\n }\n const result = await manager.sync(id);\n console.log(JSON.stringify(result, null, 2));\n } else {\n logErr(\"Provide a connector ID or use --all\");\n process.exit(1);\n }\n } finally {\n await manager.disconnectAll();\n }\n });\n\n // skaile connector ops <id>\n cmd\n .command(\"ops <id>\")\n .description(\"List available operations for a connector\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .action(async (id: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n if (!manager.has(id)) {\n logErr(\n `Unknown connector: \"${id}\". Available: ${manager\n .listConnectors()\n .map((r) => r.id)\n .join(\", \")}`,\n );\n process.exit(1);\n }\n console.log(JSON.stringify(manager.getOperations(id), null, 2));\n } finally {\n await manager.disconnectAll();\n }\n });\n\n // skaile connector read <id> <path>\n cmd\n .command(\"read <id> <resource-path>\")\n .description(\"Read content from a connector\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .action(async (id: string, resourcePath: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n const content = await manager.read(id, resourcePath);\n console.log(content?.data?.toString() ?? \"(empty)\");\n } finally {\n await manager.disconnectAll();\n }\n });\n\n // skaile connector write <id> <path> <content>\n cmd\n .command(\"write <id> <resource-path> <content>\")\n .description(\"Write content to a connector at a path\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .action(async (id: string, resourcePath: string, content: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n await manager.write(id, resourcePath, { data: content });\n console.log(\"Written.\");\n } finally {\n await manager.disconnectAll();\n }\n });\n\n // skaile connector entries <id> [path]\n cmd\n .command(\"entries <id> [resource-path]\")\n .description(\"List entries in a connector (files, keys, rows, etc)\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .option(\"--recursive\", \"Include nested entries\")\n .option(\"--limit <n>\", \"Maximum entries to return\", parseInt)\n .action(async (id: string, resourcePath: string | undefined, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n const entries = await manager.list(id, resourcePath, {\n recursive: opts.recursive,\n limit: opts.limit,\n });\n console.log(JSON.stringify(entries, null, 2));\n } finally {\n await manager.disconnectAll();\n }\n });\n\n // skaile connector search <id> <query>\n cmd\n .command(\"search <id> <query>\")\n .description(\"Search within a connector for matching content\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .action(async (id: string, query: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n const results = await manager.search(id, query);\n console.log(JSON.stringify(results, null, 2));\n } finally {\n await manager.disconnectAll();\n }\n });\n\n // skaile connector delete <id> <path>\n cmd\n .command(\"delete <id> <resource-path>\")\n .description(\"Delete an entry from a connector\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .action(async (id: string, resourcePath: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n const ok = await manager.delete(id, resourcePath);\n console.log(ok ? \"Deleted.\" : \"Not found.\");\n } finally {\n await manager.disconnectAll();\n }\n });\n\n // skaile connector run <id> <op> [--key value ...]\n cmd\n .command(\"run <id> <op> [args...]\")\n .description(\"Run a custom adapter operation (e.g. git log, sqlite query)\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .allowUnknownOption()\n .action(async (id: string, op: string, args: string[], opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n if (!manager.has(id)) {\n logErr(\n `Unknown connector: \"${id}\". Available: ${manager\n .listConnectors()\n .map((r) => r.id)\n .join(\", \")}`,\n );\n process.exit(1);\n }\n // Merge trailing unknown options with positional args\n const rawArgs = [...args, ...(opts[\"--\"] ?? [])];\n const opArgs = parseOpArgs(rawArgs);\n const result = await manager.executeOp(id, op, opArgs);\n console.log(result);\n } finally {\n await manager.disconnectAll();\n }\n });\n\n cmd.action(() => cmd.help());\n\n return cmd;\n}\n","import { Command } from \"commander\";\nimport { logErr, logInfo, logOk, S } from \"../helpers.ts\";\n\nasync function runDebugQuery(\n query: \"tools\" | \"connectors\" | \"mcp\" | \"config\" | \"state\",\n parentOpts: { url: string },\n args?: Record<string, unknown>,\n): Promise<void> {\n const { WebSocketClientTransport } = await import(\"@skaile/workspaces/transport/ws/client\");\n\n const client = new WebSocketClientTransport({\n url: parentOpts.url,\n reconnect: { maxAttempts: 0 },\n });\n\n try {\n await client.connect();\n } catch (err) {\n logErr(\n `Could not connect to ${parentOpts.url}: ${err instanceof Error ? err.message : String(err)}`,\n );\n process.exitCode = 1;\n return;\n }\n\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(() => {\n logErr(\"Timeout: no debug_result received within 5s\");\n process.exitCode = 1;\n resolve();\n }, 5_000);\n\n client.onMessage((event) => {\n if (event.type !== \"debug_result\") return;\n clearTimeout(timeout);\n printDebugResult(query, event.data);\n resolve();\n });\n\n client.send({ type: \"debug\", query, args });\n });\n\n await client.disconnect();\n}\n\nfunction printDebugResult(query: string, data: unknown): void {\n console.log();\n console.log(S.heading(` debug: ${query}`));\n console.log();\n if (data === null || data === undefined) {\n logInfo(\"(no data)\");\n return;\n }\n if (typeof data === \"object\" && !Array.isArray(data)) {\n const obj = data as Record<string, unknown>;\n if (\"error\" in obj) {\n logErr(String(obj.error));\n return;\n }\n }\n console.log(JSON.stringify(data, null, 2));\n console.log();\n logOk(\"done\");\n}\n\n/**\n * Creates the `skaile debug` command group.\n *\n * Connects to a running agent server via WebSocket and queries its internal\n * state. Subcommands: `tools`, `connectors`, `mcp`, `config`, `state [store]`.\n * Defaults to `ws://localhost:8080`.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#debug\n */\nexport function makeDebugCommand(): Command {\n const cmd = new Command(\"debug\")\n .description(\"Inspect a running agent container's internal state\")\n .option(\"--url <url>\", \"WebSocket server URL\", \"ws://localhost:8080\");\n\n cmd\n .command(\"tools\")\n .description(\"List all tools the SDK sees (MCP + native)\")\n .action(async (_, parent) => {\n await runDebugQuery(\"tools\", parent.parent.opts());\n });\n\n cmd\n .command(\"connectors\")\n .description(\"List registered connectors and their state\")\n .action(async (_, parent) => {\n await runDebugQuery(\"connectors\", parent.parent.opts());\n });\n\n cmd\n .command(\"mcp\")\n .description(\"List MCP servers and their registered tools\")\n .action(async (_, parent) => {\n await runDebugQuery(\"mcp\", parent.parent.opts());\n });\n\n cmd\n .command(\"config\")\n .description(\"Dump driver config (API keys redacted)\")\n .action(async (_, parent) => {\n await runDebugQuery(\"config\", parent.parent.opts());\n });\n\n cmd\n .command(\"state [store]\")\n .description(\"Read a shared state store snapshot (or list all stores)\")\n .action(async (store, _, parent) => {\n await runDebugQuery(\"state\", parent.parent.opts(), store ? { store } : undefined);\n });\n\n return cmd;\n}\n","import path from \"node:path\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport { logInfo } from \"../helpers.ts\";\n\n/**\n * Creates the `skaile diff` command.\n *\n * Shows the unified diff between the deployed version of an asset and its\n * current source file in the repository clone.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/diff#make-diff-command\n */\nexport function makeDiffCommand(): Command {\n return new Command(\"diff\")\n .description(\"Show changes between deployed and source versions\")\n .argument(\"<ref>\", \"Asset reference (kind:name)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((ref: string, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const result = am.diff(ref);\n if (result === null) {\n logInfo(\"No differences (or asset not found).\");\n return;\n }\n console.log(result);\n });\n}\n","import { loadAllFlows } from \"@skaile/workspaces/base-assets/connectors/flow/engine\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, S } from \"../helpers.ts\";\nimport { AI_RESOURCES } from \"../paths.ts\";\n\n/**\n * Create the `skaile flow` command group.\n *\n * Browses flows discovered from the `ai-assets/` directory tree via\n * {@link loadAllFlows}. Subcommands: `list` (print all available flows with\n * their IDs, names, and descriptions) and `show <id>` (print the flow's\n * metadata and its skill nodes in execution order, marking optional nodes).\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/flow#make-flow-command\n */\nexport function makeFlowCommand(): Command {\n const cmd = new Command(\"flow\").description(\"Manage flows\");\n\n cmd\n .command(\"list\")\n .description(\"List available flows\")\n .action(async () => {\n const flows = loadAllFlows(AI_RESOURCES);\n if (flows.length === 0) {\n logInfo(\"No flows found.\");\n return;\n }\n\n console.log();\n console.log(S.heading(\" Available Flows\"));\n console.log(` ${S.rule(50)}`);\n for (const f of flows) {\n console.log(` ${S.cmd(f.id.padEnd(24))} ${f.name}`);\n if (f.description) console.log(` ${\"\".padEnd(24)} ${S.dim(f.description)}`);\n }\n console.log();\n });\n\n cmd\n .command(\"show <id>\")\n .description(\"Show flow details and node graph\")\n .action(async (id: string) => {\n const flows = loadAllFlows(AI_RESOURCES);\n const flow = flows.find((f) => f.id === id);\n if (!flow) {\n logErr(`Flow not found: ${id}`);\n process.exit(1);\n }\n\n console.log();\n console.log(` ${S.heading(flow.name)} ${S.dim(`(${flow.id} v${flow.version})`)}`);\n if (flow.description) console.log(` ${S.dim(flow.description)}`);\n const skillNodes = flow.nodes.filter((n) => n.type === \"skill\");\n console.log(`\\n ${S.heading(\"Nodes\")} ${S.dim(`(${skillNodes.length} skills)`)}`);\n console.log(` ${S.rule(50)}`);\n for (const node of skillNodes) {\n const opt = node.data?.optional ? S.dim(\" [optional]\") : \"\";\n const label = (node.data?.label ?? node.id).padEnd(24);\n console.log(` ${label} ${S.label(\"skill:\")} ${S.cmd(node.data?.skill ?? node.id)}${opt}`);\n }\n console.log();\n });\n\n cmd.action(() => cmd.help());\n\n return cmd;\n}\n","import path from \"node:path\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport { colorRef, logInfo, logOk, S } from \"../helpers.ts\";\n\n/**\n * Creates the `skaile history` command group.\n *\n * Shows recent add/remove/update actions recorded in `.skaile/history.yaml`.\n * Also exposes a `history clear` subcommand to wipe the history file.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#history\n */\nexport function makeHistoryCommand(): Command {\n const cmd = new Command(\"history\").description(\"Show recent add/remove/update actions\");\n\n cmd\n .argument(\"[limit]\", \"Number of entries to show\", \"20\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((limitStr: string, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const limit = parseInt(limitStr, 10) || 20;\n const entries = am.history(limit);\n if (entries.length === 0) {\n logInfo(\"No history yet.\");\n return;\n }\n const refW = Math.max(3, ...entries.map((e) => e.ref.length));\n console.log();\n console.log(S.heading(\" History\"));\n console.log(` ${S.rule(refW + 30)}`);\n for (const e of entries) {\n const when = new Date(e.timestamp).toLocaleDateString();\n console.log(\n ` ${colorRef(e.ref).padEnd(refW + 10)} ${e.action.padEnd(7)} ${e.context.padEnd(7)} ${S.dim(when)}`,\n );\n }\n console.log();\n });\n\n cmd\n .command(\"clear\")\n .description(\"Clear action history\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n am.clearHistory();\n logOk(\"History cleared.\");\n });\n\n return cmd;\n}\n","/**\n * skaile library — manage user-facing libraries (authoring places for AI\n * assets, backed by `local` or `git`).\n *\n * Lifecycle subcommands: list, status, show, init, link, create, default,\n * rename, set, remove. Git verbs (commit, pull, push, propose, git, sync)\n * apply to git-backed libraries. Publish/register/yank are scaffolded stubs\n * that will land when the store publish endpoint is finalised.\n *\n * @docLink cli/commands/library\n */\n\nimport { existsSync } from \"node:fs\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { resolveLibraryDir } from \"@skaile/workspaces/library\";\nimport { Command, Option } from \"commander\";\nimport pc from \"picocolors\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { ASSET_KINDS } from \"@skaile/workspaces/core\";\nimport { formatRelativeTime, logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport { openLibrary, openLibraryManager } from \"../open-library.ts\";\nimport { createFullRegistry } from \"../open-registry.ts\";\n\nconst NOT_WIRED_MSG_PUBLISH =\n \"`skaile library publish` is scaffolded but not yet wired. \" +\n \"Server endpoint `POST /sources/<id>/manifest` lands in a follow-up PR.\";\n\nfunction notWired(verb: string, msg: string): never {\n logErr(`${msg} (verb: library ${verb})`);\n process.exit(2);\n}\n\nexport function makeLibraryCommand(): Command {\n const cmd = new Command(\"library\").description(\"Manage user authoring libraries (local / git)\");\n\n // ── library list ─────────────────────────────────────────────────────────\n cmd\n .command(\"list\")\n .description(\"List all registered libraries\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const { manager, close } = await openLibraryManager();\n try {\n const ls = await manager.listLibraries();\n if (opts.json) return console.log(JSON.stringify(ls, null, 2));\n if (ls.length === 0) {\n logInfo(\"No libraries registered. Run `skaile library init personal` to start.\");\n return;\n }\n console.log();\n console.log(S.heading(\" Libraries\"));\n console.log(` ${S.rule(80)}`);\n for (const l of ls) {\n const def = l.isDefault ? pc.green(\"▸ \") : \" \";\n console.log(\n `${def}${S.cmd(l.name.padEnd(16))} ${pc.dim(l.backend.padEnd(7))} ${pc.dim(l.ownership.padEnd(12))} ${pc.dim(l.path)}`,\n );\n }\n console.log(`\\n ${S.dim(`${ls.length} library(s)`)}\\n`);\n } finally {\n close();\n }\n });\n\n // ── library status ───────────────────────────────────────────────────────\n // Folds in the former top-level `lib-status`. With no <name>, prints a\n // health summary of the local Library; with a <name>, prints sync status\n // for that single library only.\n cmd\n .command(\"status [name]\")\n .description(\"Show overall Library health or per-library sync status\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--json\", \"Output as JSON\")\n .action(async (name: string | undefined, opts: { projectDir: string; json?: boolean }) => {\n if (name) {\n await printPerLibraryStatus(name, opts.json ?? false);\n return;\n }\n await printOverallStatus(opts.projectDir, opts.json ?? false);\n });\n\n // ── library show ─────────────────────────────────────────────────────────\n cmd\n .command(\"show <name>\")\n .description(\"Detailed info about a library\")\n .action(async (name: string) => {\n const { manager, close } = await openLibraryManager();\n try {\n const l = await manager.requireLibrary(name);\n console.log();\n console.log(S.heading(` ${l.name}`));\n console.log(` ${S.rule(50)}`);\n console.log(` ${S.label(\"id\")} ${l.id}`);\n console.log(` ${S.label(\"backend\")} ${l.backend}`);\n console.log(` ${S.label(\"ownership\")} ${l.ownership}`);\n console.log(` ${S.label(\"path\")} ${l.path}`);\n console.log(` ${S.label(\"structure\")} ${l.structure ?? \"(undetected)\"}`);\n console.log(` ${S.label(\"isDefault\")} ${l.isDefault}`);\n console.log(` ${S.label(\"manifestGen\")} ${l.manifestGenerated}`);\n console.log(` ${S.label(\"backendConfig\")} ${JSON.stringify(l.backendConfig)}`);\n console.log();\n } finally {\n close();\n }\n });\n\n // ── library init ─────────────────────────────────────────────────────────\n // Default backend is `local`. --git creates with a remote attached.\n cmd\n .command(\"init <name>\")\n .description(\"Create a new local library at ~/.skaile/libraries/<name>\")\n .option(\"--git <url>\", \"Initialize as a git library tracking <url>\")\n .option(\"--owner\", \"Mark as owner (default for local)\")\n .option(\"--contributor\", \"Mark as contributor\")\n .option(\"--reader\", \"Mark as reader\")\n .action(\n async (\n name: string,\n opts: {\n git?: string;\n owner?: boolean;\n contributor?: boolean;\n reader?: boolean;\n },\n ) => {\n const libDir = resolveLibraryDir();\n const libPath = path.join(libDir, name);\n const ownership = opts.contributor ? \"contributor\" : opts.reader ? \"reader\" : \"owner\";\n const { manager, close } = await openLibraryManager();\n try {\n if (opts.git) {\n fs.mkdirSync(libPath, { recursive: true });\n await manager.addLibrary({\n name,\n path: libPath,\n backend: \"git\",\n backendConfig: { url: opts.git, branch: \"main\", authHint: \"ssh\" },\n ownership,\n });\n } else {\n fs.mkdirSync(libPath, { recursive: true });\n await manager.addLibrary({\n name,\n path: libPath,\n backend: \"local\",\n ownership: \"owner\",\n structure: \"domain\",\n });\n }\n logOk(`Library \"${name}\" created at ${libPath}`);\n } finally {\n close();\n }\n },\n );\n\n // ── library link ─────────────────────────────────────────────────────────\n // Attach a github remote to a local library, making it store-publishable.\n cmd\n .command(\"link <name> <git-url>\")\n .description(\"Attach a github remote to a local library (makes it store-publishable)\")\n .option(\"--branch <name>\", \"Default branch\", \"main\")\n .action(async (name: string, url: string, opts: { branch: string }) => {\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n if (lib.backend === \"git\") {\n logErr(\n `Library \"${name}\" is already git-backed. ` +\n `Use \\`skaile library set ${name} backendConfig.url=${url}\\` to change its remote.`,\n );\n process.exit(1);\n }\n await manager.updateLibrary(name, {\n backend: \"git\",\n backendConfig: { url, branch: opts.branch, authHint: \"ssh\" },\n });\n logOk(`Library \"${name}\" linked to ${url}.`);\n } finally {\n close();\n }\n });\n\n // ── library create ───────────────────────────────────────────────────────\n // Scaffold a new asset inside a library. Mirrors the top-level `skaile\n // create` but rooted at the library checkout dir by default.\n cmd\n .command(\"create <kind> <name>\")\n .description(\"Scaffold a new asset inside the default (or named) library\")\n .addOption(\n new Option(\"--kind <kind>\", \"Asset kind override\").choices([...ASSET_KINDS]),\n )\n .option(\"--library <name>\", \"Target library (default: the default-marked one)\")\n .option(\"--dir <dir>\", \"Target directory inside the library (default: library root)\")\n .action(\n async (\n kind: string,\n name: string,\n opts: { kind?: string; library?: string; dir?: string },\n ) => {\n if (!(ASSET_KINDS as readonly string[]).includes(kind)) {\n logErr(`Unknown asset kind \"${kind}\". Expected: ${ASSET_KINDS.join(\", \")}.`);\n process.exit(1);\n }\n const { manager, close } = await openLibraryManager();\n try {\n let target: Awaited<ReturnType<typeof manager.requireLibrary>>;\n if (opts.library) {\n target = await manager.requireLibrary(opts.library);\n } else {\n const all = await manager.listLibraries();\n const def = all.find((l) => l.isDefault);\n if (!def) {\n logErr(\n \"No default library set. Either run `skaile library default <name>` first or pass --library.\",\n );\n process.exit(1);\n }\n target = def;\n }\n const am = new AssetManager({ projectDir: process.cwd() });\n const destDir = opts.dir ? path.join(target.path, opts.dir) : target.path;\n const res = am.create(name, opts.kind ?? kind, destDir);\n if (res.ok) {\n logOk(`Created ${opts.kind ?? kind}: ${pc.dim(res.path)}`);\n } else {\n logErr(res.path);\n process.exit(1);\n }\n } finally {\n close();\n }\n },\n );\n\n // ── library default ──────────────────────────────────────────────────────\n cmd\n .command(\"default <name>\")\n .description(\"Set <name> as the default library\")\n .action(async (name: string) => {\n const { manager, close } = await openLibraryManager();\n try {\n const updated = await manager.setDefault(name);\n logOk(`Default → ${updated.name}`);\n } finally {\n close();\n }\n });\n\n // ── library rename ───────────────────────────────────────────────────────\n cmd\n .command(\"rename <old> <new>\")\n .description(\"Rename a library (also moves the directory)\")\n .action(async (oldName: string, newName: string) => {\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(oldName);\n const parent = path.dirname(lib.path);\n const newPath = path.join(parent, newName);\n if (fs.existsSync(newPath)) {\n logErr(`Target directory already exists: ${newPath}`);\n process.exit(1);\n }\n fs.renameSync(lib.path, newPath);\n await manager.updateLibrary(lib.id, { name: newName, path: newPath });\n logOk(`Renamed ${oldName} → ${newName}`);\n } finally {\n close();\n }\n });\n\n // ── library set ──────────────────────────────────────────────────────────\n cmd\n .command(\"set <name> <field=value>\")\n .description(\"Update a single library field (e.g. ownership=contributor)\")\n .action(async (name: string, expr: string) => {\n const [field, ...rest] = expr.split(\"=\");\n const value = rest.join(\"=\");\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const patch: Record<string, unknown> = {};\n if (field === \"ownership\") patch.ownership = value;\n else if (field === \"structure\") patch.structure = value;\n else if (field === \"isDefault\") patch.isDefault = value === \"true\";\n else if (field.startsWith(\"backendConfig.\")) {\n const key = field.split(\".\")[1];\n patch.backendConfig = { ...lib.backendConfig, [key]: value };\n } else {\n logErr(`Unsupported field: ${field}`);\n process.exit(1);\n }\n await manager.updateLibrary(name, patch);\n logOk(`Updated ${name}.${field}`);\n } finally {\n close();\n }\n });\n\n // ── library remove ───────────────────────────────────────────────────────\n cmd\n .command(\"remove <name>\")\n .description(\"Unregister a library (use --purge to also delete files)\")\n .option(\"--purge\", \"Also delete the library directory from disk\", false)\n .option(\"-y, --yes\", \"Skip confirmation\", false)\n .action(async (name: string, opts: { purge: boolean; yes: boolean }) => {\n const { manager, close } = await openLibraryManager();\n try {\n if (!opts.yes) {\n const confirmed = await p.confirm({\n message: `Remove library \"${name}\"${opts.purge ? \" AND delete its directory\" : \"\"}?`,\n initialValue: false,\n });\n if (!confirmed || p.isCancel(confirmed)) {\n logInfo(\"Cancelled.\");\n return;\n }\n }\n await manager.removeLibrary(name, { purge: opts.purge });\n logOk(`Removed ${name}.`);\n } finally {\n close();\n }\n });\n\n // ── library sync ─────────────────────────────────────────────────────────\n cmd\n .command(\"sync <name>\")\n .description(\"Pull then push (as backend permits)\")\n .action(async (name: string) => {\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const drv = manager.driverFor(lib.backend);\n const pull = await drv.pull(lib);\n logInfo(`Pulled: applied=${pull.applied}, conflicts=${pull.conflicts.length}`);\n if (lib.ownership === \"owner\" && lib.backend !== \"local\") {\n const push = await drv.push(lib);\n logInfo(`Pushed: ${push.pushed}`);\n }\n await manager.updateLibrary(name, { lastSyncAt: new Date() });\n logOk(`Synced ${name}.`);\n } finally {\n close();\n }\n });\n\n // ── library pull ─────────────────────────────────────────────────────────\n cmd\n .command(\"pull <name>\")\n .description(\"Pull from remote\")\n .action(async (name: string) => {\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const res = await manager.driverFor(lib.backend).pull(lib);\n if (res.conflicts.length > 0) {\n logWarn(`Conflicts: ${res.conflicts.map((c) => c.path).join(\", \")}`);\n } else {\n logOk(`Pulled ${res.applied} change(s).`);\n }\n } finally {\n close();\n }\n });\n\n // ── library push ─────────────────────────────────────────────────────────\n cmd\n .command(\"push <name>\")\n .description(\"Push local commits (owner only)\")\n .option(\"--force\", \"Force-with-lease push\", false)\n .action(async (name: string, opts: { force: boolean }) => {\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const res = await manager.driverFor(lib.backend).push(lib, { force: opts.force });\n logOk(`Pushed (${res.pushed}).`);\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exit(1);\n } finally {\n close();\n }\n });\n\n // ── library propose ──────────────────────────────────────────────────────\n cmd\n .command(\"propose <name>\")\n .description(\"Open a pull request on the upstream repo (contributor only)\")\n .option(\"--title <title>\", \"PR title\")\n .option(\"--body <body>\", \"PR body\")\n .option(\"--branch <name>\", \"Branch name (default: skaile/<timestamp>)\")\n .action(async (name: string, opts: { title?: string; body?: string; branch?: string }) => {\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const res = await manager.driverFor(lib.backend).propose(lib, opts);\n logOk(`PR opened: ${res.prUrl}`);\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exit(1);\n } finally {\n close();\n }\n });\n\n // ── library commit ───────────────────────────────────────────────────────\n cmd\n .command(\"commit <name>\")\n .description(\"Git-commit local changes inside the library (git only)\")\n .option(\"-m, --message <msg>\", \"Commit message\", \"skaile: update assets\")\n .action(async (name: string, opts: { message: string }) => {\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n if (lib.backend !== \"git\") {\n logErr(\"`library commit` only applies to git-backed libraries.\");\n process.exit(1);\n }\n const { spawnSync } = await import(\"node:child_process\");\n spawnSync(\"git\", [\"add\", \"-A\"], { cwd: lib.path, stdio: \"inherit\" });\n const r = spawnSync(\"git\", [\"commit\", \"-m\", opts.message], {\n cwd: lib.path,\n stdio: \"inherit\",\n });\n if (r.status !== 0) {\n logWarn(\"Nothing committed (working tree clean or commit aborted).\");\n } else {\n logOk(`Committed in ${name}.`);\n }\n } finally {\n close();\n }\n });\n\n // ── library git ──────────────────────────────────────────────────────────\n cmd\n .command(\"git <name>\")\n .description(\"Pass-through: run arbitrary git commands inside the library\")\n .allowUnknownOption()\n .action(async (name: string, _: unknown, command: Command) => {\n const args = command.args.slice(1);\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const { spawnSync } = await import(\"node:child_process\");\n const r = spawnSync(\"git\", args, { cwd: lib.path, stdio: \"inherit\" });\n process.exit(r.status ?? 0);\n } finally {\n close();\n }\n });\n\n // ── library publish / register / yank (stubs) ───────────────────────────\n cmd\n .command(\"publish <ref>\")\n .description(\"Push + register manifest atomically (needs git backend)\")\n .action((_ref: string) => notWired(\"publish\", NOT_WIRED_MSG_PUBLISH));\n\n cmd\n .command(\"register <ref>\")\n .description(\"Register manifest in store without pushing (bytes already on github)\")\n .action((_ref: string) => notWired(\"register\", NOT_WIRED_MSG_PUBLISH));\n\n cmd\n .command(\"yank <ref>\")\n .description(\"Retract a catalog entry\")\n .option(\"--version <v>\", \"Version to yank\")\n .action((_ref: string) => notWired(\"yank\", NOT_WIRED_MSG_PUBLISH));\n\n return cmd;\n}\n\n// ---------------------------------------------------------------------------\n// Status helpers (formerly `lib-status`)\n// ---------------------------------------------------------------------------\n\nasync function printPerLibraryStatus(name: string, asJson: boolean): Promise<void> {\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const status = await manager.driverFor(lib.backend).status(lib);\n if (asJson) return console.log(JSON.stringify({ library: lib.name, status }, null, 2));\n console.log(`\\n ${S.heading(lib.name)}`);\n console.log(` reachable: ${status.reachable ? S.ok(\"yes\") : S.err(\"no\")}`);\n if (status.remoteChanges) {\n console.log(\n ` behind/ahead: ${status.remoteChanges.behind}/${status.remoteChanges.ahead}`,\n );\n }\n const lc = status.localChanges;\n if (lc.added.length + lc.modified.length + lc.deleted.length > 0) {\n console.log(\n ` local changes: +${lc.added.length} ~${lc.modified.length} -${lc.deleted.length}`,\n );\n }\n for (const note of status.notes) console.log(` ${pc.dim(\"note:\")} ${note}`);\n console.log();\n } finally {\n close();\n }\n}\n\nasync function printOverallStatus(projectDir: string, asJson: boolean): Promise<void> {\n const library = await openLibrary();\n try {\n const libs = await library.listSources();\n const defs = await library.listAssetDefs();\n const instances = await library.listInstances();\n\n let secretsStrategy = \"unknown\";\n try {\n const { LocalSecretsProvider } = await import(\"@skaile/workspaces/secrets\");\n const provider = new LocalSecretsProvider();\n secretsStrategy = provider.getKeyStrategy();\n } catch {\n secretsStrategy = \"unavailable\";\n }\n\n const resolvedProjectDir = path.resolve(projectDir);\n const hasWorkspaceConfig = existsSync(path.join(resolvedProjectDir, \"skaile.yaml\"));\n const hasLockFile = existsSync(path.join(resolvedProjectDir, \"skaile.lock.yaml\"));\n\n let subscriptions: { id: string; workspaceId: string; instanceId: string }[] = [];\n if (hasWorkspaceConfig) {\n try {\n subscriptions = await library.listSubscriptions(resolvedProjectDir);\n } catch {\n // empty workspace\n }\n }\n\n const registry = createFullRegistry();\n const registeredKinds = registry.getAllKinds();\n\n if (asJson) {\n console.log(\n JSON.stringify(\n {\n libraries: libs.length,\n assetDefinitions: defs.length,\n instances: instances.length,\n subscriptions: subscriptions.length,\n secretsStrategy,\n registeredKinds,\n workspace: {\n dir: resolvedProjectDir,\n hasConfig: hasWorkspaceConfig,\n hasLock: hasLockFile,\n },\n },\n null,\n 2,\n ),\n );\n return;\n }\n\n console.log();\n console.log(S.heading(\" Library Status\"));\n console.log(` ${S.rule(50)}`);\n console.log(\n ` ${S.label(\"Libraries\")} ${libs.length === 0 ? S.dim(\"none\") : pc.green(String(libs.length))}`,\n );\n for (const l of libs.slice(0, 3)) {\n const synced = l.lastSyncAt\n ? `synced ${formatRelativeTime(l.lastSyncAt)}`\n : \"never synced\";\n const defaultMark = l.isDefault ? pc.green(\" *\") : \"\";\n console.log(\n ` ${S.dim(l.id.slice(0, 8))} ${l.name} ${S.dim(`(${l.backend})`)} ${S.dim(l.ownership)} ${S.dim(synced)}${defaultMark}`,\n );\n }\n if (libs.length > 3) {\n console.log(` ${S.dim(`...and ${libs.length - 3} more`)}`);\n }\n\n const byKind = new Map<string, number>();\n for (const d of defs) byKind.set(d.kind, (byKind.get(d.kind) ?? 0) + 1);\n console.log(\n ` ${S.label(\"Cached assets\")} ${defs.length === 0 ? S.dim(\"none\") : pc.green(String(defs.length))}`,\n );\n if (byKind.size > 0) {\n const parts = [...byKind.entries()]\n .sort((a, b) => b[1] - a[1])\n .map(([k, v]) => `${v} ${k}${v > 1 ? \"s\" : \"\"}`);\n console.log(` ${S.dim(parts.join(\", \"))}`);\n }\n\n console.log(\n ` ${S.label(\"Registered kinds\")} ${pc.green(String(registeredKinds.length))}`,\n );\n console.log(` ${S.dim(registeredKinds.join(\", \"))}`);\n\n console.log(\n ` ${S.label(\"Instances\")} ${instances.length === 0 ? S.dim(\"none\") : pc.green(String(instances.length))}`,\n );\n console.log(\n ` ${S.label(\"Subscriptions\")} ${subscriptions.length === 0 ? S.dim(\"none (this workspace)\") : pc.green(String(subscriptions.length))}`,\n );\n\n const strategyColor = secretsStrategy === \"unavailable\" ? S.dim : pc.green;\n console.log(` ${S.label(\"Secrets strategy\")} ${strategyColor(secretsStrategy)}`);\n\n console.log(` ${S.rule(50)}`);\n console.log(` ${S.label(\"Workspace\")} ${resolvedProjectDir}`);\n console.log(\n ` ${S.label(\"skaile.yaml\")} ${hasWorkspaceConfig ? pc.green(\"present\") : S.dim(\"not found\")}`,\n );\n console.log(\n ` ${S.label(\"skaile.lock.yaml\")} ${hasLockFile ? pc.green(\"present\") : S.dim(\"not found\")}`,\n );\n console.log();\n\n if (libs.length === 0) {\n logInfo(\"Get started: `skaile library init personal` or `skaile source add <git-url>`\");\n } else if (defs.length === 0) {\n logInfo(\"Run `skaile library sync <name>` to discover assets.\");\n } else if (instances.length === 0) {\n logInfo(\"Run `skaile asset install <ref>` to install an asset into a workspace.\");\n }\n } finally {\n library.close();\n }\n}\n","import { portableSpawn, portableSpawnSync } from \"@skaile/workspaces/core\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { logErr, logInfo, S } from \"../helpers.ts\";\n\ninterface Container {\n name: string;\n project: string;\n status: string;\n createdAt: string;\n}\n\nfunction parseContainers(raw: string): Container[] {\n return raw\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line) => {\n const [name = \"\", project = \"\", status = \"\", ...rest] = line.split(\"\\t\");\n return { name, project, status, createdAt: rest.join(\"\\t\") };\n });\n}\n\nfunction colorLine(line: string): string {\n if (/error|Error|ERROR|failed|Failed/.test(line)) return pc.red(line);\n if (/connector|MCP|tool/.test(line)) return pc.yellow(line);\n if (/rebuilt|registered|ready/.test(line)) return pc.green(line);\n if (/\\[driver\\]/.test(line)) return pc.cyan(line);\n if (/\\[serve\\]/.test(line)) return pc.dim(line);\n return line;\n}\n\nfunction dockerAvailable(): boolean {\n return portableSpawnSync([\"docker\", \"info\"]).exitCode === 0;\n}\n\nfunction listContainers(): Container[] {\n const result = portableSpawnSync([\n \"docker\",\n \"ps\",\n \"--filter\",\n \"label=skaile.managed=true\",\n \"--format\",\n '{{.Names}}\\t{{.Label \"skaile.project-slug\"}}\\t{{.Status}}\\t{{.CreatedAt}}',\n ]);\n return parseContainers(result.stdout);\n}\n\n/**\n * Creates the `skaile logs` command.\n *\n * Tails logs from skaile-managed Docker agent containers. Supports `--follow`,\n * regex `--filter`, project slug filtering, and `--list` to enumerate running\n * containers.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#logs\n */\nexport function makeLogsCommand(): Command {\n return new Command(\"logs\")\n .description(\"Tail logs from skaile Docker agent containers\")\n .option(\"--follow\", \"Follow log output (like tail -f)\")\n .option(\"--lines <n>\", \"Number of lines to show\", \"50\")\n .option(\"--filter <pattern>\", \"Filter log lines (regex)\")\n .option(\"--project <slug>\", \"Filter by project slug\")\n .option(\"--list\", \"List running skaile containers instead of showing logs\")\n .action(\n async (opts: {\n follow?: boolean;\n lines: string;\n filter?: string;\n project?: string;\n list?: boolean;\n }) => {\n if (!dockerAvailable()) {\n logErr(\"Docker is not running or not installed\");\n process.exitCode = 1;\n return;\n }\n\n const containers = listContainers();\n\n if (opts.list) {\n if (containers.length === 0) {\n logInfo(\"No skaile containers running\");\n return;\n }\n console.log();\n console.log(\n ` ${S.dim(\"NAME\".padEnd(30))} ${S.dim(\"PROJECT\".padEnd(20))} ${S.dim(\"STATUS\")}`,\n );\n console.log(` ${S.dim(\"─\".repeat(70))}`);\n for (const c of containers) {\n console.log(\n ` ${S.heading(c.name.padEnd(30))} ${c.project.padEnd(20)} ${S.dim(c.status)}`,\n );\n }\n console.log();\n return;\n }\n\n if (containers.length === 0) {\n logErr(\"No skaile containers running\");\n process.exitCode = 1;\n return;\n }\n\n let target: Container | undefined;\n if (opts.project) {\n target = containers.find((c) => c.project === opts.project);\n if (!target) {\n logErr(`No container found for project: ${opts.project}`);\n process.exitCode = 1;\n return;\n }\n } else {\n // Most recently created is first in `docker ps` output\n target = containers[0];\n }\n\n const filterRe = opts.filter ? new RegExp(opts.filter) : null;\n\n const args = [\"docker\", \"logs\", \"--tail\", opts.lines];\n if (opts.follow) args.push(\"--follow\");\n args.push(target.name);\n\n if (opts.follow) {\n const proc = portableSpawn(args);\n\n async function pipeStream(stream: ReadableStream<Uint8Array>) {\n const decoder = new TextDecoder();\n const reader = stream.getReader();\n let buf = \"\";\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buf += decoder.decode(value, { stream: true });\n const lines = buf.split(\"\\n\");\n buf = lines.pop() ?? \"\";\n for (const line of lines) {\n if (!filterRe || filterRe.test(line)) {\n console.log(colorLine(line));\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n if (buf && (!filterRe || filterRe.test(buf))) {\n console.log(colorLine(buf));\n }\n }\n\n await Promise.all([pipeStream(proc.stdout), pipeStream(proc.stderr)]);\n } else {\n const result = portableSpawnSync(args);\n const combined = result.stdout + result.stderr;\n const lines = combined.split(\"\\n\");\n for (const line of lines) {\n if (!line) continue;\n if (!filterRe || filterRe.test(line)) {\n console.log(colorLine(line));\n }\n }\n }\n },\n );\n}\n","/**\n * Interactive TUI for managing AI assets.\n *\n * Tabs: [Assets] [Sources] [Libraries] [Pending] [Sync]\n *\n * - Assets — browse and queue install/remove for assets, grouped by source.\n * - Sources — third-party github repos registered via `skaile source add`.\n * - Libraries — user authoring places registered via `skaile library init`.\n * - Pending — staged adds/removes (rich rendering deferred to AF-LIB-TUI-RICH).\n * - Sync — bulk sync sources + libraries (deferred to AF-LIB-TUI-RICH).\n *\n * Keys: ↑↓/jk navigate, ←/→ collapse/expand, space/+/- select, a/Enter apply,\n * s sync, i info, Tab switch view, q/Esc quit\n *\n * NOTE: rich rendering (status glyphs, behind/ahead counters, in-line sync) for\n * the Sources/Libraries/Pending/Sync tabs is deferred to AF-LIB-TUI-RICH (see\n * workspaces/issues.md). The current implementation is a minimal scaffold.\n */\n\nimport path from \"node:path\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport type { CatalogEntry } from \"@skaile/workspaces/core\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { kindColor, kindColorPad, S } from \"../helpers.ts\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * A single row in the manage TUI asset list, representing a source header,\n * a domain header, or an individual asset entry.\n *\n * The `source` field holds the name of the originating github repo\n * (`CatalogEntry.repository`) — i.e. the **source** in the three-noun model.\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport interface AssetRow {\n type: \"source-header\" | \"header\" | \"asset\";\n source?: string; // source-header: source name; header: parent source name\n domain?: string; // header: domain name\n entry?: CatalogEntry;\n installed?: boolean;\n}\n\n/**\n * One row in the Libraries tab — a user authoring place (`backend: \"local\" | \"git\"`).\n * Sources (github repos registered via `skaile source add`) are represented\n * separately as {@link SourceRow}.\n */\ninterface LibraryRow {\n name: string;\n backend: \"local\" | \"git\";\n ownership: string; // \"owner\" | \"contributor\" | \"reader\"\n assetCount: number;\n isDefault: boolean;\n}\n\n/**\n * One row in the Sources tab — a third-party github repo registered via\n * `skaile source add`. Sources always live under `~/.skaile/sources/` and use\n * the `git` backend; we keep them distinct from libraries in the UI to match\n * the three-noun vocabulary (source / library / store).\n */\ninterface SourceRow {\n name: string;\n path: string;\n ownership: string;\n assetCount: number;\n}\n\ntype Tab = \"assets\" | \"sources\" | \"libraries\" | \"pending\" | \"sync\";\ntype Action = \"add\" | \"remove\" | \"clear\" | \"toggle\";\n\n// ── State ────────────────────────────────────────────────────────────────────\n//\n// All mutable TUI state lives on a single object so it is easy to find and\n// reason about. Functions read/write state.* directly; this avoids the\n// scattered `let` declarations the file accumulated over time.\n//\n// The AssetManager is held separately because it has different lifetime\n// semantics (write-once at startup vs. per-frame mutable state) and avoids\n// a `T | undefined` placeholder on the state object.\n\nlet am: AssetManager;\n\ninterface State {\n tab: Tab;\n cursor: number;\n assetRows: AssetRow[];\n sourceRows: SourceRow[];\n libraryRows: LibraryRow[];\n visibleRows: AssetRow[];\n pendingAdds: Set<string>;\n pendingRemoves: Set<string>;\n collapsedSources: Set<string>;\n collapsedDomains: Set<string>; // keys: \"source:domain\"\n message: string;\n cols: number;\n awaitingExitConfirm: boolean;\n}\n\nconst state: State = {\n tab: \"assets\",\n cursor: 0,\n assetRows: [],\n sourceRows: [],\n libraryRows: [],\n visibleRows: [],\n pendingAdds: new Set(),\n pendingRemoves: new Set(),\n collapsedSources: new Set(),\n collapsedDomains: new Set(),\n message: \"\",\n cols: 80,\n awaitingExitConfirm: false,\n};\n\n// ── Pure helpers (exported for tests) ────────────────────────────────────────\n\n/**\n * Filter the full asset row list to only rows that should be visible given the\n * current collapsed source and domain sets.\n *\n * @param rows - Complete flat list of asset rows.\n * @param collapsedSources - Set of source names whose children are hidden.\n * @param collapsedDomains - Set of `\"source:domain\"` keys whose children are hidden.\n * @returns Filtered array of visible rows.\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function buildVisibleRows(\n rows: AssetRow[],\n collapsedSources: Set<string>,\n collapsedDomains: Set<string>,\n): AssetRow[] {\n return rows.filter((row) => {\n if (row.type === \"source-header\") return true;\n if (row.type === \"header\") return !collapsedSources.has(row.source!);\n const source = row.entry?.repository ?? \"other\";\n const domain = row.entry?.domain ?? \"other\";\n return !collapsedSources.has(source) && !collapsedDomains.has(`${source}:${domain}`);\n });\n}\n\n/**\n * Return `kind:name` refs for all asset rows belonging to a specific source and domain.\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function domainAssetRefs(rows: AssetRow[], source: string, domain: string): string[] {\n return rows\n .filter((r) => isAsset(r) && inDomain(r, source, domain))\n .map((r) => assetRefOf(r)!);\n}\n\n/**\n * Return `kind:name` refs for all asset rows belonging to a specific source.\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function sourceAssetRefs(rows: AssetRow[], source: string): string[] {\n return rows.filter((r) => isAsset(r) && inSource(r, source)).map((r) => assetRefOf(r)!);\n}\n\n// ── Internal row helpers ─────────────────────────────────────────────────────\n\nfunction isAsset(r: AssetRow): boolean {\n return r.type === \"asset\";\n}\n\nfunction inSource(r: AssetRow, source: string): boolean {\n return (r.entry?.repository ?? \"other\") === source;\n}\n\nfunction inDomain(r: AssetRow, source: string, domain: string): boolean {\n return inSource(r, source) && (r.entry?.domain ?? \"other\") === domain;\n}\n\nfunction assetRefOf(r: AssetRow): string | null {\n if (!isAsset(r) || !r.entry) return null;\n return `${r.entry.kind}:${r.entry.name}`;\n}\n\nfunction findAssetRow(ref: string): AssetRow | undefined {\n return state.assetRows.find((r) => isAsset(r) && assetRefOf(r) === ref);\n}\n\n// ── Selection state machine ──────────────────────────────────────────────────\n//\n// Every (asset, action) interaction reduces to setSelection. Bulk operations\n// from headers map over the children with bulkSelection.\n//\n// Action semantics:\n// \"add\" — pressing + intent: cancel any pending remove, and queue an add\n// if the asset is not yet installed\n// \"remove\" — pressing - intent: cancel any pending add, and queue a remove\n// if the asset is currently installed\n// \"clear\" — clear any pending state for this ref\n// \"toggle\" — context-aware: if any pending → clear, else add or remove\n// based on whether the asset is currently installed\n//\n// \"add\" and \"remove\" always cancel the opposite-pending state first, so the\n// user can press +/- to undo a queued opposite action. The early return on\n// already-installed (for add) or not-yet-installed (for remove) is checked AFTER\n// that cleanup, which keeps installed assets from ever ending up in pendingAdds\n// (and vice-versa).\n\nfunction setSelection(ref: string, action: Action): void {\n const row = findAssetRow(ref);\n if (!row) return;\n\n if (action === \"clear\") {\n state.pendingAdds.delete(ref);\n state.pendingRemoves.delete(ref);\n return;\n }\n\n let resolved: \"add\" | \"remove\";\n if (action === \"toggle\") {\n if (state.pendingAdds.has(ref) || state.pendingRemoves.has(ref)) {\n state.pendingAdds.delete(ref);\n state.pendingRemoves.delete(ref);\n return;\n }\n resolved = row.installed ? \"remove\" : \"add\";\n } else {\n resolved = action;\n }\n\n if (resolved === \"add\") {\n state.pendingRemoves.delete(ref); // pressing + always cancels a pending remove\n if (row.installed) return; // already installed → nothing to queue\n state.pendingAdds.add(ref);\n } else {\n state.pendingAdds.delete(ref); // pressing - always cancels a pending add\n if (!row.installed) return; // not installed → nothing to queue\n state.pendingRemoves.add(ref);\n }\n}\n\nfunction bulkSelection(refs: string[], action: Action): void {\n for (const ref of refs) setSelection(ref, action);\n}\n\n/** Apply a header-targeted action; returns true if `row` is a header type. */\nfunction actOnHeader(row: AssetRow, action: Action): boolean {\n if (row.type === \"source-header\") {\n bulkSelection(sourceAssetRefs(state.assetRows, row.source!), action);\n return true;\n }\n if (row.type === \"header\") {\n bulkSelection(domainAssetRefs(state.assetRows, row.source!, row.domain!), action);\n return true;\n }\n return false;\n}\n\n// ── Data loading ─────────────────────────────────────────────────────────────\n\nfunction loadAssets(): void {\n const entries = am.search();\n const installed = new Set(am.listDeployed().map((e) => `${e.kind}:${e.name}`));\n\n // Group by source (CatalogEntry.repository), then domain\n const bySource = new Map<string, Map<string, CatalogEntry[]>>();\n for (const e of entries) {\n const source = e.repository ?? \"other\";\n const domain = e.domain ?? \"other\";\n if (!bySource.has(source)) bySource.set(source, new Map());\n const domainMap = bySource.get(source)!;\n if (!domainMap.has(domain)) domainMap.set(domain, []);\n domainMap.get(domain)!.push(e);\n }\n\n const rows: AssetRow[] = [];\n for (const [source, domainMap] of [...bySource.entries()].sort((a, b) =>\n a[0].localeCompare(b[0]),\n )) {\n rows.push({ type: \"source-header\", source });\n for (const [domain, items] of [...domainMap.entries()].sort((a, b) =>\n a[0].localeCompare(b[0]),\n )) {\n rows.push({ type: \"header\", source, domain });\n items.sort((a, b) =>\n a.kind !== b.kind ? a.kind.localeCompare(b.kind) : a.name.localeCompare(b.name),\n );\n for (const entry of items) {\n const ref = `${entry.kind}:${entry.name}`;\n rows.push({ type: \"asset\", entry, installed: installed.has(ref) });\n }\n }\n }\n state.assetRows = rows;\n\n // Reconcile collapsed sets with the new rows.\n // Source headers default open (not added); domain headers default collapsed.\n const newSources = new Set(rows.filter((r) => r.type === \"source-header\").map((r) => r.source!));\n for (const s of state.collapsedSources) {\n if (!newSources.has(s)) state.collapsedSources.delete(s);\n }\n\n const newDomainKeys = new Set(\n rows.filter((r) => r.type === \"header\").map((r) => `${r.source!}:${r.domain!}`),\n );\n for (const d of state.collapsedDomains) {\n if (!newDomainKeys.has(d)) state.collapsedDomains.delete(d);\n }\n for (const d of newDomainKeys) state.collapsedDomains.add(d);\n\n rebuildVisible();\n}\n\n/**\n * Minimal scaffold for the Sources and Libraries tabs: fetch registered\n * libraries via LibraryManager, then split them into sources (github clones\n * under `~/.skaile/sources/`) and authoring libraries. Rich rendering is\n * deferred to AF-LIB-TUI-RICH.\n */\nasync function loadSourcesAndLibraries(): Promise<void> {\n try {\n const [{ openLibraryManager }, { skaileHomeDir }] = await Promise.all([\n import(\"../open-library.ts\"),\n import(\"@skaile/workspaces/library\"),\n ]);\n const { manager, library, close } = await openLibraryManager();\n try {\n const sourcesDir = path.join(skaileHomeDir(), \"sources\");\n const isSourceRow = (l: { path: string }) => l.path.startsWith(sourcesDir);\n\n const libs = await manager.listLibraries();\n const defs = await library.listAssetDefs();\n const counts = new Map<string, number>();\n for (const d of defs) {\n const id = d.libraryId ?? \"\";\n counts.set(id, (counts.get(id) ?? 0) + 1);\n }\n\n state.sourceRows = libs.filter(isSourceRow).map((l) => ({\n name: l.name,\n path: l.path,\n ownership: l.ownership,\n assetCount: counts.get(l.id) ?? 0,\n }));\n\n state.libraryRows = libs\n .filter((l) => !isSourceRow(l))\n .map((l) => ({\n name: l.name,\n backend: l.backend as \"local\" | \"git\",\n ownership: l.ownership,\n assetCount: counts.get(l.id) ?? 0,\n isDefault: l.isDefault,\n }));\n } finally {\n close();\n }\n } catch {\n // No DB yet / open failed — leave the lists empty; tabs show emptyMsg.\n state.sourceRows = [];\n state.libraryRows = [];\n }\n}\n\nfunction rebuildVisible(): void {\n state.visibleRows = buildVisibleRows(\n state.assetRows,\n state.collapsedSources,\n state.collapsedDomains,\n );\n clampCursor();\n}\n\n// ── Cursor / tab ─────────────────────────────────────────────────────────────\n\nfunction clampCursor(): void {\n state.cursor = Math.min(state.cursor, Math.max(0, maxCursor()));\n}\n\nfunction maxCursor(): number {\n return TABS[state.tab].rowCount() - 1;\n}\n\nfunction moveCursor(delta: number): void {\n state.cursor = Math.max(0, Math.min(maxCursor(), state.cursor + delta));\n}\n\nfunction nextTab(): void {\n const order: Tab[] = [\"assets\", \"sources\", \"libraries\", \"pending\", \"sync\"];\n state.tab = order[(order.indexOf(state.tab) + 1) % order.length];\n state.cursor = 0;\n}\n\n// ── Tab specs ────────────────────────────────────────────────────────────────\n//\n// Per-tab metadata used by render(), renderTabs(), maxCursor() and the footer\n// hints. Adding a new tab is a single entry here plus a row type.\n\ninterface TabSpec {\n label: string;\n rowCount: () => number;\n selectableCount: () => number; // shown next to the tab label\n emptyMsg?: string;\n renderRow: (i: number, selected: boolean) => string;\n footer: string;\n}\n\nconst TABS: Record<Tab, TabSpec> = {\n assets: {\n label: \"Assets\",\n rowCount: () => state.visibleRows.length,\n selectableCount: () => state.assetRows.filter(isAsset).length,\n renderRow: (i, sel) => renderAssetRow(state.visibleRows[i], sel),\n footer:\n \" ↑↓/jk navigate ←/→ collapse/expand [space/+/-] select [a/↵] apply [i] info Tab switch [q/esc] quit\",\n },\n sources: {\n label: \"Sources\",\n rowCount: () => state.sourceRows.length,\n selectableCount: () => state.sourceRows.length,\n emptyMsg:\n \" No sources registered. Run `skaile source add <git-url>` from the shell to track a github repo.\",\n renderRow: (i, sel) => renderSourceRow(state.sourceRows[i], sel),\n footer:\n \" ↑↓ navigate Tab switch q quit (use `skaile source …` from the shell for CRUD)\",\n },\n libraries: {\n label: \"Libraries\",\n rowCount: () => state.libraryRows.length,\n selectableCount: () => state.libraryRows.length,\n emptyMsg:\n \" No libraries registered. Run `skaile library init <name>` from the shell to author your own.\",\n renderRow: (i, sel) => renderLibraryRow(state.libraryRows[i], sel),\n footer:\n \" ↑↓ navigate Tab switch q quit (use `skaile library …` from the shell for CRUD)\",\n },\n pending: {\n label: \"Pending\",\n rowCount: () => 0,\n selectableCount: () => state.pendingAdds.size + state.pendingRemoves.size,\n emptyMsg: \" (no pending changes — implement in follow-up: AF-LIB-TUI-RICH)\",\n renderRow: () => \"\",\n footer: \" Tab switch q quit\",\n },\n sync: {\n label: \"Sync\",\n rowCount: () => 0,\n selectableCount: () => 0,\n emptyMsg:\n \" Press S to sync all sources + libraries (rich rendering deferred to AF-LIB-TUI-RICH).\",\n renderRow: () => \"\",\n footer: \" s sync all Tab switch q quit\",\n },\n};\n\n// ── Terminal helpers ─────────────────────────────────────────────────────────\n\nfunction clearScreen(): void {\n process.stdout.write(\"\\x1b[2J\\x1b[H\");\n}\nfunction hideCursor(): void {\n process.stdout.write(\"\\x1b[?25l\");\n}\nfunction showCursor(): void {\n process.stdout.write(\"\\x1b[?25h\");\n}\n\n// ── Rendering ────────────────────────────────────────────────────────────────\n\nfunction renderTabs(): string {\n return (Object.entries(TABS) as [Tab, TabSpec][])\n .map(([id, spec]) => {\n const text = `${spec.label} (${spec.selectableCount()})`;\n return id === state.tab ? pc.bgCyan(pc.black(` ${text} `)) : pc.dim(` ${text} `);\n })\n .join(pc.dim(\"│\"));\n}\n\n/** Pending +/- counts for the subset of asset rows matched by `match`. */\nfunction pendingCountsFor(match: (r: AssetRow) => boolean): [number, number] {\n let add = 0;\n let remove = 0;\n for (const ref of state.pendingAdds) {\n const r = findAssetRow(ref);\n if (r && match(r)) add++;\n }\n for (const ref of state.pendingRemoves) {\n const r = findAssetRow(ref);\n if (r && match(r)) remove++;\n }\n return [add, remove];\n}\n\n/** Selection indicator for a header group — mirrors the per-asset status. */\nfunction groupStatus(refs: string[]): string {\n if (refs.length === 0) return pc.dim(\"· \");\n if (refs.some((r) => state.pendingAdds.has(r))) return pc.blue(\"+ \");\n if (refs.some((r) => state.pendingRemoves.has(r))) return pc.red(\"- \");\n const allInstalled = refs.every((r) => findAssetRow(r)?.installed);\n return allInstalled ? pc.green(\"✓ \") : pc.dim(\"· \");\n}\n\nfunction renderHeaderLine(opts: {\n indent: string;\n collapsed: boolean;\n match: (r: AssetRow) => boolean;\n refs: string[];\n label: string;\n selected: boolean;\n}): string {\n const indicator = opts.collapsed ? \"▶\" : \"▼\";\n const total = state.assetRows.filter(opts.match).length;\n const installed = state.assetRows.filter((r) => opts.match(r) && r.installed).length;\n const [add, remove] = pendingCountsFor(opts.match);\n let count = String(installed);\n if (add > 0) count += pc.green(`+${add}`);\n if (remove > 0) count += pc.red(`-${remove}`);\n count += `/${total}`;\n const status = groupStatus(opts.refs);\n const line = `${opts.indent}${status}${indicator} ${opts.label} (${count} assets)`;\n return opts.selected ? pc.bgWhite(pc.black(`${line} `.padEnd(state.cols))) : line;\n}\n\nfunction renderAssetRow(row: AssetRow, selected: boolean): string {\n if (row.type === \"source-header\") {\n return renderHeaderLine({\n indent: \" \",\n collapsed: state.collapsedSources.has(row.source!),\n match: (r) => isAsset(r) && inSource(r, row.source!),\n refs: sourceAssetRefs(state.assetRows, row.source!),\n label: pc.bold(pc.cyan(row.source!)),\n selected,\n });\n }\n\n if (row.type === \"header\") {\n return renderHeaderLine({\n indent: \" \",\n collapsed: state.collapsedDomains.has(`${row.source!}:${row.domain!}`),\n match: (r) => isAsset(r) && inDomain(r, row.source!, row.domain!),\n refs: domainAssetRefs(state.assetRows, row.source!, row.domain!),\n label: pc.bold(row.domain!),\n selected,\n });\n }\n\n const e = row.entry!;\n const ref = assetRefOf(row)!;\n let status: string;\n if (state.pendingAdds.has(ref)) status = pc.blue(\"+ \");\n else if (state.pendingRemoves.has(ref)) status = pc.red(\"- \");\n else if (row.installed) status = pc.green(\"✓ \");\n else status = pc.dim(\"· \");\n\n const kind = kindColorPad(e.kind, 8);\n const name = e.name.padEnd(30);\n const desc = e.description?.slice(0, state.cols - 52) ?? \"\";\n const line = ` ${status} ${kind} ${name} ${pc.dim(desc)}`;\n return selected ? pc.inverse(line.padEnd(state.cols)) : line;\n}\n\nfunction renderSourceRow(row: SourceRow, selected: boolean): string {\n const line = ` ${S.cmd(row.name.padEnd(20))} ${pc.dim(row.ownership.padEnd(12))} ${pc.dim(`${row.assetCount} assets`)} ${pc.dim(row.path)}`;\n return selected ? pc.inverse(line.padEnd(state.cols)) : line;\n}\n\nfunction renderLibraryRow(row: LibraryRow, selected: boolean): string {\n const mark = row.isDefault ? pc.green(\"▸\") : \" \";\n const line = `${mark} ${S.cmd(row.name.padEnd(16))} ${pc.dim(row.backend.padEnd(7))} ${pc.dim(row.ownership.padEnd(12))} ${pc.dim(`${row.assetCount} assets`)}`;\n return selected ? pc.inverse(line.padEnd(state.cols)) : line;\n}\n\nfunction render(): void {\n clearScreen();\n state.cols = process.stdout.columns || 80;\n\n // Reserve rows for header (3) + footer (2) + optional pending summary + optional message.\n const pendingLines =\n state.pendingAdds.size > 0 || state.pendingRemoves.size > 0\n ? 1 + (state.pendingAdds.size > 0 ? 1 : 0) + (state.pendingRemoves.size > 0 ? 1 : 0)\n : 0;\n const msgLines = state.message ? 2 : 0;\n const overhead = 5 + pendingLines + msgLines;\n const maxRows = Math.max(5, (process.stdout.rows || 30) - overhead);\n\n // Header\n console.log();\n console.log(` ${pc.bold(\"skaile manage\")} ${renderTabs()}`);\n console.log(` ${S.rule(state.cols - 4)}`);\n\n // Body\n const spec = TABS[state.tab];\n const total = spec.rowCount();\n if (total === 0 && spec.emptyMsg) {\n console.log(pc.dim(spec.emptyMsg));\n } else {\n const start = Math.max(0, state.cursor - maxRows + 3);\n const end = Math.min(total, start + maxRows);\n for (let i = start; i < end; i++) {\n console.log(spec.renderRow(i, i === state.cursor));\n }\n }\n\n // Pending summary\n if (state.pendingAdds.size > 0 || state.pendingRemoves.size > 0) {\n console.log();\n if (state.pendingAdds.size > 0)\n console.log(` ${pc.blue(`+ ${state.pendingAdds.size} to add`)}`);\n if (state.pendingRemoves.size > 0)\n console.log(` ${pc.red(`- ${state.pendingRemoves.size} to remove`)}`);\n }\n\n // Message (one-shot)\n if (state.message) {\n console.log();\n console.log(` ${state.message}`);\n state.message = \"\";\n }\n\n // Footer\n console.log();\n console.log(pc.dim(spec.footer));\n}\n\nfunction renderExitPrompt(): void {\n clearScreen();\n console.log();\n console.log(` ${pc.yellow(\"!\")} ${pc.bold(\"You have unapplied changes:\")}`);\n if (state.pendingAdds.size > 0)\n console.log(` ${pc.blue(`+ ${state.pendingAdds.size} to add`)}`);\n if (state.pendingRemoves.size > 0)\n console.log(` ${pc.red(`- ${state.pendingRemoves.size} to remove`)}`);\n console.log();\n console.log(\n ` Apply before exiting? ${pc.bold(\"[y]\")} apply ${pc.bold(\"[n]\")} discard ${pc.bold(\"[c/Esc]\")} cancel`,\n );\n}\n\n// ── Actions ──────────────────────────────────────────────────────────────────\n\nasync function applyChanges(): Promise<void> {\n if (state.pendingAdds.size === 0 && state.pendingRemoves.size === 0) {\n state.message = pc.dim(\"Nothing to apply.\");\n return;\n }\n\n state.message = pc.yellow(\"Applying changes...\");\n render();\n\n let added = 0;\n let removed = 0;\n\n for (const ref of state.pendingRemoves) {\n if (am.remove(ref)) removed++;\n }\n for (const ref of state.pendingAdds) {\n try {\n am.add(ref);\n added++;\n } catch (err) {\n state.message = pc.red(`Failed to add ${ref}: ${err}`);\n }\n }\n\n state.pendingAdds.clear();\n state.pendingRemoves.clear();\n loadAssets();\n\n const parts: string[] = [];\n if (added > 0) parts.push(pc.green(`+${added} added`));\n if (removed > 0) parts.push(pc.red(`-${removed} removed`));\n if (parts.length) state.message = parts.join(\" \");\n}\n\nasync function syncAll(): Promise<void> {\n // Minimal scaffold — rich in-TUI sync is deferred to AF-LIB-TUI-RICH.\n state.message = pc.yellow(\n \"Sync is not yet driven from the manage TUI. Run `skaile source sync` (sources) or `skaile library sync <name>` (git-backed libraries) from the shell.\",\n );\n}\n\nfunction sourceShellHint(action: string): void {\n state.message = pc.yellow(\n `${action} is a shell command. Run \\`skaile source …\\` from the shell.`,\n );\n}\n\nfunction libraryShellHint(action: string): void {\n state.message = pc.yellow(\n `${action} is a shell command. Run \\`skaile library …\\` from the shell.`,\n );\n}\n\nasync function showInfo(): Promise<void> {\n if (state.tab !== \"assets\") return;\n const row = state.visibleRows[state.cursor];\n if (row?.type !== \"asset\") return;\n const e = row.entry!;\n\n clearScreen();\n console.log();\n console.log(` ${kindColor(e.kind)} ${pc.bold(e.name)}`);\n console.log(` ${S.rule(50)}`);\n if (e.version) console.log(` version: ${e.version}`);\n if (e.description) console.log(` description: ${e.description}`);\n if (e.repository) console.log(` source: ${pc.dim(e.repository)}`);\n console.log(` manifest: ${pc.dim(e.source)}`);\n console.log(` installed: ${row.installed ? pc.green(\"yes\") : pc.red(\"no\")}`);\n if (e.requires.length) {\n console.log(` requires:`);\n for (const d of e.requires) console.log(` ${kindColor(d.kind)}:${d.name}`);\n }\n if (e.dependencies.length) {\n console.log(` dependencies:`);\n for (const d of e.dependencies) console.log(` ${d}`);\n }\n console.log();\n console.log(pc.dim(\" Press any key to return...\"));\n\n await new Promise<void>((resolve) => {\n const onData = () => {\n process.stdin.removeListener(\"data\", onData);\n resolve();\n };\n process.stdin.once(\"data\", onData);\n });\n}\n\n// ── Collapse / expand (assets tab) ───────────────────────────────────────────\n\nfunction expandUnderCursor(): void {\n const row = state.visibleRows[state.cursor];\n if (!row) return;\n if (row.type === \"source-header\" && state.collapsedSources.has(row.source!)) {\n state.collapsedSources.delete(row.source!);\n rebuildVisible();\n } else if (row.type === \"header\") {\n const dk = `${row.source!}:${row.domain!}`;\n if (state.collapsedDomains.has(dk)) {\n state.collapsedDomains.delete(dk);\n rebuildVisible();\n }\n }\n}\n\nfunction collapseOrJumpUnderCursor(): void {\n const row = state.visibleRows[state.cursor];\n if (!row) return;\n\n if (row.type === \"source-header\") {\n if (!state.collapsedSources.has(row.source!)) {\n state.collapsedSources.add(row.source!);\n rebuildVisible();\n }\n return;\n }\n\n if (row.type === \"header\") {\n const dk = `${row.source!}:${row.domain!}`;\n if (!state.collapsedDomains.has(dk)) {\n state.collapsedDomains.add(dk);\n rebuildVisible();\n } else {\n // Already collapsed → jump to parent source header\n const idx = findLastIndex(\n state.visibleRows,\n state.cursor,\n (r: AssetRow) => r.type === \"source-header\",\n );\n if (idx >= 0) state.cursor = idx;\n }\n return;\n }\n\n // asset → jump to nearest header above\n const idx = findLastIndex(\n state.visibleRows,\n state.cursor,\n (r: AssetRow) => r.type === \"header\" || r.type === \"source-header\",\n );\n if (idx >= 0) state.cursor = idx;\n}\n\n/**\n * Find the last index in `arr` strictly before `endExclusive` matching `pred`.\n * Replacement for `Array.prototype.findLastIndex`, which requires ES2023 lib.\n */\nfunction findLastIndex<T>(arr: T[], endExclusive: number, pred: (item: T) => boolean): number {\n for (let i = Math.min(endExclusive, arr.length) - 1; i >= 0; i--) {\n if (pred(arr[i] as T)) return i;\n }\n return -1;\n}\n\n// ── Keymap ───────────────────────────────────────────────────────────────────\n//\n// Declarative key bindings. Each binding lists the literal keys it matches, an\n// optional tab predicate, and the handler. Handlers may return \"break\" to exit\n// the main loop or \"skip-render\" to suppress the post-render call (used when\n// the handler renders its own output, e.g. modal prompts).\n\n// `void` is intentional here: handlers may also return Promise<void> from async\n// functions that don't care about the dispatch sentinel. Treating \"no return\"\n// as a third state is the simplest contract.\n// biome-ignore lint/suspicious/noConfusingVoidType: see comment above\ntype KeyResult = \"break\" | \"skip-render\" | void;\n\ninterface KeyBinding {\n keys: string[];\n when?: (tab: Tab) => boolean;\n run: (key: string) => Promise<KeyResult> | KeyResult;\n}\n\nconst TAB_ASSETS = (t: Tab) => t === \"assets\";\nconst TAB_SOURCES = (t: Tab) => t === \"sources\";\nconst TAB_LIBRARIES = (t: Tab) => t === \"libraries\";\n\nconst KEYMAP: KeyBinding[] = [\n // Quit (with pending check) — handled here, not via a modal subroutine, so\n // the main for-await loop owns key delivery (data listeners don't fire while\n // the stream is owned by an async iterator).\n {\n keys: [\"\\x03\", \"q\", \"\\x1b\"],\n run: () => {\n if (state.pendingAdds.size > 0 || state.pendingRemoves.size > 0) {\n state.awaitingExitConfirm = true;\n renderExitPrompt();\n return \"skip-render\";\n }\n return \"break\";\n },\n },\n { keys: [\"\\t\"], run: () => void nextTab() },\n { keys: [\"\\x1b[A\", \"k\"], run: () => void moveCursor(-1) },\n { keys: [\"\\x1b[B\", \"j\"], run: () => void moveCursor(1) },\n\n // Collapse / expand — assets tab only\n { keys: [\"\\x1b[C\"], when: TAB_ASSETS, run: expandUnderCursor },\n { keys: [\"\\x1b[D\"], when: TAB_ASSETS, run: collapseOrJumpUnderCursor },\n\n // + : assets → bulk-add or single-add toggle\n {\n keys: [\"+\"],\n when: TAB_ASSETS,\n run: () => {\n const row = state.visibleRows[state.cursor];\n if (!row) return;\n if (!actOnHeader(row, \"add\")) {\n const ref = assetRefOf(row);\n if (ref) setSelection(ref, state.pendingAdds.has(ref) ? \"clear\" : \"add\");\n }\n },\n },\n\n // Sources tab: +/-/n/r/x map to shell hints in the minimal scaffold.\n { keys: [\"+\", \"n\", \"a\"], when: TAB_SOURCES, run: () => sourceShellHint(\"Adding a source\") },\n { keys: [\"-\", \"r\", \"x\"], when: TAB_SOURCES, run: () => sourceShellHint(\"Removing a source\") },\n { keys: [\"\\r\", \"\\n\"], when: TAB_SOURCES, run: () => sourceShellHint(\"Source actions\") },\n\n // Libraries tab: +/-/n/r/x/d/enter map to shell hints in the minimal scaffold.\n {\n keys: [\"+\", \"n\", \"a\"],\n when: TAB_LIBRARIES,\n run: () => libraryShellHint(\"Adding a library\"),\n },\n {\n keys: [\"-\", \"r\", \"x\"],\n when: TAB_LIBRARIES,\n run: () => libraryShellHint(\"Removing a library\"),\n },\n {\n keys: [\"d\"],\n when: TAB_LIBRARIES,\n run: () => libraryShellHint(\"Setting the default library\"),\n },\n { keys: [\"\\r\", \"\\n\"], when: TAB_LIBRARIES, run: () => libraryShellHint(\"Library actions\") },\n\n // - : assets → bulk-remove or single-remove toggle\n {\n keys: [\"-\"],\n when: TAB_ASSETS,\n run: () => {\n const row = state.visibleRows[state.cursor];\n if (!row) return;\n if (!actOnHeader(row, \"remove\")) {\n const ref = assetRefOf(row);\n if (ref) setSelection(ref, state.pendingRemoves.has(ref) ? \"clear\" : \"remove\");\n }\n },\n },\n\n // Space — auto-toggle (single asset or bulk header)\n {\n keys: [\" \"],\n when: TAB_ASSETS,\n run: () => {\n const row = state.visibleRows[state.cursor];\n if (!row) return;\n if (!actOnHeader(row, \"toggle\")) {\n const ref = assetRefOf(row);\n if (ref) setSelection(ref, \"toggle\");\n }\n },\n },\n\n // s — sync all (any tab) — minimal scaffold delegates to shell.\n { keys: [\"s\"], run: syncAll },\n\n // a : assets → apply\n { keys: [\"a\"], when: TAB_ASSETS, run: applyChanges },\n\n // Enter — apply on assets tab\n { keys: [\"\\r\", \"\\n\"], when: TAB_ASSETS, run: applyChanges },\n\n // Info — assets only\n { keys: [\"i\"], when: TAB_ASSETS, run: showInfo },\n];\n\nasync function dispatchKey(key: string): Promise<KeyResult> {\n for (const b of KEYMAP) {\n if (!b.keys.includes(key)) continue;\n if (b.when && !b.when(state.tab)) continue;\n return await b.run(key);\n }\n // Unrecognised key — no-op, no re-render.\n return \"skip-render\";\n}\n\n/** Handle the response to the exit-confirmation prompt. */\nasync function handleExitConfirm(key: string): Promise<KeyResult> {\n state.awaitingExitConfirm = false;\n\n if (key === \"\\x03\" || key === \"n\" || key === \"N\") return \"break\";\n if (key === \"y\" || key === \"Y\") {\n await applyChanges();\n return \"break\";\n }\n if (key === \"c\" || key === \"C\" || key === \"\\x1b\" || key === \"\\r\" || key === \"\\n\") {\n return; // re-render\n }\n // Unknown key: re-arm, redraw the prompt\n state.awaitingExitConfirm = true;\n renderExitPrompt();\n return \"skip-render\";\n}\n\n// ── Main loop ────────────────────────────────────────────────────────────────\n\nasync function run(projectDir: string): Promise<void> {\n am = new AssetManager({ projectDir });\n\n // The legacy auto-sync-on-open behaviour was tied to the `.skaile/repos/`\n // clone cache and was removed on 2026-05-12. Source sync now flows through\n // the shell-level `skaile source sync` command.\n\n loadAssets();\n await loadSourcesAndLibraries();\n\n hideCursor();\n process.stdin.setRawMode(true);\n process.stdin.resume();\n\n render();\n\n for await (const chunk of process.stdin) {\n const key = chunk.toString();\n\n const result = state.awaitingExitConfirm\n ? await handleExitConfirm(key)\n : await dispatchKey(key);\n\n if (result === \"break\") break;\n if (result === \"skip-render\") continue;\n render();\n }\n\n showCursor();\n process.stdin.setRawMode(false);\n process.stdin.pause();\n clearScreen();\n}\n\n// ── Command ──────────────────────────────────────────────────────────────────\n\n/**\n * Creates the `skaile manage` command.\n *\n * Opens an interactive terminal TUI (five tabs: Assets, Sources, Libraries,\n * Pending, Sync) for browsing, installing, and removing assets. CRUD for\n * sources and libraries remains in the shell (`skaile source …` /\n * `skaile library …`) — the Sources and Libraries tabs are read-only\n * scaffolds pending AF-LIB-TUI-RICH.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function makeManageCommand(): Command {\n return new Command(\"manage\")\n .description(\"Interactive TUI for managing assets, sources, and libraries\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts) => {\n await run(path.resolve(opts.projectDir));\n });\n}\n","// cli/src/commands/mcp-server.ts\nimport { Command } from \"commander\";\n\n/**\n * Creates the `skaile mcp-server` command.\n *\n * Starts a stdio MCP server exposing skaile workspace tools, built directly\n * on `@modelcontextprotocol/sdk` (no Claude Agent SDK). Registered in\n * `.claude/mcp.json` / `.codex/config.toml` by `skaile plugin install`.\n * The host agent spawns this process and communicates over stdio — it runs\n * on plain Node.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/plugin#make-mcp-server-command\n */\nexport function makeMcpServerCommand(): Command {\n return new Command(\"mcp-server\")\n .description(\"Start skaile workspace MCP server (stdio transport)\")\n .option(\"--project-dir <path>\", \"Project directory (default: cwd)\", process.cwd())\n .action(async (opts: { projectDir: string }) => {\n const path = await import(\"node:path\");\n const projectDir = path.default.resolve(opts.projectDir);\n\n // stdout is the MCP JSON-RPC channel — any log line on it corrupts the\n // protocol. Register a stderr-only LogStore before anything constructs\n // a logger (the WorkspacePlugin constructor does, on the next line).\n const { LogStore, StdoutSink, registerLogStore } = await import(\n \"@skaile/workspaces/core/logging\"\n );\n registerLogStore(\n new LogStore({\n sessionId: \"mcp-server\",\n level: \"info\",\n sinks: [new StdoutSink({ stream: \"stderr\" })],\n }),\n );\n\n const { WorkspacePlugin } = await import(\"@skaile/workspaces/workspace-plugin\");\n const plugin = new WorkspacePlugin({\n projectDir,\n bootOwned: true,\n onLog: (msg) => process.stderr.write(`${msg}\\n`),\n });\n\n await plugin.boot();\n\n // Register signal handlers before connecting the stdio transport.\n const shutdown = async () => {\n await plugin.shutdown();\n };\n process.on(\"SIGINT\", async () => {\n await shutdown();\n process.exit(0);\n });\n process.on(\"SIGTERM\", async () => {\n await shutdown();\n process.exit(0);\n });\n\n // Build the raw @modelcontextprotocol/sdk server and connect stdio.\n // No @anthropic-ai/claude-agent-sdk on this path — runs on Node.\n await plugin.runMcpServerStdio();\n });\n}\n","import { execSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, S } from \"../helpers.ts\";\nimport { openLibrary } from \"../open-library.ts\";\nimport { createFullRegistry } from \"../open-registry.ts\";\n\n/**\n * Creates the `skaile npx` command group.\n *\n * Compatibility shim for the `npx skills` syntax. The `npx skills add <url>`\n * subcommand registers a remote repo as a Library Source (cloning to the\n * shared user-level cache when needed), syncs the source, then installs the\n * requested skill in a single step.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#npx\n */\nexport function makeNpxCommand(): Command {\n const npx = new Command(\"npx\").description(\"Compatibility shim for npx skills syntax\");\n\n const skills = npx.command(\"skills\").description(\"Skill installation from external repos\");\n\n skills\n .command(\"add <url>\")\n .description(\"Register a repo as a Library Source and install a skill from it\")\n .requiredOption(\"--skill <name>\", \"Skill name to install from the repo\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--target <agent>\", \"Agent framework\", \"claude-code\")\n .option(\"--global\", \"Deploy globally\")\n .action(async (url: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n\n const spinner = p.spinner();\n\n // 1. Clone to ~/.skaile/clones/<host>/<owner>/<repo> if remote.\n let sourcePath: string;\n const isUrl = /^(https?:|git@|git:)/.test(url);\n if (isUrl) {\n sourcePath = cloneDestination(url);\n spinner.start(`Cloning ${url}`);\n try {\n if (!existsSync(sourcePath)) {\n execSync(`git clone ${url} ${sourcePath}`, { stdio: \"ignore\" });\n }\n spinner.stop(`Cloned to ${path.basename(sourcePath)}`);\n } catch (err) {\n spinner.stop(\"Clone failed\");\n logErr(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n } else {\n sourcePath = path.resolve(url);\n if (!existsSync(sourcePath)) {\n logErr(`Path does not exist: ${sourcePath}`);\n process.exit(1);\n }\n }\n\n // 2. Register as a Library Source and sync.\n const library = await openLibrary();\n try {\n const existing = await library.listSources();\n let source = existing.find((s) => s.path === sourcePath);\n if (!source) {\n source = await library.addSource({\n backend: \"local\",\n name: path.basename(sourcePath),\n path: sourcePath,\n ownership: \"owner\",\n });\n }\n spinner.start(\"Syncing source\");\n const { LocalCatalogSource } = await import(\"@skaile/workspaces/library\");\n const registry = createFullRegistry();\n const catalogSource = new LocalCatalogSource(library, source.id, sourcePath, registry);\n const result = await catalogSource.sync();\n await library.syncSource(source.id);\n spinner.stop(`Indexed ${result.assetsUpdated} assets`);\n } finally {\n library.close();\n }\n\n // 3. Install the requested skill via AssetManager.\n const skillRef = `skill:${opts.skill}`;\n const am = new AssetManager({ projectDir, global: opts.global, driverTarget: opts.target });\n spinner.start(`Installing ${skillRef}`);\n try {\n const added = am.add(skillRef);\n spinner.stop(\"Done\");\n if (added.length === 0) {\n logInfo(`${opts.skill} already deployed or not found in source.`);\n } else {\n for (const a of added) logOk(a);\n }\n logInfo(\n `Source registered at ${S.dim(sourcePath)} — manage via ${S.cmd(\"skaile source\")}.`,\n );\n } catch (err) {\n spinner.stop(\"Failed\");\n logErr((err as Error).message);\n process.exit(1);\n }\n });\n\n npx.action(() => npx.help());\n skills.action(() => skills.help());\n\n return npx;\n}\n\nfunction cloneDestination(url: string): string {\n const cleaned = url.replace(/\\.git$/, \"\");\n const root = path.join(homedir(), \".skaile\", \"clones\");\n\n let host = \"unknown\";\n let pathPart = cleaned;\n const httpMatch = cleaned.match(/^https?:\\/\\/([^/]+)\\/(.+)$/);\n const gitMatch = cleaned.match(/^git@([^:]+):(.+)$/);\n const gitProtoMatch = cleaned.match(/^git:\\/\\/([^/]+)\\/(.+)$/);\n\n if (httpMatch) {\n host = httpMatch[1]!;\n pathPart = httpMatch[2]!;\n } else if (gitMatch) {\n host = gitMatch[1]!;\n pathPart = gitMatch[2]!;\n } else if (gitProtoMatch) {\n host = gitProtoMatch[1]!;\n pathPart = gitProtoMatch[2]!;\n }\n\n return path.join(root, host, pathPart);\n}\n","import path from \"node:path\";\nimport { SUPPORTED_DRIVER_TARGETS } from \"@skaile/workspaces/core\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command, Option } from \"commander\";\nimport pc from \"picocolors\";\nimport { kindColorPad, logInfo, logWarn, S } from \"../helpers.ts\";\n\n/**\n * Creates the `skaile outdated` command.\n *\n * Checks which deployed assets are behind the upstream repo commit and prints\n * a table of outdated entries with their commit-behind count.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#outdated\n */\nexport function makeOutdatedCommand(): Command {\n return new Command(\"outdated\")\n .description(\"Check for assets behind their repo\")\n .argument(\"[name]\", \"Check a specific asset (kind:name)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .addOption(\n new Option(\"--target <agent>\", \"Driver target\")\n .default(\"claude-code\")\n .choices(SUPPORTED_DRIVER_TARGETS),\n )\n .action((name: string | undefined, opts) => {\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n driverTarget: opts.target,\n });\n const entries = am.outdated();\n if (entries.length === 0) {\n logInfo(\"All assets are up to date.\");\n return;\n }\n\n const filtered = name\n ? entries.filter((e) => `${e.kind}:${e.name}` === name || e.name === name)\n : entries;\n if (filtered.length === 0) {\n logInfo(`${name} is up to date.`);\n return;\n }\n\n const nameW = Math.max(4, ...filtered.map((e) => e.name.length));\n console.log();\n console.log(S.heading(\" Outdated Assets\"));\n console.log(` ${S.rule(nameW + 40)}`);\n for (const e of filtered) {\n console.log(\n ` ${kindColorPad(e.kind)} ${e.name.padEnd(nameW)} ${S.dim(e.repository)} ${pc.yellow(`${e.behind} commit(s) behind`)}`,\n );\n }\n console.log();\n logWarn(`Run ${S.cmd(\"skaile update\")} to re-deploy.`);\n });\n}\n","import path from \"node:path\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport { logErr, logOk, S } from \"../helpers.ts\";\n\n/**\n * Creates the `skaile patch` command group.\n *\n * Manages the local patch workflow for improving deployed assets without\n * modifying the upstream repo directly. Subcommands: `extract` (copy asset\n * to `.skaile/patches/`), `commit` (generate a `.patch` file from edits),\n * `submit` (apply patch to the repo clone), `remove` (clean up after merge).\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/patch#make-patch-command\n */\nexport function makePatchCommand(): Command {\n const cmd = new Command(\"patch\").description(\"Patch workflow for skill improvement\");\n\n cmd\n .command(\"extract <ref>\")\n .alias(\"start\")\n .description(\"Extract asset for local editing\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((ref: string, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n try {\n const dest = am.patch(ref);\n logOk(`Extracted to ${S.dim(dest)}`);\n console.log(` Edit the files, then run ${S.cmd(`skaile patch commit ${ref}`)}`);\n } catch (err) {\n logErr(String(err));\n process.exit(1);\n }\n });\n\n cmd\n .command(\"commit <ref>\")\n .description(\"Generate .patch file from edits\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((ref: string, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n try {\n const patchFile = am.patchCommit(ref);\n logOk(`Patch saved to ${S.dim(patchFile)}`);\n console.log(` Add to skaile.yaml patches section, then run ${S.cmd(\"skaile install\")}`);\n } catch (err) {\n logErr(String(err));\n process.exit(1);\n }\n });\n\n cmd\n .command(\"submit <ref>\")\n .description(\"Apply patch to repo clone and prepare for PR\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((ref: string, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n try {\n am.patchSubmit(ref);\n logOk(\"Patch applied to repo clone and committed.\");\n console.log(\n ` Push upstream from the source repo directly — the legacy ${S.cmd(\"skaile repo contrib push\")} command was removed on 2026-05-12.`,\n );\n } catch (err) {\n logErr(String(err));\n process.exit(1);\n }\n });\n\n cmd\n .command(\"remove <ref>\")\n .description(\"Remove local patch after upstream merge\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((ref: string, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n am.patchRemove(ref);\n logOk(`Patch removed for ${ref}`);\n });\n\n cmd.action(() => cmd.help());\n return cmd;\n}\n","import { existsSync } from \"node:fs\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { buildClaudePluginFiles } from \"@skaile/workspaces/workspace-plugin\";\nimport type { BackendStatus, InstallResult, ToggleResult, UninstallResult } from \"./types.ts\";\n\nconst SKAILE_MCP_NAME = \"skaile-workspace\";\n\nconst MCP_SERVER_ENTRY = {\n command: \"skaile\",\n args: [\"mcp-server\"],\n env: {} as Record<string, string>,\n};\n\ninterface ClaudeSettings {\n plugins?: string[];\n enabledPlugins?: string[];\n disabledPlugins?: string[];\n disabledMcpjsonServers?: string[];\n [k: string]: unknown;\n}\n\ninterface ClaudeMcpFile {\n mcpServers?: Record<string, unknown>;\n [k: string]: unknown;\n}\n\n/** Absolute path to the generated Claude Code plugin directory. */\nfunction pluginDir(projectDir: string): string {\n return path.join(projectDir, \".claude\", \"plugins\", \"skaile\");\n}\n\nasync function readJsonStrict<T>(p: string): Promise<T | null> {\n let raw: string;\n try {\n raw = await fs.readFile(p, \"utf-8\");\n } catch {\n return null;\n }\n try {\n return JSON.parse(raw) as T;\n } catch (e: unknown) {\n throw new Error(\n `cannot parse ${p}: ${e instanceof Error ? e.message : String(e)}; please fix or remove`,\n );\n }\n}\n\nasync function writeJson(p: string, value: unknown): Promise<void> {\n await fs.mkdir(path.dirname(p), { recursive: true });\n await fs.writeFile(p, `${JSON.stringify(value, null, 2)}\\n`);\n}\n\nasync function copyDir(src: string, dest: string): Promise<void> {\n await fs.mkdir(dest, { recursive: true });\n const entries = await fs.readdir(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n if (entry.isDirectory()) await copyDir(srcPath, destPath);\n else await fs.copyFile(srcPath, destPath);\n }\n}\n\n// ── install ────────────────────────────────────────────────────────────────\n\n/**\n * Install the skaile integration for Claude Code.\n *\n * Two modes:\n * - **mcp** (default) — write `.claude/mcp.json` pointing at `skaile mcp-server`.\n * - **full** (`opts.full`) — generate the `.claude/plugins/skaile/` directory\n * (MCP + lifecycle hooks) and register it in `.claude/settings.json`.\n */\nexport async function install(\n projectDir: string,\n opts?: { full?: boolean },\n): Promise<InstallResult> {\n return opts?.full ? installFullPlugin(projectDir) : installMcp(projectDir);\n}\n\nasync function installMcp(projectDir: string): Promise<InstallResult> {\n const mcpPath = path.join(projectDir, \".claude\", \"mcp.json\");\n const existing = (await readJsonStrict<ClaudeMcpFile>(mcpPath)) ?? {};\n const mcpServers = { ...(existing.mcpServers ?? {}) };\n const previous = mcpServers[SKAILE_MCP_NAME];\n const matches = previous && JSON.stringify(previous) === JSON.stringify(MCP_SERVER_ENTRY);\n let warning: string | undefined;\n if (previous && !matches) {\n warning = `overwrote existing ${SKAILE_MCP_NAME} entry in ${path.relative(projectDir, mcpPath)}`;\n }\n mcpServers[SKAILE_MCP_NAME] = MCP_SERVER_ENTRY;\n await writeJson(mcpPath, { ...existing, mcpServers });\n return { changed: !matches, method: \"mcp\", warning };\n}\n\nasync function installFullPlugin(projectDir: string): Promise<InstallResult> {\n const dir = pluginDir(projectDir);\n\n // Generate the plugin directory from the in-memory file map.\n for (const [rel, content] of Object.entries(buildClaudePluginFiles())) {\n const dest = path.join(dir, rel);\n await fs.mkdir(path.dirname(dest), { recursive: true });\n await fs.writeFile(dest, content);\n }\n\n // Populate skills/ from the project's .skaile/skills/.\n const projectSkillsDir = path.join(projectDir, \".skaile\", \"skills\");\n if (existsSync(projectSkillsDir)) {\n await copyDir(projectSkillsDir, path.join(dir, \"skills\"));\n }\n\n // Register the generated dir in .claude/settings.json#plugins[].\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const settings = (await readJsonStrict<ClaudeSettings>(settingsPath)) ?? {};\n const plugins = settings.plugins ?? [];\n if (!plugins.includes(dir)) plugins.push(dir);\n await writeJson(settingsPath, { ...settings, plugins });\n\n return { changed: true, method: \"plugin\" };\n}\n\n// ── uninstall ──────────────────────────────────────────────────────────────\n\nexport async function uninstall(projectDir: string): Promise<UninstallResult> {\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const mcpPath = path.join(projectDir, \".claude\", \"mcp.json\");\n const dir = pluginDir(projectDir);\n\n let changed = false;\n\n // Remove the generated plugin dir from plugins[] if registered.\n const settings = await readJsonStrict<ClaudeSettings>(settingsPath);\n if (settings && Array.isArray(settings.plugins)) {\n const next = settings.plugins.filter((p) => p !== dir);\n if (next.length !== settings.plugins.length) {\n changed = true;\n const updated: ClaudeSettings = { ...settings, plugins: next };\n if (next.length === 0) delete updated.plugins;\n await writeJson(settingsPath, updated);\n }\n }\n\n // Delete the generated plugin directory.\n if (existsSync(dir)) {\n await fs.rm(dir, { recursive: true, force: true });\n changed = true;\n }\n\n // Remove from .claude/mcp.json if present.\n const mcp = await readJsonStrict<ClaudeMcpFile>(mcpPath);\n if (mcp?.mcpServers && SKAILE_MCP_NAME in mcp.mcpServers) {\n changed = true;\n const { [SKAILE_MCP_NAME]: _removed, ...rest } = mcp.mcpServers;\n const updated: ClaudeMcpFile = { ...mcp, mcpServers: rest };\n if (Object.keys(rest).length === 0) delete updated.mcpServers;\n if (Object.keys(updated).length === 0) {\n await fs.unlink(mcpPath);\n } else {\n await writeJson(mcpPath, updated);\n }\n }\n\n return { changed };\n}\n\n// ── enable / disable ───────────────────────────────────────────────────────\n\nasync function detectInstall(\n projectDir: string,\n): Promise<{ method: \"plugin\" | \"mcp\"; pluginPath?: string } | null> {\n const dir = pluginDir(projectDir);\n const settings = await readJsonStrict<ClaudeSettings>(\n path.join(projectDir, \".claude\", \"settings.json\"),\n );\n if (\n existsSync(path.join(dir, \".claude-plugin\", \"plugin.json\")) &&\n settings?.plugins?.includes(dir)\n ) {\n return { method: \"plugin\", pluginPath: dir };\n }\n\n const mcp = await readJsonStrict<ClaudeMcpFile>(path.join(projectDir, \".claude\", \"mcp.json\"));\n if (mcp?.mcpServers && SKAILE_MCP_NAME in mcp.mcpServers) {\n return { method: \"mcp\" };\n }\n return null;\n}\n\nexport async function enable(projectDir: string): Promise<ToggleResult> {\n const detected = await detectInstall(projectDir);\n if (!detected) throw new Error(\"plugin not installed for claude-code\");\n\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const settings = (await readJsonStrict<ClaudeSettings>(settingsPath)) ?? {};\n\n if (detected.method === \"plugin\") {\n const disabled = settings.disabledPlugins ?? [];\n const next = disabled.filter((p) => p !== detected.pluginPath);\n if (next.length === disabled.length) return { changed: false };\n const updated: ClaudeSettings = { ...settings, disabledPlugins: next };\n if (next.length === 0) delete updated.disabledPlugins;\n await writeJson(settingsPath, updated);\n return { changed: true };\n }\n\n const disabled = settings.disabledMcpjsonServers ?? [];\n const next = disabled.filter((n) => n !== SKAILE_MCP_NAME);\n if (next.length === disabled.length) return { changed: false };\n const updated: ClaudeSettings = { ...settings, disabledMcpjsonServers: next };\n if (next.length === 0) delete updated.disabledMcpjsonServers;\n await writeJson(settingsPath, updated);\n return { changed: true };\n}\n\nexport async function disable(projectDir: string): Promise<ToggleResult> {\n const detected = await detectInstall(projectDir);\n if (!detected) throw new Error(\"plugin not installed for claude-code\");\n\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const settings = (await readJsonStrict<ClaudeSettings>(settingsPath)) ?? {};\n\n if (detected.method === \"plugin\") {\n const list = settings.disabledPlugins ?? [];\n if (list.includes(detected.pluginPath as string)) return { changed: false };\n await writeJson(settingsPath, {\n ...settings,\n disabledPlugins: [...list, detected.pluginPath as string],\n });\n return { changed: true };\n }\n\n const list = settings.disabledMcpjsonServers ?? [];\n if (list.includes(SKAILE_MCP_NAME)) return { changed: false };\n await writeJson(settingsPath, {\n ...settings,\n disabledMcpjsonServers: [...list, SKAILE_MCP_NAME],\n });\n return { changed: true };\n}\n\n// ── status ─────────────────────────────────────────────────────────────────\n\nexport async function status(projectDir: string): Promise<BackendStatus> {\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const mcpPath = path.join(projectDir, \".claude\", \"mcp.json\");\n const dir = pluginDir(projectDir);\n const settings = await readJsonStrict<ClaudeSettings>(settingsPath);\n const mcp = await readJsonStrict<ClaudeMcpFile>(mcpPath);\n\n const pluginInstalled = !!(\n existsSync(path.join(dir, \".claude-plugin\", \"plugin.json\")) && settings?.plugins?.includes(dir)\n );\n const mcpInstalled = !!(mcp?.mcpServers && SKAILE_MCP_NAME in mcp.mcpServers);\n\n if (!pluginInstalled && !mcpInstalled) {\n return {\n backend: \"claude-code\",\n installed: \"no\",\n enabled: \"n/a\",\n method: \"—\",\n location: \"—\",\n };\n }\n\n if (pluginInstalled) {\n const disabled = settings?.disabledPlugins?.includes(dir) ?? false;\n return {\n backend: \"claude-code\",\n installed: \"yes\",\n enabled: disabled ? \"no\" : \"yes\",\n method: \"plugin\",\n location: path.relative(projectDir, dir),\n };\n }\n\n const disabled = settings?.disabledMcpjsonServers?.includes(SKAILE_MCP_NAME) ?? false;\n return {\n backend: \"claude-code\",\n installed: \"yes\",\n enabled: disabled ? \"no\" : \"yes\",\n method: \"mcp\",\n location: path.relative(projectDir, mcpPath),\n };\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { parse as parseToml, stringify as stringifyToml } from \"smol-toml\";\nimport type { BackendStatus, InstallResult, UninstallResult } from \"./types.ts\";\n\nconst SKAILE_MCP_NAME = \"skaile-workspace\";\n\ninterface CodexMcpEntry {\n command: string;\n args: string[];\n env: Record<string, string>;\n}\n\ninterface CodexConfig {\n mcp_servers?: Record<string, CodexMcpEntry>;\n [k: string]: unknown;\n}\n\nfunction buildEntry(projectDir: string): CodexMcpEntry {\n return {\n command: \"skaile\",\n args: [\"mcp-server\"],\n env: { SKAILE_PROJECT_DIR: projectDir },\n };\n}\n\nasync function readConfig(p: string): Promise<CodexConfig | null> {\n let raw: string;\n try {\n raw = await fs.readFile(p, \"utf-8\");\n } catch {\n return null;\n }\n try {\n return parseToml(raw) as CodexConfig;\n } catch (e: unknown) {\n throw new Error(\n `cannot parse ${p}: ${e instanceof Error ? e.message : String(e)}; please fix or remove`,\n );\n }\n}\n\nasync function writeConfig(p: string, value: CodexConfig): Promise<void> {\n await fs.mkdir(path.dirname(p), { recursive: true });\n // smol-toml's stringify rejects undefined keys; drop empty containers.\n const cleaned: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n if (v === undefined) continue;\n cleaned[k] = v;\n }\n await fs.writeFile(p, stringifyToml(cleaned));\n}\n\nfunction configPath(projectDir: string): string {\n return path.join(projectDir, \".codex\", \"config.toml\");\n}\n\nexport async function install(projectDir: string): Promise<InstallResult> {\n const p = configPath(projectDir);\n const cfg = (await readConfig(p)) ?? {};\n const next = buildEntry(projectDir);\n\n const servers = { ...(cfg.mcp_servers ?? {}) };\n const previous = servers[SKAILE_MCP_NAME];\n const matches = previous && JSON.stringify(previous) === JSON.stringify(next);\n let warning: string | undefined;\n if (previous && !matches) {\n warning = `overwrote existing ${SKAILE_MCP_NAME} entry in ${path.relative(projectDir, p)}`;\n }\n if (matches) return { changed: false, method: \"toml\" };\n\n servers[SKAILE_MCP_NAME] = next;\n await writeConfig(p, { ...cfg, mcp_servers: servers });\n return { changed: true, method: \"toml\", warning };\n}\n\nexport async function uninstall(projectDir: string): Promise<UninstallResult> {\n const p = configPath(projectDir);\n const cfg = await readConfig(p);\n if (!cfg?.mcp_servers || !(SKAILE_MCP_NAME in cfg.mcp_servers)) {\n return { changed: false };\n }\n const { [SKAILE_MCP_NAME]: _removed, ...rest } = cfg.mcp_servers;\n const updated: CodexConfig = { ...cfg, mcp_servers: rest };\n if (Object.keys(rest).length === 0) delete updated.mcp_servers;\n\n if (Object.keys(updated).length === 0) {\n await fs.unlink(p);\n } else {\n await writeConfig(p, updated);\n }\n return { changed: true };\n}\n\nexport async function status(projectDir: string): Promise<BackendStatus> {\n const p = configPath(projectDir);\n const cfg = await readConfig(p);\n const installed = !!(cfg?.mcp_servers && SKAILE_MCP_NAME in cfg.mcp_servers);\n\n if (!installed) {\n return {\n backend: \"codex\",\n installed: \"no\",\n enabled: \"n/a\",\n method: \"—\",\n location: \"—\",\n };\n }\n return {\n backend: \"codex\",\n installed: \"yes\",\n enabled: \"n/a\",\n method: \"mcp\",\n location: path.relative(projectDir, p),\n };\n}\n","import { existsSync } from \"node:fs\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { BackendStatus, InstallResult, UninstallResult } from \"./types.ts\";\n\n/**\n * Install the skaile integration for OMP.\n *\n * Always generates `.omp/extensions/skaile.ts` via `buildOmpExtensionSource()`\n * — there is no npm-package path. The only runtime dependency of the\n * generated extension is `@skaile/workspaces`.\n */\nexport async function install(projectDir: string): Promise<InstallResult> {\n const extDir = path.join(projectDir, \".omp\", \"extensions\");\n const extPath = path.join(extDir, \"skaile.ts\");\n await fs.mkdir(extDir, { recursive: true });\n\n const { WorkspacePlugin } = await import(\"@skaile/workspaces/workspace-plugin\");\n const plugin = new WorkspacePlugin({ projectDir });\n const nextSrc = await plugin.buildOmpExtensionSource();\n\n let prevSrc: string | null = null;\n try {\n prevSrc = await fs.readFile(extPath, \"utf-8\");\n } catch {\n /* file doesn't exist yet */\n }\n\n if (prevSrc === nextSrc) return { changed: false, method: \"generated\" };\n await fs.writeFile(extPath, nextSrc);\n return { changed: true, method: \"generated\" };\n}\n\nexport async function uninstall(projectDir: string): Promise<UninstallResult> {\n const extPath = path.join(projectDir, \".omp\", \"extensions\", \"skaile.ts\");\n try {\n await fs.unlink(extPath);\n return { changed: true };\n } catch {\n return { changed: false };\n }\n}\n\nexport async function status(projectDir: string): Promise<BackendStatus> {\n const extPath = path.join(projectDir, \".omp\", \"extensions\", \"skaile.ts\");\n if (existsSync(extPath)) {\n return {\n backend: \"omp\",\n installed: \"yes\",\n enabled: \"n/a\",\n method: \"extension\",\n location: path.relative(projectDir, extPath),\n };\n }\n return {\n backend: \"omp\",\n installed: \"no\",\n enabled: \"n/a\",\n method: \"—\",\n location: \"—\",\n };\n}\n","// cli/src/commands/plugin.ts\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport * as claudeCode from \"./plugin/claude-code.ts\";\nimport * as codex from \"./plugin/codex.ts\";\nimport * as omp from \"./plugin/omp.ts\";\nimport type { BackendName, BackendStatus } from \"./plugin/types.ts\";\n\nconst ALL_BACKENDS: readonly BackendName[] = [\"claude-code\", \"omp\", \"codex\"];\nconst TOGGLE_SUPPORTED: readonly BackendName[] = [\"claude-code\"];\n\nfunction resolveDriver(driver: string): BackendName[] {\n if (driver === \"all\") return [...ALL_BACKENDS];\n if (driver === \"claude-code\" || driver === \"omp\" || driver === \"codex\") return [driver];\n throw new Error(`unknown driver: ${driver} (expected: claude-code | omp | codex | all)`);\n}\n\ninterface RunOptions {\n driver: string;\n projectDir: string;\n /** Claude Code only — generate the full `.claude/plugins/skaile/` directory. */\n full?: boolean;\n}\n\nasync function runInstall(opts: RunOptions): Promise<number> {\n const projectDir = path.resolve(opts.projectDir);\n const targets = resolveDriver(opts.driver);\n let exitCode = 0;\n\n if (targets.includes(\"claude-code\")) {\n try {\n const r = await claudeCode.install(projectDir, { full: opts.full });\n if (r.warning) logWarn(r.warning);\n if (r.method === \"plugin\") {\n logOk(\n `Generated ${S.cmd(\".claude/plugins/skaile/\")} and registered it in ${S.cmd(\".claude/settings.json\")}`,\n );\n } else if (r.changed) {\n logOk(`Wrote ${S.cmd(\".claude/mcp.json\")} (${SKAILE_MCP_LABEL})`);\n } else {\n logInfo(`claude-code: already installed (mcp)`);\n }\n console.log(` ${S.dim(\"→\")} Restart Claude Code to pick up the change.`);\n } catch (e: unknown) {\n logErr(`claude-code install: ${e instanceof Error ? e.message : String(e)}`);\n exitCode = 1;\n }\n }\n\n if (targets.includes(\"omp\")) {\n try {\n const r = await omp.install(projectDir);\n if (r.changed) {\n logOk(`Wrote ${S.cmd(\".omp/extensions/skaile.ts\")} (${r.method})`);\n } else {\n logInfo(`omp: already installed (${r.method})`);\n }\n console.log(` ${S.dim(\"→\")} OMP auto-discovers extensions on next startup.`);\n } catch (e: unknown) {\n logErr(`omp install: ${e instanceof Error ? e.message : String(e)}`);\n exitCode = 1;\n }\n }\n\n if (targets.includes(\"codex\")) {\n try {\n const r = await codex.install(projectDir);\n if (r.warning) logWarn(r.warning);\n if (r.changed) {\n logOk(`Wrote ${S.cmd(\".codex/config.toml\")} (${SKAILE_MCP_LABEL})`);\n } else {\n logInfo(`codex: already installed`);\n }\n console.log(` ${S.dim(\"→\")} Restart Codex CLI to pick up the change.`);\n } catch (e: unknown) {\n logErr(`codex install: ${e instanceof Error ? e.message : String(e)}`);\n exitCode = 1;\n }\n }\n\n if (exitCode === 0) logOk(\"Plugin installed.\");\n return exitCode;\n}\n\nasync function runUninstall(opts: RunOptions): Promise<number> {\n const projectDir = path.resolve(opts.projectDir);\n const targets = resolveDriver(opts.driver);\n let exitCode = 0;\n\n if (targets.includes(\"claude-code\")) {\n try {\n const r = await claudeCode.uninstall(projectDir);\n if (r.changed) logOk(`Removed skaile entries from ${S.cmd(\".claude/\")}`);\n else logInfo(`claude-code: not installed`);\n } catch (e: unknown) {\n logErr(`claude-code uninstall: ${e instanceof Error ? e.message : String(e)}`);\n exitCode = 1;\n }\n }\n\n if (targets.includes(\"omp\")) {\n try {\n const r = await omp.uninstall(projectDir);\n if (r.changed) logOk(`Removed ${S.cmd(\".omp/extensions/skaile.ts\")}`);\n else logInfo(`omp: not installed`);\n } catch (e: unknown) {\n logErr(`omp uninstall: ${e instanceof Error ? e.message : String(e)}`);\n exitCode = 1;\n }\n }\n\n if (targets.includes(\"codex\")) {\n try {\n const r = await codex.uninstall(projectDir);\n if (r.changed) logOk(`Removed skaile entry from ${S.cmd(\".codex/config.toml\")}`);\n else logInfo(`codex: not installed`);\n } catch (e: unknown) {\n logErr(`codex uninstall: ${e instanceof Error ? e.message : String(e)}`);\n exitCode = 1;\n }\n }\n\n if (exitCode === 0) logOk(\"Plugin uninstalled.\");\n return exitCode;\n}\n\nasync function runToggle(opts: RunOptions, action: \"enable\" | \"disable\"): Promise<number> {\n const projectDir = path.resolve(opts.projectDir);\n const requestedAll = opts.driver === \"all\";\n const targets = resolveDriver(opts.driver);\n\n // For explicit unsupported drivers, fail with usage error.\n if (!requestedAll) {\n const unsupported = targets.filter((t) => !TOGGLE_SUPPORTED.includes(t));\n if (unsupported.length > 0) {\n logErr(\n `${action} is only supported for claude-code; for ${unsupported.join(\", \")} use uninstall/install`,\n );\n return 2;\n }\n }\n\n let exitCode = 0;\n\n for (const t of targets) {\n if (!TOGGLE_SUPPORTED.includes(t)) {\n logInfo(`${t}: ${action} not supported; skipping`);\n continue;\n }\n if (t === \"claude-code\") {\n try {\n const r =\n action === \"enable\"\n ? await claudeCode.enable(projectDir)\n : await claudeCode.disable(projectDir);\n if (r.changed) {\n logOk(`claude-code: ${action}d`);\n } else {\n logInfo(`claude-code: already ${action}d`);\n }\n } catch (e: unknown) {\n logErr(`claude-code ${action}: ${e instanceof Error ? e.message : String(e)}`);\n exitCode = 1;\n }\n }\n }\n\n return exitCode;\n}\n\nasync function runStatus(opts: RunOptions): Promise<number> {\n const projectDir = path.resolve(opts.projectDir);\n const targets = resolveDriver(opts.driver);\n const rows: BackendStatus[] = [];\n let exitCode = 0;\n\n for (const t of targets) {\n try {\n if (t === \"claude-code\") rows.push(await claudeCode.status(projectDir));\n else if (t === \"omp\") rows.push(await omp.status(projectDir));\n else rows.push(await codex.status(projectDir));\n } catch (e: unknown) {\n logErr(`${t} status: ${e instanceof Error ? e.message : String(e)}`);\n exitCode = 1;\n }\n }\n\n printStatusTable(rows);\n return exitCode;\n}\n\nfunction printStatusTable(rows: BackendStatus[]): void {\n if (rows.length === 0) return;\n\n const cols: Array<{ key: keyof BackendStatus; header: string }> = [\n { key: \"backend\", header: \"backend\" },\n { key: \"installed\", header: \"installed\" },\n { key: \"enabled\", header: \"enabled\" },\n { key: \"method\", header: \"method\" },\n { key: \"location\", header: \"location\" },\n ];\n\n const widths = cols.map((c) =>\n Math.max(c.header.length, ...rows.map((r) => String(r[c.key] ?? \"\").length)),\n );\n\n const fmtRow = (parts: string[]): string =>\n parts.map((p, i) => p.padEnd(widths[i] ?? p.length)).join(\" \");\n\n console.log();\n console.log(` ${S.heading(fmtRow(cols.map((c) => c.header)))}`);\n for (const r of rows) {\n console.log(` ${fmtRow(cols.map((c) => String(r[c.key] ?? \"\")))}`);\n if (r.detail) console.log(` ${S.dim(r.detail)}`);\n }\n console.log();\n}\n\nconst SKAILE_MCP_LABEL = \"skaile-workspace entry\";\n\n// ── Claude Code lifecycle hooks ─────────────────────────────────────────────\n\nconst HOOK_EVENTS = [\"session-start\", \"session-end\", \"user-prompt-submit\"] as const;\ntype HookEvent = (typeof HOOK_EVENTS)[number];\n\n/**\n * Run a Claude Code lifecycle hook.\n *\n * Replaces the three former loose `.mjs` hook scripts. The Claude Code plugin\n * generated by `buildClaudePluginFiles()` wires each lifecycle event to\n * `skaile plugin hook <event>`.\n *\n * Structured logging is routed to stderr so the JSON result this hook writes\n * to stdout stays uncorrupted.\n *\n * @param event - The lifecycle event to run.\n */\nasync function runHook(event: HookEvent): Promise<void> {\n // stdout carries the hook's JSON result — route all logging to stderr.\n const { LogStore, StdoutSink, registerLogStore } = await import(\n \"@skaile/workspaces/core/logging\"\n );\n registerLogStore(\n new LogStore({\n sessionId: `hook-${event}`,\n level: \"info\",\n sinks: [new StdoutSink({ stream: \"stderr\" })],\n }),\n );\n\n const { WorkspacePlugin, PluginStore, resolveProjectDir } = await import(\n \"@skaile/workspaces/workspace-plugin\"\n );\n const projectDir = resolveProjectDir([\"CLAUDE_PROJECT_DIR\"]);\n\n if (event === \"session-start\") {\n const plugin = new WorkspacePlugin({ projectDir, bootOwned: true });\n await plugin.boot();\n const additionalContext = plugin.buildSystemPromptSection();\n process.stdout.write(\n `${JSON.stringify({\n hookSpecificOutput: { hookEventName: \"SessionStart\", additionalContext },\n })}\\n`,\n );\n await plugin.shutdown();\n return;\n }\n\n if (event === \"session-end\") {\n const plugin = new WorkspacePlugin({ projectDir, bootOwned: true });\n await plugin.boot();\n await plugin.store.flush();\n await plugin.shutdown();\n return;\n }\n\n // user-prompt-submit — lightweight: read PluginStore from disk, no full boot.\n const store = new PluginStore(path.join(projectDir, \".skaile\", \"plugin-state.json\"));\n await store.load();\n const status = store.get(\"connector:status\");\n if (status && typeof status === \"object\" && Object.keys(status as object).length > 0) {\n process.stdout.write(\n `${JSON.stringify({\n hookSpecificOutput: {\n hookEventName: \"UserPromptSubmit\",\n additionalContext: `Connector status update: ${JSON.stringify(status)}`,\n },\n })}\\n`,\n );\n }\n}\n\n// ── CLI command ────────────────────────────────────────────────────────────\n\n/**\n * Creates the `skaile plugin` command group.\n *\n * Manages the skaile workspace plugin installation across coding agent backends\n * (Claude Code, OMP, Codex). Subcommands: `install`, `uninstall`, `enable`,\n * `disable`, `status`. All subcommands accept `--driver` to target a specific\n * backend or `all`.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/plugin#make-plugin-command\n */\nexport function makePluginCommand(): Command {\n const cmd = new Command(\"plugin\").description(\n \"Manage skaile workspace plugin (Claude Code / OMP / Codex)\",\n );\n\n cmd\n .command(\"install\")\n .description(\"Install skaile workspace plugin\")\n .option(\"--driver <name>\", \"Target: claude-code | omp | codex | all\", \"all\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\n \"--full\",\n \"Claude Code: generate the full .claude/plugins/skaile/ directory (MCP + hooks) instead of the default MCP-only install\",\n )\n .action(async (opts: RunOptions) => {\n process.exitCode = await runInstall(opts);\n });\n\n cmd\n .command(\"uninstall\")\n .description(\"Uninstall skaile workspace plugin\")\n .option(\"--driver <name>\", \"Target: claude-code | omp | codex | all\", \"all\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts: RunOptions) => {\n process.exitCode = await runUninstall(opts);\n });\n\n cmd\n .command(\"enable\")\n .description(\"Enable an installed plugin (claude-code only)\")\n .option(\"--driver <name>\", \"Target: claude-code | all\", \"claude-code\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts: RunOptions) => {\n process.exitCode = await runToggle(opts, \"enable\");\n });\n\n cmd\n .command(\"disable\")\n .description(\"Disable an installed plugin (claude-code only)\")\n .option(\"--driver <name>\", \"Target: claude-code | all\", \"claude-code\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts: RunOptions) => {\n process.exitCode = await runToggle(opts, \"disable\");\n });\n\n cmd\n .command(\"status\")\n .description(\"Show install / enable status across backends\")\n .option(\"--driver <name>\", \"Target: claude-code | omp | codex | all\", \"all\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts: RunOptions) => {\n process.exitCode = await runStatus(opts);\n });\n\n cmd\n .command(\"hook <event>\")\n .description(\n \"Run a Claude Code lifecycle hook (session-start | session-end | user-prompt-submit)\",\n )\n .action(async (event: string) => {\n try {\n if (!HOOK_EVENTS.includes(event as HookEvent)) {\n process.stderr.write(\n `plugin hook: unknown event '${event}' (expected: ${HOOK_EVENTS.join(\" | \")})\\n`,\n );\n } else {\n await runHook(event as HookEvent);\n }\n } catch (err) {\n // Never block the agent — hooks always exit 0.\n process.stderr.write(\n `plugin hook ${event} warning: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n }\n process.exit(0);\n });\n\n cmd.action(() => cmd.help());\n return cmd;\n}\n","/**\n * skaile preset — scaffold and validate preset YAML files.\n *\n * Subcommands: init, validate.\n * Delegates to @skaile/library preset module for parsing and validation.\n */\n\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\n\n/**\n * Creates the `skaile preset` command group.\n *\n * Scaffolds and validates preset YAML files used by the Asset Store v2.\n * Subcommands: `init [name]` (scaffold a `.preset.yaml` template) and\n * `validate <path>` (schema + cycle + nesting-depth check).\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#preset\n */\nexport function makePresetCommand(): Command {\n const cmd = new Command(\"preset\").description(\"Scaffold and validate preset YAML files\");\n\n // ── preset init ─────────────────────────────────────────────────────────\n\n cmd\n .command(\"init [name]\")\n .description(\"Scaffold a new .preset.yaml file\")\n .option(\"--dir <path>\", \"Output directory\", process.cwd())\n .action(async (name: string | undefined, opts: { dir: string }) => {\n const presetName = name ?? \"my-preset\";\n const filename = `${presetName}.preset.yaml`;\n const outPath = path.join(path.resolve(opts.dir), filename);\n\n if (existsSync(outPath)) {\n logErr(`File already exists: ${outPath}`);\n logInfo(\"Choose a different name or remove the existing file.\");\n process.exit(1);\n }\n\n const template = generatePresetTemplate(presetName);\n writeFileSync(outPath, template, \"utf-8\");\n logOk(`Created ${S.brand(filename)}`);\n logInfo(`Path: ${outPath}`);\n logInfo(\"Edit the file to define your preset items, then validate with:\");\n logInfo(` skaile preset validate ${filename}`);\n });\n\n // ── preset validate ─────────────────────────────────────────────────────\n\n cmd\n .command(\"validate <path>\")\n .description(\"Validate a preset YAML file (schema + cycles + nesting depth)\")\n .action(async (filePath: string) => {\n const resolved = path.resolve(filePath);\n if (!existsSync(resolved)) {\n logErr(`File not found: ${resolved}`);\n process.exit(1);\n }\n\n const content = readFileSync(resolved, \"utf-8\");\n\n // Parse\n const { parsePresetYaml, detectNestedPresetRefs } = await import(\n \"@skaile/workspaces/library\"\n );\n\n const parseResult = parsePresetYaml(content);\n if (!parseResult.ok) {\n logErr(\"Preset validation failed (parse errors):\");\n for (const err of parseResult.errors) {\n console.log(` ${S.err(\"✗\")} ${err}`);\n }\n process.exit(1);\n }\n\n // Note: ParseResult.preset is optional even when ok; on `ok: true` it's\n // always set by parsePreset(), but TypeScript can't infer that. Guard.\n if (!parseResult.preset) {\n logErr(\"Preset validation failed: parser returned no manifest\");\n process.exit(1);\n }\n const preset = parseResult.preset;\n let hasWarnings = false;\n\n // Check structural nesting: detectNestedPresetRefs requires a known-refs\n // set, which we don't have at structural-validation time. The full\n // depth check runs at apply-time via validateNestingDepth(presetRef,\n // currentDepth) inside applyPresetWithLibrary. Surface a count only.\n const nestedRefs = detectNestedPresetRefs(preset);\n if (nestedRefs.length > 0) {\n logInfo(`Nested preset refs: ${nestedRefs.length} (depth validated at apply-time)`);\n }\n\n // Check for cycle detection (requires resolving refs against library)\n // Phase 1: basic structural validation only. Full cycle detection\n // requires the discovery package's detectCycles() with a requires graph,\n // which needs the full Library context. We validate structure here.\n const { detectCycles } = await import(\"@skaile/workspaces/discovery\");\n\n // Build a mini requires graph from the preset items\n const presetRef = path.basename(resolved, \".preset.yaml\");\n const edges: Array<{ from: string; to: string; field: string }> = [];\n for (const item of preset.items) {\n if (item.ref) {\n edges.push({ from: presetRef, to: item.ref, field: \"items[].ref\" });\n }\n }\n\n if (edges.length > 0) {\n const cycleResult = detectCycles(edges);\n if (!cycleResult.acyclic) {\n logErr(\"Cycle detected in preset references:\");\n if (cycleResult.cyclePath) {\n console.log(` ${S.err(\"✗\")} ${cycleResult.cyclePath.join(\" → \")}`);\n }\n process.exit(1);\n }\n }\n\n // Validate per-item placeholders structure (dry-run with no input values)\n const allPlaceholders = preset.items.flatMap((item: any) => item.placeholders ?? []);\n if (allPlaceholders.length > 0) {\n const { validatePlaceholder } = await import(\"@skaile/workspaces/library\");\n const invalidEntries: Array<{ key: string; errors: string[] }> = [];\n for (const ph of allPlaceholders) {\n // Validate with undefined value — checks structure only, not required-ness\n const result = validatePlaceholder(ph, ph.default);\n if (!result.valid) {\n invalidEntries.push({ key: ph.key, errors: result.errors });\n }\n }\n if (invalidEntries.length > 0) {\n hasWarnings = true;\n logWarn(\"Placeholder issues:\");\n for (const r of invalidEntries) {\n console.log(` ${S.warn(\"!\")} ${r.key}: ${r.errors.join(\", \")}`);\n }\n }\n }\n\n // Summary\n console.log();\n console.log(S.heading(\" Preset Validation\"));\n console.log(` ${S.rule(40)}`);\n console.log(` ${S.label(\"Name\")} ${preset.name}`);\n console.log(` ${S.label(\"Version\")} ${preset.version ?? \"unversioned\"}`);\n console.log(` ${S.label(\"Items\")} ${preset.items.length}`);\n console.log(` ${S.label(\"Inputs\")} ${preset.inputs?.length ?? 0}`);\n console.log(` ${S.label(\"Placeholders\")} ${allPlaceholders.length}`);\n console.log();\n\n if (hasWarnings) {\n logWarn(\"Validation passed with warnings\");\n } else {\n logOk(\"Preset is valid\");\n }\n });\n\n return cmd;\n}\n\n// ── Template ────────────────────────────────────────────────────────────────\n\nfunction generatePresetTemplate(name: string): string {\n return `# ${name}.preset.yaml\n# Polymorphic Preset — composition + configuration primitive for the asset store.\n# See: _devlog/specs/2026-05-03-ai-asset-store-v2-design.md § Presets\n\nname: \"${name}\"\nversion: \"1.0.0\"\ndescription: \"TODO: describe what this preset configures\"\n\n# Placeholders — values the user provides at apply-time.\n# Types: text, multiline, secret, number, boolean, enum, oauth, instance-picker\nplaceholders:\n - key: EXAMPLE_KEY\n type: text\n label: \"Example placeholder\"\n required: true\n # default: \"some-value\"\n # hint: \"Help text shown to the user\"\n\n# Items — each becomes a Library Instance when the preset is applied.\n# Ref types:\n# - Asset ref (kind:publisher/name@pin) → creates new Instance\n# - Library Instance ref (#uuid) → reuses existing Instance\n# - Nested Preset ref (preset:path.preset.yaml) → recursive apply (max depth 3)\nitems:\n - id: example-item\n ref: \"skill:@skaile/example-skill@^1.0\"\n config:\n # Use \\${INPUT:EXAMPLE_KEY} for placeholder interpolation\n setting: \"\\${INPUT:EXAMPLE_KEY}\"\n # credential_ref: \"\\${SECRET:EXAMPLE_KEY}\" # for secret placeholders\n`;\n}\n","import path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { type DriverTarget, readLock } from \"@skaile/workspaces/core\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport type { InstallManifest } from \"@skaile/workspaces/types\";\nimport { colorRef, logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\n\n/**\n * Canonical asset-ref shape accepted by `skaile install <ref>`:\n * `<publisher>/<name>@<version>` with an optional leading `@`. The capture\n * groups are publisher, name, and version.\n */\nconst ASSET_REF_RE = /^@?([^/@\\s]+)\\/([^/@\\s]+)@([^/@\\s]+)$/;\n\n/**\n * Minimal catalog-source surface the pointer-only install path needs.\n * `RemoteCatalogSource` satisfies this — narrowing keeps {@link runPointerOnlyInstall}\n * testable with a hand-rolled stub.\n */\nexport interface InstallManifestSource {\n getInstallManifest(ref: string): Promise<InstallManifest>;\n}\n\n/**\n * Capability check: is this catalog source able to serve install manifests?\n *\n * `openCatalogSource` returns a `RemoteCatalogSource | RestCatalogSource`.\n * Only the tRPC-framed `RemoteCatalogSource` implements `getInstallManifest`;\n * the REST-framed `RestCatalogSource` (the default for any catalog URL other\n * than `https://skaile.store`) does not. Calling it unconditionally would be a\n * runtime `TypeError`, so the pointer-only install path must capability-detect\n * first and fail with a clear, actionable message.\n */\nexport function supportsInstallManifest(source: unknown): source is InstallManifestSource {\n return (\n typeof (source as { getInstallManifest?: unknown } | null | undefined)?.getInstallManifest ===\n \"function\"\n );\n}\n\n/**\n * Minimal library surface the pointer-only install path needs.\n * `LocalIndex` satisfies this.\n */\nexport interface InstallLibrary {\n install(manifest: InstallManifest): Promise<{ installPath: string }>;\n}\n\n/**\n * Result of a pointer-only catalog install.\n */\nexport interface PointerOnlyInstallResult {\n /** Absolute path the verified asset bytes were written to. */\n installPath: string;\n /** The pinned upstream commit SHA the asset was fetched at. */\n commitSha: string;\n /** Number of files in the install manifest. */\n fileCount: number;\n}\n\n/**\n * Pointer-only catalog install — the `skaile install <ref>` code path.\n *\n * 1. Resolves the pointer-only {@link InstallManifest} from the Catalog.\n * 2. Hands it to the library, which fetches each file's bytes directly from\n * the upstream repo at the pinned commit, verifies every per-file SHA256\n * plus the composite SHA256, and only then writes the verified files.\n *\n * Both dependencies are injected so the function is unit-testable without a\n * network round-trip. In production the CLI passes a `RemoteCatalogSource`\n * and a `LocalIndex`.\n *\n * @param ref - Asset ref (`<publisher>/<name>@<version>`, optional leading `@`).\n * @param deps - Injected catalog source + library.\n * @returns The install path, pinned commit SHA, and file count.\n * @throws When the ref is malformed, the manifest cannot be resolved, or any\n * hash verification fails. The underlying error message is surfaced as-is.\n */\nexport async function runPointerOnlyInstall(\n ref: string,\n deps: { catalog: InstallManifestSource; library: InstallLibrary },\n): Promise<PointerOnlyInstallResult> {\n const m = ref.match(ASSET_REF_RE);\n if (!m) {\n throw new Error(\n `malformed asset ref '${ref}' — expected <publisher>/<name>@<version> (e.g. skaile/use-exa@1.0.0)`,\n );\n }\n const manifest = await deps.catalog.getInstallManifest(ref);\n // [M1] Identity check: the catalog must not install a different asset than\n // requested. Compare normalised (leading `@` stripped) so `@x/y@1` and\n // `x/y@1` are treated as the same ref.\n const normalizeRef = (r: string): string => r.replace(/^@/, \"\");\n if (normalizeRef(manifest.ref) !== normalizeRef(ref)) {\n throw new Error(\n `catalog identity mismatch: requested '${ref}' but the catalog returned a manifest for '${manifest.ref}'`,\n );\n }\n const { installPath } = await deps.library.install(manifest);\n return {\n installPath,\n commitSha: manifest.source.commitSha,\n fileCount: manifest.files.length,\n };\n}\n\n/**\n * Creates the `skaile install` command.\n *\n * Two modes, selected by argument shape:\n *\n * - `skaile install` (no positional arg) — reads `skaile.yaml` and deploys all\n * declared assets (and their transitive dependencies) to the configured\n * driver target directory. Supports `--locked` for CI-mode install from a\n * lock file.\n * - `skaile install <publisher>/<name>@<version>` — pointer-only catalog\n * install: resolves the pointer-only install manifest from the configured\n * Catalog, fetches each file's bytes directly from the upstream repo at the\n * pinned commit, verifies every per-file + the composite SHA256, then writes\n * the verified files into the local Library.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/project#make-install-command\n */\nexport function makeInstallCommand(): Command {\n return new Command(\"install\")\n .description(\n \"Install dependencies from skaile.yaml, or a single asset by ref (<publisher>/<name>@<version>)\",\n )\n .argument(\"[ref]\", \"Asset ref to install from the Catalog (<publisher>/<name>@<version>)\")\n .option(\"--locked\", \"Install from lock file (CI mode — fails on drift)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--target <agent>\", \"Agent framework\", \"claude-code\")\n .action(async (ref: string | undefined, opts) => {\n // ── Pointer-only catalog install: `skaile install <ref>` ──────────────\n if (ref !== undefined) {\n if (!ASSET_REF_RE.test(ref)) {\n logErr(\n `malformed asset ref '${ref}' — expected <publisher>/<name>@<version> (e.g. skaile/use-exa@1.0.0)`,\n );\n process.exit(1);\n }\n const spinner = p.spinner();\n spinner.start(`Installing ${ref}`);\n try {\n const { openCatalogSource, openLibrary } = await import(\"../open-library.ts\");\n const catalog = await openCatalogSource({ projectDir: path.resolve(opts.projectDir) });\n // [H2] REST-framed catalogs (the default for any catalog URL other\n // than https://skaile.store) cannot serve install manifests. Detect\n // and fail clearly rather than throwing a runtime TypeError.\n if (!supportsInstallManifest(catalog)) {\n throw new Error(\n \"pointer-only install (skaile install <ref>) requires a tRPC-framed Catalog. \" +\n \"The configured catalog uses REST framing, which does not serve install \" +\n \"manifests. Set catalog.url to https://skaile.store, or catalog.framing: trpc, \" +\n \"in ~/.skaile/config.yaml.\",\n );\n }\n const library = await openLibrary();\n try {\n const result = await runPointerOnlyInstall(ref, { catalog, library });\n spinner.stop(\"Done\");\n logOk(`Installed ${colorRef(ref)}`);\n logInfo(`Path: ${S.dim(result.installPath)}`);\n logInfo(`Commit: ${S.dim(result.commitSha)}`);\n logInfo(`Files: ${S.dim(String(result.fileCount))}`);\n } finally {\n library.close();\n }\n } catch (err) {\n spinner.stop(\"Failed\");\n const msg = err instanceof Error ? err.message : String(err);\n if (/unreachable/i.test(msg)) {\n logErr(`asset uninstallable — source commit no longer available (${msg})`);\n } else {\n logErr(msg);\n }\n process.exit(1);\n }\n return;\n }\n\n // ── Legacy install: `skaile install` reads skaile.yaml ────────────────\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n driverTarget: opts.target as DriverTarget,\n });\n const spinner = p.spinner();\n spinner.start(opts.locked ? \"Installing from lock file\" : \"Installing dependencies\");\n try {\n const result = await am.install({ locked: opts.locked });\n spinner.stop(\"Done\");\n if (result.deployed.length > 0) {\n for (const d of result.deployed) logOk(d);\n }\n if (result.removed.length > 0) {\n for (const r of result.removed) logWarn(`Removed: ${r}`);\n }\n if (result.deployed.length === 0 && result.removed.length === 0) {\n logInfo(\"Nothing to install (already up to date).\");\n }\n if (result.missing.length > 0) {\n for (const m of result.missing) logErr(`Missing: ${m}`);\n }\n if (result.collisions.length > 0) {\n for (const c of result.collisions) {\n logWarn(\n `${c.key} resolved from ${S.bold(c.resolvedFrom)}, also found in: ${c.shadowedIn.join(\", \")}. Use @repo qualifier to pin.`,\n );\n }\n }\n if (result.lockWritten) {\n logInfo(`Lock file written: ${S.dim(\"skaile.lock.yaml\")}`);\n }\n } catch (err) {\n spinner.stop(\"Failed\");\n logErr(String(err));\n process.exit(1);\n }\n });\n}\n\n/**\n * Creates the `skaile check` command.\n *\n * Scans all deployed assets for unmet dependency requirements and exits with\n * code 1 if any are found.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/project#make-check-command\n */\nexport function makeCheckCommand(): Command {\n return new Command(\"check\")\n .description(\"Check for unmet requirements\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const issues = am.doctor();\n if (issues.length === 0) {\n logOk(\"All dependencies satisfied.\");\n } else {\n for (const i of issues) {\n logErr(\n `${i.assetKind}:${i.assetName} requires ${i.depKind}:${i.depName} (${i.inRepos ? \"fixable\" : \"not found\"})`,\n );\n }\n process.exit(1);\n }\n });\n}\n\n/**\n * Creates the `skaile clean` command.\n *\n * Removes all skaile-managed assets tracked in `skaile.lock.yaml` from the\n * workspace. With `--all` also removes history, patches, repos, and the lock\n * file itself. Preserves unmanaged (manually placed) assets.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/project#make-clean-command\n */\nexport function makeCleanCommand(): Command {\n return new Command(\"clean\")\n .description(\"Remove all skaile-managed assets from the workspace\")\n .option(\"--all\", \"Full reset: also remove history, patches, repos, and lock file\")\n .option(\"--dry-run\", \"Show what would be removed without doing it\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--target <agent>\", \"Agent framework\", \"claude-code\")\n .action(async (opts) => {\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n driverTarget: opts.target as DriverTarget,\n });\n\n // Preview: load lock file to show what will be cleaned\n const lock = readLock(path.resolve(opts.projectDir, \"skaile.lock.yaml\"));\n\n if (!lock || Object.keys(lock.assets).length === 0) {\n logInfo(\"Nothing to clean (no skaile-managed assets found).\");\n return;\n }\n\n const assetRefs = Object.keys(lock.assets);\n console.log();\n console.log(` ${S.heading(\"Assets to remove:\")} ${S.dim(`(${assetRefs.length})`)}`);\n for (const ref of assetRefs) {\n console.log(` ${colorRef(ref)}`);\n }\n\n if (opts.all) {\n console.log();\n console.log(` ${S.heading(\"Also removing:\")}`);\n console.log(` ${S.dim(\".skaile/history.yaml\")}`);\n console.log(` ${S.dim(\".skaile/patches/\")}`);\n console.log(` ${S.dim(\"skaile.lock.yaml\")}`);\n }\n\n if (opts.dryRun) {\n console.log();\n logInfo(\"Dry run — no changes made.\");\n return;\n }\n\n if (!opts.yes) {\n const confirm = await p.confirm({ message: \"Proceed?\" });\n if (p.isCancel(confirm) || !confirm) {\n logInfo(\"Cancelled.\");\n return;\n }\n }\n\n const result = am.clean({ all: opts.all });\n\n console.log();\n for (const r of result.removed) {\n logOk(`Removed ${r}`);\n }\n for (const s of result.skipped) {\n logWarn(`Skipped ${s.ref}: ${s.reason}`);\n }\n if (result.unmanaged.length > 0) {\n console.log();\n logInfo(`Kept ${result.unmanaged.length} unmanaged asset(s):`);\n for (const u of result.unmanaged) {\n console.log(` ${S.dim(u)}`);\n }\n }\n if (opts.all) {\n console.log();\n logOk(\"Full reset complete.\");\n }\n });\n}\n","/**\n * skaile rebuild <agent> — re-snapshots all inline-snapshot composition items,\n * bumps the prompt version, and writes compile_manifest.json.\n *\n * This command is the manual \"freeze\" step for agents that compose\n * inline-snapshot assets (soul, persona). Running it ensures the\n * agent's prompt content is deterministic until the next rebuild.\n */\n\nimport path from \"node:path\";\nimport { resolveAgentDir } from \"@skaile/workspaces/core\";\nimport {\n compileComposition,\n loadAgentManifest,\n type RepoMap,\n resolveMixin,\n} from \"@skaile/workspaces/runner\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn } from \"../helpers.ts\";\n\n/**\n * Creates the `skaile rebuild` command.\n *\n * Re-snapshots all inline-snapshot composition items for an agent, bumps the\n * prompt version, and writes `compile_manifest.json`. This is the manual\n * \"freeze\" step to make an agent's composed prompt deterministic.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#rebuild\n */\nexport function makeRebuildCommand(): Command {\n return new Command(\"rebuild\")\n .description(\"Re-snapshot inline-snapshot composition items and bump prompt version\")\n .argument(\"[agent]\", \"Agent name or path (defaults to current project agent)\")\n .option(\"--project-dir <dir>\", \"Project directory\", process.cwd())\n .action(async (agentArg: string | undefined, opts: { projectDir: string }) => {\n const projectDir = path.resolve(opts.projectDir);\n\n // Resolve agent directory\n let agentDir: string;\n if (agentArg) {\n // If it looks like a path, use it directly\n if (agentArg.includes(\"/\") || agentArg.includes(\"\\\\\")) {\n agentDir = path.resolve(projectDir, agentArg);\n } else {\n // Try to resolve as agent name via workspace config\n const resolved = resolveAgentDir(projectDir);\n agentDir = resolved ?? path.resolve(projectDir, agentArg);\n }\n } else {\n const resolved = resolveAgentDir(projectDir);\n if (!resolved) {\n logErr(\"No agent found in current project. Specify an agent name or path.\");\n process.exit(1);\n }\n agentDir = resolved;\n }\n\n // Load the agent manifest\n const manifest = await loadAgentManifest(agentDir);\n if (!manifest) {\n logErr(`No agent.yaml found in ${agentDir}`);\n process.exit(1);\n }\n\n if (!manifest.composes || manifest.composes.length === 0) {\n logInfo(\"Agent has no composes: items — nothing to rebuild.\");\n return;\n }\n\n logInfo(\n `Rebuilding ${manifest.name ?? \"agent\"} (${manifest.composes.length} composition items)...`,\n );\n\n // Content loader — resolves asset content from the filesystem via mixin resolver.\n // Phase 1 limitation: only local-path refs (./file.md, /abs/path) resolve\n // successfully. Scoped catalog refs (@publisher/name) require a populated\n // RepoMap from workspace config, which Phase 2 / Library integration will provide.\n // The kind cast is intentional: resolveMixin's signature restricts to 3 kinds but\n // the implementation handles arbitrary strings for catalog lookup. Non-matching\n // kinds simply return null (not found) which surfaces as a compile warning.\n const loadContent = async (ref: string, kind: string): Promise<string | null> => {\n try {\n const repos: RepoMap = {};\n const mixinKind = kind as \"persona\" | \"ruleset\" | \"knowledge\";\n const resolved = await resolveMixin(ref, mixinKind, agentDir, repos);\n return resolved?.content ?? null;\n } catch {\n return null;\n }\n };\n\n const result = await compileComposition({\n agentDir,\n items: manifest.composes,\n loadContent,\n });\n\n // Report\n for (const warning of result.warnings) {\n logWarn(warning);\n }\n\n logOk(\n `Compiled ${result.resolvedCount}/${manifest.composes.length} items → prompt v${result.manifest.prompt_version}`,\n );\n logInfo(`Written: ${result.manifestPath}`);\n });\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport type { AgentEvent } from \"@skaile/workspaces/bridge\";\nimport {\n clearSession,\n loadSession,\n loadSessionById,\n MarkdownStreamer,\n resolveSettings,\n runAgentChat,\n} from \"@skaile/workspaces/runner\";\nimport { loadAllFlows } from \"@skaile/workspaces/base-assets/connectors/flow/engine\";\nimport { resumeFlow, runFlow } from \"@skaile/workspaces/base-assets/connectors/flow/run-flow\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport { AI_RESOURCES } from \"../paths.ts\";\n\n/**\n * Returns an onEvent handler that streams markdown output and shows per-node\n * progress from state_changed events emitted by the FlowAdapter.\n */\nfunction makeFlowEventHandler(): (event: AgentEvent) => void {\n const md = new MarkdownStreamer();\n const displayed = new Set<string>();\n\n return (event: AgentEvent) => {\n // Node progress from FlowAdapter state changes. Post-Phase-2 the store\n // ID is `flow:${runId}` (per-run namespace) and state.nodes is a\n // `Record<nodeId, NodeExecution>`, not the old array shape.\n const e = event as {\n type?: string;\n store?: string;\n state?: { nodes?: Record<string, { id: string; status: string }> };\n };\n if (e.type === \"state_changed\" && typeof e.store === \"string\" && e.store.startsWith(\"flow:\")) {\n const nodes = e.state?.nodes ?? {};\n for (const id in nodes) {\n const n = nodes[id];\n const key = `${id}:${n.status}`;\n if (displayed.has(key)) continue;\n displayed.add(key);\n if (n.status === \"running\") {\n process.stdout.write(` ${S.dim(\"→\")} ${id}`);\n } else if (n.status === \"complete\") {\n process.stdout.write(` ${pc.green(\"✓\")}\\n`);\n } else if (n.status === \"skipped\") {\n process.stdout.write(` ${S.dim(\"↷ skipped\")}\\n`);\n }\n }\n }\n\n // Markdown streaming for agent text output\n if (event.type === \"message_update\") {\n const delta = (event as any)._textDelta;\n if (delta) md.write(delta);\n }\n if (event.type === \"agent_end\") md.end();\n };\n}\n\n/**\n * Create the `skaile run` command.\n *\n * Accepts a flow ID or a free-text prompt as positional arguments. When the\n * first positional arg matches a known flow ID (discovered from `ai-assets/`),\n * the flow is executed via {@link runFlow}. Otherwise all positional args are\n * joined and forwarded as a one-shot agent prompt via {@link runAgentChat}.\n * Supports `--dry-run`, `--project-dir`, `--driver`, `--model`, `--provider`,\n * `--label`, and `--skill` options. When called with no arguments an\n * interactive selection prompt is shown.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/run#make-run-command\n */\nexport function makeRunCommand(): Command {\n const cmd = new Command(\"run\")\n .description(\"Start a flow or run a single-shot text prompt\")\n .argument(\"[flow-id-or-text...]\", \"Flow ID or text prompt\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--driver <name>\", \"Driver backend (claude-sdk, codex, omp)\")\n .option(\"--provider <name>\", \"LLM provider\")\n .option(\"--model <name>\", \"Model override\")\n .option(\"--label <label>\", \"Human-readable session label\")\n .option(\"--dry-run\", \"Print plan without executing\")\n .option(\"--skill <name>\", \"Skill name (for single-shot mode)\")\n .action(async (positional: string[], opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const cliDriver = opts.driver as string | undefined;\n const dryRun = opts.dryRun ?? false;\n\n // Interactive flow selection if no args\n let flowId = positional[0];\n if (!flowId) {\n const flows = loadAllFlows(AI_RESOURCES);\n if (flows.length === 0) {\n logErr(\"No flows available.\");\n process.exit(1);\n }\n const selected = await p.select({\n message: \"Select a flow to run\",\n options: flows.map((f) => ({\n value: f.id,\n label: f.name,\n hint: f.description,\n })),\n });\n if (p.isCancel(selected)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n flowId = selected as string;\n }\n\n // Resolve settings\n const config = await resolveSettings(projectDir, {\n driver: cliDriver,\n model: opts.model,\n provider: opts.provider,\n });\n const driver = config.driver ?? \"omp\";\n const model = config.model;\n const provider = config.provider;\n\n const flows = loadAllFlows(AI_RESOURCES);\n const flow = flows.find((f) => f.id === flowId);\n if (!flow) {\n // Not a flow — treat as single-shot text prompt\n const textPrompt = positional.join(\" \");\n if (!textPrompt.trim()) {\n logErr(`Flow not found: ${flowId}`);\n console.log(` ${S.dim(\"Available:\")} ${flows.map((f) => S.cmd(f.id)).join(\", \")}`);\n process.exit(1);\n }\n\n await runAgentChat({\n projectDir,\n driver: config.driver,\n model: config.model,\n provider: config.provider,\n message: textPrompt,\n skill: opts.skill,\n });\n return;\n }\n\n // Find flow file path\n let flowPath: string | undefined;\n let dir = projectDir;\n for (let i = 0; i < 6; i++) {\n const candidate = path.join(dir, \"ai-assets\");\n if (fs.existsSync(candidate)) {\n for (const domain of fs.readdirSync(candidate)) {\n const p_ = path.join(candidate, domain, \"flows\", `${flowId}.flow.yaml`);\n if (fs.existsSync(p_)) {\n flowPath = p_;\n break;\n }\n const legacy = path.join(candidate, domain, \"flows\", `${flowId}.json`);\n if (fs.existsSync(legacy)) {\n flowPath = legacy;\n break;\n }\n }\n break;\n }\n dir = path.dirname(dir);\n }\n if (!flowPath) {\n for (const domain of fs.readdirSync(AI_RESOURCES)) {\n const p_ = path.join(AI_RESOURCES, domain, \"flows\", `${flowId}.flow.yaml`);\n if (fs.existsSync(p_)) {\n flowPath = p_;\n break;\n }\n const legacy = path.join(AI_RESOURCES, domain, \"flows\", `${flowId}.json`);\n if (fs.existsSync(legacy)) {\n flowPath = legacy;\n break;\n }\n }\n }\n if (!flowPath) {\n logErr(`Could not locate flow file for: ${flowId}`);\n process.exit(1);\n }\n\n console.log();\n console.log(` ${S.label(\"Flow:\")} ${S.heading(flow.name)}`);\n console.log(` ${S.label(\"Project dir:\")} ${projectDir}`);\n console.log(` ${S.label(\"Driver:\")} ${driver}${model ? S.dim(` / ${model}`) : \"\"}`);\n if (opts.label) console.log(` ${S.label(\"Label:\")} ${opts.label}`);\n if (dryRun) console.log(` ${S.warn(\"(dry run — no agent will be started)\")}`);\n console.log();\n\n await runFlow({\n projectDir,\n flowPath,\n driver,\n model,\n provider,\n sessionLabel: opts.label,\n dryRun,\n onEvent: makeFlowEventHandler(),\n onLog: (line: string) => console.log(line),\n });\n });\n\n return cmd;\n}\n\n/**\n * Create the `skaile resume` command.\n *\n * Resumes the current or a specified session in `--project-dir`. Loads the\n * session pointer from `.skaile/session.json` (or a specific run-id via\n * `--session`) and delegates to {@link resumeFlow}. Supports `--dry-run` to\n * print the remaining plan without re-executing any agent steps.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/run#make-resume-command\n */\nexport function makeResumeCommand(): Command {\n const cmd = new Command(\"resume\")\n .description(\"Resume current session\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--session <run-id>\", \"Target session by runId\")\n .option(\"--dry-run\", \"Print plan without executing\")\n .action(async (opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const sessionId = opts.session;\n const dryRun = opts.dryRun ?? false;\n\n const session = sessionId\n ? await loadSessionById(projectDir, sessionId)\n : await loadSession(projectDir);\n if (!session) {\n logErr(`No session in ${projectDir}`);\n console.log(` ${S.dim(\"Run\")} ${S.cmd(\"skaile run <flow-id>\")} ${S.dim(\"first.\")}`);\n process.exit(1);\n }\n\n console.log();\n console.log(\n ` ${S.label(\"Resuming:\")} ${S.heading(session.flowId)}${session.label ? S.dim(` — ${session.label}`) : \"\"}`,\n );\n if (dryRun) logWarn(\"dry run\");\n console.log();\n\n await resumeFlow({\n projectDir,\n sessionId,\n dryRun,\n onEvent: makeFlowEventHandler(),\n onLog: (line: string) => console.log(line),\n });\n });\n\n return cmd;\n}\n\n/**\n * Create the `skaile status` command.\n *\n * Reads the current session from `.skaile/session.json` in `--project-dir` and\n * prints a formatted summary: flow ID, run-id prefix, label, status (coloured),\n * driver/model, and age. Exits cleanly with an info message when no session\n * is active.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/run#make-status-command\n */\nexport function makeStatusCommand(): Command {\n return new Command(\"status\")\n .description(\"Show current session state\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const session = await loadSession(projectDir);\n if (!session) {\n logInfo(\"No active session.\");\n return;\n }\n\n const age = Math.round((Date.now() - new Date(session.updatedAt).getTime()) / 1000);\n const statusColor =\n session.status === \"complete\"\n ? pc.green\n : session.status === \"failed\"\n ? pc.red\n : session.status === \"running\"\n ? pc.cyan\n : pc.yellow;\n\n console.log();\n console.log(` ${S.label(\"Flow:\")} ${S.heading(session.flowId)}`);\n console.log(` ${S.label(\"Run ID:\")} ${session.runId.slice(0, 8)}`);\n if (session.label) console.log(` ${S.label(\"Label:\")} ${session.label}`);\n console.log(` ${S.label(\"Status:\")} ${statusColor(session.status ?? \"unknown\")}`);\n console.log(\n ` ${S.label(\"Driver:\")} ${session.driver}${session.model ? S.dim(` / ${session.model}`) : \"\"}`,\n );\n console.log(` ${S.label(\"Updated:\")} ${session.updatedAt} ${S.dim(`(${age}s ago)`)}`);\n console.log(\n ` ${S.dim(\"Flow state is not persisted in CLI mode — use a host (Skaile platform, Pichi) for governed resumable runs.\")}`,\n );\n console.log();\n });\n}\n\n/**\n * Create the `skaile clear` command.\n *\n * Removes the current session pointer from `.skaile/session.json` in\n * `--project-dir` via {@link clearSession}. Does not delete the underlying\n * session file — use `skaile session delete` for that.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/run#make-clear-command\n */\nexport function makeClearCommand(): Command {\n return new Command(\"clear\")\n .description(\"Unset current session pointer\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts) => {\n const projectDir = path.resolve(opts.projectDir);\n await clearSession(projectDir);\n logOk(\"Session cleared.\");\n });\n}\n\n/**\n * Create the `skaile repl` command.\n *\n * Starts an interactive REPL session via `@skaile/workspaces/tui`.\n *\n * Workspace resolution:\n * 1. Walk upward from CWD (or --project-dir) looking for skaile.yaml\n * 2. If found → that directory becomes the projectDir (config root);\n * the user's CWD is forwarded as the agent working directory\n * 3. If not found → prompt the user to create a temporary workspace\n * in /tmp; auto-detect backend (claude-sdk if ~/.claude exists, else omp)\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/repl#make-repl-command\n */\nexport function makeReplCommand(): Command {\n return new Command(\"repl\")\n .description(\"Start an interactive agent session\")\n .option(\"--project-dir <path>\", \"Project directory\")\n .option(\"--driver <name>\", \"Driver backend (claude-sdk, omp)\")\n .option(\"--provider <name>\", \"LLM provider\")\n .option(\"--model <name>\", \"Model override\")\n .option(\"--resume\", \"Resume last session\")\n .option(\"--resume-session <id>\", \"Resume specific session\")\n .action(async (opts) => {\n const { findWorkspaceRoot } = await import(\"@skaile/workspaces/core\");\n const { startRepl } = await import(\"@skaile/workspaces/tui\");\n const os = await import(\"node:os\");\n\n const userCwd = path.resolve(opts.projectDir ?? process.cwd());\n const workspaceRoot = findWorkspaceRoot(userCwd);\n\n let projectDir: string;\n let agentCwd: string;\n let driverOverride = opts.driver as string | undefined;\n\n if (workspaceRoot) {\n // Found skaile.yaml — use its directory as config root\n projectDir = workspaceRoot;\n agentCwd = userCwd;\n if (workspaceRoot !== userCwd) {\n logInfo(`Using workspace: ${S.cmd(workspaceRoot)}`);\n }\n } else {\n // No skaile.yaml found anywhere\n console.log();\n logWarn(`No skaile.yaml found in ${S.cmd(userCwd)} or any parent directory.`);\n console.log();\n\n const shouldCreate = await p.confirm({\n message: \"Create a temporary workspace? (session state in /tmp/)\",\n });\n if (p.isCancel(shouldCreate) || !shouldCreate) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n // Create temp workspace\n const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), \"skaile-repl-\"));\n projectDir = tmpDir;\n agentCwd = userCwd;\n logOk(`Temporary workspace: ${S.cmd(tmpDir)}`);\n\n // Auto-detect backend if no --driver given\n if (!driverOverride) {\n const claudeDir = path.join(os.homedir(), \".claude\");\n if (fs.existsSync(claudeDir)) {\n driverOverride = \"claude-sdk\";\n logInfo(`Detected ${S.cmd(\"~/.claude\")} → using ${S.cmd(\"claude-sdk\")} backend`);\n } else {\n driverOverride = \"omp\";\n logInfo(`Using ${S.cmd(\"omp\")} backend`);\n }\n }\n\n console.log();\n }\n\n await startRepl({\n projectDir,\n cwd: agentCwd !== projectDir ? agentCwd : undefined,\n driver: driverOverride,\n model: opts.model,\n provider: opts.provider,\n resume: opts.resume,\n resumeSessionId: opts.resumeSession,\n });\n });\n}\n","import { Command } from \"commander\";\n\n/**\n * Creates the `skaile serve` command.\n *\n * Starts a WebSocket agent server for platform integration, forwarding\n * incoming protocol messages to the configured driver. Supports\n * `--compile-test` to verify the binary build before a Docker deployment.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/serve#make-serve-command\n */\nexport function makeServeCommand(): Command {\n return new Command(\"serve\")\n .description(\"Start a WebSocket agent server (for platform integration)\")\n .option(\"--port <port>\", \"WebSocket server port\", \"8080\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--driver <name>\", \"Override driver\")\n .option(\"--model <name>\", \"Override model\")\n .option(\"--provider <name>\", \"Override provider\")\n .option(\"--session-id <id>\", \"Session ID for conversation continuity\")\n .option(\"--resume-session-id <id>\", \"OMP session ID to resume (restores native OMP context)\")\n .option(\"--compile-test\", \"Build a compiled binary and run it (simulates Docker environment)\")\n .option(\n \"--with-codex\",\n \"Include the Codex backend in the compiled binary (used with --compile-test)\",\n )\n .action(\n async (opts: {\n port: string;\n projectDir: string;\n driver?: string;\n model?: string;\n provider?: string;\n sessionId?: string;\n resumeSessionId?: string;\n compileTest?: boolean;\n withCodex?: boolean;\n }) => {\n if (opts.compileTest) {\n await runCompileTest({ ...opts, withCodex: opts.withCodex ?? false });\n return;\n }\n\n const { startAgentServer } = await import(\"@skaile/workspaces/runner\");\n\n await startAgentServer({\n port: parseInt(opts.port, 10),\n projectDir: opts.projectDir,\n driver: opts.driver,\n model: opts.model,\n provider: opts.provider,\n sessionId: opts.sessionId,\n resumeSessionId: opts.resumeSessionId,\n });\n },\n );\n}\n\nasync function runCompileTest(opts: {\n port: string;\n projectDir: string;\n driver?: string;\n model?: string;\n provider?: string;\n sessionId?: string;\n withCodex?: boolean;\n}): Promise<void> {\n const { logOk, logErr, logInfo, S } = await import(\"../helpers.ts\");\n const { tmpdir } = await import(\"node:os\");\n const { dirname, join, resolve } = await import(\"node:path\");\n const { fileURLToPath } = await import(\"node:url\");\n const { unlinkSync, existsSync } = await import(\"node:fs\");\n const { spawn } = await import(\"node:child_process\");\n const { portableSpawnSync } = await import(\"@skaile/workspaces/core\");\n const { MONOREPO_ROOT } = await import(\"../paths.ts\");\n\n // `--compile-test` runs `bun build --compile` against the live CLI source\n // to verify a Docker-style static binary still links. That source tree only\n // exists inside the skaile-dev workspace; once @skaile/workspace-cli has\n // been npm-installed, the compiled `dist/` is all that ships, so the test\n // is meaningless and the entry path does not resolve. Gate accordingly.\n if (MONOREPO_ROOT === null) {\n logErr(\"--compile-test is only available inside the skaile-dev workspace.\");\n logInfo(\"Run it from a checkout of skaile-ai/skaile-dev (the monorepo shell).\");\n process.exitCode = 2;\n return;\n }\n\n const outfile = join(tmpdir(), `skaile-compile-test-${Date.now()}`);\n // Anchor on this file's own location instead of MONOREPO_ROOT — the prior\n // `join(MONOREPO_ROOT, \"cli\", \"src\", \"index.ts\")` join was incorrect (the\n // CLI lives under `workspaces/cli/`, not directly under the shell repo\n // root). Resolving via import.meta.url is correct regardless of monorepo\n // depth or whether we are running from source vs dist.\n const __thisFile = fileURLToPath(import.meta.url);\n const entryPoint = resolve(dirname(__thisFile), \"..\", \"index.ts\");\n\n // Step 1: Build\n logInfo(`Building compiled binary...`);\n logInfo(`Entry: ${S.dim(entryPoint)}`);\n logInfo(`Output: ${S.dim(outfile)}`);\n\n const buildArgs = [\n \"bun\",\n \"build\",\n entryPoint,\n \"--compile\",\n \"--outfile\",\n outfile,\n \"--external\",\n \"cpu-features\",\n \"--external\",\n \"better-sqlite3\",\n \"--external\",\n \"pg-native\",\n \"--define:__INCLUDE_CLAUDE_SDK__=true\",\n opts.withCodex ? \"--define:__INCLUDE_CODEX__=true\" : \"--define:__INCLUDE_CODEX__=false\",\n ];\n\n const buildProc = portableSpawnSync(buildArgs, {\n cwd: MONOREPO_ROOT,\n env: { ...process.env },\n });\n\n if (buildProc.exitCode !== 0) {\n logErr(\"Build failed:\");\n if (buildProc.stderr) console.error(buildProc.stderr);\n if (buildProc.stdout) console.log(buildProc.stdout);\n process.exitCode = 1;\n return;\n }\n\n logOk(`Binary built (${S.dim(outfile)})`);\n\n // Step 2: Run the compiled binary with serve args\n const serveArgs = [outfile, \"serve\", \"--port\", opts.port, \"--project-dir\", opts.projectDir];\n if (opts.driver) serveArgs.push(\"--driver\", opts.driver);\n if (opts.model) serveArgs.push(\"--model\", opts.model);\n if (opts.provider) serveArgs.push(\"--provider\", opts.provider);\n if (opts.sessionId) serveArgs.push(\"--session-id\", opts.sessionId);\n\n logInfo(`Running: ${S.dim(serveArgs.join(\" \"))}`);\n console.log();\n\n const [serveBin, ...serveRest] = serveArgs;\n const serveProc = spawn(serveBin as string, serveRest, {\n stdio: \"inherit\",\n env: { ...process.env },\n });\n\n // Cleanup on exit\n function cleanup() {\n try {\n serveProc.kill();\n } catch {}\n try {\n if (existsSync(outfile)) unlinkSync(outfile);\n } catch {}\n }\n\n process.on(\"SIGINT\", () => {\n cleanup();\n process.exit(0);\n });\n process.on(\"SIGTERM\", () => {\n cleanup();\n process.exit(0);\n });\n\n await new Promise<void>((res) => {\n serveProc.on(\"close\", () => res());\n });\n cleanup();\n}\n","import type { LogEntry } from \"@skaile/workspaces/types\";\nimport pc from \"picocolors\";\n\nexport interface FormatOptions {\n json?: boolean;\n nextCursor?: string;\n}\n\n/**\n * Render log entries to stdout. `--json` dumps a single JSON array; otherwise\n * each entry is one timestamp + level + source + message line, with `data` and\n * `error.stack` indented underneath when present.\n */\nexport function formatEntries(entries: LogEntry[], opts: FormatOptions = {}): string {\n if (opts.json) {\n return JSON.stringify(entries, null, 2);\n }\n const lines: string[] = [];\n for (const e of entries) {\n lines.push(...renderEntryLines(e));\n }\n if (opts.nextCursor) {\n lines.push(pc.dim(`... more available. Use --cursor ${opts.nextCursor} to page back.`));\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Render a single entry for streaming output. In `--json` mode this emits one\n * compact JSON object per line (NDJSON), so consumers can stream-parse the\n * tail. In pretty mode it produces the same multi-line shape as\n * `formatEntries` but for one entry only.\n */\nexport function formatSingleEntry(entry: LogEntry, opts: { json?: boolean } = {}): string {\n if (opts.json) {\n return JSON.stringify(entry);\n }\n return renderEntryLines(entry).join(\"\\n\");\n}\n\nfunction renderEntryLines(e: LogEntry): string[] {\n const lines: string[] = [formatLine(e)];\n if (e.data && Object.keys(e.data).length > 0) {\n lines.push(...formatData(e.data));\n }\n if (e.error) {\n lines.push(...formatError(e.error));\n }\n return lines;\n}\n\nfunction formatLine(e: LogEntry): string {\n const ts = pc.dim(`[${formatTime(e.timestamp)}]`);\n // colorLevel already pads each label to 5 visible chars; padEnd on the\n // ANSI-wrapped string is a no-op (length includes escape sequences).\n const lvl = colorLevel(e.level);\n const src = pc.cyan(`[${formatSource(e.source)}]`);\n return `${ts} ${lvl} ${src} ${e.message}`;\n}\n\nfunction formatTime(iso: string): string {\n // HH:MM:SS.mmm in UTC (matches the spec example).\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return iso;\n const hh = String(d.getUTCHours()).padStart(2, \"0\");\n const mm = String(d.getUTCMinutes()).padStart(2, \"0\");\n const ss = String(d.getUTCSeconds()).padStart(2, \"0\");\n const ms = String(d.getUTCMilliseconds()).padStart(3, \"0\");\n return `${hh}:${mm}:${ss}.${ms}`;\n}\n\nfunction formatSource(src: LogEntry[\"source\"]): string {\n if (src.instance) return `${src.kind}:${src.subkind}:${src.instance}`;\n return `${src.kind}:${src.subkind}`;\n}\n\nfunction colorLevel(level: LogEntry[\"level\"]): string {\n switch (level) {\n case \"error\":\n return pc.red(\"ERROR\");\n case \"warn\":\n return pc.yellow(\"WARN \");\n case \"info\":\n return pc.green(\"INFO \");\n case \"debug\":\n return pc.dim(\"DEBUG\");\n default:\n return String(level).toUpperCase();\n }\n}\n\nfunction formatData(data: Record<string, unknown>): string[] {\n const oneLine = JSON.stringify(data);\n if (oneLine.length <= 120) {\n return [` ${pc.dim(\"> data:\")} ${oneLine}`];\n }\n const pretty = JSON.stringify(data, null, 2);\n return [` ${pc.dim(\"> data:\")}`, ...pretty.split(\"\\n\").map((l) => ` ${l}`)];\n}\n\nfunction formatError(err: NonNullable<LogEntry[\"error\"]>): string[] {\n const head = ` ${pc.dim(\"> error:\")} ${pc.red(err.name)}: ${err.message}`;\n if (!err.stack) return [head];\n const stackLines = err.stack\n .split(\"\\n\")\n .filter((l) => l.trim().length > 0)\n .map((l) => ` ${pc.dim(l)}`);\n return [head, ...stackLines];\n}\n","import type { LogEntry } from \"@skaile/workspaces/types\";\n\n/**\n * Shape of a row returned by `SELECT ... FROM log_entries`. Matches the\n * schema written by the agent container's `LogStore` (see\n * `workspaces/core/src/logging`).\n */\nexport interface SqliteLogRow {\n id: string;\n timestamp: string;\n session_id: string;\n kind: string;\n subkind: string;\n instance: string | null;\n level: string;\n message: string;\n data_json: string | null;\n error_json: string | null;\n}\n\n/**\n * Convert a raw SQLite row into a typed `LogEntry`. Used by both the\n * one-shot history query (`local-query`) and the live tail loop\n * (`local-tail`) so the formatter sees identical shapes from either path.\n */\nexport function rowToEntry(row: SqliteLogRow): LogEntry {\n return {\n id: row.id,\n timestamp: row.timestamp,\n sessionId: row.session_id,\n source: {\n kind: row.kind as LogEntry[\"source\"][\"kind\"],\n subkind: row.subkind,\n ...(row.instance ? { instance: row.instance } : {}),\n },\n level: row.level as LogEntry[\"level\"],\n message: row.message,\n ...(row.data_json ? { data: JSON.parse(row.data_json) as Record<string, unknown> } : {}),\n ...(row.error_json ? { error: JSON.parse(row.error_json) as LogEntry[\"error\"] } : {}),\n };\n}\n","import { openSqlite } from \"@skaile/workspaces/core/logging\";\nimport type { LogEntry, LogQuery } from \"@skaile/workspaces/types\";\nimport { rowToEntry, type SqliteLogRow } from \"./sqlite-row.ts\";\n\nexport interface LocalQueryResult {\n entries: LogEntry[];\n nextCursor?: string;\n}\n\n/**\n * Open a SQLite log DB read-only and run a filtered SELECT mirroring the\n * `LogQuery` shape used by `SessionLogsService` in platform. Returns up to\n * `q.limit` (default 200) entries in chronological order with an optional\n * `nextCursor` for backward pagination.\n *\n * Uses the runtime's native SQLite driver — `bun:sqlite` under Bun,\n * `node:sqlite` under Node — via {@link openSqlite}.\n */\nexport function localQuery(\n dbPath: string,\n q: Omit<LogQuery, \"sessionId\"> & { sessionId: string },\n): LocalQueryResult {\n const db = openSqlite(dbPath, { readonly: true });\n try {\n db.exec(\"PRAGMA query_only=1;\");\n const limit = q.limit ?? 200;\n const fetchN = limit + 1; // overshoot by one to detect more-available\n const { sql, params } = buildSelect({ ...q, limit: fetchN });\n const rows = db.prepare(sql).all<SqliteLogRow>(params);\n\n const all = rows.map(rowToEntry);\n const hasMore = all.length > limit;\n const trimmed = hasMore ? all.slice(0, limit) : all;\n // Reverse to chronological for display (SELECT is DESC for cursor pagination).\n const chronological = trimmed.slice().reverse();\n const nextCursor = hasMore ? trimmed[trimmed.length - 1]!.id : undefined;\n return { entries: chronological, ...(nextCursor ? { nextCursor } : {}) };\n } finally {\n db.close();\n }\n}\n\ninterface BuiltSelect {\n sql: string;\n params: Record<string, unknown>;\n}\n\nfunction buildSelect(q: Omit<LogQuery, \"sessionId\"> & { sessionId: string }): BuiltSelect {\n const where: string[] = [\"session_id = $sid\"];\n const params: Record<string, unknown> = { $sid: q.sessionId };\n\n if (q.cursor) {\n where.push(\"id < $cursor\");\n params.$cursor = q.cursor;\n }\n if (q.source?.kind) {\n where.push(\"kind = $kind\");\n params.$kind = q.source.kind;\n }\n if (q.source?.subkind) {\n where.push(\"subkind = $sub\");\n params.$sub = q.source.subkind;\n }\n if (q.source?.instance) {\n where.push(\"instance = $inst\");\n params.$inst = q.source.instance;\n }\n if (q.levels && q.levels.length > 0) {\n const placeholders = q.levels.map((_, i) => `$lvl${i}`).join(\", \");\n where.push(`level IN (${placeholders})`);\n q.levels.forEach((lvl, i) => {\n params[`$lvl${i}`] = lvl;\n });\n }\n if (q.since) {\n where.push(\"timestamp >= $since\");\n params.$since = q.since;\n }\n if (q.until) {\n where.push(\"timestamp <= $until\");\n params.$until = q.until;\n }\n if (q.search) {\n where.push(\"message LIKE $search\");\n params.$search = `%${q.search}%`;\n }\n\n const limit = q.limit ?? 200;\n params.$limit = limit;\n\n const sql = `\n SELECT id, timestamp, session_id, kind, subkind, instance, level, message, data_json, error_json\n FROM log_entries\n WHERE ${where.join(\" AND \")}\n ORDER BY id DESC\n LIMIT $limit\n `;\n return { sql, params };\n}\n","import { openSqlite } from \"@skaile/workspaces/core/logging\";\nimport type { LogEntry, LogQuery } from \"@skaile/workspaces/types\";\nimport { rowToEntry, type SqliteLogRow } from \"./sqlite-row.ts\";\n\nexport interface LocalTailOptions {\n dbPath: string;\n query: Omit<LogQuery, \"sessionId\"> & { sessionId: string };\n /** Poll interval in milliseconds (default 500). */\n intervalMs?: number;\n /** Called once per new entry, in chronological order. */\n onEntry: (entry: LogEntry) => void;\n /** Aborts the loop cleanly. */\n signal?: AbortSignal;\n /**\n * Initial cursor: only entries with `id > startAfterId` are streamed.\n * Used to skip rows already printed by the history snapshot before the\n * tail loop took over.\n */\n startAfterId?: string;\n}\n\nconst DEFAULT_INTERVAL_MS = 500;\nconst TAIL_BATCH_LIMIT = 200;\n\n/**\n * Live-poll a SQLite log DB and stream new entries to `onEntry`. Re-opens the\n * db read-only on every iteration (cheap; survives WAL rotation, hibernation,\n * and stale connections). Returns when `signal` is aborted.\n */\nexport async function localTail(opts: LocalTailOptions): Promise<void> {\n const intervalMs = opts.intervalMs ?? DEFAULT_INTERVAL_MS;\n let lastSeen = opts.startAfterId ?? \"\";\n\n while (!opts.signal?.aborted) {\n const db = openSqlite(opts.dbPath, { readonly: true });\n try {\n db.exec(\"PRAGMA query_only=1;\");\n const { sql, params } = buildTailSelect({ ...opts.query, lastSeen });\n const rows = db.prepare(sql).all<SqliteLogRow>(params);\n for (const row of rows) {\n const entry = rowToEntry(row);\n opts.onEntry(entry);\n if (entry.id > lastSeen) lastSeen = entry.id;\n }\n } finally {\n db.close();\n }\n\n if (opts.signal?.aborted) return;\n await sleepUnlessAborted(intervalMs, opts.signal);\n }\n}\n\ninterface BuiltSelect {\n sql: string;\n params: Record<string, unknown>;\n}\n\n/**\n * Tail-specific SELECT: `id > $lastSeen` instead of `id < $cursor`,\n * `ORDER BY id ASC` (chronological) instead of DESC, and a fixed\n * `LIMIT 200` per batch to bound a single iteration. Mirrors the rest of\n * the filter logic in `local-query`'s `buildSelect`.\n */\nfunction buildTailSelect(\n q: Omit<LogQuery, \"sessionId\" | \"cursor\" | \"limit\"> & {\n sessionId: string;\n lastSeen: string;\n },\n): BuiltSelect {\n const where: string[] = [\"session_id = $sid\", \"id > $lastSeen\"];\n const params: Record<string, unknown> = {\n $sid: q.sessionId,\n $lastSeen: q.lastSeen,\n };\n\n if (q.source?.kind) {\n where.push(\"kind = $kind\");\n params.$kind = q.source.kind;\n }\n if (q.source?.subkind) {\n where.push(\"subkind = $sub\");\n params.$sub = q.source.subkind;\n }\n if (q.source?.instance) {\n where.push(\"instance = $inst\");\n params.$inst = q.source.instance;\n }\n if (q.levels && q.levels.length > 0) {\n const placeholders = q.levels.map((_, i) => `$lvl${i}`).join(\", \");\n where.push(`level IN (${placeholders})`);\n q.levels.forEach((lvl, i) => {\n params[`$lvl${i}`] = lvl;\n });\n }\n if (q.since) {\n where.push(\"timestamp >= $since\");\n params.$since = q.since;\n }\n if (q.until) {\n where.push(\"timestamp <= $until\");\n params.$until = q.until;\n }\n if (q.search) {\n where.push(\"message LIKE $search\");\n params.$search = `%${q.search}%`;\n }\n\n params.$limit = TAIL_BATCH_LIMIT;\n\n const sql = `\n SELECT id, timestamp, session_id, kind, subkind, instance, level, message, data_json, error_json\n FROM log_entries\n WHERE ${where.join(\" AND \")}\n ORDER BY id ASC\n LIMIT $limit\n `;\n return { sql, params };\n}\n\nfunction sleepUnlessAborted(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise<void>((resolve) => {\n if (signal?.aborted) {\n resolve();\n return;\n }\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n","/**\n * Parse a `--since` / `--until` value into an ISO 8601 timestamp.\n *\n * Accepts either:\n * - Relative shorthand: `30s`, `15m`, `2h`, `1d` — interpreted as `now - duration`.\n * - ISO 8601 string parseable by `Date.parse()`.\n *\n * Throws on unparseable input with a helpful message.\n */\nexport function parseTime(input: string, now: Date = new Date()): string {\n const trimmed = input.trim();\n if (!trimmed) {\n throw new Error(`Cannot parse empty time value`);\n }\n\n const relMatch = /^(\\d+)\\s*(s|m|h|d)$/i.exec(trimmed);\n if (relMatch) {\n const amount = Number.parseInt(relMatch[1]!, 10);\n const unit = relMatch[2]!.toLowerCase();\n const ms = amount * unitMs(unit);\n return new Date(now.getTime() - ms).toISOString();\n }\n\n const parsed = Date.parse(trimmed);\n if (!Number.isNaN(parsed)) {\n return new Date(parsed).toISOString();\n }\n\n throw new Error(\n `Unparseable time value: \"${input}\". Expected ISO 8601 (e.g. 2026-05-01T10:00:00Z) or a relative shorthand (30s, 15m, 2h, 1d).`,\n );\n}\n\nfunction unitMs(unit: string): number {\n switch (unit) {\n case \"s\":\n return 1000;\n case \"m\":\n return 60_000;\n case \"h\":\n return 3_600_000;\n case \"d\":\n return 86_400_000;\n default:\n throw new Error(`Unknown time unit: ${unit}`);\n }\n}\n","import type { LogEntry, LogQuery } from \"@skaile/workspaces/types\";\nimport { createTRPCUntypedClient, httpLink } from \"@trpc/client\";\n\nexport interface RemoteQueryResult {\n entries: LogEntry[];\n nextCursor?: string;\n}\n\n/**\n * Call the platform tRPC `workspace.queryLogs` procedure.\n *\n * Untyped client — the platform AppRouter is not exported as an installable\n * package across the workspaces / platform repo boundary. The shape of\n * the `queryLogs` procedure is stable and documented in\n * `platform/backend/libs/router-trpc/src/routes/workspace.route.ts`.\n *\n * The procedure expects:\n * { projectId, sessionId?, query: LogQuery (without sessionId) }\n * and returns:\n * { entries: LogEntry[], nextCursor?: string }\n */\nexport async function remoteQuery(args: {\n url: string;\n token?: string;\n projectId: string;\n sessionId: string;\n query: Omit<LogQuery, \"sessionId\">;\n}): Promise<RemoteQueryResult> {\n const trpcUrl = normalizeTrpcUrl(args.url);\n // Untyped client — the platform AppRouter is not exported across the repo\n // boundary. Procedure path + input shape are validated at runtime by the\n // platform's Zod schema.\n const client = createTRPCUntypedClient({\n links: [\n httpLink({\n url: trpcUrl,\n headers: () => (args.token ? { authorization: `Bearer ${args.token}` } : {}),\n }),\n ],\n });\n\n const result = (await client.query(\"workspace.queryLogs\", {\n projectId: args.projectId,\n sessionId: args.sessionId,\n query: args.query,\n })) as RemoteQueryResult;\n // Platform returns DESC (newest first) to keep cursor pagination natural.\n // Reverse to chronological so remote output matches local mode and the\n // formatter reads top-to-bottom in time order.\n return { ...result, entries: result.entries.slice().reverse() };\n}\n\nfunction normalizeTrpcUrl(url: string): string {\n const trimmed = url.replace(/\\/+$/, \"\");\n if (trimmed.endsWith(\"/trpc\")) return trimmed;\n return `${trimmed}/trpc`;\n}\n","import type { LogEntry, LogQuery } from \"@skaile/workspaces/types\";\nimport { createTRPCUntypedClient, httpSubscriptionLink } from \"@trpc/client\";\n\nexport interface RemoteTailOptions {\n url: string;\n token?: string;\n projectId: string;\n sessionId: string;\n /**\n * Same shape as the history `LogQuery`. The platform's `onLogEntry`\n * subscription does NOT filter — filters are applied client-side here so\n * the user sees a consistent view between history and tail.\n */\n query: Omit<LogQuery, \"sessionId\">;\n signal?: AbortSignal;\n onEntry: (entry: LogEntry) => void;\n}\n\n/**\n * Subscribe to the platform's `workspace.onLogEntry` SSE stream and forward\n * each entry (after client-side filtering) to `onEntry`. Resolves cleanly\n * when `signal` is aborted.\n */\nexport async function remoteTail(opts: RemoteTailOptions): Promise<void> {\n const trpcUrl = normalizeTrpcUrl(opts.url);\n const client = createTRPCUntypedClient({\n links: [\n httpSubscriptionLink({\n url: trpcUrl,\n eventSourceOptions: () => ({\n // EventSource init dict; Bun ignores unknown fields.\n ...(opts.token ? { headers: { authorization: `Bearer ${opts.token}` } } : {}),\n }),\n }),\n ],\n });\n\n const filter = makeFilter(opts.query);\n\n return new Promise<void>((resolve, reject) => {\n let settled = false;\n const finish = (err?: unknown) => {\n if (settled) return;\n settled = true;\n try {\n sub.unsubscribe();\n } catch {\n // best-effort\n }\n opts.signal?.removeEventListener(\"abort\", onAbort);\n if (err) reject(err);\n else resolve();\n };\n\n const onAbort = () => finish();\n if (opts.signal?.aborted) {\n // Avoid subscribing if already aborted.\n resolve();\n return;\n }\n opts.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n const sub = client.subscription(\n \"workspace.onLogEntry\",\n { projectId: opts.projectId, sessionId: opts.sessionId },\n {\n onData: (raw) => {\n const entry = raw as LogEntry;\n if (filter(entry)) opts.onEntry(entry);\n },\n onError: (err) => finish(err),\n onComplete: () => finish(),\n onStopped: () => finish(),\n },\n );\n });\n}\n\nfunction normalizeTrpcUrl(url: string): string {\n const trimmed = url.replace(/\\/+$/, \"\");\n if (trimmed.endsWith(\"/trpc\")) return trimmed;\n return `${trimmed}/trpc`;\n}\n\n/**\n * Build a client-side predicate matching `local-query`'s SQL filters.\n * Applied after each yielded entry from the SSE stream because the platform\n * route does not pre-filter.\n */\nfunction makeFilter(q: Omit<LogQuery, \"sessionId\">): (e: LogEntry) => boolean {\n const sinceMs = q.since ? Date.parse(q.since) : undefined;\n const untilMs = q.until ? Date.parse(q.until) : undefined;\n const searchLower = q.search ? q.search.toLowerCase() : undefined;\n const levelSet = q.levels && q.levels.length > 0 ? new Set(q.levels) : undefined;\n const kind = q.source?.kind;\n const subkind = q.source?.subkind;\n const instance = q.source?.instance;\n\n return (e) => {\n if (kind && e.source.kind !== kind) return false;\n if (subkind && e.source.subkind !== subkind) return false;\n if (instance && e.source.instance !== instance) return false;\n if (levelSet && !levelSet.has(e.level)) return false;\n if (sinceMs !== undefined) {\n const ts = Date.parse(e.timestamp);\n if (!Number.isNaN(ts) && ts < sinceMs) return false;\n }\n if (untilMs !== undefined) {\n const ts = Date.parse(e.timestamp);\n if (!Number.isNaN(ts) && ts > untilMs) return false;\n }\n if (searchLower && !e.message.toLowerCase().includes(searchLower)) return false;\n return true;\n };\n}\n","import { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport path from \"node:path\";\n\nexport type ResolvedMode =\n | { mode: \"local\"; dbPath: string }\n | { mode: \"remote\"; url: string; token?: string };\n\nexport interface ResolveOpts {\n forceLocal?: boolean;\n forceRemote?: boolean;\n projectDir?: string;\n platformUrl?: string;\n}\n\nconst MAX_WALK_LEVELS = 6;\n\n/**\n * Decide whether to read from a local SQLite log DB or call the platform via\n * tRPC.\n *\n * Resolution rules (in order):\n * - `--local` and `--remote` together → throws.\n * - `--local` → search the project tree for `.skaile/logs.db`. Throws if not found.\n * - `--remote` → require a platform URL (flag, env, or settings).\n * - Auto: prefer local if a `.skaile/logs.db` is found in the workspace tree;\n * otherwise fall back to remote if a URL is configured. Throws otherwise.\n */\nexport function resolveMode(opts: ResolveOpts): ResolvedMode {\n if (opts.forceLocal && opts.forceRemote) {\n throw new Error(\"Cannot use both --local and --remote\");\n }\n\n const startDir = path.resolve(opts.projectDir ?? process.cwd());\n const localDb = findLogsDb(startDir);\n\n if (opts.forceLocal) {\n if (!localDb) {\n throw new Error(\n `Local mode requested but no .skaile/logs.db found within ${MAX_WALK_LEVELS} levels of ${startDir}`,\n );\n }\n return { mode: \"local\", dbPath: localDb };\n }\n\n const remoteUrl = opts.platformUrl ?? readPlatformUrlFromEnvOrSettings();\n const token = readApiToken();\n\n if (opts.forceRemote) {\n if (!remoteUrl) {\n throw new Error(\n `Remote mode requested but no platform URL configured. Use --platform-url, set SKAILE_PLATFORM_URL, or add \"platformUrl\" to ~/.skaile/settings.json.`,\n );\n }\n return { mode: \"remote\", url: remoteUrl, token };\n }\n\n // Auto-detect.\n if (localDb) {\n return { mode: \"local\", dbPath: localDb };\n }\n if (remoteUrl) {\n return { mode: \"remote\", url: remoteUrl, token };\n }\n throw new Error(\n `No local .skaile/logs.db found in ${startDir} and no platform URL configured. Use --project-dir to point at a workspace, or configure --platform-url / SKAILE_PLATFORM_URL.`,\n );\n}\n\nfunction findLogsDb(startDir: string): string | undefined {\n let dir = startDir;\n for (let i = 0; i < MAX_WALK_LEVELS; i++) {\n const candidate = path.join(dir, \".skaile\", \"logs.db\");\n if (existsSync(candidate)) {\n try {\n if (statSync(candidate).isFile()) return candidate;\n } catch {\n // ignore\n }\n }\n const parent = path.dirname(dir);\n if (parent === dir) return undefined;\n dir = parent;\n }\n return undefined;\n}\n\nfunction readPlatformUrlFromEnvOrSettings(): string | undefined {\n const envUrl = process.env.SKAILE_PLATFORM_URL;\n if (envUrl) return envUrl;\n const settings = readGlobalSettings();\n if (typeof settings.platformUrl === \"string\" && settings.platformUrl) {\n return settings.platformUrl;\n }\n return undefined;\n}\n\nfunction readApiToken(): string | undefined {\n const envToken = process.env.SKAILE_API_TOKEN;\n if (envToken) return envToken;\n const settings = readGlobalSettings();\n if (typeof settings.apiToken === \"string\" && settings.apiToken) {\n return settings.apiToken;\n }\n return undefined;\n}\n\nfunction readGlobalSettings(): Record<string, unknown> {\n try {\n const settingsPath = path.join(homedir(), \".skaile\", \"settings.json\");\n if (!existsSync(settingsPath)) return {};\n return JSON.parse(readFileSync(settingsPath, \"utf8\")) as Record<string, unknown>;\n } catch {\n return {};\n }\n}\n","import type { LogEntry, LogLevel, LogQuery } from \"@skaile/workspaces/types\";\nimport { Command } from \"commander\";\nimport { logErr } from \"../../helpers.ts\";\nimport { formatEntries, formatSingleEntry } from \"./format.ts\";\nimport { localQuery } from \"./local-query.ts\";\nimport { localTail } from \"./local-tail.ts\";\nimport { parseTime } from \"./parse-time.ts\";\nimport { remoteQuery } from \"./remote-query.ts\";\nimport { remoteTail } from \"./remote-tail.ts\";\nimport { resolveMode } from \"./resolve-mode.ts\";\n\nconst VALID_LEVELS = new Set<LogLevel>([\"debug\", \"info\", \"warn\", \"error\"]);\n\ninterface CliOpts {\n kind?: string;\n subkind?: string;\n instance?: string;\n level?: string[];\n since?: string;\n until?: string;\n search?: string;\n limit?: string;\n json?: boolean;\n local?: boolean;\n remote?: boolean;\n platformUrl?: string;\n projectDir?: string;\n projectId?: string;\n cursor?: string;\n tail?: boolean;\n}\n\n/**\n * Build the `skaile session logs <sessionId>` subcommand.\n *\n * Two resolution modes:\n * - Local (auto when `<workspace>/.skaile/logs.db` is found): open SQLite RO\n * and run a filtered SELECT. Zero round-trip.\n * - Remote (auto when no local DB but a platform URL is configured): call\n * `workspace.queryLogs` over tRPC. Requires `--project-id`.\n *\n * Override auto-detect with `--local` / `--remote`.\n *\n * Pass `--tail` to follow new entries after the history snapshot. Local mode\n * polls the SQLite file every 500ms; remote mode subscribes to the\n * `workspace.onLogEntry` SSE stream. Ctrl-C exits cleanly with code 0.\n */\nexport function makeSessionLogsCommand(): Command {\n const cmd = new Command(\"logs\")\n .description(\"Query the per-session structured debug log store\")\n .argument(\"<sessionId>\", \"Session ID to query\")\n .option(\"--kind <kind>\", \"Filter by source kind (mount, connector, mcp, runner, ...)\")\n .option(\"--subkind <subkind>\", \"Filter by source subkind\")\n .option(\"--instance <instance>\", \"Filter by source instance\")\n .option(\n \"--level <level>\",\n \"Filter by level (debug|info|warn|error). Repeatable.\",\n collectLevel,\n [] as string[],\n )\n .option(\"--since <iso|relative>\", \"Lower-bound timestamp (ISO 8601 or 30s/15m/2h/1d)\")\n .option(\"--until <iso>\", \"Upper-bound timestamp\")\n .option(\"--search <text>\", \"Substring match on message (LIKE %text%)\")\n .option(\"--limit <n>\", \"Max entries to return (default 200)\")\n .option(\"--cursor <id>\", \"Pagination cursor (returns entries with id < cursor)\")\n .option(\"--json\", \"Emit raw JSON instead of pretty TTY output\")\n .option(\"--local\", \"Force local SQLite read (skip remote)\")\n .option(\"--remote\", \"Force remote tRPC call (skip local)\")\n .option(\"--platform-url <url>\", \"Platform base URL (remote mode)\")\n .option(\"--project-id <id>\", \"Project ID (required for remote mode)\")\n .option(\"--project-dir <dir>\", \"Workspace search root (default: cwd)\")\n .option(\"--tail\", \"Stream new entries as they are written (Ctrl-C to stop)\")\n .action(async (sessionId: string, opts: CliOpts) => {\n try {\n await runSessionLogs(sessionId, opts);\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n\n return cmd;\n}\n\nasync function runSessionLogs(sessionId: string, opts: CliOpts): Promise<void> {\n const levels = (opts.level ?? []).map(validateLevel);\n const query: Omit<LogQuery, \"sessionId\"> = {\n ...(opts.kind || opts.subkind || opts.instance\n ? {\n source: {\n ...(opts.kind ? { kind: opts.kind as NonNullable<LogQuery[\"source\"]>[\"kind\"] } : {}),\n ...(opts.subkind ? { subkind: opts.subkind } : {}),\n ...(opts.instance ? { instance: opts.instance } : {}),\n },\n }\n : {}),\n ...(levels.length > 0 ? { levels } : {}),\n ...(opts.since ? { since: parseTime(opts.since) } : {}),\n ...(opts.until ? { until: parseTime(opts.until) } : {}),\n ...(opts.search ? { search: opts.search } : {}),\n ...(opts.limit ? { limit: parsePositiveInt(opts.limit, \"--limit\") } : { limit: 200 }),\n ...(opts.cursor ? { cursor: opts.cursor } : {}),\n };\n\n const resolved = resolveMode({\n forceLocal: opts.local,\n forceRemote: opts.remote,\n projectDir: opts.projectDir,\n platformUrl: opts.platformUrl,\n });\n\n let entries: LogEntry[];\n let nextCursor: string | undefined;\n\n if (resolved.mode === \"local\") {\n const result = localQuery(resolved.dbPath, { ...query, sessionId });\n entries = result.entries;\n nextCursor = result.nextCursor;\n } else {\n if (!opts.projectId) {\n throw new Error(\n \"Remote mode requires --project-id (the platform tRPC procedure scopes by project).\",\n );\n }\n const result = await remoteQuery({\n url: resolved.url,\n ...(resolved.token ? { token: resolved.token } : {}),\n projectId: opts.projectId,\n sessionId,\n query,\n });\n entries = result.entries;\n nextCursor = result.nextCursor;\n }\n\n const out = formatEntries(entries, {\n json: opts.json,\n // In tail mode the cursor hint is misleading (we are about to follow live\n // entries, not page back), so suppress it.\n ...(nextCursor && !opts.tail ? { nextCursor } : {}),\n });\n if (out.length > 0) console.log(out);\n\n if (opts.tail) {\n await runTail({\n sessionId,\n opts,\n resolved,\n query,\n historyEntries: entries,\n });\n }\n}\n\ninterface RunTailArgs {\n sessionId: string;\n opts: CliOpts;\n resolved: ReturnType<typeof resolveMode>;\n query: Omit<LogQuery, \"sessionId\">;\n historyEntries: LogEntry[];\n}\n\nasync function runTail(args: RunTailArgs): Promise<void> {\n const controller = new AbortController();\n const onSigint = () => {\n controller.abort();\n // Ctrl-C is normal termination of a tail loop, not an error.\n process.exitCode = 0;\n };\n process.on(\"SIGINT\", onSigint);\n\n const emit = (entry: LogEntry) => {\n process.stdout.write(`${formatSingleEntry(entry, { json: args.opts.json })}\\n`);\n };\n\n try {\n if (args.resolved.mode === \"local\") {\n // Skip rows already shown by the history snapshot.\n const lastHistoryId = args.historyEntries.at(-1)?.id;\n await localTail({\n dbPath: args.resolved.dbPath,\n query: { ...args.query, sessionId: args.sessionId },\n ...(lastHistoryId ? { startAfterId: lastHistoryId } : {}),\n onEntry: emit,\n signal: controller.signal,\n });\n } else {\n if (!args.opts.projectId) {\n throw new Error(\"Remote tail requires --project-id\");\n }\n await remoteTail({\n url: args.resolved.url,\n ...(args.resolved.token ? { token: args.resolved.token } : {}),\n projectId: args.opts.projectId,\n sessionId: args.sessionId,\n query: args.query,\n signal: controller.signal,\n onEntry: emit,\n });\n }\n } finally {\n process.removeListener(\"SIGINT\", onSigint);\n }\n}\n\nfunction collectLevel(value: string, prev: string[]): string[] {\n return [...prev, value];\n}\n\nfunction validateLevel(level: string): LogLevel {\n if (!VALID_LEVELS.has(level as LogLevel)) {\n throw new Error(`Invalid --level: ${level}. Expected one of debug|info|warn|error.`);\n }\n return level as LogLevel;\n}\n\nfunction parsePositiveInt(value: string, flag: string): number {\n const n = Number.parseInt(value, 10);\n if (!Number.isFinite(n) || n <= 0) {\n throw new Error(`${flag} must be a positive integer (got ${value})`);\n }\n return n;\n}\n","import path from \"node:path\";\nimport {\n deleteSession,\n listSessions,\n loadSession,\n loadSessionById,\n setCurrentSession,\n} from \"@skaile/workspaces/runner\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { logErr, logInfo, logOk, S } from \"../helpers.ts\";\nimport { makeSessionLogsCommand } from \"./session-logs/index.ts\";\n\n/**\n * Create the `skaile session` command group.\n *\n * Manages the sessions stored under `.skaile/sessions/` in a project directory.\n * Subcommands: `list` (tabular view of all sessions with status and age),\n * `show <run-id>` (full JSON dump of a single session), `switch <run-id>`\n * (update the current session pointer), `delete <run-id>` (remove the session\n * file). All subcommands accept `--project-dir` to target a different directory.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/session#make-session-command\n */\nexport function makeSessionCommand(): Command {\n const cmd = new Command(\"session\").description(\"Manage sessions\");\n\n cmd\n .command(\"list\")\n .description(\"List all sessions for a project\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const sessions = await listSessions(projectDir);\n const current = await loadSession(projectDir);\n if (sessions.length === 0) {\n logInfo(\"No sessions found.\");\n return;\n }\n\n console.log();\n console.log(S.heading(` Sessions in ${projectDir}`));\n console.log();\n console.log(\n ` ${S.dim(\" \")} ${S.dim(\"ID\".padEnd(10))}${S.dim(\"FLOW\".padEnd(22))}${S.dim(\"NODES\".padEnd(7))}${S.dim(\"LABEL\".padEnd(22))}${S.dim(\"STATUS\".padEnd(14))}${S.dim(\"AGE\")}`,\n );\n console.log(` ${S.dim(\" \")} ${S.rule(75)}`);\n for (const s of sessions) {\n const isCurrent = current?.runId === s.runId;\n const marker = isCurrent ? pc.cyan(\" ▶ \") : \" \";\n const age = Math.round((Date.now() - new Date(s.updatedAt).getTime()) / 60000);\n const label = (s.label ?? \"\").padEnd(20);\n const statusColor =\n s.status === \"complete\"\n ? pc.green\n : s.status === \"failed\"\n ? pc.red\n : s.status === \"running\"\n ? pc.cyan\n : pc.dim;\n const status = statusColor((s.status ?? \"\").padEnd(12));\n console.log(\n `${marker} ${S.dim(s.runId.slice(0, 8))} ${s.flowId.padEnd(20)} ${label} ${status} ${S.dim(`${age}m ago`)}`,\n );\n }\n console.log();\n });\n\n cmd\n .command(\"show <run-id>\")\n .description(\"Show a specific session\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (runId: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const session = await loadSessionById(projectDir, runId);\n if (!session) {\n logErr(`Session not found: ${runId}`);\n process.exit(1);\n }\n console.log(JSON.stringify(session, null, 2));\n });\n\n cmd\n .command(\"switch <run-id>\")\n .description(\"Switch the current session\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (runId: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n await setCurrentSession(projectDir, runId);\n logOk(`Switched to session: ${S.dim(runId.slice(0, 8))}`);\n });\n\n cmd\n .command(\"delete <run-id>\")\n .description(\"Delete a session\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (runId: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n await deleteSession(projectDir, runId);\n logOk(`Deleted session: ${S.dim(runId.slice(0, 8))}`);\n });\n\n cmd.addCommand(makeSessionLogsCommand());\n\n cmd.action(() => cmd.help());\n\n return cmd;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { DriverTarget } from \"@skaile/workspaces/core\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { kindColor, kindColorPad, logErr, logInfo, S } from \"../helpers.ts\";\n\nconst SYNC_ICONS: Record<string, string> = {\n synced: pc.green(\"synced\"),\n outdated: pc.yellow(\"outdated\"),\n local: pc.cyan(\"local\"),\n error: pc.red(\"error\"),\n unknown: pc.dim(\"—\"),\n};\n\nfunction showOverview(am: AssetManager): void {\n const result = am.overview();\n\n if (result.total === 0) {\n logInfo(\"No assets deployed. Run `skaile install` first.\");\n return;\n }\n\n console.log();\n console.log(S.heading(\" Asset Overview\"));\n\n if (result.repos.length > 0) {\n console.log();\n for (const r of result.repos) {\n const icon = r.error ? pc.red(\"!\") : r.upToDate ? pc.green(\"✓\") : pc.yellow(\"↓\");\n const status = r.error\n ? pc.red(r.error)\n : r.upToDate\n ? pc.green(\"up to date\")\n : pc.yellow(`${r.behind} behind`);\n console.log(` ${icon} ${S.cmd(r.name)} ${pc.dim(`[${r.kind}]`)} ${status}`);\n }\n }\n\n const nameW = Math.max(4, ...[...result.byDomain.values()].flat().map((e) => e.name.length));\n const kindW = 8;\n\n for (const [domain, entries] of result.byDomain) {\n console.log();\n console.log(` ${S.heading(domain)} ${pc.dim(`(${entries.length})`)}`);\n console.log(` ${S.rule(nameW + kindW + 20)}`);\n for (const e of entries) {\n const sync = SYNC_ICONS[e.syncStatus] ?? SYNC_ICONS.unknown;\n const ver = e.version ? pc.dim(` v${e.version}`) : \"\";\n console.log(` ${kindColorPad(e.kind, kindW)} ${S.cmd(e.name.padEnd(nameW))} ${sync}${ver}`);\n }\n }\n\n console.log();\n console.log(` ${pc.dim(`${result.total} assets deployed`)}`);\n console.log();\n}\n\nfunction showAsset(am: AssetManager, kind: string, name: string): void {\n const entry = am.info(`${kind}:${name}`);\n\n if (entry?.source && fs.existsSync(entry.source)) {\n console.log();\n console.log(` ${kindColor(entry.kind)} ${S.heading(entry.name)}`);\n console.log(` ${S.rule(40)}`);\n console.log();\n console.log(fs.readFileSync(entry.source, \"utf-8\"));\n return;\n }\n\n logErr(`Asset not found: ${kind}:${name}`);\n process.exit(1);\n}\n\n/**\n * Creates the `skaile show` command.\n *\n * With no arguments prints a deployed-asset overview (grouped by domain with\n * sync status). With `kind name` or `kind:name` arguments prints the raw\n * source content of a specific deployed asset.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/show#make-show-command\n */\nexport function makeShowCommand(): Command {\n return new Command(\"show\")\n .description(\"Show deployed assets overview, or print asset content\")\n .argument(\"[kind]\", \"Asset kind (skill, agent, prompt, flow, bundle, contract)\")\n .argument(\"[name]\", \"Asset name\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--target <agent>\", \"Agent framework\", \"claude-code\")\n .action((kind: string | undefined, name: string | undefined, opts) => {\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n driverTarget: opts.target as DriverTarget,\n });\n\n if (!kind) {\n // No arguments: show overview\n showOverview(am);\n } else if (!name) {\n // One argument: might be \"kind:name\" format\n if (kind.includes(\":\")) {\n const [k, n] = kind.split(\":\");\n showAsset(am, k, n);\n } else {\n logErr(\"Usage: skaile show [kind name] or skaile show (no args for overview)\");\n process.exit(1);\n }\n } else {\n showAsset(am, kind, name);\n }\n });\n}\n","/**\n * `skaile source manifest …` — sidecar manifest lifecycle, refactored under\n * the `source` noun (was `source sidecar …`).\n *\n * The verbs are stubs for now — the real wiring lands when the publish path\n * through `POST /sources/<id>/manifest` is finalised on the store backend.\n * Each subcommand exits with code 2 plus a clear \"not yet wired\" hint so\n * smoke tests can verify the surface without depending on the server.\n *\n * @docLink cli/commands/source#manifest\n */\n\nimport type { Command } from \"commander\";\nimport { logErr } from \"../helpers.ts\";\n\nconst NOT_WIRED_MSG =\n \"`skaile source manifest *` is scaffolded but not yet wired. \" +\n \"Server-side endpoint (`POST /sources/<id>/manifest`) lands in a follow-up PR.\";\n\nfunction notWired(verb: string): never {\n logErr(`${NOT_WIRED_MSG} (verb: source manifest ${verb})`);\n process.exit(2);\n}\n\n/**\n * Append the `manifest` sub-tree to a `source` command.\n *\n * Called from `makeSourceCommand()` in `source.ts`.\n */\nexport function addSourceManifestCommands(src: Command): void {\n const manifest = src.command(\"manifest\").description(\"Sidecar manifest lifecycle for a source\");\n\n manifest\n .command(\"init <src>\")\n .description(\"Start a sidecar manifest for a source\")\n .action(() => notWired(\"init\"));\n\n manifest\n .command(\"edit <src>\")\n .description(\"Open the sidecar manifest in $EDITOR\")\n .action(() => notWired(\"edit\"));\n\n manifest\n .command(\"rebuild <src>\")\n .description(\"Re-derive the manifest after an upstream change\")\n .option(\"--merge\", \"Merge with existing entries instead of overwriting\", false)\n .action(() => notWired(\"rebuild\"));\n\n manifest\n .command(\"verify <src>\")\n .description(\"Verify hashes, deps, and schema\")\n .option(\"--strict\", \"Fail on advisory checks\", false)\n .action(() => notWired(\"verify\"));\n\n manifest\n .command(\"publish <src>\")\n .description(\"Register the manifest in the store (provenance=curator)\")\n .action(() => notWired(\"publish\"));\n\n manifest\n .command(\"propose <src>\")\n .description(\"Open a PR to upstream with the sidecar manifest\")\n .action(() => notWired(\"propose\"));\n\n manifest\n .command(\"yank <src>\")\n .description(\"Retract a published manifest from the remote store\")\n .option(\"--version <v>\", \"Version to yank\")\n .action(() => notWired(\"yank\"));\n}\n","/**\n * `skaile source …` — manage github sources (third-party repos of AI assets).\n *\n * A *source* is a read-mostly clone of a github repo under `~/.skaile/sources/`.\n * Bytes always live here. Manifest catalog entries (formerly \"sidecars\") live\n * separately at `~/.skaile/store/manifests/<slug>.yaml`.\n *\n * @docLink cli/commands/source\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport * as path from \"node:path\";\nimport { skaileHomeDir } from \"@skaile/workspaces/library\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, S } from \"../helpers.ts\";\nimport { openLibraryManager } from \"../open-library.ts\";\nimport { addSourceManifestCommands } from \"./source-manifest.ts\";\n\nfunction sourcesDir(): string {\n return path.join(skaileHomeDir(), \"sources\");\n}\n\nfunction deriveSlug(url: string): string {\n return (\n url\n .replace(/\\.git$/, \"\")\n .split(/[/:]/)\n .pop() ?? \"source\"\n );\n}\n\nfunction isSourceRow(lib: { path: string }): boolean {\n return lib.path.startsWith(sourcesDir());\n}\n\nexport function makeSourceCommand(): Command {\n const cmd = new Command(\"source\").description(\n \"Manage github sources (third-party repos of AI assets)\",\n );\n\n // ── source add ──────────────────────────────────────────────────────────\n cmd\n .command(\"add <git-url>\")\n .description(\"Clone a github repo into ~/.skaile/sources/<slug> and register it\")\n .option(\"--name <slug>\", \"Override the derived slug\")\n .action(async (url: string, opts: { name?: string }) => {\n const slug = opts.name ?? deriveSlug(url);\n const dest = path.join(sourcesDir(), slug);\n const clone = spawnSync(\"git\", [\"clone\", url, dest], { stdio: \"inherit\" });\n if (clone.status !== 0) {\n logErr(`git clone failed for ${url}`);\n process.exit(1);\n }\n const { manager, close } = await openLibraryManager();\n try {\n await manager.addLibrary({\n name: slug,\n path: dest,\n backend: \"git\",\n backendConfig: { url, branch: \"main\", authHint: \"ssh\" },\n ownership: \"reader\",\n });\n logOk(`Source \"${slug}\" added at ${dest}.`);\n } finally {\n close();\n }\n });\n\n // ── source list ─────────────────────────────────────────────────────────\n cmd\n .command(\"list\")\n .description(\"List registered sources\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const { manager, close } = await openLibraryManager();\n try {\n const all = await manager.listLibraries();\n const sources = all.filter(isSourceRow);\n if (opts.json) return console.log(JSON.stringify(sources, null, 2));\n if (sources.length === 0) {\n logInfo(\"No sources registered. Run `skaile source add <git-url>` to start.\");\n return;\n }\n console.log();\n console.log(S.heading(\" Sources\"));\n for (const s of sources) {\n console.log(` ${S.cmd(s.name.padEnd(20))} ${S.dim(s.path)}`);\n }\n console.log(`\\n ${S.dim(`${sources.length} source(s)`)}\\n`);\n } finally {\n close();\n }\n });\n\n // ── source show ─────────────────────────────────────────────────────────\n cmd\n .command(\"show <name>\")\n .description(\"Show details for a source\")\n .action(async (name: string) => {\n const { manager, close } = await openLibraryManager();\n try {\n const s = await manager.requireLibrary(name);\n if (!isSourceRow(s)) {\n logErr(`\"${name}\" is a library, not a source — use \\`skaile library show ${name}\\`.`);\n process.exit(1);\n }\n console.log(JSON.stringify(s, null, 2));\n } finally {\n close();\n }\n });\n\n // ── source remove ───────────────────────────────────────────────────────\n cmd\n .command(\"remove <name>\")\n .description(\"Unregister a source\")\n .option(\"--purge\", \"Also delete the clone directory from disk\", false)\n .action(async (name: string, opts: { purge: boolean }) => {\n const { manager, close } = await openLibraryManager();\n try {\n const s = await manager.requireLibrary(name);\n if (!isSourceRow(s)) {\n logErr(`\"${name}\" is a library, not a source — use \\`skaile library remove ${name}\\`.`);\n process.exit(1);\n }\n await manager.removeLibrary(name, { purge: opts.purge });\n logOk(`Removed source \"${name}\".`);\n } finally {\n close();\n }\n });\n\n // ── source sync ─────────────────────────────────────────────────────────\n cmd\n .command(\"sync [name]\")\n .description(\"Re-fetch upstream changes for one or all sources\")\n .action(async (name: string | undefined) => {\n const { manager, close } = await openLibraryManager();\n try {\n const all = await manager.listLibraries();\n const targets = name\n ? all.filter((l) => l.name === name && isSourceRow(l))\n : all.filter(isSourceRow);\n if (targets.length === 0) {\n logInfo(name ? `No source named \"${name}\".` : \"No sources registered.\");\n return;\n }\n for (const s of targets) {\n const res = await manager.driverFor(s.backend).pull(s);\n logOk(`${s.name}: pulled ${res.applied} change(s).`);\n }\n } finally {\n close();\n }\n });\n\n // ── source patch / propose (stubs) ──────────────────────────────────────\n cmd\n .command(\"patch <ref>\")\n .description(\"Extract an asset for editing against the source\")\n .action((_ref: string) => {\n logErr(\n \"`skaile source patch` is scaffolded but not yet wired. \" +\n \"The patch flow lands in a follow-up PR.\",\n );\n process.exit(2);\n });\n\n cmd\n .command(\"propose <ref>\")\n .description(\"Open a PR with the patch against the source upstream\")\n .action((_ref: string) => {\n logErr(\n \"`skaile source propose` is scaffolded but not yet wired. \" +\n \"The propose flow lands in a follow-up PR.\",\n );\n process.exit(2);\n });\n\n // ── source manifest * ───────────────────────────────────────────────────\n addSourceManifestCommands(cmd);\n\n return cmd;\n}\n","import { Command } from \"commander\";\nimport { logErr, logOk, S } from \"../helpers.ts\";\nimport {\n clearStoreTokens,\n getStoreConfig,\n isStoreAuthenticated,\n saveStoreTokens,\n storeFetch,\n} from \"../store-client.ts\";\n\n/**\n * Creates the `skaile store` command group.\n *\n * Manages authentication and publishing operations against the AI Asset Store.\n * Subcommands: `login` (GitHub OAuth or email/password), `logout`, `whoami`,\n * `publish` (push a new asset version), `yank` (soft-delete a version).\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/store#make-store-command\n */\nexport function makeStoreCommand(): Command {\n const store = new Command(\"store\").description(\"Manage the AI Asset Store\");\n\n // ── login ──\n store\n .command(\"login\")\n .description(\"Authenticate with the store\")\n .option(\"--email <email>\", \"Login with email instead of GitHub\")\n .action(async (opts) => {\n const config = getStoreConfig();\n\n if (opts.email) {\n // Email/password login\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n const password = await new Promise<string>((resolve) => {\n rl.question(\"Password: \", (answer) => {\n rl.close();\n resolve(answer);\n });\n });\n\n try {\n const res = await storeFetch<{ jwt: string; refreshToken: string; publisher: any }>(\n config,\n \"/api/auth/login\",\n { method: \"POST\", body: { email: opts.email, password } },\n );\n saveStoreTokens(res.jwt, res.refreshToken);\n logOk(`Logged in as ${S.brand(`@${res.publisher.slug}`)}`);\n } catch (e: any) {\n logErr(e.message);\n process.exit(1);\n }\n } else {\n // GitHub OAuth — open browser\n const loginUrl = `${config.url}/api/auth/login/github`;\n console.log(`\\n Opening browser to authenticate...\\n ${S.dim(loginUrl)}\\n`);\n\n // Start a local server to receive the callback\n const http = await import(\"node:http\");\n const { URL } = await import(\"node:url\");\n\n const server = http.createServer((req, res) => {\n const url = new URL(req.url ?? \"/\", \"http://localhost\");\n const jwt = url.searchParams.get(\"token\");\n const refresh = url.searchParams.get(\"refresh\");\n\n if (jwt && refresh) {\n saveStoreTokens(jwt, refresh);\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\"<h2>Authenticated! You can close this tab.</h2>\");\n logOk(\"Authenticated with the store\");\n server.close();\n } else {\n res.writeHead(400);\n res.end(\"Missing tokens\");\n }\n });\n\n server.listen(0, () => {\n const port = (server.address() as any)?.port;\n const open =\n process.platform === \"darwin\"\n ? \"open\"\n : process.platform === \"win32\"\n ? \"start\"\n : \"xdg-open\";\n import(\"node:child_process\").then(({ exec }) => {\n exec(`${open} \"${loginUrl}\"`);\n });\n console.log(` ${S.dim(`Listening on http://localhost:${port} for callback...`)}`);\n });\n\n // Timeout after 2 minutes\n setTimeout(() => {\n logErr(\"Login timed out\");\n server.close();\n process.exit(1);\n }, 120_000);\n }\n });\n\n // ── logout ──\n store\n .command(\"logout\")\n .description(\"Sign out of the store\")\n .action(async () => {\n const config = getStoreConfig();\n if (config.refreshToken) {\n try {\n await storeFetch(config, \"/api/auth/logout\", {\n method: \"POST\",\n body: { refreshToken: config.refreshToken },\n });\n } catch {\n // ignore — clear locally regardless\n }\n }\n clearStoreTokens();\n logOk(\"Logged out\");\n });\n\n // ── whoami ──\n store\n .command(\"whoami\")\n .description(\"Show current store identity\")\n .action(async () => {\n const config = getStoreConfig();\n if (!isStoreAuthenticated(config)) {\n logErr(\"Not authenticated. Run: skaile store login\");\n process.exit(1);\n }\n\n try {\n const me = await storeFetch<any>(config, \"/api/auth/me\");\n console.log();\n console.log(` ${S.heading(\"Publisher\")} ${S.brand(`@${me.slug}`)}`);\n console.log(` ${S.label(\"Name\")} ${me.displayName}`);\n console.log(` ${S.label(\"Email\")} ${me.email}`);\n console.log(` ${S.label(\"Verified\")} ${me.verified ? S.ok(\"yes\") : S.dim(\"no\")}`);\n console.log();\n } catch (e: any) {\n logErr(e.message);\n process.exit(1);\n }\n });\n\n // ── mode ──\n store\n .command(\"mode <auto|local|remote>\")\n .description(\"Set the catalog resolution mode (not yet wired)\")\n .action((_mode: string) => {\n logErr(\n \"`skaile store mode` is scaffolded but not yet wired. \" +\n \"Store config lives at ~/.skaile/store/config.yaml.\",\n );\n process.exit(2);\n });\n\n // ── search ──\n store\n .command(\"search <query>\")\n .description(\"Search the aggregated catalog (not yet wired)\")\n .action((_query: string) => {\n logErr(\"`skaile store search` is scaffolded but not yet wired.\");\n process.exit(2);\n });\n\n // ── show ──\n store\n .command(\"show <ref>\")\n .description(\"Show details + provenance for a manifest (not yet wired)\")\n .action((_ref: string) => {\n logErr(\"`skaile store show` is scaffolded but not yet wired.\");\n process.exit(2);\n });\n\n // ── favourite / unfavourite ──\n store\n .command(\"favourite <ref>\")\n .description(\"Pin a ref to your favourites (not yet wired)\")\n .action((_ref: string) => {\n logErr(\"`skaile store favourite` is scaffolded but not yet wired.\");\n process.exit(2);\n });\n store\n .command(\"unfavourite <ref>\")\n .description(\"Remove a ref from your favourites (not yet wired)\")\n .action((_ref: string) => {\n logErr(\"`skaile store unfavourite` is scaffolded but not yet wired.\");\n process.exit(2);\n });\n\n // ── sync ──\n store\n .command(\"sync\")\n .description(\"Refresh the local cache from the remote store (not yet wired)\")\n .action(() => {\n logErr(\"`skaile store sync` is scaffolded but not yet wired.\");\n process.exit(2);\n });\n\n // ── push ──\n store\n .command(\"push\")\n .description(\"Push the local store to a git remote (not yet wired)\")\n .option(\"--remote <name>\", \"Git remote name\", \"origin\")\n .action(() => {\n logErr(\"`skaile store push` is scaffolded but not yet wired.\");\n process.exit(2);\n });\n\n // ── yank ──\n store\n .command(\"yank <version>\")\n .description(\"Yank (soft-delete) a published version\")\n .option(\"--asset <ref>\", \"Asset reference (@publisher/slug)\")\n .action(async (version: string, opts) => {\n const config = getStoreConfig();\n if (!isStoreAuthenticated(config)) {\n logErr(\"Not authenticated. Run: skaile store login\");\n process.exit(1);\n }\n\n if (!opts.asset) {\n logErr(\"--asset is required (e.g. --asset @alice/my-skill)\");\n process.exit(1);\n }\n\n const ref = opts.asset.replace(/^@/, \"\");\n const [publisher, slug] = ref.split(\"/\");\n if (!publisher || !slug) {\n logErr(\"Invalid asset ref. Use format: @publisher/slug\");\n process.exit(1);\n }\n\n try {\n await storeFetch(config, `/api/assets/${publisher}/${slug}/${version}/yank`, {\n method: \"PATCH\",\n });\n logOk(`Yanked v${version} of @${publisher}/${slug}`);\n } catch (e: any) {\n logErr(e.message);\n process.exit(1);\n }\n });\n\n return store;\n}\n","import path from \"node:path\";\nimport type { DependencyNode } from \"@skaile/workspaces/asset-manager\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport { colorRef, logInfo } from \"../helpers.ts\";\n\nfunction printTree(node: DependencyNode, prefix = \"\", isLast = true): void {\n const connector = prefix === \"\" ? \"\" : isLast ? \"└─ \" : \"├─ \";\n const line = prefix + connector + colorRef(node.ref);\n console.log(` ${line}`);\n const childPrefix = prefix + (prefix === \"\" ? \"\" : isLast ? \" \" : \"│ \");\n for (let i = 0; i < node.children.length; i++) {\n printTree(node.children[i], childPrefix, i === node.children.length - 1);\n }\n}\n\n/**\n * Creates the `skaile tree` command.\n *\n * Prints the full transitive dependency tree of the installed assets using\n * ASCII art (├─ / └─), with each node coloured by asset kind.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#tree\n */\nexport function makeTreeCommand(): Command {\n return new Command(\"tree\")\n .description(\"Show full dependency tree\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const root = am.tree();\n if (root.children.length === 0) {\n logInfo(\"No dependencies in lock file. Run `skaile install` first.\");\n return;\n }\n console.log();\n printTree(root);\n console.log();\n });\n}\n","import path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport { openCatalogSource } from \"../open-library.ts\";\n\n/**\n * Creates the `skaile update` command.\n *\n * Two stages:\n * 1. **Catalog cache refresh** — invalidates the {@link RemoteCatalogSource}\n * cache at `~/.skaile/catalog-cache/` and re-fetches the asset list. This\n * is the Phase 2 entry point for users in air-gapped mode\n * (`catalog.cache_ttl: 0`) or anyone who wants a fresh view of the public\n * skaile.store catalog before installing.\n * 2. **Asset re-deploy** — `AssetManager.install()`\n * re-deploys any outdated assets in the current project from updated\n * repositories. This is the Phase 1 behavior; preserved here.\n *\n * Pass `--no-catalog` to skip stage 1 (asset-only); pass `--catalog-only` to\n * skip stage 2 (catalog-only). The default runs both.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#update\n */\nexport function makeUpdateCommand(): Command {\n return new Command(\"update\")\n .description(\"Refresh the Catalog cache and re-deploy outdated assets in the current project\")\n .argument(\"[name]\", \"Update a specific asset (kind:name)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--no-catalog\", \"Skip refreshing the catalog cache\")\n .option(\"--catalog-only\", \"Refresh the catalog cache only; do not re-deploy assets\")\n .action(\n async (\n _name: string | undefined,\n opts: { projectDir: string; catalog: boolean; catalogOnly?: boolean },\n ) => {\n // Stage 1 — catalog cache refresh (Phase 2)\n if (opts.catalog !== false) {\n try {\n const catalogSpinner = p.spinner();\n catalogSpinner.start(\"Refreshing catalog cache\");\n const remote = await openCatalogSource({ projectDir: path.resolve(opts.projectDir) });\n const result = await remote.refresh();\n catalogSpinner.stop(\n `Catalog refreshed: ${S.heading(String(result.assetsCached))} assets cached`,\n );\n logInfo(`Source: ${remote.baseUrl}`);\n } catch (err) {\n logErr(`Catalog refresh failed: ${err instanceof Error ? err.message : String(err)}`);\n logInfo(\"Continuing with asset re-deploy. Run `skaile catalog test` to debug.\");\n }\n }\n\n if (opts.catalogOnly) return;\n\n // Stage 2 — asset re-deploy (Phase 1 behavior)\n // Source sync now happens through `skaile source sync`; this command\n // only re-runs install against the existing Library cache.\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const spinner = p.spinner();\n spinner.start(\"Re-deploying assets\");\n const result = await am.install();\n spinner.stop(\"Done\");\n if (result.deployed.length > 0) {\n for (const d of result.deployed) logOk(`Updated ${d}`);\n } else {\n logInfo(\"Nothing to update.\");\n }\n if (result.collisions.length > 0) {\n for (const c of result.collisions) {\n logWarn(\n `${c.key} resolved from ${S.heading(c.resolvedFrom)}, also found in: ${c.shadowedIn.join(\", \")}`,\n );\n }\n }\n },\n );\n}\n","/**\n * Validate asset versions, changelogs, and manifest schemas across asset repos.\n */\n\nimport { execSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { parseSkillFrontmatter, validateFlowVersions } from \"@skaile/workspaces/resolver\";\nimport type { IAssetKindRegistry } from \"@skaile/workspaces/plugins\";\nimport { Command } from \"commander\";\nimport { parse as parseYaml } from \"yaml\";\nimport { logErr, logInfo, logOk, logWarn } from \"../helpers.ts\";\nimport { createFullRegistry } from \"../open-registry.ts\";\nimport { AI_RESOURCES } from \"../paths.ts\";\n\n// ---------------------------------------------------------------------------\n// Manifest schema validation (skaile validate [path])\n// ---------------------------------------------------------------------------\n\n/** Per-type regex patterns for deterministic asset discovery. */\nconst MANIFEST_GLOBS: Array<{ pattern: RegExp; kind: string }> = [\n { pattern: /\\/SKILL\\.md$/, kind: \"skill\" },\n { pattern: /\\/agent\\.yaml$/, kind: \"agent\" },\n { pattern: /\\/AGENT\\.md$/, kind: \"agent\" },\n { pattern: /\\/CONTRACT\\.md$/, kind: \"contract\" },\n { pattern: /\\.flow\\.yaml$/, kind: \"flow\" },\n { pattern: /\\.flow\\.json$/, kind: \"flow\" },\n { pattern: /\\/CONNECTOR\\.md$/, kind: \"connector\" },\n { pattern: /\\/MOUNT\\.md$/, kind: \"mount\" },\n { pattern: /\\.prompt\\.md$/, kind: \"prompt\" },\n { pattern: /\\/MCP\\.md$/, kind: \"mcp-server\" },\n { pattern: /\\/knowledge\\.yaml$/, kind: \"knowledge\" },\n { pattern: /\\/knowledge\\/index\\.yaml$/, kind: \"knowledge\" },\n { pattern: /\\.preset\\.yaml$/, kind: \"preset\" },\n];\n\n/** Directories to skip during tree walk. */\nconst SKIP_DIRS = new Set([\"node_modules\", \"dist\", \".git\", \".skaile\", \"__pycache__\"]);\n\ninterface ManifestCandidate {\n filePath: string;\n kind: string;\n}\n\n/** Recursively walk a directory tree and find manifest candidates. */\nfunction findManifestCandidates(rootPath: string): ManifestCandidate[] {\n const candidates: ManifestCandidate[] = [];\n\n function walk(dir: string): void {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (!SKIP_DIRS.has(entry.name)) walk(fullPath);\n } else if (entry.isFile()) {\n for (const glob of MANIFEST_GLOBS) {\n if (glob.pattern.test(fullPath)) {\n candidates.push({ filePath: fullPath, kind: glob.kind });\n break;\n }\n }\n }\n }\n }\n\n walk(rootPath);\n return candidates;\n}\n\n/** Parse frontmatter from a markdown file (SKILL.md, CONTRACT.md, etc.) */\nfunction parseMdFrontmatter(content: string): unknown {\n const fmMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n if (!fmMatch) return null;\n return parseYaml(fmMatch[1]);\n}\n\n/** Validate all manifest files in a directory tree using the kind registry. */\nfunction validateManifests(rootPath: string): { total: number; errors: number; warnings: number } {\n const absRoot = path.resolve(rootPath);\n if (!fs.existsSync(absRoot)) {\n logErr(`Path does not exist: ${absRoot}`);\n return { total: 0, errors: 1, warnings: 0 };\n }\n\n const registry: IAssetKindRegistry = createFullRegistry();\n const candidates = findManifestCandidates(absRoot);\n let errors = 0;\n let warnings = 0;\n\n for (const c of candidates) {\n const content = fs.readFileSync(c.filePath, \"utf-8\");\n let parsed: unknown;\n\n // Parse based on file type\n if (c.filePath.endsWith(\".md\")) {\n parsed = parseMdFrontmatter(content);\n if (parsed === null) {\n // MD files without frontmatter are not necessarily errors\n // (could be pure prose contracts)\n continue;\n }\n } else {\n // YAML/JSON files\n try {\n parsed = c.filePath.endsWith(\".json\") ? JSON.parse(content) : parseYaml(content);\n } catch (e) {\n const relPath = path.relative(absRoot, c.filePath);\n logErr(`${relPath} — parse error: ${e instanceof Error ? e.message : String(e)}`);\n errors++;\n continue;\n }\n }\n\n // Route validation through the registry (A5: unregistered kinds get a WARN)\n const provider = registry.getProvider(c.kind);\n const relPath = path.relative(absRoot, c.filePath);\n\n if (!provider) {\n logWarn(`${relPath} [${c.kind}] — kind \"${c.kind}\" is not registered, skipping validation`);\n warnings++;\n continue;\n }\n\n const result = provider.validateManifest(parsed);\n if (!result.ok) {\n for (const err of result.errors) {\n logErr(`${relPath} [${c.kind}] — ${err.path ? `${err.path}: ` : \"\"}${err.message}`);\n }\n errors += result.errors.length;\n }\n }\n\n return { total: candidates.length, errors, warnings };\n}\n\n/** Domains excluded from version/changelog checks */\nconst EXCLUDED_DOMAINS = new Set([\"skaileup-shared\", \"external\", \"docs\"]);\n\ninterface AssetVersion {\n kind: \"skill\" | \"agent\" | \"flow\" | \"prompt\";\n name: string;\n domain: string;\n version: string;\n filePath: string;\n}\n\n/** Walk ai-assets and collect all asset versions */\nfunction collectAssetVersions(): AssetVersion[] {\n const assets: AssetVersion[] = [];\n if (!fs.existsSync(AI_RESOURCES)) return assets;\n\n const domains = fs\n .readdirSync(AI_RESOURCES, { withFileTypes: true })\n .filter((d) => d.isDirectory() && !EXCLUDED_DOMAINS.has(d.name));\n\n for (const d of domains) {\n const domainDir = path.join(AI_RESOURCES, d.name);\n\n // Skills\n const skillsDir = path.join(domainDir, \"skills\");\n if (fs.existsSync(skillsDir)) {\n collectSkillVersions(skillsDir, d.name, assets);\n }\n\n // Agents\n const agentsDir = path.join(domainDir, \"agents\");\n if (fs.existsSync(agentsDir)) {\n collectAgentVersions(agentsDir, d.name, assets);\n }\n\n // Flows\n const flowsDir = path.join(domainDir, \"flows\");\n if (fs.existsSync(flowsDir)) {\n for (const f of fs.readdirSync(flowsDir)) {\n if (!f.endsWith(\".flow.yaml\")) continue;\n const fp = path.join(flowsDir, f);\n const content = fs.readFileSync(fp, \"utf-8\");\n const parsed = parseYaml(content);\n assets.push({\n kind: \"flow\",\n name: parsed?.id ?? f.replace(\".flow.yaml\", \"\"),\n domain: d.name,\n version: parsed?.version ?? \"\",\n filePath: fp,\n });\n }\n }\n\n // Prompts\n const promptsDir = path.join(domainDir, \"prompts\");\n if (fs.existsSync(promptsDir)) {\n for (const f of fs.readdirSync(promptsDir)) {\n if (!f.endsWith(\".prompt.md\")) continue;\n const fp = path.join(promptsDir, f);\n const content = fs.readFileSync(fp, \"utf-8\");\n const fm = parseSkillFrontmatter(content);\n assets.push({\n kind: \"prompt\",\n name: fm?.name ?? f.replace(\".prompt.md\", \"\"),\n domain: d.name,\n version: fm?.metadata?.version ?? \"\",\n filePath: fp,\n });\n }\n }\n }\n\n return assets;\n}\n\nfunction collectSkillVersions(dir: string, domain: string, out: AssetVersion[]): void {\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const full = path.join(dir, entry.name);\n const skillMd = path.join(full, \"SKILL.md\");\n if (fs.existsSync(skillMd)) {\n const content = fs.readFileSync(skillMd, \"utf-8\");\n const fm = parseSkillFrontmatter(content);\n out.push({\n kind: \"skill\",\n name: fm?.name ?? entry.name,\n domain,\n version: fm?.metadata?.version ?? \"\",\n filePath: skillMd,\n });\n } else {\n collectSkillVersions(full, domain, out);\n }\n }\n}\n\nfunction collectAgentVersions(dir: string, domain: string, out: AssetVersion[]): void {\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const agentYaml = path.join(dir, entry.name, \"agent.yaml\");\n if (!fs.existsSync(agentYaml)) continue;\n const content = fs.readFileSync(agentYaml, \"utf-8\");\n const parsed = parseYaml(content);\n out.push({\n kind: \"agent\",\n name: parsed?.name ?? entry.name,\n domain,\n version: parsed?.version ?? \"\",\n filePath: agentYaml,\n });\n }\n}\n\n/** Check if a version string is valid 3-part semver */\nfunction isValidSemver(v: string): boolean {\n return /^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?(\\+[\\w.]+)?$/.test(v);\n}\n\n/** Extract version from file content using proper YAML parsing */\nfunction extractVersionFromContent(filePath: string, content: string): string | null {\n if (filePath.endsWith(\".yaml\")) {\n const parsed = parseYaml(content);\n return parsed?.version ?? null;\n }\n // SKILL.md / .prompt.md — YAML frontmatter\n const fmMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n if (!fmMatch) return null;\n const parsed = parseYaml(fmMatch[1]);\n return parsed?.metadata?.version ?? parsed?.version ?? null;\n}\n\n/**\n * Creates the `skaile validate` command group.\n *\n * Validates asset manifests, version fields, and changelogs in an asset\n * repository tree. Subcommands: default `validate [path]` (schema check),\n * `versions` (semver + flow pin validation), `changelog` (modified domains\n * must have updated CHANGELOG.md).\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/validate#make-validate-command\n */\nexport function makeValidateCommand(): Command {\n const cmd = new Command(\"validate\").description(\n \"Validate asset manifests, versions, and changelogs\",\n );\n\n // Default action: skaile validate [path]\n cmd\n .argument(\"[path]\", \"Path to asset repo or directory to validate\", \".\")\n .action((targetPath: string) => {\n const absPath = path.resolve(targetPath);\n logInfo(`Validating manifests in ${absPath}`);\n const { total, errors } = validateManifests(absPath);\n console.log();\n logInfo(`Scanned ${total} manifest files`);\n if (errors === 0) {\n logOk(\"All manifests valid\");\n } else {\n logErr(`${errors} validation error(s)`);\n process.exit(1);\n }\n });\n\n cmd\n .command(\"versions\")\n .description(\"Check version fields and flow version pins\")\n .option(\"--domain <name>\", \"Scope to one domain\")\n .option(\"--changed-only\", \"Only check assets modified since last commit\")\n .option(\"--strict\", \"Exit 1 on warnings (for CI)\")\n .action((opts: { domain?: string; changedOnly?: boolean; strict?: boolean }) => {\n let assets = collectAssetVersions().filter((a) => !opts.domain || a.domain === opts.domain);\n\n // Filter to changed files only if requested\n if (opts.changedOnly) {\n try {\n const diffOutput = execSync(\"git diff --name-only HEAD\", {\n cwd: AI_RESOURCES,\n encoding: \"utf-8\",\n });\n const changedFiles = new Set(\n diffOutput\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((f) => path.resolve(AI_RESOURCES, f)),\n );\n assets = assets.filter((a) => changedFiles.has(a.filePath));\n } catch {\n logErr(\"Failed to run git diff — are you in a git repository?\");\n process.exit(1);\n }\n }\n\n let errors = 0;\n let warnings = 0;\n\n // Check all assets have valid versions\n for (const a of assets) {\n if (!a.version) {\n logErr(`${a.kind}:${a.name} (${a.domain}) — missing version`);\n errors++;\n } else if (!isValidSemver(a.version)) {\n logWarn(`${a.kind}:${a.name} (${a.domain}) — version \"${a.version}\" is not valid semver`);\n warnings++;\n }\n }\n\n // In --changed-only mode, check if version was actually bumped\n if (opts.changedOnly) {\n for (const a of assets) {\n if (!a.version) continue; // already flagged above\n const relPath = path.relative(AI_RESOURCES, a.filePath);\n try {\n const headContent = execSync(`git show HEAD:${relPath}`, {\n cwd: AI_RESOURCES,\n encoding: \"utf-8\",\n });\n const headVersion = extractVersionFromContent(a.filePath, headContent);\n if (headVersion && headVersion === a.version) {\n logWarn(\n `${a.kind}:${a.name} (${a.domain}) — file changed but version not bumped (${a.version})`,\n );\n warnings++;\n }\n } catch {\n // New file (no HEAD version) — that's fine\n }\n }\n }\n\n // Check flow node version pins\n const flows = assets.filter((a) => a.kind === \"flow\");\n const skillVersionMap = new Map<string, string>();\n for (const a of assets.filter((a) => a.kind === \"skill\")) {\n skillVersionMap.set(a.name, a.version);\n }\n\n for (const f of flows) {\n const content = fs.readFileSync(f.filePath, \"utf-8\");\n const parsed = parseYaml(content);\n const nodes = (parsed?.nodes ?? [])\n .filter((n: any) => n.type === \"skill\" && n.data?.version)\n .map((n: any) => ({\n nodeId: n.id,\n skillId: n.data?.skill ?? n.id,\n requestedVersion: n.data?.version,\n }));\n\n if (nodes.length === 0) continue;\n const checks = validateFlowVersions(nodes, skillVersionMap);\n for (const c of checks.filter((c) => !c.satisfied)) {\n logErr(\n `flow:${f.name} node ${c.nodeId} — wants ${c.requested}, found ${c.actual || \"(none)\"}`,\n );\n errors++;\n }\n }\n\n // Summary\n console.log();\n logInfo(`Checked ${assets.length} assets`);\n if (errors === 0 && warnings === 0) {\n logOk(\"All versions valid\");\n } else {\n if (errors > 0) logErr(`${errors} error(s)`);\n if (warnings > 0) logWarn(`${warnings} warning(s)`);\n }\n\n if (errors > 0 || (opts.strict && warnings > 0)) {\n process.exit(1);\n }\n });\n\n cmd\n .command(\"changelog\")\n .description(\"Check that modified domains have updated changelogs\")\n .option(\"--base <ref>\", \"Git base ref for diff\", \"HEAD\")\n .action((opts: { base: string }) => {\n let diffOutput: string;\n try {\n diffOutput = execSync(`git diff --name-only ${opts.base}`, {\n cwd: AI_RESOURCES,\n encoding: \"utf-8\",\n });\n } catch {\n logErr(\"Failed to run git diff — are you in a git repository?\");\n process.exit(1);\n return;\n }\n\n const modifiedFiles = diffOutput.trim().split(\"\\n\").filter(Boolean);\n const assetPattern = /(SKILL\\.md|agent\\.yaml|\\.flow\\.yaml|\\.prompt\\.md)$/;\n const modifiedAssets = modifiedFiles.filter((f) => assetPattern.test(f));\n\n const modifiedDomains = new Set<string>();\n for (const f of modifiedAssets) {\n const parts = f.split(\"/\");\n if (parts.length >= 1 && !EXCLUDED_DOMAINS.has(parts[0])) {\n modifiedDomains.add(parts[0]);\n }\n }\n\n if (modifiedDomains.size === 0) {\n logOk(\"No modified assets found\");\n return;\n }\n\n let errors = 0;\n for (const domain of modifiedDomains) {\n const changelogModified = modifiedFiles.some(\n (f) => f === `${domain}/CHANGELOG.md` || f === path.join(domain, \"CHANGELOG.md\"),\n );\n if (changelogModified) {\n logOk(`${domain}/CHANGELOG.md updated`);\n } else {\n logErr(`${domain}/CHANGELOG.md not updated (assets were modified)`);\n errors++;\n }\n }\n\n if (errors > 0) process.exit(1);\n });\n\n return cmd;\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, S } from \"../helpers.js\";\nimport { getStoreConfig, storeFetch } from \"../store-client.js\";\n\n/**\n * Creates the `skaile verify` command.\n *\n * Checks installed assets in `skaile.lock.yaml` against the store's signed\n * manifests. Exits 1 on hash mismatches; with `--strict` also exits 1 if any\n * asset has no store record.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#verify\n */\nexport function makeVerifyCommand(): Command {\n return new Command(\"verify\")\n .description(\"Verify installed assets against store signatures\")\n .option(\"--strict\", \"Exit with code 1 if any asset is unverified\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts) => {\n const projectDir = resolve(opts.projectDir);\n const lockPath = join(projectDir, \"skaile.lock.yaml\");\n\n if (!existsSync(lockPath)) {\n logInfo(\"No skaile.lock.yaml found — nothing to verify\");\n return;\n }\n\n // Parse lock file\n const yaml = await import(\"yaml\");\n const lockContent = readFileSync(lockPath, \"utf-8\");\n const lock = yaml.parse(lockContent);\n\n if (!lock?.assets || Object.keys(lock.assets).length === 0) {\n logInfo(\"No assets in lock file\");\n return;\n }\n\n console.log();\n console.log(` ${S.heading(\"Verifying installed assets...\")}`);\n console.log();\n\n let verified = 0;\n let unverified = 0;\n let failed = 0;\n\n const config = getStoreConfig();\n\n for (const [ref, entry] of Object.entries(lock.assets) as [string, any][]) {\n if (!entry.store_ref || !entry.content_hash || !entry.store_signature) {\n // No store metadata — local-only asset\n console.log(` ${S.dim(\"○\")} ${ref.padEnd(40)} ${S.dim(\"local only — no store record\")}`);\n unverified++;\n continue;\n }\n\n try {\n // Extract publisher/slug/version from store_ref URL\n // Expected path: /api/assets/:publisher/:slug/:version\n const urlParts = new URL(entry.store_ref).pathname.split(\"/\").filter(Boolean);\n const [, , publisher, slug, version] = urlParts;\n\n const sigData = await storeFetch<{ manifest: any; signature: string }>(\n config,\n `/api/assets/${publisher}/${slug}/${version}/sig`,\n );\n\n // Compare content hashes\n if (sigData.manifest.content_hash === entry.content_hash) {\n console.log(\n ` ${S.ok(\"✓\")} ${ref.padEnd(40)} ${S.dim(`${entry.content_hash.slice(0, 20)}...`)} ${S.ok(\"verified\")}`,\n );\n verified++;\n } else {\n console.log(\n ` ${S.err(\"✗\")} ${ref.padEnd(40)} ${S.err(\"HASH MISMATCH\")} — expected ${entry.content_hash.slice(0, 16)}... got ${sigData.manifest.content_hash.slice(0, 16)}...`,\n );\n failed++;\n }\n } catch (e: any) {\n console.log(\n ` ${S.warn(\"!\")} ${ref.padEnd(40)} ${S.warn(`verification failed: ${e.message}`)}`,\n );\n failed++;\n }\n }\n\n console.log();\n console.log(\n ` ${S.heading(\"Summary:\")} ${S.ok(`${verified} verified`)} ${unverified ? S.dim(`${unverified} unverified`) : \"\"} ${failed ? S.err(`${failed} failed`) : \"\"}`,\n );\n console.log();\n\n if (opts.strict && (unverified > 0 || failed > 0)) {\n logErr(\"Strict mode: not all assets are verified\");\n process.exit(1);\n }\n\n if (failed > 0) {\n process.exit(1);\n }\n });\n}\n","import path from \"node:path\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport { colorRef, logErr, S } from \"../helpers.ts\";\n\n/**\n * Creates the `skaile why` command.\n *\n * Shows why an asset is installed by printing its dependency chain from the\n * top-level skaile.yaml requirement down to the asset.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#why\n */\nexport function makeWhyCommand(): Command {\n return new Command(\"why\")\n .description(\"Show why an asset is installed (dependency chain)\")\n .argument(\"<ref>\", \"Asset reference (kind:name)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((ref: string, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const chain = am.why(ref);\n if (chain.length === 0) {\n logErr(`${ref} not found in lock file. Run \\`skaile install\\` first.`);\n return;\n }\n console.log();\n console.log(S.heading(\" Dependency chain\"));\n for (let i = 0; i < chain.length; i++) {\n const indent = \" \".repeat(i);\n const arrow = i === 0 ? \"\" : \"← \";\n console.log(` ${indent}${arrow}${colorRef(chain[i])}`);\n }\n console.log();\n });\n}\n","#!/usr/bin/env node\n/**\n * skaile — AI asset manager\n *\n * Run `skaile --help` for the full command reference.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { DriverTarget } from \"@skaile/workspaces/core\";\nimport { Command, Help } from \"commander\";\nimport { makeAssetCommand } from \"./commands/asset-cmd.ts\";\nimport { makeAuthCommand } from \"./commands/auth.ts\";\nimport {\n makeAddCommand,\n makeCreateCommand,\n makeDoctorCommand,\n makeInfoCommand,\n makeListCommand,\n makeRemoveCommand,\n makeSearchCommand,\n} from \"./commands/catalog.ts\";\nimport { makeCatalogCommand } from \"./commands/catalog-cmd.ts\";\nimport { makeCompleteCommand } from \"./commands/complete.ts\";\nimport { makeConfigCommand } from \"./commands/config.ts\";\nimport { makeConnectCommand } from \"./commands/connect.ts\";\nimport { makeConnectorCommand } from \"./commands/connector.ts\";\nimport { makeDebugCommand } from \"./commands/debug.ts\";\nimport { makeDiffCommand } from \"./commands/diff.ts\";\nimport { makeFlowCommand } from \"./commands/flow.ts\";\nimport { makeHistoryCommand } from \"./commands/history.ts\";\nimport { makeLibraryCommand } from \"./commands/library-cmd.ts\";\nimport { makeLogsCommand } from \"./commands/logs.ts\";\nimport { makeManageCommand } from \"./commands/manage.ts\";\nimport { makeMcpServerCommand } from \"./commands/mcp-server.ts\";\nimport { makeNpxCommand } from \"./commands/npx.ts\";\nimport { makeOutdatedCommand } from \"./commands/outdated.ts\";\nimport { makePatchCommand } from \"./commands/patch.ts\";\nimport { makePluginCommand } from \"./commands/plugin.ts\";\nimport { makePresetCommand } from \"./commands/preset-cmd.ts\";\nimport { makeCheckCommand, makeCleanCommand, makeInstallCommand } from \"./commands/project.ts\";\nimport { makeRebuildCommand } from \"./commands/rebuild.ts\";\nimport {\n makeClearCommand,\n makeReplCommand,\n makeResumeCommand,\n makeRunCommand,\n makeStatusCommand,\n} from \"./commands/run.ts\";\nimport { makeServeCommand } from \"./commands/serve.ts\";\nimport { makeSessionCommand } from \"./commands/session.ts\";\nimport { makeShowCommand } from \"./commands/show.ts\";\nimport { makeSourceCommand } from \"./commands/source.ts\";\nimport { makeStoreCommand } from \"./commands/store.ts\";\nimport { makeTreeCommand } from \"./commands/tree.ts\";\nimport { makeUpdateCommand } from \"./commands/update.ts\";\nimport { makeValidateCommand } from \"./commands/validate.ts\";\nimport { makeVerifyCommand } from \"./commands/verify.ts\";\nimport { makeWhyCommand } from \"./commands/why.ts\";\nimport { logErr, logOk, S } from \"./helpers.ts\";\nimport { AI_RESOURCES } from \"./paths.ts\";\n\nconst _defaultFormatHelp = Help.prototype.formatHelp;\n\nconst pkg = JSON.parse(\n readFileSync(\n path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"../../package.json\"),\n \"utf-8\",\n ),\n) as { version: string };\n\nconst program = new Command(\"skaile\")\n .description(\"AI asset manager\")\n .version(pkg.version, \"-v, --version\", \"Show the skaile CLI version\")\n .enablePositionalOptions()\n .configureHelp({\n formatHelp(cmd, helper) {\n if (cmd.name() !== \"skaile\") return _defaultFormatHelp.call(helper, cmd, helper);\n return `\nskaile — AI asset manager\n\nProject:\n init [dir] Initialize a project directory (default: .)\n install [--locked] Install deps (dev mode or CI mode)\n check Check for unmet requirements\n clean [--all] [--dry-run] Remove skaile-managed assets\n setup Interactive provider setup wizard\n config show|get|set Personal settings\n\nAssets (skill, agent, prompt, flow, bundle, contract):\n add <ref> [--global] Add to skaile.yaml + deploy\n remove <ref> [--global] Remove from skaile.yaml + undeploy\n list [kind] List deployed assets\n show Installed assets by domain with sync status\n show <kind> <name> Print raw asset content\n search [kind] [query] Search across all repos\n info <ref> Metadata, deps, deploy status\n why <ref> Show why installed (dep chain)\n tree Dependency tree\n update [name] Re-deploy outdated assets\n outdated [name] Check for newer versions\n diff <ref> Deployed vs source diff\n doctor [name] Scan for broken deps\n create <name> [--kind <k>] Scaffold a new asset\n manage Interactive TUI (add/remove/sync/patch)\n history [limit] Recent actions\n\nPatches:\n patch extract <ref> Extract asset for editing\n patch commit <ref> Generate .patch file\n patch submit <ref> Apply to repo + prepare PR\n patch remove <ref> Remove after upstream merge\n\nExecution:\n run <flow-or-text> Run a flow or send a single prompt\n repl Interactive agent REPL\n resume Resume last session\n serve [--compile-test] Start WebSocket agent server\n mcp-server Start workspace MCP server (for .claude/mcp.json)\n plugin install [--driver all] Install workspace plugin (claude-code | omp | codex)\n plugin uninstall [--driver all] Uninstall workspace plugin\n plugin enable Enable plugin (claude-code only)\n plugin disable Disable plugin (claude-code only)\n plugin status Show install / enable state across backends\n debug tools|connectors|mcp|config|state Inspect running container state\n connect <url> Interactive WebSocket REPL\n logs [--follow] [--filter] Tail skaile container logs\n session list|show|switch|del Session management\n status Current session state\n clear Unset current session\n\nValidation:\n validate versions Check asset version fields and flow pins\n validate changelog Check changelogs for modified domains\n\nSources (github repos of AI assets):\n source add <git-url> Clone + register a github source\n source list / show / remove Source registry CRUD\n source sync [name] Re-fetch upstream changes\n source patch / propose Contribute back via PR\n source manifest * Sidecar manifest lifecycle\n\nLibraries (your authoring workspaces):\n library init <name> Create a local library (use --git URL to attach a remote)\n library link <name> <url> Attach a github remote to a local library\n library create <kind> <name> Scaffold a new asset in a library\n library list / show / status Library inspection\n library default <name> Set the default library\n library rename / set / remove\n library commit / pull / push / propose / git Git ops (git backend only)\n library sync <name> Pull then push (as backend permits)\n library publish / register / yank <ref> Store publish flow (stubs)\n\nStore (manifest catalog + auth):\n store login / logout / whoami / yank Auth + admin\n store mode <auto|local|remote> Resolution mode (stub)\n store search / show / favourite / unfavourite Catalog browsing (stub)\n store sync / push Local-store sync (stub)\n\nCatalog (debug):\n catalog test / show Probe a catalog endpoint, print resolved config\n\nPresets:\n preset init [name] Scaffold a .preset.yaml\n preset validate <path> Validate a preset file\n\nAdvanced:\n flow list|show Flow browsing\n connector ... Connector operations\n path Show resolved paths\n\n Run skaile <command> --help for per-command options.\n`;\n },\n });\n\n// ── Project ──────────────────────────────────────────────────────────────────\n\nprogram\n .command(\"init [project-dir]\")\n .description(\"Initialize a project directory (defaults to current directory)\")\n .option(\n \"--backend <name>\",\n \"Coding-agent backend (claude-code | omp | codex)\",\n \"claude-code\",\n )\n .option(\"--no-git\", \"Skip git init and .gitignore\")\n .action(\n async (\n projectDir: string | undefined,\n opts: { backend: string; git: boolean },\n ) => {\n const { execSync } = await import(\"node:child_process\");\n const { existsSync, mkdirSync, readFileSync, writeFileSync } = await import(\"node:fs\");\n const { stringify } = await import(\"yaml\");\n const { DRIVER_TARGETS, SUPPORTED_DRIVER_TARGETS } = await import(\n \"@skaile/workspaces/core\"\n );\n\n const backend = opts.backend as DriverTarget;\n if (!SUPPORTED_DRIVER_TARGETS.includes(backend)) {\n logErr(\n `Unknown backend \"${opts.backend}\". Supported: ${SUPPORTED_DRIVER_TARGETS.join(\", \")}`,\n );\n process.exitCode = 1;\n return;\n }\n\n const resolved = path.resolve(projectDir ?? \".\");\n const projectName = path.basename(resolved);\n const created: string[] = [];\n\n if (!existsSync(resolved)) {\n mkdirSync(resolved, { recursive: true });\n created.push(\".\");\n }\n\n const skaileDir = path.join(resolved, \".skaile\");\n if (!existsSync(skaileDir)) {\n mkdirSync(path.join(skaileDir, \"sessions\"), { recursive: true });\n created.push(\".skaile/\");\n }\n\n const settingsPath = path.join(skaileDir, \"settings.json\");\n if (!existsSync(settingsPath)) {\n writeFileSync(settingsPath, \"{}\\n\");\n created.push(\".skaile/settings.json\");\n }\n\n const wsConfigPath = path.join(resolved, \"skaile.yaml\");\n if (!existsSync(wsConfigPath)) {\n writeFileSync(\n wsConfigPath,\n stringify({\n name: projectName,\n description: `${projectName} AI skill dependencies`,\n \"agent-config\": {\n default: {\n agent: backend,\n provider: \"anthropic\",\n model: \"claude-sonnet-4-6\",\n driver: \"claude-sdk\",\n max_turns: 200,\n },\n },\n ai_resources: [],\n }),\n );\n created.push(\"skaile.yaml\");\n }\n\n for (const dir of new Set(Object.values(DRIVER_TARGETS[backend].local))) {\n const full = path.join(resolved, dir);\n if (!existsSync(full)) {\n mkdirSync(full, { recursive: true });\n created.push(`${dir}/`);\n }\n }\n\n if (opts.git) {\n const gitignorePath = path.join(resolved, \".gitignore\");\n const entries = [\"node_modules/\", \".skaile/sessions/\", \"*.log\", \".env\", \".env.local\"];\n const existing = existsSync(gitignorePath) ? readFileSync(gitignorePath, \"utf-8\") : \"\";\n const have = new Set(existing.split(\"\\n\").map((l) => l.trim()));\n const append = entries.filter((e) => !have.has(e));\n if (append.length > 0) {\n const prefix = existing && !existing.endsWith(\"\\n\") ? \"\\n\" : \"\";\n writeFileSync(gitignorePath, existing + prefix + `${append.join(\"\\n\")}\\n`);\n if (!existing) created.push(\".gitignore\");\n }\n if (!existsSync(path.join(resolved, \".git\"))) {\n try {\n execSync(\"git init\", { cwd: resolved, stdio: \"pipe\" });\n created.push(\".git/\");\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.log(` ${S.dim(`⚠ git init failed: ${msg}`)}`);\n }\n }\n }\n\n try {\n const fs = await import(\"node:fs\");\n const { userConfigPath, saveConfig, getConfigDefaults } = await import(\n \"@skaile/workspaces/library\"\n );\n const userCfgPath = userConfigPath();\n if (!fs.existsSync(userCfgPath)) {\n const defaults = getConfigDefaults();\n saveConfig(userCfgPath, {\n catalog: { url: defaults.catalog.url, cache_ttl: defaults.catalog.cache_ttl },\n });\n console.log(` ${S.dim(`✓ wrote default user config at ${userCfgPath}`)}`);\n }\n } catch (err) {\n console.log(\n ` ${S.dim(`⚠ could not bootstrap user config: ${err instanceof Error ? err.message : String(err)}`)}`,\n );\n }\n\n for (const c of created) console.log(` ${S.dim(`+ ${c}`)}`);\n logOk(`Initialized project at ${S.heading(resolved)}`);\n console.log();\n console.log(S.heading(\" Next steps:\"));\n const isCurrentDir = resolved === path.resolve(\".\");\n let step = 1;\n if (!isCurrentDir) {\n console.log(` ${S.dim(`${step}.`)} ${S.cmd(`cd ${projectDir}`)}`);\n step++;\n }\n console.log(` ${S.dim(`${step}.`)} Edit ${S.cmd(\"skaile.yaml\")} to add dependencies`);\n step++;\n console.log(` ${S.dim(`${step}.`)} ${S.cmd(\"skaile install\")}`);\n console.log();\n },\n );\n\nprogram\n .command(\"setup\")\n .description(\"Interactive provider setup wizard\")\n .action(async () => {\n const { cmdSetup } = await import(\"./setup.ts\");\n await cmdSetup([], { projectDir: process.cwd() });\n });\n\nprogram.addCommand(makeInstallCommand());\nprogram.addCommand(makeCheckCommand());\nprogram.addCommand(makeCleanCommand());\nprogram.addCommand(makeConfigCommand());\n\n// ── Assets ───────────────────────────────────────────────────────────────────\n\nprogram.addCommand(makeAddCommand());\nprogram.addCommand(makeRemoveCommand());\nprogram.addCommand(makeListCommand());\nprogram.addCommand(makeSearchCommand());\nprogram.addCommand(makeInfoCommand());\nprogram.addCommand(makeShowCommand());\nprogram.addCommand(makeWhyCommand());\nprogram.addCommand(makeTreeCommand());\nprogram.addCommand(makeUpdateCommand());\nprogram.addCommand(makeCatalogCommand());\nprogram.addCommand(makeOutdatedCommand());\nprogram.addCommand(makeDiffCommand());\nprogram.addCommand(makeDoctorCommand());\nprogram.addCommand(makeCreateCommand());\nprogram.addCommand(makeManageCommand());\nprogram.addCommand(makeHistoryCommand());\n\n// ── Patches ──────────────────────────────────────────────────────────────────\n\nprogram.addCommand(makePatchCommand());\n\n// ── Execution ────────────────────────────────────────────────────────────────\n\nprogram.addCommand(makeRunCommand());\nprogram.addCommand(makeReplCommand());\nprogram.addCommand(makeResumeCommand());\nprogram.addCommand(makeServeCommand());\nprogram.addCommand(makeMcpServerCommand());\nprogram.addCommand(makePluginCommand());\nprogram.addCommand(makeDebugCommand());\nprogram.addCommand(makeConnectCommand());\nprogram.addCommand(makeLogsCommand());\nprogram.addCommand(makeSessionCommand());\nprogram.addCommand(makeStatusCommand());\nprogram.addCommand(makeClearCommand());\n\n// ── Advanced ─────────────────────────────────────────────────────────────────\n\nprogram.addCommand(makeFlowCommand(), { hidden: true });\nprogram.addCommand(makeNpxCommand(), { hidden: true });\nprogram.addCommand(makeConnectorCommand());\nprogram.addCommand(makeValidateCommand());\nprogram.addCommand(makeAuthCommand());\nprogram.addCommand(makeRebuildCommand());\nprogram.addCommand(makeVerifyCommand());\nprogram.addCommand(makeStoreCommand());\n\n// ── Sources / Libraries / Store (2026-05-27 vocabulary cleanup) ─────────────\n\nprogram.addCommand(makeSourceCommand());\nprogram.addCommand(makeLibraryCommand());\nprogram.addCommand(makeAssetCommand());\nprogram.addCommand(makePresetCommand());\n\nprogram\n .command(\"path\")\n .description(\"Show resolved paths\")\n .action(() => {\n console.log();\n console.log(` ${S.dim(\"ai-assets\")} ${S.heading(AI_RESOURCES)}`);\n console.log(` ${S.dim(\"patches-dir\")} ${S.heading(\".skaile/patches/\")}`);\n console.log();\n });\n\n// Complete must be added last\nprogram.addCommand(makeCompleteCommand(program));\n\nawait program.parseAsync();\n"]}
|
|
1
|
+
{"version":3,"sources":["../../cli/src/commands/asset-cmd.ts","../../cli/src/commands/auth.ts","../../cli/src/commands/catalog.ts","../../cli/src/commands/catalog-cmd.ts","../../cli/src/completion.ts","../../cli/src/skill-walker.ts","../../cli/src/commands/complete-resolvers.ts","../../cli/src/commands/complete.ts","../../cli/src/commands/config.ts","../../cli/src/commands/connect.ts","../../cli/src/commands/connector.ts","../../cli/src/commands/debug.ts","../../cli/src/commands/diff.ts","../../cli/src/commands/flow.ts","../../cli/src/commands/history.ts","../../cli/src/commands/library-cmd.ts","../../cli/src/commands/logs.ts","../../cli/src/commands/manage.ts","../../cli/src/commands/mcp-server.ts","../../cli/src/commands/npx.ts","../../cli/src/commands/outdated.ts","../../cli/src/commands/patch.ts","../../cli/src/commands/plugin/claude-code.ts","../../cli/src/commands/plugin/codex.ts","../../cli/src/commands/plugin/omp.ts","../../cli/src/commands/plugin.ts","../../cli/src/commands/preset-cmd.ts","../../cli/src/commands/project.ts","../../cli/src/commands/rebuild.ts","../../cli/src/commands/run.ts","../../cli/src/commands/serve.ts","../../cli/src/commands/session-logs/format.ts","../../cli/src/commands/session-logs/sqlite-row.ts","../../cli/src/commands/session-logs/local-query.ts","../../cli/src/commands/session-logs/local-tail.ts","../../cli/src/commands/session-logs/parse-time.ts","../../cli/src/commands/session-logs/remote-query.ts","../../cli/src/commands/session-logs/remote-tail.ts","../../cli/src/commands/session-logs/resolve-mode.ts","../../cli/src/commands/session-logs/index.ts","../../cli/src/commands/session.ts","../../cli/src/commands/show.ts","../../cli/src/commands/source-manifest.ts","../../cli/src/commands/source.ts","../../cli/src/commands/store.ts","../../cli/src/commands/tree.ts","../../cli/src/commands/update.ts","../../cli/src/commands/validate.ts","../../cli/src/commands/verify.ts","../../cli/src/commands/why.ts","../../cli/src/index.ts"],"names":["fs","basename","path","spawnSync","Command","am","getStoreConfig","storeFetch","spinner","p","pc","status","program","resolve","createInterface","WorkspaceYamlEditor","existsSync","path10","fs4","Option","p2","LocalSecretsProvider","openLibraryManager","skaileHomeDir","sourcesDir","idx","p3","LocalCatalogSource","disabled","next","updated","list","SKAILE_MCP_NAME","parseToml","stringifyToml","install","uninstall","p4","openCatalogSource","openLibrary","confirm","flows","findWorkspaceRoot","logOk","logErr","logInfo","S","dirname","join","fileURLToPath","portableSpawnSync","normalizeTrpcUrl","createTRPCUntypedClient","homedir","readFileSync","notWired","path26","readline","URL","p6","result","parseYaml","relPath","parsed","execSync","a","c","mkdirSync","writeFileSync","SUPPORTED_DRIVER_TARGETS"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,MAAM,MAAM,IAAI,OAAA,CAAQ,OAAO,CAAA,CAAE,YAAY,8BAA8B,CAAA;AAG3E,EAAA,GAAA,CACG,OAAA,CAAQ,gBAAgB,CAAA,CACxB,WAAA,CAAY,iDAAiD,CAAA,CAC7D,MAAA,CAAO,gBAAA,EAAkB,gCAAgC,CAAA,CACzD,MAAA,CAAO,mBAAmB,mDAAmD,CAAA,CAC7E,MAAA,CAAO,eAAA,EAAiB,oBAAA,EAAsB,MAAM,EACpD,MAAA,CAAO,UAAA,EAAY,qCAAA,EAAuC,KAAK,CAAA,CAC/D,MAAA;AAAA,IACC,OACE,SACA,IAAA,KAMG;AACH,MAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,MAAA,EAAQ,MAAM,CAAA,CAAE,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AACjD,QAAA,MAAA,CAAO,CAAA,gBAAA,EAAmB,IAAA,CAAK,IAAI,CAAA,gCAAA,CAAkC,CAAA;AACrE,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,IAAI,CAAIA,IAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,QAAA,MAAA,CAAO,CAAA,4BAAA,EAA+B,OAAO,CAAA,CAAE,CAAA;AAC/C,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,MAAA,IAAI;AAEF,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI,KAAK,EAAA,EAAI;AACX,UAAA,MAAA,GAAS,MAAM,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,EAAE,CAAA;AAAA,QAC/C,CAAA,MAAO;AACL,UAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,aAAA,EAAc;AACxC,UAAA,MAAM,MAAM,GAAA,CAAI,IAAA;AAAA,YACd,CAAC,MAAM,CAAA,CAAE,SAAA,KAAc,EAAE,SAAA,KAAc,OAAA,IAAW,EAAE,SAAA,KAAc,aAAA;AAAA,WACpE;AACA,UAAA,IAAI,GAAA,EAAK;AACP,YAAA,MAAA,GAAS,GAAA;AAAA,UACX,CAAA,MAAO;AAEL,YAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,qBAAA,CAAsB,mBAAmB,CAAA;AACnE,YAAA,MAAA,GAAS,GAAA,CAAI,OAAA;AAAA,UACf;AAAA,QACF;AACA,QAAA,IAAI,MAAA,CAAO,cAAc,QAAA,EAAU;AACjC,UAAA,MAAA;AAAA,YACE,CAAA,SAAA,EAAY,OAAO,IAAI,CAAA,4DAAA;AAAA,WACzB;AACA,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AAEA,QAAA,MAAMC,SAAAA,GAAgBC,gBAAS,OAAO,CAAA;AACtC,QAAA,MAAM,OAAA,GACJ,MAAA,CAAO,SAAA,KAAc,QAAA,IAAY,IAAA,CAAK,MAAA,GAC7BA,MAAA,CAAA,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA,GAClC,MAAA,CAAO,IAAA;AACb,QAAGF,IAAA,CAAA,SAAA,CAAU,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AACzC,QAAA,MAAM,QAAA,GAAgBE,MAAA,CAAA,IAAA,CAAK,OAAA,EAASD,SAAQ,CAAA;AAC5C,QAAA,IAAOD,IAAA,CAAA,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,UAAA,MAAA,CAAO,CAAA,4BAAA,EAA+B,QAAQ,CAAA,CAAE,CAAA;AAChD,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AAEA,QAAA,QAAQ,KAAK,IAAA;AAAM,UACjB,KAAK,MAAA;AACH,YAAGA,YAAO,OAAA,EAAS,QAAA,EAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AAChD,YAAA;AAAA,UACF,KAAK,MAAA;AACH,YAAGA,IAAA,CAAA,UAAA,CAAW,SAAS,QAAQ,CAAA;AAC/B,YAAA;AAAA,UACF,KAAK,MAAA;AACH,YAAGA,IAAA,CAAA,WAAA,CAAiBE,MAAA,CAAA,OAAA,CAAQ,OAAO,CAAA,EAAG,QAAQ,CAAA;AAC9C,YAAA;AAAA;AAGJ,QAAA,IAAI,MAAA,CAAO,OAAA,KAAY,KAAA,IAAS,IAAA,CAAK,MAAA,EAAQ;AAC3C,UAAA,MAAM,EAAE,SAAA,EAAAC,UAAAA,EAAU,GAAI,MAAM,OAAO,eAAoB,CAAA;AACvD,UAAAA,UAAAA,CAAU,KAAA,EAAO,CAAC,KAAA,EAAO,IAAI,CAAA,EAAG,EAAE,GAAA,EAAK,MAAA,CAAO,IAAA,EAAM,KAAA,EAAO,QAAA,EAAU,CAAA;AACrE,UAAAA,UAAAA,CAAU,OAAO,CAAC,QAAA,EAAU,MAAM,CAAA,gBAAA,EAAmBF,SAAQ,EAAE,CAAA,EAAG;AAAA,YAChE,KAAK,MAAA,CAAO,IAAA;AAAA,YACZ,KAAA,EAAO;AAAA,WACR,CAAA;AAAA,QACH;AAEA,QAAA,KAAA,CAAM,CAAA,SAAA,EAAYA,SAAQ,CAAA,QAAA,EAAM,MAAA,CAAO,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAC5D,QAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,UAAA,OAAA,CAAQ,4EAAuE,CAAA;AAAA,QACjF,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,MAAA,EAAQ;AAC/B,UAAA,OAAA,CAAQ,4DAA4D,CAAA;AAAA,QACtE,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,wEAAmE,CAAA;AAAA,QAC7E;AAAA,MACF,CAAA,SAAE;AACA,QAAA,KAAA,EAAM;AAAA,MACR;AAAA,IACF;AAAA,GACF;AAGF,EAAA,GAAA,CACG,QAAQ,eAAe,CAAA,CACvB,YAAY,kDAAkD,CAAA,CAC9D,OAAO,gBAAA,EAAkB,iCAAiC,CAAA,CAC1D,MAAA,CAAO,iBAAiB,aAAA,EAAe,MAAM,EAC7C,MAAA,CAAO,kBAAA,EAAoB,wCAAwC,CAAA,CACnE,MAAA;AAAA,IACC,OAAO,KAAa,IAAA,KAAoE;AACtF,MAAA,IAAI,CAAC,CAAC,MAAA,EAAQ,MAAM,EAAE,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AACzC,QAAA,MAAA,CAAO,CAAA,gBAAA,EAAmB,IAAA,CAAK,IAAI,CAAA,yBAAA,CAA2B,CAAA;AAC9D,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AAC7D,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,WAAA,CAAY,GAAG,CAAA;AACzC,QAAA,IAAI,CAAC,GAAA,EAAK;AACR,UAAA,MAAA,CAAO,CAAA,wBAAA,EAA2B,GAAG,CAAA,6BAAA,CAA+B,CAAA;AACpE,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AACA,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,OAAA,CAAQ,GAAA,EAAI;AAC1C,QAAA,MAAM,GAAA,GAAM,GAAA,CAAI,SAAA,GAAA,CACX,MAAM,QAAQ,aAAA,EAAc,EAAG,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,GAAA,CAAI,SAAS,CAAA,GAClE,KAAA,CAAA;AACJ,QAAA,IAAI,CAAC,GAAA,EAAK;AACR,UAAA,MAAA,CAAO,CAAA,sDAAA,CAAwD,CAAA;AAC/D,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AACA,QAAA,IAAI,IAAA,CAAK,IAAA,IAAQ,GAAA,CAAI,IAAA,KAAS,KAAK,IAAA,EAAM;AACvC,UAAA,OAAA,CAAQ,qBAAqB,GAAA,CAAI,IAAI,CAAA,cAAA,EAAiB,IAAA,CAAK,IAAI,CAAA,eAAA,CAAiB,CAAA;AAAA,QAClF;AAGA,QAAA,MAAM,YAAA,GAAgB,IAAI,QAAA,CAAqC,IAAA;AAC/D,QAAA,MAAM,gBAAA,GACJ,OAAO,YAAA,KAAiB,QAAA,IAAY,aAAa,MAAA,GAAS,CAAA,GAAI,eAAe,GAAA,CAAI,IAAA;AACnF,QAAA,MAAM,OAAA,GAAeC,MAAA,CAAA,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,gBAAgB,CAAA;AACpD,QAAA,IAAI,CAAIF,IAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,UAAA,MAAA,CAAO,CAAA,sBAAA,EAAyB,OAAO,CAAA,CAAE,CAAA;AACzC,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AACA,QAAA,MAAM,QAAA,GAAgBE,MAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,gBAAgB,CAAA;AACnD,QAAGF,eAAeE,MAAA,CAAA,OAAA,CAAQ,QAAQ,GAAG,EAAE,SAAA,EAAW,MAAM,CAAA;AACxD,QAAA,IAAI,IAAA,CAAK,SAAS,MAAA,EAAQ;AACxB,UAAGF,YAAO,OAAA,EAAS,QAAA,EAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AAAA,QAClD,CAAA,MAAO;AACL,UAAGA,IAAA,CAAA,WAAA,CAAiBE,MAAA,CAAA,OAAA,CAAQ,OAAO,CAAA,EAAG,QAAQ,CAAA;AAAA,QAChD;AACA,QAAA,KAAA,CAAM,aAAa,GAAG,CAAA,QAAA,EAAM,QAAQ,CAAA,EAAA,EAAK,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,MACvD,CAAA,SAAE;AACA,QAAA,KAAA,EAAM;AAAA,MACR;AAAA,IACF;AAAA,GACF;AAGF,EAAA,GAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,yCAAyC,EACrD,MAAA,CAAO,kBAAA,EAAoB,mBAAmB,CAAA,CAC9C,MAAA,CAAO,iBAAA,EAAmB,kBAAkB,CAAA,CAC5C,MAAA,CAAO,eAAA,EAAiB,gBAAgB,CAAA,CACxC,MAAA,CAAO,UAAU,gBAAgB,CAAA,CACjC,MAAA,CAAO,OAAO,IAAA,KAA+E;AAC5F,IAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AAC7D,IAAA,IAAI;AACF,MAAA,IAAI,IAAA,GAAO,MAAM,OAAA,CAAQ,aAAA,CAAc,IAAA,CAAK,IAAA,GAAO,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAK,GAAI,KAAA,CAAS,CAAA;AAClF,MAAA,IAAI,KAAK,OAAA,EAAS;AAChB,QAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,cAAA,CAAe,KAAK,OAAO,CAAA;AACrD,QAAA,IAAA,GAAO,KAAK,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,SAAA,KAAc,IAAI,EAAE,CAAA;AAAA,MAClD;AACA,MAAA,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AAC/D,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,2DAA2D,CAAA;AACnE,QAAA;AAAA,MACF;AACA,MAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,EAAE,EAAA,CAAG,MAAA,CAAO,EAAE,CAAC,CAAC,KAAK,CAAA,CAAE,IAAA,CAAK,OAAO,EAAE,CAAC,KAAK,CAAA,CAAE,WAAA,IAAe,EAAE,CAAA,CAAE,CAAA;AAAA,MACzF;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAA,EAAO,EAAE,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,MAAM,WAAW,CAAC;AAAA,CAAI,CAAA;AAAA,IACzD,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,YAAY,CAAA,CACpB,WAAA,CAAY,4CAA4C,CAAA,CACxD,MAAA,CAAO,OAAO,GAAA,KAAgB;AAC7B,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,WAAA,CAAY,GAAG,CAAA;AACzC,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAA,CAAO,CAAA,WAAA,EAAc,GAAG,CAAA,CAAE,CAAA;AAC1B,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,GAAA,EAAK,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC1C,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;AC7NA,IAAM,gBAAA,GAAkC,CAAC,UAAA,EAAY,YAAA,EAAc,SAAS,CAAA;AAYrE,SAAS,eAAA,GAA2B;AACzC,EAAA,MAAM,MAAM,IAAIE,OAAAA,CAAQ,MAAM,CAAA,CAAE,YAAY,gDAAgD,CAAA;AAE5F,EAAA,GAAA,CACG,QAAQ,QAAQ,CAAA,CAChB,YAAY,+CAA+C,CAAA,CAC3D,OAAO,YAAY;AAClB,IAAA,MAAM,QAAA,GAAW,IAAI,oBAAA,EAAqB;AAC1C,IAAA,MAAM,QAAA,GAAW,SAAS,cAAA,EAAe;AACzC,IAAA,OAAA,CAAQ,CAAA,cAAA,EAAiB,QAAQ,CAAA,CAAE,CAAA;AAEnC,IAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,cAAA,EAAe;AAC7C,IAAA,IAAI,OAAO,EAAA,EAAI;AACb,MAAA,KAAA,CAAM,CAAA,yBAAA,EAA4B,MAAA,CAAO,SAAS,CAAA,GAAA,CAAK,CAAA;AAAA,IACzD,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,CAAA,gBAAA,EAAmB,MAAA,CAAO,KAAA,IAAS,WAAW,CAAA,CAAE,CAAA;AAAA,IACzD;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,kBAAkB,CAAA,CAC1B,WAAA,CAAY,gEAAgE,CAAA,CAC5E,QAAA,CAAS,YAAA,EAAc,CAAA,QAAA,EAAW,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAC,EAAE,CAAA,CAC/D,MAAA;AAAA,IACC,sBAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA,CAAO,OAAO,QAAA,EAAkB,IAAA,KAAkC;AACjE,IAAA,IAAI,CAAC,gBAAA,CAAiB,QAAA,CAAS,QAAuB,CAAA,EAAG;AACvD,MAAA,MAAA,CAAO,qBAAqB,QAAQ,CAAA,mBAAA,EAAsB,iBAAiB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AACvF,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,IAAI,QAAA,KAAa,gBAAgB,CAAC,IAAA,CAAK,cAAc,CAAC,OAAA,CAAQ,IAAI,yBAAA,EAA2B;AAC3F,MAAA,MAAA;AAAA,QACE;AAAA,OAGF;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,MAAM,QAAA,GAAW,IAAI,oBAAA,EAAqB;AAC1C,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,CAAS,cAAA,CAAe,QAAA,EAAyB,IAAA,CAAK,UAAU,CAAA;AACtE,MAAA,KAAA,CAAM,CAAA,qBAAA,EAAwB,QAAQ,CAAA,CAAE,CAAA;AAAA,IAC1C,SAAS,CAAA,EAAG;AACV,MAAA,MAAA,CAAO,CAAA,wBAAA,EAA2B,aAAa,KAAA,GAAQ,CAAA,CAAE,UAAU,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AAC9E,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;AC/CO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,OAAO,IAAIA,OAAAA,CAAQ,QAAQ,CAAA,CACxB,YAAY,yBAAyB,CAAA,CACrC,QAAA,CAAS,QAAA,EAAU,sBAAsB,CAAA,CACzC,QAAA,CAAS,SAAA,EAAW,cAAc,EAClC,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,WAAW,uBAAuB,CAAA,CACzC,MAAA,CAAO,SAAA,EAAW,yBAAyB,CAAA,CAC3C,MAAA,CAAO,OAAO,IAAA,EAAe,OAAgB,IAAA,KAAe;AAC3D,IAAA,IAAI,IAAA,EAAM,QAAA,CAAS,GAAG,CAAA,EAAG;AACvB,MAAA,KAAA,GAAQ,IAAA;AACR,MAAA,IAAA,GAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,SAAA,GAAY,CAAC,IAAA,CAAK,KAAA;AACxB,IAAA,MAAM,SAAA,GAAY,CAAC,IAAA,CAAK,KAAA;AAExB,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,MAAMC,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAYH,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA;AACzE,MAAA,MAAM,OAAA,GAAUG,GAAAA,CAAG,MAAA,CAAO,KAAA,EAAO,IAAI,CAAA;AACrC,MAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,QAAA,IAAI,CAAC,SAAA,EAAW;AACd,UAAA,OAAA;AAAA,YACE,KAAA,GACI,CAAA,qBAAA,EAAwB,KAAK,CAAA,EAAA,CAAA,GAC7B;AAAA,WACN;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAA,EAAO,CAAA,CAAE,OAAA,CAAQ,QAAQ,CAAC,CAAA,CAAE,CAAA;AAAA,QAC1C;AACA,QAAA,MAAM,MAAA,uBAAa,GAAA,EAA4B;AAC/C,QAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,UAAA,IAAI,CAAC,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,EAAG,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,IAAA,EAAM,EAAE,CAAA;AAC9C,UAAA,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,CAAG,KAAK,CAAC,CAAA;AAAA,QAC5B;AACA,QAAA,KAAA,MAAW,CAAC,CAAA,EAAG,KAAK,CAAA,IAAK,MAAA,EAAQ;AAC/B,UAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,MAAM,CAAC,CAAA;AAC5D,UAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,UAAA,OAAA,CAAQ,GAAA;AAAA,YACN,CAAA,EAAA,EAAK,UAAU,CAAC,CAAC,IAAI,CAAA,CAAE,OAAA,CAAQ,GAAG,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,CAAG,CAAC,IAAI,CAAA,CAAE,GAAA,CAAI,IAAI,KAAA,CAAM,MAAM,GAAG,CAAC,CAAA;AAAA,WACrF;AACA,UAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,KAAA,GAAQ,EAAE,CAAC,CAAA,CAAE,CAAA;AACrC,UAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,YAAA,MAAM,GAAA,GAAM,EAAE,OAAA,GAAU,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,GAAI,EAAA;AAClD,YAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,OAAO,KAAK,CAAC,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,YAAY,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA;AAAA,UACrF;AAAA,QACF;AACA,QAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAA,EAAO,EAAE,GAAA,CAAI,CAAA,EAAG,OAAA,CAAQ,MAAM,QAAQ,CAAC;AAAA,CAAI,CAAA;AAAA,MACzD;AAAA,IACF;AAEA,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,gBAAAC,eAAAA,EAAgB,UAAA,EAAAC,aAAW,GAAI,MAAM,OAAO,6BAAoB,CAAA;AACxE,QAAA,MAAM,SAASD,eAAAA,EAAe;AAC9B,QAAA,MAAM,SAAiC,EAAC;AACxC,QAAA,IAAI,KAAA,SAAc,CAAA,GAAI,KAAA;AACtB,QAAA,IAAI,IAAA,SAAa,IAAA,GAAO,IAAA;AAExB,QAAA,MAAM,WAAW,MAAMC,WAAAA,CAA+B,QAAQ,aAAA,EAAe,EAAE,QAAQ,CAAA;AAEvF,QAAA,IAAI,QAAA,CAAS,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC/B,UAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAA,EAAO,CAAA,CAAE,OAAA,CAAQ,QAAQ,CAAC,CAAA,CAAE,CAAA;AACxC,UAAA,KAAA,MAAW,KAAA,IAAS,SAAS,OAAA,EAAS;AACpC,YAAA,MAAM,GAAA,GAAM,GAAG,KAAA,CAAM,IAAI,KAAK,KAAA,CAAM,SAAS,CAAA,CAAA,EAAI,KAAA,CAAM,IAAI,CAAA,CAAA;AAC3D,YAAA,OAAA,CAAQ,GAAA;AAAA,cACN,CAAA,WAAA,EAAS,YAAA,CAAa,KAAA,CAAM,IAAI,CAAC,CAAA,EAAA,EAAK,QAAA,CAAS,GAAG,CAAA,CAAE,MAAA,CAAO,EAAE,CAAC,KAAK,CAAA,CAAE,GAAA,CAAI,KAAA,CAAM,WAAA,EAAa,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,IAAK,EAAE,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,CAAA,MAAA,EAAI,KAAA,CAAM,SAAS,EAAE,CAAC,CAAA;AAAA,aAClJ;AAAA,UACF;AAAA,QACF,CAAA,MAAA,IAAW,KAAK,KAAA,EAAO;AACrB,UAAA,OAAA,CAAQ,qBAAqB,CAAA;AAAA,QAC/B;AAAA,MACF,SAAS,CAAA,EAAQ;AACf,QAAA,IAAI,KAAK,KAAA,EAAO;AACd,UAAA,MAAA,CAAO,CAAA,qBAAA,EAAwB,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AAAA,QAC5C;AAAA,MAEF;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AACL;AAcO,SAAS,cAAA,GAA0B;AACxC,EAAA,OAAO,IAAIH,OAAAA,CAAQ,KAAK,CAAA,CACrB,WAAA,CAAY,6BAA6B,CAAA,CACzC,QAAA,CAAS,OAAA,EAAS,oCAAoC,CAAA,CACtD,MAAA,CAAO,wBAAwB,mBAAA,EAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,UAAA,EAAY,kCAAkC,CAAA,CACrD,MAAA,CAAO,kBAAA,EAAoB,eAAA,EAAiB,aAAa,CAAA,CACzD,MAAA,CAAO,CAAC,KAAa,IAAA,KAAS;AAC7B,IAAA,MAAMC,GAAAA,GAAK,IAAI,YAAA,CAAa;AAAA,MAC1B,UAAA,EAAYH,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAAA,MACxC,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,cAAc,IAAA,CAAK;AAAA,KACpB,CAAA;AACD,IAAA,MAAMM,WAAYC,EAAA,CAAA,OAAA,EAAQ;AAC1B,IAAAD,QAAAA,CAAQ,KAAA,CAAM,CAAA,OAAA,EAAU,GAAG,CAAA,CAAE,CAAA;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQH,GAAAA,CAAG,GAAA,CAAI,GAAG,CAAA;AACxB,MAAAG,QAAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,MAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAA,CAAQ,kDAAkD,CAAA;AAAA,WAC7E,KAAA,MAAW,CAAA,IAAK,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA;AAAA,IACrC,SAAS,GAAA,EAAK;AACZ,MAAAA,QAAAA,CAAQ,KAAK,QAAQ,CAAA;AACrB,MAAA,MAAA,CAAO,MAAA,CAAO,GAAG,CAAC,CAAA;AAClB,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;AAaO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,OAAO,IAAIJ,OAAAA,CAAQ,QAAQ,CAAA,CACxB,WAAA,CAAY,oCAAoC,CAAA,CAChD,QAAA,CAAS,OAAA,EAAS,6BAA6B,CAAA,CAC/C,MAAA,CAAO,wBAAwB,mBAAA,EAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,UAAA,EAAY,wBAAwB,CAAA,CAC3C,MAAA,CAAO,kBAAA,EAAoB,eAAA,EAAiB,aAAa,CAAA,CACzD,MAAA,CAAO,CAAC,KAAa,IAAA,KAAS;AAC7B,IAAA,MAAMC,GAAAA,GAAK,IAAI,YAAA,CAAa;AAAA,MAC1B,UAAA,EAAYH,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAAA,MACxC,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,cAAc,IAAA,CAAK;AAAA,KACpB,CAAA;AACD,IAAA,MAAM,EAAA,GAAKG,GAAAA,CAAG,MAAA,CAAO,GAAG,CAAA;AACxB,IAAA,IAAI,EAAA,EAAI,KAAA,CAAM,CAAA,QAAA,EAAW,GAAG,CAAA,CAAE,CAAA;AAAA,SACzB,MAAA,CAAO,CAAA,cAAA,EAAiB,GAAG,CAAA,CAAE,CAAA;AAAA,EACpC,CAAC,CAAA;AACL;AAYO,SAAS,eAAA,GAA2B;AACzC,EAAA,OAAO,IAAID,QAAQ,MAAM,CAAA,CACtB,YAAY,sBAAsB,CAAA,CAClC,SAAS,QAAA,EAAU,sBAAsB,EACzC,MAAA,CAAO,sBAAA,EAAwB,qBAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,cAAA,EAAgB,wBAAwB,CAAA,CAC/C,SAAA;AAAA,IACC,IAAI,OAAO,kBAAA,EAAoB,eAAe,EAC3C,OAAA,CAAQ,aAAa,CAAA,CACrB,OAAA,CAAQ,wBAAwB;AAAA,GACrC,CACC,MAAA,CAAO,CAAC,IAAA,EAA0B,IAAA,KAAS;AAC1C,IAAA,MAAMC,GAAAA,GAAK,IAAI,YAAA,CAAa;AAAA,MAC1B,UAAA,EAAYH,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAAA,MACxC,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,cAAc,IAAA,CAAK;AAAA,KACpB,CAAA;AACD,IAAA,MAAM,QAAA,GAAWG,GAAAA,CAAG,YAAA,CAAa,IAAI,CAAA;AACrC,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,MAAA,OAAA,CAAQ,mBAAmB,CAAA;AAC3B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,MAAM,CAAC,CAAA;AAC/D,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,MAAM,CAAC,CAAA;AAC/D,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,MAAA,CAAO,OAAO,KAAK,CAAC,CAAC,CAAA,EAAA,EAAK,EAAE,GAAA,CAAI,MAAA,CAAO,OAAO,KAAK,CAAC,CAAC,CAAA,CAAE,CAAA;AAC9E,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,IAAA,CAAK,QAAQ,KAAA,GAAQ,CAAC,CAAC,CAAA,CAAE,CAAA;AAC5C,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,YAAA,CAAa,CAAA,CAAE,IAAA,EAAM,KAAK,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,IACzE;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAA,EAAO,EAAE,GAAA,CAAI,CAAA,EAAG,QAAA,CAAS,MAAM,WAAW,CAAC;AAAA,CAAI,CAAA;AAAA,EAC7D,CAAC,CAAA;AACL;AAaO,SAAS,eAAA,GAA2B;AACzC,EAAA,OAAO,IAAID,QAAQ,MAAM,CAAA,CACtB,YAAY,0CAA0C,CAAA,CACtD,SAAS,OAAA,EAAS,6BAA6B,EAC/C,MAAA,CAAO,sBAAA,EAAwB,qBAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,CAAC,GAAA,EAAa,IAAA,KAAS;AAC7B,IAAA,MAAMC,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAYH,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA;AACzE,IAAA,MAAM,KAAA,GAAQG,GAAAA,CAAG,IAAA,CAAK,GAAG,CAAA;AACzB,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAA;AAAA,QACE,CAAA,CAAA,EAAI,GAAG,CAAA,iBAAA,EAAoB,CAAA,CAAE,GAAA,CAAI,oBAAoB,CAAC,CAAA,MAAA,EAAS,CAAA,CAAE,GAAA,CAAI,eAAe,CAAC,CAAA,CAAA;AAAA,OACvF;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,QAAQ,KAAA,CAAM,IAAI,CAAC,CAAA,CAAE,CAAA;AACxC,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,CAAA;AAC7B,IAAA,OAAA,CAAQ,IAAI,CAAA,eAAA,EAAkB,SAAA,CAAU,KAAA,CAAM,IAAI,CAAC,CAAA,CAAE,CAAA;AACrD,IAAA,IAAI,MAAM,OAAA,EAAS,OAAA,CAAQ,IAAI,CAAA,eAAA,EAAkB,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAChE,IAAA,IAAI,MAAM,WAAA,EAAa,OAAA,CAAQ,IAAI,CAAA,eAAA,EAAkB,KAAA,CAAM,WAAW,CAAA,CAAE,CAAA;AACxE,IAAA,IAAI,KAAA,CAAM,UAAA,EAAY,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,EAAE,GAAA,CAAI,KAAA,CAAM,UAAU,CAAC,CAAA,CAAE,CAAA;AAC7E,IAAA,OAAA,CAAQ,IAAI,CAAA,eAAA,EAAkB,CAAA,CAAE,IAAI,KAAA,CAAM,MAAM,CAAC,CAAA,CAAE,CAAA;AACnD,IAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,MAAA,OAAA,CAAQ,IAAI,CAAA,WAAA,CAAa,CAAA;AACzB,MAAA,KAAA,MAAW,KAAK,KAAA,CAAM,QAAA;AACpB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,CAAA,CAAE,GAAA,CAAI,MAAG,CAAC,CAAA,EAAA,EAAK,SAAA,CAAU,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AAAA,IACnE;AACA,IAAA,IAAI,KAAA,CAAM,aAAa,MAAA,EAAQ;AAC7B,MAAA,OAAA,CAAQ,IAAI,CAAA,eAAA,CAAiB,CAAA;AAC7B,MAAA,KAAA,MAAW,CAAA,IAAK,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAO,CAAA,CAAE,GAAA,CAAI,MAAG,CAAC,CAAA,EAAA,EAAK,QAAA,CAAS,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,IACrF;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,EACd,CAAC,CAAA;AACL;AAaO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,OAAO,IAAID,OAAAA,CAAQ,QAAQ,CAAA,CACxB,WAAA,CAAY,sBAAsB,CAAA,CAClC,QAAA,CAAS,QAAA,EAAU,YAAY,CAAA,CAC/B,SAAA;AAAA,IACC,IAAI,MAAA,CAAO,mBAAA,EAAqB,YAAY,CAAA,CAAE,OAAA,CAAQ,OAAO,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAG,WAAW,CAAC;AAAA,GACzF,CACC,OAAO,iBAAA,EAAmB,iCAAiC,EAC3D,MAAA,CAAO,CAAC,MAAc,IAAA,KAAS;AAC9B,IAAA,MAAMC,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,YAAY,OAAA,CAAQ,GAAA,IAAO,CAAA;AACzD,IAAA,MAAM,OAAA,GAAU,KAAK,GAAA,GAAMH,eAAAA,CAAK,QAAQ,IAAA,CAAK,GAAG,CAAA,GAAI,OAAA,CAAQ,GAAA,EAAI;AAChE,IAAA,MAAM,SAASG,GAAAA,CAAG,MAAA,CAAO,IAAA,EAAM,IAAA,CAAK,MAAM,OAAO,CAAA;AACjD,IAAA,IAAI,MAAA,CAAO,EAAA,EAAI,KAAA,CAAM,CAAA,QAAA,EAAW,UAAU,IAAA,CAAK,IAAI,CAAC,CAAA,EAAA,EAAKK,GAAA,CAAG,GAAA,CAAI,MAAA,CAAO,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,SACzE;AACH,MAAA,MAAA,CAAO,OAAO,IAAI,CAAA;AAClB,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;AAaO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,OAAO,IAAIN,QAAQ,QAAQ,CAAA,CACxB,YAAY,oCAAoC,CAAA,CAChD,SAAS,QAAA,EAAU,oCAAoC,EACvD,MAAA,CAAO,sBAAA,EAAwB,qBAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,CAAC,IAAA,EAA0B,IAAA,KAAS;AAC1C,IAAA,MAAMC,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAYH,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA;AACzE,IAAA,MAAM,MAAA,GAASG,IAAG,MAAA,EAAO;AACzB,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,KAAA,CAAM,0BAA0B,CAAA;AAChC,MAAA;AAAA,IACF;AACA,IAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,OAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,EAAE,SAAS,CAAA,CAAA,EAAI,EAAE,SAAS,CAAA,CAAA,CAAG,MAAM,CAAC,CAAA;AACvF,IAAA,MAAM,OAAO,IAAA,CAAK,GAAA,CAAI,EAAA,EAAI,GAAG,OAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,EAAE,OAAO,CAAA,CAAA,EAAI,EAAE,OAAO,CAAA,CAAA,CAAG,MAAM,CAAC,CAAA;AAClF,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,EAAA,EAAK,EAAE,GAAA,CAAI,OAAA,CAAQ,OAAO,MAAM,CAAC,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,aAAA,CAAc,MAAA,CAAO,IAAI,CAAC,CAAC,KAAK,CAAA,CAAE,GAAA,CAAI,UAAU,CAAC,CAAA;AAAA,KAChG;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,IAAA,CAAK,SAAS,IAAA,GAAO,EAAE,CAAC,CAAA,CAAE,CAAA;AAC7C,IAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,MAAA,MAAM,QAAQ,CAAA,EAAG,CAAA,CAAE,SAAS,CAAA,CAAA,EAAI,EAAE,SAAS,CAAA,CAAA;AAC3C,MAAA,MAAM,MAAM,CAAA,EAAG,CAAA,CAAE,OAAO,CAAA,CAAA,EAAI,EAAE,OAAO,CAAA,CAAA;AACrC,MAAA,MAAMM,OAAAA,GAAS,EAAE,OAAA,GAAU,CAAA,CAAE,KAAK,SAAS,CAAA,GAAI,CAAA,CAAE,GAAA,CAAI,WAAW,CAAA;AAChE,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,KAAA,CAAM,MAAA,CAAO,MAAM,CAAC,CAAA,EAAA,EAAK,GAAA,CAAI,MAAA,CAAO,IAAI,CAAC,CAAA,EAAA,EAAKA,OAAM,CAAA,CAAE,CAAA;AAAA,IACzE;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,EACd,CAAC,CAAA;AACL;AC1TO,SAAS,kBAAA,GAA8B;AAC5C,EAAA,MAAM,UAAU,IAAIP,OAAAA,CAAQ,SAAS,CAAA,CAAE,YAAY,yCAAyC,CAAA;AAE5F,EAAA,OAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,uDAAuD,CAAA,CACnE,MAAA,CAAO,wBAAwB,sDAAsD,CAAA,CACrF,OAAO,aAAA,EAAe,yCAAyC,EAC/D,MAAA,CAAO,SAAA,EAAW,0DAA0D,CAAA,CAC5E,MAAA,CAAO,OAAO,IAAA,KAAiE;AAC9E,IAAA,MAAM,EAAE,aAAA,EAAe,iBAAA,EAAmB,YAAW,GAAI,MAAM,OAC7D,qBACF,CAAA;AACA,IAAA,MAAM,aAAa,IAAA,CAAK,UAAA,GAAaF,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,GAAI,MAAA;AACrE,IAAA,MAAM,GAAA,GAAM,aAAA,CAAc,EAAE,UAAA,EAAY,CAAA;AACxC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,IAAO,GAAA,CAAI,OAAA,CAAQ,GAAA;AAGxC,IAAA,IAAI,iBAAA,CAAkB,OAAO,CAAA,EAAG;AAC9B,MAAA,MAAM,EAAE,oBAAA,EAAqB,GAAI,MAAM,OAAO,6BAAoB,CAAA;AAClE,MAAA,IAAI,QAAA;AACJ,MAAA,IAAI;AACF,QAAA,QAAA,GAAW,MAAM,oBAAA,CAAqB,EAAE,UAAA,EAAY,IAAA,CAAK,YAAY,CAAA;AACrE,QAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,MAAA,CAAO,WAAA,EAAY;AAClD,QAAA,KAAA,CAAM,qBAAqB,CAAA;AAC3B,QAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,UAAA,OAAA,CAAQ,oEAAoE,CAAA;AAAA,QAC9E,CAAA,MAAO;AACL,UAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,QAAG,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAA,CAAE,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,UAC7D;AAAA,QACF;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,MAAA,CAAO,eAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AACvD,QAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,MACrB,CAAA,SAAE;AACA,QAAA,QAAA,EAAU,KAAA,EAAM;AAAA,MAClB;AACA,MAAA;AAAA,IACF;AAIA,IAAA,IAAI,IAAI,OAAA,CAAQ,SAAA,KAAc,CAAA,IAAK,CAAC,KAAK,KAAA,EAAO;AAC9C,MAAA,KAAA,CAAM,CAAA,0BAAA,EAA6B,CAAA,CAAE,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAA,CAAG,CAAA;AACxD,MAAA,OAAA;AAAA,QACE;AAAA,OAEF;AACA,MAAA;AAAA,IACF;AAOA,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,OAAA,EAAS,mBAAA,EAAqB,MAAS,CAAA;AACnE,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,UAAU,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,GAAK,CAAA;AAC1D,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,QAAA,EAAU;AAAA,QAChC,QAAQ,UAAA,CAAW,MAAA;AAAA,QACnB,OAAA,EAAS,EAAE,MAAA,EAAQ,kBAAA;AAAmB,OACvC,CAAA;AACD,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,EAAI,GAAI,OAAA;AACxB,MAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,QAAA,MAAA,CAAO,CAAA,EAAG,QAAQ,CAAA,WAAA,EAAc,GAAA,CAAI,MAAM,IAAI,GAAA,CAAI,UAAU,CAAA,EAAA,EAAK,EAAE,CAAA,GAAA,CAAK,CAAA;AACxE,QAAA,IAAI,GAAA,CAAI,WAAW,GAAA,EAAK;AACtB,UAAA,OAAA;AAAA,YACE;AAAA,WAEF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,OAAA;AAAA,YACE;AAAA,WACF;AAAA,QACF;AACA,QAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,IAAA,GAAA,CAAQ,MAAM,GAAA,CAAI,IAAA,IAAQ,IAAA,EAAK;AACrC,MAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAE5B,QAAA,KAAA,GACE,OAAO,SAAS,QAAA,IAChB,IAAA,KAAS,QACT,QAAA,IAAY,IAAA,IACZ,OAAQ,IAAA,CAA6B,MAAA,KAAW,QAAA;AAAA,MACpD,CAAA,CAAA,MAAQ;AACN,QAAA,KAAA,GAAQ,KAAA;AAAA,MACV;AACA,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,OAAA;AAAA,UACE,CAAA,qBAAA,EAAwB,OAAO,CAAA,EAAA,EAAK,EAAE,CAAA,kDAAA;AAAA,SACxC;AACA,QAAA,OAAA;AAAA,UACE;AAAA,SAEF;AACA,QAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,QAAA;AAAA,MACF;AACA,MAAA,KAAA,CAAM,wBAAwB,CAAA,CAAE,OAAA,CAAQ,OAAO,CAAC,CAAA,EAAA,EAAK,EAAE,CAAA,GAAA,CAAK,CAAA;AAAA,IAC9D,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,GAAA,YAAe,KAAA,IAAS,GAAA,CAAI,IAAA,KAAS,YAAA,EAAc;AACrD,QAAA,MAAA,CAAO,CAAA,iBAAA,EAAoB,QAAQ,CAAA,SAAA,CAAW,CAAA;AAAA,MAChD,CAAA,MAAO;AACL,QAAA,MAAA;AAAA,UACE,CAAA,gBAAA,EAAmB,QAAQ,CAAA,EAAA,EAAK,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,SAClF;AAAA,MACF;AACA,MAAA,OAAA;AAAA,QACE;AAAA,OACF;AACA,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,IACrB,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,OAAO,CAAA;AAAA,IACtB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,qEAAqE,CAAA,CACjF,MAAA,CAAO,sBAAA,EAAwB,sDAAsD,CAAA,CACrF,MAAA,CAAO,OAAO,IAAA,KAAkC;AAC/C,IAAA,MAAM,EAAE,aAAA,EAAc,GAAI,MAAM,OAAO,qBAA4B,CAAA;AACnE,IAAA,MAAM,aAAa,IAAA,CAAK,UAAA,GAAaA,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,GAAI,MAAA;AACrE,IAAA,MAAM,GAAA,GAAM,aAAA,CAAc,EAAE,UAAA,EAAY,CAAA;AACxC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,KAAA,EAAQ,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AACrC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,SAAA,EAAY,GAAA,CAAI,OAAA,CAAQ,OAAO,CAAA,CAAE,CAAA;AAC7C,IAAA,OAAA,CAAQ,IAAI,CAAA,YAAA,EAAe,GAAA,CAAI,OAAA,CAAQ,SAAA,GAAY,GAAI,CAAA,CAAE,CAAA;AAAA,EAC3D,CAAC,CAAA;AAEH,EAAA,OAAO,OAAA;AACT;;;ACzJO,SAAS,mBAAA,CAAoBU,UAAkB,KAAA,EAA2B;AAE/E,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA;AAE9B,EAAA,IAAI,OAAA,GAAmBA,QAAAA;AACvB,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AAC5C,IAAA,MAAM,IAAA,GAAO,SAAS,CAAC,CAAA;AACvB,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAK,KAAM,QAAQ,CAAA,CAAE,OAAA,EAAQ,CAAE,QAAA,CAAS,IAAI,CAAC,CAAA;AACxF,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,OAAA,GAAU,GAAA;AAAA,EACZ;AAEA,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,IAAK,EAAA;AAG9C,EAAA,MAAM,UAAA,GAAuB;AAAA,IAC3B,GAAG,QAAQ,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,CAAA;AAAA,IACvC,GAAG,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,KAAA,EAAO,CAAA,CAAE,IAAI,CAAA,CAAE,MAAA,CAAO,OAAO,CAAa;AAAA,GACjF;AAEA,EAAA,OAAO,WAAW,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,UAAA,CAAW,IAAI,CAAC,CAAA;AACpD;AAQO,IAAM,aAAA,GAAyD;AAAA,EACpE,GAAA,EAAK,CAAC,GAAA,KAAQ,CAAA,CAAA,EACb,GAAG,CAAA;AAAA;AAAA;AAAA;AAAA,gBAAA,EAIY,GAAG,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAA,EAKV,GAAG,eAAe,GAAG,CAAA,CAAA;AAAA,EAE9B,IAAA,EAAM,CAAC,GAAA,KAAQ,CAAA,CAAA,EACd,GAAG,CAAA;AAAA;AAAA;AAAA;AAAA,gBAAA,EAIY,GAAG,CAAA;AAAA;AAAA;AAAA,aAAA,EAGN,GAAG,eAAe,GAAG,CAAA,CAAA;AAAA,EAElC,IAAA,EAAM,CAAC,GAAA,KAAQ,CAAA,WAAA,EACJ,GAAG,CAAA;AAAA;AAAA;AAAA,EAAA,EAGZ,GAAG,CAAA;AAAA;AAAA,YAAA,EAEO,GAAG,cAAc,GAAG,CAAA,WAAA;AAClC,CAAA;AC9CO,SAAS,WAAW,MAAA,EAA+B;AACxD,EAAA,MAAM,SAAuB,EAAC;AAC9B,EAAA,IAAI,CAACZ,aAAAA,CAAG,UAAA,CAAW,YAAY,GAAG,OAAO,MAAA;AACzC,EAAA,MAAM,OAAA,GAAUA,cACb,WAAA,CAAY,YAAA,EAAc,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA,CACjD,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,WAAA,EAAa,CAAA,CAC7B,MAAA,CAAO,CAAC,MAAM,IAA4B,CAAA;AAC7C,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,MAAM,YAAYE,eAAAA,CAAK,IAAA,CAAK,YAAA,EAAc,CAAA,CAAE,MAAM,QAAQ,CAAA;AAC1D,IAAA,IAAI,CAACF,aAAAA,CAAG,UAAA,CAAW,SAAS,CAAA,EAAG;AAC/B,IAAA,UAAA,CAAW,SAAA,EAAW,CAAA,CAAE,IAAA,EAAM,MAAM,CAAA;AAAA,EACtC;AACA,EAAA,OAAO,MAAA;AACT;AAWO,SAAS,UAAA,CAAW,GAAA,EAAa,MAAA,EAAgB,GAAA,EAAyB;AAC/E,EAAA,KAAA,MAAW,KAAA,IAASA,cAAG,WAAA,CAAY,GAAA,EAAK,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA,EAAG;AAChE,IAAA,MAAM,IAAA,GAAOE,eAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,MAAM,IAAI,CAAA;AACtC,IAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,MAAA,MAAM,OAAA,GAAUA,eAAAA,CAAK,IAAA,CAAK,IAAA,EAAM,UAAU,CAAA;AAC1C,MAAA,IAAIF,aAAAA,CAAG,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,QAAA,GAAA,CAAI,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,MAAM,IAAA,EAAM,SAAA,EAAW,OAAA,EAAS,MAAA,EAAQ,CAAA;AAAA,MACvE,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,IAAA,EAAM,QAAQ,GAAG,CAAA;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AACF;;;ACjDO,SAAS,iBAAA,GAA8B;AAC5C,EAAA,OAAO,YAAW,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AACvC;AAOO,SAAS,cAAA,GAA2B;AACzC,EAAA,IAAI,CAACA,aAAAA,CAAG,UAAA,CAAW,YAAY,CAAA,SAAU,EAAC;AAC1C,EAAA,OAAOA,cACJ,WAAA,CAAY,YAAA,EAAc,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA,CACjD,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA,CAC7B,IAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AACtB;AAOO,SAAS,cAAA,GAA2B;AACzC,EAAA,IAAI;AACF,IAAA,OAAO,aAAa,YAAY,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAAA,EACnD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAWO,SAAS,kBAAkB,UAAA,EAA8B;AAC9D,EAAA,MAAM,WAAA,GAAcE,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,WAAW,UAAU,CAAA;AAC/D,EAAA,IAAI,CAACF,aAAAA,CAAG,UAAA,CAAW,WAAW,CAAA,SAAU,EAAC;AACzC,EAAA,IAAI;AACF,IAAA,OAAOA,aAAAA,CACJ,YAAY,WAAW,CAAA,CACvB,OAAO,CAAC,CAAA,KAAM,EAAE,QAAA,CAAS,OAAO,CAAC,CAAA,CACjC,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,CAAA,EAAG,CAAC,OAAA,CAAQ,MAAM,CAAC,CAAA;AAAA,EAC3C,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAOO,IAAM,cAAc,CAAC,UAAA,EAAY,SAAS,QAAA,EAAU,WAAA,EAAa,cAAc,QAAQ,CAAA;;;AC/CvF,SAAS,oBAAoBY,QAAAA,EAA2B;AAC7D,EAAA,MAAM,GAAA,GAAM,IAAIR,OAAAA,CAAQ,UAAU,CAAA,CAC/B,YAAY,2BAA2B,CAAA,CACvC,WAAA,CAAY,QAAA,EAAU,gDAAgD,CAAA,CACtE,OAAO,iBAAA,EAAmB,oDAAoD,CAAA,CAC9E,kBAAA,EAAmB,CACnB,QAAA,CAAS,WAAA,EAAa,4CAA4C,CAAA,CAClE,MAAA,CAAO,CAAC,IAAA,EAAgB,IAAA,KAAS;AAEhC,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,MAAM,GAAA,GAAM,aAAA,CAAc,IAAA,CAAK,KAAK,CAAA;AACpC,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,eAAA,EAAkB,IAAA,CAAK,KAAK;AAAA,CAAI,CAAA;AACrD,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,GAAA,CAAI,QAAQ,CAAC;AAAA,CAAI,CAAA;AACzC,MAAA;AAAA,IACF;AAIA,IAAA,IAAI,IAAA,CAAK,UAAU,CAAA,EAAG;AACpB,MAAA,MAAM,EAAA,GAAK,QAAA,CAAS,IAAA,CAAK,CAAC,GAAG,EAAE,CAAA;AAC/B,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AAG7B,MAAA,MAAM,OAAA,GAAU,cAAA,CAAe,QAAA,EAAU,EAAE,CAAA;AAC3C,MAAA,IAAI,YAAY,IAAA,EAAM;AACpB,QAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC;AAAA,CAAI,CAAA;AAC9C,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,UAAA,GAAa,mBAAA,CAAoBQ,QAAAA,EAAS,QAAQ,CAAA;AACxD,MAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,EAAG,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC;AAAA,CAAI,CAAA;AACjD,MAAA;AAAA,IACF;AAGA,IAAA,GAAA,CAAI,IAAA,EAAK;AAAA,EACX,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,cAAA,CAAe,OAAiB,KAAA,EAAgC;AAEvE,EAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACnB,EAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACnB,EAAA,MAAM,MAAA,GAAS,CAAC,CAAA,KAAc,KAAA,KAAU,CAAA;AAExC,EAAA,IAAI,QAAQ,KAAA,IAAS,MAAA,CAAO,CAAC,CAAA,SAAU,cAAA,EAAe;AACtD,EAAA,IAAI,GAAA,KAAQ,UAAU,GAAA,KAAQ,MAAA,IAAU,OAAO,CAAC,CAAA,SAAU,cAAA,EAAe;AACzE,EAAA,IAAI,GAAA,KAAQ,WAAW,GAAA,KAAQ,MAAA,IAAU,OAAO,CAAC,CAAA,SAAU,iBAAA,EAAkB;AAC7E,EAAA,IAAI,GAAA,KAAQ,WAAW,GAAA,KAAQ,MAAA,IAAU,OAAO,CAAC,CAAA,SAAU,cAAA,EAAe;AAC1E,EAAA,IAAI,GAAA,KAAQ,SAAA,IAAa,CAAC,MAAA,EAAQ,QAAA,EAAU,QAAQ,CAAA,CAAE,QAAA,CAAS,GAAI,CAAA,IAAK,MAAA,CAAO,CAAC,CAAA,EAAG;AACjF,IAAA,OAAO,iBAAA,CAAkB,OAAA,CAAQ,GAAA,EAAK,CAAA;AAAA,EACxC;AACA,EAAA,IAAI,GAAA,KAAQ,QAAA,IAAY,CAAC,KAAA,EAAO,KAAK,CAAA,CAAE,QAAA,CAAS,GAAI,CAAA,IAAK,MAAA,CAAO,CAAC,CAAA,EAAG,OAAO,WAAA;AAE3E,EAAA,OAAO,IAAA;AACT;ACnEA,IAAM,gCAAgB,IAAI,GAAA,CAAI,CAAC,QAAA,EAAU,OAAA,EAAS,UAAU,CAAC,CAAA;AAG7D,IAAM,cAAA,GAAiB,SAAA;AAgBhB,SAAS,iBAAA,GAA6B;AAC3C,EAAA,MAAM,MAAM,IAAIR,OAAAA,CAAQ,QAAQ,CAAA,CAAE,YAAY,gDAAgD,CAAA;AAI9F,EAAA,GAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,oCAAoC,CAAA,CAChD,MAAA,CAAO,sBAAA,EAAwB,mBAAmB,CAAA,CAClD,MAAA,CAAO,OAAO,IAAA,KAAS;AACtB,IAAA,MAAM,UAAA,GAAa,KAAK,UAAA,GAAaF,eAAAA,CAAK,QAAQ,IAAA,CAAK,UAAU,CAAA,GAAI,OAAA,CAAQ,GAAA,EAAI;AACjF,IAAA,MAAM,MAAA,GAAS,MAAM,eAAA,CAAgB,UAAU,CAAA;AAG/C,IAAA,MAAM,aAAqC,EAAC;AAC5C,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,GAAK,yBAAyB,UAAU,CAAA;AAC9C,MAAA,MAAMO,EAAAA,GAAI,EAAA,CAAG,YAAA,EAAc,OAAA,IAAW,EAAC;AACvC,MAAA,IAAIA,EAAAA,CAAE,MAAA,EAAQ,UAAA,CAAW,MAAA,GAASA,EAAAA,CAAE,MAAA;AACpC,MAAA,IAAIA,EAAAA,CAAE,QAAA,EAAU,UAAA,CAAW,QAAA,GAAWA,EAAAA,CAAE,QAAA;AACxC,MAAA,IAAIA,EAAAA,CAAE,KAAA,EAAO,UAAA,CAAW,KAAA,GAAQA,EAAAA,CAAE,KAAA;AAClC,MAAA,IAAIA,EAAAA,CAAE,UAAA,EAAY,UAAA,CAAW,UAAA,GAAaA,EAAAA,CAAE,UAAA;AAC5C,MAAA,IAAIA,EAAAA,CAAE,UAAA,EAAY,UAAA,CAAW,UAAA,GAAaA,EAAAA,CAAE,UAAA;AAC5C,MAAA,IAAIA,EAAAA,CAAE,WAAA,EAAa,UAAA,CAAW,WAAA,GAAcA,EAAAA,CAAE,WAAA;AAAA,IAChD,CAAA,CAAA,MAAQ;AAAA,IAAC;AAET,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,OAAA,CAAQ,oBAAoB,CAAC,CAAA;AAC3C,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,CAAA;AAC7B,IAAA,KAAA,MAAW,GAAA,IAAO,CAAC,QAAA,EAAU,UAAA,EAAY,OAAO,CAAA,EAAY;AAC1D,MAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,MAAA,IAAI,UAAU,MAAA,EAAW;AACvB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,CAAA,CAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAAA,MAC3D;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,CAAE,SAAS,CAAA,EAAG;AACtC,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,OAAA,CAAQ,oBAAoB,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,eAAe,CAAC,CAAA,CAAE,CAAA;AAC7E,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,CAAA;AAC7B,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,UAAU,CAAA,EAAG;AACrD,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAA,CAAA,CAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAAA,MAC3D;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,WAAW,MAAA,CAAO,IAAA,CAAK,OAAO,OAAO,CAAA,CAAE,SAAS,CAAA,EAAG;AAC5D,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,OAAA,CAAQ,UAAU,CAAC,CAAA,CAAE,CAAA;AACxC,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,CAAA;AAC7B,MAAA,KAAA,MAAW,CAAC,UAAU,GAAG,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,EAAG;AAC5D,QAAA,MAAM,OAAA,GAAU,CAAC,CAAC,OAAA,CAAQ,IAAI,CAAA,EAAG,QAAA,CAAS,WAAA,EAAa,CAAA,QAAA,CAAU,CAAA;AACjE,QAAA,IAAI,GAAA,EAAK;AACP,UAAA,OAAA,CAAQ,GAAA;AAAA,YACN,CAAA,EAAA,EAAK,EAAE,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA,CAAA,CAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,KAAA,EAAQ,IAAI,KAAA,CAAM,EAAE,CAAC,CAAA,CAAA,IACzD,OAAA,GAAU,KAAK,CAAA,CAAE,GAAA,CAAI,OAAO,CAAC,CAAA,CAAA,GAAK,EAAA;AAAA,WACvC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,EAAA,GAAK,OAAO,MAAA,IAAU,KAAA;AAC5B,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,EAAE,CAAA,IAAK,eAAA,CAAgB,GAAA;AACrD,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,OAAA,CAAQ,gBAAgB,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,CAAA;AACnE,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,CAAA;AAC7B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,UAAU,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,SAAA,IAAa,KAAA,CAAM,SAAS,CAAA,CAAE,CAAA;AACvF,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,UAAU,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,SAAA,IAAa,KAAA,CAAM,SAAS,CAAA,CAAE,CAAA;AACvF,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,WAAW,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,UAAA,IAAc,KAAA,CAAM,UAAU,CAAA,CAAE,CAAA;AAAA,IAC5F;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,EACd,CAAC,CAAA;AAIH,EAAA,GAAA,CACG,OAAA,CAAQ,WAAW,CAAA,CACnB,WAAA,CAAY,+BAA+B,CAAA,CAC3C,MAAA,CAAO,sBAAA,EAAwB,mBAAmB,CAAA,CAClD,MAAA,CAAO,OAAO,KAAa,IAAA,KAAS;AACnC,IAAA,MAAM,UAAA,GAAa,KAAK,UAAA,GAAaP,eAAAA,CAAK,QAAQ,IAAA,CAAK,UAAU,CAAA,GAAI,OAAA,CAAQ,GAAA,EAAI;AACjF,IAAA,MAAM,MAAA,GAAS,MAAM,eAAA,CAAgB,UAAU,CAAA;AAC/C,IAAA,MAAM,KAAA,GAAS,OAAe,GAAG,CAAA;AACjC,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,IAAS,CAAA,CAAE,GAAA,CAAI,WAAW,CAAC,CAAA;AAAA,EACzC,CAAC,CAAA;AAIH,EAAA,GAAA,CACG,QAAQ,mBAAmB,CAAA,CAC3B,YAAY,0EAA0E,CAAA,CACtF,OAAO,sBAAA,EAAwB,mBAAmB,CAAA,CAClD,MAAA,CAAO,YAAY,2DAA2D,CAAA,CAC9E,OAAO,OAAO,GAAA,EAAa,OAAe,IAAA,KAAS;AAClD,IAAA,MAAM,UAAA,GAAa,KAAK,UAAA,GAAaA,eAAAA,CAAK,QAAQ,IAAA,CAAK,UAAU,CAAA,GAAI,OAAA,CAAQ,GAAA,EAAI;AAGjF,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,UAAA,CAAW,cAAc,CAAA;AAC9C,IAAA,IAAI,CAAC,aAAA,CAAc,GAAA,CAAI,GAAG,CAAA,IAAK,CAAC,QAAA,EAAU;AACxC,MAAA,MAAA;AAAA,QACE,IAAI,GAAG,CAAA;AAAA,iBAAA,EACe,CAAC,GAAG,aAAa,CAAA,CAAE,KAAK,IAAI,CAAC,KAAK,cAAc,CAAA;AAAA,qEAAA;AAAA,OAExE;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,MAAM,WAAW,IAAA,CAAK,MAAA,GAAS,kBAAA,EAAmB,GAAI,oBAAoB,UAAU,CAAA;AAEpF,IAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,QAAQ,CAAA;AAE5C,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,QAAA,GAAW,GAAA,CAAI,KAAA,CAAM,cAAA,CAAe,MAAM,CAAA;AAChD,MAAA,QAAA,CAAS,OAAA,GAAU,EAAE,GAAG,QAAA,CAAS,SAAS,CAAC,QAAQ,GAAG,KAAA,EAAM;AAC5D,MAAA,MAAM,YAAA,CAAa,UAAU,QAAQ,CAAA;AACrC,MAAA,KAAA,CAAM,CAAA,IAAA,EAAOQ,GAAAA,CAAG,IAAA,CAAK,CAAA,QAAA,EAAW,QAAQ,CAAA,CAAE,CAAC,CAAA,OAAA,EAAU,KAAA,CAAM,KAAA,CAAM,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,IACxE,CAAA,MAAO;AACL,MAAC,QAAA,CAAiB,GAAG,CAAA,GAAI,KAAA;AACzB,MAAA,MAAM,YAAA,CAAa,UAAU,QAAQ,CAAA;AACrC,MAAA,KAAA,CAAM,OAAOA,GAAAA,CAAG,IAAA,CAAK,GAAG,CAAC,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,CAAA;AAAA,IACxC;AAEA,IAAA,OAAA,CAAQ,IAAI,CAAA,CAAE,GAAA,CAAI,CAAA,SAAA,EAAO,QAAQ,EAAE,CAAC,CAAA;AAAA,EACtC,CAAC,CAAA;AAEH,EAAA,GAAA,CAAI,OAAO,MAAM;AACf,IAAA,GAAA,CAAI,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAK,KAAM,MAAM,CAAA,CAAG,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,EACnE,CAAC,CAAA;AAED,EAAA,OAAO,GAAA;AACT;AChKA,SAAS,eAAe,KAAA,EAA+C;AACrE,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAE3B,EAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,EAAG;AAC3B,IAAA,IAAI;AACF,MAAA,OAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,IAC3B,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA;AACjC,EAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AAEpB,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,OAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,OAAA,EAAQ;AAAA,IACzC,KAAK,YAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,YAAA,EAAa;AAAA,IAC9C,KAAK,KAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,KAAA,EAAM;AAAA,IACvC,KAAK,QAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,QAAA,EAAS;AAAA,IAC1C,KAAK,OAAA,EAAS;AACZ,MAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,MAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,SAAS,GAAI,KAAA,GAAQ,EAAE,IAAA,EAAM,EAAE,KAAA,EAAM,EAAE,GAAI,EAAC,EAAG;AAAA,IAChF;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,OAAO,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AACpC,MAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,IAAA,EAAK;AAAA,IACxC;AAAA,IACA,KAAK,WAAA,EAAa;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,CAAE,KAAK,GAAG,CAAA;AACpC,QAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,QAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,EAAE;AAAA,MACvD,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAAA,IACA,KAAK,UAAA;AACH,MAAA,OAAO,EAAE,MAAM,UAAA,EAAW;AAAA,IAC5B;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAEA,SAAS,YAAY,KAAA,EAAwC;AAC3D,EAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AACnB,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,MAAA;AACH,MAAA,OAAO,MAAA,CAAO,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA;AAAA,IACnC,KAAK,WAAA;AACH,MAAA,OAAO,CAAA,CAAE,GAAA,CAAI,CAAA,OAAA,EAAU,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,KAAK,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,IAClF,KAAK,aAAA;AACH,MAAA,OAAO,CAAA,CAAE,GAAA,CAAI,CAAA,SAAA,EAAY,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,MAAM,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,IACrF,KAAK,OAAA;AACH,MAAA,OAAO,CAAA,CAAE,GAAA,CAAI,CAAA,QAAA,EAAW,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IACzC,KAAK,cAAA;AACH,MAAA,OAAO,CAAA,OAAA,EAAU,MAAM,KAAK,CAAA;AAAA,EAAM,KAAK,SAAA,CAAU,KAAA,CAAM,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA,CAAA;AAAA,IACvE,KAAK,UAAA,EAAY;AACf,MAAA,MAAM,IAAA,GAAO,OAAO,KAAA,CAAM,OAAA,KAAY,QAAA,GAAW,CAAA,GAAA,EAAM,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA,GAAM,EAAA;AACrF,MAAA,OAAO,CAAA,CAAE,IAAI,CAAA,UAAA,EAAa,IAAI,IAAI,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,CAAE,CAAA;AAAA,IACzD;AAAA,IACA;AACE,MAAA,OAAO,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,EAAI,IAAI,CAAA,EAAA,EAAK,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA;AAErE;AAYO,SAAS,kBAAA,GAA8B;AAC5C,EAAA,OAAO,IAAIN,OAAAA,CAAQ,SAAS,EACzB,WAAA,CAAY,uDAAuD,EACnE,QAAA,CAAS,OAAA,EAAS,iDAAiD,CAAA,CACnE,OAAO,cAAA,EAAgB,kDAAkD,EACzE,MAAA,CAAO,OAAO,KAAa,IAAA,KAA2B;AACrD,IAAA,MAAM,EAAE,wBAAA,EAAyB,GAAI,MAAM,OAAO,2BAAwC,CAAA;AAE1F,IAAA,MAAM,MAAA,GAAS,IAAI,wBAAA,CAAyB;AAAA,MAC1C,GAAA;AAAA,MACA,SAAA,EAAW,EAAE,WAAA,EAAa,CAAA;AAAE,KAC7B,CAAA;AAED,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,OAAA,EAAQ;AAAA,IACvB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,CAAA,qBAAA,EAAwB,GAAG,CAAA,EAAA,EAAK,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAA;AACzF,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,KAAK,GAAA,EAAK;AACZ,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAAA,MAC9B,CAAA,CAAA,MAAQ;AACN,QAAA,MAAA,CAAO,+BAA+B,CAAA;AACtC,QAAA,MAAM,OAAO,UAAA,EAAW;AACxB,QAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,IAAI,OAAA,CAAc,CAACS,QAAAA,KAAY;AACnC,QAAA,MAAA,CAAO,SAAA,CAAU,CAAC,KAAA,KAAU;AAC1B,UAAA,OAAA,CAAQ,GAAA,CAAI,WAAA,CAAY,KAA2C,CAAC,CAAA;AACpE,UAAA,IAAI,KAAA,CAAM,IAAA,KAAS,UAAA,IAAc,KAAA,CAAM,SAAS,cAAA,EAAgB;AAC9D,YAAAA,QAAAA,EAAQ;AAAA,UACV;AAAA,QACF,CAAC,CAAA;AACD,QAAA,MAAA,CAAO,KAAK,MAAa,CAAA;AAAA,MAC3B,CAAC,CAAA;AAED,MAAA,MAAM,OAAO,UAAA,EAAW;AACxB,MAAA;AAAA,IACF;AAGA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,CAAA,aAAA,EAAgB,GAAG,CAAA,CAAE,CAAA;AAC7B,IAAA,OAAA,CAAQ,iFAAiF,CAAA;AACzF,IAAA,OAAA,CAAQ,mCAAmC,CAAA;AAC3C,IAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,IAAA,MAAA,CAAO,SAAA,CAAU,CAAC,KAAA,KAAU;AAC1B,MAAA,MAAM,IAAA,GAAO,YAAY,KAA2C,CAAA;AACpE,MAAA,IAAI,IAAA,EAAM,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,GAAG,IAAI;AAAA,CAAI,CAAA;AAAA,IAC5C,CAAC,CAAA;AAED,IAAA,MAAM,KAAc,QAAA,CAAA,eAAA,CAAgB;AAAA,MAClC,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,IAAI,CAAA;AAAA,MAClB,QAAA,EAAU;AAAA,KACX,CAAA;AAED,IAAA,EAAA,CAAG,MAAA,EAAO;AAEV,IAAA,EAAA,CAAG,EAAA,CAAG,MAAA,EAAQ,CAAC,IAAA,KAAS;AACtB,MAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,EAAA,CAAG,MAAA,EAAO;AACV,QAAA;AAAA,MACF;AACA,MAAA,IAAI,OAAA,KAAY,MAAA,IAAU,OAAA,KAAY,MAAA,EAAQ;AAC5C,QAAA,EAAA,CAAG,KAAA,EAAM;AACT,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,GAAA,GAAM,eAAe,OAAO,CAAA;AAClC,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAA,CAAO,CAAA,iBAAA,EAAoB,OAAO,CAAA,CAAE,CAAA;AACpC,QAAA,EAAA,CAAG,MAAA,EAAO;AACV,QAAA;AAAA,MACF;AAEA,MAAA,MAAA,CAAO,KAAK,GAAU,CAAA;AACtB,MAAA,EAAA,CAAG,MAAA,EAAO;AAAA,IACZ,CAAC,CAAA;AAED,IAAA,MAAM,IAAI,OAAA,CAAc,CAACA,QAAAA,KAAY;AACnC,MAAA,EAAA,CAAG,EAAA,CAAG,SAASA,QAAO,CAAA;AACtB,MAAA,MAAA,CAAO,aAAa,MAAM;AACxB,QAAA,MAAA,CAAO,qBAAqB,CAAA;AAC5B,QAAA,EAAA,CAAG,KAAA,EAAM;AACT,QAAAA,QAAAA,EAAQ;AAAA,MACV,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,MAAM,OAAO,UAAA,EAAW;AAAA,EAC1B,CAAC,CAAA;AACL;AC3JA,eAAe,kBAAkB,UAAA,EAAoB;AACnD,EAAA,MAAM,GAAA,GAAM,MAAM,OAAO,wBAA+B,CAAA;AACxD,EAAA,GAAA,CAAI,yBAAA,EAA0B;AAE9B,EAAA,MAAM,YAAA,GAAe,GAAA,CAAI,yBAAA,CAA0B,UAAU,CAAA;AAC7D,EAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,IAAA,MAAA,CAAO,yDAAyD,CAAA;AAChE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,gBAAA,CAAiB,UAAA,EAAY;AAAA,IACnD,OAAA,EAAS,IAAI,4BAAA;AAA6B,GAC3C,CAAA;AACD,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,UAAA,CAAW,YAAY,CAAA;AACpD,EAAA,KAAA,MAAW,CAAA,IAAK,OAAO,OAAA,EAAS;AAC9B,IAAA,IAAI,CAAC,EAAE,SAAA,EAAW;AAChB,MAAA,OAAA,CAAQ,MAAM,CAAA,oBAAA,EAAuB,CAAA,CAAE,EAAE,CAAA,qBAAA,EAAwB,CAAA,CAAE,KAAK,CAAA,CAAE,CAAA;AAAA,IAC5E;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,YAAY,IAAA,EAAyC;AAC5D,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,MAAM,aAAuB,EAAC;AAE9B,EAAA,OAAO,CAAA,GAAI,KAAK,MAAA,EAAQ;AACtB,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,EAAG;AACxB,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA;AACvB,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,CAAA,GAAI,CAAC,CAAA;AACvB,MAAA,IAAI,IAAA,IAAQ,CAAC,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,EAAG;AAClC,QAAA,IAAI;AACF,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAAA,QAC/B,CAAA,CAAA,MAAQ;AACN,UAAA,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA;AAAA,QAChB;AACA,QAAA,CAAA,IAAK,CAAA;AAAA,MACP,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA;AACd,QAAA,CAAA,IAAK,CAAA;AAAA,MACP;AAAA,IACF,CAAA,MAAO;AACL,MAAA,UAAA,CAAW,KAAK,GAAG,CAAA;AACnB,MAAA,CAAA,IAAK,CAAA;AAAA,IACP;AAAA,EACF;AAEA,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,MAAA,CAAO,WAAA,GAAc,WAAW,CAAC,CAAA;AACjC,IAAA,IAAI,CAAC,MAAA,CAAO,GAAA,IAAO,CAAC,MAAA,CAAO,GAAA,IAAO,CAAC,MAAA,CAAO,OAAA,IAAW,CAAC,MAAA,CAAO,KAAA,EAAO;AAClE,MAAA,MAAA,CAAO,GAAA,GAAM,WAAW,CAAC,CAAA;AACzB,MAAA,MAAA,CAAO,GAAA,GAAM,WAAW,CAAC,CAAA;AACzB,MAAA,MAAA,CAAO,OAAA,GAAU,WAAW,CAAC,CAAA;AAC7B,MAAA,MAAA,CAAO,KAAA,GAAQ,WAAW,CAAC,CAAA;AAAA,IAC7B;AAAA,EACF,CAAA,MAAA,IAAW,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAChC,IAAA,MAAA,CAAO,WAAA,GAAc,UAAA;AAAA,EACvB;AAEA,EAAA,OAAO,MAAA;AACT;AAIA,eAAe,UAAA,CAAW,OAAe,UAAA,EAAsC;AAC7E,EAAA,MAAM,EAAA,GAAKC,gBAAgB,EAAE,KAAA,EAAO,QAAQ,KAAA,EAAO,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAQ,CAAA;AAC3E,EAAA,MAAM,IAAA,GAAO,UAAA,GAAa,CAAA,EAAA,EAAK,UAAU,CAAA,CAAA,CAAA,GAAM,EAAA;AAC/C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAACD,QAAAA,KAAY;AAC9B,IAAA,EAAA,CAAG,SAAS,CAAA,EAAA,EAAK,KAAK,GAAG,IAAI,CAAA,EAAA,CAAA,EAAM,CAAC,MAAA,KAAW;AAC7C,MAAA,EAAA,CAAG,KAAA,EAAM;AACT,MAAAA,QAAAA,CAAQ,MAAA,CAAO,IAAA,EAAK,IAAK,cAAc,EAAE,CAAA;AAAA,IAC3C,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH;AAEA,eAAe,aAAa,KAAA,EAAgC;AAC1D,EAAA,OAAO,IAAI,OAAA,CAAQ,CAACA,QAAAA,KAAY;AAC9B,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAA,EAAK,KAAK,CAAA,WAAA,CAAa,CAAA;AAC5C,IAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,IAAA,KAAA,CAAM,aAAa,IAAI,CAAA;AACvB,IAAA,KAAA,CAAM,MAAA,EAAO;AACb,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AACxB,IAAA,IAAI,KAAA,GAAQ,EAAA;AACZ,IAAA,MAAM,MAAA,GAAS,CAAC,IAAA,KAAiB;AAC/B,MAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,IAAA,EAAM;AAClC,QAAA,KAAA,CAAM,aAAa,KAAK,CAAA;AACxB,QAAA,KAAA,CAAM,KAAA,EAAM;AACZ,QAAA,KAAA,CAAM,cAAA,CAAe,QAAQ,MAAM,CAAA;AACnC,QAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,IAAI,CAAA;AACzB,QAAAA,SAAQ,KAAK,CAAA;AAAA,MACf,CAAA,MAAA,IAAW,SAAS,GAAA,EAAU;AAC5B,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB,CAAA,MAAA,IAAW,SAAS,MAAA,EAAU;AAC5B,QAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,MAC3B,CAAA,MAAO;AACL,QAAA,KAAA,IAAS,IAAA;AAAA,MACX;AAAA,IACF,CAAA;AACA,IAAA,KAAA,CAAM,EAAA,CAAG,QAAQ,MAAM,CAAA;AAAA,EACzB,CAAC,CAAA;AACH;AAEA,eAAe,YAAY,KAAA,EAAwD;AACjF,EAAA,IAAI,MAAM,SAAA,IAAa,KAAA,CAAM,SAAS,UAAA,IAAc,KAAA,CAAM,SAAS,SAAA,EAAW;AAC5E,IAAA,OAAO,YAAA,CAAa,MAAM,KAAK,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,UAAA,CAAW,KAAA,CAAM,KAAA,EAAO,KAAA,CAAM,OAAO,CAAA;AAC9C;AAcO,SAAS,oBAAA,GAAgC;AAC9C,EAAA,MAAM,MAAM,IAAIT,OAAAA,CAAQ,WAAW,CAAA,CAAE,YAAY,sCAAsC,CAAA;AAGvF,EAAA,GAAA,CACG,QAAQ,SAAS,CAAA,CACjB,YAAY,6DAA6D,CAAA,CACzE,OAAO,YAAY;AAClB,IAAA,MAAM,EAAE,aAAA,EAAe,qBAAA,EAAsB,GAAI,MAAM,OAAO,kBAAyB,CAAA;AACvF,IAAA,MAAM,gBAAgB,qBAAA,EAAsB;AAC5C,IAAA,MAAM,OAAA,GAAU,aAAA,CAAc,aAAA,EAAe,aAAa,CAAA,CAAE,MAAA;AAAA,MAC1D,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS;AAAA,KACpB;AAEA,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAA,CAAQ,IAAI,iCAAiC,CAAA;AAC7C,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,IAAI,kCAAkC,CAAA;AAC9C,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAM,OAAA,GACH,KAAA,CAAM,QAAA,EAAU,QAAA,IAA6D,EAAC;AACjF,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,GAAI,OAAA,CAAQ,QAAA,IAAY,EAAC;AAAA,QACzB,GAAA,CAAI,OAAA,CAAQ,QAAA,IAAY,EAAC,EAAG,IAAI,CAAC,CAAA,KAAc,CAAA,EAAG,CAAC,CAAA,WAAA,CAAa;AAAA,OAClE;AACA,MAAA,MAAM,OAAA,GAAU,QAAQ,MAAA,GAAS,CAAA,GAAI,WAAW,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GAAK,EAAA;AACvE,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,EAAE,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,IAAI,CAAA,CAAE,CAAA;AACvD,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,EAAA,CAAG,MAAA,CAAO,EAAE,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,WAAW,CAAA,CAAE,CAAA;AACtD,MAAA,IAAI,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,EAAA,CAAG,OAAO,EAAE,CAAC,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AACzD,MAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,IACd;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA;AAAA,CAAkE,CAAA;AAAA,EAChF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,cAAc,CAAA,CACtB,MAAA,CAAO,WAAA,EAAa,iDAAiD,CAAA,CACrE,MAAA,CAAO,kBAAA,EAAoB,sCAAA,EAAwC,WAAW,CAAA,CAC9E,OAAO,cAAA,EAAgB,kCAAkC,CAAA,CACzD,MAAA,CAAO,sBAAA,EAAwB,qBAAA,EAAuB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACnE,WAAA,CAAY,yDAAyD,CAAA,CACrE,MAAA;AAAA,IACC,OACE,QACA,IAAA,KACG;AACH,MAAA,MAAM,EAAE,kBAAA,EAAmB,GAAI,MAAM,OAAO,wBAA+B,CAAA;AAC3E,MAAA,MAAM,EAAE,eAAe,qBAAA,EAAuB,mBAAA,EAAAW,sBAAoB,GAAI,MAAM,OAC1E,kBACF,CAAA;AAEA,MAAA,MAAM,UAAA,GAAab,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,MAAA,MAAM,QAAA,GAAWA,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,aAAa,CAAA;AAEpD,MAAA,IAAI,CAACc,UAAAA,CAAW,QAAQ,CAAA,EAAG;AACzB,QAAA,MAAA,CAAO,qEAAqE,CAAA;AAC5E,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,MAAM,gBAAgB,qBAAA,EAAsB;AAC5C,MAAA,MAAM,OAAA,GAAU,aAAA,CAAc,aAAA,EAAe,aAAa,CAAA,CAAE,MAAA;AAAA,QAC1D,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS;AAAA,OACpB;AACA,MAAA,MAAM,QAAQ,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAM,CAAA;AACnD,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAA;AAAA,UACE,oBAAoB,MAAM,CAAA,2DAAA;AAAA,SAE5B;AACA,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,kBAAA,EAAuB,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,MAAM,CAAA;AAAA,CAAK,CAAA;AAE7D,MAAA,MAAM,KAAK,IAAA,CAAK,EAAA,IAAO,MAAM,UAAA,CAAW,gBAAgB,MAAM,CAAA;AAC9D,MAAA,MAAM,MAAA,GAAU,KAAK,MAAA,IAAyC,WAAA;AAG9D,MAAA,MAAM,MAAA,GAAU,KAAA,CAAM,QAAA,EAAU,MAAA,IAAU,EAAC;AAC3C,MAAA,MAAM,cAAuC,EAAC;AAC9C,MAAA,MAAM,iBAAiB,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AACtD,MAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,QAAA,OAAA,CAAQ,IAAI,8BAA8B,CAAA;AAC1C,QAAA,KAAA,MAAW,SAAS,cAAA,EAAgB;AAClC,UAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,KAAK,CAAA;AACrC,UAAA,IAAI,KAAA,EAAO,WAAA,CAAY,KAAA,CAAM,GAAG,CAAA,GAAI,KAAA;AAAA,QACtC;AAAA,MACF;AAGA,MAAA,MAAM,OAAA,GACH,KAAA,CAAM,QAAA,EAAU,QAAA,IAA6D,EAAC;AACjF,MAAA,MAAM,OAAA,GAAU,CAAC,GAAI,OAAA,CAAQ,QAAA,IAAY,EAAC,EAAI,GAAI,OAAA,CAAQ,QAAA,IAAY,EAAG,CAAA;AACzE,MAAA,IAAI,IAAA,CAAK,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AACtC,QAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,qBAAA,EAA0B,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,GAAA,CAAK,CAAA;AAC7D,QAAA,MAAM,aAAA,GAAgB,MAAM,kBAAA,CAAmB,OAAA,EAAS,UAAU,CAAA;AAClE,QAAA,IAAI,CAAC,cAAc,OAAA,EAAS;AAC1B,UAAA,MAAA,CAAO,CAAA;AAAA,EAAoC,aAAA,CAAc,MAAM,CAAA,CAAE,CAAA;AACjE,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AACA,QAAA,OAAA,CAAQ,IAAI,iCAA4B,CAAA;AAAA,MAC1C,WAAW,CAAC,IAAA,CAAK,OAAA,IAAW,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC9C,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,CAAA,4DAAA,EAA0D,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,SAC7E;AAAA,MACF;AAGA,MAAA,MAAM,MAAA,GAASD,oBAAAA,CAAoB,IAAA,CAAK,QAAQ,CAAA;AAChD,MAAA,MAAA,CAAO,YAAA,CAAa;AAAA,QAClB,EAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA;AAAA,QACA,SAAS,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,CAAE,MAAA,GAAS,IAAI,WAAA,GAAc;AAAA,OAC9D,CAAA;AACD,MAAA,MAAA,CAAO,IAAA,EAAK;AAEZ,MAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,kBAAA,EAAkB,EAAE,MAAM,MAAM,CAAA;AAAA,CAA0B,CAAA;AAAA,IACxE;AAAA,GACF;AAGF,EAAA,GAAA,CACG,QAAQ,aAAa,CAAA,CACrB,MAAA,CAAO,sBAAA,EAAwB,uBAAuB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACnE,YAAY,wDAAwD,CAAA,CACpE,MAAA,CAAO,OAAO,IAAY,IAAA,KAAiC;AAC1D,IAAA,MAAM,EAAE,mBAAA,EAAAA,oBAAAA,EAAoB,GAAI,MAAM,OAAO,kBAAyB,CAAA;AAEtE,IAAA,MAAM,UAAA,GAAab,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,QAAA,GAAWA,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,aAAa,CAAA;AAEpD,IAAA,IAAI,CAACc,UAAAA,CAAW,QAAQ,CAAA,EAAG;AACzB,MAAA,MAAA,CAAO,4CAA4C,CAAA;AACnD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,MAAM,MAAA,GAASD,oBAAAA,CAAoB,IAAA,CAAK,QAAQ,CAAA;AAChD,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,eAAA,CAAgB,EAAE,CAAA;AAEzC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAA,CAAO,CAAA,sBAAA,EAAyB,EAAE,CAAA,uBAAA,CAAyB,CAAA;AAC3D,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,MAAA,CAAO,IAAA,EAAK;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kBAAA,EAAgB,EAAE,CAAA,0BAAA,CAA4B,CAAA;AAAA,EAC5D,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,QAAQ,aAAa,CAAA,CACrB,MAAA,CAAO,sBAAA,EAAwB,uBAAuB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACnE,YAAY,4DAA4D,CAAA,CACxE,MAAA,CAAO,OAAO,IAAwB,IAAA,KAAiC;AACtE,IAAA,MAAM,GAAA,GAAM,MAAM,OAAO,wBAA+B,CAAA;AACxD,IAAA,GAAA,CAAI,yBAAA,EAA0B;AAE9B,IAAA,MAAM,UAAA,GAAab,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,YAAA,GAAe,GAAA,CAAI,yBAAA,CAA0B,UAAU,CAAA;AAE7D,IAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,MAAA,OAAA,CAAQ,IAAI,0CAA0C,CAAA;AACtD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,KAAK,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,EAAE,CAAA,GAAI,YAAA;AAC/D,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,MAAA,CAAO,CAAA,sBAAA,EAAyB,EAAE,CAAA,QAAA,CAAU,CAAA;AAC5C,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,gBAAA,CAAiB,UAAA,EAAY;AAAA,MACnD,OAAA,EAAS,IAAI,4BAAA;AAA6B,KAC3C,CAAA;AACD,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAA;AAE/C,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,OAAA,EAAS;AAC9B,MAAA,MAAM,MAAA,GAAS,CAAA,CAAE,SAAA,GAAY,QAAA,GAAM,QAAA;AACnC,MAAA,MAAM,SAAS,CAAA,CAAE,KAAA,GAAQ,CAAA,SAAA,EAAY,CAAA,CAAE,KAAK,CAAA,CAAA,GAAK,EAAA;AACjD,MAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,EAAE,EAAE,CAAA;AAC9C,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,MAAM,CAAA,EAAA,EAAK,EAAE,EAAA,CAAG,MAAA,CAAO,EAAE,CAAC,aAAa,IAAA,EAAM,MAAA,IAAU,GAAG,CAAA,EAAG,MAAM,CAAA,CAAE,CAAA;AAAA,IACxF;AAEA,IAAA,MAAM,QAAQ,aAAA,EAAc;AAAA,EAC9B,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,gCAAgC,CAAA,CAC5C,MAAA,CAAO,sBAAA,EAAwB,qBAAA,EAAuB,QAAQ,GAAA,EAAK,CAAA,CACnE,MAAA,CAAO,OAAO,IAAA,KAAS;AACtB,IAAA,MAAM,UAAA,GAAaA,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,CAAkB,UAAU,CAAA;AAClD,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU,OAAA,CAAQ,gBAAe,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC/D,CAAA,SAAE;AACA,MAAA,MAAM,QAAQ,aAAA,EAAc;AAAA,IAC9B;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,WAAW,CAAA,CACnB,WAAA,CAAY,iFAAiF,CAAA,CAC7F,MAAA,CAAO,SAAS,qBAAqB,CAAA,CACrC,OAAO,sBAAA,EAAwB,qBAAA,EAAuB,QAAQ,GAAA,EAAK,EACnE,MAAA,CAAO,OAAO,IAAwB,IAAA,KAAS;AAC9C,IAAA,MAAM,UAAA,GAAaA,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,CAAkB,UAAU,CAAA;AAClD,IAAA,IAAI;AACF,MAAA,IAAI,KAAK,GAAA,EAAK;AACZ,QAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,OAAA,EAAQ;AACtC,QAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MAC9C,WAAW,EAAA,EAAI;AACb,QAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA,EAAG;AACpB,UAAA,MAAA;AAAA,YACE,CAAA,oBAAA,EAAuB,EAAE,CAAA,cAAA,EAAiB,OAAA,CACvC,gBAAe,CACf,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA,CACf,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,WACf;AACA,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AACA,QAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,IAAA,CAAK,EAAE,CAAA;AACpC,QAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,MAC7C,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,qCAAqC,CAAA;AAC5C,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,MAAM,QAAQ,aAAA,EAAc;AAAA,IAC9B;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,QAAQ,UAAU,CAAA,CAClB,WAAA,CAAY,2CAA2C,EACvD,MAAA,CAAO,sBAAA,EAAwB,qBAAA,EAAuB,OAAA,CAAQ,KAAK,CAAA,CACnE,MAAA,CAAO,OAAO,IAAY,IAAA,KAAS;AAClC,IAAA,MAAM,UAAA,GAAaA,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,CAAkB,UAAU,CAAA;AAClD,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA,EAAG;AACpB,QAAA,MAAA;AAAA,UACE,CAAA,oBAAA,EAAuB,EAAE,CAAA,cAAA,EAAiB,OAAA,CACvC,gBAAe,CACf,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA,CACf,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,SACf;AACA,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU,OAAA,CAAQ,cAAc,EAAE,CAAA,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAChE,CAAA,SAAE;AACA,MAAA,MAAM,QAAQ,aAAA,EAAc;AAAA,IAC9B;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,QAAQ,2BAA2B,CAAA,CACnC,WAAA,CAAY,+BAA+B,EAC3C,MAAA,CAAO,sBAAA,EAAwB,qBAAA,EAAuB,OAAA,CAAQ,KAAK,CAAA,CACnE,OAAO,OAAO,EAAA,EAAY,cAAsB,IAAA,KAAS;AACxD,IAAA,MAAM,UAAA,GAAaA,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,CAAkB,UAAU,CAAA;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,IAAA,CAAK,IAAI,YAAY,CAAA;AACnD,MAAA,OAAA,CAAQ,GAAA,CAAI,OAAA,EAAS,IAAA,EAAM,QAAA,MAAc,SAAS,CAAA;AAAA,IACpD,CAAA,SAAE;AACA,MAAA,MAAM,QAAQ,aAAA,EAAc;AAAA,IAC9B;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,QAAQ,sCAAsC,CAAA,CAC9C,YAAY,wCAAwC,CAAA,CACpD,OAAO,sBAAA,EAAwB,qBAAA,EAAuB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACnE,MAAA,CAAO,OAAO,EAAA,EAAY,YAAA,EAAsB,SAAiB,IAAA,KAAS;AACzE,IAAA,MAAM,UAAA,GAAaA,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,CAAkB,UAAU,CAAA;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,QAAQ,KAAA,CAAM,EAAA,EAAI,cAAc,EAAE,IAAA,EAAM,SAAS,CAAA;AACvD,MAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AAAA,IACxB,CAAA,SAAE;AACA,MAAA,MAAM,QAAQ,aAAA,EAAc;AAAA,IAC9B;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,8BAA8B,CAAA,CACtC,WAAA,CAAY,sDAAsD,CAAA,CAClE,MAAA,CAAO,sBAAA,EAAwB,qBAAA,EAAuB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACnE,OAAO,aAAA,EAAe,wBAAwB,CAAA,CAC9C,MAAA,CAAO,aAAA,EAAe,2BAAA,EAA6B,QAAQ,CAAA,CAC3D,MAAA,CAAO,OAAO,EAAA,EAAY,YAAA,EAAkC,IAAA,KAAS;AACpE,IAAA,MAAM,UAAA,GAAaA,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,CAAkB,UAAU,CAAA;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,IAAA,CAAK,IAAI,YAAA,EAAc;AAAA,QACnD,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,OAAO,IAAA,CAAK;AAAA,OACb,CAAA;AACD,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC9C,CAAA,SAAE;AACA,MAAA,MAAM,QAAQ,aAAA,EAAc;AAAA,IAC9B;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,QAAQ,qBAAqB,CAAA,CAC7B,WAAA,CAAY,gDAAgD,EAC5D,MAAA,CAAO,sBAAA,EAAwB,qBAAA,EAAuB,OAAA,CAAQ,KAAK,CAAA,CACnE,OAAO,OAAO,EAAA,EAAY,OAAe,IAAA,KAAS;AACjD,IAAA,MAAM,UAAA,GAAaA,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,CAAkB,UAAU,CAAA;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,KAAK,CAAA;AAC9C,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAC9C,CAAA,SAAE;AACA,MAAA,MAAM,QAAQ,aAAA,EAAc;AAAA,IAC9B;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,QAAQ,6BAA6B,CAAA,CACrC,WAAA,CAAY,kCAAkC,EAC9C,MAAA,CAAO,sBAAA,EAAwB,qBAAA,EAAuB,OAAA,CAAQ,KAAK,CAAA,CACnE,OAAO,OAAO,EAAA,EAAY,cAAsB,IAAA,KAAS;AACxD,IAAA,MAAM,UAAA,GAAaA,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,CAAkB,UAAU,CAAA;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,GAAK,MAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,YAAY,CAAA;AAChD,MAAA,OAAA,CAAQ,GAAA,CAAI,EAAA,GAAK,UAAA,GAAa,YAAY,CAAA;AAAA,IAC5C,CAAA,SAAE;AACA,MAAA,MAAM,QAAQ,aAAA,EAAc;AAAA,IAC9B;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,yBAAyB,CAAA,CACjC,WAAA,CAAY,6DAA6D,CAAA,CACzE,MAAA,CAAO,wBAAwB,qBAAA,EAAuB,OAAA,CAAQ,KAAK,CAAA,CACnE,oBAAmB,CACnB,MAAA,CAAO,OAAO,EAAA,EAAY,EAAA,EAAY,MAAgB,IAAA,KAAS;AAC9D,IAAA,MAAM,UAAA,GAAaA,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,CAAkB,UAAU,CAAA;AAClD,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA,EAAG;AACpB,QAAA,MAAA;AAAA,UACE,CAAA,oBAAA,EAAuB,EAAE,CAAA,cAAA,EAAiB,OAAA,CACvC,gBAAe,CACf,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAA,CACf,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,SACf;AACA,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,MAAM,OAAA,GAAU,CAAC,GAAG,IAAA,EAAM,GAAI,IAAA,CAAK,IAAI,CAAA,IAAK,EAAG,CAAA;AAC/C,MAAA,MAAM,MAAA,GAAS,YAAY,OAAO,CAAA;AAClC,MAAA,MAAM,SAAS,MAAM,OAAA,CAAQ,SAAA,CAAU,EAAA,EAAI,IAAI,MAAM,CAAA;AACrD,MAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA,IACpB,CAAA,SAAE;AACA,MAAA,MAAM,QAAQ,aAAA,EAAc;AAAA,IAC9B;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,GAAA,CAAI,MAAA,CAAO,MAAM,GAAA,CAAI,IAAA,EAAM,CAAA;AAE3B,EAAA,OAAO,GAAA;AACT;ACjhBA,eAAe,aAAA,CACb,KAAA,EACA,UAAA,EACA,IAAA,EACe;AACf,EAAA,MAAM,EAAE,wBAAA,EAAyB,GAAI,MAAM,OAAO,2BAAwC,CAAA;AAE1F,EAAA,MAAM,MAAA,GAAS,IAAI,wBAAA,CAAyB;AAAA,IAC1C,KAAK,UAAA,CAAW,GAAA;AAAA,IAChB,SAAA,EAAW,EAAE,WAAA,EAAa,CAAA;AAAE,GAC7B,CAAA;AAED,EAAA,IAAI;AACF,IAAA,MAAM,OAAO,OAAA,EAAQ;AAAA,EACvB,SAAS,GAAA,EAAK;AACZ,IAAA,MAAA;AAAA,MACE,CAAA,qBAAA,EAAwB,UAAA,CAAW,GAAG,CAAA,EAAA,EAAK,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,KAC7F;AACA,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,OAAA,CAAc,CAACW,QAAAA,KAAY;AACnC,IAAA,MAAM,OAAA,GAAU,WAAW,MAAM;AAC/B,MAAA,MAAA,CAAO,6CAA6C,CAAA;AACpD,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,MAAAA,QAAAA,EAAQ;AAAA,IACV,GAAG,GAAK,CAAA;AAER,IAAA,MAAA,CAAO,SAAA,CAAU,CAAC,KAAA,KAAU;AAC1B,MAAA,IAAI,KAAA,CAAM,SAAS,cAAA,EAAgB;AACnC,MAAA,YAAA,CAAa,OAAO,CAAA;AACpB,MAAA,gBAAA,CAAiB,KAAA,EAAO,MAAM,IAAI,CAAA;AAClC,MAAAA,QAAAA,EAAQ;AAAA,IACV,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,MAAM,CAAA;AAAA,EAC5C,CAAC,CAAA;AAED,EAAA,MAAM,OAAO,UAAA,EAAW;AAC1B;AAEA,SAAS,gBAAA,CAAiB,OAAe,IAAA,EAAqB;AAC5D,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAA,SAAA,EAAY,KAAK,EAAE,CAAC,CAAA;AAC1C,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,IAAA,KAAS,MAAA,EAAW;AACvC,IAAA,OAAA,CAAQ,WAAW,CAAA;AACnB,IAAA;AAAA,EACF;AACA,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AACpD,IAAA,MAAM,GAAA,GAAM,IAAA;AACZ,IAAA,IAAI,WAAW,GAAA,EAAK;AAClB,MAAA,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,KAAK,CAAC,CAAA;AACxB,MAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AACzC,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,KAAA,CAAM,MAAM,CAAA;AACd;AAYO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,MAAM,GAAA,GAAM,IAAIT,OAAAA,CAAQ,OAAO,CAAA,CAC5B,WAAA,CAAY,oDAAoD,CAAA,CAChE,MAAA,CAAO,aAAA,EAAe,sBAAA,EAAwB,qBAAqB,CAAA;AAEtE,EAAA,GAAA,CACG,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,4CAA4C,CAAA,CACxD,MAAA,CAAO,OAAO,CAAA,EAAG,MAAA,KAAW;AAC3B,IAAA,MAAM,aAAA,CAAc,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA;AAAA,EACnD,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,YAAY,CAAA,CACpB,WAAA,CAAY,4CAA4C,CAAA,CACxD,MAAA,CAAO,OAAO,CAAA,EAAG,MAAA,KAAW;AAC3B,IAAA,MAAM,aAAA,CAAc,YAAA,EAAc,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA;AAAA,EACxD,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,KAAK,CAAA,CACb,WAAA,CAAY,6CAA6C,CAAA,CACzD,MAAA,CAAO,OAAO,CAAA,EAAG,MAAA,KAAW;AAC3B,IAAA,MAAM,aAAA,CAAc,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA;AAAA,EACjD,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,wCAAwC,CAAA,CACpD,MAAA,CAAO,OAAO,CAAA,EAAG,MAAA,KAAW;AAC3B,IAAA,MAAM,aAAA,CAAc,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA;AAAA,EACpD,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,yDAAyD,EACrE,MAAA,CAAO,OAAO,KAAA,EAAO,CAAA,EAAG,MAAA,KAAW;AAClC,IAAA,MAAM,aAAA,CAAc,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,IAAA,IAAQ,KAAA,GAAQ,EAAE,KAAA,EAAM,GAAI,MAAS,CAAA;AAAA,EAClF,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;ACtGO,SAAS,eAAA,GAA2B;AACzC,EAAA,OAAO,IAAIA,QAAQ,MAAM,CAAA,CACtB,YAAY,mDAAmD,CAAA,CAC/D,SAAS,OAAA,EAAS,6BAA6B,EAC/C,MAAA,CAAO,sBAAA,EAAwB,qBAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,CAAC,GAAA,EAAa,IAAA,KAAS;AAC7B,IAAA,MAAMC,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAYH,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA;AACzE,IAAA,MAAM,MAAA,GAASG,GAAAA,CAAG,IAAA,CAAK,GAAG,CAAA;AAC1B,IAAA,IAAI,WAAW,IAAA,EAAM;AACnB,MAAA,OAAA,CAAQ,sCAAsC,CAAA;AAC9C,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAAA,EACpB,CAAC,CAAA;AACL;ACZO,SAAS,eAAA,GAA2B;AACzC,EAAA,MAAM,MAAM,IAAID,OAAAA,CAAQ,MAAM,CAAA,CAAE,YAAY,cAAc,CAAA;AAE1D,EAAA,GAAA,CACG,QAAQ,MAAM,CAAA,CACd,YAAY,sBAAsB,CAAA,CAClC,OAAO,YAAY;AAClB,IAAA,MAAM,KAAA,GAAQ,aAAa,YAAY,CAAA;AACvC,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,OAAA,CAAQ,iBAAiB,CAAA;AACzB,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,OAAA,CAAQ,mBAAmB,CAAC,CAAA;AAC1C,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,CAAA;AAC7B,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAAE,EAAA,CAAG,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AACnD,MAAA,IAAI,CAAA,CAAE,WAAA,EAAa,OAAA,CAAQ,GAAA,CAAI,KAAK,EAAA,CAAG,MAAA,CAAO,EAAE,CAAC,IAAI,CAAA,CAAE,GAAA,CAAI,CAAA,CAAE,WAAW,CAAC,CAAA,CAAE,CAAA;AAAA,IAC7E;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,EACd,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,WAAW,CAAA,CACnB,WAAA,CAAY,kCAAkC,CAAA,CAC9C,MAAA,CAAO,OAAO,EAAA,KAAe;AAC5B,IAAA,MAAM,KAAA,GAAQ,aAAa,YAAY,CAAA;AACvC,IAAA,MAAM,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AAC1C,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAA,CAAO,CAAA,gBAAA,EAAmB,EAAE,CAAA,CAAE,CAAA;AAC9B,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,QAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,EAAI,KAAK,EAAE,CAAA,EAAA,EAAK,KAAK,OAAO,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,CAAA;AACjF,IAAA,IAAI,IAAA,CAAK,WAAA,EAAa,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,EAAE,GAAA,CAAI,IAAA,CAAK,WAAW,CAAC,CAAA,CAAE,CAAA;AAChE,IAAA,MAAM,UAAA,GAAa,KAAK,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,OAAO,CAAA;AAC9D,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAA,EAAO,CAAA,CAAE,OAAA,CAAQ,OAAO,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,EAAI,UAAA,CAAW,MAAM,CAAA,QAAA,CAAU,CAAC,CAAA,CAAE,CAAA;AACjF,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,CAAA;AAC7B,IAAA,KAAA,MAAW,QAAQ,UAAA,EAAY;AAC7B,MAAA,MAAM,MAAM,IAAA,CAAK,IAAA,EAAM,WAAW,CAAA,CAAE,GAAA,CAAI,aAAa,CAAA,GAAI,EAAA;AACzD,MAAA,MAAM,SAAS,IAAA,CAAK,IAAA,EAAM,SAAS,IAAA,CAAK,EAAA,EAAI,OAAO,EAAE,CAAA;AACrD,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,KAAK,IAAI,CAAA,CAAE,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA,EAAI,EAAE,GAAA,CAAI,IAAA,CAAK,MAAM,KAAA,IAAS,IAAA,CAAK,EAAE,CAAC,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA;AAAA,IAC3F;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,EACd,CAAC,CAAA;AAEH,EAAA,GAAA,CAAI,MAAA,CAAO,MAAM,GAAA,CAAI,IAAA,EAAM,CAAA;AAE3B,EAAA,OAAO,GAAA;AACT;ACrDO,SAAS,kBAAA,GAA8B;AAC5C,EAAA,MAAM,MAAM,IAAIA,OAAAA,CAAQ,SAAS,CAAA,CAAE,YAAY,uCAAuC,CAAA;AAEtF,EAAA,GAAA,CACG,QAAA,CAAS,SAAA,EAAW,2BAAA,EAA6B,IAAI,EACrD,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,OAAA,CAAQ,KAAK,CAAA,CACjE,MAAA,CAAO,CAAC,UAAkB,IAAA,KAAS;AAClC,IAAA,MAAMC,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAYH,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA;AACzE,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,QAAA,EAAU,EAAE,CAAA,IAAK,EAAA;AACxC,IAAA,MAAM,OAAA,GAAUG,GAAAA,CAAG,OAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAA,CAAQ,iBAAiB,CAAA;AACzB,MAAA;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAA,CAAI,MAAM,CAAC,CAAA;AAC5D,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,OAAA,CAAQ,WAAW,CAAC,CAAA;AAClC,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,IAAA,GAAO,EAAE,CAAC,CAAA,CAAE,CAAA;AACpC,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,MAAM,OAAO,IAAI,IAAA,CAAK,CAAA,CAAE,SAAS,EAAE,kBAAA,EAAmB;AACtD,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,EAAA,EAAK,QAAA,CAAS,CAAA,CAAE,GAAG,CAAA,CAAE,OAAO,IAAA,GAAO,EAAE,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,IAAI,CAAC,CAAA;AAAA,OACvG;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,EACd,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,sBAAsB,CAAA,CAClC,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,QAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,CAAC,IAAA,KAAS;AAChB,IAAA,MAAMA,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAYH,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA;AACzE,IAAAG,IAAG,YAAA,EAAa;AAChB,IAAA,KAAA,CAAM,kBAAkB,CAAA;AAAA,EAC1B,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;AC3BA,IAAM,qBAAA,GACJ,kIAAA;AAGF,SAAS,QAAA,CAAS,MAAc,GAAA,EAAoB;AAClD,EAAA,MAAA,CAAO,CAAA,EAAG,GAAG,CAAA,gBAAA,EAAmB,IAAI,CAAA,CAAA,CAAG,CAAA;AACvC,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAChB;AAEO,SAAS,kBAAA,GAA8B;AAC5C,EAAA,MAAM,MAAM,IAAID,OAAAA,CAAQ,SAAS,CAAA,CAAE,YAAY,+CAA+C,CAAA;AAG9F,EAAA,GAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,+BAA+B,CAAA,CAC3C,MAAA,CAAO,QAAA,EAAU,gBAAgB,CAAA,CACjC,MAAA,CAAO,OAAO,IAAA,KAA6B;AAC1C,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,GAAK,MAAM,OAAA,CAAQ,aAAA,EAAc;AACvC,MAAA,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU,EAAA,EAAI,IAAA,EAAM,CAAC,CAAC,CAAA;AAC7D,MAAA,IAAI,EAAA,CAAG,WAAW,CAAA,EAAG;AACnB,QAAA,OAAA,CAAQ,uEAAuE,CAAA;AAC/E,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,OAAA,CAAQ,aAAa,CAAC,CAAA;AACpC,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,CAAA;AAC7B,MAAA,KAAA,MAAW,KAAK,EAAA,EAAI;AAClB,QAAA,MAAM,MAAM,CAAA,CAAE,SAAA,GAAYM,GAAAA,CAAG,KAAA,CAAM,SAAI,CAAA,GAAI,IAAA;AAC3C,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,EAAA,EAAKA,GAAAA,CAAG,GAAA,CAAI,EAAE,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA,EAAA,EAAKA,GAAAA,CAAG,GAAA,CAAI,EAAE,SAAA,CAAU,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,EAAA,EAAKA,GAAAA,CAAG,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,SACzH;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAA,EAAO,EAAE,GAAA,CAAI,CAAA,EAAG,EAAA,CAAG,MAAM,aAAa,CAAC;AAAA,CAAI,CAAA;AAAA,IACzD,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAMH,EAAA,GAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,wDAAwD,CAAA,CACpE,MAAA,CAAO,wBAAwB,mBAAA,EAAqB,OAAA,CAAQ,KAAK,CAAA,CACjE,OAAO,QAAA,EAAU,gBAAgB,EACjC,MAAA,CAAO,OAAO,MAA0B,IAAA,KAAiD;AACxF,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,qBAAA,CAAsB,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,KAAK,CAAA;AACpD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,kBAAA,CAAmB,IAAA,CAAK,UAAA,EAAY,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,EAC9D,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,aAAa,CAAA,CACrB,WAAA,CAAY,+BAA+B,CAAA,CAC3C,MAAA,CAAO,OAAO,IAAA,KAAiB;AAC9B,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,CAAA,GAAI,MAAM,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA;AAC3C,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,OAAA,CAAQ,IAAI,CAAA,CAAE,OAAA,CAAQ,KAAK,CAAA,CAAE,IAAI,EAAE,CAAC,CAAA;AACpC,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,CAAA;AAC7B,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,KAAA,CAAM,IAAI,CAAC,CAAA,YAAA,EAAe,CAAA,CAAE,EAAE,CAAA,CAAE,CAAA;AACnD,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,KAAA,CAAM,SAAS,CAAC,CAAA,OAAA,EAAU,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AACxD,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,KAAA,CAAM,WAAW,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,SAAS,CAAA,CAAE,CAAA;AAC1D,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,KAAA,CAAM,MAAM,CAAC,CAAA,UAAA,EAAa,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AACrD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,WAAW,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,SAAA,IAAa,cAAc,CAAA,CAAE,CAAA;AAC5E,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,KAAA,CAAM,WAAW,CAAC,CAAA,KAAA,EAAQ,CAAA,CAAE,SAAS,CAAA,CAAE,CAAA;AAC1D,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,KAAA,CAAM,aAAa,CAAC,CAAA,GAAA,EAAM,CAAA,CAAE,iBAAiB,CAAA,CAAE,CAAA;AAClE,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,eAAe,CAAC,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,aAAa,CAAC,CAAA,CAAE,CAAA;AAC9E,MAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,IACd,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAIH,EAAA,GAAA,CACG,OAAA,CAAQ,aAAa,CAAA,CACrB,WAAA,CAAY,0DAA0D,CAAA,CACtE,MAAA,CAAO,eAAe,4CAA4C,CAAA,CAClE,OAAO,SAAA,EAAW,mCAAmC,EACrD,MAAA,CAAO,eAAA,EAAiB,qBAAqB,CAAA,CAC7C,MAAA,CAAO,UAAA,EAAY,gBAAgB,CAAA,CACnC,MAAA;AAAA,IACC,OACE,MACA,IAAA,KAMG;AACH,MAAA,MAAM,SAAS,iBAAA,EAAkB;AACjC,MAAA,MAAM,OAAA,GAAeO,MAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,IAAI,CAAA;AACtC,MAAA,MAAM,YAAY,IAAA,CAAK,WAAA,GAAc,aAAA,GAAgB,IAAA,CAAK,SAAS,QAAA,GAAW,OAAA;AAC9E,MAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,MAAA,IAAI;AACF,QAAA,IAAI,KAAK,GAAA,EAAK;AACZ,UAAGC,IAAA,CAAA,SAAA,CAAU,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AACzC,UAAA,MAAM,QAAQ,UAAA,CAAW;AAAA,YACvB,IAAA;AAAA,YACA,IAAA,EAAM,OAAA;AAAA,YACN,OAAA,EAAS,KAAA;AAAA,YACT,aAAA,EAAe,EAAE,GAAA,EAAK,IAAA,CAAK,KAAK,MAAA,EAAQ,MAAA,EAAQ,UAAU,KAAA,EAAM;AAAA,YAChE;AAAA,WACD,CAAA;AAAA,QACH,CAAA,MAAO;AACL,UAAGA,IAAA,CAAA,SAAA,CAAU,OAAA,EAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AACzC,UAAA,MAAM,QAAQ,UAAA,CAAW;AAAA,YACvB,IAAA;AAAA,YACA,IAAA,EAAM,OAAA;AAAA,YACN,OAAA,EAAS,OAAA;AAAA,YACT,SAAA,EAAW,OAAA;AAAA,YACX,SAAA,EAAW;AAAA,WACZ,CAAA;AAAA,QACH;AACA,QAAA,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,CAAA,aAAA,EAAgB,OAAO,CAAA,CAAE,CAAA;AAAA,MACjD,CAAA,SAAE;AACA,QAAA,KAAA,EAAM;AAAA,MACR;AAAA,IACF;AAAA,GACF;AAIF,EAAA,GAAA,CACG,OAAA,CAAQ,uBAAuB,CAAA,CAC/B,WAAA,CAAY,wEAAwE,CAAA,CACpF,MAAA,CAAO,iBAAA,EAAmB,gBAAA,EAAkB,MAAM,CAAA,CAClD,MAAA,CAAO,OAAO,IAAA,EAAc,KAAa,IAAA,KAA6B;AACrE,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA;AAC7C,MAAA,IAAI,GAAA,CAAI,YAAY,KAAA,EAAO;AACzB,QAAA,MAAA;AAAA,UACE,CAAA,SAAA,EAAY,IAAI,CAAA,kDAAA,EACc,IAAI,sBAAsB,GAAG,CAAA,wBAAA;AAAA,SAC7D;AACA,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,MAAM,OAAA,CAAQ,cAAc,IAAA,EAAM;AAAA,QAChC,OAAA,EAAS,KAAA;AAAA,QACT,eAAe,EAAE,GAAA,EAAK,QAAQ,IAAA,CAAK,MAAA,EAAQ,UAAU,KAAA;AAAM,OAC5D,CAAA;AACD,MAAA,KAAA,CAAM,CAAA,SAAA,EAAY,IAAI,CAAA,YAAA,EAAe,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,IAC7C,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAKH,EAAA,GAAA,CACG,OAAA,CAAQ,sBAAsB,CAAA,CAC9B,WAAA,CAAY,4DAA4D,CAAA,CACxE,SAAA;AAAA,IACC,IAAIC,OAAO,eAAA,EAAiB,qBAAqB,EAAE,OAAA,CAAQ,CAAC,GAAG,WAAW,CAAC;AAAA,GAC7E,CACC,OAAO,kBAAA,EAAoB,kDAAkD,EAC7E,MAAA,CAAO,aAAA,EAAe,6DAA6D,CAAA,CACnF,MAAA;AAAA,IACC,OACE,IAAA,EACA,IAAA,EACA,IAAA,KACG;AACH,MAAA,IAAI,CAAE,WAAA,CAAkC,QAAA,CAAS,IAAI,CAAA,EAAG;AACtD,QAAA,MAAA,CAAO,uBAAuB,IAAI,CAAA,aAAA,EAAgB,YAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAG,CAAA;AAC3E,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,MAAA,IAAI;AACF,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI,KAAK,OAAA,EAAS;AAChB,UAAA,MAAA,GAAS,MAAM,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,OAAO,CAAA;AAAA,QACpD,CAAA,MAAO;AACL,UAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,aAAA,EAAc;AACxC,UAAA,MAAM,MAAM,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,SAAS,CAAA;AACvC,UAAA,IAAI,CAAC,GAAA,EAAK;AACR,YAAA,MAAA;AAAA,cACE;AAAA,aACF;AACA,YAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,UAChB;AACA,UAAA,MAAA,GAAS,GAAA;AAAA,QACX;AACA,QAAA,MAAMd,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,YAAY,OAAA,CAAQ,GAAA,IAAO,CAAA;AACzD,QAAA,MAAM,OAAA,GAAU,KAAK,GAAA,GAAWY,MAAA,CAAA,IAAA,CAAK,OAAO,IAAA,EAAM,IAAA,CAAK,GAAG,CAAA,GAAI,MAAA,CAAO,IAAA;AACrE,QAAA,MAAM,MAAMZ,GAAAA,CAAG,MAAA,CAAO,MAAM,IAAA,CAAK,IAAA,IAAQ,MAAM,OAAO,CAAA;AACtD,QAAA,IAAI,IAAI,EAAA,EAAI;AACV,UAAA,KAAA,CAAM,CAAA,QAAA,EAAW,IAAA,CAAK,IAAA,IAAQ,IAAI,CAAA,EAAA,EAAKK,IAAG,GAAA,CAAI,GAAA,CAAI,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,QAC3D,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,IAAI,IAAI,CAAA;AACf,UAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,QAChB;AAAA,MACF,CAAA,SAAE;AACA,QAAA,KAAA,EAAM;AAAA,MACR;AAAA,IACF;AAAA,GACF;AAGF,EAAA,GAAA,CACG,OAAA,CAAQ,gBAAgB,CAAA,CACxB,WAAA,CAAY,mCAAmC,CAAA,CAC/C,MAAA,CAAO,OAAO,IAAA,KAAiB;AAC9B,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA;AAC7C,MAAA,KAAA,CAAM,CAAA,eAAA,EAAa,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAAA,IACnC,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,oBAAoB,CAAA,CAC5B,WAAA,CAAY,6CAA6C,CAAA,CACzD,MAAA,CAAO,OAAO,OAAA,EAAiB,OAAA,KAAoB;AAClD,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,cAAA,CAAe,OAAO,CAAA;AAChD,MAAA,MAAM,MAAA,GAAcO,MAAA,CAAA,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA;AACpC,MAAA,MAAM,OAAA,GAAeA,MAAA,CAAA,IAAA,CAAK,MAAA,EAAQ,OAAO,CAAA;AACzC,MAAA,IAAOC,IAAA,CAAA,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,QAAA,MAAA,CAAO,CAAA,iCAAA,EAAoC,OAAO,CAAA,CAAE,CAAA;AACpD,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAGA,IAAA,CAAA,UAAA,CAAW,GAAA,CAAI,IAAA,EAAM,OAAO,CAAA;AAC/B,MAAA,MAAM,OAAA,CAAQ,cAAc,GAAA,CAAI,EAAA,EAAI,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,CAAA;AACpE,MAAA,KAAA,CAAM,CAAA,QAAA,EAAW,OAAO,CAAA,QAAA,EAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IACzC,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,0BAA0B,CAAA,CAClC,WAAA,CAAY,4DAA4D,CAAA,CACxE,MAAA,CAAO,OAAO,IAAA,EAAc,IAAA,KAAiB;AAC5C,IAAA,MAAM,CAAC,KAAA,EAAO,GAAG,IAAI,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AACvC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAC3B,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA;AAC7C,MAAA,MAAM,QAAiC,EAAC;AACxC,MAAA,IAAI,KAAA,KAAU,WAAA,EAAa,KAAA,CAAM,SAAA,GAAY,KAAA;AAAA,WAAA,IACpC,KAAA,KAAU,WAAA,EAAa,KAAA,CAAM,SAAA,GAAY,KAAA;AAAA,WAAA,IACzC,KAAA,KAAU,WAAA,EAAa,KAAA,CAAM,SAAA,GAAY,KAAA,KAAU,MAAA;AAAA,WAAA,IACnD,KAAA,CAAM,UAAA,CAAW,gBAAgB,CAAA,EAAG;AAC3C,QAAA,MAAM,GAAA,GAAM,KAAA,CAAM,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AAC9B,QAAA,KAAA,CAAM,aAAA,GAAgB,EAAE,GAAG,GAAA,CAAI,eAAe,CAAC,GAAG,GAAG,KAAA,EAAM;AAAA,MAC7D,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,CAAA,mBAAA,EAAsB,KAAK,CAAA,CAAE,CAAA;AACpC,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,MAAM,OAAA,CAAQ,aAAA,CAAc,IAAA,EAAM,KAAK,CAAA;AACvC,MAAA,KAAA,CAAM,CAAA,QAAA,EAAW,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAA;AAAA,IAClC,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,QAAQ,eAAe,CAAA,CACvB,YAAY,yDAAyD,CAAA,CACrE,OAAO,SAAA,EAAW,6CAAA,EAA+C,KAAK,CAAA,CACtE,MAAA,CAAO,aAAa,mBAAA,EAAqB,KAAK,EAC9C,MAAA,CAAO,OAAO,MAAc,IAAA,KAA2C;AACtE,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACb,QAAA,MAAM,SAAA,GAAY,MAAQE,EAAA,CAAA,OAAA,CAAQ;AAAA,UAChC,SAAS,CAAA,gBAAA,EAAmB,IAAI,IAAI,IAAA,CAAK,KAAA,GAAQ,8BAA8B,EAAE,CAAA,CAAA,CAAA;AAAA,UACjF,YAAA,EAAc;AAAA,SACf,CAAA;AACD,QAAA,IAAI,CAAC,SAAA,IAAeA,EAAA,CAAA,QAAA,CAAS,SAAS,CAAA,EAAG;AACvC,UAAA,OAAA,CAAQ,YAAY,CAAA;AACpB,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,MAAM,QAAQ,aAAA,CAAc,IAAA,EAAM,EAAE,KAAA,EAAO,IAAA,CAAK,OAAO,CAAA;AACvD,MAAA,KAAA,CAAM,CAAA,QAAA,EAAW,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,IAC1B,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,aAAa,CAAA,CACrB,WAAA,CAAY,qCAAqC,CAAA,CACjD,MAAA,CAAO,OAAO,IAAA,KAAiB;AAC9B,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA;AAC7C,MAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA;AACzC,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA;AAC/B,MAAA,OAAA,CAAQ,mBAAmB,IAAA,CAAK,OAAO,eAAe,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA,CAAE,CAAA;AAC7E,MAAA,IAAI,GAAA,CAAI,SAAA,KAAc,OAAA,IAAW,GAAA,CAAI,YAAY,OAAA,EAAS;AACxD,QAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA;AAC/B,QAAA,OAAA,CAAQ,CAAA,QAAA,EAAW,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAAA,MAClC;AACA,MAAA,MAAM,OAAA,CAAQ,cAAc,IAAA,EAAM,EAAE,4BAAY,IAAI,IAAA,IAAQ,CAAA;AAC5D,MAAA,KAAA,CAAM,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,IACzB,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,aAAa,CAAA,CACrB,WAAA,CAAY,kBAAkB,CAAA,CAC9B,MAAA,CAAO,OAAO,IAAA,KAAiB;AAC9B,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA;AAC7C,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,SAAA,CAAU,IAAI,OAAO,CAAA,CAAE,KAAK,GAAG,CAAA;AACzD,MAAA,IAAI,GAAA,CAAI,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AAC5B,QAAA,OAAA,CAAQ,CAAA,WAAA,EAAc,GAAA,CAAI,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MACrE,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,CAAA,OAAA,EAAU,GAAA,CAAI,OAAO,CAAA,WAAA,CAAa,CAAA;AAAA,MAC1C;AAAA,IACF,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,aAAa,CAAA,CACrB,WAAA,CAAY,iCAAiC,CAAA,CAC7C,MAAA,CAAO,SAAA,EAAW,uBAAA,EAAyB,KAAK,CAAA,CAChD,MAAA,CAAO,OAAO,MAAc,IAAA,KAA6B;AACxD,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA;AAC7C,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA,CAAE,IAAA,CAAK,GAAA,EAAK,EAAE,KAAA,EAAO,IAAA,CAAK,OAAO,CAAA;AAChF,MAAA,KAAA,CAAM,CAAA,QAAA,EAAW,GAAA,CAAI,MAAM,CAAA,EAAA,CAAI,CAAA;AAAA,IACjC,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,eAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AACvD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,gBAAgB,CAAA,CACxB,WAAA,CAAY,6DAA6D,CAAA,CACzE,MAAA,CAAO,mBAAmB,UAAU,CAAA,CACpC,OAAO,eAAA,EAAiB,SAAS,EACjC,MAAA,CAAO,iBAAA,EAAmB,2CAA2C,CAAA,CACrE,MAAA,CAAO,OAAO,IAAA,EAAc,IAAA,KAA6D;AACxF,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA;AAC7C,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,SAAA,CAAU,IAAI,OAAO,CAAA,CAAE,OAAA,CAAQ,GAAA,EAAK,IAAI,CAAA;AAClE,MAAA,KAAA,CAAM,CAAA,WAAA,EAAc,GAAA,CAAI,KAAK,CAAA,CAAE,CAAA;AAAA,IACjC,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,eAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AACvD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,wDAAwD,CAAA,CACpE,MAAA,CAAO,qBAAA,EAAuB,gBAAA,EAAkB,uBAAuB,CAAA,CACvE,MAAA,CAAO,OAAO,MAAc,IAAA,KAA8B;AACzD,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA;AAC7C,MAAA,IAAI,GAAA,CAAI,YAAY,KAAA,EAAO;AACzB,QAAA,MAAA,CAAO,wDAAwD,CAAA;AAC/D,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,MAAM,EAAE,SAAA,EAAAjB,UAAAA,EAAU,GAAI,MAAM,OAAO,eAAoB,CAAA;AACvD,MAAAA,UAAAA,CAAU,KAAA,EAAO,CAAC,KAAA,EAAO,IAAI,CAAA,EAAG,EAAE,GAAA,EAAK,GAAA,CAAI,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,CAAA;AACnE,MAAA,MAAM,CAAA,GAAIA,WAAU,KAAA,EAAO,CAAC,UAAU,IAAA,EAAM,IAAA,CAAK,OAAO,CAAA,EAAG;AAAA,QACzD,KAAK,GAAA,CAAI,IAAA;AAAA,QACT,KAAA,EAAO;AAAA,OACR,CAAA;AACD,MAAA,IAAI,CAAA,CAAE,WAAW,CAAA,EAAG;AAClB,QAAA,OAAA,CAAQ,2DAA2D,CAAA;AAAA,MACrE,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,CAAA,aAAA,EAAgB,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,MAC/B;AAAA,IACF,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,YAAY,CAAA,CACpB,WAAA,CAAY,6DAA6D,CAAA,CACzE,kBAAA,EAAmB,CACnB,MAAA,CAAO,OAAO,IAAA,EAAc,CAAA,EAAY,OAAA,KAAqB;AAC5D,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA;AACjC,IAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA;AAC7C,MAAA,MAAM,EAAE,SAAA,EAAAA,UAAAA,EAAU,GAAI,MAAM,OAAO,eAAoB,CAAA;AACvD,MAAA,MAAM,CAAA,GAAIA,UAAAA,CAAU,KAAA,EAAO,IAAA,EAAM,EAAE,KAAK,GAAA,CAAI,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,CAAA;AACpE,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,CAAE,MAAA,IAAU,CAAC,CAAA;AAAA,IAC5B,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,yDAAyD,CAAA,CACrE,MAAA,CAAO,CAAC,IAAA,KAAiB,QAAA,CAAS,SAAA,EAAW,qBAAqB,CAAC,CAAA;AAEtE,EAAA,GAAA,CACG,OAAA,CAAQ,gBAAgB,CAAA,CACxB,WAAA,CAAY,sEAAsE,CAAA,CAClF,MAAA,CAAO,CAAC,IAAA,KAAiB,QAAA,CAAS,UAAA,EAAY,qBAAqB,CAAC,CAAA;AAEvE,EAAA,GAAA,CACG,QAAQ,YAAY,CAAA,CACpB,WAAA,CAAY,yBAAyB,EACrC,MAAA,CAAO,eAAA,EAAiB,iBAAiB,CAAA,CACzC,OAAO,CAAC,IAAA,KAAiB,QAAA,CAAS,MAAA,EAAQ,qBAAqB,CAAC,CAAA;AAEnE,EAAA,OAAO,GAAA;AACT;AAMA,eAAe,qBAAA,CAAsB,MAAc,MAAA,EAAgC;AACjF,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,cAAA,CAAe,IAAI,CAAA;AAC7C,IAAA,MAAMQ,OAAAA,GAAS,MAAM,OAAA,CAAQ,SAAA,CAAU,IAAI,OAAO,CAAA,CAAE,OAAO,GAAG,CAAA;AAC9D,IAAA,IAAI,MAAA,EAAQ,OAAO,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU,EAAE,OAAA,EAAS,GAAA,CAAI,MAAM,MAAA,EAAAA,OAAAA,EAAO,EAAG,IAAA,EAAM,CAAC,CAAC,CAAA;AACrF,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAA,EAAO,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAC,CAAA,CAAE,CAAA;AACxC,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkBA,OAAAA,CAAO,SAAA,GAAY,CAAA,CAAE,EAAA,CAAG,KAAK,CAAA,GAAI,CAAA,CAAE,GAAA,CAAI,IAAI,CAAC,CAAA,CAAE,CAAA;AAC5E,IAAA,IAAIA,QAAO,aAAA,EAAe;AACxB,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,qBAAqBA,OAAAA,CAAO,aAAA,CAAc,MAAM,CAAA,CAAA,EAAIA,OAAAA,CAAO,cAAc,KAAK,CAAA;AAAA,OAChF;AAAA,IACF;AACA,IAAA,MAAM,KAAKA,OAAAA,CAAO,YAAA;AAClB,IAAA,IAAI,EAAA,CAAG,MAAM,MAAA,GAAS,EAAA,CAAG,SAAS,MAAA,GAAS,EAAA,CAAG,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAChE,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,oBAAA,EAAuB,EAAA,CAAG,KAAA,CAAM,MAAM,CAAA,EAAA,EAAK,EAAA,CAAG,QAAA,CAAS,MAAM,CAAA,EAAA,EAAK,EAAA,CAAG,OAAA,CAAQ,MAAM,CAAA;AAAA,OACrF;AAAA,IACF;AACA,IAAA,KAAA,MAAW,IAAA,IAAQA,OAAAA,CAAO,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAOD,GAAAA,CAAG,GAAA,CAAI,OAAO,CAAC,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAC7E,IAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,EACd,CAAA,SAAE;AACA,IAAA,KAAA,EAAM;AAAA,EACR;AACF;AAEA,eAAe,kBAAA,CAAmB,YAAoB,MAAA,EAAgC;AACpF,EAAA,MAAM,OAAA,GAAU,MAAM,WAAA,EAAY;AAClC,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,WAAA,EAAY;AACvC,IAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,aAAA,EAAc;AACzC,IAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,aAAA,EAAc;AAE9C,IAAA,IAAI,eAAA,GAAkB,SAAA;AACtB,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,oBAAA,EAAAW,qBAAAA,EAAqB,GAAI,MAAM,OAAO,qBAA4B,CAAA;AAC1E,MAAA,MAAM,QAAA,GAAW,IAAIA,qBAAAA,EAAqB;AAC1C,MAAA,eAAA,GAAkB,SAAS,cAAA,EAAe;AAAA,IAC5C,CAAA,CAAA,MAAQ;AACN,MAAA,eAAA,GAAkB,aAAA;AAAA,IACpB;AAEA,IAAA,MAAM,kBAAA,GAA0BJ,eAAQ,UAAU,CAAA;AAClD,IAAA,MAAM,kBAAA,GAAqBD,UAAAA,CAAgBC,MAAA,CAAA,IAAA,CAAK,kBAAA,EAAoB,aAAa,CAAC,CAAA;AAClF,IAAA,MAAM,WAAA,GAAcD,UAAAA,CAAgBC,MAAA,CAAA,IAAA,CAAK,kBAAA,EAAoB,kBAAkB,CAAC,CAAA;AAEhF,IAAA,IAAI,gBAA2E,EAAC;AAChF,IAAA,IAAI,kBAAA,EAAoB;AACtB,MAAA,IAAI;AACF,QAAA,aAAA,GAAgB,MAAM,OAAA,CAAQ,iBAAA,CAAkB,kBAAkB,CAAA;AAAA,MACpE,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,MAAM,WAAW,kBAAA,EAAmB;AACpC,IAAA,MAAM,eAAA,GAAkB,SAAS,WAAA,EAAY;AAE7C,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,IAAA,CAAK,SAAA;AAAA,UACH;AAAA,YACE,WAAW,IAAA,CAAK,MAAA;AAAA,YAChB,kBAAkB,IAAA,CAAK,MAAA;AAAA,YACvB,WAAW,SAAA,CAAU,MAAA;AAAA,YACrB,eAAe,aAAA,CAAc,MAAA;AAAA,YAC7B,eAAA;AAAA,YACA,eAAA;AAAA,YACA,SAAA,EAAW;AAAA,cACT,GAAA,EAAK,kBAAA;AAAA,cACL,SAAA,EAAW,kBAAA;AAAA,cACX,OAAA,EAAS;AAAA;AACX,WACF;AAAA,UACA,IAAA;AAAA,UACA;AAAA;AACF,OACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,OAAA,CAAQ,kBAAkB,CAAC,CAAA;AACzC,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,CAAA;AAC7B,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,KAAK,CAAA,CAAE,KAAA,CAAM,WAAW,CAAC,CAAA,QAAA,EAAW,KAAK,MAAA,KAAW,CAAA,GAAI,EAAE,GAAA,CAAI,MAAM,IAAIP,GAAAA,CAAG,KAAA,CAAM,OAAO,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA;AAAA,KACvG;AACA,IAAA,KAAA,MAAW,CAAA,IAAK,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG;AAChC,MAAA,MAAM,MAAA,GAAS,EAAE,UAAA,GACb,CAAA,OAAA,EAAU,mBAAmB,CAAA,CAAE,UAAU,CAAC,CAAA,CAAA,GAC1C,cAAA;AACJ,MAAA,MAAM,cAAc,CAAA,CAAE,SAAA,GAAYA,GAAAA,CAAG,KAAA,CAAM,IAAI,CAAA,GAAI,EAAA;AACnD,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,IAAA,EAAO,CAAA,CAAE,GAAA,CAAI,CAAA,CAAE,GAAG,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,IAAI,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,EAAI,EAAE,GAAA,CAAI,CAAA,CAAE,SAAS,CAAC,IAAI,CAAA,CAAE,GAAA,CAAI,MAAM,CAAC,GAAG,WAAW,CAAA;AAAA,OAC1H;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,CAAA,CAAE,GAAA,CAAI,CAAA,OAAA,EAAU,KAAK,MAAA,GAAS,CAAC,CAAA,KAAA,CAAO,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9D;AAEA,IAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,IAAA,KAAA,MAAW,CAAA,IAAK,IAAA,EAAM,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,IAAA,EAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,IAAI,CAAA,IAAK,CAAA,IAAK,CAAC,CAAA;AACtE,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,KAAK,CAAA,CAAE,KAAA,CAAM,eAAe,CAAC,CAAA,IAAA,EAAO,KAAK,MAAA,KAAW,CAAA,GAAI,EAAE,GAAA,CAAI,MAAM,IAAIA,GAAAA,CAAG,KAAA,CAAM,OAAO,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA;AAAA,KACvG;AACA,IAAA,IAAI,MAAA,CAAO,OAAO,CAAA,EAAG;AACnB,MAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,MAAA,CAAO,SAAS,CAAA,CAC/B,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,CAAC,IAAI,CAAA,CAAE,CAAC,CAAC,CAAA,CAC1B,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,CAAE,CAAA;AACjD,MAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,CAAE,GAAA,CAAI,MAAM,IAAA,CAAK,IAAI,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9C;AAEA,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,kBAAkB,CAAC,CAAA,EAAA,EAAKA,GAAAA,CAAG,KAAA,CAAM,MAAA,CAAO,eAAA,CAAgB,MAAM,CAAC,CAAC,CAAA;AAAA,KAC/E;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,CAAE,GAAA,CAAI,gBAAgB,IAAA,CAAK,IAAI,CAAC,CAAC,CAAA,CAAE,CAAA;AAEtD,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,KAAK,CAAA,CAAE,KAAA,CAAM,WAAW,CAAC,CAAA,QAAA,EAAW,UAAU,MAAA,KAAW,CAAA,GAAI,EAAE,GAAA,CAAI,MAAM,IAAIA,GAAAA,CAAG,KAAA,CAAM,OAAO,SAAA,CAAU,MAAM,CAAC,CAAC,CAAA;AAAA,KACjH;AACA,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,KAAK,CAAA,CAAE,KAAA,CAAM,eAAe,CAAC,CAAA,IAAA,EAAO,cAAc,MAAA,KAAW,CAAA,GAAI,EAAE,GAAA,CAAI,uBAAuB,IAAIA,GAAAA,CAAG,KAAA,CAAM,OAAO,aAAA,CAAc,MAAM,CAAC,CAAC,CAAA;AAAA,KAC1I;AAEA,IAAA,MAAM,aAAA,GAAgB,eAAA,KAAoB,aAAA,GAAgB,CAAA,CAAE,MAAMA,GAAAA,CAAG,KAAA;AACrE,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,kBAAkB,CAAC,CAAA,EAAA,EAAK,aAAA,CAAc,eAAe,CAAC,CAAA,CAAE,CAAA;AAEjF,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,CAAA;AAC7B,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,KAAA,CAAM,WAAW,CAAC,CAAA,QAAA,EAAW,kBAAkB,CAAA,CAAE,CAAA;AACpE,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,aAAa,CAAC,CAAA,MAAA,EAAS,kBAAA,GAAqBA,GAAAA,CAAG,KAAA,CAAM,SAAS,CAAA,GAAI,CAAA,CAAE,GAAA,CAAI,WAAW,CAAC,CAAA;AAAA,KACnG;AACA,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,kBAAkB,CAAC,CAAA,CAAA,EAAI,WAAA,GAAcA,GAAAA,CAAG,KAAA,CAAM,SAAS,CAAA,GAAI,CAAA,CAAE,GAAA,CAAI,WAAW,CAAC,CAAA;AAAA,KAC5F;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,MAAA,OAAA,CAAQ,8EAA8E,CAAA;AAAA,IACxF,CAAA,MAAA,IAAW,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAC5B,MAAA,OAAA,CAAQ,sDAAsD,CAAA;AAAA,IAChE,CAAA,MAAA,IAAW,SAAA,CAAU,MAAA,KAAW,CAAA,EAAG;AACjC,MAAA,OAAA,CAAQ,wEAAwE,CAAA;AAAA,IAClF;AAAA,EACF,CAAA,SAAE;AACA,IAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,EAChB;AACF;ACtmBA,SAAS,gBAAgB,GAAA,EAA0B;AACjD,EAAA,OAAO,IACJ,KAAA,CAAM,IAAI,CAAA,CACV,GAAA,CAAI,CAAC,IAAA,KAAS,IAAA,CAAK,IAAA,EAAM,EACzB,MAAA,CAAO,OAAO,CAAA,CACd,GAAA,CAAI,CAAC,IAAA,KAAS;AACb,IAAA,MAAM,CAAC,IAAA,GAAO,EAAA,EAAI,OAAA,GAAU,EAAA,EAAIC,OAAAA,GAAS,EAAA,EAAI,GAAG,IAAI,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,GAAI,CAAA;AACvE,IAAA,OAAO,EAAE,MAAM,OAAA,EAAS,MAAA,EAAAA,SAAQ,SAAA,EAAW,IAAA,CAAK,IAAA,CAAK,GAAI,CAAA,EAAE;AAAA,EAC7D,CAAC,CAAA;AACL;AAEA,SAAS,UAAU,IAAA,EAAsB;AACvC,EAAA,IAAI,kCAAkC,IAAA,CAAK,IAAI,GAAG,OAAOD,GAAAA,CAAG,IAAI,IAAI,CAAA;AACpE,EAAA,IAAI,qBAAqB,IAAA,CAAK,IAAI,GAAG,OAAOA,GAAAA,CAAG,OAAO,IAAI,CAAA;AAC1D,EAAA,IAAI,2BAA2B,IAAA,CAAK,IAAI,GAAG,OAAOA,GAAAA,CAAG,MAAM,IAAI,CAAA;AAC/D,EAAA,IAAI,aAAa,IAAA,CAAK,IAAI,GAAG,OAAOA,GAAAA,CAAG,KAAK,IAAI,CAAA;AAChD,EAAA,IAAI,YAAY,IAAA,CAAK,IAAI,GAAG,OAAOA,GAAAA,CAAG,IAAI,IAAI,CAAA;AAC9C,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,eAAA,GAA2B;AAClC,EAAA,OAAO,kBAAkB,CAAC,QAAA,EAAU,MAAM,CAAC,EAAE,QAAA,KAAa,CAAA;AAC5D;AAEA,SAAS,cAAA,GAA8B;AACrC,EAAA,MAAM,SAAS,iBAAA,CAAkB;AAAA,IAC/B,QAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA;AAAA,IACA,2BAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,OAAO,eAAA,CAAgB,OAAO,MAAM,CAAA;AACtC;AAYO,SAAS,eAAA,GAA2B;AACzC,EAAA,OAAO,IAAIN,OAAAA,CAAQ,MAAM,CAAA,CACtB,WAAA,CAAY,+CAA+C,CAAA,CAC3D,MAAA,CAAO,UAAA,EAAY,kCAAkC,CAAA,CACrD,MAAA,CAAO,aAAA,EAAe,yBAAA,EAA2B,IAAI,CAAA,CACrD,MAAA,CAAO,oBAAA,EAAsB,0BAA0B,CAAA,CACvD,MAAA,CAAO,kBAAA,EAAoB,wBAAwB,CAAA,CACnD,MAAA,CAAO,QAAA,EAAU,wDAAwD,CAAA,CACzE,MAAA;AAAA,IACC,OAAO,IAAA,KAMD;AACJ,MAAA,IAAI,CAAC,iBAAgB,EAAG;AACtB,QAAA,MAAA,CAAO,wCAAwC,CAAA;AAC/C,QAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,aAAa,cAAA,EAAe;AAElC,MAAA,IAAI,KAAK,IAAA,EAAM;AACb,QAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,UAAA,OAAA,CAAQ,8BAA8B,CAAA;AACtC,UAAA;AAAA,QACF;AACA,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,CAAA,EAAA,EAAK,EAAE,GAAA,CAAI,MAAA,CAAO,OAAO,EAAE,CAAC,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,SAAA,CAAU,MAAA,CAAO,EAAE,CAAC,CAAC,KAAK,CAAA,CAAE,GAAA,CAAI,QAAQ,CAAC,CAAA;AAAA,SACnF;AACA,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,SAAI,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,CAAE,CAAA;AACxC,QAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,UAAA,OAAA,CAAQ,GAAA;AAAA,YACN,CAAA,EAAA,EAAK,EAAE,OAAA,CAAQ,CAAA,CAAE,KAAK,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,EAAA,EAAK,EAAE,OAAA,CAAQ,MAAA,CAAO,EAAE,CAAC,CAAA,EAAA,EAAK,EAAE,GAAA,CAAI,CAAA,CAAE,MAAM,CAAC,CAAA;AAAA,WAChF;AAAA,QACF;AACA,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,QAAA,MAAA,CAAO,8BAA8B,CAAA;AACrC,QAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,MAAA;AACJ,MAAA,IAAI,KAAK,OAAA,EAAS;AAChB,QAAA,MAAA,GAAS,WAAW,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,OAAA,KAAY,KAAK,OAAO,CAAA;AAC1D,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,MAAA,CAAO,CAAA,gCAAA,EAAmC,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AACxD,UAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,UAAA;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AAEL,QAAA,MAAA,GAAS,WAAW,CAAC,CAAA;AAAA,MACvB;AAEA,MAAA,MAAM,WAAW,IAAA,CAAK,MAAA,GAAS,IAAI,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,GAAI,IAAA;AAEzD,MAAA,MAAM,OAAO,CAAC,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,KAAK,KAAK,CAAA;AACpD,MAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA;AACrC,MAAA,IAAA,CAAK,IAAA,CAAK,OAAO,IAAI,CAAA;AAErB,MAAA,IAAI,KAAK,MAAA,EAAQ;AACf,QAAA,MAAM,IAAA,GAAO,cAAc,IAAI,CAAA;AAE/B,QAAA,eAAe,WAAW,MAAA,EAAoC;AAC5D,UAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,UAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,UAAA,IAAI,GAAA,GAAM,EAAA;AACV,UAAA,IAAI;AACF,YAAA,OAAO,IAAA,EAAM;AACX,cAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,cAAA,IAAI,IAAA,EAAM;AACV,cAAA,GAAA,IAAO,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAC7C,cAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,KAAA,CAAM,IAAI,CAAA;AAC5B,cAAA,GAAA,GAAM,KAAA,CAAM,KAAI,IAAK,EAAA;AACrB,cAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,gBAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AACpC,kBAAA,OAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,gBAC7B;AAAA,cACF;AAAA,YACF;AAAA,UACF,CAAA,SAAE;AACA,YAAA,MAAA,CAAO,WAAA,EAAY;AAAA,UACrB;AACA,UAAA,IAAI,QAAQ,CAAC,QAAA,IAAY,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,CAAA,EAAI;AAC5C,YAAA,OAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,GAAG,CAAC,CAAA;AAAA,UAC5B;AAAA,QACF;AAEA,QAAA,MAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA,EAAG,UAAA,CAAW,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA;AAAA,MACtE,CAAA,MAAO;AACL,QAAA,MAAM,MAAA,GAAS,kBAAkB,IAAI,CAAA;AACrC,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,MAAA;AACxC,QAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AACjC,QAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,UAAA,IAAI,CAAC,IAAA,EAAM;AACX,UAAA,IAAI,CAAC,QAAA,IAAY,QAAA,CAAS,IAAA,CAAK,IAAI,CAAA,EAAG;AACpC,YAAA,OAAA,CAAQ,GAAA,CAAI,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,UAC7B;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,GACF;AACJ;ACpFA,IAAI,EAAA;AAkBJ,IAAM,KAAA,GAAe;AAAA,EACnB,GAAA,EAAK,QAAA;AAAA,EACL,MAAA,EAAQ,CAAA;AAAA,EACR,WAAW,EAAC;AAAA,EACZ,YAAY,EAAC;AAAA,EACb,aAAa,EAAC;AAAA,EACd,aAAa,EAAC;AAAA,EACd,WAAA,sBAAiB,GAAA,EAAI;AAAA,EACrB,cAAA,sBAAoB,GAAA,EAAI;AAAA,EACxB,gBAAA,sBAAsB,GAAA,EAAI;AAAA,EAC1B,gBAAA,sBAAsB,GAAA,EAAI;AAAA,EAC1B,OAAA,EAAS,EAAA;AAAA,EACT,IAAA,EAAM,EAAA;AAAA,EACN,mBAAA,EAAqB;AACvB,CAAA;AAcO,SAAS,gBAAA,CACd,IAAA,EACA,gBAAA,EACA,gBAAA,EACY;AACZ,EAAA,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,KAAQ;AAC1B,IAAA,IAAI,GAAA,CAAI,IAAA,KAAS,eAAA,EAAiB,OAAO,IAAA;AACzC,IAAA,IAAI,GAAA,CAAI,SAAS,QAAA,EAAU,OAAO,CAAC,gBAAA,CAAiB,GAAA,CAAI,IAAI,MAAO,CAAA;AACnE,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,KAAA,EAAO,UAAA,IAAc,OAAA;AACxC,IAAA,MAAM,MAAA,GAAS,GAAA,CAAI,KAAA,EAAO,MAAA,IAAU,OAAA;AACpC,IAAA,OAAO,CAAC,gBAAA,CAAiB,GAAA,CAAI,MAAM,CAAA,IAAK,CAAC,gBAAA,CAAiB,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AAAA,EACrF,CAAC,CAAA;AACH;AAOO,SAAS,eAAA,CAAgB,IAAA,EAAkB,MAAA,EAAgB,MAAA,EAA0B;AAC1F,EAAA,OAAO,KACJ,MAAA,CAAO,CAAC,MAAM,OAAA,CAAQ,CAAC,KAAK,QAAA,CAAS,CAAA,EAAG,MAAA,EAAQ,MAAM,CAAC,CAAA,CACvD,GAAA,CAAI,CAAC,CAAA,KAAM,UAAA,CAAW,CAAC,CAAE,CAAA;AAC9B;AAOO,SAAS,eAAA,CAAgB,MAAkB,MAAA,EAA0B;AAC1E,EAAA,OAAO,KAAK,MAAA,CAAO,CAAC,CAAA,KAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,QAAA,CAAS,CAAA,EAAG,MAAM,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,UAAA,CAAW,CAAC,CAAE,CAAA;AACxF;AAIA,SAAS,QAAQ,CAAA,EAAsB;AACrC,EAAA,OAAO,EAAE,IAAA,KAAS,OAAA;AACpB;AAEA,SAAS,QAAA,CAAS,GAAa,MAAA,EAAyB;AACtD,EAAA,OAAA,CAAQ,CAAA,CAAE,KAAA,EAAO,UAAA,IAAc,OAAA,MAAa,MAAA;AAC9C;AAEA,SAAS,QAAA,CAAS,CAAA,EAAa,MAAA,EAAgB,MAAA,EAAyB;AACtE,EAAA,OAAO,SAAS,CAAA,EAAG,MAAM,MAAM,CAAA,CAAE,KAAA,EAAO,UAAU,OAAA,MAAa,MAAA;AACjE;AAEA,SAAS,WAAW,CAAA,EAA4B;AAC9C,EAAA,IAAI,CAAC,OAAA,CAAQ,CAAC,KAAK,CAAC,CAAA,CAAE,OAAO,OAAO,IAAA;AACpC,EAAA,OAAO,GAAG,CAAA,CAAE,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,MAAM,IAAI,CAAA,CAAA;AACxC;AAEA,SAAS,aAAa,GAAA,EAAmC;AACvD,EAAA,OAAO,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,UAAA,CAAW,CAAC,CAAA,KAAM,GAAG,CAAA;AACxE;AAsBA,SAAS,YAAA,CAAa,KAAa,MAAA,EAAsB;AACvD,EAAA,MAAM,GAAA,GAAM,aAAa,GAAG,CAAA;AAC5B,EAAA,IAAI,CAAC,GAAA,EAAK;AAEV,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAA,KAAA,CAAM,WAAA,CAAY,OAAO,GAAG,CAAA;AAC5B,IAAA,KAAA,CAAM,cAAA,CAAe,OAAO,GAAG,CAAA;AAC/B,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,WAAW,QAAA,EAAU;AACvB,IAAA,IAAI,KAAA,CAAM,YAAY,GAAA,CAAI,GAAG,KAAK,KAAA,CAAM,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA,EAAG;AAC/D,MAAA,KAAA,CAAM,WAAA,CAAY,OAAO,GAAG,CAAA;AAC5B,MAAA,KAAA,CAAM,cAAA,CAAe,OAAO,GAAG,CAAA;AAC/B,MAAA;AAAA,IACF;AACA,IAAA,QAAA,GAAW,GAAA,CAAI,YAAY,QAAA,GAAW,KAAA;AAAA,EACxC,CAAA,MAAO;AACL,IAAA,QAAA,GAAW,MAAA;AAAA,EACb;AAEA,EAAA,IAAI,aAAa,KAAA,EAAO;AACtB,IAAA,KAAA,CAAM,cAAA,CAAe,OAAO,GAAG,CAAA;AAC/B,IAAA,IAAI,IAAI,SAAA,EAAW;AACnB,IAAA,KAAA,CAAM,WAAA,CAAY,IAAI,GAAG,CAAA;AAAA,EAC3B,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,WAAA,CAAY,OAAO,GAAG,CAAA;AAC5B,IAAA,IAAI,CAAC,IAAI,SAAA,EAAW;AACpB,IAAA,KAAA,CAAM,cAAA,CAAe,IAAI,GAAG,CAAA;AAAA,EAC9B;AACF;AAEA,SAAS,aAAA,CAAc,MAAgB,MAAA,EAAsB;AAC3D,EAAA,KAAA,MAAW,GAAA,IAAO,IAAA,EAAM,YAAA,CAAa,GAAA,EAAK,MAAM,CAAA;AAClD;AAGA,SAAS,WAAA,CAAY,KAAe,MAAA,EAAyB;AAC3D,EAAA,IAAI,GAAA,CAAI,SAAS,eAAA,EAAiB;AAChC,IAAA,aAAA,CAAc,gBAAgB,KAAA,CAAM,SAAA,EAAW,GAAA,CAAI,MAAO,GAAG,MAAM,CAAA;AACnE,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,GAAA,CAAI,SAAS,QAAA,EAAU;AACzB,IAAA,aAAA,CAAc,eAAA,CAAgB,MAAM,SAAA,EAAW,GAAA,CAAI,QAAS,GAAA,CAAI,MAAO,GAAG,MAAM,CAAA;AAChF,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;AAIA,eAAe,UAAA,GAA4B;AACzC,EAAA,MAAM,EAAE,gBAAA,EAAiB,GAAI,MAAM,OAAO,4BAAmB,CAAA;AAC7D,EAAA,MAAM,EAAE,SAAS,KAAA,EAAM,GAAI,MAAM,gBAAA,CAAiB,EAAA,EAAI,GAAG,UAAU,CAAA;AACnE,EAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,IAAA,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,CAAE,KAAK,UAAK,CAAA;AAAA,EACzE;AACA,EAAA,MAAM,YAAY,IAAI,GAAA,CAAI,EAAA,CAAG,YAAA,GAAe,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,EAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,EAAE,CAAC,CAAA;AAG7E,EAAA,MAAM,QAAA,uBAAe,GAAA,EAAyC;AAC9D,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,MAAM,MAAA,GAAS,EAAE,UAAA,IAAc,OAAA;AAC/B,IAAA,MAAM,MAAA,GAAS,EAAE,MAAA,IAAU,OAAA;AAC3B,IAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,WAAY,GAAA,CAAI,MAAA,kBAAQ,IAAI,GAAA,EAAK,CAAA;AACzD,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA;AACrC,IAAA,IAAI,CAAC,UAAU,GAAA,CAAI,MAAM,GAAG,SAAA,CAAU,GAAA,CAAI,MAAA,EAAQ,EAAE,CAAA;AACpD,IAAA,SAAA,CAAU,GAAA,CAAI,MAAM,CAAA,CAAG,IAAA,CAAK,CAAC,CAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,OAAmB,EAAC;AAC1B,EAAA,KAAA,MAAW,CAAC,QAAQ,SAAS,CAAA,IAAK,CAAC,GAAG,QAAA,CAAS,OAAA,EAAS,CAAA,CAAE,IAAA;AAAA,IAAK,CAAC,GAAG,CAAA,KACjE,CAAA,CAAE,CAAC,CAAA,CAAE,aAAA,CAAc,CAAA,CAAE,CAAC,CAAC;AAAA,GACzB,EAAG;AACD,IAAA,IAAA,CAAK,IAAA,CAAK,EAAE,IAAA,EAAM,eAAA,EAAiB,QAAQ,CAAA;AAC3C,IAAA,KAAA,MAAW,CAAC,QAAQ,KAAK,CAAA,IAAK,CAAC,GAAG,SAAA,CAAU,OAAA,EAAS,CAAA,CAAE,IAAA;AAAA,MAAK,CAAC,GAAG,CAAA,KAC9D,CAAA,CAAE,CAAC,CAAA,CAAE,aAAA,CAAc,CAAA,CAAE,CAAC,CAAC;AAAA,KACzB,EAAG;AACD,MAAA,IAAA,CAAK,KAAK,EAAE,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,QAAQ,CAAA;AAC5C,MAAA,KAAA,CAAM,IAAA;AAAA,QAAK,CAAC,CAAA,EAAG,CAAA,KACb,CAAA,CAAE,IAAA,KAAS,EAAE,IAAA,GAAO,CAAA,CAAE,IAAA,CAAK,aAAA,CAAc,EAAE,IAAI,CAAA,GAAI,EAAE,IAAA,CAAK,aAAA,CAAc,EAAE,IAAI;AAAA,OAChF;AACA,MAAA,KAAA,MAAW,SAAS,KAAA,EAAO;AACzB,QAAA,MAAM,MAAM,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,CAAA,EAAI,MAAM,IAAI,CAAA,CAAA;AACvC,QAAA,IAAA,CAAK,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,WAAW,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,EAAG,CAAA;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AACA,EAAA,KAAA,CAAM,SAAA,GAAY,IAAA;AAIlB,EAAA,MAAM,aAAa,IAAI,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,eAAe,EAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,MAAO,CAAC,CAAA;AAC/F,EAAA,KAAA,MAAW,CAAA,IAAK,MAAM,gBAAA,EAAkB;AACtC,IAAA,IAAI,CAAC,WAAW,GAAA,CAAI,CAAC,GAAG,KAAA,CAAM,gBAAA,CAAiB,OAAO,CAAC,CAAA;AAAA,EACzD;AAEA,EAAA,MAAM,gBAAgB,IAAI,GAAA;AAAA,IACxB,KAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAA,CAAE,MAAO,CAAA,CAAA,EAAI,CAAA,CAAE,MAAO,CAAA,CAAE;AAAA,GAChF;AACA,EAAA,KAAA,MAAW,CAAA,IAAK,MAAM,gBAAA,EAAkB;AACtC,IAAA,IAAI,CAAC,cAAc,GAAA,CAAI,CAAC,GAAG,KAAA,CAAM,gBAAA,CAAiB,OAAO,CAAC,CAAA;AAAA,EAC5D;AACA,EAAA,KAAA,MAAW,CAAA,IAAK,aAAA,EAAe,KAAA,CAAM,gBAAA,CAAiB,IAAI,CAAC,CAAA;AAE3D,EAAA,cAAA,EAAe;AACjB;AAQA,eAAe,uBAAA,GAAyC;AACtD,EAAA,IAAI;AACF,IAAA,MAAM,CAAC,EAAE,kBAAA,EAAAkB,mBAAAA,EAAmB,EAAG,EAAE,aAAA,EAAAC,cAAAA,EAAe,CAAA,GAAI,MAAM,OAAA,CAAQ,GAAA,CAAI;AAAA,MACpE,OAAO,6BAAoB,CAAA;AAAA,MAC3B,OAAO,qBAA4B;AAAA,KACpC,CAAA;AACD,IAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,KAAA,EAAM,GAAI,MAAMD,mBAAAA,EAAmB;AAC7D,IAAA,IAAI;AACF,MAAA,MAAME,WAAAA,GAAatB,eAAAA,CAAK,IAAA,CAAKqB,cAAAA,IAAiB,SAAS,CAAA;AACvD,MAAA,MAAM,cAAc,CAAC,CAAA,KAAwB,CAAA,CAAE,IAAA,CAAK,WAAWC,WAAU,CAAA;AAEzE,MAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,aAAA,EAAc;AACzC,MAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,aAAA,EAAc;AACzC,MAAA,MAAM,MAAA,uBAAa,GAAA,EAAoB;AACvC,MAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,QAAA,MAAM,EAAA,GAAK,EAAE,SAAA,IAAa,EAAA;AAC1B,QAAA,MAAA,CAAO,IAAI,EAAA,EAAA,CAAK,MAAA,CAAO,IAAI,EAAE,CAAA,IAAK,KAAK,CAAC,CAAA;AAAA,MAC1C;AAEA,MAAA,KAAA,CAAM,aAAa,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACtD,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,WAAW,CAAA,CAAE,SAAA;AAAA,QACb,UAAA,EAAY,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,IAAK;AAAA,OAClC,CAAE,CAAA;AAEF,MAAA,KAAA,CAAM,WAAA,GAAc,IAAA,CACjB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,WAAA,CAAY,CAAC,CAAC,CAAA,CAC7B,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACX,MAAM,CAAA,CAAE,IAAA;AAAA,QACR,SAAS,CAAA,CAAE,OAAA;AAAA,QACX,WAAW,CAAA,CAAE,SAAA;AAAA,QACb,UAAA,EAAY,MAAA,CAAO,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,IAAK,CAAA;AAAA,QAChC,WAAW,CAAA,CAAE;AAAA,OACf,CAAE,CAAA;AAAA,IACN,CAAA,SAAE;AACA,MAAA,KAAA,EAAM;AAAA,IACR;AAAA,EACF,CAAA,CAAA,MAAQ;AAEN,IAAA,KAAA,CAAM,aAAa,EAAC;AACpB,IAAA,KAAA,CAAM,cAAc,EAAC;AAAA,EACvB;AACF;AAEA,SAAS,cAAA,GAAuB;AAC9B,EAAA,KAAA,CAAM,WAAA,GAAc,gBAAA;AAAA,IAClB,KAAA,CAAM,SAAA;AAAA,IACN,KAAA,CAAM,gBAAA;AAAA,IACN,KAAA,CAAM;AAAA,GACR;AACA,EAAA,WAAA,EAAY;AACd;AAIA,SAAS,WAAA,GAAoB;AAC3B,EAAA,KAAA,CAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,GAAA,CAAI,CAAA,EAAG,SAAA,EAAW,CAAC,CAAA;AAChE;AAEA,SAAS,SAAA,GAAoB;AAC3B,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,UAAS,GAAI,CAAA;AACtC;AAEA,SAAS,WAAW,KAAA,EAAqB;AACvC,EAAA,KAAA,CAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,SAAA,EAAU,EAAG,KAAA,CAAM,MAAA,GAAS,KAAK,CAAC,CAAA;AACxE;AAEA,SAAS,OAAA,GAAgB;AACvB,EAAA,MAAM,QAAe,CAAC,QAAA,EAAU,SAAA,EAAW,WAAA,EAAa,WAAW,MAAM,CAAA;AACzE,EAAA,KAAA,CAAM,GAAA,GAAM,OAAO,KAAA,CAAM,OAAA,CAAQ,MAAM,GAAG,CAAA,GAAI,CAAA,IAAK,KAAA,CAAM,MAAM,CAAA;AAC/D,EAAA,KAAA,CAAM,MAAA,GAAS,CAAA;AACjB;AAgBA,IAAM,IAAA,GAA6B;AAAA,EACjC,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,QAAA;AAAA,IACP,QAAA,EAAU,MAAM,KAAA,CAAM,WAAA,CAAY,MAAA;AAAA,IAClC,iBAAiB,MAAM,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,OAAO,CAAA,CAAE,MAAA;AAAA,IACvD,SAAA,EAAW,CAAC,CAAA,EAAG,GAAA,KAAQ,eAAe,KAAA,CAAM,WAAA,CAAY,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,IAC/D,MAAA,EACE;AAAA,GACJ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,SAAA;AAAA,IACP,QAAA,EAAU,MAAM,KAAA,CAAM,UAAA,CAAW,MAAA;AAAA,IACjC,eAAA,EAAiB,MAAM,KAAA,CAAM,UAAA,CAAW,MAAA;AAAA,IACxC,QAAA,EACE,mGAAA;AAAA,IACF,SAAA,EAAW,CAAC,CAAA,EAAG,GAAA,KAAQ,gBAAgB,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,IAC/D,MAAA,EACE;AAAA,GACJ;AAAA,EACA,SAAA,EAAW;AAAA,IACT,KAAA,EAAO,WAAA;AAAA,IACP,QAAA,EAAU,MAAM,KAAA,CAAM,WAAA,CAAY,MAAA;AAAA,IAClC,eAAA,EAAiB,MAAM,KAAA,CAAM,WAAA,CAAY,MAAA;AAAA,IACzC,QAAA,EACE,gGAAA;AAAA,IACF,SAAA,EAAW,CAAC,CAAA,EAAG,GAAA,KAAQ,iBAAiB,KAAA,CAAM,WAAA,CAAY,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,IACjE,MAAA,EACE;AAAA,GACJ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,SAAA;AAAA,IACP,UAAU,MAAM,CAAA;AAAA,IAChB,iBAAiB,MAAM,KAAA,CAAM,WAAA,CAAY,IAAA,GAAO,MAAM,cAAA,CAAe,IAAA;AAAA,IACrE,QAAA,EAAU,uEAAA;AAAA,IACV,WAAW,MAAM,EAAA;AAAA,IACjB,MAAA,EAAQ;AAAA,GACV;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,MAAA;AAAA,IACP,UAAU,MAAM,CAAA;AAAA,IAChB,iBAAiB,MAAM,CAAA;AAAA,IACvB,QAAA,EACE,yFAAA;AAAA,IACF,WAAW,MAAM,EAAA;AAAA,IACjB,MAAA,EAAQ;AAAA;AAEZ,CAAA;AAIA,SAAS,WAAA,GAAoB;AAC3B,EAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,eAAe,CAAA;AACtC;AACA,SAAS,UAAA,GAAmB;AAC1B,EAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,WAAW,CAAA;AAClC;AACA,SAAS,UAAA,GAAmB;AAC1B,EAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,WAAW,CAAA;AAClC;AAIA,SAAS,UAAA,GAAqB;AAC5B,EAAA,OAAQ,MAAA,CAAO,QAAQ,IAAI,CAAA,CACxB,IAAI,CAAC,CAAC,EAAA,EAAI,IAAI,CAAA,KAAM;AACnB,IAAA,MAAM,OAAO,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,EAAA,EAAK,IAAA,CAAK,iBAAiB,CAAA,CAAA,CAAA;AACrD,IAAA,OAAO,OAAO,KAAA,CAAM,GAAA,GAAMd,GAAAA,CAAG,MAAA,CAAOA,IAAG,KAAA,CAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG,CAAC,CAAA,GAAIA,GAAAA,CAAG,GAAA,CAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACjF,CAAC,CAAA,CACA,IAAA,CAAKA,GAAAA,CAAG,GAAA,CAAI,QAAG,CAAC,CAAA;AACrB;AAGA,SAAS,iBAAiB,KAAA,EAAmD;AAC3E,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,KAAA,MAAW,GAAA,IAAO,MAAM,WAAA,EAAa;AACnC,IAAA,MAAM,CAAA,GAAI,aAAa,GAAG,CAAA;AAC1B,IAAA,IAAI,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,EAAG,GAAA,EAAA;AAAA,EACrB;AACA,EAAA,KAAA,MAAW,GAAA,IAAO,MAAM,cAAA,EAAgB;AACtC,IAAA,MAAM,CAAA,GAAI,aAAa,GAAG,CAAA;AAC1B,IAAA,IAAI,CAAA,IAAK,KAAA,CAAM,CAAC,CAAA,EAAG,MAAA,EAAA;AAAA,EACrB;AACA,EAAA,OAAO,CAAC,KAAK,MAAM,CAAA;AACrB;AAGA,SAAS,YAAY,IAAA,EAAwB;AAC3C,EAAA,IAAI,KAAK,MAAA,KAAW,CAAA,EAAG,OAAOA,GAAAA,CAAG,IAAI,OAAI,CAAA;AACzC,EAAA,IAAI,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,KAAA,CAAM,WAAA,CAAY,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,OAAOA,GAAAA,CAAG,KAAK,IAAI,CAAA;AACnE,EAAA,IAAI,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,KAAA,CAAM,cAAA,CAAe,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,OAAOA,GAAAA,CAAG,IAAI,IAAI,CAAA;AACrE,EAAA,MAAM,YAAA,GAAe,KAAK,KAAA,CAAM,CAAC,MAAM,YAAA,CAAa,CAAC,GAAG,SAAS,CAAA;AACjE,EAAA,OAAO,eAAeA,GAAAA,CAAG,KAAA,CAAM,SAAI,CAAA,GAAIA,GAAAA,CAAG,IAAI,OAAI,CAAA;AACpD;AAEA,SAAS,iBAAiB,IAAA,EAOf;AACT,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,GAAY,QAAA,GAAM,QAAA;AACzC,EAAA,MAAM,QAAQ,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,MAAA;AACjD,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,KAAM,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,IAAK,CAAA,CAAE,SAAS,CAAA,CAAE,MAAA;AAC9E,EAAA,MAAM,CAAC,GAAA,EAAK,MAAM,CAAA,GAAI,gBAAA,CAAiB,KAAK,KAAK,CAAA;AACjD,EAAA,IAAI,KAAA,GAAQ,OAAO,SAAS,CAAA;AAC5B,EAAA,IAAI,MAAM,CAAA,EAAG,KAAA,IAASA,IAAG,KAAA,CAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AACxC,EAAA,IAAI,SAAS,CAAA,EAAG,KAAA,IAASA,IAAG,GAAA,CAAI,CAAA,CAAA,EAAI,MAAM,CAAA,CAAE,CAAA;AAC5C,EAAA,KAAA,IAAS,IAAI,KAAK,CAAA,CAAA;AAClB,EAAA,MAAMC,OAAAA,GAAS,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AACpC,EAAA,MAAM,IAAA,GAAO,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,EAAGA,OAAM,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,CAAA,GAAA,EAAM,KAAK,CAAA,QAAA,CAAA;AACzE,EAAA,OAAO,IAAA,CAAK,QAAA,GAAWD,GAAAA,CAAG,OAAA,CAAQA,IAAG,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,CAAA,CAAA,CAAI,MAAA,CAAO,KAAA,CAAM,IAAI,CAAC,CAAC,CAAA,GAAI,IAAA;AAC/E;AAEA,SAAS,cAAA,CAAe,KAAe,QAAA,EAA2B;AAChE,EAAA,IAAI,GAAA,CAAI,SAAS,eAAA,EAAiB;AAChC,IAAA,OAAO,gBAAA,CAAiB;AAAA,MACtB,MAAA,EAAQ,GAAA;AAAA,MACR,SAAA,EAAW,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,IAAI,MAAO,CAAA;AAAA,MACjD,KAAA,EAAO,CAAC,CAAA,KAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,QAAA,CAAS,CAAA,EAAG,GAAA,CAAI,MAAO,CAAA;AAAA,MACnD,IAAA,EAAM,eAAA,CAAgB,KAAA,CAAM,SAAA,EAAW,IAAI,MAAO,CAAA;AAAA,MAClD,OAAOA,GAAAA,CAAG,IAAA,CAAKA,IAAG,IAAA,CAAK,GAAA,CAAI,MAAO,CAAC,CAAA;AAAA,MACnC;AAAA,KACD,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,GAAA,CAAI,SAAS,QAAA,EAAU;AACzB,IAAA,OAAO,gBAAA,CAAiB;AAAA,MACtB,MAAA,EAAQ,IAAA;AAAA,MACR,SAAA,EAAW,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,CAAA,EAAG,IAAI,MAAO,CAAA,CAAA,EAAI,GAAA,CAAI,MAAO,CAAA,CAAE,CAAA;AAAA,MACrE,KAAA,EAAO,CAAC,CAAA,KAAM,OAAA,CAAQ,CAAC,CAAA,IAAK,QAAA,CAAS,CAAA,EAAG,GAAA,CAAI,MAAA,EAAS,GAAA,CAAI,MAAO,CAAA;AAAA,MAChE,MAAM,eAAA,CAAgB,KAAA,CAAM,WAAW,GAAA,CAAI,MAAA,EAAS,IAAI,MAAO,CAAA;AAAA,MAC/D,KAAA,EAAOA,GAAAA,CAAG,IAAA,CAAK,GAAA,CAAI,MAAO,CAAA;AAAA,MAC1B;AAAA,KACD,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,IAAI,GAAA,CAAI,KAAA;AACd,EAAA,MAAM,GAAA,GAAM,WAAW,GAAG,CAAA;AAC1B,EAAA,IAAIC,OAAAA;AACJ,EAAA,IAAI,KAAA,CAAM,YAAY,GAAA,CAAI,GAAG,GAAGA,OAAAA,GAASD,GAAAA,CAAG,IAAA,CAAK,IAAI,CAAA;AAAA,OAAA,IAC5C,KAAA,CAAM,eAAe,GAAA,CAAI,GAAG,GAAGC,OAAAA,GAASD,GAAAA,CAAG,GAAA,CAAI,IAAI,CAAA;AAAA,OAAA,IACnD,IAAI,SAAA,EAAWC,OAAAA,GAASD,GAAAA,CAAG,MAAM,SAAI,CAAA;AAAA,OACzCC,OAAAA,GAASD,GAAAA,CAAG,GAAA,CAAI,OAAI,CAAA;AAEzB,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA;AACnC,EAAA,MAAM,IAAA,GAAO,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA;AAC7B,EAAA,MAAM,IAAA,GAAO,EAAE,WAAA,EAAa,KAAA,CAAM,GAAG,KAAA,CAAM,IAAA,GAAO,EAAE,CAAA,IAAK,EAAA;AACzD,EAAA,MAAM,IAAA,GAAO,CAAA,IAAA,EAAOC,OAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAID,GAAAA,CAAG,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA;AAC1D,EAAA,OAAO,QAAA,GAAWA,IAAG,OAAA,CAAQ,IAAA,CAAK,OAAO,KAAA,CAAM,IAAI,CAAC,CAAA,GAAI,IAAA;AAC1D;AAEA,SAAS,eAAA,CAAgB,KAAgB,QAAA,EAA2B;AAClE,EAAA,MAAM,IAAA,GAAO,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,IAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,EAAA,EAAKA,GAAAA,CAAG,GAAA,CAAI,IAAI,SAAA,CAAU,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,EAAA,EAAKA,GAAAA,CAAG,GAAA,CAAI,GAAG,GAAA,CAAI,UAAU,CAAA,OAAA,CAAS,CAAC,CAAA,EAAA,EAAKA,GAAAA,CAAG,GAAA,CAAI,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA;AAC7I,EAAA,OAAO,QAAA,GAAWA,IAAG,OAAA,CAAQ,IAAA,CAAK,OAAO,KAAA,CAAM,IAAI,CAAC,CAAA,GAAI,IAAA;AAC1D;AAEA,SAAS,gBAAA,CAAiB,KAAiB,QAAA,EAA2B;AACpE,EAAA,MAAM,OAAO,GAAA,CAAI,SAAA,GAAYA,GAAAA,CAAG,KAAA,CAAM,QAAG,CAAA,GAAI,GAAA;AAC7C,EAAA,MAAM,OAAO,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,EAAA,EAAKA,GAAAA,CAAG,GAAA,CAAI,IAAI,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA,EAAA,EAAKA,GAAAA,CAAG,GAAA,CAAI,GAAA,CAAI,UAAU,MAAA,CAAO,EAAE,CAAC,CAAC,KAAKA,GAAAA,CAAG,GAAA,CAAI,GAAG,GAAA,CAAI,UAAU,SAAS,CAAC,CAAA,CAAA;AAChK,EAAA,OAAO,QAAA,GAAWA,IAAG,OAAA,CAAQ,IAAA,CAAK,OAAO,KAAA,CAAM,IAAI,CAAC,CAAA,GAAI,IAAA;AAC1D;AAEA,SAAS,MAAA,GAAe;AACtB,EAAA,WAAA,EAAY;AACZ,EAAA,KAAA,CAAM,IAAA,GAAO,OAAA,CAAQ,MAAA,CAAO,OAAA,IAAW,EAAA;AAGvC,EAAA,MAAM,YAAA,GACJ,MAAM,WAAA,CAAY,IAAA,GAAO,KAAK,KAAA,CAAM,cAAA,CAAe,OAAO,CAAA,GACtD,CAAA,IAAK,MAAM,WAAA,CAAY,IAAA,GAAO,IAAI,CAAA,GAAI,CAAA,CAAA,IAAM,MAAM,cAAA,CAAe,IAAA,GAAO,CAAA,GAAI,CAAA,GAAI,CAAA,CAAA,GAChF,CAAA;AACN,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,GAAU,CAAA,GAAI,CAAA;AACrC,EAAA,MAAM,QAAA,GAAW,IAAI,YAAA,GAAe,QAAA;AACpC,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,CAAI,CAAA,EAAA,CAAI,QAAQ,MAAA,CAAO,IAAA,IAAQ,MAAM,QAAQ,CAAA;AAGlE,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAKA,GAAAA,CAAG,IAAA,CAAK,eAAe,CAAC,CAAA,EAAA,EAAK,UAAA,EAAY,CAAA,CAAE,CAAA;AAC5D,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,IAAA,CAAK,MAAM,IAAA,GAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AAGzC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,EAAS;AAC5B,EAAA,IAAI,KAAA,KAAU,CAAA,IAAK,IAAA,CAAK,QAAA,EAAU;AAChC,IAAA,OAAA,CAAQ,GAAA,CAAIA,GAAAA,CAAG,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,EACnC,CAAA,MAAO;AACL,IAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,KAAA,CAAM,MAAA,GAAS,UAAU,CAAC,CAAA;AACpD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,QAAQ,OAAO,CAAA;AAC3C,IAAA,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAChC,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA,KAAM,KAAA,CAAM,MAAM,CAAC,CAAA;AAAA,IACnD;AAAA,EACF;AAGA,EAAA,IAAI,MAAM,WAAA,CAAY,IAAA,GAAO,KAAK,KAAA,CAAM,cAAA,CAAe,OAAO,CAAA,EAAG;AAC/D,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,IAAI,KAAA,CAAM,YAAY,IAAA,GAAO,CAAA;AAC3B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAKA,GAAAA,CAAG,IAAA,CAAK,CAAA,EAAA,EAAK,MAAM,WAAA,CAAY,IAAI,CAAA,OAAA,CAAS,CAAC,CAAA,CAAE,CAAA;AAClE,IAAA,IAAI,KAAA,CAAM,eAAe,IAAA,GAAO,CAAA;AAC9B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAKA,GAAAA,CAAG,GAAA,CAAI,CAAA,EAAA,EAAK,MAAM,cAAA,CAAe,IAAI,CAAA,UAAA,CAAY,CAAC,CAAA,CAAE,CAAA;AAAA,EACzE;AAGA,EAAA,IAAI,MAAM,OAAA,EAAS;AACjB,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAChC,IAAA,KAAA,CAAM,OAAA,GAAU,EAAA;AAAA,EAClB;AAGA,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA,CAAIA,GAAAA,CAAG,GAAA,CAAI,IAAA,CAAK,MAAM,CAAC,CAAA;AACjC;AAEA,SAAS,gBAAA,GAAyB;AAChC,EAAA,WAAA,EAAY;AACZ,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAKA,GAAAA,CAAG,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA,EAAIA,GAAAA,CAAG,IAAA,CAAK,6BAA6B,CAAC,CAAA,CAAE,CAAA;AAC3E,EAAA,IAAI,KAAA,CAAM,YAAY,IAAA,GAAO,CAAA;AAC3B,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAOA,GAAAA,CAAG,IAAA,CAAK,CAAA,EAAA,EAAK,MAAM,WAAA,CAAY,IAAI,CAAA,OAAA,CAAS,CAAC,CAAA,CAAE,CAAA;AACpE,EAAA,IAAI,KAAA,CAAM,eAAe,IAAA,GAAO,CAAA;AAC9B,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAOA,GAAAA,CAAG,GAAA,CAAI,CAAA,EAAA,EAAK,MAAM,cAAA,CAAe,IAAI,CAAA,UAAA,CAAY,CAAC,CAAA,CAAE,CAAA;AACzE,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA;AAAA,IACN,CAAA,yBAAA,EAA4BA,GAAAA,CAAG,IAAA,CAAK,KAAK,CAAC,CAAA,SAAA,EAAYA,GAAAA,CAAG,IAAA,CAAK,KAAK,CAAC,CAAA,WAAA,EAAcA,GAAAA,CAAG,IAAA,CAAK,SAAS,CAAC,CAAA,OAAA;AAAA,GACtG;AACF;AAIA,eAAe,YAAA,GAA8B;AAC3C,EAAA,IAAI,MAAM,WAAA,CAAY,IAAA,KAAS,KAAK,KAAA,CAAM,cAAA,CAAe,SAAS,CAAA,EAAG;AACnE,IAAA,KAAA,CAAM,OAAA,GAAUA,GAAAA,CAAG,GAAA,CAAI,mBAAmB,CAAA;AAC1C,IAAA;AAAA,EACF;AAEA,EAAA,KAAA,CAAM,OAAA,GAAUA,GAAAA,CAAG,MAAA,CAAO,qBAAqB,CAAA;AAC/C,EAAA,MAAA,EAAO;AAEP,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,OAAA,GAAU,CAAA;AAEd,EAAA,KAAA,MAAW,GAAA,IAAO,MAAM,cAAA,EAAgB;AACtC,IAAA,IAAI,EAAA,CAAG,MAAA,CAAO,GAAG,CAAA,EAAG,OAAA,EAAA;AAAA,EACtB;AACA,EAAA,KAAA,MAAW,GAAA,IAAO,MAAM,WAAA,EAAa;AACnC,IAAA,IAAI;AACF,MAAA,EAAA,CAAG,IAAI,GAAG,CAAA;AACV,MAAA,KAAA,EAAA;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,KAAA,CAAM,UAAUA,GAAAA,CAAG,GAAA,CAAI,iBAAiB,GAAG,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAA;AAAA,IACvD;AAAA,EACF;AAEA,EAAA,KAAA,CAAM,YAAY,KAAA,EAAM;AACxB,EAAA,KAAA,CAAM,eAAe,KAAA,EAAM;AAC3B,EAAA,MAAM,UAAA,EAAW;AAEjB,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,KAAA,GAAQ,GAAG,KAAA,CAAM,IAAA,CAAKA,IAAG,KAAA,CAAM,CAAA,CAAA,EAAI,KAAK,CAAA,MAAA,CAAQ,CAAC,CAAA;AACrD,EAAA,IAAI,OAAA,GAAU,GAAG,KAAA,CAAM,IAAA,CAAKA,IAAG,GAAA,CAAI,CAAA,CAAA,EAAI,OAAO,CAAA,QAAA,CAAU,CAAC,CAAA;AACzD,EAAA,IAAI,MAAM,MAAA,EAAQ,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,KAAK,IAAI,CAAA;AACnD;AAEA,eAAe,OAAA,GAAyB;AAEtC,EAAA,KAAA,CAAM,UAAUA,GAAAA,CAAG,MAAA;AAAA,IACjB;AAAA,GACF;AACF;AAEA,SAAS,gBAAgB,MAAA,EAAsB;AAC7C,EAAA,KAAA,CAAM,UAAUA,GAAAA,CAAG,MAAA;AAAA,IACjB,GAAG,MAAM,CAAA,iEAAA;AAAA,GACX;AACF;AAEA,SAAS,iBAAiB,MAAA,EAAsB;AAC9C,EAAA,KAAA,CAAM,UAAUA,GAAAA,CAAG,MAAA;AAAA,IACjB,GAAG,MAAM,CAAA,kEAAA;AAAA,GACX;AACF;AAEA,eAAe,QAAA,GAA0B;AACvC,EAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,EAAU;AAC5B,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,WAAA,CAAY,KAAA,CAAM,MAAM,CAAA;AAC1C,EAAA,IAAI,GAAA,EAAK,SAAS,OAAA,EAAS;AAC3B,EAAA,MAAM,IAAI,GAAA,CAAI,KAAA;AAEd,EAAA,WAAA,EAAY;AACZ,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,SAAA,CAAU,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA,EAAIA,GAAAA,CAAG,IAAA,CAAK,CAAA,CAAE,IAAI,CAAC,CAAA,CAAE,CAAA;AACvD,EAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,CAAA;AAC7B,EAAA,IAAI,EAAE,OAAA,EAAS,OAAA,CAAQ,IAAI,CAAA,eAAA,EAAkB,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AACxD,EAAA,IAAI,EAAE,WAAA,EAAa,OAAA,CAAQ,IAAI,CAAA,eAAA,EAAkB,CAAA,CAAE,WAAW,CAAA,CAAE,CAAA;AAChE,EAAA,IAAI,CAAA,CAAE,UAAA,EAAY,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkBA,IAAG,GAAA,CAAI,CAAA,CAAE,UAAU,CAAC,CAAA,CAAE,CAAA;AACtE,EAAA,OAAA,CAAQ,IAAI,CAAA,eAAA,EAAkBA,GAAAA,CAAG,IAAI,CAAA,CAAE,MAAM,CAAC,CAAA,CAAE,CAAA;AAChD,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAkB,GAAA,CAAI,SAAA,GAAYA,GAAAA,CAAG,KAAA,CAAM,KAAK,CAAA,GAAIA,GAAAA,CAAG,GAAA,CAAI,IAAI,CAAC,CAAA,CAAE,CAAA;AAC9E,EAAA,IAAI,CAAA,CAAE,SAAS,MAAA,EAAQ;AACrB,IAAA,OAAA,CAAQ,IAAI,CAAA,WAAA,CAAa,CAAA;AACzB,IAAA,KAAA,MAAW,CAAA,IAAK,CAAA,CAAE,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,SAAA,CAAU,CAAA,CAAE,IAAI,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AAAA,EAC9E;AACA,EAAA,IAAI,CAAA,CAAE,aAAa,MAAA,EAAQ;AACzB,IAAA,OAAA,CAAQ,IAAI,CAAA,eAAA,CAAiB,CAAA;AAC7B,IAAA,KAAA,MAAW,KAAK,CAAA,CAAE,YAAA,UAAsB,GAAA,CAAI,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,CAAA;AAAA,EACxD;AACA,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA,CAAIA,GAAAA,CAAG,GAAA,CAAI,8BAA8B,CAAC,CAAA;AAElD,EAAA,MAAM,IAAI,OAAA,CAAc,CAACG,QAAAA,KAAY;AACnC,IAAA,MAAM,SAAS,MAAM;AACnB,MAAA,OAAA,CAAQ,KAAA,CAAM,cAAA,CAAe,MAAA,EAAQ,MAAM,CAAA;AAC3C,MAAAA,QAAAA,EAAQ;AAAA,IACV,CAAA;AACA,IAAA,OAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,MAAA,EAAQ,MAAM,CAAA;AAAA,EACnC,CAAC,CAAA;AACH;AAIA,SAAS,iBAAA,GAA0B;AACjC,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,WAAA,CAAY,KAAA,CAAM,MAAM,CAAA;AAC1C,EAAA,IAAI,CAAC,GAAA,EAAK;AACV,EAAA,IAAI,GAAA,CAAI,SAAS,eAAA,IAAmB,KAAA,CAAM,iBAAiB,GAAA,CAAI,GAAA,CAAI,MAAO,CAAA,EAAG;AAC3E,IAAA,KAAA,CAAM,gBAAA,CAAiB,MAAA,CAAO,GAAA,CAAI,MAAO,CAAA;AACzC,IAAA,cAAA,EAAe;AAAA,EACjB,CAAA,MAAA,IAAW,GAAA,CAAI,IAAA,KAAS,QAAA,EAAU;AAChC,IAAA,MAAM,KAAK,CAAA,EAAG,GAAA,CAAI,MAAO,CAAA,CAAA,EAAI,IAAI,MAAO,CAAA,CAAA;AACxC,IAAA,IAAI,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,EAAE,CAAA,EAAG;AAClC,MAAA,KAAA,CAAM,gBAAA,CAAiB,OAAO,EAAE,CAAA;AAChC,MAAA,cAAA,EAAe;AAAA,IACjB;AAAA,EACF;AACF;AAEA,SAAS,yBAAA,GAAkC;AACzC,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,WAAA,CAAY,KAAA,CAAM,MAAM,CAAA;AAC1C,EAAA,IAAI,CAAC,GAAA,EAAK;AAEV,EAAA,IAAI,GAAA,CAAI,SAAS,eAAA,EAAiB;AAChC,IAAA,IAAI,CAAC,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,GAAA,CAAI,MAAO,CAAA,EAAG;AAC5C,MAAA,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,GAAA,CAAI,MAAO,CAAA;AACtC,MAAA,cAAA,EAAe;AAAA,IACjB;AACA,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,GAAA,CAAI,SAAS,QAAA,EAAU;AACzB,IAAA,MAAM,KAAK,CAAA,EAAG,GAAA,CAAI,MAAO,CAAA,CAAA,EAAI,IAAI,MAAO,CAAA,CAAA;AACxC,IAAA,IAAI,CAAC,KAAA,CAAM,gBAAA,CAAiB,GAAA,CAAI,EAAE,CAAA,EAAG;AACnC,MAAA,KAAA,CAAM,gBAAA,CAAiB,IAAI,EAAE,CAAA;AAC7B,MAAA,cAAA,EAAe;AAAA,IACjB,CAAA,MAAO;AAEL,MAAA,MAAMY,IAAAA,GAAM,aAAA;AAAA,QACV,KAAA,CAAM,WAAA;AAAA,QACN,KAAA,CAAM,MAAA;AAAA,QACN,CAAC,CAAA,KAAgB,CAAA,CAAE,IAAA,KAAS;AAAA,OAC9B;AACA,MAAA,IAAIA,IAAAA,IAAO,CAAA,EAAG,KAAA,CAAM,MAAA,GAASA,IAAAA;AAAA,IAC/B;AACA,IAAA;AAAA,EACF;AAGA,EAAA,MAAM,GAAA,GAAM,aAAA;AAAA,IACV,KAAA,CAAM,WAAA;AAAA,IACN,KAAA,CAAM,MAAA;AAAA,IACN,CAAC,CAAA,KAAgB,CAAA,CAAE,IAAA,KAAS,QAAA,IAAY,EAAE,IAAA,KAAS;AAAA,GACrD;AACA,EAAA,IAAI,GAAA,IAAO,CAAA,EAAG,KAAA,CAAM,MAAA,GAAS,GAAA;AAC/B;AAMA,SAAS,aAAA,CAAiB,GAAA,EAAU,YAAA,EAAsB,IAAA,EAAoC;AAC5F,EAAA,KAAA,IAAS,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,YAAA,EAAc,GAAA,CAAI,MAAM,CAAA,GAAI,CAAA,EAAG,CAAA,IAAK,CAAA,EAAG,CAAA,EAAA,EAAK;AAChE,IAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAM,GAAG,OAAO,CAAA;AAAA,EAChC;AACA,EAAA,OAAO,EAAA;AACT;AAqBA,IAAM,UAAA,GAAa,CAAC,CAAA,KAAW,CAAA,KAAM,QAAA;AACrC,IAAM,WAAA,GAAc,CAAC,CAAA,KAAW,CAAA,KAAM,SAAA;AACtC,IAAM,aAAA,GAAgB,CAAC,CAAA,KAAW,CAAA,KAAM,WAAA;AAExC,IAAM,MAAA,GAAuB;AAAA;AAAA;AAAA;AAAA,EAI3B;AAAA,IACE,IAAA,EAAM,CAAC,GAAA,EAAQ,GAAA,EAAK,MAAM,CAAA;AAAA,IAC1B,KAAK,MAAM;AACT,MAAA,IAAI,MAAM,WAAA,CAAY,IAAA,GAAO,KAAK,KAAA,CAAM,cAAA,CAAe,OAAO,CAAA,EAAG;AAC/D,QAAA,KAAA,CAAM,mBAAA,GAAsB,IAAA;AAC5B,QAAA,gBAAA,EAAiB;AACjB,QAAA,OAAO,aAAA;AAAA,MACT;AACA,MAAA,OAAO,OAAA;AAAA,IACT;AAAA,GACF;AAAA,EACA,EAAE,MAAM,CAAC,GAAI,GAAG,GAAA,EAAK,MAAM,KAAK,OAAA,EAAQ,EAAE;AAAA,EAC1C,EAAE,IAAA,EAAM,CAAC,QAAA,EAAU,GAAG,CAAA,EAAG,GAAA,EAAK,MAAM,KAAK,UAAA,CAAW,EAAE,CAAA,EAAE;AAAA,EACxD,EAAE,IAAA,EAAM,CAAC,QAAA,EAAU,GAAG,CAAA,EAAG,GAAA,EAAK,MAAM,KAAK,UAAA,CAAW,CAAC,CAAA,EAAE;AAAA;AAAA,EAGvD,EAAE,MAAM,CAAC,QAAQ,GAAG,IAAA,EAAM,UAAA,EAAY,KAAK,iBAAA,EAAkB;AAAA,EAC7D,EAAE,MAAM,CAAC,QAAQ,GAAG,IAAA,EAAM,UAAA,EAAY,KAAK,yBAAA,EAA0B;AAAA;AAAA,EAGrE;AAAA,IACE,IAAA,EAAM,CAAC,GAAG,CAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,KAAK,MAAM;AACT,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,WAAA,CAAY,KAAA,CAAM,MAAM,CAAA;AAC1C,MAAA,IAAI,CAAC,GAAA,EAAK;AACV,MAAA,IAAI,CAAC,WAAA,CAAY,GAAA,EAAK,KAAK,CAAA,EAAG;AAC5B,QAAA,MAAM,GAAA,GAAM,WAAW,GAAG,CAAA;AAC1B,QAAA,IAAI,GAAA,eAAkB,GAAA,EAAK,KAAA,CAAM,YAAY,GAAA,CAAI,GAAG,CAAA,GAAI,OAAA,GAAU,KAAK,CAAA;AAAA,MACzE;AAAA,IACF;AAAA,GACF;AAAA;AAAA,EAGA,EAAE,IAAA,EAAM,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,EAAG,IAAA,EAAM,WAAA,EAAa,GAAA,EAAK,MAAM,eAAA,CAAgB,iBAAiB,CAAA,EAAE;AAAA,EAC1F,EAAE,IAAA,EAAM,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,EAAG,IAAA,EAAM,WAAA,EAAa,GAAA,EAAK,MAAM,eAAA,CAAgB,mBAAmB,CAAA,EAAE;AAAA,EAC5F,EAAE,IAAA,EAAM,CAAC,IAAA,EAAM,IAAI,CAAA,EAAG,IAAA,EAAM,WAAA,EAAa,GAAA,EAAK,MAAM,eAAA,CAAgB,gBAAgB,CAAA,EAAE;AAAA;AAAA,EAGtF;AAAA,IACE,IAAA,EAAM,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,IACpB,IAAA,EAAM,aAAA;AAAA,IACN,GAAA,EAAK,MAAM,gBAAA,CAAiB,kBAAkB;AAAA,GAChD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA;AAAA,IACpB,IAAA,EAAM,aAAA;AAAA,IACN,GAAA,EAAK,MAAM,gBAAA,CAAiB,oBAAoB;AAAA,GAClD;AAAA,EACA;AAAA,IACE,IAAA,EAAM,CAAC,GAAG,CAAA;AAAA,IACV,IAAA,EAAM,aAAA;AAAA,IACN,GAAA,EAAK,MAAM,gBAAA,CAAiB,6BAA6B;AAAA,GAC3D;AAAA,EACA,EAAE,IAAA,EAAM,CAAC,IAAA,EAAM,IAAI,CAAA,EAAG,IAAA,EAAM,aAAA,EAAe,GAAA,EAAK,MAAM,gBAAA,CAAiB,iBAAiB,CAAA,EAAE;AAAA;AAAA,EAG1F;AAAA,IACE,IAAA,EAAM,CAAC,GAAG,CAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,KAAK,MAAM;AACT,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,WAAA,CAAY,KAAA,CAAM,MAAM,CAAA;AAC1C,MAAA,IAAI,CAAC,GAAA,EAAK;AACV,MAAA,IAAI,CAAC,WAAA,CAAY,GAAA,EAAK,QAAQ,CAAA,EAAG;AAC/B,QAAA,MAAM,GAAA,GAAM,WAAW,GAAG,CAAA;AAC1B,QAAA,IAAI,GAAA,eAAkB,GAAA,EAAK,KAAA,CAAM,eAAe,GAAA,CAAI,GAAG,CAAA,GAAI,OAAA,GAAU,QAAQ,CAAA;AAAA,MAC/E;AAAA,IACF;AAAA,GACF;AAAA;AAAA,EAGA;AAAA,IACE,IAAA,EAAM,CAAC,GAAG,CAAA;AAAA,IACV,IAAA,EAAM,UAAA;AAAA,IACN,KAAK,MAAM;AACT,MAAA,MAAM,GAAA,GAAM,KAAA,CAAM,WAAA,CAAY,KAAA,CAAM,MAAM,CAAA;AAC1C,MAAA,IAAI,CAAC,GAAA,EAAK;AACV,MAAA,IAAI,CAAC,WAAA,CAAY,GAAA,EAAK,QAAQ,CAAA,EAAG;AAC/B,QAAA,MAAM,GAAA,GAAM,WAAW,GAAG,CAAA;AAC1B,QAAA,IAAI,GAAA,EAAK,YAAA,CAAa,GAAA,EAAK,QAAQ,CAAA;AAAA,MACrC;AAAA,IACF;AAAA,GACF;AAAA;AAAA,EAGA,EAAE,IAAA,EAAM,CAAC,GAAG,CAAA,EAAG,KAAK,OAAA,EAAQ;AAAA;AAAA,EAG5B,EAAE,MAAM,CAAC,GAAG,GAAG,IAAA,EAAM,UAAA,EAAY,KAAK,YAAA,EAAa;AAAA;AAAA,EAGnD,EAAE,MAAM,CAAC,IAAA,EAAM,IAAI,CAAA,EAAG,IAAA,EAAM,UAAA,EAAY,GAAA,EAAK,YAAA,EAAa;AAAA;AAAA,EAG1D,EAAE,MAAM,CAAC,GAAG,GAAG,IAAA,EAAM,UAAA,EAAY,KAAK,QAAA;AACxC,CAAA;AAEA,eAAe,YAAY,GAAA,EAAiC;AAC1D,EAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,CAAC,CAAA,CAAE,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AAC3B,IAAA,IAAI,EAAE,IAAA,IAAQ,CAAC,EAAE,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,EAAG;AAClC,IAAA,OAAO,MAAM,CAAA,CAAE,GAAA,CAAI,GAAG,CAAA;AAAA,EACxB;AAEA,EAAA,OAAO,aAAA;AACT;AAGA,eAAe,kBAAkB,GAAA,EAAiC;AAChE,EAAA,KAAA,CAAM,mBAAA,GAAsB,KAAA;AAE5B,EAAA,IAAI,QAAQ,GAAA,IAAU,GAAA,KAAQ,GAAA,IAAO,GAAA,KAAQ,KAAK,OAAO,OAAA;AACzD,EAAA,IAAI,GAAA,KAAQ,GAAA,IAAO,GAAA,KAAQ,GAAA,EAAK;AAC9B,IAAA,MAAM,YAAA,EAAa;AACnB,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,IAAI,GAAA,KAAQ,OAAO,GAAA,KAAQ,GAAA,IAAO,QAAQ,MAAA,IAAU,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,IAAA,EAAM;AAChF,IAAA;AAAA,EACF;AAEA,EAAA,KAAA,CAAM,mBAAA,GAAsB,IAAA;AAC5B,EAAA,gBAAA,EAAiB;AACjB,EAAA,OAAO,aAAA;AACT;AAIA,eAAe,IAAI,UAAA,EAAmC;AACpD,EAAA,EAAA,GAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAY,CAAA;AAMpC,EAAA,MAAM,UAAA,EAAW;AACjB,EAAA,MAAM,uBAAA,EAAwB;AAE9B,EAAA,UAAA,EAAW;AACX,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAW,IAAI,CAAA;AAC7B,EAAA,OAAA,CAAQ,MAAM,MAAA,EAAO;AAErB,EAAA,MAAA,EAAO;AAEP,EAAA,WAAA,MAAiB,KAAA,IAAS,QAAQ,KAAA,EAAO;AACvC,IAAA,MAAM,GAAA,GAAM,MAAM,QAAA,EAAS;AAE3B,IAAA,MAAM,MAAA,GAAS,MAAM,mBAAA,GACjB,MAAM,kBAAkB,GAAG,CAAA,GAC3B,MAAM,WAAA,CAAY,GAAG,CAAA;AAEzB,IAAA,IAAI,WAAW,OAAA,EAAS;AACxB,IAAA,IAAI,WAAW,aAAA,EAAe;AAC9B,IAAA,MAAA,EAAO;AAAA,EACT;AAEA,EAAA,UAAA,EAAW;AACX,EAAA,OAAA,CAAQ,KAAA,CAAM,WAAW,KAAK,CAAA;AAC9B,EAAA,OAAA,CAAQ,MAAM,KAAA,EAAM;AACpB,EAAA,WAAA,EAAY;AACd;AAgBO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,OAAO,IAAIrB,OAAAA,CAAQ,QAAQ,CAAA,CACxB,WAAA,CAAY,6DAA6D,CAAA,CACzE,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,QAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,OAAO,IAAA,KAAS;AACtB,IAAA,MAAM,GAAA,CAAIF,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,EACzC,CAAC,CAAA;AACL;AC/9BO,SAAS,oBAAA,GAAgC;AAC9C,EAAA,OAAO,IAAIE,OAAAA,CAAQ,YAAY,CAAA,CAC5B,WAAA,CAAY,qDAAqD,CAAA,CACjE,MAAA,CAAO,sBAAA,EAAwB,kCAAA,EAAoC,QAAQ,GAAA,EAAK,CAAA,CAChF,MAAA,CAAO,OAAO,IAAA,KAAiC;AAC9C,IAAA,MAAMF,MAAAA,GAAO,MAAM,OAAO,MAAW,CAAA;AACrC,IAAA,MAAM,UAAA,GAAaA,MAAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,KAAK,UAAU,CAAA;AAKvD,IAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,kBAAiB,GAAI,MAAM,OACvD,oBACF,CAAA;AACA,IAAA,gBAAA;AAAA,MACE,IAAI,QAAA,CAAS;AAAA,QACX,SAAA,EAAW,YAAA;AAAA,QACX,KAAA,EAAO,MAAA;AAAA,QACP,KAAA,EAAO,CAAC,IAAI,UAAA,CAAW,EAAE,MAAA,EAAQ,QAAA,EAAU,CAAC;AAAA,OAC7C;AAAA,KACH;AAEA,IAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,MAAM,OAAO,8BAAqC,CAAA;AAC9E,IAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB;AAAA,MACjC,UAAA;AAAA,MACA,SAAA,EAAW,IAAA;AAAA,MACX,OAAO,CAAC,GAAA,KAAQ,QAAQ,MAAA,CAAO,KAAA,CAAM,GAAG,GAAG;AAAA,CAAI;AAAA,KAChD,CAAA;AAED,IAAA,MAAM,OAAO,IAAA,EAAK;AAGlB,IAAA,MAAM,WAAW,YAAY;AAC3B,MAAA,MAAM,OAAO,QAAA,EAAS;AAAA,IACxB,CAAA;AACA,IAAA,OAAA,CAAQ,EAAA,CAAG,UAAU,YAAY;AAC/B,MAAA,MAAM,QAAA,EAAS;AACf,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,CAAC,CAAA;AACD,IAAA,OAAA,CAAQ,EAAA,CAAG,WAAW,YAAY;AAChC,MAAA,MAAM,QAAA,EAAS;AACf,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,CAAC,CAAA;AAID,IAAA,MAAM,OAAO,iBAAA,EAAkB;AAAA,EACjC,CAAC,CAAA;AACL;ACzCO,SAAS,cAAA,GAA0B;AACxC,EAAA,MAAM,MAAM,IAAIE,OAAAA,CAAQ,KAAK,CAAA,CAAE,YAAY,0CAA0C,CAAA;AAErF,EAAA,MAAM,SAAS,GAAA,CAAI,OAAA,CAAQ,QAAQ,CAAA,CAAE,YAAY,wCAAwC,CAAA;AAEzF,EAAA,MAAA,CACG,OAAA,CAAQ,WAAW,CAAA,CACnB,WAAA,CAAY,iEAAiE,CAAA,CAC7E,cAAA,CAAe,gBAAA,EAAkB,qCAAqC,CAAA,CACtE,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,kBAAA,EAAoB,iBAAA,EAAmB,aAAa,CAAA,CAC3D,MAAA,CAAO,UAAA,EAAY,iBAAiB,CAAA,CACpC,MAAA,CAAO,OAAO,KAAa,IAAA,KAAS;AACnC,IAAA,MAAM,UAAA,GAAaF,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAE/C,IAAA,MAAMM,WAAYkB,EAAA,CAAA,OAAA,EAAQ;AAG1B,IAAA,IAAI,UAAA;AACJ,IAAA,MAAM,KAAA,GAAQ,sBAAA,CAAuB,IAAA,CAAK,GAAG,CAAA;AAC7C,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,UAAA,GAAa,iBAAiB,GAAG,CAAA;AACjC,MAAAlB,QAAAA,CAAQ,KAAA,CAAM,CAAA,QAAA,EAAW,GAAG,CAAA,CAAE,CAAA;AAC9B,MAAA,IAAI;AACF,QAAA,IAAI,CAACQ,UAAAA,CAAW,UAAU,CAAA,EAAG;AAC3B,UAAA,QAAA,CAAS,CAAA,UAAA,EAAa,GAAG,CAAA,CAAA,EAAI,UAAU,IAAI,EAAE,KAAA,EAAO,UAAU,CAAA;AAAA,QAChE;AACA,QAAAR,SAAQ,IAAA,CAAK,CAAA,UAAA,EAAaN,gBAAK,QAAA,CAAS,UAAU,CAAC,CAAA,CAAE,CAAA;AAAA,MACvD,SAAS,GAAA,EAAK;AACZ,QAAAM,QAAAA,CAAQ,KAAK,cAAc,CAAA;AAC3B,QAAA,MAAA,CAAO,eAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AACvD,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,UAAA,GAAaN,eAAAA,CAAK,QAAQ,GAAG,CAAA;AAC7B,MAAA,IAAI,CAACc,UAAAA,CAAW,UAAU,CAAA,EAAG;AAC3B,QAAA,MAAA,CAAO,CAAA,qBAAA,EAAwB,UAAU,CAAA,CAAE,CAAA;AAC3C,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF;AAGA,IAAA,MAAM,OAAA,GAAU,MAAM,WAAA,EAAY;AAClC,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,WAAA,EAAY;AAC3C,MAAA,IAAI,SAAS,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,UAAU,CAAA;AACvD,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAA,GAAS,MAAM,QAAQ,SAAA,CAAU;AAAA,UAC/B,OAAA,EAAS,OAAA;AAAA,UACT,IAAA,EAAMd,eAAAA,CAAK,QAAA,CAAS,UAAU,CAAA;AAAA,UAC9B,IAAA,EAAM,UAAA;AAAA,UACN,SAAA,EAAW;AAAA,SACZ,CAAA;AAAA,MACH;AACA,MAAAM,QAAAA,CAAQ,MAAM,gBAAgB,CAAA;AAC9B,MAAA,MAAM,EAAE,kBAAA,EAAAmB,mBAAAA,EAAmB,GAAI,MAAM,OAAO,qBAA4B,CAAA;AACxE,MAAA,MAAM,WAAW,kBAAA,EAAmB;AACpC,MAAA,MAAM,gBAAgB,IAAIA,mBAAAA,CAAmB,SAAS,MAAA,CAAO,EAAA,EAAI,YAAY,QAAQ,CAAA;AACrF,MAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,IAAA,EAAK;AACxC,MAAA,MAAM,OAAA,CAAQ,UAAA,CAAW,MAAA,CAAO,EAAE,CAAA;AAClC,MAAAnB,QAAAA,CAAQ,IAAA,CAAK,CAAA,QAAA,EAAW,MAAA,CAAO,aAAa,CAAA,OAAA,CAAS,CAAA;AAAA,IACvD,CAAA,SAAE;AACA,MAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,IAChB;AAGA,IAAA,MAAM,QAAA,GAAW,CAAA,MAAA,EAAS,IAAA,CAAK,KAAK,CAAA,CAAA;AACpC,IAAA,MAAMH,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAY,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,YAAA,EAAc,IAAA,CAAK,MAAA,EAAQ,CAAA;AAC1F,IAAAG,QAAAA,CAAQ,KAAA,CAAM,CAAA,WAAA,EAAc,QAAQ,CAAA,CAAE,CAAA;AACtC,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQH,GAAAA,CAAG,GAAA,CAAI,QAAQ,CAAA;AAC7B,MAAAG,QAAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,OAAA,CAAQ,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,yCAAA,CAA2C,CAAA;AAAA,MAClE,CAAA,MAAO;AACL,QAAA,KAAA,MAAW,CAAA,IAAK,KAAA,EAAO,KAAA,CAAM,CAAC,CAAA;AAAA,MAChC;AACA,MAAA,OAAA;AAAA,QACE,CAAA,qBAAA,EAAwB,EAAE,GAAA,CAAI,UAAU,CAAC,CAAA,mBAAA,EAAiB,CAAA,CAAE,GAAA,CAAI,eAAe,CAAC,CAAA,CAAA;AAAA,OAClF;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAAA,QAAAA,CAAQ,KAAK,QAAQ,CAAA;AACrB,MAAA,MAAA,CAAQ,IAAc,OAAO,CAAA;AAC7B,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,GAAA,CAAI,MAAA,CAAO,MAAM,GAAA,CAAI,IAAA,EAAM,CAAA;AAC3B,EAAA,MAAA,CAAO,MAAA,CAAO,MAAM,MAAA,CAAO,IAAA,EAAM,CAAA;AAEjC,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,iBAAiB,GAAA,EAAqB;AAC7C,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AACxC,EAAA,MAAM,OAAON,eAAAA,CAAK,IAAA,CAAK,OAAA,EAAQ,EAAG,WAAW,QAAQ,CAAA;AAErD,EAAA,IAAI,IAAA,GAAO,SAAA;AACX,EAAA,IAAI,QAAA,GAAW,OAAA;AACf,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,KAAA,CAAM,4BAA4B,CAAA;AAC5D,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,oBAAoB,CAAA;AACnD,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,KAAA,CAAM,yBAAyB,CAAA;AAE7D,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,IAAA,GAAO,UAAU,CAAC,CAAA;AAClB,IAAA,QAAA,GAAW,UAAU,CAAC,CAAA;AAAA,EACxB,WAAW,QAAA,EAAU;AACnB,IAAA,IAAA,GAAO,SAAS,CAAC,CAAA;AACjB,IAAA,QAAA,GAAW,SAAS,CAAC,CAAA;AAAA,EACvB,WAAW,aAAA,EAAe;AACxB,IAAA,IAAA,GAAO,cAAc,CAAC,CAAA;AACtB,IAAA,QAAA,GAAW,cAAc,CAAC,CAAA;AAAA,EAC5B;AAEA,EAAA,OAAOA,eAAAA,CAAK,IAAA,CAAK,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AACvC;ACzHO,SAAS,mBAAA,GAA+B;AAC7C,EAAA,OAAO,IAAIE,OAAAA,CAAQ,UAAU,CAAA,CAC1B,WAAA,CAAY,oCAAoC,CAAA,CAChD,QAAA,CAAS,QAAA,EAAU,oCAAoC,EACvD,MAAA,CAAO,sBAAA,EAAwB,qBAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,SAAA;AAAA,IACC,IAAIe,OAAO,kBAAA,EAAoB,eAAe,EAC3C,OAAA,CAAQ,aAAa,CAAA,CACrB,OAAA,CAAQ,wBAAwB;AAAA,GACrC,CACC,MAAA,CAAO,CAAC,IAAA,EAA0B,IAAA,KAAS;AAC1C,IAAA,MAAMd,GAAAA,GAAK,IAAI,YAAA,CAAa;AAAA,MAC1B,UAAA,EAAYH,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAAA,MACxC,cAAc,IAAA,CAAK;AAAA,KACpB,CAAA;AACD,IAAA,MAAM,OAAA,GAAUG,IAAG,QAAA,EAAS;AAC5B,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAA,CAAQ,4BAA4B,CAAA;AACpC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAW,IAAA,GACb,OAAA,CAAQ,MAAA,CAAO,CAAC,MAAM,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,EAAE,IAAI,CAAA,CAAA,KAAO,QAAQ,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA,GACvE,OAAA;AACJ,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,MAAA,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA,eAAA,CAAiB,CAAA;AAChC,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,GAAG,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,CAAK,MAAM,CAAC,CAAA;AAC/D,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,OAAA,CAAQ,mBAAmB,CAAC,CAAA;AAC1C,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAK,KAAA,GAAQ,EAAE,CAAC,CAAA,CAAE,CAAA;AACrC,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,EAAA,EAAK,YAAA,CAAa,CAAA,CAAE,IAAI,CAAC,KAAK,CAAA,CAAE,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAA,EAAA,EAAK,EAAE,GAAA,CAAI,CAAA,CAAE,UAAU,CAAC,CAAA,EAAA,EAAKK,GAAAA,CAAG,OAAO,CAAA,EAAG,CAAA,CAAE,MAAM,CAAA,iBAAA,CAAmB,CAAC,CAAA;AAAA,OAC1H;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,CAAA,IAAA,EAAO,CAAA,CAAE,GAAA,CAAI,eAAe,CAAC,CAAA,cAAA,CAAgB,CAAA;AAAA,EACvD,CAAC,CAAA;AACL;ACzCO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,MAAM,MAAM,IAAIN,OAAAA,CAAQ,OAAO,CAAA,CAAE,YAAY,sCAAsC,CAAA;AAEnF,EAAA,GAAA,CACG,QAAQ,eAAe,CAAA,CACvB,MAAM,OAAO,CAAA,CACb,YAAY,iCAAiC,CAAA,CAC7C,OAAO,sBAAA,EAAwB,mBAAA,EAAqB,QAAQ,GAAA,EAAK,EACjE,MAAA,CAAO,CAAC,KAAa,IAAA,KAAS;AAC7B,IAAA,MAAMC,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAYH,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA;AACzE,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAOG,GAAAA,CAAG,KAAA,CAAM,GAAG,CAAA;AACzB,MAAA,KAAA,CAAM,CAAA,aAAA,EAAgB,CAAA,CAAE,GAAA,CAAI,IAAI,CAAC,CAAA,CAAE,CAAA;AACnC,MAAA,OAAA,CAAQ,GAAA,CAAI,8BAA8B,CAAA,CAAE,GAAA,CAAI,uBAAuB,GAAG,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AAAA,IACjF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,MAAA,CAAO,GAAG,CAAC,CAAA;AAClB,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,QAAQ,cAAc,CAAA,CACtB,WAAA,CAAY,iCAAiC,EAC7C,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,OAAA,CAAQ,KAAK,CAAA,CACjE,MAAA,CAAO,CAAC,KAAa,IAAA,KAAS;AAC7B,IAAA,MAAMA,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAYH,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA;AACzE,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAYG,GAAAA,CAAG,WAAA,CAAY,GAAG,CAAA;AACpC,MAAA,KAAA,CAAM,CAAA,eAAA,EAAkB,CAAA,CAAE,GAAA,CAAI,SAAS,CAAC,CAAA,CAAE,CAAA;AAC1C,MAAA,OAAA,CAAQ,IAAI,CAAA,+CAAA,EAAkD,CAAA,CAAE,GAAA,CAAI,gBAAgB,CAAC,CAAA,CAAE,CAAA;AAAA,IACzF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,MAAA,CAAO,GAAG,CAAC,CAAA;AAClB,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,QAAQ,cAAc,CAAA,CACtB,WAAA,CAAY,8CAA8C,EAC1D,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,OAAA,CAAQ,KAAK,CAAA,CACjE,MAAA,CAAO,CAAC,KAAa,IAAA,KAAS;AAC7B,IAAA,MAAMA,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAYH,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA;AACzE,IAAA,IAAI;AACF,MAAAG,GAAAA,CAAG,YAAY,GAAG,CAAA;AAClB,MAAA,KAAA,CAAM,4CAA4C,CAAA;AAClD,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,gEAAA,EAA8D,CAAA,CAAE,GAAA,CAAI,0BAA0B,CAAC,CAAA,mCAAA;AAAA,OACjG;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,MAAA,CAAO,GAAG,CAAC,CAAA;AAClB,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,QAAQ,cAAc,CAAA,CACtB,WAAA,CAAY,yCAAyC,EACrD,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,OAAA,CAAQ,KAAK,CAAA,CACjE,MAAA,CAAO,CAAC,KAAa,IAAA,KAAS;AAC7B,IAAA,MAAMA,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAYH,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA;AACzE,IAAAG,GAAAA,CAAG,YAAY,GAAG,CAAA;AAClB,IAAA,KAAA,CAAM,CAAA,kBAAA,EAAqB,GAAG,CAAA,CAAE,CAAA;AAAA,EAClC,CAAC,CAAA;AAEH,EAAA,GAAA,CAAI,MAAA,CAAO,MAAM,GAAA,CAAI,IAAA,EAAM,CAAA;AAC3B,EAAA,OAAO,GAAA;AACT;AC5EA,IAAM,eAAA,GAAkB,kBAAA;AAExB,IAAM,gBAAA,GAAmB;AAAA,EACvB,OAAA,EAAS,QAAA;AAAA,EACT,IAAA,EAAM,CAAC,YAAY,CAAA;AAAA,EACnB,KAAK;AACP,CAAA;AAgBA,SAAS,UAAU,UAAA,EAA4B;AAC7C,EAAA,OAAOH,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,SAAA,EAAW,WAAW,QAAQ,CAAA;AAC7D;AAEA,eAAe,eAAkBO,EAAAA,EAA8B;AAC7D,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAM,MAAMT,GAAAA,CAAG,QAAA,CAASS,EAAAA,EAAG,OAAO,CAAA;AAAA,EACpC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB,SAAS,CAAA,EAAY;AACnB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,aAAA,EAAgBA,EAAC,CAAA,EAAA,EAAK,CAAA,YAAa,QAAQ,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA,sBAAA;AAAA,KAClE;AAAA,EACF;AACF;AAEA,eAAe,SAAA,CAAUA,IAAW,KAAA,EAA+B;AACjE,EAAA,MAAMT,GAAAA,CAAG,MAAME,eAAAA,CAAK,OAAA,CAAQO,EAAC,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACnD,EAAA,MAAMT,GAAAA,CAAG,UAAUS,EAAAA,EAAG,CAAA,EAAG,KAAK,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAC;AAAA,CAAI,CAAA;AAC7D;AAEA,eAAe,OAAA,CAAQ,KAAa,IAAA,EAA6B;AAC/D,EAAA,MAAMT,IAAG,KAAA,CAAM,IAAA,EAAM,EAAE,SAAA,EAAW,MAAM,CAAA;AACxC,EAAA,MAAM,OAAA,GAAU,MAAMA,GAAAA,CAAG,OAAA,CAAQ,KAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAC7D,EAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,IAAA,MAAM,OAAA,GAAUE,eAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,MAAM,IAAI,CAAA;AACzC,IAAA,MAAM,QAAA,GAAWA,eAAAA,CAAK,IAAA,CAAK,IAAA,EAAM,MAAM,IAAI,CAAA;AAC3C,IAAA,IAAI,MAAM,WAAA,EAAY,EAAG,MAAM,OAAA,CAAQ,SAAS,QAAQ,CAAA;AAAA,SACnD,MAAMF,GAAAA,CAAG,QAAA,CAAS,OAAA,EAAS,QAAQ,CAAA;AAAA,EAC1C;AACF;AAYA,eAAsB,OAAA,CACpB,YACA,IAAA,EACwB;AACxB,EAAA,OAAO,MAAM,IAAA,GAAO,iBAAA,CAAkB,UAAU,CAAA,GAAI,WAAW,UAAU,CAAA;AAC3E;AAEA,eAAe,WAAW,UAAA,EAA4C;AACpE,EAAA,MAAM,OAAA,GAAUE,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,WAAW,UAAU,CAAA;AAC3D,EAAA,MAAM,QAAA,GAAY,MAAM,cAAA,CAA8B,OAAO,KAAM,EAAC;AACpE,EAAA,MAAM,aAAa,EAAE,GAAI,QAAA,CAAS,UAAA,IAAc,EAAC,EAAG;AACpD,EAAA,MAAM,QAAA,GAAW,WAAW,eAAe,CAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,YAAY,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA,KAAM,IAAA,CAAK,UAAU,gBAAgB,CAAA;AACxF,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,QAAA,IAAY,CAAC,OAAA,EAAS;AACxB,IAAA,OAAA,GAAU,sBAAsB,eAAe,CAAA,UAAA,EAAaA,gBAAK,QAAA,CAAS,UAAA,EAAY,OAAO,CAAC,CAAA,CAAA;AAAA,EAChG;AACA,EAAA,UAAA,CAAW,eAAe,CAAA,GAAI,gBAAA;AAC9B,EAAA,MAAM,UAAU,OAAA,EAAS,EAAE,GAAG,QAAA,EAAU,YAAY,CAAA;AACpD,EAAA,OAAO,EAAE,OAAA,EAAS,CAAC,OAAA,EAAS,MAAA,EAAQ,OAAO,OAAA,EAAQ;AACrD;AAEA,eAAe,kBAAkB,UAAA,EAA4C;AAC3E,EAAA,MAAM,GAAA,GAAM,UAAU,UAAU,CAAA;AAGhC,EAAA,KAAA,MAAW,CAAC,KAAK,OAAO,CAAA,IAAK,OAAO,OAAA,CAAQ,sBAAA,EAAwB,CAAA,EAAG;AACrE,IAAA,MAAM,IAAA,GAAOA,eAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,GAAG,CAAA;AAC/B,IAAA,MAAMF,GAAAA,CAAG,MAAME,eAAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AACtD,IAAA,MAAMF,GAAAA,CAAG,SAAA,CAAU,IAAA,EAAM,OAAO,CAAA;AAAA,EAClC;AAGA,EAAA,MAAM,gBAAA,GAAmBE,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,WAAW,QAAQ,CAAA;AAClE,EAAA,IAAIc,UAAAA,CAAW,gBAAgB,CAAA,EAAG;AAChC,IAAA,MAAM,QAAQ,gBAAA,EAAkBd,eAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAC,CAAA;AAAA,EAC1D;AAGA,EAAA,MAAM,YAAA,GAAeA,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,WAAW,eAAe,CAAA;AACrE,EAAA,MAAM,QAAA,GAAY,MAAM,cAAA,CAA+B,YAAY,KAAM,EAAC;AAC1E,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,OAAA,IAAW,EAAC;AACrC,EAAA,IAAI,CAAC,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,EAAG,OAAA,CAAQ,KAAK,GAAG,CAAA;AAC5C,EAAA,MAAM,UAAU,YAAA,EAAc,EAAE,GAAG,QAAA,EAAU,SAAS,CAAA;AAEtD,EAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAS;AAC3C;AAIA,eAAsB,UAAU,UAAA,EAA8C;AAC5E,EAAA,MAAM,YAAA,GAAeA,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,WAAW,eAAe,CAAA;AACrE,EAAA,MAAM,OAAA,GAAUA,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,WAAW,UAAU,CAAA;AAC3D,EAAA,MAAM,GAAA,GAAM,UAAU,UAAU,CAAA;AAEhC,EAAA,IAAI,OAAA,GAAU,KAAA;AAGd,EAAA,MAAM,QAAA,GAAW,MAAM,cAAA,CAA+B,YAAY,CAAA;AAClE,EAAA,IAAI,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AAC/C,IAAA,MAAM,OAAO,QAAA,CAAS,OAAA,CAAQ,OAAO,CAACO,EAAAA,KAAMA,OAAM,GAAG,CAAA;AACrD,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,QAAA,CAAS,OAAA,CAAQ,MAAA,EAAQ;AAC3C,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,MAAM,OAAA,GAA0B,EAAE,GAAG,QAAA,EAAU,SAAS,IAAA,EAAK;AAC7D,MAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,OAAA,CAAQ,OAAA;AACtC,MAAA,MAAM,SAAA,CAAU,cAAc,OAAO,CAAA;AAAA,IACvC;AAAA,EACF;AAGA,EAAA,IAAIO,UAAAA,CAAW,GAAG,CAAA,EAAG;AACnB,IAAA,MAAMhB,GAAAA,CAAG,GAAG,GAAA,EAAK,EAAE,WAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AACjD,IAAA,OAAA,GAAU,IAAA;AAAA,EACZ;AAGA,EAAA,MAAM,GAAA,GAAM,MAAM,cAAA,CAA8B,OAAO,CAAA;AACvD,EAAA,IAAI,GAAA,EAAK,UAAA,IAAc,eAAA,IAAmB,GAAA,CAAI,UAAA,EAAY;AACxD,IAAA,OAAA,GAAU,IAAA;AACV,IAAA,MAAM,EAAE,CAAC,eAAe,GAAG,UAAU,GAAG,IAAA,KAAS,GAAA,CAAI,UAAA;AACrD,IAAA,MAAM,OAAA,GAAyB,EAAE,GAAG,GAAA,EAAK,YAAY,IAAA,EAAK;AAC1D,IAAA,IAAI,OAAO,IAAA,CAAK,IAAI,EAAE,MAAA,KAAW,CAAA,SAAU,OAAA,CAAQ,UAAA;AACnD,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,WAAW,CAAA,EAAG;AACrC,MAAA,MAAMA,GAAAA,CAAG,OAAO,OAAO,CAAA;AAAA,IACzB,CAAA,MAAO;AACL,MAAA,MAAM,SAAA,CAAU,SAAS,OAAO,CAAA;AAAA,IAClC;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,OAAA,EAAQ;AACnB;AAIA,eAAe,cACb,UAAA,EACmE;AACnE,EAAA,MAAM,GAAA,GAAM,UAAU,UAAU,CAAA;AAChC,EAAA,MAAM,WAAW,MAAM,cAAA;AAAA,IACrBE,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,SAAA,EAAW,eAAe;AAAA,GAClD;AACA,EAAA,IACEc,UAAAA,CAAWd,eAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,gBAAA,EAAkB,aAAa,CAAC,CAAA,IAC1D,QAAA,EAAU,OAAA,EAAS,QAAA,CAAS,GAAG,CAAA,EAC/B;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,UAAA,EAAY,GAAA,EAAI;AAAA,EAC7C;AAEA,EAAA,MAAM,GAAA,GAAM,MAAM,cAAA,CAA8BA,eAAAA,CAAK,KAAK,UAAA,EAAY,SAAA,EAAW,UAAU,CAAC,CAAA;AAC5F,EAAA,IAAI,GAAA,EAAK,UAAA,IAAc,eAAA,IAAmB,GAAA,CAAI,UAAA,EAAY;AACxD,IAAA,OAAO,EAAE,QAAQ,KAAA,EAAM;AAAA,EACzB;AACA,EAAA,OAAO,IAAA;AACT;AAEA,eAAsB,OAAO,UAAA,EAA2C;AACtE,EAAA,MAAM,QAAA,GAAW,MAAM,aAAA,CAAc,UAAU,CAAA;AAC/C,EAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAErE,EAAA,MAAM,YAAA,GAAeA,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,WAAW,eAAe,CAAA;AACrE,EAAA,MAAM,QAAA,GAAY,MAAM,cAAA,CAA+B,YAAY,KAAM,EAAC;AAE1E,EAAA,IAAI,QAAA,CAAS,WAAW,QAAA,EAAU;AAChC,IAAA,MAAM0B,SAAAA,GAAW,QAAA,CAAS,eAAA,IAAmB,EAAC;AAC9C,IAAA,MAAMC,QAAOD,SAAAA,CAAS,MAAA,CAAO,CAACnB,EAAAA,KAAMA,EAAAA,KAAM,SAAS,UAAU,CAAA;AAC7D,IAAA,IAAIoB,MAAK,MAAA,KAAWD,SAAAA,CAAS,QAAQ,OAAO,EAAE,SAAS,KAAA,EAAM;AAC7D,IAAA,MAAME,QAAAA,GAA0B,EAAE,GAAG,QAAA,EAAU,iBAAiBD,KAAAA,EAAK;AACrE,IAAA,IAAIA,KAAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAOC,QAAAA,CAAQ,eAAA;AACtC,IAAA,MAAM,SAAA,CAAU,cAAcA,QAAO,CAAA;AACrC,IAAA,OAAO,EAAE,SAAS,IAAA,EAAK;AAAA,EACzB;AAEA,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,sBAAA,IAA0B,EAAC;AACrD,EAAA,MAAM,OAAO,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,eAAe,CAAA;AACzD,EAAA,IAAI,KAAK,MAAA,KAAW,QAAA,CAAS,QAAQ,OAAO,EAAE,SAAS,KAAA,EAAM;AAC7D,EAAA,MAAM,OAAA,GAA0B,EAAE,GAAG,QAAA,EAAU,wBAAwB,IAAA,EAAK;AAC5E,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,OAAA,CAAQ,sBAAA;AACtC,EAAA,MAAM,SAAA,CAAU,cAAc,OAAO,CAAA;AACrC,EAAA,OAAO,EAAE,SAAS,IAAA,EAAK;AACzB;AAEA,eAAsB,QAAQ,UAAA,EAA2C;AACvE,EAAA,MAAM,QAAA,GAAW,MAAM,aAAA,CAAc,UAAU,CAAA;AAC/C,EAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAErE,EAAA,MAAM,YAAA,GAAe5B,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,WAAW,eAAe,CAAA;AACrE,EAAA,MAAM,QAAA,GAAY,MAAM,cAAA,CAA+B,YAAY,KAAM,EAAC;AAE1E,EAAA,IAAI,QAAA,CAAS,WAAW,QAAA,EAAU;AAChC,IAAA,MAAM6B,KAAAA,GAAO,QAAA,CAAS,eAAA,IAAmB,EAAC;AAC1C,IAAA,IAAIA,KAAAA,CAAK,SAAS,QAAA,CAAS,UAAoB,GAAG,OAAO,EAAE,SAAS,KAAA,EAAM;AAC1E,IAAA,MAAM,UAAU,YAAA,EAAc;AAAA,MAC5B,GAAG,QAAA;AAAA,MACH,eAAA,EAAiB,CAAC,GAAGA,KAAAA,EAAM,SAAS,UAAoB;AAAA,KACzD,CAAA;AACD,IAAA,OAAO,EAAE,SAAS,IAAA,EAAK;AAAA,EACzB;AAEA,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,sBAAA,IAA0B,EAAC;AACjD,EAAA,IAAI,KAAK,QAAA,CAAS,eAAe,GAAG,OAAO,EAAE,SAAS,KAAA,EAAM;AAC5D,EAAA,MAAM,UAAU,YAAA,EAAc;AAAA,IAC5B,GAAG,QAAA;AAAA,IACH,sBAAA,EAAwB,CAAC,GAAG,IAAA,EAAM,eAAe;AAAA,GAClD,CAAA;AACD,EAAA,OAAO,EAAE,SAAS,IAAA,EAAK;AACzB;AAIA,eAAsB,OAAO,UAAA,EAA4C;AACvE,EAAA,MAAM,YAAA,GAAe7B,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,WAAW,eAAe,CAAA;AACrE,EAAA,MAAM,OAAA,GAAUA,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,WAAW,UAAU,CAAA;AAC3D,EAAA,MAAM,GAAA,GAAM,UAAU,UAAU,CAAA;AAChC,EAAA,MAAM,QAAA,GAAW,MAAM,cAAA,CAA+B,YAAY,CAAA;AAClE,EAAA,MAAM,GAAA,GAAM,MAAM,cAAA,CAA8B,OAAO,CAAA;AAEvD,EAAA,MAAM,eAAA,GAAkB,CAAC,EACvBc,UAAAA,CAAWd,gBAAK,IAAA,CAAK,GAAA,EAAK,gBAAA,EAAkB,aAAa,CAAC,CAAA,IAAK,QAAA,EAAU,OAAA,EAAS,SAAS,GAAG,CAAA,CAAA;AAEhG,EAAA,MAAM,eAAe,CAAC,EAAE,GAAA,EAAK,UAAA,IAAc,mBAAmB,GAAA,CAAI,UAAA,CAAA;AAElE,EAAA,IAAI,CAAC,eAAA,IAAmB,CAAC,YAAA,EAAc;AACrC,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,aAAA;AAAA,MACT,SAAA,EAAW,IAAA;AAAA,MACX,OAAA,EAAS,KAAA;AAAA,MACT,MAAA,EAAQ,QAAA;AAAA,MACR,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AAEA,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,MAAM0B,SAAAA,GAAW,QAAA,EAAU,eAAA,EAAiB,QAAA,CAAS,GAAG,CAAA,IAAK,KAAA;AAC7D,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,aAAA;AAAA,MACT,SAAA,EAAW,KAAA;AAAA,MACX,OAAA,EAASA,YAAW,IAAA,GAAO,KAAA;AAAA,MAC3B,MAAA,EAAQ,QAAA;AAAA,MACR,QAAA,EAAU1B,eAAAA,CAAK,QAAA,CAAS,UAAA,EAAY,GAAG;AAAA,KACzC;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,QAAA,EAAU,sBAAA,EAAwB,QAAA,CAAS,eAAe,CAAA,IAAK,KAAA;AAChF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,aAAA;AAAA,IACT,SAAA,EAAW,KAAA;AAAA,IACX,OAAA,EAAS,WAAW,IAAA,GAAO,KAAA;AAAA,IAC3B,MAAA,EAAQ,KAAA;AAAA,IACR,QAAA,EAAUA,eAAAA,CAAK,QAAA,CAAS,UAAA,EAAY,OAAO;AAAA,GAC7C;AACF;ACvRA,IAAM8B,gBAAAA,GAAkB,kBAAA;AAaxB,SAAS,WAAW,UAAA,EAAmC;AACrD,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,QAAA;AAAA,IACT,IAAA,EAAM,CAAC,YAAY,CAAA;AAAA,IACnB,GAAA,EAAK,EAAE,kBAAA,EAAoB,UAAA;AAAW,GACxC;AACF;AAEA,eAAe,WAAWvB,EAAAA,EAAwC;AAChE,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAM,MAAMT,GAAAA,CAAG,QAAA,CAASS,EAAAA,EAAG,OAAO,CAAA;AAAA,EACpC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI;AACF,IAAA,OAAOwB,QAAU,GAAG,CAAA;AAAA,EACtB,SAAS,CAAA,EAAY;AACnB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,aAAA,EAAgBxB,EAAC,CAAA,EAAA,EAAK,CAAA,YAAa,QAAQ,CAAA,CAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA,sBAAA;AAAA,KAClE;AAAA,EACF;AACF;AAEA,eAAe,WAAA,CAAYA,IAAW,KAAA,EAAmC;AACvE,EAAA,MAAMT,GAAAA,CAAG,MAAME,eAAAA,CAAK,OAAA,CAAQO,EAAC,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAEnD,EAAA,MAAM,UAAmC,EAAC;AAC1C,EAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAC1C,IAAA,IAAI,MAAM,MAAA,EAAW;AACrB,IAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAA;AAAA,EACf;AACA,EAAA,MAAMT,GAAAA,CAAG,SAAA,CAAUS,EAAAA,EAAGyB,SAAA,CAAc,OAAO,CAAC,CAAA;AAC9C;AAEA,SAAS,WAAW,UAAA,EAA4B;AAC9C,EAAA,OAAOhC,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,QAAA,EAAU,aAAa,CAAA;AACtD;AAEA,eAAsBiC,SAAQ,UAAA,EAA4C;AACxE,EAAA,MAAM1B,EAAAA,GAAI,WAAW,UAAU,CAAA;AAC/B,EAAA,MAAM,GAAA,GAAO,MAAM,UAAA,CAAWA,EAAC,KAAM,EAAC;AACtC,EAAA,MAAM,IAAA,GAAO,WAAW,UAAU,CAAA;AAElC,EAAA,MAAM,UAAU,EAAE,GAAI,GAAA,CAAI,WAAA,IAAe,EAAC,EAAG;AAC7C,EAAA,MAAM,QAAA,GAAW,QAAQuB,gBAAe,CAAA;AACxC,EAAA,MAAM,OAAA,GAAU,YAAY,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA,KAAM,IAAA,CAAK,UAAU,IAAI,CAAA;AAC5E,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,QAAA,IAAY,CAAC,OAAA,EAAS;AACxB,IAAA,OAAA,GAAU,sBAAsBA,gBAAe,CAAA,UAAA,EAAa9B,gBAAK,QAAA,CAAS,UAAA,EAAYO,EAAC,CAAC,CAAA,CAAA;AAAA,EAC1F;AACA,EAAA,IAAI,SAAS,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,QAAQ,MAAA,EAAO;AAErD,EAAA,OAAA,CAAQuB,gBAAe,CAAA,GAAI,IAAA;AAC3B,EAAA,MAAM,YAAYvB,EAAAA,EAAG,EAAE,GAAG,GAAA,EAAK,WAAA,EAAa,SAAS,CAAA;AACrD,EAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,MAAA,EAAQ,QAAQ,OAAA,EAAQ;AAClD;AAEA,eAAsB2B,WAAU,UAAA,EAA8C;AAC5E,EAAA,MAAM3B,EAAAA,GAAI,WAAW,UAAU,CAAA;AAC/B,EAAA,MAAM,GAAA,GAAM,MAAM,UAAA,CAAWA,EAAC,CAAA;AAC9B,EAAA,IAAI,CAAC,GAAA,EAAK,WAAA,IAAe,EAAEuB,gBAAAA,IAAmB,IAAI,WAAA,CAAA,EAAc;AAC9D,IAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,EAC1B;AACA,EAAA,MAAM,EAAE,CAACA,gBAAe,GAAG,UAAU,GAAG,IAAA,KAAS,GAAA,CAAI,WAAA;AACrD,EAAA,MAAM,OAAA,GAAuB,EAAE,GAAG,GAAA,EAAK,aAAa,IAAA,EAAK;AACzD,EAAA,IAAI,OAAO,IAAA,CAAK,IAAI,EAAE,MAAA,KAAW,CAAA,SAAU,OAAA,CAAQ,WAAA;AAEnD,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,WAAW,CAAA,EAAG;AACrC,IAAA,MAAMhC,GAAAA,CAAG,OAAOS,EAAC,CAAA;AAAA,EACnB,CAAA,MAAO;AACL,IAAA,MAAM,WAAA,CAAYA,IAAG,OAAO,CAAA;AAAA,EAC9B;AACA,EAAA,OAAO,EAAE,SAAS,IAAA,EAAK;AACzB;AAEA,eAAsBE,QAAO,UAAA,EAA4C;AACvE,EAAA,MAAMF,EAAAA,GAAI,WAAW,UAAU,CAAA;AAC/B,EAAA,MAAM,GAAA,GAAM,MAAM,UAAA,CAAWA,EAAC,CAAA;AAC9B,EAAA,MAAM,YAAY,CAAC,EAAE,GAAA,EAAK,WAAA,IAAeuB,oBAAmB,GAAA,CAAI,WAAA,CAAA;AAEhE,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,OAAA;AAAA,MACT,SAAA,EAAW,IAAA;AAAA,MACX,OAAA,EAAS,KAAA;AAAA,MACT,MAAA,EAAQ,QAAA;AAAA,MACR,QAAA,EAAU;AAAA,KACZ;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,OAAA;AAAA,IACT,SAAA,EAAW,KAAA;AAAA,IACX,OAAA,EAAS,KAAA;AAAA,IACT,MAAA,EAAQ,KAAA;AAAA,IACR,QAAA,EAAU9B,eAAAA,CAAK,QAAA,CAAS,UAAA,EAAYO,EAAC;AAAA,GACvC;AACF;ACvGA,eAAsB0B,SAAQ,UAAA,EAA4C;AACxE,EAAA,MAAM,MAAA,GAASjC,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,QAAQ,YAAY,CAAA;AACzD,EAAA,MAAM,OAAA,GAAUA,eAAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,WAAW,CAAA;AAC7C,EAAA,MAAMF,IAAG,KAAA,CAAM,MAAA,EAAQ,EAAE,SAAA,EAAW,MAAM,CAAA;AAE1C,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,MAAM,OAAO,8BAAqC,CAAA;AAC9E,EAAA,MAAM,MAAA,GAAS,IAAI,eAAA,CAAgB,EAAE,YAAY,CAAA;AACjD,EAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,uBAAA,EAAwB;AAErD,EAAA,IAAI,OAAA,GAAyB,IAAA;AAC7B,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,MAAMA,GAAAA,CAAG,QAAA,CAAS,OAAA,EAAS,OAAO,CAAA;AAAA,EAC9C,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,IAAI,YAAY,OAAA,EAAS,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,QAAQ,WAAA,EAAY;AACtE,EAAA,MAAMA,GAAAA,CAAG,SAAA,CAAU,OAAA,EAAS,OAAO,CAAA;AACnC,EAAA,OAAO,EAAE,OAAA,EAAS,IAAA,EAAM,MAAA,EAAQ,WAAA,EAAY;AAC9C;AAEA,eAAsBoC,WAAU,UAAA,EAA8C;AAC5E,EAAA,MAAM,UAAUlC,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,MAAA,EAAQ,cAAc,WAAW,CAAA;AACvE,EAAA,IAAI;AACF,IAAA,MAAMF,GAAAA,CAAG,OAAO,OAAO,CAAA;AACvB,IAAA,OAAO,EAAE,SAAS,IAAA,EAAK;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,SAAS,KAAA,EAAM;AAAA,EAC1B;AACF;AAEA,eAAsBW,QAAO,UAAA,EAA4C;AACvE,EAAA,MAAM,UAAUT,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,MAAA,EAAQ,cAAc,WAAW,CAAA;AACvE,EAAA,IAAIc,UAAAA,CAAW,OAAO,CAAA,EAAG;AACvB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,SAAA,EAAW,KAAA;AAAA,MACX,OAAA,EAAS,KAAA;AAAA,MACT,MAAA,EAAQ,WAAA;AAAA,MACR,QAAA,EAAUd,eAAAA,CAAK,QAAA,CAAS,UAAA,EAAY,OAAO;AAAA,KAC7C;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,KAAA;AAAA,IACT,SAAA,EAAW,IAAA;AAAA,IACX,OAAA,EAAS,KAAA;AAAA,IACT,MAAA,EAAQ,QAAA;AAAA,IACR,QAAA,EAAU;AAAA,GACZ;AACF;;;ACpDA,IAAM,YAAA,GAAuC,CAAC,aAAA,EAAe,KAAA,EAAO,OAAO,CAAA;AAC3E,IAAM,gBAAA,GAA2C,CAAC,aAAa,CAAA;AAE/D,SAAS,cAAc,MAAA,EAA+B;AACpD,EAAA,IAAI,MAAA,KAAW,KAAA,EAAO,OAAO,CAAC,GAAG,YAAY,CAAA;AAC7C,EAAA,IAAI,MAAA,KAAW,iBAAiB,MAAA,KAAW,KAAA,IAAS,WAAW,OAAA,EAAS,OAAO,CAAC,MAAM,CAAA;AACtF,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,gBAAA,EAAmB,MAAM,CAAA,4CAAA,CAA8C,CAAA;AACzF;AASA,eAAe,WAAW,IAAA,EAAmC;AAC3D,EAAA,MAAM,UAAA,GAAaA,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,CAAK,MAAM,CAAA;AACzC,EAAA,IAAI,QAAA,GAAW,CAAA;AAEf,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,aAAa,CAAA,EAAG;AACnC,IAAA,IAAI;AACF,MAAA,MAAM,CAAA,GAAI,MAAiB,OAAA,CAAQ,UAAA,EAAY,EAAE,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA;AAClE,MAAA,IAAI,CAAA,CAAE,OAAA,EAAS,OAAA,CAAQ,CAAA,CAAE,OAAO,CAAA;AAChC,MAAA,IAAI,CAAA,CAAE,WAAW,QAAA,EAAU;AACzB,QAAA,KAAA;AAAA,UACE,CAAA,UAAA,EAAa,EAAE,GAAA,CAAI,yBAAyB,CAAC,CAAA,sBAAA,EAAyB,CAAA,CAAE,GAAA,CAAI,uBAAuB,CAAC,CAAA;AAAA,SACtG;AAAA,MACF,CAAA,MAAA,IAAW,EAAE,OAAA,EAAS;AACpB,QAAA,KAAA,CAAM,SAAS,CAAA,CAAE,GAAA,CAAI,kBAAkB,CAAC,CAAA,EAAA,EAAK,gBAAgB,CAAA,CAAA,CAAG,CAAA;AAAA,MAClE,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,CAAA,oCAAA,CAAsC,CAAA;AAAA,MAChD;AACA,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,QAAG,CAAC,CAAA,2CAAA,CAA6C,CAAA;AAAA,IAC1E,SAAS,CAAA,EAAY;AACnB,MAAA,MAAA,CAAO,CAAA,qBAAA,EAAwB,aAAa,KAAA,GAAQ,CAAA,CAAE,UAAU,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AAC3E,MAAA,QAAA,GAAW,CAAA;AAAA,IACb;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,EAAG;AAC3B,IAAA,IAAI;AACF,MAAA,MAAM,CAAA,GAAI,MAAUiC,QAAAA,CAAQ,UAAU,CAAA;AACtC,MAAA,IAAI,EAAE,OAAA,EAAS;AACb,QAAA,KAAA,CAAM,CAAA,MAAA,EAAS,EAAE,GAAA,CAAI,2BAA2B,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,MACnE,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,CAAA,wBAAA,EAA2B,CAAA,CAAE,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,MAChD;AACA,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,QAAG,CAAC,CAAA,+CAAA,CAAiD,CAAA;AAAA,IAC9E,SAAS,CAAA,EAAY;AACnB,MAAA,MAAA,CAAO,CAAA,aAAA,EAAgB,aAAa,KAAA,GAAQ,CAAA,CAAE,UAAU,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AACnE,MAAA,QAAA,GAAW,CAAA;AAAA,IACb;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,CAAA,GAAI,MAAYA,QAAAA,CAAQ,UAAU,CAAA;AACxC,MAAA,IAAI,CAAA,CAAE,OAAA,EAAS,OAAA,CAAQ,CAAA,CAAE,OAAO,CAAA;AAChC,MAAA,IAAI,EAAE,OAAA,EAAS;AACb,QAAA,KAAA,CAAM,SAAS,CAAA,CAAE,GAAA,CAAI,oBAAoB,CAAC,CAAA,EAAA,EAAK,gBAAgB,CAAA,CAAA,CAAG,CAAA;AAAA,MACpE,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,CAAA,wBAAA,CAA0B,CAAA;AAAA,MACpC;AACA,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,QAAG,CAAC,CAAA,yCAAA,CAA2C,CAAA;AAAA,IACxE,SAAS,CAAA,EAAY;AACnB,MAAA,MAAA,CAAO,CAAA,eAAA,EAAkB,aAAa,KAAA,GAAQ,CAAA,CAAE,UAAU,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AACrE,MAAA,QAAA,GAAW,CAAA;AAAA,IACb;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,KAAa,CAAA,EAAG,KAAA,CAAM,mBAAmB,CAAA;AAC7C,EAAA,OAAO,QAAA;AACT;AAEA,eAAe,aAAa,IAAA,EAAmC;AAC7D,EAAA,MAAM,UAAA,GAAajC,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,CAAK,MAAM,CAAA;AACzC,EAAA,IAAI,QAAA,GAAW,CAAA;AAEf,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,aAAa,CAAA,EAAG;AACnC,IAAA,IAAI;AACF,MAAA,MAAM,CAAA,GAAI,MAAiB,SAAA,CAAU,UAAU,CAAA;AAC/C,MAAA,IAAI,CAAA,CAAE,SAAS,KAAA,CAAM,CAAA,4BAAA,EAA+B,EAAE,GAAA,CAAI,UAAU,CAAC,CAAA,CAAE,CAAA;AAAA,mBAC1D,CAAA,0BAAA,CAA4B,CAAA;AAAA,IAC3C,SAAS,CAAA,EAAY;AACnB,MAAA,MAAA,CAAO,CAAA,uBAAA,EAA0B,aAAa,KAAA,GAAQ,CAAA,CAAE,UAAU,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AAC7E,MAAA,QAAA,GAAW,CAAA;AAAA,IACb;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,KAAK,CAAA,EAAG;AAC3B,IAAA,IAAI;AACF,MAAA,MAAM,CAAA,GAAI,MAAUkC,UAAAA,CAAU,UAAU,CAAA;AACxC,MAAA,IAAI,CAAA,CAAE,SAAS,KAAA,CAAM,CAAA,QAAA,EAAW,EAAE,GAAA,CAAI,2BAA2B,CAAC,CAAA,CAAE,CAAA;AAAA,mBACvD,CAAA,kBAAA,CAAoB,CAAA;AAAA,IACnC,SAAS,CAAA,EAAY;AACnB,MAAA,MAAA,CAAO,CAAA,eAAA,EAAkB,aAAa,KAAA,GAAQ,CAAA,CAAE,UAAU,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AACrE,MAAA,QAAA,GAAW,CAAA;AAAA,IACb;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,CAAA,GAAI,MAAYA,UAAAA,CAAU,UAAU,CAAA;AAC1C,MAAA,IAAI,CAAA,CAAE,SAAS,KAAA,CAAM,CAAA,0BAAA,EAA6B,EAAE,GAAA,CAAI,oBAAoB,CAAC,CAAA,CAAE,CAAA;AAAA,mBAClE,CAAA,oBAAA,CAAsB,CAAA;AAAA,IACrC,SAAS,CAAA,EAAY;AACnB,MAAA,MAAA,CAAO,CAAA,iBAAA,EAAoB,aAAa,KAAA,GAAQ,CAAA,CAAE,UAAU,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AACvE,MAAA,QAAA,GAAW,CAAA;AAAA,IACb;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,KAAa,CAAA,EAAG,KAAA,CAAM,qBAAqB,CAAA;AAC/C,EAAA,OAAO,QAAA;AACT;AAEA,eAAe,SAAA,CAAU,MAAkB,MAAA,EAA+C;AACxF,EAAA,MAAM,UAAA,GAAalC,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,EAAA,MAAM,YAAA,GAAe,KAAK,MAAA,KAAW,KAAA;AACrC,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,CAAK,MAAM,CAAA;AAGzC,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,MAAM,WAAA,GAAc,QAAQ,MAAA,CAAO,CAAC,MAAM,CAAC,gBAAA,CAAiB,QAAA,CAAS,CAAC,CAAC,CAAA;AACvE,IAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,MAAA,MAAA;AAAA,QACE,GAAG,MAAM,CAAA,wCAAA,EAA2C,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,sBAAA;AAAA,OAC5E;AACA,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,IAAI,QAAA,GAAW,CAAA;AAEf,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,IAAI,CAAC,gBAAA,CAAiB,QAAA,CAAS,CAAC,CAAA,EAAG;AACjC,MAAA,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAA,EAAA,EAAK,MAAM,CAAA,wBAAA,CAA0B,CAAA;AACjD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAM,aAAA,EAAe;AACvB,MAAA,IAAI;AACF,QAAA,MAAM,CAAA,GACJ,WAAW,QAAA,GACP,MAAiB,OAAO,UAAU,CAAA,GAClC,MAAiB,OAAA,CAAQ,UAAU,CAAA;AACzC,QAAA,IAAI,EAAE,OAAA,EAAS;AACb,UAAA,KAAA,CAAM,CAAA,aAAA,EAAgB,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,QACjC,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,CAAA,qBAAA,EAAwB,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,QAC3C;AAAA,MACF,SAAS,CAAA,EAAY;AACnB,QAAA,MAAA,CAAO,CAAA,YAAA,EAAe,MAAM,CAAA,EAAA,EAAK,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AAC7E,QAAA,QAAA,GAAW,CAAA;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,QAAA;AACT;AAEA,eAAe,UAAU,IAAA,EAAmC;AAC1D,EAAA,MAAM,UAAA,GAAaA,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,EAAA,MAAM,OAAA,GAAU,aAAA,CAAc,IAAA,CAAK,MAAM,CAAA;AACzC,EAAA,MAAM,OAAwB,EAAC;AAC/B,EAAA,IAAI,QAAA,GAAW,CAAA;AAEf,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,IAAI;AACF,MAAA,IAAI,MAAM,aAAA,EAAe,IAAA,CAAK,KAAK,MAAiB,MAAA,CAAO,UAAU,CAAC,CAAA;AAAA,WAAA,IAC7D,MAAM,KAAA,EAAO,IAAA,CAAK,KAAK,MAAUS,OAAAA,CAAO,UAAU,CAAC,CAAA;AAAA,WACvD,IAAA,CAAK,IAAA,CAAK,MAAYA,OAAAA,CAAO,UAAU,CAAC,CAAA;AAAA,IAC/C,SAAS,CAAA,EAAY;AACnB,MAAA,MAAA,CAAO,CAAA,EAAG,CAAC,CAAA,SAAA,EAAY,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AACnE,MAAA,QAAA,GAAW,CAAA;AAAA,IACb;AAAA,EACF;AAEA,EAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,EAAA,OAAO,QAAA;AACT;AAEA,SAAS,iBAAiB,IAAA,EAA6B;AACrD,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AAEvB,EAAA,MAAM,IAAA,GAA4D;AAAA,IAChE,EAAE,GAAA,EAAK,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAU;AAAA,IACpC,EAAE,GAAA,EAAK,WAAA,EAAa,MAAA,EAAQ,WAAA,EAAY;AAAA,IACxC,EAAE,GAAA,EAAK,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAU;AAAA,IACpC,EAAE,GAAA,EAAK,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAS;AAAA,IAClC,EAAE,GAAA,EAAK,UAAA,EAAY,MAAA,EAAQ,UAAA;AAAW,GACxC;AAEA,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA;AAAA,IAAI,CAAC,MACvB,IAAA,CAAK,GAAA,CAAI,EAAE,MAAA,CAAO,MAAA,EAAQ,GAAG,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,EAAE,CAAA,CAAE,GAAG,KAAK,EAAE,CAAA,CAAE,MAAM,CAAC;AAAA,GAC7E;AAEA,EAAA,MAAM,SAAS,CAAC,KAAA,KACd,MAAM,GAAA,CAAI,CAACF,IAAG,CAAA,KAAMA,EAAAA,CAAE,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,IAAKA,EAAAA,CAAE,MAAM,CAAC,CAAA,CAAE,KAAK,IAAI,CAAA;AAEhE,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,OAAA,CAAQ,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,CAAC,CAAC,CAAC,CAAA,CAAE,CAAA;AAC/D,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,CAAA,CAAE,CAAA,CAAE,GAAG,CAAA,IAAK,EAAE,CAAC,CAAC,CAAC,CAAA,CAAE,CAAA;AAClE,IAAA,IAAI,CAAA,CAAE,MAAA,EAAQ,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,EAAE,GAAA,CAAI,CAAA,CAAE,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,EACpD;AACA,EAAA,OAAA,CAAQ,GAAA,EAAI;AACd;AAEA,IAAM,gBAAA,GAAmB,wBAAA;AAIzB,IAAM,WAAA,GAAc,CAAC,eAAA,EAAiB,aAAA,EAAe,oBAAoB,CAAA;AAezE,eAAe,QAAQ,KAAA,EAAiC;AAEtD,EAAA,MAAM,EAAE,QAAA,EAAU,UAAA,EAAY,kBAAiB,GAAI,MAAM,OACvD,oBACF,CAAA;AACA,EAAA,gBAAA;AAAA,IACE,IAAI,QAAA,CAAS;AAAA,MACX,SAAA,EAAW,QAAQ,KAAK,CAAA,CAAA;AAAA,MACxB,KAAA,EAAO,MAAA;AAAA,MACP,KAAA,EAAO,CAAC,IAAI,UAAA,CAAW,EAAE,MAAA,EAAQ,QAAA,EAAU,CAAC;AAAA,KAC7C;AAAA,GACH;AAEA,EAAA,MAAM,EAAE,eAAA,EAAiB,WAAA,EAAa,mBAAkB,GAAI,MAAM,OAChE,8BACF,CAAA;AACA,EAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,CAAC,oBAAoB,CAAC,CAAA;AAE3D,EAAA,IAAI,UAAU,eAAA,EAAiB;AAC7B,IAAA,MAAM,SAAS,IAAI,eAAA,CAAgB,EAAE,UAAA,EAAY,SAAA,EAAW,MAAM,CAAA;AAClE,IAAA,MAAM,OAAO,IAAA,EAAK;AAClB,IAAA,MAAM,iBAAA,GAAoB,OAAO,wBAAA,EAAyB;AAC1D,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,MACb,CAAA,EAAG,KAAK,SAAA,CAAU;AAAA,QAChB,kBAAA,EAAoB,EAAE,aAAA,EAAe,cAAA,EAAgB,iBAAA;AAAkB,OACxE,CAAC;AAAA;AAAA,KACJ;AACA,IAAA,MAAM,OAAO,QAAA,EAAS;AACtB,IAAA;AAAA,EACF;AAEA,EAAA,IAAI,UAAU,aAAA,EAAe;AAC3B,IAAA,MAAM,SAAS,IAAI,eAAA,CAAgB,EAAE,UAAA,EAAY,SAAA,EAAW,MAAM,CAAA;AAClE,IAAA,MAAM,OAAO,IAAA,EAAK;AAClB,IAAA,MAAM,MAAA,CAAO,MAAM,KAAA,EAAM;AACzB,IAAA,MAAM,OAAO,QAAA,EAAS;AACtB,IAAA;AAAA,EACF;AAGA,EAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAYP,eAAAA,CAAK,KAAK,UAAA,EAAY,SAAA,EAAW,mBAAmB,CAAC,CAAA;AACnF,EAAA,MAAM,MAAM,IAAA,EAAK;AACjB,EAAA,MAAMS,OAAAA,GAAS,KAAA,CAAM,GAAA,CAAI,kBAAkB,CAAA;AAC3C,EAAA,IAAIA,OAAAA,IAAU,OAAOA,OAAAA,KAAW,QAAA,IAAY,OAAO,IAAA,CAAKA,OAAgB,CAAA,CAAE,MAAA,GAAS,CAAA,EAAG;AACpF,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,MACb,CAAA,EAAG,KAAK,SAAA,CAAU;AAAA,QAChB,kBAAA,EAAoB;AAAA,UAClB,aAAA,EAAe,kBAAA;AAAA,UACf,iBAAA,EAAmB,CAAA,yBAAA,EAA4B,IAAA,CAAK,SAAA,CAAUA,OAAM,CAAC,CAAA;AAAA;AACvE,OACD,CAAC;AAAA;AAAA,KACJ;AAAA,EACF;AACF;AAeO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,MAAM,GAAA,GAAM,IAAIP,OAAAA,CAAQ,QAAQ,CAAA,CAAE,WAAA;AAAA,IAChC;AAAA,GACF;AAEA,EAAA,GAAA,CACG,QAAQ,SAAS,CAAA,CACjB,WAAA,CAAY,iCAAiC,EAC7C,MAAA,CAAO,iBAAA,EAAmB,yCAAA,EAA2C,KAAK,EAC1E,MAAA,CAAO,sBAAA,EAAwB,qBAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,MAAA;AAAA,IACC,QAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA,CAAO,OAAO,IAAA,KAAqB;AAClC,IAAA,OAAA,CAAQ,QAAA,GAAW,MAAM,UAAA,CAAW,IAAI,CAAA;AAAA,EAC1C,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,WAAW,CAAA,CACnB,WAAA,CAAY,mCAAmC,CAAA,CAC/C,MAAA,CAAO,mBAAmB,yCAAA,EAA2C,KAAK,EAC1E,MAAA,CAAO,sBAAA,EAAwB,qBAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,OAAO,IAAA,KAAqB;AAClC,IAAA,OAAA,CAAQ,QAAA,GAAW,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,EAC5C,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,+CAA+C,CAAA,CAC3D,MAAA,CAAO,mBAAmB,2BAAA,EAA6B,aAAa,EACpE,MAAA,CAAO,sBAAA,EAAwB,qBAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,OAAO,IAAA,KAAqB;AAClC,IAAA,OAAA,CAAQ,QAAA,GAAW,MAAM,SAAA,CAAU,IAAA,EAAM,QAAQ,CAAA;AAAA,EACnD,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,SAAS,CAAA,CACjB,WAAA,CAAY,gDAAgD,CAAA,CAC5D,MAAA,CAAO,mBAAmB,2BAAA,EAA6B,aAAa,EACpE,MAAA,CAAO,sBAAA,EAAwB,qBAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,OAAO,IAAA,KAAqB;AAClC,IAAA,OAAA,CAAQ,QAAA,GAAW,MAAM,SAAA,CAAU,IAAA,EAAM,SAAS,CAAA;AAAA,EACpD,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,QAAQ,CAAA,CAChB,WAAA,CAAY,8CAA8C,CAAA,CAC1D,MAAA,CAAO,mBAAmB,yCAAA,EAA2C,KAAK,EAC1E,MAAA,CAAO,sBAAA,EAAwB,qBAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,OAAO,IAAA,KAAqB;AAClC,IAAA,OAAA,CAAQ,QAAA,GAAW,MAAM,SAAA,CAAU,IAAI,CAAA;AAAA,EACzC,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,cAAc,CAAA,CACtB,WAAA;AAAA,IACC;AAAA,GACF,CACC,MAAA,CAAO,OAAO,KAAA,KAAkB;AAC/B,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,WAAA,CAAY,QAAA,CAAS,KAAkB,CAAA,EAAG;AAC7C,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,UACb,+BAA+B,KAAK,CAAA,aAAA,EAAgB,WAAA,CAAY,IAAA,CAAK,KAAK,CAAC,CAAA;AAAA;AAAA,SAC7E;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,QAAQ,KAAkB,CAAA;AAAA,MAClC;AAAA,IACF,SAAS,GAAA,EAAK;AAEZ,MAAA,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,QACb,CAAA,YAAA,EAAe,KAAK,CAAA,UAAA,EAAa,GAAA,YAAe,QAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC;AAAA;AAAA,OACnF;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AAEH,EAAA,GAAA,CAAI,MAAA,CAAO,MAAM,GAAA,CAAI,IAAA,EAAM,CAAA;AAC3B,EAAA,OAAO,GAAA;AACT;AC3WO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,MAAM,MAAM,IAAIA,OAAAA,CAAQ,QAAQ,CAAA,CAAE,YAAY,yCAAyC,CAAA;AAIvF,EAAA,GAAA,CACG,QAAQ,aAAa,CAAA,CACrB,WAAA,CAAY,kCAAkC,EAC9C,MAAA,CAAO,cAAA,EAAgB,kBAAA,EAAoB,OAAA,CAAQ,KAAK,CAAA,CACxD,MAAA,CAAO,OAAO,MAA0B,IAAA,KAA0B;AACjE,IAAA,MAAM,aAAa,IAAA,IAAQ,WAAA;AAC3B,IAAA,MAAM,QAAA,GAAW,GAAG,UAAU,CAAA,YAAA,CAAA;AAC9B,IAAA,MAAM,OAAA,GAAUF,gBAAK,IAAA,CAAKA,eAAAA,CAAK,QAAQ,IAAA,CAAK,GAAG,GAAG,QAAQ,CAAA;AAE1D,IAAA,IAAIc,UAAAA,CAAW,OAAO,CAAA,EAAG;AACvB,MAAA,MAAA,CAAO,CAAA,qBAAA,EAAwB,OAAO,CAAA,CAAE,CAAA;AACxC,MAAA,OAAA,CAAQ,sDAAsD,CAAA;AAC9D,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,MAAM,QAAA,GAAW,uBAAuB,UAAU,CAAA;AAClD,IAAA,aAAA,CAAc,OAAA,EAAS,UAAU,OAAO,CAAA;AACxC,IAAA,KAAA,CAAM,CAAA,QAAA,EAAW,CAAA,CAAE,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAE,CAAA;AACpC,IAAA,OAAA,CAAQ,CAAA,MAAA,EAAS,OAAO,CAAA,CAAE,CAAA;AAC1B,IAAA,OAAA,CAAQ,gEAAgE,CAAA;AACxE,IAAA,OAAA,CAAQ,CAAA,yBAAA,EAA4B,QAAQ,CAAA,CAAE,CAAA;AAAA,EAChD,CAAC,CAAA;AAIH,EAAA,GAAA,CACG,OAAA,CAAQ,iBAAiB,CAAA,CACzB,WAAA,CAAY,+DAA+D,CAAA,CAC3E,MAAA,CAAO,OAAO,QAAA,KAAqB;AAClC,IAAA,MAAM,QAAA,GAAWd,eAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AACtC,IAAA,IAAI,CAACc,UAAAA,CAAW,QAAQ,CAAA,EAAG;AACzB,MAAA,MAAA,CAAO,CAAA,gBAAA,EAAmB,QAAQ,CAAA,CAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AAG9C,IAAA,MAAM,EAAE,eAAA,EAAiB,sBAAA,EAAuB,GAAI,MAAM,OACxD,qBACF,CAAA;AAEA,IAAA,MAAM,WAAA,GAAc,gBAAgB,OAAO,CAAA;AAC3C,IAAA,IAAI,CAAC,YAAY,EAAA,EAAI;AACnB,MAAA,MAAA,CAAO,0CAA0C,CAAA;AACjD,MAAA,KAAA,MAAW,GAAA,IAAO,YAAY,MAAA,EAAQ;AACpC,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,QAAG,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,CAAA;AAAA,MACtC;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAIA,IAAA,IAAI,CAAC,YAAY,MAAA,EAAQ;AACvB,MAAA,MAAA,CAAO,uDAAuD,CAAA;AAC9D,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,MAAM,SAAS,WAAA,CAAY,MAAA;AAC3B,IAAA,IAAI,WAAA,GAAc,KAAA;AAMlB,IAAA,MAAM,UAAA,GAAa,uBAAuB,MAAM,CAAA;AAChD,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,OAAA,CAAQ,CAAA,oBAAA,EAAuB,UAAA,CAAW,MAAM,CAAA,gCAAA,CAAkC,CAAA;AAAA,IACpF;AAMA,IAAA,MAAM,EAAE,YAAA,EAAa,GAAI,MAAM,OAAO,uBAA8B,CAAA;AAGpE,IAAA,MAAM,SAAA,GAAYd,eAAAA,CAAK,QAAA,CAAS,QAAA,EAAU,cAAc,CAAA;AACxD,IAAA,MAAM,QAA4D,EAAC;AACnE,IAAA,KAAA,MAAW,IAAA,IAAQ,OAAO,KAAA,EAAO;AAC/B,MAAA,IAAI,KAAK,GAAA,EAAK;AACZ,QAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,SAAA,EAAW,IAAI,IAAA,CAAK,GAAA,EAAK,KAAA,EAAO,aAAA,EAAe,CAAA;AAAA,MACpE;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,MAAA,MAAM,WAAA,GAAc,aAAa,KAAK,CAAA;AACtC,MAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AACxB,QAAA,MAAA,CAAO,sCAAsC,CAAA;AAC7C,QAAA,IAAI,YAAY,SAAA,EAAW;AACzB,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,QAAG,CAAC,CAAA,CAAA,EAAI,WAAA,CAAY,SAAA,CAAU,IAAA,CAAK,UAAK,CAAC,CAAA,CAAE,CAAA;AAAA,QACpE;AACA,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF;AAGA,IAAA,MAAM,eAAA,GAAkB,OAAO,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAc,IAAA,CAAK,YAAA,IAAgB,EAAE,CAAA;AACnF,IAAA,IAAI,eAAA,CAAgB,SAAS,CAAA,EAAG;AAC9B,MAAA,MAAM,EAAE,mBAAA,EAAoB,GAAI,MAAM,OAAO,qBAA4B,CAAA;AACzE,MAAA,MAAM,iBAA2D,EAAC;AAClE,MAAA,KAAA,MAAW,MAAM,eAAA,EAAiB;AAEhC,QAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,EAAA,EAAI,EAAA,CAAG,OAAO,CAAA;AACjD,QAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AACjB,UAAA,cAAA,CAAe,IAAA,CAAK,EAAE,GAAA,EAAK,EAAA,CAAG,KAAK,MAAA,EAAQ,MAAA,CAAO,QAAQ,CAAA;AAAA,QAC5D;AAAA,MACF;AACA,MAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,QAAA,WAAA,GAAc,IAAA;AACd,QAAA,OAAA,CAAQ,qBAAqB,CAAA;AAC7B,QAAA,KAAA,MAAW,KAAK,cAAA,EAAgB;AAC9B,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAG,KAAK,CAAA,CAAE,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,QACjE;AAAA,MACF;AAAA,IACF;AAGA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,OAAA,CAAQ,qBAAqB,CAAC,CAAA;AAC5C,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,CAAA;AAC7B,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,KAAA,CAAM,MAAM,CAAC,CAAA,UAAA,EAAa,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAC1D,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,SAAS,CAAC,CAAA,OAAA,EAAU,MAAA,CAAO,OAAA,IAAW,aAAa,CAAA,CAAE,CAAA;AAC9E,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,OAAO,CAAC,CAAA,SAAA,EAAY,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,CAAE,CAAA;AAClE,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,QAAQ,CAAC,CAAA,SAAA,EAAY,MAAA,CAAO,MAAA,EAAQ,MAAA,IAAU,CAAC,CAAA,CAAE,CAAA;AAC1E,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,KAAA,CAAM,cAAc,CAAC,CAAA,EAAA,EAAK,eAAA,CAAgB,MAAM,CAAA,CAAE,CAAA;AACrE,IAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,OAAA,CAAQ,iCAAiC,CAAA;AAAA,IAC3C,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,iBAAiB,CAAA;AAAA,IACzB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;AAIA,SAAS,uBAAuB,IAAA,EAAsB;AACpD,EAAA,OAAO,KAAK,IAAI,CAAA;AAAA;AAAA;;AAAA,OAAA,EAIT,IAAI,CAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA;AA2Bb;ACzLA,IAAM,YAAA,GAAe,uCAAA;AAqBd,SAAS,wBAAwB,MAAA,EAAkD;AACxF,EAAA,OACE,OAAQ,QAAgE,kBAAA,KACxE,UAAA;AAEJ;AAwCA,eAAsB,qBAAA,CACpB,KACA,IAAA,EACmC;AACnC,EAAA,MAAM,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,YAAY,CAAA;AAChC,EAAA,IAAI,CAAC,CAAA,EAAG;AACN,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,wBAAwB,GAAG,CAAA,0EAAA;AAAA,KAC7B;AAAA,EACF;AACA,EAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,OAAA,CAAQ,mBAAmB,GAAG,CAAA;AAI1D,EAAA,MAAM,eAAe,CAAC,CAAA,KAAsB,CAAA,CAAE,OAAA,CAAQ,MAAM,EAAE,CAAA;AAC9D,EAAA,IAAI,aAAa,QAAA,CAAS,GAAG,CAAA,KAAM,YAAA,CAAa,GAAG,CAAA,EAAG;AACpD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,sCAAA,EAAyC,GAAG,CAAA,2CAAA,EAA8C,QAAA,CAAS,GAAG,CAAA,CAAA;AAAA,KACxG;AAAA,EACF;AACA,EAAA,MAAM,EAAE,WAAA,EAAY,GAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAQ,QAAQ,CAAA;AAC3D,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,SAAA,EAAW,SAAS,MAAA,CAAO,SAAA;AAAA,IAC3B,SAAA,EAAW,SAAS,KAAA,CAAM;AAAA,GAC5B;AACF;AAoBO,SAAS,kBAAA,GAA8B;AAC5C,EAAA,OAAO,IAAIE,OAAAA,CAAQ,SAAS,CAAA,CACzB,WAAA;AAAA,IACC;AAAA,GACF,CACC,QAAA,CAAS,OAAA,EAAS,sEAAsE,CAAA,CACxF,OAAO,UAAA,EAAY,wDAAmD,CAAA,CACtE,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,QAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,kBAAA,EAAoB,iBAAA,EAAmB,aAAa,CAAA,CAC3D,MAAA,CAAO,OAAO,GAAA,EAAyB,IAAA,KAAS;AAE/C,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,IAAI,CAAC,YAAA,CAAa,IAAA,CAAK,GAAG,CAAA,EAAG;AAC3B,QAAA,MAAA;AAAA,UACE,wBAAwB,GAAG,CAAA,0EAAA;AAAA,SAC7B;AACA,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,MAAMI,WAAY6B,EAAA,CAAA,OAAA,EAAQ;AAC1B,MAAA7B,QAAAA,CAAQ,KAAA,CAAM,CAAA,WAAA,EAAc,GAAG,CAAA,CAAE,CAAA;AACjC,MAAA,IAAI;AACF,QAAA,MAAM,EAAE,mBAAA8B,kBAAAA,EAAmB,WAAA,EAAAC,cAAY,GAAI,MAAM,OAAO,6BAAoB,CAAA;AAC5E,QAAA,MAAM,OAAA,GAAU,MAAMD,kBAAAA,CAAkB,EAAE,UAAA,EAAYpC,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA;AAIrF,QAAA,IAAI,CAAC,uBAAA,CAAwB,OAAO,CAAA,EAAG;AACrC,UAAA,MAAM,IAAI,KAAA;AAAA,YACR;AAAA,WAIF;AAAA,QACF;AACA,QAAA,MAAM,OAAA,GAAU,MAAMqC,YAAAA,EAAY;AAClC,QAAA,IAAI;AACF,UAAA,MAAM,SAAS,MAAM,qBAAA,CAAsB,KAAK,EAAE,OAAA,EAAS,SAAS,CAAA;AACpE,UAAA/B,QAAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,UAAA,KAAA,CAAM,CAAA,UAAA,EAAa,QAAA,CAAS,GAAG,CAAC,CAAA,CAAE,CAAA;AAClC,UAAA,OAAA,CAAQ,SAAS,CAAA,CAAE,GAAA,CAAI,MAAA,CAAO,WAAW,CAAC,CAAA,CAAE,CAAA;AAC5C,UAAA,OAAA,CAAQ,WAAW,CAAA,CAAE,GAAA,CAAI,MAAA,CAAO,SAAS,CAAC,CAAA,CAAE,CAAA;AAC5C,UAAA,OAAA,CAAQ,CAAA,OAAA,EAAU,EAAE,GAAA,CAAI,MAAA,CAAO,OAAO,SAAS,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,QACrD,CAAA,SAAE;AACA,UAAA,OAAA,CAAQ,KAAA,EAAM;AAAA,QAChB;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAAA,QAAAA,CAAQ,KAAK,QAAQ,CAAA;AACrB,QAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC3D,QAAA,IAAI,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA,EAAG;AAC5B,UAAA,MAAA,CAAO,CAAA,8DAAA,EAA4D,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,QAC3E,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,GAAG,CAAA;AAAA,QACZ;AACA,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,UAAA,GAAaN,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAI/C,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,mBAAA,EAAoB,GAAI,MAAM,OAAO,+BAAsB,CAAA;AACnE,MAAA,MAAM,UAAU,mBAAA,CAAoB,UAAA,EAAY,EAAE,KAAA,EAAO,MAAM,CAAA;AAC/D,MAAA,IAAI,OAAA,CAAQ,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC7B,QAAA,KAAA,CAAM,qBAAqB,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MACxD;AACA,MAAA,IAAI,OAAA,CAAQ,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC7B,QAAA,MAAA,CAAO,8BAA8B,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MAClE;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA;AAAA,QACE,6BAA6B,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,OAC/E;AAAA,IACF;AAEA,IAAA,MAAMG,GAAAA,GAAK,IAAI,YAAA,CAAa;AAAA,MAC1B,UAAA;AAAA,MACA,cAAc,IAAA,CAAK;AAAA,KACpB,CAAA;AACD,IAAA,MAAMG,WAAY6B,EAAA,CAAA,OAAA,EAAQ;AAC1B,IAAA7B,QAAAA,CAAQ,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,8BAA8B,yBAAyB,CAAA;AACnF,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAMH,GAAAA,CAAG,OAAA,CAAQ,EAAE,MAAA,EAAQ,IAAA,CAAK,QAAQ,CAAA;AACvD,MAAAG,QAAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,MAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC9B,QAAA,KAAA,MAAW,CAAA,IAAK,MAAA,CAAO,QAAA,EAAU,KAAA,CAAM,CAAC,CAAA;AAAA,MAC1C;AACA,MAAA,IAAI,MAAA,CAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC7B,QAAA,KAAA,MAAW,KAAK,MAAA,CAAO,OAAA,EAAS,OAAA,CAAQ,CAAA,SAAA,EAAY,CAAC,CAAA,CAAE,CAAA;AAAA,MACzD;AACA,MAAA,IAAI,OAAO,QAAA,CAAS,MAAA,KAAW,KAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC/D,QAAA,OAAA,CAAQ,0CAA0C,CAAA;AAAA,MACpD;AACA,MAAA,IAAI,MAAA,CAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC7B,QAAA,KAAA,MAAW,KAAK,MAAA,CAAO,OAAA,EAAS,MAAA,CAAO,CAAA,SAAA,EAAY,CAAC,CAAA,CAAE,CAAA;AAAA,MACxD;AACA,MAAA,IAAI,MAAA,CAAO,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAChC,QAAA,KAAA,MAAW,CAAA,IAAK,OAAO,UAAA,EAAY;AACjC,UAAA,OAAA;AAAA,YACE,CAAA,EAAG,CAAA,CAAE,GAAG,CAAA,eAAA,EAAkB,EAAE,IAAA,CAAK,CAAA,CAAE,YAAY,CAAC,CAAA,iBAAA,EAAoB,CAAA,CAAE,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,6BAAA;AAAA,WAC7F;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,OAAO,WAAA,EAAa;AACtB,QAAA,OAAA,CAAQ,CAAA,mBAAA,EAAsB,CAAA,CAAE,GAAA,CAAI,kBAAkB,CAAC,CAAA,CAAE,CAAA;AAAA,MAC3D;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAAA,QAAAA,CAAQ,KAAK,QAAQ,CAAA;AACrB,MAAA,MAAA,CAAO,MAAA,CAAO,GAAG,CAAC,CAAA;AAClB,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;AAWO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,OAAO,IAAIJ,OAAAA,CAAQ,OAAO,CAAA,CACvB,WAAA,CAAY,8BAA8B,CAAA,CAC1C,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,QAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,CAAC,IAAA,KAAS;AAChB,IAAA,MAAMC,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAYH,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA;AACzE,IAAA,MAAM,MAAA,GAASG,IAAG,MAAA,EAAO;AACzB,IAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,MAAA,KAAA,CAAM,6BAA6B,CAAA;AAAA,IACrC,CAAA,MAAO;AACL,MAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,QAAA,MAAA;AAAA,UACE,GAAG,CAAA,CAAE,SAAS,CAAA,CAAA,EAAI,CAAA,CAAE,SAAS,CAAA,UAAA,EAAa,CAAA,CAAE,OAAO,CAAA,CAAA,EAAI,EAAE,OAAO,CAAA,EAAA,EAAK,CAAA,CAAE,OAAA,GAAU,YAAY,WAAW,CAAA,CAAA;AAAA,SAC1G;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;AAYO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,OAAO,IAAID,OAAAA,CAAQ,OAAO,CAAA,CACvB,YAAY,qDAAqD,CAAA,CACjE,MAAA,CAAO,OAAA,EAAS,gEAAgE,CAAA,CAChF,MAAA,CAAO,WAAA,EAAa,6CAA6C,CAAA,CACjE,MAAA,CAAO,WAAA,EAAa,0BAA0B,CAAA,CAC9C,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,QAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,oBAAoB,iBAAA,EAAmB,aAAa,CAAA,CAC3D,MAAA,CAAO,OAAO,IAAA,KAAS;AACtB,IAAA,MAAMC,GAAAA,GAAK,IAAI,YAAA,CAAa;AAAA,MAC1B,UAAA,EAAYH,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAAA,MACxC,cAAc,IAAA,CAAK;AAAA,KACpB,CAAA;AAGD,IAAA,MAAM,OAAO,QAAA,CAASA,eAAAA,CAAK,QAAQ,IAAA,CAAK,UAAA,EAAY,kBAAkB,CAAC,CAAA;AAEvE,IAAA,IAAI,CAAC,QAAQ,MAAA,CAAO,IAAA,CAAK,KAAK,MAAM,CAAA,CAAE,WAAW,CAAA,EAAG;AAClD,MAAA,OAAA,CAAQ,oDAAoD,CAAA;AAC5D,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AACzC,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,OAAA,CAAQ,mBAAmB,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,EAAI,SAAA,CAAU,MAAM,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,CAAA;AACnF,IAAA,KAAA,MAAW,OAAO,SAAA,EAAW;AAC3B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,QAAA,CAAS,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IACpC;AAEA,IAAA,IAAI,KAAK,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,OAAA,CAAQ,gBAAgB,CAAC,CAAA,CAAE,CAAA;AAC9C,MAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAO,CAAA,CAAE,GAAA,CAAI,sBAAsB,CAAC,CAAA,CAAE,CAAA;AAClD,MAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAO,CAAA,CAAE,GAAA,CAAI,kBAAkB,CAAC,CAAA,CAAE,CAAA;AAC9C,MAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAO,CAAA,CAAE,GAAA,CAAI,kBAAkB,CAAC,CAAA,CAAE,CAAA;AAAA,IAChD;AAEA,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,OAAA,CAAQ,iCAA4B,CAAA;AACpC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,KAAK,GAAA,EAAK;AACb,MAAA,MAAMsC,WAAU,MAAQH,EAAA,CAAA,OAAA,CAAQ,EAAE,OAAA,EAAS,YAAY,CAAA;AACvD,MAAA,IAAMA,EAAA,CAAA,QAAA,CAASG,QAAO,CAAA,IAAK,CAACA,QAAAA,EAAS;AACnC,QAAA,OAAA,CAAQ,YAAY,CAAA;AACpB,QAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,SAASnC,GAAAA,CAAG,KAAA,CAAM,EAAE,GAAA,EAAK,IAAA,CAAK,KAAK,CAAA;AAEzC,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,OAAA,EAAS;AAC9B,MAAA,KAAA,CAAM,CAAA,QAAA,EAAW,CAAC,CAAA,CAAE,CAAA;AAAA,IACtB;AACA,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,OAAA,EAAS;AAC9B,MAAA,OAAA,CAAQ,WAAW,CAAA,CAAE,GAAG,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,CAAA,CAAE,CAAA;AAAA,IACzC;AACA,IAAA,IAAI,MAAA,CAAO,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG;AAC/B,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,OAAA,CAAQ,CAAA,KAAA,EAAQ,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA,oBAAA,CAAsB,CAAA;AAC7D,MAAA,KAAA,MAAW,CAAA,IAAK,OAAO,SAAA,EAAW;AAChC,QAAA,OAAA,CAAQ,IAAI,CAAA,IAAA,EAAO,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,MAC/B;AAAA,IACF;AACA,IAAA,IAAI,KAAK,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,KAAA,CAAM,sBAAsB,CAAA;AAAA,IAC9B;AAAA,EACF,CAAC,CAAA;AACL;ACnUO,SAAS,kBAAA,GAA8B;AAC5C,EAAA,OAAO,IAAID,QAAQ,SAAS,CAAA,CACzB,YAAY,uEAAuE,CAAA,CACnF,SAAS,SAAA,EAAW,wDAAwD,EAC5E,MAAA,CAAO,qBAAA,EAAuB,qBAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CAChE,MAAA,CAAO,OAAO,QAAA,EAA8B,IAAA,KAAiC;AAC5E,IAAA,MAAM,UAAA,GAAaF,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAG/C,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,QAAA,EAAU;AAEZ,MAAA,IAAI,SAAS,QAAA,CAAS,GAAG,KAAK,QAAA,CAAS,QAAA,CAAS,IAAI,CAAA,EAAG;AACrD,QAAA,QAAA,GAAWA,eAAAA,CAAK,OAAA,CAAQ,UAAA,EAAY,QAAQ,CAAA;AAAA,MAC9C,CAAA,MAAO;AAEL,QAAA,MAAM,QAAA,GAAW,gBAAgB,UAAU,CAAA;AAC3C,QAAA,QAAA,GAAW,QAAA,IAAYA,eAAAA,CAAK,OAAA,CAAQ,UAAA,EAAY,QAAQ,CAAA;AAAA,MAC1D;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,QAAA,GAAW,gBAAgB,UAAU,CAAA;AAC3C,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAA,CAAO,mEAAmE,CAAA;AAC1E,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,QAAA,GAAW,QAAA;AAAA,IACb;AAGA,IAAA,MAAM,QAAA,GAAW,MAAM,iBAAA,CAAkB,QAAQ,CAAA;AACjD,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAA,CAAO,CAAA,uBAAA,EAA0B,QAAQ,CAAA,CAAE,CAAA;AAC3C,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,IAAI,CAAC,QAAA,CAAS,QAAA,IAAY,QAAA,CAAS,QAAA,CAAS,WAAW,CAAA,EAAG;AACxD,MAAA,OAAA,CAAQ,yDAAoD,CAAA;AAC5D,MAAA;AAAA,IACF;AAEA,IAAA,OAAA;AAAA,MACE,cAAc,QAAA,CAAS,IAAA,IAAQ,OAAO,CAAA,EAAA,EAAK,QAAA,CAAS,SAAS,MAAM,CAAA,sBAAA;AAAA,KACrE;AASA,IAAA,MAAM,WAAA,GAAc,OAAO,GAAA,EAAa,IAAA,KAAyC;AAC/E,MAAA,IAAI;AACF,QAAA,MAAM,QAAiB,EAAC;AACxB,QAAA,MAAM,SAAA,GAAY,IAAA;AAClB,QAAA,MAAM,WAAW,MAAM,YAAA,CAAa,GAAA,EAAK,SAAA,EAAW,UAAU,KAAK,CAAA;AACnE,QAAA,OAAO,UAAU,OAAA,IAAW,IAAA;AAAA,MAC9B,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,kBAAA,CAAmB;AAAA,MACtC,QAAA;AAAA,MACA,OAAO,QAAA,CAAS,QAAA;AAAA,MAChB;AAAA,KACD,CAAA;AAGD,IAAA,KAAA,MAAW,OAAA,IAAW,OAAO,QAAA,EAAU;AACrC,MAAA,OAAA,CAAQ,OAAO,CAAA;AAAA,IACjB;AAEA,IAAA,KAAA;AAAA,MACE,CAAA,SAAA,EAAY,MAAA,CAAO,aAAa,CAAA,CAAA,EAAI,QAAA,CAAS,SAAS,MAAM,CAAA,sBAAA,EAAoB,MAAA,CAAO,QAAA,CAAS,cAAc,CAAA;AAAA,KAChH;AACA,IAAA,OAAA,CAAQ,CAAA,SAAA,EAAY,MAAA,CAAO,YAAY,CAAA,CAAE,CAAA;AAAA,EAC3C,CAAC,CAAA;AACL;ACrFA,SAAS,oBAAA,GAAoD;AAC3D,EAAA,MAAM,EAAA,GAAK,IAAI,gBAAA,EAAiB;AAChC,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAY;AAElC,EAAA,OAAO,CAAC,KAAA,KAAsB;AAI5B,IAAA,MAAM,CAAA,GAAI,KAAA;AAKV,IAAA,IAAI,CAAA,CAAE,IAAA,KAAS,eAAA,IAAmB,OAAO,CAAA,CAAE,KAAA,KAAU,QAAA,IAAY,CAAA,CAAE,KAAA,CAAM,UAAA,CAAW,OAAO,CAAA,EAAG;AAC5F,MAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,KAAA,EAAO,KAAA,IAAS,EAAC;AACjC,MAAA,KAAA,MAAW,MAAM,KAAA,EAAO;AACtB,QAAA,MAAM,CAAA,GAAI,MAAM,EAAE,CAAA;AAClB,QAAA,MAAM,GAAA,GAAM,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,EAAE,MAAM,CAAA,CAAA;AAC7B,QAAA,IAAI,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA,EAAG;AACxB,QAAA,SAAA,CAAU,IAAI,GAAG,CAAA;AACjB,QAAA,IAAI,CAAA,CAAE,WAAW,SAAA,EAAW;AAC1B,UAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,QAAG,CAAC,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,CAAA;AAAA,QAC9C,CAAA,MAAA,IAAW,CAAA,CAAE,MAAA,KAAW,UAAA,EAAY;AAClC,UAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,CAAA,EAAIQ,GAAAA,CAAG,KAAA,CAAM,QAAG,CAAC;AAAA,CAAI,CAAA;AAAA,QAC5C,CAAA,MAAA,IAAW,CAAA,CAAE,MAAA,KAAW,SAAA,EAAW;AACjC,UAAA,OAAA,CAAQ,OAAO,KAAA,CAAM,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,gBAAW,CAAC;AAAA,CAAI,CAAA;AAAA,QACjD;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,KAAA,CAAM,SAAS,gBAAA,EAAkB;AACnC,MAAA,MAAM,QAAS,KAAA,CAAc,UAAA;AAC7B,MAAA,IAAI,KAAA,EAAO,EAAA,CAAG,KAAA,CAAM,KAAK,CAAA;AAAA,IAC3B;AACA,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,WAAA,EAAa,EAAA,CAAG,GAAA,EAAI;AAAA,EACzC,CAAA;AACF;AAgBO,SAAS,cAAA,GAA0B;AACxC,EAAA,MAAM,GAAA,GAAM,IAAIN,OAAAA,CAAQ,KAAK,EAC1B,WAAA,CAAY,+CAA+C,EAC3D,QAAA,CAAS,sBAAA,EAAwB,wBAAwB,CAAA,CACzD,MAAA,CAAO,wBAAwB,mBAAA,EAAqB,OAAA,CAAQ,KAAK,CAAA,CACjE,MAAA,CAAO,iBAAA,EAAmB,yCAAyC,CAAA,CACnE,OAAO,mBAAA,EAAqB,cAAc,EAC1C,MAAA,CAAO,gBAAA,EAAkB,gBAAgB,CAAA,CACzC,MAAA,CAAO,mBAAmB,8BAA8B,CAAA,CACxD,OAAO,WAAA,EAAa,8BAA8B,EAClD,MAAA,CAAO,gBAAA,EAAkB,mCAAmC,CAAA,CAC5D,MAAA,CAAO,OAAO,UAAA,EAAsB,IAAA,KAAS;AAC5C,IAAA,MAAM,UAAA,GAAaF,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,YAAY,IAAA,CAAK,MAAA;AACvB,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,IAAU,KAAA;AAG9B,IAAA,IAAI,MAAA,GAAS,WAAW,CAAC,CAAA;AACzB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAMuC,MAAAA,GAAQ,aAAa,YAAY,CAAA;AACvC,MAAA,IAAIA,MAAAA,CAAM,WAAW,CAAA,EAAG;AACtB,QAAA,MAAA,CAAO,qBAAqB,CAAA;AAC5B,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,MAAM,QAAA,GAAW,MAAQ,EAAA,CAAA,MAAA,CAAO;AAAA,QAC9B,OAAA,EAAS,sBAAA;AAAA,QACT,OAAA,EAASA,MAAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,UACzB,OAAO,CAAA,CAAE,EAAA;AAAA,UACT,OAAO,CAAA,CAAE,IAAA;AAAA,UACT,MAAM,CAAA,CAAE;AAAA,SACV,CAAE;AAAA,OACH,CAAA;AACD,MAAA,IAAM,EAAA,CAAA,QAAA,CAAS,QAAQ,CAAA,EAAG;AACxB,QAAE,UAAO,YAAY,CAAA;AACrB,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AACA,MAAA,MAAA,GAAS,QAAA;AAAA,IACX;AAGA,IAAA,MAAM,MAAA,GAAS,MAAM,eAAA,CAAgB,UAAA,EAAY;AAAA,MAC/C,MAAA,EAAQ,SAAA;AAAA,MACR,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,UAAU,IAAA,CAAK;AAAA,KAChB,CAAA;AACD,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,IAAU,KAAA;AAChC,IAAA,MAAM,QAAQ,MAAA,CAAO,KAAA;AACrB,IAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AAExB,IAAA,MAAM,KAAA,GAAQ,aAAa,YAAY,CAAA;AACvC,IAAA,MAAM,OAAO,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,MAAM,CAAA;AAC9C,IAAA,IAAI,CAAC,IAAA,EAAM;AAET,MAAA,MAAM,UAAA,GAAa,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AACtC,MAAA,IAAI,CAAC,UAAA,CAAW,IAAA,EAAK,EAAG;AACtB,QAAA,MAAA,CAAO,CAAA,gBAAA,EAAmB,MAAM,CAAA,CAAE,CAAA;AAClC,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,YAAY,CAAC,CAAA,CAAA,EAAI,MAAM,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,GAAA,CAAI,EAAE,EAAE,CAAC,EAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAClF,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,MAAM,YAAA,CAAa;AAAA,QACjB,UAAA;AAAA,QACA,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,OAAA,EAAS,UAAA;AAAA,QACT,OAAO,IAAA,CAAK;AAAA,OACb,CAAA;AACD,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,GAAA,GAAM,UAAA;AACV,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,MAAM,SAAA,GAAYvC,eAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,WAAW,CAAA;AAC5C,MAAA,IAAIF,aAAAA,CAAG,UAAA,CAAW,SAAS,CAAA,EAAG;AAC5B,QAAA,KAAA,MAAW,MAAA,IAAUA,aAAAA,CAAG,WAAA,CAAY,SAAS,CAAA,EAAG;AAC9C,UAAA,MAAM,EAAA,GAAKE,gBAAK,IAAA,CAAK,SAAA,EAAW,QAAQ,OAAA,EAAS,CAAA,EAAG,MAAM,CAAA,UAAA,CAAY,CAAA;AACtE,UAAA,IAAIF,aAAAA,CAAG,UAAA,CAAW,EAAE,CAAA,EAAG;AACrB,YAAA,QAAA,GAAW,EAAA;AACX,YAAA;AAAA,UACF;AACA,UAAA,MAAM,MAAA,GAASE,gBAAK,IAAA,CAAK,SAAA,EAAW,QAAQ,OAAA,EAAS,CAAA,EAAG,MAAM,CAAA,KAAA,CAAO,CAAA;AACrE,UAAA,IAAIF,aAAAA,CAAG,UAAA,CAAW,MAAM,CAAA,EAAG;AACzB,YAAA,QAAA,GAAW,MAAA;AACX,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA;AAAA,MACF;AACA,MAAA,GAAA,GAAME,eAAAA,CAAK,QAAQ,GAAG,CAAA;AAAA,IACxB;AACA,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,KAAA,MAAW,MAAA,IAAUF,aAAAA,CAAG,WAAA,CAAY,YAAY,CAAA,EAAG;AACjD,QAAA,MAAM,EAAA,GAAKE,gBAAK,IAAA,CAAK,YAAA,EAAc,QAAQ,OAAA,EAAS,CAAA,EAAG,MAAM,CAAA,UAAA,CAAY,CAAA;AACzE,QAAA,IAAIF,aAAAA,CAAG,UAAA,CAAW,EAAE,CAAA,EAAG;AACrB,UAAA,QAAA,GAAW,EAAA;AACX,UAAA;AAAA,QACF;AACA,QAAA,MAAM,MAAA,GAASE,gBAAK,IAAA,CAAK,YAAA,EAAc,QAAQ,OAAA,EAAS,CAAA,EAAG,MAAM,CAAA,KAAA,CAAO,CAAA;AACxE,QAAA,IAAIF,aAAAA,CAAG,UAAA,CAAW,MAAM,CAAA,EAAG;AACzB,UAAA,QAAA,GAAW,MAAA;AACX,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAA,CAAO,CAAA,gCAAA,EAAmC,MAAM,CAAA,CAAE,CAAA;AAClD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,OAAO,CAAC,CAAA,QAAA,EAAW,CAAA,CAAE,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAClE,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,KAAA,CAAM,cAAc,CAAC,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE,CAAA;AACxD,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,SAAS,CAAC,CAAA,MAAA,EAAS,MAAM,CAAA,EAAG,KAAA,GAAQ,EAAE,GAAA,CAAI,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA,CAAE,CAAA;AACxF,IAAA,IAAI,IAAA,CAAK,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,QAAQ,CAAC,CAAA,OAAA,EAAU,IAAA,CAAK,KAAK,CAAA,CAAE,CAAA;AACxE,IAAA,IAAI,MAAA,UAAgB,GAAA,CAAI,CAAA,EAAA,EAAK,EAAE,IAAA,CAAK,2CAAsC,CAAC,CAAA,CAAE,CAAA;AAC7E,IAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,IAAA,MAAM,OAAA,CAAQ;AAAA,MACZ,UAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,cAAc,IAAA,CAAK,KAAA;AAAA,MACnB,MAAA;AAAA,MACA,SAAS,oBAAA,EAAqB;AAAA,MAC9B,KAAA,EAAO,CAAC,IAAA,KAAiB,OAAA,CAAQ,IAAI,IAAI;AAAA,KAC1C,CAAA;AAAA,EACH,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;AAaO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,MAAM,GAAA,GAAM,IAAII,OAAAA,CAAQ,QAAQ,CAAA,CAC7B,YAAY,wBAAwB,CAAA,CACpC,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,OAAA,CAAQ,KAAK,CAAA,CACjE,MAAA,CAAO,oBAAA,EAAsB,yBAAyB,CAAA,CACtD,MAAA,CAAO,WAAA,EAAa,8BAA8B,CAAA,CAClD,MAAA,CAAO,OAAO,IAAA,KAAS;AACtB,IAAA,MAAM,UAAA,GAAaF,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,YAAY,IAAA,CAAK,OAAA;AACvB,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,IAAU,KAAA;AAE9B,IAAA,MAAM,OAAA,GAAU,YACZ,MAAM,eAAA,CAAgB,YAAY,SAAS,CAAA,GAC3C,MAAM,WAAA,CAAY,UAAU,CAAA;AAChC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAA,CAAO,CAAA,cAAA,EAAiB,UAAU,CAAA,CAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,KAAK,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,sBAAsB,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,QAAQ,CAAC,CAAA,CAAE,CAAA;AACnF,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,EAAA,EAAK,EAAE,KAAA,CAAM,WAAW,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,QAAQ,OAAA,CAAQ,MAAM,CAAC,CAAA,EAAG,OAAA,CAAQ,QAAQ,CAAA,CAAE,GAAA,CAAI,WAAM,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA,GAAI,EAAE,CAAA;AAAA,KAC5G;AACA,IAAA,IAAI,MAAA,UAAgB,SAAS,CAAA;AAC7B,IAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,IAAA,MAAM,UAAA,CAAW;AAAA,MACf,UAAA;AAAA,MACA,SAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAS,oBAAA,EAAqB;AAAA,MAC9B,KAAA,EAAO,CAAC,IAAA,KAAiB,OAAA,CAAQ,IAAI,IAAI;AAAA,KAC1C,CAAA;AAAA,EACH,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;AAaO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,OAAO,IAAIE,OAAAA,CAAQ,QAAQ,CAAA,CACxB,WAAA,CAAY,4BAA4B,CAAA,CACxC,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,QAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,OAAO,IAAA,KAAS;AACtB,IAAA,MAAM,UAAA,GAAaF,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,UAAU,CAAA;AAC5C,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,CAAQ,oBAAoB,CAAA;AAC5B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAA,CAAO,IAAA,CAAK,GAAA,EAAI,GAAI,IAAI,IAAA,CAAK,OAAA,CAAQ,SAAS,CAAA,CAAE,OAAA,MAAa,GAAI,CAAA;AAClF,IAAA,MAAM,cACJ,OAAA,CAAQ,MAAA,KAAW,UAAA,GACfQ,GAAAA,CAAG,QACH,OAAA,CAAQ,MAAA,KAAW,QAAA,GACjBA,GAAAA,CAAG,MACH,OAAA,CAAQ,MAAA,KAAW,SAAA,GACjBA,GAAAA,CAAG,OACHA,GAAAA,CAAG,MAAA;AAEb,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,OAAO,CAAC,CAAA,MAAA,EAAS,CAAA,CAAE,OAAA,CAAQ,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAE,CAAA;AACrE,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,SAAS,CAAC,CAAA,IAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAE,CAAA;AACrE,IAAA,IAAI,OAAA,CAAQ,KAAA,EAAO,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,QAAQ,CAAC,CAAA,KAAA,EAAQ,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA;AAC5E,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,SAAS,CAAC,CAAA,IAAA,EAAO,WAAA,CAAY,OAAA,CAAQ,MAAA,IAAU,SAAS,CAAC,CAAA,CAAE,CAAA;AACpF,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,KAAK,CAAA,CAAE,KAAA,CAAM,SAAS,CAAC,CAAA,IAAA,EAAO,QAAQ,MAAM,CAAA,EAAG,OAAA,CAAQ,KAAA,GAAQ,EAAE,GAAA,CAAI,CAAA,GAAA,EAAM,QAAQ,KAAK,CAAA,CAAE,IAAI,EAAE,CAAA;AAAA,KAClG;AACA,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,UAAU,CAAC,CAAA,GAAA,EAAM,OAAA,CAAQ,SAAS,CAAA,CAAA,EAAI,EAAE,GAAA,CAAI,CAAA,CAAA,EAAI,GAAG,CAAA,MAAA,CAAQ,CAAC,CAAA,CAAE,CAAA;AACvF,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,iHAA4G,CAAC,CAAA;AAAA,KAC1H;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,EACd,CAAC,CAAA;AACL;AAYO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,OAAO,IAAIN,OAAAA,CAAQ,OAAO,CAAA,CACvB,WAAA,CAAY,+BAA+B,CAAA,CAC3C,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,QAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,OAAO,IAAA,KAAS;AACtB,IAAA,MAAM,UAAA,GAAaF,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,aAAa,UAAU,CAAA;AAC7B,IAAA,KAAA,CAAM,kBAAkB,CAAA;AAAA,EAC1B,CAAC,CAAA;AACL;AAiBO,SAAS,eAAA,GAA2B;AACzC,EAAA,OAAO,IAAIE,OAAAA,CAAQ,MAAM,CAAA,CACtB,YAAY,oCAAoC,CAAA,CAChD,MAAA,CAAO,sBAAA,EAAwB,mBAAmB,CAAA,CAClD,MAAA,CAAO,iBAAA,EAAmB,kCAAkC,CAAA,CAC5D,MAAA,CAAO,mBAAA,EAAqB,cAAc,CAAA,CAC1C,MAAA,CAAO,gBAAA,EAAkB,gBAAgB,EACzC,MAAA,CAAO,UAAA,EAAY,qBAAqB,CAAA,CACxC,OAAO,uBAAA,EAAyB,yBAAyB,CAAA,CACzD,MAAA,CAAO,OAAO,IAAA,KAAS;AACtB,IAAA,MAAM,EAAE,iBAAA,EAAAsC,kBAAAA,EAAkB,GAAI,MAAM,OAAO,kBAAyB,CAAA;AACpE,IAAA,MAAM,EAAE,SAAA,EAAU,GAAI,MAAM,OAAO,iBAAwB,CAAA;AAC3D,IAAA,MAAM,EAAA,GAAK,MAAM,OAAO,IAAS,CAAA;AAEjC,IAAA,MAAM,UAAUxC,eAAAA,CAAK,OAAA,CAAQ,KAAK,UAAA,IAAc,OAAA,CAAQ,KAAK,CAAA;AAC7D,IAAA,MAAM,aAAA,GAAgBwC,mBAAkB,OAAO,CAAA;AAE/C,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,iBAAiB,IAAA,CAAK,MAAA;AAE1B,IAAA,IAAI,aAAA,EAAe;AAEjB,MAAA,UAAA,GAAa,aAAA;AACb,MAAA,QAAA,GAAW,OAAA;AACX,MAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,QAAA,OAAA,CAAQ,CAAA,iBAAA,EAAoB,CAAA,CAAE,GAAA,CAAI,aAAa,CAAC,CAAA,CAAE,CAAA;AAAA,MACpD;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,OAAA,CAAQ,CAAA,wBAAA,EAA2B,CAAA,CAAE,GAAA,CAAI,OAAO,CAAC,CAAA,yBAAA,CAA2B,CAAA;AAC5E,MAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,MAAA,MAAM,YAAA,GAAe,MAAQ,EAAA,CAAA,OAAA,CAAQ;AAAA,QACnC,OAAA,EAAS;AAAA,OACV,CAAA;AACD,MAAA,IAAM,EAAA,CAAA,QAAA,CAAS,YAAY,CAAA,IAAK,CAAC,YAAA,EAAc;AAC7C,QAAE,UAAO,YAAY,CAAA;AACrB,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAGA,MAAA,MAAM,MAAA,GAAS1C,cAAG,WAAA,CAAYE,eAAAA,CAAK,KAAK,EAAA,CAAG,MAAA,EAAO,EAAG,cAAc,CAAC,CAAA;AACpE,MAAA,UAAA,GAAa,MAAA;AACb,MAAA,QAAA,GAAW,OAAA;AACX,MAAA,KAAA,CAAM,CAAA,qBAAA,EAAwB,CAAA,CAAE,GAAA,CAAI,MAAM,CAAC,CAAA,CAAE,CAAA;AAG7C,MAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,QAAA,MAAM,YAAYA,eAAAA,CAAK,IAAA,CAAK,EAAA,CAAG,OAAA,IAAW,SAAS,CAAA;AACnD,QAAA,IAAIF,aAAAA,CAAG,UAAA,CAAW,SAAS,CAAA,EAAG;AAC5B,UAAA,cAAA,GAAiB,YAAA;AACjB,UAAA,OAAA,CAAQ,CAAA,SAAA,EAAY,CAAA,CAAE,GAAA,CAAI,WAAW,CAAC,iBAAY,CAAA,CAAE,GAAA,CAAI,YAAY,CAAC,CAAA,QAAA,CAAU,CAAA;AAAA,QACjF,CAAA,MAAO;AACL,UAAA,cAAA,GAAiB,KAAA;AACjB,UAAA,OAAA,CAAQ,CAAA,MAAA,EAAS,CAAA,CAAE,GAAA,CAAI,KAAK,CAAC,CAAA,QAAA,CAAU,CAAA;AAAA,QACzC;AAAA,MACF;AAEA,MAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,IACd;AAEA,IAAA,MAAM,SAAA,CAAU;AAAA,MACd,UAAA;AAAA,MACA,GAAA,EAAK,QAAA,KAAa,UAAA,GAAa,QAAA,GAAW,MAAA;AAAA,MAC1C,MAAA,EAAQ,cAAA;AAAA,MACR,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,iBAAiB,IAAA,CAAK;AAAA,KACvB,CAAA;AAAA,EACH,CAAC,CAAA;AACL;ACxZO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,OAAO,IAAII,OAAAA,CAAQ,OAAO,EACvB,WAAA,CAAY,2DAA2D,EACvE,MAAA,CAAO,eAAA,EAAiB,yBAAyB,MAAM,CAAA,CACvD,OAAO,sBAAA,EAAwB,mBAAA,EAAqB,QAAQ,GAAA,EAAK,EACjE,MAAA,CAAO,iBAAA,EAAmB,iBAAiB,CAAA,CAC3C,OAAO,gBAAA,EAAkB,gBAAgB,EACzC,MAAA,CAAO,mBAAA,EAAqB,mBAAmB,CAAA,CAC/C,MAAA,CAAO,qBAAqB,wCAAwC,CAAA,CACpE,OAAO,0BAAA,EAA4B,wDAAwD,EAC3F,MAAA,CAAO,gBAAA,EAAkB,mEAAmE,CAAA,CAC5F,MAAA;AAAA,IACC,cAAA;AAAA,IACA;AAAA,GACF,CACC,MAAA;AAAA,IACC,OAAO,IAAA,KAUD;AACJ,MAAA,IAAI,KAAK,WAAA,EAAa;AACpB,QAAA,MAAM,cAAA,CAAe,EAAE,GAAG,IAAA,EAAM,WAAW,IAAA,CAAK,SAAA,IAAa,OAAO,CAAA;AACpE,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,EAAE,gBAAA,EAAiB,GAAI,MAAM,OAAO,oBAA2B,CAAA;AAErE,MAAA,MAAM,gBAAA,CAAiB;AAAA,QACrB,IAAA,EAAM,QAAA,CAAS,IAAA,CAAK,IAAA,EAAM,EAAE,CAAA;AAAA,QAC5B,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,iBAAiB,IAAA,CAAK;AAAA,OACvB,CAAA;AAAA,IACH;AAAA,GACF;AACJ;AAEA,eAAe,eAAe,IAAA,EAQZ;AAChB,EAAA,MAAM,EAAE,KAAA,EAAAuC,MAAAA,EAAO,MAAA,EAAAC,OAAAA,EAAQ,OAAA,EAAAC,QAAAA,EAAS,CAAA,EAAAC,EAAAA,EAAE,GAAI,MAAM,OAAO,wBAAe,CAAA;AAClE,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAM,OAAO,IAAS,CAAA;AACzC,EAAA,MAAM,EAAE,OAAA,EAAAC,QAAAA,EAAS,IAAA,EAAAC,KAAAA,EAAM,SAAAnC,QAAAA,EAAQ,GAAI,MAAM,OAAO,MAAW,CAAA;AAC3D,EAAA,MAAM,EAAE,aAAA,EAAAoC,cAAAA,EAAc,GAAI,MAAM,OAAO,KAAU,CAAA;AACjD,EAAA,MAAM,EAAE,UAAA,EAAY,UAAA,EAAAjC,cAAW,GAAI,MAAM,OAAO,IAAS,CAAA;AACzD,EAAA,MAAM,EAAE,KAAA,EAAM,GAAI,MAAM,OAAO,eAAoB,CAAA;AACnD,EAAA,MAAM,EAAE,iBAAA,EAAAkC,kBAAAA,EAAkB,GAAI,MAAM,OAAO,kBAAyB,CAAA;AACpE,EAAA,MAAM,EAAE,aAAA,EAAc,GAAI,MAAM,OAAO,sBAAa,CAAA;AAOpD,EAAA,IAAI,kBAAkB,IAAA,EAAM;AAC1B,IAAAN,QAAO,mEAAmE,CAAA;AAC1E,IAAAC,SAAQ,sEAAsE,CAAA;AAC9E,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAUG,MAAK,MAAA,EAAO,EAAG,uBAAuB,IAAA,CAAK,GAAA,EAAK,CAAA,CAAE,CAAA;AAMlE,EAAA,MAAM,UAAA,GAAaC,cAAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAChD,EAAA,MAAM,aAAapC,QAAAA,CAAQkC,QAAAA,CAAQ,UAAU,CAAA,EAAG,MAAM,UAAU,CAAA;AAGhE,EAAAF,SAAQ,CAAA,2BAAA,CAA6B,CAAA;AACrC,EAAAA,SAAQ,CAAA,OAAA,EAAUC,EAAAA,CAAE,GAAA,CAAI,UAAU,CAAC,CAAA,CAAE,CAAA;AACrC,EAAAD,SAAQ,CAAA,QAAA,EAAWC,EAAAA,CAAE,GAAA,CAAI,OAAO,CAAC,CAAA,CAAE,CAAA;AAEnC,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,KAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,sCAAA;AAAA,IACA,IAAA,CAAK,YAAY,iCAAA,GAAoC;AAAA,GACvD;AAEA,EAAA,MAAM,SAAA,GAAYI,mBAAkB,SAAA,EAAW;AAAA,IAC7C,GAAA,EAAK,aAAA;AAAA,IACL,GAAA,EAAK,EAAE,GAAG,OAAA,CAAQ,GAAA;AAAI,GACvB,CAAA;AAED,EAAA,IAAI,SAAA,CAAU,aAAa,CAAA,EAAG;AAC5B,IAAAN,QAAO,eAAe,CAAA;AACtB,IAAA,IAAI,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,KAAA,CAAM,UAAU,MAAM,CAAA;AACpD,IAAA,IAAI,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,GAAA,CAAI,UAAU,MAAM,CAAA;AAClD,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,IAAA;AAAA,EACF;AAEA,EAAAD,OAAM,CAAA,cAAA,EAAiBG,EAAAA,CAAE,GAAA,CAAI,OAAO,CAAC,CAAA,CAAA,CAAG,CAAA;AAGxC,EAAA,MAAM,SAAA,GAAY,CAAC,OAAA,EAAS,OAAA,EAAS,UAAU,IAAA,CAAK,IAAA,EAAM,eAAA,EAAiB,IAAA,CAAK,UAAU,CAAA;AAC1F,EAAA,IAAI,KAAK,MAAA,EAAQ,SAAA,CAAU,IAAA,CAAK,UAAA,EAAY,KAAK,MAAM,CAAA;AACvD,EAAA,IAAI,KAAK,KAAA,EAAO,SAAA,CAAU,IAAA,CAAK,SAAA,EAAW,KAAK,KAAK,CAAA;AACpD,EAAA,IAAI,KAAK,QAAA,EAAU,SAAA,CAAU,IAAA,CAAK,YAAA,EAAc,KAAK,QAAQ,CAAA;AAC7D,EAAA,IAAI,KAAK,SAAA,EAAW,SAAA,CAAU,IAAA,CAAK,cAAA,EAAgB,KAAK,SAAS,CAAA;AAEjE,EAAAD,QAAAA,CAAQ,YAAYC,EAAAA,CAAE,GAAA,CAAI,UAAU,IAAA,CAAK,GAAG,CAAC,CAAC,CAAA,CAAE,CAAA;AAChD,EAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,EAAA,MAAM,CAAC,QAAA,EAAU,GAAG,SAAS,CAAA,GAAI,SAAA;AACjC,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,QAAA,EAAoB,SAAA,EAAW;AAAA,IACrD,KAAA,EAAO,SAAA;AAAA,IACP,GAAA,EAAK,EAAE,GAAG,OAAA,CAAQ,GAAA;AAAI,GACvB,CAAA;AAGD,EAAA,SAAS,OAAA,GAAU;AACjB,IAAA,IAAI;AACF,MAAA,SAAA,CAAU,IAAA,EAAK;AAAA,IACjB,CAAA,CAAA,MAAQ;AAAA,IAAC;AACT,IAAA,IAAI;AACF,MAAA,IAAI9B,YAAAA,CAAW,OAAO,CAAA,EAAG,UAAA,CAAW,OAAO,CAAA;AAAA,IAC7C,CAAA,CAAA,MAAQ;AAAA,IAAC;AAAA,EACX;AAEA,EAAA,OAAA,CAAQ,EAAA,CAAG,UAAU,MAAM;AACzB,IAAA,OAAA,EAAQ;AACR,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AACD,EAAA,OAAA,CAAQ,EAAA,CAAG,WAAW,MAAM;AAC1B,IAAA,OAAA,EAAQ;AACR,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AAED,EAAA,MAAM,IAAI,OAAA,CAAc,CAAC,GAAA,KAAQ;AAC/B,IAAA,SAAA,CAAU,EAAA,CAAG,OAAA,EAAS,MAAM,GAAA,EAAK,CAAA;AAAA,EACnC,CAAC,CAAA;AACD,EAAA,OAAA,EAAQ;AACV;ACjKO,SAAS,aAAA,CAAc,OAAA,EAAqB,IAAA,GAAsB,EAAC,EAAW;AACnF,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA;AAAA,EACxC;AACA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,gBAAA,CAAiB,CAAC,CAAC,CAAA;AAAA,EACnC;AACA,EAAA,IAAI,KAAK,UAAA,EAAY;AACnB,IAAA,KAAA,CAAM,KAAKN,GAAAA,CAAG,GAAA,CAAI,oCAAoC,IAAA,CAAK,UAAU,gBAAgB,CAAC,CAAA;AAAA,EACxF;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAQO,SAAS,iBAAA,CAAkB,KAAA,EAAiB,IAAA,GAA2B,EAAC,EAAW;AACxF,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,EAC7B;AACA,EAAA,OAAO,gBAAA,CAAiB,KAAK,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAC1C;AAEA,SAAS,iBAAiB,CAAA,EAAuB;AAC/C,EAAA,MAAM,KAAA,GAAkB,CAAC,UAAA,CAAW,CAAC,CAAC,CAAA;AACtC,EAAA,IAAI,CAAA,CAAE,QAAQ,MAAA,CAAO,IAAA,CAAK,EAAE,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAC5C,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,UAAA,CAAW,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EAClC;AACA,EAAA,IAAI,EAAE,KAAA,EAAO;AACX,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,WAAA,CAAY,CAAA,CAAE,KAAK,CAAC,CAAA;AAAA,EACpC;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,WAAW,CAAA,EAAqB;AACvC,EAAA,MAAM,EAAA,GAAKA,IAAG,GAAA,CAAI,CAAA,CAAA,EAAI,WAAW,CAAA,CAAE,SAAS,CAAC,CAAA,CAAA,CAAG,CAAA;AAGhD,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,CAAA,CAAE,KAAK,CAAA;AAC9B,EAAA,MAAM,GAAA,GAAMA,IAAG,IAAA,CAAK,CAAA,CAAA,EAAI,aAAa,CAAA,CAAE,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA;AACjD,EAAA,OAAO,CAAA,EAAG,EAAE,CAAA,CAAA,EAAI,GAAG,IAAI,GAAG,CAAA,CAAA,EAAI,EAAE,OAAO,CAAA,CAAA;AACzC;AAEA,SAAS,WAAW,GAAA,EAAqB;AAEvC,EAAA,MAAM,CAAA,GAAI,IAAI,IAAA,CAAK,GAAG,CAAA;AACtB,EAAA,IAAI,OAAO,KAAA,CAAM,CAAA,CAAE,OAAA,EAAS,GAAG,OAAO,GAAA;AACtC,EAAA,MAAM,EAAA,GAAK,OAAO,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AAClD,EAAA,MAAM,EAAA,GAAK,OAAO,CAAA,CAAE,aAAA,EAAe,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACpD,EAAA,MAAM,EAAA,GAAK,OAAO,CAAA,CAAE,aAAA,EAAe,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACpD,EAAA,MAAM,EAAA,GAAK,OAAO,CAAA,CAAE,kBAAA,EAAoB,CAAA,CAAE,QAAA,CAAS,GAAG,GAAG,CAAA;AACzD,EAAA,OAAO,GAAG,EAAE,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,EAAI,EAAE,IAAI,EAAE,CAAA,CAAA;AAChC;AAEA,SAAS,aAAa,GAAA,EAAiC;AACrD,EAAA,IAAI,GAAA,CAAI,QAAA,EAAU,OAAO,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,GAAA,CAAI,OAAO,CAAA,CAAA,EAAI,GAAA,CAAI,QAAQ,CAAA,CAAA;AACnE,EAAA,OAAO,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA,CAAA,EAAI,IAAI,OAAO,CAAA,CAAA;AACnC;AAEA,SAAS,WAAW,KAAA,EAAkC;AACpD,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,OAAA;AACH,MAAA,OAAOA,GAAAA,CAAG,IAAI,OAAO,CAAA;AAAA,IACvB,KAAK,MAAA;AACH,MAAA,OAAOA,GAAAA,CAAG,OAAO,OAAO,CAAA;AAAA,IAC1B,KAAK,MAAA;AACH,MAAA,OAAOA,GAAAA,CAAG,MAAM,OAAO,CAAA;AAAA,IACzB,KAAK,OAAA;AACH,MAAA,OAAOA,GAAAA,CAAG,IAAI,OAAO,CAAA;AAAA,IACvB;AACE,MAAA,OAAO,MAAA,CAAO,KAAK,CAAA,CAAE,WAAA,EAAY;AAAA;AAEvC;AAEA,SAAS,WAAW,IAAA,EAAyC;AAC3D,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AACnC,EAAA,IAAI,OAAA,CAAQ,UAAU,GAAA,EAAK;AACzB,IAAA,OAAO,CAAC,KAAKA,GAAAA,CAAG,GAAA,CAAI,SAAS,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,CAAE,CAAA;AAAA,EAC7C;AACA,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,MAAM,CAAC,CAAA;AAC3C,EAAA,OAAO,CAAC,CAAA,EAAA,EAAKA,GAAAA,CAAG,IAAI,SAAS,CAAC,IAAI,GAAG,MAAA,CAAO,KAAA,CAAM,IAAI,EAAE,GAAA,CAAI,CAAC,MAAM,CAAA,IAAA,EAAO,CAAC,EAAE,CAAC,CAAA;AAChF;AAEA,SAAS,YAAY,GAAA,EAA+C;AAClE,EAAA,MAAM,IAAA,GAAO,CAAA,EAAA,EAAKA,GAAAA,CAAG,GAAA,CAAI,UAAU,CAAC,CAAA,CAAA,EAAIA,GAAAA,CAAG,GAAA,CAAI,GAAA,CAAI,IAAI,CAAC,CAAA,EAAA,EAAK,IAAI,OAAO,CAAA,CAAA;AACxE,EAAA,IAAI,CAAC,GAAA,CAAI,KAAA,EAAO,OAAO,CAAC,IAAI,CAAA;AAC5B,EAAA,MAAM,UAAA,GAAa,IAAI,KAAA,CACpB,KAAA,CAAM,IAAI,CAAA,CACV,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,GAAO,MAAA,GAAS,CAAC,CAAA,CACjC,GAAA,CAAI,CAAC,CAAA,KAAM,OAAOA,GAAAA,CAAG,GAAA,CAAI,CAAC,CAAC,CAAA,CAAE,CAAA;AAChC,EAAA,OAAO,CAAC,IAAA,EAAM,GAAG,UAAU,CAAA;AAC7B;;;ACnFO,SAAS,WAAW,GAAA,EAA6B;AACtD,EAAA,OAAO;AAAA,IACL,IAAI,GAAA,CAAI,EAAA;AAAA,IACR,WAAW,GAAA,CAAI,SAAA;AAAA,IACf,WAAW,GAAA,CAAI,UAAA;AAAA,IACf,MAAA,EAAQ;AAAA,MACN,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,SAAS,GAAA,CAAI,OAAA;AAAA,MACb,GAAI,IAAI,QAAA,GAAW,EAAE,UAAU,GAAA,CAAI,QAAA,KAAa;AAAC,KACnD;AAAA,IACA,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,GAAI,GAAA,CAAI,SAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,SAAS,CAAA,EAA6B,GAAI,EAAC;AAAA,IACtF,GAAI,GAAA,CAAI,UAAA,GAAa,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA,EAAuB,GAAI;AAAC,GACrF;AACF;;;ACtBO,SAAS,UAAA,CACd,QACA,CAAA,EACkB;AAClB,EAAA,MAAM,KAAK,UAAA,CAAW,MAAA,EAAQ,EAAE,QAAA,EAAU,MAAM,CAAA;AAChD,EAAA,IAAI;AACF,IAAA,EAAA,CAAG,KAAK,sBAAsB,CAAA;AAC9B,IAAA,MAAM,KAAA,GAAQ,EAAE,KAAA,IAAS,GAAA;AACzB,IAAA,MAAM,SAAS,KAAA,GAAQ,CAAA;AACvB,IAAA,MAAM,EAAE,GAAA,EAAK,MAAA,EAAO,GAAI,WAAA,CAAY,EAAE,GAAG,CAAA,EAAG,KAAA,EAAO,MAAA,EAAQ,CAAA;AAC3D,IAAA,MAAM,OAAO,EAAA,CAAG,OAAA,CAAQ,GAAG,CAAA,CAAE,IAAkB,MAAM,CAAA;AAErD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA;AAC/B,IAAA,MAAM,OAAA,GAAU,IAAI,MAAA,GAAS,KAAA;AAC7B,IAAA,MAAM,UAAU,OAAA,GAAU,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,GAAI,GAAA;AAEhD,IAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,KAAA,EAAM,CAAE,OAAA,EAAQ;AAC9C,IAAA,MAAM,aAAa,OAAA,GAAU,OAAA,CAAQ,QAAQ,MAAA,GAAS,CAAC,EAAG,EAAA,GAAK,KAAA,CAAA;AAC/D,IAAA,OAAO,EAAE,SAAS,aAAA,EAAe,GAAI,aAAa,EAAE,UAAA,EAAW,GAAI,EAAC,EAAG;AAAA,EACzE,CAAA,SAAE;AACA,IAAA,EAAA,CAAG,KAAA,EAAM;AAAA,EACX;AACF;AAOA,SAAS,YAAY,CAAA,EAAqE;AACxF,EAAA,MAAM,KAAA,GAAkB,CAAC,mBAAmB,CAAA;AAC5C,EAAA,MAAM,MAAA,GAAkC,EAAE,IAAA,EAAM,CAAA,CAAE,SAAA,EAAU;AAE5D,EAAA,IAAI,EAAE,MAAA,EAAQ;AACZ,IAAA,KAAA,CAAM,KAAK,cAAc,CAAA;AACzB,IAAA,MAAA,CAAO,UAAU,CAAA,CAAE,MAAA;AAAA,EACrB;AACA,EAAA,IAAI,CAAA,CAAE,QAAQ,IAAA,EAAM;AAClB,IAAA,KAAA,CAAM,KAAK,cAAc,CAAA;AACzB,IAAA,MAAA,CAAO,KAAA,GAAQ,EAAE,MAAA,CAAO,IAAA;AAAA,EAC1B;AACA,EAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,IAAA,KAAA,CAAM,KAAK,gBAAgB,CAAA;AAC3B,IAAA,MAAA,CAAO,IAAA,GAAO,EAAE,MAAA,CAAO,OAAA;AAAA,EACzB;AACA,EAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,IAAA,KAAA,CAAM,KAAK,kBAAkB,CAAA;AAC7B,IAAA,MAAA,CAAO,KAAA,GAAQ,EAAE,MAAA,CAAO,QAAA;AAAA,EAC1B;AACA,EAAA,IAAI,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,MAAA,CAAO,SAAS,CAAA,EAAG;AACnC,IAAA,MAAM,YAAA,GAAe,CAAA,CAAE,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACjE,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,YAAY,CAAA,CAAA,CAAG,CAAA;AACvC,IAAA,CAAA,CAAE,MAAA,CAAO,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AAC3B,MAAA,MAAA,CAAO,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,CAAA,GAAI,GAAA;AAAA,IACvB,CAAC,CAAA;AAAA,EACH;AACA,EAAA,IAAI,EAAE,KAAA,EAAO;AACX,IAAA,KAAA,CAAM,KAAK,qBAAqB,CAAA;AAChC,IAAA,MAAA,CAAO,SAAS,CAAA,CAAE,KAAA;AAAA,EACpB;AACA,EAAA,IAAI,EAAE,KAAA,EAAO;AACX,IAAA,KAAA,CAAM,KAAK,qBAAqB,CAAA;AAChC,IAAA,MAAA,CAAO,SAAS,CAAA,CAAE,KAAA;AAAA,EACpB;AACA,EAAA,IAAI,EAAE,MAAA,EAAQ;AACZ,IAAA,KAAA,CAAM,KAAK,sBAAsB,CAAA;AACjC,IAAA,MAAA,CAAO,OAAA,GAAU,CAAA,CAAA,EAAI,CAAA,CAAE,MAAM,CAAA,CAAA,CAAA;AAAA,EAC/B;AAEA,EAAA,MAAM,KAAA,GAAQ,EAAE,KAAA,IAAS,GAAA;AACzB,EAAA,MAAA,CAAO,MAAA,GAAS,KAAA;AAEhB,EAAA,MAAM,GAAA,GAAM;AAAA;AAAA;AAAA,UAAA,EAGF,KAAA,CAAM,IAAA,CAAK,OAAO,CAAC;AAAA;AAAA;AAAA,EAAA,CAAA;AAI7B,EAAA,OAAO,EAAE,KAAK,MAAA,EAAO;AACvB;;;AC7EA,IAAM,mBAAA,GAAsB,GAAA;AAC5B,IAAM,gBAAA,GAAmB,GAAA;AAOzB,eAAsB,UAAU,IAAA,EAAuC;AACrE,EAAA,MAAM,UAAA,GAAa,KAAK,UAAA,IAAc,mBAAA;AACtC,EAAA,IAAI,QAAA,GAAW,KAAK,YAAA,IAAgB,EAAA;AAEpC,EAAA,OAAO,CAAC,IAAA,CAAK,MAAA,EAAQ,OAAA,EAAS;AAC5B,IAAA,MAAM,KAAK,UAAA,CAAW,IAAA,CAAK,QAAQ,EAAE,QAAA,EAAU,MAAM,CAAA;AACrD,IAAA,IAAI;AACF,MAAA,EAAA,CAAG,KAAK,sBAAsB,CAAA;AAC9B,MAAA,MAAM,EAAE,GAAA,EAAK,MAAA,EAAO,GAAI,eAAA,CAAgB,EAAE,GAAG,IAAA,CAAK,KAAA,EAAO,QAAA,EAAU,CAAA;AACnE,MAAA,MAAM,OAAO,EAAA,CAAG,OAAA,CAAQ,GAAG,CAAA,CAAE,IAAkB,MAAM,CAAA;AACrD,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,QAAA,MAAM,KAAA,GAAQ,WAAW,GAAG,CAAA;AAC5B,QAAA,IAAA,CAAK,QAAQ,KAAK,CAAA;AAClB,QAAA,IAAI,KAAA,CAAM,EAAA,GAAK,QAAA,EAAU,QAAA,GAAW,KAAA,CAAM,EAAA;AAAA,MAC5C;AAAA,IACF,CAAA,SAAE;AACA,MAAA,EAAA,CAAG,KAAA,EAAM;AAAA,IACX;AAEA,IAAA,IAAI,IAAA,CAAK,QAAQ,OAAA,EAAS;AAC1B,IAAA,MAAM,kBAAA,CAAmB,UAAA,EAAY,IAAA,CAAK,MAAM,CAAA;AAAA,EAClD;AACF;AAaA,SAAS,gBACP,CAAA,EAIa;AACb,EAAA,MAAM,KAAA,GAAkB,CAAC,mBAAA,EAAqB,gBAAgB,CAAA;AAC9D,EAAA,MAAM,MAAA,GAAkC;AAAA,IACtC,MAAM,CAAA,CAAE,SAAA;AAAA,IACR,WAAW,CAAA,CAAE;AAAA,GACf;AAEA,EAAA,IAAI,CAAA,CAAE,QAAQ,IAAA,EAAM;AAClB,IAAA,KAAA,CAAM,KAAK,cAAc,CAAA;AACzB,IAAA,MAAA,CAAO,KAAA,GAAQ,EAAE,MAAA,CAAO,IAAA;AAAA,EAC1B;AACA,EAAA,IAAI,CAAA,CAAE,QAAQ,OAAA,EAAS;AACrB,IAAA,KAAA,CAAM,KAAK,gBAAgB,CAAA;AAC3B,IAAA,MAAA,CAAO,IAAA,GAAO,EAAE,MAAA,CAAO,OAAA;AAAA,EACzB;AACA,EAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,IAAA,KAAA,CAAM,KAAK,kBAAkB,CAAA;AAC7B,IAAA,MAAA,CAAO,KAAA,GAAQ,EAAE,MAAA,CAAO,QAAA;AAAA,EAC1B;AACA,EAAA,IAAI,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,MAAA,CAAO,SAAS,CAAA,EAAG;AACnC,IAAA,MAAM,YAAA,GAAe,CAAA,CAAE,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACjE,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,YAAY,CAAA,CAAA,CAAG,CAAA;AACvC,IAAA,CAAA,CAAE,MAAA,CAAO,OAAA,CAAQ,CAAC,GAAA,EAAK,CAAA,KAAM;AAC3B,MAAA,MAAA,CAAO,CAAA,IAAA,EAAO,CAAC,CAAA,CAAE,CAAA,GAAI,GAAA;AAAA,IACvB,CAAC,CAAA;AAAA,EACH;AACA,EAAA,IAAI,EAAE,KAAA,EAAO;AACX,IAAA,KAAA,CAAM,KAAK,qBAAqB,CAAA;AAChC,IAAA,MAAA,CAAO,SAAS,CAAA,CAAE,KAAA;AAAA,EACpB;AACA,EAAA,IAAI,EAAE,KAAA,EAAO;AACX,IAAA,KAAA,CAAM,KAAK,qBAAqB,CAAA;AAChC,IAAA,MAAA,CAAO,SAAS,CAAA,CAAE,KAAA;AAAA,EACpB;AACA,EAAA,IAAI,EAAE,MAAA,EAAQ;AACZ,IAAA,KAAA,CAAM,KAAK,sBAAsB,CAAA;AACjC,IAAA,MAAA,CAAO,OAAA,GAAU,CAAA,CAAA,EAAI,CAAA,CAAE,MAAM,CAAA,CAAA,CAAA;AAAA,EAC/B;AAEA,EAAA,MAAA,CAAO,MAAA,GAAS,gBAAA;AAEhB,EAAA,MAAM,GAAA,GAAM;AAAA;AAAA;AAAA,UAAA,EAGF,KAAA,CAAM,IAAA,CAAK,OAAO,CAAC;AAAA;AAAA;AAAA,EAAA,CAAA;AAI7B,EAAA,OAAO,EAAE,KAAK,MAAA,EAAO;AACvB;AAEA,SAAS,kBAAA,CAAmB,IAAY,MAAA,EAAqC;AAC3E,EAAA,OAAO,IAAI,OAAA,CAAc,CAACG,QAAAA,KAAY;AACpC,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAAA,QAAAA,EAAQ;AACR,MAAA;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,MAAA,MAAA,EAAQ,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAC5C,MAAAA,QAAAA,EAAQ;AAAA,IACV,GAAG,EAAE,CAAA;AACL,IAAA,MAAM,UAAU,MAAM;AACpB,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,MAAA,EAAQ,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAC5C,MAAAA,QAAAA,EAAQ;AAAA,IACV,CAAA;AACA,IAAA,MAAA,EAAQ,iBAAiB,OAAA,EAAS,OAAA,EAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AAAA,EAC3D,CAAC,CAAA;AACH;;;AChIO,SAAS,SAAA,CAAU,KAAA,EAAe,GAAA,mBAAY,IAAI,MAAK,EAAW;AACvE,EAAA,MAAM,OAAA,GAAU,MAAM,IAAA,EAAK;AAC3B,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,CAAA,6BAAA,CAA+B,CAAA;AAAA,EACjD;AAEA,EAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,IAAA,CAAK,OAAO,CAAA;AACpD,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAM,SAAS,MAAA,CAAO,QAAA,CAAS,QAAA,CAAS,CAAC,GAAI,EAAE,CAAA;AAC/C,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,CAAC,CAAA,CAAG,WAAA,EAAY;AACtC,IAAA,MAAM,EAAA,GAAK,MAAA,GAAS,MAAA,CAAO,IAAI,CAAA;AAC/B,IAAA,OAAO,IAAI,IAAA,CAAK,GAAA,CAAI,SAAQ,GAAI,EAAE,EAAE,WAAA,EAAY;AAAA,EAClD;AAEA,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACjC,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,EAAG;AACzB,IAAA,OAAO,IAAI,IAAA,CAAK,MAAM,CAAA,CAAE,WAAA,EAAY;AAAA,EACtC;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,4BAA4B,KAAK,CAAA,4FAAA;AAAA,GACnC;AACF;AAEA,SAAS,OAAO,IAAA,EAAsB;AACpC,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,GAAA;AACH,MAAA,OAAO,GAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,GAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,IAAA;AAAA,IACT,KAAK,GAAA;AACH,MAAA,OAAO,KAAA;AAAA,IACT;AACE,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,IAAI,CAAA,CAAE,CAAA;AAAA;AAElD;ACzBA,eAAsB,YAAY,IAAA,EAMH;AAC7B,EAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,IAAA,CAAK,GAAG,CAAA;AAIzC,EAAA,MAAM,SAAS,uBAAA,CAAwB;AAAA,IACrC,KAAA,EAAO;AAAA,MACL,QAAA,CAAS;AAAA,QACP,GAAA,EAAK,OAAA;AAAA,QACL,OAAA,EAAS,MAAO,IAAA,CAAK,KAAA,GAAQ,EAAE,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,KAAK,CAAA,CAAA,EAAG,GAAI;AAAC,OAC3E;AAAA;AACH,GACD,CAAA;AAED,EAAA,MAAM,MAAA,GAAU,MAAM,MAAA,CAAO,KAAA,CAAM,qBAAA,EAAuB;AAAA,IACxD,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,OAAO,IAAA,CAAK;AAAA,GACb,CAAA;AAID,EAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,OAAA,EAAS,OAAO,OAAA,CAAQ,KAAA,EAAM,CAAE,OAAA,EAAQ,EAAE;AAChE;AAEA,SAAS,iBAAiB,GAAA,EAAqB;AAC7C,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AACtC,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG,OAAO,OAAA;AACtC,EAAA,OAAO,GAAG,OAAO,CAAA,KAAA,CAAA;AACnB;ACjCA,eAAsB,WAAW,IAAA,EAAwC;AACvE,EAAA,MAAM,OAAA,GAAUsC,iBAAAA,CAAiB,IAAA,CAAK,GAAG,CAAA;AACzC,EAAA,MAAM,SAASC,uBAAAA,CAAwB;AAAA,IACrC,KAAA,EAAO;AAAA,MACL,oBAAA,CAAqB;AAAA,QACnB,GAAA,EAAK,OAAA;AAAA,QACL,oBAAoB,OAAO;AAAA;AAAA,UAEzB,GAAI,IAAA,CAAK,KAAA,GAAQ,EAAE,OAAA,EAAS,EAAE,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,KAAK,CAAA,CAAA,EAAG,KAAM;AAAC,SAC7E;AAAA,OACD;AAAA;AACH,GACD,CAAA;AAED,EAAA,MAAM,MAAA,GAAS,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AAEpC,EAAA,OAAO,IAAI,OAAA,CAAc,CAACvC,QAAAA,EAAS,MAAA,KAAW;AAC5C,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,MAAM,MAAA,GAAS,CAAC,GAAA,KAAkB;AAChC,MAAA,IAAI,OAAA,EAAS;AACb,MAAA,OAAA,GAAU,IAAA;AACV,MAAA,IAAI;AACF,QAAA,GAAA,CAAI,WAAA,EAAY;AAAA,MAClB,CAAA,CAAA,MAAQ;AAAA,MAER;AACA,MAAA,IAAA,CAAK,MAAA,EAAQ,mBAAA,CAAoB,OAAA,EAAS,OAAO,CAAA;AACjD,MAAA,IAAI,GAAA,SAAY,GAAG,CAAA;AAAA,WACdA,QAAAA,EAAQ;AAAA,IACf,CAAA;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,MAAA,EAAO;AAC7B,IAAA,IAAI,IAAA,CAAK,QAAQ,OAAA,EAAS;AAExB,MAAAA,QAAAA,EAAQ;AACR,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,QAAQ,gBAAA,CAAiB,OAAA,EAAS,SAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AAE9D,IAAA,MAAM,MAAM,MAAA,CAAO,YAAA;AAAA,MACjB,sBAAA;AAAA,MACA,EAAE,SAAA,EAAW,IAAA,CAAK,SAAA,EAAW,SAAA,EAAW,KAAK,SAAA,EAAU;AAAA,MACvD;AAAA,QACE,MAAA,EAAQ,CAAC,GAAA,KAAQ;AACf,UAAA,MAAM,KAAA,GAAQ,GAAA;AACd,UAAA,IAAI,MAAA,CAAO,KAAK,CAAA,EAAG,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,QACvC,CAAA;AAAA,QACA,OAAA,EAAS,CAAC,GAAA,KAAQ,MAAA,CAAO,GAAG,CAAA;AAAA,QAC5B,UAAA,EAAY,MAAM,MAAA,EAAO;AAAA,QACzB,SAAA,EAAW,MAAM,MAAA;AAAO;AAC1B,KACF;AAAA,EACF,CAAC,CAAA;AACH;AAEA,SAASsC,kBAAiB,GAAA,EAAqB;AAC7C,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AACtC,EAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG,OAAO,OAAA;AACtC,EAAA,OAAO,GAAG,OAAO,CAAA,KAAA,CAAA;AACnB;AAOA,SAAS,WAAW,CAAA,EAA0D;AAC5E,EAAA,MAAM,UAAU,CAAA,CAAE,KAAA,GAAQ,KAAK,KAAA,CAAM,CAAA,CAAE,KAAK,CAAA,GAAI,MAAA;AAChD,EAAA,MAAM,UAAU,CAAA,CAAE,KAAA,GAAQ,KAAK,KAAA,CAAM,CAAA,CAAE,KAAK,CAAA,GAAI,MAAA;AAChD,EAAA,MAAM,cAAc,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,MAAA,CAAO,aAAY,GAAI,MAAA;AACxD,EAAA,MAAM,QAAA,GAAW,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,MAAA,CAAO,MAAA,GAAS,CAAA,GAAI,IAAI,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA,GAAI,MAAA;AACvE,EAAA,MAAM,IAAA,GAAO,EAAE,MAAA,EAAQ,IAAA;AACvB,EAAA,MAAM,OAAA,GAAU,EAAE,MAAA,EAAQ,OAAA;AAC1B,EAAA,MAAM,QAAA,GAAW,EAAE,MAAA,EAAQ,QAAA;AAE3B,EAAA,OAAO,CAAC,CAAA,KAAM;AACZ,IAAA,IAAI,IAAA,IAAQ,CAAA,CAAE,MAAA,CAAO,IAAA,KAAS,MAAM,OAAO,KAAA;AAC3C,IAAA,IAAI,OAAA,IAAW,CAAA,CAAE,MAAA,CAAO,OAAA,KAAY,SAAS,OAAO,KAAA;AACpD,IAAA,IAAI,QAAA,IAAY,CAAA,CAAE,MAAA,CAAO,QAAA,KAAa,UAAU,OAAO,KAAA;AACvD,IAAA,IAAI,YAAY,CAAC,QAAA,CAAS,IAAI,CAAA,CAAE,KAAK,GAAG,OAAO,KAAA;AAC/C,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,SAAS,CAAA;AACjC,MAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,EAAE,CAAA,IAAK,EAAA,GAAK,SAAS,OAAO,KAAA;AAAA,IAChD;AACA,IAAA,IAAI,YAAY,MAAA,EAAW;AACzB,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,SAAS,CAAA;AACjC,MAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,EAAE,CAAA,IAAK,EAAA,GAAK,SAAS,OAAO,KAAA;AAAA,IAChD;AACA,IAAA,IAAI,WAAA,IAAe,CAAC,CAAA,CAAE,OAAA,CAAQ,aAAY,CAAE,QAAA,CAAS,WAAW,CAAA,EAAG,OAAO,KAAA;AAC1E,IAAA,OAAO,IAAA;AAAA,EACT,CAAA;AACF;ACnGA,IAAM,eAAA,GAAkB,CAAA;AAajB,SAAS,YAAY,IAAA,EAAiC;AAC3D,EAAA,IAAI,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,WAAA,EAAa;AACvC,IAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,EACxD;AAEA,EAAA,MAAM,WAAWjD,eAAAA,CAAK,OAAA,CAAQ,KAAK,UAAA,IAAc,OAAA,CAAQ,KAAK,CAAA;AAC9D,EAAA,MAAM,OAAA,GAAU,WAAW,QAAQ,CAAA;AAEnC,EAAA,IAAI,KAAK,UAAA,EAAY;AACnB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,yDAAA,EAA4D,eAAe,CAAA,WAAA,EAAc,QAAQ,CAAA;AAAA,OACnG;AAAA,IACF;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAQ;AAAA,EAC1C;AAEA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,WAAA,IAAe,gCAAA,EAAiC;AACvE,EAAA,MAAM,QAAQ,YAAA,EAAa;AAE3B,EAAA,IAAI,KAAK,WAAA,EAAa;AACpB,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,mJAAA;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,GAAA,EAAK,WAAW,KAAA,EAAM;AAAA,EACjD;AAGA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAQ;AAAA,EAC1C;AACA,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,GAAA,EAAK,WAAW,KAAA,EAAM;AAAA,EACjD;AACA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,qCAAqC,QAAQ,CAAA,8HAAA;AAAA,GAC/C;AACF;AAEA,SAAS,WAAW,QAAA,EAAsC;AACxD,EAAA,IAAI,GAAA,GAAM,QAAA;AACV,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,eAAA,EAAiB,CAAA,EAAA,EAAK;AACxC,IAAA,MAAM,SAAA,GAAYA,eAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,WAAW,SAAS,CAAA;AACrD,IAAA,IAAIc,UAAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,IAAI;AACF,QAAA,IAAI,QAAA,CAAS,SAAS,CAAA,CAAE,MAAA,IAAU,OAAO,SAAA;AAAA,MAC3C,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAASd,eAAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAC/B,IAAA,IAAI,MAAA,KAAW,KAAK,OAAO,MAAA;AAC3B,IAAA,GAAA,GAAM,MAAA;AAAA,EACR;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,gCAAA,GAAuD;AAC9D,EAAA,MAAM,MAAA,GAAS,QAAQ,GAAA,CAAI,mBAAA;AAC3B,EAAA,IAAI,QAAQ,OAAO,MAAA;AACnB,EAAA,MAAM,WAAW,kBAAA,EAAmB;AACpC,EAAA,IAAI,OAAO,QAAA,CAAS,WAAA,KAAgB,QAAA,IAAY,SAAS,WAAA,EAAa;AACpE,IAAA,OAAO,QAAA,CAAS,WAAA;AAAA,EAClB;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,YAAA,GAAmC;AAC1C,EAAA,MAAM,QAAA,GAAW,QAAQ,GAAA,CAAI,gBAAA;AAC7B,EAAA,IAAI,UAAU,OAAO,QAAA;AACrB,EAAA,MAAM,WAAW,kBAAA,EAAmB;AACpC,EAAA,IAAI,OAAO,QAAA,CAAS,QAAA,KAAa,QAAA,IAAY,SAAS,QAAA,EAAU;AAC9D,IAAA,OAAO,QAAA,CAAS,QAAA;AAAA,EAClB;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,kBAAA,GAA8C;AACrD,EAAA,IAAI;AACF,IAAA,MAAM,eAAeA,eAAAA,CAAK,IAAA,CAAKmD,OAAAA,EAAQ,EAAG,WAAW,eAAe,CAAA;AACpE,IAAA,IAAI,CAACrC,UAAAA,CAAW,YAAY,CAAA,SAAU,EAAC;AACvC,IAAA,OAAO,IAAA,CAAK,KAAA,CAAMsC,YAAAA,CAAa,YAAA,EAAc,MAAM,CAAC,CAAA;AAAA,EACtD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;;;ACxGA,IAAM,YAAA,uBAAmB,GAAA,CAAc,CAAC,SAAS,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAC,CAAA;AAoClE,SAAS,sBAAA,GAAkC;AAChD,EAAA,MAAM,GAAA,GAAM,IAAIlD,OAAAA,CAAQ,MAAM,EAC3B,WAAA,CAAY,kDAAkD,CAAA,CAC9D,QAAA,CAAS,aAAA,EAAe,qBAAqB,EAC7C,MAAA,CAAO,eAAA,EAAiB,4DAA4D,CAAA,CACpF,MAAA,CAAO,qBAAA,EAAuB,0BAA0B,CAAA,CACxD,MAAA,CAAO,uBAAA,EAAyB,2BAA2B,CAAA,CAC3D,MAAA;AAAA,IACC,iBAAA;AAAA,IACA,sDAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAC,GACH,CACC,MAAA,CAAO,wBAAA,EAA0B,mDAAmD,CAAA,CACpF,OAAO,eAAA,EAAiB,uBAAuB,CAAA,CAC/C,MAAA,CAAO,iBAAA,EAAmB,0CAA0C,EACpE,MAAA,CAAO,aAAA,EAAe,qCAAqC,CAAA,CAC3D,MAAA,CAAO,eAAA,EAAiB,sDAAsD,CAAA,CAC9E,MAAA,CAAO,QAAA,EAAU,4CAA4C,CAAA,CAC7D,MAAA,CAAO,WAAW,uCAAuC,CAAA,CACzD,MAAA,CAAO,UAAA,EAAY,qCAAqC,CAAA,CACxD,OAAO,sBAAA,EAAwB,iCAAiC,CAAA,CAChE,MAAA,CAAO,mBAAA,EAAqB,uCAAuC,EACnE,MAAA,CAAO,qBAAA,EAAuB,sCAAsC,CAAA,CACpE,MAAA,CAAO,QAAA,EAAU,yDAAyD,CAAA,CAC1E,MAAA,CAAO,OAAO,SAAA,EAAmB,IAAA,KAAkB;AAClD,IAAA,IAAI;AACF,MAAA,MAAM,cAAA,CAAe,WAAW,IAAI,CAAA;AAAA,IACtC,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,eAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA;AACvD,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,IACrB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;AAEA,eAAe,cAAA,CAAe,WAAmB,IAAA,EAA8B;AAC7E,EAAA,MAAM,UAAU,IAAA,CAAK,KAAA,IAAS,EAAC,EAAG,IAAI,aAAa,CAAA;AACnD,EAAA,MAAM,KAAA,GAAqC;AAAA,IACzC,GAAI,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,OAAA,IAAW,KAAK,QAAA,GAClC;AAAA,MACE,MAAA,EAAQ;AAAA,QACN,GAAI,KAAK,IAAA,GAAO,EAAE,MAAM,IAAA,CAAK,IAAA,KAAoD,EAAC;AAAA,QAClF,GAAI,KAAK,OAAA,GAAU,EAAE,SAAS,IAAA,CAAK,OAAA,KAAY,EAAC;AAAA,QAChD,GAAI,KAAK,QAAA,GAAW,EAAE,UAAU,IAAA,CAAK,QAAA,KAAa;AAAC;AACrD,QAEF,EAAC;AAAA,IACL,GAAI,MAAA,CAAO,MAAA,GAAS,IAAI,EAAE,MAAA,KAAW,EAAC;AAAA,IACtC,GAAI,IAAA,CAAK,KAAA,GAAQ,EAAE,KAAA,EAAO,UAAU,IAAA,CAAK,KAAK,CAAA,EAAE,GAAI,EAAC;AAAA,IACrD,GAAI,IAAA,CAAK,KAAA,GAAQ,EAAE,KAAA,EAAO,UAAU,IAAA,CAAK,KAAK,CAAA,EAAE,GAAI,EAAC;AAAA,IACrD,GAAI,KAAK,MAAA,GAAS,EAAE,QAAQ,IAAA,CAAK,MAAA,KAAW,EAAC;AAAA,IAC7C,GAAI,IAAA,CAAK,KAAA,GAAQ,EAAE,KAAA,EAAO,gBAAA,CAAiB,IAAA,CAAK,KAAA,EAAO,SAAS,CAAA,EAAE,GAAI,EAAE,OAAO,GAAA,EAAI;AAAA,IACnF,GAAI,KAAK,MAAA,GAAS,EAAE,QAAQ,IAAA,CAAK,MAAA,KAAW;AAAC,GAC/C;AAEA,EAAA,MAAM,WAAW,WAAA,CAAY;AAAA,IAC3B,YAAY,IAAA,CAAK,KAAA;AAAA,IACjB,aAAa,IAAA,CAAK,MAAA;AAAA,IAClB,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,aAAa,IAAA,CAAK;AAAA,GACnB,CAAA;AAED,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI,UAAA;AAEJ,EAAA,IAAI,QAAA,CAAS,SAAS,OAAA,EAAS;AAC7B,IAAA,MAAM,MAAA,GAAS,WAAW,QAAA,CAAS,MAAA,EAAQ,EAAE,GAAG,KAAA,EAAO,WAAW,CAAA;AAClE,IAAA,OAAA,GAAU,MAAA,CAAO,OAAA;AACjB,IAAA,UAAA,GAAa,MAAA,CAAO,UAAA;AAAA,EACtB,CAAA,MAAO;AACL,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY;AAAA,MAC/B,KAAK,QAAA,CAAS,GAAA;AAAA,MACd,GAAI,SAAS,KAAA,GAAQ,EAAE,OAAO,QAAA,CAAS,KAAA,KAAU,EAAC;AAAA,MAClD,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,SAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAA,GAAU,MAAA,CAAO,OAAA;AACjB,IAAA,UAAA,GAAa,MAAA,CAAO,UAAA;AAAA,EACtB;AAEA,EAAA,MAAM,GAAA,GAAM,cAAc,OAAA,EAAS;AAAA,IACjC,MAAM,IAAA,CAAK,IAAA;AAAA;AAAA;AAAA,IAGX,GAAI,cAAc,CAAC,IAAA,CAAK,OAAO,EAAE,UAAA,KAAe;AAAC,GAClD,CAAA;AACD,EAAA,IAAI,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG,OAAA,CAAQ,IAAI,GAAG,CAAA;AAEnC,EAAA,IAAI,KAAK,IAAA,EAAM;AACb,IAAA,MAAM,OAAA,CAAQ;AAAA,MACZ,SAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA;AAAA,MACA,cAAA,EAAgB;AAAA,KACjB,CAAA;AAAA,EACH;AACF;AAUA,eAAe,QAAQ,IAAA,EAAkC;AACvD,EAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,UAAA,CAAW,KAAA,EAAM;AAEjB,IAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AAAA,EACrB,CAAA;AACA,EAAA,OAAA,CAAQ,EAAA,CAAG,UAAU,QAAQ,CAAA;AAE7B,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,KAAoB;AAChC,IAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,iBAAA,CAAkB,KAAA,EAAO,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,IAAA,EAAM,CAAC;AAAA,CAAI,CAAA;AAAA,EAChF,CAAA;AAEA,EAAA,IAAI;AACF,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAA,KAAS,OAAA,EAAS;AAElC,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,cAAA,CAAe,EAAA,CAAG,EAAE,CAAA,EAAG,EAAA;AAClD,MAAA,MAAM,SAAA,CAAU;AAAA,QACd,MAAA,EAAQ,KAAK,QAAA,CAAS,MAAA;AAAA,QACtB,OAAO,EAAE,GAAG,KAAK,KAAA,EAAO,SAAA,EAAW,KAAK,SAAA,EAAU;AAAA,QAClD,GAAI,aAAA,GAAgB,EAAE,YAAA,EAAc,aAAA,KAAkB,EAAC;AAAA,QACvD,OAAA,EAAS,IAAA;AAAA,QACT,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW;AACxB,QAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,MACrD;AACA,MAAA,MAAM,UAAA,CAAW;AAAA,QACf,GAAA,EAAK,KAAK,QAAA,CAAS,GAAA;AAAA,QACnB,GAAI,IAAA,CAAK,QAAA,CAAS,KAAA,GAAQ,EAAE,OAAO,IAAA,CAAK,QAAA,CAAS,KAAA,EAAM,GAAI,EAAC;AAAA,QAC5D,SAAA,EAAW,KAAK,IAAA,CAAK,SAAA;AAAA,QACrB,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,QAAQ,UAAA,CAAW,MAAA;AAAA,QACnB,OAAA,EAAS;AAAA,OACV,CAAA;AAAA,IACH;AAAA,EACF,CAAA,SAAE;AACA,IAAA,OAAA,CAAQ,cAAA,CAAe,UAAU,QAAQ,CAAA;AAAA,EAC3C;AACF;AAEA,SAAS,YAAA,CAAa,OAAe,IAAA,EAA0B;AAC7D,EAAA,OAAO,CAAC,GAAG,IAAA,EAAM,KAAK,CAAA;AACxB;AAEA,SAAS,cAAc,KAAA,EAAyB;AAC9C,EAAA,IAAI,CAAC,YAAA,CAAa,GAAA,CAAI,KAAiB,CAAA,EAAG;AACxC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,KAAK,CAAA,wCAAA,CAA0C,CAAA;AAAA,EACrF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,gBAAA,CAAiB,OAAe,IAAA,EAAsB;AAC7D,EAAA,MAAM,CAAA,GAAI,MAAA,CAAO,QAAA,CAAS,KAAA,EAAO,EAAE,CAAA;AACnC,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,IAAK,KAAK,CAAA,EAAG;AACjC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,iCAAA,EAAoC,KAAK,CAAA,CAAA,CAAG,CAAA;AAAA,EACrE;AACA,EAAA,OAAO,CAAA;AACT;;;ACrMO,SAAS,kBAAA,GAA8B;AAC5C,EAAA,MAAM,MAAM,IAAIA,OAAAA,CAAQ,SAAS,CAAA,CAAE,YAAY,iBAAiB,CAAA;AAEhE,EAAA,GAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,iCAAiC,CAAA,CAC7C,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,QAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,OAAO,IAAA,KAAS;AACtB,IAAA,MAAM,UAAA,GAAaF,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,UAAU,CAAA;AAC9C,IAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,UAAU,CAAA;AAC5C,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,MAAA,OAAA,CAAQ,oBAAoB,CAAA;AAC5B,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,IAAI,CAAA,CAAE,OAAA,CAAQ,CAAA,cAAA,EAAiB,UAAU,EAAE,CAAC,CAAA;AACpD,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,EAAA,EAAK,EAAE,GAAA,CAAI,OAAO,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,EAAG,EAAE,GAAA,CAAI,MAAA,CAAO,OAAO,EAAE,CAAC,CAAC,CAAA,EAAG,CAAA,CAAE,GAAA,CAAI,QAAQ,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA,EAAG,EAAE,GAAA,CAAI,OAAA,CAAQ,MAAA,CAAO,EAAE,CAAC,CAAC,GAAG,CAAA,CAAE,GAAA,CAAI,QAAA,CAAS,MAAA,CAAO,EAAE,CAAC,CAAC,CAAA,EAAG,CAAA,CAAE,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,KAC9K;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,OAAO,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,CAAA;AAChD,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,MAAM,SAAA,GAAY,OAAA,EAAS,KAAA,KAAU,CAAA,CAAE,KAAA;AACvC,MAAA,MAAM,MAAA,GAAS,SAAA,GAAYQ,GAAAA,CAAG,IAAA,CAAK,YAAO,CAAA,GAAI,OAAA;AAC9C,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAA,CAAO,IAAA,CAAK,GAAA,EAAI,GAAI,IAAI,IAAA,CAAK,CAAA,CAAE,SAAS,CAAA,CAAE,OAAA,MAAa,GAAK,CAAA;AAC7E,MAAA,MAAM,KAAA,GAAA,CAAS,CAAA,CAAE,KAAA,IAAS,EAAA,EAAI,OAAO,EAAE,CAAA;AACvC,MAAA,MAAM,cACJ,CAAA,CAAE,MAAA,KAAW,UAAA,GACTA,GAAAA,CAAG,QACH,CAAA,CAAE,MAAA,KAAW,QAAA,GACXA,GAAAA,CAAG,MACH,CAAA,CAAE,MAAA,KAAW,SAAA,GACXA,GAAAA,CAAG,OACHA,GAAAA,CAAG,GAAA;AACb,MAAA,MAAMC,UAAS,WAAA,CAAA,CAAa,CAAA,CAAE,UAAU,EAAA,EAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AACtD,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,EAAG,MAAM,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,CAAA,CAAE,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,MAAA,CAAO,MAAA,CAAO,EAAE,CAAC,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAIA,OAAM,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,KAAA,CAAO,CAAC,CAAA;AAAA,OAC7G;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,EACd,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,QAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,yBAAyB,EACrC,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,OAAA,CAAQ,KAAK,CAAA,CACjE,MAAA,CAAO,OAAO,OAAe,IAAA,KAAS;AACrC,IAAA,MAAM,UAAA,GAAaT,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,MAAM,eAAA,CAAgB,UAAA,EAAY,KAAK,CAAA;AACvD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAA,CAAO,CAAA,mBAAA,EAAsB,KAAK,CAAA,CAAE,CAAA;AACpC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,EAC9C,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,QAAQ,iBAAiB,CAAA,CACzB,WAAA,CAAY,4BAA4B,EACxC,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,OAAA,CAAQ,KAAK,CAAA,CACjE,MAAA,CAAO,OAAO,OAAe,IAAA,KAAS;AACrC,IAAA,MAAM,UAAA,GAAaA,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,iBAAA,CAAkB,YAAY,KAAK,CAAA;AACzC,IAAA,KAAA,CAAM,CAAA,qBAAA,EAAwB,EAAE,GAAA,CAAI,KAAA,CAAM,MAAM,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EAC1D,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,QAAQ,iBAAiB,CAAA,CACzB,WAAA,CAAY,kBAAkB,EAC9B,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,OAAA,CAAQ,KAAK,CAAA,CACjE,MAAA,CAAO,OAAO,OAAe,IAAA,KAAS;AACrC,IAAA,MAAM,UAAA,GAAaA,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC/C,IAAA,MAAM,aAAA,CAAc,YAAY,KAAK,CAAA;AACrC,IAAA,KAAA,CAAM,CAAA,iBAAA,EAAoB,EAAE,GAAA,CAAI,KAAA,CAAM,MAAM,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,EACtD,CAAC,CAAA;AAEH,EAAA,GAAA,CAAI,UAAA,CAAW,wBAAwB,CAAA;AAEvC,EAAA,GAAA,CAAI,MAAA,CAAO,MAAM,GAAA,CAAI,IAAA,EAAM,CAAA;AAE3B,EAAA,OAAO,GAAA;AACT;ACpGA,IAAM,UAAA,GAAqC;AAAA,EACzC,MAAA,EAAQQ,GAAAA,CAAG,KAAA,CAAM,QAAQ,CAAA;AAAA,EACzB,QAAA,EAAUA,GAAAA,CAAG,MAAA,CAAO,UAAU,CAAA;AAAA,EAC9B,KAAA,EAAOA,GAAAA,CAAG,IAAA,CAAK,OAAO,CAAA;AAAA,EACtB,KAAA,EAAOA,GAAAA,CAAG,GAAA,CAAI,OAAO,CAAA;AAAA,EACrB,OAAA,EAASA,GAAAA,CAAG,GAAA,CAAI,QAAG;AACrB,CAAA;AAEA,SAAS,aAAaL,GAAAA,EAAwB;AAC5C,EAAA,MAAM,MAAA,GAASA,IAAG,QAAA,EAAS;AAE3B,EAAA,IAAI,MAAA,CAAO,UAAU,CAAA,EAAG;AACtB,IAAA,OAAA,CAAQ,iDAAiD,CAAA;AACzD,IAAA;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,OAAA,CAAQ,kBAAkB,CAAC,CAAA;AAEzC,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AAC3B,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,KAAA,EAAO;AAC5B,MAAA,MAAM,IAAA,GAAO,CAAA,CAAE,KAAA,GAAQK,GAAAA,CAAG,IAAI,GAAG,CAAA,GAAI,CAAA,CAAE,QAAA,GAAWA,IAAG,KAAA,CAAM,QAAG,CAAA,GAAIA,GAAAA,CAAG,OAAO,QAAG,CAAA;AAC/E,MAAA,MAAMC,UAAS,CAAA,CAAE,KAAA,GACbD,IAAG,GAAA,CAAI,CAAA,CAAE,KAAK,CAAA,GACd,CAAA,CAAE,WACAA,GAAAA,CAAG,KAAA,CAAM,YAAY,CAAA,GACrBA,GAAAA,CAAG,OAAO,CAAA,EAAG,CAAA,CAAE,MAAM,CAAA,OAAA,CAAS,CAAA;AACpC,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,IAAI,IAAI,CAAA,CAAE,GAAA,CAAI,EAAE,IAAI,CAAC,IAAIA,GAAAA,CAAG,GAAA,CAAI,IAAI,CAAA,CAAE,IAAI,GAAG,CAAC,CAAA,CAAA,EAAIC,OAAM,CAAA,CAAE,CAAA;AAAA,IAC7E;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,CAAI,CAAA,EAAG,GAAG,CAAC,GAAG,OAAO,QAAA,CAAS,MAAA,EAAQ,CAAA,CAAE,IAAA,GAAO,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,IAAA,CAAK,MAAM,CAAC,CAAA;AAC3F,EAAA,MAAM,KAAA,GAAQ,CAAA;AAEd,EAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,OAAO,CAAA,IAAK,OAAO,QAAA,EAAU;AAC/C,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAC,CAAA,CAAA,EAAID,GAAAA,CAAG,GAAA,CAAI,CAAA,CAAA,EAAI,OAAA,CAAQ,MAAM,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,CAAA;AACrE,IAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,IAAA,CAAK,QAAQ,KAAA,GAAQ,EAAE,CAAC,CAAA,CAAE,CAAA;AAC7C,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,MAAM,IAAA,GAAO,UAAA,CAAW,CAAA,CAAE,UAAU,KAAK,UAAA,CAAW,OAAA;AACpD,MAAA,MAAM,GAAA,GAAM,EAAE,OAAA,GAAUA,GAAAA,CAAG,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA,GAAI,EAAA;AACnD,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,YAAA,CAAa,CAAA,CAAE,MAAM,KAAK,CAAC,IAAI,CAAA,CAAE,GAAA,CAAI,EAAE,IAAA,CAAK,MAAA,CAAO,KAAK,CAAC,CAAC,KAAK,IAAI,CAAA,EAAG,GAAG,CAAA,CAAE,CAAA;AAAA,IAC9F;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAKA,GAAAA,CAAG,GAAA,CAAI,GAAG,MAAA,CAAO,KAAK,CAAA,gBAAA,CAAkB,CAAC,CAAA,CAAE,CAAA;AAC5D,EAAA,OAAA,CAAQ,GAAA,EAAI;AACd;AAEA,SAAS,SAAA,CAAUL,GAAAA,EAAkB,IAAA,EAAc,IAAA,EAAoB;AACrE,EAAA,MAAM,QAAQA,GAAAA,CAAG,IAAA,CAAK,GAAG,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAEvC,EAAA,IAAI,OAAO,MAAA,IAAUL,aAAAA,CAAG,UAAA,CAAW,KAAA,CAAM,MAAM,CAAA,EAAG;AAChD,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,SAAA,CAAU,KAAA,CAAM,IAAI,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAC,CAAA,CAAE,CAAA;AACjE,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAE,CAAA;AAC7B,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,IAAIA,aAAAA,CAAG,YAAA,CAAa,KAAA,CAAM,MAAA,EAAQ,OAAO,CAAC,CAAA;AAClD,IAAA;AAAA,EACF;AAEA,EAAA,MAAA,CAAO,CAAA,iBAAA,EAAoB,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AACzC,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAChB;AAYO,SAAS,eAAA,GAA2B;AACzC,EAAA,OAAO,IAAII,OAAAA,CAAQ,MAAM,CAAA,CACtB,WAAA,CAAY,uDAAuD,CAAA,CACnE,QAAA,CAAS,QAAA,EAAU,2DAA2D,CAAA,CAC9E,QAAA,CAAS,UAAU,YAAY,CAAA,CAC/B,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,OAAA,CAAQ,GAAA,EAAK,EACjE,MAAA,CAAO,kBAAA,EAAoB,iBAAA,EAAmB,aAAa,CAAA,CAC3D,MAAA,CAAO,CAAC,IAAA,EAA0B,MAA0B,IAAA,KAAS;AACpE,IAAA,MAAMC,GAAAA,GAAK,IAAI,YAAA,CAAa;AAAA,MAC1B,UAAA,EAAYH,eAAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAAA,MACxC,cAAc,IAAA,CAAK;AAAA,KACpB,CAAA;AAED,IAAA,IAAI,CAAC,IAAA,EAAM;AAET,MAAA,YAAA,CAAaG,GAAE,CAAA;AAAA,IACjB,CAAA,MAAA,IAAW,CAAC,IAAA,EAAM;AAEhB,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACtB,QAAA,MAAM,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AAC7B,QAAA,SAAA,CAAUA,GAAAA,EAAI,GAAG,CAAC,CAAA;AAAA,MACpB,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,sEAAsE,CAAA;AAC7E,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,SAAA,CAAUA,GAAAA,EAAI,MAAM,IAAI,CAAA;AAAA,IAC1B;AAAA,EACF,CAAC,CAAA;AACL;;;ACnGA,IAAM,aAAA,GACJ,2IAAA;AAGF,SAASkD,UAAS,IAAA,EAAqB;AACrC,EAAA,MAAA,CAAO,CAAA,EAAG,aAAa,CAAA,wBAAA,EAA2B,IAAI,CAAA,CAAA,CAAG,CAAA;AACzD,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAChB;AAOO,SAAS,0BAA0B,GAAA,EAAoB;AAC5D,EAAA,MAAM,WAAW,GAAA,CAAI,OAAA,CAAQ,UAAU,CAAA,CAAE,YAAY,yCAAyC,CAAA;AAE9F,EAAA,QAAA,CACG,OAAA,CAAQ,YAAY,CAAA,CACpB,WAAA,CAAY,uCAAuC,EACnD,MAAA,CAAO,MAAMA,SAAAA,CAAS,MAAM,CAAC,CAAA;AAEhC,EAAA,QAAA,CACG,OAAA,CAAQ,YAAY,CAAA,CACpB,WAAA,CAAY,sCAAsC,EAClD,MAAA,CAAO,MAAMA,SAAAA,CAAS,MAAM,CAAC,CAAA;AAEhC,EAAA,QAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,iDAAiD,CAAA,CAC7D,MAAA,CAAO,SAAA,EAAW,oDAAA,EAAsD,KAAK,CAAA,CAC7E,MAAA,CAAO,MAAMA,SAAAA,CAAS,SAAS,CAAC,CAAA;AAEnC,EAAA,QAAA,CACG,OAAA,CAAQ,cAAc,CAAA,CACtB,WAAA,CAAY,iCAAiC,CAAA,CAC7C,MAAA,CAAO,UAAA,EAAY,yBAAA,EAA2B,KAAK,CAAA,CACnD,MAAA,CAAO,MAAMA,SAAAA,CAAS,QAAQ,CAAC,CAAA;AAElC,EAAA,QAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,yDAAyD,EACrE,MAAA,CAAO,MAAMA,SAAAA,CAAS,SAAS,CAAC,CAAA;AAEnC,EAAA,QAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,iDAAiD,EAC7D,MAAA,CAAO,MAAMA,SAAAA,CAAS,SAAS,CAAC,CAAA;AAEnC,EAAA,QAAA,CACG,OAAA,CAAQ,YAAY,CAAA,CACpB,WAAA,CAAY,oDAAoD,CAAA,CAChE,MAAA,CAAO,eAAA,EAAiB,iBAAiB,CAAA,CACzC,MAAA,CAAO,MAAMA,SAAAA,CAAS,MAAM,CAAC,CAAA;AAClC;;;ACzCA,SAAS,UAAA,GAAqB;AAC5B,EAAA,OAAYC,MAAA,CAAA,IAAA,CAAK,aAAA,EAAc,EAAG,SAAS,CAAA;AAC7C;AAEA,SAAS,gBAAgB,IAAA,EAAsB;AAC7C,EAAA,OAAYA,MAAA,CAAA,IAAA,CAAK,UAAA,EAAW,EAAG,IAAI,CAAA;AACrC;AAEA,SAAS,WAAW,GAAA,EAAqB;AACvC,EAAA,OACE,GAAA,CACG,QAAQ,QAAA,EAAU,EAAE,EACpB,KAAA,CAAM,MAAM,CAAA,CACZ,GAAA,EAAI,IAAK,QAAA;AAEhB;AAEA,SAAS,sBAAA,GAAiC;AACxC,EAAA,MAAM,IAAA,GAAO,iBAAA,CAAkB,OAAA,CAAQ,GAAA,EAAK,CAAA;AAC5C,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,MAAA;AAAA,MACE;AAAA,KAEF;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,OAAYA,MAAA,CAAA,IAAA,CAAK,IAAA,EAAM,uBAAA,EAAyB,CAAA;AAClD;AAEA,SAAS,mBAAmB,QAAA,EAAiC;AAC3D,EAAA,IAAI,CAACxC,UAAAA,CAAW,QAAQ,CAAA,SAAU,EAAC;AACnC,EAAA,IAAI;AACF,IAAA,OAAO,mBAAA,CAAoB,IAAA,CAAK,QAAQ,CAAA,CAAE,UAAA,EAAW;AAAA,EACvD,SAAS,GAAA,EAAK;AACZ,IAAA,MAAA,CAAO,CAAA,eAAA,EAAkB,QAAQ,CAAA,EAAA,EAAK,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAA;AACxF,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF;AAOA,SAAS,WAAA,CAAY,KAAA,EAAoB,IAAA,GAA4B,EAAC,EAAY;AAChF,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,KAAA,CAAM,IAAI,CAAA;AACvC,EAAA,IAAIA,UAAAA,CAAW,IAAI,CAAA,EAAG;AACpB,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,OAAO,KAAA;AACxB,IAAA,MAAA,CAAO,MAAM,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAM,CAAA;AAAA,EAC/C;AACA,EAAA,MAAM,IAAA,GAAO,CAAC,OAAA,EAAS,KAAA,CAAM,KAAK,IAAI,CAAA;AACtC,EAAA,IAAI,KAAA,CAAM,QAAQ,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,EAAG,UAAA,EAAY,MAAM,MAAM,CAAA;AAC5D,EAAA,MAAM,QAAQ,SAAA,CAAU,KAAA,EAAO,MAAM,EAAE,KAAA,EAAO,WAAW,CAAA;AACzD,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,MAAA,CAAO,CAAA,qBAAA,EAAwB,KAAA,CAAM,GAAG,CAAA,CAAE,CAAA;AAC1C,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACA,EAAA,OAAO,IAAA;AACT;AAOA,eAAe,qBAAqB,KAAA,EAIjC;AACD,EAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AAC7D,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,KAAA,CAAM,IAAI,CAAA;AACvC,IAAA,MAAM,QAAA,GAAA,CAAY,MAAM,OAAA,CAAQ,aAAA,EAAc,EAAG,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,KAAA,CAAM,IAAI,CAAA;AAClF,IAAA,MAAM,GAAA,GACJ,QAAA,IACC,MAAM,OAAA,CAAQ,UAAA,CAAW;AAAA,MACxB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,IAAA,EAAM,IAAA;AAAA,MACN,OAAA,EAAS,KAAA;AAAA,MACT,aAAA,EAAe,EAAE,GAAA,EAAK,KAAA,CAAM,GAAA,EAAK,QAAQ,KAAA,CAAM,MAAA,IAAU,MAAA,EAAQ,QAAA,EAAU,KAAA,EAAM;AAAA,MACjF,SAAA,EAAW;AAAA,KACZ,CAAA;AACH,IAAA,MAAM,OAAA,GAAU,IAAI,kBAAA,CAAmB,OAAA,EAAS,IAAI,EAAA,EAAI,IAAA,EAAM,oBAAoB,CAAA;AAClF,IAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,IAAA,EAAK;AAClC,IAAA,MAAM,OAAA,CAAQ,UAAA,CAAW,GAAA,CAAI,EAAE,CAAA;AAC/B,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,SAAE;AACA,IAAA,KAAA,EAAM;AAAA,EACR;AACF;AAGA,eAAe,iBAAA,CAAkB,MAAc,UAAA,EAAoC;AACjF,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,MAAM,kBAAA,EAAmB;AACpD,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAA,CAAY,MAAM,OAAA,CAAQ,aAAA,EAAc,EAAG,KAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA;AAC5E,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,QAAQ,aAAA,CAAc,IAAA,EAAM,EAAE,KAAA,EAAO,OAAO,CAAA;AAAA,IACpD;AAAA,EACF,CAAA,SAAE;AACA,IAAA,KAAA,EAAM;AAAA,EACR;AACA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,IAAA,GAAO,gBAAgB,IAAI,CAAA;AACjC,IAAA,IAAIA,UAAAA,CAAW,IAAI,CAAA,EAAG,MAAA,CAAO,IAAA,EAAM,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA;AAAA,EACrE;AACF;AAEO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,MAAM,GAAA,GAAM,IAAIZ,OAAAA,CAAQ,QAAQ,CAAA,CAAE,WAAA;AAAA,IAChC;AAAA,GACF;AAGA,EAAA,GAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,mEAAmE,CAAA,CAC/E,MAAA,CAAO,eAAA,EAAiB,2BAA2B,CAAA,CACnD,MAAA,CAAO,qBAAqB,iCAAiC,CAAA,CAC7D,OAAO,SAAA,EAAW,uCAAA,EAAyC,KAAK,CAAA,CAChE,MAAA,CAAO,OAAO,GAAA,EAAa,IAAA,KAA8D;AACxF,IAAA,MAAM,WAAW,sBAAA,EAAuB;AACxC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,UAAA,CAAW,GAAG,CAAA;AACxC,IAAA,MAAM,KAAA,GAAqB,EAAE,IAAA,EAAM,IAAA,EAAM,GAAA,EAAI;AAC7C,IAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,MAAA,GAAS,IAAA,CAAK,MAAA;AAErC,IAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,IAAA,CAAK,QAAQ,CAAA;AAChD,IAAA,MAAM,QAAA,GAAW,OAAO,UAAA,EAAW,CAAE,KAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA;AAChE,IAAA,IAAI,QAAA,IAAY,QAAA,CAAS,GAAA,KAAQ,GAAA,EAAK;AACpC,MAAA,MAAA;AAAA,QACE,mBAAmB,IAAI,CAAA,oBAAA,EAAuB,QAAQ,CAAA,uBAAA,EAChD,SAAS,GAAG,CAAA,uCAAA;AAAA,OACpB;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,MAAA,CAAO,UAAU,KAAK,CAAA;AACtB,IAAA,MAAA,CAAO,IAAA,EAAK;AAEZ,IAAA,MAAM,IAAA,GAAO,gBAAgB,IAAI,CAAA;AACjC,IAAA,MAAM,WAAA,GAAcY,WAAW,IAAI,CAAA;AACnC,IAAA,MAAM,SAAS,WAAA,CAAY,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,CAAK,OAAO,CAAA;AACvD,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,KAAA,CAAM,CAAA,wBAAA,EAA2B,IAAI,CAAA,CAAE,CAAA;AAAA,IACzC,WAAW,WAAA,EAAa;AACtB,MAAA,KAAA,CAAM,CAAA,UAAA,EAAa,GAAG,CAAA,QAAA,EAAM,IAAI,CAAA,CAAE,CAAA;AAAA,IACpC,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,CAAA,OAAA,EAAU,GAAG,CAAA,QAAA,EAAM,IAAI,CAAA,CAAE,CAAA;AAAA,IACjC;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,oBAAA,CAAqB,KAAK,CAAA;AAC/C,IAAA,KAAA;AAAA,MACE,WAAW,MAAA,CAAO,aAAa,OAAO,MAAA,CAAO,WAAW,mBAAmB,IAAI,CAAA,EAAA;AAAA,KACjF;AACA,IAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,MAAA,EAAQ,OAAA,CAAQ,GAAG,CAAA;AAC5C,IAAA,KAAA,CAAM,CAAA,QAAA,EAAW,IAAI,CAAA,gBAAA,EAAwBwC,MAAA,CAAA,QAAA,CAAS,QAAQ,GAAA,EAAI,EAAG,QAAQ,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,EACnF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,uDAAuD,CAAA,CACnE,MAAA,CAAO,QAAA,EAAU,gBAAgB,CAAA,CACjC,MAAA,CAAO,OAAO,IAAA,KAA6B;AAC1C,IAAA,MAAM,WAAW,sBAAA,EAAuB;AACxC,IAAA,MAAM,OAAA,GAAU,mBAAmB,QAAQ,CAAA;AAC3C,IAAA,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,OAAA,CAAQ,GAAA,CAAI,KAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAC,CAAA;AAClE,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAA,CAAQ,+EAA+E,CAAA;AACvF,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,OAAA,CAAQ,WAAW,CAAC,CAAA;AAClC,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,MAAM,MAAA,GAASxC,UAAAA,CAAW,eAAA,CAAgB,CAAA,CAAE,IAAI,CAAC,CAAA,GAAI,EAAA,GAAK,CAAA,CAAE,IAAA,CAAK,eAAe,CAAA;AAChF,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,OAAO,EAAE,CAAC,CAAC,CAAA,EAAA,EAAK,EAAE,GAAA,CAAI,CAAA,CAAE,GAAG,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,CAAA;AAAA,IACvE;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,EAAA,EAAO,EAAE,GAAA,CAAI,CAAA,EAAG,OAAA,CAAQ,MAAM,YAAY,CAAC;AAAA,CAAI,CAAA;AAAA,EAC7D,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,aAAa,CAAA,CACrB,WAAA,CAAY,2BAA2B,CAAA,CACvC,MAAA,CAAO,OAAO,IAAA,KAAiB;AAC9B,IAAA,MAAM,WAAW,sBAAA,EAAuB;AACxC,IAAA,MAAM,KAAA,GAAQ,mBAAmB,QAAQ,CAAA,CAAE,KAAK,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA;AACtE,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAA,CAAO,CAAA,iBAAA,EAAoB,IAAI,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAA,CAAG,CAAA;AAClD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,IAAA,CAAK,SAAA;AAAA,QACH;AAAA,UACE,GAAG,KAAA;AAAA,UACH,SAAA,EAAW,eAAA,CAAgB,KAAA,CAAM,IAAI,CAAA;AAAA,UACrC,MAAA,EAAQA,UAAAA,CAAW,eAAA,CAAgB,KAAA,CAAM,IAAI,CAAC;AAAA,SAChD;AAAA,QACA,IAAA;AAAA,QACA;AAAA;AACF,KACF;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,iDAAiD,CAAA,CAC7D,MAAA,CAAO,SAAA,EAAW,sDAAA,EAAwD,KAAK,CAAA,CAC/E,MAAA,CAAO,OAAO,MAAc,IAAA,KAA6B;AACxD,IAAA,MAAM,WAAW,sBAAA,EAAuB;AACxC,IAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,IAAA,CAAK,QAAQ,CAAA;AAChD,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,YAAA,CAAa,IAAI,CAAA;AACxC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAA,CAAO,CAAA,iBAAA,EAAoB,IAAI,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAA,CAAG,CAAA;AAClD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,MAAA,CAAO,IAAA,EAAK;AACZ,IAAA,MAAM,iBAAA,CAAkB,IAAA,EAAM,IAAA,CAAK,KAAK,CAAA;AACxC,IAAA,KAAA;AAAA,MACE,KAAK,KAAA,GACD,CAAA,gBAAA,EAAmB,IAAI,CAAA,uBAAA,CAAA,GACvB,mBAAmB,IAAI,CAAA,sDAAA;AAAA,KAC7B;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,aAAa,CAAA,CACrB,WAAA,CAAY,sDAAsD,CAAA,CAClE,MAAA,CAAO,OAAO,IAAA,KAA6B;AAC1C,IAAA,MAAM,WAAW,sBAAA,EAAuB;AACxC,IAAA,MAAM,GAAA,GAAM,mBAAmB,QAAQ,CAAA;AACvC,IAAA,MAAM,OAAA,GAAU,OAAO,GAAA,CAAI,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA,GAAI,GAAA;AAC5D,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,OAAA,CAAQ,IAAA,GAAO,CAAA,iBAAA,EAAoB,IAAI,CAAA,EAAA,CAAA,GAAO,4BAA4B,CAAA;AAC1E,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,KAAA,CAAM,IAAI,CAAA;AACvC,MAAA,IAAI,CAACA,UAAAA,CAAW,IAAI,CAAA,EAAG;AACrB,QAAA,WAAA,CAAY,KAAK,CAAA;AACjB,QAAA,KAAA,CAAM,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,YAAA,EAAe,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,MAC3C,CAAA,MAAO;AACL,QAAA,MAAM,IAAA,GAAO,SAAA,CAAU,KAAA,EAAO,CAAC,MAAA,EAAQ,WAAW,CAAA,EAAG,EAAE,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,CAAA;AACpF,QAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,UAAA,OAAA,CAAQ,CAAA,EAAG,KAAA,CAAM,IAAI,CAAA,6CAAA,CAA+C,CAAA;AACpE,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,MAAM,MAAA,GAAS,MAAM,oBAAA,CAAqB,KAAK,CAAA;AAC/C,MAAA,KAAA;AAAA,QACE,CAAA,EAAG,MAAM,IAAI,CAAA,UAAA,EAAa,OAAO,aAAa,CAAA,IAAA,EAAO,OAAO,WAAW,CAAA,UAAA;AAAA,OACzE;AACA,MAAA,KAAA,MAAW,GAAA,IAAO,OAAO,MAAA,EAAQ,OAAA,CAAQ,GAAG,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,GAAG,CAAA,CAAE,CAAA;AAAA,IAClE;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,GAAA,CACG,OAAA,CAAQ,aAAa,CAAA,CACrB,WAAA,CAAY,iDAAiD,CAAA,CAC7D,MAAA,CAAO,CAAC,IAAA,KAAiB;AACxB,IAAA,MAAA;AAAA,MACE;AAAA,KAEF;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,eAAe,CAAA,CACvB,WAAA,CAAY,sDAAsD,CAAA,CAClE,MAAA,CAAO,CAAC,IAAA,KAAiB;AACxB,IAAA,MAAA;AAAA,MACE;AAAA,KAEF;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AAGH,EAAA,yBAAA,CAA0B,GAAG,CAAA;AAE7B,EAAA,OAAO,GAAA;AACT;ACrSO,SAAS,gBAAA,GAA4B;AAC1C,EAAA,MAAM,QAAQ,IAAIZ,OAAAA,CAAQ,OAAO,CAAA,CAAE,YAAY,2BAA2B,CAAA;AAG1E,EAAA,KAAA,CACG,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,6BAA6B,CAAA,CACzC,MAAA,CAAO,iBAAA,EAAmB,oCAAoC,CAAA,CAC9D,MAAA,CAAO,OAAO,IAAA,KAAS;AACtB,IAAA,MAAM,SAAS,cAAA,EAAe;AAE9B,IAAA,IAAI,KAAK,KAAA,EAAO;AAEd,MAAA,MAAMqD,SAAAA,GAAW,MAAM,OAAO,UAAe,CAAA;AAC7C,MAAA,MAAM,EAAA,GAAKA,SAAAA,CAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,QAAQ,KAAA,EAAO,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAQ,CAAA;AACpF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAI,OAAA,CAAgB,CAAC5C,QAAAA,KAAY;AACtD,QAAA,EAAA,CAAG,QAAA,CAAS,YAAA,EAAc,CAAC,MAAA,KAAW;AACpC,UAAA,EAAA,CAAG,KAAA,EAAM;AACT,UAAAA,SAAQ,MAAM,CAAA;AAAA,QAChB,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AAED,MAAA,IAAI;AACF,QAAA,MAAM,MAAM,MAAM,UAAA;AAAA,UAChB,MAAA;AAAA,UACA,iBAAA;AAAA,UACA,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO,QAAA,EAAS;AAAE,SAC1D;AACA,QAAA,eAAA,CAAgB,GAAA,CAAI,GAAA,EAAK,GAAA,CAAI,YAAY,CAAA;AACzC,QAAA,KAAA,CAAM,CAAA,aAAA,EAAgB,EAAE,KAAA,CAAM,CAAA,CAAA,EAAI,IAAI,SAAA,CAAU,IAAI,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AAAA,MAC3D,SAAS,CAAA,EAAQ;AACf,QAAA,MAAA,CAAO,EAAE,OAAO,CAAA;AAChB,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,MAAM,QAAA,GAAW,CAAA,EAAG,MAAA,CAAO,GAAG,CAAA,sBAAA,CAAA;AAC9B,MAAA,OAAA,CAAQ,GAAA,CAAI;AAAA;AAAA,EAAA,EAA6C,CAAA,CAAE,GAAA,CAAI,QAAQ,CAAC;AAAA,CAAI,CAAA;AAG5E,MAAA,MAAM,IAAA,GAAO,MAAM,OAAO,MAAW,CAAA;AACrC,MAAA,MAAM,EAAE,GAAA,EAAA6C,IAAAA,EAAI,GAAI,MAAM,OAAO,KAAU,CAAA;AAEvC,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,CAAC,KAAK,GAAA,KAAQ;AAC7C,QAAA,MAAM,MAAM,IAAIA,IAAAA,CAAI,GAAA,CAAI,GAAA,IAAO,KAAK,kBAAkB,CAAA;AACtD,QAAA,MAAM,GAAA,GAAM,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AACxC,QAAA,MAAM,OAAA,GAAU,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,SAAS,CAAA;AAE9C,QAAA,IAAI,OAAO,OAAA,EAAS;AAClB,UAAA,eAAA,CAAgB,KAAK,OAAO,CAAA;AAC5B,UAAA,GAAA,CAAI,SAAA,CAAU,GAAA,EAAK,EAAE,cAAA,EAAgB,aAAa,CAAA;AAClD,UAAA,GAAA,CAAI,IAAI,iDAAiD,CAAA;AACzD,UAAA,KAAA,CAAM,8BAA8B,CAAA;AACpC,UAAA,MAAA,CAAO,KAAA,EAAM;AAAA,QACf,CAAA,MAAO;AACL,UAAA,GAAA,CAAI,UAAU,GAAG,CAAA;AACjB,UAAA,GAAA,CAAI,IAAI,gBAAgB,CAAA;AAAA,QAC1B;AAAA,MACF,CAAC,CAAA;AAED,MAAA,MAAA,CAAO,MAAA,CAAO,GAAG,MAAM;AACrB,QAAA,MAAM,IAAA,GAAQ,MAAA,CAAO,OAAA,EAAQ,EAAW,IAAA;AACxC,QAAA,MAAM,IAAA,GACJ,QAAQ,QAAA,KAAa,QAAA,GACjB,SACA,OAAA,CAAQ,QAAA,KAAa,UACnB,OAAA,GACA,UAAA;AACR,QAAA,OAAO,eAAoB,CAAA,CAAE,IAAA,CAAK,CAAC,EAAE,MAAK,KAAM;AAC9C,UAAA,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,QAC9B,CAAC,CAAA;AACD,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,iCAAiC,IAAI,CAAA,gBAAA,CAAkB,CAAC,CAAA,CAAE,CAAA;AAAA,MACnF,CAAC,CAAA;AAGD,MAAA,UAAA,CAAW,MAAM;AACf,QAAA,MAAA,CAAO,iBAAiB,CAAA;AACxB,QAAA,MAAA,CAAO,KAAA,EAAM;AACb,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB,GAAG,IAAO,CAAA;AAAA,IACZ;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,KAAA,CACG,QAAQ,QAAQ,CAAA,CAChB,YAAY,uBAAuB,CAAA,CACnC,OAAO,YAAY;AAClB,IAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,IAAA,IAAI,OAAO,YAAA,EAAc;AACvB,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,CAAW,QAAQ,kBAAA,EAAoB;AAAA,UAC3C,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,EAAE,YAAA,EAAc,MAAA,CAAO,YAAA;AAAa,SAC3C,CAAA;AAAA,MACH,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AACA,IAAA,gBAAA,EAAiB;AACjB,IAAA,KAAA,CAAM,YAAY,CAAA;AAAA,EACpB,CAAC,CAAA;AAGH,EAAA,KAAA,CACG,QAAQ,QAAQ,CAAA,CAChB,YAAY,6BAA6B,CAAA,CACzC,OAAO,YAAY;AAClB,IAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,IAAA,IAAI,CAAC,oBAAA,CAAqB,MAAM,CAAA,EAAG;AACjC,MAAA,MAAA,CAAO,4CAA4C,CAAA;AACnD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,GAAK,MAAM,UAAA,CAAgB,MAAA,EAAQ,cAAc,CAAA;AACvD,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,OAAA,CAAQ,WAAW,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AACpE,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,KAAA,CAAM,MAAM,CAAC,CAAA,OAAA,EAAU,EAAA,CAAG,WAAW,CAAA,CAAE,CAAA;AAC1D,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,KAAA,CAAM,OAAO,CAAC,CAAA,MAAA,EAAS,EAAA,CAAG,KAAK,CAAA,CAAE,CAAA;AACpD,MAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,KAAA,CAAM,UAAU,CAAC,CAAA,GAAA,EAAM,EAAA,CAAG,QAAA,GAAW,CAAA,CAAE,GAAG,KAAK,CAAA,GAAI,EAAE,GAAA,CAAI,IAAI,CAAC,CAAA,CAAE,CAAA;AACnF,MAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,IACd,SAAS,CAAA,EAAQ;AACf,MAAA,MAAA,CAAO,EAAE,OAAO,CAAA;AAChB,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,KAAA,CACG,OAAA,CAAQ,0BAA0B,CAAA,CAClC,WAAA,CAAY,iDAAiD,CAAA,CAC7D,MAAA,CAAO,CAAC,KAAA,KAAkB;AACzB,IAAA,MAAA;AAAA,MACE;AAAA,KAEF;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AAGH,EAAA,KAAA,CACG,OAAA,CAAQ,gBAAgB,CAAA,CACxB,WAAA,CAAY,+CAA+C,CAAA,CAC3D,MAAA,CAAO,CAAC,MAAA,KAAmB;AAC1B,IAAA,MAAA,CAAO,wDAAwD,CAAA;AAC/D,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AAGH,EAAA,KAAA,CACG,OAAA,CAAQ,YAAY,CAAA,CACpB,WAAA,CAAY,0DAA0D,CAAA,CACtE,MAAA,CAAO,CAAC,IAAA,KAAiB;AACxB,IAAA,MAAA,CAAO,sDAAsD,CAAA;AAC7D,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AAGH,EAAA,KAAA,CACG,OAAA,CAAQ,iBAAiB,CAAA,CACzB,WAAA,CAAY,8CAA8C,CAAA,CAC1D,MAAA,CAAO,CAAC,IAAA,KAAiB;AACxB,IAAA,MAAA,CAAO,2DAA2D,CAAA;AAClE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AACH,EAAA,KAAA,CACG,OAAA,CAAQ,mBAAmB,CAAA,CAC3B,WAAA,CAAY,mDAAmD,CAAA,CAC/D,MAAA,CAAO,CAAC,IAAA,KAAiB;AACxB,IAAA,MAAA,CAAO,6DAA6D,CAAA;AACpE,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AAGH,EAAA,KAAA,CACG,QAAQ,MAAM,CAAA,CACd,YAAY,+DAA+D,CAAA,CAC3E,OAAO,MAAM;AACZ,IAAA,MAAA,CAAO,sDAAsD,CAAA;AAC7D,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AAGH,EAAA,KAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,sDAAsD,CAAA,CAClE,MAAA,CAAO,iBAAA,EAAmB,iBAAA,EAAmB,QAAQ,CAAA,CACrD,MAAA,CAAO,MAAM;AACZ,IAAA,MAAA,CAAO,sDAAsD,CAAA;AAC7D,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB,CAAC,CAAA;AAGH,EAAA,KAAA,CACG,OAAA,CAAQ,gBAAgB,CAAA,CACxB,WAAA,CAAY,wCAAwC,CAAA,CACpD,MAAA,CAAO,eAAA,EAAiB,mCAAmC,CAAA,CAC3D,MAAA,CAAO,OAAO,SAAiB,IAAA,KAAS;AACvC,IAAA,MAAM,SAAS,cAAA,EAAe;AAC9B,IAAA,IAAI,CAAC,oBAAA,CAAqB,MAAM,CAAA,EAAG;AACjC,MAAA,MAAA,CAAO,4CAA4C,CAAA;AACnD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AACf,MAAA,MAAA,CAAO,oDAAoD,CAAA;AAC3D,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,MAAM,EAAE,CAAA;AACvC,IAAA,MAAM,CAAC,SAAA,EAAW,IAAI,CAAA,GAAI,GAAA,CAAI,MAAM,GAAG,CAAA;AACvC,IAAA,IAAI,CAAC,SAAA,IAAa,CAAC,IAAA,EAAM;AACvB,MAAA,MAAA,CAAO,gDAAgD,CAAA;AACvD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,CAAW,QAAQ,CAAA,YAAA,EAAe,SAAS,IAAI,IAAI,CAAA,CAAA,EAAI,OAAO,CAAA,KAAA,CAAA,EAAS;AAAA,QAC3E,MAAA,EAAQ;AAAA,OACT,CAAA;AACD,MAAA,KAAA,CAAM,WAAW,OAAO,CAAA,KAAA,EAAQ,SAAS,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAAA,IACrD,SAAS,CAAA,EAAQ;AACf,MAAA,MAAA,CAAO,EAAE,OAAO,CAAA;AAChB,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAO,KAAA;AACT;ACnPA,SAAS,SAAA,CAAU,IAAA,EAAsB,MAAA,GAAS,EAAA,EAAI,SAAS,IAAA,EAAY;AACzE,EAAA,MAAM,SAAA,GAAY,MAAA,KAAW,EAAA,GAAK,EAAA,GAAK,SAAS,eAAA,GAAQ,eAAA;AACxD,EAAA,MAAM,IAAA,GAAO,MAAA,GAAS,SAAA,GAAY,QAAA,CAAS,KAAK,GAAG,CAAA;AACnD,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAA;AACvB,EAAA,MAAM,cAAc,MAAA,IAAU,MAAA,KAAW,EAAA,GAAK,EAAA,GAAK,SAAS,KAAA,GAAQ,UAAA,CAAA;AACpE,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AAC7C,IAAA,SAAA,CAAU,IAAA,CAAK,SAAS,CAAC,CAAA,EAAG,aAAa,CAAA,KAAM,IAAA,CAAK,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAAA,EACzE;AACF;AAWO,SAAS,eAAA,GAA2B;AACzC,EAAA,OAAO,IAAItD,OAAAA,CAAQ,MAAM,CAAA,CACtB,WAAA,CAAY,2BAA2B,CAAA,CACvC,MAAA,CAAO,sBAAA,EAAwB,mBAAA,EAAqB,QAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,CAAC,IAAA,KAAS;AAChB,IAAA,MAAMC,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAYH,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA;AACzE,IAAA,MAAM,IAAA,GAAOG,IAAG,IAAA,EAAK;AACrB,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AAC9B,MAAA,OAAA,CAAQ,2DAA2D,CAAA;AACnE,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,EACd,CAAC,CAAA;AACL;ACdO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,OAAO,IAAID,OAAAA,CAAQ,QAAQ,CAAA,CACxB,WAAA,CAAY,gFAAgF,CAAA,CAC5F,QAAA,CAAS,QAAA,EAAU,qCAAqC,CAAA,CACxD,MAAA,CAAO,wBAAwB,mBAAA,EAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,cAAA,EAAgB,mCAAmC,CAAA,CAC1D,MAAA,CAAO,gBAAA,EAAkB,yDAAyD,CAAA,CAClF,MAAA;AAAA,IACC,OACE,OACA,IAAA,KACG;AAEH,MAAA,IAAI,IAAA,CAAK,YAAY,KAAA,EAAO;AAC1B,QAAA,IAAI;AACF,UAAA,MAAM,iBAAmBuD,EAAA,CAAA,OAAA,EAAQ;AACjC,UAAA,cAAA,CAAe,MAAM,0BAA0B,CAAA;AAC/C,UAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB,EAAE,UAAA,EAAYzD,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA;AACpF,UAAA,MAAM0D,OAAAA,GAAS,MAAM,MAAA,CAAO,OAAA,EAAQ;AACpC,UAAA,cAAA,CAAe,IAAA;AAAA,YACb,sBAAsB,CAAA,CAAE,OAAA,CAAQ,OAAOA,OAAAA,CAAO,YAAY,CAAC,CAAC,CAAA,cAAA;AAAA,WAC9D;AACA,UAAA,OAAA,CAAQ,CAAA,QAAA,EAAW,MAAA,CAAO,OAAO,CAAA,CAAE,CAAA;AAAA,QACrC,SAAS,GAAA,EAAK;AACZ,UAAA,MAAA,CAAO,CAAA,wBAAA,EAA2B,eAAe,KAAA,GAAQ,GAAA,CAAI,UAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAA;AACpF,UAAA,OAAA,CAAQ,sEAAsE,CAAA;AAAA,QAChF;AAAA,MACF;AAEA,MAAA,IAAI,KAAK,WAAA,EAAa;AAKtB,MAAA,MAAMvD,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAYH,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA;AACzE,MAAA,MAAMM,WAAYmD,EAAA,CAAA,OAAA,EAAQ;AAC1B,MAAAnD,QAAAA,CAAQ,MAAM,qBAAqB,CAAA;AACnC,MAAA,MAAM,MAAA,GAAS,MAAMH,GAAAA,CAAG,OAAA,EAAQ;AAChC,MAAAG,QAAAA,CAAQ,KAAK,MAAM,CAAA;AACnB,MAAA,IAAI,MAAA,CAAO,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AAC9B,QAAA,KAAA,MAAW,KAAK,MAAA,CAAO,QAAA,EAAU,KAAA,CAAM,CAAA,QAAA,EAAW,CAAC,CAAA,CAAE,CAAA;AAAA,MACvD,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,oBAAoB,CAAA;AAAA,MAC9B;AACA,MAAA,IAAI,MAAA,CAAO,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAChC,QAAA,KAAA,MAAW,CAAA,IAAK,OAAO,UAAA,EAAY;AACjC,UAAA,OAAA;AAAA,YACE,CAAA,EAAG,CAAA,CAAE,GAAG,CAAA,eAAA,EAAkB,EAAE,OAAA,CAAQ,CAAA,CAAE,YAAY,CAAC,CAAA,iBAAA,EAAoB,CAAA,CAAE,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,WAChG;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,GACF;AACJ;AC3DA,IAAM,cAAA,GAA2D;AAAA,EAC/D,EAAE,OAAA,EAAS,cAAA,EAAgB,IAAA,EAAM,OAAA,EAAQ;AAAA,EACzC,EAAE,OAAA,EAAS,gBAAA,EAAkB,IAAA,EAAM,OAAA,EAAQ;AAAA,EAC3C,EAAE,OAAA,EAAS,cAAA,EAAgB,IAAA,EAAM,OAAA,EAAQ;AAAA,EACzC,EAAE,OAAA,EAAS,iBAAA,EAAmB,IAAA,EAAM,UAAA,EAAW;AAAA,EAC/C,EAAE,OAAA,EAAS,eAAA,EAAiB,IAAA,EAAM,MAAA,EAAO;AAAA,EACzC,EAAE,OAAA,EAAS,eAAA,EAAiB,IAAA,EAAM,MAAA,EAAO;AAAA,EACzC,EAAE,OAAA,EAAS,kBAAA,EAAoB,IAAA,EAAM,WAAA,EAAY;AAAA,EACjD,EAAE,OAAA,EAAS,cAAA,EAAgB,IAAA,EAAM,OAAA,EAAQ;AAAA,EACzC,EAAE,OAAA,EAAS,eAAA,EAAiB,IAAA,EAAM,QAAA,EAAS;AAAA,EAC3C,EAAE,OAAA,EAAS,YAAA,EAAc,IAAA,EAAM,YAAA,EAAa;AAAA,EAC5C,EAAE,OAAA,EAAS,oBAAA,EAAsB,IAAA,EAAM,WAAA,EAAY;AAAA,EACnD,EAAE,OAAA,EAAS,2BAAA,EAA6B,IAAA,EAAM,WAAA,EAAY;AAAA,EAC1D,EAAE,OAAA,EAAS,iBAAA,EAAmB,IAAA,EAAM,QAAA;AACtC,CAAA;AAGA,IAAM,SAAA,uBAAgB,GAAA,CAAI,CAAC,gBAAgB,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAW,aAAa,CAAC,CAAA;AAQpF,SAAS,uBAAuB,QAAA,EAAuC;AACrE,EAAA,MAAM,aAAkC,EAAC;AAEzC,EAAA,SAAS,KAAK,GAAA,EAAmB;AAC/B,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,OAAA,GAAUR,cAAG,WAAA,CAAY,GAAA,EAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAAA,IACvD,CAAA,CAAA,MAAQ;AACN,MAAA;AAAA,IACF;AACA,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAM,QAAA,GAAWE,eAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,MAAM,IAAI,CAAA;AAC1C,MAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,QAAA,IAAI,CAAC,SAAA,CAAU,GAAA,CAAI,MAAM,IAAI,CAAA,OAAQ,QAAQ,CAAA;AAAA,MAC/C,CAAA,MAAA,IAAW,KAAA,CAAM,MAAA,EAAO,EAAG;AACzB,QAAA,KAAA,MAAW,QAAQ,cAAA,EAAgB;AACjC,UAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,QAAQ,CAAA,EAAG;AAC/B,YAAA,UAAA,CAAW,KAAK,EAAE,QAAA,EAAU,UAAU,IAAA,EAAM,IAAA,CAAK,MAAM,CAAA;AACvD,YAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAA,CAAK,QAAQ,CAAA;AACb,EAAA,OAAO,UAAA;AACT;AAGA,SAAS,mBAAmB,OAAA,EAA0B;AACpD,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,uBAAuB,CAAA;AACrD,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,OAAO2D,KAAA,CAAU,OAAA,CAAQ,CAAC,CAAC,CAAA;AAC7B;AAGA,SAAS,kBAAkB,QAAA,EAAuE;AAChG,EAAA,MAAM,OAAA,GAAU3D,eAAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AACrC,EAAA,IAAI,CAACF,aAAAA,CAAG,UAAA,CAAW,OAAO,CAAA,EAAG;AAC3B,IAAA,MAAA,CAAO,CAAA,qBAAA,EAAwB,OAAO,CAAA,CAAE,CAAA;AACxC,IAAA,OAAO,EAAE,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,EAAG,UAAU,CAAA,EAAE;AAAA,EAC5C;AAEA,EAAA,MAAM,WAA+B,kBAAA,EAAmB;AACxD,EAAA,MAAM,UAAA,GAAa,uBAAuB,OAAO,CAAA;AACjD,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,IAAI,QAAA,GAAW,CAAA;AAEf,EAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,IAAA,MAAM,OAAA,GAAUA,aAAAA,CAAG,YAAA,CAAa,CAAA,CAAE,UAAU,OAAO,CAAA;AACnD,IAAA,IAAI,MAAA;AAGJ,IAAA,IAAI,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,KAAK,CAAA,EAAG;AAC9B,MAAA,MAAA,GAAS,mBAAmB,OAAO,CAAA;AACnC,MAAA,IAAI,WAAW,IAAA,EAAM;AAGnB,QAAA;AAAA,MACF;AAAA,IACF,CAAA,MAAO;AAEL,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,CAAA,CAAE,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA,GAAI,KAAK,KAAA,CAAM,OAAO,CAAA,GAAI6D,KAAA,CAAU,OAAO,CAAA;AAAA,MACjF,SAAS,CAAA,EAAG;AACV,QAAA,MAAMC,QAAAA,GAAU5D,eAAAA,CAAK,QAAA,CAAS,OAAA,EAAS,EAAE,QAAQ,CAAA;AACjD,QAAA,MAAA,CAAO,CAAA,EAAG4D,QAAO,CAAA,qBAAA,EAAmB,CAAA,YAAa,KAAA,GAAQ,EAAE,OAAA,GAAU,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AAChF,QAAA,MAAA,EAAA;AACA,QAAA;AAAA,MACF;AAAA,IACF;AAGA,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,WAAA,CAAY,CAAA,CAAE,IAAI,CAAA;AAC5C,IAAA,MAAM,OAAA,GAAU5D,eAAAA,CAAK,QAAA,CAAS,OAAA,EAAS,EAAE,QAAQ,CAAA;AAEjD,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,OAAA,CAAQ,CAAA,EAAG,OAAO,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,eAAA,EAAa,CAAA,CAAE,IAAI,CAAA,wCAAA,CAA0C,CAAA;AAC1F,MAAA,QAAA,EAAA;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,gBAAA,CAAiB,MAAM,CAAA;AAC/C,IAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,MAAA,KAAA,MAAW,GAAA,IAAO,OAAO,MAAA,EAAQ;AAC/B,QAAA,MAAA,CAAO,GAAG,OAAO,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,YAAO,GAAA,CAAI,IAAA,GAAO,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA,EAAA,CAAA,GAAO,EAAE,CAAA,EAAG,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA;AAAA,MACpF;AACA,MAAA,MAAA,IAAU,OAAO,MAAA,CAAO,MAAA;AAAA,IAC1B;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,KAAA,EAAO,UAAA,CAAW,MAAA,EAAQ,QAAQ,QAAA,EAAS;AACtD;AAGA,IAAM,mCAAmB,IAAI,GAAA,CAAI,CAAC,iBAAA,EAAmB,UAAA,EAAY,MAAM,CAAC,CAAA;AAWxE,SAAS,oBAAA,GAAuC;AAC9C,EAAA,MAAM,SAAyB,EAAC;AAChC,EAAA,IAAI,CAACF,aAAAA,CAAG,UAAA,CAAW,YAAY,GAAG,OAAO,MAAA;AAEzC,EAAA,MAAM,OAAA,GAAUA,cACb,WAAA,CAAY,YAAA,EAAc,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA,CACjD,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAY,IAAK,CAAC,iBAAiB,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAEjE,EAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,IAAA,MAAM,SAAA,GAAYE,eAAAA,CAAK,IAAA,CAAK,YAAA,EAAc,EAAE,IAAI,CAAA;AAGhD,IAAA,MAAM,SAAA,GAAYA,eAAAA,CAAK,IAAA,CAAK,SAAA,EAAW,QAAQ,CAAA;AAC/C,IAAA,IAAIF,aAAAA,CAAG,UAAA,CAAW,SAAS,CAAA,EAAG;AAC5B,MAAA,oBAAA,CAAqB,SAAA,EAAW,CAAA,CAAE,IAAA,EAAM,MAAM,CAAA;AAAA,IAChD;AAGA,IAAA,MAAM,SAAA,GAAYE,eAAAA,CAAK,IAAA,CAAK,SAAA,EAAW,QAAQ,CAAA;AAC/C,IAAA,IAAIF,aAAAA,CAAG,UAAA,CAAW,SAAS,CAAA,EAAG;AAC5B,MAAA,oBAAA,CAAqB,SAAA,EAAW,CAAA,CAAE,IAAA,EAAM,MAAM,CAAA;AAAA,IAChD;AAGA,IAAA,MAAM,QAAA,GAAWE,eAAAA,CAAK,IAAA,CAAK,SAAA,EAAW,OAAO,CAAA;AAC7C,IAAA,IAAIF,aAAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,MAAA,KAAA,MAAW,CAAA,IAAKA,aAAAA,CAAG,WAAA,CAAY,QAAQ,CAAA,EAAG;AACxC,QAAA,IAAI,CAAC,CAAA,CAAE,QAAA,CAAS,YAAY,CAAA,EAAG;AAC/B,QAAA,MAAM,EAAA,GAAKE,eAAAA,CAAK,IAAA,CAAK,QAAA,EAAU,CAAC,CAAA;AAChC,QAAA,MAAM,OAAA,GAAUF,aAAAA,CAAG,YAAA,CAAa,EAAA,EAAI,OAAO,CAAA;AAC3C,QAAA,MAAM,MAAA,GAAS6D,MAAU,OAAO,CAAA;AAChC,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,IAAA,EAAM,MAAA;AAAA,UACN,MAAM,MAAA,EAAQ,EAAA,IAAM,CAAA,CAAE,OAAA,CAAQ,cAAc,EAAE,CAAA;AAAA,UAC9C,QAAQ,CAAA,CAAE,IAAA;AAAA,UACV,OAAA,EAAS,QAAQ,OAAA,IAAW,EAAA;AAAA,UAC5B,QAAA,EAAU;AAAA,SACX,CAAA;AAAA,MACH;AAAA,IACF;AAGA,IAAA,MAAM,UAAA,GAAa3D,eAAAA,CAAK,IAAA,CAAK,SAAA,EAAW,SAAS,CAAA;AACjD,IAAA,IAAIF,aAAAA,CAAG,UAAA,CAAW,UAAU,CAAA,EAAG;AAC7B,MAAA,KAAA,MAAW,CAAA,IAAKA,aAAAA,CAAG,WAAA,CAAY,UAAU,CAAA,EAAG;AAC1C,QAAA,IAAI,CAAC,CAAA,CAAE,QAAA,CAAS,YAAY,CAAA,EAAG;AAC/B,QAAA,MAAM,EAAA,GAAKE,eAAAA,CAAK,IAAA,CAAK,UAAA,EAAY,CAAC,CAAA;AAClC,QAAA,MAAM,OAAA,GAAUF,aAAAA,CAAG,YAAA,CAAa,EAAA,EAAI,OAAO,CAAA;AAC3C,QAAA,MAAM,EAAA,GAAK,sBAAsB,OAAO,CAAA;AACxC,QAAA,MAAA,CAAO,IAAA,CAAK;AAAA,UACV,IAAA,EAAM,QAAA;AAAA,UACN,MAAM,EAAA,EAAI,IAAA,IAAQ,CAAA,CAAE,OAAA,CAAQ,cAAc,EAAE,CAAA;AAAA,UAC5C,QAAQ,CAAA,CAAE,IAAA;AAAA,UACV,OAAA,EAAS,EAAA,EAAI,QAAA,EAAU,OAAA,IAAW,EAAA;AAAA,UAClC,QAAA,EAAU;AAAA,SACX,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,oBAAA,CAAqB,GAAA,EAAa,MAAA,EAAgB,GAAA,EAA2B;AACpF,EAAA,KAAA,MAAW,KAAA,IAASA,cAAG,WAAA,CAAY,GAAA,EAAK,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA,EAAG;AAChE,IAAA,IAAI,CAAC,KAAA,CAAM,WAAA,EAAY,EAAG;AAC1B,IAAA,MAAM,IAAA,GAAOE,eAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,MAAM,IAAI,CAAA;AACtC,IAAA,MAAM,OAAA,GAAUA,eAAAA,CAAK,IAAA,CAAK,IAAA,EAAM,UAAU,CAAA;AAC1C,IAAA,IAAIF,aAAAA,CAAG,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,MAAA,MAAM,OAAA,GAAUA,aAAAA,CAAG,YAAA,CAAa,OAAA,EAAS,OAAO,CAAA;AAChD,MAAA,MAAM,EAAA,GAAK,sBAAsB,OAAO,CAAA;AACxC,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,IAAA,EAAM,OAAA;AAAA,QACN,IAAA,EAAM,EAAA,EAAI,IAAA,IAAQ,KAAA,CAAM,IAAA;AAAA,QACxB,MAAA;AAAA,QACA,OAAA,EAAS,EAAA,EAAI,QAAA,EAAU,OAAA,IAAW,EAAA;AAAA,QAClC,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,oBAAA,CAAqB,IAAA,EAAM,QAAQ,GAAG,CAAA;AAAA,IACxC;AAAA,EACF;AACF;AAEA,SAAS,oBAAA,CAAqB,GAAA,EAAa,MAAA,EAAgB,GAAA,EAA2B;AACpF,EAAA,KAAA,MAAW,KAAA,IAASA,cAAG,WAAA,CAAY,GAAA,EAAK,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA,EAAG;AAChE,IAAA,IAAI,CAAC,KAAA,CAAM,WAAA,EAAY,EAAG;AAC1B,IAAA,MAAM,YAAYE,eAAAA,CAAK,IAAA,CAAK,GAAA,EAAK,KAAA,CAAM,MAAM,YAAY,CAAA;AACzD,IAAA,IAAI,CAACF,aAAAA,CAAG,UAAA,CAAW,SAAS,CAAA,EAAG;AAC/B,IAAA,MAAM,OAAA,GAAUA,aAAAA,CAAG,YAAA,CAAa,SAAA,EAAW,OAAO,CAAA;AAClD,IAAA,MAAM,MAAA,GAAS6D,MAAU,OAAO,CAAA;AAChC,IAAA,GAAA,CAAI,IAAA,CAAK;AAAA,MACP,IAAA,EAAM,OAAA;AAAA,MACN,IAAA,EAAM,MAAA,EAAQ,IAAA,IAAQ,KAAA,CAAM,IAAA;AAAA,MAC5B,MAAA;AAAA,MACA,OAAA,EAAS,QAAQ,OAAA,IAAW,EAAA;AAAA,MAC5B,QAAA,EAAU;AAAA,KACX,CAAA;AAAA,EACH;AACF;AAGA,SAAS,cAAc,CAAA,EAAoB;AACzC,EAAA,OAAO,sCAAA,CAAuC,KAAK,CAAC,CAAA;AACtD;AAGA,SAAS,yBAAA,CAA0B,UAAkB,OAAA,EAAgC;AACnF,EAAA,IAAI,QAAA,CAAS,QAAA,CAAS,OAAO,CAAA,EAAG;AAC9B,IAAA,MAAME,OAAAA,GAASF,MAAU,OAAO,CAAA;AAChC,IAAA,OAAOE,SAAQ,OAAA,IAAW,IAAA;AAAA,EAC5B;AAEA,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,uBAAuB,CAAA;AACrD,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,EAAA,MAAM,MAAA,GAASF,KAAA,CAAU,OAAA,CAAQ,CAAC,CAAC,CAAA;AACnC,EAAA,OAAO,MAAA,EAAQ,QAAA,EAAU,OAAA,IAAW,MAAA,EAAQ,OAAA,IAAW,IAAA;AACzD;AAaO,SAAS,mBAAA,GAA+B;AAC7C,EAAA,MAAM,GAAA,GAAM,IAAIzD,OAAAA,CAAQ,UAAU,CAAA,CAAE,WAAA;AAAA,IAClC;AAAA,GACF;AAGA,EAAA,GAAA,CACG,SAAS,QAAA,EAAU,6CAAA,EAA+C,GAAG,CAAA,CACrE,MAAA,CAAO,CAAC,UAAA,KAAuB;AAC9B,IAAA,MAAM,OAAA,GAAUF,eAAAA,CAAK,OAAA,CAAQ,UAAU,CAAA;AACvC,IAAA,OAAA,CAAQ,CAAA,wBAAA,EAA2B,OAAO,CAAA,CAAE,CAAA;AAC5C,IAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,kBAAkB,OAAO,CAAA;AACnD,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,CAAA,QAAA,EAAW,KAAK,CAAA,eAAA,CAAiB,CAAA;AACzC,IAAA,IAAI,WAAW,CAAA,EAAG;AAChB,MAAA,KAAA,CAAM,qBAAqB,CAAA;AAAA,IAC7B,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA,oBAAA,CAAsB,CAAA;AACtC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,UAAU,CAAA,CAClB,WAAA,CAAY,4CAA4C,CAAA,CACxD,MAAA,CAAO,mBAAmB,qBAAqB,CAAA,CAC/C,OAAO,gBAAA,EAAkB,8CAA8C,EACvE,MAAA,CAAO,UAAA,EAAY,6BAA6B,CAAA,CAChD,MAAA,CAAO,CAAC,IAAA,KAAuE;AAC9E,IAAA,IAAI,MAAA,GAAS,oBAAA,EAAqB,CAAE,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,IAAA,CAAK,MAAA,IAAU,CAAA,CAAE,MAAA,KAAW,IAAA,CAAK,MAAM,CAAA;AAG1F,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,IAAI;AACF,QAAA,MAAM,UAAA,GAAa8D,SAAS,2BAAA,EAA6B;AAAA,UACvD,GAAA,EAAK,YAAA;AAAA,UACL,QAAA,EAAU;AAAA,SACX,CAAA;AACD,QAAA,MAAM,eAAe,IAAI,GAAA;AAAA,UACvB,WACG,IAAA,EAAK,CACL,KAAA,CAAM,IAAI,EACV,MAAA,CAAO,OAAO,CAAA,CACd,GAAA,CAAI,CAAC,CAAA,KAAM9D,eAAAA,CAAK,OAAA,CAAQ,YAAA,EAAc,CAAC,CAAC;AAAA,SAC7C;AACA,QAAA,MAAA,GAAS,MAAA,CAAO,OAAO,CAAC,CAAA,KAAM,aAAa,GAAA,CAAI,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,MAC5D,CAAA,CAAA,MAAQ;AACN,QAAA,MAAA,CAAO,4DAAuD,CAAA;AAC9D,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,IAAI,QAAA,GAAW,CAAA;AAGf,IAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,MAAA,IAAI,CAAC,EAAE,OAAA,EAAS;AACd,QAAA,MAAA,CAAO,CAAA,EAAG,EAAE,IAAI,CAAA,CAAA,EAAI,EAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,CAAA,wBAAA,CAAqB,CAAA;AAC5D,QAAA,MAAA,EAAA;AAAA,MACF,CAAA,MAAA,IAAW,CAAC,aAAA,CAAc,CAAA,CAAE,OAAO,CAAA,EAAG;AACpC,QAAA,OAAA,CAAQ,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,CAAA,kBAAA,EAAgB,CAAA,CAAE,OAAO,CAAA,qBAAA,CAAuB,CAAA;AACxF,QAAA,QAAA,EAAA;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,QAAA,IAAI,CAAC,EAAE,OAAA,EAAS;AAChB,QAAA,MAAM,OAAA,GAAUA,eAAAA,CAAK,QAAA,CAAS,YAAA,EAAc,EAAE,QAAQ,CAAA;AACtD,QAAA,IAAI;AACF,UAAA,MAAM,WAAA,GAAc8D,QAAAA,CAAS,CAAA,cAAA,EAAiB,OAAO,CAAA,CAAA,EAAI;AAAA,YACvD,GAAA,EAAK,YAAA;AAAA,YACL,QAAA,EAAU;AAAA,WACX,CAAA;AACD,UAAA,MAAM,WAAA,GAAc,yBAAA,CAA0B,CAAA,CAAE,QAAA,EAAU,WAAW,CAAA;AACrE,UAAA,IAAI,WAAA,IAAe,WAAA,KAAgB,CAAA,CAAE,OAAA,EAAS;AAC5C,YAAA,OAAA;AAAA,cACE,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,MAAM,CAAA,8CAAA,EAA4C,CAAA,CAAE,OAAO,CAAA,CAAA;AAAA,aACvF;AACA,YAAA,QAAA,EAAA;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF;AAAA,IACF;AAGA,IAAA,MAAM,QAAQ,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAM,CAAA;AACpD,IAAA,MAAM,eAAA,uBAAsB,GAAA,EAAoB;AAChD,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,MAAA,CAAO,CAACC,OAAMA,EAAAA,CAAE,IAAA,KAAS,OAAO,CAAA,EAAG;AACxD,MAAA,eAAA,CAAgB,GAAA,CAAI,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,OAAO,CAAA;AAAA,IACvC;AAEA,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO;AACrB,MAAA,MAAM,OAAA,GAAUjE,aAAAA,CAAG,YAAA,CAAa,CAAA,CAAE,UAAU,OAAO,CAAA;AACnD,MAAA,MAAM,MAAA,GAAS6D,MAAU,OAAO,CAAA;AAChC,MAAA,MAAM,SAAS,MAAA,EAAQ,KAAA,IAAS,EAAC,EAC9B,OAAO,CAAC,CAAA,KAAW,CAAA,CAAE,IAAA,KAAS,WAAW,CAAA,CAAE,IAAA,EAAM,OAAO,CAAA,CACxD,GAAA,CAAI,CAAC,CAAA,MAAY;AAAA,QAChB,QAAQ,CAAA,CAAE,EAAA;AAAA,QACV,OAAA,EAAS,CAAA,CAAE,IAAA,EAAM,KAAA,IAAS,CAAA,CAAE,EAAA;AAAA,QAC5B,gBAAA,EAAkB,EAAE,IAAA,EAAM;AAAA,OAC5B,CAAE,CAAA;AAEJ,MAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACxB,MAAA,MAAM,MAAA,GAAS,oBAAA,CAAqB,KAAA,EAAO,eAAe,CAAA;AAC1D,MAAA,KAAA,MAAW,CAAA,IAAK,OAAO,MAAA,CAAO,CAACK,OAAM,CAACA,EAAAA,CAAE,SAAS,CAAA,EAAG;AAClD,QAAA,MAAA;AAAA,UACE,CAAA,KAAA,EAAQ,CAAA,CAAE,IAAI,CAAA,MAAA,EAAS,CAAA,CAAE,MAAM,CAAA,cAAA,EAAY,CAAA,CAAE,SAAS,CAAA,QAAA,EAAW,CAAA,CAAE,MAAA,IAAU,QAAQ,CAAA;AAAA,SACvF;AACA,QAAA,MAAA,EAAA;AAAA,MACF;AAAA,IACF;AAGA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,CAAA,QAAA,EAAW,MAAA,CAAO,MAAM,CAAA,OAAA,CAAS,CAAA;AACzC,IAAA,IAAI,MAAA,KAAW,CAAA,IAAK,QAAA,KAAa,CAAA,EAAG;AAClC,MAAA,KAAA,CAAM,oBAAoB,CAAA;AAAA,IAC5B,CAAA,MAAO;AACL,MAAA,IAAI,MAAA,GAAS,CAAA,EAAG,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA,SAAA,CAAW,CAAA;AAC3C,MAAA,IAAI,QAAA,GAAW,CAAA,EAAG,OAAA,CAAQ,CAAA,EAAG,QAAQ,CAAA,WAAA,CAAa,CAAA;AAAA,IACpD;AAEA,IAAA,IAAI,MAAA,GAAS,CAAA,IAAM,IAAA,CAAK,MAAA,IAAU,WAAW,CAAA,EAAI;AAC/C,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,GAAA,CACG,OAAA,CAAQ,WAAW,CAAA,CACnB,WAAA,CAAY,qDAAqD,CAAA,CACjE,MAAA,CAAO,cAAA,EAAgB,uBAAA,EAAyB,MAAM,CAAA,CACtD,MAAA,CAAO,CAAC,IAAA,KAA2B;AAClC,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI;AACF,MAAA,UAAA,GAAaF,QAAAA,CAAS,CAAA,qBAAA,EAAwB,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI;AAAA,QACzD,GAAA,EAAK,YAAA;AAAA,QACL,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AACN,MAAA,MAAA,CAAO,4DAAuD,CAAA;AAC9D,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AACd,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,aAAA,GAAgB,WAAW,IAAA,EAAK,CAAE,MAAM,IAAI,CAAA,CAAE,OAAO,OAAO,CAAA;AAClE,IAAA,MAAM,YAAA,GAAe,oDAAA;AACrB,IAAA,MAAM,cAAA,GAAiB,cAAc,MAAA,CAAO,CAAC,MAAM,YAAA,CAAa,IAAA,CAAK,CAAC,CAAC,CAAA;AAEvE,IAAA,MAAM,eAAA,uBAAsB,GAAA,EAAY;AACxC,IAAA,KAAA,MAAW,KAAK,cAAA,EAAgB;AAC9B,MAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA;AACzB,MAAA,IAAI,KAAA,CAAM,UAAU,CAAA,IAAK,CAAC,iBAAiB,GAAA,CAAI,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG;AACxD,QAAA,eAAA,CAAgB,GAAA,CAAI,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,MAC9B;AAAA,IACF;AAEA,IAAA,IAAI,eAAA,CAAgB,SAAS,CAAA,EAAG;AAC9B,MAAA,KAAA,CAAM,0BAA0B,CAAA;AAChC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,KAAA,MAAW,UAAU,eAAA,EAAiB;AACpC,MAAA,MAAM,oBAAoB,aAAA,CAAc,IAAA;AAAA,QACtC,CAAC,CAAA,KAAM,CAAA,KAAM,CAAA,EAAG,MAAM,mBAAmB,CAAA,KAAM9D,eAAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,cAAc;AAAA,OACjF;AACA,MAAA,IAAI,iBAAA,EAAmB;AACrB,QAAA,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,qBAAA,CAAuB,CAAA;AAAA,MACxC,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA,gDAAA,CAAkD,CAAA;AAClE,QAAA,MAAA,EAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,GAAS,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA;AAAA,EAChC,CAAC,CAAA;AAEH,EAAA,OAAO,GAAA;AACT;ACjcO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,OAAO,IAAIE,QAAQ,QAAQ,CAAA,CACxB,YAAY,kDAAkD,CAAA,CAC9D,OAAO,UAAA,EAAY,6CAA6C,EAChE,MAAA,CAAO,sBAAA,EAAwB,qBAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,OAAO,IAAA,KAAS;AACtB,IAAA,MAAM,UAAA,GAAaS,OAAAA,CAAQ,IAAA,CAAK,UAAU,CAAA;AAC1C,IAAA,MAAM,QAAA,GAAWmC,IAAAA,CAAK,UAAA,EAAY,kBAAkB,CAAA;AAEpD,IAAA,IAAI,CAAChC,UAAAA,CAAW,QAAQ,CAAA,EAAG;AACzB,MAAA,OAAA,CAAQ,oDAA+C,CAAA;AACvD,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,IAAA,GAAO,MAAM,OAAO,MAAM,CAAA;AAChC,IAAA,MAAM,WAAA,GAAcsC,YAAAA,CAAa,QAAA,EAAU,OAAO,CAAA;AAClD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,WAAW,CAAA;AAEnC,IAAA,IAAI,CAAC,MAAM,MAAA,IAAU,MAAA,CAAO,KAAK,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG;AAC1D,MAAA,OAAA,CAAQ,wBAAwB,CAAA;AAChC,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,OAAA,CAAQ,+BAA+B,CAAC,CAAA,CAAE,CAAA;AAC7D,IAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,IAAI,MAAA,GAAS,CAAA;AAEb,IAAA,MAAM,SAAS,cAAA,EAAe;AAE9B,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAA,EAAsB;AACzE,MAAA,IAAI,CAAC,MAAM,SAAA,IAAa,CAAC,MAAM,YAAA,IAAgB,CAAC,MAAM,eAAA,EAAiB;AAErE,QAAA,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,QAAG,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,mCAA8B,CAAC,CAAA,CAAE,CAAA;AACxF,QAAA,UAAA,EAAA;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI;AAGF,QAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,KAAA,CAAM,SAAS,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAC5E,QAAA,MAAM,KAAK,SAAA,EAAW,IAAA,EAAM,OAAO,CAAA,GAAI,QAAA;AAEvC,QAAA,MAAM,UAAU,MAAM,UAAA;AAAA,UACpB,MAAA;AAAA,UACA,CAAA,YAAA,EAAe,SAAS,CAAA,CAAA,EAAI,IAAI,IAAI,OAAO,CAAA,IAAA;AAAA,SAC7C;AAGA,QAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,YAAA,KAAiB,KAAA,CAAM,YAAA,EAAc;AACxD,UAAA,OAAA,CAAQ,GAAA;AAAA,YACN,CAAA,EAAA,EAAK,CAAA,CAAE,EAAA,CAAG,QAAG,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,GAAG,KAAA,CAAM,YAAA,CAAa,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,GAAA,CAAK,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,EAAA,CAAG,UAAU,CAAC,CAAA;AAAA,WACxG;AACA,UAAA,QAAA,EAAA;AAAA,QACF,CAAA,MAAO;AACL,UAAA,OAAA,CAAQ,GAAA;AAAA,YACN,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,QAAG,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,eAAe,CAAC,CAAA,iBAAA,EAAe,KAAA,CAAM,YAAA,CAAa,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,QAAA,EAAW,OAAA,CAAQ,QAAA,CAAS,YAAA,CAAa,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,GAAA;AAAA,WAChK;AACA,UAAA,MAAA,EAAA;AAAA,QACF;AAAA,MACF,SAAS,CAAA,EAAQ;AACf,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,KAAK,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,IAAI,GAAA,CAAI,MAAA,CAAO,EAAE,CAAC,IAAI,CAAA,CAAE,IAAA,CAAK,wBAAwB,CAAA,CAAE,OAAO,EAAE,CAAC,CAAA;AAAA,SACnF;AACA,QAAA,MAAA,EAAA;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA;AAAA,MACN,CAAA,EAAA,EAAK,CAAA,CAAE,OAAA,CAAQ,UAAU,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,EAAA,CAAG,CAAA,EAAG,QAAQ,CAAA,SAAA,CAAW,CAAC,CAAA,EAAA,EAAK,UAAA,GAAa,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,UAAU,CAAA,WAAA,CAAa,CAAA,GAAI,EAAE,CAAA,EAAA,EAAK,MAAA,GAAS,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA,OAAA,CAAS,IAAI,EAAE,CAAA;AAAA,KAChK;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,UAAA,GAAa,CAAA,IAAK,SAAS,CAAA,CAAA,EAAI;AACjD,MAAA,MAAA,CAAO,0CAA0C,CAAA;AACjD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAEA,IAAA,IAAI,SAAS,CAAA,EAAG;AACd,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;AC1FO,SAAS,cAAA,GAA0B;AACxC,EAAA,OAAO,IAAIlD,QAAQ,KAAK,CAAA,CACrB,YAAY,mDAAmD,CAAA,CAC/D,SAAS,OAAA,EAAS,6BAA6B,EAC/C,MAAA,CAAO,sBAAA,EAAwB,qBAAqB,OAAA,CAAQ,GAAA,EAAK,CAAA,CACjE,MAAA,CAAO,CAAC,GAAA,EAAa,IAAA,KAAS;AAC7B,IAAA,MAAMC,GAAAA,GAAK,IAAI,YAAA,CAAa,EAAE,UAAA,EAAYH,gBAAK,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG,CAAA;AACzE,IAAA,MAAM,KAAA,GAAQG,GAAAA,CAAG,GAAA,CAAI,GAAG,CAAA;AACxB,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,MAAA,MAAA,CAAO,CAAA,EAAG,GAAG,CAAA,sDAAA,CAAwD,CAAA;AACrE,MAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,OAAA,CAAQ,oBAAoB,CAAC,CAAA;AAC3C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA;AAC5B,MAAA,MAAM,KAAA,GAAQ,CAAA,KAAM,CAAA,GAAI,EAAA,GAAK,SAAA;AAC7B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,MAAM,CAAA,EAAG,KAAK,CAAA,EAAG,QAAA,CAAS,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,IACxD;AACA,IAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,EACd,CAAC,CAAA;AACL;;;AC4BA,IAAM,kBAAA,GAAqB,KAAK,SAAA,CAAU,UAAA;AAE1C,IAAM,MAAM,IAAA,CAAK,KAAA;AAAA,EACfiD,YAAAA;AAAA,IACEpD,eAAAA,CAAK,QAAQA,eAAAA,CAAK,OAAA,CAAQ,cAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAC,CAAA,EAAG,oBAAoB,CAAA;AAAA,IAC/E;AAAA;AAEJ,CAAA;AAEA,IAAM,UAAU,IAAIE,OAAAA,CAAQ,QAAQ,CAAA,CACjC,YAAY,kBAAkB,CAAA,CAC9B,OAAA,CAAQ,GAAA,CAAI,SAAS,eAAA,EAAiB,6BAA6B,CAAA,CACnE,uBAAA,GACA,aAAA,CAAc;AAAA,EACb,UAAA,CAAW,KAAK,MAAA,EAAQ;AACtB,IAAA,IAAI,GAAA,CAAI,MAAK,KAAM,QAAA,SAAiB,kBAAA,CAAmB,IAAA,CAAK,MAAA,EAAQ,GAAA,EAAK,MAAM,CAAA;AAC/E,IAAA,OAAO;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA,CAAA;AAAA,EA+FT;AACF,CAAC,CAAA;AAIH,OAAA,CACG,OAAA,CAAQ,oBAAoB,CAAA,CAC5B,WAAA,CAAY,gEAAgE,CAAA,CAC5E,MAAA;AAAA,EACC,kBAAA;AAAA,EACA,kDAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,UAAA,EAAY,8BAA8B,CAAA,CACjD,MAAA;AAAA,EACC,OACE,YACA,IAAA,KACG;AACH,IAAA,MAAM,EAAE,QAAA,EAAA4D,SAAAA,EAAS,GAAI,MAAM,OAAO,eAAoB,CAAA;AACtD,IAAA,MAAM,EAAE,UAAA,EAAAhD,YAAAA,EAAY,SAAA,EAAAmD,UAAAA,EAAW,YAAA,EAAAb,aAAAA,EAAc,aAAA,EAAAc,cAAAA,EAAc,GAAI,MAAM,OAAO,IAAS,CAAA;AACrF,IAAA,MAAM,EAAE,SAAA,EAAU,GAAI,MAAM,OAAO,MAAM,CAAA;AACzC,IAAA,MAAM,EAAE,cAAA,EAAgB,wBAAA,EAAAC,2BAAyB,GAAI,MAAM,OACzD,kBACF,CAAA;AAEA,IAAA,MAAM,UAAU,IAAA,CAAK,OAAA;AACrB,IAAA,IAAI,CAACA,yBAAAA,CAAyB,QAAA,CAAS,OAAO,CAAA,EAAG;AAC/C,MAAA,MAAA;AAAA,QACE,oBAAoB,IAAA,CAAK,OAAO,iBAAiBA,yBAAAA,CAAyB,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,OACtF;AACA,MAAA,OAAA,CAAQ,QAAA,GAAW,CAAA;AACnB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAWnE,eAAAA,CAAK,OAAA,CAAQ,UAAA,IAAc,GAAG,CAAA;AAC/C,IAAA,MAAM,WAAA,GAAcA,eAAAA,CAAK,QAAA,CAAS,QAAQ,CAAA;AAC1C,IAAA,MAAM,UAAoB,EAAC;AAE3B,IAAA,IAAI,CAACc,YAAAA,CAAW,QAAQ,CAAA,EAAG;AACzB,MAAAmD,UAAAA,CAAU,QAAA,EAAU,EAAE,SAAA,EAAW,MAAM,CAAA;AACvC,MAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAAA,IAClB;AAEA,IAAA,MAAM,SAAA,GAAYjE,eAAAA,CAAK,IAAA,CAAK,QAAA,EAAU,SAAS,CAAA;AAC/C,IAAA,IAAI,CAACc,YAAAA,CAAW,SAAS,CAAA,EAAG;AAC1B,MAAAmD,UAAAA,CAAUjE,gBAAK,IAAA,CAAK,SAAA,EAAW,UAAU,CAAA,EAAG,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAC/D,MAAA,OAAA,CAAQ,KAAK,UAAU,CAAA;AAAA,IACzB;AAEA,IAAA,MAAM,YAAA,GAAeA,eAAAA,CAAK,IAAA,CAAK,SAAA,EAAW,eAAe,CAAA;AACzD,IAAA,IAAI,CAACc,YAAAA,CAAW,YAAY,CAAA,EAAG;AAC7B,MAAAoD,cAAAA,CAAc,cAAc,MAAM,CAAA;AAClC,MAAA,OAAA,CAAQ,KAAK,uBAAuB,CAAA;AAAA,IACtC;AAEA,IAAA,MAAM,YAAA,GAAelE,eAAAA,CAAK,IAAA,CAAK,QAAA,EAAU,aAAa,CAAA;AACtD,IAAA,IAAI,CAACc,YAAAA,CAAW,YAAY,CAAA,EAAG;AAC7B,MAAAoD,cAAAA;AAAA,QACE,YAAA;AAAA,QACA,SAAA,CAAU;AAAA,UACR,IAAA,EAAM,WAAA;AAAA,UACN,WAAA,EAAa,GAAG,WAAW,CAAA,sBAAA,CAAA;AAAA,UAC3B,cAAA,EAAgB;AAAA,YACd,OAAA,EAAS;AAAA,cACP,KAAA,EAAO,OAAA;AAAA,cACP,QAAA,EAAU,WAAA;AAAA,cACV,KAAA,EAAO,mBAAA;AAAA,cACP,MAAA,EAAQ,YAAA;AAAA,cACR,SAAA,EAAW;AAAA;AACb,WACF;AAAA,UACA,cAAc;AAAC,SAChB;AAAA,OACH;AACA,MAAA,OAAA,CAAQ,KAAK,aAAa,CAAA;AAAA,IAC5B;AAEA,IAAA,KAAA,MAAW,GAAA,IAAO,IAAI,GAAA,CAAI,MAAA,CAAO,MAAA,CAAO,eAAe,OAAO,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG;AACvE,MAAA,MAAM,IAAA,GAAOlE,eAAAA,CAAK,IAAA,CAAK,QAAA,EAAU,GAAG,CAAA;AACpC,MAAA,IAAI,CAACc,YAAAA,CAAW,IAAI,CAAA,EAAG;AACrB,QAAAmD,UAAAA,CAAU,IAAA,EAAM,EAAE,SAAA,EAAW,MAAM,CAAA;AACnC,QAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,MACxB;AAAA,IACF;AAEA,IAAA,IAAI,KAAK,GAAA,EAAK;AACZ,MAAA,MAAM,aAAA,GAAgBjE,eAAAA,CAAK,IAAA,CAAK,QAAA,EAAU,YAAY,CAAA;AACtD,MAAA,MAAM,UAAU,CAAC,eAAA,EAAiB,mBAAA,EAAqB,OAAA,EAAS,QAAQ,YAAY,CAAA;AACpF,MAAA,MAAM,WAAWc,YAAAA,CAAW,aAAa,IAAIsC,aAAAA,CAAa,aAAA,EAAe,OAAO,CAAA,GAAI,EAAA;AACpF,MAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA;AAC9D,MAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,CAAO,CAAC,MAAM,CAAC,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AACjD,MAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,QAAA,MAAM,SAAS,QAAA,IAAY,CAAC,SAAS,QAAA,CAAS,IAAI,IAAI,IAAA,GAAO,EAAA;AAC7D,QAAAc,cAAAA,CAAc,eAAe,QAAA,GAAW,MAAA,GAAS,GAAG,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC;AAAA,CAAI,CAAA;AACzE,QAAA,IAAI,CAAC,QAAA,EAAU,OAAA,CAAQ,IAAA,CAAK,YAAY,CAAA;AAAA,MAC1C;AACA,MAAA,IAAI,CAACpD,YAAAA,CAAWd,eAAAA,CAAK,KAAK,QAAA,EAAU,MAAM,CAAC,CAAA,EAAG;AAC5C,QAAA,IAAI;AACF,UAAA8D,UAAS,UAAA,EAAY,EAAE,KAAK,QAAA,EAAU,KAAA,EAAO,QAAQ,CAAA;AACrD,UAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AAAA,QACtB,SAAS,GAAA,EAAK;AACZ,UAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC3D,UAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,2BAAsB,GAAG,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AAAA,QACvD;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAMhE,IAAAA,GAAK,MAAM,OAAO,IAAS,CAAA;AACjC,MAAA,MAAM,EAAE,cAAA,EAAgB,UAAA,EAAY,mBAAkB,GAAI,MAAM,OAC9D,qBACF,CAAA;AACA,MAAA,MAAM,cAAc,cAAA,EAAe;AACnC,MAAA,IAAI,CAACA,IAAAA,CAAG,UAAA,CAAW,WAAW,CAAA,EAAG;AAC/B,QAAA,MAAM,WAAW,iBAAA,EAAkB;AACnC,QAAA,UAAA,CAAW,WAAA,EAAa;AAAA,UACtB,OAAA,EAAS,EAAE,GAAA,EAAK,QAAA,CAAS,QAAQ,GAAA,EAAK,SAAA,EAAW,QAAA,CAAS,OAAA,CAAQ,SAAA;AAAU,SAC7E,CAAA;AACD,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,uCAAkC,WAAW,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AAAA,MAC3E;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,GAAA;AAAA,QACN,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,CAAA,wCAAA,EAAsC,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAC,CAAA;AAAA,OACtG;AAAA,IACF;AAGA,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,mBAAA,EAAoB,GAAI,MAAM,OAAO,+BAAqB,CAAA;AAClE,MAAA,MAAM,UAAU,mBAAA,CAAoB,QAAA,EAAU,EAAE,KAAA,EAAO,MAAM,CAAA;AAC7D,MAAA,KAAA,MAAW,KAAK,OAAA,CAAQ,MAAA,UAAgB,IAAA,CAAK,CAAA,kBAAA,EAAqB,CAAC,CAAA,CAAA,CAAG,CAAA;AACtE,MAAA,IAAI,OAAA,CAAQ,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC7B,QAAA,MAAA,CAAO,8BAA8B,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MAClE;AAAA,IACF,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,MAAM,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,OAAO,GAAG,CAAA;AAC3D,MAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,CAAE,GAAA,CAAI,oCAA+B,GAAG,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AAAA,IAChE;AAEA,IAAA,KAAA,MAAW,CAAA,IAAK,OAAA,EAAS,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AAC3D,IAAA,KAAA,CAAM,CAAA,uBAAA,EAA0B,CAAA,CAAE,OAAA,CAAQ,QAAQ,CAAC,CAAA,CAAE,CAAA;AACrD,IAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAE,OAAA,CAAQ,eAAe,CAAC,CAAA;AACtC,IAAA,MAAM,YAAA,GAAe,QAAA,KAAaE,eAAAA,CAAK,OAAA,CAAQ,GAAG,CAAA;AAClD,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,IAAI,CAAC,YAAA,EAAc;AACjB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,GAAG,IAAI,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,EAAI,EAAE,GAAA,CAAI,CAAA,GAAA,EAAM,UAAU,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AACjE,MAAA,IAAA,EAAA;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG,CAAC,CAAA,MAAA,EAAS,CAAA,CAAE,GAAA,CAAI,aAAa,CAAC,CAAA,oBAAA,CAAsB,CAAA;AACrF,IAAA,IAAA,EAAA;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,CAAA,EAAG,IAAI,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,GAAA,CAAI,gBAAgB,CAAC,CAAA,CAAE,CAAA;AAC/D,IAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,EACd;AACF,CAAA;AAEF,OAAA,CACG,QAAQ,OAAO,CAAA,CACf,YAAY,mCAAmC,CAAA,CAC/C,OAAO,YAAY;AAClB,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,MAAM,OAAO,sBAAY,CAAA;AAC9C,EAAA,MAAM,QAAA,CAAS,EAAC,EAAG,EAAE,YAAY,OAAA,CAAQ,GAAA,IAAO,CAAA;AAClD,CAAC,CAAA;AAEH,OAAA,CAAQ,UAAA,CAAW,oBAAoB,CAAA;AACvC,OAAA,CAAQ,UAAA,CAAW,kBAAkB,CAAA;AACrC,OAAA,CAAQ,UAAA,CAAW,kBAAkB,CAAA;AACrC,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA;AAItC,OAAA,CAAQ,UAAA,CAAW,gBAAgB,CAAA;AACnC,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA;AACtC,OAAA,CAAQ,UAAA,CAAW,iBAAiB,CAAA;AACpC,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA;AACtC,OAAA,CAAQ,UAAA,CAAW,iBAAiB,CAAA;AACpC,OAAA,CAAQ,UAAA,CAAW,iBAAiB,CAAA;AACpC,OAAA,CAAQ,UAAA,CAAW,gBAAgB,CAAA;AACnC,OAAA,CAAQ,UAAA,CAAW,iBAAiB,CAAA;AACpC,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA;AACtC,OAAA,CAAQ,UAAA,CAAW,oBAAoB,CAAA;AACvC,OAAA,CAAQ,UAAA,CAAW,qBAAqB,CAAA;AACxC,OAAA,CAAQ,UAAA,CAAW,iBAAiB,CAAA;AACpC,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA;AACtC,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA;AACtC,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA;AACtC,OAAA,CAAQ,UAAA,CAAW,oBAAoB,CAAA;AAIvC,OAAA,CAAQ,UAAA,CAAW,kBAAkB,CAAA;AAIrC,OAAA,CAAQ,UAAA,CAAW,gBAAgB,CAAA;AACnC,OAAA,CAAQ,UAAA,CAAW,iBAAiB,CAAA;AACpC,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA;AACtC,OAAA,CAAQ,UAAA,CAAW,kBAAkB,CAAA;AACrC,OAAA,CAAQ,UAAA,CAAW,sBAAsB,CAAA;AACzC,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA;AACtC,OAAA,CAAQ,UAAA,CAAW,kBAAkB,CAAA;AACrC,OAAA,CAAQ,UAAA,CAAW,oBAAoB,CAAA;AACvC,OAAA,CAAQ,UAAA,CAAW,iBAAiB,CAAA;AACpC,OAAA,CAAQ,UAAA,CAAW,oBAAoB,CAAA;AACvC,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA;AACtC,OAAA,CAAQ,UAAA,CAAW,kBAAkB,CAAA;AAIrC,OAAA,CAAQ,WAAW,eAAA,EAAgB,EAAG,EAAE,MAAA,EAAQ,MAAM,CAAA;AACtD,OAAA,CAAQ,WAAW,cAAA,EAAe,EAAG,EAAE,MAAA,EAAQ,MAAM,CAAA;AACrD,OAAA,CAAQ,UAAA,CAAW,sBAAsB,CAAA;AACzC,OAAA,CAAQ,UAAA,CAAW,qBAAqB,CAAA;AACxC,OAAA,CAAQ,UAAA,CAAW,iBAAiB,CAAA;AACpC,OAAA,CAAQ,UAAA,CAAW,oBAAoB,CAAA;AACvC,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA;AACtC,OAAA,CAAQ,UAAA,CAAW,kBAAkB,CAAA;AAIrC,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA;AACtC,OAAA,CAAQ,UAAA,CAAW,oBAAoB,CAAA;AACvC,OAAA,CAAQ,UAAA,CAAW,kBAAkB,CAAA;AACrC,OAAA,CAAQ,UAAA,CAAW,mBAAmB,CAAA;AAEtC,OAAA,CACG,QAAQ,MAAM,CAAA,CACd,YAAY,qBAAqB,CAAA,CACjC,OAAO,MAAM;AACZ,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,WAAW,CAAC,CAAA,IAAA,EAAO,CAAA,CAAE,OAAA,CAAQ,YAAY,CAAC,CAAA,CAAE,CAAA;AACnE,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,CAAE,GAAA,CAAI,aAAa,CAAC,CAAA,EAAA,EAAK,CAAA,CAAE,OAAA,CAAQ,kBAAkB,CAAC,CAAA,CAAE,CAAA;AACzE,EAAA,OAAA,CAAQ,GAAA,EAAI;AACd,CAAC,CAAA;AAGH,OAAA,CAAQ,UAAA,CAAW,mBAAA,CAAoB,OAAO,CAAC,CAAA;AAE/C,MAAM,QAAQ,UAAA,EAAW","file":"index.js","sourcesContent":["/**\n * skaile asset — author and install AI assets.\n *\n * Subcommands:\n * migrate <path> move/copy/link a workspace asset into a library\n * install <ref> install an asset from a library into a workspace\n * list list installed/available assets\n * show <ref> inspect an asset by canonical ref\n *\n * The former `asset publish` stub has moved to `library publish` so the push\n * + register flow is atomic with the underlying git push. Asset creation\n * lives under `library create <kind> <name>`.\n *\n * @docLink cli/commands/asset\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { resolveLibraryDir } from \"@skaile/workspaces/library\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport { openLibraryManager } from \"../open-library.ts\";\n\nexport function makeAssetCommand(): Command {\n const cmd = new Command(\"asset\").description(\"Author and install AI assets\");\n\n // ── asset migrate ────────────────────────────────────────────────────────\n cmd\n .command(\"migrate <path>\")\n .description(\"Move/copy/link a workspace asset into a library\")\n .option(\"--to <library>\", \"Target library (default: auto)\")\n .option(\"--domain <name>\", \"Place inside this domain (domain-structured libs)\")\n .option(\"--mode <mode>\", \"copy | move | link\", \"copy\")\n .option(\"--commit\", \"Auto-commit in git-backed libraries\", false)\n .action(\n async (\n srcPath: string,\n opts: {\n to?: string;\n domain?: string;\n mode: \"copy\" | \"move\" | \"link\";\n commit: boolean;\n },\n ) => {\n if (![\"copy\", \"move\", \"link\"].includes(opts.mode)) {\n logErr(`Invalid --mode \"${opts.mode}\". Expected: copy | move | link.`);\n process.exit(1);\n }\n if (!fs.existsSync(srcPath)) {\n logErr(`Source path does not exist: ${srcPath}`);\n process.exit(1);\n }\n const { manager, close } = await openLibraryManager();\n try {\n // Resolve target library.\n let target: Awaited<ReturnType<typeof manager.requireLibrary>>;\n if (opts.to) {\n target = await manager.requireLibrary(opts.to);\n } else {\n const all = await manager.listLibraries();\n const def = all.find(\n (l) => l.isDefault && (l.ownership === \"owner\" || l.ownership === \"contributor\"),\n );\n if (def) {\n target = def;\n } else {\n // Auto-init personal silently.\n const res = await manager.ensurePersonalLibrary(resolveLibraryDir());\n target = res.library;\n }\n }\n if (target.ownership === \"reader\") {\n logErr(\n `Library \"${target.name}\" is read-only (ownership=reader). Choose another with --to.`,\n );\n process.exit(1);\n }\n // Destination path.\n const basename = path.basename(srcPath);\n const destDir =\n target.structure === \"domain\" && opts.domain\n ? path.join(target.path, opts.domain)\n : target.path;\n fs.mkdirSync(destDir, { recursive: true });\n const destPath = path.join(destDir, basename);\n if (fs.existsSync(destPath)) {\n logErr(`Destination already exists: ${destPath}`);\n process.exit(1);\n }\n\n switch (opts.mode) {\n case \"copy\":\n fs.cpSync(srcPath, destPath, { recursive: true });\n break;\n case \"move\":\n fs.renameSync(srcPath, destPath);\n break;\n case \"link\":\n fs.symlinkSync(path.resolve(srcPath), destPath);\n break;\n }\n\n if (target.backend === \"git\" && opts.commit) {\n const { spawnSync } = await import(\"node:child_process\");\n spawnSync(\"git\", [\"add\", \"-A\"], { cwd: target.path, stdio: \"ignore\" });\n spawnSync(\"git\", [\"commit\", \"-m\", `skaile: migrate ${basename}`], {\n cwd: target.path,\n stdio: \"ignore\",\n });\n }\n\n logOk(`Migrated ${basename} → ${target.name} (${opts.mode})`);\n if (opts.mode === \"move\") {\n logInfo(\"Source moved into the library — future edits modify the library copy.\");\n } else if (opts.mode === \"copy\") {\n logInfo(\"Original kept; workspace edits will NOT reach the library.\");\n } else {\n logInfo(\"Symlinked — workspace edits propagate to the library immediately.\");\n }\n } finally {\n close();\n }\n },\n );\n\n // ── asset install ────────────────────────────────────────────────────────\n cmd\n .command(\"install <ref>\")\n .description(\"Install an asset from a library into a workspace\")\n .option(\"--target <dir>\", \"Workspace target (default: cwd)\")\n .option(\"--mode <mode>\", \"copy | link\", \"copy\")\n .option(\"--from <library>\", \"Library to install from (default: any)\")\n .action(\n async (ref: string, opts: { target?: string; mode: \"copy\" | \"link\"; from?: string }) => {\n if (![\"copy\", \"link\"].includes(opts.mode)) {\n logErr(`Invalid --mode \"${opts.mode}\". Expected: copy | link.`);\n process.exit(1);\n }\n const { manager, library, close } = await openLibraryManager();\n try {\n const def = await library.getAssetDef(ref);\n if (!def) {\n logErr(`No asset found for ref \"${ref}\". Try \\`skaile asset list\\`.`);\n process.exit(1);\n }\n const target = opts.target ?? process.cwd();\n const lib = def.libraryId\n ? (await manager.listLibraries()).find((l) => l.id === def.libraryId)\n : undefined;\n if (!lib) {\n logErr(`Asset has no associated library; install path unknown.`);\n process.exit(1);\n }\n if (opts.from && lib.name !== opts.from) {\n logWarn(`Asset belongs to \"${lib.name}\", but --from=${opts.from} was specified.`);\n }\n // Discover asset's on-disk path via manifest convention.\n // For MVP, we assume the asset's `manifest.path` field if present, else `<library>/<name>`.\n const manifestPath = (def.manifest as Record<string, unknown>).path;\n const candidateSubpath =\n typeof manifestPath === \"string\" && manifestPath.length > 0 ? manifestPath : def.name;\n const srcPath = path.join(lib.path, candidateSubpath);\n if (!fs.existsSync(srcPath)) {\n logErr(`Asset path not found: ${srcPath}`);\n process.exit(1);\n }\n const destPath = path.join(target, candidateSubpath);\n fs.mkdirSync(path.dirname(destPath), { recursive: true });\n if (opts.mode === \"copy\") {\n fs.cpSync(srcPath, destPath, { recursive: true });\n } else {\n fs.symlinkSync(path.resolve(srcPath), destPath);\n }\n logOk(`Installed ${ref} → ${destPath} (${opts.mode})`);\n } finally {\n close();\n }\n },\n );\n\n // ── asset list ───────────────────────────────────────────────────────────\n cmd\n .command(\"list\")\n .description(\"List asset definitions across libraries\")\n .option(\"--library <name>\", \"Filter by library\")\n .option(\"--domain <name>\", \"Filter by domain\")\n .option(\"--kind <kind>\", \"Filter by kind\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { library?: string; domain?: string; kind?: string; json?: boolean }) => {\n const { manager, library, close } = await openLibraryManager();\n try {\n let defs = await library.listAssetDefs(opts.kind ? { kind: opts.kind } : undefined);\n if (opts.library) {\n const lib = await manager.requireLibrary(opts.library);\n defs = defs.filter((d) => d.libraryId === lib.id);\n }\n if (opts.json) return console.log(JSON.stringify(defs, null, 2));\n if (defs.length === 0) {\n logInfo(\"No assets cached. Run `skaile library sync <name>` first.\");\n return;\n }\n for (const d of defs) {\n console.log(` ${S.cmd(d.id.padEnd(40))} ${d.kind.padEnd(10)} ${d.description ?? \"\"}`);\n }\n console.log(`\\n ${S.dim(`${defs.length} asset(s)`)}\\n`);\n } finally {\n close();\n }\n });\n\n // ── asset show ───────────────────────────────────────────────────────────\n cmd\n .command(\"show <ref>\")\n .description(\"Show details for an asset by canonical ref\")\n .action(async (ref: string) => {\n const { library, close } = await openLibraryManager();\n try {\n const def = await library.getAssetDef(ref);\n if (!def) {\n logErr(`Not found: ${ref}`);\n process.exit(1);\n }\n console.log(JSON.stringify(def, null, 2));\n } finally {\n close();\n }\n });\n\n return cmd;\n}\n","/**\n * skaile auth — manage CLI master-key strategy and secret provider status.\n */\n\nimport { type KeyStrategy, LocalSecretsProvider } from \"@skaile/workspaces/secrets\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk } from \"../helpers.ts\";\n\nconst VALID_STRATEGIES: KeyStrategy[] = [\"keychain\", \"passphrase\", \"machine\"];\n\n/**\n * Creates the `skaile auth` command group.\n *\n * Manages the CLI master-key strategy and secret provider health. Subcommands:\n * `status` (show current strategy and provider health), `set-key-strategy`\n * (switch between `keychain`, `passphrase`, and `machine`).\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/auth#make-auth-command\n */\nexport function makeAuthCommand(): Command {\n const cmd = new Command(\"auth\").description(\"Manage secret key strategy and provider status\");\n\n cmd\n .command(\"status\")\n .description(\"Show current key strategy and provider health\")\n .action(async () => {\n const provider = new LocalSecretsProvider();\n const strategy = provider.getKeyStrategy();\n logInfo(`Key strategy: ${strategy}`);\n\n const health = await provider.testConnection();\n if (health.ok) {\n logOk(`Local provider: healthy (${health.latencyMs}ms)`);\n } else {\n logErr(`Local provider: ${health.error ?? \"unhealthy\"}`);\n }\n });\n\n cmd\n .command(\"set-key-strategy\")\n .description(\"Set the master key strategy (keychain, passphrase, or machine)\")\n .argument(\"<strategy>\", `One of: ${VALID_STRATEGIES.join(\", \")}`)\n .option(\n \"--passphrase <value>\",\n \"Passphrase value (required for passphrase strategy; alternative to SKAILE_SECRETS_PASSPHRASE env var)\",\n )\n .action(async (strategy: string, opts: { passphrase?: string }) => {\n if (!VALID_STRATEGIES.includes(strategy as KeyStrategy)) {\n logErr(`Invalid strategy \"${strategy}\". Must be one of: ${VALID_STRATEGIES.join(\", \")}`);\n process.exit(1);\n }\n\n if (strategy === \"passphrase\" && !opts.passphrase && !process.env.SKAILE_SECRETS_PASSPHRASE) {\n logErr(\n \"Passphrase required. Provide via --passphrase or set SKAILE_SECRETS_PASSPHRASE:\\n\" +\n \" export SKAILE_SECRETS_PASSPHRASE='...'\\n\" +\n \" skaile auth set-key-strategy passphrase\",\n );\n process.exit(1);\n }\n\n const provider = new LocalSecretsProvider();\n try {\n await provider.setKeyStrategy(strategy as KeyStrategy, opts.passphrase);\n logOk(`Key strategy set to: ${strategy}`);\n } catch (e) {\n logErr(`Failed to set strategy: ${e instanceof Error ? e.message : String(e)}`);\n process.exit(1);\n }\n });\n\n return cmd;\n}\n","/**\n * Asset management commands — search, add, remove, list, info, create, doctor.\n * All delegate to @skaile/workspaces/asset-manager's AssetManager class.\n */\n\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { ASSET_KINDS, SUPPORTED_DRIVER_TARGETS } from \"@skaile/workspaces/core\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command, Option } from \"commander\";\nimport pc from \"picocolors\";\nimport { colorRef, kindColor, kindColorPad, logErr, logInfo, logOk, S } from \"../helpers.ts\";\n\n/**\n * Create the `skaile search` command.\n *\n * Searches across all locally indexed repos (via {@link AssetManager}) and\n * optionally the remote store. Results are grouped by asset kind and printed in\n * a compact table. Pass `--store` to limit to the remote store, `--local` to\n * limit to local repos, or omit both to query both sources. Accepts an optional\n * `kind` positional to filter by asset type and a `query` positional for\n * keyword matching.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/catalog#make-search-command\n */\nexport function makeSearchCommand(): Command {\n return new Command(\"search\")\n .description(\"Search across all repos\")\n .argument(\"[kind]\", \"Filter by asset kind\")\n .argument(\"[query]\", \"Search query\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--store\", \"Search only the store\")\n .option(\"--local\", \"Search only local repos\")\n .action(async (kind?: string, query?: string, opts?: any) => {\n if (kind?.includes(\":\")) {\n query = kind;\n kind = undefined;\n }\n\n const showLocal = !opts.store;\n const showStore = !opts.local;\n\n if (showLocal) {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const entries = am.search(query, kind);\n if (entries.length === 0) {\n if (!showStore) {\n logInfo(\n query\n ? `No entries matching \"${query}\".`\n : \"No assets found. Run `skaile source sync` first.\",\n );\n }\n } else {\n if (showStore) {\n console.log(`\\n ${S.heading(\"Local:\")}`);\n }\n const byKind = new Map<string, typeof entries>();\n for (const e of entries) {\n if (!byKind.has(e.kind)) byKind.set(e.kind, []);\n byKind.get(e.kind)!.push(e);\n }\n for (const [k, items] of byKind) {\n const nameW = Math.max(4, ...items.map((e) => e.name.length));\n console.log();\n console.log(\n ` ${kindColor(k)} ${S.heading(`${k.toUpperCase()}S`)} ${S.dim(`(${items.length})`)}`,\n );\n console.log(` ${S.rule(nameW + 62)}`);\n for (const e of items) {\n const ver = e.version ? S.dim(` v${e.version}`) : \"\";\n console.log(` ${S.cmd(e.name.padEnd(nameW))} ${e.description.slice(0, 60)}${ver}`);\n }\n }\n console.log(`\\n ${S.dim(`${entries.length} total`)}\\n`);\n }\n }\n\n if (showStore) {\n try {\n const { getStoreConfig, storeFetch } = await import(\"../store-client.js\");\n const config = getStoreConfig();\n const params: Record<string, string> = {};\n if (query) params.q = query;\n if (kind) params.kind = kind;\n\n const storeRes = await storeFetch<{ results: any[] }>(config, \"/api/assets\", { params });\n\n if (storeRes.results.length > 0) {\n console.log(`\\n ${S.heading(\"Store:\")}`);\n for (const asset of storeRes.results) {\n const ref = `${asset.kind}:@${asset.publisher}/${asset.slug}`;\n console.log(\n ` ⬡ ${kindColorPad(asset.kind)} ${colorRef(ref).padEnd(40)} ${S.dim(asset.description?.slice(0, 50) || \"\")} ${S.dim(`↓${asset.downloads}`)}`,\n );\n }\n } else if (opts.store) {\n logInfo(\"No results in store\");\n }\n } catch (e: any) {\n if (opts.store) {\n logErr(`Store search failed: ${e.message}`);\n }\n // Silently skip store if --store wasn't explicitly requested\n }\n }\n });\n}\n\n/**\n * Create the `skaile add` command.\n *\n * Installs a skill, agent, flow, or bundle from the catalog into the current\n * workspace. Resolves transitive dependencies declared in the asset's manifest\n * and deploys all files to the driver target directory (default: `claude-code`).\n * Accepts `--global` to deploy to `~/.claude` instead of the project directory.\n * The asset reference format is `kind:name[@repo]`.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/catalog#make-add-command\n */\nexport function makeAddCommand(): Command {\n return new Command(\"add\")\n .description(\"Add to skaile.yaml + deploy\")\n .argument(\"<ref>\", \"Asset reference (kind:name[@repo])\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--global\", \"Deploy to global dir (~/.claude)\")\n .option(\"--target <agent>\", \"Driver target\", \"claude-code\")\n .action((ref: string, opts) => {\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n global: opts.global,\n driverTarget: opts.target,\n });\n const spinner = p.spinner();\n spinner.start(`Adding ${ref}`);\n try {\n const added = am.add(ref);\n spinner.stop(\"Done\");\n if (added.length === 0) logInfo(\"Nothing added (already up to date or not found).\");\n else for (const a of added) logOk(a);\n } catch (err) {\n spinner.stop(\"Failed\");\n logErr(String(err));\n process.exit(1);\n }\n });\n}\n\n/**\n * Create the `skaile remove` command.\n *\n * Removes a deployed asset from the workspace by reference (`kind:name`). Cleans\n * up all files tracked in `.skaile/deployed.yaml` for that asset. Accepts\n * `--global` to target the global deployment in `~/.claude` and `--target` to\n * specify the driver target directory.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/catalog#make-remove-command\n */\nexport function makeRemoveCommand(): Command {\n return new Command(\"remove\")\n .description(\"Remove from skaile.yaml + undeploy\")\n .argument(\"<ref>\", \"Asset reference (kind:name)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--global\", \"Remove from global dir\")\n .option(\"--target <agent>\", \"Driver target\", \"claude-code\")\n .action((ref: string, opts) => {\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n global: opts.global,\n driverTarget: opts.target,\n });\n const ok = am.remove(ref);\n if (ok) logOk(`Removed ${ref}`);\n else logErr(`Not deployed: ${ref}`);\n });\n}\n\n/**\n * Create the `skaile list` command.\n *\n * Lists all assets currently deployed in the workspace (or globally with\n * `--global`), optionally filtered by asset kind. Output is a two-column table\n * of kind and name. Delegates to {@link AssetManager.listDeployed}.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/catalog#make-list-command\n */\nexport function makeListCommand(): Command {\n return new Command(\"list\")\n .description(\"List deployed assets\")\n .argument(\"[kind]\", \"Filter by asset kind\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"-g, --global\", \"List global deployment\")\n .addOption(\n new Option(\"--target <agent>\", \"Driver target\")\n .default(\"claude-code\")\n .choices(SUPPORTED_DRIVER_TARGETS),\n )\n .action((kind: string | undefined, opts) => {\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n global: opts.global,\n driverTarget: opts.target,\n });\n const deployed = am.listDeployed(kind);\n if (deployed.length === 0) {\n logInfo(\"Nothing deployed.\");\n return;\n }\n const kindW = Math.max(5, ...deployed.map((e) => e.kind.length));\n const nameW = Math.max(4, ...deployed.map((e) => e.name.length));\n console.log();\n console.log(` ${S.dim(\"KIND\".padEnd(kindW))} ${S.dim(\"NAME\".padEnd(nameW))}`);\n console.log(` ${S.rule(kindW + nameW + 4)}`);\n for (const e of deployed) {\n console.log(` ${kindColorPad(e.kind, kindW)} ${e.name.padEnd(nameW)}`);\n }\n console.log(`\\n ${S.dim(`${deployed.length} deployed`)}\\n`);\n });\n}\n\n/**\n * Create the `skaile info` command.\n *\n * Shows metadata for a catalog entry identified by `kind:name`: description,\n * version, source repository, required platform resources, and transitive skill\n * dependencies. Exits with an error if the entry is not found in any indexed\n * repo — run `skaile source sync` first if needed.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/catalog#make-info-command\n */\nexport function makeInfoCommand(): Command {\n return new Command(\"info\")\n .description(\"Show asset metadata, deps, deploy status\")\n .argument(\"<ref>\", \"Asset reference (kind:name)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((ref: string, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const entry = am.info(ref);\n if (!entry) {\n logErr(\n `'${ref}' not found. Run ${S.cmd(\"skaile source sync\")} then ${S.cmd(\"skaile search\")}.`,\n );\n process.exit(1);\n }\n console.log();\n console.log(` ${S.heading(entry.name)}`);\n console.log(` ${S.rule(40)}`);\n console.log(` kind: ${kindColor(entry.kind)}`);\n if (entry.version) console.log(` version: ${entry.version}`);\n if (entry.description) console.log(` description: ${entry.description}`);\n if (entry.repository) console.log(` repository: ${S.dim(entry.repository)}`);\n console.log(` source: ${S.dim(entry.source)}`);\n if (entry.requires.length) {\n console.log(` requires:`);\n for (const d of entry.requires)\n console.log(` ${S.dim(\"·\")} ${kindColor(d.kind)}:${d.name}`);\n }\n if (entry.dependencies.length) {\n console.log(` dependencies:`);\n for (const s of entry.dependencies) console.log(` ${S.dim(\"·\")} ${colorRef(s)}`);\n }\n console.log();\n });\n}\n\n/**\n * Create the `skaile create` command.\n *\n * Scaffolds a new skill, agent, flow, or bundle in the target directory using\n * the AI skill builder via {@link AssetManager.create}. Accepts `-k`/`--kind`\n * to specify the asset type (default: `skill`) and `-d`/`--dir` to set the\n * destination directory (default: current working directory).\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/catalog#make-create-command\n */\nexport function makeCreateCommand(): Command {\n return new Command(\"create\")\n .description(\"Scaffold a new asset\")\n .argument(\"<name>\", \"Asset name\")\n .addOption(\n new Option(\"-k, --kind <kind>\", \"Asset kind\").default(\"skill\").choices([...ASSET_KINDS]),\n )\n .option(\"-d, --dir <dir>\", \"Target directory (default: cwd)\")\n .action((name: string, opts) => {\n const am = new AssetManager({ projectDir: process.cwd() });\n const destDir = opts.dir ? path.resolve(opts.dir) : process.cwd();\n const result = am.create(name, opts.kind, destDir);\n if (result.ok) logOk(`Created ${kindColor(opts.kind)}: ${pc.dim(result.path)}`);\n else {\n logErr(result.path);\n process.exit(1);\n }\n });\n}\n\n/**\n * Create the `skaile doctor` command.\n *\n * Scans all deployed assets for missing transitive dependency chains. For each\n * gap it reports the affected asset, the missing dependency, and whether the dep\n * is available in a known repo (fixable) or completely absent. Delegates to\n * {@link AssetManager.doctor}.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/catalog#make-doctor-command\n */\nexport function makeDoctorCommand(): Command {\n return new Command(\"doctor\")\n .description(\"Scan for missing dependency chains\")\n .argument(\"[name]\", \"Check a specific asset (kind:name)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((name: string | undefined, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const issues = am.doctor();\n if (issues.length === 0) {\n logOk(\"No missing dependencies.\");\n return;\n }\n const assetW = Math.max(5, ...issues.map((i) => `${i.assetKind}:${i.assetName}`.length));\n const depW = Math.max(11, ...issues.map((i) => `${i.depKind}:${i.depName}`.length));\n console.log();\n console.log(\n ` ${S.dim(\"ASSET\".padEnd(assetW))} ${S.dim(\"MISSING DEP\".padEnd(depW))} ${S.dim(\"IN REPOS\")}`,\n );\n console.log(` ${S.rule(assetW + depW + 15)}`);\n for (const i of issues) {\n const asset = `${i.assetKind}:${i.assetName}`;\n const dep = `${i.depKind}:${i.depName}`;\n const status = i.inRepos ? S.warn(\"fixable\") : S.err(\"not found\");\n console.log(` ${asset.padEnd(assetW)} ${dep.padEnd(depW)} ${status}`);\n }\n console.log();\n });\n}\n","/**\n * `skaile catalog` — Catalog source health and configuration commands.\n *\n * Phase 2 / Task 2.7 surface. Sub-commands:\n *\n * - `skaile catalog test` — probe the configured catalog source and report OK\n * or a clear actionable error. In `catalog.url: local` mode, lists the\n * registered local source instead. In air-gapped mode (`cache_ttl: 0`) the\n * command does NOT touch the network; pass `--force` to probe anyway.\n *\n * Read-only diagnostics — does NOT mutate config or library state.\n *\n * @docLink cli/commands/catalog#make-catalog-command\n */\n\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\n\n/**\n * Creates the `skaile catalog` command group.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/catalog#make-catalog-command\n */\nexport function makeCatalogCommand(): Command {\n const catalog = new Command(\"catalog\").description(\"Catalog source health and configuration\");\n\n catalog\n .command(\"test\")\n .description(\"Probe the configured catalog source and report status\")\n .option(\"--project-dir <path>\", \"Project directory (for project-level config overlay)\")\n .option(\"--url <url>\", \"Override the catalog URL for this probe\")\n .option(\"--force\", \"Probe the network even in air-gapped mode (cache_ttl: 0)\")\n .action(async (opts: { projectDir?: string; url?: string; force?: boolean }) => {\n const { resolveConfig, isLocalCatalogUrl, trpcGetUrl } = await import(\n \"@skaile/workspaces/library\"\n );\n const projectDir = opts.projectDir ? path.resolve(opts.projectDir) : undefined;\n const cfg = resolveConfig({ projectDir });\n const baseUrl = opts.url ?? cfg.catalog.url;\n\n // ── Local mode ─────────────────────────────────────────────────────\n if (isLocalCatalogUrl(baseUrl)) {\n const { resolveCatalogSource } = await import(\"../open-library.ts\");\n let resolved: Awaited<ReturnType<typeof resolveCatalogSource>> | undefined;\n try {\n resolved = await resolveCatalogSource({ projectDir: opts.projectDir });\n const sources = await resolved.source.listSources();\n logOk(\"Catalog mode: local\");\n if (sources.length === 0) {\n logInfo(\"No local sources registered. Run `skaile source add <path>` first.\");\n } else {\n for (const s of sources) {\n console.log(` ${S.dim(\"•\")} ${s.type} ${S.heading(s.url)}`);\n }\n }\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n } finally {\n resolved?.close();\n }\n return;\n }\n\n // ── Air-gapped mode (cache_ttl: 0) — refuse network probe by default ──\n // The user has explicitly told us not to reach out. Honour that intent.\n if (cfg.catalog.cache_ttl === 0 && !opts.force) {\n logOk(`Catalog mode: air-gapped (${S.heading(baseUrl)})`);\n logInfo(\n \"Network probe skipped because cache_ttl is 0. \" +\n \"Use `skaile update` to refresh the cache, or `skaile catalog test --force` to probe anyway.\",\n );\n return;\n }\n\n // ── Remote mode — probe a real catalog tRPC route ──────────────────\n // We hit `catalog.listKinds` rather than `/health` because it exercises\n // the actual surface the CLI depends on. A working backend with the\n // catalog router unmounted (or behind a path prefix that doesn't match\n // `~/.skaile/config.yaml`) is exactly the failure we want to surface.\n const probeUrl = trpcGetUrl(baseUrl, \"catalog.listKinds\", undefined);\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 5_000);\n try {\n const started = Date.now();\n const res = await fetch(probeUrl, {\n signal: controller.signal,\n headers: { accept: \"application/json\" },\n });\n const ms = Date.now() - started;\n if (!res.ok) {\n logErr(`${probeUrl} responded ${res.status} ${res.statusText} (${ms}ms)`);\n if (res.status === 404) {\n logInfo(\n \"Got 404 from catalog.listKinds. Check the URL prefix in ~/.skaile/config.yaml — \" +\n \"Skaile mirrors must expose `/trpc/catalog.*` at the configured baseUrl.\",\n );\n } else {\n logInfo(\n \"Verify the URL in ~/.skaile/config.yaml and any auth requirements on private mirrors.\",\n );\n }\n process.exitCode = 1;\n return;\n }\n // Validate the response actually parses as a tRPC superjson envelope.\n const text = (await res.text()).trim();\n let valid = false;\n try {\n const body = JSON.parse(text);\n // tRPC GET shape: `{result: {data: {json: <payload>}}}`\n valid =\n typeof body === \"object\" &&\n body !== null &&\n \"result\" in body &&\n typeof (body as { result: unknown }).result === \"object\";\n } catch {\n valid = false;\n }\n if (!valid) {\n logWarn(\n `Catalog reachable at ${baseUrl} (${ms}ms) but the response is not a valid tRPC envelope.`,\n );\n logInfo(\n \"The host responded 200 but the body is not Skaile's catalog router shape. \" +\n \"Check that `catalog.listKinds` is mounted at the configured baseUrl.\",\n );\n process.exitCode = 1;\n return;\n }\n logOk(`Catalog reachable at ${S.heading(baseUrl)} (${ms}ms)`);\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") {\n logErr(`Timeout reaching ${probeUrl} after 5s`);\n } else {\n logErr(\n `Could not reach ${probeUrl}: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n logInfo(\n \"Verify the URL in ~/.skaile/config.yaml and that the catalog backend is deployed.\",\n );\n process.exitCode = 1;\n } finally {\n clearTimeout(timeout);\n }\n });\n\n catalog\n .command(\"info\")\n .description(\"Print the resolved catalog configuration (url, framing, cacheTtlMs)\")\n .option(\"--project-dir <path>\", \"Project directory (for project-level config overlay)\")\n .action(async (opts: { projectDir?: string }) => {\n const { resolveConfig } = await import(\"@skaile/workspaces/library\");\n const projectDir = opts.projectDir ? path.resolve(opts.projectDir) : undefined;\n const cfg = resolveConfig({ projectDir });\n console.log(`url: ${cfg.catalog.url}`);\n console.log(`framing: ${cfg.catalog.framing}`);\n console.log(`cacheTtlMs: ${cfg.catalog.cache_ttl * 1000}`);\n });\n\n return catalog;\n}\n","import type { Command } from \"commander\";\n\n/**\n * Recursively walk a commander program tree and collect all static candidates\n * for a given word position.\n *\n * @param program - The root Commander program instance.\n * @param words - The words typed so far (including the binary name as `words[0]`).\n * @returns Array of candidate strings that start with the current partial word.\n * @docLink cli/dev-guide#completion\n */\nexport function getStaticCandidates(program: Command, words: string[]): string[] {\n // words[0] is always the binary name ('skaile'), skip it\n const relevant = words.slice(1);\n\n let current: Command = program;\n for (let i = 0; i < relevant.length - 1; i++) {\n const word = relevant[i]!;\n const sub = current.commands.find((c) => c.name() === word || c.aliases().includes(word));\n if (!sub) break;\n current = sub;\n }\n\n const last = relevant[relevant.length - 1] ?? \"\";\n\n // If last word starts with -, suggest flags; otherwise suggest subcommands + flags\n const candidates: string[] = [\n ...current.commands.map((c) => c.name()),\n ...current.options.flatMap((o) => [o.short, o.long].filter(Boolean) as string[]),\n ];\n\n return candidates.filter((c) => c.startsWith(last));\n}\n\n/**\n * Shell script templates — one per shell.\n * The script calls the CLI's `complete -- $cword $words` form at tab time.\n *\n * @docLink cli/dev-guide#completion\n */\nexport const SHELL_SCRIPTS: Record<string, (bin: string) => string> = {\n zsh: (bin) => `\\\n_${bin}_completion() {\n local words=(\"\\${words[@]}\")\n local cword=$((CURRENT - 1))\n local completions\n completions=$(${bin} complete -- $cword \"\\${words[@]}\" 2>/dev/null)\n local -a items\n items=(\\${(f)completions})\n compadd -a items\n}\ncompdef _${bin}_completion ${bin}`,\n\n bash: (bin) => `\\\n_${bin}_completion() {\n local cword=$COMP_CWORD\n local words=(\"\\${COMP_WORDS[@]}\")\n local completions\n completions=$(${bin} complete -- \"$cword\" \"\\${words[@]}\" 2>/dev/null)\n COMPREPLY=($(compgen -W \"$completions\" -- \"\\${COMP_WORDS[$COMP_CWORD]}\"))\n}\ncomplete -F _${bin}_completion ${bin}`,\n\n fish: (bin) => `\\\nfunction __${bin}_complete\n set -l words (commandline -opc)\n set -l cword (count $words)\n ${bin} complete -- $cword $words 2>/dev/null\nend\ncomplete -c ${bin} -f -a '(__${bin}_complete)'`,\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { AI_RESOURCES } from \"./paths.ts\";\n\n/**\n * A single skill discovered under `AI_RESOURCES`.\n *\n * @docLink cli/dev-guide#skill-walker\n */\nexport interface SkillEntry {\n name: string;\n path: string;\n skillPath: string;\n domain: string;\n}\n\n/**\n * Return all skill entries discovered under `AI_RESOURCES`, optionally\n * filtered to a single domain.\n *\n * @param domain - Optional domain name to restrict the search.\n * @returns Array of {@link SkillEntry} objects found under the domain's `skills/` directory.\n * @docLink cli/dev-guide#skill-walker\n */\nexport function findSkills(domain?: string): SkillEntry[] {\n const skills: SkillEntry[] = [];\n if (!fs.existsSync(AI_RESOURCES)) return skills;\n const domains = fs\n .readdirSync(AI_RESOURCES, { withFileTypes: true })\n .filter((d) => d.isDirectory())\n .filter((d) => !domain || d.name === domain);\n for (const d of domains) {\n const skillsDir = path.join(AI_RESOURCES, d.name, \"skills\");\n if (!fs.existsSync(skillsDir)) continue;\n walkSkills(skillsDir, d.name, skills);\n }\n return skills;\n}\n\n/**\n * Recursively walk a directory tree looking for skill directories (those\n * containing a `SKILL.md` file) and push results into `out`.\n *\n * @param dir - Directory to walk.\n * @param domain - Domain label attached to every discovered entry.\n * @param out - Accumulator array mutated in-place.\n * @docLink cli/dev-guide#skill-walker\n */\nexport function walkSkills(dir: string, domain: string, out: SkillEntry[]): void {\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n const skillMd = path.join(full, \"SKILL.md\");\n if (fs.existsSync(skillMd)) {\n out.push({ name: entry.name, path: full, skillPath: skillMd, domain });\n } else {\n walkSkills(full, domain, out);\n }\n }\n }\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { loadAllFlows } from \"@skaile/workspaces/base-assets/connectors/flow/engine\";\nimport { AI_RESOURCES } from \"../paths.ts\";\nimport { findSkills } from \"../skill-walker.ts\";\n\n/**\n * Return skill names for tab-completion of `skaile skill show <TAB>`.\n *\n * @docLink cli/dev-guide#completion\n */\nexport function resolveSkillNames(): string[] {\n return findSkills().map((s) => s.name);\n}\n\n/**\n * Return skill domain names for tab-completion of `skaile skill list <TAB>`.\n *\n * @docLink cli/dev-guide#completion\n */\nexport function resolveDomains(): string[] {\n if (!fs.existsSync(AI_RESOURCES)) return [];\n return fs\n .readdirSync(AI_RESOURCES, { withFileTypes: true })\n .filter((d) => d.isDirectory())\n .map((d) => d.name);\n}\n\n/**\n * Return flow IDs for tab-completion of `skaile run <TAB>` and `skaile flow show <TAB>`.\n *\n * @docLink cli/dev-guide#completion\n */\nexport function resolveFlowIds(): string[] {\n try {\n return loadAllFlows(AI_RESOURCES).map((f) => f.id);\n } catch {\n return [];\n }\n}\n\n/**\n * Return session run-IDs for tab-completion of `skaile session show/switch/delete <TAB>`.\n *\n * Synchronous filesystem walk — completer callers cannot await. Reads filenames\n * from `<projectDir>/.skaile/sessions/*.json` without parsing each session file.\n *\n * @param projectDir - Project directory to scan for sessions.\n * @docLink cli/dev-guide#completion\n */\nexport function resolveSessionIds(projectDir: string): string[] {\n const sessionsDir = path.join(projectDir, \".skaile\", \"sessions\");\n if (!fs.existsSync(sessionsDir)) return [];\n try {\n return fs\n .readdirSync(sessionsDir)\n .filter((f) => f.endsWith(\".json\"))\n .map((f) => f.slice(0, -\".json\".length));\n } catch {\n return [];\n }\n}\n\n/**\n * Static list of config key names for tab-completion of `skaile config get/set <TAB>`.\n *\n * @docLink cli/dev-guide#completion\n */\nexport const CONFIG_KEYS = [\"provider\", \"model\", \"driver\", \"framework\", \"projectDir\", \"apiKey\"];\n","import { Command } from \"commander\";\nimport { getStaticCandidates, SHELL_SCRIPTS } from \"../completion.ts\";\nimport {\n CONFIG_KEYS,\n resolveDomains,\n resolveFlowIds,\n resolveSessionIds,\n resolveSkillNames,\n} from \"./complete-resolvers.ts\";\n\n/**\n * Creates the `skaile complete` command.\n *\n * Provides shell tab-completion support. With `--shell zsh|bash|fish` outputs\n * a shell script for `eval`. With `-- <cword> <words...>` returns newline-\n * separated completion candidates at tab time.\n *\n * @param program - The root Commander program instance (used for static tree walk).\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#complete\n */\nexport function makeCompleteCommand(program: Command): Command {\n const cmd = new Command(\"complete\")\n .description(\"Generate shell completion\")\n .addHelpText(\"before\", 'Usage: eval \"$(skaile complete --shell zsh)\"\\n')\n .option(\"--shell <shell>\", \"Output completion script for shell (zsh|bash|fish)\")\n .passThroughOptions()\n .argument(\"[args...]\", \"Inline completion args: <cword> <words...>\")\n .action((args: string[], opts) => {\n // Shell script output mode\n if (opts.shell) {\n const gen = SHELL_SCRIPTS[opts.shell];\n if (!gen) {\n process.stderr.write(`Unknown shell: ${opts.shell}\\n`);\n process.exit(1);\n }\n process.stdout.write(`${gen(\"skaile\")}\\n`);\n return;\n }\n\n // Inline completion mode: skaile complete -- <cword> <words...>\n // Commander passes everything after '--' as the variadic args\n if (args.length >= 1) {\n const ci = parseInt(args[0], 10);\n const allWords = args.slice(1);\n\n // Try dynamic resolution based on context\n const dynamic = resolveDynamic(allWords, ci);\n if (dynamic !== null) {\n process.stdout.write(`${dynamic.join(\"\\n\")}\\n`);\n return;\n }\n\n // Fall back to static commander tree walk\n const candidates = getStaticCandidates(program, allWords);\n process.stdout.write(`${candidates.join(\"\\n\")}\\n`);\n return;\n }\n\n // No args — show help\n cmd.help();\n });\n\n return cmd;\n}\n\nfunction resolveDynamic(words: string[], cword: number): string[] | null {\n // words[0] = 'skaile', words[1] = command, etc.\n const cmd = words[1];\n const sub = words[2];\n const isLast = (i: number) => cword === i;\n\n if (cmd === \"run\" && isLast(2)) return resolveFlowIds();\n if (cmd === \"flow\" && sub === \"show\" && isLast(3)) return resolveFlowIds();\n if (cmd === \"skill\" && sub === \"show\" && isLast(3)) return resolveSkillNames();\n if (cmd === \"skill\" && sub === \"list\" && isLast(3)) return resolveDomains();\n if (cmd === \"session\" && [\"show\", \"switch\", \"delete\"].includes(sub!) && isLast(3)) {\n return resolveSessionIds(process.cwd());\n }\n if (cmd === \"config\" && [\"get\", \"set\"].includes(sub!) && isLast(3)) return CONFIG_KEYS;\n\n return null;\n}\n","import path from \"node:path\";\nimport {\n DRIVER_DEFAULTS,\n globalSettingsPath,\n loadSettings,\n projectSettingsPath,\n resolveSettings,\n resolveSkWorkspaceConfig,\n saveSettings,\n} from \"@skaile/workspaces/core\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { logErr, logOk, S } from \"../helpers.ts\";\n\n/** Keys that belong in .skaile/settings.json (personal, gitignored). */\nconst PERSONAL_KEYS = new Set([\"driver\", \"model\", \"provider\"]);\n\n/** API key prefix — `apiKey.<provider>` routes into the apiKeys map. */\nconst API_KEY_PREFIX = \"apiKey.\";\n\n/**\n * Create the `skaile config` command group.\n *\n * Manages personal settings stored in `.skaile/settings.json` (gitignored).\n * Subcommands: `show` (display effective config from both personal and workspace\n * layers, with resolved paths and masked API keys), `get <key>` (print a single\n * effective value), `set <key> <value>` (write a value — only `driver`, `model`,\n * `provider`, and `apiKey.<provider>` are accepted; project-level config belongs\n * in `skaile.yaml`). Pass `--global` to `set` to write to\n * `~/.skaile/settings.json` instead of the project directory.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/config#make-config-command\n */\nexport function makeConfigCommand(): Command {\n const cmd = new Command(\"config\").description(\"Manage personal config (.skaile/settings.json)\");\n\n // ── show ──────────────────────────────────────────────────────────────────\n\n cmd\n .command(\"show\")\n .description(\"Show effective config with sources\")\n .option(\"--project-dir <path>\", \"Project directory\")\n .action(async (opts) => {\n const projectDir = opts.projectDir ? path.resolve(opts.projectDir) : process.cwd();\n const config = await resolveSettings(projectDir);\n\n // Workspace config defaults (for display only — reads agent_config.default)\n const wsDefaults: Record<string, string> = {};\n try {\n const ws = resolveSkWorkspaceConfig(projectDir);\n const p = ws.agent_config?.default ?? {};\n if (p.driver) wsDefaults.driver = p.driver;\n if (p.provider) wsDefaults.provider = p.provider;\n if (p.model) wsDefaults.model = p.model;\n if (p.skills_dir) wsDefaults.skills_dir = p.skills_dir;\n if (p.agents_dir) wsDefaults.agents_dir = p.agents_dir;\n if (p.prompts_dir) wsDefaults.prompts_dir = p.prompts_dir;\n } catch {}\n\n console.log();\n console.log(S.heading(\" Effective Config\"));\n console.log(` ${S.rule(40)}`);\n for (const key of [\"driver\", \"provider\", \"model\"] as const) {\n const value = config[key];\n if (value !== undefined) {\n console.log(` ${S.label(`${key}:`.padEnd(16))} ${value}`);\n }\n }\n\n if (Object.keys(wsDefaults).length > 0) {\n console.log();\n console.log(` ${S.heading(\"Workspace Defaults\")} ${S.dim(\"(skaile.yaml)\")}`);\n console.log(` ${S.rule(40)}`);\n for (const [key, value] of Object.entries(wsDefaults)) {\n console.log(` ${S.label(`${key}:`.padEnd(16))} ${value}`);\n }\n }\n\n if (config.apiKeys && Object.keys(config.apiKeys).length > 0) {\n console.log();\n console.log(` ${S.heading(\"API Keys\")}`);\n console.log(` ${S.rule(40)}`);\n for (const [provider, key] of Object.entries(config.apiKeys)) {\n const fromEnv = !!process.env[`${provider.toUpperCase()}_API_KEY`];\n if (key) {\n console.log(\n ` ${S.label(`${provider}:`.padEnd(16))} ****${key.slice(-4)}` +\n (fromEnv ? ` ${S.dim(\"[env]\")}` : \"\"),\n );\n }\n }\n }\n\n const fw = config.driver ?? \"omp\";\n const paths = DRIVER_DEFAULTS[fw] ?? DRIVER_DEFAULTS.omp;\n if (paths) {\n console.log();\n console.log(` ${S.heading(\"Resolved Paths\")} ${S.dim(`(${fw})`)}`);\n console.log(` ${S.rule(40)}`);\n console.log(` ${S.label(\"skills:\".padEnd(16))} ${config.skillsDir ?? paths.skillsDir}`);\n console.log(` ${S.label(\"agents:\".padEnd(16))} ${config.agentsDir ?? paths.agentsDir}`);\n console.log(` ${S.label(\"prompts:\".padEnd(16))} ${config.promptsDir ?? paths.promptsDir}`);\n }\n console.log();\n });\n\n // ── get ───────────────────────────────────────────────────────────────────\n\n cmd\n .command(\"get <key>\")\n .description(\"Get an effective config value\")\n .option(\"--project-dir <path>\", \"Project directory\")\n .action(async (key: string, opts) => {\n const projectDir = opts.projectDir ? path.resolve(opts.projectDir) : process.cwd();\n const config = await resolveSettings(projectDir);\n const value = (config as any)[key];\n console.log(value ?? S.dim(\"(not set)\"));\n });\n\n // ── set ───────────────────────────────────────────────────────────────────\n\n cmd\n .command(\"set <key> <value>\")\n .description(\"Set a personal config value (driver, model, provider, apiKey.<provider>)\")\n .option(\"--project-dir <path>\", \"Project directory\")\n .option(\"--global\", \"Write to ~/.skaile/settings.json instead of project-local\")\n .action(async (key: string, value: string, opts) => {\n const projectDir = opts.projectDir ? path.resolve(opts.projectDir) : process.cwd();\n\n // Validate key is a personal setting\n const isApiKey = key.startsWith(API_KEY_PREFIX);\n if (!PERSONAL_KEYS.has(key) && !isApiKey) {\n logErr(\n `'${key}' is not a personal setting.\\n` +\n ` Personal keys: ${[...PERSONAL_KEYS].join(\", \")}, ${API_KEY_PREFIX}<provider>\\n` +\n ` Project config (framework, paths, resources) belongs in skaile.yaml`,\n );\n process.exit(1);\n }\n\n const filePath = opts.global ? globalSettingsPath() : projectSettingsPath(projectDir);\n\n const existing = await loadSettings(filePath);\n\n if (isApiKey) {\n const provider = key.slice(API_KEY_PREFIX.length);\n existing.apiKeys = { ...existing.apiKeys, [provider]: value };\n await saveSettings(existing, filePath);\n logOk(`Set ${pc.bold(`apiKeys.${provider}`)} = ****${value.slice(-4)}`);\n } else {\n (existing as any)[key] = value;\n await saveSettings(existing, filePath);\n logOk(`Set ${pc.bold(key)} = ${value}`);\n }\n\n console.log(S.dim(` → ${filePath}`));\n });\n\n cmd.action(() => {\n cmd.commands.find((c) => c.name() === \"show\")!.parse(process.argv);\n });\n\n return cmd;\n}\n","import * as readline from \"node:readline\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, S } from \"../helpers.ts\";\n\nfunction parseShorthand(input: string): Record<string, unknown> | null {\n const trimmed = input.trim();\n\n if (trimmed.startsWith(\"{\")) {\n try {\n return JSON.parse(trimmed);\n } catch {\n return null;\n }\n }\n\n const parts = trimmed.split(/\\s+/);\n const verb = parts[0];\n\n switch (verb) {\n case \"tools\":\n return { type: \"debug\", query: \"tools\" };\n case \"connectors\":\n return { type: \"debug\", query: \"connectors\" };\n case \"mcp\":\n return { type: \"debug\", query: \"mcp\" };\n case \"config\":\n return { type: \"debug\", query: \"config\" };\n case \"state\": {\n const store = parts[1];\n return { type: \"debug\", query: \"state\", ...(store ? { args: { store } } : {}) };\n }\n case \"prompt\": {\n const text = parts.slice(1).join(\" \");\n return { type: \"prompt\", prompt: text };\n }\n case \"configure\": {\n try {\n const json = parts.slice(1).join(\" \");\n return { type: \"configure\", config: JSON.parse(json) };\n } catch {\n return null;\n }\n }\n case \"shutdown\":\n return { type: \"shutdown\" };\n default:\n return null;\n }\n}\n\nfunction formatEvent(event: Record<string, unknown>): string {\n const type = event.type as string;\n switch (type) {\n case \"text\":\n return String(event.content ?? \"\");\n case \"tool_call\":\n return S.dim(`[tool] ${event.tool}: ${JSON.stringify(event.input).slice(0, 80)}`);\n case \"tool_result\":\n return S.dim(`[result] ${event.tool}: ${JSON.stringify(event.output).slice(0, 80)}`);\n case \"error\":\n return S.err(`[error] ${event.message}`);\n case \"debug_result\":\n return `[debug:${event.query}]\\n${JSON.stringify(event.data, null, 2)}`;\n case \"finished\": {\n const cost = typeof event.costUsd === \"number\" ? ` ($${event.costUsd.toFixed(4)})` : \"\";\n return S.dim(`[finished]${cost} ${event.summary ?? \"\"}`);\n }\n default:\n return S.dim(`[${type}] ${JSON.stringify(event).slice(0, 120)}`);\n }\n}\n\n/**\n * Creates the `skaile connect` command.\n *\n * Opens an interactive WebSocket REPL connected to a running agent server.\n * Supports shorthand verbs (`tools`, `connectors`, `prompt <text>`, etc.)\n * or raw JSON messages. Use `--cmd <json>` for non-interactive single-shot mode.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#connect\n */\nexport function makeConnectCommand(): Command {\n return new Command(\"connect\")\n .description(\"Interactive WebSocket REPL for a running agent server\")\n .argument(\"<url>\", \"WebSocket server URL (e.g. ws://localhost:8080)\")\n .option(\"--cmd <json>\", \"Send a single command and exit (non-interactive)\")\n .action(async (url: string, opts: { cmd?: string }) => {\n const { WebSocketClientTransport } = await import(\"@skaile/workspaces/transport/ws/client\");\n\n const client = new WebSocketClientTransport({\n url,\n reconnect: { maxAttempts: 0 },\n });\n\n try {\n await client.connect();\n } catch (err) {\n logErr(`Could not connect to ${url}: ${err instanceof Error ? err.message : String(err)}`);\n process.exitCode = 1;\n return;\n }\n\n // Non-interactive mode\n if (opts.cmd) {\n let parsed: Record<string, unknown>;\n try {\n parsed = JSON.parse(opts.cmd);\n } catch {\n logErr(\"--cmd value is not valid JSON\");\n await client.disconnect();\n process.exitCode = 1;\n return;\n }\n\n await new Promise<void>((resolve) => {\n client.onMessage((event) => {\n console.log(formatEvent(event as unknown as Record<string, unknown>));\n if (event.type === \"finished\" || event.type === \"debug_result\") {\n resolve();\n }\n });\n client.send(parsed as any);\n });\n\n await client.disconnect();\n return;\n }\n\n // Interactive REPL\n console.log();\n logInfo(`Connected to ${url}`);\n logInfo(\"Type a command shorthand (tools, connectors, mcp, config, state, prompt <text>)\");\n logInfo('or raw JSON. Type \"exit\" to quit.');\n console.log();\n\n client.onMessage((event) => {\n const line = formatEvent(event as unknown as Record<string, unknown>);\n if (line) process.stdout.write(`${line}\\n`);\n });\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n prompt: S.dim(\"> \"),\n terminal: true,\n });\n\n rl.prompt();\n\n rl.on(\"line\", (line) => {\n const trimmed = line.trim();\n if (!trimmed) {\n rl.prompt();\n return;\n }\n if (trimmed === \"exit\" || trimmed === \"quit\") {\n rl.close();\n return;\n }\n\n const cmd = parseShorthand(trimmed);\n if (!cmd) {\n logErr(`Unknown command: ${trimmed}`);\n rl.prompt();\n return;\n }\n\n client.send(cmd as any);\n rl.prompt();\n });\n\n await new Promise<void>((resolve) => {\n rl.on(\"close\", resolve);\n client.onDisconnect(() => {\n logErr(\"Server disconnected\");\n rl.close();\n resolve();\n });\n });\n\n await client.disconnect();\n });\n}\n","/**\n * `skaile connector` — operate on connectors declared in skaile.yaml.\n *\n * Usage:\n * skaile connector catalog [--project-dir]\n * skaile connector add <driver> [--id] [--access] [--no-install] [--project-dir]\n * skaile connector remove <id> [--project-dir]\n * skaile connector status [id] [--project-dir]\n * skaile connector list [--project-dir]\n * skaile connector sync [id] [--all] [--project-dir]\n * skaile connector ops <id> [--project-dir]\n * skaile connector read <id> <path> [--project-dir]\n * skaile connector write <id> <path> <content> [--project-dir]\n * skaile connector entries <id> [path] [--project-dir]\n * skaile connector search <id> <query> [--project-dir]\n * skaile connector delete <id> <path> [--project-dir]\n * skaile connector run <id> <op> [--key value ...] [--project-dir]\n */\n\nimport { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { createInterface } from \"node:readline\";\nimport type { ConnectorFieldSpec } from \"@skaile/workspaces/connectors\";\nimport { Command } from \"commander\";\nimport { logErr } from \"../helpers.ts\";\n\n// ── Shared connector setup ───────────────────────────────────────────────────\n\nasync function connectConnectors(projectDir: string) {\n const res = await import(\"@skaile/workspaces/connectors\");\n res.registerBuiltinConnectors();\n\n const declarations = res.loadConnectorDeclarations(projectDir);\n if (declarations.length === 0) {\n logErr(\"No connectors configured. Add connectors to skaile.yaml\");\n process.exit(1);\n }\n\n const manager = new res.ConnectorManager(projectDir, {\n secrets: res.createCliSecretProviderChain(),\n });\n const report = await manager.connectAll(declarations);\n for (const r of report.results) {\n if (!r.connected) {\n console.error(`Warning: Connector \"${r.id}\" failed to connect: ${r.error}`);\n }\n }\n\n return manager;\n}\n\nfunction parseOpArgs(args: string[]): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n let i = 0;\n const positional: string[] = [];\n\n while (i < args.length) {\n const arg = args[i]!;\n if (arg.startsWith(\"--\")) {\n const key = arg.slice(2);\n const next = args[i + 1];\n if (next && !next.startsWith(\"--\")) {\n try {\n result[key] = JSON.parse(next);\n } catch {\n result[key] = next;\n }\n i += 2;\n } else {\n result[key] = true;\n i += 1;\n }\n } else {\n positional.push(arg);\n i += 1;\n }\n }\n\n if (positional.length === 1) {\n result._positional = positional[0];\n if (!result.sql && !result.key && !result.message && !result.query) {\n result.sql = positional[0];\n result.key = positional[0];\n result.message = positional[0];\n result.query = positional[0];\n }\n } else if (positional.length > 0) {\n result._positional = positional;\n }\n\n return result;\n}\n\n// ── Interactive prompt helpers ─────────────────────────────────────────────\n\nasync function promptText(label: string, defaultVal?: string): Promise<string> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n const hint = defaultVal ? ` [${defaultVal}]` : \"\";\n return new Promise((resolve) => {\n rl.question(` ${label}${hint}: `, (answer) => {\n rl.close();\n resolve(answer.trim() || defaultVal || \"\");\n });\n });\n}\n\nasync function promptSecret(label: string): Promise<string> {\n return new Promise((resolve) => {\n process.stdout.write(` ${label} (hidden): `);\n const stdin = process.stdin;\n stdin.setRawMode?.(true);\n stdin.resume();\n stdin.setEncoding(\"utf8\");\n let value = \"\";\n const onData = (char: string) => {\n if (char === \"\\r\" || char === \"\\n\") {\n stdin.setRawMode?.(false);\n stdin.pause();\n stdin.removeListener(\"data\", onData);\n process.stdout.write(\"\\n\");\n resolve(value);\n } else if (char === \"\\u0003\") {\n process.exit(1); // Ctrl+C\n } else if (char === \"\\u007f\") {\n value = value.slice(0, -1);\n } else {\n value += char;\n }\n };\n stdin.on(\"data\", onData);\n });\n}\n\nasync function promptField(field: ConnectorFieldSpec): Promise<string | undefined> {\n if (field.sensitive || field.type === \"password\" || field.type === \"api-key\") {\n return promptSecret(field.label);\n }\n return promptText(field.label, field.default);\n}\n\n// ── Command builder ──────────────────────────────────────────────────────────\n\n/**\n * Creates the `skaile connector` command group.\n *\n * Operates on connectors declared in `skaile.yaml`. Subcommands: `catalog`,\n * `add`, `remove`, `status`, `list`, `sync`, `ops`, `read`, `write`, `entries`,\n * `search`, `delete`, `run`. All subcommands accept `--project-dir`.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/connector#make-connector-command\n */\nexport function makeConnectorCommand(): Command {\n const cmd = new Command(\"connector\").description(\"Operate on connectors in a workspace\");\n\n // skaile connector catalog\n cmd\n .command(\"catalog\")\n .description(\"List all available connector drivers and their dependencies\")\n .action(async () => {\n const { scanDirectory, resolveBaseAssetsRoot } = await import(\"@skaile/workspaces/core\");\n const baseAssetsDir = resolveBaseAssetsRoot();\n const entries = scanDirectory(baseAssetsDir, \"base-assets\").filter(\n (e) => e.kind === \"connector\",\n );\n\n if (entries.length === 0) {\n console.log(\"No connector descriptors found.\");\n return;\n }\n\n console.log(\"\\nAvailable connector drivers:\\n\");\n for (const entry of entries) {\n const npmDeps =\n (entry.metadata?.npm_deps as { required?: string[]; optional?: string[] }) ?? {};\n const allDeps = [\n ...(npmDeps.required ?? []),\n ...(npmDeps.optional ?? []).map((d: string) => `${d} (optional)`),\n ];\n const depsStr = allDeps.length > 0 ? ` deps: ${allDeps.join(\", \")}` : \"\";\n console.log(` ${entry.name.padEnd(18)} ${entry.name}`);\n console.log(` ${\"\".padEnd(18)} ${entry.description}`);\n if (depsStr) console.log(` ${\"\".padEnd(18)} ${depsStr}`);\n console.log();\n }\n console.log(`Run: skaile connector add <driver> to add one to your project.\\n`);\n });\n\n // skaile connector add <driver>\n cmd\n .command(\"add <driver>\")\n .option(\"--id <id>\", \"Connector instance ID (defaults to driver name)\")\n .option(\"--access <level>\", \"Access level: read-only | read-write\", \"read-only\")\n .option(\"--no-install\", \"Skip npm dependency installation\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .description(\"Add a connector to skaile.yaml and install its npm deps\")\n .action(\n async (\n driver: string,\n opts: { id?: string; access: string; install: boolean; projectDir: string },\n ) => {\n const { installNpmPackages } = await import(\"@skaile/workspaces/connectors\");\n const { scanDirectory, resolveBaseAssetsRoot, WorkspaceYamlEditor } = await import(\n \"@skaile/workspaces/core\"\n );\n\n const projectDir = path.resolve(opts.projectDir);\n const yamlPath = path.join(projectDir, \"skaile.yaml\");\n\n if (!existsSync(yamlPath)) {\n logErr(\"No skaile.yaml found in current directory. Run 'skaile init' first.\");\n process.exit(1);\n }\n\n const baseAssetsDir = resolveBaseAssetsRoot();\n const entries = scanDirectory(baseAssetsDir, \"base-assets\").filter(\n (e) => e.kind === \"connector\",\n );\n const entry = entries.find((e) => e.name === driver);\n if (!entry) {\n logErr(\n `Unknown driver: \"${driver}\". ` +\n `Run 'skaile connector catalog' to see available drivers.`,\n );\n process.exit(1);\n }\n\n console.log(`\\nAdding connector: ${entry.name} (${driver})\\n`);\n\n const id = opts.id ?? (await promptText(\"Connector ID\", driver));\n const access = (opts.access as \"read-only\" | \"read-write\") ?? \"read-only\";\n\n // Prompt for required fields only\n const fields = (entry.metadata?.fields ?? []) as ConnectorFieldSpec[];\n const fieldValues: Record<string, unknown> = {};\n const requiredFields = fields.filter((f) => f.required);\n if (requiredFields.length > 0) {\n console.log(\" Configure required fields:\");\n for (const field of requiredFields) {\n const value = await promptField(field);\n if (value) fieldValues[field.key] = value;\n }\n }\n\n // Install npm deps\n const npmDeps =\n (entry.metadata?.npm_deps as { required?: string[]; optional?: string[] }) ?? {};\n const allDeps = [...(npmDeps.required ?? []), ...(npmDeps.optional ?? [])];\n if (opts.install && allDeps.length > 0) {\n console.log(`\\nInstalling npm deps: ${allDeps.join(\", \")}...`);\n const installResult = await installNpmPackages(allDeps, projectDir);\n if (!installResult.success) {\n logErr(`Failed to install dependencies:\\n${installResult.output}`);\n process.exit(1);\n }\n console.log(\" ✓ Dependencies installed\");\n } else if (!opts.install && allDeps.length > 0) {\n console.log(\n ` ⚠ Skipping install. Add manually: bun add --optional ${allDeps.join(\" \")}`,\n );\n }\n\n // Write to skaile.yaml\n const editor = WorkspaceYamlEditor.load(yamlPath);\n editor.setConnector({\n id,\n driver,\n access,\n options: Object.keys(fieldValues).length > 0 ? fieldValues : undefined,\n });\n editor.save();\n\n console.log(`\\n✓ Connector '${id}' (${driver}) added to skaile.yaml\\n`);\n },\n );\n\n // skaile connector remove <id>\n cmd\n .command(\"remove <id>\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .description(\"Remove a connector from skaile.yaml by its instance ID\")\n .action(async (id: string, opts: { projectDir: string }) => {\n const { WorkspaceYamlEditor } = await import(\"@skaile/workspaces/core\");\n\n const projectDir = path.resolve(opts.projectDir);\n const yamlPath = path.join(projectDir, \"skaile.yaml\");\n\n if (!existsSync(yamlPath)) {\n logErr(\"No skaile.yaml found in current directory.\");\n process.exit(1);\n }\n\n const editor = WorkspaceYamlEditor.load(yamlPath);\n const removed = editor.removeConnector(id);\n\n if (!removed) {\n logErr(`No connector with id '${id}' found in skaile.yaml.`);\n process.exit(1);\n }\n\n editor.save();\n console.log(`✓ Connector '${id}' removed from skaile.yaml`);\n });\n\n // skaile connector status [id]\n cmd\n .command(\"status [id]\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .description(\"Connect and report health status for one or all connectors\")\n .action(async (id: string | undefined, opts: { projectDir: string }) => {\n const res = await import(\"@skaile/workspaces/connectors\");\n res.registerBuiltinConnectors();\n\n const projectDir = path.resolve(opts.projectDir);\n const declarations = res.loadConnectorDeclarations(projectDir);\n\n if (declarations.length === 0) {\n console.log(\"No connectors configured in skaile.yaml.\");\n return;\n }\n\n const targets = id ? declarations.filter((d) => d.id === id) : declarations;\n if (targets.length === 0) {\n logErr(`No connector with id '${id}' found.`);\n process.exit(1);\n }\n\n const manager = new res.ConnectorManager(projectDir, {\n secrets: res.createCliSecretProviderChain(),\n });\n const report = await manager.connectAll(targets);\n\n for (const r of report.results) {\n const symbol = r.connected ? \"✓\" : \"✗\";\n const detail = r.error ? ` error: ${r.error}` : \"\";\n const decl = targets.find((d) => d.id === r.id);\n console.log(` ${symbol} ${r.id.padEnd(20)} driver: ${decl?.driver ?? \"?\"}${detail}`);\n }\n\n await manager.disconnectAll();\n });\n\n // skaile connector list\n cmd\n .command(\"list\")\n .description(\"List all configured connectors\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .action(async (opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n console.log(JSON.stringify(manager.listConnectors(), null, 2));\n } finally {\n await manager.disconnectAll();\n }\n });\n\n // skaile connector sync [id] / --all\n cmd\n .command(\"sync [id]\")\n .description(\"Re-sync a filesystem-face connector or all of them (git pull, S3 refresh, etc.)\")\n .option(\"--all\", \"Sync all connectors\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .action(async (id: string | undefined, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n if (opts.all) {\n const results = await manager.syncAll();\n console.log(JSON.stringify(results, null, 2));\n } else if (id) {\n if (!manager.has(id)) {\n logErr(\n `Unknown connector: \"${id}\". Available: ${manager\n .listConnectors()\n .map((r) => r.id)\n .join(\", \")}`,\n );\n process.exit(1);\n }\n const result = await manager.sync(id);\n console.log(JSON.stringify(result, null, 2));\n } else {\n logErr(\"Provide a connector ID or use --all\");\n process.exit(1);\n }\n } finally {\n await manager.disconnectAll();\n }\n });\n\n // skaile connector ops <id>\n cmd\n .command(\"ops <id>\")\n .description(\"List available operations for a connector\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .action(async (id: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n if (!manager.has(id)) {\n logErr(\n `Unknown connector: \"${id}\". Available: ${manager\n .listConnectors()\n .map((r) => r.id)\n .join(\", \")}`,\n );\n process.exit(1);\n }\n console.log(JSON.stringify(manager.getOperations(id), null, 2));\n } finally {\n await manager.disconnectAll();\n }\n });\n\n // skaile connector read <id> <path>\n cmd\n .command(\"read <id> <resource-path>\")\n .description(\"Read content from a connector\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .action(async (id: string, resourcePath: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n const content = await manager.read(id, resourcePath);\n console.log(content?.data?.toString() ?? \"(empty)\");\n } finally {\n await manager.disconnectAll();\n }\n });\n\n // skaile connector write <id> <path> <content>\n cmd\n .command(\"write <id> <resource-path> <content>\")\n .description(\"Write content to a connector at a path\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .action(async (id: string, resourcePath: string, content: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n await manager.write(id, resourcePath, { data: content });\n console.log(\"Written.\");\n } finally {\n await manager.disconnectAll();\n }\n });\n\n // skaile connector entries <id> [path]\n cmd\n .command(\"entries <id> [resource-path]\")\n .description(\"List entries in a connector (files, keys, rows, etc)\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .option(\"--recursive\", \"Include nested entries\")\n .option(\"--limit <n>\", \"Maximum entries to return\", parseInt)\n .action(async (id: string, resourcePath: string | undefined, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n const entries = await manager.list(id, resourcePath, {\n recursive: opts.recursive,\n limit: opts.limit,\n });\n console.log(JSON.stringify(entries, null, 2));\n } finally {\n await manager.disconnectAll();\n }\n });\n\n // skaile connector search <id> <query>\n cmd\n .command(\"search <id> <query>\")\n .description(\"Search within a connector for matching content\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .action(async (id: string, query: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n const results = await manager.search(id, query);\n console.log(JSON.stringify(results, null, 2));\n } finally {\n await manager.disconnectAll();\n }\n });\n\n // skaile connector delete <id> <path>\n cmd\n .command(\"delete <id> <resource-path>\")\n .description(\"Delete an entry from a connector\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .action(async (id: string, resourcePath: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n const ok = await manager.delete(id, resourcePath);\n console.log(ok ? \"Deleted.\" : \"Not found.\");\n } finally {\n await manager.disconnectAll();\n }\n });\n\n // skaile connector run <id> <op> [--key value ...]\n cmd\n .command(\"run <id> <op> [args...]\")\n .description(\"Run a custom adapter operation (e.g. git log, sqlite query)\")\n .option(\"--project-dir <path>\", \"Workspace directory\", process.cwd())\n .allowUnknownOption()\n .action(async (id: string, op: string, args: string[], opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const manager = await connectConnectors(projectDir);\n try {\n if (!manager.has(id)) {\n logErr(\n `Unknown connector: \"${id}\". Available: ${manager\n .listConnectors()\n .map((r) => r.id)\n .join(\", \")}`,\n );\n process.exit(1);\n }\n // Merge trailing unknown options with positional args\n const rawArgs = [...args, ...(opts[\"--\"] ?? [])];\n const opArgs = parseOpArgs(rawArgs);\n const result = await manager.executeOp(id, op, opArgs);\n console.log(result);\n } finally {\n await manager.disconnectAll();\n }\n });\n\n cmd.action(() => cmd.help());\n\n return cmd;\n}\n","import { Command } from \"commander\";\nimport { logErr, logInfo, logOk, S } from \"../helpers.ts\";\n\nasync function runDebugQuery(\n query: \"tools\" | \"connectors\" | \"mcp\" | \"config\" | \"state\",\n parentOpts: { url: string },\n args?: Record<string, unknown>,\n): Promise<void> {\n const { WebSocketClientTransport } = await import(\"@skaile/workspaces/transport/ws/client\");\n\n const client = new WebSocketClientTransport({\n url: parentOpts.url,\n reconnect: { maxAttempts: 0 },\n });\n\n try {\n await client.connect();\n } catch (err) {\n logErr(\n `Could not connect to ${parentOpts.url}: ${err instanceof Error ? err.message : String(err)}`,\n );\n process.exitCode = 1;\n return;\n }\n\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(() => {\n logErr(\"Timeout: no debug_result received within 5s\");\n process.exitCode = 1;\n resolve();\n }, 5_000);\n\n client.onMessage((event) => {\n if (event.type !== \"debug_result\") return;\n clearTimeout(timeout);\n printDebugResult(query, event.data);\n resolve();\n });\n\n client.send({ type: \"debug\", query, args });\n });\n\n await client.disconnect();\n}\n\nfunction printDebugResult(query: string, data: unknown): void {\n console.log();\n console.log(S.heading(` debug: ${query}`));\n console.log();\n if (data === null || data === undefined) {\n logInfo(\"(no data)\");\n return;\n }\n if (typeof data === \"object\" && !Array.isArray(data)) {\n const obj = data as Record<string, unknown>;\n if (\"error\" in obj) {\n logErr(String(obj.error));\n return;\n }\n }\n console.log(JSON.stringify(data, null, 2));\n console.log();\n logOk(\"done\");\n}\n\n/**\n * Creates the `skaile debug` command group.\n *\n * Connects to a running agent server via WebSocket and queries its internal\n * state. Subcommands: `tools`, `connectors`, `mcp`, `config`, `state [store]`.\n * Defaults to `ws://localhost:8080`.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#debug\n */\nexport function makeDebugCommand(): Command {\n const cmd = new Command(\"debug\")\n .description(\"Inspect a running agent container's internal state\")\n .option(\"--url <url>\", \"WebSocket server URL\", \"ws://localhost:8080\");\n\n cmd\n .command(\"tools\")\n .description(\"List all tools the SDK sees (MCP + native)\")\n .action(async (_, parent) => {\n await runDebugQuery(\"tools\", parent.parent.opts());\n });\n\n cmd\n .command(\"connectors\")\n .description(\"List registered connectors and their state\")\n .action(async (_, parent) => {\n await runDebugQuery(\"connectors\", parent.parent.opts());\n });\n\n cmd\n .command(\"mcp\")\n .description(\"List MCP servers and their registered tools\")\n .action(async (_, parent) => {\n await runDebugQuery(\"mcp\", parent.parent.opts());\n });\n\n cmd\n .command(\"config\")\n .description(\"Dump driver config (API keys redacted)\")\n .action(async (_, parent) => {\n await runDebugQuery(\"config\", parent.parent.opts());\n });\n\n cmd\n .command(\"state [store]\")\n .description(\"Read a shared state store snapshot (or list all stores)\")\n .action(async (store, _, parent) => {\n await runDebugQuery(\"state\", parent.parent.opts(), store ? { store } : undefined);\n });\n\n return cmd;\n}\n","import path from \"node:path\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport { logInfo } from \"../helpers.ts\";\n\n/**\n * Creates the `skaile diff` command.\n *\n * Shows the unified diff between the deployed version of an asset and its\n * current source file in the repository clone.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/diff#make-diff-command\n */\nexport function makeDiffCommand(): Command {\n return new Command(\"diff\")\n .description(\"Show changes between deployed and source versions\")\n .argument(\"<ref>\", \"Asset reference (kind:name)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((ref: string, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const result = am.diff(ref);\n if (result === null) {\n logInfo(\"No differences (or asset not found).\");\n return;\n }\n console.log(result);\n });\n}\n","import { loadAllFlows } from \"@skaile/workspaces/base-assets/connectors/flow/engine\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, S } from \"../helpers.ts\";\nimport { AI_RESOURCES } from \"../paths.ts\";\n\n/**\n * Create the `skaile flow` command group.\n *\n * Browses flows discovered from the `ai-assets/` directory tree via\n * {@link loadAllFlows}. Subcommands: `list` (print all available flows with\n * their IDs, names, and descriptions) and `show <id>` (print the flow's\n * metadata and its skill nodes in execution order, marking optional nodes).\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/flow#make-flow-command\n */\nexport function makeFlowCommand(): Command {\n const cmd = new Command(\"flow\").description(\"Manage flows\");\n\n cmd\n .command(\"list\")\n .description(\"List available flows\")\n .action(async () => {\n const flows = loadAllFlows(AI_RESOURCES);\n if (flows.length === 0) {\n logInfo(\"No flows found.\");\n return;\n }\n\n console.log();\n console.log(S.heading(\" Available Flows\"));\n console.log(` ${S.rule(50)}`);\n for (const f of flows) {\n console.log(` ${S.cmd(f.id.padEnd(24))} ${f.name}`);\n if (f.description) console.log(` ${\"\".padEnd(24)} ${S.dim(f.description)}`);\n }\n console.log();\n });\n\n cmd\n .command(\"show <id>\")\n .description(\"Show flow details and node graph\")\n .action(async (id: string) => {\n const flows = loadAllFlows(AI_RESOURCES);\n const flow = flows.find((f) => f.id === id);\n if (!flow) {\n logErr(`Flow not found: ${id}`);\n process.exit(1);\n }\n\n console.log();\n console.log(` ${S.heading(flow.name)} ${S.dim(`(${flow.id} v${flow.version})`)}`);\n if (flow.description) console.log(` ${S.dim(flow.description)}`);\n const skillNodes = flow.nodes.filter((n) => n.type === \"skill\");\n console.log(`\\n ${S.heading(\"Nodes\")} ${S.dim(`(${skillNodes.length} skills)`)}`);\n console.log(` ${S.rule(50)}`);\n for (const node of skillNodes) {\n const opt = node.data?.optional ? S.dim(\" [optional]\") : \"\";\n const label = (node.data?.label ?? node.id).padEnd(24);\n console.log(` ${label} ${S.label(\"skill:\")} ${S.cmd(node.data?.skill ?? node.id)}${opt}`);\n }\n console.log();\n });\n\n cmd.action(() => cmd.help());\n\n return cmd;\n}\n","import path from \"node:path\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport { colorRef, logInfo, logOk, S } from \"../helpers.ts\";\n\n/**\n * Creates the `skaile history` command group.\n *\n * Shows recent add/remove/update actions recorded in `.skaile/history.yaml`.\n * Also exposes a `history clear` subcommand to wipe the history file.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#history\n */\nexport function makeHistoryCommand(): Command {\n const cmd = new Command(\"history\").description(\"Show recent add/remove/update actions\");\n\n cmd\n .argument(\"[limit]\", \"Number of entries to show\", \"20\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((limitStr: string, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const limit = parseInt(limitStr, 10) || 20;\n const entries = am.history(limit);\n if (entries.length === 0) {\n logInfo(\"No history yet.\");\n return;\n }\n const refW = Math.max(3, ...entries.map((e) => e.ref.length));\n console.log();\n console.log(S.heading(\" History\"));\n console.log(` ${S.rule(refW + 30)}`);\n for (const e of entries) {\n const when = new Date(e.timestamp).toLocaleDateString();\n console.log(\n ` ${colorRef(e.ref).padEnd(refW + 10)} ${e.action.padEnd(7)} ${e.context.padEnd(7)} ${S.dim(when)}`,\n );\n }\n console.log();\n });\n\n cmd\n .command(\"clear\")\n .description(\"Clear action history\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n am.clearHistory();\n logOk(\"History cleared.\");\n });\n\n return cmd;\n}\n","/**\n * skaile library — manage user-facing libraries (authoring places for AI\n * assets, backed by `local` or `git`).\n *\n * Lifecycle subcommands: list, status, show, init, link, create, default,\n * rename, set, remove. Git verbs (commit, pull, push, propose, git, sync)\n * apply to git-backed libraries. Publish/register/yank are scaffolded stubs\n * that will land when the store publish endpoint is finalised.\n *\n * @docLink cli/commands/library\n */\n\nimport { existsSync } from \"node:fs\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { resolveLibraryDir } from \"@skaile/workspaces/library\";\nimport { Command, Option } from \"commander\";\nimport pc from \"picocolors\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { ASSET_KINDS } from \"@skaile/workspaces/core\";\nimport { formatRelativeTime, logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport { openLibrary, openLibraryManager } from \"../open-library.ts\";\nimport { createFullRegistry } from \"../open-registry.ts\";\n\nconst NOT_WIRED_MSG_PUBLISH =\n \"`skaile library publish` is scaffolded but not yet wired. \" +\n \"Server endpoint `POST /sources/<id>/manifest` lands in a follow-up PR.\";\n\nfunction notWired(verb: string, msg: string): never {\n logErr(`${msg} (verb: library ${verb})`);\n process.exit(2);\n}\n\nexport function makeLibraryCommand(): Command {\n const cmd = new Command(\"library\").description(\"Manage user authoring libraries (local / git)\");\n\n // ── library list ─────────────────────────────────────────────────────────\n cmd\n .command(\"list\")\n .description(\"List all registered libraries\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const { manager, close } = await openLibraryManager();\n try {\n const ls = await manager.listLibraries();\n if (opts.json) return console.log(JSON.stringify(ls, null, 2));\n if (ls.length === 0) {\n logInfo(\"No libraries registered. Run `skaile library init personal` to start.\");\n return;\n }\n console.log();\n console.log(S.heading(\" Libraries\"));\n console.log(` ${S.rule(80)}`);\n for (const l of ls) {\n const def = l.isDefault ? pc.green(\"▸ \") : \" \";\n console.log(\n `${def}${S.cmd(l.name.padEnd(16))} ${pc.dim(l.backend.padEnd(7))} ${pc.dim(l.ownership.padEnd(12))} ${pc.dim(l.path)}`,\n );\n }\n console.log(`\\n ${S.dim(`${ls.length} library(s)`)}\\n`);\n } finally {\n close();\n }\n });\n\n // ── library status ───────────────────────────────────────────────────────\n // Folds in the former top-level `lib-status`. With no <name>, prints a\n // health summary of the local Library; with a <name>, prints sync status\n // for that single library only.\n cmd\n .command(\"status [name]\")\n .description(\"Show overall Library health or per-library sync status\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--json\", \"Output as JSON\")\n .action(async (name: string | undefined, opts: { projectDir: string; json?: boolean }) => {\n if (name) {\n await printPerLibraryStatus(name, opts.json ?? false);\n return;\n }\n await printOverallStatus(opts.projectDir, opts.json ?? false);\n });\n\n // ── library show ─────────────────────────────────────────────────────────\n cmd\n .command(\"show <name>\")\n .description(\"Detailed info about a library\")\n .action(async (name: string) => {\n const { manager, close } = await openLibraryManager();\n try {\n const l = await manager.requireLibrary(name);\n console.log();\n console.log(S.heading(` ${l.name}`));\n console.log(` ${S.rule(50)}`);\n console.log(` ${S.label(\"id\")} ${l.id}`);\n console.log(` ${S.label(\"backend\")} ${l.backend}`);\n console.log(` ${S.label(\"ownership\")} ${l.ownership}`);\n console.log(` ${S.label(\"path\")} ${l.path}`);\n console.log(` ${S.label(\"structure\")} ${l.structure ?? \"(undetected)\"}`);\n console.log(` ${S.label(\"isDefault\")} ${l.isDefault}`);\n console.log(` ${S.label(\"manifestGen\")} ${l.manifestGenerated}`);\n console.log(` ${S.label(\"backendConfig\")} ${JSON.stringify(l.backendConfig)}`);\n console.log();\n } finally {\n close();\n }\n });\n\n // ── library init ─────────────────────────────────────────────────────────\n // Default backend is `local`. --git creates with a remote attached.\n cmd\n .command(\"init <name>\")\n .description(\"Create a new local library at ~/.skaile/libraries/<name>\")\n .option(\"--git <url>\", \"Initialize as a git library tracking <url>\")\n .option(\"--owner\", \"Mark as owner (default for local)\")\n .option(\"--contributor\", \"Mark as contributor\")\n .option(\"--reader\", \"Mark as reader\")\n .action(\n async (\n name: string,\n opts: {\n git?: string;\n owner?: boolean;\n contributor?: boolean;\n reader?: boolean;\n },\n ) => {\n const libDir = resolveLibraryDir();\n const libPath = path.join(libDir, name);\n const ownership = opts.contributor ? \"contributor\" : opts.reader ? \"reader\" : \"owner\";\n const { manager, close } = await openLibraryManager();\n try {\n if (opts.git) {\n fs.mkdirSync(libPath, { recursive: true });\n await manager.addLibrary({\n name,\n path: libPath,\n backend: \"git\",\n backendConfig: { url: opts.git, branch: \"main\", authHint: \"ssh\" },\n ownership,\n });\n } else {\n fs.mkdirSync(libPath, { recursive: true });\n await manager.addLibrary({\n name,\n path: libPath,\n backend: \"local\",\n ownership: \"owner\",\n structure: \"domain\",\n });\n }\n logOk(`Library \"${name}\" created at ${libPath}`);\n } finally {\n close();\n }\n },\n );\n\n // ── library link ─────────────────────────────────────────────────────────\n // Attach a github remote to a local library, making it store-publishable.\n cmd\n .command(\"link <name> <git-url>\")\n .description(\"Attach a github remote to a local library (makes it store-publishable)\")\n .option(\"--branch <name>\", \"Default branch\", \"main\")\n .action(async (name: string, url: string, opts: { branch: string }) => {\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n if (lib.backend === \"git\") {\n logErr(\n `Library \"${name}\" is already git-backed. ` +\n `Use \\`skaile library set ${name} backendConfig.url=${url}\\` to change its remote.`,\n );\n process.exit(1);\n }\n await manager.updateLibrary(name, {\n backend: \"git\",\n backendConfig: { url, branch: opts.branch, authHint: \"ssh\" },\n });\n logOk(`Library \"${name}\" linked to ${url}.`);\n } finally {\n close();\n }\n });\n\n // ── library create ───────────────────────────────────────────────────────\n // Scaffold a new asset inside a library. Mirrors the top-level `skaile\n // create` but rooted at the library checkout dir by default.\n cmd\n .command(\"create <kind> <name>\")\n .description(\"Scaffold a new asset inside the default (or named) library\")\n .addOption(\n new Option(\"--kind <kind>\", \"Asset kind override\").choices([...ASSET_KINDS]),\n )\n .option(\"--library <name>\", \"Target library (default: the default-marked one)\")\n .option(\"--dir <dir>\", \"Target directory inside the library (default: library root)\")\n .action(\n async (\n kind: string,\n name: string,\n opts: { kind?: string; library?: string; dir?: string },\n ) => {\n if (!(ASSET_KINDS as readonly string[]).includes(kind)) {\n logErr(`Unknown asset kind \"${kind}\". Expected: ${ASSET_KINDS.join(\", \")}.`);\n process.exit(1);\n }\n const { manager, close } = await openLibraryManager();\n try {\n let target: Awaited<ReturnType<typeof manager.requireLibrary>>;\n if (opts.library) {\n target = await manager.requireLibrary(opts.library);\n } else {\n const all = await manager.listLibraries();\n const def = all.find((l) => l.isDefault);\n if (!def) {\n logErr(\n \"No default library set. Either run `skaile library default <name>` first or pass --library.\",\n );\n process.exit(1);\n }\n target = def;\n }\n const am = new AssetManager({ projectDir: process.cwd() });\n const destDir = opts.dir ? path.join(target.path, opts.dir) : target.path;\n const res = am.create(name, opts.kind ?? kind, destDir);\n if (res.ok) {\n logOk(`Created ${opts.kind ?? kind}: ${pc.dim(res.path)}`);\n } else {\n logErr(res.path);\n process.exit(1);\n }\n } finally {\n close();\n }\n },\n );\n\n // ── library default ──────────────────────────────────────────────────────\n cmd\n .command(\"default <name>\")\n .description(\"Set <name> as the default library\")\n .action(async (name: string) => {\n const { manager, close } = await openLibraryManager();\n try {\n const updated = await manager.setDefault(name);\n logOk(`Default → ${updated.name}`);\n } finally {\n close();\n }\n });\n\n // ── library rename ───────────────────────────────────────────────────────\n cmd\n .command(\"rename <old> <new>\")\n .description(\"Rename a library (also moves the directory)\")\n .action(async (oldName: string, newName: string) => {\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(oldName);\n const parent = path.dirname(lib.path);\n const newPath = path.join(parent, newName);\n if (fs.existsSync(newPath)) {\n logErr(`Target directory already exists: ${newPath}`);\n process.exit(1);\n }\n fs.renameSync(lib.path, newPath);\n await manager.updateLibrary(lib.id, { name: newName, path: newPath });\n logOk(`Renamed ${oldName} → ${newName}`);\n } finally {\n close();\n }\n });\n\n // ── library set ──────────────────────────────────────────────────────────\n cmd\n .command(\"set <name> <field=value>\")\n .description(\"Update a single library field (e.g. ownership=contributor)\")\n .action(async (name: string, expr: string) => {\n const [field, ...rest] = expr.split(\"=\");\n const value = rest.join(\"=\");\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const patch: Record<string, unknown> = {};\n if (field === \"ownership\") patch.ownership = value;\n else if (field === \"structure\") patch.structure = value;\n else if (field === \"isDefault\") patch.isDefault = value === \"true\";\n else if (field.startsWith(\"backendConfig.\")) {\n const key = field.split(\".\")[1];\n patch.backendConfig = { ...lib.backendConfig, [key]: value };\n } else {\n logErr(`Unsupported field: ${field}`);\n process.exit(1);\n }\n await manager.updateLibrary(name, patch);\n logOk(`Updated ${name}.${field}`);\n } finally {\n close();\n }\n });\n\n // ── library remove ───────────────────────────────────────────────────────\n cmd\n .command(\"remove <name>\")\n .description(\"Unregister a library (use --purge to also delete files)\")\n .option(\"--purge\", \"Also delete the library directory from disk\", false)\n .option(\"-y, --yes\", \"Skip confirmation\", false)\n .action(async (name: string, opts: { purge: boolean; yes: boolean }) => {\n const { manager, close } = await openLibraryManager();\n try {\n if (!opts.yes) {\n const confirmed = await p.confirm({\n message: `Remove library \"${name}\"${opts.purge ? \" AND delete its directory\" : \"\"}?`,\n initialValue: false,\n });\n if (!confirmed || p.isCancel(confirmed)) {\n logInfo(\"Cancelled.\");\n return;\n }\n }\n await manager.removeLibrary(name, { purge: opts.purge });\n logOk(`Removed ${name}.`);\n } finally {\n close();\n }\n });\n\n // ── library sync ─────────────────────────────────────────────────────────\n cmd\n .command(\"sync <name>\")\n .description(\"Pull then push (as backend permits)\")\n .action(async (name: string) => {\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const drv = manager.driverFor(lib.backend);\n const pull = await drv.pull(lib);\n logInfo(`Pulled: applied=${pull.applied}, conflicts=${pull.conflicts.length}`);\n if (lib.ownership === \"owner\" && lib.backend !== \"local\") {\n const push = await drv.push(lib);\n logInfo(`Pushed: ${push.pushed}`);\n }\n await manager.updateLibrary(name, { lastSyncAt: new Date() });\n logOk(`Synced ${name}.`);\n } finally {\n close();\n }\n });\n\n // ── library pull ─────────────────────────────────────────────────────────\n cmd\n .command(\"pull <name>\")\n .description(\"Pull from remote\")\n .action(async (name: string) => {\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const res = await manager.driverFor(lib.backend).pull(lib);\n if (res.conflicts.length > 0) {\n logWarn(`Conflicts: ${res.conflicts.map((c) => c.path).join(\", \")}`);\n } else {\n logOk(`Pulled ${res.applied} change(s).`);\n }\n } finally {\n close();\n }\n });\n\n // ── library push ─────────────────────────────────────────────────────────\n cmd\n .command(\"push <name>\")\n .description(\"Push local commits (owner only)\")\n .option(\"--force\", \"Force-with-lease push\", false)\n .action(async (name: string, opts: { force: boolean }) => {\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const res = await manager.driverFor(lib.backend).push(lib, { force: opts.force });\n logOk(`Pushed (${res.pushed}).`);\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exit(1);\n } finally {\n close();\n }\n });\n\n // ── library propose ──────────────────────────────────────────────────────\n cmd\n .command(\"propose <name>\")\n .description(\"Open a pull request on the upstream repo (contributor only)\")\n .option(\"--title <title>\", \"PR title\")\n .option(\"--body <body>\", \"PR body\")\n .option(\"--branch <name>\", \"Branch name (default: skaile/<timestamp>)\")\n .action(async (name: string, opts: { title?: string; body?: string; branch?: string }) => {\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const res = await manager.driverFor(lib.backend).propose(lib, opts);\n logOk(`PR opened: ${res.prUrl}`);\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exit(1);\n } finally {\n close();\n }\n });\n\n // ── library commit ───────────────────────────────────────────────────────\n cmd\n .command(\"commit <name>\")\n .description(\"Git-commit local changes inside the library (git only)\")\n .option(\"-m, --message <msg>\", \"Commit message\", \"skaile: update assets\")\n .action(async (name: string, opts: { message: string }) => {\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n if (lib.backend !== \"git\") {\n logErr(\"`library commit` only applies to git-backed libraries.\");\n process.exit(1);\n }\n const { spawnSync } = await import(\"node:child_process\");\n spawnSync(\"git\", [\"add\", \"-A\"], { cwd: lib.path, stdio: \"inherit\" });\n const r = spawnSync(\"git\", [\"commit\", \"-m\", opts.message], {\n cwd: lib.path,\n stdio: \"inherit\",\n });\n if (r.status !== 0) {\n logWarn(\"Nothing committed (working tree clean or commit aborted).\");\n } else {\n logOk(`Committed in ${name}.`);\n }\n } finally {\n close();\n }\n });\n\n // ── library git ──────────────────────────────────────────────────────────\n cmd\n .command(\"git <name>\")\n .description(\"Pass-through: run arbitrary git commands inside the library\")\n .allowUnknownOption()\n .action(async (name: string, _: unknown, command: Command) => {\n const args = command.args.slice(1);\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const { spawnSync } = await import(\"node:child_process\");\n const r = spawnSync(\"git\", args, { cwd: lib.path, stdio: \"inherit\" });\n process.exit(r.status ?? 0);\n } finally {\n close();\n }\n });\n\n // ── library publish / register / yank (stubs) ───────────────────────────\n cmd\n .command(\"publish <ref>\")\n .description(\"Push + register manifest atomically (needs git backend)\")\n .action((_ref: string) => notWired(\"publish\", NOT_WIRED_MSG_PUBLISH));\n\n cmd\n .command(\"register <ref>\")\n .description(\"Register manifest in store without pushing (bytes already on github)\")\n .action((_ref: string) => notWired(\"register\", NOT_WIRED_MSG_PUBLISH));\n\n cmd\n .command(\"yank <ref>\")\n .description(\"Retract a catalog entry\")\n .option(\"--version <v>\", \"Version to yank\")\n .action((_ref: string) => notWired(\"yank\", NOT_WIRED_MSG_PUBLISH));\n\n return cmd;\n}\n\n// ---------------------------------------------------------------------------\n// Status helpers (formerly `lib-status`)\n// ---------------------------------------------------------------------------\n\nasync function printPerLibraryStatus(name: string, asJson: boolean): Promise<void> {\n const { manager, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n const status = await manager.driverFor(lib.backend).status(lib);\n if (asJson) return console.log(JSON.stringify({ library: lib.name, status }, null, 2));\n console.log(`\\n ${S.heading(lib.name)}`);\n console.log(` reachable: ${status.reachable ? S.ok(\"yes\") : S.err(\"no\")}`);\n if (status.remoteChanges) {\n console.log(\n ` behind/ahead: ${status.remoteChanges.behind}/${status.remoteChanges.ahead}`,\n );\n }\n const lc = status.localChanges;\n if (lc.added.length + lc.modified.length + lc.deleted.length > 0) {\n console.log(\n ` local changes: +${lc.added.length} ~${lc.modified.length} -${lc.deleted.length}`,\n );\n }\n for (const note of status.notes) console.log(` ${pc.dim(\"note:\")} ${note}`);\n console.log();\n } finally {\n close();\n }\n}\n\nasync function printOverallStatus(projectDir: string, asJson: boolean): Promise<void> {\n const library = await openLibrary();\n try {\n const libs = await library.listSources();\n const defs = await library.listAssetDefs();\n const instances = await library.listInstances();\n\n let secretsStrategy = \"unknown\";\n try {\n const { LocalSecretsProvider } = await import(\"@skaile/workspaces/secrets\");\n const provider = new LocalSecretsProvider();\n secretsStrategy = provider.getKeyStrategy();\n } catch {\n secretsStrategy = \"unavailable\";\n }\n\n const resolvedProjectDir = path.resolve(projectDir);\n const hasWorkspaceConfig = existsSync(path.join(resolvedProjectDir, \"skaile.yaml\"));\n const hasLockFile = existsSync(path.join(resolvedProjectDir, \"skaile.lock.yaml\"));\n\n let subscriptions: { id: string; workspaceId: string; instanceId: string }[] = [];\n if (hasWorkspaceConfig) {\n try {\n subscriptions = await library.listSubscriptions(resolvedProjectDir);\n } catch {\n // empty workspace\n }\n }\n\n const registry = createFullRegistry();\n const registeredKinds = registry.getAllKinds();\n\n if (asJson) {\n console.log(\n JSON.stringify(\n {\n libraries: libs.length,\n assetDefinitions: defs.length,\n instances: instances.length,\n subscriptions: subscriptions.length,\n secretsStrategy,\n registeredKinds,\n workspace: {\n dir: resolvedProjectDir,\n hasConfig: hasWorkspaceConfig,\n hasLock: hasLockFile,\n },\n },\n null,\n 2,\n ),\n );\n return;\n }\n\n console.log();\n console.log(S.heading(\" Library Status\"));\n console.log(` ${S.rule(50)}`);\n console.log(\n ` ${S.label(\"Libraries\")} ${libs.length === 0 ? S.dim(\"none\") : pc.green(String(libs.length))}`,\n );\n for (const l of libs.slice(0, 3)) {\n const synced = l.lastSyncAt\n ? `synced ${formatRelativeTime(l.lastSyncAt)}`\n : \"never synced\";\n const defaultMark = l.isDefault ? pc.green(\" *\") : \"\";\n console.log(\n ` ${S.dim(l.id.slice(0, 8))} ${l.name} ${S.dim(`(${l.backend})`)} ${S.dim(l.ownership)} ${S.dim(synced)}${defaultMark}`,\n );\n }\n if (libs.length > 3) {\n console.log(` ${S.dim(`...and ${libs.length - 3} more`)}`);\n }\n\n const byKind = new Map<string, number>();\n for (const d of defs) byKind.set(d.kind, (byKind.get(d.kind) ?? 0) + 1);\n console.log(\n ` ${S.label(\"Cached assets\")} ${defs.length === 0 ? S.dim(\"none\") : pc.green(String(defs.length))}`,\n );\n if (byKind.size > 0) {\n const parts = [...byKind.entries()]\n .sort((a, b) => b[1] - a[1])\n .map(([k, v]) => `${v} ${k}${v > 1 ? \"s\" : \"\"}`);\n console.log(` ${S.dim(parts.join(\", \"))}`);\n }\n\n console.log(\n ` ${S.label(\"Registered kinds\")} ${pc.green(String(registeredKinds.length))}`,\n );\n console.log(` ${S.dim(registeredKinds.join(\", \"))}`);\n\n console.log(\n ` ${S.label(\"Instances\")} ${instances.length === 0 ? S.dim(\"none\") : pc.green(String(instances.length))}`,\n );\n console.log(\n ` ${S.label(\"Subscriptions\")} ${subscriptions.length === 0 ? S.dim(\"none (this workspace)\") : pc.green(String(subscriptions.length))}`,\n );\n\n const strategyColor = secretsStrategy === \"unavailable\" ? S.dim : pc.green;\n console.log(` ${S.label(\"Secrets strategy\")} ${strategyColor(secretsStrategy)}`);\n\n console.log(` ${S.rule(50)}`);\n console.log(` ${S.label(\"Workspace\")} ${resolvedProjectDir}`);\n console.log(\n ` ${S.label(\"skaile.yaml\")} ${hasWorkspaceConfig ? pc.green(\"present\") : S.dim(\"not found\")}`,\n );\n console.log(\n ` ${S.label(\"skaile.lock.yaml\")} ${hasLockFile ? pc.green(\"present\") : S.dim(\"not found\")}`,\n );\n console.log();\n\n if (libs.length === 0) {\n logInfo(\"Get started: `skaile library init personal` or `skaile source add <git-url>`\");\n } else if (defs.length === 0) {\n logInfo(\"Run `skaile library sync <name>` to discover assets.\");\n } else if (instances.length === 0) {\n logInfo(\"Run `skaile asset install <ref>` to install an asset into a workspace.\");\n }\n } finally {\n library.close();\n }\n}\n","import { portableSpawn, portableSpawnSync } from \"@skaile/workspaces/core\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { logErr, logInfo, S } from \"../helpers.ts\";\n\ninterface Container {\n name: string;\n project: string;\n status: string;\n createdAt: string;\n}\n\nfunction parseContainers(raw: string): Container[] {\n return raw\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line) => {\n const [name = \"\", project = \"\", status = \"\", ...rest] = line.split(\"\\t\");\n return { name, project, status, createdAt: rest.join(\"\\t\") };\n });\n}\n\nfunction colorLine(line: string): string {\n if (/error|Error|ERROR|failed|Failed/.test(line)) return pc.red(line);\n if (/connector|MCP|tool/.test(line)) return pc.yellow(line);\n if (/rebuilt|registered|ready/.test(line)) return pc.green(line);\n if (/\\[driver\\]/.test(line)) return pc.cyan(line);\n if (/\\[serve\\]/.test(line)) return pc.dim(line);\n return line;\n}\n\nfunction dockerAvailable(): boolean {\n return portableSpawnSync([\"docker\", \"info\"]).exitCode === 0;\n}\n\nfunction listContainers(): Container[] {\n const result = portableSpawnSync([\n \"docker\",\n \"ps\",\n \"--filter\",\n \"label=skaile.managed=true\",\n \"--format\",\n '{{.Names}}\\t{{.Label \"skaile.project-slug\"}}\\t{{.Status}}\\t{{.CreatedAt}}',\n ]);\n return parseContainers(result.stdout);\n}\n\n/**\n * Creates the `skaile logs` command.\n *\n * Tails logs from skaile-managed Docker agent containers. Supports `--follow`,\n * regex `--filter`, project slug filtering, and `--list` to enumerate running\n * containers.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#logs\n */\nexport function makeLogsCommand(): Command {\n return new Command(\"logs\")\n .description(\"Tail logs from skaile Docker agent containers\")\n .option(\"--follow\", \"Follow log output (like tail -f)\")\n .option(\"--lines <n>\", \"Number of lines to show\", \"50\")\n .option(\"--filter <pattern>\", \"Filter log lines (regex)\")\n .option(\"--project <slug>\", \"Filter by project slug\")\n .option(\"--list\", \"List running skaile containers instead of showing logs\")\n .action(\n async (opts: {\n follow?: boolean;\n lines: string;\n filter?: string;\n project?: string;\n list?: boolean;\n }) => {\n if (!dockerAvailable()) {\n logErr(\"Docker is not running or not installed\");\n process.exitCode = 1;\n return;\n }\n\n const containers = listContainers();\n\n if (opts.list) {\n if (containers.length === 0) {\n logInfo(\"No skaile containers running\");\n return;\n }\n console.log();\n console.log(\n ` ${S.dim(\"NAME\".padEnd(30))} ${S.dim(\"PROJECT\".padEnd(20))} ${S.dim(\"STATUS\")}`,\n );\n console.log(` ${S.dim(\"─\".repeat(70))}`);\n for (const c of containers) {\n console.log(\n ` ${S.heading(c.name.padEnd(30))} ${c.project.padEnd(20)} ${S.dim(c.status)}`,\n );\n }\n console.log();\n return;\n }\n\n if (containers.length === 0) {\n logErr(\"No skaile containers running\");\n process.exitCode = 1;\n return;\n }\n\n let target: Container | undefined;\n if (opts.project) {\n target = containers.find((c) => c.project === opts.project);\n if (!target) {\n logErr(`No container found for project: ${opts.project}`);\n process.exitCode = 1;\n return;\n }\n } else {\n // Most recently created is first in `docker ps` output\n target = containers[0];\n }\n\n const filterRe = opts.filter ? new RegExp(opts.filter) : null;\n\n const args = [\"docker\", \"logs\", \"--tail\", opts.lines];\n if (opts.follow) args.push(\"--follow\");\n args.push(target.name);\n\n if (opts.follow) {\n const proc = portableSpawn(args);\n\n async function pipeStream(stream: ReadableStream<Uint8Array>) {\n const decoder = new TextDecoder();\n const reader = stream.getReader();\n let buf = \"\";\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buf += decoder.decode(value, { stream: true });\n const lines = buf.split(\"\\n\");\n buf = lines.pop() ?? \"\";\n for (const line of lines) {\n if (!filterRe || filterRe.test(line)) {\n console.log(colorLine(line));\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n if (buf && (!filterRe || filterRe.test(buf))) {\n console.log(colorLine(buf));\n }\n }\n\n await Promise.all([pipeStream(proc.stdout), pipeStream(proc.stderr)]);\n } else {\n const result = portableSpawnSync(args);\n const combined = result.stdout + result.stderr;\n const lines = combined.split(\"\\n\");\n for (const line of lines) {\n if (!line) continue;\n if (!filterRe || filterRe.test(line)) {\n console.log(colorLine(line));\n }\n }\n }\n },\n );\n}\n","/**\n * Interactive TUI for managing AI assets.\n *\n * Tabs: [Assets] [Sources] [Libraries] [Pending] [Sync]\n *\n * - Assets — browse and queue install/remove for assets, grouped by source.\n * - Sources — third-party github repos registered via `skaile source add`.\n * - Libraries — user authoring places registered via `skaile library init`.\n * - Pending — staged adds/removes (rich rendering deferred to AF-LIB-TUI-RICH).\n * - Sync — bulk sync sources + libraries (deferred to AF-LIB-TUI-RICH).\n *\n * Keys: ↑↓/jk navigate, ←/→ collapse/expand, space/+/- select, a/Enter apply,\n * s sync, i info, Tab switch view, q/Esc quit\n *\n * NOTE: rich rendering (status glyphs, behind/ahead counters, in-line sync) for\n * the Sources/Libraries/Pending/Sync tabs is deferred to AF-LIB-TUI-RICH (see\n * workspaces/issues.md). The current implementation is a minimal scaffold.\n */\n\nimport path from \"node:path\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport type { CatalogEntry } from \"@skaile/workspaces/core\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { kindColor, kindColorPad, S } from \"../helpers.ts\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * A single row in the manage TUI asset list, representing a source header,\n * a domain header, or an individual asset entry.\n *\n * The `source` field holds the name of the originating github repo\n * (`CatalogEntry.repository`) — i.e. the **source** in the three-noun model.\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport interface AssetRow {\n type: \"source-header\" | \"header\" | \"asset\";\n source?: string; // source-header: source name; header: parent source name\n domain?: string; // header: domain name\n entry?: CatalogEntry;\n installed?: boolean;\n}\n\n/**\n * One row in the Libraries tab — a user authoring place (`backend: \"local\" | \"git\"`).\n * Sources (github repos registered via `skaile source add`) are represented\n * separately as {@link SourceRow}.\n */\ninterface LibraryRow {\n name: string;\n backend: \"local\" | \"git\";\n ownership: string; // \"owner\" | \"contributor\" | \"reader\"\n assetCount: number;\n isDefault: boolean;\n}\n\n/**\n * One row in the Sources tab — a third-party github repo registered via\n * `skaile source add`. Sources always live under `~/.skaile/sources/` and use\n * the `git` backend; we keep them distinct from libraries in the UI to match\n * the three-noun vocabulary (source / library / store).\n */\ninterface SourceRow {\n name: string;\n path: string;\n ownership: string;\n assetCount: number;\n}\n\ntype Tab = \"assets\" | \"sources\" | \"libraries\" | \"pending\" | \"sync\";\ntype Action = \"add\" | \"remove\" | \"clear\" | \"toggle\";\n\n// ── State ────────────────────────────────────────────────────────────────────\n//\n// All mutable TUI state lives on a single object so it is easy to find and\n// reason about. Functions read/write state.* directly; this avoids the\n// scattered `let` declarations the file accumulated over time.\n//\n// The AssetManager is held separately because it has different lifetime\n// semantics (write-once at startup vs. per-frame mutable state) and avoids\n// a `T | undefined` placeholder on the state object.\n\nlet am: AssetManager;\n\ninterface State {\n tab: Tab;\n cursor: number;\n assetRows: AssetRow[];\n sourceRows: SourceRow[];\n libraryRows: LibraryRow[];\n visibleRows: AssetRow[];\n pendingAdds: Set<string>;\n pendingRemoves: Set<string>;\n collapsedSources: Set<string>;\n collapsedDomains: Set<string>; // keys: \"source:domain\"\n message: string;\n cols: number;\n awaitingExitConfirm: boolean;\n}\n\nconst state: State = {\n tab: \"assets\",\n cursor: 0,\n assetRows: [],\n sourceRows: [],\n libraryRows: [],\n visibleRows: [],\n pendingAdds: new Set(),\n pendingRemoves: new Set(),\n collapsedSources: new Set(),\n collapsedDomains: new Set(),\n message: \"\",\n cols: 80,\n awaitingExitConfirm: false,\n};\n\n// ── Pure helpers (exported for tests) ────────────────────────────────────────\n\n/**\n * Filter the full asset row list to only rows that should be visible given the\n * current collapsed source and domain sets.\n *\n * @param rows - Complete flat list of asset rows.\n * @param collapsedSources - Set of source names whose children are hidden.\n * @param collapsedDomains - Set of `\"source:domain\"` keys whose children are hidden.\n * @returns Filtered array of visible rows.\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function buildVisibleRows(\n rows: AssetRow[],\n collapsedSources: Set<string>,\n collapsedDomains: Set<string>,\n): AssetRow[] {\n return rows.filter((row) => {\n if (row.type === \"source-header\") return true;\n if (row.type === \"header\") return !collapsedSources.has(row.source!);\n const source = row.entry?.repository ?? \"other\";\n const domain = row.entry?.domain ?? \"other\";\n return !collapsedSources.has(source) && !collapsedDomains.has(`${source}:${domain}`);\n });\n}\n\n/**\n * Return `kind:name` refs for all asset rows belonging to a specific source and domain.\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function domainAssetRefs(rows: AssetRow[], source: string, domain: string): string[] {\n return rows\n .filter((r) => isAsset(r) && inDomain(r, source, domain))\n .map((r) => assetRefOf(r)!);\n}\n\n/**\n * Return `kind:name` refs for all asset rows belonging to a specific source.\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function sourceAssetRefs(rows: AssetRow[], source: string): string[] {\n return rows.filter((r) => isAsset(r) && inSource(r, source)).map((r) => assetRefOf(r)!);\n}\n\n// ── Internal row helpers ─────────────────────────────────────────────────────\n\nfunction isAsset(r: AssetRow): boolean {\n return r.type === \"asset\";\n}\n\nfunction inSource(r: AssetRow, source: string): boolean {\n return (r.entry?.repository ?? \"other\") === source;\n}\n\nfunction inDomain(r: AssetRow, source: string, domain: string): boolean {\n return inSource(r, source) && (r.entry?.domain ?? \"other\") === domain;\n}\n\nfunction assetRefOf(r: AssetRow): string | null {\n if (!isAsset(r) || !r.entry) return null;\n return `${r.entry.kind}:${r.entry.name}`;\n}\n\nfunction findAssetRow(ref: string): AssetRow | undefined {\n return state.assetRows.find((r) => isAsset(r) && assetRefOf(r) === ref);\n}\n\n// ── Selection state machine ──────────────────────────────────────────────────\n//\n// Every (asset, action) interaction reduces to setSelection. Bulk operations\n// from headers map over the children with bulkSelection.\n//\n// Action semantics:\n// \"add\" — pressing + intent: cancel any pending remove, and queue an add\n// if the asset is not yet installed\n// \"remove\" — pressing - intent: cancel any pending add, and queue a remove\n// if the asset is currently installed\n// \"clear\" — clear any pending state for this ref\n// \"toggle\" — context-aware: if any pending → clear, else add or remove\n// based on whether the asset is currently installed\n//\n// \"add\" and \"remove\" always cancel the opposite-pending state first, so the\n// user can press +/- to undo a queued opposite action. The early return on\n// already-installed (for add) or not-yet-installed (for remove) is checked AFTER\n// that cleanup, which keeps installed assets from ever ending up in pendingAdds\n// (and vice-versa).\n\nfunction setSelection(ref: string, action: Action): void {\n const row = findAssetRow(ref);\n if (!row) return;\n\n if (action === \"clear\") {\n state.pendingAdds.delete(ref);\n state.pendingRemoves.delete(ref);\n return;\n }\n\n let resolved: \"add\" | \"remove\";\n if (action === \"toggle\") {\n if (state.pendingAdds.has(ref) || state.pendingRemoves.has(ref)) {\n state.pendingAdds.delete(ref);\n state.pendingRemoves.delete(ref);\n return;\n }\n resolved = row.installed ? \"remove\" : \"add\";\n } else {\n resolved = action;\n }\n\n if (resolved === \"add\") {\n state.pendingRemoves.delete(ref); // pressing + always cancels a pending remove\n if (row.installed) return; // already installed → nothing to queue\n state.pendingAdds.add(ref);\n } else {\n state.pendingAdds.delete(ref); // pressing - always cancels a pending add\n if (!row.installed) return; // not installed → nothing to queue\n state.pendingRemoves.add(ref);\n }\n}\n\nfunction bulkSelection(refs: string[], action: Action): void {\n for (const ref of refs) setSelection(ref, action);\n}\n\n/** Apply a header-targeted action; returns true if `row` is a header type. */\nfunction actOnHeader(row: AssetRow, action: Action): boolean {\n if (row.type === \"source-header\") {\n bulkSelection(sourceAssetRefs(state.assetRows, row.source!), action);\n return true;\n }\n if (row.type === \"header\") {\n bulkSelection(domainAssetRefs(state.assetRows, row.source!, row.domain!), action);\n return true;\n }\n return false;\n}\n\n// ── Data loading ─────────────────────────────────────────────────────────────\n\nasync function loadAssets(): Promise<void> {\n const { gatherAssetFeeds } = await import(\"../asset-feeds.ts\");\n const { entries, notes } = await gatherAssetFeeds(am, am.projectDir);\n if (notes.length > 0) {\n state.message = notes.map((n) => `[${n.feed}] ${n.message}`).join(\" • \");\n }\n const installed = new Set(am.listDeployed().map((e) => `${e.kind}:${e.name}`));\n\n // Group by source (CatalogEntry.repository), then domain\n const bySource = new Map<string, Map<string, CatalogEntry[]>>();\n for (const e of entries) {\n const source = e.repository ?? \"other\";\n const domain = e.domain ?? \"other\";\n if (!bySource.has(source)) bySource.set(source, new Map());\n const domainMap = bySource.get(source)!;\n if (!domainMap.has(domain)) domainMap.set(domain, []);\n domainMap.get(domain)!.push(e);\n }\n\n const rows: AssetRow[] = [];\n for (const [source, domainMap] of [...bySource.entries()].sort((a, b) =>\n a[0].localeCompare(b[0]),\n )) {\n rows.push({ type: \"source-header\", source });\n for (const [domain, items] of [...domainMap.entries()].sort((a, b) =>\n a[0].localeCompare(b[0]),\n )) {\n rows.push({ type: \"header\", source, domain });\n items.sort((a, b) =>\n a.kind !== b.kind ? a.kind.localeCompare(b.kind) : a.name.localeCompare(b.name),\n );\n for (const entry of items) {\n const ref = `${entry.kind}:${entry.name}`;\n rows.push({ type: \"asset\", entry, installed: installed.has(ref) });\n }\n }\n }\n state.assetRows = rows;\n\n // Reconcile collapsed sets with the new rows.\n // Source headers default open (not added); domain headers default collapsed.\n const newSources = new Set(rows.filter((r) => r.type === \"source-header\").map((r) => r.source!));\n for (const s of state.collapsedSources) {\n if (!newSources.has(s)) state.collapsedSources.delete(s);\n }\n\n const newDomainKeys = new Set(\n rows.filter((r) => r.type === \"header\").map((r) => `${r.source!}:${r.domain!}`),\n );\n for (const d of state.collapsedDomains) {\n if (!newDomainKeys.has(d)) state.collapsedDomains.delete(d);\n }\n for (const d of newDomainKeys) state.collapsedDomains.add(d);\n\n rebuildVisible();\n}\n\n/**\n * Minimal scaffold for the Sources and Libraries tabs: fetch registered\n * libraries via LibraryManager, then split them into sources (github clones\n * under `~/.skaile/sources/`) and authoring libraries. Rich rendering is\n * deferred to AF-LIB-TUI-RICH.\n */\nasync function loadSourcesAndLibraries(): Promise<void> {\n try {\n const [{ openLibraryManager }, { skaileHomeDir }] = await Promise.all([\n import(\"../open-library.ts\"),\n import(\"@skaile/workspaces/library\"),\n ]);\n const { manager, library, close } = await openLibraryManager();\n try {\n const sourcesDir = path.join(skaileHomeDir(), \"sources\");\n const isSourceRow = (l: { path: string }) => l.path.startsWith(sourcesDir);\n\n const libs = await manager.listLibraries();\n const defs = await library.listAssetDefs();\n const counts = new Map<string, number>();\n for (const d of defs) {\n const id = d.libraryId ?? \"\";\n counts.set(id, (counts.get(id) ?? 0) + 1);\n }\n\n state.sourceRows = libs.filter(isSourceRow).map((l) => ({\n name: l.name,\n path: l.path,\n ownership: l.ownership,\n assetCount: counts.get(l.id) ?? 0,\n }));\n\n state.libraryRows = libs\n .filter((l) => !isSourceRow(l))\n .map((l) => ({\n name: l.name,\n backend: l.backend as \"local\" | \"git\",\n ownership: l.ownership,\n assetCount: counts.get(l.id) ?? 0,\n isDefault: l.isDefault,\n }));\n } finally {\n close();\n }\n } catch {\n // No DB yet / open failed — leave the lists empty; tabs show emptyMsg.\n state.sourceRows = [];\n state.libraryRows = [];\n }\n}\n\nfunction rebuildVisible(): void {\n state.visibleRows = buildVisibleRows(\n state.assetRows,\n state.collapsedSources,\n state.collapsedDomains,\n );\n clampCursor();\n}\n\n// ── Cursor / tab ─────────────────────────────────────────────────────────────\n\nfunction clampCursor(): void {\n state.cursor = Math.min(state.cursor, Math.max(0, maxCursor()));\n}\n\nfunction maxCursor(): number {\n return TABS[state.tab].rowCount() - 1;\n}\n\nfunction moveCursor(delta: number): void {\n state.cursor = Math.max(0, Math.min(maxCursor(), state.cursor + delta));\n}\n\nfunction nextTab(): void {\n const order: Tab[] = [\"assets\", \"sources\", \"libraries\", \"pending\", \"sync\"];\n state.tab = order[(order.indexOf(state.tab) + 1) % order.length];\n state.cursor = 0;\n}\n\n// ── Tab specs ────────────────────────────────────────────────────────────────\n//\n// Per-tab metadata used by render(), renderTabs(), maxCursor() and the footer\n// hints. Adding a new tab is a single entry here plus a row type.\n\ninterface TabSpec {\n label: string;\n rowCount: () => number;\n selectableCount: () => number; // shown next to the tab label\n emptyMsg?: string;\n renderRow: (i: number, selected: boolean) => string;\n footer: string;\n}\n\nconst TABS: Record<Tab, TabSpec> = {\n assets: {\n label: \"Assets\",\n rowCount: () => state.visibleRows.length,\n selectableCount: () => state.assetRows.filter(isAsset).length,\n renderRow: (i, sel) => renderAssetRow(state.visibleRows[i], sel),\n footer:\n \" ↑↓/jk navigate ←/→ collapse/expand [space/+/-] select [a/↵] apply [i] info Tab switch [q/esc] quit\",\n },\n sources: {\n label: \"Sources\",\n rowCount: () => state.sourceRows.length,\n selectableCount: () => state.sourceRows.length,\n emptyMsg:\n \" No sources registered. Run `skaile source add <git-url>` from the shell to track a github repo.\",\n renderRow: (i, sel) => renderSourceRow(state.sourceRows[i], sel),\n footer:\n \" ↑↓ navigate Tab switch q quit (use `skaile source …` from the shell for CRUD)\",\n },\n libraries: {\n label: \"Libraries\",\n rowCount: () => state.libraryRows.length,\n selectableCount: () => state.libraryRows.length,\n emptyMsg:\n \" No libraries registered. Run `skaile library init <name>` from the shell to author your own.\",\n renderRow: (i, sel) => renderLibraryRow(state.libraryRows[i], sel),\n footer:\n \" ↑↓ navigate Tab switch q quit (use `skaile library …` from the shell for CRUD)\",\n },\n pending: {\n label: \"Pending\",\n rowCount: () => 0,\n selectableCount: () => state.pendingAdds.size + state.pendingRemoves.size,\n emptyMsg: \" (no pending changes — implement in follow-up: AF-LIB-TUI-RICH)\",\n renderRow: () => \"\",\n footer: \" Tab switch q quit\",\n },\n sync: {\n label: \"Sync\",\n rowCount: () => 0,\n selectableCount: () => 0,\n emptyMsg:\n \" Press S to sync all sources + libraries (rich rendering deferred to AF-LIB-TUI-RICH).\",\n renderRow: () => \"\",\n footer: \" s sync all Tab switch q quit\",\n },\n};\n\n// ── Terminal helpers ─────────────────────────────────────────────────────────\n\nfunction clearScreen(): void {\n process.stdout.write(\"\\x1b[2J\\x1b[H\");\n}\nfunction hideCursor(): void {\n process.stdout.write(\"\\x1b[?25l\");\n}\nfunction showCursor(): void {\n process.stdout.write(\"\\x1b[?25h\");\n}\n\n// ── Rendering ────────────────────────────────────────────────────────────────\n\nfunction renderTabs(): string {\n return (Object.entries(TABS) as [Tab, TabSpec][])\n .map(([id, spec]) => {\n const text = `${spec.label} (${spec.selectableCount()})`;\n return id === state.tab ? pc.bgCyan(pc.black(` ${text} `)) : pc.dim(` ${text} `);\n })\n .join(pc.dim(\"│\"));\n}\n\n/** Pending +/- counts for the subset of asset rows matched by `match`. */\nfunction pendingCountsFor(match: (r: AssetRow) => boolean): [number, number] {\n let add = 0;\n let remove = 0;\n for (const ref of state.pendingAdds) {\n const r = findAssetRow(ref);\n if (r && match(r)) add++;\n }\n for (const ref of state.pendingRemoves) {\n const r = findAssetRow(ref);\n if (r && match(r)) remove++;\n }\n return [add, remove];\n}\n\n/** Selection indicator for a header group — mirrors the per-asset status. */\nfunction groupStatus(refs: string[]): string {\n if (refs.length === 0) return pc.dim(\"· \");\n if (refs.some((r) => state.pendingAdds.has(r))) return pc.blue(\"+ \");\n if (refs.some((r) => state.pendingRemoves.has(r))) return pc.red(\"- \");\n const allInstalled = refs.every((r) => findAssetRow(r)?.installed);\n return allInstalled ? pc.green(\"✓ \") : pc.dim(\"· \");\n}\n\nfunction renderHeaderLine(opts: {\n indent: string;\n collapsed: boolean;\n match: (r: AssetRow) => boolean;\n refs: string[];\n label: string;\n selected: boolean;\n}): string {\n const indicator = opts.collapsed ? \"▶\" : \"▼\";\n const total = state.assetRows.filter(opts.match).length;\n const installed = state.assetRows.filter((r) => opts.match(r) && r.installed).length;\n const [add, remove] = pendingCountsFor(opts.match);\n let count = String(installed);\n if (add > 0) count += pc.green(`+${add}`);\n if (remove > 0) count += pc.red(`-${remove}`);\n count += `/${total}`;\n const status = groupStatus(opts.refs);\n const line = `${opts.indent}${status}${indicator} ${opts.label} (${count} assets)`;\n return opts.selected ? pc.bgWhite(pc.black(`${line} `.padEnd(state.cols))) : line;\n}\n\nfunction renderAssetRow(row: AssetRow, selected: boolean): string {\n if (row.type === \"source-header\") {\n return renderHeaderLine({\n indent: \" \",\n collapsed: state.collapsedSources.has(row.source!),\n match: (r) => isAsset(r) && inSource(r, row.source!),\n refs: sourceAssetRefs(state.assetRows, row.source!),\n label: pc.bold(pc.cyan(row.source!)),\n selected,\n });\n }\n\n if (row.type === \"header\") {\n return renderHeaderLine({\n indent: \" \",\n collapsed: state.collapsedDomains.has(`${row.source!}:${row.domain!}`),\n match: (r) => isAsset(r) && inDomain(r, row.source!, row.domain!),\n refs: domainAssetRefs(state.assetRows, row.source!, row.domain!),\n label: pc.bold(row.domain!),\n selected,\n });\n }\n\n const e = row.entry!;\n const ref = assetRefOf(row)!;\n let status: string;\n if (state.pendingAdds.has(ref)) status = pc.blue(\"+ \");\n else if (state.pendingRemoves.has(ref)) status = pc.red(\"- \");\n else if (row.installed) status = pc.green(\"✓ \");\n else status = pc.dim(\"· \");\n\n const kind = kindColorPad(e.kind, 8);\n const name = e.name.padEnd(30);\n const desc = e.description?.slice(0, state.cols - 52) ?? \"\";\n const line = ` ${status} ${kind} ${name} ${pc.dim(desc)}`;\n return selected ? pc.inverse(line.padEnd(state.cols)) : line;\n}\n\nfunction renderSourceRow(row: SourceRow, selected: boolean): string {\n const line = ` ${S.cmd(row.name.padEnd(20))} ${pc.dim(row.ownership.padEnd(12))} ${pc.dim(`${row.assetCount} assets`)} ${pc.dim(row.path)}`;\n return selected ? pc.inverse(line.padEnd(state.cols)) : line;\n}\n\nfunction renderLibraryRow(row: LibraryRow, selected: boolean): string {\n const mark = row.isDefault ? pc.green(\"▸\") : \" \";\n const line = `${mark} ${S.cmd(row.name.padEnd(16))} ${pc.dim(row.backend.padEnd(7))} ${pc.dim(row.ownership.padEnd(12))} ${pc.dim(`${row.assetCount} assets`)}`;\n return selected ? pc.inverse(line.padEnd(state.cols)) : line;\n}\n\nfunction render(): void {\n clearScreen();\n state.cols = process.stdout.columns || 80;\n\n // Reserve rows for header (3) + footer (2) + optional pending summary + optional message.\n const pendingLines =\n state.pendingAdds.size > 0 || state.pendingRemoves.size > 0\n ? 1 + (state.pendingAdds.size > 0 ? 1 : 0) + (state.pendingRemoves.size > 0 ? 1 : 0)\n : 0;\n const msgLines = state.message ? 2 : 0;\n const overhead = 5 + pendingLines + msgLines;\n const maxRows = Math.max(5, (process.stdout.rows || 30) - overhead);\n\n // Header\n console.log();\n console.log(` ${pc.bold(\"skaile manage\")} ${renderTabs()}`);\n console.log(` ${S.rule(state.cols - 4)}`);\n\n // Body\n const spec = TABS[state.tab];\n const total = spec.rowCount();\n if (total === 0 && spec.emptyMsg) {\n console.log(pc.dim(spec.emptyMsg));\n } else {\n const start = Math.max(0, state.cursor - maxRows + 3);\n const end = Math.min(total, start + maxRows);\n for (let i = start; i < end; i++) {\n console.log(spec.renderRow(i, i === state.cursor));\n }\n }\n\n // Pending summary\n if (state.pendingAdds.size > 0 || state.pendingRemoves.size > 0) {\n console.log();\n if (state.pendingAdds.size > 0)\n console.log(` ${pc.blue(`+ ${state.pendingAdds.size} to add`)}`);\n if (state.pendingRemoves.size > 0)\n console.log(` ${pc.red(`- ${state.pendingRemoves.size} to remove`)}`);\n }\n\n // Message (one-shot)\n if (state.message) {\n console.log();\n console.log(` ${state.message}`);\n state.message = \"\";\n }\n\n // Footer\n console.log();\n console.log(pc.dim(spec.footer));\n}\n\nfunction renderExitPrompt(): void {\n clearScreen();\n console.log();\n console.log(` ${pc.yellow(\"!\")} ${pc.bold(\"You have unapplied changes:\")}`);\n if (state.pendingAdds.size > 0)\n console.log(` ${pc.blue(`+ ${state.pendingAdds.size} to add`)}`);\n if (state.pendingRemoves.size > 0)\n console.log(` ${pc.red(`- ${state.pendingRemoves.size} to remove`)}`);\n console.log();\n console.log(\n ` Apply before exiting? ${pc.bold(\"[y]\")} apply ${pc.bold(\"[n]\")} discard ${pc.bold(\"[c/Esc]\")} cancel`,\n );\n}\n\n// ── Actions ──────────────────────────────────────────────────────────────────\n\nasync function applyChanges(): Promise<void> {\n if (state.pendingAdds.size === 0 && state.pendingRemoves.size === 0) {\n state.message = pc.dim(\"Nothing to apply.\");\n return;\n }\n\n state.message = pc.yellow(\"Applying changes...\");\n render();\n\n let added = 0;\n let removed = 0;\n\n for (const ref of state.pendingRemoves) {\n if (am.remove(ref)) removed++;\n }\n for (const ref of state.pendingAdds) {\n try {\n am.add(ref);\n added++;\n } catch (err) {\n state.message = pc.red(`Failed to add ${ref}: ${err}`);\n }\n }\n\n state.pendingAdds.clear();\n state.pendingRemoves.clear();\n await loadAssets();\n\n const parts: string[] = [];\n if (added > 0) parts.push(pc.green(`+${added} added`));\n if (removed > 0) parts.push(pc.red(`-${removed} removed`));\n if (parts.length) state.message = parts.join(\" \");\n}\n\nasync function syncAll(): Promise<void> {\n // Minimal scaffold — rich in-TUI sync is deferred to AF-LIB-TUI-RICH.\n state.message = pc.yellow(\n \"Sync is not yet driven from the manage TUI. Run `skaile source sync` (sources) or `skaile library sync <name>` (git-backed libraries) from the shell.\",\n );\n}\n\nfunction sourceShellHint(action: string): void {\n state.message = pc.yellow(\n `${action} is a shell command. Run \\`skaile source …\\` from the shell.`,\n );\n}\n\nfunction libraryShellHint(action: string): void {\n state.message = pc.yellow(\n `${action} is a shell command. Run \\`skaile library …\\` from the shell.`,\n );\n}\n\nasync function showInfo(): Promise<void> {\n if (state.tab !== \"assets\") return;\n const row = state.visibleRows[state.cursor];\n if (row?.type !== \"asset\") return;\n const e = row.entry!;\n\n clearScreen();\n console.log();\n console.log(` ${kindColor(e.kind)} ${pc.bold(e.name)}`);\n console.log(` ${S.rule(50)}`);\n if (e.version) console.log(` version: ${e.version}`);\n if (e.description) console.log(` description: ${e.description}`);\n if (e.repository) console.log(` source: ${pc.dim(e.repository)}`);\n console.log(` manifest: ${pc.dim(e.source)}`);\n console.log(` installed: ${row.installed ? pc.green(\"yes\") : pc.red(\"no\")}`);\n if (e.requires.length) {\n console.log(` requires:`);\n for (const d of e.requires) console.log(` ${kindColor(d.kind)}:${d.name}`);\n }\n if (e.dependencies.length) {\n console.log(` dependencies:`);\n for (const d of e.dependencies) console.log(` ${d}`);\n }\n console.log();\n console.log(pc.dim(\" Press any key to return...\"));\n\n await new Promise<void>((resolve) => {\n const onData = () => {\n process.stdin.removeListener(\"data\", onData);\n resolve();\n };\n process.stdin.once(\"data\", onData);\n });\n}\n\n// ── Collapse / expand (assets tab) ───────────────────────────────────────────\n\nfunction expandUnderCursor(): void {\n const row = state.visibleRows[state.cursor];\n if (!row) return;\n if (row.type === \"source-header\" && state.collapsedSources.has(row.source!)) {\n state.collapsedSources.delete(row.source!);\n rebuildVisible();\n } else if (row.type === \"header\") {\n const dk = `${row.source!}:${row.domain!}`;\n if (state.collapsedDomains.has(dk)) {\n state.collapsedDomains.delete(dk);\n rebuildVisible();\n }\n }\n}\n\nfunction collapseOrJumpUnderCursor(): void {\n const row = state.visibleRows[state.cursor];\n if (!row) return;\n\n if (row.type === \"source-header\") {\n if (!state.collapsedSources.has(row.source!)) {\n state.collapsedSources.add(row.source!);\n rebuildVisible();\n }\n return;\n }\n\n if (row.type === \"header\") {\n const dk = `${row.source!}:${row.domain!}`;\n if (!state.collapsedDomains.has(dk)) {\n state.collapsedDomains.add(dk);\n rebuildVisible();\n } else {\n // Already collapsed → jump to parent source header\n const idx = findLastIndex(\n state.visibleRows,\n state.cursor,\n (r: AssetRow) => r.type === \"source-header\",\n );\n if (idx >= 0) state.cursor = idx;\n }\n return;\n }\n\n // asset → jump to nearest header above\n const idx = findLastIndex(\n state.visibleRows,\n state.cursor,\n (r: AssetRow) => r.type === \"header\" || r.type === \"source-header\",\n );\n if (idx >= 0) state.cursor = idx;\n}\n\n/**\n * Find the last index in `arr` strictly before `endExclusive` matching `pred`.\n * Replacement for `Array.prototype.findLastIndex`, which requires ES2023 lib.\n */\nfunction findLastIndex<T>(arr: T[], endExclusive: number, pred: (item: T) => boolean): number {\n for (let i = Math.min(endExclusive, arr.length) - 1; i >= 0; i--) {\n if (pred(arr[i] as T)) return i;\n }\n return -1;\n}\n\n// ── Keymap ───────────────────────────────────────────────────────────────────\n//\n// Declarative key bindings. Each binding lists the literal keys it matches, an\n// optional tab predicate, and the handler. Handlers may return \"break\" to exit\n// the main loop or \"skip-render\" to suppress the post-render call (used when\n// the handler renders its own output, e.g. modal prompts).\n\n// `void` is intentional here: handlers may also return Promise<void> from async\n// functions that don't care about the dispatch sentinel. Treating \"no return\"\n// as a third state is the simplest contract.\n// biome-ignore lint/suspicious/noConfusingVoidType: see comment above\ntype KeyResult = \"break\" | \"skip-render\" | void;\n\ninterface KeyBinding {\n keys: string[];\n when?: (tab: Tab) => boolean;\n run: (key: string) => Promise<KeyResult> | KeyResult;\n}\n\nconst TAB_ASSETS = (t: Tab) => t === \"assets\";\nconst TAB_SOURCES = (t: Tab) => t === \"sources\";\nconst TAB_LIBRARIES = (t: Tab) => t === \"libraries\";\n\nconst KEYMAP: KeyBinding[] = [\n // Quit (with pending check) — handled here, not via a modal subroutine, so\n // the main for-await loop owns key delivery (data listeners don't fire while\n // the stream is owned by an async iterator).\n {\n keys: [\"\\x03\", \"q\", \"\\x1b\"],\n run: () => {\n if (state.pendingAdds.size > 0 || state.pendingRemoves.size > 0) {\n state.awaitingExitConfirm = true;\n renderExitPrompt();\n return \"skip-render\";\n }\n return \"break\";\n },\n },\n { keys: [\"\\t\"], run: () => void nextTab() },\n { keys: [\"\\x1b[A\", \"k\"], run: () => void moveCursor(-1) },\n { keys: [\"\\x1b[B\", \"j\"], run: () => void moveCursor(1) },\n\n // Collapse / expand — assets tab only\n { keys: [\"\\x1b[C\"], when: TAB_ASSETS, run: expandUnderCursor },\n { keys: [\"\\x1b[D\"], when: TAB_ASSETS, run: collapseOrJumpUnderCursor },\n\n // + : assets → bulk-add or single-add toggle\n {\n keys: [\"+\"],\n when: TAB_ASSETS,\n run: () => {\n const row = state.visibleRows[state.cursor];\n if (!row) return;\n if (!actOnHeader(row, \"add\")) {\n const ref = assetRefOf(row);\n if (ref) setSelection(ref, state.pendingAdds.has(ref) ? \"clear\" : \"add\");\n }\n },\n },\n\n // Sources tab: +/-/n/r/x map to shell hints in the minimal scaffold.\n { keys: [\"+\", \"n\", \"a\"], when: TAB_SOURCES, run: () => sourceShellHint(\"Adding a source\") },\n { keys: [\"-\", \"r\", \"x\"], when: TAB_SOURCES, run: () => sourceShellHint(\"Removing a source\") },\n { keys: [\"\\r\", \"\\n\"], when: TAB_SOURCES, run: () => sourceShellHint(\"Source actions\") },\n\n // Libraries tab: +/-/n/r/x/d/enter map to shell hints in the minimal scaffold.\n {\n keys: [\"+\", \"n\", \"a\"],\n when: TAB_LIBRARIES,\n run: () => libraryShellHint(\"Adding a library\"),\n },\n {\n keys: [\"-\", \"r\", \"x\"],\n when: TAB_LIBRARIES,\n run: () => libraryShellHint(\"Removing a library\"),\n },\n {\n keys: [\"d\"],\n when: TAB_LIBRARIES,\n run: () => libraryShellHint(\"Setting the default library\"),\n },\n { keys: [\"\\r\", \"\\n\"], when: TAB_LIBRARIES, run: () => libraryShellHint(\"Library actions\") },\n\n // - : assets → bulk-remove or single-remove toggle\n {\n keys: [\"-\"],\n when: TAB_ASSETS,\n run: () => {\n const row = state.visibleRows[state.cursor];\n if (!row) return;\n if (!actOnHeader(row, \"remove\")) {\n const ref = assetRefOf(row);\n if (ref) setSelection(ref, state.pendingRemoves.has(ref) ? \"clear\" : \"remove\");\n }\n },\n },\n\n // Space — auto-toggle (single asset or bulk header)\n {\n keys: [\" \"],\n when: TAB_ASSETS,\n run: () => {\n const row = state.visibleRows[state.cursor];\n if (!row) return;\n if (!actOnHeader(row, \"toggle\")) {\n const ref = assetRefOf(row);\n if (ref) setSelection(ref, \"toggle\");\n }\n },\n },\n\n // s — sync all (any tab) — minimal scaffold delegates to shell.\n { keys: [\"s\"], run: syncAll },\n\n // a : assets → apply\n { keys: [\"a\"], when: TAB_ASSETS, run: applyChanges },\n\n // Enter — apply on assets tab\n { keys: [\"\\r\", \"\\n\"], when: TAB_ASSETS, run: applyChanges },\n\n // Info — assets only\n { keys: [\"i\"], when: TAB_ASSETS, run: showInfo },\n];\n\nasync function dispatchKey(key: string): Promise<KeyResult> {\n for (const b of KEYMAP) {\n if (!b.keys.includes(key)) continue;\n if (b.when && !b.when(state.tab)) continue;\n return await b.run(key);\n }\n // Unrecognised key — no-op, no re-render.\n return \"skip-render\";\n}\n\n/** Handle the response to the exit-confirmation prompt. */\nasync function handleExitConfirm(key: string): Promise<KeyResult> {\n state.awaitingExitConfirm = false;\n\n if (key === \"\\x03\" || key === \"n\" || key === \"N\") return \"break\";\n if (key === \"y\" || key === \"Y\") {\n await applyChanges();\n return \"break\";\n }\n if (key === \"c\" || key === \"C\" || key === \"\\x1b\" || key === \"\\r\" || key === \"\\n\") {\n return; // re-render\n }\n // Unknown key: re-arm, redraw the prompt\n state.awaitingExitConfirm = true;\n renderExitPrompt();\n return \"skip-render\";\n}\n\n// ── Main loop ────────────────────────────────────────────────────────────────\n\nasync function run(projectDir: string): Promise<void> {\n am = new AssetManager({ projectDir });\n\n // The legacy auto-sync-on-open behaviour was tied to the `.skaile/repos/`\n // clone cache and was removed on 2026-05-12. Source sync now flows through\n // the shell-level `skaile source sync` command.\n\n await loadAssets();\n await loadSourcesAndLibraries();\n\n hideCursor();\n process.stdin.setRawMode(true);\n process.stdin.resume();\n\n render();\n\n for await (const chunk of process.stdin) {\n const key = chunk.toString();\n\n const result = state.awaitingExitConfirm\n ? await handleExitConfirm(key)\n : await dispatchKey(key);\n\n if (result === \"break\") break;\n if (result === \"skip-render\") continue;\n render();\n }\n\n showCursor();\n process.stdin.setRawMode(false);\n process.stdin.pause();\n clearScreen();\n}\n\n// ── Command ──────────────────────────────────────────────────────────────────\n\n/**\n * Creates the `skaile manage` command.\n *\n * Opens an interactive terminal TUI (five tabs: Assets, Sources, Libraries,\n * Pending, Sync) for browsing, installing, and removing assets. CRUD for\n * sources and libraries remains in the shell (`skaile source …` /\n * `skaile library …`) — the Sources and Libraries tabs are read-only\n * scaffolds pending AF-LIB-TUI-RICH.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function makeManageCommand(): Command {\n return new Command(\"manage\")\n .description(\"Interactive TUI for managing assets, sources, and libraries\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts) => {\n await run(path.resolve(opts.projectDir));\n });\n}\n","// cli/src/commands/mcp-server.ts\nimport { Command } from \"commander\";\n\n/**\n * Creates the `skaile mcp-server` command.\n *\n * Starts a stdio MCP server exposing skaile workspace tools, built directly\n * on `@modelcontextprotocol/sdk` (no Claude Agent SDK). Registered in\n * `.claude/mcp.json` / `.codex/config.toml` by `skaile plugin install`.\n * The host agent spawns this process and communicates over stdio — it runs\n * on plain Node.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/plugin#make-mcp-server-command\n */\nexport function makeMcpServerCommand(): Command {\n return new Command(\"mcp-server\")\n .description(\"Start skaile workspace MCP server (stdio transport)\")\n .option(\"--project-dir <path>\", \"Project directory (default: cwd)\", process.cwd())\n .action(async (opts: { projectDir: string }) => {\n const path = await import(\"node:path\");\n const projectDir = path.default.resolve(opts.projectDir);\n\n // stdout is the MCP JSON-RPC channel — any log line on it corrupts the\n // protocol. Register a stderr-only LogStore before anything constructs\n // a logger (the WorkspacePlugin constructor does, on the next line).\n const { LogStore, StdoutSink, registerLogStore } = await import(\n \"@skaile/workspaces/core/logging\"\n );\n registerLogStore(\n new LogStore({\n sessionId: \"mcp-server\",\n level: \"info\",\n sinks: [new StdoutSink({ stream: \"stderr\" })],\n }),\n );\n\n const { WorkspacePlugin } = await import(\"@skaile/workspaces/workspace-plugin\");\n const plugin = new WorkspacePlugin({\n projectDir,\n bootOwned: true,\n onLog: (msg) => process.stderr.write(`${msg}\\n`),\n });\n\n await plugin.boot();\n\n // Register signal handlers before connecting the stdio transport.\n const shutdown = async () => {\n await plugin.shutdown();\n };\n process.on(\"SIGINT\", async () => {\n await shutdown();\n process.exit(0);\n });\n process.on(\"SIGTERM\", async () => {\n await shutdown();\n process.exit(0);\n });\n\n // Build the raw @modelcontextprotocol/sdk server and connect stdio.\n // No @anthropic-ai/claude-agent-sdk on this path — runs on Node.\n await plugin.runMcpServerStdio();\n });\n}\n","import { execSync } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, S } from \"../helpers.ts\";\nimport { openLibrary } from \"../open-library.ts\";\nimport { createFullRegistry } from \"../open-registry.ts\";\n\n/**\n * Creates the `skaile npx` command group.\n *\n * Compatibility shim for the `npx skills` syntax. The `npx skills add <url>`\n * subcommand registers a remote repo as a Library Source (cloning to the\n * shared user-level cache when needed), syncs the source, then installs the\n * requested skill in a single step.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#npx\n */\nexport function makeNpxCommand(): Command {\n const npx = new Command(\"npx\").description(\"Compatibility shim for npx skills syntax\");\n\n const skills = npx.command(\"skills\").description(\"Skill installation from external repos\");\n\n skills\n .command(\"add <url>\")\n .description(\"Register a repo as a Library Source and install a skill from it\")\n .requiredOption(\"--skill <name>\", \"Skill name to install from the repo\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--target <agent>\", \"Agent framework\", \"claude-code\")\n .option(\"--global\", \"Deploy globally\")\n .action(async (url: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n\n const spinner = p.spinner();\n\n // 1. Clone to ~/.skaile/clones/<host>/<owner>/<repo> if remote.\n let sourcePath: string;\n const isUrl = /^(https?:|git@|git:)/.test(url);\n if (isUrl) {\n sourcePath = cloneDestination(url);\n spinner.start(`Cloning ${url}`);\n try {\n if (!existsSync(sourcePath)) {\n execSync(`git clone ${url} ${sourcePath}`, { stdio: \"ignore\" });\n }\n spinner.stop(`Cloned to ${path.basename(sourcePath)}`);\n } catch (err) {\n spinner.stop(\"Clone failed\");\n logErr(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n } else {\n sourcePath = path.resolve(url);\n if (!existsSync(sourcePath)) {\n logErr(`Path does not exist: ${sourcePath}`);\n process.exit(1);\n }\n }\n\n // 2. Register as a Library Source and sync.\n const library = await openLibrary();\n try {\n const existing = await library.listSources();\n let source = existing.find((s) => s.path === sourcePath);\n if (!source) {\n source = await library.addSource({\n backend: \"local\",\n name: path.basename(sourcePath),\n path: sourcePath,\n ownership: \"owner\",\n });\n }\n spinner.start(\"Syncing source\");\n const { LocalCatalogSource } = await import(\"@skaile/workspaces/library\");\n const registry = createFullRegistry();\n const catalogSource = new LocalCatalogSource(library, source.id, sourcePath, registry);\n const result = await catalogSource.sync();\n await library.syncSource(source.id);\n spinner.stop(`Indexed ${result.assetsUpdated} assets`);\n } finally {\n library.close();\n }\n\n // 3. Install the requested skill via AssetManager.\n const skillRef = `skill:${opts.skill}`;\n const am = new AssetManager({ projectDir, global: opts.global, driverTarget: opts.target });\n spinner.start(`Installing ${skillRef}`);\n try {\n const added = am.add(skillRef);\n spinner.stop(\"Done\");\n if (added.length === 0) {\n logInfo(`${opts.skill} already deployed or not found in source.`);\n } else {\n for (const a of added) logOk(a);\n }\n logInfo(\n `Source registered at ${S.dim(sourcePath)} — manage via ${S.cmd(\"skaile source\")}.`,\n );\n } catch (err) {\n spinner.stop(\"Failed\");\n logErr((err as Error).message);\n process.exit(1);\n }\n });\n\n npx.action(() => npx.help());\n skills.action(() => skills.help());\n\n return npx;\n}\n\nfunction cloneDestination(url: string): string {\n const cleaned = url.replace(/\\.git$/, \"\");\n const root = path.join(homedir(), \".skaile\", \"clones\");\n\n let host = \"unknown\";\n let pathPart = cleaned;\n const httpMatch = cleaned.match(/^https?:\\/\\/([^/]+)\\/(.+)$/);\n const gitMatch = cleaned.match(/^git@([^:]+):(.+)$/);\n const gitProtoMatch = cleaned.match(/^git:\\/\\/([^/]+)\\/(.+)$/);\n\n if (httpMatch) {\n host = httpMatch[1]!;\n pathPart = httpMatch[2]!;\n } else if (gitMatch) {\n host = gitMatch[1]!;\n pathPart = gitMatch[2]!;\n } else if (gitProtoMatch) {\n host = gitProtoMatch[1]!;\n pathPart = gitProtoMatch[2]!;\n }\n\n return path.join(root, host, pathPart);\n}\n","import path from \"node:path\";\nimport { SUPPORTED_DRIVER_TARGETS } from \"@skaile/workspaces/core\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command, Option } from \"commander\";\nimport pc from \"picocolors\";\nimport { kindColorPad, logInfo, logWarn, S } from \"../helpers.ts\";\n\n/**\n * Creates the `skaile outdated` command.\n *\n * Checks which deployed assets are behind the upstream repo commit and prints\n * a table of outdated entries with their commit-behind count.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#outdated\n */\nexport function makeOutdatedCommand(): Command {\n return new Command(\"outdated\")\n .description(\"Check for assets behind their repo\")\n .argument(\"[name]\", \"Check a specific asset (kind:name)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .addOption(\n new Option(\"--target <agent>\", \"Driver target\")\n .default(\"claude-code\")\n .choices(SUPPORTED_DRIVER_TARGETS),\n )\n .action((name: string | undefined, opts) => {\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n driverTarget: opts.target,\n });\n const entries = am.outdated();\n if (entries.length === 0) {\n logInfo(\"All assets are up to date.\");\n return;\n }\n\n const filtered = name\n ? entries.filter((e) => `${e.kind}:${e.name}` === name || e.name === name)\n : entries;\n if (filtered.length === 0) {\n logInfo(`${name} is up to date.`);\n return;\n }\n\n const nameW = Math.max(4, ...filtered.map((e) => e.name.length));\n console.log();\n console.log(S.heading(\" Outdated Assets\"));\n console.log(` ${S.rule(nameW + 40)}`);\n for (const e of filtered) {\n console.log(\n ` ${kindColorPad(e.kind)} ${e.name.padEnd(nameW)} ${S.dim(e.repository)} ${pc.yellow(`${e.behind} commit(s) behind`)}`,\n );\n }\n console.log();\n logWarn(`Run ${S.cmd(\"skaile update\")} to re-deploy.`);\n });\n}\n","import path from \"node:path\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport { logErr, logOk, S } from \"../helpers.ts\";\n\n/**\n * Creates the `skaile patch` command group.\n *\n * Manages the local patch workflow for improving deployed assets without\n * modifying the upstream repo directly. Subcommands: `extract` (copy asset\n * to `.skaile/patches/`), `commit` (generate a `.patch` file from edits),\n * `submit` (apply patch to the repo clone), `remove` (clean up after merge).\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/patch#make-patch-command\n */\nexport function makePatchCommand(): Command {\n const cmd = new Command(\"patch\").description(\"Patch workflow for skill improvement\");\n\n cmd\n .command(\"extract <ref>\")\n .alias(\"start\")\n .description(\"Extract asset for local editing\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((ref: string, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n try {\n const dest = am.patch(ref);\n logOk(`Extracted to ${S.dim(dest)}`);\n console.log(` Edit the files, then run ${S.cmd(`skaile patch commit ${ref}`)}`);\n } catch (err) {\n logErr(String(err));\n process.exit(1);\n }\n });\n\n cmd\n .command(\"commit <ref>\")\n .description(\"Generate .patch file from edits\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((ref: string, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n try {\n const patchFile = am.patchCommit(ref);\n logOk(`Patch saved to ${S.dim(patchFile)}`);\n console.log(` Add to skaile.yaml patches section, then run ${S.cmd(\"skaile install\")}`);\n } catch (err) {\n logErr(String(err));\n process.exit(1);\n }\n });\n\n cmd\n .command(\"submit <ref>\")\n .description(\"Apply patch to repo clone and prepare for PR\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((ref: string, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n try {\n am.patchSubmit(ref);\n logOk(\"Patch applied to repo clone and committed.\");\n console.log(\n ` Push upstream from the source repo directly — the legacy ${S.cmd(\"skaile repo contrib push\")} command was removed on 2026-05-12.`,\n );\n } catch (err) {\n logErr(String(err));\n process.exit(1);\n }\n });\n\n cmd\n .command(\"remove <ref>\")\n .description(\"Remove local patch after upstream merge\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((ref: string, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n am.patchRemove(ref);\n logOk(`Patch removed for ${ref}`);\n });\n\n cmd.action(() => cmd.help());\n return cmd;\n}\n","import { existsSync } from \"node:fs\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { buildClaudePluginFiles } from \"@skaile/workspaces/workspace-plugin\";\nimport type { BackendStatus, InstallResult, ToggleResult, UninstallResult } from \"./types.ts\";\n\nconst SKAILE_MCP_NAME = \"skaile-workspace\";\n\nconst MCP_SERVER_ENTRY = {\n command: \"skaile\",\n args: [\"mcp-server\"],\n env: {} as Record<string, string>,\n};\n\ninterface ClaudeSettings {\n plugins?: string[];\n enabledPlugins?: string[];\n disabledPlugins?: string[];\n disabledMcpjsonServers?: string[];\n [k: string]: unknown;\n}\n\ninterface ClaudeMcpFile {\n mcpServers?: Record<string, unknown>;\n [k: string]: unknown;\n}\n\n/** Absolute path to the generated Claude Code plugin directory. */\nfunction pluginDir(projectDir: string): string {\n return path.join(projectDir, \".claude\", \"plugins\", \"skaile\");\n}\n\nasync function readJsonStrict<T>(p: string): Promise<T | null> {\n let raw: string;\n try {\n raw = await fs.readFile(p, \"utf-8\");\n } catch {\n return null;\n }\n try {\n return JSON.parse(raw) as T;\n } catch (e: unknown) {\n throw new Error(\n `cannot parse ${p}: ${e instanceof Error ? e.message : String(e)}; please fix or remove`,\n );\n }\n}\n\nasync function writeJson(p: string, value: unknown): Promise<void> {\n await fs.mkdir(path.dirname(p), { recursive: true });\n await fs.writeFile(p, `${JSON.stringify(value, null, 2)}\\n`);\n}\n\nasync function copyDir(src: string, dest: string): Promise<void> {\n await fs.mkdir(dest, { recursive: true });\n const entries = await fs.readdir(src, { withFileTypes: true });\n for (const entry of entries) {\n const srcPath = path.join(src, entry.name);\n const destPath = path.join(dest, entry.name);\n if (entry.isDirectory()) await copyDir(srcPath, destPath);\n else await fs.copyFile(srcPath, destPath);\n }\n}\n\n// ── install ────────────────────────────────────────────────────────────────\n\n/**\n * Install the skaile integration for Claude Code.\n *\n * Two modes:\n * - **mcp** (default) — write `.claude/mcp.json` pointing at `skaile mcp-server`.\n * - **full** (`opts.full`) — generate the `.claude/plugins/skaile/` directory\n * (MCP + lifecycle hooks) and register it in `.claude/settings.json`.\n */\nexport async function install(\n projectDir: string,\n opts?: { full?: boolean },\n): Promise<InstallResult> {\n return opts?.full ? installFullPlugin(projectDir) : installMcp(projectDir);\n}\n\nasync function installMcp(projectDir: string): Promise<InstallResult> {\n const mcpPath = path.join(projectDir, \".claude\", \"mcp.json\");\n const existing = (await readJsonStrict<ClaudeMcpFile>(mcpPath)) ?? {};\n const mcpServers = { ...(existing.mcpServers ?? {}) };\n const previous = mcpServers[SKAILE_MCP_NAME];\n const matches = previous && JSON.stringify(previous) === JSON.stringify(MCP_SERVER_ENTRY);\n let warning: string | undefined;\n if (previous && !matches) {\n warning = `overwrote existing ${SKAILE_MCP_NAME} entry in ${path.relative(projectDir, mcpPath)}`;\n }\n mcpServers[SKAILE_MCP_NAME] = MCP_SERVER_ENTRY;\n await writeJson(mcpPath, { ...existing, mcpServers });\n return { changed: !matches, method: \"mcp\", warning };\n}\n\nasync function installFullPlugin(projectDir: string): Promise<InstallResult> {\n const dir = pluginDir(projectDir);\n\n // Generate the plugin directory from the in-memory file map.\n for (const [rel, content] of Object.entries(buildClaudePluginFiles())) {\n const dest = path.join(dir, rel);\n await fs.mkdir(path.dirname(dest), { recursive: true });\n await fs.writeFile(dest, content);\n }\n\n // Populate skills/ from the project's .skaile/skills/.\n const projectSkillsDir = path.join(projectDir, \".skaile\", \"skills\");\n if (existsSync(projectSkillsDir)) {\n await copyDir(projectSkillsDir, path.join(dir, \"skills\"));\n }\n\n // Register the generated dir in .claude/settings.json#plugins[].\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const settings = (await readJsonStrict<ClaudeSettings>(settingsPath)) ?? {};\n const plugins = settings.plugins ?? [];\n if (!plugins.includes(dir)) plugins.push(dir);\n await writeJson(settingsPath, { ...settings, plugins });\n\n return { changed: true, method: \"plugin\" };\n}\n\n// ── uninstall ──────────────────────────────────────────────────────────────\n\nexport async function uninstall(projectDir: string): Promise<UninstallResult> {\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const mcpPath = path.join(projectDir, \".claude\", \"mcp.json\");\n const dir = pluginDir(projectDir);\n\n let changed = false;\n\n // Remove the generated plugin dir from plugins[] if registered.\n const settings = await readJsonStrict<ClaudeSettings>(settingsPath);\n if (settings && Array.isArray(settings.plugins)) {\n const next = settings.plugins.filter((p) => p !== dir);\n if (next.length !== settings.plugins.length) {\n changed = true;\n const updated: ClaudeSettings = { ...settings, plugins: next };\n if (next.length === 0) delete updated.plugins;\n await writeJson(settingsPath, updated);\n }\n }\n\n // Delete the generated plugin directory.\n if (existsSync(dir)) {\n await fs.rm(dir, { recursive: true, force: true });\n changed = true;\n }\n\n // Remove from .claude/mcp.json if present.\n const mcp = await readJsonStrict<ClaudeMcpFile>(mcpPath);\n if (mcp?.mcpServers && SKAILE_MCP_NAME in mcp.mcpServers) {\n changed = true;\n const { [SKAILE_MCP_NAME]: _removed, ...rest } = mcp.mcpServers;\n const updated: ClaudeMcpFile = { ...mcp, mcpServers: rest };\n if (Object.keys(rest).length === 0) delete updated.mcpServers;\n if (Object.keys(updated).length === 0) {\n await fs.unlink(mcpPath);\n } else {\n await writeJson(mcpPath, updated);\n }\n }\n\n return { changed };\n}\n\n// ── enable / disable ───────────────────────────────────────────────────────\n\nasync function detectInstall(\n projectDir: string,\n): Promise<{ method: \"plugin\" | \"mcp\"; pluginPath?: string } | null> {\n const dir = pluginDir(projectDir);\n const settings = await readJsonStrict<ClaudeSettings>(\n path.join(projectDir, \".claude\", \"settings.json\"),\n );\n if (\n existsSync(path.join(dir, \".claude-plugin\", \"plugin.json\")) &&\n settings?.plugins?.includes(dir)\n ) {\n return { method: \"plugin\", pluginPath: dir };\n }\n\n const mcp = await readJsonStrict<ClaudeMcpFile>(path.join(projectDir, \".claude\", \"mcp.json\"));\n if (mcp?.mcpServers && SKAILE_MCP_NAME in mcp.mcpServers) {\n return { method: \"mcp\" };\n }\n return null;\n}\n\nexport async function enable(projectDir: string): Promise<ToggleResult> {\n const detected = await detectInstall(projectDir);\n if (!detected) throw new Error(\"plugin not installed for claude-code\");\n\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const settings = (await readJsonStrict<ClaudeSettings>(settingsPath)) ?? {};\n\n if (detected.method === \"plugin\") {\n const disabled = settings.disabledPlugins ?? [];\n const next = disabled.filter((p) => p !== detected.pluginPath);\n if (next.length === disabled.length) return { changed: false };\n const updated: ClaudeSettings = { ...settings, disabledPlugins: next };\n if (next.length === 0) delete updated.disabledPlugins;\n await writeJson(settingsPath, updated);\n return { changed: true };\n }\n\n const disabled = settings.disabledMcpjsonServers ?? [];\n const next = disabled.filter((n) => n !== SKAILE_MCP_NAME);\n if (next.length === disabled.length) return { changed: false };\n const updated: ClaudeSettings = { ...settings, disabledMcpjsonServers: next };\n if (next.length === 0) delete updated.disabledMcpjsonServers;\n await writeJson(settingsPath, updated);\n return { changed: true };\n}\n\nexport async function disable(projectDir: string): Promise<ToggleResult> {\n const detected = await detectInstall(projectDir);\n if (!detected) throw new Error(\"plugin not installed for claude-code\");\n\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const settings = (await readJsonStrict<ClaudeSettings>(settingsPath)) ?? {};\n\n if (detected.method === \"plugin\") {\n const list = settings.disabledPlugins ?? [];\n if (list.includes(detected.pluginPath as string)) return { changed: false };\n await writeJson(settingsPath, {\n ...settings,\n disabledPlugins: [...list, detected.pluginPath as string],\n });\n return { changed: true };\n }\n\n const list = settings.disabledMcpjsonServers ?? [];\n if (list.includes(SKAILE_MCP_NAME)) return { changed: false };\n await writeJson(settingsPath, {\n ...settings,\n disabledMcpjsonServers: [...list, SKAILE_MCP_NAME],\n });\n return { changed: true };\n}\n\n// ── status ─────────────────────────────────────────────────────────────────\n\nexport async function status(projectDir: string): Promise<BackendStatus> {\n const settingsPath = path.join(projectDir, \".claude\", \"settings.json\");\n const mcpPath = path.join(projectDir, \".claude\", \"mcp.json\");\n const dir = pluginDir(projectDir);\n const settings = await readJsonStrict<ClaudeSettings>(settingsPath);\n const mcp = await readJsonStrict<ClaudeMcpFile>(mcpPath);\n\n const pluginInstalled = !!(\n existsSync(path.join(dir, \".claude-plugin\", \"plugin.json\")) && settings?.plugins?.includes(dir)\n );\n const mcpInstalled = !!(mcp?.mcpServers && SKAILE_MCP_NAME in mcp.mcpServers);\n\n if (!pluginInstalled && !mcpInstalled) {\n return {\n backend: \"claude-code\",\n installed: \"no\",\n enabled: \"n/a\",\n method: \"—\",\n location: \"—\",\n };\n }\n\n if (pluginInstalled) {\n const disabled = settings?.disabledPlugins?.includes(dir) ?? false;\n return {\n backend: \"claude-code\",\n installed: \"yes\",\n enabled: disabled ? \"no\" : \"yes\",\n method: \"plugin\",\n location: path.relative(projectDir, dir),\n };\n }\n\n const disabled = settings?.disabledMcpjsonServers?.includes(SKAILE_MCP_NAME) ?? false;\n return {\n backend: \"claude-code\",\n installed: \"yes\",\n enabled: disabled ? \"no\" : \"yes\",\n method: \"mcp\",\n location: path.relative(projectDir, mcpPath),\n };\n}\n","import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { parse as parseToml, stringify as stringifyToml } from \"smol-toml\";\nimport type { BackendStatus, InstallResult, UninstallResult } from \"./types.ts\";\n\nconst SKAILE_MCP_NAME = \"skaile-workspace\";\n\ninterface CodexMcpEntry {\n command: string;\n args: string[];\n env: Record<string, string>;\n}\n\ninterface CodexConfig {\n mcp_servers?: Record<string, CodexMcpEntry>;\n [k: string]: unknown;\n}\n\nfunction buildEntry(projectDir: string): CodexMcpEntry {\n return {\n command: \"skaile\",\n args: [\"mcp-server\"],\n env: { SKAILE_PROJECT_DIR: projectDir },\n };\n}\n\nasync function readConfig(p: string): Promise<CodexConfig | null> {\n let raw: string;\n try {\n raw = await fs.readFile(p, \"utf-8\");\n } catch {\n return null;\n }\n try {\n return parseToml(raw) as CodexConfig;\n } catch (e: unknown) {\n throw new Error(\n `cannot parse ${p}: ${e instanceof Error ? e.message : String(e)}; please fix or remove`,\n );\n }\n}\n\nasync function writeConfig(p: string, value: CodexConfig): Promise<void> {\n await fs.mkdir(path.dirname(p), { recursive: true });\n // smol-toml's stringify rejects undefined keys; drop empty containers.\n const cleaned: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n if (v === undefined) continue;\n cleaned[k] = v;\n }\n await fs.writeFile(p, stringifyToml(cleaned));\n}\n\nfunction configPath(projectDir: string): string {\n return path.join(projectDir, \".codex\", \"config.toml\");\n}\n\nexport async function install(projectDir: string): Promise<InstallResult> {\n const p = configPath(projectDir);\n const cfg = (await readConfig(p)) ?? {};\n const next = buildEntry(projectDir);\n\n const servers = { ...(cfg.mcp_servers ?? {}) };\n const previous = servers[SKAILE_MCP_NAME];\n const matches = previous && JSON.stringify(previous) === JSON.stringify(next);\n let warning: string | undefined;\n if (previous && !matches) {\n warning = `overwrote existing ${SKAILE_MCP_NAME} entry in ${path.relative(projectDir, p)}`;\n }\n if (matches) return { changed: false, method: \"toml\" };\n\n servers[SKAILE_MCP_NAME] = next;\n await writeConfig(p, { ...cfg, mcp_servers: servers });\n return { changed: true, method: \"toml\", warning };\n}\n\nexport async function uninstall(projectDir: string): Promise<UninstallResult> {\n const p = configPath(projectDir);\n const cfg = await readConfig(p);\n if (!cfg?.mcp_servers || !(SKAILE_MCP_NAME in cfg.mcp_servers)) {\n return { changed: false };\n }\n const { [SKAILE_MCP_NAME]: _removed, ...rest } = cfg.mcp_servers;\n const updated: CodexConfig = { ...cfg, mcp_servers: rest };\n if (Object.keys(rest).length === 0) delete updated.mcp_servers;\n\n if (Object.keys(updated).length === 0) {\n await fs.unlink(p);\n } else {\n await writeConfig(p, updated);\n }\n return { changed: true };\n}\n\nexport async function status(projectDir: string): Promise<BackendStatus> {\n const p = configPath(projectDir);\n const cfg = await readConfig(p);\n const installed = !!(cfg?.mcp_servers && SKAILE_MCP_NAME in cfg.mcp_servers);\n\n if (!installed) {\n return {\n backend: \"codex\",\n installed: \"no\",\n enabled: \"n/a\",\n method: \"—\",\n location: \"—\",\n };\n }\n return {\n backend: \"codex\",\n installed: \"yes\",\n enabled: \"n/a\",\n method: \"mcp\",\n location: path.relative(projectDir, p),\n };\n}\n","import { existsSync } from \"node:fs\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { BackendStatus, InstallResult, UninstallResult } from \"./types.ts\";\n\n/**\n * Install the skaile integration for OMP.\n *\n * Always generates `.omp/extensions/skaile.ts` via `buildOmpExtensionSource()`\n * — there is no npm-package path. The only runtime dependency of the\n * generated extension is `@skaile/workspaces`.\n */\nexport async function install(projectDir: string): Promise<InstallResult> {\n const extDir = path.join(projectDir, \".omp\", \"extensions\");\n const extPath = path.join(extDir, \"skaile.ts\");\n await fs.mkdir(extDir, { recursive: true });\n\n const { WorkspacePlugin } = await import(\"@skaile/workspaces/workspace-plugin\");\n const plugin = new WorkspacePlugin({ projectDir });\n const nextSrc = await plugin.buildOmpExtensionSource();\n\n let prevSrc: string | null = null;\n try {\n prevSrc = await fs.readFile(extPath, \"utf-8\");\n } catch {\n /* file doesn't exist yet */\n }\n\n if (prevSrc === nextSrc) return { changed: false, method: \"generated\" };\n await fs.writeFile(extPath, nextSrc);\n return { changed: true, method: \"generated\" };\n}\n\nexport async function uninstall(projectDir: string): Promise<UninstallResult> {\n const extPath = path.join(projectDir, \".omp\", \"extensions\", \"skaile.ts\");\n try {\n await fs.unlink(extPath);\n return { changed: true };\n } catch {\n return { changed: false };\n }\n}\n\nexport async function status(projectDir: string): Promise<BackendStatus> {\n const extPath = path.join(projectDir, \".omp\", \"extensions\", \"skaile.ts\");\n if (existsSync(extPath)) {\n return {\n backend: \"omp\",\n installed: \"yes\",\n enabled: \"n/a\",\n method: \"extension\",\n location: path.relative(projectDir, extPath),\n };\n }\n return {\n backend: \"omp\",\n installed: \"no\",\n enabled: \"n/a\",\n method: \"—\",\n location: \"—\",\n };\n}\n","// cli/src/commands/plugin.ts\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport * as claudeCode from \"./plugin/claude-code.ts\";\nimport * as codex from \"./plugin/codex.ts\";\nimport * as omp from \"./plugin/omp.ts\";\nimport type { BackendName, BackendStatus } from \"./plugin/types.ts\";\n\nconst ALL_BACKENDS: readonly BackendName[] = [\"claude-code\", \"omp\", \"codex\"];\nconst TOGGLE_SUPPORTED: readonly BackendName[] = [\"claude-code\"];\n\nfunction resolveDriver(driver: string): BackendName[] {\n if (driver === \"all\") return [...ALL_BACKENDS];\n if (driver === \"claude-code\" || driver === \"omp\" || driver === \"codex\") return [driver];\n throw new Error(`unknown driver: ${driver} (expected: claude-code | omp | codex | all)`);\n}\n\ninterface RunOptions {\n driver: string;\n projectDir: string;\n /** Claude Code only — generate the full `.claude/plugins/skaile/` directory. */\n full?: boolean;\n}\n\nasync function runInstall(opts: RunOptions): Promise<number> {\n const projectDir = path.resolve(opts.projectDir);\n const targets = resolveDriver(opts.driver);\n let exitCode = 0;\n\n if (targets.includes(\"claude-code\")) {\n try {\n const r = await claudeCode.install(projectDir, { full: opts.full });\n if (r.warning) logWarn(r.warning);\n if (r.method === \"plugin\") {\n logOk(\n `Generated ${S.cmd(\".claude/plugins/skaile/\")} and registered it in ${S.cmd(\".claude/settings.json\")}`,\n );\n } else if (r.changed) {\n logOk(`Wrote ${S.cmd(\".claude/mcp.json\")} (${SKAILE_MCP_LABEL})`);\n } else {\n logInfo(`claude-code: already installed (mcp)`);\n }\n console.log(` ${S.dim(\"→\")} Restart Claude Code to pick up the change.`);\n } catch (e: unknown) {\n logErr(`claude-code install: ${e instanceof Error ? e.message : String(e)}`);\n exitCode = 1;\n }\n }\n\n if (targets.includes(\"omp\")) {\n try {\n const r = await omp.install(projectDir);\n if (r.changed) {\n logOk(`Wrote ${S.cmd(\".omp/extensions/skaile.ts\")} (${r.method})`);\n } else {\n logInfo(`omp: already installed (${r.method})`);\n }\n console.log(` ${S.dim(\"→\")} OMP auto-discovers extensions on next startup.`);\n } catch (e: unknown) {\n logErr(`omp install: ${e instanceof Error ? e.message : String(e)}`);\n exitCode = 1;\n }\n }\n\n if (targets.includes(\"codex\")) {\n try {\n const r = await codex.install(projectDir);\n if (r.warning) logWarn(r.warning);\n if (r.changed) {\n logOk(`Wrote ${S.cmd(\".codex/config.toml\")} (${SKAILE_MCP_LABEL})`);\n } else {\n logInfo(`codex: already installed`);\n }\n console.log(` ${S.dim(\"→\")} Restart Codex CLI to pick up the change.`);\n } catch (e: unknown) {\n logErr(`codex install: ${e instanceof Error ? e.message : String(e)}`);\n exitCode = 1;\n }\n }\n\n if (exitCode === 0) logOk(\"Plugin installed.\");\n return exitCode;\n}\n\nasync function runUninstall(opts: RunOptions): Promise<number> {\n const projectDir = path.resolve(opts.projectDir);\n const targets = resolveDriver(opts.driver);\n let exitCode = 0;\n\n if (targets.includes(\"claude-code\")) {\n try {\n const r = await claudeCode.uninstall(projectDir);\n if (r.changed) logOk(`Removed skaile entries from ${S.cmd(\".claude/\")}`);\n else logInfo(`claude-code: not installed`);\n } catch (e: unknown) {\n logErr(`claude-code uninstall: ${e instanceof Error ? e.message : String(e)}`);\n exitCode = 1;\n }\n }\n\n if (targets.includes(\"omp\")) {\n try {\n const r = await omp.uninstall(projectDir);\n if (r.changed) logOk(`Removed ${S.cmd(\".omp/extensions/skaile.ts\")}`);\n else logInfo(`omp: not installed`);\n } catch (e: unknown) {\n logErr(`omp uninstall: ${e instanceof Error ? e.message : String(e)}`);\n exitCode = 1;\n }\n }\n\n if (targets.includes(\"codex\")) {\n try {\n const r = await codex.uninstall(projectDir);\n if (r.changed) logOk(`Removed skaile entry from ${S.cmd(\".codex/config.toml\")}`);\n else logInfo(`codex: not installed`);\n } catch (e: unknown) {\n logErr(`codex uninstall: ${e instanceof Error ? e.message : String(e)}`);\n exitCode = 1;\n }\n }\n\n if (exitCode === 0) logOk(\"Plugin uninstalled.\");\n return exitCode;\n}\n\nasync function runToggle(opts: RunOptions, action: \"enable\" | \"disable\"): Promise<number> {\n const projectDir = path.resolve(opts.projectDir);\n const requestedAll = opts.driver === \"all\";\n const targets = resolveDriver(opts.driver);\n\n // For explicit unsupported drivers, fail with usage error.\n if (!requestedAll) {\n const unsupported = targets.filter((t) => !TOGGLE_SUPPORTED.includes(t));\n if (unsupported.length > 0) {\n logErr(\n `${action} is only supported for claude-code; for ${unsupported.join(\", \")} use uninstall/install`,\n );\n return 2;\n }\n }\n\n let exitCode = 0;\n\n for (const t of targets) {\n if (!TOGGLE_SUPPORTED.includes(t)) {\n logInfo(`${t}: ${action} not supported; skipping`);\n continue;\n }\n if (t === \"claude-code\") {\n try {\n const r =\n action === \"enable\"\n ? await claudeCode.enable(projectDir)\n : await claudeCode.disable(projectDir);\n if (r.changed) {\n logOk(`claude-code: ${action}d`);\n } else {\n logInfo(`claude-code: already ${action}d`);\n }\n } catch (e: unknown) {\n logErr(`claude-code ${action}: ${e instanceof Error ? e.message : String(e)}`);\n exitCode = 1;\n }\n }\n }\n\n return exitCode;\n}\n\nasync function runStatus(opts: RunOptions): Promise<number> {\n const projectDir = path.resolve(opts.projectDir);\n const targets = resolveDriver(opts.driver);\n const rows: BackendStatus[] = [];\n let exitCode = 0;\n\n for (const t of targets) {\n try {\n if (t === \"claude-code\") rows.push(await claudeCode.status(projectDir));\n else if (t === \"omp\") rows.push(await omp.status(projectDir));\n else rows.push(await codex.status(projectDir));\n } catch (e: unknown) {\n logErr(`${t} status: ${e instanceof Error ? e.message : String(e)}`);\n exitCode = 1;\n }\n }\n\n printStatusTable(rows);\n return exitCode;\n}\n\nfunction printStatusTable(rows: BackendStatus[]): void {\n if (rows.length === 0) return;\n\n const cols: Array<{ key: keyof BackendStatus; header: string }> = [\n { key: \"backend\", header: \"backend\" },\n { key: \"installed\", header: \"installed\" },\n { key: \"enabled\", header: \"enabled\" },\n { key: \"method\", header: \"method\" },\n { key: \"location\", header: \"location\" },\n ];\n\n const widths = cols.map((c) =>\n Math.max(c.header.length, ...rows.map((r) => String(r[c.key] ?? \"\").length)),\n );\n\n const fmtRow = (parts: string[]): string =>\n parts.map((p, i) => p.padEnd(widths[i] ?? p.length)).join(\" \");\n\n console.log();\n console.log(` ${S.heading(fmtRow(cols.map((c) => c.header)))}`);\n for (const r of rows) {\n console.log(` ${fmtRow(cols.map((c) => String(r[c.key] ?? \"\")))}`);\n if (r.detail) console.log(` ${S.dim(r.detail)}`);\n }\n console.log();\n}\n\nconst SKAILE_MCP_LABEL = \"skaile-workspace entry\";\n\n// ── Claude Code lifecycle hooks ─────────────────────────────────────────────\n\nconst HOOK_EVENTS = [\"session-start\", \"session-end\", \"user-prompt-submit\"] as const;\ntype HookEvent = (typeof HOOK_EVENTS)[number];\n\n/**\n * Run a Claude Code lifecycle hook.\n *\n * Replaces the three former loose `.mjs` hook scripts. The Claude Code plugin\n * generated by `buildClaudePluginFiles()` wires each lifecycle event to\n * `skaile plugin hook <event>`.\n *\n * Structured logging is routed to stderr so the JSON result this hook writes\n * to stdout stays uncorrupted.\n *\n * @param event - The lifecycle event to run.\n */\nasync function runHook(event: HookEvent): Promise<void> {\n // stdout carries the hook's JSON result — route all logging to stderr.\n const { LogStore, StdoutSink, registerLogStore } = await import(\n \"@skaile/workspaces/core/logging\"\n );\n registerLogStore(\n new LogStore({\n sessionId: `hook-${event}`,\n level: \"info\",\n sinks: [new StdoutSink({ stream: \"stderr\" })],\n }),\n );\n\n const { WorkspacePlugin, PluginStore, resolveProjectDir } = await import(\n \"@skaile/workspaces/workspace-plugin\"\n );\n const projectDir = resolveProjectDir([\"CLAUDE_PROJECT_DIR\"]);\n\n if (event === \"session-start\") {\n const plugin = new WorkspacePlugin({ projectDir, bootOwned: true });\n await plugin.boot();\n const additionalContext = plugin.buildSystemPromptSection();\n process.stdout.write(\n `${JSON.stringify({\n hookSpecificOutput: { hookEventName: \"SessionStart\", additionalContext },\n })}\\n`,\n );\n await plugin.shutdown();\n return;\n }\n\n if (event === \"session-end\") {\n const plugin = new WorkspacePlugin({ projectDir, bootOwned: true });\n await plugin.boot();\n await plugin.store.flush();\n await plugin.shutdown();\n return;\n }\n\n // user-prompt-submit — lightweight: read PluginStore from disk, no full boot.\n const store = new PluginStore(path.join(projectDir, \".skaile\", \"plugin-state.json\"));\n await store.load();\n const status = store.get(\"connector:status\");\n if (status && typeof status === \"object\" && Object.keys(status as object).length > 0) {\n process.stdout.write(\n `${JSON.stringify({\n hookSpecificOutput: {\n hookEventName: \"UserPromptSubmit\",\n additionalContext: `Connector status update: ${JSON.stringify(status)}`,\n },\n })}\\n`,\n );\n }\n}\n\n// ── CLI command ────────────────────────────────────────────────────────────\n\n/**\n * Creates the `skaile plugin` command group.\n *\n * Manages the skaile workspace plugin installation across coding agent backends\n * (Claude Code, OMP, Codex). Subcommands: `install`, `uninstall`, `enable`,\n * `disable`, `status`. All subcommands accept `--driver` to target a specific\n * backend or `all`.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/plugin#make-plugin-command\n */\nexport function makePluginCommand(): Command {\n const cmd = new Command(\"plugin\").description(\n \"Manage skaile workspace plugin (Claude Code / OMP / Codex)\",\n );\n\n cmd\n .command(\"install\")\n .description(\"Install skaile workspace plugin\")\n .option(\"--driver <name>\", \"Target: claude-code | omp | codex | all\", \"all\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\n \"--full\",\n \"Claude Code: generate the full .claude/plugins/skaile/ directory (MCP + hooks) instead of the default MCP-only install\",\n )\n .action(async (opts: RunOptions) => {\n process.exitCode = await runInstall(opts);\n });\n\n cmd\n .command(\"uninstall\")\n .description(\"Uninstall skaile workspace plugin\")\n .option(\"--driver <name>\", \"Target: claude-code | omp | codex | all\", \"all\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts: RunOptions) => {\n process.exitCode = await runUninstall(opts);\n });\n\n cmd\n .command(\"enable\")\n .description(\"Enable an installed plugin (claude-code only)\")\n .option(\"--driver <name>\", \"Target: claude-code | all\", \"claude-code\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts: RunOptions) => {\n process.exitCode = await runToggle(opts, \"enable\");\n });\n\n cmd\n .command(\"disable\")\n .description(\"Disable an installed plugin (claude-code only)\")\n .option(\"--driver <name>\", \"Target: claude-code | all\", \"claude-code\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts: RunOptions) => {\n process.exitCode = await runToggle(opts, \"disable\");\n });\n\n cmd\n .command(\"status\")\n .description(\"Show install / enable status across backends\")\n .option(\"--driver <name>\", \"Target: claude-code | omp | codex | all\", \"all\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts: RunOptions) => {\n process.exitCode = await runStatus(opts);\n });\n\n cmd\n .command(\"hook <event>\")\n .description(\n \"Run a Claude Code lifecycle hook (session-start | session-end | user-prompt-submit)\",\n )\n .action(async (event: string) => {\n try {\n if (!HOOK_EVENTS.includes(event as HookEvent)) {\n process.stderr.write(\n `plugin hook: unknown event '${event}' (expected: ${HOOK_EVENTS.join(\" | \")})\\n`,\n );\n } else {\n await runHook(event as HookEvent);\n }\n } catch (err) {\n // Never block the agent — hooks always exit 0.\n process.stderr.write(\n `plugin hook ${event} warning: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n }\n process.exit(0);\n });\n\n cmd.action(() => cmd.help());\n return cmd;\n}\n","/**\n * skaile preset — scaffold and validate preset YAML files.\n *\n * Subcommands: init, validate.\n * Delegates to @skaile/library preset module for parsing and validation.\n */\n\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\n\n/**\n * Creates the `skaile preset` command group.\n *\n * Scaffolds and validates preset YAML files used by the Asset Store v2.\n * Subcommands: `init [name]` (scaffold a `.preset.yaml` template) and\n * `validate <path>` (schema + cycle + nesting-depth check).\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#preset\n */\nexport function makePresetCommand(): Command {\n const cmd = new Command(\"preset\").description(\"Scaffold and validate preset YAML files\");\n\n // ── preset init ─────────────────────────────────────────────────────────\n\n cmd\n .command(\"init [name]\")\n .description(\"Scaffold a new .preset.yaml file\")\n .option(\"--dir <path>\", \"Output directory\", process.cwd())\n .action(async (name: string | undefined, opts: { dir: string }) => {\n const presetName = name ?? \"my-preset\";\n const filename = `${presetName}.preset.yaml`;\n const outPath = path.join(path.resolve(opts.dir), filename);\n\n if (existsSync(outPath)) {\n logErr(`File already exists: ${outPath}`);\n logInfo(\"Choose a different name or remove the existing file.\");\n process.exit(1);\n }\n\n const template = generatePresetTemplate(presetName);\n writeFileSync(outPath, template, \"utf-8\");\n logOk(`Created ${S.brand(filename)}`);\n logInfo(`Path: ${outPath}`);\n logInfo(\"Edit the file to define your preset items, then validate with:\");\n logInfo(` skaile preset validate ${filename}`);\n });\n\n // ── preset validate ─────────────────────────────────────────────────────\n\n cmd\n .command(\"validate <path>\")\n .description(\"Validate a preset YAML file (schema + cycles + nesting depth)\")\n .action(async (filePath: string) => {\n const resolved = path.resolve(filePath);\n if (!existsSync(resolved)) {\n logErr(`File not found: ${resolved}`);\n process.exit(1);\n }\n\n const content = readFileSync(resolved, \"utf-8\");\n\n // Parse\n const { parsePresetYaml, detectNestedPresetRefs } = await import(\n \"@skaile/workspaces/library\"\n );\n\n const parseResult = parsePresetYaml(content);\n if (!parseResult.ok) {\n logErr(\"Preset validation failed (parse errors):\");\n for (const err of parseResult.errors) {\n console.log(` ${S.err(\"✗\")} ${err}`);\n }\n process.exit(1);\n }\n\n // Note: ParseResult.preset is optional even when ok; on `ok: true` it's\n // always set by parsePreset(), but TypeScript can't infer that. Guard.\n if (!parseResult.preset) {\n logErr(\"Preset validation failed: parser returned no manifest\");\n process.exit(1);\n }\n const preset = parseResult.preset;\n let hasWarnings = false;\n\n // Check structural nesting: detectNestedPresetRefs requires a known-refs\n // set, which we don't have at structural-validation time. The full\n // depth check runs at apply-time via validateNestingDepth(presetRef,\n // currentDepth) inside applyPresetWithLibrary. Surface a count only.\n const nestedRefs = detectNestedPresetRefs(preset);\n if (nestedRefs.length > 0) {\n logInfo(`Nested preset refs: ${nestedRefs.length} (depth validated at apply-time)`);\n }\n\n // Check for cycle detection (requires resolving refs against library)\n // Phase 1: basic structural validation only. Full cycle detection\n // requires the discovery package's detectCycles() with a requires graph,\n // which needs the full Library context. We validate structure here.\n const { detectCycles } = await import(\"@skaile/workspaces/discovery\");\n\n // Build a mini requires graph from the preset items\n const presetRef = path.basename(resolved, \".preset.yaml\");\n const edges: Array<{ from: string; to: string; field: string }> = [];\n for (const item of preset.items) {\n if (item.ref) {\n edges.push({ from: presetRef, to: item.ref, field: \"items[].ref\" });\n }\n }\n\n if (edges.length > 0) {\n const cycleResult = detectCycles(edges);\n if (!cycleResult.acyclic) {\n logErr(\"Cycle detected in preset references:\");\n if (cycleResult.cyclePath) {\n console.log(` ${S.err(\"✗\")} ${cycleResult.cyclePath.join(\" → \")}`);\n }\n process.exit(1);\n }\n }\n\n // Validate per-item placeholders structure (dry-run with no input values)\n const allPlaceholders = preset.items.flatMap((item: any) => item.placeholders ?? []);\n if (allPlaceholders.length > 0) {\n const { validatePlaceholder } = await import(\"@skaile/workspaces/library\");\n const invalidEntries: Array<{ key: string; errors: string[] }> = [];\n for (const ph of allPlaceholders) {\n // Validate with undefined value — checks structure only, not required-ness\n const result = validatePlaceholder(ph, ph.default);\n if (!result.valid) {\n invalidEntries.push({ key: ph.key, errors: result.errors });\n }\n }\n if (invalidEntries.length > 0) {\n hasWarnings = true;\n logWarn(\"Placeholder issues:\");\n for (const r of invalidEntries) {\n console.log(` ${S.warn(\"!\")} ${r.key}: ${r.errors.join(\", \")}`);\n }\n }\n }\n\n // Summary\n console.log();\n console.log(S.heading(\" Preset Validation\"));\n console.log(` ${S.rule(40)}`);\n console.log(` ${S.label(\"Name\")} ${preset.name}`);\n console.log(` ${S.label(\"Version\")} ${preset.version ?? \"unversioned\"}`);\n console.log(` ${S.label(\"Items\")} ${preset.items.length}`);\n console.log(` ${S.label(\"Inputs\")} ${preset.inputs?.length ?? 0}`);\n console.log(` ${S.label(\"Placeholders\")} ${allPlaceholders.length}`);\n console.log();\n\n if (hasWarnings) {\n logWarn(\"Validation passed with warnings\");\n } else {\n logOk(\"Preset is valid\");\n }\n });\n\n return cmd;\n}\n\n// ── Template ────────────────────────────────────────────────────────────────\n\nfunction generatePresetTemplate(name: string): string {\n return `# ${name}.preset.yaml\n# Polymorphic Preset — composition + configuration primitive for the asset store.\n# See: _devlog/specs/2026-05-03-ai-asset-store-v2-design.md § Presets\n\nname: \"${name}\"\nversion: \"1.0.0\"\ndescription: \"TODO: describe what this preset configures\"\n\n# Placeholders — values the user provides at apply-time.\n# Types: text, multiline, secret, number, boolean, enum, oauth, instance-picker\nplaceholders:\n - key: EXAMPLE_KEY\n type: text\n label: \"Example placeholder\"\n required: true\n # default: \"some-value\"\n # hint: \"Help text shown to the user\"\n\n# Items — each becomes a Library Instance when the preset is applied.\n# Ref types:\n# - Asset ref (kind:publisher/name@pin) → creates new Instance\n# - Library Instance ref (#uuid) → reuses existing Instance\n# - Nested Preset ref (preset:path.preset.yaml) → recursive apply (max depth 3)\nitems:\n - id: example-item\n ref: \"skill:@skaile/example-skill@^1.0\"\n config:\n # Use \\${INPUT:EXAMPLE_KEY} for placeholder interpolation\n setting: \"\\${INPUT:EXAMPLE_KEY}\"\n # credential_ref: \"\\${SECRET:EXAMPLE_KEY}\" # for secret placeholders\n`;\n}\n","import path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { type DriverTarget, readLock } from \"@skaile/workspaces/core\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport type { InstallManifest } from \"@skaile/workspaces/types\";\nimport { colorRef, logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\n\n/**\n * Canonical asset-ref shape accepted by `skaile install <ref>`:\n * `<publisher>/<name>@<version>` with an optional leading `@`. The capture\n * groups are publisher, name, and version.\n */\nconst ASSET_REF_RE = /^@?([^/@\\s]+)\\/([^/@\\s]+)@([^/@\\s]+)$/;\n\n/**\n * Minimal catalog-source surface the pointer-only install path needs.\n * `RemoteCatalogSource` satisfies this — narrowing keeps {@link runPointerOnlyInstall}\n * testable with a hand-rolled stub.\n */\nexport interface InstallManifestSource {\n getInstallManifest(ref: string): Promise<InstallManifest>;\n}\n\n/**\n * Capability check: is this catalog source able to serve install manifests?\n *\n * `openCatalogSource` returns a `RemoteCatalogSource | RestCatalogSource`.\n * Only the tRPC-framed `RemoteCatalogSource` implements `getInstallManifest`;\n * the REST-framed `RestCatalogSource` (the default for any catalog URL other\n * than `https://skaile.store`) does not. Calling it unconditionally would be a\n * runtime `TypeError`, so the pointer-only install path must capability-detect\n * first and fail with a clear, actionable message.\n */\nexport function supportsInstallManifest(source: unknown): source is InstallManifestSource {\n return (\n typeof (source as { getInstallManifest?: unknown } | null | undefined)?.getInstallManifest ===\n \"function\"\n );\n}\n\n/**\n * Minimal library surface the pointer-only install path needs.\n * `LocalIndex` satisfies this.\n */\nexport interface InstallLibrary {\n install(manifest: InstallManifest): Promise<{ installPath: string }>;\n}\n\n/**\n * Result of a pointer-only catalog install.\n */\nexport interface PointerOnlyInstallResult {\n /** Absolute path the verified asset bytes were written to. */\n installPath: string;\n /** The pinned upstream commit SHA the asset was fetched at. */\n commitSha: string;\n /** Number of files in the install manifest. */\n fileCount: number;\n}\n\n/**\n * Pointer-only catalog install — the `skaile install <ref>` code path.\n *\n * 1. Resolves the pointer-only {@link InstallManifest} from the Catalog.\n * 2. Hands it to the library, which fetches each file's bytes directly from\n * the upstream repo at the pinned commit, verifies every per-file SHA256\n * plus the composite SHA256, and only then writes the verified files.\n *\n * Both dependencies are injected so the function is unit-testable without a\n * network round-trip. In production the CLI passes a `RemoteCatalogSource`\n * and a `LocalIndex`.\n *\n * @param ref - Asset ref (`<publisher>/<name>@<version>`, optional leading `@`).\n * @param deps - Injected catalog source + library.\n * @returns The install path, pinned commit SHA, and file count.\n * @throws When the ref is malformed, the manifest cannot be resolved, or any\n * hash verification fails. The underlying error message is surfaced as-is.\n */\nexport async function runPointerOnlyInstall(\n ref: string,\n deps: { catalog: InstallManifestSource; library: InstallLibrary },\n): Promise<PointerOnlyInstallResult> {\n const m = ref.match(ASSET_REF_RE);\n if (!m) {\n throw new Error(\n `malformed asset ref '${ref}' — expected <publisher>/<name>@<version> (e.g. skaile/use-exa@1.0.0)`,\n );\n }\n const manifest = await deps.catalog.getInstallManifest(ref);\n // [M1] Identity check: the catalog must not install a different asset than\n // requested. Compare normalised (leading `@` stripped) so `@x/y@1` and\n // `x/y@1` are treated as the same ref.\n const normalizeRef = (r: string): string => r.replace(/^@/, \"\");\n if (normalizeRef(manifest.ref) !== normalizeRef(ref)) {\n throw new Error(\n `catalog identity mismatch: requested '${ref}' but the catalog returned a manifest for '${manifest.ref}'`,\n );\n }\n const { installPath } = await deps.library.install(manifest);\n return {\n installPath,\n commitSha: manifest.source.commitSha,\n fileCount: manifest.files.length,\n };\n}\n\n/**\n * Creates the `skaile install` command.\n *\n * Two modes, selected by argument shape:\n *\n * - `skaile install` (no positional arg) — reads `skaile.yaml` and deploys all\n * declared assets (and their transitive dependencies) to the configured\n * driver target directory. Supports `--locked` for CI-mode install from a\n * lock file.\n * - `skaile install <publisher>/<name>@<version>` — pointer-only catalog\n * install: resolves the pointer-only install manifest from the configured\n * Catalog, fetches each file's bytes directly from the upstream repo at the\n * pinned commit, verifies every per-file + the composite SHA256, then writes\n * the verified files into the local Library.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/project#make-install-command\n */\nexport function makeInstallCommand(): Command {\n return new Command(\"install\")\n .description(\n \"Install dependencies from skaile.yaml, or a single asset by ref (<publisher>/<name>@<version>)\",\n )\n .argument(\"[ref]\", \"Asset ref to install from the Catalog (<publisher>/<name>@<version>)\")\n .option(\"--locked\", \"Install from lock file (CI mode — fails on drift)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--target <agent>\", \"Agent framework\", \"claude-code\")\n .action(async (ref: string | undefined, opts) => {\n // ── Pointer-only catalog install: `skaile install <ref>` ──────────────\n if (ref !== undefined) {\n if (!ASSET_REF_RE.test(ref)) {\n logErr(\n `malformed asset ref '${ref}' — expected <publisher>/<name>@<version> (e.g. skaile/use-exa@1.0.0)`,\n );\n process.exit(1);\n }\n const spinner = p.spinner();\n spinner.start(`Installing ${ref}`);\n try {\n const { openCatalogSource, openLibrary } = await import(\"../open-library.ts\");\n const catalog = await openCatalogSource({ projectDir: path.resolve(opts.projectDir) });\n // [H2] REST-framed catalogs (the default for any catalog URL other\n // than https://skaile.store) cannot serve install manifests. Detect\n // and fail clearly rather than throwing a runtime TypeError.\n if (!supportsInstallManifest(catalog)) {\n throw new Error(\n \"pointer-only install (skaile install <ref>) requires a tRPC-framed Catalog. \" +\n \"The configured catalog uses REST framing, which does not serve install \" +\n \"manifests. Set catalog.url to https://skaile.store, or catalog.framing: trpc, \" +\n \"in ~/.skaile/config.yaml.\",\n );\n }\n const library = await openLibrary();\n try {\n const result = await runPointerOnlyInstall(ref, { catalog, library });\n spinner.stop(\"Done\");\n logOk(`Installed ${colorRef(ref)}`);\n logInfo(`Path: ${S.dim(result.installPath)}`);\n logInfo(`Commit: ${S.dim(result.commitSha)}`);\n logInfo(`Files: ${S.dim(String(result.fileCount))}`);\n } finally {\n library.close();\n }\n } catch (err) {\n spinner.stop(\"Failed\");\n const msg = err instanceof Error ? err.message : String(err);\n if (/unreachable/i.test(msg)) {\n logErr(`asset uninstallable — source commit no longer available (${msg})`);\n } else {\n logErr(msg);\n }\n process.exit(1);\n }\n return;\n }\n\n // ── Legacy install: `skaile install` reads skaile.yaml ────────────────\n const projectDir = path.resolve(opts.projectDir);\n\n // Hydrate sources declared in skaile.yaml before resolving assets, so\n // freshly checked-out projects pull their source clones automatically.\n try {\n const { ensureSourcesCloned } = await import(\"../ensure-sources.ts\");\n const hydrate = ensureSourcesCloned(projectDir, { quiet: true });\n if (hydrate.cloned.length > 0) {\n logOk(`Cloned source(s): ${hydrate.cloned.join(\", \")}`);\n }\n if (hydrate.failed.length > 0) {\n logErr(`Failed to clone source(s): ${hydrate.failed.join(\", \")}`);\n }\n } catch (err) {\n logWarn(\n `source hydration skipped: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n\n const am = new AssetManager({\n projectDir,\n driverTarget: opts.target as DriverTarget,\n });\n const spinner = p.spinner();\n spinner.start(opts.locked ? \"Installing from lock file\" : \"Installing dependencies\");\n try {\n const result = await am.install({ locked: opts.locked });\n spinner.stop(\"Done\");\n if (result.deployed.length > 0) {\n for (const d of result.deployed) logOk(d);\n }\n if (result.removed.length > 0) {\n for (const r of result.removed) logWarn(`Removed: ${r}`);\n }\n if (result.deployed.length === 0 && result.removed.length === 0) {\n logInfo(\"Nothing to install (already up to date).\");\n }\n if (result.missing.length > 0) {\n for (const m of result.missing) logErr(`Missing: ${m}`);\n }\n if (result.collisions.length > 0) {\n for (const c of result.collisions) {\n logWarn(\n `${c.key} resolved from ${S.bold(c.resolvedFrom)}, also found in: ${c.shadowedIn.join(\", \")}. Use @repo qualifier to pin.`,\n );\n }\n }\n if (result.lockWritten) {\n logInfo(`Lock file written: ${S.dim(\"skaile.lock.yaml\")}`);\n }\n } catch (err) {\n spinner.stop(\"Failed\");\n logErr(String(err));\n process.exit(1);\n }\n });\n}\n\n/**\n * Creates the `skaile check` command.\n *\n * Scans all deployed assets for unmet dependency requirements and exits with\n * code 1 if any are found.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/project#make-check-command\n */\nexport function makeCheckCommand(): Command {\n return new Command(\"check\")\n .description(\"Check for unmet requirements\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const issues = am.doctor();\n if (issues.length === 0) {\n logOk(\"All dependencies satisfied.\");\n } else {\n for (const i of issues) {\n logErr(\n `${i.assetKind}:${i.assetName} requires ${i.depKind}:${i.depName} (${i.inRepos ? \"fixable\" : \"not found\"})`,\n );\n }\n process.exit(1);\n }\n });\n}\n\n/**\n * Creates the `skaile clean` command.\n *\n * Removes all skaile-managed assets tracked in `skaile.lock.yaml` from the\n * workspace. With `--all` also removes history, patches, repos, and the lock\n * file itself. Preserves unmanaged (manually placed) assets.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/project#make-clean-command\n */\nexport function makeCleanCommand(): Command {\n return new Command(\"clean\")\n .description(\"Remove all skaile-managed assets from the workspace\")\n .option(\"--all\", \"Full reset: also remove history, patches, repos, and lock file\")\n .option(\"--dry-run\", \"Show what would be removed without doing it\")\n .option(\"-y, --yes\", \"Skip confirmation prompt\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--target <agent>\", \"Agent framework\", \"claude-code\")\n .action(async (opts) => {\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n driverTarget: opts.target as DriverTarget,\n });\n\n // Preview: load lock file to show what will be cleaned\n const lock = readLock(path.resolve(opts.projectDir, \"skaile.lock.yaml\"));\n\n if (!lock || Object.keys(lock.assets).length === 0) {\n logInfo(\"Nothing to clean (no skaile-managed assets found).\");\n return;\n }\n\n const assetRefs = Object.keys(lock.assets);\n console.log();\n console.log(` ${S.heading(\"Assets to remove:\")} ${S.dim(`(${assetRefs.length})`)}`);\n for (const ref of assetRefs) {\n console.log(` ${colorRef(ref)}`);\n }\n\n if (opts.all) {\n console.log();\n console.log(` ${S.heading(\"Also removing:\")}`);\n console.log(` ${S.dim(\".skaile/history.yaml\")}`);\n console.log(` ${S.dim(\".skaile/patches/\")}`);\n console.log(` ${S.dim(\"skaile.lock.yaml\")}`);\n }\n\n if (opts.dryRun) {\n console.log();\n logInfo(\"Dry run — no changes made.\");\n return;\n }\n\n if (!opts.yes) {\n const confirm = await p.confirm({ message: \"Proceed?\" });\n if (p.isCancel(confirm) || !confirm) {\n logInfo(\"Cancelled.\");\n return;\n }\n }\n\n const result = am.clean({ all: opts.all });\n\n console.log();\n for (const r of result.removed) {\n logOk(`Removed ${r}`);\n }\n for (const s of result.skipped) {\n logWarn(`Skipped ${s.ref}: ${s.reason}`);\n }\n if (result.unmanaged.length > 0) {\n console.log();\n logInfo(`Kept ${result.unmanaged.length} unmanaged asset(s):`);\n for (const u of result.unmanaged) {\n console.log(` ${S.dim(u)}`);\n }\n }\n if (opts.all) {\n console.log();\n logOk(\"Full reset complete.\");\n }\n });\n}\n","/**\n * skaile rebuild <agent> — re-snapshots all inline-snapshot composition items,\n * bumps the prompt version, and writes compile_manifest.json.\n *\n * This command is the manual \"freeze\" step for agents that compose\n * inline-snapshot assets (soul, persona). Running it ensures the\n * agent's prompt content is deterministic until the next rebuild.\n */\n\nimport path from \"node:path\";\nimport { resolveAgentDir } from \"@skaile/workspaces/core\";\nimport {\n compileComposition,\n loadAgentManifest,\n type RepoMap,\n resolveMixin,\n} from \"@skaile/workspaces/runner\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn } from \"../helpers.ts\";\n\n/**\n * Creates the `skaile rebuild` command.\n *\n * Re-snapshots all inline-snapshot composition items for an agent, bumps the\n * prompt version, and writes `compile_manifest.json`. This is the manual\n * \"freeze\" step to make an agent's composed prompt deterministic.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#rebuild\n */\nexport function makeRebuildCommand(): Command {\n return new Command(\"rebuild\")\n .description(\"Re-snapshot inline-snapshot composition items and bump prompt version\")\n .argument(\"[agent]\", \"Agent name or path (defaults to current project agent)\")\n .option(\"--project-dir <dir>\", \"Project directory\", process.cwd())\n .action(async (agentArg: string | undefined, opts: { projectDir: string }) => {\n const projectDir = path.resolve(opts.projectDir);\n\n // Resolve agent directory\n let agentDir: string;\n if (agentArg) {\n // If it looks like a path, use it directly\n if (agentArg.includes(\"/\") || agentArg.includes(\"\\\\\")) {\n agentDir = path.resolve(projectDir, agentArg);\n } else {\n // Try to resolve as agent name via workspace config\n const resolved = resolveAgentDir(projectDir);\n agentDir = resolved ?? path.resolve(projectDir, agentArg);\n }\n } else {\n const resolved = resolveAgentDir(projectDir);\n if (!resolved) {\n logErr(\"No agent found in current project. Specify an agent name or path.\");\n process.exit(1);\n }\n agentDir = resolved;\n }\n\n // Load the agent manifest\n const manifest = await loadAgentManifest(agentDir);\n if (!manifest) {\n logErr(`No agent.yaml found in ${agentDir}`);\n process.exit(1);\n }\n\n if (!manifest.composes || manifest.composes.length === 0) {\n logInfo(\"Agent has no composes: items — nothing to rebuild.\");\n return;\n }\n\n logInfo(\n `Rebuilding ${manifest.name ?? \"agent\"} (${manifest.composes.length} composition items)...`,\n );\n\n // Content loader — resolves asset content from the filesystem via mixin resolver.\n // Phase 1 limitation: only local-path refs (./file.md, /abs/path) resolve\n // successfully. Scoped catalog refs (@publisher/name) require a populated\n // RepoMap from workspace config, which Phase 2 / Library integration will provide.\n // The kind cast is intentional: resolveMixin's signature restricts to 3 kinds but\n // the implementation handles arbitrary strings for catalog lookup. Non-matching\n // kinds simply return null (not found) which surfaces as a compile warning.\n const loadContent = async (ref: string, kind: string): Promise<string | null> => {\n try {\n const repos: RepoMap = {};\n const mixinKind = kind as \"persona\" | \"ruleset\" | \"knowledge\";\n const resolved = await resolveMixin(ref, mixinKind, agentDir, repos);\n return resolved?.content ?? null;\n } catch {\n return null;\n }\n };\n\n const result = await compileComposition({\n agentDir,\n items: manifest.composes,\n loadContent,\n });\n\n // Report\n for (const warning of result.warnings) {\n logWarn(warning);\n }\n\n logOk(\n `Compiled ${result.resolvedCount}/${manifest.composes.length} items → prompt v${result.manifest.prompt_version}`,\n );\n logInfo(`Written: ${result.manifestPath}`);\n });\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport type { AgentEvent } from \"@skaile/workspaces/bridge\";\nimport {\n clearSession,\n loadSession,\n loadSessionById,\n MarkdownStreamer,\n resolveSettings,\n runAgentChat,\n} from \"@skaile/workspaces/runner\";\nimport { loadAllFlows } from \"@skaile/workspaces/base-assets/connectors/flow/engine\";\nimport { resumeFlow, runFlow } from \"@skaile/workspaces/base-assets/connectors/flow/run-flow\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport { AI_RESOURCES } from \"../paths.ts\";\n\n/**\n * Returns an onEvent handler that streams markdown output and shows per-node\n * progress from state_changed events emitted by the FlowAdapter.\n */\nfunction makeFlowEventHandler(): (event: AgentEvent) => void {\n const md = new MarkdownStreamer();\n const displayed = new Set<string>();\n\n return (event: AgentEvent) => {\n // Node progress from FlowAdapter state changes. Post-Phase-2 the store\n // ID is `flow:${runId}` (per-run namespace) and state.nodes is a\n // `Record<nodeId, NodeExecution>`, not the old array shape.\n const e = event as {\n type?: string;\n store?: string;\n state?: { nodes?: Record<string, { id: string; status: string }> };\n };\n if (e.type === \"state_changed\" && typeof e.store === \"string\" && e.store.startsWith(\"flow:\")) {\n const nodes = e.state?.nodes ?? {};\n for (const id in nodes) {\n const n = nodes[id];\n const key = `${id}:${n.status}`;\n if (displayed.has(key)) continue;\n displayed.add(key);\n if (n.status === \"running\") {\n process.stdout.write(` ${S.dim(\"→\")} ${id}`);\n } else if (n.status === \"complete\") {\n process.stdout.write(` ${pc.green(\"✓\")}\\n`);\n } else if (n.status === \"skipped\") {\n process.stdout.write(` ${S.dim(\"↷ skipped\")}\\n`);\n }\n }\n }\n\n // Markdown streaming for agent text output\n if (event.type === \"message_update\") {\n const delta = (event as any)._textDelta;\n if (delta) md.write(delta);\n }\n if (event.type === \"agent_end\") md.end();\n };\n}\n\n/**\n * Create the `skaile run` command.\n *\n * Accepts a flow ID or a free-text prompt as positional arguments. When the\n * first positional arg matches a known flow ID (discovered from `ai-assets/`),\n * the flow is executed via {@link runFlow}. Otherwise all positional args are\n * joined and forwarded as a one-shot agent prompt via {@link runAgentChat}.\n * Supports `--dry-run`, `--project-dir`, `--driver`, `--model`, `--provider`,\n * `--label`, and `--skill` options. When called with no arguments an\n * interactive selection prompt is shown.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/run#make-run-command\n */\nexport function makeRunCommand(): Command {\n const cmd = new Command(\"run\")\n .description(\"Start a flow or run a single-shot text prompt\")\n .argument(\"[flow-id-or-text...]\", \"Flow ID or text prompt\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--driver <name>\", \"Driver backend (claude-sdk, codex, omp)\")\n .option(\"--provider <name>\", \"LLM provider\")\n .option(\"--model <name>\", \"Model override\")\n .option(\"--label <label>\", \"Human-readable session label\")\n .option(\"--dry-run\", \"Print plan without executing\")\n .option(\"--skill <name>\", \"Skill name (for single-shot mode)\")\n .action(async (positional: string[], opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const cliDriver = opts.driver as string | undefined;\n const dryRun = opts.dryRun ?? false;\n\n // Interactive flow selection if no args\n let flowId = positional[0];\n if (!flowId) {\n const flows = loadAllFlows(AI_RESOURCES);\n if (flows.length === 0) {\n logErr(\"No flows available.\");\n process.exit(1);\n }\n const selected = await p.select({\n message: \"Select a flow to run\",\n options: flows.map((f) => ({\n value: f.id,\n label: f.name,\n hint: f.description,\n })),\n });\n if (p.isCancel(selected)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n flowId = selected as string;\n }\n\n // Resolve settings\n const config = await resolveSettings(projectDir, {\n driver: cliDriver,\n model: opts.model,\n provider: opts.provider,\n });\n const driver = config.driver ?? \"omp\";\n const model = config.model;\n const provider = config.provider;\n\n const flows = loadAllFlows(AI_RESOURCES);\n const flow = flows.find((f) => f.id === flowId);\n if (!flow) {\n // Not a flow — treat as single-shot text prompt\n const textPrompt = positional.join(\" \");\n if (!textPrompt.trim()) {\n logErr(`Flow not found: ${flowId}`);\n console.log(` ${S.dim(\"Available:\")} ${flows.map((f) => S.cmd(f.id)).join(\", \")}`);\n process.exit(1);\n }\n\n await runAgentChat({\n projectDir,\n driver: config.driver,\n model: config.model,\n provider: config.provider,\n message: textPrompt,\n skill: opts.skill,\n });\n return;\n }\n\n // Find flow file path\n let flowPath: string | undefined;\n let dir = projectDir;\n for (let i = 0; i < 6; i++) {\n const candidate = path.join(dir, \"ai-assets\");\n if (fs.existsSync(candidate)) {\n for (const domain of fs.readdirSync(candidate)) {\n const p_ = path.join(candidate, domain, \"flows\", `${flowId}.flow.yaml`);\n if (fs.existsSync(p_)) {\n flowPath = p_;\n break;\n }\n const legacy = path.join(candidate, domain, \"flows\", `${flowId}.json`);\n if (fs.existsSync(legacy)) {\n flowPath = legacy;\n break;\n }\n }\n break;\n }\n dir = path.dirname(dir);\n }\n if (!flowPath) {\n for (const domain of fs.readdirSync(AI_RESOURCES)) {\n const p_ = path.join(AI_RESOURCES, domain, \"flows\", `${flowId}.flow.yaml`);\n if (fs.existsSync(p_)) {\n flowPath = p_;\n break;\n }\n const legacy = path.join(AI_RESOURCES, domain, \"flows\", `${flowId}.json`);\n if (fs.existsSync(legacy)) {\n flowPath = legacy;\n break;\n }\n }\n }\n if (!flowPath) {\n logErr(`Could not locate flow file for: ${flowId}`);\n process.exit(1);\n }\n\n console.log();\n console.log(` ${S.label(\"Flow:\")} ${S.heading(flow.name)}`);\n console.log(` ${S.label(\"Project dir:\")} ${projectDir}`);\n console.log(` ${S.label(\"Driver:\")} ${driver}${model ? S.dim(` / ${model}`) : \"\"}`);\n if (opts.label) console.log(` ${S.label(\"Label:\")} ${opts.label}`);\n if (dryRun) console.log(` ${S.warn(\"(dry run — no agent will be started)\")}`);\n console.log();\n\n await runFlow({\n projectDir,\n flowPath,\n driver,\n model,\n provider,\n sessionLabel: opts.label,\n dryRun,\n onEvent: makeFlowEventHandler(),\n onLog: (line: string) => console.log(line),\n });\n });\n\n return cmd;\n}\n\n/**\n * Create the `skaile resume` command.\n *\n * Resumes the current or a specified session in `--project-dir`. Loads the\n * session pointer from `.skaile/session.json` (or a specific run-id via\n * `--session`) and delegates to {@link resumeFlow}. Supports `--dry-run` to\n * print the remaining plan without re-executing any agent steps.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/run#make-resume-command\n */\nexport function makeResumeCommand(): Command {\n const cmd = new Command(\"resume\")\n .description(\"Resume current session\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--session <run-id>\", \"Target session by runId\")\n .option(\"--dry-run\", \"Print plan without executing\")\n .action(async (opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const sessionId = opts.session;\n const dryRun = opts.dryRun ?? false;\n\n const session = sessionId\n ? await loadSessionById(projectDir, sessionId)\n : await loadSession(projectDir);\n if (!session) {\n logErr(`No session in ${projectDir}`);\n console.log(` ${S.dim(\"Run\")} ${S.cmd(\"skaile run <flow-id>\")} ${S.dim(\"first.\")}`);\n process.exit(1);\n }\n\n console.log();\n console.log(\n ` ${S.label(\"Resuming:\")} ${S.heading(session.flowId)}${session.label ? S.dim(` — ${session.label}`) : \"\"}`,\n );\n if (dryRun) logWarn(\"dry run\");\n console.log();\n\n await resumeFlow({\n projectDir,\n sessionId,\n dryRun,\n onEvent: makeFlowEventHandler(),\n onLog: (line: string) => console.log(line),\n });\n });\n\n return cmd;\n}\n\n/**\n * Create the `skaile status` command.\n *\n * Reads the current session from `.skaile/session.json` in `--project-dir` and\n * prints a formatted summary: flow ID, run-id prefix, label, status (coloured),\n * driver/model, and age. Exits cleanly with an info message when no session\n * is active.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/run#make-status-command\n */\nexport function makeStatusCommand(): Command {\n return new Command(\"status\")\n .description(\"Show current session state\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const session = await loadSession(projectDir);\n if (!session) {\n logInfo(\"No active session.\");\n return;\n }\n\n const age = Math.round((Date.now() - new Date(session.updatedAt).getTime()) / 1000);\n const statusColor =\n session.status === \"complete\"\n ? pc.green\n : session.status === \"failed\"\n ? pc.red\n : session.status === \"running\"\n ? pc.cyan\n : pc.yellow;\n\n console.log();\n console.log(` ${S.label(\"Flow:\")} ${S.heading(session.flowId)}`);\n console.log(` ${S.label(\"Run ID:\")} ${session.runId.slice(0, 8)}`);\n if (session.label) console.log(` ${S.label(\"Label:\")} ${session.label}`);\n console.log(` ${S.label(\"Status:\")} ${statusColor(session.status ?? \"unknown\")}`);\n console.log(\n ` ${S.label(\"Driver:\")} ${session.driver}${session.model ? S.dim(` / ${session.model}`) : \"\"}`,\n );\n console.log(` ${S.label(\"Updated:\")} ${session.updatedAt} ${S.dim(`(${age}s ago)`)}`);\n console.log(\n ` ${S.dim(\"Flow state is not persisted in CLI mode — use a host (Skaile platform, Pichi) for governed resumable runs.\")}`,\n );\n console.log();\n });\n}\n\n/**\n * Create the `skaile clear` command.\n *\n * Removes the current session pointer from `.skaile/session.json` in\n * `--project-dir` via {@link clearSession}. Does not delete the underlying\n * session file — use `skaile session delete` for that.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/run#make-clear-command\n */\nexport function makeClearCommand(): Command {\n return new Command(\"clear\")\n .description(\"Unset current session pointer\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts) => {\n const projectDir = path.resolve(opts.projectDir);\n await clearSession(projectDir);\n logOk(\"Session cleared.\");\n });\n}\n\n/**\n * Create the `skaile repl` command.\n *\n * Starts an interactive REPL session via `@skaile/workspaces/tui`.\n *\n * Workspace resolution:\n * 1. Walk upward from CWD (or --project-dir) looking for skaile.yaml\n * 2. If found → that directory becomes the projectDir (config root);\n * the user's CWD is forwarded as the agent working directory\n * 3. If not found → prompt the user to create a temporary workspace\n * in /tmp; auto-detect backend (claude-sdk if ~/.claude exists, else omp)\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/repl#make-repl-command\n */\nexport function makeReplCommand(): Command {\n return new Command(\"repl\")\n .description(\"Start an interactive agent session\")\n .option(\"--project-dir <path>\", \"Project directory\")\n .option(\"--driver <name>\", \"Driver backend (claude-sdk, omp)\")\n .option(\"--provider <name>\", \"LLM provider\")\n .option(\"--model <name>\", \"Model override\")\n .option(\"--resume\", \"Resume last session\")\n .option(\"--resume-session <id>\", \"Resume specific session\")\n .action(async (opts) => {\n const { findWorkspaceRoot } = await import(\"@skaile/workspaces/core\");\n const { startRepl } = await import(\"@skaile/workspaces/tui\");\n const os = await import(\"node:os\");\n\n const userCwd = path.resolve(opts.projectDir ?? process.cwd());\n const workspaceRoot = findWorkspaceRoot(userCwd);\n\n let projectDir: string;\n let agentCwd: string;\n let driverOverride = opts.driver as string | undefined;\n\n if (workspaceRoot) {\n // Found skaile.yaml — use its directory as config root\n projectDir = workspaceRoot;\n agentCwd = userCwd;\n if (workspaceRoot !== userCwd) {\n logInfo(`Using workspace: ${S.cmd(workspaceRoot)}`);\n }\n } else {\n // No skaile.yaml found anywhere\n console.log();\n logWarn(`No skaile.yaml found in ${S.cmd(userCwd)} or any parent directory.`);\n console.log();\n\n const shouldCreate = await p.confirm({\n message: \"Create a temporary workspace? (session state in /tmp/)\",\n });\n if (p.isCancel(shouldCreate) || !shouldCreate) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n // Create temp workspace\n const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), \"skaile-repl-\"));\n projectDir = tmpDir;\n agentCwd = userCwd;\n logOk(`Temporary workspace: ${S.cmd(tmpDir)}`);\n\n // Auto-detect backend if no --driver given\n if (!driverOverride) {\n const claudeDir = path.join(os.homedir(), \".claude\");\n if (fs.existsSync(claudeDir)) {\n driverOverride = \"claude-sdk\";\n logInfo(`Detected ${S.cmd(\"~/.claude\")} → using ${S.cmd(\"claude-sdk\")} backend`);\n } else {\n driverOverride = \"omp\";\n logInfo(`Using ${S.cmd(\"omp\")} backend`);\n }\n }\n\n console.log();\n }\n\n await startRepl({\n projectDir,\n cwd: agentCwd !== projectDir ? agentCwd : undefined,\n driver: driverOverride,\n model: opts.model,\n provider: opts.provider,\n resume: opts.resume,\n resumeSessionId: opts.resumeSession,\n });\n });\n}\n","import { Command } from \"commander\";\n\n/**\n * Creates the `skaile serve` command.\n *\n * Starts a WebSocket agent server for platform integration, forwarding\n * incoming protocol messages to the configured driver. Supports\n * `--compile-test` to verify the binary build before a Docker deployment.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/serve#make-serve-command\n */\nexport function makeServeCommand(): Command {\n return new Command(\"serve\")\n .description(\"Start a WebSocket agent server (for platform integration)\")\n .option(\"--port <port>\", \"WebSocket server port\", \"8080\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--driver <name>\", \"Override driver\")\n .option(\"--model <name>\", \"Override model\")\n .option(\"--provider <name>\", \"Override provider\")\n .option(\"--session-id <id>\", \"Session ID for conversation continuity\")\n .option(\"--resume-session-id <id>\", \"OMP session ID to resume (restores native OMP context)\")\n .option(\"--compile-test\", \"Build a compiled binary and run it (simulates Docker environment)\")\n .option(\n \"--with-codex\",\n \"Include the Codex backend in the compiled binary (used with --compile-test)\",\n )\n .action(\n async (opts: {\n port: string;\n projectDir: string;\n driver?: string;\n model?: string;\n provider?: string;\n sessionId?: string;\n resumeSessionId?: string;\n compileTest?: boolean;\n withCodex?: boolean;\n }) => {\n if (opts.compileTest) {\n await runCompileTest({ ...opts, withCodex: opts.withCodex ?? false });\n return;\n }\n\n const { startAgentServer } = await import(\"@skaile/workspaces/runner\");\n\n await startAgentServer({\n port: parseInt(opts.port, 10),\n projectDir: opts.projectDir,\n driver: opts.driver,\n model: opts.model,\n provider: opts.provider,\n sessionId: opts.sessionId,\n resumeSessionId: opts.resumeSessionId,\n });\n },\n );\n}\n\nasync function runCompileTest(opts: {\n port: string;\n projectDir: string;\n driver?: string;\n model?: string;\n provider?: string;\n sessionId?: string;\n withCodex?: boolean;\n}): Promise<void> {\n const { logOk, logErr, logInfo, S } = await import(\"../helpers.ts\");\n const { tmpdir } = await import(\"node:os\");\n const { dirname, join, resolve } = await import(\"node:path\");\n const { fileURLToPath } = await import(\"node:url\");\n const { unlinkSync, existsSync } = await import(\"node:fs\");\n const { spawn } = await import(\"node:child_process\");\n const { portableSpawnSync } = await import(\"@skaile/workspaces/core\");\n const { MONOREPO_ROOT } = await import(\"../paths.ts\");\n\n // `--compile-test` runs `bun build --compile` against the live CLI source\n // to verify a Docker-style static binary still links. That source tree only\n // exists inside the skaile-dev workspace; once @skaile/workspace-cli has\n // been npm-installed, the compiled `dist/` is all that ships, so the test\n // is meaningless and the entry path does not resolve. Gate accordingly.\n if (MONOREPO_ROOT === null) {\n logErr(\"--compile-test is only available inside the skaile-dev workspace.\");\n logInfo(\"Run it from a checkout of skaile-ai/skaile-dev (the monorepo shell).\");\n process.exitCode = 2;\n return;\n }\n\n const outfile = join(tmpdir(), `skaile-compile-test-${Date.now()}`);\n // Anchor on this file's own location instead of MONOREPO_ROOT — the prior\n // `join(MONOREPO_ROOT, \"cli\", \"src\", \"index.ts\")` join was incorrect (the\n // CLI lives under `workspaces/cli/`, not directly under the shell repo\n // root). Resolving via import.meta.url is correct regardless of monorepo\n // depth or whether we are running from source vs dist.\n const __thisFile = fileURLToPath(import.meta.url);\n const entryPoint = resolve(dirname(__thisFile), \"..\", \"index.ts\");\n\n // Step 1: Build\n logInfo(`Building compiled binary...`);\n logInfo(`Entry: ${S.dim(entryPoint)}`);\n logInfo(`Output: ${S.dim(outfile)}`);\n\n const buildArgs = [\n \"bun\",\n \"build\",\n entryPoint,\n \"--compile\",\n \"--outfile\",\n outfile,\n \"--external\",\n \"cpu-features\",\n \"--external\",\n \"better-sqlite3\",\n \"--external\",\n \"pg-native\",\n \"--define:__INCLUDE_CLAUDE_SDK__=true\",\n opts.withCodex ? \"--define:__INCLUDE_CODEX__=true\" : \"--define:__INCLUDE_CODEX__=false\",\n ];\n\n const buildProc = portableSpawnSync(buildArgs, {\n cwd: MONOREPO_ROOT,\n env: { ...process.env },\n });\n\n if (buildProc.exitCode !== 0) {\n logErr(\"Build failed:\");\n if (buildProc.stderr) console.error(buildProc.stderr);\n if (buildProc.stdout) console.log(buildProc.stdout);\n process.exitCode = 1;\n return;\n }\n\n logOk(`Binary built (${S.dim(outfile)})`);\n\n // Step 2: Run the compiled binary with serve args\n const serveArgs = [outfile, \"serve\", \"--port\", opts.port, \"--project-dir\", opts.projectDir];\n if (opts.driver) serveArgs.push(\"--driver\", opts.driver);\n if (opts.model) serveArgs.push(\"--model\", opts.model);\n if (opts.provider) serveArgs.push(\"--provider\", opts.provider);\n if (opts.sessionId) serveArgs.push(\"--session-id\", opts.sessionId);\n\n logInfo(`Running: ${S.dim(serveArgs.join(\" \"))}`);\n console.log();\n\n const [serveBin, ...serveRest] = serveArgs;\n const serveProc = spawn(serveBin as string, serveRest, {\n stdio: \"inherit\",\n env: { ...process.env },\n });\n\n // Cleanup on exit\n function cleanup() {\n try {\n serveProc.kill();\n } catch {}\n try {\n if (existsSync(outfile)) unlinkSync(outfile);\n } catch {}\n }\n\n process.on(\"SIGINT\", () => {\n cleanup();\n process.exit(0);\n });\n process.on(\"SIGTERM\", () => {\n cleanup();\n process.exit(0);\n });\n\n await new Promise<void>((res) => {\n serveProc.on(\"close\", () => res());\n });\n cleanup();\n}\n","import type { LogEntry } from \"@skaile/workspaces/types\";\nimport pc from \"picocolors\";\n\nexport interface FormatOptions {\n json?: boolean;\n nextCursor?: string;\n}\n\n/**\n * Render log entries to stdout. `--json` dumps a single JSON array; otherwise\n * each entry is one timestamp + level + source + message line, with `data` and\n * `error.stack` indented underneath when present.\n */\nexport function formatEntries(entries: LogEntry[], opts: FormatOptions = {}): string {\n if (opts.json) {\n return JSON.stringify(entries, null, 2);\n }\n const lines: string[] = [];\n for (const e of entries) {\n lines.push(...renderEntryLines(e));\n }\n if (opts.nextCursor) {\n lines.push(pc.dim(`... more available. Use --cursor ${opts.nextCursor} to page back.`));\n }\n return lines.join(\"\\n\");\n}\n\n/**\n * Render a single entry for streaming output. In `--json` mode this emits one\n * compact JSON object per line (NDJSON), so consumers can stream-parse the\n * tail. In pretty mode it produces the same multi-line shape as\n * `formatEntries` but for one entry only.\n */\nexport function formatSingleEntry(entry: LogEntry, opts: { json?: boolean } = {}): string {\n if (opts.json) {\n return JSON.stringify(entry);\n }\n return renderEntryLines(entry).join(\"\\n\");\n}\n\nfunction renderEntryLines(e: LogEntry): string[] {\n const lines: string[] = [formatLine(e)];\n if (e.data && Object.keys(e.data).length > 0) {\n lines.push(...formatData(e.data));\n }\n if (e.error) {\n lines.push(...formatError(e.error));\n }\n return lines;\n}\n\nfunction formatLine(e: LogEntry): string {\n const ts = pc.dim(`[${formatTime(e.timestamp)}]`);\n // colorLevel already pads each label to 5 visible chars; padEnd on the\n // ANSI-wrapped string is a no-op (length includes escape sequences).\n const lvl = colorLevel(e.level);\n const src = pc.cyan(`[${formatSource(e.source)}]`);\n return `${ts} ${lvl} ${src} ${e.message}`;\n}\n\nfunction formatTime(iso: string): string {\n // HH:MM:SS.mmm in UTC (matches the spec example).\n const d = new Date(iso);\n if (Number.isNaN(d.getTime())) return iso;\n const hh = String(d.getUTCHours()).padStart(2, \"0\");\n const mm = String(d.getUTCMinutes()).padStart(2, \"0\");\n const ss = String(d.getUTCSeconds()).padStart(2, \"0\");\n const ms = String(d.getUTCMilliseconds()).padStart(3, \"0\");\n return `${hh}:${mm}:${ss}.${ms}`;\n}\n\nfunction formatSource(src: LogEntry[\"source\"]): string {\n if (src.instance) return `${src.kind}:${src.subkind}:${src.instance}`;\n return `${src.kind}:${src.subkind}`;\n}\n\nfunction colorLevel(level: LogEntry[\"level\"]): string {\n switch (level) {\n case \"error\":\n return pc.red(\"ERROR\");\n case \"warn\":\n return pc.yellow(\"WARN \");\n case \"info\":\n return pc.green(\"INFO \");\n case \"debug\":\n return pc.dim(\"DEBUG\");\n default:\n return String(level).toUpperCase();\n }\n}\n\nfunction formatData(data: Record<string, unknown>): string[] {\n const oneLine = JSON.stringify(data);\n if (oneLine.length <= 120) {\n return [` ${pc.dim(\"> data:\")} ${oneLine}`];\n }\n const pretty = JSON.stringify(data, null, 2);\n return [` ${pc.dim(\"> data:\")}`, ...pretty.split(\"\\n\").map((l) => ` ${l}`)];\n}\n\nfunction formatError(err: NonNullable<LogEntry[\"error\"]>): string[] {\n const head = ` ${pc.dim(\"> error:\")} ${pc.red(err.name)}: ${err.message}`;\n if (!err.stack) return [head];\n const stackLines = err.stack\n .split(\"\\n\")\n .filter((l) => l.trim().length > 0)\n .map((l) => ` ${pc.dim(l)}`);\n return [head, ...stackLines];\n}\n","import type { LogEntry } from \"@skaile/workspaces/types\";\n\n/**\n * Shape of a row returned by `SELECT ... FROM log_entries`. Matches the\n * schema written by the agent container's `LogStore` (see\n * `workspaces/core/src/logging`).\n */\nexport interface SqliteLogRow {\n id: string;\n timestamp: string;\n session_id: string;\n kind: string;\n subkind: string;\n instance: string | null;\n level: string;\n message: string;\n data_json: string | null;\n error_json: string | null;\n}\n\n/**\n * Convert a raw SQLite row into a typed `LogEntry`. Used by both the\n * one-shot history query (`local-query`) and the live tail loop\n * (`local-tail`) so the formatter sees identical shapes from either path.\n */\nexport function rowToEntry(row: SqliteLogRow): LogEntry {\n return {\n id: row.id,\n timestamp: row.timestamp,\n sessionId: row.session_id,\n source: {\n kind: row.kind as LogEntry[\"source\"][\"kind\"],\n subkind: row.subkind,\n ...(row.instance ? { instance: row.instance } : {}),\n },\n level: row.level as LogEntry[\"level\"],\n message: row.message,\n ...(row.data_json ? { data: JSON.parse(row.data_json) as Record<string, unknown> } : {}),\n ...(row.error_json ? { error: JSON.parse(row.error_json) as LogEntry[\"error\"] } : {}),\n };\n}\n","import { openSqlite } from \"@skaile/workspaces/core/logging\";\nimport type { LogEntry, LogQuery } from \"@skaile/workspaces/types\";\nimport { rowToEntry, type SqliteLogRow } from \"./sqlite-row.ts\";\n\nexport interface LocalQueryResult {\n entries: LogEntry[];\n nextCursor?: string;\n}\n\n/**\n * Open a SQLite log DB read-only and run a filtered SELECT mirroring the\n * `LogQuery` shape used by `SessionLogsService` in platform. Returns up to\n * `q.limit` (default 200) entries in chronological order with an optional\n * `nextCursor` for backward pagination.\n *\n * Uses the runtime's native SQLite driver — `bun:sqlite` under Bun,\n * `node:sqlite` under Node — via {@link openSqlite}.\n */\nexport function localQuery(\n dbPath: string,\n q: Omit<LogQuery, \"sessionId\"> & { sessionId: string },\n): LocalQueryResult {\n const db = openSqlite(dbPath, { readonly: true });\n try {\n db.exec(\"PRAGMA query_only=1;\");\n const limit = q.limit ?? 200;\n const fetchN = limit + 1; // overshoot by one to detect more-available\n const { sql, params } = buildSelect({ ...q, limit: fetchN });\n const rows = db.prepare(sql).all<SqliteLogRow>(params);\n\n const all = rows.map(rowToEntry);\n const hasMore = all.length > limit;\n const trimmed = hasMore ? all.slice(0, limit) : all;\n // Reverse to chronological for display (SELECT is DESC for cursor pagination).\n const chronological = trimmed.slice().reverse();\n const nextCursor = hasMore ? trimmed[trimmed.length - 1]!.id : undefined;\n return { entries: chronological, ...(nextCursor ? { nextCursor } : {}) };\n } finally {\n db.close();\n }\n}\n\ninterface BuiltSelect {\n sql: string;\n params: Record<string, unknown>;\n}\n\nfunction buildSelect(q: Omit<LogQuery, \"sessionId\"> & { sessionId: string }): BuiltSelect {\n const where: string[] = [\"session_id = $sid\"];\n const params: Record<string, unknown> = { $sid: q.sessionId };\n\n if (q.cursor) {\n where.push(\"id < $cursor\");\n params.$cursor = q.cursor;\n }\n if (q.source?.kind) {\n where.push(\"kind = $kind\");\n params.$kind = q.source.kind;\n }\n if (q.source?.subkind) {\n where.push(\"subkind = $sub\");\n params.$sub = q.source.subkind;\n }\n if (q.source?.instance) {\n where.push(\"instance = $inst\");\n params.$inst = q.source.instance;\n }\n if (q.levels && q.levels.length > 0) {\n const placeholders = q.levels.map((_, i) => `$lvl${i}`).join(\", \");\n where.push(`level IN (${placeholders})`);\n q.levels.forEach((lvl, i) => {\n params[`$lvl${i}`] = lvl;\n });\n }\n if (q.since) {\n where.push(\"timestamp >= $since\");\n params.$since = q.since;\n }\n if (q.until) {\n where.push(\"timestamp <= $until\");\n params.$until = q.until;\n }\n if (q.search) {\n where.push(\"message LIKE $search\");\n params.$search = `%${q.search}%`;\n }\n\n const limit = q.limit ?? 200;\n params.$limit = limit;\n\n const sql = `\n SELECT id, timestamp, session_id, kind, subkind, instance, level, message, data_json, error_json\n FROM log_entries\n WHERE ${where.join(\" AND \")}\n ORDER BY id DESC\n LIMIT $limit\n `;\n return { sql, params };\n}\n","import { openSqlite } from \"@skaile/workspaces/core/logging\";\nimport type { LogEntry, LogQuery } from \"@skaile/workspaces/types\";\nimport { rowToEntry, type SqliteLogRow } from \"./sqlite-row.ts\";\n\nexport interface LocalTailOptions {\n dbPath: string;\n query: Omit<LogQuery, \"sessionId\"> & { sessionId: string };\n /** Poll interval in milliseconds (default 500). */\n intervalMs?: number;\n /** Called once per new entry, in chronological order. */\n onEntry: (entry: LogEntry) => void;\n /** Aborts the loop cleanly. */\n signal?: AbortSignal;\n /**\n * Initial cursor: only entries with `id > startAfterId` are streamed.\n * Used to skip rows already printed by the history snapshot before the\n * tail loop took over.\n */\n startAfterId?: string;\n}\n\nconst DEFAULT_INTERVAL_MS = 500;\nconst TAIL_BATCH_LIMIT = 200;\n\n/**\n * Live-poll a SQLite log DB and stream new entries to `onEntry`. Re-opens the\n * db read-only on every iteration (cheap; survives WAL rotation, hibernation,\n * and stale connections). Returns when `signal` is aborted.\n */\nexport async function localTail(opts: LocalTailOptions): Promise<void> {\n const intervalMs = opts.intervalMs ?? DEFAULT_INTERVAL_MS;\n let lastSeen = opts.startAfterId ?? \"\";\n\n while (!opts.signal?.aborted) {\n const db = openSqlite(opts.dbPath, { readonly: true });\n try {\n db.exec(\"PRAGMA query_only=1;\");\n const { sql, params } = buildTailSelect({ ...opts.query, lastSeen });\n const rows = db.prepare(sql).all<SqliteLogRow>(params);\n for (const row of rows) {\n const entry = rowToEntry(row);\n opts.onEntry(entry);\n if (entry.id > lastSeen) lastSeen = entry.id;\n }\n } finally {\n db.close();\n }\n\n if (opts.signal?.aborted) return;\n await sleepUnlessAborted(intervalMs, opts.signal);\n }\n}\n\ninterface BuiltSelect {\n sql: string;\n params: Record<string, unknown>;\n}\n\n/**\n * Tail-specific SELECT: `id > $lastSeen` instead of `id < $cursor`,\n * `ORDER BY id ASC` (chronological) instead of DESC, and a fixed\n * `LIMIT 200` per batch to bound a single iteration. Mirrors the rest of\n * the filter logic in `local-query`'s `buildSelect`.\n */\nfunction buildTailSelect(\n q: Omit<LogQuery, \"sessionId\" | \"cursor\" | \"limit\"> & {\n sessionId: string;\n lastSeen: string;\n },\n): BuiltSelect {\n const where: string[] = [\"session_id = $sid\", \"id > $lastSeen\"];\n const params: Record<string, unknown> = {\n $sid: q.sessionId,\n $lastSeen: q.lastSeen,\n };\n\n if (q.source?.kind) {\n where.push(\"kind = $kind\");\n params.$kind = q.source.kind;\n }\n if (q.source?.subkind) {\n where.push(\"subkind = $sub\");\n params.$sub = q.source.subkind;\n }\n if (q.source?.instance) {\n where.push(\"instance = $inst\");\n params.$inst = q.source.instance;\n }\n if (q.levels && q.levels.length > 0) {\n const placeholders = q.levels.map((_, i) => `$lvl${i}`).join(\", \");\n where.push(`level IN (${placeholders})`);\n q.levels.forEach((lvl, i) => {\n params[`$lvl${i}`] = lvl;\n });\n }\n if (q.since) {\n where.push(\"timestamp >= $since\");\n params.$since = q.since;\n }\n if (q.until) {\n where.push(\"timestamp <= $until\");\n params.$until = q.until;\n }\n if (q.search) {\n where.push(\"message LIKE $search\");\n params.$search = `%${q.search}%`;\n }\n\n params.$limit = TAIL_BATCH_LIMIT;\n\n const sql = `\n SELECT id, timestamp, session_id, kind, subkind, instance, level, message, data_json, error_json\n FROM log_entries\n WHERE ${where.join(\" AND \")}\n ORDER BY id ASC\n LIMIT $limit\n `;\n return { sql, params };\n}\n\nfunction sleepUnlessAborted(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise<void>((resolve) => {\n if (signal?.aborted) {\n resolve();\n return;\n }\n const timer = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n","/**\n * Parse a `--since` / `--until` value into an ISO 8601 timestamp.\n *\n * Accepts either:\n * - Relative shorthand: `30s`, `15m`, `2h`, `1d` — interpreted as `now - duration`.\n * - ISO 8601 string parseable by `Date.parse()`.\n *\n * Throws on unparseable input with a helpful message.\n */\nexport function parseTime(input: string, now: Date = new Date()): string {\n const trimmed = input.trim();\n if (!trimmed) {\n throw new Error(`Cannot parse empty time value`);\n }\n\n const relMatch = /^(\\d+)\\s*(s|m|h|d)$/i.exec(trimmed);\n if (relMatch) {\n const amount = Number.parseInt(relMatch[1]!, 10);\n const unit = relMatch[2]!.toLowerCase();\n const ms = amount * unitMs(unit);\n return new Date(now.getTime() - ms).toISOString();\n }\n\n const parsed = Date.parse(trimmed);\n if (!Number.isNaN(parsed)) {\n return new Date(parsed).toISOString();\n }\n\n throw new Error(\n `Unparseable time value: \"${input}\". Expected ISO 8601 (e.g. 2026-05-01T10:00:00Z) or a relative shorthand (30s, 15m, 2h, 1d).`,\n );\n}\n\nfunction unitMs(unit: string): number {\n switch (unit) {\n case \"s\":\n return 1000;\n case \"m\":\n return 60_000;\n case \"h\":\n return 3_600_000;\n case \"d\":\n return 86_400_000;\n default:\n throw new Error(`Unknown time unit: ${unit}`);\n }\n}\n","import type { LogEntry, LogQuery } from \"@skaile/workspaces/types\";\nimport { createTRPCUntypedClient, httpLink } from \"@trpc/client\";\n\nexport interface RemoteQueryResult {\n entries: LogEntry[];\n nextCursor?: string;\n}\n\n/**\n * Call the platform tRPC `workspace.queryLogs` procedure.\n *\n * Untyped client — the platform AppRouter is not exported as an installable\n * package across the workspaces / platform repo boundary. The shape of\n * the `queryLogs` procedure is stable and documented in\n * `platform/backend/libs/router-trpc/src/routes/workspace.route.ts`.\n *\n * The procedure expects:\n * { projectId, sessionId?, query: LogQuery (without sessionId) }\n * and returns:\n * { entries: LogEntry[], nextCursor?: string }\n */\nexport async function remoteQuery(args: {\n url: string;\n token?: string;\n projectId: string;\n sessionId: string;\n query: Omit<LogQuery, \"sessionId\">;\n}): Promise<RemoteQueryResult> {\n const trpcUrl = normalizeTrpcUrl(args.url);\n // Untyped client — the platform AppRouter is not exported across the repo\n // boundary. Procedure path + input shape are validated at runtime by the\n // platform's Zod schema.\n const client = createTRPCUntypedClient({\n links: [\n httpLink({\n url: trpcUrl,\n headers: () => (args.token ? { authorization: `Bearer ${args.token}` } : {}),\n }),\n ],\n });\n\n const result = (await client.query(\"workspace.queryLogs\", {\n projectId: args.projectId,\n sessionId: args.sessionId,\n query: args.query,\n })) as RemoteQueryResult;\n // Platform returns DESC (newest first) to keep cursor pagination natural.\n // Reverse to chronological so remote output matches local mode and the\n // formatter reads top-to-bottom in time order.\n return { ...result, entries: result.entries.slice().reverse() };\n}\n\nfunction normalizeTrpcUrl(url: string): string {\n const trimmed = url.replace(/\\/+$/, \"\");\n if (trimmed.endsWith(\"/trpc\")) return trimmed;\n return `${trimmed}/trpc`;\n}\n","import type { LogEntry, LogQuery } from \"@skaile/workspaces/types\";\nimport { createTRPCUntypedClient, httpSubscriptionLink } from \"@trpc/client\";\n\nexport interface RemoteTailOptions {\n url: string;\n token?: string;\n projectId: string;\n sessionId: string;\n /**\n * Same shape as the history `LogQuery`. The platform's `onLogEntry`\n * subscription does NOT filter — filters are applied client-side here so\n * the user sees a consistent view between history and tail.\n */\n query: Omit<LogQuery, \"sessionId\">;\n signal?: AbortSignal;\n onEntry: (entry: LogEntry) => void;\n}\n\n/**\n * Subscribe to the platform's `workspace.onLogEntry` SSE stream and forward\n * each entry (after client-side filtering) to `onEntry`. Resolves cleanly\n * when `signal` is aborted.\n */\nexport async function remoteTail(opts: RemoteTailOptions): Promise<void> {\n const trpcUrl = normalizeTrpcUrl(opts.url);\n const client = createTRPCUntypedClient({\n links: [\n httpSubscriptionLink({\n url: trpcUrl,\n eventSourceOptions: () => ({\n // EventSource init dict; Bun ignores unknown fields.\n ...(opts.token ? { headers: { authorization: `Bearer ${opts.token}` } } : {}),\n }),\n }),\n ],\n });\n\n const filter = makeFilter(opts.query);\n\n return new Promise<void>((resolve, reject) => {\n let settled = false;\n const finish = (err?: unknown) => {\n if (settled) return;\n settled = true;\n try {\n sub.unsubscribe();\n } catch {\n // best-effort\n }\n opts.signal?.removeEventListener(\"abort\", onAbort);\n if (err) reject(err);\n else resolve();\n };\n\n const onAbort = () => finish();\n if (opts.signal?.aborted) {\n // Avoid subscribing if already aborted.\n resolve();\n return;\n }\n opts.signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n const sub = client.subscription(\n \"workspace.onLogEntry\",\n { projectId: opts.projectId, sessionId: opts.sessionId },\n {\n onData: (raw) => {\n const entry = raw as LogEntry;\n if (filter(entry)) opts.onEntry(entry);\n },\n onError: (err) => finish(err),\n onComplete: () => finish(),\n onStopped: () => finish(),\n },\n );\n });\n}\n\nfunction normalizeTrpcUrl(url: string): string {\n const trimmed = url.replace(/\\/+$/, \"\");\n if (trimmed.endsWith(\"/trpc\")) return trimmed;\n return `${trimmed}/trpc`;\n}\n\n/**\n * Build a client-side predicate matching `local-query`'s SQL filters.\n * Applied after each yielded entry from the SSE stream because the platform\n * route does not pre-filter.\n */\nfunction makeFilter(q: Omit<LogQuery, \"sessionId\">): (e: LogEntry) => boolean {\n const sinceMs = q.since ? Date.parse(q.since) : undefined;\n const untilMs = q.until ? Date.parse(q.until) : undefined;\n const searchLower = q.search ? q.search.toLowerCase() : undefined;\n const levelSet = q.levels && q.levels.length > 0 ? new Set(q.levels) : undefined;\n const kind = q.source?.kind;\n const subkind = q.source?.subkind;\n const instance = q.source?.instance;\n\n return (e) => {\n if (kind && e.source.kind !== kind) return false;\n if (subkind && e.source.subkind !== subkind) return false;\n if (instance && e.source.instance !== instance) return false;\n if (levelSet && !levelSet.has(e.level)) return false;\n if (sinceMs !== undefined) {\n const ts = Date.parse(e.timestamp);\n if (!Number.isNaN(ts) && ts < sinceMs) return false;\n }\n if (untilMs !== undefined) {\n const ts = Date.parse(e.timestamp);\n if (!Number.isNaN(ts) && ts > untilMs) return false;\n }\n if (searchLower && !e.message.toLowerCase().includes(searchLower)) return false;\n return true;\n };\n}\n","import { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport path from \"node:path\";\n\nexport type ResolvedMode =\n | { mode: \"local\"; dbPath: string }\n | { mode: \"remote\"; url: string; token?: string };\n\nexport interface ResolveOpts {\n forceLocal?: boolean;\n forceRemote?: boolean;\n projectDir?: string;\n platformUrl?: string;\n}\n\nconst MAX_WALK_LEVELS = 6;\n\n/**\n * Decide whether to read from a local SQLite log DB or call the platform via\n * tRPC.\n *\n * Resolution rules (in order):\n * - `--local` and `--remote` together → throws.\n * - `--local` → search the project tree for `.skaile/logs.db`. Throws if not found.\n * - `--remote` → require a platform URL (flag, env, or settings).\n * - Auto: prefer local if a `.skaile/logs.db` is found in the workspace tree;\n * otherwise fall back to remote if a URL is configured. Throws otherwise.\n */\nexport function resolveMode(opts: ResolveOpts): ResolvedMode {\n if (opts.forceLocal && opts.forceRemote) {\n throw new Error(\"Cannot use both --local and --remote\");\n }\n\n const startDir = path.resolve(opts.projectDir ?? process.cwd());\n const localDb = findLogsDb(startDir);\n\n if (opts.forceLocal) {\n if (!localDb) {\n throw new Error(\n `Local mode requested but no .skaile/logs.db found within ${MAX_WALK_LEVELS} levels of ${startDir}`,\n );\n }\n return { mode: \"local\", dbPath: localDb };\n }\n\n const remoteUrl = opts.platformUrl ?? readPlatformUrlFromEnvOrSettings();\n const token = readApiToken();\n\n if (opts.forceRemote) {\n if (!remoteUrl) {\n throw new Error(\n `Remote mode requested but no platform URL configured. Use --platform-url, set SKAILE_PLATFORM_URL, or add \"platformUrl\" to ~/.skaile/settings.json.`,\n );\n }\n return { mode: \"remote\", url: remoteUrl, token };\n }\n\n // Auto-detect.\n if (localDb) {\n return { mode: \"local\", dbPath: localDb };\n }\n if (remoteUrl) {\n return { mode: \"remote\", url: remoteUrl, token };\n }\n throw new Error(\n `No local .skaile/logs.db found in ${startDir} and no platform URL configured. Use --project-dir to point at a workspace, or configure --platform-url / SKAILE_PLATFORM_URL.`,\n );\n}\n\nfunction findLogsDb(startDir: string): string | undefined {\n let dir = startDir;\n for (let i = 0; i < MAX_WALK_LEVELS; i++) {\n const candidate = path.join(dir, \".skaile\", \"logs.db\");\n if (existsSync(candidate)) {\n try {\n if (statSync(candidate).isFile()) return candidate;\n } catch {\n // ignore\n }\n }\n const parent = path.dirname(dir);\n if (parent === dir) return undefined;\n dir = parent;\n }\n return undefined;\n}\n\nfunction readPlatformUrlFromEnvOrSettings(): string | undefined {\n const envUrl = process.env.SKAILE_PLATFORM_URL;\n if (envUrl) return envUrl;\n const settings = readGlobalSettings();\n if (typeof settings.platformUrl === \"string\" && settings.platformUrl) {\n return settings.platformUrl;\n }\n return undefined;\n}\n\nfunction readApiToken(): string | undefined {\n const envToken = process.env.SKAILE_API_TOKEN;\n if (envToken) return envToken;\n const settings = readGlobalSettings();\n if (typeof settings.apiToken === \"string\" && settings.apiToken) {\n return settings.apiToken;\n }\n return undefined;\n}\n\nfunction readGlobalSettings(): Record<string, unknown> {\n try {\n const settingsPath = path.join(homedir(), \".skaile\", \"settings.json\");\n if (!existsSync(settingsPath)) return {};\n return JSON.parse(readFileSync(settingsPath, \"utf8\")) as Record<string, unknown>;\n } catch {\n return {};\n }\n}\n","import type { LogEntry, LogLevel, LogQuery } from \"@skaile/workspaces/types\";\nimport { Command } from \"commander\";\nimport { logErr } from \"../../helpers.ts\";\nimport { formatEntries, formatSingleEntry } from \"./format.ts\";\nimport { localQuery } from \"./local-query.ts\";\nimport { localTail } from \"./local-tail.ts\";\nimport { parseTime } from \"./parse-time.ts\";\nimport { remoteQuery } from \"./remote-query.ts\";\nimport { remoteTail } from \"./remote-tail.ts\";\nimport { resolveMode } from \"./resolve-mode.ts\";\n\nconst VALID_LEVELS = new Set<LogLevel>([\"debug\", \"info\", \"warn\", \"error\"]);\n\ninterface CliOpts {\n kind?: string;\n subkind?: string;\n instance?: string;\n level?: string[];\n since?: string;\n until?: string;\n search?: string;\n limit?: string;\n json?: boolean;\n local?: boolean;\n remote?: boolean;\n platformUrl?: string;\n projectDir?: string;\n projectId?: string;\n cursor?: string;\n tail?: boolean;\n}\n\n/**\n * Build the `skaile session logs <sessionId>` subcommand.\n *\n * Two resolution modes:\n * - Local (auto when `<workspace>/.skaile/logs.db` is found): open SQLite RO\n * and run a filtered SELECT. Zero round-trip.\n * - Remote (auto when no local DB but a platform URL is configured): call\n * `workspace.queryLogs` over tRPC. Requires `--project-id`.\n *\n * Override auto-detect with `--local` / `--remote`.\n *\n * Pass `--tail` to follow new entries after the history snapshot. Local mode\n * polls the SQLite file every 500ms; remote mode subscribes to the\n * `workspace.onLogEntry` SSE stream. Ctrl-C exits cleanly with code 0.\n */\nexport function makeSessionLogsCommand(): Command {\n const cmd = new Command(\"logs\")\n .description(\"Query the per-session structured debug log store\")\n .argument(\"<sessionId>\", \"Session ID to query\")\n .option(\"--kind <kind>\", \"Filter by source kind (mount, connector, mcp, runner, ...)\")\n .option(\"--subkind <subkind>\", \"Filter by source subkind\")\n .option(\"--instance <instance>\", \"Filter by source instance\")\n .option(\n \"--level <level>\",\n \"Filter by level (debug|info|warn|error). Repeatable.\",\n collectLevel,\n [] as string[],\n )\n .option(\"--since <iso|relative>\", \"Lower-bound timestamp (ISO 8601 or 30s/15m/2h/1d)\")\n .option(\"--until <iso>\", \"Upper-bound timestamp\")\n .option(\"--search <text>\", \"Substring match on message (LIKE %text%)\")\n .option(\"--limit <n>\", \"Max entries to return (default 200)\")\n .option(\"--cursor <id>\", \"Pagination cursor (returns entries with id < cursor)\")\n .option(\"--json\", \"Emit raw JSON instead of pretty TTY output\")\n .option(\"--local\", \"Force local SQLite read (skip remote)\")\n .option(\"--remote\", \"Force remote tRPC call (skip local)\")\n .option(\"--platform-url <url>\", \"Platform base URL (remote mode)\")\n .option(\"--project-id <id>\", \"Project ID (required for remote mode)\")\n .option(\"--project-dir <dir>\", \"Workspace search root (default: cwd)\")\n .option(\"--tail\", \"Stream new entries as they are written (Ctrl-C to stop)\")\n .action(async (sessionId: string, opts: CliOpts) => {\n try {\n await runSessionLogs(sessionId, opts);\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n });\n\n return cmd;\n}\n\nasync function runSessionLogs(sessionId: string, opts: CliOpts): Promise<void> {\n const levels = (opts.level ?? []).map(validateLevel);\n const query: Omit<LogQuery, \"sessionId\"> = {\n ...(opts.kind || opts.subkind || opts.instance\n ? {\n source: {\n ...(opts.kind ? { kind: opts.kind as NonNullable<LogQuery[\"source\"]>[\"kind\"] } : {}),\n ...(opts.subkind ? { subkind: opts.subkind } : {}),\n ...(opts.instance ? { instance: opts.instance } : {}),\n },\n }\n : {}),\n ...(levels.length > 0 ? { levels } : {}),\n ...(opts.since ? { since: parseTime(opts.since) } : {}),\n ...(opts.until ? { until: parseTime(opts.until) } : {}),\n ...(opts.search ? { search: opts.search } : {}),\n ...(opts.limit ? { limit: parsePositiveInt(opts.limit, \"--limit\") } : { limit: 200 }),\n ...(opts.cursor ? { cursor: opts.cursor } : {}),\n };\n\n const resolved = resolveMode({\n forceLocal: opts.local,\n forceRemote: opts.remote,\n projectDir: opts.projectDir,\n platformUrl: opts.platformUrl,\n });\n\n let entries: LogEntry[];\n let nextCursor: string | undefined;\n\n if (resolved.mode === \"local\") {\n const result = localQuery(resolved.dbPath, { ...query, sessionId });\n entries = result.entries;\n nextCursor = result.nextCursor;\n } else {\n if (!opts.projectId) {\n throw new Error(\n \"Remote mode requires --project-id (the platform tRPC procedure scopes by project).\",\n );\n }\n const result = await remoteQuery({\n url: resolved.url,\n ...(resolved.token ? { token: resolved.token } : {}),\n projectId: opts.projectId,\n sessionId,\n query,\n });\n entries = result.entries;\n nextCursor = result.nextCursor;\n }\n\n const out = formatEntries(entries, {\n json: opts.json,\n // In tail mode the cursor hint is misleading (we are about to follow live\n // entries, not page back), so suppress it.\n ...(nextCursor && !opts.tail ? { nextCursor } : {}),\n });\n if (out.length > 0) console.log(out);\n\n if (opts.tail) {\n await runTail({\n sessionId,\n opts,\n resolved,\n query,\n historyEntries: entries,\n });\n }\n}\n\ninterface RunTailArgs {\n sessionId: string;\n opts: CliOpts;\n resolved: ReturnType<typeof resolveMode>;\n query: Omit<LogQuery, \"sessionId\">;\n historyEntries: LogEntry[];\n}\n\nasync function runTail(args: RunTailArgs): Promise<void> {\n const controller = new AbortController();\n const onSigint = () => {\n controller.abort();\n // Ctrl-C is normal termination of a tail loop, not an error.\n process.exitCode = 0;\n };\n process.on(\"SIGINT\", onSigint);\n\n const emit = (entry: LogEntry) => {\n process.stdout.write(`${formatSingleEntry(entry, { json: args.opts.json })}\\n`);\n };\n\n try {\n if (args.resolved.mode === \"local\") {\n // Skip rows already shown by the history snapshot.\n const lastHistoryId = args.historyEntries.at(-1)?.id;\n await localTail({\n dbPath: args.resolved.dbPath,\n query: { ...args.query, sessionId: args.sessionId },\n ...(lastHistoryId ? { startAfterId: lastHistoryId } : {}),\n onEntry: emit,\n signal: controller.signal,\n });\n } else {\n if (!args.opts.projectId) {\n throw new Error(\"Remote tail requires --project-id\");\n }\n await remoteTail({\n url: args.resolved.url,\n ...(args.resolved.token ? { token: args.resolved.token } : {}),\n projectId: args.opts.projectId,\n sessionId: args.sessionId,\n query: args.query,\n signal: controller.signal,\n onEntry: emit,\n });\n }\n } finally {\n process.removeListener(\"SIGINT\", onSigint);\n }\n}\n\nfunction collectLevel(value: string, prev: string[]): string[] {\n return [...prev, value];\n}\n\nfunction validateLevel(level: string): LogLevel {\n if (!VALID_LEVELS.has(level as LogLevel)) {\n throw new Error(`Invalid --level: ${level}. Expected one of debug|info|warn|error.`);\n }\n return level as LogLevel;\n}\n\nfunction parsePositiveInt(value: string, flag: string): number {\n const n = Number.parseInt(value, 10);\n if (!Number.isFinite(n) || n <= 0) {\n throw new Error(`${flag} must be a positive integer (got ${value})`);\n }\n return n;\n}\n","import path from \"node:path\";\nimport {\n deleteSession,\n listSessions,\n loadSession,\n loadSessionById,\n setCurrentSession,\n} from \"@skaile/workspaces/runner\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { logErr, logInfo, logOk, S } from \"../helpers.ts\";\nimport { makeSessionLogsCommand } from \"./session-logs/index.ts\";\n\n/**\n * Create the `skaile session` command group.\n *\n * Manages the sessions stored under `.skaile/sessions/` in a project directory.\n * Subcommands: `list` (tabular view of all sessions with status and age),\n * `show <run-id>` (full JSON dump of a single session), `switch <run-id>`\n * (update the current session pointer), `delete <run-id>` (remove the session\n * file). All subcommands accept `--project-dir` to target a different directory.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/session#make-session-command\n */\nexport function makeSessionCommand(): Command {\n const cmd = new Command(\"session\").description(\"Manage sessions\");\n\n cmd\n .command(\"list\")\n .description(\"List all sessions for a project\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const sessions = await listSessions(projectDir);\n const current = await loadSession(projectDir);\n if (sessions.length === 0) {\n logInfo(\"No sessions found.\");\n return;\n }\n\n console.log();\n console.log(S.heading(` Sessions in ${projectDir}`));\n console.log();\n console.log(\n ` ${S.dim(\" \")} ${S.dim(\"ID\".padEnd(10))}${S.dim(\"FLOW\".padEnd(22))}${S.dim(\"NODES\".padEnd(7))}${S.dim(\"LABEL\".padEnd(22))}${S.dim(\"STATUS\".padEnd(14))}${S.dim(\"AGE\")}`,\n );\n console.log(` ${S.dim(\" \")} ${S.rule(75)}`);\n for (const s of sessions) {\n const isCurrent = current?.runId === s.runId;\n const marker = isCurrent ? pc.cyan(\" ▶ \") : \" \";\n const age = Math.round((Date.now() - new Date(s.updatedAt).getTime()) / 60000);\n const label = (s.label ?? \"\").padEnd(20);\n const statusColor =\n s.status === \"complete\"\n ? pc.green\n : s.status === \"failed\"\n ? pc.red\n : s.status === \"running\"\n ? pc.cyan\n : pc.dim;\n const status = statusColor((s.status ?? \"\").padEnd(12));\n console.log(\n `${marker} ${S.dim(s.runId.slice(0, 8))} ${s.flowId.padEnd(20)} ${label} ${status} ${S.dim(`${age}m ago`)}`,\n );\n }\n console.log();\n });\n\n cmd\n .command(\"show <run-id>\")\n .description(\"Show a specific session\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (runId: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n const session = await loadSessionById(projectDir, runId);\n if (!session) {\n logErr(`Session not found: ${runId}`);\n process.exit(1);\n }\n console.log(JSON.stringify(session, null, 2));\n });\n\n cmd\n .command(\"switch <run-id>\")\n .description(\"Switch the current session\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (runId: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n await setCurrentSession(projectDir, runId);\n logOk(`Switched to session: ${S.dim(runId.slice(0, 8))}`);\n });\n\n cmd\n .command(\"delete <run-id>\")\n .description(\"Delete a session\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (runId: string, opts) => {\n const projectDir = path.resolve(opts.projectDir);\n await deleteSession(projectDir, runId);\n logOk(`Deleted session: ${S.dim(runId.slice(0, 8))}`);\n });\n\n cmd.addCommand(makeSessionLogsCommand());\n\n cmd.action(() => cmd.help());\n\n return cmd;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { DriverTarget } from \"@skaile/workspaces/core\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { kindColor, kindColorPad, logErr, logInfo, S } from \"../helpers.ts\";\n\nconst SYNC_ICONS: Record<string, string> = {\n synced: pc.green(\"synced\"),\n outdated: pc.yellow(\"outdated\"),\n local: pc.cyan(\"local\"),\n error: pc.red(\"error\"),\n unknown: pc.dim(\"—\"),\n};\n\nfunction showOverview(am: AssetManager): void {\n const result = am.overview();\n\n if (result.total === 0) {\n logInfo(\"No assets deployed. Run `skaile install` first.\");\n return;\n }\n\n console.log();\n console.log(S.heading(\" Asset Overview\"));\n\n if (result.repos.length > 0) {\n console.log();\n for (const r of result.repos) {\n const icon = r.error ? pc.red(\"!\") : r.upToDate ? pc.green(\"✓\") : pc.yellow(\"↓\");\n const status = r.error\n ? pc.red(r.error)\n : r.upToDate\n ? pc.green(\"up to date\")\n : pc.yellow(`${r.behind} behind`);\n console.log(` ${icon} ${S.cmd(r.name)} ${pc.dim(`[${r.kind}]`)} ${status}`);\n }\n }\n\n const nameW = Math.max(4, ...[...result.byDomain.values()].flat().map((e) => e.name.length));\n const kindW = 8;\n\n for (const [domain, entries] of result.byDomain) {\n console.log();\n console.log(` ${S.heading(domain)} ${pc.dim(`(${entries.length})`)}`);\n console.log(` ${S.rule(nameW + kindW + 20)}`);\n for (const e of entries) {\n const sync = SYNC_ICONS[e.syncStatus] ?? SYNC_ICONS.unknown;\n const ver = e.version ? pc.dim(` v${e.version}`) : \"\";\n console.log(` ${kindColorPad(e.kind, kindW)} ${S.cmd(e.name.padEnd(nameW))} ${sync}${ver}`);\n }\n }\n\n console.log();\n console.log(` ${pc.dim(`${result.total} assets deployed`)}`);\n console.log();\n}\n\nfunction showAsset(am: AssetManager, kind: string, name: string): void {\n const entry = am.info(`${kind}:${name}`);\n\n if (entry?.source && fs.existsSync(entry.source)) {\n console.log();\n console.log(` ${kindColor(entry.kind)} ${S.heading(entry.name)}`);\n console.log(` ${S.rule(40)}`);\n console.log();\n console.log(fs.readFileSync(entry.source, \"utf-8\"));\n return;\n }\n\n logErr(`Asset not found: ${kind}:${name}`);\n process.exit(1);\n}\n\n/**\n * Creates the `skaile show` command.\n *\n * With no arguments prints a deployed-asset overview (grouped by domain with\n * sync status). With `kind name` or `kind:name` arguments prints the raw\n * source content of a specific deployed asset.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/show#make-show-command\n */\nexport function makeShowCommand(): Command {\n return new Command(\"show\")\n .description(\"Show deployed assets overview, or print asset content\")\n .argument(\"[kind]\", \"Asset kind (skill, agent, prompt, flow, bundle, contract)\")\n .argument(\"[name]\", \"Asset name\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--target <agent>\", \"Agent framework\", \"claude-code\")\n .action((kind: string | undefined, name: string | undefined, opts) => {\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n driverTarget: opts.target as DriverTarget,\n });\n\n if (!kind) {\n // No arguments: show overview\n showOverview(am);\n } else if (!name) {\n // One argument: might be \"kind:name\" format\n if (kind.includes(\":\")) {\n const [k, n] = kind.split(\":\");\n showAsset(am, k, n);\n } else {\n logErr(\"Usage: skaile show [kind name] or skaile show (no args for overview)\");\n process.exit(1);\n }\n } else {\n showAsset(am, kind, name);\n }\n });\n}\n","/**\n * `skaile source manifest …` — sidecar manifest lifecycle, refactored under\n * the `source` noun (was `source sidecar …`).\n *\n * The verbs are stubs for now — the real wiring lands when the publish path\n * through `POST /sources/<id>/manifest` is finalised on the store backend.\n * Each subcommand exits with code 2 plus a clear \"not yet wired\" hint so\n * smoke tests can verify the surface without depending on the server.\n *\n * @docLink cli/commands/source#manifest\n */\n\nimport type { Command } from \"commander\";\nimport { logErr } from \"../helpers.ts\";\n\nconst NOT_WIRED_MSG =\n \"`skaile source manifest *` is scaffolded but not yet wired. \" +\n \"Server-side endpoint (`POST /sources/<id>/manifest`) lands in a follow-up PR.\";\n\nfunction notWired(verb: string): never {\n logErr(`${NOT_WIRED_MSG} (verb: source manifest ${verb})`);\n process.exit(2);\n}\n\n/**\n * Append the `manifest` sub-tree to a `source` command.\n *\n * Called from `makeSourceCommand()` in `source.ts`.\n */\nexport function addSourceManifestCommands(src: Command): void {\n const manifest = src.command(\"manifest\").description(\"Sidecar manifest lifecycle for a source\");\n\n manifest\n .command(\"init <src>\")\n .description(\"Start a sidecar manifest for a source\")\n .action(() => notWired(\"init\"));\n\n manifest\n .command(\"edit <src>\")\n .description(\"Open the sidecar manifest in $EDITOR\")\n .action(() => notWired(\"edit\"));\n\n manifest\n .command(\"rebuild <src>\")\n .description(\"Re-derive the manifest after an upstream change\")\n .option(\"--merge\", \"Merge with existing entries instead of overwriting\", false)\n .action(() => notWired(\"rebuild\"));\n\n manifest\n .command(\"verify <src>\")\n .description(\"Verify hashes, deps, and schema\")\n .option(\"--strict\", \"Fail on advisory checks\", false)\n .action(() => notWired(\"verify\"));\n\n manifest\n .command(\"publish <src>\")\n .description(\"Register the manifest in the store (provenance=curator)\")\n .action(() => notWired(\"publish\"));\n\n manifest\n .command(\"propose <src>\")\n .description(\"Open a PR to upstream with the sidecar manifest\")\n .action(() => notWired(\"propose\"));\n\n manifest\n .command(\"yank <src>\")\n .description(\"Retract a published manifest from the remote store\")\n .option(\"--version <v>\", \"Version to yank\")\n .action(() => notWired(\"yank\"));\n}\n","/**\n * `skaile source …` — manage github sources for the current project.\n *\n * A *source* is a third-party github repo of AI assets. The project's\n * `skaile.yaml` `sources:` array is the source of truth for which sources\n * this project uses. The clone itself lives at `~/.skaile/sources/<name>/`\n * (machine-global cache, shared across projects), and the manifest is\n * mirrored into `~/.skaile/index.db` (machine-global manifest cache).\n *\n * @docLink cli/commands/source\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport * as path from \"node:path\";\nimport { existsSync, rmSync } from \"node:fs\";\nimport {\n findWorkspaceRoot,\n type SourceEntry,\n workspaceConfigFilename,\n WorkspaceYamlEditor,\n} from \"@skaile/workspaces/core\";\nimport { LocalCatalogSource, skaileHomeDir } from \"@skaile/workspaces/library\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport { openLibraryManager } from \"../open-library.ts\";\nimport { createFullRegistry } from \"../open-registry.ts\";\nimport { addSourceManifestCommands } from \"./source-manifest.ts\";\n\nfunction sourcesDir(): string {\n return path.join(skaileHomeDir(), \"sources\");\n}\n\nfunction sourceClonePath(name: string): string {\n return path.join(sourcesDir(), name);\n}\n\nfunction deriveSlug(url: string): string {\n return (\n url\n .replace(/\\.git$/, \"\")\n .split(/[/:]/)\n .pop() ?? \"source\"\n );\n}\n\nfunction requireProjectYamlPath(): string {\n const root = findWorkspaceRoot(process.cwd());\n if (!root) {\n logErr(\n \"No skaile.yaml found in the current directory or any parent. \" +\n \"Run `skaile init` first.\",\n );\n process.exit(1);\n }\n return path.join(root, workspaceConfigFilename());\n}\n\nfunction readProjectSources(yamlPath: string): SourceEntry[] {\n if (!existsSync(yamlPath)) return [];\n try {\n return WorkspaceYamlEditor.load(yamlPath).getSources();\n } catch (err) {\n logErr(`Could not read ${yamlPath}: ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n }\n}\n\n/**\n * Clone the source if its clone directory does not yet exist. When `force` is\n * set, the existing clone is removed and a fresh one is checked out. Returns\n * true when a clone happened.\n */\nfunction ensureClone(entry: SourceEntry, opts: { force?: boolean } = {}): boolean {\n const dest = sourceClonePath(entry.name);\n if (existsSync(dest)) {\n if (!opts.force) return false;\n rmSync(dest, { recursive: true, force: true });\n }\n const args = [\"clone\", entry.url, dest];\n if (entry.branch) args.splice(1, 0, \"--branch\", entry.branch);\n const clone = spawnSync(\"git\", args, { stdio: \"inherit\" });\n if (clone.status !== 0) {\n logErr(`git clone failed for ${entry.url}`);\n process.exit(1);\n }\n return true;\n}\n\n/**\n * Refresh the machine-global manifest cache for `entry` by running discovery\n * and upserting AssetDefinitions into `~/.skaile/index.db`. Creates the\n * libraries-table cache row if missing (ownership: reader = cache state).\n */\nasync function refreshManifestCache(entry: SourceEntry): Promise<{\n assetsFound: number;\n assetsUpdated: number;\n errors: string[];\n}> {\n const { manager, library, close } = await openLibraryManager();\n try {\n const dest = sourceClonePath(entry.name);\n const existing = (await manager.listLibraries()).find((l) => l.name === entry.name);\n const lib =\n existing ??\n (await manager.addLibrary({\n name: entry.name,\n path: dest,\n backend: \"git\",\n backendConfig: { url: entry.url, branch: entry.branch ?? \"main\", authHint: \"ssh\" },\n ownership: \"reader\",\n }));\n const catalog = new LocalCatalogSource(library, lib.id, dest, createFullRegistry());\n const result = await catalog.sync();\n await library.syncSource(lib.id);\n return result;\n } finally {\n close();\n }\n}\n\n/** Remove the libraries-table cache row and (optionally) the clone bytes. */\nasync function dropManifestCache(name: string, purgeClone: boolean): Promise<void> {\n const { manager, close } = await openLibraryManager();\n try {\n const existing = (await manager.listLibraries()).find((l) => l.name === name);\n if (existing) {\n await manager.removeLibrary(name, { purge: false });\n }\n } finally {\n close();\n }\n if (purgeClone) {\n const dest = sourceClonePath(name);\n if (existsSync(dest)) rmSync(dest, { recursive: true, force: true });\n }\n}\n\nexport function makeSourceCommand(): Command {\n const cmd = new Command(\"source\").description(\n \"Manage github sources for the current project (recorded in skaile.yaml)\",\n );\n\n // ── source add ──────────────────────────────────────────────────────────\n cmd\n .command(\"add <git-url>\")\n .description(\"Clone a github repo and register it in this project's skaile.yaml\")\n .option(\"--name <slug>\", \"Override the derived slug\")\n .option(\"--branch <branch>\", \"Branch to track (default: main)\")\n .option(\"--force\", \"Remove an existing clone and re-clone\", false)\n .action(async (url: string, opts: { name?: string; branch?: string; force?: boolean }) => {\n const yamlPath = requireProjectYamlPath();\n const slug = opts.name ?? deriveSlug(url);\n const entry: SourceEntry = { name: slug, url };\n if (opts.branch) entry.branch = opts.branch;\n\n const editor = WorkspaceYamlEditor.load(yamlPath);\n const existing = editor.getSources().find((s) => s.name === slug);\n if (existing && existing.url !== url) {\n logErr(\n `A source named \"${slug}\" already exists in ${yamlPath} with a different url ` +\n `(${existing.url}). Pass --name to use a different slug.`,\n );\n process.exit(1);\n }\n editor.setSource(entry);\n editor.save();\n\n const dest = sourceClonePath(slug);\n const preexisting = existsSync(dest);\n const cloned = ensureClone(entry, { force: opts.force });\n if (!cloned) {\n logOk(`Reusing cached clone at ${dest}`);\n } else if (preexisting) {\n logOk(`Re-cloned ${url} → ${dest}`);\n } else {\n logOk(`Cloned ${url} → ${dest}`);\n }\n\n const result = await refreshManifestCache(entry);\n logOk(\n `Indexed ${result.assetsUpdated} of ${result.assetsFound} asset(s) from \"${slug}\".`,\n );\n for (const err of result.errors) logWarn(err);\n logOk(`Source \"${slug}\" registered in ${path.relative(process.cwd(), yamlPath)}.`);\n });\n\n // ── source list ─────────────────────────────────────────────────────────\n cmd\n .command(\"list\")\n .description(\"List sources registered in this project's skaile.yaml\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { json?: boolean }) => {\n const yamlPath = requireProjectYamlPath();\n const sources = readProjectSources(yamlPath);\n if (opts.json) return console.log(JSON.stringify(sources, null, 2));\n if (sources.length === 0) {\n logInfo(\"No sources in skaile.yaml. Run `skaile source add <git-url>` to register one.\");\n return;\n }\n console.log();\n console.log(S.heading(\" Sources\"));\n for (const s of sources) {\n const cached = existsSync(sourceClonePath(s.name)) ? \"\" : S.warn(\" (not cached)\");\n console.log(` ${S.cmd(s.name.padEnd(24))} ${S.dim(s.url)}${cached}`);\n }\n console.log(`\\n ${S.dim(`${sources.length} source(s)`)}\\n`);\n });\n\n // ── source show ─────────────────────────────────────────────────────────\n cmd\n .command(\"show <name>\")\n .description(\"Show details for a source\")\n .action(async (name: string) => {\n const yamlPath = requireProjectYamlPath();\n const entry = readProjectSources(yamlPath).find((s) => s.name === name);\n if (!entry) {\n logErr(`No source named \"${name}\" in ${yamlPath}.`);\n process.exit(1);\n }\n console.log(\n JSON.stringify(\n {\n ...entry,\n clonePath: sourceClonePath(entry.name),\n cached: existsSync(sourceClonePath(entry.name)),\n },\n null,\n 2,\n ),\n );\n });\n\n // ── source remove ───────────────────────────────────────────────────────\n cmd\n .command(\"remove <name>\")\n .description(\"Remove a source from this project's skaile.yaml\")\n .option(\"--purge\", \"Also delete the cached clone from ~/.skaile/sources/\", false)\n .action(async (name: string, opts: { purge: boolean }) => {\n const yamlPath = requireProjectYamlPath();\n const editor = WorkspaceYamlEditor.load(yamlPath);\n const removed = editor.removeSource(name);\n if (!removed) {\n logErr(`No source named \"${name}\" in ${yamlPath}.`);\n process.exit(1);\n }\n editor.save();\n await dropManifestCache(name, opts.purge);\n logOk(\n opts.purge\n ? `Removed source \"${name}\" and purged its clone.`\n : `Removed source \"${name}\" from skaile.yaml (clone left in ~/.skaile/sources/).`,\n );\n });\n\n // ── source sync ─────────────────────────────────────────────────────────\n cmd\n .command(\"sync [name]\")\n .description(\"Pull upstream changes and refresh the manifest cache\")\n .action(async (name: string | undefined) => {\n const yamlPath = requireProjectYamlPath();\n const all = readProjectSources(yamlPath);\n const targets = name ? all.filter((s) => s.name === name) : all;\n if (targets.length === 0) {\n logInfo(name ? `No source named \"${name}\".` : \"No sources in skaile.yaml.\");\n return;\n }\n for (const entry of targets) {\n const dest = sourceClonePath(entry.name);\n if (!existsSync(dest)) {\n ensureClone(entry);\n logOk(`${entry.name}: cloned to ${dest}.`);\n } else {\n const pull = spawnSync(\"git\", [\"pull\", \"--ff-only\"], { cwd: dest, stdio: \"inherit\" });\n if (pull.status !== 0) {\n logWarn(`${entry.name}: git pull failed, skipping manifest refresh.`);\n continue;\n }\n }\n const result = await refreshManifestCache(entry);\n logOk(\n `${entry.name}: indexed ${result.assetsUpdated} of ${result.assetsFound} asset(s).`,\n );\n for (const err of result.errors) logWarn(`${entry.name}: ${err}`);\n }\n });\n\n // ── source patch / propose (stubs) ──────────────────────────────────────\n cmd\n .command(\"patch <ref>\")\n .description(\"Extract an asset for editing against the source\")\n .action((_ref: string) => {\n logErr(\n \"`skaile source patch` is scaffolded but not yet wired. \" +\n \"The patch flow lands in a follow-up PR.\",\n );\n process.exit(2);\n });\n\n cmd\n .command(\"propose <ref>\")\n .description(\"Open a PR with the patch against the source upstream\")\n .action((_ref: string) => {\n logErr(\n \"`skaile source propose` is scaffolded but not yet wired. \" +\n \"The propose flow lands in a follow-up PR.\",\n );\n process.exit(2);\n });\n\n // ── source manifest * ───────────────────────────────────────────────────\n addSourceManifestCommands(cmd);\n\n return cmd;\n}\n","import { Command } from \"commander\";\nimport { logErr, logOk, S } from \"../helpers.ts\";\nimport {\n clearStoreTokens,\n getStoreConfig,\n isStoreAuthenticated,\n saveStoreTokens,\n storeFetch,\n} from \"../store-client.ts\";\n\n/**\n * Creates the `skaile store` command group.\n *\n * Manages authentication and publishing operations against the AI Asset Store.\n * Subcommands: `login` (GitHub OAuth or email/password), `logout`, `whoami`,\n * `publish` (push a new asset version), `yank` (soft-delete a version).\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/store#make-store-command\n */\nexport function makeStoreCommand(): Command {\n const store = new Command(\"store\").description(\"Manage the AI Asset Store\");\n\n // ── login ──\n store\n .command(\"login\")\n .description(\"Authenticate with the store\")\n .option(\"--email <email>\", \"Login with email instead of GitHub\")\n .action(async (opts) => {\n const config = getStoreConfig();\n\n if (opts.email) {\n // Email/password login\n const readline = await import(\"node:readline\");\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n const password = await new Promise<string>((resolve) => {\n rl.question(\"Password: \", (answer) => {\n rl.close();\n resolve(answer);\n });\n });\n\n try {\n const res = await storeFetch<{ jwt: string; refreshToken: string; publisher: any }>(\n config,\n \"/api/auth/login\",\n { method: \"POST\", body: { email: opts.email, password } },\n );\n saveStoreTokens(res.jwt, res.refreshToken);\n logOk(`Logged in as ${S.brand(`@${res.publisher.slug}`)}`);\n } catch (e: any) {\n logErr(e.message);\n process.exit(1);\n }\n } else {\n // GitHub OAuth — open browser\n const loginUrl = `${config.url}/api/auth/login/github`;\n console.log(`\\n Opening browser to authenticate...\\n ${S.dim(loginUrl)}\\n`);\n\n // Start a local server to receive the callback\n const http = await import(\"node:http\");\n const { URL } = await import(\"node:url\");\n\n const server = http.createServer((req, res) => {\n const url = new URL(req.url ?? \"/\", \"http://localhost\");\n const jwt = url.searchParams.get(\"token\");\n const refresh = url.searchParams.get(\"refresh\");\n\n if (jwt && refresh) {\n saveStoreTokens(jwt, refresh);\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\"<h2>Authenticated! You can close this tab.</h2>\");\n logOk(\"Authenticated with the store\");\n server.close();\n } else {\n res.writeHead(400);\n res.end(\"Missing tokens\");\n }\n });\n\n server.listen(0, () => {\n const port = (server.address() as any)?.port;\n const open =\n process.platform === \"darwin\"\n ? \"open\"\n : process.platform === \"win32\"\n ? \"start\"\n : \"xdg-open\";\n import(\"node:child_process\").then(({ exec }) => {\n exec(`${open} \"${loginUrl}\"`);\n });\n console.log(` ${S.dim(`Listening on http://localhost:${port} for callback...`)}`);\n });\n\n // Timeout after 2 minutes\n setTimeout(() => {\n logErr(\"Login timed out\");\n server.close();\n process.exit(1);\n }, 120_000);\n }\n });\n\n // ── logout ──\n store\n .command(\"logout\")\n .description(\"Sign out of the store\")\n .action(async () => {\n const config = getStoreConfig();\n if (config.refreshToken) {\n try {\n await storeFetch(config, \"/api/auth/logout\", {\n method: \"POST\",\n body: { refreshToken: config.refreshToken },\n });\n } catch {\n // ignore — clear locally regardless\n }\n }\n clearStoreTokens();\n logOk(\"Logged out\");\n });\n\n // ── whoami ──\n store\n .command(\"whoami\")\n .description(\"Show current store identity\")\n .action(async () => {\n const config = getStoreConfig();\n if (!isStoreAuthenticated(config)) {\n logErr(\"Not authenticated. Run: skaile store login\");\n process.exit(1);\n }\n\n try {\n const me = await storeFetch<any>(config, \"/api/auth/me\");\n console.log();\n console.log(` ${S.heading(\"Publisher\")} ${S.brand(`@${me.slug}`)}`);\n console.log(` ${S.label(\"Name\")} ${me.displayName}`);\n console.log(` ${S.label(\"Email\")} ${me.email}`);\n console.log(` ${S.label(\"Verified\")} ${me.verified ? S.ok(\"yes\") : S.dim(\"no\")}`);\n console.log();\n } catch (e: any) {\n logErr(e.message);\n process.exit(1);\n }\n });\n\n // ── mode ──\n store\n .command(\"mode <auto|local|remote>\")\n .description(\"Set the catalog resolution mode (not yet wired)\")\n .action((_mode: string) => {\n logErr(\n \"`skaile store mode` is scaffolded but not yet wired. \" +\n \"Store config lives at ~/.skaile/store/config.yaml.\",\n );\n process.exit(2);\n });\n\n // ── search ──\n store\n .command(\"search <query>\")\n .description(\"Search the aggregated catalog (not yet wired)\")\n .action((_query: string) => {\n logErr(\"`skaile store search` is scaffolded but not yet wired.\");\n process.exit(2);\n });\n\n // ── show ──\n store\n .command(\"show <ref>\")\n .description(\"Show details + provenance for a manifest (not yet wired)\")\n .action((_ref: string) => {\n logErr(\"`skaile store show` is scaffolded but not yet wired.\");\n process.exit(2);\n });\n\n // ── favourite / unfavourite ──\n store\n .command(\"favourite <ref>\")\n .description(\"Pin a ref to your favourites (not yet wired)\")\n .action((_ref: string) => {\n logErr(\"`skaile store favourite` is scaffolded but not yet wired.\");\n process.exit(2);\n });\n store\n .command(\"unfavourite <ref>\")\n .description(\"Remove a ref from your favourites (not yet wired)\")\n .action((_ref: string) => {\n logErr(\"`skaile store unfavourite` is scaffolded but not yet wired.\");\n process.exit(2);\n });\n\n // ── sync ──\n store\n .command(\"sync\")\n .description(\"Refresh the local cache from the remote store (not yet wired)\")\n .action(() => {\n logErr(\"`skaile store sync` is scaffolded but not yet wired.\");\n process.exit(2);\n });\n\n // ── push ──\n store\n .command(\"push\")\n .description(\"Push the local store to a git remote (not yet wired)\")\n .option(\"--remote <name>\", \"Git remote name\", \"origin\")\n .action(() => {\n logErr(\"`skaile store push` is scaffolded but not yet wired.\");\n process.exit(2);\n });\n\n // ── yank ──\n store\n .command(\"yank <version>\")\n .description(\"Yank (soft-delete) a published version\")\n .option(\"--asset <ref>\", \"Asset reference (@publisher/slug)\")\n .action(async (version: string, opts) => {\n const config = getStoreConfig();\n if (!isStoreAuthenticated(config)) {\n logErr(\"Not authenticated. Run: skaile store login\");\n process.exit(1);\n }\n\n if (!opts.asset) {\n logErr(\"--asset is required (e.g. --asset @alice/my-skill)\");\n process.exit(1);\n }\n\n const ref = opts.asset.replace(/^@/, \"\");\n const [publisher, slug] = ref.split(\"/\");\n if (!publisher || !slug) {\n logErr(\"Invalid asset ref. Use format: @publisher/slug\");\n process.exit(1);\n }\n\n try {\n await storeFetch(config, `/api/assets/${publisher}/${slug}/${version}/yank`, {\n method: \"PATCH\",\n });\n logOk(`Yanked v${version} of @${publisher}/${slug}`);\n } catch (e: any) {\n logErr(e.message);\n process.exit(1);\n }\n });\n\n return store;\n}\n","import path from \"node:path\";\nimport type { DependencyNode } from \"@skaile/workspaces/asset-manager\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport { colorRef, logInfo } from \"../helpers.ts\";\n\nfunction printTree(node: DependencyNode, prefix = \"\", isLast = true): void {\n const connector = prefix === \"\" ? \"\" : isLast ? \"└─ \" : \"├─ \";\n const line = prefix + connector + colorRef(node.ref);\n console.log(` ${line}`);\n const childPrefix = prefix + (prefix === \"\" ? \"\" : isLast ? \" \" : \"│ \");\n for (let i = 0; i < node.children.length; i++) {\n printTree(node.children[i], childPrefix, i === node.children.length - 1);\n }\n}\n\n/**\n * Creates the `skaile tree` command.\n *\n * Prints the full transitive dependency tree of the installed assets using\n * ASCII art (├─ / └─), with each node coloured by asset kind.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#tree\n */\nexport function makeTreeCommand(): Command {\n return new Command(\"tree\")\n .description(\"Show full dependency tree\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const root = am.tree();\n if (root.children.length === 0) {\n logInfo(\"No dependencies in lock file. Run `skaile install` first.\");\n return;\n }\n console.log();\n printTree(root);\n console.log();\n });\n}\n","import path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport { openCatalogSource } from \"../open-library.ts\";\n\n/**\n * Creates the `skaile update` command.\n *\n * Two stages:\n * 1. **Catalog cache refresh** — invalidates the {@link RemoteCatalogSource}\n * cache at `~/.skaile/catalog-cache/` and re-fetches the asset list. This\n * is the Phase 2 entry point for users in air-gapped mode\n * (`catalog.cache_ttl: 0`) or anyone who wants a fresh view of the public\n * skaile.store catalog before installing.\n * 2. **Asset re-deploy** — `AssetManager.install()`\n * re-deploys any outdated assets in the current project from updated\n * repositories. This is the Phase 1 behavior; preserved here.\n *\n * Pass `--no-catalog` to skip stage 1 (asset-only); pass `--catalog-only` to\n * skip stage 2 (catalog-only). The default runs both.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#update\n */\nexport function makeUpdateCommand(): Command {\n return new Command(\"update\")\n .description(\"Refresh the Catalog cache and re-deploy outdated assets in the current project\")\n .argument(\"[name]\", \"Update a specific asset (kind:name)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--no-catalog\", \"Skip refreshing the catalog cache\")\n .option(\"--catalog-only\", \"Refresh the catalog cache only; do not re-deploy assets\")\n .action(\n async (\n _name: string | undefined,\n opts: { projectDir: string; catalog: boolean; catalogOnly?: boolean },\n ) => {\n // Stage 1 — catalog cache refresh (Phase 2)\n if (opts.catalog !== false) {\n try {\n const catalogSpinner = p.spinner();\n catalogSpinner.start(\"Refreshing catalog cache\");\n const remote = await openCatalogSource({ projectDir: path.resolve(opts.projectDir) });\n const result = await remote.refresh();\n catalogSpinner.stop(\n `Catalog refreshed: ${S.heading(String(result.assetsCached))} assets cached`,\n );\n logInfo(`Source: ${remote.baseUrl}`);\n } catch (err) {\n logErr(`Catalog refresh failed: ${err instanceof Error ? err.message : String(err)}`);\n logInfo(\"Continuing with asset re-deploy. Run `skaile catalog test` to debug.\");\n }\n }\n\n if (opts.catalogOnly) return;\n\n // Stage 2 — asset re-deploy (Phase 1 behavior)\n // Source sync now happens through `skaile source sync`; this command\n // only re-runs install against the existing Library cache.\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const spinner = p.spinner();\n spinner.start(\"Re-deploying assets\");\n const result = await am.install();\n spinner.stop(\"Done\");\n if (result.deployed.length > 0) {\n for (const d of result.deployed) logOk(`Updated ${d}`);\n } else {\n logInfo(\"Nothing to update.\");\n }\n if (result.collisions.length > 0) {\n for (const c of result.collisions) {\n logWarn(\n `${c.key} resolved from ${S.heading(c.resolvedFrom)}, also found in: ${c.shadowedIn.join(\", \")}`,\n );\n }\n }\n },\n );\n}\n","/**\n * Validate asset versions, changelogs, and manifest schemas across asset repos.\n */\n\nimport { execSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { parseSkillFrontmatter, validateFlowVersions } from \"@skaile/workspaces/resolver\";\nimport type { IAssetKindRegistry } from \"@skaile/workspaces/plugins\";\nimport { Command } from \"commander\";\nimport { parse as parseYaml } from \"yaml\";\nimport { logErr, logInfo, logOk, logWarn } from \"../helpers.ts\";\nimport { createFullRegistry } from \"../open-registry.ts\";\nimport { AI_RESOURCES } from \"../paths.ts\";\n\n// ---------------------------------------------------------------------------\n// Manifest schema validation (skaile validate [path])\n// ---------------------------------------------------------------------------\n\n/** Per-type regex patterns for deterministic asset discovery. */\nconst MANIFEST_GLOBS: Array<{ pattern: RegExp; kind: string }> = [\n { pattern: /\\/SKILL\\.md$/, kind: \"skill\" },\n { pattern: /\\/agent\\.yaml$/, kind: \"agent\" },\n { pattern: /\\/AGENT\\.md$/, kind: \"agent\" },\n { pattern: /\\/CONTRACT\\.md$/, kind: \"contract\" },\n { pattern: /\\.flow\\.yaml$/, kind: \"flow\" },\n { pattern: /\\.flow\\.json$/, kind: \"flow\" },\n { pattern: /\\/CONNECTOR\\.md$/, kind: \"connector\" },\n { pattern: /\\/MOUNT\\.md$/, kind: \"mount\" },\n { pattern: /\\.prompt\\.md$/, kind: \"prompt\" },\n { pattern: /\\/MCP\\.md$/, kind: \"mcp-server\" },\n { pattern: /\\/knowledge\\.yaml$/, kind: \"knowledge\" },\n { pattern: /\\/knowledge\\/index\\.yaml$/, kind: \"knowledge\" },\n { pattern: /\\.preset\\.yaml$/, kind: \"preset\" },\n];\n\n/** Directories to skip during tree walk. */\nconst SKIP_DIRS = new Set([\"node_modules\", \"dist\", \".git\", \".skaile\", \"__pycache__\"]);\n\ninterface ManifestCandidate {\n filePath: string;\n kind: string;\n}\n\n/** Recursively walk a directory tree and find manifest candidates. */\nfunction findManifestCandidates(rootPath: string): ManifestCandidate[] {\n const candidates: ManifestCandidate[] = [];\n\n function walk(dir: string): void {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n for (const entry of entries) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (!SKIP_DIRS.has(entry.name)) walk(fullPath);\n } else if (entry.isFile()) {\n for (const glob of MANIFEST_GLOBS) {\n if (glob.pattern.test(fullPath)) {\n candidates.push({ filePath: fullPath, kind: glob.kind });\n break;\n }\n }\n }\n }\n }\n\n walk(rootPath);\n return candidates;\n}\n\n/** Parse frontmatter from a markdown file (SKILL.md, CONTRACT.md, etc.) */\nfunction parseMdFrontmatter(content: string): unknown {\n const fmMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n if (!fmMatch) return null;\n return parseYaml(fmMatch[1]);\n}\n\n/** Validate all manifest files in a directory tree using the kind registry. */\nfunction validateManifests(rootPath: string): { total: number; errors: number; warnings: number } {\n const absRoot = path.resolve(rootPath);\n if (!fs.existsSync(absRoot)) {\n logErr(`Path does not exist: ${absRoot}`);\n return { total: 0, errors: 1, warnings: 0 };\n }\n\n const registry: IAssetKindRegistry = createFullRegistry();\n const candidates = findManifestCandidates(absRoot);\n let errors = 0;\n let warnings = 0;\n\n for (const c of candidates) {\n const content = fs.readFileSync(c.filePath, \"utf-8\");\n let parsed: unknown;\n\n // Parse based on file type\n if (c.filePath.endsWith(\".md\")) {\n parsed = parseMdFrontmatter(content);\n if (parsed === null) {\n // MD files without frontmatter are not necessarily errors\n // (could be pure prose contracts)\n continue;\n }\n } else {\n // YAML/JSON files\n try {\n parsed = c.filePath.endsWith(\".json\") ? JSON.parse(content) : parseYaml(content);\n } catch (e) {\n const relPath = path.relative(absRoot, c.filePath);\n logErr(`${relPath} — parse error: ${e instanceof Error ? e.message : String(e)}`);\n errors++;\n continue;\n }\n }\n\n // Route validation through the registry (A5: unregistered kinds get a WARN)\n const provider = registry.getProvider(c.kind);\n const relPath = path.relative(absRoot, c.filePath);\n\n if (!provider) {\n logWarn(`${relPath} [${c.kind}] — kind \"${c.kind}\" is not registered, skipping validation`);\n warnings++;\n continue;\n }\n\n const result = provider.validateManifest(parsed);\n if (!result.ok) {\n for (const err of result.errors) {\n logErr(`${relPath} [${c.kind}] — ${err.path ? `${err.path}: ` : \"\"}${err.message}`);\n }\n errors += result.errors.length;\n }\n }\n\n return { total: candidates.length, errors, warnings };\n}\n\n/** Domains excluded from version/changelog checks */\nconst EXCLUDED_DOMAINS = new Set([\"skaileup-shared\", \"external\", \"docs\"]);\n\ninterface AssetVersion {\n kind: \"skill\" | \"agent\" | \"flow\" | \"prompt\";\n name: string;\n domain: string;\n version: string;\n filePath: string;\n}\n\n/** Walk ai-assets and collect all asset versions */\nfunction collectAssetVersions(): AssetVersion[] {\n const assets: AssetVersion[] = [];\n if (!fs.existsSync(AI_RESOURCES)) return assets;\n\n const domains = fs\n .readdirSync(AI_RESOURCES, { withFileTypes: true })\n .filter((d) => d.isDirectory() && !EXCLUDED_DOMAINS.has(d.name));\n\n for (const d of domains) {\n const domainDir = path.join(AI_RESOURCES, d.name);\n\n // Skills\n const skillsDir = path.join(domainDir, \"skills\");\n if (fs.existsSync(skillsDir)) {\n collectSkillVersions(skillsDir, d.name, assets);\n }\n\n // Agents\n const agentsDir = path.join(domainDir, \"agents\");\n if (fs.existsSync(agentsDir)) {\n collectAgentVersions(agentsDir, d.name, assets);\n }\n\n // Flows\n const flowsDir = path.join(domainDir, \"flows\");\n if (fs.existsSync(flowsDir)) {\n for (const f of fs.readdirSync(flowsDir)) {\n if (!f.endsWith(\".flow.yaml\")) continue;\n const fp = path.join(flowsDir, f);\n const content = fs.readFileSync(fp, \"utf-8\");\n const parsed = parseYaml(content);\n assets.push({\n kind: \"flow\",\n name: parsed?.id ?? f.replace(\".flow.yaml\", \"\"),\n domain: d.name,\n version: parsed?.version ?? \"\",\n filePath: fp,\n });\n }\n }\n\n // Prompts\n const promptsDir = path.join(domainDir, \"prompts\");\n if (fs.existsSync(promptsDir)) {\n for (const f of fs.readdirSync(promptsDir)) {\n if (!f.endsWith(\".prompt.md\")) continue;\n const fp = path.join(promptsDir, f);\n const content = fs.readFileSync(fp, \"utf-8\");\n const fm = parseSkillFrontmatter(content);\n assets.push({\n kind: \"prompt\",\n name: fm?.name ?? f.replace(\".prompt.md\", \"\"),\n domain: d.name,\n version: fm?.metadata?.version ?? \"\",\n filePath: fp,\n });\n }\n }\n }\n\n return assets;\n}\n\nfunction collectSkillVersions(dir: string, domain: string, out: AssetVersion[]): void {\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const full = path.join(dir, entry.name);\n const skillMd = path.join(full, \"SKILL.md\");\n if (fs.existsSync(skillMd)) {\n const content = fs.readFileSync(skillMd, \"utf-8\");\n const fm = parseSkillFrontmatter(content);\n out.push({\n kind: \"skill\",\n name: fm?.name ?? entry.name,\n domain,\n version: fm?.metadata?.version ?? \"\",\n filePath: skillMd,\n });\n } else {\n collectSkillVersions(full, domain, out);\n }\n }\n}\n\nfunction collectAgentVersions(dir: string, domain: string, out: AssetVersion[]): void {\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const agentYaml = path.join(dir, entry.name, \"agent.yaml\");\n if (!fs.existsSync(agentYaml)) continue;\n const content = fs.readFileSync(agentYaml, \"utf-8\");\n const parsed = parseYaml(content);\n out.push({\n kind: \"agent\",\n name: parsed?.name ?? entry.name,\n domain,\n version: parsed?.version ?? \"\",\n filePath: agentYaml,\n });\n }\n}\n\n/** Check if a version string is valid 3-part semver */\nfunction isValidSemver(v: string): boolean {\n return /^\\d+\\.\\d+\\.\\d+(-[\\w.]+)?(\\+[\\w.]+)?$/.test(v);\n}\n\n/** Extract version from file content using proper YAML parsing */\nfunction extractVersionFromContent(filePath: string, content: string): string | null {\n if (filePath.endsWith(\".yaml\")) {\n const parsed = parseYaml(content);\n return parsed?.version ?? null;\n }\n // SKILL.md / .prompt.md — YAML frontmatter\n const fmMatch = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n if (!fmMatch) return null;\n const parsed = parseYaml(fmMatch[1]);\n return parsed?.metadata?.version ?? parsed?.version ?? null;\n}\n\n/**\n * Creates the `skaile validate` command group.\n *\n * Validates asset manifests, version fields, and changelogs in an asset\n * repository tree. Subcommands: default `validate [path]` (schema check),\n * `versions` (semver + flow pin validation), `changelog` (modified domains\n * must have updated CHANGELOG.md).\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/validate#make-validate-command\n */\nexport function makeValidateCommand(): Command {\n const cmd = new Command(\"validate\").description(\n \"Validate asset manifests, versions, and changelogs\",\n );\n\n // Default action: skaile validate [path]\n cmd\n .argument(\"[path]\", \"Path to asset repo or directory to validate\", \".\")\n .action((targetPath: string) => {\n const absPath = path.resolve(targetPath);\n logInfo(`Validating manifests in ${absPath}`);\n const { total, errors } = validateManifests(absPath);\n console.log();\n logInfo(`Scanned ${total} manifest files`);\n if (errors === 0) {\n logOk(\"All manifests valid\");\n } else {\n logErr(`${errors} validation error(s)`);\n process.exit(1);\n }\n });\n\n cmd\n .command(\"versions\")\n .description(\"Check version fields and flow version pins\")\n .option(\"--domain <name>\", \"Scope to one domain\")\n .option(\"--changed-only\", \"Only check assets modified since last commit\")\n .option(\"--strict\", \"Exit 1 on warnings (for CI)\")\n .action((opts: { domain?: string; changedOnly?: boolean; strict?: boolean }) => {\n let assets = collectAssetVersions().filter((a) => !opts.domain || a.domain === opts.domain);\n\n // Filter to changed files only if requested\n if (opts.changedOnly) {\n try {\n const diffOutput = execSync(\"git diff --name-only HEAD\", {\n cwd: AI_RESOURCES,\n encoding: \"utf-8\",\n });\n const changedFiles = new Set(\n diffOutput\n .trim()\n .split(\"\\n\")\n .filter(Boolean)\n .map((f) => path.resolve(AI_RESOURCES, f)),\n );\n assets = assets.filter((a) => changedFiles.has(a.filePath));\n } catch {\n logErr(\"Failed to run git diff — are you in a git repository?\");\n process.exit(1);\n }\n }\n\n let errors = 0;\n let warnings = 0;\n\n // Check all assets have valid versions\n for (const a of assets) {\n if (!a.version) {\n logErr(`${a.kind}:${a.name} (${a.domain}) — missing version`);\n errors++;\n } else if (!isValidSemver(a.version)) {\n logWarn(`${a.kind}:${a.name} (${a.domain}) — version \"${a.version}\" is not valid semver`);\n warnings++;\n }\n }\n\n // In --changed-only mode, check if version was actually bumped\n if (opts.changedOnly) {\n for (const a of assets) {\n if (!a.version) continue; // already flagged above\n const relPath = path.relative(AI_RESOURCES, a.filePath);\n try {\n const headContent = execSync(`git show HEAD:${relPath}`, {\n cwd: AI_RESOURCES,\n encoding: \"utf-8\",\n });\n const headVersion = extractVersionFromContent(a.filePath, headContent);\n if (headVersion && headVersion === a.version) {\n logWarn(\n `${a.kind}:${a.name} (${a.domain}) — file changed but version not bumped (${a.version})`,\n );\n warnings++;\n }\n } catch {\n // New file (no HEAD version) — that's fine\n }\n }\n }\n\n // Check flow node version pins\n const flows = assets.filter((a) => a.kind === \"flow\");\n const skillVersionMap = new Map<string, string>();\n for (const a of assets.filter((a) => a.kind === \"skill\")) {\n skillVersionMap.set(a.name, a.version);\n }\n\n for (const f of flows) {\n const content = fs.readFileSync(f.filePath, \"utf-8\");\n const parsed = parseYaml(content);\n const nodes = (parsed?.nodes ?? [])\n .filter((n: any) => n.type === \"skill\" && n.data?.version)\n .map((n: any) => ({\n nodeId: n.id,\n skillId: n.data?.skill ?? n.id,\n requestedVersion: n.data?.version,\n }));\n\n if (nodes.length === 0) continue;\n const checks = validateFlowVersions(nodes, skillVersionMap);\n for (const c of checks.filter((c) => !c.satisfied)) {\n logErr(\n `flow:${f.name} node ${c.nodeId} — wants ${c.requested}, found ${c.actual || \"(none)\"}`,\n );\n errors++;\n }\n }\n\n // Summary\n console.log();\n logInfo(`Checked ${assets.length} assets`);\n if (errors === 0 && warnings === 0) {\n logOk(\"All versions valid\");\n } else {\n if (errors > 0) logErr(`${errors} error(s)`);\n if (warnings > 0) logWarn(`${warnings} warning(s)`);\n }\n\n if (errors > 0 || (opts.strict && warnings > 0)) {\n process.exit(1);\n }\n });\n\n cmd\n .command(\"changelog\")\n .description(\"Check that modified domains have updated changelogs\")\n .option(\"--base <ref>\", \"Git base ref for diff\", \"HEAD\")\n .action((opts: { base: string }) => {\n let diffOutput: string;\n try {\n diffOutput = execSync(`git diff --name-only ${opts.base}`, {\n cwd: AI_RESOURCES,\n encoding: \"utf-8\",\n });\n } catch {\n logErr(\"Failed to run git diff — are you in a git repository?\");\n process.exit(1);\n return;\n }\n\n const modifiedFiles = diffOutput.trim().split(\"\\n\").filter(Boolean);\n const assetPattern = /(SKILL\\.md|agent\\.yaml|\\.flow\\.yaml|\\.prompt\\.md)$/;\n const modifiedAssets = modifiedFiles.filter((f) => assetPattern.test(f));\n\n const modifiedDomains = new Set<string>();\n for (const f of modifiedAssets) {\n const parts = f.split(\"/\");\n if (parts.length >= 1 && !EXCLUDED_DOMAINS.has(parts[0])) {\n modifiedDomains.add(parts[0]);\n }\n }\n\n if (modifiedDomains.size === 0) {\n logOk(\"No modified assets found\");\n return;\n }\n\n let errors = 0;\n for (const domain of modifiedDomains) {\n const changelogModified = modifiedFiles.some(\n (f) => f === `${domain}/CHANGELOG.md` || f === path.join(domain, \"CHANGELOG.md\"),\n );\n if (changelogModified) {\n logOk(`${domain}/CHANGELOG.md updated`);\n } else {\n logErr(`${domain}/CHANGELOG.md not updated (assets were modified)`);\n errors++;\n }\n }\n\n if (errors > 0) process.exit(1);\n });\n\n return cmd;\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, S } from \"../helpers.js\";\nimport { getStoreConfig, storeFetch } from \"../store-client.js\";\n\n/**\n * Creates the `skaile verify` command.\n *\n * Checks installed assets in `skaile.lock.yaml` against the store's signed\n * manifests. Exits 1 on hash mismatches; with `--strict` also exits 1 if any\n * asset has no store record.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#verify\n */\nexport function makeVerifyCommand(): Command {\n return new Command(\"verify\")\n .description(\"Verify installed assets against store signatures\")\n .option(\"--strict\", \"Exit with code 1 if any asset is unverified\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(async (opts) => {\n const projectDir = resolve(opts.projectDir);\n const lockPath = join(projectDir, \"skaile.lock.yaml\");\n\n if (!existsSync(lockPath)) {\n logInfo(\"No skaile.lock.yaml found — nothing to verify\");\n return;\n }\n\n // Parse lock file\n const yaml = await import(\"yaml\");\n const lockContent = readFileSync(lockPath, \"utf-8\");\n const lock = yaml.parse(lockContent);\n\n if (!lock?.assets || Object.keys(lock.assets).length === 0) {\n logInfo(\"No assets in lock file\");\n return;\n }\n\n console.log();\n console.log(` ${S.heading(\"Verifying installed assets...\")}`);\n console.log();\n\n let verified = 0;\n let unverified = 0;\n let failed = 0;\n\n const config = getStoreConfig();\n\n for (const [ref, entry] of Object.entries(lock.assets) as [string, any][]) {\n if (!entry.store_ref || !entry.content_hash || !entry.store_signature) {\n // No store metadata — local-only asset\n console.log(` ${S.dim(\"○\")} ${ref.padEnd(40)} ${S.dim(\"local only — no store record\")}`);\n unverified++;\n continue;\n }\n\n try {\n // Extract publisher/slug/version from store_ref URL\n // Expected path: /api/assets/:publisher/:slug/:version\n const urlParts = new URL(entry.store_ref).pathname.split(\"/\").filter(Boolean);\n const [, , publisher, slug, version] = urlParts;\n\n const sigData = await storeFetch<{ manifest: any; signature: string }>(\n config,\n `/api/assets/${publisher}/${slug}/${version}/sig`,\n );\n\n // Compare content hashes\n if (sigData.manifest.content_hash === entry.content_hash) {\n console.log(\n ` ${S.ok(\"✓\")} ${ref.padEnd(40)} ${S.dim(`${entry.content_hash.slice(0, 20)}...`)} ${S.ok(\"verified\")}`,\n );\n verified++;\n } else {\n console.log(\n ` ${S.err(\"✗\")} ${ref.padEnd(40)} ${S.err(\"HASH MISMATCH\")} — expected ${entry.content_hash.slice(0, 16)}... got ${sigData.manifest.content_hash.slice(0, 16)}...`,\n );\n failed++;\n }\n } catch (e: any) {\n console.log(\n ` ${S.warn(\"!\")} ${ref.padEnd(40)} ${S.warn(`verification failed: ${e.message}`)}`,\n );\n failed++;\n }\n }\n\n console.log();\n console.log(\n ` ${S.heading(\"Summary:\")} ${S.ok(`${verified} verified`)} ${unverified ? S.dim(`${unverified} unverified`) : \"\"} ${failed ? S.err(`${failed} failed`) : \"\"}`,\n );\n console.log();\n\n if (opts.strict && (unverified > 0 || failed > 0)) {\n logErr(\"Strict mode: not all assets are verified\");\n process.exit(1);\n }\n\n if (failed > 0) {\n process.exit(1);\n }\n });\n}\n","import path from \"node:path\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { Command } from \"commander\";\nimport { colorRef, logErr, S } from \"../helpers.ts\";\n\n/**\n * Creates the `skaile why` command.\n *\n * Shows why an asset is installed by printing its dependency chain from the\n * top-level skaile.yaml requirement down to the asset.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/misc#why\n */\nexport function makeWhyCommand(): Command {\n return new Command(\"why\")\n .description(\"Show why an asset is installed (dependency chain)\")\n .argument(\"<ref>\", \"Asset reference (kind:name)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((ref: string, opts) => {\n const am = new AssetManager({ projectDir: path.resolve(opts.projectDir) });\n const chain = am.why(ref);\n if (chain.length === 0) {\n logErr(`${ref} not found in lock file. Run \\`skaile install\\` first.`);\n return;\n }\n console.log();\n console.log(S.heading(\" Dependency chain\"));\n for (let i = 0; i < chain.length; i++) {\n const indent = \" \".repeat(i);\n const arrow = i === 0 ? \"\" : \"← \";\n console.log(` ${indent}${arrow}${colorRef(chain[i])}`);\n }\n console.log();\n });\n}\n","#!/usr/bin/env node\n/**\n * skaile — AI asset manager\n *\n * Run `skaile --help` for the full command reference.\n */\n\nimport { readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type { DriverTarget } from \"@skaile/workspaces/core\";\nimport { Command, Help } from \"commander\";\nimport { makeAssetCommand } from \"./commands/asset-cmd.ts\";\nimport { makeAuthCommand } from \"./commands/auth.ts\";\nimport {\n makeAddCommand,\n makeCreateCommand,\n makeDoctorCommand,\n makeInfoCommand,\n makeListCommand,\n makeRemoveCommand,\n makeSearchCommand,\n} from \"./commands/catalog.ts\";\nimport { makeCatalogCommand } from \"./commands/catalog-cmd.ts\";\nimport { makeCompleteCommand } from \"./commands/complete.ts\";\nimport { makeConfigCommand } from \"./commands/config.ts\";\nimport { makeConnectCommand } from \"./commands/connect.ts\";\nimport { makeConnectorCommand } from \"./commands/connector.ts\";\nimport { makeDebugCommand } from \"./commands/debug.ts\";\nimport { makeDiffCommand } from \"./commands/diff.ts\";\nimport { makeFlowCommand } from \"./commands/flow.ts\";\nimport { makeHistoryCommand } from \"./commands/history.ts\";\nimport { makeLibraryCommand } from \"./commands/library-cmd.ts\";\nimport { makeLogsCommand } from \"./commands/logs.ts\";\nimport { makeManageCommand } from \"./commands/manage.ts\";\nimport { makeMcpServerCommand } from \"./commands/mcp-server.ts\";\nimport { makeNpxCommand } from \"./commands/npx.ts\";\nimport { makeOutdatedCommand } from \"./commands/outdated.ts\";\nimport { makePatchCommand } from \"./commands/patch.ts\";\nimport { makePluginCommand } from \"./commands/plugin.ts\";\nimport { makePresetCommand } from \"./commands/preset-cmd.ts\";\nimport { makeCheckCommand, makeCleanCommand, makeInstallCommand } from \"./commands/project.ts\";\nimport { makeRebuildCommand } from \"./commands/rebuild.ts\";\nimport {\n makeClearCommand,\n makeReplCommand,\n makeResumeCommand,\n makeRunCommand,\n makeStatusCommand,\n} from \"./commands/run.ts\";\nimport { makeServeCommand } from \"./commands/serve.ts\";\nimport { makeSessionCommand } from \"./commands/session.ts\";\nimport { makeShowCommand } from \"./commands/show.ts\";\nimport { makeSourceCommand } from \"./commands/source.ts\";\nimport { makeStoreCommand } from \"./commands/store.ts\";\nimport { makeTreeCommand } from \"./commands/tree.ts\";\nimport { makeUpdateCommand } from \"./commands/update.ts\";\nimport { makeValidateCommand } from \"./commands/validate.ts\";\nimport { makeVerifyCommand } from \"./commands/verify.ts\";\nimport { makeWhyCommand } from \"./commands/why.ts\";\nimport { logErr, logOk, S } from \"./helpers.ts\";\nimport { AI_RESOURCES } from \"./paths.ts\";\n\nconst _defaultFormatHelp = Help.prototype.formatHelp;\n\nconst pkg = JSON.parse(\n readFileSync(\n path.resolve(path.dirname(fileURLToPath(import.meta.url)), \"../../package.json\"),\n \"utf-8\",\n ),\n) as { version: string };\n\nconst program = new Command(\"skaile\")\n .description(\"AI asset manager\")\n .version(pkg.version, \"-v, --version\", \"Show the skaile CLI version\")\n .enablePositionalOptions()\n .configureHelp({\n formatHelp(cmd, helper) {\n if (cmd.name() !== \"skaile\") return _defaultFormatHelp.call(helper, cmd, helper);\n return `\nskaile — AI asset manager\n\nProject:\n init [dir] Initialize a project directory (default: .)\n install [--locked] Install deps (dev mode or CI mode)\n check Check for unmet requirements\n clean [--all] [--dry-run] Remove skaile-managed assets\n setup Interactive provider setup wizard\n config show|get|set Personal settings\n\nAssets (skill, agent, prompt, flow, bundle, contract):\n add <ref> [--global] Add to skaile.yaml + deploy\n remove <ref> [--global] Remove from skaile.yaml + undeploy\n list [kind] List deployed assets\n show Installed assets by domain with sync status\n show <kind> <name> Print raw asset content\n search [kind] [query] Search across all repos\n info <ref> Metadata, deps, deploy status\n why <ref> Show why installed (dep chain)\n tree Dependency tree\n update [name] Re-deploy outdated assets\n outdated [name] Check for newer versions\n diff <ref> Deployed vs source diff\n doctor [name] Scan for broken deps\n create <name> [--kind <k>] Scaffold a new asset\n manage Interactive TUI (add/remove/sync/patch)\n history [limit] Recent actions\n\nPatches:\n patch extract <ref> Extract asset for editing\n patch commit <ref> Generate .patch file\n patch submit <ref> Apply to repo + prepare PR\n patch remove <ref> Remove after upstream merge\n\nExecution:\n run <flow-or-text> Run a flow or send a single prompt\n repl Interactive agent REPL\n resume Resume last session\n serve [--compile-test] Start WebSocket agent server\n mcp-server Start workspace MCP server (for .claude/mcp.json)\n plugin install [--driver all] Install workspace plugin (claude-code | omp | codex)\n plugin uninstall [--driver all] Uninstall workspace plugin\n plugin enable Enable plugin (claude-code only)\n plugin disable Disable plugin (claude-code only)\n plugin status Show install / enable state across backends\n debug tools|connectors|mcp|config|state Inspect running container state\n connect <url> Interactive WebSocket REPL\n logs [--follow] [--filter] Tail skaile container logs\n session list|show|switch|del Session management\n status Current session state\n clear Unset current session\n\nValidation:\n validate versions Check asset version fields and flow pins\n validate changelog Check changelogs for modified domains\n\nSources (github repos of AI assets):\n source add <git-url> Clone + register a github source\n source list / show / remove Source registry CRUD\n source sync [name] Re-fetch upstream changes\n source patch / propose Contribute back via PR\n source manifest * Sidecar manifest lifecycle\n\nLibraries (your authoring workspaces):\n library init <name> Create a local library (use --git URL to attach a remote)\n library link <name> <url> Attach a github remote to a local library\n library create <kind> <name> Scaffold a new asset in a library\n library list / show / status Library inspection\n library default <name> Set the default library\n library rename / set / remove\n library commit / pull / push / propose / git Git ops (git backend only)\n library sync <name> Pull then push (as backend permits)\n library publish / register / yank <ref> Store publish flow (stubs)\n\nStore (manifest catalog + auth):\n store login / logout / whoami / yank Auth + admin\n store mode <auto|local|remote> Resolution mode (stub)\n store search / show / favourite / unfavourite Catalog browsing (stub)\n store sync / push Local-store sync (stub)\n\nCatalog (debug):\n catalog test / show Probe a catalog endpoint, print resolved config\n\nPresets:\n preset init [name] Scaffold a .preset.yaml\n preset validate <path> Validate a preset file\n\nAdvanced:\n flow list|show Flow browsing\n connector ... Connector operations\n path Show resolved paths\n\n Run skaile <command> --help for per-command options.\n`;\n },\n });\n\n// ── Project ──────────────────────────────────────────────────────────────────\n\nprogram\n .command(\"init [project-dir]\")\n .description(\"Initialize a project directory (defaults to current directory)\")\n .option(\n \"--backend <name>\",\n \"Coding-agent backend (claude-code | omp | codex)\",\n \"claude-code\",\n )\n .option(\"--no-git\", \"Skip git init and .gitignore\")\n .action(\n async (\n projectDir: string | undefined,\n opts: { backend: string; git: boolean },\n ) => {\n const { execSync } = await import(\"node:child_process\");\n const { existsSync, mkdirSync, readFileSync, writeFileSync } = await import(\"node:fs\");\n const { stringify } = await import(\"yaml\");\n const { DRIVER_TARGETS, SUPPORTED_DRIVER_TARGETS } = await import(\n \"@skaile/workspaces/core\"\n );\n\n const backend = opts.backend as DriverTarget;\n if (!SUPPORTED_DRIVER_TARGETS.includes(backend)) {\n logErr(\n `Unknown backend \"${opts.backend}\". Supported: ${SUPPORTED_DRIVER_TARGETS.join(\", \")}`,\n );\n process.exitCode = 1;\n return;\n }\n\n const resolved = path.resolve(projectDir ?? \".\");\n const projectName = path.basename(resolved);\n const created: string[] = [];\n\n if (!existsSync(resolved)) {\n mkdirSync(resolved, { recursive: true });\n created.push(\".\");\n }\n\n const skaileDir = path.join(resolved, \".skaile\");\n if (!existsSync(skaileDir)) {\n mkdirSync(path.join(skaileDir, \"sessions\"), { recursive: true });\n created.push(\".skaile/\");\n }\n\n const settingsPath = path.join(skaileDir, \"settings.json\");\n if (!existsSync(settingsPath)) {\n writeFileSync(settingsPath, \"{}\\n\");\n created.push(\".skaile/settings.json\");\n }\n\n const wsConfigPath = path.join(resolved, \"skaile.yaml\");\n if (!existsSync(wsConfigPath)) {\n writeFileSync(\n wsConfigPath,\n stringify({\n name: projectName,\n description: `${projectName} AI skill dependencies`,\n \"agent-config\": {\n default: {\n agent: backend,\n provider: \"anthropic\",\n model: \"claude-sonnet-4-6\",\n driver: \"claude-sdk\",\n max_turns: 200,\n },\n },\n ai_resources: [],\n }),\n );\n created.push(\"skaile.yaml\");\n }\n\n for (const dir of new Set(Object.values(DRIVER_TARGETS[backend].local))) {\n const full = path.join(resolved, dir);\n if (!existsSync(full)) {\n mkdirSync(full, { recursive: true });\n created.push(`${dir}/`);\n }\n }\n\n if (opts.git) {\n const gitignorePath = path.join(resolved, \".gitignore\");\n const entries = [\"node_modules/\", \".skaile/sessions/\", \"*.log\", \".env\", \".env.local\"];\n const existing = existsSync(gitignorePath) ? readFileSync(gitignorePath, \"utf-8\") : \"\";\n const have = new Set(existing.split(\"\\n\").map((l) => l.trim()));\n const append = entries.filter((e) => !have.has(e));\n if (append.length > 0) {\n const prefix = existing && !existing.endsWith(\"\\n\") ? \"\\n\" : \"\";\n writeFileSync(gitignorePath, existing + prefix + `${append.join(\"\\n\")}\\n`);\n if (!existing) created.push(\".gitignore\");\n }\n if (!existsSync(path.join(resolved, \".git\"))) {\n try {\n execSync(\"git init\", { cwd: resolved, stdio: \"pipe\" });\n created.push(\".git/\");\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.log(` ${S.dim(`⚠ git init failed: ${msg}`)}`);\n }\n }\n }\n\n try {\n const fs = await import(\"node:fs\");\n const { userConfigPath, saveConfig, getConfigDefaults } = await import(\n \"@skaile/workspaces/library\"\n );\n const userCfgPath = userConfigPath();\n if (!fs.existsSync(userCfgPath)) {\n const defaults = getConfigDefaults();\n saveConfig(userCfgPath, {\n catalog: { url: defaults.catalog.url, cache_ttl: defaults.catalog.cache_ttl },\n });\n console.log(` ${S.dim(`✓ wrote default user config at ${userCfgPath}`)}`);\n }\n } catch (err) {\n console.log(\n ` ${S.dim(`⚠ could not bootstrap user config: ${err instanceof Error ? err.message : String(err)}`)}`,\n );\n }\n\n // Hydrate sources declared in skaile.yaml — no-op when none.\n try {\n const { ensureSourcesCloned } = await import(\"./ensure-sources.ts\");\n const hydrate = ensureSourcesCloned(resolved, { quiet: true });\n for (const n of hydrate.cloned) created.push(`~/.skaile/sources/${n}/`);\n if (hydrate.failed.length > 0) {\n logErr(`Failed to clone source(s): ${hydrate.failed.join(\", \")}`);\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.log(` ${S.dim(`⚠ source hydration skipped: ${msg}`)}`);\n }\n\n for (const c of created) console.log(` ${S.dim(`+ ${c}`)}`);\n logOk(`Initialized project at ${S.heading(resolved)}`);\n console.log();\n console.log(S.heading(\" Next steps:\"));\n const isCurrentDir = resolved === path.resolve(\".\");\n let step = 1;\n if (!isCurrentDir) {\n console.log(` ${S.dim(`${step}.`)} ${S.cmd(`cd ${projectDir}`)}`);\n step++;\n }\n console.log(` ${S.dim(`${step}.`)} Edit ${S.cmd(\"skaile.yaml\")} to add dependencies`);\n step++;\n console.log(` ${S.dim(`${step}.`)} ${S.cmd(\"skaile install\")}`);\n console.log();\n },\n );\n\nprogram\n .command(\"setup\")\n .description(\"Interactive provider setup wizard\")\n .action(async () => {\n const { cmdSetup } = await import(\"./setup.ts\");\n await cmdSetup([], { projectDir: process.cwd() });\n });\n\nprogram.addCommand(makeInstallCommand());\nprogram.addCommand(makeCheckCommand());\nprogram.addCommand(makeCleanCommand());\nprogram.addCommand(makeConfigCommand());\n\n// ── Assets ───────────────────────────────────────────────────────────────────\n\nprogram.addCommand(makeAddCommand());\nprogram.addCommand(makeRemoveCommand());\nprogram.addCommand(makeListCommand());\nprogram.addCommand(makeSearchCommand());\nprogram.addCommand(makeInfoCommand());\nprogram.addCommand(makeShowCommand());\nprogram.addCommand(makeWhyCommand());\nprogram.addCommand(makeTreeCommand());\nprogram.addCommand(makeUpdateCommand());\nprogram.addCommand(makeCatalogCommand());\nprogram.addCommand(makeOutdatedCommand());\nprogram.addCommand(makeDiffCommand());\nprogram.addCommand(makeDoctorCommand());\nprogram.addCommand(makeCreateCommand());\nprogram.addCommand(makeManageCommand());\nprogram.addCommand(makeHistoryCommand());\n\n// ── Patches ──────────────────────────────────────────────────────────────────\n\nprogram.addCommand(makePatchCommand());\n\n// ── Execution ────────────────────────────────────────────────────────────────\n\nprogram.addCommand(makeRunCommand());\nprogram.addCommand(makeReplCommand());\nprogram.addCommand(makeResumeCommand());\nprogram.addCommand(makeServeCommand());\nprogram.addCommand(makeMcpServerCommand());\nprogram.addCommand(makePluginCommand());\nprogram.addCommand(makeDebugCommand());\nprogram.addCommand(makeConnectCommand());\nprogram.addCommand(makeLogsCommand());\nprogram.addCommand(makeSessionCommand());\nprogram.addCommand(makeStatusCommand());\nprogram.addCommand(makeClearCommand());\n\n// ── Advanced ─────────────────────────────────────────────────────────────────\n\nprogram.addCommand(makeFlowCommand(), { hidden: true });\nprogram.addCommand(makeNpxCommand(), { hidden: true });\nprogram.addCommand(makeConnectorCommand());\nprogram.addCommand(makeValidateCommand());\nprogram.addCommand(makeAuthCommand());\nprogram.addCommand(makeRebuildCommand());\nprogram.addCommand(makeVerifyCommand());\nprogram.addCommand(makeStoreCommand());\n\n// ── Sources / Libraries / Store (2026-05-27 vocabulary cleanup) ─────────────\n\nprogram.addCommand(makeSourceCommand());\nprogram.addCommand(makeLibraryCommand());\nprogram.addCommand(makeAssetCommand());\nprogram.addCommand(makePresetCommand());\n\nprogram\n .command(\"path\")\n .description(\"Show resolved paths\")\n .action(() => {\n console.log();\n console.log(` ${S.dim(\"ai-assets\")} ${S.heading(AI_RESOURCES)}`);\n console.log(` ${S.dim(\"patches-dir\")} ${S.heading(\".skaile/patches/\")}`);\n console.log();\n });\n\n// Complete must be added last\nprogram.addCommand(makeCompleteCommand(program));\n\nawait program.parseAsync();\n"]}
|