@skaile/workspaces 1.7.0 → 1.8.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 +22 -0
- package/dist/chunk-34U5UC6G.js +284 -0
- package/dist/chunk-34U5UC6G.js.map +1 -0
- package/dist/{chunk-BSXBOKL6.js → chunk-35OWUKOD.js} +2 -2
- package/dist/{chunk-BSXBOKL6.js.map → chunk-35OWUKOD.js.map} +1 -1
- package/dist/{chunk-4OVPB7SI.js → chunk-6K6T2RBP.js} +6 -2
- package/dist/chunk-6K6T2RBP.js.map +1 -0
- package/dist/{chunk-TC3GLA5D.js → chunk-M3Y5KM6F.js} +3 -3
- package/dist/{chunk-TC3GLA5D.js.map → chunk-M3Y5KM6F.js.map} +1 -1
- package/dist/{chunk-SZY7X4M2.js → chunk-S74G7AZL.js} +2 -2
- package/dist/{chunk-SZY7X4M2.js.map → chunk-S74G7AZL.js.map} +1 -1
- package/dist/{chunk-7VGRRH2L.js → chunk-THJZ3JZE.js} +4 -4
- package/dist/{chunk-7VGRRH2L.js.map → chunk-THJZ3JZE.js.map} +1 -1
- package/dist/cli/index.js +178 -355
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/store.d.ts.map +1 -1
- package/dist/factory-assets/connectors/flow/run-flow.js +1 -1
- package/dist/project-4M6QXHCH.js +28 -0
- package/dist/project-4M6QXHCH.js.map +1 -0
- package/dist/run-group-engine/index.d.ts +2 -0
- package/dist/run-group-engine/index.js +68 -0
- package/dist/run-group-engine/index.js.map +1 -0
- package/dist/run-group-engine/src/admit.d.ts +13 -0
- package/dist/run-group-engine/src/admit.d.ts.map +1 -0
- package/dist/run-group-engine/src/derive-instance-status.d.ts +9 -0
- package/dist/run-group-engine/src/derive-instance-status.d.ts.map +1 -0
- package/dist/run-group-engine/src/index.d.ts +5 -0
- package/dist/run-group-engine/src/index.d.ts.map +1 -0
- package/dist/run-group-engine/src/plan-retry.d.ts +11 -0
- package/dist/run-group-engine/src/plan-retry.d.ts.map +1 -0
- package/dist/run-group-engine/src/rollup.d.ts +16 -0
- package/dist/run-group-engine/src/rollup.d.ts.map +1 -0
- package/dist/runner/index.js +2 -2
- package/dist/sdk/index.js +2 -2
- package/dist/sdk/runner.js +2 -2
- package/dist/sdk/store.js +1 -1
- package/dist/{source-R4TWF424.js → source-KUWAEJOO.js} +3 -3
- package/dist/{source-R4TWF424.js.map → source-KUWAEJOO.js.map} +1 -1
- package/dist/{source-manifest-publish-FXDK2BCI.js → source-manifest-publish-FTSKRYPI.js} +3 -3
- package/dist/{source-manifest-publish-FXDK2BCI.js.map → source-manifest-publish-FTSKRYPI.js.map} +1 -1
- package/dist/store/index.js +1 -1
- package/dist/store/src/store.d.ts.map +1 -1
- package/dist/tui/index.js +2 -2
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/run-group.d.ts +148 -0
- package/dist/types/src/run-group.d.ts.map +1 -0
- package/dist/workspace-plugin/adapters/mcp.js +1 -1
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +7 -1
- package/dist/chunk-4OVPB7SI.js.map +0 -1
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../cli/src/commands/catalog.ts","../../cli/src/commands/skailify-lib.ts","../../cli/src/commands/asset-cmd.ts","../../cli/src/commands/auth.ts","../../cli/src/commands/cache.ts","../../cli/src/commands/catalog-cmd.ts","../../cli/src/completion.ts","../../cli/src/flow-discovery.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/deploy.ts","../../cli/src/commands/diff.ts","../../cli/src/commands/flow.ts","../../cli/src/commands/history.ts","../../cli/src/commands/plugin/claude-code.ts","../../cli/src/commands/plugin/codex.ts","../../cli/src/commands/plugin/omp.ts","../../cli/src/commands/integration.ts","../../cli/src/commands/library-index.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-registry-cmd.ts","../../cli/src/commands/preset-apply.ts","../../cli/src/commands/project.ts","../../cli/src/commands/preset-export.ts","../../cli/src/commands/preset-cmd.ts","../../cli/src/commands/rebuild.ts","../../cli/src/driver-error.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/superjson-transformer.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/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":["path","openLibrary","p","openCatalogSource","am","spinner","pc","status","path2","fs","stringifyYaml","Command","fs2","path3","basename","homedir","existsSync","readdirSync","statSync","p2","program","resolve","scanDirectory","createInterface","factoryAssetRoots","WorkspaceYamlEditor","resolveSkWorkspaceConfig","disabled","next","updated","list","SKAILE_MCP_NAME","parseToml","stringifyToml","install","uninstall","action","runStatus","path18","fs9","path19","fs10","Option","domain","p3","LocalSecretsProvider","openLibraryManager","getGlobalCacheDir","budget","shown","idx","p4","mkdirSync","readFileSync","runInstall","parseBackendFilter","p5","state","confirm","path26","writeFileSync","AssetManager","os","logInfo","logWarn","logOk","logErr","S","dirname","join","fileURLToPath","portableSpawnSync","normalizeTrpcUrl","createTRPCUntypedClient","result","p7","parseYaml","parsed","execSync","a","c","stringify","SUPPORTED_DRIVER_TARGETS"],"mappings":"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","file":"index.js","sourcesContent":["/**\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 {\n AssetManager,\n type BackendDeclaredAsset,\n type DeclaredAsset,\n type DeclaredState,\n MissingManifestError,\n NON_DEPLOYABLE_KINDS,\n} from \"@skaile/workspaces/asset-manager\";\nimport {\n ASSET_KINDS,\n type CatalogEntry,\n type DriverTarget,\n factoryAssetRoots,\n parseAssetRef,\n SUPPORTED_DRIVER_TARGETS,\n} from \"@skaile/workspaces/core\";\nimport type { CatalogAsset } from \"@skaile/workspaces/plugins\";\nimport { Command, Option } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n bareSoftDepName,\n colorRef,\n formatSoftDepHint,\n formatSoftDepSection,\n kindColor,\n kindColorPad,\n logErr,\n logInfo,\n logOk,\n S,\n} from \"../helpers.ts\";\n\n/**\n * Copyable install ref for a store catalog asset — `kind:@<publisher>/<name>#<version>`,\n * the exact shape `skaile add` accepts.\n */\nexport function catalogAssetRef(a: CatalogAsset): string {\n return `${a.kind}:@${a.publisher}/${a.name}#${a.version}`;\n}\n\n/**\n * Copyable ref for a local index entry. Uses `kind:@<publisher>/<name>` when a\n * publisher is known; local assets without one fall back to the bare name.\n */\nexport function localEntryRef(e: Pick<CatalogEntry, \"kind\" | \"name\" | \"publisher\">): string {\n return e.publisher ? `${e.kind}:@${e.publisher}/${e.name}` : e.name;\n}\n\n/**\n * Client-side text filter over catalog assets — the store's `listAssets` has no\n * server-side query. Case-insensitive match across name, description, publisher;\n * an empty query returns every asset.\n */\nexport function filterCatalogAssets(\n assets: CatalogAsset[],\n query: string | undefined,\n): CatalogAsset[] {\n if (!query) return assets;\n const q = query.toLowerCase();\n return assets.filter(\n (a) =>\n a.name.toLowerCase().includes(q) ||\n (a.description?.toLowerCase().includes(q) ?? false) ||\n a.publisher.toLowerCase().includes(q),\n );\n}\n\n/**\n * Drive the `skaile search` action across the local and/or store legs.\n * Air-gapped (`cache_ttl: 0`) suppresses every network leg. The store leg goes\n * through the shared catalog client (same source `install`/`update` use).\n */\nasync function runSearch(\n kind: string | undefined,\n query: string | undefined,\n opts: any,\n): Promise<void> {\n if (kind?.includes(\":\")) {\n query = kind;\n kind = undefined;\n }\n\n const showLocal = !opts.store;\n const showStore = !opts.local;\n\n const { resolveConfig } = await import(\"@skaile/workspaces/library\");\n const airGapped =\n resolveConfig({ projectDir: path.resolve(opts.projectDir) }).catalog.cache_ttl === 0;\n\n if (showLocal) {\n await searchLocal(query, kind, opts, showStore, airGapped);\n }\n\n if (showStore) {\n await searchStore(query, kind, opts, airGapped);\n }\n}\n\n/**\n * Run the local-repo search and print its grouped table (or empty notice).\n *\n * On an empty result that is *not* a query miss (no matches for nothing → never\n * synced), auto-sync the project's sources and re-query, unless air-gapped\n * (which forbids the network). If auto-sync doesn't surface anything, fall back\n * to the \"run sync first\" hint.\n */\n/**\n * Read local assets straight from the index (`asset_definitions`) rather than\n * re-scanning the source tree. A `source add`/`sync` is authoritative for what\n * it wrote, so reading the index returns the exact set it holds — no\n * hand-rolled filename walk, no `kind:name` dedup collapsing same-named or\n * multi-kind assets. Maps each `AssetDefinition` row → the `CatalogEntry` shape\n * `printLocalEntries` / `localEntryRef` consume.\n */\nasync function searchIndex(\n query: string | undefined,\n kind: string | undefined,\n): Promise<CatalogEntry[]> {\n const { openLibrary } = await import(\"../open-library.ts\");\n const library = await openLibrary();\n try {\n const defs = await library.listAssetDefs(kind ? { kind: kind as CatalogEntry[\"kind\"] } : {});\n let entries: CatalogEntry[] = defs.map(\n (d): CatalogEntry => ({\n name: d.name,\n kind: d.kind as CatalogEntry[\"kind\"],\n description: d.description ?? \"\",\n source: d.id,\n // Stored publishers may carry the `@` scope sigil (manifest-mode rows);\n // `localEntryRef` re-adds it, so strip here to avoid `@@`.\n publisher: d.publisher ? d.publisher.replace(/^@/, \"\") : undefined,\n version: d.version,\n requires: [],\n dependencies: [],\n license: d.license,\n category: d.category,\n }),\n );\n if (query) {\n const q = query.toLowerCase();\n entries = entries.filter(\n (e) => e.name.toLowerCase().includes(q) || e.description.toLowerCase().includes(q),\n );\n }\n return entries;\n } finally {\n library.close();\n }\n}\n\n/**\n * Scan the bundled FACTORY (first-party) source — it is never indexed, so the\n * index read alone would drop built-in skills from a fresh project's\n * `search --local`. Reuses `AssetManager.search` (which injects the factory\n * source into its repositories map) and keeps only entries whose manifest path\n * lives under a `factoryAssetRoots()` prefix — the same test `asset-feeds.ts`\n * uses to band the factory origin.\n */\nfunction searchFactory(\n projectDir: string,\n query: string | undefined,\n kind: string | undefined,\n): CatalogEntry[] {\n const prefixes = factoryAssetRoots().map((r) => (r.endsWith(path.sep) ? r : r + path.sep));\n const isFactoryPath = (p: string) =>\n prefixes.some((fp) => p === fp.slice(0, -1) || p.startsWith(fp));\n try {\n return new AssetManager({ projectDir })\n .search(query, kind)\n .filter((e) => isFactoryPath(e.source));\n } catch {\n return [];\n }\n}\n\n/** Canonical dedup key for a local entry (`kind:@publisher/name`). */\nfunction entryDedupKey(e: CatalogEntry): string {\n return `${e.kind}:${e.publisher ? `@${e.publisher}/` : \"\"}${e.name}`;\n}\n\n/** Union index entries with factory entries, index-wins on a canonical collision. */\nfunction unionEntries(indexed: CatalogEntry[], factory: CatalogEntry[]): CatalogEntry[] {\n const seen = new Set(indexed.map(entryDedupKey));\n return [...indexed, ...factory.filter((e) => !seen.has(entryDedupKey(e)))];\n}\n\nasync function searchLocal(\n query: string | undefined,\n kind: string | undefined,\n opts: any,\n showStore: boolean,\n airGapped: boolean,\n): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n // Index (registered sources, overlay-applied) UNION the bundled factory source\n // (never indexed). Without the factory leg a fresh project would show no\n // built-in skills; without the index leg the count/dedup bug (Bug 3) returns.\n const factory = searchFactory(projectDir, query, kind);\n let entries = unionEntries(await searchIndex(query, kind), factory);\n\n // Empty with no query *and* no kind filter = nothing indexed yet (a query or\n // kind miss is a real \"no match\", not an unsynced state). Auto-sync then\n // re-query against the index — never over the network when air-gapped.\n if (entries.length === 0 && !query && !kind && !airGapped) {\n const { autoSyncForSearch } = await import(\"./source.ts\");\n if (await autoSyncForSearch(projectDir)) {\n entries = unionEntries(await searchIndex(query, kind), factory);\n }\n }\n\n if (entries.length === 0) {\n if (!showStore) {\n logInfo(\n query\n ? `No entries matching \"${query}\".`\n : kind\n ? `No \"${kind}\" assets found in this project's sources.`\n : \"No assets found. Run `skaile source sync` first.\",\n );\n }\n return;\n }\n\n if (showStore) {\n console.log(`\\n ${S.heading(\"Local:\")}`);\n }\n printLocalEntries(entries);\n}\n\n/** Group local entries by kind and print one compact table per kind. */\nfunction printLocalEntries(entries: CatalogEntry[]): void {\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) => localEntryRef(e).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(\n ` ${S.cmd(localEntryRef(e).padEnd(nameW))} ${e.description.slice(0, 60)}${ver}`,\n );\n }\n }\n console.log(`\\n ${S.dim(`${entries.length} total`)}\\n`);\n}\n\n/**\n * Query the remote store and print its results. Air-gapped skips the network;\n * a store failure degrades non-silently — `--store` surfaces the error, an\n * implicit query keeps local results behind a one-line notice.\n */\nasync function searchStore(\n query: string | undefined,\n kind: string | undefined,\n opts: any,\n airGapped: boolean,\n): Promise<void> {\n if (airGapped) {\n if (opts.store) {\n logErr(\n \"air-gapped (catalog.cache_ttl: 0) — store search is disabled. Set catalog.cache_ttl > 0 to query the store.\",\n );\n process.exit(1);\n }\n logInfo(\"air-gapped (cache_ttl: 0) — local sources only\");\n return;\n }\n // Imported before the try so the catch can `instanceof`-check the typed error.\n const { openCatalogSource, LocalCatalogDisabledError } = await import(\"../open-library.ts\");\n try {\n const remote = await openCatalogSource({ projectDir: path.resolve(opts.projectDir) });\n // The store filters by kind server-side; text query is client-side only.\n const assets = await remote.listAssets(kind ? { kind } : {});\n const results = filterCatalogAssets(assets, query);\n\n if (results.length > 0) {\n console.log(`\\n ${S.heading(\"Store:\")}`);\n for (const asset of results) {\n const ref = catalogAssetRef(asset);\n console.log(\n ` ⬡ ${kindColorPad(asset.kind)} ${colorRef(ref).padEnd(48)} ${S.dim(asset.description?.slice(0, 50) || \"\")}`,\n );\n }\n } else if (opts.store) {\n logInfo(\"No results in store\");\n }\n } catch (e: any) {\n // `catalog.url: local` disables the remote leg — say so explicitly rather\n // than reporting a generic failure. Typed error, not a message-string match.\n const local = e instanceof LocalCatalogDisabledError;\n if (opts.store) {\n logErr(\n local\n ? \"remote catalog disabled (catalog.url: local) — set catalog.url: https://skaile.store to search the store\"\n : `Store search failed: ${e.message}`,\n );\n } else {\n // Degrade, but don't go silent — the user must be able to tell \"no store\n // match\" from \"store never queried\".\n logInfo(\n local\n ? \"remote catalog disabled (catalog.url: local) — showing local results only\"\n : \"store unavailable — showing local results only (run with --store to see the error)\",\n );\n }\n }\n}\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 await runSearch(kind, query, opts);\n });\n}\n\n/**\n * Parse a `--backend a,b` value into validated {@link DriverTarget}s, exiting on\n * an unknown id. Returns `undefined` when the flag is absent (the caller then\n * resolves the full global backend set).\n */\nfunction parseBackendFilter(raw: string | undefined): DriverTarget[] | undefined {\n if (!raw) return undefined;\n const ids = raw\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n const out: DriverTarget[] = [];\n for (const id of ids) {\n if (!(SUPPORTED_DRIVER_TARGETS as string[]).includes(id)) {\n logErr(`unknown backend '${id}' — expected one of: ${SUPPORTED_DRIVER_TARGETS.join(\", \")}`);\n process.exit(1);\n }\n out.push(id as DriverTarget);\n }\n return out.length > 0 ? out : undefined;\n}\n\n/**\n * Soft-dep opt-in pull for `skaile add`, symmetric with the remove-orphan prompt.\n * For each absent body-link soft dep with a parseable ref, prompt (default No) to\n * also add it; on yes, add the target via `am.add`. Report-only otherwise — never\n * auto-adds. A non-interactive run (no TTY) prints the report-only hint instead of\n * prompting, so a piped `skaile add` never blocks. The clack prompt / TTY check /\n * loggers are injected so the decision is unit-testable without a real terminal.\n */\nexport async function promptSoftDepAdds(\n am: Pick<AssetManager, \"reportSoftDeps\" | \"add\">,\n ref: string,\n io: {\n isTTY: boolean;\n link?: boolean;\n /** `--with-soft-deps`: pull every referenced soft dep without prompting. */\n withSoftDeps?: boolean;\n /** `--no-soft-deps`: skip the soft-dep step entirely (no prompt, no hint). */\n noSoftDeps?: boolean;\n confirm: (message: string) => Promise<boolean | symbol>;\n isCancel: (value: unknown) => boolean;\n onAdded: (line: string) => void;\n onError: (line: string) => void;\n onHint: (line: string) => void;\n },\n): Promise<void> {\n if (io.noSoftDeps) return; // opted out — don't even query the index\n const edges = await am.reportSoftDeps([ref]);\n if (edges.length === 0) return;\n\n const addEdge = async (toRef: string): Promise<void> => {\n try {\n for (const a of await am.add(toRef, { link: io.link })) io.onAdded(a);\n } catch (err) {\n io.onError(`Failed to add ${toRef}: ${err}`);\n }\n };\n\n // `--with-soft-deps`: opt-in one-shot pull of every referenced soft dep,\n // no prompt (TTY-independent, for CI/scripts). One level only — matches\n // reportSoftDeps([ref]); a pulled dep's own soft deps are not followed.\n if (io.withSoftDeps) {\n for (const edge of edges) {\n if (edge.toRef) await addEdge(edge.toRef);\n // Surface the skip — a CI/script run should not silently drop a soft dep.\n else io.onError(`Cannot auto-add ${bareSoftDepName(edge.to)} — no resolvable ref.`);\n }\n return;\n }\n\n // Display the bare names (grilling), but keep the full toRef in the runnable hint.\n if (!io.isTTY) {\n // No TTY → can't prompt without hanging; fall back to the printed hint.\n for (const edge of edges) io.onHint(formatSoftDepHint(edge));\n return;\n }\n for (const edge of edges) {\n if (!edge.toRef) continue; // no parseable ref → can't be added reliably\n const yes = await io.confirm(\n `${bareSoftDepName(edge.from)} references ${bareSoftDepName(edge.to)} (soft dependency) — also add it?`,\n );\n if (io.isCancel(yes)) break; // Ctrl-C: stop prompting, keep what's added\n if (yes === true) await addEdge(edge.toRef);\n }\n}\n\n/**\n * The `remove` counterpart to {@link promptSoftDepAdds}: after removing `ref`,\n * offer to also remove each soft-dep target of `ref` that is now orphaned (no\n * installed asset still references it). Default No — never auto-removed (removing\n * on a heuristic is the dangerous direction). A non-interactive run (no TTY)\n * prints the report-only hint instead of prompting; `--no-soft-deps` skips it.\n */\nexport async function promptSoftDepRemovals(\n am: Pick<AssetManager, \"orphanedSoftDepsAfterRemoving\" | \"remove\">,\n ref: string,\n io: {\n isTTY: boolean;\n /** `--no-soft-deps`: skip the orphan step entirely (no prompt, no hint). */\n noSoftDeps?: boolean;\n confirm: (message: string) => Promise<boolean | symbol>;\n isCancel: (value: unknown) => boolean;\n onRemoved: (line: string) => void;\n onHint: (line: string) => void;\n },\n): Promise<void> {\n if (io.noSoftDeps) return;\n // Only orphans with a parseable ref can be removed.\n const orphans = (await am.orphanedSoftDepsAfterRemoving([ref])).filter((o) => o.targetRef);\n if (orphans.length === 0) return;\n\n if (!io.isTTY) {\n // No TTY → can't prompt without hanging; fall back to the printed hint.\n for (const o of orphans) {\n io.onHint(\n `${bareSoftDepName(o.target)} is now an orphaned soft dependency of ${ref} — run \\`skaile remove ${o.targetRef}\\` to remove it.`,\n );\n }\n return;\n }\n for (const o of orphans) {\n const yes = await io.confirm(\n `${bareSoftDepName(o.target)} is a soft dependency of ${ref} and is no longer referenced by any installed asset — also remove it?`,\n );\n if (io.isCancel(yes)) break; // Ctrl-C: stop prompting, keep what's already removed\n if (yes === true && am.remove(o.targetRef!)) io.onRemoved(`Removed ${o.targetRef}`);\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:@<publisher>/name#<version>` (e.g.\n * `skill:@skaile/use-exa#1.0.0`).\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:@<publisher>/name#<version>)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--global\", \"Record in ~/.skaile/skaile.yaml + deploy to every global backend\")\n .option(\n \"--backend <ids>\",\n \"Comma-separated global backends to deploy into (default: all resolved); implies --global\",\n )\n .option(\"--target <agent>\", \"Driver target\", \"claude-code\")\n .option(\n \"--link\",\n \"symlink local-path assets instead of copying (dev loop; machine-local, not for committing)\",\n )\n .option(\n \"--with-soft-deps\",\n \"also add the asset's report-only soft (body-link) deps, without prompting\",\n )\n .option(\"--no-soft-deps\", \"skip the soft-dep prompt entirely (don't add, don't report)\")\n .action(async (ref: string, opts) => {\n if (opts.withSoftDeps && opts.softDeps === false) {\n logErr(\"--with-soft-deps and --no-soft-deps are mutually exclusive.\");\n process.exit(1);\n }\n const backends = parseBackendFilter(opts.backend);\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n global: opts.global || backends !== undefined,\n backends,\n driverTarget: opts.target,\n });\n const spinner = p.spinner();\n spinner.start(`Adding ${ref}`);\n try {\n const added = await am.add(ref, { link: opts.link });\n spinner.stop(\"Done\");\n // Surface body-link soft deps the asset references; prompt (default No) to\n // optionally pull each one. Non-interactive runs fall back to a hint.\n await promptSoftDepAdds(am, ref, {\n isTTY: !!process.stdin.isTTY,\n link: opts.link,\n withSoftDeps: opts.withSoftDeps,\n noSoftDeps: opts.softDeps === false,\n confirm: (message) => p.confirm({ message, initialValue: false }),\n isCancel: p.isCancel,\n onAdded: logOk,\n onError: logErr,\n onHint: (line) => logInfo(S.dim(line)),\n });\n if (added.length === 0) {\n // add() resolved + recorded the ref (it throws on not-found before\n // here), so an empty result means either a non-deployable kind or an\n // already-deployed asset — not \"not found\".\n const kind = parseAssetRef(ref).kind;\n if (NON_DEPLOYABLE_KINDS.has(kind))\n logInfo(\n `Recorded in skaile.yaml. ${kind} assets are not deployed into the driver target — they are wired when skaile runs the agent.`,\n );\n else logInfo(\"Nothing to deploy (already up to date).\");\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 ~/.skaile/skaile.yaml + undeploy from every global backend\")\n .option(\n \"--backend <ids>\",\n \"Comma-separated global backends to undeploy from (default: all resolved); implies --global\",\n )\n .option(\"--target <agent>\", \"Driver target\", \"claude-code\")\n .option(\"--no-soft-deps\", \"skip the orphaned-soft-dep prompt (don't remove, don't report)\")\n .action(async (ref: string, opts) => {\n const backends = parseBackendFilter(opts.backend);\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n global: opts.global || backends !== undefined,\n backends,\n driverTarget: opts.target,\n });\n const ok = am.remove(ref);\n if (!ok) {\n logErr(`Not deployed: ${ref}`);\n return;\n }\n logOk(`Removed ${ref}`);\n // Report-only: offer to also remove soft-dep targets of `ref` now orphaned.\n // Default No — never auto-removed (removing on a heuristic is the dangerous\n // direction, so there is deliberately no batch `--with-soft-deps` here).\n await promptSoftDepRemovals(am, ref, {\n isTTY: !!process.stdin.isTTY,\n noSoftDeps: opts.softDeps === false,\n confirm: (message) => p.confirm({ message, initialValue: false }),\n isCancel: p.isCancel,\n onRemoved: logOk,\n onHint: (line) => logInfo(S.dim(line)),\n });\n });\n}\n\n/** Colour a declared-dep state for the `list` table. */\nfunction stateLabel(s: DeclaredState): string {\n if (s === \"installed\") return S.ok(s);\n if (s === \"drift\") return S.warn(s);\n if (s === \"invalid\") return S.err(s);\n return S.dim(s);\n}\n\n/**\n * Create the `skaile list` command.\n *\n * Lists the **declared** top-level dependencies from `skaile.yaml` (not the\n * deployed tree), each annotated with a reconciliation state — `declared`,\n * `installed`, or `drift`. Transitive (lock-only) deps are excluded. The\n * available-assets view lives in `skaile search`. Delegates to\n * {@link AssetManager.listDeclared}.\n *\n * `--target` selects which driver-target dir is inspected for the on-disk\n * install/drift check. `--global` switches to the global SSOT\n * (`~/.skaile/skaile.yaml`) and reports state **per backend**; `--backend <ids>`\n * narrows the global view to a subset.\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 declared dependencies from skaile.yaml with state\")\n .argument(\"[kind]\", \"Filter by asset kind\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\n \"-g, --global\",\n \"Read the global SSOT (~/.skaile/skaile.yaml); report state per backend\",\n )\n .option(\"--backend <ids>\", \"Comma-separated global backends to report (implies --global)\")\n .option(\"--json\", \"Output as JSON\")\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 backends = parseBackendFilter(opts.backend);\n if (opts.global || backends) {\n runGlobalList(kind, opts, backends);\n return;\n }\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n driverTarget: opts.target,\n });\n let declared: DeclaredAsset[];\n try {\n declared = am.listDeclared(kind);\n } catch (err) {\n if (err instanceof MissingManifestError)\n logErr(`No ${S.cmd(\"skaile.yaml\")} found. Run ${S.cmd(\"skaile init\")} to create one.`);\n else logErr(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n\n if (opts.json) {\n console.log(JSON.stringify(declared, null, 2));\n return;\n }\n if (declared.length === 0) {\n logInfo(\"No dependencies declared in skaile.yaml.\");\n return;\n }\n const kindW = Math.max(4, ...declared.map((e) => e.kind.length)); // \"KIND\" = 4\n const nameW = Math.max(4, ...declared.map((e) => e.name.length)); // \"NAME\" = 4\n console.log();\n console.log(\n ` ${S.dim(\"KIND\".padEnd(kindW))} ${S.dim(\"NAME\".padEnd(nameW))} ${S.dim(\"STATE\")}`,\n );\n // Rule spans both columns + the two 2-space gaps + the widest STATE label.\n console.log(` ${S.rule(kindW + nameW + 4 + \"installed\".length)}`);\n for (const e of declared) {\n console.log(\n ` ${kindColorPad(e.kind, kindW)} ${e.name.padEnd(nameW)} ${stateLabel(e.state)}`,\n );\n }\n console.log(`\\n ${S.dim(`${declared.length} declared`)}`);\n const drift = declared.filter((e) => e.state === \"drift\").length;\n if (drift > 0)\n logInfo(`${drift} with drift — run ${S.cmd(\"skaile install\")} to materialize.`);\n const invalid = declared.filter((e) => e.state === \"invalid\").length;\n if (invalid > 0)\n logInfo(`${invalid} invalid — fix the ${S.cmd(\"skaile.yaml\")} dependencies entry.`);\n console.log();\n });\n}\n\n/** Options accepted by the global branch of `skaile list`. */\ninterface GlobalListOptions {\n projectDir: string;\n json?: boolean;\n}\n\n/**\n * `skaile list --global` branch: per-backend reconciliation of the global SSOT.\n * One row per (ref, backend); `--json` emits `{ ref, kind, name, backend, state }`.\n */\nfunction runGlobalList(\n kind: string | undefined,\n opts: GlobalListOptions,\n backends: DriverTarget[] | undefined,\n): void {\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n global: true,\n backends,\n });\n let rows: BackendDeclaredAsset[];\n try {\n rows = am.globalState({ kind });\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n\n if (opts.json) {\n console.log(JSON.stringify(rows, null, 2));\n return;\n }\n if (rows.length === 0) {\n logInfo(\"No global dependencies declared in ~/.skaile/skaile.yaml.\");\n return;\n }\n const kindW = Math.max(4, ...rows.map((e) => e.kind.length));\n const nameW = Math.max(4, ...rows.map((e) => e.name.length));\n const beW = Math.max(7, ...rows.map((e) => e.backend.length)); // \"BACKEND\" = 7\n console.log();\n console.log(\n ` ${S.dim(\"KIND\".padEnd(kindW))} ${S.dim(\"NAME\".padEnd(nameW))} ${S.dim(\"BACKEND\".padEnd(beW))} ${S.dim(\"STATE\")}`,\n );\n console.log(` ${S.rule(kindW + nameW + beW + 6 + \"installed\".length)}`);\n for (const e of rows) {\n console.log(\n ` ${kindColorPad(e.kind, kindW)} ${e.name.padEnd(nameW)} ${e.backend.padEnd(beW)} ${stateLabel(e.state)}`,\n );\n }\n console.log(`\\n ${S.dim(`${rows.length} entries`)}`);\n const drift = rows.filter((e) => e.state === \"drift\").length;\n if (drift > 0)\n logInfo(`${drift} with drift — run ${S.cmd(\"skaile install --global\")} to materialize.`);\n console.log();\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(async (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 // Inferred body-link soft deps (report-only) — read from the index, distinct\n // from the typed `requires` above.\n const softDeps = await am.softDepsOf([ref]);\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.publisher) console.log(` repository: ${S.dim(entry.publisher)}`);\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 for (const line of formatSoftDepSection(softDeps.map((e) => bareSoftDepName(e.to))))\n console.log(line);\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 * skailify — pure, individually-testable helpers for importing an existing\n * coding-agent skill (e.g. a Claude Code skill from `~/.claude/skills/`) into a\n * skaile library. Composed by the `asset import` command and the `skailify`\n * factory skill. See each export's TSDoc for specifics.\n *\n * @docLink cli/commands/asset#import\n */\n\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport {\n isValidAssetName,\n loadSkPublishManifest,\n parseFrontmatter,\n saveSkPublishManifest,\n slugifyAssetName,\n} from \"@skaile/workspaces/core\";\nimport type { AssetEntry, SkPublishManifest } from \"@skaile/workspaces/core\";\nimport { stringify as stringifyYaml } from \"yaml\";\n\n/** Default authoring version stamped on a skill that ships none. */\nexport const DEFAULT_IMPORT_VERSION = \"0.1.0\";\n/** Default lifecycle stage stamped on an imported skill. */\nexport const DEFAULT_IMPORT_STAGE = \"alpha\";\n\n/**\n * Where coding-agent skills live on disk, highest precedence first. The\n * `SKAILE_CLAUDE_SKILLS_DIR` override exists so tests (and non-default setups)\n * can point the resolver at a fixture tree without touching `$HOME`.\n */\nexport function claudeSkillRoots(): string[] {\n const roots: string[] = [];\n const override = process.env.SKAILE_CLAUDE_SKILLS_DIR;\n if (override) roots.push(override);\n roots.push(path.join(os.homedir(), \".claude\", \"skills\"));\n return roots;\n}\n\nexport interface ResolvedImportSource {\n /** Absolute path to the skill directory. */\n dir: string;\n /** Absolute path to the skill's SKILL.md. */\n skillFile: string;\n /** How the source was located — for human-facing messages. */\n via: \"path\" | \"claude-skills\";\n}\n\n/**\n * Resolve an `import` argument to a concrete skill directory. A value that\n * exists on disk (file or dir) is used verbatim; otherwise it is treated as a\n * bare skill name and looked up under {@link claudeSkillRoots}.\n *\n * Returns `null` when nothing matches so the caller can print a tailored error.\n */\nexport function resolveImportSource(nameOrPath: string): ResolvedImportSource | null {\n // Explicit path (relative or absolute) wins.\n const asPath = path.resolve(nameOrPath);\n if (fs.existsSync(asPath)) {\n const dir = fs.statSync(asPath).isDirectory() ? asPath : path.dirname(asPath);\n const skillFile = path.join(dir, \"SKILL.md\");\n if (fs.existsSync(skillFile)) return { dir, skillFile, via: \"path\" };\n }\n // Bare name → coding-agent skill roots.\n if (!nameOrPath.includes(path.sep) && !nameOrPath.startsWith(\".\")) {\n for (const root of claudeSkillRoots()) {\n const dir = path.join(root, nameOrPath);\n const skillFile = path.join(dir, \"SKILL.md\");\n if (fs.existsSync(skillFile)) return { dir, skillFile, via: \"claude-skills\" };\n }\n }\n return null;\n}\n\nexport interface NormalizeOptions {\n /** Fallback name when frontmatter has none (usually the source dir name). */\n fallbackName?: string;\n /** Version to stamp when the skill ships none. */\n version?: string;\n /** Stage to stamp when the skill ships none. */\n stage?: string;\n}\n\nexport interface NormalizeResult {\n /** Rewritten SKILL.md content (frontmatter + body). */\n content: string;\n /** Canonical asset name (slugified if the source was non-compliant). */\n name: string;\n /** The name as it appeared in the source, when it differed from `name`. */\n originalName?: string;\n /** True when `content` differs from the input (metadata added, name slugified, …). */\n changed: boolean;\n /** Human-facing notes about what was normalized. */\n notes: string[];\n}\n\n/**\n * Bring a coding-agent `SKILL.md` into the skaile schema without touching the\n * body: ensure a canonical lowercase-kebab `name`, and a `metadata:` block\n * carrying at least `version`, `stage`, and `tags`. Idempotent — a SKILL.md\n * that already conforms comes back unchanged (`changed: false`).\n *\n * A Claude Code skill only requires `name` + `description`; skaile additionally\n * expects the `metadata:` block, so this is the transform `asset migrate`'s raw\n * byte-copy skips.\n */\nexport function normalizeSkillContent(raw: string, opts: NormalizeOptions = {}): NormalizeResult {\n const notes: string[] = [];\n const { data, body } = parseFrontmatter(raw);\n\n // ── name ─────────────────────────────────────────────────────────────────\n const rawName = typeof data.name === \"string\" && data.name.trim() ? data.name.trim() : undefined;\n const sourceName = rawName ?? opts.fallbackName ?? \"\";\n let name = sourceName;\n let originalName: string | undefined;\n if (!sourceName) {\n throw new Error(\"skill has no `name` in frontmatter and no fallback was provided\");\n }\n if (!isValidAssetName(sourceName)) {\n name = slugifyAssetName(sourceName);\n originalName = sourceName;\n notes.push(`renamed \"${sourceName}\" → \"${name}\" (canonical kebab-case)`);\n }\n\n // ── metadata block ─────────────────────────────────────────────────────────\n const existingMeta =\n data.metadata && typeof data.metadata === \"object\" && !Array.isArray(data.metadata)\n ? { ...(data.metadata as Record<string, unknown>) }\n : {};\n\n if (existingMeta.version == null) {\n existingMeta.version = opts.version ?? DEFAULT_IMPORT_VERSION;\n notes.push(`stamped metadata.version: ${existingMeta.version}`);\n }\n if (existingMeta.stage == null) {\n existingMeta.stage = opts.stage ?? DEFAULT_IMPORT_STAGE;\n notes.push(`stamped metadata.stage: ${existingMeta.stage}`);\n }\n if (existingMeta.tags == null) {\n // Promote top-level `keywords` (the agentskills.io convention) into tags.\n const keywords = Array.isArray(data.keywords) ? (data.keywords as unknown[]) : [];\n existingMeta.tags = keywords.filter((k): k is string => typeof k === \"string\");\n if ((existingMeta.tags as string[]).length > 0) {\n notes.push(\"promoted top-level keywords → metadata.tags\");\n }\n }\n\n // ── re-serialize, key order: name, description, metadata, then the rest ────\n const ordered: Record<string, unknown> = { name };\n if (data.description != null) ordered.description = data.description;\n ordered.metadata = existingMeta;\n for (const [k, v] of Object.entries(data)) {\n if (k === \"name\" || k === \"description\" || k === \"metadata\" || k === \"keywords\") continue;\n ordered[k] = v;\n }\n\n const fm = stringifyYaml(ordered).trimEnd();\n const content = `---\\n${fm}\\n---\\n\\n${body}\\n`;\n // `changed` tracks semantic mutation, not formatting — every real change adds\n // a note, so a conformant skill stays `false` despite YAML re-quoting.\n const changed = notes.length > 0;\n return { content, name, originalName, changed, notes };\n}\n\nexport interface EnsureDomainResult {\n /** Absolute path to the domain directory. */\n dir: string;\n /** Publisher slug derived for this domain (the dir name, kebab-cased). */\n publisher: string;\n /** True when this call created the directory / DOMAIN.md. */\n created: boolean;\n}\n\nconst DOMAIN_TEMPLATE = (name: string, publisher: string, description: string) => {\n // stringifyYaml quotes/escapes values that would otherwise break the scalar.\n const fm = stringifyYaml({ name, publisher, description }).trimEnd();\n return `---\\n${fm}\\n---\\n\\n# ${name}\\n\\n${description}\\n`;\n};\n\n/**\n * Scaffold a domain directory under a library: `<lib>/<domain>/DOMAIN.md`. A\n * domain is the first-level dir of an asset repo and defines the publisher\n * namespace, so assets placed beneath it publish as `@<publisher>/<name>`.\n * No-op (returns `created: false`) when the DOMAIN.md already exists.\n */\nexport function ensureDomain(\n libraryPath: string,\n domain: string,\n opts: { description?: string; publisher?: string } = {},\n): EnsureDomainResult {\n const dir = path.join(libraryPath, domain);\n const domainFile = path.join(dir, \"DOMAIN.md\");\n const publisher = opts.publisher ?? slugifyAssetName(domain);\n if (fs.existsSync(domainFile)) {\n return { dir, publisher, created: false };\n }\n fs.mkdirSync(dir, { recursive: true });\n const description = opts.description ?? `The ${domain} domain.`;\n fs.writeFileSync(domainFile, DOMAIN_TEMPLATE(domain, publisher, description), \"utf8\");\n return { dir, publisher, created: true };\n}\n\n/** List the domains in a library — first-level dirs that carry a DOMAIN.md. */\nexport function listDomains(libraryPath: string): string[] {\n if (!fs.existsSync(libraryPath)) return [];\n return fs\n .readdirSync(libraryPath, { withFileTypes: true })\n .filter((e) => e.isDirectory() && fs.existsSync(path.join(libraryPath, e.name, \"DOMAIN.md\")))\n .map((e) => e.name)\n .sort();\n}\n\nexport interface UpsertAssetInput {\n kind: string;\n name: string;\n /** Repo-relative path to the asset directory (the AssetEntry `root`). */\n root: string;\n version?: string;\n publisher?: string;\n description?: string;\n keywords?: string[];\n}\n\nexport interface UpsertAssetResult {\n manifestPath: string;\n /** True when a new entry was appended, false when an existing one was updated. */\n added: boolean;\n}\n\n/**\n * Auto-wire an asset into a library's `skaile.manifest.yaml` (creating the\n * manifest when absent). Matches an existing entry by `(kind, name)` and\n * updates it in place; otherwise appends. This is the manifest half of import\n * that a plain byte-copy (`asset migrate`) leaves stale.\n */\nexport function upsertManifestAsset(\n libraryPath: string,\n input: UpsertAssetInput,\n): UpsertAssetResult {\n const manifest: SkPublishManifest = loadSkPublishManifest(libraryPath) ?? { assets: [] };\n const assets: AssetEntry[] = Array.isArray(manifest.assets) ? [...manifest.assets] : [];\n\n const entry: AssetEntry = { kind: input.kind, name: input.name, root: input.root };\n if (input.version) entry.version = input.version;\n if (input.publisher) entry.publisher = input.publisher;\n if (input.description) entry.description = input.description;\n if (input.keywords && input.keywords.length > 0) entry.keywords = input.keywords;\n\n const idx = assets.findIndex((a) => a.kind === input.kind && a.name === input.name);\n const added = idx < 0;\n if (added) {\n assets.push(entry);\n } else {\n assets[idx] = { ...assets[idx], ...entry };\n }\n\n const manifestPath = saveSkPublishManifest(libraryPath, { ...manifest, assets });\n return { manifestPath, added };\n}\n","/**\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 synonym for `skaile list` (declared deps + state)\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 {\n checkAgentSkillConformance,\n coerceVersion,\n isValidAssetName,\n matchPin,\n parseAssetRef,\n parseFrontmatter,\n} from \"@skaile/workspaces/core\";\nimport type { AssetDefinition, IAssetIndex } from \"@skaile/workspaces/library\";\nimport { resolveLibraryDir } from \"@skaile/workspaces/library\";\nimport { Command } from \"commander\";\nimport { rcompare } from \"semver\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport { openLibraryManager } from \"../open-library.ts\";\nimport { makeListCommand } from \"./catalog.ts\";\nimport {\n ensureDomain,\n normalizeSkillContent,\n resolveImportSource,\n upsertManifestAsset,\n} from \"./skailify-lib.ts\";\n\n/**\n * Resolve an asset definition from a wire ref, tolerating the `kind:@pub/name`\n * shape (with or without a `#version` pin — SemVer range / exact / SHA) — not\n * just the fully-canonical stored id (`@pub/name@version`). Exact-id match wins;\n * otherwise the ref is parsed and matched by kind + publisher + name, filtered\n * to `opts.fromLibraryId` when given, honouring the pin, and defaulting to the\n * highest version. Uses the same `matchPin` the source resolver does.\n */\nasync function resolveDefByRef(\n library: IAssetIndex,\n ref: string,\n opts?: { fromLibraryId?: string },\n): Promise<AssetDefinition | null> {\n const inScope = (d: AssetDefinition): boolean =>\n !opts?.fromLibraryId || d.libraryId === opts.fromLibraryId;\n const direct = await library.getAssetDef(ref);\n if (direct && inScope(direct)) return direct;\n let parsed: ReturnType<typeof parseAssetRef>;\n try {\n parsed = parseAssetRef(ref);\n } catch {\n return null;\n }\n const wantPublisher = parsed.publisher?.replace(/^@/, \"\");\n const defs = await library.listAssetDefs({ kind: parsed.kind as AssetDefinition[\"kind\"] });\n const matches = defs.filter(\n (d) =>\n d.name === parsed.name &&\n inScope(d) &&\n (wantPublisher === undefined || d.publisher.replace(/^@/, \"\") === wantPublisher) &&\n matchPin(parsed.pin, d.version),\n );\n if (matches.length === 0) return null;\n matches.sort((a, b) => rcompare(coerceVersion(a.version), coerceVersion(b.version)));\n return matches[0];\n}\n\nexport function makeAssetCommand(): Command {\n const cmd = new Command(\"asset\").description(\"Author and install AI assets\");\n\n // ── asset import ───────────────────────────────────────────────────────────\n // High-level \"skailify\" path: `asset migrate` wrapped with the frontmatter\n // normalize + domain scaffold + manifest-wire steps the raw byte-copy skips.\n cmd\n .command(\"import <name-or-path>\")\n .description(\"Import + skailify an existing coding-agent skill into a library\")\n .option(\"--to <library>\", \"Target library (default: auto / personal)\")\n .option(\"--domain <name>\", \"Place under this domain's skills/ (created if missing)\")\n .option(\"--version <semver>\", \"Version to stamp when the skill ships none\")\n .option(\"--stage <stage>\", \"Lifecycle stage to stamp (default: alpha)\")\n .option(\"--no-normalize\", \"Copy verbatim — skip frontmatter normalization\")\n .option(\"--commit\", \"Auto-commit in git-backed libraries\", false)\n .action(\n async (\n nameOrPath: string,\n opts: {\n to?: string;\n domain?: string;\n version?: string;\n stage?: string;\n normalize: boolean;\n commit: boolean;\n },\n ) => {\n const src = resolveImportSource(nameOrPath);\n if (!src) {\n logErr(\n `No skill found for \"${nameOrPath}\". Pass a path to a SKILL.md dir, ` +\n \"or a bare name present under ~/.claude/skills/.\",\n );\n process.exit(1);\n }\n logInfo(`Source: ${S.dim(src.dir)} (${src.via})`);\n\n const { manager, close } = await openLibraryManager();\n try {\n // Resolve target library (mirrors `asset migrate`).\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 target = def ?? (await manager.ensurePersonalLibrary(resolveLibraryDir())).library;\n }\n if (target.ownership === \"reader\") {\n logErr(`Library \"${target.name}\" is read-only (ownership=reader). Choose --to.`);\n process.exit(1);\n }\n\n // Normalize the SKILL.md (unless --no-normalize).\n const rawSkill = fs.readFileSync(src.skillFile, \"utf8\");\n const norm = opts.normalize\n ? normalizeSkillContent(rawSkill, {\n fallbackName: path.basename(src.dir),\n version: opts.version,\n stage: opts.stage,\n })\n : { content: rawSkill, name: path.basename(src.dir), changed: false, notes: [] };\n if (!opts.normalize && !isValidAssetName(norm.name)) {\n logWarn(\n `Name \"${norm.name}\" is not canonical (kebab-case); ` +\n \"`skaile validate` will reject this manifest entry. Drop --no-normalize to slugify it.\",\n );\n }\n\n // Resolve the destination (scaffolding the domain on demand).\n let destParent = target.path;\n let publisher: string | undefined;\n if (opts.domain) {\n const dom = ensureDomain(target.path, opts.domain);\n if (dom.created) logOk(`Scaffolded domain ${S.cmd(opts.domain)} → ${dom.dir}`);\n destParent = path.join(dom.dir, \"skills\");\n publisher = dom.publisher;\n }\n fs.mkdirSync(destParent, { recursive: true });\n const destDir = path.join(destParent, norm.name);\n if (fs.existsSync(destDir)) {\n logErr(`Destination already exists: ${destDir}`);\n process.exit(1);\n }\n\n // Copy the asset, then overwrite SKILL.md with the normalized content.\n fs.cpSync(src.dir, destDir, { recursive: true });\n fs.writeFileSync(path.join(destDir, \"SKILL.md\"), norm.content, \"utf8\");\n for (const note of norm.notes) logInfo(` • ${note}`);\n\n // Auto-wire the manifest entry. Re-read the description from the\n // written frontmatter rather than re-parsing via regex.\n const fm = parseFrontmatter(norm.content).data;\n const descRaw = fm.description;\n const description = typeof descRaw === \"string\" ? descRaw.trim() : undefined;\n\n // Advisory: flag any agentskills.io standard divergences (dest dir is\n // norm.name, so the name==dir rule passes by construction).\n for (const f of checkAgentSkillConformance(fm, { dirName: norm.name })) {\n logWarn(`conformance: ${f.field} — ${f.message}`);\n }\n const root = path.relative(target.path, destDir);\n const up = upsertManifestAsset(target.path, {\n kind: \"skill\",\n name: norm.name,\n root,\n version: opts.version,\n publisher,\n description,\n });\n logOk(`${up.added ? \"Added\" : \"Updated\"} manifest entry skill:${norm.name}`);\n\n if (target.backend === \"git\" && opts.commit) {\n const { spawnSync } = await import(\"node:child_process\");\n spawnSync(\"git\", [\"add\", \"--\", destDir], { cwd: target.path, stdio: \"inherit\" });\n const r = spawnSync(\"git\", [\"commit\", \"-m\", `skaile: import ${norm.name}`], {\n cwd: target.path,\n stdio: \"inherit\",\n });\n if (r.status !== 0) {\n logWarn(\"Nothing committed (working tree clean or commit aborted).\");\n }\n }\n\n logOk(`Imported ${S.cmd(norm.name)} → ${target.name}`);\n logInfo(`Verify: ${S.cmd(`skaile validate ${target.path}`)}`);\n } finally {\n close();\n }\n },\n );\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\", \"--\", destPath], { cwd: target.path, stdio: \"inherit\" });\n const r = spawnSync(\"git\", [\"commit\", \"-m\", `skaile: migrate ${basename}`], {\n cwd: target.path,\n stdio: \"inherit\",\n });\n if (r.status !== 0) {\n logWarn(\"Nothing committed (working tree clean or commit aborted).\");\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 // `--from` scopes resolution to that library (a selector, not a warning):\n // resolve its name → id and filter candidates before the version pick.\n let fromLibraryId: string | undefined;\n if (opts.from) {\n const match = (await manager.listLibraries()).find((l) => l.name === opts.from);\n if (!match) {\n logErr(`Unknown library \"${opts.from}\". Run \\`skaile library list\\`.`);\n process.exit(1);\n }\n fromLibraryId = match.id;\n }\n const def = await resolveDefByRef(library, ref, { fromLibraryId });\n if (!def) {\n logErr(`No asset found for ref \"${ref}\". Try \\`skaile search\\`.`);\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 // 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 // Synonym for the top-level `skaile list`: declared deps from skaile.yaml +\n // reconciliation state. The old library-index browse view moved to `skaile search`.\n cmd.addCommand(makeListCommand());\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 resolveDefByRef(library, 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 * `skaile cache` — inspect and reclaim the re-derivable cache.\n *\n * Scopes: project `.skaile/cache/` (default) and the global cache root\n * (`--global`). NEVER touches authored content (`~/.skaile/sidecars`,\n * `libraries/`) or state (`index.db`, sessions, logs, lock, patches).\n */\nimport { existsSync, lstatSync, readdirSync, rmSync, statSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { globalCacheRoot } from \"@skaile/workspaces/core\";\nimport { Command } from \"commander\";\nimport { logInfo, logOk, S } from \"../helpers.ts\";\n\ninterface CacheScope {\n projectDir: string;\n global?: boolean;\n}\n\n/** All cache directories in scope, in deletion order. Pure — no I/O side effects. */\nexport function collectCacheTargets(scope: CacheScope): string[] {\n const out: string[] = [];\n out.push(path.join(scope.projectDir, \".skaile\", \"cache\"));\n // Legacy project dirs (pre-consolidation) — swept so upgrades reclaim disk.\n out.push(path.join(scope.projectDir, \".skaile\", \"store-cache\"));\n out.push(path.join(scope.projectDir, \".skaile\", \"repos\"));\n if (scope.global) {\n out.push(globalCacheRoot()); // ~/.skaile/cache (sources + catalog)\n const home = process.env.SKAILE_HOME ?? path.join(homedir(), \".skaile\");\n out.push(path.join(home, \"repos\")); // legacy clone root\n out.push(path.join(home, \"catalog-cache\")); // legacy catalog cache\n }\n return out;\n}\n\n/**\n * Recursive byte size of a path (0 if absent). Uses `lstat` and does NOT follow\n * symlinks — project `.skaile/cache/sources/<name>` entries are symlinks into the\n * global cache, so following them would double-count (and a symlink cycle would\n * loop). Symlinks contribute 0; the global cache is sized directly.\n */\nexport function dirSize(target: string): number {\n if (!existsSync(target)) return 0;\n const st = lstatSync(target);\n if (st.isSymbolicLink()) return 0;\n if (!st.isDirectory()) return st.size;\n return dirSizeOfDir(target);\n}\n\n/** Sum a known directory's contents — one `readdir` per level (withFileTypes),\n * `stat` only for regular files, symlinks skipped (never followed). */\nfunction dirSizeOfDir(dir: string): number {\n let total = 0;\n for (const ent of readdirSync(dir, { withFileTypes: true })) {\n const child = path.join(dir, ent.name);\n if (ent.isSymbolicLink()) continue;\n if (ent.isDirectory()) total += dirSizeOfDir(child);\n else if (ent.isFile()) total += statSync(child).size;\n }\n return total;\n}\n\n/** Delete the targets that exist. Returns the ones actually removed (empty in dry-run). */\nexport function removeCacheTargets(targets: string[], opts: { dryRun: boolean }): string[] {\n const present = targets.filter((t) => existsSync(t));\n if (opts.dryRun) return [];\n for (const t of present) rmSync(t, { recursive: true, force: true });\n return present;\n}\n\nfunction fmtBytes(n: number): string {\n const u = [\"B\", \"KB\", \"MB\", \"GB\"];\n let i = 0;\n let v = n;\n while (v >= 1024 && i < u.length - 1) {\n v /= 1024;\n i++;\n }\n return `${v.toFixed(i === 0 ? 0 : 1)} ${u[i]}`;\n}\n\n/**\n * Build the `skaile cache` command group: `clean` (reclaims project cache, or\n * project+global with `--global`; confirms unless `--yes`; `--dry-run` previews),\n * `dir` (prints resolved cache roots), and `size` (per-dir disk usage). Never\n * targets authored content or state — see {@link collectCacheTargets}.\n */\nexport function makeCacheCommand(): Command {\n const cmd = new Command(\"cache\").description(\"Inspect and reclaim the re-derivable cache\");\n\n cmd\n .command(\"clean\")\n .description(\"Remove the project cache (.skaile/cache); --global also clears ~/.skaile/cache\")\n .option(\"--global\", \"Also clear the global cache (sources + catalog) and legacy dirs\")\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 .action(async (opts) => {\n const targets = collectCacheTargets({\n projectDir: path.resolve(opts.projectDir),\n global: opts.global,\n }).filter((t) => existsSync(t));\n\n if (targets.length === 0) {\n logInfo(\"Cache is already empty.\");\n return;\n }\n console.log();\n console.log(` ${S.heading(\"Will remove:\")}`);\n for (const t of targets)\n console.log(` ${S.dim(t)} ${S.dim(`(${fmtBytes(dirSize(t))})`)}`);\n\n if (opts.dryRun) {\n console.log();\n logInfo(\"Dry run — no changes made.\");\n return;\n }\n if (!opts.yes) {\n const ok = await p.confirm({\n message: opts.global ? \"Clear project AND global cache?\" : \"Clear project cache?\",\n });\n if (p.isCancel(ok) || !ok) {\n logInfo(\"Cancelled.\");\n return;\n }\n }\n const removed = removeCacheTargets(targets, { dryRun: false });\n console.log();\n for (const r of removed) logOk(`Removed ${r}`);\n });\n\n cmd\n .command(\"dir\")\n .description(\"Print the resolved cache roots\")\n .option(\"--global\", \"Include the global cache root\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((opts) => {\n console.log(path.join(path.resolve(opts.projectDir), \".skaile\", \"cache\"));\n if (opts.global) console.log(globalCacheRoot());\n });\n\n cmd\n .command(\"size\")\n .description(\"Show cache disk usage per directory\")\n .option(\"--global\", \"Include the global cache\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((opts) => {\n const targets = collectCacheTargets({\n projectDir: path.resolve(opts.projectDir),\n global: opts.global,\n });\n console.log();\n for (const t of targets) {\n if (!existsSync(t)) continue;\n console.log(` ${S.dim(fmtBytes(dirSize(t)).padStart(9))} ${t}`);\n }\n console.log();\n });\n\n return cmd;\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 await runLocalCatalogTest(opts.projectDir);\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 await runRemoteCatalogProbe(baseUrl, trpcGetUrl(baseUrl, \"catalog.listKinds\", undefined));\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\n/**\n * Local-mode handler for `skaile catalog test`: list the registered local\n * catalog source instead of probing the network.\n */\nasync function runLocalCatalogTest(projectDir: string | undefined): Promise<void> {\n const { resolveCatalogSource } = await import(\"../open-library.ts\");\n let resolved: Awaited<ReturnType<typeof resolveCatalogSource>> | undefined;\n try {\n resolved = await resolveCatalogSource({ 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}\n\n/** True when `text` parses as a tRPC GET envelope (`{result: {…}}`). */\nfunction isTrpcEnvelope(text: string): boolean {\n try {\n const body = JSON.parse(text);\n // tRPC GET shape: `{result: {data: {json: <payload>}}}`\n return (\n typeof body === \"object\" &&\n body !== null &&\n \"result\" in body &&\n typeof (body as { result: unknown }).result === \"object\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Remote-mode handler for `skaile catalog test`: probe a real catalog tRPC\n * route and report status / set the exit code.\n *\n * We hit `catalog.listKinds` rather than `/health` because it exercises the\n * actual surface the CLI depends on. A working backend with the catalog router\n * unmounted (or behind a path prefix that doesn't match `~/.skaile/config.yaml`)\n * is exactly the failure we want to surface.\n */\nasync function runRemoteCatalogProbe(baseUrl: string, probeUrl: string): Promise<void> {\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 if (!isTrpcEnvelope(text)) {\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(`Could not reach ${probeUrl}: ${err instanceof Error ? err.message : String(err)}`);\n }\n logInfo(\"Verify the URL in ~/.skaile/config.yaml and that the catalog backend is deployed.\");\n process.exitCode = 1;\n } finally {\n clearTimeout(timeout);\n }\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","/**\n * flow-discovery.ts — multi-root flow discovery for the CLI.\n *\n * Walks every {@link aiResourceRoots} root (bundled factory-assets when\n * installed, the monorepo `ai-assets/` in dev, plus `~/.skaile/libraries/`)\n * through the layout-tolerant `loadAllFlows`, so built-in flows are discovered\n * after `npm i` exactly as they are in the monorepo. De-duplicated by flow id\n * (first root wins).\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { assetSearchDirs } from \"@skaile/workspaces/core\";\nimport { loadAllFlows } from \"@skaile/workspaces/factory-assets/connectors/flow/engine\";\nimport { aiResourceRoots } from \"./paths.ts\";\n\ntype FlowDefinition = ReturnType<typeof loadAllFlows>[number];\n\n/** All flows across every content root, de-duplicated by id. */\nexport function discoverFlows(): FlowDefinition[] {\n const byId = new Map<string, FlowDefinition>();\n for (const root of aiResourceRoots()) {\n for (const flow of loadAllFlows(root)) {\n if (!byId.has(flow.id)) byId.set(flow.id, flow);\n }\n }\n return [...byId.values()];\n}\n\n/**\n * Locate the on-disk flow file for `flowId` across every content root, trying\n * both the flat (`<root>/flows/`) and domain-nested (`<root>/<domain>/flows/`)\n * layouts and the `.flow.yaml` / `.flow.json` / legacy `.json` extensions.\n *\n * `priorityRoots` are searched before the standard {@link aiResourceRoots} so a\n * project-local `ai-assets/` tree can override a built-in flow.\n */\nexport function findFlowFile(flowId: string, priorityRoots: string[] = []): string | undefined {\n for (const root of [...priorityRoots, ...aiResourceRoots()]) {\n for (const { dir } of assetSearchDirs(root, \"flows\")) {\n for (const ext of [\".flow.yaml\", \".flow.json\", \".json\"]) {\n const candidate = path.join(dir, `${flowId}${ext}`);\n if (fs.existsSync(candidate)) return candidate;\n }\n }\n }\n return undefined;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { assetSearchDirs } from \"@skaile/workspaces/core\";\nimport { aiResourceRoots } from \"./paths.ts\";\n\n/**\n * A single skill discovered under a content root.\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 across every {@link aiResourceRoots} root,\n * optionally filtered to a single domain. De-duplicated by skill name (first\n * root wins), so the bundled factory skills don't double up with a user library.\n *\n * Each root is walked in both layouts: **flat** (`<root>/skills/…`, e.g. the\n * bundled `factory-assets/` tree) and **domain-nested** (`<root>/<domain>/skills/…`).\n *\n * @param domain - Optional domain name to restrict the nested-layout search.\n * @returns Array of {@link SkillEntry} objects.\n * @docLink cli/dev-guide#skill-walker\n */\nexport function findSkills(domain?: string): SkillEntry[] {\n const found: SkillEntry[] = [];\n for (const root of aiResourceRoots()) {\n for (const { dir, domain: dirDomain } of assetSearchDirs(root, \"skills\")) {\n if (domain && dirDomain !== domain) continue;\n if (fs.existsSync(dir)) walkSkills(dir, dirDomain, found);\n }\n }\n const seen = new Set<string>();\n const deduped: SkillEntry[] = [];\n for (const s of found) {\n if (seen.has(s.name)) continue;\n seen.add(s.name);\n deduped.push(s);\n }\n return deduped;\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 { detectDomains } from \"@skaile/workspaces/core\";\nimport { discoverFlows } from \"../flow-discovery.ts\";\nimport { aiResourceRoots } 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 // `detectDomains` returns only real domain folders (those containing\n // skills/flows/agents subdirs), so flat asset-kind dirs like `skills/` or\n // `bundles/` are never offered as bogus domain completions.\n const domains = new Set<string>();\n for (const root of aiResourceRoots()) {\n for (const d of detectDomains(root)) domains.add(d.id);\n }\n return [...domains];\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 discoverFlows().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/** Gather workspace config defaults for display (reads agent_config.default). */\nfunction collectWorkspaceDefaults(projectDir: string): Record<string, string> {\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 return wsDefaults;\n}\n\n/** Print the personal effective-config section (driver/provider/model). */\nfunction printEffectiveSection(config: Awaited<ReturnType<typeof resolveSettings>>): void {\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\n/** Print the workspace-defaults section, if any. */\nfunction printWorkspaceDefaultsSection(wsDefaults: Record<string, string>): void {\n if (Object.keys(wsDefaults).length === 0) return;\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/** Print the masked API-keys section, if any. */\nfunction printApiKeysSection(config: Awaited<ReturnType<typeof resolveSettings>>): void {\n if (!config.apiKeys || Object.keys(config.apiKeys).length === 0) return;\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/** Print the resolved-paths section for the effective driver. */\nfunction printResolvedPathsSection(config: Awaited<ReturnType<typeof resolveSettings>>): void {\n const fw = config.driver ?? \"omp\";\n const paths = DRIVER_DEFAULTS[fw] ?? DRIVER_DEFAULTS.omp;\n if (!paths) return;\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\n/**\n * Render the effective config (personal + workspace layers, resolved paths,\n * masked API keys). Shared by the `config show` subcommand and the bare\n * `config` action so the latter doesn't re-drive the Commander parser.\n */\nasync function showConfig(opts: { projectDir?: string }): Promise<void> {\n const projectDir = opts.projectDir ? path.resolve(opts.projectDir) : process.cwd();\n const config = await resolveSettings(projectDir);\n const wsDefaults = collectWorkspaceDefaults(projectDir);\n\n printEffectiveSection(config);\n printWorkspaceDefaultsSection(wsDefaults);\n printApiKeysSection(config);\n printResolvedPathsSection(config);\n console.log();\n}\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((opts) => showConfig(opts));\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 // Bare `skaile config` shows the effective config directly — no re-parse.\n cmd.action(() => showConfig({}));\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 type { CatalogEntry } from \"@skaile/workspaces/core\";\nimport { Command } from \"commander\";\nimport { logErr } from \"../helpers.ts\";\n\n/**\n * Commander option coercer for a positive-integer flag. Wraps `parseInt` with\n * an explicit radix (Commander would otherwise call it as `parseInt(value,\n * previous)`, passing the previous value as the radix) and rejects non-positive\n * input. Mirrors `parsePositiveInt` in session-logs.\n */\nfunction parsePositiveIntOption(value: string): number {\n const n = Number.parseInt(value, 10);\n if (!Number.isFinite(n) || n <= 0) {\n throw new Error(`--limit must be a positive integer (got ${value})`);\n }\n return n;\n}\n\n// ── Shared connector setup ───────────────────────────────────────────────────\n\n/**\n * Scan every factory-assets root for connector catalog entries, de-duplicated by\n * name. Roots are override-first (the `SKAILE_FACTORY_ASSETS_DIR` layer ahead of\n * the bundled tree), so an env-supplied manifest shadows the bundled one.\n */\nexport function scanFactoryConnectors(\n scanDirectory: (dir: string, repoName: string) => CatalogEntry[],\n roots: string[],\n): CatalogEntry[] {\n const byName = new Map<string, CatalogEntry>();\n for (const dir of roots) {\n for (const e of scanDirectory(dir, \"factory-assets\")) {\n if (e.kind === \"connector\" && !byName.has(e.name)) byName.set(e.name, e);\n }\n }\n return [...byName.values()];\n}\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, factoryAssetRoots } = await import(\"@skaile/workspaces/core\");\n const entries = scanFactoryConnectors(scanDirectory, factoryAssetRoots());\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, factoryAssetRoots, 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 entries = scanFactoryConnectors(scanDirectory, factoryAssetRoots());\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\", parsePositiveIntOption)\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","/**\n * `skaile deploy` — stand a workspace up on a deploy target, then manage its\n * lifecycle through the registry-owned detach handle.\n *\n * skaile deploy up [--project-dir <p>] [--target <id>] [--detach]\n * skaile deploy down [--project-dir <p>]\n * skaile deploy status [--project-dir <p>]\n * skaile deploy logs [--project-dir <p>] [--follow]\n *\n * `up` resolves a target via the explicit precedence chain (CLI `--target`\n * override > `skaile.yaml` `deploy:` > built-in `local`), loads any `plugins:`\n * cloud providers, creates the handle, and either holds it (foreground, stops\n * on SIGINT) or persists it (`--detach`). `down` / `status` / `logs` re-attach\n * via `target.restore(payload, ctx)`.\n */\n\nimport path from \"node:path\";\nimport type { DeployContext, DeployHandle, DeployTarget } from \"@skaile/workspaces/plugin-registry\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\n\n/** Wrap an async action so a thrown error prints via logErr + sets a non-zero exit. */\nfunction action(fn: (...args: never[]) => Promise<void>) {\n return async (...args: unknown[]): Promise<void> => {\n try {\n await (fn as (...a: unknown[]) => Promise<void>)(...args);\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n };\n}\n\n/** Process env narrowed to defined string entries (DeployContext.env is `Record<string,string>`). */\nfunction envRecord(): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(process.env)) {\n if (typeof v === \"string\") out[k] = v;\n }\n return out;\n}\n\ninterface DeployCtxBundle {\n ctx: DeployContext;\n controller: AbortController;\n}\n\n/**\n * Build a `DeployContext` for a project. `workspaceId` is the config `name` or\n * the project dir's basename; `env` is the filtered process env; `log` is a\n * structured logger when available, falling back to a console shim; `signal`\n * comes from a fresh `AbortController`; `wsAuth` is read from\n * `SKAILE_WS_AUTH_TOKEN` when set.\n */\nasync function buildDeployContext(projectDir: string): Promise<DeployCtxBundle> {\n const { resolveSkWorkspaceConfig } = await import(\"@skaile/workspaces/core\");\n const config = resolveSkWorkspaceConfig(projectDir);\n const workspaceId = config.name ?? path.basename(projectDir);\n\n let log: DeployContext[\"log\"];\n try {\n const { createLogger } = await import(\"@skaile/workspaces/core/logging\");\n log = createLogger({ kind: \"gateway\", subkind: \"deploy\" });\n } catch {\n // No log store registered (standalone CLI) — fall back to a console shim.\n const shim = {\n debug: (m: string) => console.error(S.dim(` · ${m}`)),\n info: (m: string) => console.error(S.dim(` · ${m}`)),\n warn: (m: string) => logWarn(m),\n error: (m: string, e?: unknown) =>\n logErr(`${m}${e ? `: ${e instanceof Error ? e.message : String(e)}` : \"\"}`),\n child: () => shim,\n };\n log = shim as unknown as DeployContext[\"log\"];\n }\n\n const controller = new AbortController();\n const ctx: DeployContext = {\n workspaceId,\n env: envRecord(),\n log,\n signal: controller.signal,\n ...(process.env.SKAILE_WS_AUTH_TOKEN ? { wsAuth: process.env.SKAILE_WS_AUTH_TOKEN } : {}),\n };\n return { ctx, controller };\n}\n\n/** Ensure built-in deploy targets + any `plugins:` cloud providers are registered. */\nasync function ensureTargetsRegistered(projectDir: string): Promise<void> {\n const { registerBuiltinDeployTargets } = await import(\"@skaile/workspaces/deploy\");\n const { pluginRegistry } = await import(\"@skaile/workspaces/plugin-registry\");\n registerBuiltinDeployTargets(pluginRegistry);\n\n const { resolveSkWorkspaceConfig } = await import(\"@skaile/workspaces/core\");\n const config = resolveSkWorkspaceConfig(projectDir);\n if (config.plugins && config.plugins.length > 0) {\n const { ensurePluginsLoaded } = await import(\"../plugin-store/index.ts\");\n const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);\n for (const f of result.failed) logWarn(f.error);\n }\n}\n\nasync function runUp(opts: {\n projectDir: string;\n target?: string;\n detach?: boolean;\n}): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n await ensureTargetsRegistered(projectDir);\n\n const { resolveSkWorkspaceConfig } = await import(\"@skaile/workspaces/core\");\n const { resolveDeployTarget, pluginRegistry } = await import(\n \"@skaile/workspaces/plugin-registry\"\n );\n const config = resolveSkWorkspaceConfig(projectDir);\n\n // Only inherit the yaml `deploy.config` block when the --target override\n // names the same target as the yaml block; a sibling target's config would\n // otherwise be parsed through the wrong schema.\n const overrideConfig = opts.target === config.deploy?.target ? config.deploy?.config : undefined;\n const resolution = await resolveDeployTarget(\n { deploy: config.deploy },\n opts.target\n ? { target: opts.target, config: overrideConfig, reason: \"cli --target\" }\n : undefined,\n pluginRegistry,\n );\n\n const { ctx, controller } = await buildDeployContext(projectDir);\n ctx.log.debug(`deploy target resolved`, {\n target: resolution.target.id,\n source: resolution.provenance.source,\n reason: resolution.provenance.reason,\n });\n\n logInfo(`Deploying to ${S.cmd(resolution.target.id)} (${S.dim(resolution.provenance.source)})…`);\n const handle = await resolution.target.create(resolution.config, ctx);\n await handle.waitReady();\n\n logOk(`Ready at ${S.cmd(handle.wsUrl)}`);\n console.log(` ${S.dim(\"source\")} ${resolution.provenance.source}`);\n\n if (opts.detach) {\n const { writeHandle } = await import(\"@skaile/workspaces/deploy\");\n await writeHandle(projectDir, resolution.target.id, handle.payload);\n logInfo(`Detached — handle written to ${S.cmd(\".skaile/deploy/handle.json\")}`);\n return;\n }\n\n // Foreground: hold the handle and tear down on SIGINT.\n logInfo(\"Holding deploy in the foreground — press Ctrl-C to stop.\");\n await holdUntilSignal(handle, controller);\n}\n\n/** Block until SIGINT, then stop the handle and abort the context signal. */\nfunction holdUntilSignal(handle: DeployHandle, controller: AbortController): Promise<void> {\n return new Promise<void>((resolve) => {\n const onSig = () => {\n process.removeListener(\"SIGINT\", onSig);\n controller.abort();\n logInfo(\"Stopping…\");\n handle\n .stop()\n .then(() => logOk(\"Stopped.\"))\n .catch((e) => logErr(`stop failed: ${e instanceof Error ? e.message : String(e)}`))\n .finally(() => resolve());\n };\n process.on(\"SIGINT\", onSig);\n });\n}\n\n/**\n * Re-attach to a persisted handle: read the envelope, register targets, look up\n * the target by id, and `restore(payload, ctx)`. Returns null (after logging)\n * when no handle exists or the target is unknown.\n */\nasync function restoreFromHandle(\n projectDir: string,\n): Promise<{ target: DeployTarget; handle: DeployHandle; ctx: DeployContext } | null> {\n const { readHandle } = await import(\"@skaile/workspaces/deploy\");\n const stored = await readHandle(projectDir);\n if (!stored) {\n logInfo(\"No active deploy — nothing to do (no .skaile/deploy/handle.json).\");\n return null;\n }\n\n await ensureTargetsRegistered(projectDir);\n const { pluginRegistry } = await import(\"@skaile/workspaces/plugin-registry\");\n const target = pluginRegistry.get(\"deployTarget\", stored.targetId);\n if (!target) {\n logErr(`unknown deploy target \"${stored.targetId}\" — is its plugin installed?`);\n return null;\n }\n\n // Validate the persisted payload against the target's own schema before\n // restore() dereferences it — a corrupted/hand-edited handle.json yields a\n // clean error instead of an unguarded TypeError from inside restore().\n const parsed = target.payloadSchema.safeParse(stored.payload);\n if (!parsed.success) {\n logErr(\n `deploy handle for \"${stored.targetId}\" is malformed: ${parsed.error.message}. ` +\n `Remove ${S.cmd(\".skaile/deploy/handle.json\")} to reset.`,\n );\n return null;\n }\n\n const { ctx } = await buildDeployContext(projectDir);\n const handle = await target.restore(parsed.data, ctx);\n return { target, handle, ctx };\n}\n\nasync function runDown(opts: { projectDir: string }): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n const restored = await restoreFromHandle(projectDir);\n if (!restored) return;\n\n await restored.handle.stop();\n const { clearHandle } = await import(\"@skaile/workspaces/deploy\");\n await clearHandle(projectDir);\n logOk(`Stopped ${S.cmd(restored.target.id)} and cleared the handle.`);\n}\n\nasync function runStatus(opts: { projectDir: string }): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n const restored = await restoreFromHandle(projectDir);\n if (!restored) return;\n\n const health = await restored.handle.health();\n console.log();\n console.log(` ${S.label(\"target\")} ${S.cmd(restored.target.id)}`);\n console.log(` ${S.label(\"state\")} ${restored.handle.state}`);\n console.log(` ${S.label(\"wsUrl\")} ${S.cmd(restored.handle.wsUrl)}`);\n console.log(\n ` ${S.label(\"health\")} ${health.healthy ? S.ok(\"healthy\") : S.err(\"unhealthy\")}${health.detail ? ` ${S.dim(`(${health.detail})`)}` : \"\"}`,\n );\n console.log();\n}\n\nasync function runLogs(opts: { projectDir: string; follow?: boolean }): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n const restored = await restoreFromHandle(projectDir);\n if (!restored) return;\n\n if (!restored.handle.logs) {\n logInfo(`logs not supported by target ${S.cmd(restored.target.id)}`);\n return;\n }\n\n for await (const entry of restored.handle.logs({ follow: opts.follow })) {\n console.log(entry.line);\n }\n}\n\n/**\n * Creates the `skaile deploy` command group.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/deploy#make-deploy-command\n */\nexport function makeDeployCommand(): Command {\n const cmd = new Command(\"deploy\").description(\n \"Deploy a workspace to a target (up / down / status / logs)\",\n );\n\n cmd\n .command(\"up\")\n .description(\"Resolve a deploy target, stand the workspace up, and wait until ready\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--target <id>\", \"Override the deploy target (precedence: override > yaml > default)\")\n .option(\"--detach\", \"Persist the handle and return instead of holding in the foreground\")\n .action(action(runUp as never));\n\n cmd\n .command(\"down\")\n .description(\"Tear down the active deploy and clear its handle\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(action(runDown as never));\n\n cmd\n .command(\"status\")\n .description(\"Show the active deploy's state, ws URL, and health\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(action(runStatus as never));\n\n cmd\n .command(\"logs\")\n .description(\"Stream logs from the active deploy (if the target supports it)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--follow\", \"Keep streaming new log lines\")\n .action(action(runLogs as never));\n\n cmd.action(() => cmd.help());\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 { Command } from \"commander\";\nimport { discoverFlows } from \"../flow-discovery.ts\";\nimport { logErr, logInfo, S } from \"../helpers.ts\";\n\n/**\n * Create the `skaile flow` command group.\n *\n * Browses flows discovered across every content root via {@link discoverFlows}\n * (bundled factory-assets when installed, the monorepo tree in dev, plus user\n * libraries). 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 = discoverFlows();\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 = discoverFlows();\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","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/integration.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\n/** Run one backend's install/uninstall body, reporting failures as exit-code 1. */\nasync function runBackendStep(label: string, body: () => Promise<void>): Promise<number> {\n try {\n await body();\n return 0;\n } catch (e: unknown) {\n logErr(`${label}: ${e instanceof Error ? e.message : String(e)}`);\n return 1;\n }\n}\n\nasync function installClaudeCode(projectDir: string, opts: RunOptions): Promise<void> {\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}\n\nasync function installOmp(projectDir: string): Promise<void> {\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}\n\nasync function installCodex(projectDir: string): Promise<void> {\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}\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 exitCode |= await runBackendStep(\"claude-code install\", () =>\n installClaudeCode(projectDir, opts),\n );\n }\n if (targets.includes(\"omp\")) {\n exitCode |= await runBackendStep(\"omp install\", () => installOmp(projectDir));\n }\n if (targets.includes(\"codex\")) {\n exitCode |= await runBackendStep(\"codex install\", () => installCodex(projectDir));\n }\n\n if (exitCode === 0) logOk(\"Plugin installed.\");\n return exitCode;\n}\n\nasync function uninstallClaudeCode(projectDir: string): Promise<void> {\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}\n\nasync function uninstallOmp(projectDir: string): Promise<void> {\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}\n\nasync function uninstallCodex(projectDir: string): Promise<void> {\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}\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 exitCode |= await runBackendStep(\"claude-code uninstall\", () =>\n uninstallClaudeCode(projectDir),\n );\n }\n if (targets.includes(\"omp\")) {\n exitCode |= await runBackendStep(\"omp uninstall\", () => uninstallOmp(projectDir));\n }\n if (targets.includes(\"codex\")) {\n exitCode |= await runBackendStep(\"codex uninstall\", () => uninstallCodex(projectDir));\n }\n\n if (exitCode === 0) logOk(\"Plugin uninstalled.\");\n return exitCode;\n}\n\n/**\n * Reject explicit unsupported drivers with a usage error. Returns `2` when the\n * caller should bail with that exit code, or `null` to proceed.\n */\nfunction checkToggleSupported(\n targets: BackendName[],\n requestedAll: boolean,\n action: \"enable\" | \"disable\",\n): number | null {\n if (requestedAll) return null;\n const unsupported = targets.filter((t) => !TOGGLE_SUPPORTED.includes(t));\n if (unsupported.length === 0) return null;\n logErr(\n `${action} is only supported for claude-code; for ${unsupported.join(\", \")} use uninstall/install`,\n );\n return 2;\n}\n\n/** Toggle a single backend. Returns its exit-code contribution (0 or 1). */\nasync function toggleTarget(\n t: BackendName,\n projectDir: string,\n action: \"enable\" | \"disable\",\n): Promise<number> {\n if (!TOGGLE_SUPPORTED.includes(t)) {\n logInfo(`${t}: ${action} not supported; skipping`);\n return 0;\n }\n if (t !== \"claude-code\") return 0;\n return runBackendStep(`claude-code ${action}`, async () => {\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 });\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 const usageError = checkToggleSupported(targets, requestedAll, action);\n if (usageError !== null) return usageError;\n\n let exitCode = 0;\n for (const t of targets) {\n exitCode |= await toggleTarget(t, projectDir, action);\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 integration` command group (agent integration /\n * workspace-plugin adapter).\n *\n * Manages the skaile workspace integration 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 * Renamed from `skaile plugin` — that name now belongs to the registry-plugin\n * commands (`@skaile/workspaces/plugin-registry`). The subcommand behaviour\n * here is unchanged.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/integration#make-integration-command\n */\nexport function makeIntegrationCommand(): Command {\n const cmd = new Command(\"integration\").description(\n \"Manage skaile agent integration / workspace-plugin adapter (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 * library-index.ts — index a user library's on-disk assets into the shared\n * `asset_definitions` index so `add` / `asset install` / `search --local` can\n * resolve them, plus publisher resolution for a freshly-created asset.\n *\n * A `library create`d asset is bytes on disk only until it is indexed; the\n * index is what every resolution path reads. Indexing reuses the same\n * `LocalCatalogSource.sync()` engine `source add`/`sync` run — a library is\n * scanned + upserted keyed by `library_id = lib.id`.\n *\n * @docLink cli/commands/library\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { parseFrontmatter, slugifyAssetName } from \"@skaile/workspaces/core\";\nimport type { Library, LocalIndex } from \"@skaile/workspaces/library\";\nimport { openLibrary } from \"../open-library.ts\";\nimport { createFullRegistry } from \"../open-registry.ts\";\n\n/** Discovery result surfaced by {@link indexLibrary}. */\nexport interface IndexLibraryResult {\n /** Assets discovered on disk under the library root. */\n assetsFound: number;\n /** Assets upserted into `asset_definitions`. */\n assetsUpdated: number;\n /** Fatal per-asset errors (never advisories). */\n errors: string[];\n}\n\n/**\n * Index a library's assets into the shared `asset_definitions` index.\n *\n * Runs `LocalCatalogSource.sync()` against the library's `path` keyed by\n * `library_id = lib.id`. Pass an already-open {@link LocalIndex} (e.g. the one\n * `openLibraryManager()` holds) to reuse the single connection — the caller then\n * owns closing it. With no `index` a fresh handle is opened and closed here.\n * Returns the sync counters so a caller can report `Indexed N asset(s)`.\n */\nexport async function indexLibrary(lib: Library, index?: LocalIndex): Promise<IndexLibraryResult> {\n const { LocalCatalogSource } = await import(\"@skaile/workspaces/library\");\n const own = index ?? (await openLibrary());\n try {\n const source = new LocalCatalogSource(own, lib.id, lib.path, createFullRegistry());\n const res = await source.sync();\n return {\n assetsFound: res.assetsFound,\n assetsUpdated: res.assetsUpdated,\n errors: res.errors,\n };\n } finally {\n if (!index) own.close();\n }\n}\n\n/**\n * Read a domain's declared publisher from `<lib>/<domain>/DOMAIN.md`.\n *\n * The DOMAIN.md frontmatter (written by `library domain create`) carries a\n * `publisher` field. Returns it when present, else `undefined` — the caller\n * falls through the resolution chain.\n */\nfunction domainPublisher(libraryPath: string, domain: string): string | undefined {\n const domainFile = path.join(libraryPath, domain, \"DOMAIN.md\");\n if (!fs.existsSync(domainFile)) return undefined;\n try {\n const { data } = parseFrontmatter(fs.readFileSync(domainFile, \"utf8\"));\n const pub = data.publisher;\n return typeof pub === \"string\" && pub.trim() ? pub.trim() : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Resolve the publisher for an asset created inside a library. Never throws.\n *\n * Fallback chain (first hit wins):\n * 1. `opts.publisher` (an explicit `--publisher`),\n * 2. the domain's DOMAIN.md publisher when the asset sits under a domain\n * (`domain` names a first-level dir carrying a DOMAIN.md),\n * 3. the author's verified store identity (`githubLogin`, else `username`)\n * when signed in — the publisher they can actually publish under,\n * 4. the kebab-cased library name (e.g. `My Lib` → `my-lib`) as a last resort.\n *\n * Identity beats the library name because the library name is almost never a\n * namespace the author can publish; stamping it led to publishes that only\n * failed at the store. Passed in (not read here) to keep this pure + testable.\n *\n * @param lib - The target library.\n * @param opts - Optional explicit `--publisher`.\n * @param domain - Optional first-level directory the asset was placed under.\n * @param storeIdentity - The author's decoded store identity, or null when signed out.\n */\nexport function resolveLibraryPublisher(\n lib: Pick<Library, \"name\" | \"path\">,\n opts: { publisher?: string },\n domain?: string,\n storeIdentity?: { username?: string; githubLogin?: string } | null,\n): string {\n if (opts.publisher?.trim()) return opts.publisher.trim();\n if (domain) {\n const fromDomain = domainPublisher(lib.path, domain);\n if (fromDomain) return fromDomain;\n }\n const identity = (storeIdentity?.githubLogin ?? storeIdentity?.username)?.trim();\n if (identity) return identity;\n // slugifyAssetName throws on a name with no [a-z0-9] — keep the chain total.\n try {\n return slugifyAssetName(lib.name);\n } catch {\n return \"library\";\n }\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 (in `library-publish.ts`)\n * push + register the library repo and publish its manifest to the store.\n *\n * @docLink cli/commands/library\n */\n\nimport * as fs from \"node:fs\";\nimport { existsSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport {\n ASSET_KINDS,\n loadSkPublishManifest,\n parseFrontmatter,\n saveSkPublishManifest,\n scanDirectory,\n slugifyAssetName,\n} from \"@skaile/workspaces/core\";\nimport { resolveLibraryDir } from \"@skaile/workspaces/library\";\nimport { Command, Option } from \"commander\";\nimport pc from \"picocolors\";\nimport { stringify as stringifyYaml } from \"yaml\";\nimport { formatRelativeTime, logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport { openLibrary, openLibraryManager } from \"../open-library.ts\";\nimport { createFullRegistry } from \"../open-registry.ts\";\nimport { getStoreIdentity } from \"../store-auth.ts\";\nimport { indexLibrary, resolveLibraryPublisher } from \"./library-index.ts\";\nimport { ensureDomain, listDomains, upsertManifestAsset } from \"./skailify-lib.ts\";\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(new Option(\"--kind <kind>\", \"Asset kind override\").choices([...ASSET_KINDS]))\n .option(\"--library <name>\", \"Target library (default: the default-marked one)\")\n .option(\"--dir <dir>\", \"Target directory inside the library (default: library root)\")\n .option(\"--publisher <name>\", \"Publisher for the new asset (default: the library's default)\")\n .action(\n async (\n kind: string,\n name: string,\n opts: { kind?: string; library?: string; dir?: string; publisher?: 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, library, 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 effectiveKind = opts.kind ?? kind;\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, effectiveKind, destDir);\n if (!res.ok) {\n logErr(res.path);\n process.exit(1);\n }\n logOk(`Created ${effectiveKind}: ${pc.dim(res.path)}`);\n\n // Resolve the publisher and make the asset immediately consumable:\n // stamp the resolved publisher (frontmatter + library manifest, the\n // latter is what discovery keys on), then index into asset_definitions.\n const domain = opts.dir ? opts.dir.split(path.sep)[0] : undefined;\n const publisher = resolveLibraryPublisher(target, opts, domain, getStoreIdentity());\n stampAssetPublisher(res.path, publisher);\n ensureManifestPublisher(target.path, publisher);\n // Register the new asset in the manifest `assets[]` so `library publish`\n // (which reads that inventory, not discovery) actually ships it. `root`\n // is the asset's repo-relative dir; the scaffold stamps version 0.1.0.\n upsertManifestAsset(target.path, {\n kind: effectiveKind,\n name,\n root: path.relative(target.path, res.path) || name,\n version: \"0.1.0\",\n });\n const idx = await indexLibrary(target, library);\n for (const e of idx.errors) logWarn(e);\n logOk(`Indexed — add it with \\`skaile add ${effectiveKind}:@${publisher}/${name}\\``);\n } finally {\n close();\n }\n },\n );\n\n // ── library domain ─────────────────────────────────────────────────────────\n // Domains are the first-level directories of a library and define the\n // publisher namespace. Before this command they were born implicitly via\n // `mkdir`; now `create` scaffolds a DOMAIN.md and a publisher slug.\n const domain = cmd\n .command(\"domain\")\n .description(\"Manage domains (publisher namespaces) inside a library\");\n\n /** Resolve the target library: explicit --library, else the writable default. */\n async function resolveTargetLibrary(\n manager: Awaited<ReturnType<typeof openLibraryManager>>[\"manager\"],\n libraryName: string | undefined,\n ): Promise<Awaited<ReturnType<typeof manager.requireLibrary>>> {\n if (libraryName) return manager.requireLibrary(libraryName);\n const all = await manager.listLibraries();\n const def = all.find((l) => l.isDefault);\n if (def) return def;\n // No explicit default, but a single library is unambiguous — use it.\n if (all.length === 1) return all[0];\n if (all.length === 0) {\n logErr(\"No libraries registered. Run `skaile library init <name>` first.\");\n process.exit(1);\n }\n logErr(\"No default library set. Run `skaile library default <name>` or pass --library.\");\n process.exit(1);\n }\n\n domain\n .command(\"create <name>\")\n .description(\"Scaffold a domain dir + DOMAIN.md inside a library\")\n .option(\"--library <name>\", \"Target library (default: the default-marked one)\")\n .option(\"--publisher <p>\", \"Publisher slug (default: the domain name kebab-cased)\")\n .option(\"--description <text>\", \"Domain description for DOMAIN.md\")\n .action(\n async (\n name: string,\n opts: { library?: string; publisher?: string; description?: string },\n ) => {\n const { manager, close } = await openLibraryManager();\n try {\n const target = await resolveTargetLibrary(manager, opts.library);\n if (target.ownership === \"reader\") {\n logErr(`Library \"${target.name}\" is read-only (ownership=reader).`);\n process.exit(1);\n }\n const res = ensureDomain(target.path, name, {\n publisher: opts.publisher,\n description: opts.description,\n });\n // A domain-structured library is the natural home for domains.\n if (target.structure !== \"domain\") {\n await manager.updateLibrary(target.id, { structure: \"domain\" });\n }\n if (res.created) {\n logOk(`Created domain ${S.cmd(name)} (publisher @${res.publisher}) → ${res.dir}`);\n } else {\n logInfo(`Domain ${S.cmd(name)} already exists at ${res.dir}`);\n }\n } finally {\n close();\n }\n },\n );\n\n domain\n .command(\"list\")\n .description(\"List domains in a library\")\n .option(\"--library <name>\", \"Target library (default: the default-marked one)\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { library?: string; json?: boolean }) => {\n const { manager, close } = await openLibraryManager();\n try {\n const target = await resolveTargetLibrary(manager, opts.library);\n const domains = listDomains(target.path);\n if (opts.json) return console.log(JSON.stringify(domains, null, 2));\n if (domains.length === 0) {\n logInfo(\n `No domains in \"${target.name}\". Create one: \\`skaile library domain create <name>\\`.`,\n );\n return;\n }\n for (const d of domains) console.log(` ${S.cmd(d)}`);\n console.log(`\\n ${S.dim(`${domains.length} domain(s) in ${target.name}`)}\\n`);\n } finally {\n close();\n }\n });\n\n domain\n .command(\"show <name>\")\n .description(\"Print a domain's DOMAIN.md\")\n .option(\"--library <name>\", \"Target library (default: the default-marked one)\")\n .action(async (name: string, opts: { library?: string }) => {\n const { manager, close } = await openLibraryManager();\n try {\n const target = await resolveTargetLibrary(manager, opts.library);\n const domainFile = path.join(target.path, name, \"DOMAIN.md\");\n if (!existsSync(domainFile)) {\n logErr(`Domain \"${name}\" not found in \"${target.name}\" (no ${domainFile}).`);\n process.exit(1);\n }\n console.log(fs.readFileSync(domainFile, \"utf8\"));\n } finally {\n close();\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 index ────────────────────────────────────────────────────────\n // Re-scan a library's on-disk assets into asset_definitions so `add` /\n // `asset install` / `search --local` resolve them. Distinct from `sync`\n // (git pull/push): this indexes local bytes, no remote round-trip.\n cmd\n .command(\"index <name>\")\n .description(\"(Re)index a library's assets into the local index\")\n .action(async (name: string) => {\n const { manager, library, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n // Sync the manifest inventory with disk first, so hand-added assets are\n // both indexed AND publishable (the manifest is the publish allowlist).\n syncManifestWithDisk(lib.path, lib.name);\n const res = await indexLibrary(lib, library);\n for (const e of res.errors) logWarn(e);\n logOk(`Indexed ${res.assetsUpdated} asset(s) from ${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 ────────────────────────────────────\n cmd\n .command(\"publish <lib>\")\n .description(\"Push + register the library's manifest atomically (needs git backend)\")\n .option(\"--asset <ref>\", \"Publish only the single asset matching this ref/name\")\n .option(\"--create-repo\", \"Provision + link a public github repo if the library has no remote\")\n .option(\"--ref <gitref>\", \"Git ref to ingest (default: the library branch or main)\")\n .option(\"--dry-run\", \"Print the plan; push nothing and call no store endpoint\")\n .action(\n async (\n lib: string,\n opts: { asset?: string; createRepo?: boolean; ref?: string; dryRun?: boolean },\n ) => {\n const { runLibraryPublish } = await import(\"./library-publish.ts\");\n await withStoreErrorHandling(() => runLibraryPublish(lib, opts));\n },\n );\n\n cmd\n .command(\"register <lib>\")\n .description(\"Register the library's manifest without pushing (bytes already on github)\")\n .option(\"--asset <ref>\", \"Publish only the single asset matching this ref/name\")\n .option(\"--ref <gitref>\", \"Git ref to ingest (default: the library branch or main)\")\n .option(\"--dry-run\", \"Print the plan; call no store endpoint\")\n .action(async (lib: string, opts: { asset?: string; ref?: string; dryRun?: boolean }) => {\n const { runLibraryRegister } = await import(\"./library-publish.ts\");\n await withStoreErrorHandling(() => runLibraryRegister(lib, opts));\n });\n\n cmd\n .command(\"yank <lib>\")\n .description(\"Retract the library's published assets from the store\")\n .option(\"--asset <ref>\", \"Yank only the single asset matching this ref/name\")\n .action(async (lib: string, opts: { asset?: string }) => {\n const { runLibraryYank } = await import(\"./library-publish.ts\");\n await withStoreErrorHandling(() => runLibraryYank(lib, opts));\n });\n\n return cmd;\n}\n\n/**\n * Run a store-publishing action, surfacing the store's error message cleanly\n * (e.g. the reserved-namespace hint) via `logErr` instead of letting it crash\n * with a raw stack trace. Clean `process.exit(1)` paths inside `fn` are\n * unaffected (they exit before this catch).\n */\nasync function withStoreErrorHandling(fn: () => Promise<void>): Promise<void> {\n try {\n await fn();\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Publisher stamping (library create)\n// ---------------------------------------------------------------------------\n\n/**\n * Stamp `metadata.publisher` into a scaffolded asset's markdown marker so the\n * asset carries its publisher at the source. Only markdown markers (SKILL.md /\n * AGENT.md / CONTRACT.md / `*.prompt.md`) carry frontmatter — a YAML marker\n * (flow / bundle) is left untouched. Best-effort: a missing/odd marker is a\n * no-op (the manifest publisher is the authoritative index key regardless).\n */\nfunction stampAssetPublisher(assetDir: string, publisher: string): void {\n const markers = [\"SKILL.md\", \"AGENT.md\", \"CONTRACT.md\"];\n let markerFile: string | undefined;\n for (const m of markers) {\n if (fs.existsSync(path.join(assetDir, m))) {\n markerFile = path.join(assetDir, m);\n break;\n }\n }\n if (!markerFile) {\n // Only a `.prompt.md` marker carries asset frontmatter — never a bare `.md`\n // catch-all, which would stamp (and corrupt) a template's README/CHANGELOG.\n const promptMd = fs.readdirSync(assetDir).find((f) => f.endsWith(\".prompt.md\"));\n if (promptMd) markerFile = path.join(assetDir, promptMd);\n }\n if (!markerFile) return;\n\n try {\n const { data, body } = parseFrontmatter(fs.readFileSync(markerFile, \"utf8\"));\n const meta =\n data.metadata && typeof data.metadata === \"object\" && !Array.isArray(data.metadata)\n ? { ...(data.metadata as Record<string, unknown>) }\n : {};\n if (meta.publisher != null) return; // Respect an author-set publisher.\n meta.publisher = publisher;\n data.metadata = meta;\n const fm = stringifyYaml(data).trimEnd();\n fs.writeFileSync(markerFile, `---\\n${fm}\\n---\\n\\n${body}\\n`, \"utf8\");\n } catch {\n // Non-fatal — the manifest publisher still drives indexing.\n }\n}\n\n/**\n * Ensure the library's `skaile.manifest.yaml` declares `publisher: <publisher>`.\n * This is the key discovery reads to key assets under the right publisher; the\n * frontmatter stamp above is documentary. Preserves an existing `publisher`\n * (never clobbers a library that already declared one) and the asset inventory.\n */\nfunction ensureManifestPublisher(libraryPath: string, publisher: string): void {\n const manifest = loadSkPublishManifest(libraryPath) ?? { assets: [] };\n if (manifest.publisher) return;\n saveSkPublishManifest(libraryPath, { ...manifest, publisher });\n}\n\n/**\n * Reconcile the manifest `assets[]` inventory with what is actually on disk:\n * scan the library (layout-tolerant) and upsert any asset missing from the\n * inventory. `library publish` filters store-discovered candidates by this\n * inventory, so a hand-added asset (created outside `library create`) would\n * otherwise be indexable but not publishable. Idempotent — existing entries are\n * left as-is (upsert keys by kind+name). Never removes entries (curation-safe).\n */\nfunction syncManifestWithDisk(libraryPath: string, libraryName: string): void {\n const publisher = loadSkPublishManifest(libraryPath)?.publisher ?? slugifyAssetName(libraryName);\n for (const e of scanDirectory(libraryPath, publisher)) {\n const root = path.relative(libraryPath, path.dirname(e.source)) || e.name;\n upsertManifestAsset(libraryPath, { kind: e.kind, name: e.name, root, version: e.version });\n }\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(` behind/ahead: ${status.remoteChanges.behind}/${status.remoteChanges.ahead}`);\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 assignments: { id: string; workspaceId: string; instanceId: string }[] = [];\n if (hasWorkspaceConfig) {\n try {\n assignments = await library.listAssignments(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 assignments: assignments.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 ? `synced ${formatRelativeTime(l.lastSyncAt)}` : \"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(` ${S.label(\"Registered kinds\")} ${pc.green(String(registeredKinds.length))}`);\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(\"Assignments\")} ${assignments.length === 0 ? S.dim(\"none (this workspace)\") : pc.green(String(assignments.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 in a\n * `origin → publisher → domain → asset` tree. `origin` is the feed\n * the asset came from (Library / Sources / Skaile Factory Assets\n * / Store), the outermost collapsible band so it's clear where\n * each skill comes from.\n * `domain` is the sidecar `DOMAIN.md` grouping (display-only).\n * - Sources — third-party github repos registered via `skaile source add`,\n * shown as a `Sources → org → repo → domain → asset` tree (the\n * source-origin slice of the Assets feed, with an extra github-org\n * band). Domains default *collapsed*; install/remove works the\n * same as the Assets tab. CRUD stays in `skaile source …`.\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 * d domain info, 1/2/3 filter to one origin · 0 clear, s sync, i info,\n * Tab switch, 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 {\n assetRefToStr,\n type CatalogDomain,\n type CatalogEntry,\n type DomainRelation,\n} from \"@skaile/workspaces/core\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport type { AssetOrigin, OriginEntry } from \"../asset-feeds.ts\";\nimport {\n bareSoftDepName,\n fitWidth,\n formatSoftDepAddPreview,\n formatSoftDepRemovePreview,\n kindColor,\n kindColorPad,\n S,\n} from \"../helpers.ts\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * A single row in the manage TUI asset list: an origin header, a publisher\n * header, a domain header, a domain info line, or an individual asset entry.\n *\n * The tree is `origin → publisher → domain → asset`. `origin` (the feed the\n * asset was gathered from — store / source / library / factory) is the outermost\n * band and is carried on **every** row, because the same group can appear\n * under more than one origin and must not collapse together. `source` holds the\n * **second-level group** — the publisher namespace for most origins, but the\n * source's short repo name under the Sources band (see {@link OriginEntry.group});\n * it is set on header rows **and** asset rows so grouping stays consistent.\n * `domainSlug` is the\n * navigational group from a sidecar `DOMAIN.md` (`\"\"` = the synthetic \"no\n * domain\" group). A `repo` (`\"<org>/<repo>\"`) is no longer a grouping axis —\n * it rides on the asset row as a dim provenance badge only.\n *\n * A `domain-header` is **navigational**: it collapses/expands and toggles its\n * info region, but never bulk-installs (unlike origin/publisher headers).\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport interface AssetRow {\n type:\n | \"origin-header\"\n | \"publisher-header\"\n | \"domain-header\"\n | \"domain-info\"\n | \"asset\"\n // Sources-tab tree only: a github-org band (\"skaile-ai\") and the repo band\n // (\"ai-assets-skaileup\") under a single static \"Sources\" root.\n | \"source-root\"\n | \"org-header\"\n | \"repo-header\"\n // Libraries-tab tree only: a static \"Libraries\" root and per-library band\n // (no org level — a library is a single authoring place).\n | \"library-root\"\n | \"library-header\";\n origin?: AssetOrigin; // present on all row types (the outer grouping band)\n source?: string; // second-level group key (publisher, or source/repo name under Sources)\n org?: string; // github org (Sources tree); set on every source-origin asset row + its headers\n domainSlug?: string; // domain-header / domain-info: group slug (\"\" = no domain); asset: its domain\n repo?: string; // asset: \"<org>/<repo>\" provenance badge (not a collapse axis)\n entry?: CatalogEntry;\n installed?: boolean;\n underDomain?: boolean; // asset: rendered under a domain-header (drives indent + relation glyph)\n seq?: number; // asset: 1-based step within a `sequence` domain\n}\n\n/** Display metadata + render order for the asset origins. */\nconst ORIGIN_META: Record<AssetOrigin, { icon: string; label: string }> = {\n library: { icon: \"📚\", label: \"Library\" },\n source: { icon: \"🔗\", label: \"Sources\" },\n factory: { icon: \"🏭\", label: \"Skaile Factory Assets\" },\n store: { icon: \"📦\", label: \"Store\" },\n};\n\n/**\n * Render order, local-first: your own authoring places, then github sources you\n * added, then the bundled first-party factory assets, then the (potentially\n * large, remote) store last. {@link loadAssets} default-collapses `store` so\n * local assets stay front-and-centre on open.\n */\nconst ORIGIN_ORDER: AssetOrigin[] = [\"library\", \"source\", \"factory\", \"store\"];\n\n/** Collapse-key builders — origin-namespaced so identical publishers don't merge. */\nconst srcKey = (origin: AssetOrigin, publisher: string) => `${origin}:${publisher}`;\nconst domainKey = (origin: AssetOrigin, publisher: string, slug: string) =>\n `${origin}:${publisher}:dom:${slug}`;\n\n/**\n * Collapse-key builders for the Sources tree (`org → repo → domain`). Kept\n * separate from the asset-tree keys above so the Sources tab collapses\n * independently of the Assets tab's Sources band (different default state:\n * domains here open collapsed).\n */\nconst repoKey = (org: string, repo: string) => `${org}/${repo}`;\nconst srcDomainKey = (org: string, repo: string, slug: string) => `${org}/${repo}:dom:${slug}`;\n\n/**\n * Collapse-key builder for the Libraries tree (`library → domain`). Independent\n * of the Assets tab's Library band; keyed by the library name (its `group`).\n */\nconst libDomainKey = (group: string, slug: string) => `${group}:dom:${slug}`;\n\n/** Slug used for the synthetic \"no domain\" group (assets with no `domainSlug`). */\nconst NO_DOMAIN = \"\";\n\n/**\n * Display registry: `domainSlug` → its metadata (title, description, relation,\n * recommended pick). Populated from the feed (`AssetFeedResult.domains`); empty\n * until the store serves `catalog.listDomains`. A slug with no registry entry\n * still renders a header (titled by its slug) — the join degrades gracefully.\n */\nlet domainRegistry: Map<string, CatalogDomain> = new Map();\n\n/** Short relation badge for a domain header (`[add]`/`[alt]`/`[seq]`). */\nfunction relationBadge(relation: DomainRelation | undefined): string {\n if (relation === \"additions\") return pc.dim(\"[\") + pc.green(\"add\") + pc.dim(\"]\");\n if (relation === \"alternatives\") return pc.dim(\"[\") + pc.yellow(\"alt\") + pc.dim(\"]\");\n if (relation === \"sequence\") return pc.dim(\"[\") + pc.blue(\"seq\") + pc.dim(\"]\");\n return \"\";\n}\n\n/**\n * Per-asset relation hint glyph: `[add]` (additions), `▷alt` (alternatives),\n * `⇣N` (sequence step N). Empty for an asset outside any relational domain.\n */\nfunction relationGlyph(relation: DomainRelation | undefined, seq: number | undefined): string {\n if (relation === \"additions\") return pc.green(\"[add]\");\n if (relation === \"alternatives\") return pc.yellow(\"▷alt\");\n if (relation === \"sequence\") return pc.blue(`⇣${seq ?? \"?\"}`);\n return \"\";\n}\n\n/** Plain (uncoloured) form of {@link relationGlyph} — for column-width math. */\nfunction relationGlyphText(relation: DomainRelation | undefined, seq: number | undefined): string {\n if (relation === \"additions\") return \"[add]\";\n if (relation === \"alternatives\") return \"▷alt\";\n if (relation === \"sequence\") return `⇣${seq ?? \"?\"}`;\n return \"\";\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/cache/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 // Sources tab tree (org → repo → domain → asset) + its visible slice.\n sourceTreeRows: AssetRow[];\n visibleSourceRows: AssetRow[];\n // Libraries tab tree (library → domain → asset) + its visible slice.\n libraryTreeRows: AssetRow[];\n visibleLibraryRows: AssetRow[];\n pendingAdds: Set<string>;\n pendingRemoves: Set<string>;\n collapsedOrigins: Set<AssetOrigin>; // keys: origin\n collapsedSources: Set<string>; // keys: \"origin:publisher\"\n collapsedDomains: Set<string>; // keys: \"origin:publisher:dom:<slug>\"\n expandedDomainInfo: Set<string>; // keys: same as collapsedDomains — info region open\n seenDomains: Set<string>; // domain keys encountered (drives one-shot collapse-at-domain)\n // Sources-tab collapse state (independent of the Assets tab). Domains here\n // default *collapsed*; `seenSourceDomains` makes that a one-shot so a user\n // expand survives reloads.\n collapsedSourceOrgs: Set<string>; // keys: \"<org>\"\n collapsedSourceRepos: Set<string>; // keys: \"<org>/<repo>\"\n collapsedSourceDomains: Set<string>; // keys: \"<org>/<repo>:dom:<slug>\"\n expandedSourceDomainInfo: Set<string>; // keys: same as collapsedSourceDomains\n seenSourceDomains: Set<string>; // domain keys encountered (drives one-shot collapse-at-domain)\n // Libraries-tab collapse state (independent of the Assets tab). Library bands\n // default *open*; domains default *collapsed*, `seenLibraryDomains` making that\n // a one-shot so a user expand survives reloads.\n collapsedLibraryGroups: Set<string>; // keys: \"<library>\"\n collapsedLibraryDomains: Set<string>; // keys: \"<library>:dom:<slug>\"\n expandedLibraryDomainInfo: Set<string>; // keys: same as collapsedLibraryDomains\n seenLibraryDomains: Set<string>; // domain keys encountered (drives one-shot collapse-at-domain)\n seenOrigins: Set<AssetOrigin>; // origins encountered so far (drives one-shot store auto-collapse)\n originFilter: AssetOrigin | null; // when set, only this origin's rows are shown\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 sourceTreeRows: [],\n visibleSourceRows: [],\n libraryTreeRows: [],\n visibleLibraryRows: [],\n pendingAdds: new Set(),\n pendingRemoves: new Set(),\n collapsedOrigins: new Set(),\n collapsedSources: new Set(),\n collapsedDomains: new Set(),\n expandedDomainInfo: new Set(),\n seenDomains: new Set(),\n collapsedSourceOrgs: new Set(),\n collapsedSourceRepos: new Set(),\n collapsedSourceDomains: new Set(),\n expandedSourceDomainInfo: new Set(),\n seenSourceDomains: new Set(),\n collapsedLibraryGroups: new Set(),\n collapsedLibraryDomains: new Set(),\n expandedLibraryDomainInfo: new Set(),\n seenLibraryDomains: new Set(),\n seenOrigins: new Set(),\n originFilter: null,\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 origin / publisher / domain sets, the per-domain info-expand\n * set, and the active origin filter. The tree is flat (`origin → publisher →\n * domain → asset`, domain slugs not nested), so collapse checks are exact set\n * membership — no prefix walking. Collapse keys are origin-namespaced so the\n * same publisher under two origins collapses independently.\n *\n * - Every row is hidden when an `originFilter` is set and the row's origin\n * doesn't match it.\n * - An `origin-header` is otherwise always visible.\n * - A `publisher-header` is hidden when its origin is collapsed.\n * - A `domain-header` is hidden when its origin or its `\"origin:publisher\"` key\n * is collapsed.\n * - A `domain-info` line follows the same rule as the domain's assets (shown\n * when the band is open). The `[d]` toggle changes only how it *renders*\n * (truncated ↔ full), not whether it shows.\n * - An asset under a real domain is hidden when that `\"…:dom:<slug>\"` key is\n * collapsed; a \"no domain\" asset only depends on its origin + publisher.\n *\n * @param rows - Complete flat list of asset rows.\n * @param collapsedOrigins - Set of origins whose children are hidden.\n * @param collapsedSources - Set of `\"origin:publisher\"` keys whose children are hidden.\n * @param collapsedDomains - Set of `\"origin:publisher:dom:<slug>\"` keys whose assets are hidden.\n * @param originFilter - When set, only rows of this origin are kept.\n * @returns Filtered array of visible rows.\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function buildVisibleRows(\n rows: AssetRow[],\n collapsedOrigins: Set<AssetOrigin>,\n collapsedSources: Set<string>,\n collapsedDomains: Set<string>,\n originFilter: AssetOrigin | null = null,\n): AssetRow[] {\n return rows.filter((row) => {\n const origin = rowOrigin(row);\n if (originFilter && origin !== originFilter) return false;\n if (row.type === \"origin-header\") return true;\n if (collapsedOrigins.has(origin)) return false;\n if (row.type === \"publisher-header\") return true;\n if (collapsedSources.has(srcKey(origin, rowGroup(row)))) return false;\n if (row.type === \"domain-header\") return true;\n if (row.type === \"domain-info\") {\n return !collapsedDomains.has(domainKey(origin, row.source!, row.domainSlug ?? NO_DOMAIN));\n }\n // asset: a real domain (underDomain) is gated on its domain collapse key;\n // a \"no domain\" asset hangs directly under its group (already cleared).\n if (row.underDomain) {\n return !collapsedDomains.has(domainKey(origin, rowGroup(row), rowDomain(row)));\n }\n return true;\n });\n}\n\n/**\n * Return `kind:name` refs for all asset rows belonging to a specific origin.\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function originAssetRefs(rows: AssetRow[], origin: AssetOrigin): string[] {\n return refsOf(rows.filter((r) => isAsset(r) && rowOrigin(r) === origin));\n}\n\n/**\n * Return `kind:name` refs for all asset rows belonging to a specific\n * origin + publisher + domain slug (`\"\"` = the \"no domain\" group).\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function domainAssetRefs(\n rows: AssetRow[],\n origin: AssetOrigin,\n publisher: string,\n slug: string,\n): string[] {\n return refsOf(rows.filter((r) => isAsset(r) && inDomain(r, origin, publisher, slug)));\n}\n\n/**\n * Return `kind:name` refs for all asset rows belonging to a specific\n * origin + publisher (across its repos).\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function sourceAssetRefs(rows: AssetRow[], origin: AssetOrigin, source: string): string[] {\n return refsOf(rows.filter((r) => isAsset(r) && inSource(r, origin, source)));\n}\n\n// ── Sources tree (org → repo → domain → asset) ───────────────────────────────\n//\n// The Sources tab renders the `source`-origin slice of the asset feed as a\n// collapsible tree with one extra band — the github **org** — above the repo.\n// It reuses the same flat-list/visible-filter shape as the Assets tree, with\n// its own collapse keys (`<org>`, `<org>/<repo>`, `<org>/<repo>:dom:<slug>`).\n\n/**\n * Build the flat Sources-tree row list from the source-origin asset rows.\n * Hierarchy: a single static \"Sources\" root → per github org → per repo → \"no\n * domain\" assets (directly under the repo) → per real domain (header + optional\n * info + assets). `registered` injects org/repo bands for sources that have no\n * discoverable assets yet, so a freshly-added source still shows up.\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function buildSourceTreeRows(\n assetRows: AssetRow[],\n registered: { org: string; repo: string }[] = [],\n): AssetRow[] {\n // org → repo → slug → assets\n const byOrg = new Map<string, Map<string, Map<string, AssetRow[]>>>();\n const ensure = (org: string, repo: string) => {\n if (!byOrg.has(org)) byOrg.set(org, new Map());\n const byRepo = byOrg.get(org)!;\n if (!byRepo.has(repo)) byRepo.set(repo, new Map());\n return byRepo.get(repo)!;\n };\n\n for (const r of assetRows) {\n if (!isAsset(r) || rowOrigin(r) !== \"source\") continue;\n const org = rowOrg(r);\n const repo = rowGroup(r);\n const slug = rowDomain(r);\n const byDomain = ensure(org, repo);\n if (!byDomain.has(slug)) byDomain.set(slug, []);\n byDomain.get(slug)!.push(r);\n }\n // Make empty registered sources visible (org/repo band, no assets).\n for (const { org, repo } of registered) ensure(org, repo);\n\n if (byOrg.size === 0) return [];\n\n const rows: AssetRow[] = [{ type: \"source-root\" }];\n for (const org of [...byOrg.keys()].sort((a, b) => a.localeCompare(b))) {\n rows.push({ type: \"org-header\", origin: \"source\", org });\n const byRepo = byOrg.get(org)!;\n for (const repo of [...byRepo.keys()].sort((a, b) => a.localeCompare(b))) {\n rows.push({ type: \"repo-header\", origin: \"source\", org, source: repo });\n const byDomain = byRepo.get(repo)!;\n const loose = byDomain.get(NO_DOMAIN);\n if (loose) for (const a of loose) rows.push({ ...a, org });\n for (const slug of sortedDomainSlugs([...byDomain.keys()])) {\n const meta = domainRegistry.get(slug);\n rows.push({ type: \"domain-header\", origin: \"source\", org, source: repo, domainSlug: slug });\n if (meta?.description) {\n rows.push({ type: \"domain-info\", origin: \"source\", org, source: repo, domainSlug: slug });\n }\n for (const a of byDomain.get(slug)!) rows.push({ ...a, org });\n }\n }\n }\n return rows;\n}\n\n/**\n * Filter the flat Sources-tree rows to those visible given the collapsed\n * org / repo / domain sets. The root is always visible; an org-header hides\n * when no set applies above it; a repo-header hides under a collapsed org; a\n * domain-header hides under a collapsed org/repo; a domain-info / domained\n * asset hides under a collapsed domain (or any collapsed ancestor).\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function buildVisibleSourceRows(\n rows: AssetRow[],\n collapsedOrgs: Set<string>,\n collapsedRepos: Set<string>,\n collapsedDomains: Set<string>,\n): AssetRow[] {\n return rows.filter((row) => {\n if (row.type === \"source-root\" || row.type === \"org-header\") return true;\n const org = row.org ?? UNKNOWN_ORG;\n if (collapsedOrgs.has(org)) return false;\n if (row.type === \"repo-header\") return true;\n if (collapsedRepos.has(repoKey(org, row.source!))) return false;\n if (row.type === \"domain-header\") return true;\n if (row.type === \"domain-info\") {\n return !collapsedDomains.has(srcDomainKey(org, row.source!, row.domainSlug ?? NO_DOMAIN));\n }\n // asset: a domained one is gated on its domain key; a \"no domain\" asset\n // hangs directly under the repo (already cleared by the repo check above).\n if (row.underDomain) {\n return !collapsedDomains.has(srcDomainKey(org, rowGroup(row), rowDomain(row)));\n }\n return true;\n });\n}\n\n/** Refs of all source-tree asset rows in a github org. */\nexport function sourceOrgRefs(rows: AssetRow[], org: string): string[] {\n return refsOf(rows.filter((r) => isAsset(r) && rowOrigin(r) === \"source\" && rowOrg(r) === org));\n}\n\n/** Refs of all source-tree asset rows in a specific org + repo. */\nexport function sourceRepoRefs(rows: AssetRow[], org: string, repo: string): string[] {\n return refsOf(\n rows.filter(\n (r) => isAsset(r) && rowOrigin(r) === \"source\" && rowOrg(r) === org && rowGroup(r) === repo,\n ),\n );\n}\n\n/** Refs of all source-tree asset rows in a specific org + repo + domain slug. */\nexport function sourceDomainRefs(\n rows: AssetRow[],\n org: string,\n repo: string,\n slug: string,\n): string[] {\n return refsOf(\n rows.filter(\n (r) =>\n isAsset(r) &&\n rowOrigin(r) === \"source\" &&\n rowOrg(r) === org &&\n rowGroup(r) === repo &&\n rowDomain(r) === slug,\n ),\n );\n}\n\n// ── Libraries tree (library → domain → asset) ────────────────────────────────\n//\n// The Libraries tab renders the `library`-origin slice of the asset feed as a\n// collapsible tree — like the Sources tree but with no github-org band (a\n// library is a single authoring place). Reuses the same flat-list/visible-filter\n// shape with its own collapse keys (`<library>`, `<library>:dom:<slug>`).\n\n/**\n * Build the flat Libraries-tree row list from the library-origin asset rows.\n * Hierarchy: a single static \"Libraries\" root → per library band → \"no domain\"\n * assets (directly under the library) → per real domain (header + optional info\n * + assets). `registered` injects a band for each library that has no\n * discoverable assets yet, so a freshly-created library still shows up.\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function buildLibraryTreeRows(assetRows: AssetRow[], registered: string[] = []): AssetRow[] {\n // group → slug → assets\n const byGroup = new Map<string, Map<string, AssetRow[]>>();\n const ensure = (group: string) => {\n if (!byGroup.has(group)) byGroup.set(group, new Map());\n return byGroup.get(group)!;\n };\n\n for (const r of assetRows) {\n if (!isAsset(r) || rowOrigin(r) !== \"library\") continue;\n const group = rowGroup(r);\n const slug = rowDomain(r);\n const byDomain = ensure(group);\n if (!byDomain.has(slug)) byDomain.set(slug, []);\n byDomain.get(slug)!.push(r);\n }\n // Make empty registered libraries visible (library band, no assets).\n for (const group of registered) ensure(group);\n\n if (byGroup.size === 0) return [];\n\n const rows: AssetRow[] = [{ type: \"library-root\" }];\n for (const group of [...byGroup.keys()].sort((a, b) => a.localeCompare(b))) {\n rows.push({ type: \"library-header\", origin: \"library\", source: group });\n const byDomain = byGroup.get(group)!;\n const loose = byDomain.get(NO_DOMAIN);\n if (loose) for (const a of loose) rows.push({ ...a });\n for (const slug of sortedDomainSlugs([...byDomain.keys()])) {\n const meta = domainRegistry.get(slug);\n rows.push({ type: \"domain-header\", origin: \"library\", source: group, domainSlug: slug });\n if (meta?.description) {\n rows.push({ type: \"domain-info\", origin: \"library\", source: group, domainSlug: slug });\n }\n for (const a of byDomain.get(slug)!) rows.push({ ...a });\n }\n }\n return rows;\n}\n\n/**\n * Filter the flat Libraries-tree rows to those visible given the collapsed\n * group / domain sets. The root + library headers are always visible; everything\n * under a collapsed library hides; a domain-info / domained asset hides under a\n * collapsed domain (a \"no domain\" asset hangs directly under the library).\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function buildVisibleLibraryRows(\n rows: AssetRow[],\n collapsedGroups: Set<string>,\n collapsedDomains: Set<string>,\n): AssetRow[] {\n return rows.filter((row) => {\n if (row.type === \"library-root\" || row.type === \"library-header\") return true;\n const group = row.source ?? rowGroup(row);\n if (collapsedGroups.has(group)) return false;\n if (row.type === \"domain-header\") return true;\n if (row.type === \"domain-info\") {\n return !collapsedDomains.has(libDomainKey(group, row.domainSlug ?? NO_DOMAIN));\n }\n // asset: a domained one is gated on its domain key; a \"no domain\" asset hangs\n // directly under the library (already cleared by the group check above).\n if (row.underDomain) {\n return !collapsedDomains.has(libDomainKey(rowGroup(row), rowDomain(row)));\n }\n return true;\n });\n}\n\n/** Refs of all library-tree asset rows in a specific library band. */\nexport function libraryGroupRefs(rows: AssetRow[], group: string): string[] {\n return refsOf(\n rows.filter((r) => isAsset(r) && rowOrigin(r) === \"library\" && rowGroup(r) === group),\n );\n}\n\n// ── Internal row helpers ─────────────────────────────────────────────────────\n\nfunction isAsset(r: AssetRow): boolean {\n return r.type === \"asset\";\n}\n\nfunction rowOrigin(r: AssetRow): AssetOrigin {\n return r.origin ?? \"source\";\n}\n\nfunction rowPublisher(r: AssetRow): string {\n return r.entry?.publisher || \"other\";\n}\n\n/**\n * The row's second-level group key. Prefers the explicit `source` (set on header\n * rows and, since source-vs-publisher grouping, on asset rows too) and falls back\n * to the entry's publisher — so an asset row built without a `source` (e.g. tests)\n * still groups by publisher exactly as before.\n */\nfunction rowGroup(r: AssetRow): string {\n return r.source ?? rowPublisher(r);\n}\n\nfunction rowDomain(r: AssetRow): string {\n return r.entry?.domainSlug || NO_DOMAIN;\n}\n\n/**\n * The github org for a source asset, taken from the `<org>/<repo>` provenance\n * slug `scanRepo` stamps onto `entry.repo`. Empty when unknown (the entry then\n * groups under a synthetic \"(unknown)\" org so it never silently disappears).\n */\nconst UNKNOWN_ORG = \"(unknown)\";\nfunction rowOrg(r: AssetRow): string {\n if (r.org) return r.org;\n const repo = r.entry?.repo;\n if (repo?.includes(\"/\")) return repo.slice(0, repo.indexOf(\"/\"));\n return UNKNOWN_ORG;\n}\n\nfunction refsOf(rows: AssetRow[]): string[] {\n return rows.map((r) => assetRefOf(r)).filter((ref): ref is string => ref !== null);\n}\n\nfunction inSource(r: AssetRow, origin: AssetOrigin, source: string): boolean {\n return rowOrigin(r) === origin && rowGroup(r) === source;\n}\n\n/**\n * Returns true when the asset row belongs to `origin` + `publisher` and its\n * domain slug is exactly `slug` (`\"\"` matches \"no domain\" assets that hang\n * directly under the publisher). Slugs are flat — exact match, no descendant\n * walking (domains are never nested).\n */\nfunction inDomain(r: AssetRow, origin: AssetOrigin, publisher: string, slug: string): boolean {\n if (!inSource(r, origin, publisher)) return false;\n return rowDomain(r) === slug;\n}\n\n// Refs flow into AssetManager.add, which parses them through parseAssetRef —\n// publisher is required under the canonical-identity schema. An entry with no\n// publisher has no canonical identity and can't be installed, so it's not\n// selectable (returns null) rather than producing a ref that throws on apply.\nfunction assetRefOf(r: AssetRow): string | null {\n if (!isAsset(r) || !r.entry?.publisher) return null;\n return assetRefToStr({\n kind: r.entry.kind,\n name: r.entry.name,\n publisher: r.entry.publisher,\n });\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/**\n * Apply a header-targeted action; returns true if `row` is a header type (so the\n * caller suppresses the per-asset fallback). Origin and publisher headers\n * bulk-install their subtree. A **domain header is navigational** — it is\n * \"handled\" (returns true → +/- do nothing) but never bulk-installs, because a\n * domain is a discovery grouping, not a bundle. `domain-info` rows likewise.\n */\nfunction actOnHeader(row: AssetRow, action: Action): boolean {\n if (row.type === \"origin-header\") {\n bulkSelection(originAssetRefs(state.assetRows, rowOrigin(row)), action);\n return true;\n }\n if (row.type === \"publisher-header\") {\n bulkSelection(sourceAssetRefs(state.assetRows, rowOrigin(row), row.source!), action);\n return true;\n }\n return row.type === \"domain-header\" || row.type === \"domain-info\";\n}\n\n// ── Data loading ─────────────────────────────────────────────────────────────\n\n/**\n * Per-ref cache of the footer soft-dep preview line (keyed by `<mode>:kind:@pub/name`).\n * Computing it opens the index, so we memoize and only recompute on\n * highlight/selection change — never per render frame. The mode prefix keeps the\n * add-preview and remove-preview lines distinct for the same ref. Cleared on\n * `loadAssets` because the absent/orphan result changes once an asset is added/removed.\n */\nconst softDepPreviewCache = new Map<string, string>();\n\n/**\n * Preview the soft deps of the asset currently under the cursor (Assets/Sources\n * tabs) in the footer. A present/removable asset previews what removing it would\n * orphan (`removing <name> would orphan <x> (soft dep)`); an absent asset previews\n * the soft deps adding it would reference (`<name> references <x> (soft dep, not\n * auto-added)`). Report-only — highlighting/selecting never auto-adds or -removes.\n * No-op on non-asset rows.\n */\n/**\n * The `mode:ref` preview cache key for the row currently under the cursor, or\n * `null` on a non-previewable row. Used to detect a cursor move across an await.\n */\nfunction softDepCacheKeyUnderCursor(): string | null {\n if (state.tab !== \"assets\" && state.tab !== \"sources\") return null;\n const rows = state.tab === \"sources\" ? state.visibleSourceRows : state.visibleRows;\n const row = rows[state.cursor];\n const ref = row?.type === \"asset\" ? assetRefOf(row) : null;\n if (!row || !ref) return null;\n return `${row.installed ? \"remove\" : \"add\"}:${ref}`;\n}\n\nasync function previewSoftDepsUnderCursor(): Promise<void> {\n if (state.tab !== \"assets\" && state.tab !== \"sources\") return;\n const rows = state.tab === \"sources\" ? state.visibleSourceRows : state.visibleRows;\n const row = rows[state.cursor];\n const ref = row?.type === \"asset\" ? assetRefOf(row) : null;\n if (!row || !ref) {\n state.message = \"\"; // clear any stale preview when not on a previewable asset\n return;\n }\n // Present assets are removable → preview their orphans; absent assets are\n // addable → preview the soft deps they'd reference.\n const mode = row.installed ? \"remove\" : \"add\";\n const cacheKey = `${mode}:${ref}`;\n let msg = softDepPreviewCache.get(cacheKey);\n if (msg === undefined) {\n if (mode === \"remove\") {\n const targets = (await am.orphanedSoftDepsAfterRemoving([ref])).map((o) =>\n bareSoftDepName(o.target),\n );\n msg = formatSoftDepRemovePreview(row.entry!.name, targets);\n } else {\n const targets = (await am.reportSoftDeps([ref])).map((e) => bareSoftDepName(e.to));\n msg = formatSoftDepAddPreview(row.entry!.name, targets);\n }\n softDepPreviewCache.set(cacheKey, msg);\n }\n // The index read may have outlived the cursor (rapid j/k): only write if the\n // cursor still sits on the row we computed for, else a slower earlier call\n // would clobber a newer row's preview.\n if (softDepCacheKeyUnderCursor() === cacheKey) state.message = msg;\n}\n\nasync function loadAssets(): Promise<void> {\n softDepPreviewCache.clear();\n const { gatherAssetFeeds } = await import(\"../asset-feeds.ts\");\n const { entries, domains, notes } = await gatherAssetFeeds(am, am.projectDir);\n if (notes.length > 0) {\n state.message = notes.map((n) => `[${n.feed}] ${n.message}`).join(\" • \");\n }\n domainRegistry = new Map(domains.map((d) => [d.slug, d]));\n const installed = new Set(am.listDeployed().map((e) => `${e.kind}:${e.name}`));\n\n const byOrigin = groupEntriesByOriginPublisherDomain(entries);\n const rows = buildAssetRowsFromGroups(byOrigin, installed);\n state.assetRows = rows;\n\n reconcileCollapsedSets(rows);\n rebuildVisible();\n rebuildSourceTree();\n rebuildLibraryTree();\n}\n\n/**\n * Rebuild the Sources-tab tree from the current asset rows (the source-origin\n * slice) plus the registered-source skeleton, reconcile its collapse sets\n * (orgs/repos default open; domains default collapsed, one-shot), and refresh\n * the visible slice. Called whenever the asset rows or the source list change.\n */\nfunction rebuildSourceTree(): void {\n const registered = state.sourceRows\n .map((s) => sourceOrgRepo(s))\n .filter((x): x is NonNullable<typeof x> => x !== null);\n state.sourceTreeRows = buildSourceTreeRows(state.assetRows, registered);\n reconcileSourceCollapsedSets(state.sourceTreeRows);\n rebuildVisibleSources();\n}\n\n/**\n * Derive `{org, repo}` from a registered source's cache path\n * (`…/sources/<host>/<owner>/<repo>`). Returns null when the path is too short\n * to carry an owner segment.\n */\nfunction sourceOrgRepo(s: SourceRow): { org: string; repo: string } | null {\n const parts = s.path.split(path.sep).filter(Boolean);\n if (parts.length < 2) return null;\n return { org: parts[parts.length - 2]!, repo: parts[parts.length - 1]! };\n}\n\n/**\n * Reconcile the Sources-tab collapse sets with new tree rows. Orgs and repos\n * default open; domains default *collapsed* — but only the first time each is\n * seen (`seenSourceDomains`), so a user expand is not clobbered on reload.\n * Stale keys (for rows that vanished) are pruned from every set.\n */\nfunction reconcileSourceCollapsedSets(rows: AssetRow[]): void {\n const orgKeys = new Set(rows.filter((r) => r.type === \"org-header\").map((r) => r.org!));\n const repoKeys = new Set(\n rows.filter((r) => r.type === \"repo-header\").map((r) => repoKey(r.org!, r.source!)),\n );\n const domainKeys = new Set(\n rows\n .filter((r) => r.type === \"domain-header\")\n .map((r) => srcDomainKey(r.org!, r.source!, r.domainSlug ?? NO_DOMAIN)),\n );\n\n for (const k of state.collapsedSourceOrgs)\n if (!orgKeys.has(k)) state.collapsedSourceOrgs.delete(k);\n for (const k of state.collapsedSourceRepos) {\n if (!repoKeys.has(k)) state.collapsedSourceRepos.delete(k);\n }\n // One-shot collapse-at-domain: collapse each domain the first time we see it.\n for (const k of domainKeys) {\n if (!state.seenSourceDomains.has(k)) {\n state.collapsedSourceDomains.add(k);\n state.seenSourceDomains.add(k);\n }\n }\n for (const k of state.collapsedSourceDomains) {\n if (!domainKeys.has(k)) state.collapsedSourceDomains.delete(k);\n }\n for (const k of state.expandedSourceDomainInfo) {\n if (!domainKeys.has(k)) state.expandedSourceDomainInfo.delete(k);\n }\n for (const k of state.seenSourceDomains)\n if (!domainKeys.has(k)) state.seenSourceDomains.delete(k);\n}\n\nfunction rebuildVisibleSources(): void {\n state.visibleSourceRows = buildVisibleSourceRows(\n state.sourceTreeRows,\n state.collapsedSourceOrgs,\n state.collapsedSourceRepos,\n state.collapsedSourceDomains,\n );\n clampCursor();\n}\n\n/**\n * Rebuild the Libraries-tab tree from the current asset rows (the library-origin\n * slice) plus the registered-library skeleton, reconcile its collapse sets\n * (library bands default open; domains default collapsed, one-shot), and refresh\n * the visible slice. Called whenever the asset rows or the library list change.\n */\nfunction rebuildLibraryTree(): void {\n state.libraryTreeRows = buildLibraryTreeRows(\n state.assetRows,\n state.libraryRows.map((l) => l.name),\n );\n reconcileLibraryCollapsedSets(state.libraryTreeRows);\n rebuildVisibleLibraries();\n}\n\n/**\n * Reconcile the Libraries-tab collapse sets with new tree rows. Library bands\n * default open; domains default *collapsed* — but only the first time each is\n * seen (`seenLibraryDomains`), so a user expand is not clobbered on reload.\n * Stale keys (for rows that vanished) are pruned from every set.\n */\nfunction reconcileLibraryCollapsedSets(rows: AssetRow[]): void {\n const groupKeys = new Set(rows.filter((r) => r.type === \"library-header\").map((r) => r.source!));\n const domainKeys = new Set(\n rows\n .filter((r) => r.type === \"domain-header\")\n .map((r) => libDomainKey(r.source!, r.domainSlug ?? NO_DOMAIN)),\n );\n\n for (const k of state.collapsedLibraryGroups)\n if (!groupKeys.has(k)) state.collapsedLibraryGroups.delete(k);\n // One-shot collapse-at-domain: collapse each domain the first time we see it.\n for (const k of domainKeys) {\n if (!state.seenLibraryDomains.has(k)) {\n state.collapsedLibraryDomains.add(k);\n state.seenLibraryDomains.add(k);\n }\n }\n for (const k of state.collapsedLibraryDomains) {\n if (!domainKeys.has(k)) state.collapsedLibraryDomains.delete(k);\n }\n for (const k of state.expandedLibraryDomainInfo) {\n if (!domainKeys.has(k)) state.expandedLibraryDomainInfo.delete(k);\n }\n for (const k of state.seenLibraryDomains)\n if (!domainKeys.has(k)) state.seenLibraryDomains.delete(k);\n}\n\nfunction rebuildVisibleLibraries(): void {\n state.visibleLibraryRows = buildVisibleLibraryRows(\n state.libraryTreeRows,\n state.collapsedLibraryGroups,\n state.collapsedLibraryDomains,\n );\n clampCursor();\n}\n\n/**\n * Group feed entries by origin (the feed), then by their second-level group\n * (`OriginEntry.group` — the source name under Sources, else `entry.publisher`),\n * then by `domainSlug` (`\"\"` = no domain → assets hang directly under their\n * group). The same group can appear under multiple origins, so origin is the\n * outermost map key.\n */\nfunction groupEntriesByOriginPublisherDomain(\n entries: OriginEntry[],\n): Map<AssetOrigin, Map<string, Map<string, CatalogEntry[]>>> {\n const byOrigin = new Map<AssetOrigin, Map<string, Map<string, CatalogEntry[]>>>();\n for (const { origin, entry, group } of entries) {\n const publisher = group || entry.publisher || \"other\";\n const slug = entry.domainSlug || NO_DOMAIN;\n if (!byOrigin.has(origin)) byOrigin.set(origin, new Map());\n const byPublisher = byOrigin.get(origin)!;\n if (!byPublisher.has(publisher)) byPublisher.set(publisher, new Map());\n const byDomain = byPublisher.get(publisher)!;\n if (!byDomain.has(slug)) byDomain.set(slug, []);\n byDomain.get(slug)!.push(entry);\n }\n return byOrigin;\n}\n\n/** Sort a publisher's real domain slugs by registry `order`, then slug. */\nfunction sortedDomainSlugs(slugs: string[]): string[] {\n return slugs\n .filter((s) => s !== NO_DOMAIN)\n .sort((a, b) => {\n const oa = domainRegistry.get(a)?.order ?? Number.MAX_SAFE_INTEGER;\n const ob = domainRegistry.get(b)?.order ?? Number.MAX_SAFE_INTEGER;\n return oa !== ob ? oa - ob : a.localeCompare(b);\n });\n}\n\n/**\n * Emit origin-header → publisher-header → \"no domain\" assets (directly under the\n * publisher) → per real domain: domain-header → optional domain-info → assets.\n * Domains are never nested, so a flat per-slug emit is correct. \"No domain\"\n * assets stay headerless so a domain-free catalog (the common case until the\n * store serves domains) renders exactly like a flat publisher list.\n */\nfunction buildAssetRowsFromGroups(\n byOrigin: Map<AssetOrigin, Map<string, Map<string, CatalogEntry[]>>>,\n installed: Set<string>,\n): AssetRow[] {\n const rows: AssetRow[] = [];\n const sortItems = (items: CatalogEntry[]) =>\n items.sort((a, b) =>\n a.kind !== b.kind ? a.kind.localeCompare(b.kind) : a.name.localeCompare(b.name),\n );\n const pushAsset = (\n origin: AssetOrigin,\n group: string,\n entry: CatalogEntry,\n underDomain: boolean,\n seq?: number,\n ) => {\n const ref = `${entry.kind}:${entry.name}`;\n // `source` carries the group on assets too, so collapse/selection keys match\n // the headers even when the group differs from the publisher (Sources band).\n // `org` (github org from `entry.repo`) is the Sources-tree grouping axis;\n // harmless on the Assets tab, which never reads it.\n rows.push({\n type: \"asset\",\n origin,\n source: group,\n org: entry.repo?.includes(\"/\") ? entry.repo.slice(0, entry.repo.indexOf(\"/\")) : undefined,\n entry,\n installed: installed.has(ref),\n underDomain,\n seq,\n });\n };\n\n for (const origin of ORIGIN_ORDER) {\n const byGroup = byOrigin.get(origin);\n if (!byGroup || byGroup.size === 0) continue;\n rows.push({ type: \"origin-header\", origin });\n for (const [group, byDomain] of [...byGroup.entries()].sort((a, b) =>\n a[0].localeCompare(b[0]),\n )) {\n rows.push({ type: \"publisher-header\", origin, source: group });\n\n // \"No domain\" assets render directly under the group (no header).\n const loose = byDomain.get(NO_DOMAIN);\n if (loose) for (const entry of sortItems(loose)) pushAsset(origin, group, entry, false);\n\n // Real domains, ordered, each as a collapsible labelled group.\n for (const slug of sortedDomainSlugs([...byDomain.keys()])) {\n const meta = domainRegistry.get(slug);\n rows.push({ type: \"domain-header\", origin, source: group, domainSlug: slug });\n if (meta?.description) {\n rows.push({ type: \"domain-info\", origin, source: group, domainSlug: slug });\n }\n const items = sortItems(byDomain.get(slug)!);\n const sequenced = meta?.relation === \"sequence\";\n items.forEach((entry, i) =>\n pushAsset(origin, group, entry, true, sequenced ? i + 1 : undefined),\n );\n }\n }\n }\n return rows;\n}\n\n/** Reconcile the collapsed origin / source / domain sets with the new rows. */\nfunction reconcileCollapsedSets(rows: AssetRow[]): void {\n // Every origin band except the built-in `factory` auto-collapses the first\n // time it appears (a one-shot — a later expand survives reloads after apply).\n // Keeps the initial list compact; `factory` (the built-ins) stays open so a\n // fresh project still shows something useful.\n const presentOrigins = new Set(rows.filter((r) => r.type === \"origin-header\").map(rowOrigin));\n for (const o of presentOrigins) {\n if (!state.seenOrigins.has(o)) {\n if (o !== \"factory\") state.collapsedOrigins.add(o);\n state.seenOrigins.add(o);\n }\n }\n for (const o of state.collapsedOrigins) {\n if (!presentOrigins.has(o)) state.collapsedOrigins.delete(o);\n }\n if (state.originFilter && !presentOrigins.has(state.originFilter)) state.originFilter = null;\n\n // Publisher headers default open. Prune stale keys.\n const newSources = new Set(\n rows.filter((r) => r.type === \"publisher-header\").map((r) => srcKey(rowOrigin(r), r.source!)),\n );\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\n .filter((r) => r.type === \"domain-header\")\n .map((r) => domainKey(rowOrigin(r), r.source!, r.domainSlug ?? NO_DOMAIN)),\n );\n for (const k of newDomainKeys) {\n if (!state.seenDomains.has(k)) {\n state.collapsedDomains.add(k);\n state.seenDomains.add(k);\n }\n }\n for (const d of state.collapsedDomains) {\n if (!newDomainKeys.has(d)) state.collapsedDomains.delete(d);\n }\n for (const d of state.expandedDomainInfo) {\n if (!newDomainKeys.has(d)) state.expandedDomainInfo.delete(d);\n }\n // Prune stale keys — a removed-then-re-added domain is treated as new and re-collapsed.\n for (const d of state.seenDomains) {\n if (!newDomainKeys.has(d)) state.seenDomains.delete(d);\n }\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/cache/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 }, { getGlobalCacheDir }] = await Promise.all([\n import(\"../open-library.ts\"),\n import(\"@skaile/workspaces/library\"),\n import(\"@skaile/workspaces/core\"),\n ]);\n const { manager, library, close } = await openLibraryManager();\n try {\n // index.db rows predating the cache migration still carry the legacy\n // ~/.skaile/sources path, so tolerate both roots.\n const newRoot = getGlobalCacheDir();\n const legacyRoot = path.join(skaileHomeDir(), \"sources\");\n const isSourceRow = (l: { path: string }) =>\n l.path.startsWith(newRoot) || l.path.startsWith(legacyRoot);\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 // Fold the registered-source / -library skeletons into their trees so a\n // registered-but-asset-less source or library still shows its band. Both must\n // run here (not only in `loadAssets`): `libraryRows` is populated in this\n // function, after `loadAssets` already built the tree with an empty list.\n rebuildSourceTree();\n rebuildLibraryTree();\n}\n\nfunction rebuildVisible(): void {\n state.visibleRows = buildVisibleRows(\n state.assetRows,\n state.collapsedOrigins,\n state.collapsedSources,\n state.collapsedDomains,\n state.originFilter,\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 nav ←/→ collapse/expand [space/+/-] select [a/↵] apply [d] domain info [i] info [1]lib [2]src [3]factory [4]store [0]all Tab [q] quit\",\n },\n sources: {\n label: \"Sources\",\n rowCount: () => state.visibleSourceRows.length,\n selectableCount: () => state.sourceTreeRows.filter(isAsset).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) => renderSourceTreeRow(state.visibleSourceRows[i], sel),\n footer:\n \" ↑↓/jk nav ←/→ collapse/expand [space/+/-] select [a/↵] apply [d] domain info [i] info Tab [q] quit\",\n },\n libraries: {\n label: \"Libraries\",\n rowCount: () => state.visibleLibraryRows.length,\n selectableCount: () => state.libraryTreeRows.filter(isAsset).length,\n emptyMsg:\n \" No libraries registered. Run `skaile library init <name>` from the shell to author your own.\",\n renderRow: (i, sel) => renderLibraryTreeRow(state.visibleLibraryRows[i], sel),\n footer:\n \" ↑↓/jk nav ←/→ collapse/expand [space/+/-] select [a/↵] apply [d] domain info [i] info Tab [q] quit\",\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 rows?: AssetRow[]; // row set to count over (defaults to the Assets-tab rows)\n}): string {\n const indicator = opts.collapsed ? \"▶\" : \"▼\";\n const countRows = opts.rows ?? state.assetRows;\n const total = countRows.filter(opts.match).length;\n const installed = countRows.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 === \"origin-header\") {\n const origin = rowOrigin(row);\n const meta = ORIGIN_META[origin];\n return renderHeaderLine({\n indent: \" \",\n collapsed: state.collapsedOrigins.has(origin),\n match: (r) => isAsset(r) && rowOrigin(r) === origin,\n refs: originAssetRefs(state.assetRows, origin),\n label: `${meta.icon} ${pc.bold(pc.cyan(meta.label))}`,\n selected,\n });\n }\n\n if (row.type === \"publisher-header\") {\n const origin = rowOrigin(row);\n return renderHeaderLine({\n indent: \" \".repeat(3),\n collapsed: state.collapsedSources.has(srcKey(origin, row.source!)),\n match: (r) => isAsset(r) && inSource(r, origin, row.source!),\n refs: sourceAssetRefs(state.assetRows, origin, row.source!),\n label: pc.bold(pc.cyan(row.source!)),\n selected,\n });\n }\n\n if (row.type === \"domain-header\") {\n const origin = rowOrigin(row);\n const slug = row.domainSlug ?? NO_DOMAIN;\n const meta = domainRegistry.get(slug);\n const title = meta?.title || slug || \"(no domain)\";\n const badge = relationBadge(meta?.relation);\n // ◈ marks a domain (vs the publisher band above); navigational — no install.\n const label = `${pc.magenta(\"◈\")} ${pc.bold(title)}${badge ? ` ${badge}` : \"\"}`;\n return renderHeaderLine({\n indent: \" \".repeat(5),\n collapsed: state.collapsedDomains.has(domainKey(origin, row.source!, slug)),\n match: (r) => isAsset(r) && inDomain(r, origin, row.source!, slug),\n refs: domainAssetRefs(state.assetRows, origin, row.source!, slug),\n label,\n selected,\n });\n }\n\n if (row.type === \"domain-info\") {\n const origin = rowOrigin(row);\n const slug = row.domainSlug ?? NO_DOMAIN;\n const key = domainKey(origin, row.source!, slug);\n const line = renderDomainInfoLine(\n domainRegistry.get(slug),\n origin,\n row.source!,\n slug,\n state.expandedDomainInfo.has(key),\n );\n return selected ? pc.inverse(line.padEnd(state.cols)) : line;\n }\n\n return renderAssetLeaf(row, selected);\n}\n\n/**\n * Render a single asset row (the tree leaf). Shared by the Assets and Sources\n * tabs. `looseIndent` is the column of a \"no domain\" asset; a domained asset\n * sits two columns deeper. The Sources tree passes a larger base because its\n * extra org band pushes everything one level right.\n */\nfunction renderAssetLeaf(row: AssetRow, selected: boolean, looseIndent = 5): string {\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 // Relation hint + recommended star come from the asset's domain (display-only).\n const dm = row.underDomain ? domainRegistry.get(rowDomain(row)) : undefined;\n const recommended = !!dm?.recommendedRef && dm.recommendedRef === ref;\n const hintStr = [relationGlyph(dm?.relation, row.seq), recommended ? pc.yellow(\"★\") : \"\"]\n .filter(Boolean)\n .join(\" \");\n const hintWidthText = [relationGlyphText(dm?.relation, row.seq), recommended ? \"★\" : \"\"]\n .filter(Boolean)\n .join(\" \");\n const hint = hintStr ? `${hintStr} ` : \"\";\n const hintWidth = hintWidthText ? hintWidthText.length + 1 : 0;\n\n const kind = kindColorPad(e.kind);\n // fitWidth (not padEnd) so an over-long name truncates instead of overflowing\n // the row — the desc budget below assumes name is exactly 30 columns wide.\n const name = fitWidth(e.name, 30);\n // Category renders as a trailing badge (a metadata facet, not a tree axis).\n // `tier` is not threaded onto CatalogEntry, so v1 never fabricates one.\n const badge = e.category ? `${pc.dim(\"[\")}${pc.cyan(e.category)}${pc.dim(\"]\")} ` : \"\";\n // Badge sits between name and desc, so its visible width eats into the desc\n // budget — without this the `[category] ` prefix overflows the row width.\n const badgeWidth = e.category ? e.category.length + 3 : 0;\n // repo is now a dim provenance badge, not a grouping axis — bare name only.\n const repoBare = e.repo\n ? e.repo.includes(\"/\")\n ? e.repo.slice(e.repo.indexOf(\"/\") + 1)\n : e.repo\n : \"\";\n const repoBadge = repoBare ? pc.dim(` ·${repoBare}`) : \"\";\n const repoWidth = repoBare ? repoBare.length + 2 : 0;\n const desc =\n e.description?.slice(0, Math.max(0, state.cols - 56 - badgeWidth - hintWidth - repoWidth)) ??\n \"\";\n // Indent: a domained asset sits one step deeper than its \"no domain\" sibling.\n const indent = \" \".repeat(looseIndent + (row.underDomain ? 2 : 0));\n const line = `${indent}${status} ${hint}${kind} ${name} ${badge}${pc.dim(desc)}${repoBadge}`;\n return selected ? pc.inverse(line.padEnd(state.cols)) : line;\n}\n\n/**\n * Render a row of the Sources tab tree (`Sources → org → repo → domain →\n * asset`). Headers count + bulk-select over the Sources-tree rows and read the\n * Sources-tab collapse sets; asset leaves reuse {@link renderAssetLeaf} with a\n * deeper base indent (the org band shifts everything one level right).\n */\nfunction renderSourceTreeRow(row: AssetRow, selected: boolean): string {\n if (row.type === \"source-root\") {\n const total = state.sourceTreeRows.filter(isAsset).length;\n const meta = ORIGIN_META.source;\n const line = ` ▼ ${meta.icon} ${pc.bold(pc.cyan(meta.label))} (${total} assets)`;\n return selected ? pc.bgWhite(pc.black(`${line} `.padEnd(state.cols))) : line;\n }\n\n if (row.type === \"org-header\") {\n const org = row.org!;\n return renderHeaderLine({\n indent: \" \".repeat(3),\n collapsed: state.collapsedSourceOrgs.has(org),\n match: (r) => isAsset(r) && rowOrigin(r) === \"source\" && rowOrg(r) === org,\n refs: sourceOrgRefs(state.sourceTreeRows, org),\n label: pc.bold(pc.cyan(org)),\n selected,\n rows: state.sourceTreeRows,\n });\n }\n\n if (row.type === \"repo-header\") {\n const org = row.org!;\n const repo = row.source!;\n return renderHeaderLine({\n indent: \" \".repeat(5),\n collapsed: state.collapsedSourceRepos.has(repoKey(org, repo)),\n match: (r) =>\n isAsset(r) && rowOrigin(r) === \"source\" && rowOrg(r) === org && rowGroup(r) === repo,\n refs: sourceRepoRefs(state.sourceTreeRows, org, repo),\n label: pc.bold(repo),\n selected,\n rows: state.sourceTreeRows,\n });\n }\n\n if (row.type === \"domain-header\") {\n const org = row.org!;\n const repo = row.source!;\n const slug = row.domainSlug ?? NO_DOMAIN;\n const meta = domainRegistry.get(slug);\n const title = meta?.title || slug || \"(no domain)\";\n const badge = relationBadge(meta?.relation);\n const label = `${pc.magenta(\"◈\")} ${pc.bold(title)}${badge ? ` ${badge}` : \"\"}`;\n return renderHeaderLine({\n indent: \" \".repeat(7),\n collapsed: state.collapsedSourceDomains.has(srcDomainKey(org, repo, slug)),\n match: (r) =>\n isAsset(r) &&\n rowOrigin(r) === \"source\" &&\n rowOrg(r) === org &&\n rowGroup(r) === repo &&\n rowDomain(r) === slug,\n refs: sourceDomainRefs(state.sourceTreeRows, org, repo, slug),\n label,\n selected,\n rows: state.sourceTreeRows,\n });\n }\n\n if (row.type === \"domain-info\") {\n const slug = row.domainSlug ?? NO_DOMAIN;\n const meta = domainRegistry.get(slug);\n const members = sourceDomainRefs(state.sourceTreeRows, row.org!, row.source!, slug).length;\n const key = srcDomainKey(row.org!, row.source!, slug);\n const line = renderSourceDomainInfoLine(meta, members, state.expandedSourceDomainInfo.has(key));\n return selected ? pc.inverse(line.padEnd(state.cols)) : line;\n }\n\n return renderAssetLeaf(row, selected, 7);\n}\n\n/**\n * Render a row of the Libraries tab tree (`Libraries → library → domain →\n * asset`). Headers count + bulk-select over the Libraries-tree rows and read the\n * Libraries-tab collapse sets. No org band, so it sits one level shallower than\n * the Sources tree (asset leaves at the Assets-tab base indent).\n */\nfunction renderLibraryTreeRow(row: AssetRow, selected: boolean): string {\n if (row.type === \"library-root\") {\n const total = state.libraryTreeRows.filter(isAsset).length;\n const meta = ORIGIN_META.library;\n const line = ` ▼ ${meta.icon} ${pc.bold(pc.cyan(meta.label))} (${total} assets)`;\n return selected ? pc.bgWhite(pc.black(`${line} `.padEnd(state.cols))) : line;\n }\n\n if (row.type === \"library-header\") {\n const group = row.source!;\n return renderHeaderLine({\n indent: \" \".repeat(3),\n collapsed: state.collapsedLibraryGroups.has(group),\n match: (r) => isAsset(r) && rowOrigin(r) === \"library\" && rowGroup(r) === group,\n refs: libraryGroupRefs(state.libraryTreeRows, group),\n label: pc.bold(pc.cyan(group)),\n selected,\n rows: state.libraryTreeRows,\n });\n }\n\n if (row.type === \"domain-header\") {\n const group = row.source!;\n const slug = row.domainSlug ?? NO_DOMAIN;\n const meta = domainRegistry.get(slug);\n const title = meta?.title || slug || \"(no domain)\";\n const badge = relationBadge(meta?.relation);\n const label = `${pc.magenta(\"◈\")} ${pc.bold(title)}${badge ? ` ${badge}` : \"\"}`;\n return renderHeaderLine({\n indent: \" \".repeat(5),\n collapsed: state.collapsedLibraryDomains.has(libDomainKey(group, slug)),\n match: (r) => isAsset(r) && inDomain(r, \"library\", group, slug),\n refs: domainAssetRefs(state.libraryTreeRows, \"library\", group, slug),\n label,\n selected,\n rows: state.libraryTreeRows,\n });\n }\n\n if (row.type === \"domain-info\") {\n const group = row.source!;\n const slug = row.domainSlug ?? NO_DOMAIN;\n const meta = domainRegistry.get(slug);\n const members = domainAssetRefs(state.libraryTreeRows, \"library\", group, slug).length;\n const key = libDomainKey(group, slug);\n const line = renderSourceDomainInfoLine(\n meta,\n members,\n state.expandedLibraryDomainInfo.has(key),\n );\n return selected ? pc.inverse(line.padEnd(state.cols)) : line;\n }\n\n return renderAssetLeaf(row, selected, 5);\n}\n\n/** Sources-tab domain info line — mirrors {@link renderDomainInfoLine} at a deeper indent. */\nfunction renderSourceDomainInfoLine(\n meta: CatalogDomain | undefined,\n members: number,\n expanded: boolean,\n): string {\n const indent = \" \".repeat(9);\n const desc = meta?.description ?? \"\";\n if (!expanded) {\n const budget = Math.max(0, state.cols - indent.length - 12);\n const shown = desc.length > budget ? `${desc.slice(0, Math.max(0, budget - 1))}…` : desc;\n return pc.dim(`${indent}ⓘ ${shown} [d]`);\n }\n const parts = [desc, `${members} members`];\n if (meta?.recommendedRef) parts.push(`★ ${meta.recommendedRef}`);\n if (meta?.sidecarSource) parts.push(`sidecar ${meta.sidecarSource}`);\n const full = parts.join(\" · \");\n const budget = Math.max(0, state.cols - indent.length - 3);\n const shown = full.length > budget ? `${full.slice(0, Math.max(0, budget - 1))}…` : full;\n return pc.dim(`${indent}ⓘ ${shown}`);\n}\n\n/**\n * One-line \"info region\" under a domain header. Collapsed (default): a dim,\n * truncated description with a `[d]` more-affordance. Expanded (`[d]`): the full\n * description plus member count, recommended pick, and sidecar provenance —\n * truncated to the terminal width so it always occupies exactly one row.\n */\nfunction renderDomainInfoLine(\n meta: CatalogDomain | undefined,\n origin: AssetOrigin,\n publisher: string,\n slug: string,\n expanded: boolean,\n): string {\n const indent = \" \".repeat(7);\n const desc = meta?.description ?? \"\";\n if (!expanded) {\n const budget = Math.max(0, state.cols - indent.length - 12);\n const shown = desc.length > budget ? `${desc.slice(0, Math.max(0, budget - 1))}…` : desc;\n return pc.dim(`${indent}ⓘ ${shown} [d]`);\n }\n const members = domainAssetRefs(state.assetRows, origin, publisher, slug).length;\n const parts = [desc, `${members} members`];\n if (meta?.recommendedRef) parts.push(`★ ${meta.recommendedRef}`);\n if (meta?.sidecarSource) parts.push(`sidecar ${meta.sidecarSource}`);\n const full = parts.join(\" · \");\n const budget = Math.max(0, state.cols - indent.length - 3);\n const shown = full.length > budget ? `${full.slice(0, Math.max(0, budget - 1))}…` : full;\n return pc.dim(`${indent}ⓘ ${shown}`);\n}\n\n/**\n * Rows available for the scrolling body: terminal height minus the fixed\n * header/footer chrome and the optional pending-summary / message blocks.\n */\nfunction computeMaxBodyRows(): number {\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 return Math.max(5, (process.stdout.rows || 30) - overhead);\n}\n\nfunction renderHeader(): void {\n console.log();\n const filterTag =\n state.tab === \"assets\" && state.originFilter\n ? ` ${pc.bgYellow(pc.black(` filter: ${ORIGIN_META[state.originFilter].label} `))} ${pc.dim(\"[0] clear\")}`\n : \"\";\n console.log(` ${pc.bold(\"skaile manage\")} ${renderTabs()}${filterTag}`);\n console.log(` ${S.rule(state.cols - 4)}`);\n}\n\nfunction renderBody(spec: TabSpec, maxRows: number): void {\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\nfunction renderPendingSummary(): void {\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\n/** Render the one-shot message line, then clear it so it shows only once. */\nfunction renderMessage(): void {\n if (state.message) {\n console.log();\n console.log(` ${state.message}`);\n state.message = \"\";\n }\n}\n\nfunction render(): void {\n clearScreen();\n state.cols = process.stdout.columns || 80;\n\n const maxRows = computeMaxBodyRows();\n const spec = TABS[state.tab];\n\n renderHeader();\n renderBody(spec, maxRows);\n renderPendingSummary();\n renderMessage();\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 const appliedAdds: string[] = [];\n const appliedRemoves: string[] = [];\n\n for (const ref of state.pendingRemoves) {\n if (am.remove(ref)) {\n removed++;\n appliedRemoves.push(ref);\n }\n }\n for (const ref of state.pendingAdds) {\n try {\n await am.add(ref);\n added++;\n appliedAdds.push(ref);\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 // Report-only soft-dep summary — surfaced, never auto-pulled.\n const softDeps = appliedAdds.length > 0 ? await am.reportSoftDeps(appliedAdds) : [];\n if (softDeps.length > 0) {\n parts.push(pc.dim(`${softDeps.length} soft dep${softDeps.length === 1 ? \"\" : \"s\"} referenced`));\n }\n // Report-only: soft-dep targets the removals left unreferenced — surfaced, never\n // auto-removed. Only those with a parseable ref (removable via `skaile remove`).\n const orphans = (\n appliedRemoves.length > 0 ? await am.orphanedSoftDepsAfterRemoving(appliedRemoves) : []\n ).filter((o) => o.targetRef);\n if (orphans.length > 0) {\n const names = orphans.map((o) => bareSoftDepName(o.target)).join(\", \");\n parts.push(\n pc.dim(\n `${names} no longer referenced by any installed asset — remove with \\`skaile remove\\``,\n ),\n );\n }\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\nasync function showInfo(): Promise<void> {\n const rows =\n state.tab === \"sources\"\n ? state.visibleSourceRows\n : state.tab === \"libraries\"\n ? state.visibleLibraryRows\n : state.visibleRows;\n if (state.tab !== \"assets\" && state.tab !== \"sources\" && state.tab !== \"libraries\") return;\n const row = rows[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 console.log(` origin: ${pc.dim(ORIGIN_META[rowOrigin(row)].label)}`);\n if (e.version) console.log(` version: ${e.version}`);\n if (e.description) console.log(` description: ${e.description}`);\n if (e.publisher) console.log(` publisher: ${pc.dim(e.publisher)}`);\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// ── Origin filter (assets tab) ───────────────────────────────────────────────\n\n/**\n * Set (or toggle off) the origin filter. Passing the already-active origin, or\n * an origin not currently present, clears the filter. Pressing 0 (origin=null)\n * always clears.\n */\nfunction setOriginFilter(origin: AssetOrigin | null): void {\n if (origin === null || state.originFilter === origin) {\n state.originFilter = null;\n } else if (state.seenOrigins.has(origin)) {\n state.originFilter = origin;\n // Make the filtered origin's contents reachable — uncollapse the band.\n state.collapsedOrigins.delete(origin);\n } else {\n state.message = pc.dim(`No ${ORIGIN_META[origin].label} assets to show.`);\n return;\n }\n state.cursor = 0;\n rebuildVisible();\n}\n\n// ── Collapse / expand (assets tab) ───────────────────────────────────────────\n\nfunction expandUnderCursor(): void {\n const row = state.visibleRows[state.cursor];\n if (!row) return;\n const origin = rowOrigin(row);\n if (row.type === \"origin-header\" && state.collapsedOrigins.has(origin)) {\n state.collapsedOrigins.delete(origin);\n rebuildVisible();\n } else if (\n row.type === \"publisher-header\" &&\n state.collapsedSources.has(srcKey(origin, row.source!))\n ) {\n state.collapsedSources.delete(srcKey(origin, row.source!));\n rebuildVisible();\n } else if (row.type === \"domain-header\") {\n const dk = domainKey(origin, row.source!, row.domainSlug ?? NO_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 const origin = rowOrigin(row);\n\n if (row.type === \"origin-header\") {\n if (!state.collapsedOrigins.has(origin)) {\n state.collapsedOrigins.add(origin);\n rebuildVisible();\n }\n return;\n }\n\n if (row.type === \"publisher-header\") {\n const sk = srcKey(origin, row.source!);\n if (!state.collapsedSources.has(sk)) {\n state.collapsedSources.add(sk);\n rebuildVisible();\n } else {\n // Already collapsed → jump to parent origin header\n const idx = findLastIndex(\n state.visibleRows,\n state.cursor,\n (r: AssetRow) => r.type === \"origin-header\",\n );\n if (idx >= 0) state.cursor = idx;\n }\n return;\n }\n\n if (row.type === \"domain-header\") {\n const dk = domainKey(origin, row.source!, row.domainSlug ?? NO_DOMAIN);\n if (!state.collapsedDomains.has(dk)) {\n state.collapsedDomains.add(dk);\n rebuildVisible();\n } else {\n // Already collapsed → jump to parent publisher header\n const idx = findLastIndex(\n state.visibleRows,\n state.cursor,\n (r: AssetRow) => r.type === \"publisher-header\",\n );\n if (idx >= 0) state.cursor = idx;\n }\n return;\n }\n\n // asset / domain-info → jump to nearest header above\n const idx = findLastIndex(\n state.visibleRows,\n state.cursor,\n (r: AssetRow) =>\n r.type === \"domain-header\" || r.type === \"publisher-header\" || r.type === \"origin-header\",\n );\n if (idx >= 0) state.cursor = idx;\n}\n\n/**\n * Toggle the info region of the domain the cursor is in — pressed via `[d]`.\n * Works whether the cursor sits on the `domain-header`, its `domain-info` line,\n * or any asset under it. No-op outside a domain.\n */\nfunction toggleDomainInfoUnderCursor(): void {\n const row = state.visibleRows[state.cursor];\n if (!row) return;\n const origin = rowOrigin(row);\n let key: string | null = null;\n if (row.type === \"domain-header\" || row.type === \"domain-info\") {\n key = domainKey(origin, row.source!, row.domainSlug ?? NO_DOMAIN);\n } else if (row.type === \"asset\" && row.underDomain) {\n key = domainKey(origin, rowPublisher(row), rowDomain(row));\n }\n if (!key) {\n state.message = pc.dim(\"No domain here — [d] opens a domain's info region.\");\n return;\n }\n if (state.expandedDomainInfo.has(key)) state.expandedDomainInfo.delete(key);\n else state.expandedDomainInfo.add(key);\n rebuildVisible();\n}\n\n// ── Collapse / expand / select (sources tab) ─────────────────────────────────\n\n/**\n * Header-targeted +/-/space on the Sources tab. Org and repo headers\n * bulk-install their subtree; a domain header (and the root / domain-info) is\n * navigational — \"handled\" so +/- do nothing, but never bulk-installs.\n */\nfunction actOnSourceHeader(row: AssetRow, action: Action): boolean {\n if (row.type === \"org-header\") {\n bulkSelection(sourceOrgRefs(state.sourceTreeRows, row.org!), action);\n return true;\n }\n if (row.type === \"repo-header\") {\n bulkSelection(sourceRepoRefs(state.sourceTreeRows, row.org!, row.source!), action);\n return true;\n }\n return row.type === \"source-root\" || row.type === \"domain-header\" || row.type === \"domain-info\";\n}\n\n/**\n * Apply a +/-/space selection to the Sources-tab row under the cursor. Headers\n * bulk-select via {@link actOnSourceHeader}; an asset leaf toggles its own\n * pending state (pressing the same key again clears it, mirroring the Assets tab).\n */\nfunction selectSourceUnderCursor(action: Action): void {\n const row = state.visibleSourceRows[state.cursor];\n if (!row) return;\n if (actOnSourceHeader(row, action === \"toggle\" ? \"toggle\" : action)) return;\n const ref = assetRefOf(row);\n if (!ref) return;\n if (action === \"toggle\") {\n setSelection(ref, \"toggle\");\n } else if (action === \"add\") {\n setSelection(ref, state.pendingAdds.has(ref) ? \"clear\" : \"add\");\n } else {\n setSelection(ref, state.pendingRemoves.has(ref) ? \"clear\" : \"remove\");\n }\n}\n\nfunction expandSourceUnderCursor(): void {\n const row = state.visibleSourceRows[state.cursor];\n if (!row) return;\n if (row.type === \"org-header\" && state.collapsedSourceOrgs.has(row.org!)) {\n state.collapsedSourceOrgs.delete(row.org!);\n rebuildVisibleSources();\n } else if (row.type === \"repo-header\") {\n const k = repoKey(row.org!, row.source!);\n if (state.collapsedSourceRepos.has(k)) {\n state.collapsedSourceRepos.delete(k);\n rebuildVisibleSources();\n }\n } else if (row.type === \"domain-header\") {\n const k = srcDomainKey(row.org!, row.source!, row.domainSlug ?? NO_DOMAIN);\n if (state.collapsedSourceDomains.has(k)) {\n state.collapsedSourceDomains.delete(k);\n rebuildVisibleSources();\n }\n }\n}\n\nfunction collapseOrJumpSourceUnderCursor(): void {\n const row = state.visibleSourceRows[state.cursor];\n if (!row) return;\n\n if (row.type === \"org-header\") {\n if (!state.collapsedSourceOrgs.has(row.org!)) {\n state.collapsedSourceOrgs.add(row.org!);\n rebuildVisibleSources();\n }\n return;\n }\n\n if (row.type === \"repo-header\") {\n const k = repoKey(row.org!, row.source!);\n if (!state.collapsedSourceRepos.has(k)) {\n state.collapsedSourceRepos.add(k);\n rebuildVisibleSources();\n } else {\n const idx = findLastIndex(\n state.visibleSourceRows,\n state.cursor,\n (r: AssetRow) => r.type === \"org-header\",\n );\n if (idx >= 0) state.cursor = idx;\n }\n return;\n }\n\n if (row.type === \"domain-header\") {\n const k = srcDomainKey(row.org!, row.source!, row.domainSlug ?? NO_DOMAIN);\n if (!state.collapsedSourceDomains.has(k)) {\n state.collapsedSourceDomains.add(k);\n rebuildVisibleSources();\n } else {\n const idx = findLastIndex(\n state.visibleSourceRows,\n state.cursor,\n (r: AssetRow) => r.type === \"repo-header\",\n );\n if (idx >= 0) state.cursor = idx;\n }\n return;\n }\n\n // asset / domain-info / root → jump to nearest header above.\n const idx = findLastIndex(\n state.visibleSourceRows,\n state.cursor,\n (r: AssetRow) =>\n r.type === \"domain-header\" || r.type === \"repo-header\" || r.type === \"org-header\",\n );\n if (idx >= 0) state.cursor = idx;\n}\n\n/** Toggle the info region of the source-tree domain the cursor is in (`[d]`). */\nfunction toggleSourceDomainInfoUnderCursor(): void {\n const row = state.visibleSourceRows[state.cursor];\n if (!row) return;\n let key: string | null = null;\n if (row.type === \"domain-header\" || row.type === \"domain-info\") {\n key = srcDomainKey(row.org!, row.source!, row.domainSlug ?? NO_DOMAIN);\n } else if (row.type === \"asset\" && row.underDomain) {\n key = srcDomainKey(rowOrg(row), rowGroup(row), rowDomain(row));\n }\n if (!key) {\n state.message = pc.dim(\"No domain here — [d] opens a domain's info region.\");\n return;\n }\n if (state.expandedSourceDomainInfo.has(key)) state.expandedSourceDomainInfo.delete(key);\n else state.expandedSourceDomainInfo.add(key);\n rebuildVisibleSources();\n}\n\n// ── Collapse / expand / select (libraries tab) ───────────────────────────────\n\n/**\n * Header-targeted +/-/space on the Libraries tab. A library header bulk-installs\n * its subtree; the root and a domain header (and domain-info) are navigational —\n * \"handled\" so +/- do nothing, but never bulk-installs.\n */\nfunction actOnLibraryHeader(row: AssetRow, action: Action): boolean {\n if (row.type === \"library-header\") {\n bulkSelection(libraryGroupRefs(state.libraryTreeRows, row.source!), action);\n return true;\n }\n return row.type === \"library-root\" || row.type === \"domain-header\" || row.type === \"domain-info\";\n}\n\n/**\n * Apply a +/-/space selection to the Libraries-tab row under the cursor. A\n * library header bulk-selects via {@link actOnLibraryHeader}; an asset leaf\n * toggles its own pending state (pressing the same key again clears it).\n */\nfunction selectLibraryUnderCursor(action: Action): void {\n const row = state.visibleLibraryRows[state.cursor];\n if (!row) return;\n if (actOnLibraryHeader(row, action)) return;\n const ref = assetRefOf(row);\n if (!ref) return;\n if (action === \"toggle\") {\n setSelection(ref, \"toggle\");\n } else if (action === \"add\") {\n setSelection(ref, state.pendingAdds.has(ref) ? \"clear\" : \"add\");\n } else {\n setSelection(ref, state.pendingRemoves.has(ref) ? \"clear\" : \"remove\");\n }\n}\n\nfunction expandLibraryUnderCursor(): void {\n const row = state.visibleLibraryRows[state.cursor];\n if (!row) return;\n if (row.type === \"library-header\" && state.collapsedLibraryGroups.has(row.source!)) {\n state.collapsedLibraryGroups.delete(row.source!);\n rebuildVisibleLibraries();\n } else if (row.type === \"domain-header\") {\n const k = libDomainKey(row.source!, row.domainSlug ?? NO_DOMAIN);\n if (state.collapsedLibraryDomains.has(k)) {\n state.collapsedLibraryDomains.delete(k);\n rebuildVisibleLibraries();\n }\n }\n}\n\nfunction collapseOrJumpLibraryUnderCursor(): void {\n const row = state.visibleLibraryRows[state.cursor];\n if (!row) return;\n\n if (row.type === \"library-header\") {\n if (!state.collapsedLibraryGroups.has(row.source!)) {\n state.collapsedLibraryGroups.add(row.source!);\n rebuildVisibleLibraries();\n } else {\n const idx = findLastIndex(\n state.visibleLibraryRows,\n state.cursor,\n (r: AssetRow) => r.type === \"library-root\",\n );\n if (idx >= 0) state.cursor = idx;\n }\n return;\n }\n\n if (row.type === \"domain-header\") {\n const k = libDomainKey(row.source!, row.domainSlug ?? NO_DOMAIN);\n if (!state.collapsedLibraryDomains.has(k)) {\n state.collapsedLibraryDomains.add(k);\n rebuildVisibleLibraries();\n } else {\n const idx = findLastIndex(\n state.visibleLibraryRows,\n state.cursor,\n (r: AssetRow) => r.type === \"library-header\",\n );\n if (idx >= 0) state.cursor = idx;\n }\n return;\n }\n\n // asset / domain-info / root → jump to nearest header above.\n const idx = findLastIndex(\n state.visibleLibraryRows,\n state.cursor,\n (r: AssetRow) => r.type === \"domain-header\" || r.type === \"library-header\",\n );\n if (idx >= 0) state.cursor = idx;\n}\n\n/** Toggle the info region of the library-tree domain the cursor is in (`[d]`). */\nfunction toggleLibraryDomainInfoUnderCursor(): void {\n const row = state.visibleLibraryRows[state.cursor];\n if (!row) return;\n let key: string | null = null;\n if (row.type === \"domain-header\" || row.type === \"domain-info\") {\n key = libDomainKey(row.source!, row.domainSlug ?? NO_DOMAIN);\n } else if (row.type === \"asset\" && row.underDomain) {\n key = libDomainKey(rowGroup(row), rowDomain(row));\n }\n if (!key) {\n state.message = pc.dim(\"No domain here — [d] opens a domain's info region.\");\n return;\n }\n if (state.expandedLibraryDomainInfo.has(key)) state.expandedLibraryDomainInfo.delete(key);\n else state.expandedLibraryDomainInfo.add(key);\n rebuildVisibleLibraries();\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 {\n keys: [\"\\x1b[A\", \"k\"],\n run: async () => {\n moveCursor(-1);\n await previewSoftDepsUnderCursor();\n },\n },\n {\n keys: [\"\\x1b[B\", \"j\"],\n run: async () => {\n moveCursor(1);\n await previewSoftDepsUnderCursor();\n },\n },\n\n // Collapse / expand — assets tab\n { keys: [\"\\x1b[C\"], when: TAB_ASSETS, run: expandUnderCursor },\n { keys: [\"\\x1b[D\"], when: TAB_ASSETS, run: collapseOrJumpUnderCursor },\n\n // Collapse / expand — sources tab\n { keys: [\"\\x1b[C\"], when: TAB_SOURCES, run: expandSourceUnderCursor },\n { keys: [\"\\x1b[D\"], when: TAB_SOURCES, run: collapseOrJumpSourceUnderCursor },\n\n // Collapse / expand — libraries tab\n { keys: [\"\\x1b[C\"], when: TAB_LIBRARIES, run: expandLibraryUnderCursor },\n { keys: [\"\\x1b[D\"], when: TAB_LIBRARIES, run: collapseOrJumpLibraryUnderCursor },\n\n // + : assets → bulk-add or single-add toggle\n {\n keys: [\"+\"],\n when: TAB_ASSETS,\n run: async () => {\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 await previewSoftDepsUnderCursor();\n },\n },\n\n // Sources tab: + / - / space select (asset leaf or org/repo bulk header).\n { keys: [\"+\"], when: TAB_SOURCES, run: () => selectSourceUnderCursor(\"add\") },\n { keys: [\"-\"], when: TAB_SOURCES, run: () => selectSourceUnderCursor(\"remove\") },\n { keys: [\" \"], when: TAB_SOURCES, run: () => selectSourceUnderCursor(\"toggle\") },\n { keys: [\"a\", \"\\r\", \"\\n\"], when: TAB_SOURCES, run: applyChanges },\n { keys: [\"i\"], when: TAB_SOURCES, run: showInfo },\n { keys: [\"d\"], when: TAB_SOURCES, run: toggleSourceDomainInfoUnderCursor },\n\n // Libraries tab: + / - / space select (asset leaf or library bulk header).\n { keys: [\"+\"], when: TAB_LIBRARIES, run: () => selectLibraryUnderCursor(\"add\") },\n { keys: [\"-\"], when: TAB_LIBRARIES, run: () => selectLibraryUnderCursor(\"remove\") },\n { keys: [\" \"], when: TAB_LIBRARIES, run: () => selectLibraryUnderCursor(\"toggle\") },\n { keys: [\"a\", \"\\r\", \"\\n\"], when: TAB_LIBRARIES, run: applyChanges },\n { keys: [\"i\"], when: TAB_LIBRARIES, run: showInfo },\n { keys: [\"d\"], when: TAB_LIBRARIES, run: toggleLibraryDomainInfoUnderCursor },\n\n // - : assets → bulk-remove or single-remove toggle\n {\n keys: [\"-\"],\n when: TAB_ASSETS,\n run: async () => {\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 await previewSoftDepsUnderCursor();\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 // Domain info region — assets only. Toggles the ⓘ line truncated ↔ full.\n { keys: [\"d\"], when: TAB_ASSETS, run: toggleDomainInfoUnderCursor },\n\n // Origin filter — assets only. 1/2/3/4 isolate one origin, 0 clears.\n { keys: [\"1\"], when: TAB_ASSETS, run: () => setOriginFilter(\"library\") },\n { keys: [\"2\"], when: TAB_ASSETS, run: () => setOriginFilter(\"source\") },\n { keys: [\"3\"], when: TAB_ASSETS, run: () => setOriginFilter(\"factory\") },\n { keys: [\"4\"], when: TAB_ASSETS, run: () => setOriginFilter(\"store\") },\n { keys: [\"0\"], when: TAB_ASSETS, run: () => setOriginFilter(null) },\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 // The TUI needs a real terminal for raw-mode key input. Fail fast — before any\n // asset loading — when stdin is piped/redirected (CI, `printf | skaile manage`):\n // `setRawMode` is undefined there, otherwise an uncaught TypeError later.\n if (!process.stdin.isTTY || typeof process.stdin.setRawMode !== \"function\") {\n console.error(\"skaile manage requires an interactive terminal (TTY). Run it directly in your shell.\");\n process.exit(1);\n }\n\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. The Sources tab\n * renders registered github sources as a `Sources → org → repo → domain → asset`\n * tree (domains default collapsed) and supports the same install/remove flow as\n * Assets. CRUD for sources and libraries remains in the shell\n * (`skaile source …` / `skaile library …`); the Libraries tab is still a\n * read-only scaffold 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, mkdirSync, readdirSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport {\n decodeSkaileManifest,\n getGlobalCacheDir,\n parseFrontmatter,\n SKAILE_MANIFEST_FILENAME,\n sourceCacheKey,\n WorkspaceYamlEditor,\n} from \"@skaile/workspaces/core\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, S } from \"../helpers.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 clones the remote repo into the canonical sources cache\n * (`<cache>/sources/<slug>`), registers it in the project's `skaile.yaml`\n * `sources[]`, then installs the requested skill via the canonical resolver —\n * building a publisher-qualified ref (`skill:<name>@<publisher>`, publisher\n * from the source's `skaile.yaml` or its GitHub org).\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(\n \"Clone a repo, register it in the project's skaile.yaml sources[], and install a skill from it\",\n )\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 const projYaml = path.join(projectDir, \"skaile.yaml\");\n if (!existsSync(projYaml)) {\n logErr(`No skaile.yaml in ${projectDir} — run \\`skaile init\\` first.`);\n process.exit(1);\n }\n if (!/^(?:https?:|git@|git:)/.test(url)) {\n logErr(\n \"npx skills add requires a git URL — resolution runs through the project's sources[].\",\n );\n process.exit(1);\n }\n\n const spinner = p.spinner();\n\n // 1. Clone into the canonical sources cache (<cache>/sources/<key>) —\n // the exact location the resolver reads for the project's sources[].\n const key = sourceCacheKey(url);\n const clonePath = path.join(getGlobalCacheDir(), key);\n spinner.start(`Cloning ${url}`);\n try {\n if (!existsSync(clonePath)) {\n mkdirSync(path.dirname(clonePath), { recursive: true });\n execSync(`git clone ${url} ${clonePath}`, { stdio: \"ignore\" });\n }\n spinner.stop(`Cloned to ${key}`);\n } catch (err) {\n spinner.stop(\"Clone failed\");\n logErr(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n\n // 2. Register the source in the project skaile.yaml.\n const editor = WorkspaceYamlEditor.load(projYaml);\n editor.setSource({ url });\n editor.save();\n\n // 3. Install the skill via the canonical resolver. The ref must be\n // publisher-qualified; publisher is the source's declared one, else\n // its GitHub org.\n const publisher = resolvePublisher(clonePath, url);\n if (!publisher) {\n logErr(\n `Could not determine the publisher for \"${opts.skill}\". Declare ` +\n \"`publisher:` in the source's skaile.yaml, or use a github URL.\",\n );\n process.exit(1);\n }\n // The canonical resolver keys skills by directory name; accept the\n // SKILL.md `name:` too and map it to the directory the resolver expects.\n const skillName = resolveSkillName(clonePath, opts.skill);\n if (skillName !== opts.skill) {\n logInfo(`Resolved \"${opts.skill}\" → directory \"${skillName}\".`);\n }\n const skillRef = `skill:@${publisher}/${skillName}`;\n const am = new AssetManager({ projectDir, global: opts.global, driverTarget: opts.target });\n spinner.start(`Installing ${skillRef}`);\n try {\n const added = await 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(`Source registered in skaile.yaml — manage via ${S.cmd(\"skaile source\")}.`);\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\n/**\n * Resolve the publisher for a freshly-cloned source: a `publisher:` declared in\n * the source's own `skaile.manifest.yaml` wins, else it is inherited from the\n * source URL's GitHub org (mirrors the provenance walker's rule).\n */\nfunction resolvePublisher(clonePath: string, url: string): string | undefined {\n const manifestPath = path.join(clonePath, SKAILE_MANIFEST_FILENAME);\n if (existsSync(manifestPath)) {\n try {\n const { manifest } = decodeSkaileManifest(readFileSync(manifestPath, \"utf8\"));\n if (typeof manifest.publisher === \"string\" && manifest.publisher.length > 0) {\n return manifest.publisher;\n }\n } catch {}\n }\n return url.match(/github\\.com[/:]([^/]+)\\/[^/]+/)?.[1];\n}\n\n/**\n * Map a requested skill identifier to the directory name the canonical resolver\n * keys by. An exact `skills/<requested>/` directory wins; otherwise match a\n * SKILL.md whose frontmatter `name:` equals `requested` (the agentskills.io\n * layout lets the declared name differ from the directory). Falls back to\n * `requested` so the resolver emits a clear not-found.\n */\nfunction resolveSkillName(clonePath: string, requested: string): string {\n const skillsDir = path.join(clonePath, \"skills\");\n if (existsSync(path.join(skillsDir, requested, \"SKILL.md\"))) return requested;\n if (!existsSync(skillsDir)) return requested;\n for (const entry of readdirSync(skillsDir, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const md = path.join(skillsDir, entry.name, \"SKILL.md\");\n if (!existsSync(md)) continue;\n try {\n const { data } = parseFrontmatter(readFileSync(md, \"utf8\"));\n if (typeof data.name === \"string\" && data.name === requested) return entry.name;\n } catch {}\n }\n return requested;\n}\n","import path from \"node:path\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { SUPPORTED_DRIVER_TARGETS } from \"@skaile/workspaces/core\";\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.publisher)} ${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","/**\n * `skaile plugin` — manage registry plugins (drivers / connectors / deploy\n * targets) declared via `plugins:` in `skaile.yaml`.\n *\n * Not to be confused with `skaile integration` (the coding-agent adapter,\n * formerly `skaile plugin`). This group edits the `plugins:` list, reconciles\n * the project-local plugin store, and lists what each declared plugin\n * contributes to `pluginRegistry`.\n *\n * skaile plugin install <spec> [--project-dir <p>]\n * skaile plugin remove <name> [--project-dir <p>]\n * skaile plugin list [--project-dir <p>]\n */\n\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\n\ninterface ProjectOpts {\n projectDir: string;\n}\n\n/** Wrap an async action so a thrown error prints via logErr + sets a non-zero exit. */\nfunction action(fn: (...args: never[]) => Promise<void>) {\n return async (...args: unknown[]): Promise<void> => {\n try {\n await (fn as (...a: unknown[]) => Promise<void>)(...args);\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n };\n}\n\n/** Reconcile + report the project-local plugin store for the given plugin list. */\nasync function reconcileAndReport(projectDir: string, plugins: string[]): Promise<void> {\n const { reconcilePlugins } = await import(\"../plugin-store/index.ts\");\n if (plugins.length === 0) {\n logInfo(\"No plugins declared — nothing to reconcile.\");\n return;\n }\n try {\n const result = await reconcilePlugins(projectDir, plugins);\n if (result.changed) logOk(`Reconciled plugin store (${result.reason}).`);\n else logInfo(`Plugin store ${result.reason}.`);\n } catch (err) {\n // A reconcile failure (e.g. package not published yet) is surfaced but does\n // not undo the skaile.yaml edit — the spec is recorded, install can retry.\n logWarn(`reconcile skipped: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\nasync function runInstall(spec: string, opts: ProjectOpts): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n const { WorkspaceYamlEditor } = await import(\"@skaile/workspaces/core\");\n const { specName } = await import(\"../plugin-store/index.ts\");\n\n const yamlPath = path.join(projectDir, \"skaile.yaml\");\n const editor = WorkspaceYamlEditor.load(yamlPath);\n const replaced = editor.addPlugin(spec, specName);\n editor.save();\n\n if (replaced) logOk(`Updated ${S.cmd(specName(spec))} → ${S.cmd(spec)} in skaile.yaml`);\n else logOk(`Added ${S.cmd(spec)} to skaile.yaml plugins`);\n\n await reconcileAndReport(projectDir, editor.getPlugins());\n}\n\nasync function runRemove(name: string, opts: ProjectOpts): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n const { WorkspaceYamlEditor } = await import(\"@skaile/workspaces/core\");\n const { specName } = await import(\"../plugin-store/index.ts\");\n\n const yamlPath = path.join(projectDir, \"skaile.yaml\");\n const editor = WorkspaceYamlEditor.load(yamlPath);\n const removed = editor.removePlugin(name, specName);\n if (!removed) {\n logInfo(`No plugin matching ${S.cmd(name)} in skaile.yaml plugins.`);\n return;\n }\n editor.save();\n logOk(`Removed ${S.cmd(name)} from skaile.yaml plugins`);\n\n await reconcileAndReport(projectDir, editor.getPlugins());\n}\n\nasync function runList(opts: ProjectOpts): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n const { resolveSkWorkspaceConfig } = await import(\"@skaile/workspaces/core\");\n const config = resolveSkWorkspaceConfig(projectDir);\n const declared = config.plugins ?? [];\n\n console.log();\n console.log(S.heading(\" Declared plugins (skaile.yaml):\"));\n if (declared.length === 0) {\n console.log(` ${S.dim(\"(none)\")}`);\n } else {\n for (const spec of declared) console.log(` ${S.dim(\"·\")} ${S.cmd(spec)}`);\n }\n\n // Load the declared plugins into a fresh registry so `list` reflects exactly\n // what this project's plugins contribute — independent of any built-ins the\n // process already registered. A load failure (store not materialized yet) is\n // non-fatal: the declared specs above are still printed.\n const { createPluginRegistry } = await import(\"@skaile/workspaces/plugin-registry\");\n const registry = createPluginRegistry();\n if (declared.length > 0) {\n try {\n const { loadPlugins } = await import(\"../plugin-store/index.ts\");\n const result = await loadPlugins(projectDir, declared, registry);\n for (const f of result.failed) logWarn(f.error);\n } catch (err) {\n logWarn(`could not load plugins: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n const kinds = [\n { kind: \"driver\" as const, label: \"drivers\" },\n { kind: \"connector\" as const, label: \"connectors\" },\n { kind: \"deployTarget\" as const, label: \"deploy targets\" },\n ];\n console.log();\n console.log(S.heading(\" Contributed targets:\"));\n let any = false;\n for (const { kind, label } of kinds) {\n const metas = registry.list(kind);\n if (metas.length === 0) continue;\n any = true;\n console.log(` ${S.label(label)}: ${metas.map((m) => S.cmd(m.id)).join(\", \")}`);\n }\n if (!any) console.log(` ${S.dim(\"(none — plugins not installed, or contribute nothing)\")}`);\n console.log();\n}\n\n/**\n * Creates the `skaile plugin` command group (registry plugins).\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 registry plugins (drivers / connectors / deploy targets) declared in skaile.yaml\",\n );\n\n cmd\n .command(\"install <spec>\")\n .description(\"Add a plugin spec to skaile.yaml plugins and reconcile the store\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(action(runInstall as never));\n\n cmd\n .command(\"remove <name>\")\n .description(\"Remove a plugin (by package name) from skaile.yaml plugins and reconcile\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(action(runRemove as never));\n\n cmd\n .command(\"list\")\n .description(\"List declared plugins and the targets they contribute\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(action(runList as never));\n\n cmd.action(() => cmd.help());\n return cmd;\n}\n","/**\n * `skaile preset apply` — pure core: reverse a `.preset.yaml` snapshot back into\n * a workspace's `skaile.yaml` sections (the inverse of `preset export`).\n *\n * These helpers are I/O- and prompt-free so they can be unit-tested in\n * isolation. The Commander action in `preset-cmd.ts` owns file reads, the\n * interactive prompting for non-secret inputs, the editor writes, and the\n * post-apply install.\n */\n\nimport type {\n ConnectorDeclaration,\n McpServerDeclaration,\n SourceEntry,\n} from \"@skaile/workspaces/core\";\nimport { getDefaultValue, isSecretPlaceholder } from \"@skaile/workspaces/library\";\nimport type { Placeholder, PresetManifest, PresetItem } from \"@skaile/workspaces/types/manifests\";\n\n/** The workspace sections produced by reversing a preset's items. */\nexport interface WorkspaceItems {\n /** Bare dependency refs, copied verbatim from non-connector/mcp items. */\n dependencies: string[];\n /** Connector declarations rebuilt from `connector:<driver>` items. */\n connectors: ConnectorDeclaration[];\n /** MCP server declarations rebuilt from `mcp:<id>` items. */\n mcpServers: McpServerDeclaration[];\n /** Git sources the deps resolve from — registered before install. */\n sources: SourceEntry[];\n /** Secret placeholder keys the user must export as env vars before running. */\n envVarsToSet: string[];\n}\n\n/** A single `${INPUT:KEY}` / `${SECRET:KEY}` token found in a config string. */\nconst TOKEN_RE = /\\$\\{(INPUT|SECRET):([^}]+)\\}/g;\n\n/** Rejection message for nested preset refs (unsupported by v1 apply). */\nexport const NESTED_PRESET_UNSUPPORTED = \"nested presets are not supported by `preset apply` yet\";\n\n/**\n * Resolve one placeholder to the value that lands in `skaile.yaml`.\n *\n * A secret placeholder NEVER yields its raw value — it resolves to an\n * `env:<KEY>` indirection reference so the credential stays out of the file.\n * A non-secret placeholder resolves to the provided literal (or its declared\n * default); a required non-secret placeholder with neither throws.\n *\n * @param placeholder - The placeholder definition from the preset item.\n * @param providedValue - Value supplied via `--input`/prompt, or `undefined`.\n * @returns `{ envRef }` for secrets, `{ value }` for resolved literals.\n * @throws When a required non-secret placeholder has no value and no default.\n */\nexport function resolvePlaceholderValue(\n placeholder: Placeholder,\n providedValue: string | undefined,\n): { value: string } | { envRef: string } {\n if (isSecretPlaceholder(placeholder)) {\n return { envRef: `env:${placeholder.key}` };\n }\n\n const fallback = getDefaultValue(placeholder);\n const resolved = providedValue ?? (fallback !== undefined ? String(fallback) : undefined);\n if (resolved === undefined) {\n // `required` defaults to true (only an explicit `false` opts out).\n if (placeholder.required !== false) {\n throw new Error(`Placeholder \"${placeholder.key}\" is required but no value was provided`);\n }\n return { value: \"\" };\n }\n return { value: resolved };\n}\n\n/**\n * Reverse a preset's items into additive `skaile.yaml` sections.\n *\n * Items are classified by **`id` presence** (export writes one on connector/mcp\n * items, never on deps), so a bare `mcp:excel` shorthand stays a dependency.\n * Secret tokens resolve to `env:<KEY>` refs (collected into `envVarsToSet`).\n *\n * @param preset - The validated preset manifest.\n * @param values - Resolved non-secret input values, keyed by placeholder key.\n * @returns The workspace sections plus the secret env-var keys to set.\n * @throws When a required non-secret placeholder is unresolved, or a nested\n * preset ref is encountered (unsupported by apply).\n */\nexport function presetItemsToWorkspace(\n preset: PresetManifest,\n values: Record<string, string>,\n): WorkspaceItems {\n const dependencies: string[] = [];\n const connectors: ConnectorDeclaration[] = [];\n const mcpServers: McpServerDeclaration[] = [];\n const envVarsToSet = new Set<string>();\n\n for (const item of preset.items) {\n const ref = item.ref;\n\n if (ref.startsWith(\"preset:\")) throw new Error(NESTED_PRESET_UNSUPPORTED);\n\n if (item.id && ref.startsWith(\"connector:\")) {\n const config = resolveItemConfig(item, preset, values, envVarsToSet);\n connectors.push({\n id: item.id,\n driver: ref.slice(\"connector:\".length),\n ...config,\n } as ConnectorDeclaration);\n } else if (item.id && ref.startsWith(\"mcp:\")) {\n const config = resolveItemConfig(item, preset, values, envVarsToSet);\n mcpServers.push({ id: item.id, ...config } as McpServerDeclaration);\n } else {\n dependencies.push(ref);\n }\n }\n\n const sources: SourceEntry[] = (preset.sources ?? []).map((s) =>\n s.pin ? { url: s.url, pin: s.pin } : { url: s.url },\n );\n\n return { dependencies, connectors, mcpServers, sources, envVarsToSet: [...envVarsToSet] };\n}\n\n/**\n * Walk an item's `config`, substituting interpolation tokens. Secret tokens\n * collapse the whole value to `env:<KEY>` (and record the key); input tokens\n * are replaced with their resolved literal in place.\n */\nfunction resolveItemConfig(\n item: PresetItem,\n preset: PresetManifest,\n values: Record<string, string>,\n envVarsToSet: Set<string>,\n): Record<string, unknown> {\n const byKey = placeholderIndex(item, preset);\n const resolve = (key: string): { value: string } | { envRef: string } => {\n const ph = byKey.get(key) ?? { key, type: \"text\", required: true };\n return resolvePlaceholderValue(ph, values[key]);\n };\n return substituteNode(item.config ?? {}, resolve, envVarsToSet) as Record<string, unknown>;\n}\n\n/** Index this item's placeholders (falling back to preset-level inputs) by key. */\nfunction placeholderIndex(item: PresetItem, preset: PresetManifest): Map<string, Placeholder> {\n const map = new Map<string, Placeholder>();\n for (const input of preset.inputs ?? []) map.set(input.key, input as Placeholder);\n for (const ph of item.placeholders ?? []) map.set(ph.key, ph);\n return map;\n}\n\nfunction substituteNode(\n node: unknown,\n resolve: (key: string) => { value: string } | { envRef: string },\n envVarsToSet: Set<string>,\n): unknown {\n if (typeof node === \"string\") return substituteString(node, resolve, envVarsToSet);\n if (Array.isArray(node)) return node.map((el) => substituteNode(el, resolve, envVarsToSet));\n if (node && typeof node === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(node)) out[k] = substituteNode(v, resolve, envVarsToSet);\n return out;\n }\n return node;\n}\n\nfunction substituteString(\n value: string,\n resolve: (key: string) => { value: string } | { envRef: string },\n envVarsToSet: Set<string>,\n): string {\n const tokens = [...value.matchAll(TOKEN_RE)];\n if (tokens.length === 0) return value;\n\n // A token is a secret when its namespace is `SECRET` (authoritative, matching\n // the library's canonical interpolation) OR its placeholder is `type: secret`.\n // Scan by namespace FIRST (no resolve): otherwise resolving an earlier\n // required-but-missing input would throw and hide the real \"sole token\" error.\n const secret =\n tokens.find(([, ns]) => ns === \"SECRET\") ??\n tokens.find(([, , key]) => \"envRef\" in resolve(key!));\n if (secret) {\n const [full, , key] = secret;\n // A secret resolves to an `env:<KEY>` reference; it MUST be the whole value.\n // Mixing it with other tokens or literal text would drop that text silently,\n // so reject it (mirrors the library's \"SECRET must be the sole token\").\n if (tokens.length > 1 || full !== value) {\n throw new Error(\n `Secret \"${key}\" must be the only token in its value — remove the surrounding tokens/text`,\n );\n }\n envVarsToSet.add(key!);\n return `env:${key}`;\n }\n\n return value.replace(TOKEN_RE, (_m, _ns, key: string) => {\n const resolved = resolve(key);\n return \"envRef\" in resolved ? resolved.envRef : resolved.value;\n });\n}\n","import path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport {\n type DriverTarget,\n parseAssetRef,\n readLock,\n SUPPORTED_DRIVER_TARGETS,\n} from \"@skaile/workspaces/core\";\nimport type { InstallManifest } from \"@skaile/workspaces/types\";\nimport { Command } from \"commander\";\nimport { colorRef, formatSoftDepHint, logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\n\n/**\n * Canonical asset-ref shape accepted by `skaile install <ref>`:\n * `kind:@<publisher>/<name>#<version>` (the `#` version sigil). Validated via\n * `parseAssetRef` so the CLI shares the single canonical grammar; the legacy\n * trailing-`@version` shape is rejected.\n */\nconst REF_HINT = \"kind:@<publisher>/<name>#<version> (e.g. skill:@skaile/use-exa#1.0.0)\";\n\n/** True when `ref` parses as a canonical asset ref. */\nfunction isValidAssetRef(ref: string): boolean {\n try {\n parseAssetRef(ref);\n return true;\n } catch {\n return false;\n }\n}\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 let requested: ReturnType<typeof parseAssetRef>;\n try {\n requested = parseAssetRef(ref);\n } catch (e) {\n throw new Error(\n `malformed asset ref '${ref}' — expected ${REF_HINT}: ${e instanceof Error ? e.message : String(e)}`,\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 the PARSED refs (kind/publisher/name/pin) so equivalent\n // spellings (optional `kind:`, default `skill`) are treated as the same ref.\n const got = parseAssetRef(manifest.ref);\n if (\n got.kind !== requested.kind ||\n got.publisher !== requested.publisher ||\n got.name !== requested.name ||\n got.pin !== requested.pin\n ) {\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(`Install dependencies from skaile.yaml, or a single asset by ref (${REF_HINT})`)\n .argument(\"[ref]\", `Asset ref to install from the Catalog (${REF_HINT})`)\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 .option(\n \"--global\",\n \"Install the global SSOT (~/.skaile/skaile.yaml), fanning out to every global backend\",\n )\n .option(\n \"--backend <ids>\",\n \"Comma-separated global backends to install into (default: all resolved); implies --global\",\n )\n .option(\n \"--link\",\n \"symlink local-path assets instead of copying (dev loop; machine-local, not for committing)\",\n )\n .action(runInstallCommand);\n}\n\n/** Options shape accepted by the `skaile install` command action. */\ninterface InstallCommandOptions {\n locked?: boolean;\n projectDir: string;\n target: string;\n global?: boolean;\n backend?: string;\n link?: boolean;\n}\n\n/**\n * Parse a `--backend a,b` value into validated {@link DriverTarget}s, exiting on\n * an unknown id. Returns `undefined` when the flag is absent (resolve the full\n * global set instead).\n */\nfunction parseBackendFilter(raw: string | undefined): DriverTarget[] | undefined {\n if (!raw) return undefined;\n const ids = raw\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n const out: DriverTarget[] = [];\n for (const id of ids) {\n if (!(SUPPORTED_DRIVER_TARGETS as string[]).includes(id)) {\n logErr(`unknown backend '${id}' — expected one of: ${SUPPORTED_DRIVER_TARGETS.join(\", \")}`);\n process.exit(1);\n }\n out.push(id as DriverTarget);\n }\n return out.length > 0 ? out : undefined;\n}\n\n/**\n * `skaile install` action body. Dispatches by argument shape:\n * a positional `ref` selects pointer-only catalog install, otherwise the\n * legacy `skaile.yaml` install path runs.\n */\nasync function runInstallCommand(\n ref: string | undefined,\n opts: InstallCommandOptions,\n): Promise<void> {\n // ── Pointer-only catalog install: `skaile install <ref>` ──────────────\n if (ref !== undefined) {\n await runRefInstall(ref, opts);\n return;\n }\n\n // ── Legacy install: `skaile install` reads skaile.yaml ────────────────\n await runYamlInstall(opts);\n}\n\n/** Pointer-only catalog install path for `skaile install <ref>`. */\nasync function runRefInstall(ref: string, opts: InstallCommandOptions): Promise<void> {\n if (!isValidAssetRef(ref)) {\n logErr(`malformed asset ref '${ref}' — expected ${REF_HINT}`);\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 logInfo(\n S.dim(`Installed globally (see Path above) — use \\`skaile add ${ref}\\` to deploy into this project.`),\n );\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}\n\n/** Legacy install path for bare `skaile install` (reads skaile.yaml). */\nasync function runYamlInstall(opts: InstallCommandOptions): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n\n const backends = parseBackendFilter(opts.backend);\n // `--backend` implies `--global`.\n if (opts.global || backends) {\n await runGlobalInstall(opts, backends);\n return;\n }\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(`source hydration skipped: ${err instanceof Error ? err.message : String(err)}`);\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, link: opts.link });\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 // Partial-miss must fail the process — CI can't otherwise distinguish a\n // clean install from \"half the assets never resolved\".\n process.exitCode = 1;\n }\n if (result.lockWritten) {\n logInfo(`Lock file written: ${S.dim(\"skaile.lock.yaml\")}`);\n }\n // Report-only: surface soft deps the declared assets reference but aren't\n // present. Never a prompt — install is a batch/CI path. Skipped under\n // --locked: that mode is \"restore exactly\", so an `add` nudge would jar.\n if (!opts.locked) await reportInstalledSoftDeps(am);\n } catch (err) {\n spinner.stop(\"Failed\");\n logErr(String(err));\n process.exit(1);\n }\n}\n\n/**\n * Report (never prompt) the body-link soft deps that the declared assets\n * reference but that aren't in the project — the `install` counterpart to the\n * `add`-time soft-dep surface. `install` is a batch/CI path (often non-TTY), so\n * it only ever prints a hint: pulling stays an explicit `skaile add`. Best-effort\n * — `reportSoftDeps` swallows any index failure and returns `[]`.\n */\nexport async function reportInstalledSoftDeps(\n am: Pick<AssetManager, \"listDeclared\" | \"reportSoftDeps\">,\n onHint: (line: string) => void = (l) => logInfo(S.dim(l)),\n): Promise<void> {\n try {\n const declared = am.listDeclared().map((d) => d.ref);\n if (declared.length === 0) return;\n const edges = await am.reportSoftDeps(declared);\n for (const edge of edges) onHint(formatSoftDepHint(edge));\n } catch {\n // Best-effort: a soft-dep report must never fail an install that succeeded.\n }\n}\n\n/**\n * Global cross-backend install: deploy every dep declared in the global SSOT\n * (`~/.skaile/skaile.yaml`) into each resolved global backend's dir under `~`,\n * write the global lock (`~/.skaile/skaile.lock.yaml`), then print per-backend\n * state. `backends` is the `--backend` filter (omit for the full resolved set).\n */\nasync function runGlobalInstall(\n opts: InstallCommandOptions,\n backends: DriverTarget[] | undefined,\n): Promise<void> {\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n global: true,\n backends,\n });\n const spinner = p.spinner();\n spinner.start(\"Installing global dependencies\");\n try {\n const result = await am.install({ locked: opts.locked, link: opts.link });\n spinner.stop(\"Done\");\n if (result.deployed.length > 0) for (const d of result.deployed) logOk(d);\n if (result.removed.length > 0) for (const r of result.removed) logWarn(`Removed: ${r}`);\n if (result.deployed.length === 0 && result.removed.length === 0)\n logInfo(\"Nothing to install (already up to date).\");\n if (result.missing.length > 0) {\n for (const m of result.missing) logErr(`Missing: ${m}`);\n process.exitCode = 1;\n }\n if (result.lockWritten) logInfo(`Global lock written: ${S.dim(\"~/.skaile/skaile.lock.yaml\")}`);\n\n // Per-backend reconciliation summary so a partial fan-out is visible.\n const state = am.globalState({});\n const byBackend = new Map<string, number>();\n for (const s of state)\n if (s.state === \"installed\") byBackend.set(s.backend, (byBackend.get(s.backend) ?? 0) + 1);\n for (const [backend, n] of byBackend) logInfo(`${backend}: ${n} installed`);\n } catch (err) {\n spinner.stop(\"Failed\");\n logErr(String(err));\n process.exit(1);\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 preset export` — pure core: turn a project's own `skaile.yaml`\n * (`SkWorkspaceConfig`) into a shareable `PresetManifest`, with first-class\n * detection and redaction of inline secrets.\n *\n * These helpers are intentionally free of I/O and prompting so they can be\n * unit-tested in isolation; the Commander action in `preset-cmd.ts` owns file\n * reads/writes, the loud stderr summary, and interactive confirmation.\n */\n\nimport { existsSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport { FACTORY_SOURCE_URL, normalizeRepoUrl } from \"@skaile/workspaces/asset-manager\";\nimport {\n type LockFile,\n type SkWorkspaceConfig,\n type SourceEntry,\n storeManifestSlug,\n} from \"@skaile/workspaces/core\";\nimport { getStoreManifestsDir } from \"@skaile/workspaces/library\";\nimport type { Placeholder, PresetItem, PresetManifest } from \"@skaile/workspaces/types/manifests\";\n\n/** One inline-secret hit: which item, where in its config, and a safe preview. */\nexport interface SecretFinding {\n /** `id` of the offending preset item (connector/mcp id). */\n itemId: string;\n /** Dotted path into the item's `config`, e.g. `options.dsn` or `env.TOKEN`. */\n path: string;\n /** Value with its secret portion masked, safe to print to a terminal. */\n maskedValue: string;\n}\n\n// ── Preset construction ───────────────────────────────────────────────────────\n\n/**\n * Build a self-consistent {@link PresetManifest} from a workspace config.\n *\n * Mapping (a future `preset apply` reverses this):\n * - `dependencies[]` → `{ ref }` items, ref copied VERBATIM (no re-pinning).\n * - `connectors[]` → `{ id, ref: \"connector:<driver>\", config }` items.\n * - `mcp_servers[]` → `{ id, ref: \"mcp:<id>\", config }` items.\n *\n * `agent_config` is deliberately NOT exported — it is personal/machine-specific\n * (driver, model, API-cloud transport) and does not belong in a shared preset.\n *\n * @param config - The project-own `skaile.yaml` (NOT the merged/global config).\n * @param name - Preset name; also the default output filename stem.\n * @param sources - Git sources the dep items resolve from (see {@link neededSources}).\n * @returns A manifest that passes `validatePreset` whenever it has ≥1 item.\n */\nexport function buildPresetFromWorkspace(\n config: SkWorkspaceConfig,\n name: string,\n sources: SourceEntry[] = [],\n): PresetManifest {\n const items: PresetItem[] = [];\n\n for (const ref of config.dependencies ?? []) {\n items.push({ ref });\n }\n\n for (const connector of config.connectors ?? []) {\n const config_ = compact({\n access: connector.access,\n auth: connector.auth,\n options: connector.options,\n version: connector.version,\n tags: connector.tags,\n });\n items.push({\n id: connector.id,\n ref: `connector:${connector.driver}`,\n ...(config_ ? { config: config_ } : {}),\n });\n }\n\n for (const mcp of config.mcp_servers ?? []) {\n // `auth`/`recipe`/`mount` are intentionally NOT exported: a raw mcp `auth`\n // token would be a leak vector, and the rest are machine-specific. Round-trip\n // fidelity is deliberately traded for share-safety here.\n const config_ = compact({\n transport: mcp.transport,\n command: mcp.command,\n args: mcp.args,\n env: mcp.env,\n url: mcp.url,\n headers: mcp.headers,\n });\n items.push({\n id: mcp.id,\n ref: `mcp:${mcp.id}`,\n ...(config_ ? { config: config_ } : {}),\n });\n }\n\n const project = config.name ?? name;\n return {\n name,\n version: \"1.0.0\",\n description: `Exported from ${project} workspace`,\n items,\n // Never let a credential-bearing source URL reach a shareable preset.\n ...(sources.length > 0\n ? { sources: sources.map((s) => ({ ...s, url: stripUrlCredentials(s.url) })) }\n : {}),\n };\n}\n\n// ── Source provenance ─────────────────────────────────────────────────────────\n\n/**\n * The subset of `config.sources` a cross-repo apply must register before install.\n *\n * The lock's top-level `sources` list is the full **transitive** closure of every\n * source that contributed a resolved asset, so filtering `config.sources` to it\n * (minus the always-available factory source) captures direct + transitive deps\n * with no drop risk. With no lock (provenance unknown), every non-factory source\n * is kept so apply still resolves. Connectors/mcp carry no source.\n */\nexport function neededSources(config: SkWorkspaceConfig, lock: LockFile | null): SourceEntry[] {\n const factoryUrl = normalizeRepoUrl(FACTORY_SOURCE_URL);\n const nonFactory = (config.sources ?? []).filter((s) => normalizeRepoUrl(s.url) !== factoryUrl);\n if (!lock) return nonFactory;\n const inClosure = new Set(lock.sources.map((s) => normalizeRepoUrl(s.url)));\n return nonFactory.filter((s) => inClosure.has(normalizeRepoUrl(s.url)));\n}\n\n/**\n * Of the captured `neededSources`, the ones whose assets resolve through a\n * MACHINE-LOCAL curated store manifest (`~/.skaile/store/manifests/<slug>.yaml`,\n * written by `source manifest init`). Those overlays are not shared with the\n * preset, so a recipient on another machine won't reproduce the same resolution\n * until the sidecar is itself published. Returns the affected source URLs (empty\n * when none carry a sidecar).\n */\nexport function sourcesWithSidecar(sources: SourceEntry[]): string[] {\n const dir = getStoreManifestsDir();\n return sources\n .filter((s) => existsSync(path.join(dir, `${storeManifestSlug(s.url)}.yaml`)))\n .map((s) => s.url);\n}\n\n/** Drop `undefined`/`null` fields; return `undefined` when nothing remains. */\nfunction compact(obj: Record<string, unknown>): Record<string, unknown> | undefined {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n // Null too — YAML parses a blank field (`auth: ~`) to null, which must not\n // survive into the exported preset as `auth: null`.\n if (v !== undefined && v !== null) out[k] = v;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\n// ── Secret detection ──────────────────────────────────────────────────────────\n\n/** SSOT prefix list for values that are already safe indirection references. */\nconst SECRET_REFERENCE_PREFIXES = [\"env\", \"forge\", \"secret\", \"op\", \"kp\", \"oauth\", \"pat\"] as const;\nconst SECRET_REFERENCE_RE = new RegExp(`^(${SECRET_REFERENCE_PREFIXES.join(\"|\")}):`);\n\n/**\n * True when `value` is a secret *reference* (indirection) rather than an inline\n * secret — e.g. `env:DATABASE_URL`, `forge:api-key`, `pat:env:GH_TOKEN`. Such\n * values are safe to publish and are never flagged.\n */\nexport function isSecretReference(value: string): boolean {\n return SECRET_REFERENCE_RE.test(value);\n}\n\n/** A `${INPUT:KEY}` / `${SECRET:KEY}` interpolation is a resolved placeholder. */\nconst PLACEHOLDER_RE = /^\\$\\{(INPUT|SECRET):[^}]+\\}$/;\n\n/**\n * Key names that mark a credential-bearing field. Matched component-wise with\n * `_`/`-` as separators so env-style names hit (`GH_TOKEN`, `API_KEY`) while\n * innocent substrings do NOT (`monkey`, `keyboard`, `Content-Type`). `url`/`conn`\n * are deliberately absent — a bare URL/host is not a secret; credential-bearing\n * URLs are caught by {@link PROTO_CREDENTIAL_URL_RE}. Over-flagging trains users\n * to ignore the warning, so precision here matters as much as recall.\n */\nconst SUSPICIOUS_KEY_RE =\n /(?:^|[_-])(?:token|password|passwd|secret|apikey|key|dsn|credential|auth|authorization|bearer)(?:[_-]|$)/i;\n/** A `proto://user:pass@host` URL literally embeds a password. */\nconst PROTO_CREDENTIAL_URL_RE = /\\w+:\\/\\/[^/@\\s]+:[^/@\\s]+@/;\n\n/** True when a source URL embeds `user:pass@` credentials (private-HTTPS auth form). */\nexport function urlHasCredentials(url: string): boolean {\n return PROTO_CREDENTIAL_URL_RE.test(url);\n}\n\n/**\n * Strip `user:pass@` userinfo from a URL. The repo is fully identified without it\n * (git auth on apply uses the target's own credential helper / ssh key), so an\n * exported source URL must never carry the token into a shared preset.\n */\nexport function stripUrlCredentials(url: string): string {\n return url.replace(/^(\\w+:\\/\\/)[^/@]*:[^/@]*@/, \"$1\");\n}\n\n/**\n * ≥20 chars mixing ≥2 character classes — looks like a raw token. Plain URLs and\n * filesystem paths are excluded: they are long but not secret (a credential URL\n * is caught by {@link PROTO_CREDENTIAL_URL_RE} instead).\n *\n * Known gap: single-character-class blobs (all-lowercase hex, bcrypt fragments)\n * are not detected — the 2-class threshold trades recall for fewer false positives.\n */\nfunction isLongEntropic(value: string): boolean {\n if (value.length < 20) return false;\n if (/^\\w+:\\/\\//.test(value) || value.startsWith(\"/\")) return false;\n const classes = [/[a-z]/, /[A-Z]/, /[0-9]/].filter((re) => re.test(value)).length;\n return classes >= 2;\n}\n\n/**\n * Scan every string inside each item's `config` and return inline secrets.\n *\n * A string is flagged when it is NOT a {@link isSecretReference} AND sits in a\n * credential context: the inherent `auth` field, a suspicious key name, a\n * `proto://user:pass@` URL, or a long high-entropy blob. Items without a `config`\n * (bare deps) are skipped.\n *\n * Detection is **heuristic / best-effort**, not exhaustive: a short, low-entropy\n * secret under an innocuous key name can slip through. A clean scan is not a\n * guarantee — treat it as a safety net, not proof the file holds no secrets.\n */\nexport function scanInlineSecrets(preset: PresetManifest): SecretFinding[] {\n const findings: SecretFinding[] = [];\n for (const item of preset.items) {\n // Only connector/mcp items carry a `config` (and always an `id`); bare deps\n // have neither, so the fallback is just for type-narrowing.\n const itemId = typeof item.id === \"string\" ? item.id : \"\";\n if (item.config) scanNode(item.config, [], false, itemId, findings);\n }\n return findings;\n}\n\nfunction scanNode(\n node: unknown,\n segments: string[],\n inCredentialField: boolean,\n itemId: string,\n findings: SecretFinding[],\n): void {\n if (typeof node === \"string\") {\n if (isInlineSecret(node, segments.at(-1) ?? \"\", inCredentialField)) {\n findings.push({ itemId, path: segments.join(\".\"), maskedValue: maskSecret(node) });\n }\n return;\n }\n if (Array.isArray(node)) {\n node.forEach((el, i) =>\n scanNode(el, [...segments, String(i)], inCredentialField, itemId, findings),\n );\n return;\n }\n if (node && typeof node === \"object\") {\n for (const [k, v] of Object.entries(node)) {\n // Only `auth` is an inherent credential field. `env`/`headers` are NOT\n // blanket-marked — that flagged Content-Type / plain path env vars. Their\n // real secrets are caught per-leaf by the key heuristic (Authorization,\n // *_TOKEN, …) and the value patterns.\n const credField = inCredentialField || k === \"auth\";\n scanNode(v, [...segments, k], credField, itemId, findings);\n }\n }\n}\n\n/** Decide whether a single string leaf is an inline secret. */\nfunction isInlineSecret(value: string, key: string, inCredentialField: boolean): boolean {\n if (isSecretReference(value) || PLACEHOLDER_RE.test(value)) return false;\n if (inCredentialField) return true;\n if (SUSPICIOUS_KEY_RE.test(key)) return true;\n if (PROTO_CREDENTIAL_URL_RE.test(value)) return true;\n return isLongEntropic(value);\n}\n\n/**\n * Render a terminal-safe preview. Reveals **no** secret characters — the\n * finding's `path` already identifies which value it is, and a prefix would leak\n * the token type (`sk-`, `ghp_`, `xoxb-`). Only a credential URL keeps its inert\n * shape (scheme + masked user/pass/host).\n */\nfunction maskSecret(value: string): string {\n const proto = value.match(/^(\\w+):\\/\\/[^/@\\s]+:[^/@\\s]+@/);\n if (proto) return `${proto[1]}://…:****@…`;\n return \"****\";\n}\n\n// ── Redaction ─────────────────────────────────────────────────────────────────\n\n/**\n * Replace each flagged inline value with a `${INPUT:<KEY>}` placeholder and add\n * a matching `secret` placeholder entry to the owning item. Returns a NEW preset\n * (the input is not mutated) plus the generated placeholder keys.\n *\n * `<KEY>` is `<itemId>_<path>` upper-snake-cased so it is stable and readable.\n */\nexport function redactSecrets(\n preset: PresetManifest,\n findings: SecretFinding[],\n): { preset: PresetManifest; keys: string[] } {\n const next = structuredClone(preset);\n const keys: string[] = [];\n const used = new Set<string>();\n\n for (const finding of findings) {\n const item = next.items.find((it) => it.id === finding.itemId);\n if (!item?.config) continue;\n\n // Unique key per finding — two paths must never collapse onto one placeholder\n // (that would resolve two distinct secrets to a single input at apply-time).\n const base = placeholderKey(finding.itemId, finding.path);\n let key = base;\n for (let n = 2; used.has(key); n++) key = `${base}_${n}`;\n\n // Only record the placeholder if the value was actually replaced — a failed\n // set leaves the secret inline, so it must stay counted as unresolved.\n if (!setAtPath(item.config, finding.path.split(\".\"), `\\${INPUT:${key}}`)) continue;\n used.add(key);\n\n const placeholder: Placeholder = {\n key,\n type: \"secret\",\n required: true,\n prompt: `Secret value for ${finding.itemId}.${finding.path}`,\n };\n item.placeholders = [...(item.placeholders ?? []), placeholder];\n keys.push(key);\n }\n\n return { preset: next, keys };\n}\n\n/** `db` + `options.dsn` → `DB_OPTIONS_DSN`. */\nfunction placeholderKey(itemId: string, path: string): string {\n return `${itemId}_${path}`\n .replace(/[^a-zA-Z0-9]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\")\n .toUpperCase();\n}\n\n/** Set a nested value by path segments. Returns false if the path doesn't resolve. */\nfunction setAtPath(root: Record<string, unknown>, segments: string[], value: string): boolean {\n let node: unknown = root;\n for (let i = 0; i < segments.length - 1; i++) {\n if (!node || typeof node !== \"object\") return false;\n node = (node as Record<string, unknown>)[segments[i]!];\n }\n if (!node || typeof node !== \"object\") return false;\n (node as Record<string, unknown>)[segments.at(-1)!] = value;\n return true;\n}\n\n// ── Output header ─────────────────────────────────────────────────────────────\n\n/** Exact wording written into the file when unresolved inline secrets remain. */\nexport const INLINE_SECRETS_HEADER =\n \"# ⚠️ CONTAINS INLINE SECRETS — replace with placeholders before sharing or publishing\";\n\n/**\n * Header comment for a preset that still holds unresolved inline secrets, or\n * `null` when `findings` is empty (nothing left to warn about).\n */\nexport function secretHeaderComment(findings: SecretFinding[]): string | null {\n return findings.length > 0 ? INLINE_SECRETS_HEADER : null;\n}\n","/**\n * skaile preset — scaffold, validate, export, and apply preset YAML files.\n *\n * Subcommands: init, validate, export, apply.\n * Delegates to @skaile/library preset module for parsing and validation.\n */\n\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport * as readline from \"node:readline/promises\";\nimport { normalizeRepoUrl } from \"@skaile/workspaces/asset-manager\";\nimport {\n type LockFile,\n loadSkWorkspaceConfig,\n readLock,\n type SkWorkspaceConfig,\n WorkspaceYamlEditor,\n} from \"@skaile/workspaces/core\";\nimport { getDefaultValue, isSecretPlaceholder } from \"@skaile/workspaces/library\";\nimport {\n type Placeholder,\n type PresetManifest,\n validatePreset,\n} from \"@skaile/workspaces/types/manifests\";\nimport { Command } from \"commander\";\nimport path from \"node:path\";\nimport { stringify } from \"yaml\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport {\n NESTED_PRESET_UNSUPPORTED,\n presetItemsToWorkspace,\n type WorkspaceItems,\n} from \"./preset-apply.ts\";\nimport { reportInstalledSoftDeps } from \"./project.ts\";\nimport {\n buildPresetFromWorkspace,\n neededSources,\n redactSecrets,\n scanInlineSecrets,\n type SecretFinding,\n secretHeaderComment,\n sourcesWithSidecar,\n urlHasCredentials,\n} from \"./preset-export.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 await runPresetValidate(filePath);\n });\n\n // ── preset export ────────────────────────────────────────────────────────\n\n cmd\n .command(\"export [name]\")\n .description(\"Snapshot the workspace's skaile.yaml into a shareable .preset.yaml\")\n .option(\"--project-dir <path>\", \"Project directory to read skaile.yaml from\", process.cwd())\n .option(\"--out <file>\", \"Explicit output file path\")\n .option(\"--dir <path>\", \"Output directory (default: cwd)\", process.cwd())\n .option(\"--redact\", \"Replace every detected inline secret with a placeholder\")\n .option(\n \"--allow-inline-secrets\",\n \"Exit 0 even when inline secrets remain unredacted (opt-in; unsafe for CI)\",\n )\n .option(\"--force\", \"Overwrite the output file if it already exists\")\n .action(async (name: string | undefined, opts: PresetExportOpts) => {\n await runPresetExport(name, opts);\n });\n\n // ── preset apply ─────────────────────────────────────────────────────────\n\n cmd\n .command(\"apply <path>\")\n .description(\"Apply a .preset.yaml additively into the workspace's skaile.yaml\")\n .option(\"--project-dir <path>\", \"Project directory holding skaile.yaml\", process.cwd())\n .option(\n \"--input <KEY=VAL>\",\n \"Provide a placeholder value (repeatable)\",\n collectInput,\n [] as string[],\n )\n .option(\"--yes\", \"Skip interactive prompts; use defaults where available\")\n .option(\"--no-deploy\", \"Skip the final `skaile install` step\")\n .action(async (filePath: string, opts: PresetApplyOpts) => {\n await runPresetApply(filePath, opts);\n });\n\n return cmd;\n}\n\n// ── preset export implementation ─────────────────────────────────────────────\n\ninterface PresetExportOpts {\n projectDir: string;\n out?: string;\n dir: string;\n redact?: boolean;\n allowInlineSecrets?: boolean;\n force?: boolean;\n}\n\n/**\n * Full `skaile preset export` pipeline: read the project-own skaile.yaml, build\n * a preset, surface inline secrets loudly, optionally redact them, then write a\n * `.preset.yaml` — annotated with a warning header when secrets remain.\n */\nasync function runPresetExport(name: string | undefined, opts: PresetExportOpts): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n const file = loadSkWorkspaceConfig(projectDir);\n if (!file) {\n logErr(`No skaile.yaml found in ${projectDir}`);\n logInfo(\"Run this from a project directory or pass --project-dir <path>.\");\n process.exit(1);\n }\n\n const presetName = name ?? file.config.name ?? \"my-preset\";\n\n // Capture only the sources the deps resolve from (excludes the factory source).\n let lock: LockFile | null = null;\n try {\n lock = readLock(path.join(projectDir, \"skaile.lock.yaml\"));\n } catch {\n lock = null; // missing/legacy lock → fall back to all non-factory sources\n }\n const sources = neededSources(file.config, lock);\n if (lock === null && sources.length > 0) {\n logInfo(\"No lock file — exporting all non-factory sources conservatively.\");\n }\n const strippedCreds = sources.filter((s) => urlHasCredentials(s.url)).length;\n if (strippedCreds > 0) {\n logWarn(\n `Stripped credentials from ${strippedCreds} source URL(s) — resolved via git auth on apply.`,\n );\n }\n // A captured source resolved through a machine-local sidecar overlay won't\n // reproduce on another machine until that sidecar manifest is itself shared.\n const sidecarSources = sourcesWithSidecar(sources);\n if (sidecarSources.length > 0) {\n logWarn(\n `${sidecarSources.length} captured source(s) rely on a MACHINE-LOCAL sidecar overlay ` +\n `(\\`~/.skaile/store/manifests/*\\`) — assets may not resolve on other machines or when ` +\n `this preset is shared, until the sidecar manifest is published: ${sidecarSources.join(\", \")}`,\n );\n }\n let preset = buildPresetFromWorkspace(file.config, presetName, sources);\n\n if (preset.items.length === 0) {\n logErr(\"Nothing to export — skaile.yaml has no dependencies, connectors, or mcp_servers.\");\n process.exit(1);\n }\n\n const result = validatePreset(preset);\n if (!result.ok) {\n logErr(\"Internal error: generated preset failed validation:\");\n for (const err of result.errors) console.error(` ${S.err(\"✗\")} ${err.path}: ${err.message}`);\n process.exit(1);\n }\n\n // Secret safety: never a silent success. Report, optionally redact, then\n // re-scan the FINAL preset so `unresolved` is ground truth (a redaction that\n // failed to apply still surfaces here, keeping the warning honest).\n const findings = scanInlineSecrets(preset);\n reportFindings(findings);\n const toRedact = await resolveRedactions(findings, opts.redact === true);\n if (toRedact.length > 0) preset = redactSecrets(preset, toRedact).preset;\n const unresolved = scanInlineSecrets(preset);\n\n const header = secretHeaderComment(unresolved);\n const body = stringify(preset);\n const contents = header ? `${header}\\n${body}` : body;\n\n if (opts.out && opts.dir !== process.cwd()) logWarn(\"--dir is ignored when --out is set.\");\n const outPath = opts.out\n ? path.resolve(opts.out)\n : path.join(path.resolve(opts.dir), `${presetName}.preset.yaml`);\n if (existsSync(outPath) && !opts.force) {\n logErr(`File already exists: ${outPath}`);\n logInfo(\"Pass --force to overwrite, or choose a different --out/--dir.\");\n process.exit(1);\n }\n\n try {\n writeFileSync(outPath, contents, \"utf-8\");\n } catch (e) {\n logErr(`Failed to write ${outPath}: ${(e as Error).message}`);\n process.exit(1);\n }\n logOk(`Exported ${S.brand(path.basename(outPath))}`);\n logInfo(`Path: ${outPath}`);\n\n // Fail closed: unresolved inline secrets must not read as a clean success — a\n // CI/script pipeline would otherwise publish the artifact with raw secrets.\n if (unresolved.length > 0) {\n console.error(S.err(\"This file is NOT safe to share.\"));\n if (!opts.allowInlineSecrets) {\n logErr(`${unresolved.length} inline secret(s) left unredacted.`);\n logInfo(\n \"Re-run with --redact to placeholder them, or --allow-inline-secrets to accept the risk.\",\n );\n process.exit(1);\n }\n }\n}\n\n/** Print a loud red summary of inline secrets to stderr (before any prompting). */\nfunction reportFindings(findings: SecretFinding[]): void {\n if (findings.length === 0) return;\n console.error(S.err(`⚠️ ${findings.length} potential INLINE secret(s) found`));\n for (const f of findings) {\n console.error(` ${S.err(\"•\")} ${f.itemId} ${S.dim(f.path)} ${f.maskedValue}`);\n }\n}\n\n/**\n * Which findings to redact: all of them under `--redact`; otherwise prompt once\n * per finding when attached to a TTY; otherwise none (headless run leaves them\n * inline so the warning header is written).\n */\nasync function resolveRedactions(\n findings: SecretFinding[],\n redactAll: boolean,\n): Promise<SecretFinding[]> {\n if (findings.length === 0) return [];\n if (redactAll) return findings;\n if (!process.stdin.isTTY) return [];\n\n const rl = readline.createInterface({ input: process.stdin, output: process.stderr });\n try {\n const chosen: SecretFinding[] = [];\n for (const f of findings) {\n const answer = await rl.question(`Redact ${f.itemId}.${f.path}? [y/N] `);\n if (/^y(es)?$/i.test(answer.trim())) chosen.push(f);\n }\n return chosen;\n } finally {\n rl.close();\n }\n}\n\n// ── preset apply implementation ──────────────────────────────────────────────\n\ninterface PresetApplyOpts {\n projectDir: string;\n input: string[];\n yes?: boolean;\n /** Commander sets this to `false` when `--no-deploy` is passed. */\n deploy: boolean;\n}\n\n/** Commander collector for repeatable `--input KEY=VAL` flags. */\nfunction collectInput(value: string, acc: string[]): string[] {\n acc.push(value);\n return acc;\n}\n\n/**\n * Full `skaile preset apply <path>` pipeline: parse the preset, resolve\n * placeholders (secrets → `env:` refs, inputs → literals), merge the items\n * additively into the target `skaile.yaml` (comment-preserving), then deploy.\n */\nasync function runPresetApply(filePath: string, opts: PresetApplyOpts): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n const file = loadSkWorkspaceConfig(projectDir);\n if (!file) {\n logErr(\"No skaile.yaml — run `skaile init` first\");\n process.exit(1);\n }\n\n const resolved = path.resolve(filePath);\n if (!existsSync(resolved)) {\n logErr(`File not found: ${resolved}`);\n process.exit(1);\n }\n\n const { parsePresetYaml } = await import(\"@skaile/workspaces/library\");\n const parseResult = parsePresetYaml(readFileSync(resolved, \"utf-8\"));\n if (!parseResult.ok || !parseResult.preset) {\n logErr(\"Preset validation failed:\");\n for (const err of parseResult.errors) console.error(` ${S.err(\"✗\")} ${err}`);\n process.exit(1);\n }\n const preset = parseResult.preset;\n\n // Reject nested presets up front with a friendly message — v1 apply resolves\n // only the flat item set produced by `preset export`.\n if (preset.items.some((it) => it.ref.startsWith(\"preset:\"))) {\n logErr(NESTED_PRESET_UNSUPPORTED);\n logInfo(\"Remove the nested `preset:` item(s) and re-run.\");\n process.exit(1);\n }\n\n const values = parseInputs(opts.input);\n await promptMissingInputs(preset.items, preset.inputs, values, opts.yes === true);\n\n let items: WorkspaceItems;\n try {\n items = presetItemsToWorkspace(preset, values);\n } catch (err) {\n logErr((err as Error).message);\n process.exit(1);\n }\n\n const editor = WorkspaceYamlEditor.load(file.path);\n const summary = applyItems(editor, file.config, items);\n // Only the add paths mutate the doc — skip a no-op rewrite when nothing was added.\n const changed =\n summary.addedSources.length +\n summary.addedDeps.length +\n summary.addedConnectors.length +\n summary.addedMcp.length;\n if (changed > 0) editor.save();\n\n printApplySummary(summary, items.envVarsToSet);\n\n if (opts.deploy) {\n await runPresetInstall(projectDir);\n } else {\n logInfo(\"Skipped deploy (--no-deploy). Run `skaile install` to deploy the new dependencies.\");\n }\n}\n\n/** Parse repeatable `KEY=VAL` strings into a value map, exiting on a bad pair. */\nfunction parseInputs(pairs: string[]): Record<string, string> {\n const out: Record<string, string> = {};\n for (const pair of pairs) {\n const eq = pair.indexOf(\"=\");\n if (eq <= 0) {\n logErr(`Invalid --input \"${pair}\" — expected KEY=VALUE.`);\n process.exit(1);\n }\n out[pair.slice(0, eq)] = pair.slice(eq + 1);\n }\n return out;\n}\n\n/**\n * Interactively fill non-secret placeholders that have no `--input` value.\n * Secrets are never prompted — they resolve to `env:` references. A `--yes` run\n * or a non-TTY leaves gaps for {@link presetItemsToWorkspace} to fill from\n * defaults or reject as required.\n */\nasync function promptMissingInputs(\n presetItems: { placeholders?: Placeholder[] }[],\n presetInputs: Placeholder[] | undefined,\n values: Record<string, string>,\n yes: boolean,\n): Promise<void> {\n const seen = new Set<string>();\n const toPrompt: Placeholder[] = [];\n const collect = (ph: Placeholder): void => {\n if (seen.has(ph.key) || isSecretPlaceholder(ph)) return;\n seen.add(ph.key);\n if (values[ph.key] === undefined) toPrompt.push(ph);\n };\n for (const input of presetInputs ?? []) collect(input);\n for (const item of presetItems) for (const ph of item.placeholders ?? []) collect(ph);\n\n if (toPrompt.length === 0 || yes || !process.stdin.isTTY) return;\n\n const rl = readline.createInterface({ input: process.stdin, output: process.stderr });\n try {\n for (const ph of toPrompt) {\n const def = getDefaultValue(ph);\n const suffix = def !== undefined ? ` [${String(def)}]` : \"\";\n const answer = (await rl.question(`${ph.prompt ?? ph.key}${suffix}: `)).trim();\n if (answer) values[ph.key] = answer;\n else if (def !== undefined) values[ph.key] = String(def);\n }\n } finally {\n rl.close();\n }\n}\n\n/** Per-section record of what the apply added vs skipped (on id collision). */\ninterface ApplySummary {\n addedDeps: string[];\n skippedDeps: string[];\n addedConnectors: string[];\n skippedConnectors: string[];\n unchangedConnectors: string[];\n addedMcp: string[];\n skippedMcp: string[];\n unchangedMcp: string[];\n addedSources: string[];\n skippedSources: Array<{ url: string; keptPin?: string; presetPin?: string }>;\n unchangedSources: string[];\n}\n\n/**\n * Additively merge resolved items into the editor. Deps dedupe; connectors and\n * mcp servers are skipped (not overwritten) when an entry with the same id\n * already exists AND differs — the user's own config always wins.\n */\nfunction applyItems(\n editor: WorkspaceYamlEditor,\n config: SkWorkspaceConfig,\n items: WorkspaceItems,\n): ApplySummary {\n const s: ApplySummary = {\n addedDeps: [],\n skippedDeps: [],\n addedConnectors: [],\n skippedConnectors: [],\n unchangedConnectors: [],\n addedMcp: [],\n skippedMcp: [],\n unchangedMcp: [],\n addedSources: [],\n skippedSources: [],\n unchangedSources: [],\n };\n\n // Register sources first (deduped by normalized url) so a later install can\n // clone them; an existing url with a different pin is left as-is (user wins).\n const existingSourceUrls = new Map(\n editor.getSources().map((src) => [normalizeRepoUrl(src.url), src]),\n );\n for (const src of items.sources) {\n const key = normalizeRepoUrl(src.url);\n const existing = existingSourceUrls.get(key);\n if (!existing) {\n editor.setSource(src);\n existingSourceUrls.set(key, src);\n s.addedSources.push(src.url);\n // `?? undefined` normalizes YAML's `null` (blank `~`) and undefined to one\n // value; a differing pin is skipped (existing wins), identical is a no-op.\n } else if ((existing.pin ?? undefined) !== (src.pin ?? undefined)) {\n s.skippedSources.push({ url: src.url, keptPin: existing.pin, presetPin: src.pin });\n } else {\n s.unchangedSources.push(src.url);\n }\n }\n\n for (const ref of items.dependencies) {\n if (editor.addDependency(ref)) s.addedDeps.push(ref);\n else s.skippedDeps.push(ref);\n }\n\n // An entry with an existing id is never overwritten: identical → unchanged,\n // different → skipped (the user's own config wins). Only a new id is written.\n const existingConnectors = new Map((config.connectors ?? []).map((c) => [c.id, c]));\n for (const conn of items.connectors) {\n const existing = existingConnectors.get(conn.id);\n if (existing) {\n (stableEqual(existing, conn) ? s.unchangedConnectors : s.skippedConnectors).push(conn.id);\n continue;\n }\n editor.setConnector(conn);\n s.addedConnectors.push(conn.id);\n }\n\n const existingMcp = new Map((config.mcp_servers ?? []).map((m) => [m.id, m]));\n for (const mcp of items.mcpServers) {\n const existing = existingMcp.get(mcp.id);\n if (existing) {\n (stableEqual(existing, mcp) ? s.unchangedMcp : s.skippedMcp).push(mcp.id);\n continue;\n }\n editor.setMcpServer(mcp);\n s.addedMcp.push(mcp.id);\n }\n\n return s;\n}\n\n/** Key-order-insensitive structural equality (for connector/mcp collision checks). */\nfunction stableEqual(a: unknown, b: unknown): boolean {\n return canonicalJson(a) === canonicalJson(b);\n}\n\nfunction canonicalJson(value: unknown): string {\n return JSON.stringify(value, (_k, v) =>\n v && typeof v === \"object\" && !Array.isArray(v)\n ? Object.fromEntries(\n Object.entries(v as Record<string, unknown>).sort(([x], [y]) => x.localeCompare(y)),\n )\n : v,\n );\n}\n\n/** Print what was added/skipped plus the env vars the user must set. */\nfunction printApplySummary(summary: ApplySummary, envVarsToSet: string[]): void {\n const added =\n summary.addedSources.length +\n summary.addedDeps.length +\n summary.addedConnectors.length +\n summary.addedMcp.length;\n if (added === 0) {\n logInfo(\"Nothing to apply — everything was already present.\");\n } else {\n if (summary.addedSources.length > 0) {\n logOk(`Registered ${summary.addedSources.length} source(s).`);\n }\n logOk(\n `Applied ${summary.addedDeps.length} dependency(ies), ` +\n `${summary.addedConnectors.length} connector(s), ${summary.addedMcp.length} mcp server(s).`,\n );\n }\n\n const skipped = [\n ...summary.skippedSources.map(\n (s) =>\n `source ${s.url} (kept pin '${s.keptPin ?? \"none\"}', preset had '${s.presetPin ?? \"none\"}')`,\n ),\n ...summary.skippedDeps.map((d) => `dependency ${d} (already present)`),\n ...summary.skippedConnectors.map((c) => `connector ${c} (id exists, differs)`),\n ...summary.skippedMcp.map((m) => `mcp ${m} (id exists, differs)`),\n ];\n for (const line of skipped) logWarn(`Skipped ${line}`);\n\n const unchanged =\n summary.unchangedConnectors.length +\n summary.unchangedMcp.length +\n summary.unchangedSources.length;\n if (unchanged > 0)\n logInfo(`${unchanged} source/connector/mcp entry(ies) already matched — left as-is.`);\n\n if (envVarsToSet.length > 0) {\n logWarn(\n `This preset references secrets by env var — provide them before running: ${envVarsToSet.join(\", \")}`,\n );\n logInfo(\"Add them to .env (gitignored) or export in your shell, e.g. export <VAR>=…\");\n }\n}\n\n/** Deploy newly added skill deps, then surface soft deps as `skaile install` does. */\nasync function runPresetInstall(projectDir: string): Promise<void> {\n try {\n const { AssetManager } = await import(\"@skaile/workspaces/asset-manager\");\n const am = new AssetManager({ projectDir });\n logInfo(\"Installing new dependencies…\");\n const result = await am.install({});\n for (const d of result.deployed) logOk(d);\n for (const m of result.missing) logErr(`Missing: ${m}`);\n // Report-only body-link soft deps, matching the `skaile install` surface.\n await reportInstalledSoftDeps(am);\n } catch (err) {\n logErr(`Install failed: ${err instanceof Error ? err.message : String(err)}`);\n logInfo(\"Run `skaile install` to deploy the new dependencies.\");\n }\n}\n\n// ── preset validate implementation ───────────────────────────────────────────\n\n/**\n * Read + parse the preset file, exiting the process on read/parse failure.\n * Returns the validated preset manifest on success.\n */\nasync function loadPresetForValidation(resolved: string): Promise<PresetManifest> {\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 } = await import(\"@skaile/workspaces/library\");\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 return parseResult.preset;\n}\n\n/**\n * Surface a count of nested preset refs. The full depth check runs at\n * apply-time via validateNestingDepth() inside applyPresetWithLibrary.\n */\nasync function reportNestedPresetRefs(preset: PresetManifest): Promise<void> {\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 { detectNestedPresetRefs } = await import(\"@skaile/workspaces/library\");\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\n/**\n * Detect cycles in the preset's item-ref graph, exiting the process on a cycle.\n */\nasync function checkPresetCycles(preset: PresetManifest, resolved: string): Promise<void> {\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) return;\n\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/**\n * Validate per-item placeholder structure (dry-run with no input values).\n * Returns true when any placeholder issues were surfaced as warnings.\n */\nexport async function checkPresetPlaceholders(allPlaceholders: Placeholder[]): Promise<boolean> {\n if (allPlaceholders.length === 0) return false;\n\n const { validatePlaceholder } = await import(\"@skaile/workspaces/library\");\n const invalidEntries: Array<{ key: string; errors: string[] }> = [];\n for (const ph of allPlaceholders) {\n // Required-ness is enforced at apply, not here — a required-no-default secret\n // is exactly what `export --redact` emits. Only type-check a present default.\n if (ph.default === undefined) continue;\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) return false;\n\n logWarn(\"Placeholder issues:\");\n for (const r of invalidEntries) {\n console.log(` ${S.warn(\"!\")} ${r.key}: ${r.errors.join(\", \")}`);\n }\n return true;\n}\n\n/** Print the validation summary table + final pass/warn line. */\nfunction printPresetSummary(\n preset: PresetManifest,\n placeholderCount: number,\n hasWarnings: boolean,\n): void {\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\")} ${placeholderCount}`);\n console.log();\n\n if (hasWarnings) {\n logWarn(\"Validation passed with warnings\");\n } else {\n logOk(\"Preset is valid\");\n }\n}\n\n/** Full `skaile preset validate <path>` pipeline. */\nasync function runPresetValidate(filePath: string): Promise<void> {\n const resolved = path.resolve(filePath);\n\n const preset = await loadPresetForValidation(resolved);\n\n await reportNestedPresetRefs(preset);\n await checkPresetCycles(preset, resolved);\n\n const allPlaceholders = preset.items.flatMap((item) => item.placeholders ?? []);\n const hasWarnings = await checkPresetPlaceholders(allPlaceholders);\n\n printPresetSummary(preset, allPlaceholders.length, hasWarnings);\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# 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 # Placeholders — values the user provides at apply-time, declared on the item\n # that uses them. Types: text, multiline, secret, number, boolean, enum, oauth,\n # instance-picker\n placeholders:\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 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# Preset-level inputs shared across items (rare) — top-level \\`inputs:\\`, not\n# \\`placeholders:\\` (that key lives on items). Same shape as a placeholder:\n# inputs:\n# - key: SHARED_KEY\n# type: text\n# label: \"Shared across all items\"\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","/**\n * Turn a driver-start/prompt failure into a friendly, actionable message when the\n * cause is a missing/unusable agent binary; otherwise return `null` so the caller\n * surfaces the raw error unchanged.\n *\n * The bridge classifies these as `category: \"config\"` and carries a `hint`, but the\n * shape reaching the CLI varies: omp's `start()` rejects with the raw spawn error\n * (`code === \"ENOENT\"`), while the subprocess CLI drivers reject with the classified\n * `AgentError` attached under `.detail`. Duck-type across all of them.\n */\nexport function friendlyDriverError(err: unknown): string | null {\n const e = err as\n | {\n code?: string;\n syscall?: string;\n message?: string;\n category?: string;\n hint?: string;\n detail?: { category?: string; hint?: string };\n }\n | null\n | undefined;\n if (!e) return null;\n\n // A missing binary is a *spawn* ENOENT (`syscall: \"spawn <bin>\"` / \"spawn … ENOENT\");\n // a bare ENOENT from connector/mount setup is a different failure, not the driver.\n const isSpawnEnoent =\n e.code === \"ENOENT\" &&\n (e.syscall?.startsWith(\"spawn\") === true || /^spawn .*ENOENT/.test(e.message ?? \"\"));\n const isConfig = e.category === \"config\" || e.detail?.category === \"config\";\n if (!isSpawnEnoent && !isConfig) return null;\n\n const hint = e.hint ?? e.detail?.hint;\n const base = hint ?? \"The configured agent binary is not installed or not on your PATH.\";\n return `${base}\\nTry a different backend with \\`--driver claude-sdk\\`.`;\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 { loadFlow } from \"@skaile/workspaces/factory-assets/connectors/flow/engine\";\nimport { resumeFlow, runFlow } from \"@skaile/workspaces/factory-assets/connectors/flow/run-flow\";\nimport {\n clearSession,\n loadSession,\n loadSessionById,\n MarkdownStreamer,\n resolveSettings,\n runAgentChat,\n} from \"@skaile/workspaces/runner\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { friendlyDriverError } from \"../driver-error.ts\";\nimport { discoverFlows, findFlowFile } from \"../flow-discovery.ts\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.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 = discoverFlows();\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 // Locate the flow file once: a project-local `ai-assets/` tree wins (lets\n // a workspace override a built-in flow), then fall back across all content\n // roots (bundled factory-assets, monorepo tree, user libraries). The file\n // path doubles as the is-this-a-flow test, so we don't parse every flow.\n // findFlowFile is layout-tolerant (flat + domain-nested, all extensions);\n // seed it with the project-local `ai-assets/` as a priority root.\n const priorityRoots: string[] = [];\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 priorityRoots.push(candidate);\n break;\n }\n dir = path.dirname(dir);\n }\n const flowPath = findFlowFile(flowId, priorityRoots);\n\n if (!flowPath) {\n // Not a flow id — treat the positional args as a single-shot text prompt.\n const textPrompt = positional.join(\" \");\n if (!textPrompt.trim()) {\n logErr(`Flow not found: ${flowId}`);\n const available = discoverFlows().map((f) => f.id);\n if (available.length > 0) {\n console.log(` ${S.dim(\"Available:\")} ${available.map((id) => S.cmd(id)).join(\", \")}`);\n }\n process.exit(1);\n }\n try {\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 } catch (err) {\n const friendly = friendlyDriverError(err);\n if (friendly) {\n logErr(friendly);\n } else {\n logErr(err instanceof Error ? err.message : String(err));\n }\n process.exit(1);\n }\n return;\n }\n\n let flow: ReturnType<typeof loadFlow>;\n try {\n flow = loadFlow(flowPath);\n } catch (err) {\n logErr(\n `Failed to load flow \"${flowId}\": ${err instanceof Error ? err.message : String(err)}`,\n );\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 try {\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 } catch (err) {\n const friendly = friendlyDriverError(err);\n logErr(friendly ?? (err instanceof Error ? err.message : String(err)));\n process.exit(1);\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 // Best-effort plugin store: reconcile + load any `plugins:` declared in\n // skaile.yaml before the runner starts. Guarded no-op (zero overhead)\n // when the project declares no plugins — see cli/CLAUDE.md § Plugin store.\n await ensurePluginsLoadedForServe(opts.projectDir);\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\n/**\n * Reconcile + load `skaile.yaml` `plugins:` into the process-wide\n * `pluginRegistry` before the runner starts. Best-effort: a plugin that fails\n * to reconcile or load is logged and skipped — it never blocks serve startup.\n *\n * Fast path: when the project declares no `plugins:`, `ensurePluginsLoaded`\n * returns immediately, so the common case costs a single config read.\n */\nasync function ensurePluginsLoadedForServe(projectDir: string): Promise<void> {\n const { logInfo, logWarn } = await import(\"../helpers.ts\");\n try {\n const { resolveSkWorkspaceConfig } = await import(\"@skaile/workspaces/core\");\n const config = resolveSkWorkspaceConfig(projectDir);\n if (!config.plugins || config.plugins.length === 0) return;\n\n const { ensurePluginsLoaded } = await import(\"../plugin-store/index.ts\");\n const { pluginRegistry } = await import(\"@skaile/workspaces/plugin-registry\");\n const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);\n\n if (result.loaded.length > 0) {\n logInfo(`Loaded ${result.loaded.length} plugin(s): ${result.loaded.join(\", \")}`);\n }\n for (const f of result.failed) {\n logWarn(f.error);\n }\n } catch (err) {\n // Never fail serve startup on a plugin store error — log and continue.\n logWarn(`plugin store skipped: ${err instanceof Error ? err.message : String(err)}`);\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","/**\n * Minimal SuperJSON-compatible transformer so the CLI speaks the platform tRPC\n * server's `{ json, meta? }` wire format (log payloads are JSON-native, so no\n * `meta` revival is needed). Without it, remote calls fail to deserialize.\n */\nexport const superjsonLite = {\n serialize: (object: unknown) => ({ json: object }),\n deserialize: (payload: unknown) =>\n payload && typeof payload === \"object\" && \"json\" in payload\n ? (payload as { json: unknown }).json\n : payload,\n};\n","import type { LogEntry, LogQuery } from \"@skaile/workspaces/types\";\nimport { createTRPCUntypedClient, httpLink } from \"@trpc/client\";\n\nimport { superjsonLite } from \"./superjson-transformer.ts\";\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 transformer: superjsonLite,\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\nimport { superjsonLite } from \"./superjson-transformer.ts\";\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 transformer: superjsonLite,\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 query = buildLogQuery(opts);\n\n const resolved = resolveMode({\n forceLocal: opts.local,\n forceRemote: opts.remote,\n projectDir: opts.projectDir,\n platformUrl: opts.platformUrl,\n });\n\n const { entries, nextCursor } = await fetchEntries(sessionId, opts, resolved, query);\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\n/** Translate parsed CLI options into a session-scoped {@link LogQuery} (sans `sessionId`). */\nfunction buildLogQuery(opts: CliOpts): Omit<LogQuery, \"sessionId\"> {\n const levels = (opts.level ?? []).map(validateLevel);\n return {\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\n/** Fetch the history snapshot from whichever store the mode resolved to. */\nasync function fetchEntries(\n sessionId: string,\n opts: CliOpts,\n resolved: ReturnType<typeof resolveMode>,\n query: Omit<LogQuery, \"sessionId\">,\n): Promise<{ entries: LogEntry[]; nextCursor: string | undefined }> {\n if (resolved.mode === \"local\") {\n const result = localQuery(resolved.dbPath, { ...query, sessionId });\n return { entries: result.entries, nextCursor: result.nextCursor };\n }\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 return { entries: result.entries, nextCursor: result.nextCursor };\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 { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport type { DriverTarget } from \"@skaile/workspaces/core\";\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\ntype Overview = ReturnType<AssetManager[\"overview\"]>;\n\nfunction printOverviewRepos(repos: Overview[\"repos\"]): void {\n if (repos.length === 0) return;\n console.log();\n for (const r of 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\nfunction printOverviewDomains(byDomain: Overview[\"byDomain\"]): void {\n const nameW = Math.max(4, ...[...byDomain.values()].flat().map((e) => e.name.length));\n const kindW = 8;\n\n for (const [domain, entries] of 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\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 printOverviewRepos(result.repos);\n printOverviewDomains(result.byDomain);\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","import { Command } from \"commander\";\nimport { logErr, logOk, S } from \"../helpers.ts\";\nimport {\n deviceLogin,\n hasStoredAuth,\n loadStoreAuthConfig,\n logout as storeLogout,\n} from \"../store-auth.ts\";\nimport { getStoreConfig, getStoreToken, isStoreAuthenticated, storeFetch } from \"../store-client.ts\";\n\n/** Fetch a bearer token + call `/api/v1/me`, returning the publisher identity. */\nasync function fetchIdentity(): Promise<{\n username?: string;\n githubLogin?: string | null;\n roles?: string[];\n}> {\n const jwt = await getStoreToken();\n return storeFetch({ ...getStoreConfig(), jwt }, \"/api/v1/me\");\n}\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(\"Sign in to the store (Keycloak device flow — approve in your browser)\")\n .action(async () => {\n try {\n await deviceLogin(loadStoreAuthConfig());\n const me = await fetchIdentity().catch(\n () => ({}) as { username?: string; githubLogin?: string | null },\n );\n // The login name is NOT a namespace (no `@`). The publishable namespace is\n // the connected GitHub handle — show it separately so `@<login>` (which may\n // be reserved) is never mistaken for where you publish.\n logOk(\n `Signed in${\n me.username\n ? ` as ${S.brand(me.username)}${me.githubLogin ? ` — publishing as ${S.brand(`@${me.githubLogin}`)}` : \"\"}`\n : \".\"\n }`,\n );\n } catch (e: any) {\n logErr(e.message);\n process.exit(1);\n }\n });\n\n // ── logout ──\n store\n .command(\"logout\")\n .description(\"Sign out of the store\")\n .action(() => {\n storeLogout(loadStoreAuthConfig());\n logOk(\"Signed out.\");\n });\n\n // ── whoami ──\n store\n .command(\"whoami\")\n .description(\"Show current store identity\")\n .action(async () => {\n if (!hasStoredAuth(loadStoreAuthConfig())) {\n logErr(\"Not signed in. Run: skaile store login\");\n process.exit(1);\n }\n try {\n const me = await fetchIdentity();\n console.log();\n // Login name (not a namespace) vs the publishable namespace (GitHub handle).\n console.log(` ${S.label(\"Login\")} ${S.brand(me.username ?? \"?\")}`);\n console.log(\n ` ${S.label(\"Publisher\")} ${\n me.githubLogin\n ? S.brand(`@${me.githubLogin}`)\n : S.dim(\"— connect GitHub in the store to publish\")\n }`,\n );\n if (me.roles?.length) console.log(` ${S.label(\"Roles\")} ${me.roles.join(\", \")}`);\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 if (!isStoreAuthenticated()) {\n logErr(\"Not signed in. 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 // Authorize with a fresh device-flow token (config.jwt is null now).\n const jwt = await getStoreToken();\n await storeFetch({ ...getStoreConfig(), jwt }, `/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 { bareSoftDepName, colorRef, logInfo, S } 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(async (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 // The v2 lock records no edges, so soft body-link deps aren't woven into the\n // tree above — list them distinctly below (report-only, inferred).\n const softDeps = await am.softDepsOf(root.children.map((c) => c.ref));\n if (softDeps.length > 0) {\n console.log(` ${S.label(\"Soft dependencies (inferred)\")}:`);\n for (const e of softDeps)\n console.log(\n ` ${S.dim(\"·\")} ${bareSoftDepName(e.from)} → ${bareSoftDepName(e.to)} ${S.dim(\"(soft)\")}`,\n );\n }\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, S } from \"../helpers.ts\";\nimport { openCatalogSource } from \"../open-library.ts\";\nimport { syncProjectSources } from \"./source.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/cache/catalog/` 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 * Before re-deploy, `update` offers to **sync sources** from upstream (default\n * yes). Re-deploy resolves against the local source cache, which is frozen at\n * the commit captured when each source was first cloned — without a sync,\n * `update` can never see newer GitHub commits and always reports \"Nothing to\n * update\". Pass `--no-sync` to skip, `-y`/`--yes` to sync without the prompt; a\n * non-interactive shell defaults to syncing.\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 .option(\"--no-sync\", \"Skip syncing sources from upstream before re-deploying\")\n .option(\"-y, --yes\", \"Sync sources without the confirmation prompt\")\n .action(\n async (\n _name: string | undefined,\n opts: {\n projectDir: string;\n catalog: boolean;\n catalogOnly?: boolean;\n sync: boolean;\n yes?: boolean;\n },\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 const projectDir = path.resolve(opts.projectDir);\n\n // Stage 2a — source sync (opt-out, default yes). Re-deploy reads the\n // local source cache; without a pull it can't see upstream commits.\n if (await shouldSyncSources(opts)) {\n const syncSpinner = p.spinner();\n syncSpinner.start(\"Syncing sources\");\n const { total, synced, failed } = await syncProjectSources(projectDir);\n syncSpinner.stop(\n total === 0\n ? \"No sources to sync.\"\n : `Synced ${S.heading(`${synced}/${total}`)} source(s)` +\n (failed ? ` (${failed} failed)` : \"\"),\n );\n }\n\n // Stage 2b — asset re-deploy against the (now-synced) source cache.\n const am = new AssetManager({ 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 },\n );\n}\n\n/**\n * Decide whether to sync sources before re-deploy. `--no-sync` (`opts.sync ===\n * false`) always wins; `-y/--yes` and non-interactive shells sync without\n * asking; otherwise prompt with yes as the default. A cancelled prompt (Esc /\n * Ctrl-C) aborts the whole command via {@link process.exit}.\n */\nasync function shouldSyncSources(opts: { sync: boolean; yes?: boolean }): Promise<boolean> {\n if (opts.sync === false) return false;\n if (opts.yes || !process.stdin.isTTY) return true;\n const answer = await p.confirm({\n message: \"Sync sources from upstream before re-deploying?\",\n initialValue: true,\n });\n if (p.isCancel(answer)) {\n p.cancel(\"Cancelled.\");\n process.exit(130);\n }\n return answer;\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 {\n ASSET_NAME_HINT,\n checkAgentSkillConformance,\n isValidAssetName,\n parseAssetRef,\n} from \"@skaile/workspaces/core\";\nimport type { IAssetKindRegistry } from \"@skaile/workspaces/plugins\";\nimport { parseSkillFrontmatter, validateFlowVersions } from \"@skaile/workspaces/resolver\";\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/**\n * Check an asset manifest's canonical identity (the name/id that becomes its\n * asset ref). Flows carry identity in `id`; every other kind uses `name`.\n * When a `publisher` is present we round-trip through `parseAssetRef` so the\n * full canonical grammar (publisher shape + name) is exercised, which is the\n * exact path that hard-errors at install/apply time. Returns an error message,\n * or `null` when the identity is absent (required-ness is the schema's job) or\n * valid.\n */\nfunction checkManifestIdentity(kind: string, parsed: unknown): string | null {\n if (parsed === null || typeof parsed !== \"object\") return null;\n const obj = parsed as Record<string, unknown>;\n const identity = kind === \"flow\" ? obj.id : obj.name;\n if (typeof identity !== \"string\" || identity.length === 0) return null;\n\n const publisher = typeof obj.publisher === \"string\" ? obj.publisher : undefined;\n if (publisher !== undefined) {\n try {\n parseAssetRef(`${kind}:@${publisher}/${identity}`);\n return null;\n } catch (e) {\n return e instanceof Error ? e.message : String(e);\n }\n }\n if (!isValidAssetName(identity)) {\n return `invalid asset ${kind === \"flow\" ? \"id\" : \"name\"} \"${identity}\" — ${ASSET_NAME_HINT}`;\n }\n return null;\n}\n\n/**\n * Parse a single manifest candidate's bytes. Returns the parsed value, or a\n * sentinel: `\"skip\"` (MD without frontmatter — not an error) or `\"error\"`\n * (parse failure already logged, count it).\n */\nfunction parseManifestCandidate(\n c: ManifestCandidate,\n absRoot: string,\n): { kind: \"value\"; parsed: unknown } | { kind: \"skip\" } | { kind: \"error\" } {\n const content = fs.readFileSync(c.filePath, \"utf-8\");\n\n // Parse based on file type\n if (c.filePath.endsWith(\".md\")) {\n const parsed = parseMdFrontmatter(content);\n if (parsed === null) {\n // MD files without frontmatter are not necessarily errors\n // (could be pure prose contracts)\n return { kind: \"skip\" };\n }\n return { kind: \"value\", parsed };\n }\n\n // YAML/JSON files\n try {\n const parsed = c.filePath.endsWith(\".json\") ? JSON.parse(content) : parseYaml(content);\n return { kind: \"value\", parsed };\n } catch (e) {\n const relPath = path.relative(absRoot, c.filePath);\n logErr(`${relPath} — parse error: ${e instanceof Error ? e.message : String(e)}`);\n return { kind: \"error\" };\n }\n}\n\n/**\n * Validate a single parsed manifest candidate against identity rules + the kind\n * registry. Returns the error/warning deltas this candidate contributes.\n */\nfunction validateManifestCandidate(\n c: ManifestCandidate,\n parsed: unknown,\n absRoot: string,\n registry: IAssetKindRegistry,\n strictConformance: boolean,\n): { errors: number; warnings: number } {\n const relPath = path.relative(absRoot, c.filePath);\n let errors = 0;\n let warnings = 0;\n\n // Canonical identity (name/id) compliance — runs for every kind, registered\n // or not. Catches legacy names like \"CLI Concept\" before they hard-error at\n // install/apply time inside parseAssetRef.\n const identityError = checkManifestIdentity(c.kind, parsed);\n if (identityError) {\n logErr(`${relPath} [${c.kind}] — ${identityError}`);\n errors++;\n }\n\n // Agent Skills (agentskills.io) standard conformance — skills only. Advisory\n // warnings by default (exit code unchanged); --strict-conformance escalates\n // every finding to an error.\n if (c.kind === \"skill\" && parsed && typeof parsed === \"object\") {\n const dirName = path.basename(path.dirname(c.filePath)); // SKILL.md's folder\n const findings = checkAgentSkillConformance(parsed as Record<string, unknown>, { dirName });\n for (const f of findings) {\n const line = `${relPath} [skill conformance] — ${f.field}: ${f.message}`;\n if (strictConformance) {\n logErr(line);\n errors++;\n } else {\n logWarn(line);\n warnings++;\n }\n }\n }\n\n // Route validation through the registry (A5: unregistered kinds get a WARN)\n const provider = registry.getProvider(c.kind);\n\n if (!provider) {\n logWarn(`${relPath} [${c.kind}] — kind \"${c.kind}\" is not registered, skipping validation`);\n return { errors, warnings: warnings + 1 };\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 return { errors, warnings };\n}\n\n/** Validate all manifest files in a directory tree using the kind registry. */\nfunction validateManifests(\n rootPath: string,\n strictConformance: boolean,\n): { 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 parseResult = parseManifestCandidate(c, absRoot);\n if (parseResult.kind === \"skip\") continue;\n if (parseResult.kind === \"error\") {\n errors++;\n continue;\n }\n\n const delta = validateManifestCandidate(\n c,\n parseResult.parsed,\n absRoot,\n registry,\n strictConformance,\n );\n errors += delta.errors;\n warnings += delta.warnings;\n }\n\n return { total: candidates.length, errors, warnings };\n}\n\n/** Recursively find every `skaile.yaml` / `*.skaile.yaml` workspace manifest. */\nfunction findWorkspaceManifests(rootPath: string): string[] {\n const out: string[] = [];\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 full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (!SKIP_DIRS.has(entry.name)) walk(full);\n } else if (entry.isFile() && /(^|\\.)skaile\\.yaml$/.test(entry.name)) {\n out.push(full);\n }\n }\n }\n walk(rootPath);\n return out;\n}\n\n/**\n * Validate the dependency refs and asset identities declared in every\n * `skaile.yaml` under a tree. This is the manifest-level mirror of the\n * per-file identity check: it parses each `dependencies[]` /\n * `overrides[].ref` through `parseAssetRef` (the exact code path that produced\n * the original \"publisher required …\" / \"invalid asset name …\" hard error) and\n * checks each `assets[].name` against the canonical name grammar.\n */\n/**\n * Collect every `[field, ref]` pair to validate from a workspace manifest:\n * each string in `dependencies[]` and each `overrides[].ref`.\n */\nfunction collectWorkspaceRefFields(parsed: Record<string, unknown>): Array<[string, string]> {\n const refFields: Array<[string, string]> = [];\n if (Array.isArray(parsed.dependencies)) {\n for (const d of parsed.dependencies) {\n if (typeof d === \"string\") refFields.push([\"dependencies\", d]);\n }\n }\n if (Array.isArray(parsed.overrides)) {\n for (const o of parsed.overrides) {\n const ref = (o as Record<string, unknown>)?.ref;\n if (typeof ref === \"string\") refFields.push([\"overrides.ref\", ref]);\n }\n }\n return refFields;\n}\n\n/** Parse each declared ref through `parseAssetRef`; returns the error count. */\nfunction validateWorkspaceRefs(refFields: Array<[string, string]>, relPath: string): number {\n let errors = 0;\n for (const [field, ref] of refFields) {\n try {\n parseAssetRef(ref);\n } catch (e) {\n logErr(`${relPath} [${field}] — ${e instanceof Error ? e.message : String(e)}`);\n errors++;\n }\n }\n return errors;\n}\n\n/** Validate `assets[].name` against the canonical name/ref grammar. */\nfunction validateWorkspaceAssets(parsed: Record<string, unknown>, relPath: string): number {\n if (!Array.isArray(parsed.assets)) return 0;\n let errors = 0;\n const topPublisher = typeof parsed.publisher === \"string\" ? parsed.publisher : undefined;\n for (const a of parsed.assets) {\n const asset = a as Record<string, unknown>;\n const name = asset?.name;\n const kind = typeof asset?.kind === \"string\" ? asset.kind : \"skill\";\n if (typeof name !== \"string\" || name.length === 0) continue;\n const publisher = typeof asset?.publisher === \"string\" ? asset.publisher : topPublisher;\n if (publisher !== undefined) {\n try {\n parseAssetRef(`${kind}:@${publisher}/${name}`);\n } catch (e) {\n logErr(`${relPath} [assets] — ${e instanceof Error ? e.message : String(e)}`);\n errors++;\n }\n } else if (!isValidAssetName(name)) {\n logErr(`${relPath} [assets] — invalid asset name \"${name}\" — ${ASSET_NAME_HINT}`);\n errors++;\n }\n }\n return errors;\n}\n\nfunction validateWorkspaceManifests(rootPath: string): {\n total: number;\n errors: number;\n} {\n const absRoot = path.resolve(rootPath);\n const files = findWorkspaceManifests(absRoot);\n let errors = 0;\n\n for (const file of files) {\n const relPath = path.relative(absRoot, file);\n let parsed: Record<string, unknown>;\n try {\n parsed = (parseYaml(fs.readFileSync(file, \"utf-8\")) ?? {}) as Record<string, unknown>;\n } catch (e) {\n logErr(`${relPath} — parse error: ${e instanceof Error ? e.message : String(e)}`);\n errors++;\n continue;\n }\n\n errors += validateWorkspaceRefs(collectWorkspaceRefFields(parsed), relPath);\n errors += validateWorkspaceAssets(parsed, relPath);\n }\n\n return { total: files.length, errors };\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 collectFlowVersions(flowsDir, d.name, assets);\n }\n\n // Prompts\n const promptsDir = path.join(domainDir, \"prompts\");\n if (fs.existsSync(promptsDir)) {\n collectPromptVersions(promptsDir, d.name, assets);\n }\n }\n\n return assets;\n}\n\nfunction collectFlowVersions(dir: string, domain: string, out: AssetVersion[]): void {\n for (const f of fs.readdirSync(dir)) {\n if (!f.endsWith(\".flow.yaml\")) continue;\n const fp = path.join(dir, f);\n const content = fs.readFileSync(fp, \"utf-8\");\n const parsed = parseYaml(content);\n out.push({\n kind: \"flow\",\n name: parsed?.id ?? f.replace(\".flow.yaml\", \"\"),\n domain,\n version: parsed?.version ?? \"\",\n filePath: fp,\n });\n }\n}\n\nfunction collectPromptVersions(dir: string, domain: string, out: AssetVersion[]): void {\n for (const f of fs.readdirSync(dir)) {\n if (!f.endsWith(\".prompt.md\")) continue;\n const fp = path.join(dir, f);\n const content = fs.readFileSync(fp, \"utf-8\");\n const fm = parseSkillFrontmatter(content);\n out.push({\n kind: \"prompt\",\n name: fm?.name ?? f.replace(\".prompt.md\", \"\"),\n domain,\n version: fm?.metadata?.version ?? \"\",\n filePath: fp,\n });\n }\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/** Filter assets down to those changed since HEAD (`git diff --name-only`). */\nfunction filterToChangedAssets(assets: AssetVersion[]): AssetVersion[] {\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 return 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/** Check every asset has a present + semver-valid version. */\nfunction checkAssetVersions(assets: AssetVersion[]): { errors: number; warnings: number } {\n let errors = 0;\n let warnings = 0;\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 return { errors, warnings };\n}\n\n/** In --changed-only mode, warn when a changed asset's version was not bumped. */\nfunction checkVersionBumps(assets: AssetVersion[]): number {\n let warnings = 0;\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 return warnings;\n}\n\n/** Validate flow node skill-version pins against the discovered skill versions. */\nfunction checkFlowVersionPins(assets: AssetVersion[]): number {\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 let errors = 0;\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 return errors;\n}\n\n/** Body of `skaile validate versions` — semver + bump + flow-pin checks. */\nfunction runVersionsCheck(opts: {\n domain?: string;\n changedOnly?: boolean;\n strict?: boolean;\n}): void {\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 assets = filterToChangedAssets(assets);\n }\n\n const versionCheck = checkAssetVersions(assets);\n let errors = versionCheck.errors;\n let warnings = versionCheck.warnings;\n\n // In --changed-only mode, check if version was actually bumped\n if (opts.changedOnly) {\n warnings += checkVersionBumps(assets);\n }\n\n errors += checkFlowVersionPins(assets);\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/**\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 .option(\n \"--strict-conformance\",\n \"Treat Agent Skills (agentskills.io) standard findings as errors\",\n )\n .action((targetPath: string, opts: { strictConformance?: boolean }) => {\n const absPath = path.resolve(targetPath);\n logInfo(`Validating manifests in ${absPath}`);\n const { total, errors, warnings } = validateManifests(\n absPath,\n opts.strictConformance ?? false,\n );\n const ws = validateWorkspaceManifests(absPath);\n const totalErrors = errors + ws.errors;\n console.log();\n logInfo(`Scanned ${total} asset manifest(s) and ${ws.total} skaile.yaml file(s)`);\n if (warnings > 0) logWarn(`${warnings} conformance warning(s)`);\n if (totalErrors === 0) {\n logOk(\"All manifests valid\");\n } else {\n logErr(`${totalErrors} 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 runVersionsCheck(opts);\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 { bareSoftDepName, colorRef, logErr, S } from \"../helpers.ts\";\n\n/**\n * Split a dependency ref into its `kind` + `name`, tolerant of both the bare\n * `kind:name` form the user is likely to type and the canonical\n * `kind:@publisher/name#version` form. `kind` is `undefined` when the ref\n * carries no `kind:` prefix — matching then falls back to name-only.\n */\nfunction refKindName(ref: string): { kind?: string; name: string } {\n const trimmed = ref.trim();\n const colon = trimmed.indexOf(\":\");\n let kind = colon === -1 ? undefined : trimmed.slice(0, colon);\n // `parseAssetRef` normalizes the `mcp` shorthand to `mcp-server`, so declared\n // mcp servers surface under that kind — mirror it or the match wrongly misses.\n if (kind === \"mcp\") kind = \"mcp-server\";\n let rest = colon === -1 ? trimmed : trimmed.slice(colon + 1);\n const hash = rest.indexOf(\"#\");\n if (hash !== -1) rest = rest.slice(0, hash);\n if (rest.startsWith(\"@\")) {\n const slash = rest.indexOf(\"/\");\n if (slash !== -1) rest = rest.slice(slash + 1);\n }\n return { kind, name: rest };\n}\n\n/**\n * Pick the right message when `am.why(ref)` returns an empty chain. Two\n * distinct causes need different guidance:\n *\n * - The ref **is** a declared dependency (matches `declared` by kind+name) but\n * isn't in the lock file yet → tell the user to run `skaile install`.\n * - The ref is **not** declared at all → `skaile install` cannot help, so say\n * plainly that nothing in `skaile.yaml` requires it.\n *\n * Pure and terminal-free so it can be unit-tested; the command wires the\n * returned string into `logErr`.\n *\n * @param declared - Declared deps exposing `.kind` + `.name` (from `listDeclared`).\n */\nexport function whyEmptyMessage(\n ref: string,\n declared: Array<{ kind: string; name: string }>,\n): string {\n const { kind, name } = refKindName(ref);\n const isDeclared = declared.some(\n (d) => d.name === name && (kind === undefined || d.kind === kind),\n );\n if (isDeclared) {\n return `${ref} not found in lock file. Run \\`skaile install\\` first.`;\n }\n return `${ref} is not a dependency of this project — nothing in skaile.yaml requires it. Run \\`skaile list\\` to see declared dependencies.`;\n}\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(async (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 // Best-effort: if the declared deps can't be read for any reason (no\n // skaile.yaml, a legacy-key manifest error, …) we can't tell \"declared\"\n // from \"undeclared\", so keep the generic install hint rather than crash.\n let declared: Array<{ kind: string; name: string }>;\n try {\n declared = am.listDeclared();\n } catch {\n logErr(`${ref} not found in lock file. Run \\`skaile install\\` first.`);\n return;\n }\n logErr(whyEmptyMessage(ref, declared));\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 // Inferred body-link soft deps this asset pulls (report-only, distinct from\n // the typed dependency chain above).\n const softDeps = await am.softDepsOf([ref]);\n if (softDeps.length > 0) {\n console.log(\n ` ${S.dim(`also pulls (soft): ${softDeps.map((e) => bareSoftDepName(e.to)).join(\", \")}`)}`,\n );\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 { makeCacheCommand } from \"./commands/cache.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 { makeDeployCommand } from \"./commands/deploy.ts\";\nimport { makeDiffCommand } from \"./commands/diff.ts\";\nimport { makeFlowCommand } from \"./commands/flow.ts\";\nimport { makeHistoryCommand } from \"./commands/history.ts\";\nimport { makeIntegrationCommand } from \"./commands/integration.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-registry-cmd.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 integration install [--driver all] Install agent integration (claude-code | omp | codex)\n integration uninstall [--driver all] Uninstall agent integration\n integration enable Enable integration (claude-code only)\n integration disable Disable integration (claude-code only)\n integration status Show install / enable state across backends\n plugin install <spec> Add a registry plugin to skaile.yaml + reconcile\n plugin remove <name> Remove a registry plugin from skaile.yaml\n plugin list List declared plugins + the targets they contribute\n deploy up [--target] [--detach] Stand the workspace up on a deploy target\n deploy down Tear down the active deploy\n deploy status Show the active deploy's state + ws URL\n deploy logs [--follow] Stream logs from the active deploy\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 [path] Check manifest schemas + canonical asset names/refs\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\n/**\n * Per-backend agent-config defaults emitted by `skaile init`. Keyed by the\n * `--backend` driver target; the values are the bridge driver id (verified\n * against the bridge driver registry) plus the provider/model that apply.\n * omp is model-agnostic, so it carries no provider/model; codex is OpenAI-only\n * with no fixed default model.\n */\nconst BACKEND_DEFAULTS: Record<\n DriverTarget,\n { driver: string; provider?: string; model?: string }\n> = {\n \"claude-code\": { driver: \"claude-sdk\", provider: \"anthropic\", model: \"claude-sonnet-4-6\" },\n omp: { driver: \"omp\" },\n codex: { driver: \"codex\", provider: \"openai\" },\n};\n\nprogram\n .command(\"init [project-dir]\")\n .description(\"Initialize a project directory (defaults to current directory)\")\n .option(\"--backend <name>\", \"Coding-agent backend (claude-code | omp | codex)\", \"claude-code\")\n .option(\"--no-git\", \"Skip git init and .gitignore\")\n .action((projectDir: string | undefined, opts: { backend: string; git: boolean }) =>\n runInit(projectDir, opts),\n );\n\n/** Top-level `skaile init` handler. Extracted from the command action arrow. */\nasync function runInit(\n projectDir: string | undefined,\n opts: { backend: string; git: boolean },\n): Promise<void> {\n const { mkdirSync, writeFileSync } = await import(\"node:fs\");\n const { stringify } = await import(\"yaml\");\n const { DRIVER_TARGETS, SUPPORTED_DRIVER_TARGETS } = await import(\"@skaile/workspaces/core\");\n\n const backend = opts.backend as DriverTarget;\n if (!SUPPORTED_DRIVER_TARGETS.includes(backend)) {\n logErr(`Unknown backend \"${opts.backend}\". Supported: ${SUPPORTED_DRIVER_TARGETS.join(\", \")}`);\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 const { existsSync } = await import(\"node:fs\");\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(wsConfigPath, stringify(buildInitWorkspaceConfig(projectName, backend)));\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 await initGitScaffold(resolved, created);\n }\n\n await bootstrapUserConfig();\n await hydrateInitSources(resolved, created);\n\n printInitSummary(resolved, projectDir, created);\n}\n\n/** Build the default `skaile.yaml` document written by `skaile init`. */\nfunction buildInitWorkspaceConfig(projectName: string, backend: DriverTarget) {\n const backendDefaults = BACKEND_DEFAULTS[backend];\n return {\n name: projectName,\n description: `${projectName} AI skill dependencies`,\n \"agent-config\": {\n default: {\n agent: backend,\n // provider/model are omitted for backends that don't fix them (omp, codex).\n ...(backendDefaults.provider ? { provider: backendDefaults.provider } : {}),\n ...(backendDefaults.model ? { model: backendDefaults.model } : {}),\n driver: backendDefaults.driver,\n max_turns: 200,\n },\n },\n };\n}\n\n/** Write `.gitignore` entries and run `git init` for `skaile init` (best-effort). */\nasync function initGitScaffold(resolved: string, created: string[]): Promise<void> {\n const { execSync } = await import(\"node:child_process\");\n const { existsSync, readFileSync, writeFileSync } = await import(\"node:fs\");\n\n const gitignorePath = path.join(resolved, \".gitignore\");\n const entries = [\n \"node_modules/\",\n \".skaile/sessions/\",\n \".skaile/cache/\",\n // skaile-created artifacts that must never be committed: the per-session log\n // DB (SQLite incl. -shm/-wal, ends in .db — not caught by *.log), personal\n // settings (holds API keys), and the install history.\n \".skaile/logs.db*\",\n \".skaile/settings.json\",\n \".skaile/history.yaml\",\n \"*.log\",\n \".env\",\n \".env.local\",\n ];\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/** Bootstrap the default user config (`~/.skaile/config.yaml`) when missing. */\nasync function bootstrapUserConfig(): Promise<void> {\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\n/** Hydrate sources declared in skaile.yaml — no-op when none. */\nasync function hydrateInitSources(resolved: string, created: string[]): Promise<void> {\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/cache/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\n/** Print the created-files list and the post-init next steps. */\nfunction printInitSummary(\n resolved: string,\n projectDir: string | undefined,\n created: string[],\n): void {\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(\n ` ${S.dim(`${step}.`)} ${S.cmd(\"skaile add <ref>\")} ${S.dim(\"— add a dependency and deploy it in one step\")}`,\n );\n step++;\n console.log(\n ` ${S.dim(`${step}.`)} ${S.dim(\"or:\")} edit ${S.cmd(\"skaile.yaml\")} to add dependencies, then ${S.cmd(\"skaile install\")}`,\n );\n step++;\n console.log(\n ` ${S.dim(`${step}.`)} ${S.cmd(\"skaile search <query>\")} ${S.dim(\"— find assets to add\")}`,\n );\n step++;\n console.log(\n ` ${S.dim(`${step}.`)} ${S.cmd(\"skaile preset apply <file>\")} ${S.dim(\"— apply a saved preset (assets + config) at once\")}`,\n );\n console.log();\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(makeCacheCommand());\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(makeIntegrationCommand());\nprogram.addCommand(makePluginCommand());\nprogram.addCommand(makeDeployCommand());\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/catalog.ts","../../cli/src/commands/skailify-lib.ts","../../cli/src/commands/asset-cmd.ts","../../cli/src/commands/auth.ts","../../cli/src/commands/cache.ts","../../cli/src/commands/catalog-cmd.ts","../../cli/src/completion.ts","../../cli/src/flow-discovery.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/deploy.ts","../../cli/src/commands/diff.ts","../../cli/src/commands/flow.ts","../../cli/src/commands/history.ts","../../cli/src/commands/plugin/claude-code.ts","../../cli/src/commands/plugin/codex.ts","../../cli/src/commands/plugin/omp.ts","../../cli/src/commands/integration.ts","../../cli/src/commands/library-index.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-registry-cmd.ts","../../cli/src/commands/preset-apply.ts","../../cli/src/commands/preset-export.ts","../../cli/src/commands/preset-cmd.ts","../../cli/src/commands/rebuild.ts","../../cli/src/driver-error.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/superjson-transformer.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/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":["path","openLibrary","p","openCatalogSource","am","spinner","pc","status","path2","fs","stringifyYaml","Command","fs2","path3","basename","homedir","existsSync","readdirSync","statSync","p2","program","resolve","scanDirectory","createInterface","factoryAssetRoots","WorkspaceYamlEditor","resolveSkWorkspaceConfig","disabled","next","updated","list","SKAILE_MCP_NAME","parseToml","stringifyToml","install","uninstall","action","runStatus","path18","fs9","path19","fs10","Option","domain","p3","LocalSecretsProvider","openLibraryManager","getGlobalCacheDir","budget","shown","idx","p4","mkdirSync","readFileSync","runInstall","path25","writeFileSync","AssetManager","os","logInfo","logWarn","logOk","logErr","S","dirname","join","fileURLToPath","portableSpawnSync","normalizeTrpcUrl","createTRPCUntypedClient","result","p6","parseYaml","parsed","execSync","a","c","stringify","SUPPORTED_DRIVER_TARGETS"],"mappings":"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","file":"index.js","sourcesContent":["/**\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 {\n AssetManager,\n type BackendDeclaredAsset,\n type DeclaredAsset,\n type DeclaredState,\n MissingManifestError,\n NON_DEPLOYABLE_KINDS,\n} from \"@skaile/workspaces/asset-manager\";\nimport {\n ASSET_KINDS,\n type CatalogEntry,\n type DriverTarget,\n factoryAssetRoots,\n parseAssetRef,\n SUPPORTED_DRIVER_TARGETS,\n} from \"@skaile/workspaces/core\";\nimport type { CatalogAsset } from \"@skaile/workspaces/plugins\";\nimport { Command, Option } from \"commander\";\nimport pc from \"picocolors\";\nimport {\n bareSoftDepName,\n colorRef,\n formatSoftDepHint,\n formatSoftDepSection,\n kindColor,\n kindColorPad,\n logErr,\n logInfo,\n logOk,\n S,\n} from \"../helpers.ts\";\n\n/**\n * Copyable install ref for a store catalog asset — `kind:@<publisher>/<name>#<version>`,\n * the exact shape `skaile add` accepts.\n */\nexport function catalogAssetRef(a: CatalogAsset): string {\n return `${a.kind}:@${a.publisher}/${a.name}#${a.version}`;\n}\n\n/**\n * Copyable ref for a local index entry. Uses `kind:@<publisher>/<name>` when a\n * publisher is known; local assets without one fall back to the bare name.\n */\nexport function localEntryRef(e: Pick<CatalogEntry, \"kind\" | \"name\" | \"publisher\">): string {\n return e.publisher ? `${e.kind}:@${e.publisher}/${e.name}` : e.name;\n}\n\n/**\n * Client-side text filter over catalog assets — the store's `listAssets` has no\n * server-side query. Case-insensitive match across name, description, publisher;\n * an empty query returns every asset.\n */\nexport function filterCatalogAssets(\n assets: CatalogAsset[],\n query: string | undefined,\n): CatalogAsset[] {\n if (!query) return assets;\n const q = query.toLowerCase();\n return assets.filter(\n (a) =>\n a.name.toLowerCase().includes(q) ||\n (a.description?.toLowerCase().includes(q) ?? false) ||\n a.publisher.toLowerCase().includes(q),\n );\n}\n\n/**\n * Drive the `skaile search` action across the local and/or store legs.\n * Air-gapped (`cache_ttl: 0`) suppresses every network leg. The store leg goes\n * through the shared catalog client (same source `install`/`update` use).\n */\nasync function runSearch(\n kind: string | undefined,\n query: string | undefined,\n opts: any,\n): Promise<void> {\n if (kind?.includes(\":\")) {\n query = kind;\n kind = undefined;\n }\n\n const showLocal = !opts.store;\n const showStore = !opts.local;\n\n const { resolveConfig } = await import(\"@skaile/workspaces/library\");\n const airGapped =\n resolveConfig({ projectDir: path.resolve(opts.projectDir) }).catalog.cache_ttl === 0;\n\n if (showLocal) {\n await searchLocal(query, kind, opts, showStore, airGapped);\n }\n\n if (showStore) {\n await searchStore(query, kind, opts, airGapped);\n }\n}\n\n/**\n * Run the local-repo search and print its grouped table (or empty notice).\n *\n * On an empty result that is *not* a query miss (no matches for nothing → never\n * synced), auto-sync the project's sources and re-query, unless air-gapped\n * (which forbids the network). If auto-sync doesn't surface anything, fall back\n * to the \"run sync first\" hint.\n */\n/**\n * Read local assets straight from the index (`asset_definitions`) rather than\n * re-scanning the source tree. A `source add`/`sync` is authoritative for what\n * it wrote, so reading the index returns the exact set it holds — no\n * hand-rolled filename walk, no `kind:name` dedup collapsing same-named or\n * multi-kind assets. Maps each `AssetDefinition` row → the `CatalogEntry` shape\n * `printLocalEntries` / `localEntryRef` consume.\n */\nasync function searchIndex(\n query: string | undefined,\n kind: string | undefined,\n): Promise<CatalogEntry[]> {\n const { openLibrary } = await import(\"../open-library.ts\");\n const library = await openLibrary();\n try {\n const defs = await library.listAssetDefs(kind ? { kind: kind as CatalogEntry[\"kind\"] } : {});\n let entries: CatalogEntry[] = defs.map(\n (d): CatalogEntry => ({\n name: d.name,\n kind: d.kind as CatalogEntry[\"kind\"],\n description: d.description ?? \"\",\n source: d.id,\n // Stored publishers may carry the `@` scope sigil (manifest-mode rows);\n // `localEntryRef` re-adds it, so strip here to avoid `@@`.\n publisher: d.publisher ? d.publisher.replace(/^@/, \"\") : undefined,\n version: d.version,\n requires: [],\n dependencies: [],\n license: d.license,\n category: d.category,\n }),\n );\n if (query) {\n const q = query.toLowerCase();\n entries = entries.filter(\n (e) => e.name.toLowerCase().includes(q) || e.description.toLowerCase().includes(q),\n );\n }\n return entries;\n } finally {\n library.close();\n }\n}\n\n/**\n * Scan the bundled FACTORY (first-party) source — it is never indexed, so the\n * index read alone would drop built-in skills from a fresh project's\n * `search --local`. Reuses `AssetManager.search` (which injects the factory\n * source into its repositories map) and keeps only entries whose manifest path\n * lives under a `factoryAssetRoots()` prefix — the same test `asset-feeds.ts`\n * uses to band the factory origin.\n */\nfunction searchFactory(\n projectDir: string,\n query: string | undefined,\n kind: string | undefined,\n): CatalogEntry[] {\n const prefixes = factoryAssetRoots().map((r) => (r.endsWith(path.sep) ? r : r + path.sep));\n const isFactoryPath = (p: string) =>\n prefixes.some((fp) => p === fp.slice(0, -1) || p.startsWith(fp));\n try {\n return new AssetManager({ projectDir })\n .search(query, kind)\n .filter((e) => isFactoryPath(e.source));\n } catch {\n return [];\n }\n}\n\n/** Canonical dedup key for a local entry (`kind:@publisher/name`). */\nfunction entryDedupKey(e: CatalogEntry): string {\n return `${e.kind}:${e.publisher ? `@${e.publisher}/` : \"\"}${e.name}`;\n}\n\n/** Union index entries with factory entries, index-wins on a canonical collision. */\nfunction unionEntries(indexed: CatalogEntry[], factory: CatalogEntry[]): CatalogEntry[] {\n const seen = new Set(indexed.map(entryDedupKey));\n return [...indexed, ...factory.filter((e) => !seen.has(entryDedupKey(e)))];\n}\n\nasync function searchLocal(\n query: string | undefined,\n kind: string | undefined,\n opts: any,\n showStore: boolean,\n airGapped: boolean,\n): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n // Index (registered sources, overlay-applied) UNION the bundled factory source\n // (never indexed). Without the factory leg a fresh project would show no\n // built-in skills; without the index leg the count/dedup bug (Bug 3) returns.\n const factory = searchFactory(projectDir, query, kind);\n let entries = unionEntries(await searchIndex(query, kind), factory);\n\n // Empty with no query *and* no kind filter = nothing indexed yet (a query or\n // kind miss is a real \"no match\", not an unsynced state). Auto-sync then\n // re-query against the index — never over the network when air-gapped.\n if (entries.length === 0 && !query && !kind && !airGapped) {\n const { autoSyncForSearch } = await import(\"./source.ts\");\n if (await autoSyncForSearch(projectDir)) {\n entries = unionEntries(await searchIndex(query, kind), factory);\n }\n }\n\n if (entries.length === 0) {\n if (!showStore) {\n logInfo(\n query\n ? `No entries matching \"${query}\".`\n : kind\n ? `No \"${kind}\" assets found in this project's sources.`\n : \"No assets found. Run `skaile source sync` first.\",\n );\n }\n return;\n }\n\n if (showStore) {\n console.log(`\\n ${S.heading(\"Local:\")}`);\n }\n printLocalEntries(entries);\n}\n\n/** Group local entries by kind and print one compact table per kind. */\nfunction printLocalEntries(entries: CatalogEntry[]): void {\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) => localEntryRef(e).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(\n ` ${S.cmd(localEntryRef(e).padEnd(nameW))} ${e.description.slice(0, 60)}${ver}`,\n );\n }\n }\n console.log(`\\n ${S.dim(`${entries.length} total`)}\\n`);\n}\n\n/**\n * Query the remote store and print its results. Air-gapped skips the network;\n * a store failure degrades non-silently — `--store` surfaces the error, an\n * implicit query keeps local results behind a one-line notice.\n */\nasync function searchStore(\n query: string | undefined,\n kind: string | undefined,\n opts: any,\n airGapped: boolean,\n): Promise<void> {\n if (airGapped) {\n if (opts.store) {\n logErr(\n \"air-gapped (catalog.cache_ttl: 0) — store search is disabled. Set catalog.cache_ttl > 0 to query the store.\",\n );\n process.exit(1);\n }\n logInfo(\"air-gapped (cache_ttl: 0) — local sources only\");\n return;\n }\n // Imported before the try so the catch can `instanceof`-check the typed error.\n const { openCatalogSource, LocalCatalogDisabledError } = await import(\"../open-library.ts\");\n try {\n const remote = await openCatalogSource({ projectDir: path.resolve(opts.projectDir) });\n // The store filters by kind server-side; text query is client-side only.\n const assets = await remote.listAssets(kind ? { kind } : {});\n const results = filterCatalogAssets(assets, query);\n\n if (results.length > 0) {\n console.log(`\\n ${S.heading(\"Store:\")}`);\n for (const asset of results) {\n const ref = catalogAssetRef(asset);\n console.log(\n ` ⬡ ${kindColorPad(asset.kind)} ${colorRef(ref).padEnd(48)} ${S.dim(asset.description?.slice(0, 50) || \"\")}`,\n );\n }\n } else if (opts.store) {\n logInfo(\"No results in store\");\n }\n } catch (e: any) {\n // `catalog.url: local` disables the remote leg — say so explicitly rather\n // than reporting a generic failure. Typed error, not a message-string match.\n const local = e instanceof LocalCatalogDisabledError;\n if (opts.store) {\n logErr(\n local\n ? \"remote catalog disabled (catalog.url: local) — set catalog.url: https://skaile.store to search the store\"\n : `Store search failed: ${e.message}`,\n );\n } else {\n // Degrade, but don't go silent — the user must be able to tell \"no store\n // match\" from \"store never queried\".\n logInfo(\n local\n ? \"remote catalog disabled (catalog.url: local) — showing local results only\"\n : \"store unavailable — showing local results only (run with --store to see the error)\",\n );\n }\n }\n}\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 await runSearch(kind, query, opts);\n });\n}\n\n/**\n * Parse a `--backend a,b` value into validated {@link DriverTarget}s, exiting on\n * an unknown id. Returns `undefined` when the flag is absent (the caller then\n * resolves the full global backend set).\n */\nfunction parseBackendFilter(raw: string | undefined): DriverTarget[] | undefined {\n if (!raw) return undefined;\n const ids = raw\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n const out: DriverTarget[] = [];\n for (const id of ids) {\n if (!(SUPPORTED_DRIVER_TARGETS as string[]).includes(id)) {\n logErr(`unknown backend '${id}' — expected one of: ${SUPPORTED_DRIVER_TARGETS.join(\", \")}`);\n process.exit(1);\n }\n out.push(id as DriverTarget);\n }\n return out.length > 0 ? out : undefined;\n}\n\n/**\n * Soft-dep opt-in pull for `skaile add`, symmetric with the remove-orphan prompt.\n * For each absent body-link soft dep with a parseable ref, prompt (default No) to\n * also add it; on yes, add the target via `am.add`. Report-only otherwise — never\n * auto-adds. A non-interactive run (no TTY) prints the report-only hint instead of\n * prompting, so a piped `skaile add` never blocks. The clack prompt / TTY check /\n * loggers are injected so the decision is unit-testable without a real terminal.\n */\nexport async function promptSoftDepAdds(\n am: Pick<AssetManager, \"reportSoftDeps\" | \"add\">,\n ref: string,\n io: {\n isTTY: boolean;\n link?: boolean;\n /** `--with-soft-deps`: pull every referenced soft dep without prompting. */\n withSoftDeps?: boolean;\n /** `--no-soft-deps`: skip the soft-dep step entirely (no prompt, no hint). */\n noSoftDeps?: boolean;\n confirm: (message: string) => Promise<boolean | symbol>;\n isCancel: (value: unknown) => boolean;\n onAdded: (line: string) => void;\n onError: (line: string) => void;\n onHint: (line: string) => void;\n },\n): Promise<void> {\n if (io.noSoftDeps) return; // opted out — don't even query the index\n const edges = await am.reportSoftDeps([ref]);\n if (edges.length === 0) return;\n\n const addEdge = async (toRef: string): Promise<void> => {\n try {\n for (const a of await am.add(toRef, { link: io.link })) io.onAdded(a);\n } catch (err) {\n io.onError(`Failed to add ${toRef}: ${err}`);\n }\n };\n\n // `--with-soft-deps`: opt-in one-shot pull of every referenced soft dep,\n // no prompt (TTY-independent, for CI/scripts). One level only — matches\n // reportSoftDeps([ref]); a pulled dep's own soft deps are not followed.\n if (io.withSoftDeps) {\n for (const edge of edges) {\n if (edge.toRef) await addEdge(edge.toRef);\n // Surface the skip — a CI/script run should not silently drop a soft dep.\n else io.onError(`Cannot auto-add ${bareSoftDepName(edge.to)} — no resolvable ref.`);\n }\n return;\n }\n\n // Display the bare names (grilling), but keep the full toRef in the runnable hint.\n if (!io.isTTY) {\n // No TTY → can't prompt without hanging; fall back to the printed hint.\n for (const edge of edges) io.onHint(formatSoftDepHint(edge));\n return;\n }\n for (const edge of edges) {\n if (!edge.toRef) continue; // no parseable ref → can't be added reliably\n const yes = await io.confirm(\n `${bareSoftDepName(edge.from)} references ${bareSoftDepName(edge.to)} (soft dependency) — also add it?`,\n );\n if (io.isCancel(yes)) break; // Ctrl-C: stop prompting, keep what's added\n if (yes === true) await addEdge(edge.toRef);\n }\n}\n\n/**\n * The `remove` counterpart to {@link promptSoftDepAdds}: after removing `ref`,\n * offer to also remove each soft-dep target of `ref` that is now orphaned (no\n * installed asset still references it). Default No — never auto-removed (removing\n * on a heuristic is the dangerous direction). A non-interactive run (no TTY)\n * prints the report-only hint instead of prompting; `--no-soft-deps` skips it.\n */\nexport async function promptSoftDepRemovals(\n am: Pick<AssetManager, \"orphanedSoftDepsAfterRemoving\" | \"remove\">,\n ref: string,\n io: {\n isTTY: boolean;\n /** `--no-soft-deps`: skip the orphan step entirely (no prompt, no hint). */\n noSoftDeps?: boolean;\n confirm: (message: string) => Promise<boolean | symbol>;\n isCancel: (value: unknown) => boolean;\n onRemoved: (line: string) => void;\n onHint: (line: string) => void;\n },\n): Promise<void> {\n if (io.noSoftDeps) return;\n // Only orphans with a parseable ref can be removed.\n const orphans = (await am.orphanedSoftDepsAfterRemoving([ref])).filter((o) => o.targetRef);\n if (orphans.length === 0) return;\n\n if (!io.isTTY) {\n // No TTY → can't prompt without hanging; fall back to the printed hint.\n for (const o of orphans) {\n io.onHint(\n `${bareSoftDepName(o.target)} is now an orphaned soft dependency of ${ref} — run \\`skaile remove ${o.targetRef}\\` to remove it.`,\n );\n }\n return;\n }\n for (const o of orphans) {\n const yes = await io.confirm(\n `${bareSoftDepName(o.target)} is a soft dependency of ${ref} and is no longer referenced by any installed asset — also remove it?`,\n );\n if (io.isCancel(yes)) break; // Ctrl-C: stop prompting, keep what's already removed\n if (yes === true && am.remove(o.targetRef!)) io.onRemoved(`Removed ${o.targetRef}`);\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:@<publisher>/name#<version>` (e.g.\n * `skill:@skaile/use-exa#1.0.0`).\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:@<publisher>/name#<version>)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--global\", \"Record in ~/.skaile/skaile.yaml + deploy to every global backend\")\n .option(\n \"--backend <ids>\",\n \"Comma-separated global backends to deploy into (default: all resolved); implies --global\",\n )\n .option(\"--target <agent>\", \"Driver target\", \"claude-code\")\n .option(\n \"--link\",\n \"symlink local-path assets instead of copying (dev loop; machine-local, not for committing)\",\n )\n .option(\n \"--with-soft-deps\",\n \"also add the asset's report-only soft (body-link) deps, without prompting\",\n )\n .option(\"--no-soft-deps\", \"skip the soft-dep prompt entirely (don't add, don't report)\")\n .action(async (ref: string, opts) => {\n if (opts.withSoftDeps && opts.softDeps === false) {\n logErr(\"--with-soft-deps and --no-soft-deps are mutually exclusive.\");\n process.exit(1);\n }\n const backends = parseBackendFilter(opts.backend);\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n global: opts.global || backends !== undefined,\n backends,\n driverTarget: opts.target,\n });\n const spinner = p.spinner();\n spinner.start(`Adding ${ref}`);\n try {\n const added = await am.add(ref, { link: opts.link });\n spinner.stop(\"Done\");\n // Surface body-link soft deps the asset references; prompt (default No) to\n // optionally pull each one. Non-interactive runs fall back to a hint.\n await promptSoftDepAdds(am, ref, {\n isTTY: !!process.stdin.isTTY,\n link: opts.link,\n withSoftDeps: opts.withSoftDeps,\n noSoftDeps: opts.softDeps === false,\n confirm: (message) => p.confirm({ message, initialValue: false }),\n isCancel: p.isCancel,\n onAdded: logOk,\n onError: logErr,\n onHint: (line) => logInfo(S.dim(line)),\n });\n if (added.length === 0) {\n // add() resolved + recorded the ref (it throws on not-found before\n // here), so an empty result means either a non-deployable kind or an\n // already-deployed asset — not \"not found\".\n const kind = parseAssetRef(ref).kind;\n if (NON_DEPLOYABLE_KINDS.has(kind))\n logInfo(\n `Recorded in skaile.yaml. ${kind} assets are not deployed into the driver target — they are wired when skaile runs the agent.`,\n );\n else logInfo(\"Nothing to deploy (already up to date).\");\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 ~/.skaile/skaile.yaml + undeploy from every global backend\")\n .option(\n \"--backend <ids>\",\n \"Comma-separated global backends to undeploy from (default: all resolved); implies --global\",\n )\n .option(\"--target <agent>\", \"Driver target\", \"claude-code\")\n .option(\"--no-soft-deps\", \"skip the orphaned-soft-dep prompt (don't remove, don't report)\")\n .action(async (ref: string, opts) => {\n const backends = parseBackendFilter(opts.backend);\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n global: opts.global || backends !== undefined,\n backends,\n driverTarget: opts.target,\n });\n const ok = am.remove(ref);\n if (!ok) {\n logErr(`Not deployed: ${ref}`);\n return;\n }\n logOk(`Removed ${ref}`);\n // Report-only: offer to also remove soft-dep targets of `ref` now orphaned.\n // Default No — never auto-removed (removing on a heuristic is the dangerous\n // direction, so there is deliberately no batch `--with-soft-deps` here).\n await promptSoftDepRemovals(am, ref, {\n isTTY: !!process.stdin.isTTY,\n noSoftDeps: opts.softDeps === false,\n confirm: (message) => p.confirm({ message, initialValue: false }),\n isCancel: p.isCancel,\n onRemoved: logOk,\n onHint: (line) => logInfo(S.dim(line)),\n });\n });\n}\n\n/** Colour a declared-dep state for the `list` table. */\nfunction stateLabel(s: DeclaredState): string {\n if (s === \"installed\") return S.ok(s);\n if (s === \"drift\") return S.warn(s);\n if (s === \"invalid\") return S.err(s);\n return S.dim(s);\n}\n\n/**\n * Create the `skaile list` command.\n *\n * Lists the **declared** top-level dependencies from `skaile.yaml` (not the\n * deployed tree), each annotated with a reconciliation state — `declared`,\n * `installed`, or `drift`. Transitive (lock-only) deps are excluded. The\n * available-assets view lives in `skaile search`. Delegates to\n * {@link AssetManager.listDeclared}.\n *\n * `--target` selects which driver-target dir is inspected for the on-disk\n * install/drift check. `--global` switches to the global SSOT\n * (`~/.skaile/skaile.yaml`) and reports state **per backend**; `--backend <ids>`\n * narrows the global view to a subset.\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 declared dependencies from skaile.yaml with state\")\n .argument(\"[kind]\", \"Filter by asset kind\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\n \"-g, --global\",\n \"Read the global SSOT (~/.skaile/skaile.yaml); report state per backend\",\n )\n .option(\"--backend <ids>\", \"Comma-separated global backends to report (implies --global)\")\n .option(\"--json\", \"Output as JSON\")\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 backends = parseBackendFilter(opts.backend);\n if (opts.global || backends) {\n runGlobalList(kind, opts, backends);\n return;\n }\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n driverTarget: opts.target,\n });\n let declared: DeclaredAsset[];\n try {\n declared = am.listDeclared(kind);\n } catch (err) {\n if (err instanceof MissingManifestError)\n logErr(`No ${S.cmd(\"skaile.yaml\")} found. Run ${S.cmd(\"skaile init\")} to create one.`);\n else logErr(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n\n if (opts.json) {\n console.log(JSON.stringify(declared, null, 2));\n return;\n }\n if (declared.length === 0) {\n logInfo(\"No dependencies declared in skaile.yaml.\");\n return;\n }\n const kindW = Math.max(4, ...declared.map((e) => e.kind.length)); // \"KIND\" = 4\n const nameW = Math.max(4, ...declared.map((e) => e.name.length)); // \"NAME\" = 4\n console.log();\n console.log(\n ` ${S.dim(\"KIND\".padEnd(kindW))} ${S.dim(\"NAME\".padEnd(nameW))} ${S.dim(\"STATE\")}`,\n );\n // Rule spans both columns + the two 2-space gaps + the widest STATE label.\n console.log(` ${S.rule(kindW + nameW + 4 + \"installed\".length)}`);\n for (const e of declared) {\n console.log(\n ` ${kindColorPad(e.kind, kindW)} ${e.name.padEnd(nameW)} ${stateLabel(e.state)}`,\n );\n }\n console.log(`\\n ${S.dim(`${declared.length} declared`)}`);\n const drift = declared.filter((e) => e.state === \"drift\").length;\n if (drift > 0)\n logInfo(`${drift} with drift — run ${S.cmd(\"skaile install\")} to materialize.`);\n const invalid = declared.filter((e) => e.state === \"invalid\").length;\n if (invalid > 0)\n logInfo(`${invalid} invalid — fix the ${S.cmd(\"skaile.yaml\")} dependencies entry.`);\n console.log();\n });\n}\n\n/** Options accepted by the global branch of `skaile list`. */\ninterface GlobalListOptions {\n projectDir: string;\n json?: boolean;\n}\n\n/**\n * `skaile list --global` branch: per-backend reconciliation of the global SSOT.\n * One row per (ref, backend); `--json` emits `{ ref, kind, name, backend, state }`.\n */\nfunction runGlobalList(\n kind: string | undefined,\n opts: GlobalListOptions,\n backends: DriverTarget[] | undefined,\n): void {\n const am = new AssetManager({\n projectDir: path.resolve(opts.projectDir),\n global: true,\n backends,\n });\n let rows: BackendDeclaredAsset[];\n try {\n rows = am.globalState({ kind });\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n\n if (opts.json) {\n console.log(JSON.stringify(rows, null, 2));\n return;\n }\n if (rows.length === 0) {\n logInfo(\"No global dependencies declared in ~/.skaile/skaile.yaml.\");\n return;\n }\n const kindW = Math.max(4, ...rows.map((e) => e.kind.length));\n const nameW = Math.max(4, ...rows.map((e) => e.name.length));\n const beW = Math.max(7, ...rows.map((e) => e.backend.length)); // \"BACKEND\" = 7\n console.log();\n console.log(\n ` ${S.dim(\"KIND\".padEnd(kindW))} ${S.dim(\"NAME\".padEnd(nameW))} ${S.dim(\"BACKEND\".padEnd(beW))} ${S.dim(\"STATE\")}`,\n );\n console.log(` ${S.rule(kindW + nameW + beW + 6 + \"installed\".length)}`);\n for (const e of rows) {\n console.log(\n ` ${kindColorPad(e.kind, kindW)} ${e.name.padEnd(nameW)} ${e.backend.padEnd(beW)} ${stateLabel(e.state)}`,\n );\n }\n console.log(`\\n ${S.dim(`${rows.length} entries`)}`);\n const drift = rows.filter((e) => e.state === \"drift\").length;\n if (drift > 0)\n logInfo(`${drift} with drift — run ${S.cmd(\"skaile install --global\")} to materialize.`);\n console.log();\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(async (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 // Inferred body-link soft deps (report-only) — read from the index, distinct\n // from the typed `requires` above.\n const softDeps = await am.softDepsOf([ref]);\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.publisher) console.log(` repository: ${S.dim(entry.publisher)}`);\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 for (const line of formatSoftDepSection(softDeps.map((e) => bareSoftDepName(e.to))))\n console.log(line);\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 * skailify — pure, individually-testable helpers for importing an existing\n * coding-agent skill (e.g. a Claude Code skill from `~/.claude/skills/`) into a\n * skaile library. Composed by the `asset import` command and the `skailify`\n * factory skill. See each export's TSDoc for specifics.\n *\n * @docLink cli/commands/asset#import\n */\n\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport {\n isValidAssetName,\n loadSkPublishManifest,\n parseFrontmatter,\n saveSkPublishManifest,\n slugifyAssetName,\n} from \"@skaile/workspaces/core\";\nimport type { AssetEntry, SkPublishManifest } from \"@skaile/workspaces/core\";\nimport { stringify as stringifyYaml } from \"yaml\";\n\n/** Default authoring version stamped on a skill that ships none. */\nexport const DEFAULT_IMPORT_VERSION = \"0.1.0\";\n/** Default lifecycle stage stamped on an imported skill. */\nexport const DEFAULT_IMPORT_STAGE = \"alpha\";\n\n/**\n * Where coding-agent skills live on disk, highest precedence first. The\n * `SKAILE_CLAUDE_SKILLS_DIR` override exists so tests (and non-default setups)\n * can point the resolver at a fixture tree without touching `$HOME`.\n */\nexport function claudeSkillRoots(): string[] {\n const roots: string[] = [];\n const override = process.env.SKAILE_CLAUDE_SKILLS_DIR;\n if (override) roots.push(override);\n roots.push(path.join(os.homedir(), \".claude\", \"skills\"));\n return roots;\n}\n\nexport interface ResolvedImportSource {\n /** Absolute path to the skill directory. */\n dir: string;\n /** Absolute path to the skill's SKILL.md. */\n skillFile: string;\n /** How the source was located — for human-facing messages. */\n via: \"path\" | \"claude-skills\";\n}\n\n/**\n * Resolve an `import` argument to a concrete skill directory. A value that\n * exists on disk (file or dir) is used verbatim; otherwise it is treated as a\n * bare skill name and looked up under {@link claudeSkillRoots}.\n *\n * Returns `null` when nothing matches so the caller can print a tailored error.\n */\nexport function resolveImportSource(nameOrPath: string): ResolvedImportSource | null {\n // Explicit path (relative or absolute) wins.\n const asPath = path.resolve(nameOrPath);\n if (fs.existsSync(asPath)) {\n const dir = fs.statSync(asPath).isDirectory() ? asPath : path.dirname(asPath);\n const skillFile = path.join(dir, \"SKILL.md\");\n if (fs.existsSync(skillFile)) return { dir, skillFile, via: \"path\" };\n }\n // Bare name → coding-agent skill roots.\n if (!nameOrPath.includes(path.sep) && !nameOrPath.startsWith(\".\")) {\n for (const root of claudeSkillRoots()) {\n const dir = path.join(root, nameOrPath);\n const skillFile = path.join(dir, \"SKILL.md\");\n if (fs.existsSync(skillFile)) return { dir, skillFile, via: \"claude-skills\" };\n }\n }\n return null;\n}\n\nexport interface NormalizeOptions {\n /** Fallback name when frontmatter has none (usually the source dir name). */\n fallbackName?: string;\n /** Version to stamp when the skill ships none. */\n version?: string;\n /** Stage to stamp when the skill ships none. */\n stage?: string;\n}\n\nexport interface NormalizeResult {\n /** Rewritten SKILL.md content (frontmatter + body). */\n content: string;\n /** Canonical asset name (slugified if the source was non-compliant). */\n name: string;\n /** The name as it appeared in the source, when it differed from `name`. */\n originalName?: string;\n /** True when `content` differs from the input (metadata added, name slugified, …). */\n changed: boolean;\n /** Human-facing notes about what was normalized. */\n notes: string[];\n}\n\n/**\n * Bring a coding-agent `SKILL.md` into the skaile schema without touching the\n * body: ensure a canonical lowercase-kebab `name`, and a `metadata:` block\n * carrying at least `version`, `stage`, and `tags`. Idempotent — a SKILL.md\n * that already conforms comes back unchanged (`changed: false`).\n *\n * A Claude Code skill only requires `name` + `description`; skaile additionally\n * expects the `metadata:` block, so this is the transform `asset migrate`'s raw\n * byte-copy skips.\n */\nexport function normalizeSkillContent(raw: string, opts: NormalizeOptions = {}): NormalizeResult {\n const notes: string[] = [];\n const { data, body } = parseFrontmatter(raw);\n\n // ── name ─────────────────────────────────────────────────────────────────\n const rawName = typeof data.name === \"string\" && data.name.trim() ? data.name.trim() : undefined;\n const sourceName = rawName ?? opts.fallbackName ?? \"\";\n let name = sourceName;\n let originalName: string | undefined;\n if (!sourceName) {\n throw new Error(\"skill has no `name` in frontmatter and no fallback was provided\");\n }\n if (!isValidAssetName(sourceName)) {\n name = slugifyAssetName(sourceName);\n originalName = sourceName;\n notes.push(`renamed \"${sourceName}\" → \"${name}\" (canonical kebab-case)`);\n }\n\n // ── metadata block ─────────────────────────────────────────────────────────\n const existingMeta =\n data.metadata && typeof data.metadata === \"object\" && !Array.isArray(data.metadata)\n ? { ...(data.metadata as Record<string, unknown>) }\n : {};\n\n if (existingMeta.version == null) {\n existingMeta.version = opts.version ?? DEFAULT_IMPORT_VERSION;\n notes.push(`stamped metadata.version: ${existingMeta.version}`);\n }\n if (existingMeta.stage == null) {\n existingMeta.stage = opts.stage ?? DEFAULT_IMPORT_STAGE;\n notes.push(`stamped metadata.stage: ${existingMeta.stage}`);\n }\n if (existingMeta.tags == null) {\n // Promote top-level `keywords` (the agentskills.io convention) into tags.\n const keywords = Array.isArray(data.keywords) ? (data.keywords as unknown[]) : [];\n existingMeta.tags = keywords.filter((k): k is string => typeof k === \"string\");\n if ((existingMeta.tags as string[]).length > 0) {\n notes.push(\"promoted top-level keywords → metadata.tags\");\n }\n }\n\n // ── re-serialize, key order: name, description, metadata, then the rest ────\n const ordered: Record<string, unknown> = { name };\n if (data.description != null) ordered.description = data.description;\n ordered.metadata = existingMeta;\n for (const [k, v] of Object.entries(data)) {\n if (k === \"name\" || k === \"description\" || k === \"metadata\" || k === \"keywords\") continue;\n ordered[k] = v;\n }\n\n const fm = stringifyYaml(ordered).trimEnd();\n const content = `---\\n${fm}\\n---\\n\\n${body}\\n`;\n // `changed` tracks semantic mutation, not formatting — every real change adds\n // a note, so a conformant skill stays `false` despite YAML re-quoting.\n const changed = notes.length > 0;\n return { content, name, originalName, changed, notes };\n}\n\nexport interface EnsureDomainResult {\n /** Absolute path to the domain directory. */\n dir: string;\n /** Publisher slug derived for this domain (the dir name, kebab-cased). */\n publisher: string;\n /** True when this call created the directory / DOMAIN.md. */\n created: boolean;\n}\n\nconst DOMAIN_TEMPLATE = (name: string, publisher: string, description: string) => {\n // stringifyYaml quotes/escapes values that would otherwise break the scalar.\n const fm = stringifyYaml({ name, publisher, description }).trimEnd();\n return `---\\n${fm}\\n---\\n\\n# ${name}\\n\\n${description}\\n`;\n};\n\n/**\n * Scaffold a domain directory under a library: `<lib>/<domain>/DOMAIN.md`. A\n * domain is the first-level dir of an asset repo and defines the publisher\n * namespace, so assets placed beneath it publish as `@<publisher>/<name>`.\n * No-op (returns `created: false`) when the DOMAIN.md already exists.\n */\nexport function ensureDomain(\n libraryPath: string,\n domain: string,\n opts: { description?: string; publisher?: string } = {},\n): EnsureDomainResult {\n const dir = path.join(libraryPath, domain);\n const domainFile = path.join(dir, \"DOMAIN.md\");\n const publisher = opts.publisher ?? slugifyAssetName(domain);\n if (fs.existsSync(domainFile)) {\n return { dir, publisher, created: false };\n }\n fs.mkdirSync(dir, { recursive: true });\n const description = opts.description ?? `The ${domain} domain.`;\n fs.writeFileSync(domainFile, DOMAIN_TEMPLATE(domain, publisher, description), \"utf8\");\n return { dir, publisher, created: true };\n}\n\n/** List the domains in a library — first-level dirs that carry a DOMAIN.md. */\nexport function listDomains(libraryPath: string): string[] {\n if (!fs.existsSync(libraryPath)) return [];\n return fs\n .readdirSync(libraryPath, { withFileTypes: true })\n .filter((e) => e.isDirectory() && fs.existsSync(path.join(libraryPath, e.name, \"DOMAIN.md\")))\n .map((e) => e.name)\n .sort();\n}\n\nexport interface UpsertAssetInput {\n kind: string;\n name: string;\n /** Repo-relative path to the asset directory (the AssetEntry `root`). */\n root: string;\n version?: string;\n publisher?: string;\n description?: string;\n keywords?: string[];\n}\n\nexport interface UpsertAssetResult {\n manifestPath: string;\n /** True when a new entry was appended, false when an existing one was updated. */\n added: boolean;\n}\n\n/**\n * Auto-wire an asset into a library's `skaile.manifest.yaml` (creating the\n * manifest when absent). Matches an existing entry by `(kind, name)` and\n * updates it in place; otherwise appends. This is the manifest half of import\n * that a plain byte-copy (`asset migrate`) leaves stale.\n */\nexport function upsertManifestAsset(\n libraryPath: string,\n input: UpsertAssetInput,\n): UpsertAssetResult {\n const manifest: SkPublishManifest = loadSkPublishManifest(libraryPath) ?? { assets: [] };\n const assets: AssetEntry[] = Array.isArray(manifest.assets) ? [...manifest.assets] : [];\n\n const entry: AssetEntry = { kind: input.kind, name: input.name, root: input.root };\n if (input.version) entry.version = input.version;\n if (input.publisher) entry.publisher = input.publisher;\n if (input.description) entry.description = input.description;\n if (input.keywords && input.keywords.length > 0) entry.keywords = input.keywords;\n\n const idx = assets.findIndex((a) => a.kind === input.kind && a.name === input.name);\n const added = idx < 0;\n if (added) {\n assets.push(entry);\n } else {\n assets[idx] = { ...assets[idx], ...entry };\n }\n\n const manifestPath = saveSkPublishManifest(libraryPath, { ...manifest, assets });\n return { manifestPath, added };\n}\n","/**\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 synonym for `skaile list` (declared deps + state)\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 {\n checkAgentSkillConformance,\n coerceVersion,\n isValidAssetName,\n matchPin,\n parseAssetRef,\n parseFrontmatter,\n} from \"@skaile/workspaces/core\";\nimport type { AssetDefinition, IAssetIndex } from \"@skaile/workspaces/library\";\nimport { resolveLibraryDir } from \"@skaile/workspaces/library\";\nimport { Command } from \"commander\";\nimport { rcompare } from \"semver\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport { openLibraryManager } from \"../open-library.ts\";\nimport { makeListCommand } from \"./catalog.ts\";\nimport {\n ensureDomain,\n normalizeSkillContent,\n resolveImportSource,\n upsertManifestAsset,\n} from \"./skailify-lib.ts\";\n\n/**\n * Resolve an asset definition from a wire ref, tolerating the `kind:@pub/name`\n * shape (with or without a `#version` pin — SemVer range / exact / SHA) — not\n * just the fully-canonical stored id (`@pub/name@version`). Exact-id match wins;\n * otherwise the ref is parsed and matched by kind + publisher + name, filtered\n * to `opts.fromLibraryId` when given, honouring the pin, and defaulting to the\n * highest version. Uses the same `matchPin` the source resolver does.\n */\nasync function resolveDefByRef(\n library: IAssetIndex,\n ref: string,\n opts?: { fromLibraryId?: string },\n): Promise<AssetDefinition | null> {\n const inScope = (d: AssetDefinition): boolean =>\n !opts?.fromLibraryId || d.libraryId === opts.fromLibraryId;\n const direct = await library.getAssetDef(ref);\n if (direct && inScope(direct)) return direct;\n let parsed: ReturnType<typeof parseAssetRef>;\n try {\n parsed = parseAssetRef(ref);\n } catch {\n return null;\n }\n const wantPublisher = parsed.publisher?.replace(/^@/, \"\");\n const defs = await library.listAssetDefs({ kind: parsed.kind as AssetDefinition[\"kind\"] });\n const matches = defs.filter(\n (d) =>\n d.name === parsed.name &&\n inScope(d) &&\n (wantPublisher === undefined || d.publisher.replace(/^@/, \"\") === wantPublisher) &&\n matchPin(parsed.pin, d.version),\n );\n if (matches.length === 0) return null;\n matches.sort((a, b) => rcompare(coerceVersion(a.version), coerceVersion(b.version)));\n return matches[0];\n}\n\nexport function makeAssetCommand(): Command {\n const cmd = new Command(\"asset\").description(\"Author and install AI assets\");\n\n // ── asset import ───────────────────────────────────────────────────────────\n // High-level \"skailify\" path: `asset migrate` wrapped with the frontmatter\n // normalize + domain scaffold + manifest-wire steps the raw byte-copy skips.\n cmd\n .command(\"import <name-or-path>\")\n .description(\"Import + skailify an existing coding-agent skill into a library\")\n .option(\"--to <library>\", \"Target library (default: auto / personal)\")\n .option(\"--domain <name>\", \"Place under this domain's skills/ (created if missing)\")\n .option(\"--version <semver>\", \"Version to stamp when the skill ships none\")\n .option(\"--stage <stage>\", \"Lifecycle stage to stamp (default: alpha)\")\n .option(\"--no-normalize\", \"Copy verbatim — skip frontmatter normalization\")\n .option(\"--commit\", \"Auto-commit in git-backed libraries\", false)\n .action(\n async (\n nameOrPath: string,\n opts: {\n to?: string;\n domain?: string;\n version?: string;\n stage?: string;\n normalize: boolean;\n commit: boolean;\n },\n ) => {\n const src = resolveImportSource(nameOrPath);\n if (!src) {\n logErr(\n `No skill found for \"${nameOrPath}\". Pass a path to a SKILL.md dir, ` +\n \"or a bare name present under ~/.claude/skills/.\",\n );\n process.exit(1);\n }\n logInfo(`Source: ${S.dim(src.dir)} (${src.via})`);\n\n const { manager, close } = await openLibraryManager();\n try {\n // Resolve target library (mirrors `asset migrate`).\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 target = def ?? (await manager.ensurePersonalLibrary(resolveLibraryDir())).library;\n }\n if (target.ownership === \"reader\") {\n logErr(`Library \"${target.name}\" is read-only (ownership=reader). Choose --to.`);\n process.exit(1);\n }\n\n // Normalize the SKILL.md (unless --no-normalize).\n const rawSkill = fs.readFileSync(src.skillFile, \"utf8\");\n const norm = opts.normalize\n ? normalizeSkillContent(rawSkill, {\n fallbackName: path.basename(src.dir),\n version: opts.version,\n stage: opts.stage,\n })\n : { content: rawSkill, name: path.basename(src.dir), changed: false, notes: [] };\n if (!opts.normalize && !isValidAssetName(norm.name)) {\n logWarn(\n `Name \"${norm.name}\" is not canonical (kebab-case); ` +\n \"`skaile validate` will reject this manifest entry. Drop --no-normalize to slugify it.\",\n );\n }\n\n // Resolve the destination (scaffolding the domain on demand).\n let destParent = target.path;\n let publisher: string | undefined;\n if (opts.domain) {\n const dom = ensureDomain(target.path, opts.domain);\n if (dom.created) logOk(`Scaffolded domain ${S.cmd(opts.domain)} → ${dom.dir}`);\n destParent = path.join(dom.dir, \"skills\");\n publisher = dom.publisher;\n }\n fs.mkdirSync(destParent, { recursive: true });\n const destDir = path.join(destParent, norm.name);\n if (fs.existsSync(destDir)) {\n logErr(`Destination already exists: ${destDir}`);\n process.exit(1);\n }\n\n // Copy the asset, then overwrite SKILL.md with the normalized content.\n fs.cpSync(src.dir, destDir, { recursive: true });\n fs.writeFileSync(path.join(destDir, \"SKILL.md\"), norm.content, \"utf8\");\n for (const note of norm.notes) logInfo(` • ${note}`);\n\n // Auto-wire the manifest entry. Re-read the description from the\n // written frontmatter rather than re-parsing via regex.\n const fm = parseFrontmatter(norm.content).data;\n const descRaw = fm.description;\n const description = typeof descRaw === \"string\" ? descRaw.trim() : undefined;\n\n // Advisory: flag any agentskills.io standard divergences (dest dir is\n // norm.name, so the name==dir rule passes by construction).\n for (const f of checkAgentSkillConformance(fm, { dirName: norm.name })) {\n logWarn(`conformance: ${f.field} — ${f.message}`);\n }\n const root = path.relative(target.path, destDir);\n const up = upsertManifestAsset(target.path, {\n kind: \"skill\",\n name: norm.name,\n root,\n version: opts.version,\n publisher,\n description,\n });\n logOk(`${up.added ? \"Added\" : \"Updated\"} manifest entry skill:${norm.name}`);\n\n if (target.backend === \"git\" && opts.commit) {\n const { spawnSync } = await import(\"node:child_process\");\n spawnSync(\"git\", [\"add\", \"--\", destDir], { cwd: target.path, stdio: \"inherit\" });\n const r = spawnSync(\"git\", [\"commit\", \"-m\", `skaile: import ${norm.name}`], {\n cwd: target.path,\n stdio: \"inherit\",\n });\n if (r.status !== 0) {\n logWarn(\"Nothing committed (working tree clean or commit aborted).\");\n }\n }\n\n logOk(`Imported ${S.cmd(norm.name)} → ${target.name}`);\n logInfo(`Verify: ${S.cmd(`skaile validate ${target.path}`)}`);\n } finally {\n close();\n }\n },\n );\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\", \"--\", destPath], { cwd: target.path, stdio: \"inherit\" });\n const r = spawnSync(\"git\", [\"commit\", \"-m\", `skaile: migrate ${basename}`], {\n cwd: target.path,\n stdio: \"inherit\",\n });\n if (r.status !== 0) {\n logWarn(\"Nothing committed (working tree clean or commit aborted).\");\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 // `--from` scopes resolution to that library (a selector, not a warning):\n // resolve its name → id and filter candidates before the version pick.\n let fromLibraryId: string | undefined;\n if (opts.from) {\n const match = (await manager.listLibraries()).find((l) => l.name === opts.from);\n if (!match) {\n logErr(`Unknown library \"${opts.from}\". Run \\`skaile library list\\`.`);\n process.exit(1);\n }\n fromLibraryId = match.id;\n }\n const def = await resolveDefByRef(library, ref, { fromLibraryId });\n if (!def) {\n logErr(`No asset found for ref \"${ref}\". Try \\`skaile search\\`.`);\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 // 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 // Synonym for the top-level `skaile list`: declared deps from skaile.yaml +\n // reconciliation state. The old library-index browse view moved to `skaile search`.\n cmd.addCommand(makeListCommand());\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 resolveDefByRef(library, 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 * `skaile cache` — inspect and reclaim the re-derivable cache.\n *\n * Scopes: project `.skaile/cache/` (default) and the global cache root\n * (`--global`). NEVER touches authored content (`~/.skaile/sidecars`,\n * `libraries/`) or state (`index.db`, sessions, logs, lock, patches).\n */\nimport { existsSync, lstatSync, readdirSync, rmSync, statSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { globalCacheRoot } from \"@skaile/workspaces/core\";\nimport { Command } from \"commander\";\nimport { logInfo, logOk, S } from \"../helpers.ts\";\n\ninterface CacheScope {\n projectDir: string;\n global?: boolean;\n}\n\n/** All cache directories in scope, in deletion order. Pure — no I/O side effects. */\nexport function collectCacheTargets(scope: CacheScope): string[] {\n const out: string[] = [];\n out.push(path.join(scope.projectDir, \".skaile\", \"cache\"));\n // Legacy project dirs (pre-consolidation) — swept so upgrades reclaim disk.\n out.push(path.join(scope.projectDir, \".skaile\", \"store-cache\"));\n out.push(path.join(scope.projectDir, \".skaile\", \"repos\"));\n if (scope.global) {\n out.push(globalCacheRoot()); // ~/.skaile/cache (sources + catalog)\n const home = process.env.SKAILE_HOME ?? path.join(homedir(), \".skaile\");\n out.push(path.join(home, \"repos\")); // legacy clone root\n out.push(path.join(home, \"catalog-cache\")); // legacy catalog cache\n }\n return out;\n}\n\n/**\n * Recursive byte size of a path (0 if absent). Uses `lstat` and does NOT follow\n * symlinks — project `.skaile/cache/sources/<name>` entries are symlinks into the\n * global cache, so following them would double-count (and a symlink cycle would\n * loop). Symlinks contribute 0; the global cache is sized directly.\n */\nexport function dirSize(target: string): number {\n if (!existsSync(target)) return 0;\n const st = lstatSync(target);\n if (st.isSymbolicLink()) return 0;\n if (!st.isDirectory()) return st.size;\n return dirSizeOfDir(target);\n}\n\n/** Sum a known directory's contents — one `readdir` per level (withFileTypes),\n * `stat` only for regular files, symlinks skipped (never followed). */\nfunction dirSizeOfDir(dir: string): number {\n let total = 0;\n for (const ent of readdirSync(dir, { withFileTypes: true })) {\n const child = path.join(dir, ent.name);\n if (ent.isSymbolicLink()) continue;\n if (ent.isDirectory()) total += dirSizeOfDir(child);\n else if (ent.isFile()) total += statSync(child).size;\n }\n return total;\n}\n\n/** Delete the targets that exist. Returns the ones actually removed (empty in dry-run). */\nexport function removeCacheTargets(targets: string[], opts: { dryRun: boolean }): string[] {\n const present = targets.filter((t) => existsSync(t));\n if (opts.dryRun) return [];\n for (const t of present) rmSync(t, { recursive: true, force: true });\n return present;\n}\n\nfunction fmtBytes(n: number): string {\n const u = [\"B\", \"KB\", \"MB\", \"GB\"];\n let i = 0;\n let v = n;\n while (v >= 1024 && i < u.length - 1) {\n v /= 1024;\n i++;\n }\n return `${v.toFixed(i === 0 ? 0 : 1)} ${u[i]}`;\n}\n\n/**\n * Build the `skaile cache` command group: `clean` (reclaims project cache, or\n * project+global with `--global`; confirms unless `--yes`; `--dry-run` previews),\n * `dir` (prints resolved cache roots), and `size` (per-dir disk usage). Never\n * targets authored content or state — see {@link collectCacheTargets}.\n */\nexport function makeCacheCommand(): Command {\n const cmd = new Command(\"cache\").description(\"Inspect and reclaim the re-derivable cache\");\n\n cmd\n .command(\"clean\")\n .description(\"Remove the project cache (.skaile/cache); --global also clears ~/.skaile/cache\")\n .option(\"--global\", \"Also clear the global cache (sources + catalog) and legacy dirs\")\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 .action(async (opts) => {\n const targets = collectCacheTargets({\n projectDir: path.resolve(opts.projectDir),\n global: opts.global,\n }).filter((t) => existsSync(t));\n\n if (targets.length === 0) {\n logInfo(\"Cache is already empty.\");\n return;\n }\n console.log();\n console.log(` ${S.heading(\"Will remove:\")}`);\n for (const t of targets)\n console.log(` ${S.dim(t)} ${S.dim(`(${fmtBytes(dirSize(t))})`)}`);\n\n if (opts.dryRun) {\n console.log();\n logInfo(\"Dry run — no changes made.\");\n return;\n }\n if (!opts.yes) {\n const ok = await p.confirm({\n message: opts.global ? \"Clear project AND global cache?\" : \"Clear project cache?\",\n });\n if (p.isCancel(ok) || !ok) {\n logInfo(\"Cancelled.\");\n return;\n }\n }\n const removed = removeCacheTargets(targets, { dryRun: false });\n console.log();\n for (const r of removed) logOk(`Removed ${r}`);\n });\n\n cmd\n .command(\"dir\")\n .description(\"Print the resolved cache roots\")\n .option(\"--global\", \"Include the global cache root\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((opts) => {\n console.log(path.join(path.resolve(opts.projectDir), \".skaile\", \"cache\"));\n if (opts.global) console.log(globalCacheRoot());\n });\n\n cmd\n .command(\"size\")\n .description(\"Show cache disk usage per directory\")\n .option(\"--global\", \"Include the global cache\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action((opts) => {\n const targets = collectCacheTargets({\n projectDir: path.resolve(opts.projectDir),\n global: opts.global,\n });\n console.log();\n for (const t of targets) {\n if (!existsSync(t)) continue;\n console.log(` ${S.dim(fmtBytes(dirSize(t)).padStart(9))} ${t}`);\n }\n console.log();\n });\n\n return cmd;\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 await runLocalCatalogTest(opts.projectDir);\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 await runRemoteCatalogProbe(baseUrl, trpcGetUrl(baseUrl, \"catalog.listKinds\", undefined));\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\n/**\n * Local-mode handler for `skaile catalog test`: list the registered local\n * catalog source instead of probing the network.\n */\nasync function runLocalCatalogTest(projectDir: string | undefined): Promise<void> {\n const { resolveCatalogSource } = await import(\"../open-library.ts\");\n let resolved: Awaited<ReturnType<typeof resolveCatalogSource>> | undefined;\n try {\n resolved = await resolveCatalogSource({ 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}\n\n/** True when `text` parses as a tRPC GET envelope (`{result: {…}}`). */\nfunction isTrpcEnvelope(text: string): boolean {\n try {\n const body = JSON.parse(text);\n // tRPC GET shape: `{result: {data: {json: <payload>}}}`\n return (\n typeof body === \"object\" &&\n body !== null &&\n \"result\" in body &&\n typeof (body as { result: unknown }).result === \"object\"\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Remote-mode handler for `skaile catalog test`: probe a real catalog tRPC\n * route and report status / set the exit code.\n *\n * We hit `catalog.listKinds` rather than `/health` because it exercises the\n * actual surface the CLI depends on. A working backend with the catalog router\n * unmounted (or behind a path prefix that doesn't match `~/.skaile/config.yaml`)\n * is exactly the failure we want to surface.\n */\nasync function runRemoteCatalogProbe(baseUrl: string, probeUrl: string): Promise<void> {\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 if (!isTrpcEnvelope(text)) {\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(`Could not reach ${probeUrl}: ${err instanceof Error ? err.message : String(err)}`);\n }\n logInfo(\"Verify the URL in ~/.skaile/config.yaml and that the catalog backend is deployed.\");\n process.exitCode = 1;\n } finally {\n clearTimeout(timeout);\n }\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","/**\n * flow-discovery.ts — multi-root flow discovery for the CLI.\n *\n * Walks every {@link aiResourceRoots} root (bundled factory-assets when\n * installed, the monorepo `ai-assets/` in dev, plus `~/.skaile/libraries/`)\n * through the layout-tolerant `loadAllFlows`, so built-in flows are discovered\n * after `npm i` exactly as they are in the monorepo. De-duplicated by flow id\n * (first root wins).\n */\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { assetSearchDirs } from \"@skaile/workspaces/core\";\nimport { loadAllFlows } from \"@skaile/workspaces/factory-assets/connectors/flow/engine\";\nimport { aiResourceRoots } from \"./paths.ts\";\n\ntype FlowDefinition = ReturnType<typeof loadAllFlows>[number];\n\n/** All flows across every content root, de-duplicated by id. */\nexport function discoverFlows(): FlowDefinition[] {\n const byId = new Map<string, FlowDefinition>();\n for (const root of aiResourceRoots()) {\n for (const flow of loadAllFlows(root)) {\n if (!byId.has(flow.id)) byId.set(flow.id, flow);\n }\n }\n return [...byId.values()];\n}\n\n/**\n * Locate the on-disk flow file for `flowId` across every content root, trying\n * both the flat (`<root>/flows/`) and domain-nested (`<root>/<domain>/flows/`)\n * layouts and the `.flow.yaml` / `.flow.json` / legacy `.json` extensions.\n *\n * `priorityRoots` are searched before the standard {@link aiResourceRoots} so a\n * project-local `ai-assets/` tree can override a built-in flow.\n */\nexport function findFlowFile(flowId: string, priorityRoots: string[] = []): string | undefined {\n for (const root of [...priorityRoots, ...aiResourceRoots()]) {\n for (const { dir } of assetSearchDirs(root, \"flows\")) {\n for (const ext of [\".flow.yaml\", \".flow.json\", \".json\"]) {\n const candidate = path.join(dir, `${flowId}${ext}`);\n if (fs.existsSync(candidate)) return candidate;\n }\n }\n }\n return undefined;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { assetSearchDirs } from \"@skaile/workspaces/core\";\nimport { aiResourceRoots } from \"./paths.ts\";\n\n/**\n * A single skill discovered under a content root.\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 across every {@link aiResourceRoots} root,\n * optionally filtered to a single domain. De-duplicated by skill name (first\n * root wins), so the bundled factory skills don't double up with a user library.\n *\n * Each root is walked in both layouts: **flat** (`<root>/skills/…`, e.g. the\n * bundled `factory-assets/` tree) and **domain-nested** (`<root>/<domain>/skills/…`).\n *\n * @param domain - Optional domain name to restrict the nested-layout search.\n * @returns Array of {@link SkillEntry} objects.\n * @docLink cli/dev-guide#skill-walker\n */\nexport function findSkills(domain?: string): SkillEntry[] {\n const found: SkillEntry[] = [];\n for (const root of aiResourceRoots()) {\n for (const { dir, domain: dirDomain } of assetSearchDirs(root, \"skills\")) {\n if (domain && dirDomain !== domain) continue;\n if (fs.existsSync(dir)) walkSkills(dir, dirDomain, found);\n }\n }\n const seen = new Set<string>();\n const deduped: SkillEntry[] = [];\n for (const s of found) {\n if (seen.has(s.name)) continue;\n seen.add(s.name);\n deduped.push(s);\n }\n return deduped;\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 { detectDomains } from \"@skaile/workspaces/core\";\nimport { discoverFlows } from \"../flow-discovery.ts\";\nimport { aiResourceRoots } 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 // `detectDomains` returns only real domain folders (those containing\n // skills/flows/agents subdirs), so flat asset-kind dirs like `skills/` or\n // `bundles/` are never offered as bogus domain completions.\n const domains = new Set<string>();\n for (const root of aiResourceRoots()) {\n for (const d of detectDomains(root)) domains.add(d.id);\n }\n return [...domains];\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 discoverFlows().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/** Gather workspace config defaults for display (reads agent_config.default). */\nfunction collectWorkspaceDefaults(projectDir: string): Record<string, string> {\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 return wsDefaults;\n}\n\n/** Print the personal effective-config section (driver/provider/model). */\nfunction printEffectiveSection(config: Awaited<ReturnType<typeof resolveSettings>>): void {\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\n/** Print the workspace-defaults section, if any. */\nfunction printWorkspaceDefaultsSection(wsDefaults: Record<string, string>): void {\n if (Object.keys(wsDefaults).length === 0) return;\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/** Print the masked API-keys section, if any. */\nfunction printApiKeysSection(config: Awaited<ReturnType<typeof resolveSettings>>): void {\n if (!config.apiKeys || Object.keys(config.apiKeys).length === 0) return;\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/** Print the resolved-paths section for the effective driver. */\nfunction printResolvedPathsSection(config: Awaited<ReturnType<typeof resolveSettings>>): void {\n const fw = config.driver ?? \"omp\";\n const paths = DRIVER_DEFAULTS[fw] ?? DRIVER_DEFAULTS.omp;\n if (!paths) return;\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\n/**\n * Render the effective config (personal + workspace layers, resolved paths,\n * masked API keys). Shared by the `config show` subcommand and the bare\n * `config` action so the latter doesn't re-drive the Commander parser.\n */\nasync function showConfig(opts: { projectDir?: string }): Promise<void> {\n const projectDir = opts.projectDir ? path.resolve(opts.projectDir) : process.cwd();\n const config = await resolveSettings(projectDir);\n const wsDefaults = collectWorkspaceDefaults(projectDir);\n\n printEffectiveSection(config);\n printWorkspaceDefaultsSection(wsDefaults);\n printApiKeysSection(config);\n printResolvedPathsSection(config);\n console.log();\n}\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((opts) => showConfig(opts));\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 // Bare `skaile config` shows the effective config directly — no re-parse.\n cmd.action(() => showConfig({}));\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 type { CatalogEntry } from \"@skaile/workspaces/core\";\nimport { Command } from \"commander\";\nimport { logErr } from \"../helpers.ts\";\n\n/**\n * Commander option coercer for a positive-integer flag. Wraps `parseInt` with\n * an explicit radix (Commander would otherwise call it as `parseInt(value,\n * previous)`, passing the previous value as the radix) and rejects non-positive\n * input. Mirrors `parsePositiveInt` in session-logs.\n */\nfunction parsePositiveIntOption(value: string): number {\n const n = Number.parseInt(value, 10);\n if (!Number.isFinite(n) || n <= 0) {\n throw new Error(`--limit must be a positive integer (got ${value})`);\n }\n return n;\n}\n\n// ── Shared connector setup ───────────────────────────────────────────────────\n\n/**\n * Scan every factory-assets root for connector catalog entries, de-duplicated by\n * name. Roots are override-first (the `SKAILE_FACTORY_ASSETS_DIR` layer ahead of\n * the bundled tree), so an env-supplied manifest shadows the bundled one.\n */\nexport function scanFactoryConnectors(\n scanDirectory: (dir: string, repoName: string) => CatalogEntry[],\n roots: string[],\n): CatalogEntry[] {\n const byName = new Map<string, CatalogEntry>();\n for (const dir of roots) {\n for (const e of scanDirectory(dir, \"factory-assets\")) {\n if (e.kind === \"connector\" && !byName.has(e.name)) byName.set(e.name, e);\n }\n }\n return [...byName.values()];\n}\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, factoryAssetRoots } = await import(\"@skaile/workspaces/core\");\n const entries = scanFactoryConnectors(scanDirectory, factoryAssetRoots());\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, factoryAssetRoots, 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 entries = scanFactoryConnectors(scanDirectory, factoryAssetRoots());\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\", parsePositiveIntOption)\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","/**\n * `skaile deploy` — stand a workspace up on a deploy target, then manage its\n * lifecycle through the registry-owned detach handle.\n *\n * skaile deploy up [--project-dir <p>] [--target <id>] [--detach]\n * skaile deploy down [--project-dir <p>]\n * skaile deploy status [--project-dir <p>]\n * skaile deploy logs [--project-dir <p>] [--follow]\n *\n * `up` resolves a target via the explicit precedence chain (CLI `--target`\n * override > `skaile.yaml` `deploy:` > built-in `local`), loads any `plugins:`\n * cloud providers, creates the handle, and either holds it (foreground, stops\n * on SIGINT) or persists it (`--detach`). `down` / `status` / `logs` re-attach\n * via `target.restore(payload, ctx)`.\n */\n\nimport path from \"node:path\";\nimport type { DeployContext, DeployHandle, DeployTarget } from \"@skaile/workspaces/plugin-registry\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\n\n/** Wrap an async action so a thrown error prints via logErr + sets a non-zero exit. */\nfunction action(fn: (...args: never[]) => Promise<void>) {\n return async (...args: unknown[]): Promise<void> => {\n try {\n await (fn as (...a: unknown[]) => Promise<void>)(...args);\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n };\n}\n\n/** Process env narrowed to defined string entries (DeployContext.env is `Record<string,string>`). */\nfunction envRecord(): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(process.env)) {\n if (typeof v === \"string\") out[k] = v;\n }\n return out;\n}\n\ninterface DeployCtxBundle {\n ctx: DeployContext;\n controller: AbortController;\n}\n\n/**\n * Build a `DeployContext` for a project. `workspaceId` is the config `name` or\n * the project dir's basename; `env` is the filtered process env; `log` is a\n * structured logger when available, falling back to a console shim; `signal`\n * comes from a fresh `AbortController`; `wsAuth` is read from\n * `SKAILE_WS_AUTH_TOKEN` when set.\n */\nasync function buildDeployContext(projectDir: string): Promise<DeployCtxBundle> {\n const { resolveSkWorkspaceConfig } = await import(\"@skaile/workspaces/core\");\n const config = resolveSkWorkspaceConfig(projectDir);\n const workspaceId = config.name ?? path.basename(projectDir);\n\n let log: DeployContext[\"log\"];\n try {\n const { createLogger } = await import(\"@skaile/workspaces/core/logging\");\n log = createLogger({ kind: \"gateway\", subkind: \"deploy\" });\n } catch {\n // No log store registered (standalone CLI) — fall back to a console shim.\n const shim = {\n debug: (m: string) => console.error(S.dim(` · ${m}`)),\n info: (m: string) => console.error(S.dim(` · ${m}`)),\n warn: (m: string) => logWarn(m),\n error: (m: string, e?: unknown) =>\n logErr(`${m}${e ? `: ${e instanceof Error ? e.message : String(e)}` : \"\"}`),\n child: () => shim,\n };\n log = shim as unknown as DeployContext[\"log\"];\n }\n\n const controller = new AbortController();\n const ctx: DeployContext = {\n workspaceId,\n env: envRecord(),\n log,\n signal: controller.signal,\n ...(process.env.SKAILE_WS_AUTH_TOKEN ? { wsAuth: process.env.SKAILE_WS_AUTH_TOKEN } : {}),\n };\n return { ctx, controller };\n}\n\n/** Ensure built-in deploy targets + any `plugins:` cloud providers are registered. */\nasync function ensureTargetsRegistered(projectDir: string): Promise<void> {\n const { registerBuiltinDeployTargets } = await import(\"@skaile/workspaces/deploy\");\n const { pluginRegistry } = await import(\"@skaile/workspaces/plugin-registry\");\n registerBuiltinDeployTargets(pluginRegistry);\n\n const { resolveSkWorkspaceConfig } = await import(\"@skaile/workspaces/core\");\n const config = resolveSkWorkspaceConfig(projectDir);\n if (config.plugins && config.plugins.length > 0) {\n const { ensurePluginsLoaded } = await import(\"../plugin-store/index.ts\");\n const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);\n for (const f of result.failed) logWarn(f.error);\n }\n}\n\nasync function runUp(opts: {\n projectDir: string;\n target?: string;\n detach?: boolean;\n}): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n await ensureTargetsRegistered(projectDir);\n\n const { resolveSkWorkspaceConfig } = await import(\"@skaile/workspaces/core\");\n const { resolveDeployTarget, pluginRegistry } = await import(\n \"@skaile/workspaces/plugin-registry\"\n );\n const config = resolveSkWorkspaceConfig(projectDir);\n\n // Only inherit the yaml `deploy.config` block when the --target override\n // names the same target as the yaml block; a sibling target's config would\n // otherwise be parsed through the wrong schema.\n const overrideConfig = opts.target === config.deploy?.target ? config.deploy?.config : undefined;\n const resolution = await resolveDeployTarget(\n { deploy: config.deploy },\n opts.target\n ? { target: opts.target, config: overrideConfig, reason: \"cli --target\" }\n : undefined,\n pluginRegistry,\n );\n\n const { ctx, controller } = await buildDeployContext(projectDir);\n ctx.log.debug(`deploy target resolved`, {\n target: resolution.target.id,\n source: resolution.provenance.source,\n reason: resolution.provenance.reason,\n });\n\n logInfo(`Deploying to ${S.cmd(resolution.target.id)} (${S.dim(resolution.provenance.source)})…`);\n const handle = await resolution.target.create(resolution.config, ctx);\n await handle.waitReady();\n\n logOk(`Ready at ${S.cmd(handle.wsUrl)}`);\n console.log(` ${S.dim(\"source\")} ${resolution.provenance.source}`);\n\n if (opts.detach) {\n const { writeHandle } = await import(\"@skaile/workspaces/deploy\");\n await writeHandle(projectDir, resolution.target.id, handle.payload);\n logInfo(`Detached — handle written to ${S.cmd(\".skaile/deploy/handle.json\")}`);\n return;\n }\n\n // Foreground: hold the handle and tear down on SIGINT.\n logInfo(\"Holding deploy in the foreground — press Ctrl-C to stop.\");\n await holdUntilSignal(handle, controller);\n}\n\n/** Block until SIGINT, then stop the handle and abort the context signal. */\nfunction holdUntilSignal(handle: DeployHandle, controller: AbortController): Promise<void> {\n return new Promise<void>((resolve) => {\n const onSig = () => {\n process.removeListener(\"SIGINT\", onSig);\n controller.abort();\n logInfo(\"Stopping…\");\n handle\n .stop()\n .then(() => logOk(\"Stopped.\"))\n .catch((e) => logErr(`stop failed: ${e instanceof Error ? e.message : String(e)}`))\n .finally(() => resolve());\n };\n process.on(\"SIGINT\", onSig);\n });\n}\n\n/**\n * Re-attach to a persisted handle: read the envelope, register targets, look up\n * the target by id, and `restore(payload, ctx)`. Returns null (after logging)\n * when no handle exists or the target is unknown.\n */\nasync function restoreFromHandle(\n projectDir: string,\n): Promise<{ target: DeployTarget; handle: DeployHandle; ctx: DeployContext } | null> {\n const { readHandle } = await import(\"@skaile/workspaces/deploy\");\n const stored = await readHandle(projectDir);\n if (!stored) {\n logInfo(\"No active deploy — nothing to do (no .skaile/deploy/handle.json).\");\n return null;\n }\n\n await ensureTargetsRegistered(projectDir);\n const { pluginRegistry } = await import(\"@skaile/workspaces/plugin-registry\");\n const target = pluginRegistry.get(\"deployTarget\", stored.targetId);\n if (!target) {\n logErr(`unknown deploy target \"${stored.targetId}\" — is its plugin installed?`);\n return null;\n }\n\n // Validate the persisted payload against the target's own schema before\n // restore() dereferences it — a corrupted/hand-edited handle.json yields a\n // clean error instead of an unguarded TypeError from inside restore().\n const parsed = target.payloadSchema.safeParse(stored.payload);\n if (!parsed.success) {\n logErr(\n `deploy handle for \"${stored.targetId}\" is malformed: ${parsed.error.message}. ` +\n `Remove ${S.cmd(\".skaile/deploy/handle.json\")} to reset.`,\n );\n return null;\n }\n\n const { ctx } = await buildDeployContext(projectDir);\n const handle = await target.restore(parsed.data, ctx);\n return { target, handle, ctx };\n}\n\nasync function runDown(opts: { projectDir: string }): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n const restored = await restoreFromHandle(projectDir);\n if (!restored) return;\n\n await restored.handle.stop();\n const { clearHandle } = await import(\"@skaile/workspaces/deploy\");\n await clearHandle(projectDir);\n logOk(`Stopped ${S.cmd(restored.target.id)} and cleared the handle.`);\n}\n\nasync function runStatus(opts: { projectDir: string }): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n const restored = await restoreFromHandle(projectDir);\n if (!restored) return;\n\n const health = await restored.handle.health();\n console.log();\n console.log(` ${S.label(\"target\")} ${S.cmd(restored.target.id)}`);\n console.log(` ${S.label(\"state\")} ${restored.handle.state}`);\n console.log(` ${S.label(\"wsUrl\")} ${S.cmd(restored.handle.wsUrl)}`);\n console.log(\n ` ${S.label(\"health\")} ${health.healthy ? S.ok(\"healthy\") : S.err(\"unhealthy\")}${health.detail ? ` ${S.dim(`(${health.detail})`)}` : \"\"}`,\n );\n console.log();\n}\n\nasync function runLogs(opts: { projectDir: string; follow?: boolean }): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n const restored = await restoreFromHandle(projectDir);\n if (!restored) return;\n\n if (!restored.handle.logs) {\n logInfo(`logs not supported by target ${S.cmd(restored.target.id)}`);\n return;\n }\n\n for await (const entry of restored.handle.logs({ follow: opts.follow })) {\n console.log(entry.line);\n }\n}\n\n/**\n * Creates the `skaile deploy` command group.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/deploy#make-deploy-command\n */\nexport function makeDeployCommand(): Command {\n const cmd = new Command(\"deploy\").description(\n \"Deploy a workspace to a target (up / down / status / logs)\",\n );\n\n cmd\n .command(\"up\")\n .description(\"Resolve a deploy target, stand the workspace up, and wait until ready\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--target <id>\", \"Override the deploy target (precedence: override > yaml > default)\")\n .option(\"--detach\", \"Persist the handle and return instead of holding in the foreground\")\n .action(action(runUp as never));\n\n cmd\n .command(\"down\")\n .description(\"Tear down the active deploy and clear its handle\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(action(runDown as never));\n\n cmd\n .command(\"status\")\n .description(\"Show the active deploy's state, ws URL, and health\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(action(runStatus as never));\n\n cmd\n .command(\"logs\")\n .description(\"Stream logs from the active deploy (if the target supports it)\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .option(\"--follow\", \"Keep streaming new log lines\")\n .action(action(runLogs as never));\n\n cmd.action(() => cmd.help());\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 { Command } from \"commander\";\nimport { discoverFlows } from \"../flow-discovery.ts\";\nimport { logErr, logInfo, S } from \"../helpers.ts\";\n\n/**\n * Create the `skaile flow` command group.\n *\n * Browses flows discovered across every content root via {@link discoverFlows}\n * (bundled factory-assets when installed, the monorepo tree in dev, plus user\n * libraries). 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 = discoverFlows();\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 = discoverFlows();\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","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/integration.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\n/** Run one backend's install/uninstall body, reporting failures as exit-code 1. */\nasync function runBackendStep(label: string, body: () => Promise<void>): Promise<number> {\n try {\n await body();\n return 0;\n } catch (e: unknown) {\n logErr(`${label}: ${e instanceof Error ? e.message : String(e)}`);\n return 1;\n }\n}\n\nasync function installClaudeCode(projectDir: string, opts: RunOptions): Promise<void> {\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}\n\nasync function installOmp(projectDir: string): Promise<void> {\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}\n\nasync function installCodex(projectDir: string): Promise<void> {\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}\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 exitCode |= await runBackendStep(\"claude-code install\", () =>\n installClaudeCode(projectDir, opts),\n );\n }\n if (targets.includes(\"omp\")) {\n exitCode |= await runBackendStep(\"omp install\", () => installOmp(projectDir));\n }\n if (targets.includes(\"codex\")) {\n exitCode |= await runBackendStep(\"codex install\", () => installCodex(projectDir));\n }\n\n if (exitCode === 0) logOk(\"Plugin installed.\");\n return exitCode;\n}\n\nasync function uninstallClaudeCode(projectDir: string): Promise<void> {\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}\n\nasync function uninstallOmp(projectDir: string): Promise<void> {\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}\n\nasync function uninstallCodex(projectDir: string): Promise<void> {\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}\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 exitCode |= await runBackendStep(\"claude-code uninstall\", () =>\n uninstallClaudeCode(projectDir),\n );\n }\n if (targets.includes(\"omp\")) {\n exitCode |= await runBackendStep(\"omp uninstall\", () => uninstallOmp(projectDir));\n }\n if (targets.includes(\"codex\")) {\n exitCode |= await runBackendStep(\"codex uninstall\", () => uninstallCodex(projectDir));\n }\n\n if (exitCode === 0) logOk(\"Plugin uninstalled.\");\n return exitCode;\n}\n\n/**\n * Reject explicit unsupported drivers with a usage error. Returns `2` when the\n * caller should bail with that exit code, or `null` to proceed.\n */\nfunction checkToggleSupported(\n targets: BackendName[],\n requestedAll: boolean,\n action: \"enable\" | \"disable\",\n): number | null {\n if (requestedAll) return null;\n const unsupported = targets.filter((t) => !TOGGLE_SUPPORTED.includes(t));\n if (unsupported.length === 0) return null;\n logErr(\n `${action} is only supported for claude-code; for ${unsupported.join(\", \")} use uninstall/install`,\n );\n return 2;\n}\n\n/** Toggle a single backend. Returns its exit-code contribution (0 or 1). */\nasync function toggleTarget(\n t: BackendName,\n projectDir: string,\n action: \"enable\" | \"disable\",\n): Promise<number> {\n if (!TOGGLE_SUPPORTED.includes(t)) {\n logInfo(`${t}: ${action} not supported; skipping`);\n return 0;\n }\n if (t !== \"claude-code\") return 0;\n return runBackendStep(`claude-code ${action}`, async () => {\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 });\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 const usageError = checkToggleSupported(targets, requestedAll, action);\n if (usageError !== null) return usageError;\n\n let exitCode = 0;\n for (const t of targets) {\n exitCode |= await toggleTarget(t, projectDir, action);\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 integration` command group (agent integration /\n * workspace-plugin adapter).\n *\n * Manages the skaile workspace integration 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 * Renamed from `skaile plugin` — that name now belongs to the registry-plugin\n * commands (`@skaile/workspaces/plugin-registry`). The subcommand behaviour\n * here is unchanged.\n *\n * @returns Configured {@link Command} ready for `program.addCommand()`.\n * @docLink cli/commands/integration#make-integration-command\n */\nexport function makeIntegrationCommand(): Command {\n const cmd = new Command(\"integration\").description(\n \"Manage skaile agent integration / workspace-plugin adapter (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 * library-index.ts — index a user library's on-disk assets into the shared\n * `asset_definitions` index so `add` / `asset install` / `search --local` can\n * resolve them, plus publisher resolution for a freshly-created asset.\n *\n * A `library create`d asset is bytes on disk only until it is indexed; the\n * index is what every resolution path reads. Indexing reuses the same\n * `LocalCatalogSource.sync()` engine `source add`/`sync` run — a library is\n * scanned + upserted keyed by `library_id = lib.id`.\n *\n * @docLink cli/commands/library\n */\n\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { parseFrontmatter, slugifyAssetName } from \"@skaile/workspaces/core\";\nimport type { Library, LocalIndex } from \"@skaile/workspaces/library\";\nimport { openLibrary } from \"../open-library.ts\";\nimport { createFullRegistry } from \"../open-registry.ts\";\n\n/** Discovery result surfaced by {@link indexLibrary}. */\nexport interface IndexLibraryResult {\n /** Assets discovered on disk under the library root. */\n assetsFound: number;\n /** Assets upserted into `asset_definitions`. */\n assetsUpdated: number;\n /** Fatal per-asset errors (never advisories). */\n errors: string[];\n}\n\n/**\n * Index a library's assets into the shared `asset_definitions` index.\n *\n * Runs `LocalCatalogSource.sync()` against the library's `path` keyed by\n * `library_id = lib.id`. Pass an already-open {@link LocalIndex} (e.g. the one\n * `openLibraryManager()` holds) to reuse the single connection — the caller then\n * owns closing it. With no `index` a fresh handle is opened and closed here.\n * Returns the sync counters so a caller can report `Indexed N asset(s)`.\n */\nexport async function indexLibrary(lib: Library, index?: LocalIndex): Promise<IndexLibraryResult> {\n const { LocalCatalogSource } = await import(\"@skaile/workspaces/library\");\n const own = index ?? (await openLibrary());\n try {\n const source = new LocalCatalogSource(own, lib.id, lib.path, createFullRegistry());\n const res = await source.sync();\n return {\n assetsFound: res.assetsFound,\n assetsUpdated: res.assetsUpdated,\n errors: res.errors,\n };\n } finally {\n if (!index) own.close();\n }\n}\n\n/**\n * Read a domain's declared publisher from `<lib>/<domain>/DOMAIN.md`.\n *\n * The DOMAIN.md frontmatter (written by `library domain create`) carries a\n * `publisher` field. Returns it when present, else `undefined` — the caller\n * falls through the resolution chain.\n */\nfunction domainPublisher(libraryPath: string, domain: string): string | undefined {\n const domainFile = path.join(libraryPath, domain, \"DOMAIN.md\");\n if (!fs.existsSync(domainFile)) return undefined;\n try {\n const { data } = parseFrontmatter(fs.readFileSync(domainFile, \"utf8\"));\n const pub = data.publisher;\n return typeof pub === \"string\" && pub.trim() ? pub.trim() : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Resolve the publisher for an asset created inside a library. Never throws.\n *\n * Fallback chain (first hit wins):\n * 1. `opts.publisher` (an explicit `--publisher`),\n * 2. the domain's DOMAIN.md publisher when the asset sits under a domain\n * (`domain` names a first-level dir carrying a DOMAIN.md),\n * 3. the author's verified store identity (`githubLogin`, else `username`)\n * when signed in — the publisher they can actually publish under,\n * 4. the kebab-cased library name (e.g. `My Lib` → `my-lib`) as a last resort.\n *\n * Identity beats the library name because the library name is almost never a\n * namespace the author can publish; stamping it led to publishes that only\n * failed at the store. Passed in (not read here) to keep this pure + testable.\n *\n * @param lib - The target library.\n * @param opts - Optional explicit `--publisher`.\n * @param domain - Optional first-level directory the asset was placed under.\n * @param storeIdentity - The author's decoded store identity, or null when signed out.\n */\nexport function resolveLibraryPublisher(\n lib: Pick<Library, \"name\" | \"path\">,\n opts: { publisher?: string },\n domain?: string,\n storeIdentity?: { username?: string; githubLogin?: string } | null,\n): string {\n if (opts.publisher?.trim()) return opts.publisher.trim();\n if (domain) {\n const fromDomain = domainPublisher(lib.path, domain);\n if (fromDomain) return fromDomain;\n }\n const identity = (storeIdentity?.githubLogin ?? storeIdentity?.username)?.trim();\n if (identity) return identity;\n // slugifyAssetName throws on a name with no [a-z0-9] — keep the chain total.\n try {\n return slugifyAssetName(lib.name);\n } catch {\n return \"library\";\n }\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 (in `library-publish.ts`)\n * push + register the library repo and publish its manifest to the store.\n *\n * @docLink cli/commands/library\n */\n\nimport * as fs from \"node:fs\";\nimport { existsSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport {\n ASSET_KINDS,\n loadSkPublishManifest,\n parseFrontmatter,\n saveSkPublishManifest,\n scanDirectory,\n slugifyAssetName,\n} from \"@skaile/workspaces/core\";\nimport { resolveLibraryDir } from \"@skaile/workspaces/library\";\nimport { Command, Option } from \"commander\";\nimport pc from \"picocolors\";\nimport { stringify as stringifyYaml } from \"yaml\";\nimport { formatRelativeTime, logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport { openLibrary, openLibraryManager } from \"../open-library.ts\";\nimport { createFullRegistry } from \"../open-registry.ts\";\nimport { getStoreIdentity } from \"../store-auth.ts\";\nimport { indexLibrary, resolveLibraryPublisher } from \"./library-index.ts\";\nimport { ensureDomain, listDomains, upsertManifestAsset } from \"./skailify-lib.ts\";\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(new Option(\"--kind <kind>\", \"Asset kind override\").choices([...ASSET_KINDS]))\n .option(\"--library <name>\", \"Target library (default: the default-marked one)\")\n .option(\"--dir <dir>\", \"Target directory inside the library (default: library root)\")\n .option(\"--publisher <name>\", \"Publisher for the new asset (default: the library's default)\")\n .action(\n async (\n kind: string,\n name: string,\n opts: { kind?: string; library?: string; dir?: string; publisher?: 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, library, 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 effectiveKind = opts.kind ?? kind;\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, effectiveKind, destDir);\n if (!res.ok) {\n logErr(res.path);\n process.exit(1);\n }\n logOk(`Created ${effectiveKind}: ${pc.dim(res.path)}`);\n\n // Resolve the publisher and make the asset immediately consumable:\n // stamp the resolved publisher (frontmatter + library manifest, the\n // latter is what discovery keys on), then index into asset_definitions.\n const domain = opts.dir ? opts.dir.split(path.sep)[0] : undefined;\n const publisher = resolveLibraryPublisher(target, opts, domain, getStoreIdentity());\n stampAssetPublisher(res.path, publisher);\n ensureManifestPublisher(target.path, publisher);\n // Register the new asset in the manifest `assets[]` so `library publish`\n // (which reads that inventory, not discovery) actually ships it. `root`\n // is the asset's repo-relative dir; the scaffold stamps version 0.1.0.\n upsertManifestAsset(target.path, {\n kind: effectiveKind,\n name,\n root: path.relative(target.path, res.path) || name,\n version: \"0.1.0\",\n });\n const idx = await indexLibrary(target, library);\n for (const e of idx.errors) logWarn(e);\n logOk(`Indexed — add it with \\`skaile add ${effectiveKind}:@${publisher}/${name}\\``);\n } finally {\n close();\n }\n },\n );\n\n // ── library domain ─────────────────────────────────────────────────────────\n // Domains are the first-level directories of a library and define the\n // publisher namespace. Before this command they were born implicitly via\n // `mkdir`; now `create` scaffolds a DOMAIN.md and a publisher slug.\n const domain = cmd\n .command(\"domain\")\n .description(\"Manage domains (publisher namespaces) inside a library\");\n\n /** Resolve the target library: explicit --library, else the writable default. */\n async function resolveTargetLibrary(\n manager: Awaited<ReturnType<typeof openLibraryManager>>[\"manager\"],\n libraryName: string | undefined,\n ): Promise<Awaited<ReturnType<typeof manager.requireLibrary>>> {\n if (libraryName) return manager.requireLibrary(libraryName);\n const all = await manager.listLibraries();\n const def = all.find((l) => l.isDefault);\n if (def) return def;\n // No explicit default, but a single library is unambiguous — use it.\n if (all.length === 1) return all[0];\n if (all.length === 0) {\n logErr(\"No libraries registered. Run `skaile library init <name>` first.\");\n process.exit(1);\n }\n logErr(\"No default library set. Run `skaile library default <name>` or pass --library.\");\n process.exit(1);\n }\n\n domain\n .command(\"create <name>\")\n .description(\"Scaffold a domain dir + DOMAIN.md inside a library\")\n .option(\"--library <name>\", \"Target library (default: the default-marked one)\")\n .option(\"--publisher <p>\", \"Publisher slug (default: the domain name kebab-cased)\")\n .option(\"--description <text>\", \"Domain description for DOMAIN.md\")\n .action(\n async (\n name: string,\n opts: { library?: string; publisher?: string; description?: string },\n ) => {\n const { manager, close } = await openLibraryManager();\n try {\n const target = await resolveTargetLibrary(manager, opts.library);\n if (target.ownership === \"reader\") {\n logErr(`Library \"${target.name}\" is read-only (ownership=reader).`);\n process.exit(1);\n }\n const res = ensureDomain(target.path, name, {\n publisher: opts.publisher,\n description: opts.description,\n });\n // A domain-structured library is the natural home for domains.\n if (target.structure !== \"domain\") {\n await manager.updateLibrary(target.id, { structure: \"domain\" });\n }\n if (res.created) {\n logOk(`Created domain ${S.cmd(name)} (publisher @${res.publisher}) → ${res.dir}`);\n } else {\n logInfo(`Domain ${S.cmd(name)} already exists at ${res.dir}`);\n }\n } finally {\n close();\n }\n },\n );\n\n domain\n .command(\"list\")\n .description(\"List domains in a library\")\n .option(\"--library <name>\", \"Target library (default: the default-marked one)\")\n .option(\"--json\", \"Output as JSON\")\n .action(async (opts: { library?: string; json?: boolean }) => {\n const { manager, close } = await openLibraryManager();\n try {\n const target = await resolveTargetLibrary(manager, opts.library);\n const domains = listDomains(target.path);\n if (opts.json) return console.log(JSON.stringify(domains, null, 2));\n if (domains.length === 0) {\n logInfo(\n `No domains in \"${target.name}\". Create one: \\`skaile library domain create <name>\\`.`,\n );\n return;\n }\n for (const d of domains) console.log(` ${S.cmd(d)}`);\n console.log(`\\n ${S.dim(`${domains.length} domain(s) in ${target.name}`)}\\n`);\n } finally {\n close();\n }\n });\n\n domain\n .command(\"show <name>\")\n .description(\"Print a domain's DOMAIN.md\")\n .option(\"--library <name>\", \"Target library (default: the default-marked one)\")\n .action(async (name: string, opts: { library?: string }) => {\n const { manager, close } = await openLibraryManager();\n try {\n const target = await resolveTargetLibrary(manager, opts.library);\n const domainFile = path.join(target.path, name, \"DOMAIN.md\");\n if (!existsSync(domainFile)) {\n logErr(`Domain \"${name}\" not found in \"${target.name}\" (no ${domainFile}).`);\n process.exit(1);\n }\n console.log(fs.readFileSync(domainFile, \"utf8\"));\n } finally {\n close();\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 index ────────────────────────────────────────────────────────\n // Re-scan a library's on-disk assets into asset_definitions so `add` /\n // `asset install` / `search --local` resolve them. Distinct from `sync`\n // (git pull/push): this indexes local bytes, no remote round-trip.\n cmd\n .command(\"index <name>\")\n .description(\"(Re)index a library's assets into the local index\")\n .action(async (name: string) => {\n const { manager, library, close } = await openLibraryManager();\n try {\n const lib = await manager.requireLibrary(name);\n // Sync the manifest inventory with disk first, so hand-added assets are\n // both indexed AND publishable (the manifest is the publish allowlist).\n syncManifestWithDisk(lib.path, lib.name);\n const res = await indexLibrary(lib, library);\n for (const e of res.errors) logWarn(e);\n logOk(`Indexed ${res.assetsUpdated} asset(s) from ${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 ────────────────────────────────────\n cmd\n .command(\"publish <lib>\")\n .description(\"Push + register the library's manifest atomically (needs git backend)\")\n .option(\"--asset <ref>\", \"Publish only the single asset matching this ref/name\")\n .option(\"--create-repo\", \"Provision + link a public github repo if the library has no remote\")\n .option(\"--ref <gitref>\", \"Git ref to ingest (default: the library branch or main)\")\n .option(\"--dry-run\", \"Print the plan; push nothing and call no store endpoint\")\n .action(\n async (\n lib: string,\n opts: { asset?: string; createRepo?: boolean; ref?: string; dryRun?: boolean },\n ) => {\n const { runLibraryPublish } = await import(\"./library-publish.ts\");\n await withStoreErrorHandling(() => runLibraryPublish(lib, opts));\n },\n );\n\n cmd\n .command(\"register <lib>\")\n .description(\"Register the library's manifest without pushing (bytes already on github)\")\n .option(\"--asset <ref>\", \"Publish only the single asset matching this ref/name\")\n .option(\"--ref <gitref>\", \"Git ref to ingest (default: the library branch or main)\")\n .option(\"--dry-run\", \"Print the plan; call no store endpoint\")\n .action(async (lib: string, opts: { asset?: string; ref?: string; dryRun?: boolean }) => {\n const { runLibraryRegister } = await import(\"./library-publish.ts\");\n await withStoreErrorHandling(() => runLibraryRegister(lib, opts));\n });\n\n cmd\n .command(\"yank <lib>\")\n .description(\"Retract the library's published assets from the store\")\n .option(\"--asset <ref>\", \"Yank only the single asset matching this ref/name\")\n .action(async (lib: string, opts: { asset?: string }) => {\n const { runLibraryYank } = await import(\"./library-publish.ts\");\n await withStoreErrorHandling(() => runLibraryYank(lib, opts));\n });\n\n return cmd;\n}\n\n/**\n * Run a store-publishing action, surfacing the store's error message cleanly\n * (e.g. the reserved-namespace hint) via `logErr` instead of letting it crash\n * with a raw stack trace. Clean `process.exit(1)` paths inside `fn` are\n * unaffected (they exit before this catch).\n */\nasync function withStoreErrorHandling(fn: () => Promise<void>): Promise<void> {\n try {\n await fn();\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Publisher stamping (library create)\n// ---------------------------------------------------------------------------\n\n/**\n * Stamp `metadata.publisher` into a scaffolded asset's markdown marker so the\n * asset carries its publisher at the source. Only markdown markers (SKILL.md /\n * AGENT.md / CONTRACT.md / `*.prompt.md`) carry frontmatter — a YAML marker\n * (flow / bundle) is left untouched. Best-effort: a missing/odd marker is a\n * no-op (the manifest publisher is the authoritative index key regardless).\n */\nfunction stampAssetPublisher(assetDir: string, publisher: string): void {\n const markers = [\"SKILL.md\", \"AGENT.md\", \"CONTRACT.md\"];\n let markerFile: string | undefined;\n for (const m of markers) {\n if (fs.existsSync(path.join(assetDir, m))) {\n markerFile = path.join(assetDir, m);\n break;\n }\n }\n if (!markerFile) {\n // Only a `.prompt.md` marker carries asset frontmatter — never a bare `.md`\n // catch-all, which would stamp (and corrupt) a template's README/CHANGELOG.\n const promptMd = fs.readdirSync(assetDir).find((f) => f.endsWith(\".prompt.md\"));\n if (promptMd) markerFile = path.join(assetDir, promptMd);\n }\n if (!markerFile) return;\n\n try {\n const { data, body } = parseFrontmatter(fs.readFileSync(markerFile, \"utf8\"));\n const meta =\n data.metadata && typeof data.metadata === \"object\" && !Array.isArray(data.metadata)\n ? { ...(data.metadata as Record<string, unknown>) }\n : {};\n if (meta.publisher != null) return; // Respect an author-set publisher.\n meta.publisher = publisher;\n data.metadata = meta;\n const fm = stringifyYaml(data).trimEnd();\n fs.writeFileSync(markerFile, `---\\n${fm}\\n---\\n\\n${body}\\n`, \"utf8\");\n } catch {\n // Non-fatal — the manifest publisher still drives indexing.\n }\n}\n\n/**\n * Ensure the library's `skaile.manifest.yaml` declares `publisher: <publisher>`.\n * This is the key discovery reads to key assets under the right publisher; the\n * frontmatter stamp above is documentary. Preserves an existing `publisher`\n * (never clobbers a library that already declared one) and the asset inventory.\n */\nfunction ensureManifestPublisher(libraryPath: string, publisher: string): void {\n const manifest = loadSkPublishManifest(libraryPath) ?? { assets: [] };\n if (manifest.publisher) return;\n saveSkPublishManifest(libraryPath, { ...manifest, publisher });\n}\n\n/**\n * Reconcile the manifest `assets[]` inventory with what is actually on disk:\n * scan the library (layout-tolerant) and upsert any asset missing from the\n * inventory. `library publish` filters store-discovered candidates by this\n * inventory, so a hand-added asset (created outside `library create`) would\n * otherwise be indexable but not publishable. Idempotent — existing entries are\n * left as-is (upsert keys by kind+name). Never removes entries (curation-safe).\n */\nfunction syncManifestWithDisk(libraryPath: string, libraryName: string): void {\n const publisher = loadSkPublishManifest(libraryPath)?.publisher ?? slugifyAssetName(libraryName);\n for (const e of scanDirectory(libraryPath, publisher)) {\n const root = path.relative(libraryPath, path.dirname(e.source)) || e.name;\n upsertManifestAsset(libraryPath, { kind: e.kind, name: e.name, root, version: e.version });\n }\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(` behind/ahead: ${status.remoteChanges.behind}/${status.remoteChanges.ahead}`);\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 assignments: { id: string; workspaceId: string; instanceId: string }[] = [];\n if (hasWorkspaceConfig) {\n try {\n assignments = await library.listAssignments(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 assignments: assignments.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 ? `synced ${formatRelativeTime(l.lastSyncAt)}` : \"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(` ${S.label(\"Registered kinds\")} ${pc.green(String(registeredKinds.length))}`);\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(\"Assignments\")} ${assignments.length === 0 ? S.dim(\"none (this workspace)\") : pc.green(String(assignments.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 in a\n * `origin → publisher → domain → asset` tree. `origin` is the feed\n * the asset came from (Library / Sources / Skaile Factory Assets\n * / Store), the outermost collapsible band so it's clear where\n * each skill comes from.\n * `domain` is the sidecar `DOMAIN.md` grouping (display-only).\n * - Sources — third-party github repos registered via `skaile source add`,\n * shown as a `Sources → org → repo → domain → asset` tree (the\n * source-origin slice of the Assets feed, with an extra github-org\n * band). Domains default *collapsed*; install/remove works the\n * same as the Assets tab. CRUD stays in `skaile source …`.\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 * d domain info, 1/2/3 filter to one origin · 0 clear, s sync, i info,\n * Tab switch, 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 {\n assetRefToStr,\n type CatalogDomain,\n type CatalogEntry,\n type DomainRelation,\n} from \"@skaile/workspaces/core\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport type { AssetOrigin, OriginEntry } from \"../asset-feeds.ts\";\nimport {\n bareSoftDepName,\n fitWidth,\n formatSoftDepAddPreview,\n formatSoftDepRemovePreview,\n kindColor,\n kindColorPad,\n S,\n} from \"../helpers.ts\";\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * A single row in the manage TUI asset list: an origin header, a publisher\n * header, a domain header, a domain info line, or an individual asset entry.\n *\n * The tree is `origin → publisher → domain → asset`. `origin` (the feed the\n * asset was gathered from — store / source / library / factory) is the outermost\n * band and is carried on **every** row, because the same group can appear\n * under more than one origin and must not collapse together. `source` holds the\n * **second-level group** — the publisher namespace for most origins, but the\n * source's short repo name under the Sources band (see {@link OriginEntry.group});\n * it is set on header rows **and** asset rows so grouping stays consistent.\n * `domainSlug` is the\n * navigational group from a sidecar `DOMAIN.md` (`\"\"` = the synthetic \"no\n * domain\" group). A `repo` (`\"<org>/<repo>\"`) is no longer a grouping axis —\n * it rides on the asset row as a dim provenance badge only.\n *\n * A `domain-header` is **navigational**: it collapses/expands and toggles its\n * info region, but never bulk-installs (unlike origin/publisher headers).\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport interface AssetRow {\n type:\n | \"origin-header\"\n | \"publisher-header\"\n | \"domain-header\"\n | \"domain-info\"\n | \"asset\"\n // Sources-tab tree only: a github-org band (\"skaile-ai\") and the repo band\n // (\"ai-assets-skaileup\") under a single static \"Sources\" root.\n | \"source-root\"\n | \"org-header\"\n | \"repo-header\"\n // Libraries-tab tree only: a static \"Libraries\" root and per-library band\n // (no org level — a library is a single authoring place).\n | \"library-root\"\n | \"library-header\";\n origin?: AssetOrigin; // present on all row types (the outer grouping band)\n source?: string; // second-level group key (publisher, or source/repo name under Sources)\n org?: string; // github org (Sources tree); set on every source-origin asset row + its headers\n domainSlug?: string; // domain-header / domain-info: group slug (\"\" = no domain); asset: its domain\n repo?: string; // asset: \"<org>/<repo>\" provenance badge (not a collapse axis)\n entry?: CatalogEntry;\n installed?: boolean;\n underDomain?: boolean; // asset: rendered under a domain-header (drives indent + relation glyph)\n seq?: number; // asset: 1-based step within a `sequence` domain\n}\n\n/** Display metadata + render order for the asset origins. */\nconst ORIGIN_META: Record<AssetOrigin, { icon: string; label: string }> = {\n library: { icon: \"📚\", label: \"Library\" },\n source: { icon: \"🔗\", label: \"Sources\" },\n factory: { icon: \"🏭\", label: \"Skaile Factory Assets\" },\n store: { icon: \"📦\", label: \"Store\" },\n};\n\n/**\n * Render order, local-first: your own authoring places, then github sources you\n * added, then the bundled first-party factory assets, then the (potentially\n * large, remote) store last. {@link loadAssets} default-collapses `store` so\n * local assets stay front-and-centre on open.\n */\nconst ORIGIN_ORDER: AssetOrigin[] = [\"library\", \"source\", \"factory\", \"store\"];\n\n/** Collapse-key builders — origin-namespaced so identical publishers don't merge. */\nconst srcKey = (origin: AssetOrigin, publisher: string) => `${origin}:${publisher}`;\nconst domainKey = (origin: AssetOrigin, publisher: string, slug: string) =>\n `${origin}:${publisher}:dom:${slug}`;\n\n/**\n * Collapse-key builders for the Sources tree (`org → repo → domain`). Kept\n * separate from the asset-tree keys above so the Sources tab collapses\n * independently of the Assets tab's Sources band (different default state:\n * domains here open collapsed).\n */\nconst repoKey = (org: string, repo: string) => `${org}/${repo}`;\nconst srcDomainKey = (org: string, repo: string, slug: string) => `${org}/${repo}:dom:${slug}`;\n\n/**\n * Collapse-key builder for the Libraries tree (`library → domain`). Independent\n * of the Assets tab's Library band; keyed by the library name (its `group`).\n */\nconst libDomainKey = (group: string, slug: string) => `${group}:dom:${slug}`;\n\n/** Slug used for the synthetic \"no domain\" group (assets with no `domainSlug`). */\nconst NO_DOMAIN = \"\";\n\n/**\n * Display registry: `domainSlug` → its metadata (title, description, relation,\n * recommended pick). Populated from the feed (`AssetFeedResult.domains`); empty\n * until the store serves `catalog.listDomains`. A slug with no registry entry\n * still renders a header (titled by its slug) — the join degrades gracefully.\n */\nlet domainRegistry: Map<string, CatalogDomain> = new Map();\n\n/** Short relation badge for a domain header (`[add]`/`[alt]`/`[seq]`). */\nfunction relationBadge(relation: DomainRelation | undefined): string {\n if (relation === \"additions\") return pc.dim(\"[\") + pc.green(\"add\") + pc.dim(\"]\");\n if (relation === \"alternatives\") return pc.dim(\"[\") + pc.yellow(\"alt\") + pc.dim(\"]\");\n if (relation === \"sequence\") return pc.dim(\"[\") + pc.blue(\"seq\") + pc.dim(\"]\");\n return \"\";\n}\n\n/**\n * Per-asset relation hint glyph: `[add]` (additions), `▷alt` (alternatives),\n * `⇣N` (sequence step N). Empty for an asset outside any relational domain.\n */\nfunction relationGlyph(relation: DomainRelation | undefined, seq: number | undefined): string {\n if (relation === \"additions\") return pc.green(\"[add]\");\n if (relation === \"alternatives\") return pc.yellow(\"▷alt\");\n if (relation === \"sequence\") return pc.blue(`⇣${seq ?? \"?\"}`);\n return \"\";\n}\n\n/** Plain (uncoloured) form of {@link relationGlyph} — for column-width math. */\nfunction relationGlyphText(relation: DomainRelation | undefined, seq: number | undefined): string {\n if (relation === \"additions\") return \"[add]\";\n if (relation === \"alternatives\") return \"▷alt\";\n if (relation === \"sequence\") return `⇣${seq ?? \"?\"}`;\n return \"\";\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/cache/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 // Sources tab tree (org → repo → domain → asset) + its visible slice.\n sourceTreeRows: AssetRow[];\n visibleSourceRows: AssetRow[];\n // Libraries tab tree (library → domain → asset) + its visible slice.\n libraryTreeRows: AssetRow[];\n visibleLibraryRows: AssetRow[];\n pendingAdds: Set<string>;\n pendingRemoves: Set<string>;\n collapsedOrigins: Set<AssetOrigin>; // keys: origin\n collapsedSources: Set<string>; // keys: \"origin:publisher\"\n collapsedDomains: Set<string>; // keys: \"origin:publisher:dom:<slug>\"\n expandedDomainInfo: Set<string>; // keys: same as collapsedDomains — info region open\n seenDomains: Set<string>; // domain keys encountered (drives one-shot collapse-at-domain)\n // Sources-tab collapse state (independent of the Assets tab). Domains here\n // default *collapsed*; `seenSourceDomains` makes that a one-shot so a user\n // expand survives reloads.\n collapsedSourceOrgs: Set<string>; // keys: \"<org>\"\n collapsedSourceRepos: Set<string>; // keys: \"<org>/<repo>\"\n collapsedSourceDomains: Set<string>; // keys: \"<org>/<repo>:dom:<slug>\"\n expandedSourceDomainInfo: Set<string>; // keys: same as collapsedSourceDomains\n seenSourceDomains: Set<string>; // domain keys encountered (drives one-shot collapse-at-domain)\n // Libraries-tab collapse state (independent of the Assets tab). Library bands\n // default *open*; domains default *collapsed*, `seenLibraryDomains` making that\n // a one-shot so a user expand survives reloads.\n collapsedLibraryGroups: Set<string>; // keys: \"<library>\"\n collapsedLibraryDomains: Set<string>; // keys: \"<library>:dom:<slug>\"\n expandedLibraryDomainInfo: Set<string>; // keys: same as collapsedLibraryDomains\n seenLibraryDomains: Set<string>; // domain keys encountered (drives one-shot collapse-at-domain)\n seenOrigins: Set<AssetOrigin>; // origins encountered so far (drives one-shot store auto-collapse)\n originFilter: AssetOrigin | null; // when set, only this origin's rows are shown\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 sourceTreeRows: [],\n visibleSourceRows: [],\n libraryTreeRows: [],\n visibleLibraryRows: [],\n pendingAdds: new Set(),\n pendingRemoves: new Set(),\n collapsedOrigins: new Set(),\n collapsedSources: new Set(),\n collapsedDomains: new Set(),\n expandedDomainInfo: new Set(),\n seenDomains: new Set(),\n collapsedSourceOrgs: new Set(),\n collapsedSourceRepos: new Set(),\n collapsedSourceDomains: new Set(),\n expandedSourceDomainInfo: new Set(),\n seenSourceDomains: new Set(),\n collapsedLibraryGroups: new Set(),\n collapsedLibraryDomains: new Set(),\n expandedLibraryDomainInfo: new Set(),\n seenLibraryDomains: new Set(),\n seenOrigins: new Set(),\n originFilter: null,\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 origin / publisher / domain sets, the per-domain info-expand\n * set, and the active origin filter. The tree is flat (`origin → publisher →\n * domain → asset`, domain slugs not nested), so collapse checks are exact set\n * membership — no prefix walking. Collapse keys are origin-namespaced so the\n * same publisher under two origins collapses independently.\n *\n * - Every row is hidden when an `originFilter` is set and the row's origin\n * doesn't match it.\n * - An `origin-header` is otherwise always visible.\n * - A `publisher-header` is hidden when its origin is collapsed.\n * - A `domain-header` is hidden when its origin or its `\"origin:publisher\"` key\n * is collapsed.\n * - A `domain-info` line follows the same rule as the domain's assets (shown\n * when the band is open). The `[d]` toggle changes only how it *renders*\n * (truncated ↔ full), not whether it shows.\n * - An asset under a real domain is hidden when that `\"…:dom:<slug>\"` key is\n * collapsed; a \"no domain\" asset only depends on its origin + publisher.\n *\n * @param rows - Complete flat list of asset rows.\n * @param collapsedOrigins - Set of origins whose children are hidden.\n * @param collapsedSources - Set of `\"origin:publisher\"` keys whose children are hidden.\n * @param collapsedDomains - Set of `\"origin:publisher:dom:<slug>\"` keys whose assets are hidden.\n * @param originFilter - When set, only rows of this origin are kept.\n * @returns Filtered array of visible rows.\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function buildVisibleRows(\n rows: AssetRow[],\n collapsedOrigins: Set<AssetOrigin>,\n collapsedSources: Set<string>,\n collapsedDomains: Set<string>,\n originFilter: AssetOrigin | null = null,\n): AssetRow[] {\n return rows.filter((row) => {\n const origin = rowOrigin(row);\n if (originFilter && origin !== originFilter) return false;\n if (row.type === \"origin-header\") return true;\n if (collapsedOrigins.has(origin)) return false;\n if (row.type === \"publisher-header\") return true;\n if (collapsedSources.has(srcKey(origin, rowGroup(row)))) return false;\n if (row.type === \"domain-header\") return true;\n if (row.type === \"domain-info\") {\n return !collapsedDomains.has(domainKey(origin, row.source!, row.domainSlug ?? NO_DOMAIN));\n }\n // asset: a real domain (underDomain) is gated on its domain collapse key;\n // a \"no domain\" asset hangs directly under its group (already cleared).\n if (row.underDomain) {\n return !collapsedDomains.has(domainKey(origin, rowGroup(row), rowDomain(row)));\n }\n return true;\n });\n}\n\n/**\n * Return `kind:name` refs for all asset rows belonging to a specific origin.\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function originAssetRefs(rows: AssetRow[], origin: AssetOrigin): string[] {\n return refsOf(rows.filter((r) => isAsset(r) && rowOrigin(r) === origin));\n}\n\n/**\n * Return `kind:name` refs for all asset rows belonging to a specific\n * origin + publisher + domain slug (`\"\"` = the \"no domain\" group).\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function domainAssetRefs(\n rows: AssetRow[],\n origin: AssetOrigin,\n publisher: string,\n slug: string,\n): string[] {\n return refsOf(rows.filter((r) => isAsset(r) && inDomain(r, origin, publisher, slug)));\n}\n\n/**\n * Return `kind:name` refs for all asset rows belonging to a specific\n * origin + publisher (across its repos).\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function sourceAssetRefs(rows: AssetRow[], origin: AssetOrigin, source: string): string[] {\n return refsOf(rows.filter((r) => isAsset(r) && inSource(r, origin, source)));\n}\n\n// ── Sources tree (org → repo → domain → asset) ───────────────────────────────\n//\n// The Sources tab renders the `source`-origin slice of the asset feed as a\n// collapsible tree with one extra band — the github **org** — above the repo.\n// It reuses the same flat-list/visible-filter shape as the Assets tree, with\n// its own collapse keys (`<org>`, `<org>/<repo>`, `<org>/<repo>:dom:<slug>`).\n\n/**\n * Build the flat Sources-tree row list from the source-origin asset rows.\n * Hierarchy: a single static \"Sources\" root → per github org → per repo → \"no\n * domain\" assets (directly under the repo) → per real domain (header + optional\n * info + assets). `registered` injects org/repo bands for sources that have no\n * discoverable assets yet, so a freshly-added source still shows up.\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function buildSourceTreeRows(\n assetRows: AssetRow[],\n registered: { org: string; repo: string }[] = [],\n): AssetRow[] {\n // org → repo → slug → assets\n const byOrg = new Map<string, Map<string, Map<string, AssetRow[]>>>();\n const ensure = (org: string, repo: string) => {\n if (!byOrg.has(org)) byOrg.set(org, new Map());\n const byRepo = byOrg.get(org)!;\n if (!byRepo.has(repo)) byRepo.set(repo, new Map());\n return byRepo.get(repo)!;\n };\n\n for (const r of assetRows) {\n if (!isAsset(r) || rowOrigin(r) !== \"source\") continue;\n const org = rowOrg(r);\n const repo = rowGroup(r);\n const slug = rowDomain(r);\n const byDomain = ensure(org, repo);\n if (!byDomain.has(slug)) byDomain.set(slug, []);\n byDomain.get(slug)!.push(r);\n }\n // Make empty registered sources visible (org/repo band, no assets).\n for (const { org, repo } of registered) ensure(org, repo);\n\n if (byOrg.size === 0) return [];\n\n const rows: AssetRow[] = [{ type: \"source-root\" }];\n for (const org of [...byOrg.keys()].sort((a, b) => a.localeCompare(b))) {\n rows.push({ type: \"org-header\", origin: \"source\", org });\n const byRepo = byOrg.get(org)!;\n for (const repo of [...byRepo.keys()].sort((a, b) => a.localeCompare(b))) {\n rows.push({ type: \"repo-header\", origin: \"source\", org, source: repo });\n const byDomain = byRepo.get(repo)!;\n const loose = byDomain.get(NO_DOMAIN);\n if (loose) for (const a of loose) rows.push({ ...a, org });\n for (const slug of sortedDomainSlugs([...byDomain.keys()])) {\n const meta = domainRegistry.get(slug);\n rows.push({ type: \"domain-header\", origin: \"source\", org, source: repo, domainSlug: slug });\n if (meta?.description) {\n rows.push({ type: \"domain-info\", origin: \"source\", org, source: repo, domainSlug: slug });\n }\n for (const a of byDomain.get(slug)!) rows.push({ ...a, org });\n }\n }\n }\n return rows;\n}\n\n/**\n * Filter the flat Sources-tree rows to those visible given the collapsed\n * org / repo / domain sets. The root is always visible; an org-header hides\n * when no set applies above it; a repo-header hides under a collapsed org; a\n * domain-header hides under a collapsed org/repo; a domain-info / domained\n * asset hides under a collapsed domain (or any collapsed ancestor).\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function buildVisibleSourceRows(\n rows: AssetRow[],\n collapsedOrgs: Set<string>,\n collapsedRepos: Set<string>,\n collapsedDomains: Set<string>,\n): AssetRow[] {\n return rows.filter((row) => {\n if (row.type === \"source-root\" || row.type === \"org-header\") return true;\n const org = row.org ?? UNKNOWN_ORG;\n if (collapsedOrgs.has(org)) return false;\n if (row.type === \"repo-header\") return true;\n if (collapsedRepos.has(repoKey(org, row.source!))) return false;\n if (row.type === \"domain-header\") return true;\n if (row.type === \"domain-info\") {\n return !collapsedDomains.has(srcDomainKey(org, row.source!, row.domainSlug ?? NO_DOMAIN));\n }\n // asset: a domained one is gated on its domain key; a \"no domain\" asset\n // hangs directly under the repo (already cleared by the repo check above).\n if (row.underDomain) {\n return !collapsedDomains.has(srcDomainKey(org, rowGroup(row), rowDomain(row)));\n }\n return true;\n });\n}\n\n/** Refs of all source-tree asset rows in a github org. */\nexport function sourceOrgRefs(rows: AssetRow[], org: string): string[] {\n return refsOf(rows.filter((r) => isAsset(r) && rowOrigin(r) === \"source\" && rowOrg(r) === org));\n}\n\n/** Refs of all source-tree asset rows in a specific org + repo. */\nexport function sourceRepoRefs(rows: AssetRow[], org: string, repo: string): string[] {\n return refsOf(\n rows.filter(\n (r) => isAsset(r) && rowOrigin(r) === \"source\" && rowOrg(r) === org && rowGroup(r) === repo,\n ),\n );\n}\n\n/** Refs of all source-tree asset rows in a specific org + repo + domain slug. */\nexport function sourceDomainRefs(\n rows: AssetRow[],\n org: string,\n repo: string,\n slug: string,\n): string[] {\n return refsOf(\n rows.filter(\n (r) =>\n isAsset(r) &&\n rowOrigin(r) === \"source\" &&\n rowOrg(r) === org &&\n rowGroup(r) === repo &&\n rowDomain(r) === slug,\n ),\n );\n}\n\n// ── Libraries tree (library → domain → asset) ────────────────────────────────\n//\n// The Libraries tab renders the `library`-origin slice of the asset feed as a\n// collapsible tree — like the Sources tree but with no github-org band (a\n// library is a single authoring place). Reuses the same flat-list/visible-filter\n// shape with its own collapse keys (`<library>`, `<library>:dom:<slug>`).\n\n/**\n * Build the flat Libraries-tree row list from the library-origin asset rows.\n * Hierarchy: a single static \"Libraries\" root → per library band → \"no domain\"\n * assets (directly under the library) → per real domain (header + optional info\n * + assets). `registered` injects a band for each library that has no\n * discoverable assets yet, so a freshly-created library still shows up.\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function buildLibraryTreeRows(assetRows: AssetRow[], registered: string[] = []): AssetRow[] {\n // group → slug → assets\n const byGroup = new Map<string, Map<string, AssetRow[]>>();\n const ensure = (group: string) => {\n if (!byGroup.has(group)) byGroup.set(group, new Map());\n return byGroup.get(group)!;\n };\n\n for (const r of assetRows) {\n if (!isAsset(r) || rowOrigin(r) !== \"library\") continue;\n const group = rowGroup(r);\n const slug = rowDomain(r);\n const byDomain = ensure(group);\n if (!byDomain.has(slug)) byDomain.set(slug, []);\n byDomain.get(slug)!.push(r);\n }\n // Make empty registered libraries visible (library band, no assets).\n for (const group of registered) ensure(group);\n\n if (byGroup.size === 0) return [];\n\n const rows: AssetRow[] = [{ type: \"library-root\" }];\n for (const group of [...byGroup.keys()].sort((a, b) => a.localeCompare(b))) {\n rows.push({ type: \"library-header\", origin: \"library\", source: group });\n const byDomain = byGroup.get(group)!;\n const loose = byDomain.get(NO_DOMAIN);\n if (loose) for (const a of loose) rows.push({ ...a });\n for (const slug of sortedDomainSlugs([...byDomain.keys()])) {\n const meta = domainRegistry.get(slug);\n rows.push({ type: \"domain-header\", origin: \"library\", source: group, domainSlug: slug });\n if (meta?.description) {\n rows.push({ type: \"domain-info\", origin: \"library\", source: group, domainSlug: slug });\n }\n for (const a of byDomain.get(slug)!) rows.push({ ...a });\n }\n }\n return rows;\n}\n\n/**\n * Filter the flat Libraries-tree rows to those visible given the collapsed\n * group / domain sets. The root + library headers are always visible; everything\n * under a collapsed library hides; a domain-info / domained asset hides under a\n * collapsed domain (a \"no domain\" asset hangs directly under the library).\n *\n * @docLink cli/commands/manage#make-manage-command\n */\nexport function buildVisibleLibraryRows(\n rows: AssetRow[],\n collapsedGroups: Set<string>,\n collapsedDomains: Set<string>,\n): AssetRow[] {\n return rows.filter((row) => {\n if (row.type === \"library-root\" || row.type === \"library-header\") return true;\n const group = row.source ?? rowGroup(row);\n if (collapsedGroups.has(group)) return false;\n if (row.type === \"domain-header\") return true;\n if (row.type === \"domain-info\") {\n return !collapsedDomains.has(libDomainKey(group, row.domainSlug ?? NO_DOMAIN));\n }\n // asset: a domained one is gated on its domain key; a \"no domain\" asset hangs\n // directly under the library (already cleared by the group check above).\n if (row.underDomain) {\n return !collapsedDomains.has(libDomainKey(rowGroup(row), rowDomain(row)));\n }\n return true;\n });\n}\n\n/** Refs of all library-tree asset rows in a specific library band. */\nexport function libraryGroupRefs(rows: AssetRow[], group: string): string[] {\n return refsOf(\n rows.filter((r) => isAsset(r) && rowOrigin(r) === \"library\" && rowGroup(r) === group),\n );\n}\n\n// ── Internal row helpers ─────────────────────────────────────────────────────\n\nfunction isAsset(r: AssetRow): boolean {\n return r.type === \"asset\";\n}\n\nfunction rowOrigin(r: AssetRow): AssetOrigin {\n return r.origin ?? \"source\";\n}\n\nfunction rowPublisher(r: AssetRow): string {\n return r.entry?.publisher || \"other\";\n}\n\n/**\n * The row's second-level group key. Prefers the explicit `source` (set on header\n * rows and, since source-vs-publisher grouping, on asset rows too) and falls back\n * to the entry's publisher — so an asset row built without a `source` (e.g. tests)\n * still groups by publisher exactly as before.\n */\nfunction rowGroup(r: AssetRow): string {\n return r.source ?? rowPublisher(r);\n}\n\nfunction rowDomain(r: AssetRow): string {\n return r.entry?.domainSlug || NO_DOMAIN;\n}\n\n/**\n * The github org for a source asset, taken from the `<org>/<repo>` provenance\n * slug `scanRepo` stamps onto `entry.repo`. Empty when unknown (the entry then\n * groups under a synthetic \"(unknown)\" org so it never silently disappears).\n */\nconst UNKNOWN_ORG = \"(unknown)\";\nfunction rowOrg(r: AssetRow): string {\n if (r.org) return r.org;\n const repo = r.entry?.repo;\n if (repo?.includes(\"/\")) return repo.slice(0, repo.indexOf(\"/\"));\n return UNKNOWN_ORG;\n}\n\nfunction refsOf(rows: AssetRow[]): string[] {\n return rows.map((r) => assetRefOf(r)).filter((ref): ref is string => ref !== null);\n}\n\nfunction inSource(r: AssetRow, origin: AssetOrigin, source: string): boolean {\n return rowOrigin(r) === origin && rowGroup(r) === source;\n}\n\n/**\n * Returns true when the asset row belongs to `origin` + `publisher` and its\n * domain slug is exactly `slug` (`\"\"` matches \"no domain\" assets that hang\n * directly under the publisher). Slugs are flat — exact match, no descendant\n * walking (domains are never nested).\n */\nfunction inDomain(r: AssetRow, origin: AssetOrigin, publisher: string, slug: string): boolean {\n if (!inSource(r, origin, publisher)) return false;\n return rowDomain(r) === slug;\n}\n\n// Refs flow into AssetManager.add, which parses them through parseAssetRef —\n// publisher is required under the canonical-identity schema. An entry with no\n// publisher has no canonical identity and can't be installed, so it's not\n// selectable (returns null) rather than producing a ref that throws on apply.\nfunction assetRefOf(r: AssetRow): string | null {\n if (!isAsset(r) || !r.entry?.publisher) return null;\n return assetRefToStr({\n kind: r.entry.kind,\n name: r.entry.name,\n publisher: r.entry.publisher,\n });\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/**\n * Apply a header-targeted action; returns true if `row` is a header type (so the\n * caller suppresses the per-asset fallback). Origin and publisher headers\n * bulk-install their subtree. A **domain header is navigational** — it is\n * \"handled\" (returns true → +/- do nothing) but never bulk-installs, because a\n * domain is a discovery grouping, not a bundle. `domain-info` rows likewise.\n */\nfunction actOnHeader(row: AssetRow, action: Action): boolean {\n if (row.type === \"origin-header\") {\n bulkSelection(originAssetRefs(state.assetRows, rowOrigin(row)), action);\n return true;\n }\n if (row.type === \"publisher-header\") {\n bulkSelection(sourceAssetRefs(state.assetRows, rowOrigin(row), row.source!), action);\n return true;\n }\n return row.type === \"domain-header\" || row.type === \"domain-info\";\n}\n\n// ── Data loading ─────────────────────────────────────────────────────────────\n\n/**\n * Per-ref cache of the footer soft-dep preview line (keyed by `<mode>:kind:@pub/name`).\n * Computing it opens the index, so we memoize and only recompute on\n * highlight/selection change — never per render frame. The mode prefix keeps the\n * add-preview and remove-preview lines distinct for the same ref. Cleared on\n * `loadAssets` because the absent/orphan result changes once an asset is added/removed.\n */\nconst softDepPreviewCache = new Map<string, string>();\n\n/**\n * Preview the soft deps of the asset currently under the cursor (Assets/Sources\n * tabs) in the footer. A present/removable asset previews what removing it would\n * orphan (`removing <name> would orphan <x> (soft dep)`); an absent asset previews\n * the soft deps adding it would reference (`<name> references <x> (soft dep, not\n * auto-added)`). Report-only — highlighting/selecting never auto-adds or -removes.\n * No-op on non-asset rows.\n */\n/**\n * The `mode:ref` preview cache key for the row currently under the cursor, or\n * `null` on a non-previewable row. Used to detect a cursor move across an await.\n */\nfunction softDepCacheKeyUnderCursor(): string | null {\n if (state.tab !== \"assets\" && state.tab !== \"sources\") return null;\n const rows = state.tab === \"sources\" ? state.visibleSourceRows : state.visibleRows;\n const row = rows[state.cursor];\n const ref = row?.type === \"asset\" ? assetRefOf(row) : null;\n if (!row || !ref) return null;\n return `${row.installed ? \"remove\" : \"add\"}:${ref}`;\n}\n\nasync function previewSoftDepsUnderCursor(): Promise<void> {\n if (state.tab !== \"assets\" && state.tab !== \"sources\") return;\n const rows = state.tab === \"sources\" ? state.visibleSourceRows : state.visibleRows;\n const row = rows[state.cursor];\n const ref = row?.type === \"asset\" ? assetRefOf(row) : null;\n if (!row || !ref) {\n state.message = \"\"; // clear any stale preview when not on a previewable asset\n return;\n }\n // Present assets are removable → preview their orphans; absent assets are\n // addable → preview the soft deps they'd reference.\n const mode = row.installed ? \"remove\" : \"add\";\n const cacheKey = `${mode}:${ref}`;\n let msg = softDepPreviewCache.get(cacheKey);\n if (msg === undefined) {\n if (mode === \"remove\") {\n const targets = (await am.orphanedSoftDepsAfterRemoving([ref])).map((o) =>\n bareSoftDepName(o.target),\n );\n msg = formatSoftDepRemovePreview(row.entry!.name, targets);\n } else {\n const targets = (await am.reportSoftDeps([ref])).map((e) => bareSoftDepName(e.to));\n msg = formatSoftDepAddPreview(row.entry!.name, targets);\n }\n softDepPreviewCache.set(cacheKey, msg);\n }\n // The index read may have outlived the cursor (rapid j/k): only write if the\n // cursor still sits on the row we computed for, else a slower earlier call\n // would clobber a newer row's preview.\n if (softDepCacheKeyUnderCursor() === cacheKey) state.message = msg;\n}\n\nasync function loadAssets(): Promise<void> {\n softDepPreviewCache.clear();\n const { gatherAssetFeeds } = await import(\"../asset-feeds.ts\");\n const { entries, domains, notes } = await gatherAssetFeeds(am, am.projectDir);\n if (notes.length > 0) {\n state.message = notes.map((n) => `[${n.feed}] ${n.message}`).join(\" • \");\n }\n domainRegistry = new Map(domains.map((d) => [d.slug, d]));\n const installed = new Set(am.listDeployed().map((e) => `${e.kind}:${e.name}`));\n\n const byOrigin = groupEntriesByOriginPublisherDomain(entries);\n const rows = buildAssetRowsFromGroups(byOrigin, installed);\n state.assetRows = rows;\n\n reconcileCollapsedSets(rows);\n rebuildVisible();\n rebuildSourceTree();\n rebuildLibraryTree();\n}\n\n/**\n * Rebuild the Sources-tab tree from the current asset rows (the source-origin\n * slice) plus the registered-source skeleton, reconcile its collapse sets\n * (orgs/repos default open; domains default collapsed, one-shot), and refresh\n * the visible slice. Called whenever the asset rows or the source list change.\n */\nfunction rebuildSourceTree(): void {\n const registered = state.sourceRows\n .map((s) => sourceOrgRepo(s))\n .filter((x): x is NonNullable<typeof x> => x !== null);\n state.sourceTreeRows = buildSourceTreeRows(state.assetRows, registered);\n reconcileSourceCollapsedSets(state.sourceTreeRows);\n rebuildVisibleSources();\n}\n\n/**\n * Derive `{org, repo}` from a registered source's cache path\n * (`…/sources/<host>/<owner>/<repo>`). Returns null when the path is too short\n * to carry an owner segment.\n */\nfunction sourceOrgRepo(s: SourceRow): { org: string; repo: string } | null {\n const parts = s.path.split(path.sep).filter(Boolean);\n if (parts.length < 2) return null;\n return { org: parts[parts.length - 2]!, repo: parts[parts.length - 1]! };\n}\n\n/**\n * Reconcile the Sources-tab collapse sets with new tree rows. Orgs and repos\n * default open; domains default *collapsed* — but only the first time each is\n * seen (`seenSourceDomains`), so a user expand is not clobbered on reload.\n * Stale keys (for rows that vanished) are pruned from every set.\n */\nfunction reconcileSourceCollapsedSets(rows: AssetRow[]): void {\n const orgKeys = new Set(rows.filter((r) => r.type === \"org-header\").map((r) => r.org!));\n const repoKeys = new Set(\n rows.filter((r) => r.type === \"repo-header\").map((r) => repoKey(r.org!, r.source!)),\n );\n const domainKeys = new Set(\n rows\n .filter((r) => r.type === \"domain-header\")\n .map((r) => srcDomainKey(r.org!, r.source!, r.domainSlug ?? NO_DOMAIN)),\n );\n\n for (const k of state.collapsedSourceOrgs)\n if (!orgKeys.has(k)) state.collapsedSourceOrgs.delete(k);\n for (const k of state.collapsedSourceRepos) {\n if (!repoKeys.has(k)) state.collapsedSourceRepos.delete(k);\n }\n // One-shot collapse-at-domain: collapse each domain the first time we see it.\n for (const k of domainKeys) {\n if (!state.seenSourceDomains.has(k)) {\n state.collapsedSourceDomains.add(k);\n state.seenSourceDomains.add(k);\n }\n }\n for (const k of state.collapsedSourceDomains) {\n if (!domainKeys.has(k)) state.collapsedSourceDomains.delete(k);\n }\n for (const k of state.expandedSourceDomainInfo) {\n if (!domainKeys.has(k)) state.expandedSourceDomainInfo.delete(k);\n }\n for (const k of state.seenSourceDomains)\n if (!domainKeys.has(k)) state.seenSourceDomains.delete(k);\n}\n\nfunction rebuildVisibleSources(): void {\n state.visibleSourceRows = buildVisibleSourceRows(\n state.sourceTreeRows,\n state.collapsedSourceOrgs,\n state.collapsedSourceRepos,\n state.collapsedSourceDomains,\n );\n clampCursor();\n}\n\n/**\n * Rebuild the Libraries-tab tree from the current asset rows (the library-origin\n * slice) plus the registered-library skeleton, reconcile its collapse sets\n * (library bands default open; domains default collapsed, one-shot), and refresh\n * the visible slice. Called whenever the asset rows or the library list change.\n */\nfunction rebuildLibraryTree(): void {\n state.libraryTreeRows = buildLibraryTreeRows(\n state.assetRows,\n state.libraryRows.map((l) => l.name),\n );\n reconcileLibraryCollapsedSets(state.libraryTreeRows);\n rebuildVisibleLibraries();\n}\n\n/**\n * Reconcile the Libraries-tab collapse sets with new tree rows. Library bands\n * default open; domains default *collapsed* — but only the first time each is\n * seen (`seenLibraryDomains`), so a user expand is not clobbered on reload.\n * Stale keys (for rows that vanished) are pruned from every set.\n */\nfunction reconcileLibraryCollapsedSets(rows: AssetRow[]): void {\n const groupKeys = new Set(rows.filter((r) => r.type === \"library-header\").map((r) => r.source!));\n const domainKeys = new Set(\n rows\n .filter((r) => r.type === \"domain-header\")\n .map((r) => libDomainKey(r.source!, r.domainSlug ?? NO_DOMAIN)),\n );\n\n for (const k of state.collapsedLibraryGroups)\n if (!groupKeys.has(k)) state.collapsedLibraryGroups.delete(k);\n // One-shot collapse-at-domain: collapse each domain the first time we see it.\n for (const k of domainKeys) {\n if (!state.seenLibraryDomains.has(k)) {\n state.collapsedLibraryDomains.add(k);\n state.seenLibraryDomains.add(k);\n }\n }\n for (const k of state.collapsedLibraryDomains) {\n if (!domainKeys.has(k)) state.collapsedLibraryDomains.delete(k);\n }\n for (const k of state.expandedLibraryDomainInfo) {\n if (!domainKeys.has(k)) state.expandedLibraryDomainInfo.delete(k);\n }\n for (const k of state.seenLibraryDomains)\n if (!domainKeys.has(k)) state.seenLibraryDomains.delete(k);\n}\n\nfunction rebuildVisibleLibraries(): void {\n state.visibleLibraryRows = buildVisibleLibraryRows(\n state.libraryTreeRows,\n state.collapsedLibraryGroups,\n state.collapsedLibraryDomains,\n );\n clampCursor();\n}\n\n/**\n * Group feed entries by origin (the feed), then by their second-level group\n * (`OriginEntry.group` — the source name under Sources, else `entry.publisher`),\n * then by `domainSlug` (`\"\"` = no domain → assets hang directly under their\n * group). The same group can appear under multiple origins, so origin is the\n * outermost map key.\n */\nfunction groupEntriesByOriginPublisherDomain(\n entries: OriginEntry[],\n): Map<AssetOrigin, Map<string, Map<string, CatalogEntry[]>>> {\n const byOrigin = new Map<AssetOrigin, Map<string, Map<string, CatalogEntry[]>>>();\n for (const { origin, entry, group } of entries) {\n const publisher = group || entry.publisher || \"other\";\n const slug = entry.domainSlug || NO_DOMAIN;\n if (!byOrigin.has(origin)) byOrigin.set(origin, new Map());\n const byPublisher = byOrigin.get(origin)!;\n if (!byPublisher.has(publisher)) byPublisher.set(publisher, new Map());\n const byDomain = byPublisher.get(publisher)!;\n if (!byDomain.has(slug)) byDomain.set(slug, []);\n byDomain.get(slug)!.push(entry);\n }\n return byOrigin;\n}\n\n/** Sort a publisher's real domain slugs by registry `order`, then slug. */\nfunction sortedDomainSlugs(slugs: string[]): string[] {\n return slugs\n .filter((s) => s !== NO_DOMAIN)\n .sort((a, b) => {\n const oa = domainRegistry.get(a)?.order ?? Number.MAX_SAFE_INTEGER;\n const ob = domainRegistry.get(b)?.order ?? Number.MAX_SAFE_INTEGER;\n return oa !== ob ? oa - ob : a.localeCompare(b);\n });\n}\n\n/**\n * Emit origin-header → publisher-header → \"no domain\" assets (directly under the\n * publisher) → per real domain: domain-header → optional domain-info → assets.\n * Domains are never nested, so a flat per-slug emit is correct. \"No domain\"\n * assets stay headerless so a domain-free catalog (the common case until the\n * store serves domains) renders exactly like a flat publisher list.\n */\nfunction buildAssetRowsFromGroups(\n byOrigin: Map<AssetOrigin, Map<string, Map<string, CatalogEntry[]>>>,\n installed: Set<string>,\n): AssetRow[] {\n const rows: AssetRow[] = [];\n const sortItems = (items: CatalogEntry[]) =>\n items.sort((a, b) =>\n a.kind !== b.kind ? a.kind.localeCompare(b.kind) : a.name.localeCompare(b.name),\n );\n const pushAsset = (\n origin: AssetOrigin,\n group: string,\n entry: CatalogEntry,\n underDomain: boolean,\n seq?: number,\n ) => {\n const ref = `${entry.kind}:${entry.name}`;\n // `source` carries the group on assets too, so collapse/selection keys match\n // the headers even when the group differs from the publisher (Sources band).\n // `org` (github org from `entry.repo`) is the Sources-tree grouping axis;\n // harmless on the Assets tab, which never reads it.\n rows.push({\n type: \"asset\",\n origin,\n source: group,\n org: entry.repo?.includes(\"/\") ? entry.repo.slice(0, entry.repo.indexOf(\"/\")) : undefined,\n entry,\n installed: installed.has(ref),\n underDomain,\n seq,\n });\n };\n\n for (const origin of ORIGIN_ORDER) {\n const byGroup = byOrigin.get(origin);\n if (!byGroup || byGroup.size === 0) continue;\n rows.push({ type: \"origin-header\", origin });\n for (const [group, byDomain] of [...byGroup.entries()].sort((a, b) =>\n a[0].localeCompare(b[0]),\n )) {\n rows.push({ type: \"publisher-header\", origin, source: group });\n\n // \"No domain\" assets render directly under the group (no header).\n const loose = byDomain.get(NO_DOMAIN);\n if (loose) for (const entry of sortItems(loose)) pushAsset(origin, group, entry, false);\n\n // Real domains, ordered, each as a collapsible labelled group.\n for (const slug of sortedDomainSlugs([...byDomain.keys()])) {\n const meta = domainRegistry.get(slug);\n rows.push({ type: \"domain-header\", origin, source: group, domainSlug: slug });\n if (meta?.description) {\n rows.push({ type: \"domain-info\", origin, source: group, domainSlug: slug });\n }\n const items = sortItems(byDomain.get(slug)!);\n const sequenced = meta?.relation === \"sequence\";\n items.forEach((entry, i) =>\n pushAsset(origin, group, entry, true, sequenced ? i + 1 : undefined),\n );\n }\n }\n }\n return rows;\n}\n\n/** Reconcile the collapsed origin / source / domain sets with the new rows. */\nfunction reconcileCollapsedSets(rows: AssetRow[]): void {\n // Every origin band except the built-in `factory` auto-collapses the first\n // time it appears (a one-shot — a later expand survives reloads after apply).\n // Keeps the initial list compact; `factory` (the built-ins) stays open so a\n // fresh project still shows something useful.\n const presentOrigins = new Set(rows.filter((r) => r.type === \"origin-header\").map(rowOrigin));\n for (const o of presentOrigins) {\n if (!state.seenOrigins.has(o)) {\n if (o !== \"factory\") state.collapsedOrigins.add(o);\n state.seenOrigins.add(o);\n }\n }\n for (const o of state.collapsedOrigins) {\n if (!presentOrigins.has(o)) state.collapsedOrigins.delete(o);\n }\n if (state.originFilter && !presentOrigins.has(state.originFilter)) state.originFilter = null;\n\n // Publisher headers default open. Prune stale keys.\n const newSources = new Set(\n rows.filter((r) => r.type === \"publisher-header\").map((r) => srcKey(rowOrigin(r), r.source!)),\n );\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\n .filter((r) => r.type === \"domain-header\")\n .map((r) => domainKey(rowOrigin(r), r.source!, r.domainSlug ?? NO_DOMAIN)),\n );\n for (const k of newDomainKeys) {\n if (!state.seenDomains.has(k)) {\n state.collapsedDomains.add(k);\n state.seenDomains.add(k);\n }\n }\n for (const d of state.collapsedDomains) {\n if (!newDomainKeys.has(d)) state.collapsedDomains.delete(d);\n }\n for (const d of state.expandedDomainInfo) {\n if (!newDomainKeys.has(d)) state.expandedDomainInfo.delete(d);\n }\n // Prune stale keys — a removed-then-re-added domain is treated as new and re-collapsed.\n for (const d of state.seenDomains) {\n if (!newDomainKeys.has(d)) state.seenDomains.delete(d);\n }\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/cache/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 }, { getGlobalCacheDir }] = await Promise.all([\n import(\"../open-library.ts\"),\n import(\"@skaile/workspaces/library\"),\n import(\"@skaile/workspaces/core\"),\n ]);\n const { manager, library, close } = await openLibraryManager();\n try {\n // index.db rows predating the cache migration still carry the legacy\n // ~/.skaile/sources path, so tolerate both roots.\n const newRoot = getGlobalCacheDir();\n const legacyRoot = path.join(skaileHomeDir(), \"sources\");\n const isSourceRow = (l: { path: string }) =>\n l.path.startsWith(newRoot) || l.path.startsWith(legacyRoot);\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 // Fold the registered-source / -library skeletons into their trees so a\n // registered-but-asset-less source or library still shows its band. Both must\n // run here (not only in `loadAssets`): `libraryRows` is populated in this\n // function, after `loadAssets` already built the tree with an empty list.\n rebuildSourceTree();\n rebuildLibraryTree();\n}\n\nfunction rebuildVisible(): void {\n state.visibleRows = buildVisibleRows(\n state.assetRows,\n state.collapsedOrigins,\n state.collapsedSources,\n state.collapsedDomains,\n state.originFilter,\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 nav ←/→ collapse/expand [space/+/-] select [a/↵] apply [d] domain info [i] info [1]lib [2]src [3]factory [4]store [0]all Tab [q] quit\",\n },\n sources: {\n label: \"Sources\",\n rowCount: () => state.visibleSourceRows.length,\n selectableCount: () => state.sourceTreeRows.filter(isAsset).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) => renderSourceTreeRow(state.visibleSourceRows[i], sel),\n footer:\n \" ↑↓/jk nav ←/→ collapse/expand [space/+/-] select [a/↵] apply [d] domain info [i] info Tab [q] quit\",\n },\n libraries: {\n label: \"Libraries\",\n rowCount: () => state.visibleLibraryRows.length,\n selectableCount: () => state.libraryTreeRows.filter(isAsset).length,\n emptyMsg:\n \" No libraries registered. Run `skaile library init <name>` from the shell to author your own.\",\n renderRow: (i, sel) => renderLibraryTreeRow(state.visibleLibraryRows[i], sel),\n footer:\n \" ↑↓/jk nav ←/→ collapse/expand [space/+/-] select [a/↵] apply [d] domain info [i] info Tab [q] quit\",\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 rows?: AssetRow[]; // row set to count over (defaults to the Assets-tab rows)\n}): string {\n const indicator = opts.collapsed ? \"▶\" : \"▼\";\n const countRows = opts.rows ?? state.assetRows;\n const total = countRows.filter(opts.match).length;\n const installed = countRows.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 === \"origin-header\") {\n const origin = rowOrigin(row);\n const meta = ORIGIN_META[origin];\n return renderHeaderLine({\n indent: \" \",\n collapsed: state.collapsedOrigins.has(origin),\n match: (r) => isAsset(r) && rowOrigin(r) === origin,\n refs: originAssetRefs(state.assetRows, origin),\n label: `${meta.icon} ${pc.bold(pc.cyan(meta.label))}`,\n selected,\n });\n }\n\n if (row.type === \"publisher-header\") {\n const origin = rowOrigin(row);\n return renderHeaderLine({\n indent: \" \".repeat(3),\n collapsed: state.collapsedSources.has(srcKey(origin, row.source!)),\n match: (r) => isAsset(r) && inSource(r, origin, row.source!),\n refs: sourceAssetRefs(state.assetRows, origin, row.source!),\n label: pc.bold(pc.cyan(row.source!)),\n selected,\n });\n }\n\n if (row.type === \"domain-header\") {\n const origin = rowOrigin(row);\n const slug = row.domainSlug ?? NO_DOMAIN;\n const meta = domainRegistry.get(slug);\n const title = meta?.title || slug || \"(no domain)\";\n const badge = relationBadge(meta?.relation);\n // ◈ marks a domain (vs the publisher band above); navigational — no install.\n const label = `${pc.magenta(\"◈\")} ${pc.bold(title)}${badge ? ` ${badge}` : \"\"}`;\n return renderHeaderLine({\n indent: \" \".repeat(5),\n collapsed: state.collapsedDomains.has(domainKey(origin, row.source!, slug)),\n match: (r) => isAsset(r) && inDomain(r, origin, row.source!, slug),\n refs: domainAssetRefs(state.assetRows, origin, row.source!, slug),\n label,\n selected,\n });\n }\n\n if (row.type === \"domain-info\") {\n const origin = rowOrigin(row);\n const slug = row.domainSlug ?? NO_DOMAIN;\n const key = domainKey(origin, row.source!, slug);\n const line = renderDomainInfoLine(\n domainRegistry.get(slug),\n origin,\n row.source!,\n slug,\n state.expandedDomainInfo.has(key),\n );\n return selected ? pc.inverse(line.padEnd(state.cols)) : line;\n }\n\n return renderAssetLeaf(row, selected);\n}\n\n/**\n * Render a single asset row (the tree leaf). Shared by the Assets and Sources\n * tabs. `looseIndent` is the column of a \"no domain\" asset; a domained asset\n * sits two columns deeper. The Sources tree passes a larger base because its\n * extra org band pushes everything one level right.\n */\nfunction renderAssetLeaf(row: AssetRow, selected: boolean, looseIndent = 5): string {\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 // Relation hint + recommended star come from the asset's domain (display-only).\n const dm = row.underDomain ? domainRegistry.get(rowDomain(row)) : undefined;\n const recommended = !!dm?.recommendedRef && dm.recommendedRef === ref;\n const hintStr = [relationGlyph(dm?.relation, row.seq), recommended ? pc.yellow(\"★\") : \"\"]\n .filter(Boolean)\n .join(\" \");\n const hintWidthText = [relationGlyphText(dm?.relation, row.seq), recommended ? \"★\" : \"\"]\n .filter(Boolean)\n .join(\" \");\n const hint = hintStr ? `${hintStr} ` : \"\";\n const hintWidth = hintWidthText ? hintWidthText.length + 1 : 0;\n\n const kind = kindColorPad(e.kind);\n // fitWidth (not padEnd) so an over-long name truncates instead of overflowing\n // the row — the desc budget below assumes name is exactly 30 columns wide.\n const name = fitWidth(e.name, 30);\n // Category renders as a trailing badge (a metadata facet, not a tree axis).\n // `tier` is not threaded onto CatalogEntry, so v1 never fabricates one.\n const badge = e.category ? `${pc.dim(\"[\")}${pc.cyan(e.category)}${pc.dim(\"]\")} ` : \"\";\n // Badge sits between name and desc, so its visible width eats into the desc\n // budget — without this the `[category] ` prefix overflows the row width.\n const badgeWidth = e.category ? e.category.length + 3 : 0;\n // repo is now a dim provenance badge, not a grouping axis — bare name only.\n const repoBare = e.repo\n ? e.repo.includes(\"/\")\n ? e.repo.slice(e.repo.indexOf(\"/\") + 1)\n : e.repo\n : \"\";\n const repoBadge = repoBare ? pc.dim(` ·${repoBare}`) : \"\";\n const repoWidth = repoBare ? repoBare.length + 2 : 0;\n const desc =\n e.description?.slice(0, Math.max(0, state.cols - 56 - badgeWidth - hintWidth - repoWidth)) ??\n \"\";\n // Indent: a domained asset sits one step deeper than its \"no domain\" sibling.\n const indent = \" \".repeat(looseIndent + (row.underDomain ? 2 : 0));\n const line = `${indent}${status} ${hint}${kind} ${name} ${badge}${pc.dim(desc)}${repoBadge}`;\n return selected ? pc.inverse(line.padEnd(state.cols)) : line;\n}\n\n/**\n * Render a row of the Sources tab tree (`Sources → org → repo → domain →\n * asset`). Headers count + bulk-select over the Sources-tree rows and read the\n * Sources-tab collapse sets; asset leaves reuse {@link renderAssetLeaf} with a\n * deeper base indent (the org band shifts everything one level right).\n */\nfunction renderSourceTreeRow(row: AssetRow, selected: boolean): string {\n if (row.type === \"source-root\") {\n const total = state.sourceTreeRows.filter(isAsset).length;\n const meta = ORIGIN_META.source;\n const line = ` ▼ ${meta.icon} ${pc.bold(pc.cyan(meta.label))} (${total} assets)`;\n return selected ? pc.bgWhite(pc.black(`${line} `.padEnd(state.cols))) : line;\n }\n\n if (row.type === \"org-header\") {\n const org = row.org!;\n return renderHeaderLine({\n indent: \" \".repeat(3),\n collapsed: state.collapsedSourceOrgs.has(org),\n match: (r) => isAsset(r) && rowOrigin(r) === \"source\" && rowOrg(r) === org,\n refs: sourceOrgRefs(state.sourceTreeRows, org),\n label: pc.bold(pc.cyan(org)),\n selected,\n rows: state.sourceTreeRows,\n });\n }\n\n if (row.type === \"repo-header\") {\n const org = row.org!;\n const repo = row.source!;\n return renderHeaderLine({\n indent: \" \".repeat(5),\n collapsed: state.collapsedSourceRepos.has(repoKey(org, repo)),\n match: (r) =>\n isAsset(r) && rowOrigin(r) === \"source\" && rowOrg(r) === org && rowGroup(r) === repo,\n refs: sourceRepoRefs(state.sourceTreeRows, org, repo),\n label: pc.bold(repo),\n selected,\n rows: state.sourceTreeRows,\n });\n }\n\n if (row.type === \"domain-header\") {\n const org = row.org!;\n const repo = row.source!;\n const slug = row.domainSlug ?? NO_DOMAIN;\n const meta = domainRegistry.get(slug);\n const title = meta?.title || slug || \"(no domain)\";\n const badge = relationBadge(meta?.relation);\n const label = `${pc.magenta(\"◈\")} ${pc.bold(title)}${badge ? ` ${badge}` : \"\"}`;\n return renderHeaderLine({\n indent: \" \".repeat(7),\n collapsed: state.collapsedSourceDomains.has(srcDomainKey(org, repo, slug)),\n match: (r) =>\n isAsset(r) &&\n rowOrigin(r) === \"source\" &&\n rowOrg(r) === org &&\n rowGroup(r) === repo &&\n rowDomain(r) === slug,\n refs: sourceDomainRefs(state.sourceTreeRows, org, repo, slug),\n label,\n selected,\n rows: state.sourceTreeRows,\n });\n }\n\n if (row.type === \"domain-info\") {\n const slug = row.domainSlug ?? NO_DOMAIN;\n const meta = domainRegistry.get(slug);\n const members = sourceDomainRefs(state.sourceTreeRows, row.org!, row.source!, slug).length;\n const key = srcDomainKey(row.org!, row.source!, slug);\n const line = renderSourceDomainInfoLine(meta, members, state.expandedSourceDomainInfo.has(key));\n return selected ? pc.inverse(line.padEnd(state.cols)) : line;\n }\n\n return renderAssetLeaf(row, selected, 7);\n}\n\n/**\n * Render a row of the Libraries tab tree (`Libraries → library → domain →\n * asset`). Headers count + bulk-select over the Libraries-tree rows and read the\n * Libraries-tab collapse sets. No org band, so it sits one level shallower than\n * the Sources tree (asset leaves at the Assets-tab base indent).\n */\nfunction renderLibraryTreeRow(row: AssetRow, selected: boolean): string {\n if (row.type === \"library-root\") {\n const total = state.libraryTreeRows.filter(isAsset).length;\n const meta = ORIGIN_META.library;\n const line = ` ▼ ${meta.icon} ${pc.bold(pc.cyan(meta.label))} (${total} assets)`;\n return selected ? pc.bgWhite(pc.black(`${line} `.padEnd(state.cols))) : line;\n }\n\n if (row.type === \"library-header\") {\n const group = row.source!;\n return renderHeaderLine({\n indent: \" \".repeat(3),\n collapsed: state.collapsedLibraryGroups.has(group),\n match: (r) => isAsset(r) && rowOrigin(r) === \"library\" && rowGroup(r) === group,\n refs: libraryGroupRefs(state.libraryTreeRows, group),\n label: pc.bold(pc.cyan(group)),\n selected,\n rows: state.libraryTreeRows,\n });\n }\n\n if (row.type === \"domain-header\") {\n const group = row.source!;\n const slug = row.domainSlug ?? NO_DOMAIN;\n const meta = domainRegistry.get(slug);\n const title = meta?.title || slug || \"(no domain)\";\n const badge = relationBadge(meta?.relation);\n const label = `${pc.magenta(\"◈\")} ${pc.bold(title)}${badge ? ` ${badge}` : \"\"}`;\n return renderHeaderLine({\n indent: \" \".repeat(5),\n collapsed: state.collapsedLibraryDomains.has(libDomainKey(group, slug)),\n match: (r) => isAsset(r) && inDomain(r, \"library\", group, slug),\n refs: domainAssetRefs(state.libraryTreeRows, \"library\", group, slug),\n label,\n selected,\n rows: state.libraryTreeRows,\n });\n }\n\n if (row.type === \"domain-info\") {\n const group = row.source!;\n const slug = row.domainSlug ?? NO_DOMAIN;\n const meta = domainRegistry.get(slug);\n const members = domainAssetRefs(state.libraryTreeRows, \"library\", group, slug).length;\n const key = libDomainKey(group, slug);\n const line = renderSourceDomainInfoLine(\n meta,\n members,\n state.expandedLibraryDomainInfo.has(key),\n );\n return selected ? pc.inverse(line.padEnd(state.cols)) : line;\n }\n\n return renderAssetLeaf(row, selected, 5);\n}\n\n/** Sources-tab domain info line — mirrors {@link renderDomainInfoLine} at a deeper indent. */\nfunction renderSourceDomainInfoLine(\n meta: CatalogDomain | undefined,\n members: number,\n expanded: boolean,\n): string {\n const indent = \" \".repeat(9);\n const desc = meta?.description ?? \"\";\n if (!expanded) {\n const budget = Math.max(0, state.cols - indent.length - 12);\n const shown = desc.length > budget ? `${desc.slice(0, Math.max(0, budget - 1))}…` : desc;\n return pc.dim(`${indent}ⓘ ${shown} [d]`);\n }\n const parts = [desc, `${members} members`];\n if (meta?.recommendedRef) parts.push(`★ ${meta.recommendedRef}`);\n if (meta?.sidecarSource) parts.push(`sidecar ${meta.sidecarSource}`);\n const full = parts.join(\" · \");\n const budget = Math.max(0, state.cols - indent.length - 3);\n const shown = full.length > budget ? `${full.slice(0, Math.max(0, budget - 1))}…` : full;\n return pc.dim(`${indent}ⓘ ${shown}`);\n}\n\n/**\n * One-line \"info region\" under a domain header. Collapsed (default): a dim,\n * truncated description with a `[d]` more-affordance. Expanded (`[d]`): the full\n * description plus member count, recommended pick, and sidecar provenance —\n * truncated to the terminal width so it always occupies exactly one row.\n */\nfunction renderDomainInfoLine(\n meta: CatalogDomain | undefined,\n origin: AssetOrigin,\n publisher: string,\n slug: string,\n expanded: boolean,\n): string {\n const indent = \" \".repeat(7);\n const desc = meta?.description ?? \"\";\n if (!expanded) {\n const budget = Math.max(0, state.cols - indent.length - 12);\n const shown = desc.length > budget ? `${desc.slice(0, Math.max(0, budget - 1))}…` : desc;\n return pc.dim(`${indent}ⓘ ${shown} [d]`);\n }\n const members = domainAssetRefs(state.assetRows, origin, publisher, slug).length;\n const parts = [desc, `${members} members`];\n if (meta?.recommendedRef) parts.push(`★ ${meta.recommendedRef}`);\n if (meta?.sidecarSource) parts.push(`sidecar ${meta.sidecarSource}`);\n const full = parts.join(\" · \");\n const budget = Math.max(0, state.cols - indent.length - 3);\n const shown = full.length > budget ? `${full.slice(0, Math.max(0, budget - 1))}…` : full;\n return pc.dim(`${indent}ⓘ ${shown}`);\n}\n\n/**\n * Rows available for the scrolling body: terminal height minus the fixed\n * header/footer chrome and the optional pending-summary / message blocks.\n */\nfunction computeMaxBodyRows(): number {\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 return Math.max(5, (process.stdout.rows || 30) - overhead);\n}\n\nfunction renderHeader(): void {\n console.log();\n const filterTag =\n state.tab === \"assets\" && state.originFilter\n ? ` ${pc.bgYellow(pc.black(` filter: ${ORIGIN_META[state.originFilter].label} `))} ${pc.dim(\"[0] clear\")}`\n : \"\";\n console.log(` ${pc.bold(\"skaile manage\")} ${renderTabs()}${filterTag}`);\n console.log(` ${S.rule(state.cols - 4)}`);\n}\n\nfunction renderBody(spec: TabSpec, maxRows: number): void {\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\nfunction renderPendingSummary(): void {\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\n/** Render the one-shot message line, then clear it so it shows only once. */\nfunction renderMessage(): void {\n if (state.message) {\n console.log();\n console.log(` ${state.message}`);\n state.message = \"\";\n }\n}\n\nfunction render(): void {\n clearScreen();\n state.cols = process.stdout.columns || 80;\n\n const maxRows = computeMaxBodyRows();\n const spec = TABS[state.tab];\n\n renderHeader();\n renderBody(spec, maxRows);\n renderPendingSummary();\n renderMessage();\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 const appliedAdds: string[] = [];\n const appliedRemoves: string[] = [];\n\n for (const ref of state.pendingRemoves) {\n if (am.remove(ref)) {\n removed++;\n appliedRemoves.push(ref);\n }\n }\n for (const ref of state.pendingAdds) {\n try {\n await am.add(ref);\n added++;\n appliedAdds.push(ref);\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 // Report-only soft-dep summary — surfaced, never auto-pulled.\n const softDeps = appliedAdds.length > 0 ? await am.reportSoftDeps(appliedAdds) : [];\n if (softDeps.length > 0) {\n parts.push(pc.dim(`${softDeps.length} soft dep${softDeps.length === 1 ? \"\" : \"s\"} referenced`));\n }\n // Report-only: soft-dep targets the removals left unreferenced — surfaced, never\n // auto-removed. Only those with a parseable ref (removable via `skaile remove`).\n const orphans = (\n appliedRemoves.length > 0 ? await am.orphanedSoftDepsAfterRemoving(appliedRemoves) : []\n ).filter((o) => o.targetRef);\n if (orphans.length > 0) {\n const names = orphans.map((o) => bareSoftDepName(o.target)).join(\", \");\n parts.push(\n pc.dim(\n `${names} no longer referenced by any installed asset — remove with \\`skaile remove\\``,\n ),\n );\n }\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\nasync function showInfo(): Promise<void> {\n const rows =\n state.tab === \"sources\"\n ? state.visibleSourceRows\n : state.tab === \"libraries\"\n ? state.visibleLibraryRows\n : state.visibleRows;\n if (state.tab !== \"assets\" && state.tab !== \"sources\" && state.tab !== \"libraries\") return;\n const row = rows[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 console.log(` origin: ${pc.dim(ORIGIN_META[rowOrigin(row)].label)}`);\n if (e.version) console.log(` version: ${e.version}`);\n if (e.description) console.log(` description: ${e.description}`);\n if (e.publisher) console.log(` publisher: ${pc.dim(e.publisher)}`);\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// ── Origin filter (assets tab) ───────────────────────────────────────────────\n\n/**\n * Set (or toggle off) the origin filter. Passing the already-active origin, or\n * an origin not currently present, clears the filter. Pressing 0 (origin=null)\n * always clears.\n */\nfunction setOriginFilter(origin: AssetOrigin | null): void {\n if (origin === null || state.originFilter === origin) {\n state.originFilter = null;\n } else if (state.seenOrigins.has(origin)) {\n state.originFilter = origin;\n // Make the filtered origin's contents reachable — uncollapse the band.\n state.collapsedOrigins.delete(origin);\n } else {\n state.message = pc.dim(`No ${ORIGIN_META[origin].label} assets to show.`);\n return;\n }\n state.cursor = 0;\n rebuildVisible();\n}\n\n// ── Collapse / expand (assets tab) ───────────────────────────────────────────\n\nfunction expandUnderCursor(): void {\n const row = state.visibleRows[state.cursor];\n if (!row) return;\n const origin = rowOrigin(row);\n if (row.type === \"origin-header\" && state.collapsedOrigins.has(origin)) {\n state.collapsedOrigins.delete(origin);\n rebuildVisible();\n } else if (\n row.type === \"publisher-header\" &&\n state.collapsedSources.has(srcKey(origin, row.source!))\n ) {\n state.collapsedSources.delete(srcKey(origin, row.source!));\n rebuildVisible();\n } else if (row.type === \"domain-header\") {\n const dk = domainKey(origin, row.source!, row.domainSlug ?? NO_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 const origin = rowOrigin(row);\n\n if (row.type === \"origin-header\") {\n if (!state.collapsedOrigins.has(origin)) {\n state.collapsedOrigins.add(origin);\n rebuildVisible();\n }\n return;\n }\n\n if (row.type === \"publisher-header\") {\n const sk = srcKey(origin, row.source!);\n if (!state.collapsedSources.has(sk)) {\n state.collapsedSources.add(sk);\n rebuildVisible();\n } else {\n // Already collapsed → jump to parent origin header\n const idx = findLastIndex(\n state.visibleRows,\n state.cursor,\n (r: AssetRow) => r.type === \"origin-header\",\n );\n if (idx >= 0) state.cursor = idx;\n }\n return;\n }\n\n if (row.type === \"domain-header\") {\n const dk = domainKey(origin, row.source!, row.domainSlug ?? NO_DOMAIN);\n if (!state.collapsedDomains.has(dk)) {\n state.collapsedDomains.add(dk);\n rebuildVisible();\n } else {\n // Already collapsed → jump to parent publisher header\n const idx = findLastIndex(\n state.visibleRows,\n state.cursor,\n (r: AssetRow) => r.type === \"publisher-header\",\n );\n if (idx >= 0) state.cursor = idx;\n }\n return;\n }\n\n // asset / domain-info → jump to nearest header above\n const idx = findLastIndex(\n state.visibleRows,\n state.cursor,\n (r: AssetRow) =>\n r.type === \"domain-header\" || r.type === \"publisher-header\" || r.type === \"origin-header\",\n );\n if (idx >= 0) state.cursor = idx;\n}\n\n/**\n * Toggle the info region of the domain the cursor is in — pressed via `[d]`.\n * Works whether the cursor sits on the `domain-header`, its `domain-info` line,\n * or any asset under it. No-op outside a domain.\n */\nfunction toggleDomainInfoUnderCursor(): void {\n const row = state.visibleRows[state.cursor];\n if (!row) return;\n const origin = rowOrigin(row);\n let key: string | null = null;\n if (row.type === \"domain-header\" || row.type === \"domain-info\") {\n key = domainKey(origin, row.source!, row.domainSlug ?? NO_DOMAIN);\n } else if (row.type === \"asset\" && row.underDomain) {\n key = domainKey(origin, rowPublisher(row), rowDomain(row));\n }\n if (!key) {\n state.message = pc.dim(\"No domain here — [d] opens a domain's info region.\");\n return;\n }\n if (state.expandedDomainInfo.has(key)) state.expandedDomainInfo.delete(key);\n else state.expandedDomainInfo.add(key);\n rebuildVisible();\n}\n\n// ── Collapse / expand / select (sources tab) ─────────────────────────────────\n\n/**\n * Header-targeted +/-/space on the Sources tab. Org and repo headers\n * bulk-install their subtree; a domain header (and the root / domain-info) is\n * navigational — \"handled\" so +/- do nothing, but never bulk-installs.\n */\nfunction actOnSourceHeader(row: AssetRow, action: Action): boolean {\n if (row.type === \"org-header\") {\n bulkSelection(sourceOrgRefs(state.sourceTreeRows, row.org!), action);\n return true;\n }\n if (row.type === \"repo-header\") {\n bulkSelection(sourceRepoRefs(state.sourceTreeRows, row.org!, row.source!), action);\n return true;\n }\n return row.type === \"source-root\" || row.type === \"domain-header\" || row.type === \"domain-info\";\n}\n\n/**\n * Apply a +/-/space selection to the Sources-tab row under the cursor. Headers\n * bulk-select via {@link actOnSourceHeader}; an asset leaf toggles its own\n * pending state (pressing the same key again clears it, mirroring the Assets tab).\n */\nfunction selectSourceUnderCursor(action: Action): void {\n const row = state.visibleSourceRows[state.cursor];\n if (!row) return;\n if (actOnSourceHeader(row, action === \"toggle\" ? \"toggle\" : action)) return;\n const ref = assetRefOf(row);\n if (!ref) return;\n if (action === \"toggle\") {\n setSelection(ref, \"toggle\");\n } else if (action === \"add\") {\n setSelection(ref, state.pendingAdds.has(ref) ? \"clear\" : \"add\");\n } else {\n setSelection(ref, state.pendingRemoves.has(ref) ? \"clear\" : \"remove\");\n }\n}\n\nfunction expandSourceUnderCursor(): void {\n const row = state.visibleSourceRows[state.cursor];\n if (!row) return;\n if (row.type === \"org-header\" && state.collapsedSourceOrgs.has(row.org!)) {\n state.collapsedSourceOrgs.delete(row.org!);\n rebuildVisibleSources();\n } else if (row.type === \"repo-header\") {\n const k = repoKey(row.org!, row.source!);\n if (state.collapsedSourceRepos.has(k)) {\n state.collapsedSourceRepos.delete(k);\n rebuildVisibleSources();\n }\n } else if (row.type === \"domain-header\") {\n const k = srcDomainKey(row.org!, row.source!, row.domainSlug ?? NO_DOMAIN);\n if (state.collapsedSourceDomains.has(k)) {\n state.collapsedSourceDomains.delete(k);\n rebuildVisibleSources();\n }\n }\n}\n\nfunction collapseOrJumpSourceUnderCursor(): void {\n const row = state.visibleSourceRows[state.cursor];\n if (!row) return;\n\n if (row.type === \"org-header\") {\n if (!state.collapsedSourceOrgs.has(row.org!)) {\n state.collapsedSourceOrgs.add(row.org!);\n rebuildVisibleSources();\n }\n return;\n }\n\n if (row.type === \"repo-header\") {\n const k = repoKey(row.org!, row.source!);\n if (!state.collapsedSourceRepos.has(k)) {\n state.collapsedSourceRepos.add(k);\n rebuildVisibleSources();\n } else {\n const idx = findLastIndex(\n state.visibleSourceRows,\n state.cursor,\n (r: AssetRow) => r.type === \"org-header\",\n );\n if (idx >= 0) state.cursor = idx;\n }\n return;\n }\n\n if (row.type === \"domain-header\") {\n const k = srcDomainKey(row.org!, row.source!, row.domainSlug ?? NO_DOMAIN);\n if (!state.collapsedSourceDomains.has(k)) {\n state.collapsedSourceDomains.add(k);\n rebuildVisibleSources();\n } else {\n const idx = findLastIndex(\n state.visibleSourceRows,\n state.cursor,\n (r: AssetRow) => r.type === \"repo-header\",\n );\n if (idx >= 0) state.cursor = idx;\n }\n return;\n }\n\n // asset / domain-info / root → jump to nearest header above.\n const idx = findLastIndex(\n state.visibleSourceRows,\n state.cursor,\n (r: AssetRow) =>\n r.type === \"domain-header\" || r.type === \"repo-header\" || r.type === \"org-header\",\n );\n if (idx >= 0) state.cursor = idx;\n}\n\n/** Toggle the info region of the source-tree domain the cursor is in (`[d]`). */\nfunction toggleSourceDomainInfoUnderCursor(): void {\n const row = state.visibleSourceRows[state.cursor];\n if (!row) return;\n let key: string | null = null;\n if (row.type === \"domain-header\" || row.type === \"domain-info\") {\n key = srcDomainKey(row.org!, row.source!, row.domainSlug ?? NO_DOMAIN);\n } else if (row.type === \"asset\" && row.underDomain) {\n key = srcDomainKey(rowOrg(row), rowGroup(row), rowDomain(row));\n }\n if (!key) {\n state.message = pc.dim(\"No domain here — [d] opens a domain's info region.\");\n return;\n }\n if (state.expandedSourceDomainInfo.has(key)) state.expandedSourceDomainInfo.delete(key);\n else state.expandedSourceDomainInfo.add(key);\n rebuildVisibleSources();\n}\n\n// ── Collapse / expand / select (libraries tab) ───────────────────────────────\n\n/**\n * Header-targeted +/-/space on the Libraries tab. A library header bulk-installs\n * its subtree; the root and a domain header (and domain-info) are navigational —\n * \"handled\" so +/- do nothing, but never bulk-installs.\n */\nfunction actOnLibraryHeader(row: AssetRow, action: Action): boolean {\n if (row.type === \"library-header\") {\n bulkSelection(libraryGroupRefs(state.libraryTreeRows, row.source!), action);\n return true;\n }\n return row.type === \"library-root\" || row.type === \"domain-header\" || row.type === \"domain-info\";\n}\n\n/**\n * Apply a +/-/space selection to the Libraries-tab row under the cursor. A\n * library header bulk-selects via {@link actOnLibraryHeader}; an asset leaf\n * toggles its own pending state (pressing the same key again clears it).\n */\nfunction selectLibraryUnderCursor(action: Action): void {\n const row = state.visibleLibraryRows[state.cursor];\n if (!row) return;\n if (actOnLibraryHeader(row, action)) return;\n const ref = assetRefOf(row);\n if (!ref) return;\n if (action === \"toggle\") {\n setSelection(ref, \"toggle\");\n } else if (action === \"add\") {\n setSelection(ref, state.pendingAdds.has(ref) ? \"clear\" : \"add\");\n } else {\n setSelection(ref, state.pendingRemoves.has(ref) ? \"clear\" : \"remove\");\n }\n}\n\nfunction expandLibraryUnderCursor(): void {\n const row = state.visibleLibraryRows[state.cursor];\n if (!row) return;\n if (row.type === \"library-header\" && state.collapsedLibraryGroups.has(row.source!)) {\n state.collapsedLibraryGroups.delete(row.source!);\n rebuildVisibleLibraries();\n } else if (row.type === \"domain-header\") {\n const k = libDomainKey(row.source!, row.domainSlug ?? NO_DOMAIN);\n if (state.collapsedLibraryDomains.has(k)) {\n state.collapsedLibraryDomains.delete(k);\n rebuildVisibleLibraries();\n }\n }\n}\n\nfunction collapseOrJumpLibraryUnderCursor(): void {\n const row = state.visibleLibraryRows[state.cursor];\n if (!row) return;\n\n if (row.type === \"library-header\") {\n if (!state.collapsedLibraryGroups.has(row.source!)) {\n state.collapsedLibraryGroups.add(row.source!);\n rebuildVisibleLibraries();\n } else {\n const idx = findLastIndex(\n state.visibleLibraryRows,\n state.cursor,\n (r: AssetRow) => r.type === \"library-root\",\n );\n if (idx >= 0) state.cursor = idx;\n }\n return;\n }\n\n if (row.type === \"domain-header\") {\n const k = libDomainKey(row.source!, row.domainSlug ?? NO_DOMAIN);\n if (!state.collapsedLibraryDomains.has(k)) {\n state.collapsedLibraryDomains.add(k);\n rebuildVisibleLibraries();\n } else {\n const idx = findLastIndex(\n state.visibleLibraryRows,\n state.cursor,\n (r: AssetRow) => r.type === \"library-header\",\n );\n if (idx >= 0) state.cursor = idx;\n }\n return;\n }\n\n // asset / domain-info / root → jump to nearest header above.\n const idx = findLastIndex(\n state.visibleLibraryRows,\n state.cursor,\n (r: AssetRow) => r.type === \"domain-header\" || r.type === \"library-header\",\n );\n if (idx >= 0) state.cursor = idx;\n}\n\n/** Toggle the info region of the library-tree domain the cursor is in (`[d]`). */\nfunction toggleLibraryDomainInfoUnderCursor(): void {\n const row = state.visibleLibraryRows[state.cursor];\n if (!row) return;\n let key: string | null = null;\n if (row.type === \"domain-header\" || row.type === \"domain-info\") {\n key = libDomainKey(row.source!, row.domainSlug ?? NO_DOMAIN);\n } else if (row.type === \"asset\" && row.underDomain) {\n key = libDomainKey(rowGroup(row), rowDomain(row));\n }\n if (!key) {\n state.message = pc.dim(\"No domain here — [d] opens a domain's info region.\");\n return;\n }\n if (state.expandedLibraryDomainInfo.has(key)) state.expandedLibraryDomainInfo.delete(key);\n else state.expandedLibraryDomainInfo.add(key);\n rebuildVisibleLibraries();\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 {\n keys: [\"\\x1b[A\", \"k\"],\n run: async () => {\n moveCursor(-1);\n await previewSoftDepsUnderCursor();\n },\n },\n {\n keys: [\"\\x1b[B\", \"j\"],\n run: async () => {\n moveCursor(1);\n await previewSoftDepsUnderCursor();\n },\n },\n\n // Collapse / expand — assets tab\n { keys: [\"\\x1b[C\"], when: TAB_ASSETS, run: expandUnderCursor },\n { keys: [\"\\x1b[D\"], when: TAB_ASSETS, run: collapseOrJumpUnderCursor },\n\n // Collapse / expand — sources tab\n { keys: [\"\\x1b[C\"], when: TAB_SOURCES, run: expandSourceUnderCursor },\n { keys: [\"\\x1b[D\"], when: TAB_SOURCES, run: collapseOrJumpSourceUnderCursor },\n\n // Collapse / expand — libraries tab\n { keys: [\"\\x1b[C\"], when: TAB_LIBRARIES, run: expandLibraryUnderCursor },\n { keys: [\"\\x1b[D\"], when: TAB_LIBRARIES, run: collapseOrJumpLibraryUnderCursor },\n\n // + : assets → bulk-add or single-add toggle\n {\n keys: [\"+\"],\n when: TAB_ASSETS,\n run: async () => {\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 await previewSoftDepsUnderCursor();\n },\n },\n\n // Sources tab: + / - / space select (asset leaf or org/repo bulk header).\n { keys: [\"+\"], when: TAB_SOURCES, run: () => selectSourceUnderCursor(\"add\") },\n { keys: [\"-\"], when: TAB_SOURCES, run: () => selectSourceUnderCursor(\"remove\") },\n { keys: [\" \"], when: TAB_SOURCES, run: () => selectSourceUnderCursor(\"toggle\") },\n { keys: [\"a\", \"\\r\", \"\\n\"], when: TAB_SOURCES, run: applyChanges },\n { keys: [\"i\"], when: TAB_SOURCES, run: showInfo },\n { keys: [\"d\"], when: TAB_SOURCES, run: toggleSourceDomainInfoUnderCursor },\n\n // Libraries tab: + / - / space select (asset leaf or library bulk header).\n { keys: [\"+\"], when: TAB_LIBRARIES, run: () => selectLibraryUnderCursor(\"add\") },\n { keys: [\"-\"], when: TAB_LIBRARIES, run: () => selectLibraryUnderCursor(\"remove\") },\n { keys: [\" \"], when: TAB_LIBRARIES, run: () => selectLibraryUnderCursor(\"toggle\") },\n { keys: [\"a\", \"\\r\", \"\\n\"], when: TAB_LIBRARIES, run: applyChanges },\n { keys: [\"i\"], when: TAB_LIBRARIES, run: showInfo },\n { keys: [\"d\"], when: TAB_LIBRARIES, run: toggleLibraryDomainInfoUnderCursor },\n\n // - : assets → bulk-remove or single-remove toggle\n {\n keys: [\"-\"],\n when: TAB_ASSETS,\n run: async () => {\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 await previewSoftDepsUnderCursor();\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 // Domain info region — assets only. Toggles the ⓘ line truncated ↔ full.\n { keys: [\"d\"], when: TAB_ASSETS, run: toggleDomainInfoUnderCursor },\n\n // Origin filter — assets only. 1/2/3/4 isolate one origin, 0 clears.\n { keys: [\"1\"], when: TAB_ASSETS, run: () => setOriginFilter(\"library\") },\n { keys: [\"2\"], when: TAB_ASSETS, run: () => setOriginFilter(\"source\") },\n { keys: [\"3\"], when: TAB_ASSETS, run: () => setOriginFilter(\"factory\") },\n { keys: [\"4\"], when: TAB_ASSETS, run: () => setOriginFilter(\"store\") },\n { keys: [\"0\"], when: TAB_ASSETS, run: () => setOriginFilter(null) },\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 // The TUI needs a real terminal for raw-mode key input. Fail fast — before any\n // asset loading — when stdin is piped/redirected (CI, `printf | skaile manage`):\n // `setRawMode` is undefined there, otherwise an uncaught TypeError later.\n if (!process.stdin.isTTY || typeof process.stdin.setRawMode !== \"function\") {\n console.error(\"skaile manage requires an interactive terminal (TTY). Run it directly in your shell.\");\n process.exit(1);\n }\n\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. The Sources tab\n * renders registered github sources as a `Sources → org → repo → domain → asset`\n * tree (domains default collapsed) and supports the same install/remove flow as\n * Assets. CRUD for sources and libraries remains in the shell\n * (`skaile source …` / `skaile library …`); the Libraries tab is still a\n * read-only scaffold 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, mkdirSync, readdirSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport {\n decodeSkaileManifest,\n getGlobalCacheDir,\n parseFrontmatter,\n SKAILE_MANIFEST_FILENAME,\n sourceCacheKey,\n WorkspaceYamlEditor,\n} from \"@skaile/workspaces/core\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, S } from \"../helpers.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 clones the remote repo into the canonical sources cache\n * (`<cache>/sources/<slug>`), registers it in the project's `skaile.yaml`\n * `sources[]`, then installs the requested skill via the canonical resolver —\n * building a publisher-qualified ref (`skill:<name>@<publisher>`, publisher\n * from the source's `skaile.yaml` or its GitHub org).\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(\n \"Clone a repo, register it in the project's skaile.yaml sources[], and install a skill from it\",\n )\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 const projYaml = path.join(projectDir, \"skaile.yaml\");\n if (!existsSync(projYaml)) {\n logErr(`No skaile.yaml in ${projectDir} — run \\`skaile init\\` first.`);\n process.exit(1);\n }\n if (!/^(?:https?:|git@|git:)/.test(url)) {\n logErr(\n \"npx skills add requires a git URL — resolution runs through the project's sources[].\",\n );\n process.exit(1);\n }\n\n const spinner = p.spinner();\n\n // 1. Clone into the canonical sources cache (<cache>/sources/<key>) —\n // the exact location the resolver reads for the project's sources[].\n const key = sourceCacheKey(url);\n const clonePath = path.join(getGlobalCacheDir(), key);\n spinner.start(`Cloning ${url}`);\n try {\n if (!existsSync(clonePath)) {\n mkdirSync(path.dirname(clonePath), { recursive: true });\n execSync(`git clone ${url} ${clonePath}`, { stdio: \"ignore\" });\n }\n spinner.stop(`Cloned to ${key}`);\n } catch (err) {\n spinner.stop(\"Clone failed\");\n logErr(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n\n // 2. Register the source in the project skaile.yaml.\n const editor = WorkspaceYamlEditor.load(projYaml);\n editor.setSource({ url });\n editor.save();\n\n // 3. Install the skill via the canonical resolver. The ref must be\n // publisher-qualified; publisher is the source's declared one, else\n // its GitHub org.\n const publisher = resolvePublisher(clonePath, url);\n if (!publisher) {\n logErr(\n `Could not determine the publisher for \"${opts.skill}\". Declare ` +\n \"`publisher:` in the source's skaile.yaml, or use a github URL.\",\n );\n process.exit(1);\n }\n // The canonical resolver keys skills by directory name; accept the\n // SKILL.md `name:` too and map it to the directory the resolver expects.\n const skillName = resolveSkillName(clonePath, opts.skill);\n if (skillName !== opts.skill) {\n logInfo(`Resolved \"${opts.skill}\" → directory \"${skillName}\".`);\n }\n const skillRef = `skill:@${publisher}/${skillName}`;\n const am = new AssetManager({ projectDir, global: opts.global, driverTarget: opts.target });\n spinner.start(`Installing ${skillRef}`);\n try {\n const added = await 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(`Source registered in skaile.yaml — manage via ${S.cmd(\"skaile source\")}.`);\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\n/**\n * Resolve the publisher for a freshly-cloned source: a `publisher:` declared in\n * the source's own `skaile.manifest.yaml` wins, else it is inherited from the\n * source URL's GitHub org (mirrors the provenance walker's rule).\n */\nfunction resolvePublisher(clonePath: string, url: string): string | undefined {\n const manifestPath = path.join(clonePath, SKAILE_MANIFEST_FILENAME);\n if (existsSync(manifestPath)) {\n try {\n const { manifest } = decodeSkaileManifest(readFileSync(manifestPath, \"utf8\"));\n if (typeof manifest.publisher === \"string\" && manifest.publisher.length > 0) {\n return manifest.publisher;\n }\n } catch {}\n }\n return url.match(/github\\.com[/:]([^/]+)\\/[^/]+/)?.[1];\n}\n\n/**\n * Map a requested skill identifier to the directory name the canonical resolver\n * keys by. An exact `skills/<requested>/` directory wins; otherwise match a\n * SKILL.md whose frontmatter `name:` equals `requested` (the agentskills.io\n * layout lets the declared name differ from the directory). Falls back to\n * `requested` so the resolver emits a clear not-found.\n */\nfunction resolveSkillName(clonePath: string, requested: string): string {\n const skillsDir = path.join(clonePath, \"skills\");\n if (existsSync(path.join(skillsDir, requested, \"SKILL.md\"))) return requested;\n if (!existsSync(skillsDir)) return requested;\n for (const entry of readdirSync(skillsDir, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const md = path.join(skillsDir, entry.name, \"SKILL.md\");\n if (!existsSync(md)) continue;\n try {\n const { data } = parseFrontmatter(readFileSync(md, \"utf8\"));\n if (typeof data.name === \"string\" && data.name === requested) return entry.name;\n } catch {}\n }\n return requested;\n}\n","import path from \"node:path\";\nimport { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport { SUPPORTED_DRIVER_TARGETS } from \"@skaile/workspaces/core\";\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.publisher)} ${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","/**\n * `skaile plugin` — manage registry plugins (drivers / connectors / deploy\n * targets) declared via `plugins:` in `skaile.yaml`.\n *\n * Not to be confused with `skaile integration` (the coding-agent adapter,\n * formerly `skaile plugin`). This group edits the `plugins:` list, reconciles\n * the project-local plugin store, and lists what each declared plugin\n * contributes to `pluginRegistry`.\n *\n * skaile plugin install <spec> [--project-dir <p>]\n * skaile plugin remove <name> [--project-dir <p>]\n * skaile plugin list [--project-dir <p>]\n */\n\nimport path from \"node:path\";\nimport { Command } from \"commander\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\n\ninterface ProjectOpts {\n projectDir: string;\n}\n\n/** Wrap an async action so a thrown error prints via logErr + sets a non-zero exit. */\nfunction action(fn: (...args: never[]) => Promise<void>) {\n return async (...args: unknown[]): Promise<void> => {\n try {\n await (fn as (...a: unknown[]) => Promise<void>)(...args);\n } catch (err) {\n logErr(err instanceof Error ? err.message : String(err));\n process.exitCode = 1;\n }\n };\n}\n\n/** Reconcile + report the project-local plugin store for the given plugin list. */\nasync function reconcileAndReport(projectDir: string, plugins: string[]): Promise<void> {\n const { reconcilePlugins } = await import(\"../plugin-store/index.ts\");\n if (plugins.length === 0) {\n logInfo(\"No plugins declared — nothing to reconcile.\");\n return;\n }\n try {\n const result = await reconcilePlugins(projectDir, plugins);\n if (result.changed) logOk(`Reconciled plugin store (${result.reason}).`);\n else logInfo(`Plugin store ${result.reason}.`);\n } catch (err) {\n // A reconcile failure (e.g. package not published yet) is surfaced but does\n // not undo the skaile.yaml edit — the spec is recorded, install can retry.\n logWarn(`reconcile skipped: ${err instanceof Error ? err.message : String(err)}`);\n }\n}\n\nasync function runInstall(spec: string, opts: ProjectOpts): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n const { WorkspaceYamlEditor } = await import(\"@skaile/workspaces/core\");\n const { specName } = await import(\"../plugin-store/index.ts\");\n\n const yamlPath = path.join(projectDir, \"skaile.yaml\");\n const editor = WorkspaceYamlEditor.load(yamlPath);\n const replaced = editor.addPlugin(spec, specName);\n editor.save();\n\n if (replaced) logOk(`Updated ${S.cmd(specName(spec))} → ${S.cmd(spec)} in skaile.yaml`);\n else logOk(`Added ${S.cmd(spec)} to skaile.yaml plugins`);\n\n await reconcileAndReport(projectDir, editor.getPlugins());\n}\n\nasync function runRemove(name: string, opts: ProjectOpts): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n const { WorkspaceYamlEditor } = await import(\"@skaile/workspaces/core\");\n const { specName } = await import(\"../plugin-store/index.ts\");\n\n const yamlPath = path.join(projectDir, \"skaile.yaml\");\n const editor = WorkspaceYamlEditor.load(yamlPath);\n const removed = editor.removePlugin(name, specName);\n if (!removed) {\n logInfo(`No plugin matching ${S.cmd(name)} in skaile.yaml plugins.`);\n return;\n }\n editor.save();\n logOk(`Removed ${S.cmd(name)} from skaile.yaml plugins`);\n\n await reconcileAndReport(projectDir, editor.getPlugins());\n}\n\nasync function runList(opts: ProjectOpts): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n const { resolveSkWorkspaceConfig } = await import(\"@skaile/workspaces/core\");\n const config = resolveSkWorkspaceConfig(projectDir);\n const declared = config.plugins ?? [];\n\n console.log();\n console.log(S.heading(\" Declared plugins (skaile.yaml):\"));\n if (declared.length === 0) {\n console.log(` ${S.dim(\"(none)\")}`);\n } else {\n for (const spec of declared) console.log(` ${S.dim(\"·\")} ${S.cmd(spec)}`);\n }\n\n // Load the declared plugins into a fresh registry so `list` reflects exactly\n // what this project's plugins contribute — independent of any built-ins the\n // process already registered. A load failure (store not materialized yet) is\n // non-fatal: the declared specs above are still printed.\n const { createPluginRegistry } = await import(\"@skaile/workspaces/plugin-registry\");\n const registry = createPluginRegistry();\n if (declared.length > 0) {\n try {\n const { loadPlugins } = await import(\"../plugin-store/index.ts\");\n const result = await loadPlugins(projectDir, declared, registry);\n for (const f of result.failed) logWarn(f.error);\n } catch (err) {\n logWarn(`could not load plugins: ${err instanceof Error ? err.message : String(err)}`);\n }\n }\n\n const kinds = [\n { kind: \"driver\" as const, label: \"drivers\" },\n { kind: \"connector\" as const, label: \"connectors\" },\n { kind: \"deployTarget\" as const, label: \"deploy targets\" },\n ];\n console.log();\n console.log(S.heading(\" Contributed targets:\"));\n let any = false;\n for (const { kind, label } of kinds) {\n const metas = registry.list(kind);\n if (metas.length === 0) continue;\n any = true;\n console.log(` ${S.label(label)}: ${metas.map((m) => S.cmd(m.id)).join(\", \")}`);\n }\n if (!any) console.log(` ${S.dim(\"(none — plugins not installed, or contribute nothing)\")}`);\n console.log();\n}\n\n/**\n * Creates the `skaile plugin` command group (registry plugins).\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 registry plugins (drivers / connectors / deploy targets) declared in skaile.yaml\",\n );\n\n cmd\n .command(\"install <spec>\")\n .description(\"Add a plugin spec to skaile.yaml plugins and reconcile the store\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(action(runInstall as never));\n\n cmd\n .command(\"remove <name>\")\n .description(\"Remove a plugin (by package name) from skaile.yaml plugins and reconcile\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(action(runRemove as never));\n\n cmd\n .command(\"list\")\n .description(\"List declared plugins and the targets they contribute\")\n .option(\"--project-dir <path>\", \"Project directory\", process.cwd())\n .action(action(runList as never));\n\n cmd.action(() => cmd.help());\n return cmd;\n}\n","/**\n * `skaile preset apply` — pure core: reverse a `.preset.yaml` snapshot back into\n * a workspace's `skaile.yaml` sections (the inverse of `preset export`).\n *\n * These helpers are I/O- and prompt-free so they can be unit-tested in\n * isolation. The Commander action in `preset-cmd.ts` owns file reads, the\n * interactive prompting for non-secret inputs, the editor writes, and the\n * post-apply install.\n */\n\nimport type {\n ConnectorDeclaration,\n McpServerDeclaration,\n SourceEntry,\n} from \"@skaile/workspaces/core\";\nimport { getDefaultValue, isSecretPlaceholder } from \"@skaile/workspaces/library\";\nimport type { Placeholder, PresetManifest, PresetItem } from \"@skaile/workspaces/types/manifests\";\n\n/** The workspace sections produced by reversing a preset's items. */\nexport interface WorkspaceItems {\n /** Bare dependency refs, copied verbatim from non-connector/mcp items. */\n dependencies: string[];\n /** Connector declarations rebuilt from `connector:<driver>` items. */\n connectors: ConnectorDeclaration[];\n /** MCP server declarations rebuilt from `mcp:<id>` items. */\n mcpServers: McpServerDeclaration[];\n /** Git sources the deps resolve from — registered before install. */\n sources: SourceEntry[];\n /** Secret placeholder keys the user must export as env vars before running. */\n envVarsToSet: string[];\n}\n\n/** A single `${INPUT:KEY}` / `${SECRET:KEY}` token found in a config string. */\nconst TOKEN_RE = /\\$\\{(INPUT|SECRET):([^}]+)\\}/g;\n\n/** Rejection message for nested preset refs (unsupported by v1 apply). */\nexport const NESTED_PRESET_UNSUPPORTED = \"nested presets are not supported by `preset apply` yet\";\n\n/**\n * Resolve one placeholder to the value that lands in `skaile.yaml`.\n *\n * A secret placeholder NEVER yields its raw value — it resolves to an\n * `env:<KEY>` indirection reference so the credential stays out of the file.\n * A non-secret placeholder resolves to the provided literal (or its declared\n * default); a required non-secret placeholder with neither throws.\n *\n * @param placeholder - The placeholder definition from the preset item.\n * @param providedValue - Value supplied via `--input`/prompt, or `undefined`.\n * @returns `{ envRef }` for secrets, `{ value }` for resolved literals.\n * @throws When a required non-secret placeholder has no value and no default.\n */\nexport function resolvePlaceholderValue(\n placeholder: Placeholder,\n providedValue: string | undefined,\n): { value: string } | { envRef: string } {\n if (isSecretPlaceholder(placeholder)) {\n return { envRef: `env:${placeholder.key}` };\n }\n\n const fallback = getDefaultValue(placeholder);\n const resolved = providedValue ?? (fallback !== undefined ? String(fallback) : undefined);\n if (resolved === undefined) {\n // `required` defaults to true (only an explicit `false` opts out).\n if (placeholder.required !== false) {\n throw new Error(`Placeholder \"${placeholder.key}\" is required but no value was provided`);\n }\n return { value: \"\" };\n }\n return { value: resolved };\n}\n\n/**\n * Reverse a preset's items into additive `skaile.yaml` sections.\n *\n * Items are classified by **`id` presence** (export writes one on connector/mcp\n * items, never on deps), so a bare `mcp:excel` shorthand stays a dependency.\n * Secret tokens resolve to `env:<KEY>` refs (collected into `envVarsToSet`).\n *\n * @param preset - The validated preset manifest.\n * @param values - Resolved non-secret input values, keyed by placeholder key.\n * @returns The workspace sections plus the secret env-var keys to set.\n * @throws When a required non-secret placeholder is unresolved, or a nested\n * preset ref is encountered (unsupported by apply).\n */\nexport function presetItemsToWorkspace(\n preset: PresetManifest,\n values: Record<string, string>,\n): WorkspaceItems {\n const dependencies: string[] = [];\n const connectors: ConnectorDeclaration[] = [];\n const mcpServers: McpServerDeclaration[] = [];\n const envVarsToSet = new Set<string>();\n\n for (const item of preset.items) {\n const ref = item.ref;\n\n if (ref.startsWith(\"preset:\")) throw new Error(NESTED_PRESET_UNSUPPORTED);\n\n if (item.id && ref.startsWith(\"connector:\")) {\n const config = resolveItemConfig(item, preset, values, envVarsToSet);\n connectors.push({\n id: item.id,\n driver: ref.slice(\"connector:\".length),\n ...config,\n } as ConnectorDeclaration);\n } else if (item.id && ref.startsWith(\"mcp:\")) {\n const config = resolveItemConfig(item, preset, values, envVarsToSet);\n mcpServers.push({ id: item.id, ...config } as McpServerDeclaration);\n } else {\n dependencies.push(ref);\n }\n }\n\n const sources: SourceEntry[] = (preset.sources ?? []).map((s) =>\n s.pin ? { url: s.url, pin: s.pin } : { url: s.url },\n );\n\n return { dependencies, connectors, mcpServers, sources, envVarsToSet: [...envVarsToSet] };\n}\n\n/**\n * Walk an item's `config`, substituting interpolation tokens. Secret tokens\n * collapse the whole value to `env:<KEY>` (and record the key); input tokens\n * are replaced with their resolved literal in place.\n */\nfunction resolveItemConfig(\n item: PresetItem,\n preset: PresetManifest,\n values: Record<string, string>,\n envVarsToSet: Set<string>,\n): Record<string, unknown> {\n const byKey = placeholderIndex(item, preset);\n const resolve = (key: string): { value: string } | { envRef: string } => {\n const ph = byKey.get(key) ?? { key, type: \"text\", required: true };\n return resolvePlaceholderValue(ph, values[key]);\n };\n return substituteNode(item.config ?? {}, resolve, envVarsToSet) as Record<string, unknown>;\n}\n\n/** Index this item's placeholders (falling back to preset-level inputs) by key. */\nfunction placeholderIndex(item: PresetItem, preset: PresetManifest): Map<string, Placeholder> {\n const map = new Map<string, Placeholder>();\n for (const input of preset.inputs ?? []) map.set(input.key, input as Placeholder);\n for (const ph of item.placeholders ?? []) map.set(ph.key, ph);\n return map;\n}\n\nfunction substituteNode(\n node: unknown,\n resolve: (key: string) => { value: string } | { envRef: string },\n envVarsToSet: Set<string>,\n): unknown {\n if (typeof node === \"string\") return substituteString(node, resolve, envVarsToSet);\n if (Array.isArray(node)) return node.map((el) => substituteNode(el, resolve, envVarsToSet));\n if (node && typeof node === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(node)) out[k] = substituteNode(v, resolve, envVarsToSet);\n return out;\n }\n return node;\n}\n\nfunction substituteString(\n value: string,\n resolve: (key: string) => { value: string } | { envRef: string },\n envVarsToSet: Set<string>,\n): string {\n const tokens = [...value.matchAll(TOKEN_RE)];\n if (tokens.length === 0) return value;\n\n // A token is a secret when its namespace is `SECRET` (authoritative, matching\n // the library's canonical interpolation) OR its placeholder is `type: secret`.\n // Scan by namespace FIRST (no resolve): otherwise resolving an earlier\n // required-but-missing input would throw and hide the real \"sole token\" error.\n const secret =\n tokens.find(([, ns]) => ns === \"SECRET\") ??\n tokens.find(([, , key]) => \"envRef\" in resolve(key!));\n if (secret) {\n const [full, , key] = secret;\n // A secret resolves to an `env:<KEY>` reference; it MUST be the whole value.\n // Mixing it with other tokens or literal text would drop that text silently,\n // so reject it (mirrors the library's \"SECRET must be the sole token\").\n if (tokens.length > 1 || full !== value) {\n throw new Error(\n `Secret \"${key}\" must be the only token in its value — remove the surrounding tokens/text`,\n );\n }\n envVarsToSet.add(key!);\n return `env:${key}`;\n }\n\n return value.replace(TOKEN_RE, (_m, _ns, key: string) => {\n const resolved = resolve(key);\n return \"envRef\" in resolved ? resolved.envRef : resolved.value;\n });\n}\n","/**\n * `skaile preset export` — pure core: turn a project's own `skaile.yaml`\n * (`SkWorkspaceConfig`) into a shareable `PresetManifest`, with first-class\n * detection and redaction of inline secrets.\n *\n * These helpers are intentionally free of I/O and prompting so they can be\n * unit-tested in isolation; the Commander action in `preset-cmd.ts` owns file\n * reads/writes, the loud stderr summary, and interactive confirmation.\n */\n\nimport { existsSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport { FACTORY_SOURCE_URL, normalizeRepoUrl } from \"@skaile/workspaces/asset-manager\";\nimport {\n type LockFile,\n type SkWorkspaceConfig,\n type SourceEntry,\n storeManifestSlug,\n} from \"@skaile/workspaces/core\";\nimport { getStoreManifestsDir } from \"@skaile/workspaces/library\";\nimport type { Placeholder, PresetItem, PresetManifest } from \"@skaile/workspaces/types/manifests\";\n\n/** One inline-secret hit: which item, where in its config, and a safe preview. */\nexport interface SecretFinding {\n /** `id` of the offending preset item (connector/mcp id). */\n itemId: string;\n /** Dotted path into the item's `config`, e.g. `options.dsn` or `env.TOKEN`. */\n path: string;\n /** Value with its secret portion masked, safe to print to a terminal. */\n maskedValue: string;\n}\n\n// ── Preset construction ───────────────────────────────────────────────────────\n\n/**\n * Build a self-consistent {@link PresetManifest} from a workspace config.\n *\n * Mapping (a future `preset apply` reverses this):\n * - `dependencies[]` → `{ ref }` items, ref copied VERBATIM (no re-pinning).\n * - `connectors[]` → `{ id, ref: \"connector:<driver>\", config }` items.\n * - `mcp_servers[]` → `{ id, ref: \"mcp:<id>\", config }` items.\n *\n * `agent_config` is deliberately NOT exported — it is personal/machine-specific\n * (driver, model, API-cloud transport) and does not belong in a shared preset.\n *\n * @param config - The project-own `skaile.yaml` (NOT the merged/global config).\n * @param name - Preset name; also the default output filename stem.\n * @param sources - Git sources the dep items resolve from (see {@link neededSources}).\n * @returns A manifest that passes `validatePreset` whenever it has ≥1 item.\n */\nexport function buildPresetFromWorkspace(\n config: SkWorkspaceConfig,\n name: string,\n sources: SourceEntry[] = [],\n): PresetManifest {\n const items: PresetItem[] = [];\n\n for (const ref of config.dependencies ?? []) {\n items.push({ ref });\n }\n\n for (const connector of config.connectors ?? []) {\n const config_ = compact({\n access: connector.access,\n auth: connector.auth,\n options: connector.options,\n version: connector.version,\n tags: connector.tags,\n });\n items.push({\n id: connector.id,\n ref: `connector:${connector.driver}`,\n ...(config_ ? { config: config_ } : {}),\n });\n }\n\n for (const mcp of config.mcp_servers ?? []) {\n // `auth`/`recipe`/`mount` are intentionally NOT exported: a raw mcp `auth`\n // token would be a leak vector, and the rest are machine-specific. Round-trip\n // fidelity is deliberately traded for share-safety here.\n const config_ = compact({\n transport: mcp.transport,\n command: mcp.command,\n args: mcp.args,\n env: mcp.env,\n url: mcp.url,\n headers: mcp.headers,\n });\n items.push({\n id: mcp.id,\n ref: `mcp:${mcp.id}`,\n ...(config_ ? { config: config_ } : {}),\n });\n }\n\n const project = config.name ?? name;\n return {\n name,\n version: \"1.0.0\",\n description: `Exported from ${project} workspace`,\n items,\n // Never let a credential-bearing source URL reach a shareable preset.\n ...(sources.length > 0\n ? { sources: sources.map((s) => ({ ...s, url: stripUrlCredentials(s.url) })) }\n : {}),\n };\n}\n\n// ── Source provenance ─────────────────────────────────────────────────────────\n\n/**\n * The subset of `config.sources` a cross-repo apply must register before install.\n *\n * The lock's top-level `sources` list is the full **transitive** closure of every\n * source that contributed a resolved asset, so filtering `config.sources` to it\n * (minus the always-available factory source) captures direct + transitive deps\n * with no drop risk. With no lock (provenance unknown), every non-factory source\n * is kept so apply still resolves. Connectors/mcp carry no source.\n */\nexport function neededSources(config: SkWorkspaceConfig, lock: LockFile | null): SourceEntry[] {\n const factoryUrl = normalizeRepoUrl(FACTORY_SOURCE_URL);\n const nonFactory = (config.sources ?? []).filter((s) => normalizeRepoUrl(s.url) !== factoryUrl);\n if (!lock) return nonFactory;\n const inClosure = new Set(lock.sources.map((s) => normalizeRepoUrl(s.url)));\n return nonFactory.filter((s) => inClosure.has(normalizeRepoUrl(s.url)));\n}\n\n/**\n * Of the captured `neededSources`, the ones whose assets resolve through a\n * MACHINE-LOCAL curated store manifest (`~/.skaile/store/manifests/<slug>.yaml`,\n * written by `source manifest init`). Those overlays are not shared with the\n * preset, so a recipient on another machine won't reproduce the same resolution\n * until the sidecar is itself published. Returns the affected source URLs (empty\n * when none carry a sidecar).\n */\nexport function sourcesWithSidecar(sources: SourceEntry[]): string[] {\n const dir = getStoreManifestsDir();\n return sources\n .filter((s) => existsSync(path.join(dir, `${storeManifestSlug(s.url)}.yaml`)))\n .map((s) => s.url);\n}\n\n/** Drop `undefined`/`null` fields; return `undefined` when nothing remains. */\nfunction compact(obj: Record<string, unknown>): Record<string, unknown> | undefined {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(obj)) {\n // Null too — YAML parses a blank field (`auth: ~`) to null, which must not\n // survive into the exported preset as `auth: null`.\n if (v !== undefined && v !== null) out[k] = v;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\n// ── Secret detection ──────────────────────────────────────────────────────────\n\n/** SSOT prefix list for values that are already safe indirection references. */\nconst SECRET_REFERENCE_PREFIXES = [\"env\", \"forge\", \"secret\", \"op\", \"kp\", \"oauth\", \"pat\"] as const;\nconst SECRET_REFERENCE_RE = new RegExp(`^(${SECRET_REFERENCE_PREFIXES.join(\"|\")}):`);\n\n/**\n * True when `value` is a secret *reference* (indirection) rather than an inline\n * secret — e.g. `env:DATABASE_URL`, `forge:api-key`, `pat:env:GH_TOKEN`. Such\n * values are safe to publish and are never flagged.\n */\nexport function isSecretReference(value: string): boolean {\n return SECRET_REFERENCE_RE.test(value);\n}\n\n/** A `${INPUT:KEY}` / `${SECRET:KEY}` interpolation is a resolved placeholder. */\nconst PLACEHOLDER_RE = /^\\$\\{(INPUT|SECRET):[^}]+\\}$/;\n\n/**\n * Key names that mark a credential-bearing field. Matched component-wise with\n * `_`/`-` as separators so env-style names hit (`GH_TOKEN`, `API_KEY`) while\n * innocent substrings do NOT (`monkey`, `keyboard`, `Content-Type`). `url`/`conn`\n * are deliberately absent — a bare URL/host is not a secret; credential-bearing\n * URLs are caught by {@link PROTO_CREDENTIAL_URL_RE}. Over-flagging trains users\n * to ignore the warning, so precision here matters as much as recall.\n */\nconst SUSPICIOUS_KEY_RE =\n /(?:^|[_-])(?:token|password|passwd|secret|apikey|key|dsn|credential|auth|authorization|bearer)(?:[_-]|$)/i;\n/** A `proto://user:pass@host` URL literally embeds a password. */\nconst PROTO_CREDENTIAL_URL_RE = /\\w+:\\/\\/[^/@\\s]+:[^/@\\s]+@/;\n\n/** True when a source URL embeds `user:pass@` credentials (private-HTTPS auth form). */\nexport function urlHasCredentials(url: string): boolean {\n return PROTO_CREDENTIAL_URL_RE.test(url);\n}\n\n/**\n * Strip `user:pass@` userinfo from a URL. The repo is fully identified without it\n * (git auth on apply uses the target's own credential helper / ssh key), so an\n * exported source URL must never carry the token into a shared preset.\n */\nexport function stripUrlCredentials(url: string): string {\n return url.replace(/^(\\w+:\\/\\/)[^/@]*:[^/@]*@/, \"$1\");\n}\n\n/**\n * ≥20 chars mixing ≥2 character classes — looks like a raw token. Plain URLs and\n * filesystem paths are excluded: they are long but not secret (a credential URL\n * is caught by {@link PROTO_CREDENTIAL_URL_RE} instead).\n *\n * Known gap: single-character-class blobs (all-lowercase hex, bcrypt fragments)\n * are not detected — the 2-class threshold trades recall for fewer false positives.\n */\nfunction isLongEntropic(value: string): boolean {\n if (value.length < 20) return false;\n if (/^\\w+:\\/\\//.test(value) || value.startsWith(\"/\")) return false;\n const classes = [/[a-z]/, /[A-Z]/, /[0-9]/].filter((re) => re.test(value)).length;\n return classes >= 2;\n}\n\n/**\n * Scan every string inside each item's `config` and return inline secrets.\n *\n * A string is flagged when it is NOT a {@link isSecretReference} AND sits in a\n * credential context: the inherent `auth` field, a suspicious key name, a\n * `proto://user:pass@` URL, or a long high-entropy blob. Items without a `config`\n * (bare deps) are skipped.\n *\n * Detection is **heuristic / best-effort**, not exhaustive: a short, low-entropy\n * secret under an innocuous key name can slip through. A clean scan is not a\n * guarantee — treat it as a safety net, not proof the file holds no secrets.\n */\nexport function scanInlineSecrets(preset: PresetManifest): SecretFinding[] {\n const findings: SecretFinding[] = [];\n for (const item of preset.items) {\n // Only connector/mcp items carry a `config` (and always an `id`); bare deps\n // have neither, so the fallback is just for type-narrowing.\n const itemId = typeof item.id === \"string\" ? item.id : \"\";\n if (item.config) scanNode(item.config, [], false, itemId, findings);\n }\n return findings;\n}\n\nfunction scanNode(\n node: unknown,\n segments: string[],\n inCredentialField: boolean,\n itemId: string,\n findings: SecretFinding[],\n): void {\n if (typeof node === \"string\") {\n if (isInlineSecret(node, segments.at(-1) ?? \"\", inCredentialField)) {\n findings.push({ itemId, path: segments.join(\".\"), maskedValue: maskSecret(node) });\n }\n return;\n }\n if (Array.isArray(node)) {\n node.forEach((el, i) =>\n scanNode(el, [...segments, String(i)], inCredentialField, itemId, findings),\n );\n return;\n }\n if (node && typeof node === \"object\") {\n for (const [k, v] of Object.entries(node)) {\n // Only `auth` is an inherent credential field. `env`/`headers` are NOT\n // blanket-marked — that flagged Content-Type / plain path env vars. Their\n // real secrets are caught per-leaf by the key heuristic (Authorization,\n // *_TOKEN, …) and the value patterns.\n const credField = inCredentialField || k === \"auth\";\n scanNode(v, [...segments, k], credField, itemId, findings);\n }\n }\n}\n\n/** Decide whether a single string leaf is an inline secret. */\nfunction isInlineSecret(value: string, key: string, inCredentialField: boolean): boolean {\n if (isSecretReference(value) || PLACEHOLDER_RE.test(value)) return false;\n if (inCredentialField) return true;\n if (SUSPICIOUS_KEY_RE.test(key)) return true;\n if (PROTO_CREDENTIAL_URL_RE.test(value)) return true;\n return isLongEntropic(value);\n}\n\n/**\n * Render a terminal-safe preview. Reveals **no** secret characters — the\n * finding's `path` already identifies which value it is, and a prefix would leak\n * the token type (`sk-`, `ghp_`, `xoxb-`). Only a credential URL keeps its inert\n * shape (scheme + masked user/pass/host).\n */\nfunction maskSecret(value: string): string {\n const proto = value.match(/^(\\w+):\\/\\/[^/@\\s]+:[^/@\\s]+@/);\n if (proto) return `${proto[1]}://…:****@…`;\n return \"****\";\n}\n\n// ── Redaction ─────────────────────────────────────────────────────────────────\n\n/**\n * Replace each flagged inline value with a `${INPUT:<KEY>}` placeholder and add\n * a matching `secret` placeholder entry to the owning item. Returns a NEW preset\n * (the input is not mutated) plus the generated placeholder keys.\n *\n * `<KEY>` is `<itemId>_<path>` upper-snake-cased so it is stable and readable.\n */\nexport function redactSecrets(\n preset: PresetManifest,\n findings: SecretFinding[],\n): { preset: PresetManifest; keys: string[] } {\n const next = structuredClone(preset);\n const keys: string[] = [];\n const used = new Set<string>();\n\n for (const finding of findings) {\n const item = next.items.find((it) => it.id === finding.itemId);\n if (!item?.config) continue;\n\n // Unique key per finding — two paths must never collapse onto one placeholder\n // (that would resolve two distinct secrets to a single input at apply-time).\n const base = placeholderKey(finding.itemId, finding.path);\n let key = base;\n for (let n = 2; used.has(key); n++) key = `${base}_${n}`;\n\n // Only record the placeholder if the value was actually replaced — a failed\n // set leaves the secret inline, so it must stay counted as unresolved.\n if (!setAtPath(item.config, finding.path.split(\".\"), `\\${INPUT:${key}}`)) continue;\n used.add(key);\n\n const placeholder: Placeholder = {\n key,\n type: \"secret\",\n required: true,\n prompt: `Secret value for ${finding.itemId}.${finding.path}`,\n };\n item.placeholders = [...(item.placeholders ?? []), placeholder];\n keys.push(key);\n }\n\n return { preset: next, keys };\n}\n\n/** `db` + `options.dsn` → `DB_OPTIONS_DSN`. */\nfunction placeholderKey(itemId: string, path: string): string {\n return `${itemId}_${path}`\n .replace(/[^a-zA-Z0-9]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\")\n .toUpperCase();\n}\n\n/** Set a nested value by path segments. Returns false if the path doesn't resolve. */\nfunction setAtPath(root: Record<string, unknown>, segments: string[], value: string): boolean {\n let node: unknown = root;\n for (let i = 0; i < segments.length - 1; i++) {\n if (!node || typeof node !== \"object\") return false;\n node = (node as Record<string, unknown>)[segments[i]!];\n }\n if (!node || typeof node !== \"object\") return false;\n (node as Record<string, unknown>)[segments.at(-1)!] = value;\n return true;\n}\n\n// ── Output header ─────────────────────────────────────────────────────────────\n\n/** Exact wording written into the file when unresolved inline secrets remain. */\nexport const INLINE_SECRETS_HEADER =\n \"# ⚠️ CONTAINS INLINE SECRETS — replace with placeholders before sharing or publishing\";\n\n/**\n * Header comment for a preset that still holds unresolved inline secrets, or\n * `null` when `findings` is empty (nothing left to warn about).\n */\nexport function secretHeaderComment(findings: SecretFinding[]): string | null {\n return findings.length > 0 ? INLINE_SECRETS_HEADER : null;\n}\n","/**\n * skaile preset — scaffold, validate, export, and apply preset YAML files.\n *\n * Subcommands: init, validate, export, apply.\n * Delegates to @skaile/library preset module for parsing and validation.\n */\n\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport * as readline from \"node:readline/promises\";\nimport { normalizeRepoUrl } from \"@skaile/workspaces/asset-manager\";\nimport {\n type LockFile,\n loadSkWorkspaceConfig,\n readLock,\n type SkWorkspaceConfig,\n WorkspaceYamlEditor,\n} from \"@skaile/workspaces/core\";\nimport { getDefaultValue, isSecretPlaceholder } from \"@skaile/workspaces/library\";\nimport {\n type Placeholder,\n type PresetManifest,\n validatePreset,\n} from \"@skaile/workspaces/types/manifests\";\nimport { Command } from \"commander\";\nimport path from \"node:path\";\nimport { stringify } from \"yaml\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.ts\";\nimport {\n NESTED_PRESET_UNSUPPORTED,\n presetItemsToWorkspace,\n type WorkspaceItems,\n} from \"./preset-apply.ts\";\nimport { reportInstalledSoftDeps } from \"./project.ts\";\nimport {\n buildPresetFromWorkspace,\n neededSources,\n redactSecrets,\n scanInlineSecrets,\n type SecretFinding,\n secretHeaderComment,\n sourcesWithSidecar,\n urlHasCredentials,\n} from \"./preset-export.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 await runPresetValidate(filePath);\n });\n\n // ── preset export ────────────────────────────────────────────────────────\n\n cmd\n .command(\"export [name]\")\n .description(\"Snapshot the workspace's skaile.yaml into a shareable .preset.yaml\")\n .option(\"--project-dir <path>\", \"Project directory to read skaile.yaml from\", process.cwd())\n .option(\"--out <file>\", \"Explicit output file path\")\n .option(\"--dir <path>\", \"Output directory (default: cwd)\", process.cwd())\n .option(\"--redact\", \"Replace every detected inline secret with a placeholder\")\n .option(\n \"--allow-inline-secrets\",\n \"Exit 0 even when inline secrets remain unredacted (opt-in; unsafe for CI)\",\n )\n .option(\"--force\", \"Overwrite the output file if it already exists\")\n .action(async (name: string | undefined, opts: PresetExportOpts) => {\n await runPresetExport(name, opts);\n });\n\n // ── preset apply ─────────────────────────────────────────────────────────\n\n cmd\n .command(\"apply <path>\")\n .description(\"Apply a .preset.yaml additively into the workspace's skaile.yaml\")\n .option(\"--project-dir <path>\", \"Project directory holding skaile.yaml\", process.cwd())\n .option(\n \"--input <KEY=VAL>\",\n \"Provide a placeholder value (repeatable)\",\n collectInput,\n [] as string[],\n )\n .option(\"--yes\", \"Skip interactive prompts; use defaults where available\")\n .option(\"--no-deploy\", \"Skip the final `skaile install` step\")\n .action(async (filePath: string, opts: PresetApplyOpts) => {\n await runPresetApply(filePath, opts);\n });\n\n return cmd;\n}\n\n// ── preset export implementation ─────────────────────────────────────────────\n\ninterface PresetExportOpts {\n projectDir: string;\n out?: string;\n dir: string;\n redact?: boolean;\n allowInlineSecrets?: boolean;\n force?: boolean;\n}\n\n/**\n * Full `skaile preset export` pipeline: read the project-own skaile.yaml, build\n * a preset, surface inline secrets loudly, optionally redact them, then write a\n * `.preset.yaml` — annotated with a warning header when secrets remain.\n */\nasync function runPresetExport(name: string | undefined, opts: PresetExportOpts): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n const file = loadSkWorkspaceConfig(projectDir);\n if (!file) {\n logErr(`No skaile.yaml found in ${projectDir}`);\n logInfo(\"Run this from a project directory or pass --project-dir <path>.\");\n process.exit(1);\n }\n\n const presetName = name ?? file.config.name ?? \"my-preset\";\n\n // Capture only the sources the deps resolve from (excludes the factory source).\n let lock: LockFile | null = null;\n try {\n lock = readLock(path.join(projectDir, \"skaile.lock.yaml\"));\n } catch {\n lock = null; // missing/legacy lock → fall back to all non-factory sources\n }\n const sources = neededSources(file.config, lock);\n if (lock === null && sources.length > 0) {\n logInfo(\"No lock file — exporting all non-factory sources conservatively.\");\n }\n const strippedCreds = sources.filter((s) => urlHasCredentials(s.url)).length;\n if (strippedCreds > 0) {\n logWarn(\n `Stripped credentials from ${strippedCreds} source URL(s) — resolved via git auth on apply.`,\n );\n }\n // A captured source resolved through a machine-local sidecar overlay won't\n // reproduce on another machine until that sidecar manifest is itself shared.\n const sidecarSources = sourcesWithSidecar(sources);\n if (sidecarSources.length > 0) {\n logWarn(\n `${sidecarSources.length} captured source(s) rely on a MACHINE-LOCAL sidecar overlay ` +\n `(\\`~/.skaile/store/manifests/*\\`) — assets may not resolve on other machines or when ` +\n `this preset is shared, until the sidecar manifest is published: ${sidecarSources.join(\", \")}`,\n );\n }\n let preset = buildPresetFromWorkspace(file.config, presetName, sources);\n\n if (preset.items.length === 0) {\n logErr(\"Nothing to export — skaile.yaml has no dependencies, connectors, or mcp_servers.\");\n process.exit(1);\n }\n\n const result = validatePreset(preset);\n if (!result.ok) {\n logErr(\"Internal error: generated preset failed validation:\");\n for (const err of result.errors) console.error(` ${S.err(\"✗\")} ${err.path}: ${err.message}`);\n process.exit(1);\n }\n\n // Secret safety: never a silent success. Report, optionally redact, then\n // re-scan the FINAL preset so `unresolved` is ground truth (a redaction that\n // failed to apply still surfaces here, keeping the warning honest).\n const findings = scanInlineSecrets(preset);\n reportFindings(findings);\n const toRedact = await resolveRedactions(findings, opts.redact === true);\n if (toRedact.length > 0) preset = redactSecrets(preset, toRedact).preset;\n const unresolved = scanInlineSecrets(preset);\n\n const header = secretHeaderComment(unresolved);\n const body = stringify(preset);\n const contents = header ? `${header}\\n${body}` : body;\n\n if (opts.out && opts.dir !== process.cwd()) logWarn(\"--dir is ignored when --out is set.\");\n const outPath = opts.out\n ? path.resolve(opts.out)\n : path.join(path.resolve(opts.dir), `${presetName}.preset.yaml`);\n if (existsSync(outPath) && !opts.force) {\n logErr(`File already exists: ${outPath}`);\n logInfo(\"Pass --force to overwrite, or choose a different --out/--dir.\");\n process.exit(1);\n }\n\n try {\n writeFileSync(outPath, contents, \"utf-8\");\n } catch (e) {\n logErr(`Failed to write ${outPath}: ${(e as Error).message}`);\n process.exit(1);\n }\n logOk(`Exported ${S.brand(path.basename(outPath))}`);\n logInfo(`Path: ${outPath}`);\n\n // Fail closed: unresolved inline secrets must not read as a clean success — a\n // CI/script pipeline would otherwise publish the artifact with raw secrets.\n if (unresolved.length > 0) {\n console.error(S.err(\"This file is NOT safe to share.\"));\n if (!opts.allowInlineSecrets) {\n logErr(`${unresolved.length} inline secret(s) left unredacted.`);\n logInfo(\n \"Re-run with --redact to placeholder them, or --allow-inline-secrets to accept the risk.\",\n );\n process.exit(1);\n }\n }\n}\n\n/** Print a loud red summary of inline secrets to stderr (before any prompting). */\nfunction reportFindings(findings: SecretFinding[]): void {\n if (findings.length === 0) return;\n console.error(S.err(`⚠️ ${findings.length} potential INLINE secret(s) found`));\n for (const f of findings) {\n console.error(` ${S.err(\"•\")} ${f.itemId} ${S.dim(f.path)} ${f.maskedValue}`);\n }\n}\n\n/**\n * Which findings to redact: all of them under `--redact`; otherwise prompt once\n * per finding when attached to a TTY; otherwise none (headless run leaves them\n * inline so the warning header is written).\n */\nasync function resolveRedactions(\n findings: SecretFinding[],\n redactAll: boolean,\n): Promise<SecretFinding[]> {\n if (findings.length === 0) return [];\n if (redactAll) return findings;\n if (!process.stdin.isTTY) return [];\n\n const rl = readline.createInterface({ input: process.stdin, output: process.stderr });\n try {\n const chosen: SecretFinding[] = [];\n for (const f of findings) {\n const answer = await rl.question(`Redact ${f.itemId}.${f.path}? [y/N] `);\n if (/^y(es)?$/i.test(answer.trim())) chosen.push(f);\n }\n return chosen;\n } finally {\n rl.close();\n }\n}\n\n// ── preset apply implementation ──────────────────────────────────────────────\n\ninterface PresetApplyOpts {\n projectDir: string;\n input: string[];\n yes?: boolean;\n /** Commander sets this to `false` when `--no-deploy` is passed. */\n deploy: boolean;\n}\n\n/** Commander collector for repeatable `--input KEY=VAL` flags. */\nfunction collectInput(value: string, acc: string[]): string[] {\n acc.push(value);\n return acc;\n}\n\n/**\n * Full `skaile preset apply <path>` pipeline: parse the preset, resolve\n * placeholders (secrets → `env:` refs, inputs → literals), merge the items\n * additively into the target `skaile.yaml` (comment-preserving), then deploy.\n */\nasync function runPresetApply(filePath: string, opts: PresetApplyOpts): Promise<void> {\n const projectDir = path.resolve(opts.projectDir);\n const file = loadSkWorkspaceConfig(projectDir);\n if (!file) {\n logErr(\"No skaile.yaml — run `skaile init` first\");\n process.exit(1);\n }\n\n const resolved = path.resolve(filePath);\n if (!existsSync(resolved)) {\n logErr(`File not found: ${resolved}`);\n process.exit(1);\n }\n\n const { parsePresetYaml } = await import(\"@skaile/workspaces/library\");\n const parseResult = parsePresetYaml(readFileSync(resolved, \"utf-8\"));\n if (!parseResult.ok || !parseResult.preset) {\n logErr(\"Preset validation failed:\");\n for (const err of parseResult.errors) console.error(` ${S.err(\"✗\")} ${err}`);\n process.exit(1);\n }\n const preset = parseResult.preset;\n\n // Reject nested presets up front with a friendly message — v1 apply resolves\n // only the flat item set produced by `preset export`.\n if (preset.items.some((it) => it.ref.startsWith(\"preset:\"))) {\n logErr(NESTED_PRESET_UNSUPPORTED);\n logInfo(\"Remove the nested `preset:` item(s) and re-run.\");\n process.exit(1);\n }\n\n const values = parseInputs(opts.input);\n await promptMissingInputs(preset.items, preset.inputs, values, opts.yes === true);\n\n let items: WorkspaceItems;\n try {\n items = presetItemsToWorkspace(preset, values);\n } catch (err) {\n logErr((err as Error).message);\n process.exit(1);\n }\n\n const editor = WorkspaceYamlEditor.load(file.path);\n const summary = applyItems(editor, file.config, items);\n // Only the add paths mutate the doc — skip a no-op rewrite when nothing was added.\n const changed =\n summary.addedSources.length +\n summary.addedDeps.length +\n summary.addedConnectors.length +\n summary.addedMcp.length;\n if (changed > 0) editor.save();\n\n printApplySummary(summary, items.envVarsToSet);\n\n if (opts.deploy) {\n await runPresetInstall(projectDir);\n } else {\n logInfo(\"Skipped deploy (--no-deploy). Run `skaile install` to deploy the new dependencies.\");\n }\n}\n\n/** Parse repeatable `KEY=VAL` strings into a value map, exiting on a bad pair. */\nfunction parseInputs(pairs: string[]): Record<string, string> {\n const out: Record<string, string> = {};\n for (const pair of pairs) {\n const eq = pair.indexOf(\"=\");\n if (eq <= 0) {\n logErr(`Invalid --input \"${pair}\" — expected KEY=VALUE.`);\n process.exit(1);\n }\n out[pair.slice(0, eq)] = pair.slice(eq + 1);\n }\n return out;\n}\n\n/**\n * Interactively fill non-secret placeholders that have no `--input` value.\n * Secrets are never prompted — they resolve to `env:` references. A `--yes` run\n * or a non-TTY leaves gaps for {@link presetItemsToWorkspace} to fill from\n * defaults or reject as required.\n */\nasync function promptMissingInputs(\n presetItems: { placeholders?: Placeholder[] }[],\n presetInputs: Placeholder[] | undefined,\n values: Record<string, string>,\n yes: boolean,\n): Promise<void> {\n const seen = new Set<string>();\n const toPrompt: Placeholder[] = [];\n const collect = (ph: Placeholder): void => {\n if (seen.has(ph.key) || isSecretPlaceholder(ph)) return;\n seen.add(ph.key);\n if (values[ph.key] === undefined) toPrompt.push(ph);\n };\n for (const input of presetInputs ?? []) collect(input);\n for (const item of presetItems) for (const ph of item.placeholders ?? []) collect(ph);\n\n if (toPrompt.length === 0 || yes || !process.stdin.isTTY) return;\n\n const rl = readline.createInterface({ input: process.stdin, output: process.stderr });\n try {\n for (const ph of toPrompt) {\n const def = getDefaultValue(ph);\n const suffix = def !== undefined ? ` [${String(def)}]` : \"\";\n const answer = (await rl.question(`${ph.prompt ?? ph.key}${suffix}: `)).trim();\n if (answer) values[ph.key] = answer;\n else if (def !== undefined) values[ph.key] = String(def);\n }\n } finally {\n rl.close();\n }\n}\n\n/** Per-section record of what the apply added vs skipped (on id collision). */\ninterface ApplySummary {\n addedDeps: string[];\n skippedDeps: string[];\n addedConnectors: string[];\n skippedConnectors: string[];\n unchangedConnectors: string[];\n addedMcp: string[];\n skippedMcp: string[];\n unchangedMcp: string[];\n addedSources: string[];\n skippedSources: Array<{ url: string; keptPin?: string; presetPin?: string }>;\n unchangedSources: string[];\n}\n\n/**\n * Additively merge resolved items into the editor. Deps dedupe; connectors and\n * mcp servers are skipped (not overwritten) when an entry with the same id\n * already exists AND differs — the user's own config always wins.\n */\nfunction applyItems(\n editor: WorkspaceYamlEditor,\n config: SkWorkspaceConfig,\n items: WorkspaceItems,\n): ApplySummary {\n const s: ApplySummary = {\n addedDeps: [],\n skippedDeps: [],\n addedConnectors: [],\n skippedConnectors: [],\n unchangedConnectors: [],\n addedMcp: [],\n skippedMcp: [],\n unchangedMcp: [],\n addedSources: [],\n skippedSources: [],\n unchangedSources: [],\n };\n\n // Register sources first (deduped by normalized url) so a later install can\n // clone them; an existing url with a different pin is left as-is (user wins).\n const existingSourceUrls = new Map(\n editor.getSources().map((src) => [normalizeRepoUrl(src.url), src]),\n );\n for (const src of items.sources) {\n const key = normalizeRepoUrl(src.url);\n const existing = existingSourceUrls.get(key);\n if (!existing) {\n editor.setSource(src);\n existingSourceUrls.set(key, src);\n s.addedSources.push(src.url);\n // `?? undefined` normalizes YAML's `null` (blank `~`) and undefined to one\n // value; a differing pin is skipped (existing wins), identical is a no-op.\n } else if ((existing.pin ?? undefined) !== (src.pin ?? undefined)) {\n s.skippedSources.push({ url: src.url, keptPin: existing.pin, presetPin: src.pin });\n } else {\n s.unchangedSources.push(src.url);\n }\n }\n\n for (const ref of items.dependencies) {\n if (editor.addDependency(ref)) s.addedDeps.push(ref);\n else s.skippedDeps.push(ref);\n }\n\n // An entry with an existing id is never overwritten: identical → unchanged,\n // different → skipped (the user's own config wins). Only a new id is written.\n const existingConnectors = new Map((config.connectors ?? []).map((c) => [c.id, c]));\n for (const conn of items.connectors) {\n const existing = existingConnectors.get(conn.id);\n if (existing) {\n (stableEqual(existing, conn) ? s.unchangedConnectors : s.skippedConnectors).push(conn.id);\n continue;\n }\n editor.setConnector(conn);\n s.addedConnectors.push(conn.id);\n }\n\n const existingMcp = new Map((config.mcp_servers ?? []).map((m) => [m.id, m]));\n for (const mcp of items.mcpServers) {\n const existing = existingMcp.get(mcp.id);\n if (existing) {\n (stableEqual(existing, mcp) ? s.unchangedMcp : s.skippedMcp).push(mcp.id);\n continue;\n }\n editor.setMcpServer(mcp);\n s.addedMcp.push(mcp.id);\n }\n\n return s;\n}\n\n/** Key-order-insensitive structural equality (for connector/mcp collision checks). */\nfunction stableEqual(a: unknown, b: unknown): boolean {\n return canonicalJson(a) === canonicalJson(b);\n}\n\nfunction canonicalJson(value: unknown): string {\n return JSON.stringify(value, (_k, v) =>\n v && typeof v === \"object\" && !Array.isArray(v)\n ? Object.fromEntries(\n Object.entries(v as Record<string, unknown>).sort(([x], [y]) => x.localeCompare(y)),\n )\n : v,\n );\n}\n\n/** Print what was added/skipped plus the env vars the user must set. */\nfunction printApplySummary(summary: ApplySummary, envVarsToSet: string[]): void {\n const added =\n summary.addedSources.length +\n summary.addedDeps.length +\n summary.addedConnectors.length +\n summary.addedMcp.length;\n if (added === 0) {\n logInfo(\"Nothing to apply — everything was already present.\");\n } else {\n if (summary.addedSources.length > 0) {\n logOk(`Registered ${summary.addedSources.length} source(s).`);\n }\n logOk(\n `Applied ${summary.addedDeps.length} dependency(ies), ` +\n `${summary.addedConnectors.length} connector(s), ${summary.addedMcp.length} mcp server(s).`,\n );\n }\n\n const skipped = [\n ...summary.skippedSources.map(\n (s) =>\n `source ${s.url} (kept pin '${s.keptPin ?? \"none\"}', preset had '${s.presetPin ?? \"none\"}')`,\n ),\n ...summary.skippedDeps.map((d) => `dependency ${d} (already present)`),\n ...summary.skippedConnectors.map((c) => `connector ${c} (id exists, differs)`),\n ...summary.skippedMcp.map((m) => `mcp ${m} (id exists, differs)`),\n ];\n for (const line of skipped) logWarn(`Skipped ${line}`);\n\n const unchanged =\n summary.unchangedConnectors.length +\n summary.unchangedMcp.length +\n summary.unchangedSources.length;\n if (unchanged > 0)\n logInfo(`${unchanged} source/connector/mcp entry(ies) already matched — left as-is.`);\n\n if (envVarsToSet.length > 0) {\n logWarn(\n `This preset references secrets by env var — provide them before running: ${envVarsToSet.join(\", \")}`,\n );\n logInfo(\"Add them to .env (gitignored) or export in your shell, e.g. export <VAR>=…\");\n }\n}\n\n/** Deploy newly added skill deps, then surface soft deps as `skaile install` does. */\nasync function runPresetInstall(projectDir: string): Promise<void> {\n try {\n const { AssetManager } = await import(\"@skaile/workspaces/asset-manager\");\n const am = new AssetManager({ projectDir });\n logInfo(\"Installing new dependencies…\");\n const result = await am.install({});\n for (const d of result.deployed) logOk(d);\n for (const m of result.missing) logErr(`Missing: ${m}`);\n // Report-only body-link soft deps, matching the `skaile install` surface.\n await reportInstalledSoftDeps(am);\n } catch (err) {\n logErr(`Install failed: ${err instanceof Error ? err.message : String(err)}`);\n logInfo(\"Run `skaile install` to deploy the new dependencies.\");\n }\n}\n\n// ── preset validate implementation ───────────────────────────────────────────\n\n/**\n * Read + parse the preset file, exiting the process on read/parse failure.\n * Returns the validated preset manifest on success.\n */\nasync function loadPresetForValidation(resolved: string): Promise<PresetManifest> {\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 } = await import(\"@skaile/workspaces/library\");\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 return parseResult.preset;\n}\n\n/**\n * Surface a count of nested preset refs. The full depth check runs at\n * apply-time via validateNestingDepth() inside applyPresetWithLibrary.\n */\nasync function reportNestedPresetRefs(preset: PresetManifest): Promise<void> {\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 { detectNestedPresetRefs } = await import(\"@skaile/workspaces/library\");\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\n/**\n * Detect cycles in the preset's item-ref graph, exiting the process on a cycle.\n */\nasync function checkPresetCycles(preset: PresetManifest, resolved: string): Promise<void> {\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) return;\n\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/**\n * Validate per-item placeholder structure (dry-run with no input values).\n * Returns true when any placeholder issues were surfaced as warnings.\n */\nexport async function checkPresetPlaceholders(allPlaceholders: Placeholder[]): Promise<boolean> {\n if (allPlaceholders.length === 0) return false;\n\n const { validatePlaceholder } = await import(\"@skaile/workspaces/library\");\n const invalidEntries: Array<{ key: string; errors: string[] }> = [];\n for (const ph of allPlaceholders) {\n // Required-ness is enforced at apply, not here — a required-no-default secret\n // is exactly what `export --redact` emits. Only type-check a present default.\n if (ph.default === undefined) continue;\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) return false;\n\n logWarn(\"Placeholder issues:\");\n for (const r of invalidEntries) {\n console.log(` ${S.warn(\"!\")} ${r.key}: ${r.errors.join(\", \")}`);\n }\n return true;\n}\n\n/** Print the validation summary table + final pass/warn line. */\nfunction printPresetSummary(\n preset: PresetManifest,\n placeholderCount: number,\n hasWarnings: boolean,\n): void {\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\")} ${placeholderCount}`);\n console.log();\n\n if (hasWarnings) {\n logWarn(\"Validation passed with warnings\");\n } else {\n logOk(\"Preset is valid\");\n }\n}\n\n/** Full `skaile preset validate <path>` pipeline. */\nasync function runPresetValidate(filePath: string): Promise<void> {\n const resolved = path.resolve(filePath);\n\n const preset = await loadPresetForValidation(resolved);\n\n await reportNestedPresetRefs(preset);\n await checkPresetCycles(preset, resolved);\n\n const allPlaceholders = preset.items.flatMap((item) => item.placeholders ?? []);\n const hasWarnings = await checkPresetPlaceholders(allPlaceholders);\n\n printPresetSummary(preset, allPlaceholders.length, hasWarnings);\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# 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 # Placeholders — values the user provides at apply-time, declared on the item\n # that uses them. Types: text, multiline, secret, number, boolean, enum, oauth,\n # instance-picker\n placeholders:\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 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# Preset-level inputs shared across items (rare) — top-level \\`inputs:\\`, not\n# \\`placeholders:\\` (that key lives on items). Same shape as a placeholder:\n# inputs:\n# - key: SHARED_KEY\n# type: text\n# label: \"Shared across all items\"\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","/**\n * Turn a driver-start/prompt failure into a friendly, actionable message when the\n * cause is a missing/unusable agent binary; otherwise return `null` so the caller\n * surfaces the raw error unchanged.\n *\n * The bridge classifies these as `category: \"config\"` and carries a `hint`, but the\n * shape reaching the CLI varies: omp's `start()` rejects with the raw spawn error\n * (`code === \"ENOENT\"`), while the subprocess CLI drivers reject with the classified\n * `AgentError` attached under `.detail`. Duck-type across all of them.\n */\nexport function friendlyDriverError(err: unknown): string | null {\n const e = err as\n | {\n code?: string;\n syscall?: string;\n message?: string;\n category?: string;\n hint?: string;\n detail?: { category?: string; hint?: string };\n }\n | null\n | undefined;\n if (!e) return null;\n\n // A missing binary is a *spawn* ENOENT (`syscall: \"spawn <bin>\"` / \"spawn … ENOENT\");\n // a bare ENOENT from connector/mount setup is a different failure, not the driver.\n const isSpawnEnoent =\n e.code === \"ENOENT\" &&\n (e.syscall?.startsWith(\"spawn\") === true || /^spawn .*ENOENT/.test(e.message ?? \"\"));\n const isConfig = e.category === \"config\" || e.detail?.category === \"config\";\n if (!isSpawnEnoent && !isConfig) return null;\n\n const hint = e.hint ?? e.detail?.hint;\n const base = hint ?? \"The configured agent binary is not installed or not on your PATH.\";\n return `${base}\\nTry a different backend with \\`--driver claude-sdk\\`.`;\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 { loadFlow } from \"@skaile/workspaces/factory-assets/connectors/flow/engine\";\nimport { resumeFlow, runFlow } from \"@skaile/workspaces/factory-assets/connectors/flow/run-flow\";\nimport {\n clearSession,\n loadSession,\n loadSessionById,\n MarkdownStreamer,\n resolveSettings,\n runAgentChat,\n} from \"@skaile/workspaces/runner\";\nimport { Command } from \"commander\";\nimport pc from \"picocolors\";\nimport { friendlyDriverError } from \"../driver-error.ts\";\nimport { discoverFlows, findFlowFile } from \"../flow-discovery.ts\";\nimport { logErr, logInfo, logOk, logWarn, S } from \"../helpers.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 = discoverFlows();\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 // Locate the flow file once: a project-local `ai-assets/` tree wins (lets\n // a workspace override a built-in flow), then fall back across all content\n // roots (bundled factory-assets, monorepo tree, user libraries). The file\n // path doubles as the is-this-a-flow test, so we don't parse every flow.\n // findFlowFile is layout-tolerant (flat + domain-nested, all extensions);\n // seed it with the project-local `ai-assets/` as a priority root.\n const priorityRoots: string[] = [];\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 priorityRoots.push(candidate);\n break;\n }\n dir = path.dirname(dir);\n }\n const flowPath = findFlowFile(flowId, priorityRoots);\n\n if (!flowPath) {\n // Not a flow id — treat the positional args as a single-shot text prompt.\n const textPrompt = positional.join(\" \");\n if (!textPrompt.trim()) {\n logErr(`Flow not found: ${flowId}`);\n const available = discoverFlows().map((f) => f.id);\n if (available.length > 0) {\n console.log(` ${S.dim(\"Available:\")} ${available.map((id) => S.cmd(id)).join(\", \")}`);\n }\n process.exit(1);\n }\n try {\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 } catch (err) {\n const friendly = friendlyDriverError(err);\n if (friendly) {\n logErr(friendly);\n } else {\n logErr(err instanceof Error ? err.message : String(err));\n }\n process.exit(1);\n }\n return;\n }\n\n let flow: ReturnType<typeof loadFlow>;\n try {\n flow = loadFlow(flowPath);\n } catch (err) {\n logErr(\n `Failed to load flow \"${flowId}\": ${err instanceof Error ? err.message : String(err)}`,\n );\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 try {\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 } catch (err) {\n const friendly = friendlyDriverError(err);\n logErr(friendly ?? (err instanceof Error ? err.message : String(err)));\n process.exit(1);\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 // Best-effort plugin store: reconcile + load any `plugins:` declared in\n // skaile.yaml before the runner starts. Guarded no-op (zero overhead)\n // when the project declares no plugins — see cli/CLAUDE.md § Plugin store.\n await ensurePluginsLoadedForServe(opts.projectDir);\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\n/**\n * Reconcile + load `skaile.yaml` `plugins:` into the process-wide\n * `pluginRegistry` before the runner starts. Best-effort: a plugin that fails\n * to reconcile or load is logged and skipped — it never blocks serve startup.\n *\n * Fast path: when the project declares no `plugins:`, `ensurePluginsLoaded`\n * returns immediately, so the common case costs a single config read.\n */\nasync function ensurePluginsLoadedForServe(projectDir: string): Promise<void> {\n const { logInfo, logWarn } = await import(\"../helpers.ts\");\n try {\n const { resolveSkWorkspaceConfig } = await import(\"@skaile/workspaces/core\");\n const config = resolveSkWorkspaceConfig(projectDir);\n if (!config.plugins || config.plugins.length === 0) return;\n\n const { ensurePluginsLoaded } = await import(\"../plugin-store/index.ts\");\n const { pluginRegistry } = await import(\"@skaile/workspaces/plugin-registry\");\n const result = await ensurePluginsLoaded(projectDir, config.plugins, pluginRegistry);\n\n if (result.loaded.length > 0) {\n logInfo(`Loaded ${result.loaded.length} plugin(s): ${result.loaded.join(\", \")}`);\n }\n for (const f of result.failed) {\n logWarn(f.error);\n }\n } catch (err) {\n // Never fail serve startup on a plugin store error — log and continue.\n logWarn(`plugin store skipped: ${err instanceof Error ? err.message : String(err)}`);\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","/**\n * Minimal SuperJSON-compatible transformer so the CLI speaks the platform tRPC\n * server's `{ json, meta? }` wire format (log payloads are JSON-native, so no\n * `meta` revival is needed). Without it, remote calls fail to deserialize.\n */\nexport const superjsonLite = {\n serialize: (object: unknown) => ({ json: object }),\n deserialize: (payload: unknown) =>\n payload && typeof payload === \"object\" && \"json\" in payload\n ? (payload as { json: unknown }).json\n : payload,\n};\n","import type { LogEntry, LogQuery } from \"@skaile/workspaces/types\";\nimport { createTRPCUntypedClient, httpLink } from \"@trpc/client\";\n\nimport { superjsonLite } from \"./superjson-transformer.ts\";\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 transformer: superjsonLite,\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\nimport { superjsonLite } from \"./superjson-transformer.ts\";\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 transformer: superjsonLite,\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 query = buildLogQuery(opts);\n\n const resolved = resolveMode({\n forceLocal: opts.local,\n forceRemote: opts.remote,\n projectDir: opts.projectDir,\n platformUrl: opts.platformUrl,\n });\n\n const { entries, nextCursor } = await fetchEntries(sessionId, opts, resolved, query);\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\n/** Translate parsed CLI options into a session-scoped {@link LogQuery} (sans `sessionId`). */\nfunction buildLogQuery(opts: CliOpts): Omit<LogQuery, \"sessionId\"> {\n const levels = (opts.level ?? []).map(validateLevel);\n return {\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\n/** Fetch the history snapshot from whichever store the mode resolved to. */\nasync function fetchEntries(\n sessionId: string,\n opts: CliOpts,\n resolved: ReturnType<typeof resolveMode>,\n query: Omit<LogQuery, \"sessionId\">,\n): Promise<{ entries: LogEntry[]; nextCursor: string | undefined }> {\n if (resolved.mode === \"local\") {\n const result = localQuery(resolved.dbPath, { ...query, sessionId });\n return { entries: result.entries, nextCursor: result.nextCursor };\n }\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 return { entries: result.entries, nextCursor: result.nextCursor };\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 { AssetManager } from \"@skaile/workspaces/asset-manager\";\nimport type { DriverTarget } from \"@skaile/workspaces/core\";\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\ntype Overview = ReturnType<AssetManager[\"overview\"]>;\n\nfunction printOverviewRepos(repos: Overview[\"repos\"]): void {\n if (repos.length === 0) return;\n console.log();\n for (const r of 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\nfunction printOverviewDomains(byDomain: Overview[\"byDomain\"]): void {\n const nameW = Math.max(4, ...[...byDomain.values()].flat().map((e) => e.name.length));\n const kindW = 8;\n\n for (const [domain, entries] of 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\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 printOverviewRepos(result.repos);\n printOverviewDomains(result.byDomain);\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","import path from \"node:path\";\nimport type { InstallManifest } from \"@skaile/workspaces/types\";\nimport { Command } from \"commander\";\nimport { colorRef, kindColorPad, logErr, logInfo, logOk, S } from \"../helpers.ts\";\nimport { catalogAssetRef, filterCatalogAssets } from \"./catalog.ts\";\nimport {\n deviceLogin,\n hasStoredAuth,\n loadStoreAuthConfig,\n logout as storeLogout,\n} from \"../store-auth.ts\";\nimport {\n getStoreConfig,\n getStoreToken,\n isStoreAuthenticated,\n storeFetch,\n} from \"../store-client.ts\";\n\n/** Fetch a bearer token + call `/api/v1/me`, returning the publisher identity. */\nasync function fetchIdentity(): Promise<{\n username?: string;\n githubLogin?: string | null;\n roles?: string[];\n}> {\n const jwt = await getStoreToken();\n return storeFetch({ ...getStoreConfig(), jwt }, \"/api/v1/me\");\n}\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(\"Sign in to the store (Keycloak device flow — approve in your browser)\")\n .action(async () => {\n try {\n await deviceLogin(loadStoreAuthConfig());\n const me = await fetchIdentity().catch(\n () => ({}) as { username?: string; githubLogin?: string | null },\n );\n // The login name is NOT a namespace (no `@`). The publishable namespace is\n // the connected GitHub handle — show it separately so `@<login>` (which may\n // be reserved) is never mistaken for where you publish.\n logOk(\n `Signed in${\n me.username\n ? ` as ${S.brand(me.username)}${me.githubLogin ? ` — publishing as ${S.brand(`@${me.githubLogin}`)}` : \"\"}`\n : \".\"\n }`,\n );\n } catch (e: any) {\n logErr(e.message);\n process.exit(1);\n }\n });\n\n // ── logout ──\n store\n .command(\"logout\")\n .description(\"Sign out of the store\")\n .action(() => {\n storeLogout(loadStoreAuthConfig());\n logOk(\"Signed out.\");\n });\n\n // ── whoami ──\n store\n .command(\"whoami\")\n .description(\"Show current store identity\")\n .action(async () => {\n if (!hasStoredAuth(loadStoreAuthConfig())) {\n logErr(\"Not signed in. Run: skaile store login\");\n process.exit(1);\n }\n try {\n const me = await fetchIdentity();\n console.log();\n // Login name (not a namespace) vs the publishable namespace (GitHub handle).\n console.log(` ${S.label(\"Login\")} ${S.brand(me.username ?? \"?\")}`);\n console.log(\n ` ${S.label(\"Publisher\")} ${\n me.githubLogin\n ? S.brand(`@${me.githubLogin}`)\n : S.dim(\"— connect GitHub in the store to publish\")\n }`,\n );\n if (me.roles?.length) console.log(` ${S.label(\"Roles\")} ${me.roles.join(\", \")}`);\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 AI Asset Store catalog by name, description, or publisher\")\n .option(\"--kind <kind>\", \"Filter by asset kind (skill, agent, prompt, flow, …)\")\n .option(\"-C, --project-dir <dir>\", \"Project directory (catalog config overlay)\", process.cwd())\n .action(async (query: string, opts) => {\n const { openCatalogSource, LocalCatalogDisabledError } = await import(\"../open-library.ts\");\n try {\n const remote = await openCatalogSource({ projectDir: path.resolve(opts.projectDir) });\n // The remote catalog has no server-side query on `listAssets` (the `kind`\n // filter IS server-side); text matching is client-side, same as\n // `skaile search --store`.\n const assets = await remote.listAssets(opts.kind ? { kind: opts.kind } : {});\n const results = filterCatalogAssets(assets, query);\n if (results.length === 0) {\n logInfo(`No store results for \"${query}\".`);\n return;\n }\n console.log();\n for (const a of results) {\n const ref = catalogAssetRef(a);\n console.log(\n ` ⬡ ${kindColorPad(a.kind)} ${colorRef(ref).padEnd(48)} ${S.dim((a.description ?? \"\").slice(0, 60))}`,\n );\n }\n console.log(\n `\\n ${S.dim(`${results.length} result(s) · \\`skaile store show <ref>\\` for details`)}\\n`,\n );\n } catch (e: any) {\n if (e instanceof LocalCatalogDisabledError) {\n logErr(\n \"Remote catalog disabled (catalog.url: local). Set `catalog.url: https://skaile.store` in ~/.skaile/config.yaml.\",\n );\n } else {\n logErr(`Store search failed: ${e.message}`);\n }\n process.exit(1);\n }\n });\n\n // ── show ──\n store\n .command(\"show <ref>\")\n .description(\"Show a store asset's details + provenance (source, files, integrity)\")\n .option(\"-C, --project-dir <dir>\", \"Project directory (catalog config overlay)\", process.cwd())\n .action(async (ref: string, opts) => {\n const { openCatalogSource, LocalCatalogDisabledError } = await import(\"../open-library.ts\");\n const { supportsInstallManifest } = await import(\"./project.ts\");\n try {\n const remote = await openCatalogSource({ projectDir: path.resolve(opts.projectDir) });\n const asset = await remote.resolve(ref);\n if (!asset) {\n logErr(`Not found in store: ${ref} (try a full ref, e.g. skill:@publisher/name#version)`);\n process.exit(1);\n }\n const canonical = catalogAssetRef(asset);\n // Pointer-triple provenance is served only by the tRPC RemoteCatalogSource;\n // best-effort so a REST-framed or unpublished asset still prints its card.\n let manifest: InstallManifest | null = null;\n if (supportsInstallManifest(remote)) {\n manifest = await remote.getInstallManifest(canonical).catch(() => null);\n }\n\n const field = (label: string, value: string) => ` ${S.label(label.padEnd(11))}${value}`;\n console.log();\n console.log(\n ` ${kindColorPad(asset.kind)} ${S.heading(`@${asset.publisher}/${asset.name}`)} ${S.dim(`v${asset.version}`)}`,\n );\n console.log(` ${S.rule(52)}`);\n if (asset.description) {\n console.log();\n console.log(` ${asset.description}`);\n }\n console.log();\n if (manifest) console.log(field(\"Tier\", manifest.tier));\n if (asset.category) console.log(field(\"Category\", asset.category));\n if (asset.license) console.log(field(\"License\", asset.license));\n\n if (manifest) {\n console.log();\n console.log(` ${S.heading(\"Source\")}`);\n console.log(field(\"Repo\", manifest.source.url));\n console.log(field(\"Commit\", manifest.source.commitSha));\n console.log();\n console.log(` ${S.heading(`Files (${manifest.files.length})`)}`);\n for (const f of manifest.files) {\n console.log(` ${S.dim(f.sha256.slice(0, 12))} ${f.path}`);\n }\n console.log();\n console.log(field(\"Integrity\", manifest.sha256));\n } else if (asset.repo) {\n console.log(field(\"Repo\", asset.repo));\n if (asset.sha256) console.log(field(\"Integrity\", asset.sha256));\n }\n\n if (asset.softDeps?.length) {\n console.log();\n console.log(` ${S.heading(\"Soft dependencies\")}`);\n for (const dep of asset.softDeps) console.log(` ${S.dim(\"→\")} ${dep}`);\n }\n\n console.log();\n console.log(` ${S.dim(`Install: skaile add ${canonical}`)}`);\n console.log();\n } catch (e: any) {\n if (e instanceof LocalCatalogDisabledError) {\n logErr(\n \"Remote catalog disabled (catalog.url: local). Set `catalog.url: https://skaile.store` in ~/.skaile/config.yaml.\",\n );\n } else {\n logErr(`Store show failed: ${e.message}`);\n }\n process.exit(1);\n }\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 if (!isStoreAuthenticated()) {\n logErr(\"Not signed in. 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 // Authorize with a fresh device-flow token (config.jwt is null now).\n const jwt = await getStoreToken();\n await storeFetch(\n { ...getStoreConfig(), jwt },\n `/api/assets/${publisher}/${slug}/${version}/yank`,\n {\n method: \"PATCH\",\n },\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 { bareSoftDepName, colorRef, logInfo, S } 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(async (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 // The v2 lock records no edges, so soft body-link deps aren't woven into the\n // tree above — list them distinctly below (report-only, inferred).\n const softDeps = await am.softDepsOf(root.children.map((c) => c.ref));\n if (softDeps.length > 0) {\n console.log(` ${S.label(\"Soft dependencies (inferred)\")}:`);\n for (const e of softDeps)\n console.log(\n ` ${S.dim(\"·\")} ${bareSoftDepName(e.from)} → ${bareSoftDepName(e.to)} ${S.dim(\"(soft)\")}`,\n );\n }\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, S } from \"../helpers.ts\";\nimport { openCatalogSource } from \"../open-library.ts\";\nimport { syncProjectSources } from \"./source.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/cache/catalog/` 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 * Before re-deploy, `update` offers to **sync sources** from upstream (default\n * yes). Re-deploy resolves against the local source cache, which is frozen at\n * the commit captured when each source was first cloned — without a sync,\n * `update` can never see newer GitHub commits and always reports \"Nothing to\n * update\". Pass `--no-sync` to skip, `-y`/`--yes` to sync without the prompt; a\n * non-interactive shell defaults to syncing.\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 .option(\"--no-sync\", \"Skip syncing sources from upstream before re-deploying\")\n .option(\"-y, --yes\", \"Sync sources without the confirmation prompt\")\n .action(\n async (\n _name: string | undefined,\n opts: {\n projectDir: string;\n catalog: boolean;\n catalogOnly?: boolean;\n sync: boolean;\n yes?: boolean;\n },\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 const projectDir = path.resolve(opts.projectDir);\n\n // Stage 2a — source sync (opt-out, default yes). Re-deploy reads the\n // local source cache; without a pull it can't see upstream commits.\n if (await shouldSyncSources(opts)) {\n const syncSpinner = p.spinner();\n syncSpinner.start(\"Syncing sources\");\n const { total, synced, failed } = await syncProjectSources(projectDir);\n syncSpinner.stop(\n total === 0\n ? \"No sources to sync.\"\n : `Synced ${S.heading(`${synced}/${total}`)} source(s)` +\n (failed ? ` (${failed} failed)` : \"\"),\n );\n }\n\n // Stage 2b — asset re-deploy against the (now-synced) source cache.\n const am = new AssetManager({ 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 },\n );\n}\n\n/**\n * Decide whether to sync sources before re-deploy. `--no-sync` (`opts.sync ===\n * false`) always wins; `-y/--yes` and non-interactive shells sync without\n * asking; otherwise prompt with yes as the default. A cancelled prompt (Esc /\n * Ctrl-C) aborts the whole command via {@link process.exit}.\n */\nasync function shouldSyncSources(opts: { sync: boolean; yes?: boolean }): Promise<boolean> {\n if (opts.sync === false) return false;\n if (opts.yes || !process.stdin.isTTY) return true;\n const answer = await p.confirm({\n message: \"Sync sources from upstream before re-deploying?\",\n initialValue: true,\n });\n if (p.isCancel(answer)) {\n p.cancel(\"Cancelled.\");\n process.exit(130);\n }\n return answer;\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 {\n ASSET_NAME_HINT,\n checkAgentSkillConformance,\n isValidAssetName,\n parseAssetRef,\n} from \"@skaile/workspaces/core\";\nimport type { IAssetKindRegistry } from \"@skaile/workspaces/plugins\";\nimport { parseSkillFrontmatter, validateFlowVersions } from \"@skaile/workspaces/resolver\";\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/**\n * Check an asset manifest's canonical identity (the name/id that becomes its\n * asset ref). Flows carry identity in `id`; every other kind uses `name`.\n * When a `publisher` is present we round-trip through `parseAssetRef` so the\n * full canonical grammar (publisher shape + name) is exercised, which is the\n * exact path that hard-errors at install/apply time. Returns an error message,\n * or `null` when the identity is absent (required-ness is the schema's job) or\n * valid.\n */\nfunction checkManifestIdentity(kind: string, parsed: unknown): string | null {\n if (parsed === null || typeof parsed !== \"object\") return null;\n const obj = parsed as Record<string, unknown>;\n const identity = kind === \"flow\" ? obj.id : obj.name;\n if (typeof identity !== \"string\" || identity.length === 0) return null;\n\n const publisher = typeof obj.publisher === \"string\" ? obj.publisher : undefined;\n if (publisher !== undefined) {\n try {\n parseAssetRef(`${kind}:@${publisher}/${identity}`);\n return null;\n } catch (e) {\n return e instanceof Error ? e.message : String(e);\n }\n }\n if (!isValidAssetName(identity)) {\n return `invalid asset ${kind === \"flow\" ? \"id\" : \"name\"} \"${identity}\" — ${ASSET_NAME_HINT}`;\n }\n return null;\n}\n\n/**\n * Parse a single manifest candidate's bytes. Returns the parsed value, or a\n * sentinel: `\"skip\"` (MD without frontmatter — not an error) or `\"error\"`\n * (parse failure already logged, count it).\n */\nfunction parseManifestCandidate(\n c: ManifestCandidate,\n absRoot: string,\n): { kind: \"value\"; parsed: unknown } | { kind: \"skip\" } | { kind: \"error\" } {\n const content = fs.readFileSync(c.filePath, \"utf-8\");\n\n // Parse based on file type\n if (c.filePath.endsWith(\".md\")) {\n const parsed = parseMdFrontmatter(content);\n if (parsed === null) {\n // MD files without frontmatter are not necessarily errors\n // (could be pure prose contracts)\n return { kind: \"skip\" };\n }\n return { kind: \"value\", parsed };\n }\n\n // YAML/JSON files\n try {\n const parsed = c.filePath.endsWith(\".json\") ? JSON.parse(content) : parseYaml(content);\n return { kind: \"value\", parsed };\n } catch (e) {\n const relPath = path.relative(absRoot, c.filePath);\n logErr(`${relPath} — parse error: ${e instanceof Error ? e.message : String(e)}`);\n return { kind: \"error\" };\n }\n}\n\n/**\n * Validate a single parsed manifest candidate against identity rules + the kind\n * registry. Returns the error/warning deltas this candidate contributes.\n */\nfunction validateManifestCandidate(\n c: ManifestCandidate,\n parsed: unknown,\n absRoot: string,\n registry: IAssetKindRegistry,\n strictConformance: boolean,\n): { errors: number; warnings: number } {\n const relPath = path.relative(absRoot, c.filePath);\n let errors = 0;\n let warnings = 0;\n\n // Canonical identity (name/id) compliance — runs for every kind, registered\n // or not. Catches legacy names like \"CLI Concept\" before they hard-error at\n // install/apply time inside parseAssetRef.\n const identityError = checkManifestIdentity(c.kind, parsed);\n if (identityError) {\n logErr(`${relPath} [${c.kind}] — ${identityError}`);\n errors++;\n }\n\n // Agent Skills (agentskills.io) standard conformance — skills only. Advisory\n // warnings by default (exit code unchanged); --strict-conformance escalates\n // every finding to an error.\n if (c.kind === \"skill\" && parsed && typeof parsed === \"object\") {\n const dirName = path.basename(path.dirname(c.filePath)); // SKILL.md's folder\n const findings = checkAgentSkillConformance(parsed as Record<string, unknown>, { dirName });\n for (const f of findings) {\n const line = `${relPath} [skill conformance] — ${f.field}: ${f.message}`;\n if (strictConformance) {\n logErr(line);\n errors++;\n } else {\n logWarn(line);\n warnings++;\n }\n }\n }\n\n // Route validation through the registry (A5: unregistered kinds get a WARN)\n const provider = registry.getProvider(c.kind);\n\n if (!provider) {\n logWarn(`${relPath} [${c.kind}] — kind \"${c.kind}\" is not registered, skipping validation`);\n return { errors, warnings: warnings + 1 };\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 return { errors, warnings };\n}\n\n/** Validate all manifest files in a directory tree using the kind registry. */\nfunction validateManifests(\n rootPath: string,\n strictConformance: boolean,\n): { 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 parseResult = parseManifestCandidate(c, absRoot);\n if (parseResult.kind === \"skip\") continue;\n if (parseResult.kind === \"error\") {\n errors++;\n continue;\n }\n\n const delta = validateManifestCandidate(\n c,\n parseResult.parsed,\n absRoot,\n registry,\n strictConformance,\n );\n errors += delta.errors;\n warnings += delta.warnings;\n }\n\n return { total: candidates.length, errors, warnings };\n}\n\n/** Recursively find every `skaile.yaml` / `*.skaile.yaml` workspace manifest. */\nfunction findWorkspaceManifests(rootPath: string): string[] {\n const out: string[] = [];\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 full = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n if (!SKIP_DIRS.has(entry.name)) walk(full);\n } else if (entry.isFile() && /(^|\\.)skaile\\.yaml$/.test(entry.name)) {\n out.push(full);\n }\n }\n }\n walk(rootPath);\n return out;\n}\n\n/**\n * Validate the dependency refs and asset identities declared in every\n * `skaile.yaml` under a tree. This is the manifest-level mirror of the\n * per-file identity check: it parses each `dependencies[]` /\n * `overrides[].ref` through `parseAssetRef` (the exact code path that produced\n * the original \"publisher required …\" / \"invalid asset name …\" hard error) and\n * checks each `assets[].name` against the canonical name grammar.\n */\n/**\n * Collect every `[field, ref]` pair to validate from a workspace manifest:\n * each string in `dependencies[]` and each `overrides[].ref`.\n */\nfunction collectWorkspaceRefFields(parsed: Record<string, unknown>): Array<[string, string]> {\n const refFields: Array<[string, string]> = [];\n if (Array.isArray(parsed.dependencies)) {\n for (const d of parsed.dependencies) {\n if (typeof d === \"string\") refFields.push([\"dependencies\", d]);\n }\n }\n if (Array.isArray(parsed.overrides)) {\n for (const o of parsed.overrides) {\n const ref = (o as Record<string, unknown>)?.ref;\n if (typeof ref === \"string\") refFields.push([\"overrides.ref\", ref]);\n }\n }\n return refFields;\n}\n\n/** Parse each declared ref through `parseAssetRef`; returns the error count. */\nfunction validateWorkspaceRefs(refFields: Array<[string, string]>, relPath: string): number {\n let errors = 0;\n for (const [field, ref] of refFields) {\n try {\n parseAssetRef(ref);\n } catch (e) {\n logErr(`${relPath} [${field}] — ${e instanceof Error ? e.message : String(e)}`);\n errors++;\n }\n }\n return errors;\n}\n\n/** Validate `assets[].name` against the canonical name/ref grammar. */\nfunction validateWorkspaceAssets(parsed: Record<string, unknown>, relPath: string): number {\n if (!Array.isArray(parsed.assets)) return 0;\n let errors = 0;\n const topPublisher = typeof parsed.publisher === \"string\" ? parsed.publisher : undefined;\n for (const a of parsed.assets) {\n const asset = a as Record<string, unknown>;\n const name = asset?.name;\n const kind = typeof asset?.kind === \"string\" ? asset.kind : \"skill\";\n if (typeof name !== \"string\" || name.length === 0) continue;\n const publisher = typeof asset?.publisher === \"string\" ? asset.publisher : topPublisher;\n if (publisher !== undefined) {\n try {\n parseAssetRef(`${kind}:@${publisher}/${name}`);\n } catch (e) {\n logErr(`${relPath} [assets] — ${e instanceof Error ? e.message : String(e)}`);\n errors++;\n }\n } else if (!isValidAssetName(name)) {\n logErr(`${relPath} [assets] — invalid asset name \"${name}\" — ${ASSET_NAME_HINT}`);\n errors++;\n }\n }\n return errors;\n}\n\nfunction validateWorkspaceManifests(rootPath: string): {\n total: number;\n errors: number;\n} {\n const absRoot = path.resolve(rootPath);\n const files = findWorkspaceManifests(absRoot);\n let errors = 0;\n\n for (const file of files) {\n const relPath = path.relative(absRoot, file);\n let parsed: Record<string, unknown>;\n try {\n parsed = (parseYaml(fs.readFileSync(file, \"utf-8\")) ?? {}) as Record<string, unknown>;\n } catch (e) {\n logErr(`${relPath} — parse error: ${e instanceof Error ? e.message : String(e)}`);\n errors++;\n continue;\n }\n\n errors += validateWorkspaceRefs(collectWorkspaceRefFields(parsed), relPath);\n errors += validateWorkspaceAssets(parsed, relPath);\n }\n\n return { total: files.length, errors };\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 collectFlowVersions(flowsDir, d.name, assets);\n }\n\n // Prompts\n const promptsDir = path.join(domainDir, \"prompts\");\n if (fs.existsSync(promptsDir)) {\n collectPromptVersions(promptsDir, d.name, assets);\n }\n }\n\n return assets;\n}\n\nfunction collectFlowVersions(dir: string, domain: string, out: AssetVersion[]): void {\n for (const f of fs.readdirSync(dir)) {\n if (!f.endsWith(\".flow.yaml\")) continue;\n const fp = path.join(dir, f);\n const content = fs.readFileSync(fp, \"utf-8\");\n const parsed = parseYaml(content);\n out.push({\n kind: \"flow\",\n name: parsed?.id ?? f.replace(\".flow.yaml\", \"\"),\n domain,\n version: parsed?.version ?? \"\",\n filePath: fp,\n });\n }\n}\n\nfunction collectPromptVersions(dir: string, domain: string, out: AssetVersion[]): void {\n for (const f of fs.readdirSync(dir)) {\n if (!f.endsWith(\".prompt.md\")) continue;\n const fp = path.join(dir, f);\n const content = fs.readFileSync(fp, \"utf-8\");\n const fm = parseSkillFrontmatter(content);\n out.push({\n kind: \"prompt\",\n name: fm?.name ?? f.replace(\".prompt.md\", \"\"),\n domain,\n version: fm?.metadata?.version ?? \"\",\n filePath: fp,\n });\n }\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/** Filter assets down to those changed since HEAD (`git diff --name-only`). */\nfunction filterToChangedAssets(assets: AssetVersion[]): AssetVersion[] {\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 return 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/** Check every asset has a present + semver-valid version. */\nfunction checkAssetVersions(assets: AssetVersion[]): { errors: number; warnings: number } {\n let errors = 0;\n let warnings = 0;\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 return { errors, warnings };\n}\n\n/** In --changed-only mode, warn when a changed asset's version was not bumped. */\nfunction checkVersionBumps(assets: AssetVersion[]): number {\n let warnings = 0;\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 return warnings;\n}\n\n/** Validate flow node skill-version pins against the discovered skill versions. */\nfunction checkFlowVersionPins(assets: AssetVersion[]): number {\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 let errors = 0;\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 return errors;\n}\n\n/** Body of `skaile validate versions` — semver + bump + flow-pin checks. */\nfunction runVersionsCheck(opts: {\n domain?: string;\n changedOnly?: boolean;\n strict?: boolean;\n}): void {\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 assets = filterToChangedAssets(assets);\n }\n\n const versionCheck = checkAssetVersions(assets);\n let errors = versionCheck.errors;\n let warnings = versionCheck.warnings;\n\n // In --changed-only mode, check if version was actually bumped\n if (opts.changedOnly) {\n warnings += checkVersionBumps(assets);\n }\n\n errors += checkFlowVersionPins(assets);\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/**\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 .option(\n \"--strict-conformance\",\n \"Treat Agent Skills (agentskills.io) standard findings as errors\",\n )\n .action((targetPath: string, opts: { strictConformance?: boolean }) => {\n const absPath = path.resolve(targetPath);\n logInfo(`Validating manifests in ${absPath}`);\n const { total, errors, warnings } = validateManifests(\n absPath,\n opts.strictConformance ?? false,\n );\n const ws = validateWorkspaceManifests(absPath);\n const totalErrors = errors + ws.errors;\n console.log();\n logInfo(`Scanned ${total} asset manifest(s) and ${ws.total} skaile.yaml file(s)`);\n if (warnings > 0) logWarn(`${warnings} conformance warning(s)`);\n if (totalErrors === 0) {\n logOk(\"All manifests valid\");\n } else {\n logErr(`${totalErrors} 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 runVersionsCheck(opts);\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 { bareSoftDepName, colorRef, logErr, S } from \"../helpers.ts\";\n\n/**\n * Split a dependency ref into its `kind` + `name`, tolerant of both the bare\n * `kind:name` form the user is likely to type and the canonical\n * `kind:@publisher/name#version` form. `kind` is `undefined` when the ref\n * carries no `kind:` prefix — matching then falls back to name-only.\n */\nfunction refKindName(ref: string): { kind?: string; name: string } {\n const trimmed = ref.trim();\n const colon = trimmed.indexOf(\":\");\n let kind = colon === -1 ? undefined : trimmed.slice(0, colon);\n // `parseAssetRef` normalizes the `mcp` shorthand to `mcp-server`, so declared\n // mcp servers surface under that kind — mirror it or the match wrongly misses.\n if (kind === \"mcp\") kind = \"mcp-server\";\n let rest = colon === -1 ? trimmed : trimmed.slice(colon + 1);\n const hash = rest.indexOf(\"#\");\n if (hash !== -1) rest = rest.slice(0, hash);\n if (rest.startsWith(\"@\")) {\n const slash = rest.indexOf(\"/\");\n if (slash !== -1) rest = rest.slice(slash + 1);\n }\n return { kind, name: rest };\n}\n\n/**\n * Pick the right message when `am.why(ref)` returns an empty chain. Two\n * distinct causes need different guidance:\n *\n * - The ref **is** a declared dependency (matches `declared` by kind+name) but\n * isn't in the lock file yet → tell the user to run `skaile install`.\n * - The ref is **not** declared at all → `skaile install` cannot help, so say\n * plainly that nothing in `skaile.yaml` requires it.\n *\n * Pure and terminal-free so it can be unit-tested; the command wires the\n * returned string into `logErr`.\n *\n * @param declared - Declared deps exposing `.kind` + `.name` (from `listDeclared`).\n */\nexport function whyEmptyMessage(\n ref: string,\n declared: Array<{ kind: string; name: string }>,\n): string {\n const { kind, name } = refKindName(ref);\n const isDeclared = declared.some(\n (d) => d.name === name && (kind === undefined || d.kind === kind),\n );\n if (isDeclared) {\n return `${ref} not found in lock file. Run \\`skaile install\\` first.`;\n }\n return `${ref} is not a dependency of this project — nothing in skaile.yaml requires it. Run \\`skaile list\\` to see declared dependencies.`;\n}\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(async (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 // Best-effort: if the declared deps can't be read for any reason (no\n // skaile.yaml, a legacy-key manifest error, …) we can't tell \"declared\"\n // from \"undeclared\", so keep the generic install hint rather than crash.\n let declared: Array<{ kind: string; name: string }>;\n try {\n declared = am.listDeclared();\n } catch {\n logErr(`${ref} not found in lock file. Run \\`skaile install\\` first.`);\n return;\n }\n logErr(whyEmptyMessage(ref, declared));\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 // Inferred body-link soft deps this asset pulls (report-only, distinct from\n // the typed dependency chain above).\n const softDeps = await am.softDepsOf([ref]);\n if (softDeps.length > 0) {\n console.log(\n ` ${S.dim(`also pulls (soft): ${softDeps.map((e) => bareSoftDepName(e.to)).join(\", \")}`)}`,\n );\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 { makeCacheCommand } from \"./commands/cache.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 { makeDeployCommand } from \"./commands/deploy.ts\";\nimport { makeDiffCommand } from \"./commands/diff.ts\";\nimport { makeFlowCommand } from \"./commands/flow.ts\";\nimport { makeHistoryCommand } from \"./commands/history.ts\";\nimport { makeIntegrationCommand } from \"./commands/integration.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-registry-cmd.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 integration install [--driver all] Install agent integration (claude-code | omp | codex)\n integration uninstall [--driver all] Uninstall agent integration\n integration enable Enable integration (claude-code only)\n integration disable Disable integration (claude-code only)\n integration status Show install / enable state across backends\n plugin install <spec> Add a registry plugin to skaile.yaml + reconcile\n plugin remove <name> Remove a registry plugin from skaile.yaml\n plugin list List declared plugins + the targets they contribute\n deploy up [--target] [--detach] Stand the workspace up on a deploy target\n deploy down Tear down the active deploy\n deploy status Show the active deploy's state + ws URL\n deploy logs [--follow] Stream logs from the active deploy\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 [path] Check manifest schemas + canonical asset names/refs\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\n/**\n * Per-backend agent-config defaults emitted by `skaile init`. Keyed by the\n * `--backend` driver target; the values are the bridge driver id (verified\n * against the bridge driver registry) plus the provider/model that apply.\n * omp is model-agnostic, so it carries no provider/model; codex is OpenAI-only\n * with no fixed default model.\n */\nconst BACKEND_DEFAULTS: Record<\n DriverTarget,\n { driver: string; provider?: string; model?: string }\n> = {\n \"claude-code\": { driver: \"claude-sdk\", provider: \"anthropic\", model: \"claude-sonnet-4-6\" },\n omp: { driver: \"omp\" },\n codex: { driver: \"codex\", provider: \"openai\" },\n};\n\nprogram\n .command(\"init [project-dir]\")\n .description(\"Initialize a project directory (defaults to current directory)\")\n .option(\"--backend <name>\", \"Coding-agent backend (claude-code | omp | codex)\", \"claude-code\")\n .option(\"--no-git\", \"Skip git init and .gitignore\")\n .action((projectDir: string | undefined, opts: { backend: string; git: boolean }) =>\n runInit(projectDir, opts),\n );\n\n/** Top-level `skaile init` handler. Extracted from the command action arrow. */\nasync function runInit(\n projectDir: string | undefined,\n opts: { backend: string; git: boolean },\n): Promise<void> {\n const { mkdirSync, writeFileSync } = await import(\"node:fs\");\n const { stringify } = await import(\"yaml\");\n const { DRIVER_TARGETS, SUPPORTED_DRIVER_TARGETS } = await import(\"@skaile/workspaces/core\");\n\n const backend = opts.backend as DriverTarget;\n if (!SUPPORTED_DRIVER_TARGETS.includes(backend)) {\n logErr(`Unknown backend \"${opts.backend}\". Supported: ${SUPPORTED_DRIVER_TARGETS.join(\", \")}`);\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 const { existsSync } = await import(\"node:fs\");\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(wsConfigPath, stringify(buildInitWorkspaceConfig(projectName, backend)));\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 await initGitScaffold(resolved, created);\n }\n\n await bootstrapUserConfig();\n await hydrateInitSources(resolved, created);\n\n printInitSummary(resolved, projectDir, created);\n}\n\n/** Build the default `skaile.yaml` document written by `skaile init`. */\nfunction buildInitWorkspaceConfig(projectName: string, backend: DriverTarget) {\n const backendDefaults = BACKEND_DEFAULTS[backend];\n return {\n name: projectName,\n description: `${projectName} AI skill dependencies`,\n \"agent-config\": {\n default: {\n agent: backend,\n // provider/model are omitted for backends that don't fix them (omp, codex).\n ...(backendDefaults.provider ? { provider: backendDefaults.provider } : {}),\n ...(backendDefaults.model ? { model: backendDefaults.model } : {}),\n driver: backendDefaults.driver,\n max_turns: 200,\n },\n },\n };\n}\n\n/** Write `.gitignore` entries and run `git init` for `skaile init` (best-effort). */\nasync function initGitScaffold(resolved: string, created: string[]): Promise<void> {\n const { execSync } = await import(\"node:child_process\");\n const { existsSync, readFileSync, writeFileSync } = await import(\"node:fs\");\n\n const gitignorePath = path.join(resolved, \".gitignore\");\n const entries = [\n \"node_modules/\",\n \".skaile/sessions/\",\n \".skaile/cache/\",\n // skaile-created artifacts that must never be committed: the per-session log\n // DB (SQLite incl. -shm/-wal, ends in .db — not caught by *.log), personal\n // settings (holds API keys), and the install history.\n \".skaile/logs.db*\",\n \".skaile/settings.json\",\n \".skaile/history.yaml\",\n \"*.log\",\n \".env\",\n \".env.local\",\n ];\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/** Bootstrap the default user config (`~/.skaile/config.yaml`) when missing. */\nasync function bootstrapUserConfig(): Promise<void> {\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\n/** Hydrate sources declared in skaile.yaml — no-op when none. */\nasync function hydrateInitSources(resolved: string, created: string[]): Promise<void> {\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/cache/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\n/** Print the created-files list and the post-init next steps. */\nfunction printInitSummary(\n resolved: string,\n projectDir: string | undefined,\n created: string[],\n): void {\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(\n ` ${S.dim(`${step}.`)} ${S.cmd(\"skaile add <ref>\")} ${S.dim(\"— add a dependency and deploy it in one step\")}`,\n );\n step++;\n console.log(\n ` ${S.dim(`${step}.`)} ${S.dim(\"or:\")} edit ${S.cmd(\"skaile.yaml\")} to add dependencies, then ${S.cmd(\"skaile install\")}`,\n );\n step++;\n console.log(\n ` ${S.dim(`${step}.`)} ${S.cmd(\"skaile search <query>\")} ${S.dim(\"— find assets to add\")}`,\n );\n step++;\n console.log(\n ` ${S.dim(`${step}.`)} ${S.cmd(\"skaile preset apply <file>\")} ${S.dim(\"— apply a saved preset (assets + config) at once\")}`,\n );\n console.log();\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(makeCacheCommand());\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(makeIntegrationCommand());\nprogram.addCommand(makePluginCommand());\nprogram.addCommand(makeDeployCommand());\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"]}
|