@kitnai/cli 0.1.26 → 0.1.28
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/dist/index.js +63 -16
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -199,7 +199,8 @@ async function writeLock(projectDir, lock) {
|
|
|
199
199
|
}
|
|
200
200
|
function getInstallPath(config, type, fileName, namespace) {
|
|
201
201
|
const aliasKey = typeToAliasKey[type];
|
|
202
|
-
const
|
|
202
|
+
const baseAlias = config.aliases.base ?? "src/ai";
|
|
203
|
+
const base = config.aliases[aliasKey] ?? join3(baseAlias, aliasKey);
|
|
203
204
|
if (namespace && namespace !== "@kitn") {
|
|
204
205
|
const nsDir = namespace.replace("@", "");
|
|
205
206
|
return join3(base, nsDir, fileName);
|
|
@@ -210,7 +211,7 @@ var componentType, installedComponentSchema, registryEntrySchema, registryValueS
|
|
|
210
211
|
var init_config = __esm({
|
|
211
212
|
"src/utils/config.ts"() {
|
|
212
213
|
"use strict";
|
|
213
|
-
componentType = z.enum(["kitn:agent", "kitn:tool", "kitn:skill", "kitn:storage", "kitn:package"]);
|
|
214
|
+
componentType = z.enum(["kitn:agent", "kitn:tool", "kitn:skill", "kitn:storage", "kitn:package", "kitn:cron"]);
|
|
214
215
|
installedComponentSchema = z.object({
|
|
215
216
|
registry: z.string().optional(),
|
|
216
217
|
type: componentType.optional(),
|
|
@@ -236,7 +237,8 @@ var init_config = __esm({
|
|
|
236
237
|
agents: z.string(),
|
|
237
238
|
tools: z.string(),
|
|
238
239
|
skills: z.string(),
|
|
239
|
-
storage: z.string()
|
|
240
|
+
storage: z.string(),
|
|
241
|
+
crons: z.string().optional()
|
|
240
242
|
}),
|
|
241
243
|
registries: z.record(z.string(), registryValueSchema)
|
|
242
244
|
});
|
|
@@ -252,7 +254,8 @@ var init_config = __esm({
|
|
|
252
254
|
"kitn:agent": "agents",
|
|
253
255
|
"kitn:tool": "tools",
|
|
254
256
|
"kitn:skill": "skills",
|
|
255
|
-
"kitn:storage": "storage"
|
|
257
|
+
"kitn:storage": "storage",
|
|
258
|
+
"kitn:cron": "crons"
|
|
256
259
|
};
|
|
257
260
|
}
|
|
258
261
|
});
|
|
@@ -646,6 +649,7 @@ function rewriteKitnImports(content, fileType, fileName, aliases) {
|
|
|
646
649
|
const sourceAliasKey = TYPE_TO_ALIAS_KEY[fileType];
|
|
647
650
|
if (!sourceAliasKey) return content;
|
|
648
651
|
const sourceDir = aliases[sourceAliasKey];
|
|
652
|
+
if (!sourceDir) return content;
|
|
649
653
|
return content.replace(
|
|
650
654
|
/((?:import|export)\s+.*?\s+from\s+["'])@kitn\/([\w-]+)\/([^"']+)(["'])/g,
|
|
651
655
|
(_match, prefix, type, targetPath, quote) => {
|
|
@@ -653,6 +657,9 @@ function rewriteKitnImports(content, fileType, fileName, aliases) {
|
|
|
653
657
|
return `${prefix}@kitn/${type}/${targetPath}${quote}`;
|
|
654
658
|
}
|
|
655
659
|
const targetDir = aliases[type];
|
|
660
|
+
if (!targetDir) {
|
|
661
|
+
return `${prefix}@kitn/${type}/${targetPath}${quote}`;
|
|
662
|
+
}
|
|
656
663
|
const targetFile = join6(targetDir, targetPath);
|
|
657
664
|
let rel = relative(sourceDir, targetFile);
|
|
658
665
|
rel = rel.split("\\").join("/");
|
|
@@ -667,12 +674,13 @@ var KNOWN_TYPES, TYPE_TO_ALIAS_KEY;
|
|
|
667
674
|
var init_import_rewriter = __esm({
|
|
668
675
|
"src/installers/import-rewriter.ts"() {
|
|
669
676
|
"use strict";
|
|
670
|
-
KNOWN_TYPES = ["agents", "tools", "skills", "storage"];
|
|
677
|
+
KNOWN_TYPES = ["agents", "tools", "skills", "storage", "crons"];
|
|
671
678
|
TYPE_TO_ALIAS_KEY = {
|
|
672
679
|
"kitn:agent": "agents",
|
|
673
680
|
"kitn:tool": "tools",
|
|
674
681
|
"kitn:skill": "skills",
|
|
675
|
-
"kitn:storage": "storage"
|
|
682
|
+
"kitn:storage": "storage",
|
|
683
|
+
"kitn:cron": "crons"
|
|
676
684
|
};
|
|
677
685
|
}
|
|
678
686
|
});
|
|
@@ -739,14 +747,17 @@ var init_type_aliases = __esm({
|
|
|
739
747
|
storage: "storage",
|
|
740
748
|
storages: "storage",
|
|
741
749
|
package: "package",
|
|
742
|
-
packages: "package"
|
|
750
|
+
packages: "package",
|
|
751
|
+
cron: "cron",
|
|
752
|
+
crons: "cron"
|
|
743
753
|
};
|
|
744
754
|
SHORT_TO_COMPONENT = {
|
|
745
755
|
agent: "kitn:agent",
|
|
746
756
|
tool: "kitn:tool",
|
|
747
757
|
skill: "kitn:skill",
|
|
748
758
|
storage: "kitn:storage",
|
|
749
|
-
package: "kitn:package"
|
|
759
|
+
package: "kitn:package",
|
|
760
|
+
cron: "kitn:cron"
|
|
750
761
|
};
|
|
751
762
|
}
|
|
752
763
|
});
|
|
@@ -757,7 +768,7 @@ var componentType2, registryFileSchema, changelogEntrySchema, envVarConfigSchema
|
|
|
757
768
|
var init_schema = __esm({
|
|
758
769
|
"src/registry/schema.ts"() {
|
|
759
770
|
"use strict";
|
|
760
|
-
componentType2 = z2.enum(["kitn:agent", "kitn:tool", "kitn:skill", "kitn:storage", "kitn:package"]);
|
|
771
|
+
componentType2 = z2.enum(["kitn:agent", "kitn:tool", "kitn:skill", "kitn:storage", "kitn:package", "kitn:cron"]);
|
|
761
772
|
registryFileSchema = z2.object({
|
|
762
773
|
path: z2.string(),
|
|
763
774
|
content: z2.string(),
|
|
@@ -835,7 +846,8 @@ var init_schema = __esm({
|
|
|
835
846
|
"kitn:tool": "tools",
|
|
836
847
|
"kitn:skill": "skills",
|
|
837
848
|
"kitn:storage": "storage",
|
|
838
|
-
"kitn:package": "package"
|
|
849
|
+
"kitn:package": "package",
|
|
850
|
+
"kitn:cron": "crons"
|
|
839
851
|
};
|
|
840
852
|
}
|
|
841
853
|
});
|
|
@@ -1221,6 +1233,8 @@ async function addCommand(components, opts) {
|
|
|
1221
1233
|
return "skills";
|
|
1222
1234
|
case "kitn:storage":
|
|
1223
1235
|
return "storage";
|
|
1236
|
+
case "kitn:cron":
|
|
1237
|
+
return "crons";
|
|
1224
1238
|
}
|
|
1225
1239
|
})();
|
|
1226
1240
|
const fileName = file.path.split("/").pop();
|
|
@@ -1282,7 +1296,7 @@ async function addCommand(components, opts) {
|
|
|
1282
1296
|
};
|
|
1283
1297
|
}
|
|
1284
1298
|
}
|
|
1285
|
-
const BARREL_ELIGIBLE = /* @__PURE__ */ new Set(["kitn:agent", "kitn:tool", "kitn:skill"]);
|
|
1299
|
+
const BARREL_ELIGIBLE = /* @__PURE__ */ new Set(["kitn:agent", "kitn:tool", "kitn:skill", "kitn:cron"]);
|
|
1286
1300
|
const baseDir = config.aliases.base ?? "src/ai";
|
|
1287
1301
|
const barrelPath = join7(cwd, baseDir, "index.ts");
|
|
1288
1302
|
const barrelDir = join7(cwd, baseDir);
|
|
@@ -1544,7 +1558,7 @@ async function initCommand(opts = {}) {
|
|
|
1544
1558
|
const pluginPath = join8(aiDir, "plugin.ts");
|
|
1545
1559
|
await writeFile7(pluginPath, getPluginTemplate(framework));
|
|
1546
1560
|
p3.log.success(`Created ${pc4.bold(baseDir + "/plugin.ts")} \u2014 configure your AI provider there`);
|
|
1547
|
-
const mountCode = framework === "elysia" ? `app.use(ai.router);` : `app.route("/api", ai.router);`;
|
|
1561
|
+
const mountCode = framework === "elysia" ? `app.use(new Elysia({ prefix: "/api" }).use(ai.router));` : `app.route("/api", ai.router);`;
|
|
1548
1562
|
p3.note(
|
|
1549
1563
|
[
|
|
1550
1564
|
`import { ai } from "@kitn/plugin";`,
|
|
@@ -2060,6 +2074,35 @@ export function ${camel}(config?: Record<string, unknown>): StorageProvider {
|
|
|
2060
2074
|
}
|
|
2061
2075
|
`;
|
|
2062
2076
|
}
|
|
2077
|
+
function generateCronSource(name) {
|
|
2078
|
+
const camel = toCamelCase(name);
|
|
2079
|
+
return `import { registerTool } from "@kitn/core";
|
|
2080
|
+
import { tool } from "ai";
|
|
2081
|
+
import { z } from "zod";
|
|
2082
|
+
|
|
2083
|
+
// Cron job: ${name}
|
|
2084
|
+
// This file defines tools for a cron job. Register the cron via the API:
|
|
2085
|
+
// POST /api/crons { name: "${name}", schedule: "0 6 * * *", agentName: "...", input: "..." }
|
|
2086
|
+
|
|
2087
|
+
export const ${camel} = tool({
|
|
2088
|
+
description: "Execute the ${name} cron task",
|
|
2089
|
+
parameters: z.object({
|
|
2090
|
+
input: z.string().describe("Task input"),
|
|
2091
|
+
}),
|
|
2092
|
+
execute: async ({ input }) => {
|
|
2093
|
+
// TODO: implement
|
|
2094
|
+
return { result: input };
|
|
2095
|
+
},
|
|
2096
|
+
});
|
|
2097
|
+
|
|
2098
|
+
registerTool({
|
|
2099
|
+
name: "${name}",
|
|
2100
|
+
description: "",
|
|
2101
|
+
inputSchema: z.object({ input: z.string() }),
|
|
2102
|
+
tool: ${camel},
|
|
2103
|
+
});
|
|
2104
|
+
`;
|
|
2105
|
+
}
|
|
2063
2106
|
async function createComponentInProject(type, name, opts) {
|
|
2064
2107
|
if (!VALID_TYPES.includes(type)) {
|
|
2065
2108
|
throw new Error(
|
|
@@ -2096,6 +2139,9 @@ async function createComponentInProject(type, name, opts) {
|
|
|
2096
2139
|
case "storage":
|
|
2097
2140
|
source = generateStorageSource(name);
|
|
2098
2141
|
break;
|
|
2142
|
+
case "cron":
|
|
2143
|
+
source = generateCronSource(name);
|
|
2144
|
+
break;
|
|
2099
2145
|
}
|
|
2100
2146
|
await writeComponentFile(filePath, source);
|
|
2101
2147
|
let barrelUpdated = false;
|
|
@@ -2142,14 +2188,15 @@ var init_create = __esm({
|
|
|
2142
2188
|
init_config();
|
|
2143
2189
|
init_file_writer();
|
|
2144
2190
|
init_barrel_manager();
|
|
2145
|
-
VALID_TYPES = ["agent", "tool", "skill", "storage"];
|
|
2191
|
+
VALID_TYPES = ["agent", "tool", "skill", "storage", "cron"];
|
|
2146
2192
|
typeToKitnType = {
|
|
2147
2193
|
agent: "kitn:agent",
|
|
2148
2194
|
tool: "kitn:tool",
|
|
2149
2195
|
skill: "kitn:skill",
|
|
2150
|
-
storage: "kitn:storage"
|
|
2196
|
+
storage: "kitn:storage",
|
|
2197
|
+
cron: "kitn:cron"
|
|
2151
2198
|
};
|
|
2152
|
-
BARREL_TYPES = ["agent", "tool", "skill"];
|
|
2199
|
+
BARREL_TYPES = ["agent", "tool", "skill", "cron"];
|
|
2153
2200
|
}
|
|
2154
2201
|
});
|
|
2155
2202
|
|
|
@@ -2419,7 +2466,7 @@ var init_registry = __esm({
|
|
|
2419
2466
|
// src/index.ts
|
|
2420
2467
|
init_update_check();
|
|
2421
2468
|
import { Command } from "commander";
|
|
2422
|
-
var VERSION = true ? "0.1.
|
|
2469
|
+
var VERSION = true ? "0.1.28" : "0.0.0-dev";
|
|
2423
2470
|
var printUpdateNotice = startUpdateCheck(VERSION);
|
|
2424
2471
|
var program = new Command().name("kitn").description("Install AI agent components from the kitn registry").version(VERSION);
|
|
2425
2472
|
program.command("init").description("Initialize kitn in your project").option("-r, --runtime <runtime>", "runtime to use (bun, node, deno)").option("-f, --framework <framework>", "HTTP framework (hono, hono-openapi, elysia)").option("-b, --base <path>", "base directory for components (default: src/ai)").option("-y, --yes", "accept all defaults without prompting").action(async (opts) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/detect.ts","../src/utils/update-check.ts","../src/utils/config.ts","../src/installers/tsconfig-patcher.ts","../src/installers/barrel-manager.ts","../src/registry/fetcher.ts","../src/registry/resolver.ts","../src/installers/file-writer.ts","../src/installers/dep-installer.ts","../src/installers/env-writer.ts","../src/installers/import-rewriter.ts","../src/utils/hash.ts","../src/utils/parse-ref.ts","../src/utils/type-aliases.ts","../src/registry/schema.ts","../src/commands/add.ts","../src/commands/init.ts","../src/commands/list.ts","../src/commands/diff.ts","../src/commands/remove.ts","../src/commands/update.ts","../src/commands/create.ts","../src/commands/info.ts","../src/commands/check.ts","../src/commands/registry.ts","../src/index.ts"],"sourcesContent":["import { access } from \"fs/promises\";\nimport { join } from \"path\";\n\nexport type PackageManager = \"bun\" | \"pnpm\" | \"yarn\" | \"npm\";\n\nconst LOCKFILE_MAP: [string, PackageManager][] = [\n [\"bun.lock\", \"bun\"],\n [\"bun.lockb\", \"bun\"],\n [\"pnpm-lock.yaml\", \"pnpm\"],\n [\"yarn.lock\", \"yarn\"],\n [\"package-lock.json\", \"npm\"],\n];\n\nexport async function detectPackageManager(dir: string): Promise<PackageManager | null> {\n for (const [lockfile, pm] of LOCKFILE_MAP) {\n try {\n await access(join(dir, lockfile));\n return pm;\n } catch {\n // lockfile doesn't exist, try next\n }\n }\n return null;\n}\n\nexport function getInstallCommand(pm: PackageManager, packages: string[]): string {\n const pkgs = packages.join(\" \");\n switch (pm) {\n case \"bun\":\n return `bun add ${pkgs}`;\n case \"pnpm\":\n return `pnpm add ${pkgs}`;\n case \"yarn\":\n return `yarn add ${pkgs}`;\n case \"npm\":\n return `npm install ${pkgs}`;\n }\n}\n\nexport function getRunCommand(pm: PackageManager): string {\n switch (pm) {\n case \"bun\":\n return \"bunx\";\n case \"pnpm\":\n return \"pnpm dlx\";\n case \"yarn\":\n return \"yarn dlx\";\n case \"npm\":\n return \"npx\";\n }\n}\n\n/**\n * Detects which package manager was used to invoke the CLI globally.\n * Checks npm_config_user_agent first, falls back to process.env._, defaults to npm.\n */\nexport function detectCliInstaller(): PackageManager {\n const userAgent = process.env.npm_config_user_agent ?? \"\";\n if (userAgent.startsWith(\"bun/\")) return \"bun\";\n if (userAgent.startsWith(\"pnpm/\")) return \"pnpm\";\n if (userAgent.startsWith(\"yarn/\")) return \"yarn\";\n if (userAgent.startsWith(\"npm/\")) return \"npm\";\n\n const invoker = process.env._ ?? \"\";\n if (invoker.includes(\"bun\")) return \"bun\";\n if (invoker.includes(\"pnpm\")) return \"pnpm\";\n if (invoker.includes(\"yarn\")) return \"yarn\";\n\n return \"npm\";\n}\n\nexport function getGlobalInstallCommand(pm: PackageManager, pkg: string): string {\n switch (pm) {\n case \"bun\":\n return `bun install -g ${pkg}`;\n case \"pnpm\":\n return `pnpm add -g ${pkg}`;\n case \"yarn\":\n return `yarn global add ${pkg}`;\n case \"npm\":\n return `npm install -g ${pkg}`;\n }\n}\n","import { readFile, writeFile, mkdir } from \"fs/promises\";\nimport { join } from \"path\";\nimport { homedir } from \"os\";\nimport pc from \"picocolors\";\nimport { detectCliInstaller, getRunCommand, getGlobalInstallCommand } from \"./detect.js\";\n\nconst CACHE_DIR = join(homedir(), \".kitn\");\nconst CACHE_FILE = join(CACHE_DIR, \"update-check.json\");\nconst CHECK_INTERVAL = 60 * 60 * 1000; // 1 hour\n\ninterface CacheEntry {\n latest: string;\n checkedAt: number;\n}\n\nasync function readCache(): Promise<CacheEntry | null> {\n try {\n const raw = await readFile(CACHE_FILE, \"utf-8\");\n return JSON.parse(raw);\n } catch {\n return null;\n }\n}\n\nasync function writeCache(entry: CacheEntry): Promise<void> {\n try {\n await mkdir(CACHE_DIR, { recursive: true });\n await writeFile(CACHE_FILE, JSON.stringify(entry));\n } catch {\n // Silently ignore cache write failures\n }\n}\n\nexport async function fetchLatestVersion(): Promise<string | null> {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 3000);\n const res = await fetch(\"https://registry.npmjs.org/@kitnai/cli/latest\", {\n signal: controller.signal,\n });\n clearTimeout(timeout);\n if (!res.ok) return null;\n const data = (await res.json()) as { version?: string };\n return data.version ?? null;\n } catch {\n return null;\n }\n}\n\nexport function isNewer(latest: string, current: string): boolean {\n const [lMaj, lMin, lPat] = latest.split(\".\").map(Number);\n const [cMaj, cMin, cPat] = current.split(\".\").map(Number);\n if (lMaj !== cMaj) return lMaj > cMaj;\n if (lMin !== cMin) return lMin > cMin;\n return lPat > cPat;\n}\n\n/**\n * Starts a non-blocking update check. Returns a function that,\n * when called, prints the update notice if a newer version was found.\n */\nexport function startUpdateCheck(currentVersion: string): () => void {\n let message = \"\";\n\n // Fire-and-forget: don't block CLI startup\n const check = (async () => {\n const cache = await readCache();\n let latest: string | null = null;\n\n if (cache && Date.now() - cache.checkedAt < CHECK_INTERVAL) {\n latest = cache.latest;\n } else {\n latest = await fetchLatestVersion();\n if (latest) {\n await writeCache({ latest, checkedAt: Date.now() });\n }\n }\n\n if (latest && isNewer(latest, currentVersion)) {\n const pm = detectCliInstaller();\n const runCmd = `${getRunCommand(pm)} @kitnai/cli@latest`;\n const installCmd = getGlobalInstallCommand(pm, \"@kitnai/cli\");\n message = [\n \"\",\n pc.yellow(` Update available: ${pc.dim(currentVersion)} → ${pc.green(latest)}`),\n pc.dim(` Run ${pc.cyan(runCmd)} or ${pc.cyan(installCmd)}`),\n \"\",\n ].join(\"\\n\");\n }\n })();\n\n // Suppress unhandled rejection from the fire-and-forget promise\n check.catch(() => {});\n\n return () => {\n if (message) process.stderr.write(message);\n };\n}\n","import { readFile, writeFile, unlink } from \"fs/promises\";\nimport { join } from \"path\";\nimport { z } from \"zod\";\n\nconst componentType = z.enum([\"kitn:agent\", \"kitn:tool\", \"kitn:skill\", \"kitn:storage\", \"kitn:package\"]);\ntype ComponentType = z.infer<typeof componentType>;\n\nconst installedComponentSchema = z.object({\n registry: z.string().optional(),\n type: componentType.optional(),\n slot: z.string().optional(),\n version: z.string(),\n installedAt: z.string(),\n files: z.array(z.string()),\n hash: z.string(),\n registryDependencies: z.array(z.string()).optional(),\n});\n\nconst registryEntrySchema = z.object({\n url: z.string(),\n homepage: z.string().optional(),\n description: z.string().optional(),\n});\n\nexport type RegistryEntry = z.infer<typeof registryEntrySchema>;\n\n// Registries can be a plain URL string (backward compat) or a rich entry object\nconst registryValueSchema = z.union([z.string(), registryEntrySchema]);\n\nexport const configSchema = z.object({\n $schema: z.string().optional(),\n runtime: z.enum([\"bun\", \"node\", \"deno\"]),\n framework: z.enum([\"hono\", \"hono-openapi\", \"cloudflare\", \"elysia\", \"fastify\", \"express\"]).optional(),\n aliases: z.object({\n base: z.string().optional(),\n agents: z.string(),\n tools: z.string(),\n skills: z.string(),\n storage: z.string(),\n }),\n registries: z.record(z.string(), registryValueSchema),\n});\n\nexport type KitnConfig = z.infer<typeof configSchema>;\n\n/** Extract the URL from a registry entry (string or object). */\nexport function getRegistryUrl(entry: string | RegistryEntry): string {\n return typeof entry === \"string\" ? entry : entry.url;\n}\n\nconst FRAMEWORK_TO_ADAPTER: Record<string, string> = {\n hono: \"hono\",\n \"hono-openapi\": \"hono-openapi\",\n elysia: \"elysia\",\n};\n\nexport function resolveRoutesAlias(config: KitnConfig): string {\n const fw = config.framework ?? \"hono\";\n return FRAMEWORK_TO_ADAPTER[fw] ?? fw;\n}\n\nconst CONFIG_FILE = \"kitn.json\";\nconst LOCK_FILE = \"kitn.lock\";\n\nexport async function readConfig(projectDir: string): Promise<KitnConfig | null> {\n try {\n const raw = await readFile(join(projectDir, CONFIG_FILE), \"utf-8\");\n return configSchema.parse(JSON.parse(raw));\n } catch {\n return null;\n }\n}\n\nexport async function writeConfig(projectDir: string, config: KitnConfig): Promise<void> {\n const data = { $schema: \"https://kitn.dev/schema/config.json\", ...config };\n await writeFile(join(projectDir, CONFIG_FILE), JSON.stringify(data, null, 2) + \"\\n\");\n}\n\n// --- Lock file (installed component tracking) ---\n\nexport const lockSchema = z.record(z.string(), installedComponentSchema);\nexport type LockFile = z.infer<typeof lockSchema>;\n\nexport async function readLock(projectDir: string): Promise<LockFile> {\n try {\n const raw = await readFile(join(projectDir, LOCK_FILE), \"utf-8\");\n return lockSchema.parse(JSON.parse(raw));\n } catch {\n return {};\n }\n}\n\nexport async function writeLock(projectDir: string, lock: LockFile): Promise<void> {\n if (Object.keys(lock).length === 0) {\n try {\n await unlink(join(projectDir, LOCK_FILE));\n } catch {\n // File doesn't exist — nothing to delete\n }\n return;\n }\n await writeFile(join(projectDir, LOCK_FILE), JSON.stringify(lock, null, 2) + \"\\n\");\n}\n\ntype RequiredAliasKey = \"agents\" | \"tools\" | \"skills\" | \"storage\";\n\nconst typeToAliasKey: Record<Exclude<ComponentType, \"kitn:package\">, RequiredAliasKey> = {\n \"kitn:agent\": \"agents\",\n \"kitn:tool\": \"tools\",\n \"kitn:skill\": \"skills\",\n \"kitn:storage\": \"storage\",\n};\n\ntype SingleFileComponentType = Exclude<ComponentType, \"kitn:package\">;\n\nexport function getInstallPath(\n config: KitnConfig,\n type: SingleFileComponentType,\n fileName: string,\n namespace?: string,\n): string {\n const aliasKey = typeToAliasKey[type];\n const base = config.aliases[aliasKey];\n if (namespace && namespace !== \"@kitn\") {\n const nsDir = namespace.replace(\"@\", \"\");\n return join(base, nsDir, fileName);\n }\n return join(base, fileName);\n}\n","import { readFile, writeFile } from \"fs/promises\";\nimport { join } from \"path\";\n\n/**\n * Strip single-line (//) and multi-line comments from JSONC,\n * and remove trailing commas before } or ], so JSON.parse succeeds.\n */\nfunction stripJsonc(text: string): string {\n return text\n .replace(/\\/\\/.*$/gm, \"\")\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\n .replace(/,\\s*([}\\]])/g, \"$1\");\n}\n\n/**\n * Patches a tsconfig JSON string with additional paths entries.\n * If removePrefixes is provided, any existing path keys starting with\n * those prefixes are deleted first (useful for cleaning up old aliases).\n * Returns the updated JSON string.\n */\nexport function patchTsconfig(\n tsconfigContent: string,\n paths: Record<string, string[]>,\n removePrefixes?: string[],\n): string {\n const config = JSON.parse(stripJsonc(tsconfigContent));\n\n if (!config.compilerOptions) {\n config.compilerOptions = {};\n }\n if (!config.compilerOptions.paths) {\n config.compilerOptions.paths = {};\n }\n\n if (removePrefixes) {\n for (const key of Object.keys(config.compilerOptions.paths)) {\n if (removePrefixes.some((prefix) => key.startsWith(prefix))) {\n delete config.compilerOptions.paths[key];\n }\n }\n }\n\n for (const [key, value] of Object.entries(paths)) {\n config.compilerOptions.paths[key] = value;\n }\n\n // Ensure minimum compiler options for kitn compatibility.\n // target ES2022+: our code uses Set/Map iteration\n // moduleResolution \"bundler\": resolves node_modules packages and path aliases\n // skipLibCheck: avoids noise from third-party .d.ts files\n const ES_TARGETS = [\"es3\", \"es5\", \"es6\", \"es2015\", \"es2016\", \"es2017\", \"es2018\", \"es2019\", \"es2020\", \"es2021\"];\n const currentTarget = (config.compilerOptions.target ?? \"\").toLowerCase();\n if (!currentTarget || ES_TARGETS.includes(currentTarget)) {\n config.compilerOptions.target = \"ES2022\";\n }\n if (!config.compilerOptions.moduleResolution) {\n config.compilerOptions.moduleResolution = \"bundler\";\n }\n if (!config.compilerOptions.module) {\n config.compilerOptions.module = \"ESNext\";\n }\n if (config.compilerOptions.skipLibCheck === undefined) {\n config.compilerOptions.skipLibCheck = true;\n }\n\n return JSON.stringify(config, null, 2) + \"\\n\";\n}\n\n/**\n * Reads tsconfig.json from projectDir, patches paths, and writes it back.\n * If no tsconfig.json exists, creates one with just the paths.\n */\nexport async function patchProjectTsconfig(\n projectDir: string,\n paths: Record<string, string[]>,\n removePrefixes?: string[],\n): Promise<void> {\n const tsconfigPath = join(projectDir, \"tsconfig.json\");\n let content: string;\n try {\n content = await readFile(tsconfigPath, \"utf-8\");\n } catch {\n content = \"{}\";\n }\n\n const patched = patchTsconfig(content, paths, removePrefixes);\n await writeFile(tsconfigPath, patched);\n}\n","const EXPORT_LINE = 'export { registerWithPlugin } from \"@kitn/core\";';\nconst BARREL_COMMENT = \"// Managed by kitn CLI — components auto-imported below\";\n\nexport function createBarrelFile(): string {\n return `${BARREL_COMMENT}\\n${EXPORT_LINE}\\n`;\n}\n\nexport function addImportToBarrel(content: string, importPath: string): string {\n const importLine = `import \"${importPath}\";`;\n\n // Idempotent — skip if already present\n if (content.includes(importLine)) return content;\n\n // Insert before the export line\n const exportIndex = content.indexOf(EXPORT_LINE);\n if (exportIndex === -1) {\n // No export line found — append both\n return `${content.trimEnd()}\\n${importLine}\\n${EXPORT_LINE}\\n`;\n }\n\n const before = content.slice(0, exportIndex);\n const after = content.slice(exportIndex);\n return `${before}${importLine}\\n${after}`;\n}\n\nexport function removeImportFromBarrel(\n content: string,\n importPath: string,\n): string {\n const importLine = `import \"${importPath}\";`;\n return content\n .split(\"\\n\")\n .filter((line) => line.trim() !== importLine)\n .join(\"\\n\");\n}\n\nexport function parseBarrelFile(content: string): string[] {\n const imports: string[] = [];\n for (const line of content.split(\"\\n\")) {\n const match = line.match(/^import\\s+[\"'](.+)[\"'];?\\s*$/);\n if (match) imports.push(match[1]);\n }\n return imports;\n}\n","import type { RegistryItem, RegistryIndex } from \"./schema.js\";\nimport type { RegistryEntry } from \"../utils/config.js\";\n\ntype TypeDir = \"agents\" | \"tools\" | \"skills\" | \"storage\" | \"package\";\ntype FetchFn = (url: string) => Promise<RegistryItem>;\ntype RegistryValue = string | RegistryEntry;\n\nfunction urlOf(entry: RegistryValue): string {\n return typeof entry === \"string\" ? entry : entry.url;\n}\n\nexport class RegistryFetcher {\n private registries: Record<string, RegistryValue>;\n private cache = new Map<string, Promise<RegistryItem>>();\n private fetchFn: FetchFn;\n\n constructor(registries: Record<string, RegistryValue>, fetchFn?: FetchFn) {\n this.registries = registries;\n this.fetchFn = fetchFn ?? this.defaultFetch;\n }\n\n resolveUrl(name: string, typeDir: TypeDir, namespace = \"@kitn\", version?: string): string {\n const entry = this.registries[namespace];\n if (!entry) throw new Error(`No registry configured for ${namespace}`);\n const template = urlOf(entry);\n const fileName = version ? `${name}@${version}` : name;\n return template.replace(\"{name}\", fileName).replace(\"{type}\", typeDir);\n }\n\n async fetchItem(name: string, typeDir: TypeDir, namespace = \"@kitn\", version?: string): Promise<RegistryItem> {\n const url = this.resolveUrl(name, typeDir, namespace, version);\n if (!this.cache.has(url)) {\n this.cache.set(url, this.fetchFn(url));\n }\n return this.cache.get(url)!;\n }\n\n async fetchIndex(namespace = \"@kitn\"): Promise<RegistryIndex> {\n const entry = this.registries[namespace];\n if (!entry) throw new Error(`No registry configured for ${namespace}`);\n const template = urlOf(entry);\n const baseUrl = template.replace(\"{type}/{name}.json\", \"registry.json\");\n const res = await fetch(baseUrl);\n if (!res.ok) throw new Error(`Failed to fetch registry index: ${res.statusText}`);\n return res.json();\n }\n\n private async defaultFetch(url: string): Promise<RegistryItem> {\n const res = await fetch(url);\n if (!res.ok) throw new Error(`Failed to fetch ${url}: ${res.statusText}`);\n return res.json();\n }\n}\n","import type { RegistryItem } from \"./schema.js\";\n\ntype FetchItemFn = (name: string) => Promise<RegistryItem>;\n\nexport async function resolveDependencies(\n names: string[],\n fetchItem: FetchItemFn\n): Promise<RegistryItem[]> {\n const visited = new Set<string>();\n const items = new Map<string, RegistryItem>();\n const edges: [string, string][] = [];\n\n async function resolve(name: string): Promise<void> {\n if (visited.has(name)) return;\n visited.add(name);\n\n const item = await fetchItem(name);\n items.set(name, item);\n\n const deps = item.registryDependencies ?? [];\n for (const dep of deps) {\n edges.push([dep, name]);\n await resolve(dep);\n }\n }\n\n for (const name of names) {\n await resolve(name);\n }\n\n return topologicalSort(items, edges);\n}\n\nfunction topologicalSort(\n items: Map<string, RegistryItem>,\n edges: [string, string][]\n): RegistryItem[] {\n const inDegree = new Map<string, number>();\n const adjacency = new Map<string, string[]>();\n\n for (const name of items.keys()) {\n inDegree.set(name, 0);\n adjacency.set(name, []);\n }\n\n for (const [from, to] of edges) {\n adjacency.get(from)?.push(to);\n inDegree.set(to, (inDegree.get(to) ?? 0) + 1);\n }\n\n const queue: string[] = [];\n for (const [name, degree] of inDegree) {\n if (degree === 0) queue.push(name);\n }\n\n const sorted: RegistryItem[] = [];\n while (queue.length > 0) {\n const name = queue.shift()!;\n sorted.push(items.get(name)!);\n\n for (const neighbor of adjacency.get(name) ?? []) {\n const newDegree = (inDegree.get(neighbor) ?? 1) - 1;\n inDegree.set(neighbor, newDegree);\n if (newDegree === 0) queue.push(neighbor);\n }\n }\n\n if (sorted.length !== items.size) {\n const missing = [...items.keys()].filter((n) => !sorted.some((s) => s.name === n));\n throw new Error(`Circular dependency detected involving: ${missing.join(\", \")}`);\n }\n\n return sorted;\n}\n","import { readFile, writeFile, mkdir, access } from \"fs/promises\";\nimport { dirname } from \"path\";\nimport { createPatch } from \"diff\";\n\nexport enum FileStatus {\n New = \"new\",\n Identical = \"identical\",\n Different = \"different\",\n}\n\nexport async function checkFileStatus(filePath: string, newContent: string): Promise<FileStatus> {\n try {\n await access(filePath);\n } catch {\n return FileStatus.New;\n }\n const existing = await readFile(filePath, \"utf-8\");\n return existing === newContent ? FileStatus.Identical : FileStatus.Different;\n}\n\nexport function generateDiff(filePath: string, oldContent: string, newContent: string): string {\n return createPatch(filePath, oldContent, newContent, \"local\", \"registry\");\n}\n\nexport async function readExistingFile(filePath: string): Promise<string | null> {\n try {\n return await readFile(filePath, \"utf-8\");\n } catch {\n return null;\n }\n}\n\nexport async function writeComponentFile(filePath: string, content: string): Promise<void> {\n await mkdir(dirname(filePath), { recursive: true });\n await writeFile(filePath, content);\n}\n","import { execSync } from \"child_process\";\nimport type { PackageManager } from \"../utils/detect.js\";\n\nexport function installDependencies(pm: PackageManager, deps: string[], projectDir: string): void {\n if (deps.length === 0) return;\n const pkgs = deps.join(\" \");\n const cmd = (() => {\n switch (pm) {\n case \"bun\": return `bun add ${pkgs}`;\n case \"pnpm\": return `pnpm add ${pkgs}`;\n case \"yarn\": return `yarn add ${pkgs}`;\n case \"npm\": return `npm install ${pkgs}`;\n }\n })();\n execSync(cmd, { cwd: projectDir, stdio: \"pipe\" });\n}\n\nexport function installDevDependencies(pm: PackageManager, deps: string[], projectDir: string): void {\n if (deps.length === 0) return;\n const pkgs = deps.join(\" \");\n const cmd = (() => {\n switch (pm) {\n case \"bun\": return `bun add -d ${pkgs}`;\n case \"pnpm\": return `pnpm add -D ${pkgs}`;\n case \"yarn\": return `yarn add -D ${pkgs}`;\n case \"npm\": return `npm install -D ${pkgs}`;\n }\n })();\n execSync(cmd, { cwd: projectDir, stdio: \"pipe\" });\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { readFile, writeFile, access } from \"fs/promises\";\nimport { join } from \"path\";\nimport type { EnvVarConfig } from \"../registry/schema.js\";\n\n/**\n * Parse a .env file into a Set of defined variable names.\n * Only cares about keys, not values.\n */\nfunction parseEnvKeys(content: string): Set<string> {\n const keys = new Set<string>();\n for (const line of content.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n const eqIndex = trimmed.indexOf(\"=\");\n if (eqIndex > 0) {\n keys.add(trimmed.slice(0, eqIndex).trim());\n }\n }\n return keys;\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function readEnvFile(path: string): Promise<string> {\n try {\n return await readFile(path, \"utf-8\");\n } catch {\n return \"\";\n }\n}\n\n/**\n * Collect all envVars from resolved items, deduplicating by key name.\n * Later items override earlier ones if same key.\n */\nexport function collectEnvVars(\n items: Array<{ envVars?: Record<string, EnvVarConfig> }>\n): Record<string, EnvVarConfig> {\n const merged: Record<string, EnvVarConfig> = {};\n for (const item of items) {\n if (item.envVars) {\n Object.assign(merged, item.envVars);\n }\n }\n return merged;\n}\n\n/**\n * Handle env var setup after component installation:\n * 1. Write missing vars to .env.example (always)\n * 2. Prompt user for missing vars and write to .env (interactive)\n */\nexport async function handleEnvVars(\n cwd: string,\n envVars: Record<string, EnvVarConfig>\n): Promise<void> {\n const keys = Object.keys(envVars);\n if (keys.length === 0) return;\n\n // Read existing .env and .env.example\n const envPath = join(cwd, \".env\");\n const examplePath = join(cwd, \".env.example\");\n\n const envContent = await readEnvFile(envPath);\n const exampleContent = await readEnvFile(examplePath);\n\n const envKeys = parseEnvKeys(envContent);\n const exampleKeys = parseEnvKeys(exampleContent);\n\n // Find vars missing from each file\n const missingFromExample = keys.filter((k) => !exampleKeys.has(k));\n const missingFromEnv = keys.filter((k) => !envKeys.has(k) && !process.env[k]);\n\n // 1. Always append missing vars to .env.example\n if (missingFromExample.length > 0) {\n const lines: string[] = [];\n if (exampleContent && !exampleContent.endsWith(\"\\n\")) lines.push(\"\");\n for (const key of missingFromExample) {\n const config = envVars[key];\n lines.push(`# ${config.description}${config.url ? ` (${config.url})` : \"\"}`);\n lines.push(`${key}=`);\n }\n await writeFile(examplePath, exampleContent + lines.join(\"\\n\") + \"\\n\");\n p.log.info(`Updated ${pc.cyan(\".env.example\")} with ${missingFromExample.length} variable(s)`);\n }\n\n // 2. Prompt for missing env vars\n if (missingFromEnv.length === 0) return;\n\n p.log.message(\"\");\n p.log.warn(\n `${missingFromEnv.length} environment variable(s) needed:`\n );\n for (const key of missingFromEnv) {\n const config = envVars[key];\n const req = config.required !== false ? pc.red(\"*\") : \"\";\n p.log.message(` ${pc.yellow(key)}${req}: ${config.description}${config.url ? pc.dim(` -> ${config.url}`) : \"\"}`);\n }\n\n const shouldPrompt = await p.confirm({\n message: \"Would you like to enter values now?\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldPrompt) || !shouldPrompt) {\n p.log.info(`Add them to ${pc.cyan(\".env\")} when ready.`);\n return;\n }\n\n const newEntries: string[] = [];\n for (const key of missingFromEnv) {\n const config = envVars[key];\n const isSecret = config.secret !== false; // default true\n\n let value: string | symbol;\n if (isSecret) {\n value = await p.password({\n message: `${key}:`,\n });\n } else {\n value = await p.text({\n message: `${key}:`,\n placeholder: config.description,\n });\n }\n\n if (p.isCancel(value)) {\n p.log.info(`Skipped remaining variables. Add them to ${pc.cyan(\".env\")} when ready.`);\n break;\n }\n\n if (value) {\n newEntries.push(`${key}=${value}`);\n }\n }\n\n if (newEntries.length > 0) {\n const existingEnv = await readEnvFile(envPath);\n const lines: string[] = [];\n if (existingEnv && !existingEnv.endsWith(\"\\n\")) lines.push(\"\");\n lines.push(...newEntries);\n await writeFile(envPath, existingEnv + lines.join(\"\\n\") + \"\\n\");\n p.log.success(`Wrote ${newEntries.length} variable(s) to ${pc.cyan(\".env\")}`);\n }\n}\n","import { relative, dirname, join, posix } from \"path\";\n\ntype AliasKey = \"agents\" | \"tools\" | \"skills\" | \"storage\";\n\nconst KNOWN_TYPES: readonly AliasKey[] = [\"agents\", \"tools\", \"skills\", \"storage\"];\n\nconst TYPE_TO_ALIAS_KEY: Record<string, AliasKey> = {\n \"kitn:agent\": \"agents\",\n \"kitn:tool\": \"tools\",\n \"kitn:skill\": \"skills\",\n \"kitn:storage\": \"storage\",\n};\n\n/**\n * Rewrites `@kitn/<type>/<path>` imports to relative paths based on install layout.\n *\n * Only rewrites known types (agents, tools, skills, storage).\n * Other `@kitn/` imports (e.g. `@kitn/server`) pass through untouched.\n */\nexport function rewriteKitnImports(\n content: string,\n fileType: string,\n fileName: string,\n aliases: Record<AliasKey, string>,\n): string {\n const sourceAliasKey = TYPE_TO_ALIAS_KEY[fileType];\n if (!sourceAliasKey) return content;\n\n const sourceDir = aliases[sourceAliasKey];\n\n // Match import/export ... from \"@kitn/<type>/<path>\"\n return content.replace(\n /((?:import|export)\\s+.*?\\s+from\\s+[\"'])@kitn\\/([\\w-]+)\\/([^\"']+)([\"'])/g,\n (_match, prefix: string, type: string, targetPath: string, quote: string) => {\n if (!KNOWN_TYPES.includes(type as AliasKey)) {\n return `${prefix}@kitn/${type}/${targetPath}${quote}`;\n }\n\n const targetDir = aliases[type as AliasKey];\n const targetFile = join(targetDir, targetPath);\n let rel = relative(sourceDir, targetFile);\n\n // Normalize to posix separators\n rel = rel.split(\"\\\\\").join(\"/\");\n\n // Ensure relative path starts with ./ or ../\n if (!rel.startsWith(\".\")) {\n rel = `./${rel}`;\n }\n\n return `${prefix}${rel}${quote}`;\n },\n );\n}\n","import { createHash } from \"crypto\";\n\nexport function contentHash(content: string): string {\n return createHash(\"sha256\").update(content).digest(\"hex\").slice(0, 8);\n}\n","export interface ComponentRef {\n namespace: string;\n name: string;\n version: string | undefined;\n}\n\nexport function parseComponentRef(input: string): ComponentRef {\n let namespace = \"@kitn\";\n let rest = input;\n\n // Parse @namespace/name\n if (rest.startsWith(\"@\")) {\n const slashIdx = rest.indexOf(\"/\");\n if (slashIdx === -1) {\n throw new Error(`Invalid component reference: ${input}. Expected @namespace/name`);\n }\n namespace = rest.slice(0, slashIdx);\n rest = rest.slice(slashIdx + 1);\n }\n\n // Parse name@version\n const atIdx = rest.indexOf(\"@\");\n if (atIdx === -1) {\n return { namespace, name: rest, version: undefined };\n }\n\n return {\n namespace,\n name: rest.slice(0, atIdx),\n version: rest.slice(atIdx + 1),\n };\n}\n","import type { ComponentType } from \"../registry/schema.js\";\n\nexport const TYPE_ALIASES: Record<string, string> = {\n agent: \"agent\",\n agents: \"agent\",\n tool: \"tool\",\n tools: \"tool\",\n skill: \"skill\",\n skills: \"skill\",\n storage: \"storage\",\n storages: \"storage\",\n package: \"package\",\n packages: \"package\",\n};\n\nconst SHORT_TO_COMPONENT: Record<string, ComponentType> = {\n agent: \"kitn:agent\",\n tool: \"kitn:tool\",\n skill: \"kitn:skill\",\n storage: \"kitn:storage\",\n package: \"kitn:package\",\n};\n\n/** Resolve a user-provided type string (e.g. \"agents\") to its canonical short form (e.g. \"agent\"). */\nexport function resolveTypeAlias(input: string): string | undefined {\n return TYPE_ALIASES[input.toLowerCase()];\n}\n\n/** Convert a canonical short type (e.g. \"agent\") to a ComponentType (e.g. \"kitn:agent\"). */\nexport function toComponentType(shortType: string): ComponentType {\n const ct = SHORT_TO_COMPONENT[shortType];\n if (!ct) throw new Error(`Unknown component type: ${shortType}`);\n return ct;\n}\n","import { z } from \"zod\";\n\nexport const componentType = z.enum([\"kitn:agent\", \"kitn:tool\", \"kitn:skill\", \"kitn:storage\", \"kitn:package\"]);\nexport type ComponentType = z.infer<typeof componentType>;\n\nexport const registryFileSchema = z.object({\n path: z.string(),\n content: z.string(),\n type: componentType,\n});\n\nexport const changelogEntrySchema = z.object({\n version: z.string(),\n date: z.string(),\n type: z.enum([\"feature\", \"fix\", \"breaking\", \"initial\"]),\n note: z.string(),\n});\nexport type ChangelogEntry = z.infer<typeof changelogEntrySchema>;\n\nexport const envVarConfigSchema = z.object({\n description: z.string(),\n required: z.boolean().optional(),\n secret: z.boolean().optional(),\n url: z.string().optional(),\n});\nexport type EnvVarConfig = z.infer<typeof envVarConfigSchema>;\n\n/** Schema for the author-facing registry.json file */\nexport const componentConfigSchema = z.object({\n $schema: z.string().optional(),\n type: componentType,\n name: z.string().optional(),\n version: z.string().optional(),\n description: z.string().optional(),\n dependencies: z.array(z.string()).optional(),\n devDependencies: z.array(z.string()).optional(),\n registryDependencies: z.array(z.string()).optional(),\n files: z.array(z.string()).optional(),\n sourceDir: z.string().optional(),\n exclude: z.array(z.string()).optional(),\n installDir: z.string().optional(),\n tsconfig: z.record(z.string(), z.array(z.string())).optional(),\n envVars: z.record(z.string(), envVarConfigSchema).optional(),\n categories: z.array(z.string()).optional(),\n slot: z.string().optional(),\n docs: z.string().optional(),\n changelog: z.array(changelogEntrySchema).optional(),\n});\nexport type ComponentConfig = z.infer<typeof componentConfigSchema>;\n\nexport const registryItemSchema = z.object({\n $schema: z.string().optional(),\n name: z.string(),\n type: componentType,\n description: z.string(),\n dependencies: z.array(z.string()).optional(),\n devDependencies: z.array(z.string()).optional(),\n registryDependencies: z.array(z.string()).optional(),\n envVars: z.record(z.string(), envVarConfigSchema).optional(),\n files: z.array(registryFileSchema),\n installDir: z.string().optional(),\n tsconfig: z.record(z.string(), z.array(z.string())).optional(),\n docs: z.string().optional(),\n categories: z.array(z.string()).optional(),\n slot: z.string().optional(),\n version: z.string().optional(),\n updatedAt: z.string().optional(),\n changelog: z.array(changelogEntrySchema).optional(),\n});\nexport type RegistryItem = z.infer<typeof registryItemSchema>;\n\nexport const registryIndexItemSchema = z.object({\n name: z.string(),\n type: componentType,\n description: z.string(),\n registryDependencies: z.array(z.string()).optional(),\n categories: z.array(z.string()).optional(),\n slot: z.string().optional(),\n version: z.string().optional(),\n versions: z.array(z.string()).optional(),\n updatedAt: z.string().optional(),\n});\n\nexport const registryIndexSchema = z.object({\n $schema: z.string().optional(),\n version: z.string(),\n items: z.array(registryIndexItemSchema),\n});\nexport type RegistryIndex = z.infer<typeof registryIndexSchema>;\n\nexport const typeToDir: Record<ComponentType, string> = {\n \"kitn:agent\": \"agents\",\n \"kitn:tool\": \"tools\",\n \"kitn:skill\": \"skills\",\n \"kitn:storage\": \"storage\",\n \"kitn:package\": \"package\",\n};\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { join, dirname } from \"path\";\nimport { readConfig, writeConfig, getInstallPath, resolveRoutesAlias, readLock, writeLock } from \"../utils/config.js\";\nimport { detectPackageManager } from \"../utils/detect.js\";\nimport { RegistryFetcher } from \"../registry/fetcher.js\";\nimport { resolveDependencies } from \"../registry/resolver.js\";\nimport {\n checkFileStatus,\n writeComponentFile,\n readExistingFile,\n generateDiff,\n FileStatus,\n} from \"../installers/file-writer.js\";\nimport { installDependencies, installDevDependencies } from \"../installers/dep-installer.js\";\nimport { collectEnvVars, handleEnvVars } from \"../installers/env-writer.js\";\nimport { rewriteKitnImports } from \"../installers/import-rewriter.js\";\nimport { createBarrelFile, addImportToBarrel, removeImportFromBarrel } from \"../installers/barrel-manager.js\";\nimport { contentHash } from \"../utils/hash.js\";\nimport { parseComponentRef, type ComponentRef } from \"../utils/parse-ref.js\";\nimport { resolveTypeAlias, toComponentType } from \"../utils/type-aliases.js\";\nimport { typeToDir, type RegistryItem, type ComponentType } from \"../registry/schema.js\";\nimport { existsSync } from \"fs\";\nimport { readFile, writeFile, mkdir, unlink } from \"fs/promises\";\nimport { relative } from \"path\";\n\ninterface AddOptions {\n overwrite?: boolean;\n type?: string;\n}\n\nexport async function addCommand(components: string[], opts: AddOptions) {\n p.intro(pc.bgCyan(pc.black(\" kitn add \")));\n\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n if (!config) {\n p.log.error(\"No kitn.json found. Run `kitn init` first.\");\n process.exit(1);\n }\n\n const lock = await readLock(cwd);\n\n if (components.length === 0) {\n // Interactive browse mode — fetch index, group by type, multi-select\n const fetcher = new RegistryFetcher(config.registries);\n const s = p.spinner();\n s.start(\"Fetching registry...\");\n\n const allItems: Array<{ name: string; type: string; description: string; namespace: string }> = [];\n for (const namespace of Object.keys(config.registries)) {\n try {\n const index = await fetcher.fetchIndex(namespace);\n for (const item of index.items) {\n allItems.push({ name: item.name, type: item.type, description: item.description, namespace });\n }\n } catch {\n // Skip failing registries\n }\n }\n\n s.stop(`Found ${allItems.length} component(s)`);\n\n if (allItems.length === 0) {\n p.log.warn(\"No components found in configured registries.\");\n process.exit(0);\n }\n\n const installed = new Set(Object.keys(lock));\n\n // Group by type, preserving order\n const typeLabels: Record<string, string> = {\n \"kitn:agent\": \"Agents\",\n \"kitn:tool\": \"Tools\",\n \"kitn:skill\": \"Skills\",\n \"kitn:storage\": \"Storage\",\n \"kitn:package\": \"Packages\",\n };\n\n const groups = new Map<string, typeof allItems>();\n for (const item of allItems) {\n if (!groups.has(item.type)) groups.set(item.type, []);\n groups.get(item.type)!.push(item);\n }\n\n const options: Array<{ value: string; label: string; hint?: string }> = [];\n for (const [type, items] of groups) {\n const label = typeLabels[type] ?? type;\n options.push({ value: `__separator_${type}`, label: pc.bold(`── ${label} ${\"─\".repeat(Math.max(0, 40 - label.length))}`), hint: \"\" });\n for (const item of items) {\n const isInstalled = installed.has(item.name);\n options.push({\n value: item.name,\n label: isInstalled ? pc.dim(`${item.name} (installed)`) : item.name,\n hint: item.description,\n });\n }\n }\n\n const selected = await p.multiselect({\n message: \"Select components to install:\",\n options,\n });\n\n if (p.isCancel(selected)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n components = (selected as string[]).filter((s) => !s.startsWith(\"__separator_\"));\n\n if (components.length === 0) {\n p.log.warn(\"No components selected.\");\n process.exit(0);\n }\n }\n\n // --- Positional type argument parsing ---\n // e.g. `kitn add agent weather` → typeFilter=\"agent\", components=[\"weather\"]\n let typeFilter: string | undefined;\n const firstAlias = resolveTypeAlias(components[0]);\n if (firstAlias) {\n if (components.length === 1) {\n p.log.error(\n `${pc.bold(components[0])} looks like a type, not a component name. Usage: ${pc.cyan(`kitn add ${components[0]} <name>`)}`\n );\n process.exit(1);\n }\n typeFilter = firstAlias;\n components = components.slice(1);\n }\n\n // Merge with --type flag (flag wins on conflict)\n if (opts.type) {\n const flagAlias = resolveTypeAlias(opts.type);\n if (!flagAlias) {\n p.log.error(`Unknown type ${pc.bold(opts.type)}. Valid types: agent, tool, skill, storage, package`);\n process.exit(1);\n }\n if (typeFilter && typeFilter !== flagAlias) {\n p.log.warn(`Positional type ${pc.bold(typeFilter)} overridden by --type ${pc.bold(flagAlias)}`);\n }\n typeFilter = flagAlias;\n }\n\n // Resolve \"routes\" to framework-specific adapter name, then parse refs\n const resolvedComponents = components.map((c) => {\n if (c === \"routes\") {\n return resolveRoutesAlias(config);\n }\n return c;\n });\n\n const refs = resolvedComponents.map(parseComponentRef);\n const fetcher = new RegistryFetcher(config.registries);\n\n // --- Disambiguation: resolve ambiguous names before dependency resolution ---\n const s = p.spinner();\n s.start(\"Resolving dependencies...\");\n\n // Build a map of pre-resolved types for explicitly requested components\n const preResolvedTypes = new Map<string, ComponentType>();\n let expandedNames = [...resolvedComponents];\n\n try {\n // Fetch all registry indices\n const namespacesToFetch = Object.keys(config.registries);\n const allIndexItems: Array<{ name: string; type: ComponentType; namespace: string }> = [];\n\n for (const namespace of namespacesToFetch) {\n try {\n const index = await fetcher.fetchIndex(namespace);\n for (const item of index.items) {\n allIndexItems.push({ name: item.name, type: item.type, namespace });\n }\n } catch {\n // Skip failing registries during disambiguation\n }\n }\n\n // Check each explicit component for ambiguity\n const newExpandedNames: string[] = [];\n for (const name of resolvedComponents) {\n const ref = refs.find((r) => r.name === name) ?? { namespace: \"@kitn\", name, version: undefined };\n let matches = allIndexItems.filter((i) => i.name === name && (ref.namespace === \"@kitn\" || i.namespace === ref.namespace));\n\n if (typeFilter) {\n const filteredType = toComponentType(typeFilter);\n matches = matches.filter((m) => m.type === filteredType);\n }\n\n if (matches.length === 0) {\n // No exact match — try substring search\n let fuzzyMatches = allIndexItems.filter(\n (i) => i.name.includes(name) && (ref.namespace === \"@kitn\" || i.namespace === ref.namespace)\n );\n\n if (typeFilter) {\n const filteredType = toComponentType(typeFilter);\n fuzzyMatches = fuzzyMatches.filter((m) => m.type === filteredType);\n }\n\n if (fuzzyMatches.length === 0) {\n // Truly not found — let the resolution phase produce the error\n newExpandedNames.push(name);\n } else if (fuzzyMatches.length === 1) {\n // Single substring match — use it directly\n preResolvedTypes.set(fuzzyMatches[0].name, fuzzyMatches[0].type);\n newExpandedNames.push(fuzzyMatches[0].name);\n } else {\n // Multiple substring matches — prompt user to select\n s.stop(\"Multiple matches found\");\n\n if (!process.stdin.isTTY) {\n const suggestions = fuzzyMatches.map((m) => `${m.name} (${m.type.replace(\"kitn:\", \"\")})`).join(\", \");\n p.log.error(\n `Component ${pc.bold(name)} not found. Did you mean one of: ${suggestions}`\n );\n process.exit(1);\n }\n\n const selected = await p.multiselect({\n message: `No exact match for ${pc.bold(name)}. Select component(s) to install:`,\n options: fuzzyMatches.map((m) => ({\n value: `${m.name}::${m.type}`,\n label: `${m.name} ${pc.dim(`(${m.type.replace(\"kitn:\", \"\")})`)}`,\n })),\n });\n\n if (p.isCancel(selected)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n for (const sel of selected as string[]) {\n const [selName, selType] = sel.split(\"::\");\n preResolvedTypes.set(selName, selType as ComponentType);\n newExpandedNames.push(selName);\n }\n\n s.start(\"Resolving dependencies...\");\n }\n } else if (matches.length === 1) {\n preResolvedTypes.set(name, matches[0].type);\n newExpandedNames.push(name);\n } else {\n // Multiple types for the same name\n const uniqueTypes = [...new Set(matches.map((m) => m.type))];\n if (uniqueTypes.length === 1) {\n preResolvedTypes.set(name, uniqueTypes[0]);\n newExpandedNames.push(name);\n } else {\n // Need disambiguation\n s.stop(\"Disambiguation needed\");\n\n if (!process.stdin.isTTY) {\n const typeNames = uniqueTypes.map((t) => t.replace(\"kitn:\", \"\")).join(\", \");\n p.log.error(\n `Multiple components named ${pc.bold(name)} found (${typeNames}). Specify the type: ${pc.cyan(`kitn add ${uniqueTypes[0].replace(\"kitn:\", \"\")} ${name}`)}`\n );\n process.exit(1);\n }\n\n const selected = await p.multiselect({\n message: `Multiple types found for ${pc.bold(name)}. Which do you want to install?`,\n options: uniqueTypes.map((t) => ({\n value: t,\n label: `${name} ${pc.dim(`(${t.replace(\"kitn:\", \"\")})`)}`,\n })),\n });\n\n if (p.isCancel(selected)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n for (const type of selected as ComponentType[]) {\n preResolvedTypes.set(name, type);\n newExpandedNames.push(name);\n }\n\n s.start(\"Resolving dependencies...\");\n }\n }\n }\n expandedNames = newExpandedNames;\n } catch (err: any) {\n s.stop(pc.red(\"Failed to resolve dependencies\"));\n p.log.error(err.message);\n process.exit(1);\n }\n\n // --- Dependency resolution with type-aware fetching ---\n let resolved: RegistryItem[];\n try {\n resolved = await resolveDependencies(expandedNames, async (name) => {\n const ref = refs.find((r) => r.name === name) ?? { namespace: \"@kitn\", name, version: undefined };\n const index = await fetcher.fetchIndex(ref.namespace);\n\n // Use pre-resolved type for explicit names, first-match for transitive deps\n const preResolved = preResolvedTypes.get(name);\n const indexItem = preResolved\n ? index.items.find((i) => i.name === name && i.type === preResolved)\n : index.items.find((i) => i.name === name);\n\n if (!indexItem) throw new Error(`Component '${name}' not found in ${ref.namespace} registry`);\n const dir = typeToDir[indexItem.type];\n return fetcher.fetchItem(name, dir as any, ref.namespace, ref.version);\n });\n } catch (err: any) {\n s.stop(pc.red(\"Failed to resolve dependencies\"));\n p.log.error(err.message);\n process.exit(1);\n }\n\n s.stop(`Resolved ${resolved.length} component(s)`);\n\n // --- Slot conflict detection ---\n const slotReplacements = new Map<string, string>(); // oldName → newName\n for (const item of resolved) {\n if (!item.slot) continue;\n const existing = Object.entries(lock).find(\n ([key, entry]) => key !== item.name && entry.slot === item.slot\n );\n if (!existing) continue;\n\n const [existingKey] = existing;\n const action = await p.select({\n message: `${pc.bold(existingKey)} already fills the ${pc.cyan(item.slot)} slot. What would you like to do?`,\n options: [\n { value: \"replace\", label: `Replace ${existingKey} with ${item.name}` },\n { value: \"add\", label: `Add alongside ${existingKey}` },\n ],\n });\n\n if (p.isCancel(action)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n if (action === \"replace\") {\n slotReplacements.set(existingKey, item.name);\n }\n }\n\n // Process slot replacements — remove old components\n if (slotReplacements.size > 0) {\n const baseDir = config.aliases.base ?? \"src/ai\";\n for (const [oldKey] of slotReplacements) {\n const oldEntry = lock[oldKey];\n if (!oldEntry) continue;\n\n for (const filePath of oldEntry.files) {\n try {\n await unlink(join(cwd, filePath));\n } catch {\n // File may have been moved or deleted\n }\n }\n\n // Remove barrel imports for deleted files\n const barrelPath = join(cwd, baseDir, \"index.ts\");\n const barrelEligibleDirs = new Set([\n config.aliases.agents,\n config.aliases.tools,\n config.aliases.skills,\n ]);\n\n if (existsSync(barrelPath)) {\n let barrelContent = await readFile(barrelPath, \"utf-8\");\n let barrelChanged = false;\n\n for (const filePath of oldEntry.files) {\n const fileDir = dirname(filePath);\n if (!barrelEligibleDirs.has(fileDir)) continue;\n const barrelDir = join(cwd, baseDir);\n const importPath = \"./\" + relative(barrelDir, join(cwd, filePath)).replace(/\\\\/g, \"/\");\n const updated = removeImportFromBarrel(barrelContent, importPath);\n if (updated !== barrelContent) {\n barrelContent = updated;\n barrelChanged = true;\n }\n }\n\n if (barrelChanged) {\n await writeFile(barrelPath, barrelContent);\n }\n }\n\n delete lock[oldKey];\n p.log.info(`Replaced ${pc.dim(oldKey)} → ${pc.cyan(slotReplacements.get(oldKey)!)}`);\n }\n }\n\n p.log.info(\"Components to install:\\n\" + resolved.map((item) => {\n const isExplicit = expandedNames.includes(item.name) || components.includes(item.name);\n const label = isExplicit ? item.name : `${item.name} ${pc.dim(\"(dependency)\")}`;\n return ` ${pc.cyan(label)}`;\n }).join(\"\\n\"));\n\n const created: string[] = [];\n const updated: string[] = [];\n const skipped: string[] = [];\n const allDeps: string[] = [];\n const allDevDeps: string[] = [];\n for (const item of resolved) {\n if (item.dependencies) allDeps.push(...item.dependencies);\n if (item.devDependencies) allDevDeps.push(...item.devDependencies);\n\n // Skip file processing for packages already installed with identical content\n const existingInstall = lock[item.name];\n if (existingInstall && item.type === \"kitn:package\") {\n const allContent = item.files.map((f) => f.content).join(\"\\n\");\n if (contentHash(allContent) === existingInstall.hash) {\n continue;\n }\n }\n\n if (item.type === \"kitn:package\") {\n // Package install — multi-file, preserved directory structure\n const baseDir = config.aliases.base ?? \"src/ai\";\n\n for (const file of item.files) {\n const targetPath = join(cwd, baseDir, file.path);\n const relativePath = join(baseDir, file.path);\n\n const status = await checkFileStatus(targetPath, file.content);\n\n switch (status) {\n case FileStatus.New:\n await writeComponentFile(targetPath, file.content);\n created.push(relativePath);\n break;\n\n case FileStatus.Identical:\n skipped.push(relativePath);\n break;\n\n case FileStatus.Different:\n if (opts.overwrite) {\n await writeComponentFile(targetPath, file.content);\n updated.push(relativePath);\n } else {\n const existing = await readExistingFile(targetPath);\n const diff = generateDiff(relativePath, existing ?? \"\", file.content);\n p.log.message(pc.dim(diff));\n\n const action = await p.select({\n message: `${relativePath} already exists and differs. What to do?`,\n options: [\n { value: \"skip\", label: \"Keep local version\" },\n { value: \"overwrite\", label: \"Overwrite with registry version\" },\n ],\n });\n\n if (!p.isCancel(action) && action === \"overwrite\") {\n await writeComponentFile(targetPath, file.content);\n updated.push(relativePath);\n } else {\n skipped.push(relativePath);\n }\n }\n break;\n }\n }\n\n // Track in lock\n const allContent = item.files.map((f) => f.content).join(\"\\n\");\n const ref = refs.find((r) => r.name === item.name) ?? { namespace: \"@kitn\", name: item.name, version: undefined };\n const installedKey = ref.namespace === \"@kitn\" ? item.name : `${ref.namespace}/${item.name}`;\n lock[installedKey] = {\n registry: ref.namespace,\n type: item.type,\n ...(item.slot && { slot: item.slot }),\n version: item.version ?? \"1.0.0\",\n installedAt: new Date().toISOString(),\n files: item.files.map((f) => join(baseDir, f.path)),\n hash: contentHash(allContent),\n registryDependencies: item.registryDependencies,\n };\n\n } else {\n // Regular component install — single file, import rewriting\n const ref = refs.find((r) => r.name === item.name) ?? { namespace: \"@kitn\", name: item.name, version: undefined };\n const ns = ref.namespace;\n\n for (const file of item.files) {\n const aliasKey = (() => {\n switch (item.type) {\n case \"kitn:agent\": return \"agents\";\n case \"kitn:tool\": return \"tools\";\n case \"kitn:skill\": return \"skills\";\n case \"kitn:storage\": return \"storage\";\n }\n })() as \"agents\" | \"tools\" | \"skills\" | \"storage\";\n\n const fileName = file.path.split(\"/\").pop()!;\n const installPath = getInstallPath(config, item.type as Exclude<ComponentType, \"kitn:package\">, fileName, ns);\n const targetPath = join(cwd, installPath);\n const relativePath = installPath;\n const content = rewriteKitnImports(file.content, item.type, fileName, config.aliases);\n\n const status = await checkFileStatus(targetPath, content);\n\n switch (status) {\n case FileStatus.New:\n await writeComponentFile(targetPath, content);\n created.push(relativePath);\n break;\n\n case FileStatus.Identical:\n skipped.push(relativePath);\n break;\n\n case FileStatus.Different:\n if (opts.overwrite) {\n await writeComponentFile(targetPath, content);\n updated.push(relativePath);\n } else {\n const existing = await readExistingFile(targetPath);\n const diff = generateDiff(relativePath, existing ?? \"\", content);\n p.log.message(pc.dim(diff));\n\n const action = await p.select({\n message: `${relativePath} already exists and differs. What to do?`,\n options: [\n { value: \"skip\", label: \"Keep local version\" },\n { value: \"overwrite\", label: \"Overwrite with registry version\" },\n ],\n });\n\n if (!p.isCancel(action) && action === \"overwrite\") {\n await writeComponentFile(targetPath, content);\n updated.push(relativePath);\n } else {\n skipped.push(relativePath);\n }\n }\n break;\n }\n }\n\n // Track in lock\n const allContent = item.files.map((f) => {\n const fn = f.path.split(\"/\").pop()!;\n return rewriteKitnImports(f.content, item.type, fn, config.aliases);\n }).join(\"\\n\");\n const installedKey = ns === \"@kitn\" ? item.name : `${ns}/${item.name}`;\n lock[installedKey] = {\n registry: ns,\n type: item.type,\n ...(item.slot && { slot: item.slot }),\n version: item.version ?? \"1.0.0\",\n installedAt: new Date().toISOString(),\n files: item.files.map((f) => {\n const fileName = f.path.split(\"/\").pop()!;\n return getInstallPath(config, item.type as Exclude<ComponentType, \"kitn:package\">, fileName, ns);\n }),\n hash: contentHash(allContent),\n registryDependencies: item.registryDependencies,\n };\n }\n }\n\n // Barrel management — auto-wire imports for barrel-eligible components\n const BARREL_ELIGIBLE: Set<string> = new Set([\"kitn:agent\", \"kitn:tool\", \"kitn:skill\"]);\n const baseDir = config.aliases.base ?? \"src/ai\";\n const barrelPath = join(cwd, baseDir, \"index.ts\");\n const barrelDir = join(cwd, baseDir);\n\n const barrelImports: string[] = [];\n for (const item of resolved) {\n if (!BARREL_ELIGIBLE.has(item.type)) continue;\n\n const ref = refs.find((r) => r.name === item.name) ?? { namespace: \"@kitn\", name: item.name, version: undefined };\n\n for (const file of item.files) {\n const fileName = file.path.split(\"/\").pop()!;\n const installPath = getInstallPath(config, item.type as Exclude<ComponentType, \"kitn:package\">, fileName, ref.namespace);\n const filePath = join(cwd, installPath);\n const importPath = \"./\" + relative(barrelDir, filePath).replace(/\\\\/g, \"/\");\n barrelImports.push(importPath);\n }\n }\n\n if (barrelImports.length > 0) {\n const barrelExisted = existsSync(barrelPath);\n let barrelContent: string;\n\n if (barrelExisted) {\n barrelContent = await readFile(barrelPath, \"utf-8\");\n } else {\n await mkdir(barrelDir, { recursive: true });\n barrelContent = createBarrelFile();\n }\n\n for (const importPath of barrelImports) {\n barrelContent = addImportToBarrel(barrelContent, importPath);\n }\n\n await writeFile(barrelPath, barrelContent);\n p.log.info(`Updated barrel file: ${join(baseDir, \"index.ts\")}`);\n\n if (!barrelExisted) {\n p.note(\n [\n `import { ai } from \"@kitn/plugin\";`,\n ``,\n `app.route(\"/api\", ai.router);`,\n ].join(\"\\n\"),\n \"Add this to your server entry point\",\n );\n }\n }\n\n await writeConfig(cwd, config);\n await writeLock(cwd, lock);\n\n const uniqueDeps = [...new Set(allDeps)];\n const uniqueDevDeps = [...new Set(allDevDeps)].filter((d) => !uniqueDeps.includes(d));\n const totalDeps = uniqueDeps.length + uniqueDevDeps.length;\n if (totalDeps > 0) {\n const pm = await detectPackageManager(cwd);\n if (pm) {\n s.start(`Installing ${totalDeps} npm dependenc${totalDeps === 1 ? \"y\" : \"ies\"}...`);\n try {\n if (uniqueDeps.length > 0) installDependencies(pm, uniqueDeps, cwd);\n if (uniqueDevDeps.length > 0) installDevDependencies(pm, uniqueDevDeps, cwd);\n s.stop(\"Dependencies installed\");\n } catch {\n s.stop(pc.yellow(\"Some dependencies failed to install\"));\n }\n }\n }\n\n if (created.length > 0) {\n p.log.success(`Added ${created.length} file(s):\\n` + created.map((f) => ` ${pc.green(\"+\")} ${f}`).join(\"\\n\"));\n }\n if (updated.length > 0) {\n p.log.success(`Updated ${updated.length} file(s):\\n` + updated.map((f) => ` ${pc.yellow(\"~\")} ${f}`).join(\"\\n\"));\n }\n if (skipped.length > 0) {\n p.log.info(`Skipped ${skipped.length} file(s):\\n` + skipped.map((f) => ` ${pc.dim(\"-\")} ${f}`).join(\"\\n\"));\n }\n\n // Handle environment variables\n const allEnvVars = collectEnvVars(resolved);\n await handleEnvVars(cwd, allEnvVars);\n\n for (const item of resolved) {\n if (item.docs) {\n p.log.info(`${pc.bold(item.name)}: ${item.docs}`);\n }\n }\n\n // Show next-step hints for well-known packages\n const resolvedNames = new Set(resolved.map((r) => r.name));\n const projectInstalled = new Set(Object.keys(lock));\n const hints: string[] = [];\n\n const adapterName = resolveRoutesAlias(config);\n\n // Only suggest adding routes if neither resolved nor already installed\n if (resolvedNames.has(\"core\") && !resolvedNames.has(adapterName) && !projectInstalled.has(adapterName)) {\n hints.push(`Run ${pc.cyan(`kitn add routes`)} to install the HTTP adapter.`);\n }\n\n if (hints.length > 0) {\n p.log.message(pc.bold(\"\\nNext steps:\") + \"\\n\" + hints.join(\"\\n\"));\n }\n\n p.outro(pc.green(\"Done!\"));\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { mkdir, writeFile } from \"fs/promises\";\nimport { join } from \"path\";\nimport { readConfig, writeConfig } from \"../utils/config.js\";\nimport { patchProjectTsconfig } from \"../installers/tsconfig-patcher.js\";\nimport { createBarrelFile } from \"../installers/barrel-manager.js\";\nimport { addCommand } from \"./add.js\";\n\nfunction getPluginTemplate(framework: string): string {\n const adapterName = framework === \"hono-openapi\" ? \"hono-openapi\" : framework;\n return `import { createAIPlugin } from \"@kitn/adapters/${adapterName}\";\nimport { registerWithPlugin } from \"./index.js\";\n\nexport const ai = createAIPlugin({\n // To enable agent chat, add an AI provider:\n // https://sdk.vercel.ai/providers/ai-sdk-providers\n //\n // Example with OpenRouter (access to many models):\n // import { openrouter } from \"@openrouter/ai-sdk-provider\";\n // model: (id) => openrouter(id ?? \"openai/gpt-4o-mini\"),\n //\n // Example with OpenAI directly:\n // import { openai } from \"@ai-sdk/openai\";\n // model: (id) => openai(id ?? \"gpt-4o-mini\"),\n});\n\n// Flush all auto-registered components into the plugin\nregisterWithPlugin(ai);\n`;\n}\n\ninterface InitOptions {\n runtime?: string;\n framework?: string;\n base?: string;\n yes?: boolean;\n}\n\nexport async function initCommand(opts: InitOptions = {}) {\n p.intro(pc.bgCyan(pc.black(\" kitn init \")));\n\n const cwd = process.cwd();\n\n const existing = await readConfig(cwd);\n if (existing) {\n if (opts.yes) {\n p.log.warn(\"kitn.json already exists — overwriting (--yes).\");\n } else {\n p.log.warn(\"kitn.json already exists in this directory.\");\n const shouldContinue = await p.confirm({\n message: \"Overwrite existing configuration?\",\n initialValue: false,\n });\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Init cancelled.\");\n process.exit(0);\n }\n }\n }\n\n let runtime: string;\n if (opts.runtime) {\n if (![\"bun\", \"node\", \"deno\"].includes(opts.runtime)) {\n p.log.error(`Invalid runtime: ${opts.runtime}. Must be bun, node, or deno.`);\n process.exit(1);\n }\n runtime = opts.runtime;\n } else if (opts.yes) {\n runtime = \"bun\";\n } else {\n const selected = await p.select({\n message: \"Which runtime do you use?\",\n options: [\n { value: \"bun\", label: \"Bun\", hint: \"recommended\" },\n { value: \"node\", label: \"Node.js\" },\n { value: \"deno\", label: \"Deno\" },\n ],\n });\n if (p.isCancel(selected)) {\n p.cancel(\"Init cancelled.\");\n process.exit(0);\n }\n runtime = selected as string;\n }\n\n const validFrameworks = [\"hono\", \"hono-openapi\", \"elysia\"] as const;\n type Framework = (typeof validFrameworks)[number];\n let framework: Framework;\n if (opts.framework) {\n if (!validFrameworks.includes(opts.framework as Framework)) {\n p.log.error(`Invalid framework: ${opts.framework}. Must be one of: ${validFrameworks.join(\", \")}`);\n process.exit(1);\n }\n framework = opts.framework as Framework;\n } else if (opts.yes) {\n framework = \"hono\";\n } else {\n const selected = await p.select({\n message: \"Which HTTP framework do you use?\",\n options: [\n { value: \"hono\", label: \"Hono\", hint: \"recommended\" },\n { value: \"hono-openapi\", label: \"Hono + OpenAPI\", hint: \"zod-openapi routes with /doc endpoint\" },\n { value: \"elysia\", label: \"Elysia\", hint: \"Bun-native framework\" },\n ],\n });\n if (p.isCancel(selected)) {\n p.cancel(\"Init cancelled.\");\n process.exit(0);\n }\n framework = selected as Framework;\n }\n\n let baseDir: string;\n if (opts.base) {\n baseDir = opts.base;\n } else if (opts.yes) {\n baseDir = \"src/ai\";\n } else {\n const base = await p.text({\n message: \"Where should kitn components be installed?\",\n initialValue: \"src/ai\",\n placeholder: \"src/ai\",\n });\n if (p.isCancel(base)) {\n p.cancel(\"Init cancelled.\");\n process.exit(0);\n }\n baseDir = base as string;\n }\n const config = {\n runtime: runtime as \"bun\" | \"node\" | \"deno\",\n framework,\n aliases: {\n base: baseDir,\n agents: `${baseDir}/agents`,\n tools: `${baseDir}/tools`,\n skills: `${baseDir}/skills`,\n storage: `${baseDir}/storage`,\n },\n registries: {\n \"@kitn\": {\n url: \"https://kitn-ai.github.io/kitn/r/{type}/{name}.json\",\n homepage: \"https://kitn.ai\",\n description: \"Official kitn AI agent components\",\n },\n },\n };\n\n const s = p.spinner();\n s.start(\"Writing kitn.json\");\n await writeConfig(cwd, config);\n s.stop(\"Created kitn.json\");\n\n // Set up wildcard tsconfig path so @kitn/core, @kitn/adapters/*, etc. all resolve.\n // Remove any old per-package entries (e.g. @kitnai/core, @kitn/core) left from earlier versions.\n await patchProjectTsconfig(\n cwd,\n { \"@kitn/*\": [`./${baseDir}/*`] },\n [\"@kitn\", \"@kitnai\"],\n );\n p.log.info(`Patched tsconfig.json with path: ${pc.bold(\"@kitn/*\")}`);\n\n // Auto-install core engine + framework adapter\n p.log.info(\"Installing core engine and adapter...\");\n await addCommand([\"core\", \"routes\"], { overwrite: true });\n\n // Generate plugin.ts and barrel index.ts\n const aiDir = join(cwd, baseDir);\n await mkdir(aiDir, { recursive: true });\n\n const barrelPath = join(aiDir, \"index.ts\");\n await writeFile(barrelPath, createBarrelFile());\n\n const pluginPath = join(aiDir, \"plugin.ts\");\n await writeFile(pluginPath, getPluginTemplate(framework));\n\n p.log.success(`Created ${pc.bold(baseDir + \"/plugin.ts\")} — configure your AI provider there`);\n\n const mountCode = framework === \"elysia\"\n ? `app.use(ai.router);`\n : `app.route(\"/api\", ai.router);`;\n p.note(\n [\n `import { ai } from \"@kitn/plugin\";`,\n ``,\n mountCode,\n ].join(\"\\n\"),\n \"Add this to your server entry point:\",\n );\n\n p.log.message(\n [\n pc.bold(\"Add your first agent:\"),\n ` ${pc.cyan(\"kitn add weather-agent\")}`,\n \"\",\n pc.bold(\"Browse all components:\"),\n ` ${pc.cyan(\"kitn list\")}`,\n ].join(\"\\n\"),\n );\n\n p.outro(\"Done!\");\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { readConfig, readLock } from \"../utils/config.js\";\nimport { resolveTypeAlias } from \"../utils/type-aliases.js\";\nimport { RegistryFetcher } from \"../registry/fetcher.js\";\nimport type { RegistryIndex } from \"../registry/schema.js\";\n\ninterface ListOptions {\n installed?: boolean;\n type?: string;\n registry?: string;\n verbose?: boolean;\n}\n\ntype IndexItemWithNamespace = RegistryIndex[\"items\"][number] & { namespace: string };\n\nexport async function listCommand(typeFilter: string | undefined, opts: ListOptions) {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n if (!config) {\n p.log.error(\"No kitn.json found. Run `kitn init` first.\");\n process.exit(1);\n }\n\n // Resolve type filter from positional arg or --type flag\n const rawType = typeFilter ?? opts.type;\n const resolvedType = rawType ? resolveTypeAlias(rawType) : undefined;\n if (rawType && !resolvedType) {\n p.log.error(`Unknown type ${pc.bold(rawType)}. Valid types: agent, tool, skill, storage, package`);\n process.exit(1);\n }\n\n const fetcher = new RegistryFetcher(config.registries);\n\n const namespacesToFetch = opts.registry\n ? [opts.registry]\n : Object.keys(config.registries);\n\n if (opts.registry && !config.registries[opts.registry]) {\n p.log.error(`Registry ${pc.bold(opts.registry)} is not configured. Run ${pc.bold(\"kitn registry list\")} to see configured registries.`);\n process.exit(1);\n }\n\n const s = p.spinner();\n s.start(\"Fetching registry...\");\n\n const allItems: IndexItemWithNamespace[] = [];\n const errors: string[] = [];\n\n for (const namespace of namespacesToFetch) {\n try {\n const index = await fetcher.fetchIndex(namespace);\n for (const item of index.items) {\n allItems.push({ ...item, namespace });\n }\n } catch (err: any) {\n errors.push(`${namespace}: ${err.message}`);\n }\n }\n\n if (allItems.length === 0 && errors.length > 0) {\n s.stop(pc.red(\"Failed to fetch registries\"));\n for (const e of errors) p.log.error(e);\n process.exit(1);\n }\n\n s.stop(`Found ${allItems.length} components`);\n\n for (const e of errors) {\n p.log.warn(`${pc.yellow(\"⚠\")} Failed to fetch ${e}`);\n }\n\n const installed = await readLock(cwd);\n const typeGroups = new Map<string, IndexItemWithNamespace[]>();\n\n for (const item of allItems) {\n const group = item.type.replace(\"kitn:\", \"\");\n if (resolvedType && group !== resolvedType) continue;\n // Hide packages from default view — they're installed by `kitn init`\n if (!resolvedType && group === \"package\") continue;\n if (!typeGroups.has(group)) typeGroups.set(group, []);\n typeGroups.get(group)!.push(item);\n }\n\n // Calculate max name width for alignment\n let maxName = 0;\n for (const items of typeGroups.values()) {\n for (const item of items) {\n const displayName = item.namespace === \"@kitn\" ? item.name : `${item.namespace}/${item.name}`;\n if (displayName.length > maxName) maxName = displayName.length;\n }\n }\n\n const cols = process.stdout.columns ?? 80;\n // Layout: \" ✓ name__ [vX.X.X ]description\"\n const versionLen = opts.verbose ? 10 : 0;\n const prefixLen = 4 + maxName + 2 + versionLen;\n\n let installedCount = 0;\n let updateCount = 0;\n let shownCount = 0;\n\n for (const [group, items] of typeGroups) {\n // Sort: installed first, then alphabetical\n items.sort((a, b) => {\n const aInst = !!(installed[a.name] ?? installed[`${a.namespace}/${a.name}`]);\n const bInst = !!(installed[b.name] ?? installed[`${b.namespace}/${b.name}`]);\n if (aInst !== bInst) return aInst ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n\n const label = group.charAt(0).toUpperCase() + group.slice(1) + \"s\";\n console.log(`\\n ${pc.bold(label)} ${pc.dim(`(${items.length})`)}`);\n\n for (const item of items) {\n const displayName = item.namespace === \"@kitn\" ? item.name : `${item.namespace}/${item.name}`;\n const inst = installed[item.name] ?? installed[displayName];\n if (opts.installed && !inst) continue;\n\n const maxDescLen = Math.max(20, cols - prefixLen);\n\n let desc = item.description;\n if (desc.length > maxDescLen) {\n desc = desc.slice(0, maxDescLen - 1) + \"…\";\n }\n\n let line: string;\n const nameCol = displayName.padEnd(maxName + 2);\n const version = opts.verbose ? `${pc.dim(`v${item.version ?? \"1.0.0\"}`)} ` : \"\";\n\n if (inst) {\n installedCount++;\n const hasUpdate = item.version && inst.version !== item.version;\n if (hasUpdate) updateCount++;\n const updateTag = hasUpdate ? pc.yellow(` ↑${item.version}`) : \"\";\n line = ` ${pc.green(\"✓\")} ${nameCol}${version}${pc.dim(desc)}${updateTag}`;\n } else {\n line = ` ${pc.dim(\"○\")} ${nameCol}${version}${pc.dim(desc)}`;\n }\n\n console.log(line);\n shownCount++;\n }\n }\n\n if (shownCount === 0 && resolvedType) {\n console.log(pc.dim(`\\n No ${resolvedType} components found.`));\n }\n\n const totalShown = [...typeGroups.values()].reduce((sum, items) => sum + items.length, 0);\n const parts = [`${installedCount} installed`, `${totalShown - installedCount} available`];\n if (updateCount > 0) parts.push(pc.yellow(`${updateCount} update${updateCount === 1 ? \"\" : \"s\"}`));\n console.log(`\\n ${pc.dim(parts.join(\" · \"))}\\n`);\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { join } from \"path\";\nimport { readConfig, resolveRoutesAlias, readLock } from \"../utils/config.js\";\nimport { RegistryFetcher } from \"../registry/fetcher.js\";\nimport { readExistingFile, generateDiff } from \"../installers/file-writer.js\";\nimport { parseComponentRef } from \"../utils/parse-ref.js\";\nimport { typeToDir } from \"../registry/schema.js\";\n\nexport async function diffCommand(componentName: string) {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n if (!config) {\n p.log.error(\"No kitn.json found. Run `kitn init` first.\");\n process.exit(1);\n }\n\n // Resolve \"routes\" alias to framework-specific adapter name\n const input = componentName === \"routes\" ? resolveRoutesAlias(config) : componentName;\n const ref = parseComponentRef(input);\n\n // Look up in lock — @kitn uses plain name, third-party uses @namespace/name\n const lock = await readLock(cwd);\n const installedKey = ref.namespace === \"@kitn\" ? ref.name : `${ref.namespace}/${ref.name}`;\n const installed = lock[installedKey];\n if (!installed) {\n p.log.error(`Component '${ref.name}' is not installed.`);\n process.exit(1);\n }\n\n const namespace = installed.registry ?? ref.namespace;\n const fetcher = new RegistryFetcher(config.registries);\n const index = await fetcher.fetchIndex(namespace);\n const indexItem = index.items.find((i) => i.name === ref.name);\n if (!indexItem) {\n p.log.error(`Component '${ref.name}' not found in ${namespace} registry.`);\n process.exit(1);\n }\n\n const dir = typeToDir[indexItem.type] as any;\n const registryItem = await fetcher.fetchItem(ref.name, dir, namespace, ref.version);\n\n let hasDiff = false;\n for (const file of registryItem.files) {\n if (indexItem.type === \"kitn:package\") {\n // Packages use base alias + preserved directory structure\n const baseDir = config.aliases.base ?? \"src/ai\";\n const localPath = join(cwd, baseDir, file.path);\n const relativePath = join(baseDir, file.path);\n const localContent = await readExistingFile(localPath);\n\n if (localContent === null) {\n p.log.warn(`${relativePath}: file missing locally`);\n hasDiff = true;\n } else if (localContent !== file.content) {\n const diff = generateDiff(relativePath, localContent, file.content);\n console.log(diff);\n hasDiff = true;\n }\n } else {\n // Regular components use type-based alias directories\n const fileName = file.path.split(\"/\").pop()!;\n const aliasKey = (() => {\n switch (indexItem.type) {\n case \"kitn:agent\": return \"agents\";\n case \"kitn:tool\": return \"tools\";\n case \"kitn:skill\": return \"skills\";\n case \"kitn:storage\": return \"storage\";\n }\n })() as \"agents\" | \"tools\" | \"skills\" | \"storage\";\n const localPath = join(cwd, config.aliases[aliasKey], fileName);\n const localContent = await readExistingFile(localPath);\n\n if (localContent === null) {\n p.log.warn(`${fileName}: file missing locally`);\n hasDiff = true;\n } else if (localContent !== file.content) {\n const diff = generateDiff(fileName, localContent, file.content);\n console.log(diff);\n hasDiff = true;\n }\n }\n }\n\n if (!hasDiff) {\n p.log.success(`${ref.name}: up to date, no differences.`);\n }\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { join, relative, dirname } from \"path\";\nimport { unlink, readFile, writeFile } from \"fs/promises\";\nimport { existsSync } from \"fs\";\nimport { readConfig, writeConfig, resolveRoutesAlias, readLock, writeLock } from \"../utils/config.js\";\nimport type { LockFile } from \"../utils/config.js\";\nimport { parseComponentRef } from \"../utils/parse-ref.js\";\nimport { removeImportFromBarrel } from \"../installers/barrel-manager.js\";\n\nasync function removeSingleComponent(installedKey: string, lock: LockFile, config: any, cwd: string) {\n const entry = lock[installedKey];\n if (!entry) return;\n\n const deleted: string[] = [];\n for (const filePath of entry.files) {\n try {\n await unlink(join(cwd, filePath));\n deleted.push(filePath);\n } catch {\n p.log.warn(`Could not delete ${filePath} (may have been moved or renamed)`);\n }\n }\n\n // Remove barrel imports for deleted files\n const baseDir = config.aliases.base ?? \"src/ai\";\n const barrelPath = join(cwd, baseDir, \"index.ts\");\n const barrelDir = join(cwd, baseDir);\n const barrelEligibleDirs = new Set([\n config.aliases.agents,\n config.aliases.tools,\n config.aliases.skills,\n ]);\n\n if (existsSync(barrelPath) && deleted.length > 0) {\n let barrelContent = await readFile(barrelPath, \"utf-8\");\n let barrelChanged = false;\n\n for (const filePath of deleted) {\n const fileDir = dirname(filePath);\n if (!barrelEligibleDirs.has(fileDir)) continue;\n\n const importPath = \"./\" + relative(barrelDir, join(cwd, filePath)).replace(/\\\\/g, \"/\");\n const updated = removeImportFromBarrel(barrelContent, importPath);\n if (updated !== barrelContent) {\n barrelContent = updated;\n barrelChanged = true;\n }\n }\n\n if (barrelChanged) {\n await writeFile(barrelPath, barrelContent);\n p.log.info(`Updated barrel file: ${join(baseDir, \"index.ts\")}`);\n }\n }\n\n delete lock[installedKey];\n\n if (deleted.length > 0) {\n p.log.success(`Removed ${installedKey}:\\n` + deleted.map((f) => ` ${pc.red(\"-\")} ${f}`).join(\"\\n\"));\n }\n}\n\nasync function offerOrphanRemoval(removedDeps: Set<string>, lock: LockFile, config: any, cwd: string) {\n if (removedDeps.size === 0) return;\n\n // Find orphaned dependencies — deps not needed by any remaining installed component\n const remaining = Object.entries(lock);\n const neededDeps = new Set<string>();\n for (const [, entry] of remaining) {\n if (entry.registryDependencies) {\n for (const dep of entry.registryDependencies) {\n neededDeps.add(dep);\n }\n }\n }\n\n // Also exclude \"core\" — never offer to remove it\n const orphans = [...removedDeps].filter(\n (dep) => dep !== \"core\" && !neededDeps.has(dep) && lock[dep]\n );\n\n if (orphans.length === 0) return;\n\n const selected = await p.multiselect({\n message: \"The following dependencies are no longer used. Remove them?\",\n options: orphans.map((dep) => ({\n value: dep,\n label: dep,\n hint: `${lock[dep].files.length} file(s)`,\n })),\n initialValues: orphans, // all checked by default\n });\n\n if (p.isCancel(selected)) return;\n\n for (const key of selected as string[]) {\n await removeSingleComponent(key, lock, config, cwd);\n }\n}\n\nexport async function removeCommand(componentName?: string) {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n if (!config) {\n p.log.error(\"No kitn.json found. Run `kitn init` first.\");\n process.exit(1);\n }\n\n const lock = await readLock(cwd);\n\n if (!componentName) {\n const installedKeys = Object.keys(lock);\n\n if (installedKeys.length === 0) {\n p.log.warn(\"No components installed.\");\n process.exit(0);\n }\n\n const selected = await p.multiselect({\n message: \"Select components to remove:\",\n options: installedKeys.map((key) => ({\n value: key,\n label: key,\n hint: `${lock[key].files.length} file(s)`,\n })),\n });\n\n if (p.isCancel(selected)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n const selectedKeys = selected as string[];\n if (selectedKeys.length === 0) {\n p.log.warn(\"No components selected.\");\n process.exit(0);\n }\n\n // Snapshot deps before removal (entries get deleted during removeSingleComponent)\n const allRemovedDeps = new Set<string>();\n for (const key of selectedKeys) {\n const entry = lock[key];\n if (entry?.registryDependencies) {\n for (const dep of entry.registryDependencies) {\n allRemovedDeps.add(dep);\n }\n }\n }\n\n // Remove each selected component\n for (const key of selectedKeys) {\n await removeSingleComponent(key, lock, config, cwd);\n }\n\n await offerOrphanRemoval(allRemovedDeps, lock, config, cwd);\n\n await writeLock(cwd, lock);\n p.outro(pc.green(\"Done!\"));\n return;\n }\n\n // Resolve \"routes\" alias to framework-specific adapter name\n const input = componentName === \"routes\" ? resolveRoutesAlias(config) : componentName;\n const ref = parseComponentRef(input);\n\n // Look up in lock — @kitn uses plain name, third-party uses @namespace/name\n const installedKey = ref.namespace === \"@kitn\" ? ref.name : `${ref.namespace}/${ref.name}`;\n const entry = lock[installedKey];\n if (!entry) {\n p.log.error(`Component '${ref.name}' is not installed.`);\n process.exit(1);\n }\n\n const shouldRemove = await p.confirm({\n message: `Remove ${ref.name}? This will delete ${entry.files.length} file(s).`,\n initialValue: false,\n });\n if (p.isCancel(shouldRemove) || !shouldRemove) {\n p.cancel(\"Remove cancelled.\");\n process.exit(0);\n }\n\n // Snapshot deps before removal\n const removedDeps = new Set(entry.registryDependencies ?? []);\n\n await removeSingleComponent(installedKey, lock, config, cwd);\n\n // Check for orphaned dependencies\n await offerOrphanRemoval(removedDeps, lock, config, cwd);\n\n await writeLock(cwd, lock);\n}\n","import { addCommand } from \"./add.js\";\nimport { readConfig, readLock } from \"../utils/config.js\";\nimport * as p from \"@clack/prompts\";\n\nexport async function updateCommand(components: string[]) {\n // If no components specified, update all installed components\n if (components.length === 0) {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n if (!config) {\n p.log.error(\"No kitn.json found. Run `kitn init` first.\");\n process.exit(1);\n }\n\n const lock = await readLock(cwd);\n if (Object.keys(lock).length === 0) {\n p.log.info(\"No installed components to update.\");\n return;\n }\n\n components = Object.keys(lock);\n }\n\n await addCommand(components, { overwrite: true });\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { join, relative } from \"path\";\nimport { existsSync } from \"fs\";\nimport { readFile, writeFile, mkdir } from \"fs/promises\";\nimport { readConfig, getInstallPath } from \"../utils/config.js\";\nimport { checkFileStatus, FileStatus, writeComponentFile } from \"../installers/file-writer.js\";\nimport { createBarrelFile, addImportToBarrel } from \"../installers/barrel-manager.js\";\n\nconst VALID_TYPES = [\"agent\", \"tool\", \"skill\", \"storage\"] as const;\ntype ComponentType = (typeof VALID_TYPES)[number];\n\nfunction toCamelCase(str: string): string {\n return str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n}\n\nfunction toTitleCase(str: string): string {\n return str\n .split(\"-\")\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(\" \");\n}\n\nfunction generateAgentSource(name: string): string {\n const camel = toCamelCase(name);\n return `import { registerAgent } from \"@kitn/core\";\n\nconst SYSTEM_PROMPT = \"You are a helpful assistant.\";\n\nregisterAgent({\n name: \"${name}\",\n description: \"\",\n system: SYSTEM_PROMPT,\n tools: {},\n});\n`;\n}\n\nfunction generateToolSource(name: string): string {\n const camel = toCamelCase(name);\n return `import { registerTool } from \"@kitn/core\";\nimport { tool } from \"ai\";\nimport { z } from \"zod\";\n\nexport const ${camel} = tool({\n description: \"\",\n inputSchema: z.object({\n input: z.string().describe(\"Input parameter\"),\n }),\n execute: async ({ input }) => {\n // TODO: implement\n return { result: input };\n },\n});\n\nregisterTool({\n name: \"${name}\",\n description: \"\",\n inputSchema: z.object({ input: z.string() }),\n tool: ${camel},\n});\n`;\n}\n\nfunction generateSkillSource(name: string): string {\n const title = toTitleCase(name);\n return `---\nname: ${name}\ndescription: \"\"\n---\n\n# ${title}\n\nDescribe what this skill does and how to use it.\n`;\n}\n\nfunction generateStorageSource(name: string): string {\n const camel = toCamelCase(\"create-\" + name);\n return `import type { StorageProvider } from \"@kitn/core\";\n\nexport function ${camel}(config?: Record<string, unknown>): StorageProvider {\n // TODO: implement storage provider\n throw new Error(\"Not implemented\");\n}\n`;\n}\n\nconst typeToKitnType: Record<ComponentType, \"kitn:agent\" | \"kitn:tool\" | \"kitn:skill\" | \"kitn:storage\"> = {\n agent: \"kitn:agent\",\n tool: \"kitn:tool\",\n skill: \"kitn:skill\",\n storage: \"kitn:storage\",\n};\n\n// Types that get auto-wired into the barrel file\nconst BARREL_TYPES: ComponentType[] = [\"agent\", \"tool\", \"skill\"];\n\nexport async function createComponentInProject(\n type: string,\n name: string,\n opts?: { cwd?: string }\n): Promise<{ filePath: string; barrelUpdated: boolean }> {\n if (!VALID_TYPES.includes(type as ComponentType)) {\n throw new Error(\n `Invalid component type: \"${type}\". Valid types: ${VALID_TYPES.join(\", \")}`\n );\n }\n\n const cwd = opts?.cwd ?? process.cwd();\n const config = await readConfig(cwd);\n if (!config) {\n throw new Error(\n `No kitn.json found in ${cwd}. Run ${pc.bold(\"kitn init\")} first.`\n );\n }\n\n const validType = type as ComponentType;\n const kitnType = typeToKitnType[validType];\n const fileName = validType === \"skill\" ? `${name}.md` : `${name}.ts`;\n\n const filePath = join(cwd, getInstallPath(config, kitnType, fileName));\n\n // Check file doesn't already exist\n const dummyContent = \"\"; // only need to check existence\n const status = await checkFileStatus(filePath, dummyContent);\n if (status !== FileStatus.New) {\n throw new Error(`File already exists: ${filePath}`);\n }\n\n // Generate source\n let source: string;\n switch (validType) {\n case \"agent\":\n source = generateAgentSource(name);\n break;\n case \"tool\":\n source = generateToolSource(name);\n break;\n case \"skill\":\n source = generateSkillSource(name);\n break;\n case \"storage\":\n source = generateStorageSource(name);\n break;\n }\n\n // Write the component file\n await writeComponentFile(filePath, source);\n\n // Wire into barrel file for agents, tools, and skills\n let barrelUpdated = false;\n if (BARREL_TYPES.includes(validType)) {\n const baseDir = config.aliases.base ?? \"src/ai\";\n const barrelPath = join(cwd, baseDir, \"index.ts\");\n\n // Read or create barrel file\n let barrelContent: string;\n if (existsSync(barrelPath)) {\n barrelContent = await readFile(barrelPath, \"utf-8\");\n } else {\n barrelContent = createBarrelFile();\n await mkdir(join(cwd, baseDir), { recursive: true });\n }\n\n // Compute relative import path from barrel to the component\n const importPath = \"./\" + relative(join(cwd, baseDir), filePath).replace(/\\.ts$/, \".js\");\n const updatedBarrel = addImportToBarrel(barrelContent, importPath);\n\n if (updatedBarrel !== barrelContent) {\n await writeFile(barrelPath, updatedBarrel);\n barrelUpdated = true;\n }\n }\n\n return { filePath, barrelUpdated };\n}\n\nexport async function createCommand(type: string, name: string) {\n p.intro(pc.bgCyan(pc.black(\" kitn create \")));\n\n try {\n const { filePath, barrelUpdated } = await createComponentInProject(type, name);\n\n p.log.success(`Created ${pc.bold(type)} component ${pc.cyan(name)}`);\n p.log.message(` ${pc.green(\"+\")} ${filePath}`);\n\n if (barrelUpdated) {\n p.log.message(` ${pc.green(\"+\")} barrel file updated`);\n }\n\n p.outro(\n `Edit ${pc.cyan(filePath)} to customize your ${type}.`\n );\n } catch (err: any) {\n p.log.error(err.message);\n process.exit(1);\n }\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { readConfig, readLock } from \"../utils/config.js\";\nimport { parseComponentRef } from \"../utils/parse-ref.js\";\nimport { RegistryFetcher } from \"../registry/fetcher.js\";\nimport { typeToDir } from \"../registry/schema.js\";\n\nexport async function infoCommand(component: string) {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n if (!config) {\n p.log.error(\"No kitn.json found. Run `kitn init` first.\");\n process.exit(1);\n }\n\n const ref = parseComponentRef(component);\n const fetcher = new RegistryFetcher(config.registries);\n\n const s = p.spinner();\n s.start(\"Fetching component info...\");\n\n // Fetch registry index to find the component and get available versions\n let index;\n try {\n index = await fetcher.fetchIndex(ref.namespace);\n } catch (err: any) {\n s.stop(pc.red(\"Failed to fetch registry\"));\n p.log.error(err.message);\n process.exit(1);\n }\n\n const indexItem = index.items.find((i) => i.name === ref.name);\n if (!indexItem) {\n s.stop(pc.red(\"Component not found\"));\n p.log.error(`Component '${ref.name}' not found in registry.`);\n process.exit(1);\n }\n\n // Fetch the full component JSON (specific version or latest)\n const dir = typeToDir[indexItem.type] as any;\n let item;\n try {\n item = await fetcher.fetchItem(ref.name, dir, ref.namespace, ref.version);\n } catch (err: any) {\n s.stop(pc.red(\"Failed to fetch component\"));\n p.log.error(err.message);\n process.exit(1);\n }\n\n s.stop(\"Component found\");\n\n // Display formatted output\n const version = item.version ?? indexItem.version ?? \"unknown\";\n const typeName = indexItem.type.replace(\"kitn:\", \"\");\n\n // Header: name, version, namespace\n console.log();\n console.log(\n ` ${pc.bold(item.name)} ${pc.cyan(`v${version}`)}${\" \".repeat(Math.max(1, 40 - item.name.length - version.length - 2))}${pc.dim(ref.namespace)}`\n );\n console.log(` ${pc.dim(item.description)}`);\n console.log();\n\n // Details\n console.log(` ${pc.dim(\"Type:\")} ${typeName}`);\n\n if (item.dependencies?.length) {\n console.log(\n ` ${pc.dim(\"Dependencies:\")} ${item.dependencies.join(\", \")}`\n );\n }\n\n if (item.registryDependencies?.length) {\n console.log(\n ` ${pc.dim(\"Registry deps:\")} ${item.registryDependencies.join(\", \")}`\n );\n }\n\n if (item.categories?.length) {\n console.log(\n ` ${pc.dim(\"Categories:\")} ${item.categories.join(\", \")}`\n );\n }\n\n if (item.updatedAt) {\n console.log(` ${pc.dim(\"Updated:\")} ${item.updatedAt}`);\n }\n\n // Available versions from index\n const versions = indexItem.versions;\n if (versions?.length) {\n console.log(` ${pc.dim(\"Versions:\")} ${versions.join(\", \")}`);\n }\n\n // Changelog\n if (item.changelog?.length) {\n console.log();\n console.log(` ${pc.bold(\"Changelog:\")}`);\n for (const entry of item.changelog) {\n const tag =\n entry.type === \"feature\"\n ? pc.green(entry.type)\n : entry.type === \"fix\"\n ? pc.yellow(entry.type)\n : entry.type === \"breaking\"\n ? pc.red(entry.type)\n : pc.dim(entry.type);\n console.log(\n ` ${pc.cyan(entry.version)} ${pc.dim(entry.date)} ${tag} ${entry.note}`\n );\n }\n }\n\n // Files\n console.log();\n const fileCount = item.files.length;\n console.log(` ${pc.bold(`Files:`)} ${pc.dim(`(${fileCount})`)}`);\n const maxShown = 10;\n for (const file of item.files.slice(0, maxShown)) {\n console.log(` ${pc.dim(file.path)}`);\n }\n if (fileCount > maxShown) {\n console.log(` ${pc.dim(`... and ${fileCount - maxShown} more`)}`);\n }\n\n // Installed status\n const lock = await readLock(cwd);\n const installed = lock[item.name];\n if (installed) {\n console.log();\n console.log(\n ` ${pc.green(\"Installed\")} ${pc.dim(`v${installed.version}`)}`\n );\n if (version !== installed.version) {\n console.log(\n ` ${pc.yellow(\"Update available:\")} ${pc.dim(`v${installed.version}`)} → ${pc.cyan(`v${version}`)}`\n );\n }\n }\n\n console.log();\n}\n","import { execSync } from \"child_process\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { detectCliInstaller, getGlobalInstallCommand } from \"../utils/detect.js\";\nimport { fetchLatestVersion, isNewer } from \"../utils/update-check.js\";\n\nexport async function checkCommand(currentVersion: string) {\n p.intro(pc.bgCyan(pc.black(\" kitn check \")));\n\n p.log.info(`kitn v${currentVersion}`);\n\n const s = p.spinner();\n s.start(\"Checking for updates...\");\n\n const latest = await fetchLatestVersion();\n\n if (!latest) {\n s.stop(pc.yellow(\"Could not reach the npm registry\"));\n p.outro(\"Try again later.\");\n return;\n }\n\n if (isNewer(latest, currentVersion)) {\n s.stop(pc.yellow(`Update available: ${currentVersion} → ${latest}`));\n\n const pm = detectCliInstaller();\n const installCmd = getGlobalInstallCommand(pm, \"@kitnai/cli\");\n\n const shouldUpdate = await p.confirm({ message: \"Update now?\" });\n\n if (p.isCancel(shouldUpdate) || !shouldUpdate) {\n p.log.message(` Run: ${pc.cyan(installCmd)}`);\n } else {\n const us = p.spinner();\n us.start(\"Updating...\");\n try {\n execSync(installCmd, { stdio: \"pipe\" });\n us.stop(pc.green(`Updated to v${latest}`));\n } catch {\n us.stop(pc.red(\"Update failed\"));\n p.log.message(` Run manually: ${pc.cyan(installCmd)}`);\n }\n }\n } else {\n s.stop(pc.green(\"You're on the latest version\"));\n }\n\n p.outro(\"\");\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { readConfig, writeConfig, getRegistryUrl, readLock } from \"../utils/config.js\";\nimport type { RegistryEntry } from \"../utils/config.js\";\n\ninterface RegistryAddOptions {\n cwd?: string;\n overwrite?: boolean;\n homepage?: string;\n description?: string;\n}\n\ninterface RegistryRemoveOptions {\n cwd?: string;\n force?: boolean;\n}\n\ninterface RegistryListOptions {\n cwd?: string;\n}\n\nexport async function registryAddCommand(\n namespace: string,\n url: string,\n opts: RegistryAddOptions = {},\n) {\n const cwd = opts.cwd ?? process.cwd();\n const config = await readConfig(cwd);\n if (!config) throw new Error(\"No kitn.json found. Run `kitn init` first.\");\n\n if (!namespace.startsWith(\"@\")) {\n throw new Error(\"Namespace must start with @ (e.g. @myteam)\");\n }\n if (!url.includes(\"{type}\")) {\n throw new Error(\"URL template must include {type} placeholder\");\n }\n if (!url.includes(\"{name}\")) {\n throw new Error(\"URL template must include {name} placeholder\");\n }\n if (config.registries[namespace] && !opts.overwrite) {\n throw new Error(`Registry '${namespace}' is already configured. Use --overwrite to replace.`);\n }\n\n // Store as rich entry if homepage or description provided, otherwise plain URL\n if (opts.homepage || opts.description) {\n const entry: RegistryEntry = { url };\n if (opts.homepage) entry.homepage = opts.homepage;\n if (opts.description) entry.description = opts.description;\n config.registries[namespace] = entry;\n } else {\n config.registries[namespace] = url;\n }\n await writeConfig(cwd, config);\n\n p.log.success(`Added registry ${pc.bold(namespace)}`);\n p.log.message(pc.dim(` ${url}`));\n if (opts.homepage) p.log.message(pc.dim(` Homepage: ${opts.homepage}`));\n if (opts.description) p.log.message(pc.dim(` ${opts.description}`));\n}\n\nexport async function registryRemoveCommand(\n namespace: string,\n opts: RegistryRemoveOptions = {},\n): Promise<{ affectedComponents: string[] }> {\n const cwd = opts.cwd ?? process.cwd();\n const config = await readConfig(cwd);\n if (!config) throw new Error(\"No kitn.json found. Run `kitn init` first.\");\n\n if (!config.registries[namespace]) {\n throw new Error(`Registry '${namespace}' is not configured.`);\n }\n if (namespace === \"@kitn\" && !opts.force) {\n throw new Error(\"Cannot remove the default @kitn registry. Use --force to override.\");\n }\n\n const lock = await readLock(cwd);\n const affectedComponents: string[] = [];\n for (const [name, entry] of Object.entries(lock)) {\n if (entry.registry === namespace) {\n affectedComponents.push(name);\n }\n }\n\n delete config.registries[namespace];\n await writeConfig(cwd, config);\n\n p.log.success(`Removed registry ${pc.bold(namespace)}`);\n if (affectedComponents.length > 0) {\n p.log.warn(`${affectedComponents.length} installed component(s) referenced this registry:\\n` + affectedComponents.map((name) => ` ${pc.yellow(\"!\")} ${name}`).join(\"\\n\"));\n }\n\n return { affectedComponents };\n}\n\nexport async function registryListCommand(\n opts: RegistryListOptions = {},\n): Promise<Array<{ namespace: string; url: string; homepage?: string; description?: string }>> {\n const cwd = opts.cwd ?? process.cwd();\n const config = await readConfig(cwd);\n if (!config) throw new Error(\"No kitn.json found. Run `kitn init` first.\");\n\n const entries = Object.entries(config.registries).map(([namespace, value]) => {\n const url = getRegistryUrl(value);\n const homepage = typeof value === \"object\" ? value.homepage : undefined;\n const description = typeof value === \"object\" ? value.description : undefined;\n return { namespace, url, homepage, description };\n });\n\n if (entries.length === 0) {\n p.log.message(pc.dim(\" No registries configured.\"));\n } else {\n const lines: string[] = [];\n for (const { namespace, url, homepage, description } of entries) {\n lines.push(` ${pc.bold(namespace.padEnd(16))} ${pc.dim(url)}`);\n if (description) lines.push(` ${\" \".repeat(16)} ${description}`);\n if (homepage) lines.push(` ${\" \".repeat(16)} ${pc.dim(homepage)}`);\n }\n p.log.message(lines.join(\"\\n\"));\n }\n\n return entries;\n}\n","import { Command } from \"commander\";\nimport { startUpdateCheck } from \"./utils/update-check.js\";\n\ndeclare const __CLI_VERSION__: string;\nconst VERSION = typeof __CLI_VERSION__ !== \"undefined\" ? __CLI_VERSION__ : \"0.0.0-dev\";\n\nconst printUpdateNotice = startUpdateCheck(VERSION);\n\nconst program = new Command()\n .name(\"kitn\")\n .description(\"Install AI agent components from the kitn registry\")\n .version(VERSION);\n\nprogram\n .command(\"init\")\n .description(\"Initialize kitn in your project\")\n .option(\"-r, --runtime <runtime>\", \"runtime to use (bun, node, deno)\")\n .option(\"-f, --framework <framework>\", \"HTTP framework (hono, hono-openapi, elysia)\")\n .option(\"-b, --base <path>\", \"base directory for components (default: src/ai)\")\n .option(\"-y, --yes\", \"accept all defaults without prompting\")\n .action(async (opts) => {\n const { initCommand } = await import(\"./commands/init.js\");\n await initCommand(opts);\n });\n\nprogram\n .command(\"add\")\n .alias(\"install\")\n .description(\"Add components from the registry (supports type-first: kitn add agent <name>)\")\n .argument(\"[components...]\", \"component names or type followed by names\")\n .option(\"-o, --overwrite\", \"overwrite existing files without prompting\")\n .option(\"-t, --type <type>\", \"filter by component type during resolution\")\n .action(async (components: string[], opts) => {\n const { addCommand } = await import(\"./commands/add.js\");\n await addCommand(components, opts);\n });\n\nprogram\n .command(\"list\")\n .argument(\"[type]\", \"filter by type (agents, tools, skills, storages, packages)\")\n .description(\"List available and installed components\")\n .option(\"-i, --installed\", \"only show installed components\")\n .option(\"-t, --type <type>\", \"filter by type (agent, tool, skill, storage, package)\")\n .option(\"-r, --registry <namespace>\", \"only show components from this registry\")\n .option(\"-v, --verbose\", \"show version numbers\")\n .action(async (type, opts) => {\n const { listCommand } = await import(\"./commands/list.js\");\n await listCommand(type, opts);\n });\n\nprogram\n .command(\"diff\")\n .description(\"Show differences between local and registry version\")\n .argument(\"<component>\", \"component name\")\n .action(async (component: string) => {\n const { diffCommand } = await import(\"./commands/diff.js\");\n await diffCommand(component);\n });\n\nprogram\n .command(\"remove\")\n .alias(\"uninstall\")\n .description(\"Remove an installed component\")\n .argument(\"[component]\", \"component name to remove (interactive if omitted)\")\n .action(async (component?: string) => {\n const { removeCommand } = await import(\"./commands/remove.js\");\n await removeCommand(component);\n });\n\nprogram\n .command(\"update\")\n .description(\"Update installed components to latest registry version\")\n .argument(\"[components...]\", \"component names to update\")\n .action(async (components: string[]) => {\n const { updateCommand } = await import(\"./commands/update.js\");\n await updateCommand(components);\n });\n\nprogram\n .command(\"create\")\n .description(\"Scaffold a new kitn component\")\n .argument(\"<type>\", \"component type (agent, tool, skill, storage)\")\n .argument(\"<name>\", \"component name\")\n .action(async (type: string, name: string) => {\n const { createCommand } = await import(\"./commands/create.js\");\n await createCommand(type, name);\n });\n\nprogram\n .command(\"info\")\n .description(\"Show details about a component\")\n .argument(\"<component>\", \"component name (e.g. weather-agent, @acme/tool@1.0.0)\")\n .action(async (component: string) => {\n const { infoCommand } = await import(\"./commands/info.js\");\n await infoCommand(component);\n });\n\nprogram\n .command(\"check\")\n .description(\"Check for CLI updates\")\n .action(async () => {\n const { checkCommand } = await import(\"./commands/check.js\");\n await checkCommand(VERSION);\n });\n\nconst registry = program\n .command(\"registry\")\n .description(\"Manage component registries\");\n\nregistry\n .command(\"add\")\n .description(\"Add a component registry\")\n .argument(\"<namespace>\", \"registry namespace (e.g. @myteam)\")\n .argument(\"<url>\", \"URL template with {type} and {name} placeholders\")\n .option(\"-o, --overwrite\", \"overwrite if namespace already exists\")\n .option(\"--homepage <url>\", \"registry homepage URL\")\n .option(\"--description <text>\", \"short description of the registry\")\n .action(async (namespace: string, url: string, opts) => {\n const { registryAddCommand } = await import(\"./commands/registry.js\");\n await registryAddCommand(namespace, url, opts);\n });\n\nregistry\n .command(\"remove\")\n .description(\"Remove a component registry\")\n .argument(\"<namespace>\", \"registry namespace to remove (e.g. @myteam)\")\n .option(\"-f, --force\", \"allow removing the default @kitn registry\")\n .action(async (namespace: string, opts) => {\n const { registryRemoveCommand } = await import(\"./commands/registry.js\");\n await registryRemoveCommand(namespace, opts);\n });\n\nregistry\n .command(\"list\")\n .description(\"List all configured registries\")\n .action(async () => {\n const { registryListCommand } = await import(\"./commands/registry.js\");\n await registryListCommand();\n });\n\nawait program.parseAsync();\nprintUpdateNotice();\n"],"mappings":"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","names":["join","readFile","writeFile","join","readFile","writeFile","join","text","readFile","writeFile","mkdir","access","pc","readFile","writeFile","access","join","join","z","componentType","p","pc","join","dirname","readFile","writeFile","mkdir","unlink","relative","fetcher","s","baseDir","barrelPath","barrelDir","updated","p","pc","mkdir","writeFile","join","p","pc","p","join","p","pc","join","relative","dirname","unlink","readFile","writeFile","existsSync","entry","p","p","pc","join","relative","existsSync","readFile","writeFile","mkdir","p","pc","execSync","p","pc","p","pc","initCommand","addCommand","listCommand","diffCommand","removeCommand","updateCommand","createCommand","infoCommand","checkCommand","registryAddCommand","registryRemoveCommand","registryListCommand"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/detect.ts","../src/utils/update-check.ts","../src/utils/config.ts","../src/installers/tsconfig-patcher.ts","../src/installers/barrel-manager.ts","../src/registry/fetcher.ts","../src/registry/resolver.ts","../src/installers/file-writer.ts","../src/installers/dep-installer.ts","../src/installers/env-writer.ts","../src/installers/import-rewriter.ts","../src/utils/hash.ts","../src/utils/parse-ref.ts","../src/utils/type-aliases.ts","../src/registry/schema.ts","../src/commands/add.ts","../src/commands/init.ts","../src/commands/list.ts","../src/commands/diff.ts","../src/commands/remove.ts","../src/commands/update.ts","../src/commands/create.ts","../src/commands/info.ts","../src/commands/check.ts","../src/commands/registry.ts","../src/index.ts"],"sourcesContent":["import { access } from \"fs/promises\";\nimport { join } from \"path\";\n\nexport type PackageManager = \"bun\" | \"pnpm\" | \"yarn\" | \"npm\";\n\nconst LOCKFILE_MAP: [string, PackageManager][] = [\n [\"bun.lock\", \"bun\"],\n [\"bun.lockb\", \"bun\"],\n [\"pnpm-lock.yaml\", \"pnpm\"],\n [\"yarn.lock\", \"yarn\"],\n [\"package-lock.json\", \"npm\"],\n];\n\nexport async function detectPackageManager(dir: string): Promise<PackageManager | null> {\n for (const [lockfile, pm] of LOCKFILE_MAP) {\n try {\n await access(join(dir, lockfile));\n return pm;\n } catch {\n // lockfile doesn't exist, try next\n }\n }\n return null;\n}\n\nexport function getInstallCommand(pm: PackageManager, packages: string[]): string {\n const pkgs = packages.join(\" \");\n switch (pm) {\n case \"bun\":\n return `bun add ${pkgs}`;\n case \"pnpm\":\n return `pnpm add ${pkgs}`;\n case \"yarn\":\n return `yarn add ${pkgs}`;\n case \"npm\":\n return `npm install ${pkgs}`;\n }\n}\n\nexport function getRunCommand(pm: PackageManager): string {\n switch (pm) {\n case \"bun\":\n return \"bunx\";\n case \"pnpm\":\n return \"pnpm dlx\";\n case \"yarn\":\n return \"yarn dlx\";\n case \"npm\":\n return \"npx\";\n }\n}\n\n/**\n * Detects which package manager was used to invoke the CLI globally.\n * Checks npm_config_user_agent first, falls back to process.env._, defaults to npm.\n */\nexport function detectCliInstaller(): PackageManager {\n const userAgent = process.env.npm_config_user_agent ?? \"\";\n if (userAgent.startsWith(\"bun/\")) return \"bun\";\n if (userAgent.startsWith(\"pnpm/\")) return \"pnpm\";\n if (userAgent.startsWith(\"yarn/\")) return \"yarn\";\n if (userAgent.startsWith(\"npm/\")) return \"npm\";\n\n const invoker = process.env._ ?? \"\";\n if (invoker.includes(\"bun\")) return \"bun\";\n if (invoker.includes(\"pnpm\")) return \"pnpm\";\n if (invoker.includes(\"yarn\")) return \"yarn\";\n\n return \"npm\";\n}\n\nexport function getGlobalInstallCommand(pm: PackageManager, pkg: string): string {\n switch (pm) {\n case \"bun\":\n return `bun install -g ${pkg}`;\n case \"pnpm\":\n return `pnpm add -g ${pkg}`;\n case \"yarn\":\n return `yarn global add ${pkg}`;\n case \"npm\":\n return `npm install -g ${pkg}`;\n }\n}\n","import { readFile, writeFile, mkdir } from \"fs/promises\";\nimport { join } from \"path\";\nimport { homedir } from \"os\";\nimport pc from \"picocolors\";\nimport { detectCliInstaller, getRunCommand, getGlobalInstallCommand } from \"./detect.js\";\n\nconst CACHE_DIR = join(homedir(), \".kitn\");\nconst CACHE_FILE = join(CACHE_DIR, \"update-check.json\");\nconst CHECK_INTERVAL = 60 * 60 * 1000; // 1 hour\n\ninterface CacheEntry {\n latest: string;\n checkedAt: number;\n}\n\nasync function readCache(): Promise<CacheEntry | null> {\n try {\n const raw = await readFile(CACHE_FILE, \"utf-8\");\n return JSON.parse(raw);\n } catch {\n return null;\n }\n}\n\nasync function writeCache(entry: CacheEntry): Promise<void> {\n try {\n await mkdir(CACHE_DIR, { recursive: true });\n await writeFile(CACHE_FILE, JSON.stringify(entry));\n } catch {\n // Silently ignore cache write failures\n }\n}\n\nexport async function fetchLatestVersion(): Promise<string | null> {\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 3000);\n const res = await fetch(\"https://registry.npmjs.org/@kitnai/cli/latest\", {\n signal: controller.signal,\n });\n clearTimeout(timeout);\n if (!res.ok) return null;\n const data = (await res.json()) as { version?: string };\n return data.version ?? null;\n } catch {\n return null;\n }\n}\n\nexport function isNewer(latest: string, current: string): boolean {\n const [lMaj, lMin, lPat] = latest.split(\".\").map(Number);\n const [cMaj, cMin, cPat] = current.split(\".\").map(Number);\n if (lMaj !== cMaj) return lMaj > cMaj;\n if (lMin !== cMin) return lMin > cMin;\n return lPat > cPat;\n}\n\n/**\n * Starts a non-blocking update check. Returns a function that,\n * when called, prints the update notice if a newer version was found.\n */\nexport function startUpdateCheck(currentVersion: string): () => void {\n let message = \"\";\n\n // Fire-and-forget: don't block CLI startup\n const check = (async () => {\n const cache = await readCache();\n let latest: string | null = null;\n\n if (cache && Date.now() - cache.checkedAt < CHECK_INTERVAL) {\n latest = cache.latest;\n } else {\n latest = await fetchLatestVersion();\n if (latest) {\n await writeCache({ latest, checkedAt: Date.now() });\n }\n }\n\n if (latest && isNewer(latest, currentVersion)) {\n const pm = detectCliInstaller();\n const runCmd = `${getRunCommand(pm)} @kitnai/cli@latest`;\n const installCmd = getGlobalInstallCommand(pm, \"@kitnai/cli\");\n message = [\n \"\",\n pc.yellow(` Update available: ${pc.dim(currentVersion)} → ${pc.green(latest)}`),\n pc.dim(` Run ${pc.cyan(runCmd)} or ${pc.cyan(installCmd)}`),\n \"\",\n ].join(\"\\n\");\n }\n })();\n\n // Suppress unhandled rejection from the fire-and-forget promise\n check.catch(() => {});\n\n return () => {\n if (message) process.stderr.write(message);\n };\n}\n","import { readFile, writeFile, unlink } from \"fs/promises\";\nimport { join } from \"path\";\nimport { z } from \"zod\";\n\nconst componentType = z.enum([\"kitn:agent\", \"kitn:tool\", \"kitn:skill\", \"kitn:storage\", \"kitn:package\", \"kitn:cron\"]);\ntype ComponentType = z.infer<typeof componentType>;\n\nconst installedComponentSchema = z.object({\n registry: z.string().optional(),\n type: componentType.optional(),\n slot: z.string().optional(),\n version: z.string(),\n installedAt: z.string(),\n files: z.array(z.string()),\n hash: z.string(),\n registryDependencies: z.array(z.string()).optional(),\n});\n\nconst registryEntrySchema = z.object({\n url: z.string(),\n homepage: z.string().optional(),\n description: z.string().optional(),\n});\n\nexport type RegistryEntry = z.infer<typeof registryEntrySchema>;\n\n// Registries can be a plain URL string (backward compat) or a rich entry object\nconst registryValueSchema = z.union([z.string(), registryEntrySchema]);\n\nexport const configSchema = z.object({\n $schema: z.string().optional(),\n runtime: z.enum([\"bun\", \"node\", \"deno\"]),\n framework: z.enum([\"hono\", \"hono-openapi\", \"cloudflare\", \"elysia\", \"fastify\", \"express\"]).optional(),\n aliases: z.object({\n base: z.string().optional(),\n agents: z.string(),\n tools: z.string(),\n skills: z.string(),\n storage: z.string(),\n crons: z.string().optional(),\n }),\n registries: z.record(z.string(), registryValueSchema),\n});\n\nexport type KitnConfig = z.infer<typeof configSchema>;\n\n/** Extract the URL from a registry entry (string or object). */\nexport function getRegistryUrl(entry: string | RegistryEntry): string {\n return typeof entry === \"string\" ? entry : entry.url;\n}\n\nconst FRAMEWORK_TO_ADAPTER: Record<string, string> = {\n hono: \"hono\",\n \"hono-openapi\": \"hono-openapi\",\n elysia: \"elysia\",\n};\n\nexport function resolveRoutesAlias(config: KitnConfig): string {\n const fw = config.framework ?? \"hono\";\n return FRAMEWORK_TO_ADAPTER[fw] ?? fw;\n}\n\nconst CONFIG_FILE = \"kitn.json\";\nconst LOCK_FILE = \"kitn.lock\";\n\nexport async function readConfig(projectDir: string): Promise<KitnConfig | null> {\n try {\n const raw = await readFile(join(projectDir, CONFIG_FILE), \"utf-8\");\n return configSchema.parse(JSON.parse(raw));\n } catch {\n return null;\n }\n}\n\nexport async function writeConfig(projectDir: string, config: KitnConfig): Promise<void> {\n const data = { $schema: \"https://kitn.dev/schema/config.json\", ...config };\n await writeFile(join(projectDir, CONFIG_FILE), JSON.stringify(data, null, 2) + \"\\n\");\n}\n\n// --- Lock file (installed component tracking) ---\n\nexport const lockSchema = z.record(z.string(), installedComponentSchema);\nexport type LockFile = z.infer<typeof lockSchema>;\n\nexport async function readLock(projectDir: string): Promise<LockFile> {\n try {\n const raw = await readFile(join(projectDir, LOCK_FILE), \"utf-8\");\n return lockSchema.parse(JSON.parse(raw));\n } catch {\n return {};\n }\n}\n\nexport async function writeLock(projectDir: string, lock: LockFile): Promise<void> {\n if (Object.keys(lock).length === 0) {\n try {\n await unlink(join(projectDir, LOCK_FILE));\n } catch {\n // File doesn't exist — nothing to delete\n }\n return;\n }\n await writeFile(join(projectDir, LOCK_FILE), JSON.stringify(lock, null, 2) + \"\\n\");\n}\n\ntype RequiredAliasKey = \"agents\" | \"tools\" | \"skills\" | \"storage\" | \"crons\";\n\nconst typeToAliasKey: Record<Exclude<ComponentType, \"kitn:package\">, RequiredAliasKey> = {\n \"kitn:agent\": \"agents\",\n \"kitn:tool\": \"tools\",\n \"kitn:skill\": \"skills\",\n \"kitn:storage\": \"storage\",\n \"kitn:cron\": \"crons\",\n};\n\ntype SingleFileComponentType = Exclude<ComponentType, \"kitn:package\">;\n\nexport function getInstallPath(\n config: KitnConfig,\n type: SingleFileComponentType,\n fileName: string,\n namespace?: string,\n): string {\n const aliasKey = typeToAliasKey[type];\n const baseAlias = config.aliases.base ?? \"src/ai\";\n const base = config.aliases[aliasKey] ?? join(baseAlias, aliasKey);\n if (namespace && namespace !== \"@kitn\") {\n const nsDir = namespace.replace(\"@\", \"\");\n return join(base, nsDir, fileName);\n }\n return join(base, fileName);\n}\n","import { readFile, writeFile } from \"fs/promises\";\nimport { join } from \"path\";\n\n/**\n * Strip single-line (//) and multi-line comments from JSONC,\n * and remove trailing commas before } or ], so JSON.parse succeeds.\n */\nfunction stripJsonc(text: string): string {\n return text\n .replace(/\\/\\/.*$/gm, \"\")\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, \"\")\n .replace(/,\\s*([}\\]])/g, \"$1\");\n}\n\n/**\n * Patches a tsconfig JSON string with additional paths entries.\n * If removePrefixes is provided, any existing path keys starting with\n * those prefixes are deleted first (useful for cleaning up old aliases).\n * Returns the updated JSON string.\n */\nexport function patchTsconfig(\n tsconfigContent: string,\n paths: Record<string, string[]>,\n removePrefixes?: string[],\n): string {\n const config = JSON.parse(stripJsonc(tsconfigContent));\n\n if (!config.compilerOptions) {\n config.compilerOptions = {};\n }\n if (!config.compilerOptions.paths) {\n config.compilerOptions.paths = {};\n }\n\n if (removePrefixes) {\n for (const key of Object.keys(config.compilerOptions.paths)) {\n if (removePrefixes.some((prefix) => key.startsWith(prefix))) {\n delete config.compilerOptions.paths[key];\n }\n }\n }\n\n for (const [key, value] of Object.entries(paths)) {\n config.compilerOptions.paths[key] = value;\n }\n\n // Ensure minimum compiler options for kitn compatibility.\n // target ES2022+: our code uses Set/Map iteration\n // moduleResolution \"bundler\": resolves node_modules packages and path aliases\n // skipLibCheck: avoids noise from third-party .d.ts files\n const ES_TARGETS = [\"es3\", \"es5\", \"es6\", \"es2015\", \"es2016\", \"es2017\", \"es2018\", \"es2019\", \"es2020\", \"es2021\"];\n const currentTarget = (config.compilerOptions.target ?? \"\").toLowerCase();\n if (!currentTarget || ES_TARGETS.includes(currentTarget)) {\n config.compilerOptions.target = \"ES2022\";\n }\n if (!config.compilerOptions.moduleResolution) {\n config.compilerOptions.moduleResolution = \"bundler\";\n }\n if (!config.compilerOptions.module) {\n config.compilerOptions.module = \"ESNext\";\n }\n if (config.compilerOptions.skipLibCheck === undefined) {\n config.compilerOptions.skipLibCheck = true;\n }\n\n return JSON.stringify(config, null, 2) + \"\\n\";\n}\n\n/**\n * Reads tsconfig.json from projectDir, patches paths, and writes it back.\n * If no tsconfig.json exists, creates one with just the paths.\n */\nexport async function patchProjectTsconfig(\n projectDir: string,\n paths: Record<string, string[]>,\n removePrefixes?: string[],\n): Promise<void> {\n const tsconfigPath = join(projectDir, \"tsconfig.json\");\n let content: string;\n try {\n content = await readFile(tsconfigPath, \"utf-8\");\n } catch {\n content = \"{}\";\n }\n\n const patched = patchTsconfig(content, paths, removePrefixes);\n await writeFile(tsconfigPath, patched);\n}\n","const EXPORT_LINE = 'export { registerWithPlugin } from \"@kitn/core\";';\nconst BARREL_COMMENT = \"// Managed by kitn CLI — components auto-imported below\";\n\nexport function createBarrelFile(): string {\n return `${BARREL_COMMENT}\\n${EXPORT_LINE}\\n`;\n}\n\nexport function addImportToBarrel(content: string, importPath: string): string {\n const importLine = `import \"${importPath}\";`;\n\n // Idempotent — skip if already present\n if (content.includes(importLine)) return content;\n\n // Insert before the export line\n const exportIndex = content.indexOf(EXPORT_LINE);\n if (exportIndex === -1) {\n // No export line found — append both\n return `${content.trimEnd()}\\n${importLine}\\n${EXPORT_LINE}\\n`;\n }\n\n const before = content.slice(0, exportIndex);\n const after = content.slice(exportIndex);\n return `${before}${importLine}\\n${after}`;\n}\n\nexport function removeImportFromBarrel(\n content: string,\n importPath: string,\n): string {\n const importLine = `import \"${importPath}\";`;\n return content\n .split(\"\\n\")\n .filter((line) => line.trim() !== importLine)\n .join(\"\\n\");\n}\n\nexport function parseBarrelFile(content: string): string[] {\n const imports: string[] = [];\n for (const line of content.split(\"\\n\")) {\n const match = line.match(/^import\\s+[\"'](.+)[\"'];?\\s*$/);\n if (match) imports.push(match[1]);\n }\n return imports;\n}\n","import type { RegistryItem, RegistryIndex } from \"./schema.js\";\nimport type { RegistryEntry } from \"../utils/config.js\";\n\ntype TypeDir = \"agents\" | \"tools\" | \"skills\" | \"storage\" | \"package\" | \"crons\";\ntype FetchFn = (url: string) => Promise<RegistryItem>;\ntype RegistryValue = string | RegistryEntry;\n\nfunction urlOf(entry: RegistryValue): string {\n return typeof entry === \"string\" ? entry : entry.url;\n}\n\nexport class RegistryFetcher {\n private registries: Record<string, RegistryValue>;\n private cache = new Map<string, Promise<RegistryItem>>();\n private fetchFn: FetchFn;\n\n constructor(registries: Record<string, RegistryValue>, fetchFn?: FetchFn) {\n this.registries = registries;\n this.fetchFn = fetchFn ?? this.defaultFetch;\n }\n\n resolveUrl(name: string, typeDir: TypeDir, namespace = \"@kitn\", version?: string): string {\n const entry = this.registries[namespace];\n if (!entry) throw new Error(`No registry configured for ${namespace}`);\n const template = urlOf(entry);\n const fileName = version ? `${name}@${version}` : name;\n return template.replace(\"{name}\", fileName).replace(\"{type}\", typeDir);\n }\n\n async fetchItem(name: string, typeDir: TypeDir, namespace = \"@kitn\", version?: string): Promise<RegistryItem> {\n const url = this.resolveUrl(name, typeDir, namespace, version);\n if (!this.cache.has(url)) {\n this.cache.set(url, this.fetchFn(url));\n }\n return this.cache.get(url)!;\n }\n\n async fetchIndex(namespace = \"@kitn\"): Promise<RegistryIndex> {\n const entry = this.registries[namespace];\n if (!entry) throw new Error(`No registry configured for ${namespace}`);\n const template = urlOf(entry);\n const baseUrl = template.replace(\"{type}/{name}.json\", \"registry.json\");\n const res = await fetch(baseUrl);\n if (!res.ok) throw new Error(`Failed to fetch registry index: ${res.statusText}`);\n return res.json();\n }\n\n private async defaultFetch(url: string): Promise<RegistryItem> {\n const res = await fetch(url);\n if (!res.ok) throw new Error(`Failed to fetch ${url}: ${res.statusText}`);\n return res.json();\n }\n}\n","import type { RegistryItem } from \"./schema.js\";\n\ntype FetchItemFn = (name: string) => Promise<RegistryItem>;\n\nexport async function resolveDependencies(\n names: string[],\n fetchItem: FetchItemFn\n): Promise<RegistryItem[]> {\n const visited = new Set<string>();\n const items = new Map<string, RegistryItem>();\n const edges: [string, string][] = [];\n\n async function resolve(name: string): Promise<void> {\n if (visited.has(name)) return;\n visited.add(name);\n\n const item = await fetchItem(name);\n items.set(name, item);\n\n const deps = item.registryDependencies ?? [];\n for (const dep of deps) {\n edges.push([dep, name]);\n await resolve(dep);\n }\n }\n\n for (const name of names) {\n await resolve(name);\n }\n\n return topologicalSort(items, edges);\n}\n\nfunction topologicalSort(\n items: Map<string, RegistryItem>,\n edges: [string, string][]\n): RegistryItem[] {\n const inDegree = new Map<string, number>();\n const adjacency = new Map<string, string[]>();\n\n for (const name of items.keys()) {\n inDegree.set(name, 0);\n adjacency.set(name, []);\n }\n\n for (const [from, to] of edges) {\n adjacency.get(from)?.push(to);\n inDegree.set(to, (inDegree.get(to) ?? 0) + 1);\n }\n\n const queue: string[] = [];\n for (const [name, degree] of inDegree) {\n if (degree === 0) queue.push(name);\n }\n\n const sorted: RegistryItem[] = [];\n while (queue.length > 0) {\n const name = queue.shift()!;\n sorted.push(items.get(name)!);\n\n for (const neighbor of adjacency.get(name) ?? []) {\n const newDegree = (inDegree.get(neighbor) ?? 1) - 1;\n inDegree.set(neighbor, newDegree);\n if (newDegree === 0) queue.push(neighbor);\n }\n }\n\n if (sorted.length !== items.size) {\n const missing = [...items.keys()].filter((n) => !sorted.some((s) => s.name === n));\n throw new Error(`Circular dependency detected involving: ${missing.join(\", \")}`);\n }\n\n return sorted;\n}\n","import { readFile, writeFile, mkdir, access } from \"fs/promises\";\nimport { dirname } from \"path\";\nimport { createPatch } from \"diff\";\n\nexport enum FileStatus {\n New = \"new\",\n Identical = \"identical\",\n Different = \"different\",\n}\n\nexport async function checkFileStatus(filePath: string, newContent: string): Promise<FileStatus> {\n try {\n await access(filePath);\n } catch {\n return FileStatus.New;\n }\n const existing = await readFile(filePath, \"utf-8\");\n return existing === newContent ? FileStatus.Identical : FileStatus.Different;\n}\n\nexport function generateDiff(filePath: string, oldContent: string, newContent: string): string {\n return createPatch(filePath, oldContent, newContent, \"local\", \"registry\");\n}\n\nexport async function readExistingFile(filePath: string): Promise<string | null> {\n try {\n return await readFile(filePath, \"utf-8\");\n } catch {\n return null;\n }\n}\n\nexport async function writeComponentFile(filePath: string, content: string): Promise<void> {\n await mkdir(dirname(filePath), { recursive: true });\n await writeFile(filePath, content);\n}\n","import { execSync } from \"child_process\";\nimport type { PackageManager } from \"../utils/detect.js\";\n\nexport function installDependencies(pm: PackageManager, deps: string[], projectDir: string): void {\n if (deps.length === 0) return;\n const pkgs = deps.join(\" \");\n const cmd = (() => {\n switch (pm) {\n case \"bun\": return `bun add ${pkgs}`;\n case \"pnpm\": return `pnpm add ${pkgs}`;\n case \"yarn\": return `yarn add ${pkgs}`;\n case \"npm\": return `npm install ${pkgs}`;\n }\n })();\n execSync(cmd, { cwd: projectDir, stdio: \"pipe\" });\n}\n\nexport function installDevDependencies(pm: PackageManager, deps: string[], projectDir: string): void {\n if (deps.length === 0) return;\n const pkgs = deps.join(\" \");\n const cmd = (() => {\n switch (pm) {\n case \"bun\": return `bun add -d ${pkgs}`;\n case \"pnpm\": return `pnpm add -D ${pkgs}`;\n case \"yarn\": return `yarn add -D ${pkgs}`;\n case \"npm\": return `npm install -D ${pkgs}`;\n }\n })();\n execSync(cmd, { cwd: projectDir, stdio: \"pipe\" });\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { readFile, writeFile, access } from \"fs/promises\";\nimport { join } from \"path\";\nimport type { EnvVarConfig } from \"../registry/schema.js\";\n\n/**\n * Parse a .env file into a Set of defined variable names.\n * Only cares about keys, not values.\n */\nfunction parseEnvKeys(content: string): Set<string> {\n const keys = new Set<string>();\n for (const line of content.split(\"\\n\")) {\n const trimmed = line.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) continue;\n const eqIndex = trimmed.indexOf(\"=\");\n if (eqIndex > 0) {\n keys.add(trimmed.slice(0, eqIndex).trim());\n }\n }\n return keys;\n}\n\nasync function fileExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function readEnvFile(path: string): Promise<string> {\n try {\n return await readFile(path, \"utf-8\");\n } catch {\n return \"\";\n }\n}\n\n/**\n * Collect all envVars from resolved items, deduplicating by key name.\n * Later items override earlier ones if same key.\n */\nexport function collectEnvVars(\n items: Array<{ envVars?: Record<string, EnvVarConfig> }>\n): Record<string, EnvVarConfig> {\n const merged: Record<string, EnvVarConfig> = {};\n for (const item of items) {\n if (item.envVars) {\n Object.assign(merged, item.envVars);\n }\n }\n return merged;\n}\n\n/**\n * Handle env var setup after component installation:\n * 1. Write missing vars to .env.example (always)\n * 2. Prompt user for missing vars and write to .env (interactive)\n */\nexport async function handleEnvVars(\n cwd: string,\n envVars: Record<string, EnvVarConfig>\n): Promise<void> {\n const keys = Object.keys(envVars);\n if (keys.length === 0) return;\n\n // Read existing .env and .env.example\n const envPath = join(cwd, \".env\");\n const examplePath = join(cwd, \".env.example\");\n\n const envContent = await readEnvFile(envPath);\n const exampleContent = await readEnvFile(examplePath);\n\n const envKeys = parseEnvKeys(envContent);\n const exampleKeys = parseEnvKeys(exampleContent);\n\n // Find vars missing from each file\n const missingFromExample = keys.filter((k) => !exampleKeys.has(k));\n const missingFromEnv = keys.filter((k) => !envKeys.has(k) && !process.env[k]);\n\n // 1. Always append missing vars to .env.example\n if (missingFromExample.length > 0) {\n const lines: string[] = [];\n if (exampleContent && !exampleContent.endsWith(\"\\n\")) lines.push(\"\");\n for (const key of missingFromExample) {\n const config = envVars[key];\n lines.push(`# ${config.description}${config.url ? ` (${config.url})` : \"\"}`);\n lines.push(`${key}=`);\n }\n await writeFile(examplePath, exampleContent + lines.join(\"\\n\") + \"\\n\");\n p.log.info(`Updated ${pc.cyan(\".env.example\")} with ${missingFromExample.length} variable(s)`);\n }\n\n // 2. Prompt for missing env vars\n if (missingFromEnv.length === 0) return;\n\n p.log.message(\"\");\n p.log.warn(\n `${missingFromEnv.length} environment variable(s) needed:`\n );\n for (const key of missingFromEnv) {\n const config = envVars[key];\n const req = config.required !== false ? pc.red(\"*\") : \"\";\n p.log.message(` ${pc.yellow(key)}${req}: ${config.description}${config.url ? pc.dim(` -> ${config.url}`) : \"\"}`);\n }\n\n const shouldPrompt = await p.confirm({\n message: \"Would you like to enter values now?\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldPrompt) || !shouldPrompt) {\n p.log.info(`Add them to ${pc.cyan(\".env\")} when ready.`);\n return;\n }\n\n const newEntries: string[] = [];\n for (const key of missingFromEnv) {\n const config = envVars[key];\n const isSecret = config.secret !== false; // default true\n\n let value: string | symbol;\n if (isSecret) {\n value = await p.password({\n message: `${key}:`,\n });\n } else {\n value = await p.text({\n message: `${key}:`,\n placeholder: config.description,\n });\n }\n\n if (p.isCancel(value)) {\n p.log.info(`Skipped remaining variables. Add them to ${pc.cyan(\".env\")} when ready.`);\n break;\n }\n\n if (value) {\n newEntries.push(`${key}=${value}`);\n }\n }\n\n if (newEntries.length > 0) {\n const existingEnv = await readEnvFile(envPath);\n const lines: string[] = [];\n if (existingEnv && !existingEnv.endsWith(\"\\n\")) lines.push(\"\");\n lines.push(...newEntries);\n await writeFile(envPath, existingEnv + lines.join(\"\\n\") + \"\\n\");\n p.log.success(`Wrote ${newEntries.length} variable(s) to ${pc.cyan(\".env\")}`);\n }\n}\n","import { relative, dirname, join, posix } from \"path\";\n\ntype AliasKey = \"agents\" | \"tools\" | \"skills\" | \"storage\" | \"crons\";\n\nconst KNOWN_TYPES: readonly AliasKey[] = [\"agents\", \"tools\", \"skills\", \"storage\", \"crons\"];\n\nconst TYPE_TO_ALIAS_KEY: Record<string, AliasKey> = {\n \"kitn:agent\": \"agents\",\n \"kitn:tool\": \"tools\",\n \"kitn:skill\": \"skills\",\n \"kitn:storage\": \"storage\",\n \"kitn:cron\": \"crons\",\n};\n\n/**\n * Rewrites `@kitn/<type>/<path>` imports to relative paths based on install layout.\n *\n * Only rewrites known types (agents, tools, skills, storage).\n * Other `@kitn/` imports (e.g. `@kitn/server`) pass through untouched.\n */\nexport function rewriteKitnImports(\n content: string,\n fileType: string,\n fileName: string,\n aliases: Record<string, string | undefined>,\n): string {\n const sourceAliasKey = TYPE_TO_ALIAS_KEY[fileType];\n if (!sourceAliasKey) return content;\n\n const sourceDir = aliases[sourceAliasKey];\n if (!sourceDir) return content;\n\n // Match import/export ... from \"@kitn/<type>/<path>\"\n return content.replace(\n /((?:import|export)\\s+.*?\\s+from\\s+[\"'])@kitn\\/([\\w-]+)\\/([^\"']+)([\"'])/g,\n (_match, prefix: string, type: string, targetPath: string, quote: string) => {\n if (!KNOWN_TYPES.includes(type as AliasKey)) {\n return `${prefix}@kitn/${type}/${targetPath}${quote}`;\n }\n\n const targetDir = aliases[type as AliasKey];\n if (!targetDir) {\n return `${prefix}@kitn/${type}/${targetPath}${quote}`;\n }\n const targetFile = join(targetDir, targetPath);\n let rel = relative(sourceDir, targetFile);\n\n // Normalize to posix separators\n rel = rel.split(\"\\\\\").join(\"/\");\n\n // Ensure relative path starts with ./ or ../\n if (!rel.startsWith(\".\")) {\n rel = `./${rel}`;\n }\n\n return `${prefix}${rel}${quote}`;\n },\n );\n}\n","import { createHash } from \"crypto\";\n\nexport function contentHash(content: string): string {\n return createHash(\"sha256\").update(content).digest(\"hex\").slice(0, 8);\n}\n","export interface ComponentRef {\n namespace: string;\n name: string;\n version: string | undefined;\n}\n\nexport function parseComponentRef(input: string): ComponentRef {\n let namespace = \"@kitn\";\n let rest = input;\n\n // Parse @namespace/name\n if (rest.startsWith(\"@\")) {\n const slashIdx = rest.indexOf(\"/\");\n if (slashIdx === -1) {\n throw new Error(`Invalid component reference: ${input}. Expected @namespace/name`);\n }\n namespace = rest.slice(0, slashIdx);\n rest = rest.slice(slashIdx + 1);\n }\n\n // Parse name@version\n const atIdx = rest.indexOf(\"@\");\n if (atIdx === -1) {\n return { namespace, name: rest, version: undefined };\n }\n\n return {\n namespace,\n name: rest.slice(0, atIdx),\n version: rest.slice(atIdx + 1),\n };\n}\n","import type { ComponentType } from \"../registry/schema.js\";\n\nexport const TYPE_ALIASES: Record<string, string> = {\n agent: \"agent\",\n agents: \"agent\",\n tool: \"tool\",\n tools: \"tool\",\n skill: \"skill\",\n skills: \"skill\",\n storage: \"storage\",\n storages: \"storage\",\n package: \"package\",\n packages: \"package\",\n cron: \"cron\",\n crons: \"cron\",\n};\n\nconst SHORT_TO_COMPONENT: Record<string, ComponentType> = {\n agent: \"kitn:agent\",\n tool: \"kitn:tool\",\n skill: \"kitn:skill\",\n storage: \"kitn:storage\",\n package: \"kitn:package\",\n cron: \"kitn:cron\",\n};\n\n/** Resolve a user-provided type string (e.g. \"agents\") to its canonical short form (e.g. \"agent\"). */\nexport function resolveTypeAlias(input: string): string | undefined {\n return TYPE_ALIASES[input.toLowerCase()];\n}\n\n/** Convert a canonical short type (e.g. \"agent\") to a ComponentType (e.g. \"kitn:agent\"). */\nexport function toComponentType(shortType: string): ComponentType {\n const ct = SHORT_TO_COMPONENT[shortType];\n if (!ct) throw new Error(`Unknown component type: ${shortType}`);\n return ct;\n}\n","import { z } from \"zod\";\n\nexport const componentType = z.enum([\"kitn:agent\", \"kitn:tool\", \"kitn:skill\", \"kitn:storage\", \"kitn:package\", \"kitn:cron\"]);\nexport type ComponentType = z.infer<typeof componentType>;\n\nexport const registryFileSchema = z.object({\n path: z.string(),\n content: z.string(),\n type: componentType,\n});\n\nexport const changelogEntrySchema = z.object({\n version: z.string(),\n date: z.string(),\n type: z.enum([\"feature\", \"fix\", \"breaking\", \"initial\"]),\n note: z.string(),\n});\nexport type ChangelogEntry = z.infer<typeof changelogEntrySchema>;\n\nexport const envVarConfigSchema = z.object({\n description: z.string(),\n required: z.boolean().optional(),\n secret: z.boolean().optional(),\n url: z.string().optional(),\n});\nexport type EnvVarConfig = z.infer<typeof envVarConfigSchema>;\n\n/** Schema for the author-facing registry.json file */\nexport const componentConfigSchema = z.object({\n $schema: z.string().optional(),\n type: componentType,\n name: z.string().optional(),\n version: z.string().optional(),\n description: z.string().optional(),\n dependencies: z.array(z.string()).optional(),\n devDependencies: z.array(z.string()).optional(),\n registryDependencies: z.array(z.string()).optional(),\n files: z.array(z.string()).optional(),\n sourceDir: z.string().optional(),\n exclude: z.array(z.string()).optional(),\n installDir: z.string().optional(),\n tsconfig: z.record(z.string(), z.array(z.string())).optional(),\n envVars: z.record(z.string(), envVarConfigSchema).optional(),\n categories: z.array(z.string()).optional(),\n slot: z.string().optional(),\n docs: z.string().optional(),\n changelog: z.array(changelogEntrySchema).optional(),\n});\nexport type ComponentConfig = z.infer<typeof componentConfigSchema>;\n\nexport const registryItemSchema = z.object({\n $schema: z.string().optional(),\n name: z.string(),\n type: componentType,\n description: z.string(),\n dependencies: z.array(z.string()).optional(),\n devDependencies: z.array(z.string()).optional(),\n registryDependencies: z.array(z.string()).optional(),\n envVars: z.record(z.string(), envVarConfigSchema).optional(),\n files: z.array(registryFileSchema),\n installDir: z.string().optional(),\n tsconfig: z.record(z.string(), z.array(z.string())).optional(),\n docs: z.string().optional(),\n categories: z.array(z.string()).optional(),\n slot: z.string().optional(),\n version: z.string().optional(),\n updatedAt: z.string().optional(),\n changelog: z.array(changelogEntrySchema).optional(),\n});\nexport type RegistryItem = z.infer<typeof registryItemSchema>;\n\nexport const registryIndexItemSchema = z.object({\n name: z.string(),\n type: componentType,\n description: z.string(),\n registryDependencies: z.array(z.string()).optional(),\n categories: z.array(z.string()).optional(),\n slot: z.string().optional(),\n version: z.string().optional(),\n versions: z.array(z.string()).optional(),\n updatedAt: z.string().optional(),\n});\n\nexport const registryIndexSchema = z.object({\n $schema: z.string().optional(),\n version: z.string(),\n items: z.array(registryIndexItemSchema),\n});\nexport type RegistryIndex = z.infer<typeof registryIndexSchema>;\n\nexport const typeToDir: Record<ComponentType, string> = {\n \"kitn:agent\": \"agents\",\n \"kitn:tool\": \"tools\",\n \"kitn:skill\": \"skills\",\n \"kitn:storage\": \"storage\",\n \"kitn:package\": \"package\",\n \"kitn:cron\": \"crons\",\n};\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { join, dirname } from \"path\";\nimport { readConfig, writeConfig, getInstallPath, resolveRoutesAlias, readLock, writeLock } from \"../utils/config.js\";\nimport { detectPackageManager } from \"../utils/detect.js\";\nimport { RegistryFetcher } from \"../registry/fetcher.js\";\nimport { resolveDependencies } from \"../registry/resolver.js\";\nimport {\n checkFileStatus,\n writeComponentFile,\n readExistingFile,\n generateDiff,\n FileStatus,\n} from \"../installers/file-writer.js\";\nimport { installDependencies, installDevDependencies } from \"../installers/dep-installer.js\";\nimport { collectEnvVars, handleEnvVars } from \"../installers/env-writer.js\";\nimport { rewriteKitnImports } from \"../installers/import-rewriter.js\";\nimport { createBarrelFile, addImportToBarrel, removeImportFromBarrel } from \"../installers/barrel-manager.js\";\nimport { contentHash } from \"../utils/hash.js\";\nimport { parseComponentRef, type ComponentRef } from \"../utils/parse-ref.js\";\nimport { resolveTypeAlias, toComponentType } from \"../utils/type-aliases.js\";\nimport { typeToDir, type RegistryItem, type ComponentType } from \"../registry/schema.js\";\nimport { existsSync } from \"fs\";\nimport { readFile, writeFile, mkdir, unlink } from \"fs/promises\";\nimport { relative } from \"path\";\n\ninterface AddOptions {\n overwrite?: boolean;\n type?: string;\n}\n\nexport async function addCommand(components: string[], opts: AddOptions) {\n p.intro(pc.bgCyan(pc.black(\" kitn add \")));\n\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n if (!config) {\n p.log.error(\"No kitn.json found. Run `kitn init` first.\");\n process.exit(1);\n }\n\n const lock = await readLock(cwd);\n\n if (components.length === 0) {\n // Interactive browse mode — fetch index, group by type, multi-select\n const fetcher = new RegistryFetcher(config.registries);\n const s = p.spinner();\n s.start(\"Fetching registry...\");\n\n const allItems: Array<{ name: string; type: string; description: string; namespace: string }> = [];\n for (const namespace of Object.keys(config.registries)) {\n try {\n const index = await fetcher.fetchIndex(namespace);\n for (const item of index.items) {\n allItems.push({ name: item.name, type: item.type, description: item.description, namespace });\n }\n } catch {\n // Skip failing registries\n }\n }\n\n s.stop(`Found ${allItems.length} component(s)`);\n\n if (allItems.length === 0) {\n p.log.warn(\"No components found in configured registries.\");\n process.exit(0);\n }\n\n const installed = new Set(Object.keys(lock));\n\n // Group by type, preserving order\n const typeLabels: Record<string, string> = {\n \"kitn:agent\": \"Agents\",\n \"kitn:tool\": \"Tools\",\n \"kitn:skill\": \"Skills\",\n \"kitn:storage\": \"Storage\",\n \"kitn:package\": \"Packages\",\n };\n\n const groups = new Map<string, typeof allItems>();\n for (const item of allItems) {\n if (!groups.has(item.type)) groups.set(item.type, []);\n groups.get(item.type)!.push(item);\n }\n\n const options: Array<{ value: string; label: string; hint?: string }> = [];\n for (const [type, items] of groups) {\n const label = typeLabels[type] ?? type;\n options.push({ value: `__separator_${type}`, label: pc.bold(`── ${label} ${\"─\".repeat(Math.max(0, 40 - label.length))}`), hint: \"\" });\n for (const item of items) {\n const isInstalled = installed.has(item.name);\n options.push({\n value: item.name,\n label: isInstalled ? pc.dim(`${item.name} (installed)`) : item.name,\n hint: item.description,\n });\n }\n }\n\n const selected = await p.multiselect({\n message: \"Select components to install:\",\n options,\n });\n\n if (p.isCancel(selected)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n components = (selected as string[]).filter((s) => !s.startsWith(\"__separator_\"));\n\n if (components.length === 0) {\n p.log.warn(\"No components selected.\");\n process.exit(0);\n }\n }\n\n // --- Positional type argument parsing ---\n // e.g. `kitn add agent weather` → typeFilter=\"agent\", components=[\"weather\"]\n let typeFilter: string | undefined;\n const firstAlias = resolveTypeAlias(components[0]);\n if (firstAlias) {\n if (components.length === 1) {\n p.log.error(\n `${pc.bold(components[0])} looks like a type, not a component name. Usage: ${pc.cyan(`kitn add ${components[0]} <name>`)}`\n );\n process.exit(1);\n }\n typeFilter = firstAlias;\n components = components.slice(1);\n }\n\n // Merge with --type flag (flag wins on conflict)\n if (opts.type) {\n const flagAlias = resolveTypeAlias(opts.type);\n if (!flagAlias) {\n p.log.error(`Unknown type ${pc.bold(opts.type)}. Valid types: agent, tool, skill, storage, package`);\n process.exit(1);\n }\n if (typeFilter && typeFilter !== flagAlias) {\n p.log.warn(`Positional type ${pc.bold(typeFilter)} overridden by --type ${pc.bold(flagAlias)}`);\n }\n typeFilter = flagAlias;\n }\n\n // Resolve \"routes\" to framework-specific adapter name, then parse refs\n const resolvedComponents = components.map((c) => {\n if (c === \"routes\") {\n return resolveRoutesAlias(config);\n }\n return c;\n });\n\n const refs = resolvedComponents.map(parseComponentRef);\n const fetcher = new RegistryFetcher(config.registries);\n\n // --- Disambiguation: resolve ambiguous names before dependency resolution ---\n const s = p.spinner();\n s.start(\"Resolving dependencies...\");\n\n // Build a map of pre-resolved types for explicitly requested components\n const preResolvedTypes = new Map<string, ComponentType>();\n let expandedNames = [...resolvedComponents];\n\n try {\n // Fetch all registry indices\n const namespacesToFetch = Object.keys(config.registries);\n const allIndexItems: Array<{ name: string; type: ComponentType; namespace: string }> = [];\n\n for (const namespace of namespacesToFetch) {\n try {\n const index = await fetcher.fetchIndex(namespace);\n for (const item of index.items) {\n allIndexItems.push({ name: item.name, type: item.type, namespace });\n }\n } catch {\n // Skip failing registries during disambiguation\n }\n }\n\n // Check each explicit component for ambiguity\n const newExpandedNames: string[] = [];\n for (const name of resolvedComponents) {\n const ref = refs.find((r) => r.name === name) ?? { namespace: \"@kitn\", name, version: undefined };\n let matches = allIndexItems.filter((i) => i.name === name && (ref.namespace === \"@kitn\" || i.namespace === ref.namespace));\n\n if (typeFilter) {\n const filteredType = toComponentType(typeFilter);\n matches = matches.filter((m) => m.type === filteredType);\n }\n\n if (matches.length === 0) {\n // No exact match — try substring search\n let fuzzyMatches = allIndexItems.filter(\n (i) => i.name.includes(name) && (ref.namespace === \"@kitn\" || i.namespace === ref.namespace)\n );\n\n if (typeFilter) {\n const filteredType = toComponentType(typeFilter);\n fuzzyMatches = fuzzyMatches.filter((m) => m.type === filteredType);\n }\n\n if (fuzzyMatches.length === 0) {\n // Truly not found — let the resolution phase produce the error\n newExpandedNames.push(name);\n } else if (fuzzyMatches.length === 1) {\n // Single substring match — use it directly\n preResolvedTypes.set(fuzzyMatches[0].name, fuzzyMatches[0].type);\n newExpandedNames.push(fuzzyMatches[0].name);\n } else {\n // Multiple substring matches — prompt user to select\n s.stop(\"Multiple matches found\");\n\n if (!process.stdin.isTTY) {\n const suggestions = fuzzyMatches.map((m) => `${m.name} (${m.type.replace(\"kitn:\", \"\")})`).join(\", \");\n p.log.error(\n `Component ${pc.bold(name)} not found. Did you mean one of: ${suggestions}`\n );\n process.exit(1);\n }\n\n const selected = await p.multiselect({\n message: `No exact match for ${pc.bold(name)}. Select component(s) to install:`,\n options: fuzzyMatches.map((m) => ({\n value: `${m.name}::${m.type}`,\n label: `${m.name} ${pc.dim(`(${m.type.replace(\"kitn:\", \"\")})`)}`,\n })),\n });\n\n if (p.isCancel(selected)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n for (const sel of selected as string[]) {\n const [selName, selType] = sel.split(\"::\");\n preResolvedTypes.set(selName, selType as ComponentType);\n newExpandedNames.push(selName);\n }\n\n s.start(\"Resolving dependencies...\");\n }\n } else if (matches.length === 1) {\n preResolvedTypes.set(name, matches[0].type);\n newExpandedNames.push(name);\n } else {\n // Multiple types for the same name\n const uniqueTypes = [...new Set(matches.map((m) => m.type))];\n if (uniqueTypes.length === 1) {\n preResolvedTypes.set(name, uniqueTypes[0]);\n newExpandedNames.push(name);\n } else {\n // Need disambiguation\n s.stop(\"Disambiguation needed\");\n\n if (!process.stdin.isTTY) {\n const typeNames = uniqueTypes.map((t) => t.replace(\"kitn:\", \"\")).join(\", \");\n p.log.error(\n `Multiple components named ${pc.bold(name)} found (${typeNames}). Specify the type: ${pc.cyan(`kitn add ${uniqueTypes[0].replace(\"kitn:\", \"\")} ${name}`)}`\n );\n process.exit(1);\n }\n\n const selected = await p.multiselect({\n message: `Multiple types found for ${pc.bold(name)}. Which do you want to install?`,\n options: uniqueTypes.map((t) => ({\n value: t,\n label: `${name} ${pc.dim(`(${t.replace(\"kitn:\", \"\")})`)}`,\n })),\n });\n\n if (p.isCancel(selected)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n for (const type of selected as ComponentType[]) {\n preResolvedTypes.set(name, type);\n newExpandedNames.push(name);\n }\n\n s.start(\"Resolving dependencies...\");\n }\n }\n }\n expandedNames = newExpandedNames;\n } catch (err: any) {\n s.stop(pc.red(\"Failed to resolve dependencies\"));\n p.log.error(err.message);\n process.exit(1);\n }\n\n // --- Dependency resolution with type-aware fetching ---\n let resolved: RegistryItem[];\n try {\n resolved = await resolveDependencies(expandedNames, async (name) => {\n const ref = refs.find((r) => r.name === name) ?? { namespace: \"@kitn\", name, version: undefined };\n const index = await fetcher.fetchIndex(ref.namespace);\n\n // Use pre-resolved type for explicit names, first-match for transitive deps\n const preResolved = preResolvedTypes.get(name);\n const indexItem = preResolved\n ? index.items.find((i) => i.name === name && i.type === preResolved)\n : index.items.find((i) => i.name === name);\n\n if (!indexItem) throw new Error(`Component '${name}' not found in ${ref.namespace} registry`);\n const dir = typeToDir[indexItem.type];\n return fetcher.fetchItem(name, dir as any, ref.namespace, ref.version);\n });\n } catch (err: any) {\n s.stop(pc.red(\"Failed to resolve dependencies\"));\n p.log.error(err.message);\n process.exit(1);\n }\n\n s.stop(`Resolved ${resolved.length} component(s)`);\n\n // --- Slot conflict detection ---\n const slotReplacements = new Map<string, string>(); // oldName → newName\n for (const item of resolved) {\n if (!item.slot) continue;\n const existing = Object.entries(lock).find(\n ([key, entry]) => key !== item.name && entry.slot === item.slot\n );\n if (!existing) continue;\n\n const [existingKey] = existing;\n const action = await p.select({\n message: `${pc.bold(existingKey)} already fills the ${pc.cyan(item.slot)} slot. What would you like to do?`,\n options: [\n { value: \"replace\", label: `Replace ${existingKey} with ${item.name}` },\n { value: \"add\", label: `Add alongside ${existingKey}` },\n ],\n });\n\n if (p.isCancel(action)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n if (action === \"replace\") {\n slotReplacements.set(existingKey, item.name);\n }\n }\n\n // Process slot replacements — remove old components\n if (slotReplacements.size > 0) {\n const baseDir = config.aliases.base ?? \"src/ai\";\n for (const [oldKey] of slotReplacements) {\n const oldEntry = lock[oldKey];\n if (!oldEntry) continue;\n\n for (const filePath of oldEntry.files) {\n try {\n await unlink(join(cwd, filePath));\n } catch {\n // File may have been moved or deleted\n }\n }\n\n // Remove barrel imports for deleted files\n const barrelPath = join(cwd, baseDir, \"index.ts\");\n const barrelEligibleDirs = new Set([\n config.aliases.agents,\n config.aliases.tools,\n config.aliases.skills,\n ]);\n\n if (existsSync(barrelPath)) {\n let barrelContent = await readFile(barrelPath, \"utf-8\");\n let barrelChanged = false;\n\n for (const filePath of oldEntry.files) {\n const fileDir = dirname(filePath);\n if (!barrelEligibleDirs.has(fileDir)) continue;\n const barrelDir = join(cwd, baseDir);\n const importPath = \"./\" + relative(barrelDir, join(cwd, filePath)).replace(/\\\\/g, \"/\");\n const updated = removeImportFromBarrel(barrelContent, importPath);\n if (updated !== barrelContent) {\n barrelContent = updated;\n barrelChanged = true;\n }\n }\n\n if (barrelChanged) {\n await writeFile(barrelPath, barrelContent);\n }\n }\n\n delete lock[oldKey];\n p.log.info(`Replaced ${pc.dim(oldKey)} → ${pc.cyan(slotReplacements.get(oldKey)!)}`);\n }\n }\n\n p.log.info(\"Components to install:\\n\" + resolved.map((item) => {\n const isExplicit = expandedNames.includes(item.name) || components.includes(item.name);\n const label = isExplicit ? item.name : `${item.name} ${pc.dim(\"(dependency)\")}`;\n return ` ${pc.cyan(label)}`;\n }).join(\"\\n\"));\n\n const created: string[] = [];\n const updated: string[] = [];\n const skipped: string[] = [];\n const allDeps: string[] = [];\n const allDevDeps: string[] = [];\n for (const item of resolved) {\n if (item.dependencies) allDeps.push(...item.dependencies);\n if (item.devDependencies) allDevDeps.push(...item.devDependencies);\n\n // Skip file processing for packages already installed with identical content\n const existingInstall = lock[item.name];\n if (existingInstall && item.type === \"kitn:package\") {\n const allContent = item.files.map((f) => f.content).join(\"\\n\");\n if (contentHash(allContent) === existingInstall.hash) {\n continue;\n }\n }\n\n if (item.type === \"kitn:package\") {\n // Package install — multi-file, preserved directory structure\n const baseDir = config.aliases.base ?? \"src/ai\";\n\n for (const file of item.files) {\n const targetPath = join(cwd, baseDir, file.path);\n const relativePath = join(baseDir, file.path);\n\n const status = await checkFileStatus(targetPath, file.content);\n\n switch (status) {\n case FileStatus.New:\n await writeComponentFile(targetPath, file.content);\n created.push(relativePath);\n break;\n\n case FileStatus.Identical:\n skipped.push(relativePath);\n break;\n\n case FileStatus.Different:\n if (opts.overwrite) {\n await writeComponentFile(targetPath, file.content);\n updated.push(relativePath);\n } else {\n const existing = await readExistingFile(targetPath);\n const diff = generateDiff(relativePath, existing ?? \"\", file.content);\n p.log.message(pc.dim(diff));\n\n const action = await p.select({\n message: `${relativePath} already exists and differs. What to do?`,\n options: [\n { value: \"skip\", label: \"Keep local version\" },\n { value: \"overwrite\", label: \"Overwrite with registry version\" },\n ],\n });\n\n if (!p.isCancel(action) && action === \"overwrite\") {\n await writeComponentFile(targetPath, file.content);\n updated.push(relativePath);\n } else {\n skipped.push(relativePath);\n }\n }\n break;\n }\n }\n\n // Track in lock\n const allContent = item.files.map((f) => f.content).join(\"\\n\");\n const ref = refs.find((r) => r.name === item.name) ?? { namespace: \"@kitn\", name: item.name, version: undefined };\n const installedKey = ref.namespace === \"@kitn\" ? item.name : `${ref.namespace}/${item.name}`;\n lock[installedKey] = {\n registry: ref.namespace,\n type: item.type,\n ...(item.slot && { slot: item.slot }),\n version: item.version ?? \"1.0.0\",\n installedAt: new Date().toISOString(),\n files: item.files.map((f) => join(baseDir, f.path)),\n hash: contentHash(allContent),\n registryDependencies: item.registryDependencies,\n };\n\n } else {\n // Regular component install — single file, import rewriting\n const ref = refs.find((r) => r.name === item.name) ?? { namespace: \"@kitn\", name: item.name, version: undefined };\n const ns = ref.namespace;\n\n for (const file of item.files) {\n const aliasKey = (() => {\n switch (item.type) {\n case \"kitn:agent\": return \"agents\";\n case \"kitn:tool\": return \"tools\";\n case \"kitn:skill\": return \"skills\";\n case \"kitn:storage\": return \"storage\";\n case \"kitn:cron\": return \"crons\";\n }\n })() as \"agents\" | \"tools\" | \"skills\" | \"storage\" | \"crons\";\n\n const fileName = file.path.split(\"/\").pop()!;\n const installPath = getInstallPath(config, item.type as Exclude<ComponentType, \"kitn:package\">, fileName, ns);\n const targetPath = join(cwd, installPath);\n const relativePath = installPath;\n const content = rewriteKitnImports(file.content, item.type, fileName, config.aliases);\n\n const status = await checkFileStatus(targetPath, content);\n\n switch (status) {\n case FileStatus.New:\n await writeComponentFile(targetPath, content);\n created.push(relativePath);\n break;\n\n case FileStatus.Identical:\n skipped.push(relativePath);\n break;\n\n case FileStatus.Different:\n if (opts.overwrite) {\n await writeComponentFile(targetPath, content);\n updated.push(relativePath);\n } else {\n const existing = await readExistingFile(targetPath);\n const diff = generateDiff(relativePath, existing ?? \"\", content);\n p.log.message(pc.dim(diff));\n\n const action = await p.select({\n message: `${relativePath} already exists and differs. What to do?`,\n options: [\n { value: \"skip\", label: \"Keep local version\" },\n { value: \"overwrite\", label: \"Overwrite with registry version\" },\n ],\n });\n\n if (!p.isCancel(action) && action === \"overwrite\") {\n await writeComponentFile(targetPath, content);\n updated.push(relativePath);\n } else {\n skipped.push(relativePath);\n }\n }\n break;\n }\n }\n\n // Track in lock\n const allContent = item.files.map((f) => {\n const fn = f.path.split(\"/\").pop()!;\n return rewriteKitnImports(f.content, item.type, fn, config.aliases);\n }).join(\"\\n\");\n const installedKey = ns === \"@kitn\" ? item.name : `${ns}/${item.name}`;\n lock[installedKey] = {\n registry: ns,\n type: item.type,\n ...(item.slot && { slot: item.slot }),\n version: item.version ?? \"1.0.0\",\n installedAt: new Date().toISOString(),\n files: item.files.map((f) => {\n const fileName = f.path.split(\"/\").pop()!;\n return getInstallPath(config, item.type as Exclude<ComponentType, \"kitn:package\">, fileName, ns);\n }),\n hash: contentHash(allContent),\n registryDependencies: item.registryDependencies,\n };\n }\n }\n\n // Barrel management — auto-wire imports for barrel-eligible components\n const BARREL_ELIGIBLE: Set<string> = new Set([\"kitn:agent\", \"kitn:tool\", \"kitn:skill\", \"kitn:cron\"]);\n const baseDir = config.aliases.base ?? \"src/ai\";\n const barrelPath = join(cwd, baseDir, \"index.ts\");\n const barrelDir = join(cwd, baseDir);\n\n const barrelImports: string[] = [];\n for (const item of resolved) {\n if (!BARREL_ELIGIBLE.has(item.type)) continue;\n\n const ref = refs.find((r) => r.name === item.name) ?? { namespace: \"@kitn\", name: item.name, version: undefined };\n\n for (const file of item.files) {\n const fileName = file.path.split(\"/\").pop()!;\n const installPath = getInstallPath(config, item.type as Exclude<ComponentType, \"kitn:package\">, fileName, ref.namespace);\n const filePath = join(cwd, installPath);\n const importPath = \"./\" + relative(barrelDir, filePath).replace(/\\\\/g, \"/\");\n barrelImports.push(importPath);\n }\n }\n\n if (barrelImports.length > 0) {\n const barrelExisted = existsSync(barrelPath);\n let barrelContent: string;\n\n if (barrelExisted) {\n barrelContent = await readFile(barrelPath, \"utf-8\");\n } else {\n await mkdir(barrelDir, { recursive: true });\n barrelContent = createBarrelFile();\n }\n\n for (const importPath of barrelImports) {\n barrelContent = addImportToBarrel(barrelContent, importPath);\n }\n\n await writeFile(barrelPath, barrelContent);\n p.log.info(`Updated barrel file: ${join(baseDir, \"index.ts\")}`);\n\n if (!barrelExisted) {\n p.note(\n [\n `import { ai } from \"@kitn/plugin\";`,\n ``,\n `app.route(\"/api\", ai.router);`,\n ].join(\"\\n\"),\n \"Add this to your server entry point\",\n );\n }\n }\n\n await writeConfig(cwd, config);\n await writeLock(cwd, lock);\n\n const uniqueDeps = [...new Set(allDeps)];\n const uniqueDevDeps = [...new Set(allDevDeps)].filter((d) => !uniqueDeps.includes(d));\n const totalDeps = uniqueDeps.length + uniqueDevDeps.length;\n if (totalDeps > 0) {\n const pm = await detectPackageManager(cwd);\n if (pm) {\n s.start(`Installing ${totalDeps} npm dependenc${totalDeps === 1 ? \"y\" : \"ies\"}...`);\n try {\n if (uniqueDeps.length > 0) installDependencies(pm, uniqueDeps, cwd);\n if (uniqueDevDeps.length > 0) installDevDependencies(pm, uniqueDevDeps, cwd);\n s.stop(\"Dependencies installed\");\n } catch {\n s.stop(pc.yellow(\"Some dependencies failed to install\"));\n }\n }\n }\n\n if (created.length > 0) {\n p.log.success(`Added ${created.length} file(s):\\n` + created.map((f) => ` ${pc.green(\"+\")} ${f}`).join(\"\\n\"));\n }\n if (updated.length > 0) {\n p.log.success(`Updated ${updated.length} file(s):\\n` + updated.map((f) => ` ${pc.yellow(\"~\")} ${f}`).join(\"\\n\"));\n }\n if (skipped.length > 0) {\n p.log.info(`Skipped ${skipped.length} file(s):\\n` + skipped.map((f) => ` ${pc.dim(\"-\")} ${f}`).join(\"\\n\"));\n }\n\n // Handle environment variables\n const allEnvVars = collectEnvVars(resolved);\n await handleEnvVars(cwd, allEnvVars);\n\n for (const item of resolved) {\n if (item.docs) {\n p.log.info(`${pc.bold(item.name)}: ${item.docs}`);\n }\n }\n\n // Show next-step hints for well-known packages\n const resolvedNames = new Set(resolved.map((r) => r.name));\n const projectInstalled = new Set(Object.keys(lock));\n const hints: string[] = [];\n\n const adapterName = resolveRoutesAlias(config);\n\n // Only suggest adding routes if neither resolved nor already installed\n if (resolvedNames.has(\"core\") && !resolvedNames.has(adapterName) && !projectInstalled.has(adapterName)) {\n hints.push(`Run ${pc.cyan(`kitn add routes`)} to install the HTTP adapter.`);\n }\n\n if (hints.length > 0) {\n p.log.message(pc.bold(\"\\nNext steps:\") + \"\\n\" + hints.join(\"\\n\"));\n }\n\n p.outro(pc.green(\"Done!\"));\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { mkdir, writeFile } from \"fs/promises\";\nimport { join } from \"path\";\nimport { readConfig, writeConfig } from \"../utils/config.js\";\nimport { patchProjectTsconfig } from \"../installers/tsconfig-patcher.js\";\nimport { createBarrelFile } from \"../installers/barrel-manager.js\";\nimport { addCommand } from \"./add.js\";\n\nfunction getPluginTemplate(framework: string): string {\n const adapterName = framework === \"hono-openapi\" ? \"hono-openapi\" : framework;\n return `import { createAIPlugin } from \"@kitn/adapters/${adapterName}\";\nimport { registerWithPlugin } from \"./index.js\";\n\nexport const ai = createAIPlugin({\n // To enable agent chat, add an AI provider:\n // https://sdk.vercel.ai/providers/ai-sdk-providers\n //\n // Example with OpenRouter (access to many models):\n // import { openrouter } from \"@openrouter/ai-sdk-provider\";\n // model: (id) => openrouter(id ?? \"openai/gpt-4o-mini\"),\n //\n // Example with OpenAI directly:\n // import { openai } from \"@ai-sdk/openai\";\n // model: (id) => openai(id ?? \"gpt-4o-mini\"),\n});\n\n// Flush all auto-registered components into the plugin\nregisterWithPlugin(ai);\n`;\n}\n\ninterface InitOptions {\n runtime?: string;\n framework?: string;\n base?: string;\n yes?: boolean;\n}\n\nexport async function initCommand(opts: InitOptions = {}) {\n p.intro(pc.bgCyan(pc.black(\" kitn init \")));\n\n const cwd = process.cwd();\n\n const existing = await readConfig(cwd);\n if (existing) {\n if (opts.yes) {\n p.log.warn(\"kitn.json already exists — overwriting (--yes).\");\n } else {\n p.log.warn(\"kitn.json already exists in this directory.\");\n const shouldContinue = await p.confirm({\n message: \"Overwrite existing configuration?\",\n initialValue: false,\n });\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Init cancelled.\");\n process.exit(0);\n }\n }\n }\n\n let runtime: string;\n if (opts.runtime) {\n if (![\"bun\", \"node\", \"deno\"].includes(opts.runtime)) {\n p.log.error(`Invalid runtime: ${opts.runtime}. Must be bun, node, or deno.`);\n process.exit(1);\n }\n runtime = opts.runtime;\n } else if (opts.yes) {\n runtime = \"bun\";\n } else {\n const selected = await p.select({\n message: \"Which runtime do you use?\",\n options: [\n { value: \"bun\", label: \"Bun\", hint: \"recommended\" },\n { value: \"node\", label: \"Node.js\" },\n { value: \"deno\", label: \"Deno\" },\n ],\n });\n if (p.isCancel(selected)) {\n p.cancel(\"Init cancelled.\");\n process.exit(0);\n }\n runtime = selected as string;\n }\n\n const validFrameworks = [\"hono\", \"hono-openapi\", \"elysia\"] as const;\n type Framework = (typeof validFrameworks)[number];\n let framework: Framework;\n if (opts.framework) {\n if (!validFrameworks.includes(opts.framework as Framework)) {\n p.log.error(`Invalid framework: ${opts.framework}. Must be one of: ${validFrameworks.join(\", \")}`);\n process.exit(1);\n }\n framework = opts.framework as Framework;\n } else if (opts.yes) {\n framework = \"hono\";\n } else {\n const selected = await p.select({\n message: \"Which HTTP framework do you use?\",\n options: [\n { value: \"hono\", label: \"Hono\", hint: \"recommended\" },\n { value: \"hono-openapi\", label: \"Hono + OpenAPI\", hint: \"zod-openapi routes with /doc endpoint\" },\n { value: \"elysia\", label: \"Elysia\", hint: \"Bun-native framework\" },\n ],\n });\n if (p.isCancel(selected)) {\n p.cancel(\"Init cancelled.\");\n process.exit(0);\n }\n framework = selected as Framework;\n }\n\n let baseDir: string;\n if (opts.base) {\n baseDir = opts.base;\n } else if (opts.yes) {\n baseDir = \"src/ai\";\n } else {\n const base = await p.text({\n message: \"Where should kitn components be installed?\",\n initialValue: \"src/ai\",\n placeholder: \"src/ai\",\n });\n if (p.isCancel(base)) {\n p.cancel(\"Init cancelled.\");\n process.exit(0);\n }\n baseDir = base as string;\n }\n const config = {\n runtime: runtime as \"bun\" | \"node\" | \"deno\",\n framework,\n aliases: {\n base: baseDir,\n agents: `${baseDir}/agents`,\n tools: `${baseDir}/tools`,\n skills: `${baseDir}/skills`,\n storage: `${baseDir}/storage`,\n },\n registries: {\n \"@kitn\": {\n url: \"https://kitn-ai.github.io/kitn/r/{type}/{name}.json\",\n homepage: \"https://kitn.ai\",\n description: \"Official kitn AI agent components\",\n },\n },\n };\n\n const s = p.spinner();\n s.start(\"Writing kitn.json\");\n await writeConfig(cwd, config);\n s.stop(\"Created kitn.json\");\n\n // Set up wildcard tsconfig path so @kitn/core, @kitn/adapters/*, etc. all resolve.\n // Remove any old per-package entries (e.g. @kitnai/core, @kitn/core) left from earlier versions.\n await patchProjectTsconfig(\n cwd,\n { \"@kitn/*\": [`./${baseDir}/*`] },\n [\"@kitn\", \"@kitnai\"],\n );\n p.log.info(`Patched tsconfig.json with path: ${pc.bold(\"@kitn/*\")}`);\n\n // Auto-install core engine + framework adapter\n p.log.info(\"Installing core engine and adapter...\");\n await addCommand([\"core\", \"routes\"], { overwrite: true });\n\n // Generate plugin.ts and barrel index.ts\n const aiDir = join(cwd, baseDir);\n await mkdir(aiDir, { recursive: true });\n\n const barrelPath = join(aiDir, \"index.ts\");\n await writeFile(barrelPath, createBarrelFile());\n\n const pluginPath = join(aiDir, \"plugin.ts\");\n await writeFile(pluginPath, getPluginTemplate(framework));\n\n p.log.success(`Created ${pc.bold(baseDir + \"/plugin.ts\")} — configure your AI provider there`);\n\n const mountCode = framework === \"elysia\"\n ? `app.use(new Elysia({ prefix: \"/api\" }).use(ai.router));`\n : `app.route(\"/api\", ai.router);`;\n p.note(\n [\n `import { ai } from \"@kitn/plugin\";`,\n ``,\n mountCode,\n ].join(\"\\n\"),\n \"Add this to your server entry point:\",\n );\n\n p.log.message(\n [\n pc.bold(\"Add your first agent:\"),\n ` ${pc.cyan(\"kitn add weather-agent\")}`,\n \"\",\n pc.bold(\"Browse all components:\"),\n ` ${pc.cyan(\"kitn list\")}`,\n ].join(\"\\n\"),\n );\n\n p.outro(\"Done!\");\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { readConfig, readLock } from \"../utils/config.js\";\nimport { resolveTypeAlias } from \"../utils/type-aliases.js\";\nimport { RegistryFetcher } from \"../registry/fetcher.js\";\nimport type { RegistryIndex } from \"../registry/schema.js\";\n\ninterface ListOptions {\n installed?: boolean;\n type?: string;\n registry?: string;\n verbose?: boolean;\n}\n\ntype IndexItemWithNamespace = RegistryIndex[\"items\"][number] & { namespace: string };\n\nexport async function listCommand(typeFilter: string | undefined, opts: ListOptions) {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n if (!config) {\n p.log.error(\"No kitn.json found. Run `kitn init` first.\");\n process.exit(1);\n }\n\n // Resolve type filter from positional arg or --type flag\n const rawType = typeFilter ?? opts.type;\n const resolvedType = rawType ? resolveTypeAlias(rawType) : undefined;\n if (rawType && !resolvedType) {\n p.log.error(`Unknown type ${pc.bold(rawType)}. Valid types: agent, tool, skill, storage, package`);\n process.exit(1);\n }\n\n const fetcher = new RegistryFetcher(config.registries);\n\n const namespacesToFetch = opts.registry\n ? [opts.registry]\n : Object.keys(config.registries);\n\n if (opts.registry && !config.registries[opts.registry]) {\n p.log.error(`Registry ${pc.bold(opts.registry)} is not configured. Run ${pc.bold(\"kitn registry list\")} to see configured registries.`);\n process.exit(1);\n }\n\n const s = p.spinner();\n s.start(\"Fetching registry...\");\n\n const allItems: IndexItemWithNamespace[] = [];\n const errors: string[] = [];\n\n for (const namespace of namespacesToFetch) {\n try {\n const index = await fetcher.fetchIndex(namespace);\n for (const item of index.items) {\n allItems.push({ ...item, namespace });\n }\n } catch (err: any) {\n errors.push(`${namespace}: ${err.message}`);\n }\n }\n\n if (allItems.length === 0 && errors.length > 0) {\n s.stop(pc.red(\"Failed to fetch registries\"));\n for (const e of errors) p.log.error(e);\n process.exit(1);\n }\n\n s.stop(`Found ${allItems.length} components`);\n\n for (const e of errors) {\n p.log.warn(`${pc.yellow(\"⚠\")} Failed to fetch ${e}`);\n }\n\n const installed = await readLock(cwd);\n const typeGroups = new Map<string, IndexItemWithNamespace[]>();\n\n for (const item of allItems) {\n const group = item.type.replace(\"kitn:\", \"\");\n if (resolvedType && group !== resolvedType) continue;\n // Hide packages from default view — they're installed by `kitn init`\n if (!resolvedType && group === \"package\") continue;\n if (!typeGroups.has(group)) typeGroups.set(group, []);\n typeGroups.get(group)!.push(item);\n }\n\n // Calculate max name width for alignment\n let maxName = 0;\n for (const items of typeGroups.values()) {\n for (const item of items) {\n const displayName = item.namespace === \"@kitn\" ? item.name : `${item.namespace}/${item.name}`;\n if (displayName.length > maxName) maxName = displayName.length;\n }\n }\n\n const cols = process.stdout.columns ?? 80;\n // Layout: \" ✓ name__ [vX.X.X ]description\"\n const versionLen = opts.verbose ? 10 : 0;\n const prefixLen = 4 + maxName + 2 + versionLen;\n\n let installedCount = 0;\n let updateCount = 0;\n let shownCount = 0;\n\n for (const [group, items] of typeGroups) {\n // Sort: installed first, then alphabetical\n items.sort((a, b) => {\n const aInst = !!(installed[a.name] ?? installed[`${a.namespace}/${a.name}`]);\n const bInst = !!(installed[b.name] ?? installed[`${b.namespace}/${b.name}`]);\n if (aInst !== bInst) return aInst ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n\n const label = group.charAt(0).toUpperCase() + group.slice(1) + \"s\";\n console.log(`\\n ${pc.bold(label)} ${pc.dim(`(${items.length})`)}`);\n\n for (const item of items) {\n const displayName = item.namespace === \"@kitn\" ? item.name : `${item.namespace}/${item.name}`;\n const inst = installed[item.name] ?? installed[displayName];\n if (opts.installed && !inst) continue;\n\n const maxDescLen = Math.max(20, cols - prefixLen);\n\n let desc = item.description;\n if (desc.length > maxDescLen) {\n desc = desc.slice(0, maxDescLen - 1) + \"…\";\n }\n\n let line: string;\n const nameCol = displayName.padEnd(maxName + 2);\n const version = opts.verbose ? `${pc.dim(`v${item.version ?? \"1.0.0\"}`)} ` : \"\";\n\n if (inst) {\n installedCount++;\n const hasUpdate = item.version && inst.version !== item.version;\n if (hasUpdate) updateCount++;\n const updateTag = hasUpdate ? pc.yellow(` ↑${item.version}`) : \"\";\n line = ` ${pc.green(\"✓\")} ${nameCol}${version}${pc.dim(desc)}${updateTag}`;\n } else {\n line = ` ${pc.dim(\"○\")} ${nameCol}${version}${pc.dim(desc)}`;\n }\n\n console.log(line);\n shownCount++;\n }\n }\n\n if (shownCount === 0 && resolvedType) {\n console.log(pc.dim(`\\n No ${resolvedType} components found.`));\n }\n\n const totalShown = [...typeGroups.values()].reduce((sum, items) => sum + items.length, 0);\n const parts = [`${installedCount} installed`, `${totalShown - installedCount} available`];\n if (updateCount > 0) parts.push(pc.yellow(`${updateCount} update${updateCount === 1 ? \"\" : \"s\"}`));\n console.log(`\\n ${pc.dim(parts.join(\" · \"))}\\n`);\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { join } from \"path\";\nimport { readConfig, resolveRoutesAlias, readLock } from \"../utils/config.js\";\nimport { RegistryFetcher } from \"../registry/fetcher.js\";\nimport { readExistingFile, generateDiff } from \"../installers/file-writer.js\";\nimport { parseComponentRef } from \"../utils/parse-ref.js\";\nimport { typeToDir } from \"../registry/schema.js\";\n\nexport async function diffCommand(componentName: string) {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n if (!config) {\n p.log.error(\"No kitn.json found. Run `kitn init` first.\");\n process.exit(1);\n }\n\n // Resolve \"routes\" alias to framework-specific adapter name\n const input = componentName === \"routes\" ? resolveRoutesAlias(config) : componentName;\n const ref = parseComponentRef(input);\n\n // Look up in lock — @kitn uses plain name, third-party uses @namespace/name\n const lock = await readLock(cwd);\n const installedKey = ref.namespace === \"@kitn\" ? ref.name : `${ref.namespace}/${ref.name}`;\n const installed = lock[installedKey];\n if (!installed) {\n p.log.error(`Component '${ref.name}' is not installed.`);\n process.exit(1);\n }\n\n const namespace = installed.registry ?? ref.namespace;\n const fetcher = new RegistryFetcher(config.registries);\n const index = await fetcher.fetchIndex(namespace);\n const indexItem = index.items.find((i) => i.name === ref.name);\n if (!indexItem) {\n p.log.error(`Component '${ref.name}' not found in ${namespace} registry.`);\n process.exit(1);\n }\n\n const dir = typeToDir[indexItem.type] as any;\n const registryItem = await fetcher.fetchItem(ref.name, dir, namespace, ref.version);\n\n let hasDiff = false;\n for (const file of registryItem.files) {\n if (indexItem.type === \"kitn:package\") {\n // Packages use base alias + preserved directory structure\n const baseDir = config.aliases.base ?? \"src/ai\";\n const localPath = join(cwd, baseDir, file.path);\n const relativePath = join(baseDir, file.path);\n const localContent = await readExistingFile(localPath);\n\n if (localContent === null) {\n p.log.warn(`${relativePath}: file missing locally`);\n hasDiff = true;\n } else if (localContent !== file.content) {\n const diff = generateDiff(relativePath, localContent, file.content);\n console.log(diff);\n hasDiff = true;\n }\n } else {\n // Regular components use type-based alias directories\n const fileName = file.path.split(\"/\").pop()!;\n const aliasKey = (() => {\n switch (indexItem.type) {\n case \"kitn:agent\": return \"agents\";\n case \"kitn:tool\": return \"tools\";\n case \"kitn:skill\": return \"skills\";\n case \"kitn:storage\": return \"storage\";\n }\n })() as \"agents\" | \"tools\" | \"skills\" | \"storage\";\n const localPath = join(cwd, config.aliases[aliasKey], fileName);\n const localContent = await readExistingFile(localPath);\n\n if (localContent === null) {\n p.log.warn(`${fileName}: file missing locally`);\n hasDiff = true;\n } else if (localContent !== file.content) {\n const diff = generateDiff(fileName, localContent, file.content);\n console.log(diff);\n hasDiff = true;\n }\n }\n }\n\n if (!hasDiff) {\n p.log.success(`${ref.name}: up to date, no differences.`);\n }\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { join, relative, dirname } from \"path\";\nimport { unlink, readFile, writeFile } from \"fs/promises\";\nimport { existsSync } from \"fs\";\nimport { readConfig, writeConfig, resolveRoutesAlias, readLock, writeLock } from \"../utils/config.js\";\nimport type { LockFile } from \"../utils/config.js\";\nimport { parseComponentRef } from \"../utils/parse-ref.js\";\nimport { removeImportFromBarrel } from \"../installers/barrel-manager.js\";\n\nasync function removeSingleComponent(installedKey: string, lock: LockFile, config: any, cwd: string) {\n const entry = lock[installedKey];\n if (!entry) return;\n\n const deleted: string[] = [];\n for (const filePath of entry.files) {\n try {\n await unlink(join(cwd, filePath));\n deleted.push(filePath);\n } catch {\n p.log.warn(`Could not delete ${filePath} (may have been moved or renamed)`);\n }\n }\n\n // Remove barrel imports for deleted files\n const baseDir = config.aliases.base ?? \"src/ai\";\n const barrelPath = join(cwd, baseDir, \"index.ts\");\n const barrelDir = join(cwd, baseDir);\n const barrelEligibleDirs = new Set([\n config.aliases.agents,\n config.aliases.tools,\n config.aliases.skills,\n ]);\n\n if (existsSync(barrelPath) && deleted.length > 0) {\n let barrelContent = await readFile(barrelPath, \"utf-8\");\n let barrelChanged = false;\n\n for (const filePath of deleted) {\n const fileDir = dirname(filePath);\n if (!barrelEligibleDirs.has(fileDir)) continue;\n\n const importPath = \"./\" + relative(barrelDir, join(cwd, filePath)).replace(/\\\\/g, \"/\");\n const updated = removeImportFromBarrel(barrelContent, importPath);\n if (updated !== barrelContent) {\n barrelContent = updated;\n barrelChanged = true;\n }\n }\n\n if (barrelChanged) {\n await writeFile(barrelPath, barrelContent);\n p.log.info(`Updated barrel file: ${join(baseDir, \"index.ts\")}`);\n }\n }\n\n delete lock[installedKey];\n\n if (deleted.length > 0) {\n p.log.success(`Removed ${installedKey}:\\n` + deleted.map((f) => ` ${pc.red(\"-\")} ${f}`).join(\"\\n\"));\n }\n}\n\nasync function offerOrphanRemoval(removedDeps: Set<string>, lock: LockFile, config: any, cwd: string) {\n if (removedDeps.size === 0) return;\n\n // Find orphaned dependencies — deps not needed by any remaining installed component\n const remaining = Object.entries(lock);\n const neededDeps = new Set<string>();\n for (const [, entry] of remaining) {\n if (entry.registryDependencies) {\n for (const dep of entry.registryDependencies) {\n neededDeps.add(dep);\n }\n }\n }\n\n // Also exclude \"core\" — never offer to remove it\n const orphans = [...removedDeps].filter(\n (dep) => dep !== \"core\" && !neededDeps.has(dep) && lock[dep]\n );\n\n if (orphans.length === 0) return;\n\n const selected = await p.multiselect({\n message: \"The following dependencies are no longer used. Remove them?\",\n options: orphans.map((dep) => ({\n value: dep,\n label: dep,\n hint: `${lock[dep].files.length} file(s)`,\n })),\n initialValues: orphans, // all checked by default\n });\n\n if (p.isCancel(selected)) return;\n\n for (const key of selected as string[]) {\n await removeSingleComponent(key, lock, config, cwd);\n }\n}\n\nexport async function removeCommand(componentName?: string) {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n if (!config) {\n p.log.error(\"No kitn.json found. Run `kitn init` first.\");\n process.exit(1);\n }\n\n const lock = await readLock(cwd);\n\n if (!componentName) {\n const installedKeys = Object.keys(lock);\n\n if (installedKeys.length === 0) {\n p.log.warn(\"No components installed.\");\n process.exit(0);\n }\n\n const selected = await p.multiselect({\n message: \"Select components to remove:\",\n options: installedKeys.map((key) => ({\n value: key,\n label: key,\n hint: `${lock[key].files.length} file(s)`,\n })),\n });\n\n if (p.isCancel(selected)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n const selectedKeys = selected as string[];\n if (selectedKeys.length === 0) {\n p.log.warn(\"No components selected.\");\n process.exit(0);\n }\n\n // Snapshot deps before removal (entries get deleted during removeSingleComponent)\n const allRemovedDeps = new Set<string>();\n for (const key of selectedKeys) {\n const entry = lock[key];\n if (entry?.registryDependencies) {\n for (const dep of entry.registryDependencies) {\n allRemovedDeps.add(dep);\n }\n }\n }\n\n // Remove each selected component\n for (const key of selectedKeys) {\n await removeSingleComponent(key, lock, config, cwd);\n }\n\n await offerOrphanRemoval(allRemovedDeps, lock, config, cwd);\n\n await writeLock(cwd, lock);\n p.outro(pc.green(\"Done!\"));\n return;\n }\n\n // Resolve \"routes\" alias to framework-specific adapter name\n const input = componentName === \"routes\" ? resolveRoutesAlias(config) : componentName;\n const ref = parseComponentRef(input);\n\n // Look up in lock — @kitn uses plain name, third-party uses @namespace/name\n const installedKey = ref.namespace === \"@kitn\" ? ref.name : `${ref.namespace}/${ref.name}`;\n const entry = lock[installedKey];\n if (!entry) {\n p.log.error(`Component '${ref.name}' is not installed.`);\n process.exit(1);\n }\n\n const shouldRemove = await p.confirm({\n message: `Remove ${ref.name}? This will delete ${entry.files.length} file(s).`,\n initialValue: false,\n });\n if (p.isCancel(shouldRemove) || !shouldRemove) {\n p.cancel(\"Remove cancelled.\");\n process.exit(0);\n }\n\n // Snapshot deps before removal\n const removedDeps = new Set(entry.registryDependencies ?? []);\n\n await removeSingleComponent(installedKey, lock, config, cwd);\n\n // Check for orphaned dependencies\n await offerOrphanRemoval(removedDeps, lock, config, cwd);\n\n await writeLock(cwd, lock);\n}\n","import { addCommand } from \"./add.js\";\nimport { readConfig, readLock } from \"../utils/config.js\";\nimport * as p from \"@clack/prompts\";\n\nexport async function updateCommand(components: string[]) {\n // If no components specified, update all installed components\n if (components.length === 0) {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n if (!config) {\n p.log.error(\"No kitn.json found. Run `kitn init` first.\");\n process.exit(1);\n }\n\n const lock = await readLock(cwd);\n if (Object.keys(lock).length === 0) {\n p.log.info(\"No installed components to update.\");\n return;\n }\n\n components = Object.keys(lock);\n }\n\n await addCommand(components, { overwrite: true });\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { join, relative } from \"path\";\nimport { existsSync } from \"fs\";\nimport { readFile, writeFile, mkdir } from \"fs/promises\";\nimport { readConfig, getInstallPath } from \"../utils/config.js\";\nimport { checkFileStatus, FileStatus, writeComponentFile } from \"../installers/file-writer.js\";\nimport { createBarrelFile, addImportToBarrel } from \"../installers/barrel-manager.js\";\n\nconst VALID_TYPES = [\"agent\", \"tool\", \"skill\", \"storage\", \"cron\"] as const;\ntype ComponentType = (typeof VALID_TYPES)[number];\n\nfunction toCamelCase(str: string): string {\n return str.replace(/-([a-z])/g, (_, c) => c.toUpperCase());\n}\n\nfunction toTitleCase(str: string): string {\n return str\n .split(\"-\")\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(\" \");\n}\n\nfunction generateAgentSource(name: string): string {\n const camel = toCamelCase(name);\n return `import { registerAgent } from \"@kitn/core\";\n\nconst SYSTEM_PROMPT = \"You are a helpful assistant.\";\n\nregisterAgent({\n name: \"${name}\",\n description: \"\",\n system: SYSTEM_PROMPT,\n tools: {},\n});\n`;\n}\n\nfunction generateToolSource(name: string): string {\n const camel = toCamelCase(name);\n return `import { registerTool } from \"@kitn/core\";\nimport { tool } from \"ai\";\nimport { z } from \"zod\";\n\nexport const ${camel} = tool({\n description: \"\",\n inputSchema: z.object({\n input: z.string().describe(\"Input parameter\"),\n }),\n execute: async ({ input }) => {\n // TODO: implement\n return { result: input };\n },\n});\n\nregisterTool({\n name: \"${name}\",\n description: \"\",\n inputSchema: z.object({ input: z.string() }),\n tool: ${camel},\n});\n`;\n}\n\nfunction generateSkillSource(name: string): string {\n const title = toTitleCase(name);\n return `---\nname: ${name}\ndescription: \"\"\n---\n\n# ${title}\n\nDescribe what this skill does and how to use it.\n`;\n}\n\nfunction generateStorageSource(name: string): string {\n const camel = toCamelCase(\"create-\" + name);\n return `import type { StorageProvider } from \"@kitn/core\";\n\nexport function ${camel}(config?: Record<string, unknown>): StorageProvider {\n // TODO: implement storage provider\n throw new Error(\"Not implemented\");\n}\n`;\n}\n\nfunction generateCronSource(name: string): string {\n const camel = toCamelCase(name);\n return `import { registerTool } from \"@kitn/core\";\nimport { tool } from \"ai\";\nimport { z } from \"zod\";\n\n// Cron job: ${name}\n// This file defines tools for a cron job. Register the cron via the API:\n// POST /api/crons { name: \"${name}\", schedule: \"0 6 * * *\", agentName: \"...\", input: \"...\" }\n\nexport const ${camel} = tool({\n description: \"Execute the ${name} cron task\",\n parameters: z.object({\n input: z.string().describe(\"Task input\"),\n }),\n execute: async ({ input }) => {\n // TODO: implement\n return { result: input };\n },\n});\n\nregisterTool({\n name: \"${name}\",\n description: \"\",\n inputSchema: z.object({ input: z.string() }),\n tool: ${camel},\n});\n`;\n}\n\nconst typeToKitnType: Record<ComponentType, \"kitn:agent\" | \"kitn:tool\" | \"kitn:skill\" | \"kitn:storage\" | \"kitn:cron\"> = {\n agent: \"kitn:agent\",\n tool: \"kitn:tool\",\n skill: \"kitn:skill\",\n storage: \"kitn:storage\",\n cron: \"kitn:cron\",\n};\n\n// Types that get auto-wired into the barrel file\nconst BARREL_TYPES: ComponentType[] = [\"agent\", \"tool\", \"skill\", \"cron\"];\n\nexport async function createComponentInProject(\n type: string,\n name: string,\n opts?: { cwd?: string }\n): Promise<{ filePath: string; barrelUpdated: boolean }> {\n if (!VALID_TYPES.includes(type as ComponentType)) {\n throw new Error(\n `Invalid component type: \"${type}\". Valid types: ${VALID_TYPES.join(\", \")}`\n );\n }\n\n const cwd = opts?.cwd ?? process.cwd();\n const config = await readConfig(cwd);\n if (!config) {\n throw new Error(\n `No kitn.json found in ${cwd}. Run ${pc.bold(\"kitn init\")} first.`\n );\n }\n\n const validType = type as ComponentType;\n const kitnType = typeToKitnType[validType];\n const fileName = validType === \"skill\" ? `${name}.md` : `${name}.ts`;\n\n const filePath = join(cwd, getInstallPath(config, kitnType, fileName));\n\n // Check file doesn't already exist\n const dummyContent = \"\"; // only need to check existence\n const status = await checkFileStatus(filePath, dummyContent);\n if (status !== FileStatus.New) {\n throw new Error(`File already exists: ${filePath}`);\n }\n\n // Generate source\n let source: string;\n switch (validType) {\n case \"agent\":\n source = generateAgentSource(name);\n break;\n case \"tool\":\n source = generateToolSource(name);\n break;\n case \"skill\":\n source = generateSkillSource(name);\n break;\n case \"storage\":\n source = generateStorageSource(name);\n break;\n case \"cron\":\n source = generateCronSource(name);\n break;\n }\n\n // Write the component file\n await writeComponentFile(filePath, source);\n\n // Wire into barrel file for agents, tools, and skills\n let barrelUpdated = false;\n if (BARREL_TYPES.includes(validType)) {\n const baseDir = config.aliases.base ?? \"src/ai\";\n const barrelPath = join(cwd, baseDir, \"index.ts\");\n\n // Read or create barrel file\n let barrelContent: string;\n if (existsSync(barrelPath)) {\n barrelContent = await readFile(barrelPath, \"utf-8\");\n } else {\n barrelContent = createBarrelFile();\n await mkdir(join(cwd, baseDir), { recursive: true });\n }\n\n // Compute relative import path from barrel to the component\n const importPath = \"./\" + relative(join(cwd, baseDir), filePath).replace(/\\.ts$/, \".js\");\n const updatedBarrel = addImportToBarrel(barrelContent, importPath);\n\n if (updatedBarrel !== barrelContent) {\n await writeFile(barrelPath, updatedBarrel);\n barrelUpdated = true;\n }\n }\n\n return { filePath, barrelUpdated };\n}\n\nexport async function createCommand(type: string, name: string) {\n p.intro(pc.bgCyan(pc.black(\" kitn create \")));\n\n try {\n const { filePath, barrelUpdated } = await createComponentInProject(type, name);\n\n p.log.success(`Created ${pc.bold(type)} component ${pc.cyan(name)}`);\n p.log.message(` ${pc.green(\"+\")} ${filePath}`);\n\n if (barrelUpdated) {\n p.log.message(` ${pc.green(\"+\")} barrel file updated`);\n }\n\n p.outro(\n `Edit ${pc.cyan(filePath)} to customize your ${type}.`\n );\n } catch (err: any) {\n p.log.error(err.message);\n process.exit(1);\n }\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { readConfig, readLock } from \"../utils/config.js\";\nimport { parseComponentRef } from \"../utils/parse-ref.js\";\nimport { RegistryFetcher } from \"../registry/fetcher.js\";\nimport { typeToDir } from \"../registry/schema.js\";\n\nexport async function infoCommand(component: string) {\n const cwd = process.cwd();\n const config = await readConfig(cwd);\n if (!config) {\n p.log.error(\"No kitn.json found. Run `kitn init` first.\");\n process.exit(1);\n }\n\n const ref = parseComponentRef(component);\n const fetcher = new RegistryFetcher(config.registries);\n\n const s = p.spinner();\n s.start(\"Fetching component info...\");\n\n // Fetch registry index to find the component and get available versions\n let index;\n try {\n index = await fetcher.fetchIndex(ref.namespace);\n } catch (err: any) {\n s.stop(pc.red(\"Failed to fetch registry\"));\n p.log.error(err.message);\n process.exit(1);\n }\n\n const indexItem = index.items.find((i) => i.name === ref.name);\n if (!indexItem) {\n s.stop(pc.red(\"Component not found\"));\n p.log.error(`Component '${ref.name}' not found in registry.`);\n process.exit(1);\n }\n\n // Fetch the full component JSON (specific version or latest)\n const dir = typeToDir[indexItem.type] as any;\n let item;\n try {\n item = await fetcher.fetchItem(ref.name, dir, ref.namespace, ref.version);\n } catch (err: any) {\n s.stop(pc.red(\"Failed to fetch component\"));\n p.log.error(err.message);\n process.exit(1);\n }\n\n s.stop(\"Component found\");\n\n // Display formatted output\n const version = item.version ?? indexItem.version ?? \"unknown\";\n const typeName = indexItem.type.replace(\"kitn:\", \"\");\n\n // Header: name, version, namespace\n console.log();\n console.log(\n ` ${pc.bold(item.name)} ${pc.cyan(`v${version}`)}${\" \".repeat(Math.max(1, 40 - item.name.length - version.length - 2))}${pc.dim(ref.namespace)}`\n );\n console.log(` ${pc.dim(item.description)}`);\n console.log();\n\n // Details\n console.log(` ${pc.dim(\"Type:\")} ${typeName}`);\n\n if (item.dependencies?.length) {\n console.log(\n ` ${pc.dim(\"Dependencies:\")} ${item.dependencies.join(\", \")}`\n );\n }\n\n if (item.registryDependencies?.length) {\n console.log(\n ` ${pc.dim(\"Registry deps:\")} ${item.registryDependencies.join(\", \")}`\n );\n }\n\n if (item.categories?.length) {\n console.log(\n ` ${pc.dim(\"Categories:\")} ${item.categories.join(\", \")}`\n );\n }\n\n if (item.updatedAt) {\n console.log(` ${pc.dim(\"Updated:\")} ${item.updatedAt}`);\n }\n\n // Available versions from index\n const versions = indexItem.versions;\n if (versions?.length) {\n console.log(` ${pc.dim(\"Versions:\")} ${versions.join(\", \")}`);\n }\n\n // Changelog\n if (item.changelog?.length) {\n console.log();\n console.log(` ${pc.bold(\"Changelog:\")}`);\n for (const entry of item.changelog) {\n const tag =\n entry.type === \"feature\"\n ? pc.green(entry.type)\n : entry.type === \"fix\"\n ? pc.yellow(entry.type)\n : entry.type === \"breaking\"\n ? pc.red(entry.type)\n : pc.dim(entry.type);\n console.log(\n ` ${pc.cyan(entry.version)} ${pc.dim(entry.date)} ${tag} ${entry.note}`\n );\n }\n }\n\n // Files\n console.log();\n const fileCount = item.files.length;\n console.log(` ${pc.bold(`Files:`)} ${pc.dim(`(${fileCount})`)}`);\n const maxShown = 10;\n for (const file of item.files.slice(0, maxShown)) {\n console.log(` ${pc.dim(file.path)}`);\n }\n if (fileCount > maxShown) {\n console.log(` ${pc.dim(`... and ${fileCount - maxShown} more`)}`);\n }\n\n // Installed status\n const lock = await readLock(cwd);\n const installed = lock[item.name];\n if (installed) {\n console.log();\n console.log(\n ` ${pc.green(\"Installed\")} ${pc.dim(`v${installed.version}`)}`\n );\n if (version !== installed.version) {\n console.log(\n ` ${pc.yellow(\"Update available:\")} ${pc.dim(`v${installed.version}`)} → ${pc.cyan(`v${version}`)}`\n );\n }\n }\n\n console.log();\n}\n","import { execSync } from \"child_process\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { detectCliInstaller, getGlobalInstallCommand } from \"../utils/detect.js\";\nimport { fetchLatestVersion, isNewer } from \"../utils/update-check.js\";\n\nexport async function checkCommand(currentVersion: string) {\n p.intro(pc.bgCyan(pc.black(\" kitn check \")));\n\n p.log.info(`kitn v${currentVersion}`);\n\n const s = p.spinner();\n s.start(\"Checking for updates...\");\n\n const latest = await fetchLatestVersion();\n\n if (!latest) {\n s.stop(pc.yellow(\"Could not reach the npm registry\"));\n p.outro(\"Try again later.\");\n return;\n }\n\n if (isNewer(latest, currentVersion)) {\n s.stop(pc.yellow(`Update available: ${currentVersion} → ${latest}`));\n\n const pm = detectCliInstaller();\n const installCmd = getGlobalInstallCommand(pm, \"@kitnai/cli\");\n\n const shouldUpdate = await p.confirm({ message: \"Update now?\" });\n\n if (p.isCancel(shouldUpdate) || !shouldUpdate) {\n p.log.message(` Run: ${pc.cyan(installCmd)}`);\n } else {\n const us = p.spinner();\n us.start(\"Updating...\");\n try {\n execSync(installCmd, { stdio: \"pipe\" });\n us.stop(pc.green(`Updated to v${latest}`));\n } catch {\n us.stop(pc.red(\"Update failed\"));\n p.log.message(` Run manually: ${pc.cyan(installCmd)}`);\n }\n }\n } else {\n s.stop(pc.green(\"You're on the latest version\"));\n }\n\n p.outro(\"\");\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { readConfig, writeConfig, getRegistryUrl, readLock } from \"../utils/config.js\";\nimport type { RegistryEntry } from \"../utils/config.js\";\n\ninterface RegistryAddOptions {\n cwd?: string;\n overwrite?: boolean;\n homepage?: string;\n description?: string;\n}\n\ninterface RegistryRemoveOptions {\n cwd?: string;\n force?: boolean;\n}\n\ninterface RegistryListOptions {\n cwd?: string;\n}\n\nexport async function registryAddCommand(\n namespace: string,\n url: string,\n opts: RegistryAddOptions = {},\n) {\n const cwd = opts.cwd ?? process.cwd();\n const config = await readConfig(cwd);\n if (!config) throw new Error(\"No kitn.json found. Run `kitn init` first.\");\n\n if (!namespace.startsWith(\"@\")) {\n throw new Error(\"Namespace must start with @ (e.g. @myteam)\");\n }\n if (!url.includes(\"{type}\")) {\n throw new Error(\"URL template must include {type} placeholder\");\n }\n if (!url.includes(\"{name}\")) {\n throw new Error(\"URL template must include {name} placeholder\");\n }\n if (config.registries[namespace] && !opts.overwrite) {\n throw new Error(`Registry '${namespace}' is already configured. Use --overwrite to replace.`);\n }\n\n // Store as rich entry if homepage or description provided, otherwise plain URL\n if (opts.homepage || opts.description) {\n const entry: RegistryEntry = { url };\n if (opts.homepage) entry.homepage = opts.homepage;\n if (opts.description) entry.description = opts.description;\n config.registries[namespace] = entry;\n } else {\n config.registries[namespace] = url;\n }\n await writeConfig(cwd, config);\n\n p.log.success(`Added registry ${pc.bold(namespace)}`);\n p.log.message(pc.dim(` ${url}`));\n if (opts.homepage) p.log.message(pc.dim(` Homepage: ${opts.homepage}`));\n if (opts.description) p.log.message(pc.dim(` ${opts.description}`));\n}\n\nexport async function registryRemoveCommand(\n namespace: string,\n opts: RegistryRemoveOptions = {},\n): Promise<{ affectedComponents: string[] }> {\n const cwd = opts.cwd ?? process.cwd();\n const config = await readConfig(cwd);\n if (!config) throw new Error(\"No kitn.json found. Run `kitn init` first.\");\n\n if (!config.registries[namespace]) {\n throw new Error(`Registry '${namespace}' is not configured.`);\n }\n if (namespace === \"@kitn\" && !opts.force) {\n throw new Error(\"Cannot remove the default @kitn registry. Use --force to override.\");\n }\n\n const lock = await readLock(cwd);\n const affectedComponents: string[] = [];\n for (const [name, entry] of Object.entries(lock)) {\n if (entry.registry === namespace) {\n affectedComponents.push(name);\n }\n }\n\n delete config.registries[namespace];\n await writeConfig(cwd, config);\n\n p.log.success(`Removed registry ${pc.bold(namespace)}`);\n if (affectedComponents.length > 0) {\n p.log.warn(`${affectedComponents.length} installed component(s) referenced this registry:\\n` + affectedComponents.map((name) => ` ${pc.yellow(\"!\")} ${name}`).join(\"\\n\"));\n }\n\n return { affectedComponents };\n}\n\nexport async function registryListCommand(\n opts: RegistryListOptions = {},\n): Promise<Array<{ namespace: string; url: string; homepage?: string; description?: string }>> {\n const cwd = opts.cwd ?? process.cwd();\n const config = await readConfig(cwd);\n if (!config) throw new Error(\"No kitn.json found. Run `kitn init` first.\");\n\n const entries = Object.entries(config.registries).map(([namespace, value]) => {\n const url = getRegistryUrl(value);\n const homepage = typeof value === \"object\" ? value.homepage : undefined;\n const description = typeof value === \"object\" ? value.description : undefined;\n return { namespace, url, homepage, description };\n });\n\n if (entries.length === 0) {\n p.log.message(pc.dim(\" No registries configured.\"));\n } else {\n const lines: string[] = [];\n for (const { namespace, url, homepage, description } of entries) {\n lines.push(` ${pc.bold(namespace.padEnd(16))} ${pc.dim(url)}`);\n if (description) lines.push(` ${\" \".repeat(16)} ${description}`);\n if (homepage) lines.push(` ${\" \".repeat(16)} ${pc.dim(homepage)}`);\n }\n p.log.message(lines.join(\"\\n\"));\n }\n\n return entries;\n}\n","import { Command } from \"commander\";\nimport { startUpdateCheck } from \"./utils/update-check.js\";\n\ndeclare const __CLI_VERSION__: string;\nconst VERSION = typeof __CLI_VERSION__ !== \"undefined\" ? __CLI_VERSION__ : \"0.0.0-dev\";\n\nconst printUpdateNotice = startUpdateCheck(VERSION);\n\nconst program = new Command()\n .name(\"kitn\")\n .description(\"Install AI agent components from the kitn registry\")\n .version(VERSION);\n\nprogram\n .command(\"init\")\n .description(\"Initialize kitn in your project\")\n .option(\"-r, --runtime <runtime>\", \"runtime to use (bun, node, deno)\")\n .option(\"-f, --framework <framework>\", \"HTTP framework (hono, hono-openapi, elysia)\")\n .option(\"-b, --base <path>\", \"base directory for components (default: src/ai)\")\n .option(\"-y, --yes\", \"accept all defaults without prompting\")\n .action(async (opts) => {\n const { initCommand } = await import(\"./commands/init.js\");\n await initCommand(opts);\n });\n\nprogram\n .command(\"add\")\n .alias(\"install\")\n .description(\"Add components from the registry (supports type-first: kitn add agent <name>)\")\n .argument(\"[components...]\", \"component names or type followed by names\")\n .option(\"-o, --overwrite\", \"overwrite existing files without prompting\")\n .option(\"-t, --type <type>\", \"filter by component type during resolution\")\n .action(async (components: string[], opts) => {\n const { addCommand } = await import(\"./commands/add.js\");\n await addCommand(components, opts);\n });\n\nprogram\n .command(\"list\")\n .argument(\"[type]\", \"filter by type (agents, tools, skills, storages, packages)\")\n .description(\"List available and installed components\")\n .option(\"-i, --installed\", \"only show installed components\")\n .option(\"-t, --type <type>\", \"filter by type (agent, tool, skill, storage, package)\")\n .option(\"-r, --registry <namespace>\", \"only show components from this registry\")\n .option(\"-v, --verbose\", \"show version numbers\")\n .action(async (type, opts) => {\n const { listCommand } = await import(\"./commands/list.js\");\n await listCommand(type, opts);\n });\n\nprogram\n .command(\"diff\")\n .description(\"Show differences between local and registry version\")\n .argument(\"<component>\", \"component name\")\n .action(async (component: string) => {\n const { diffCommand } = await import(\"./commands/diff.js\");\n await diffCommand(component);\n });\n\nprogram\n .command(\"remove\")\n .alias(\"uninstall\")\n .description(\"Remove an installed component\")\n .argument(\"[component]\", \"component name to remove (interactive if omitted)\")\n .action(async (component?: string) => {\n const { removeCommand } = await import(\"./commands/remove.js\");\n await removeCommand(component);\n });\n\nprogram\n .command(\"update\")\n .description(\"Update installed components to latest registry version\")\n .argument(\"[components...]\", \"component names to update\")\n .action(async (components: string[]) => {\n const { updateCommand } = await import(\"./commands/update.js\");\n await updateCommand(components);\n });\n\nprogram\n .command(\"create\")\n .description(\"Scaffold a new kitn component\")\n .argument(\"<type>\", \"component type (agent, tool, skill, storage)\")\n .argument(\"<name>\", \"component name\")\n .action(async (type: string, name: string) => {\n const { createCommand } = await import(\"./commands/create.js\");\n await createCommand(type, name);\n });\n\nprogram\n .command(\"info\")\n .description(\"Show details about a component\")\n .argument(\"<component>\", \"component name (e.g. weather-agent, @acme/tool@1.0.0)\")\n .action(async (component: string) => {\n const { infoCommand } = await import(\"./commands/info.js\");\n await infoCommand(component);\n });\n\nprogram\n .command(\"check\")\n .description(\"Check for CLI updates\")\n .action(async () => {\n const { checkCommand } = await import(\"./commands/check.js\");\n await checkCommand(VERSION);\n });\n\nconst registry = program\n .command(\"registry\")\n .description(\"Manage component registries\");\n\nregistry\n .command(\"add\")\n .description(\"Add a component registry\")\n .argument(\"<namespace>\", \"registry namespace (e.g. @myteam)\")\n .argument(\"<url>\", \"URL template with {type} and {name} placeholders\")\n .option(\"-o, --overwrite\", \"overwrite if namespace already exists\")\n .option(\"--homepage <url>\", \"registry homepage URL\")\n .option(\"--description <text>\", \"short description of the registry\")\n .action(async (namespace: string, url: string, opts) => {\n const { registryAddCommand } = await import(\"./commands/registry.js\");\n await registryAddCommand(namespace, url, opts);\n });\n\nregistry\n .command(\"remove\")\n .description(\"Remove a component registry\")\n .argument(\"<namespace>\", \"registry namespace to remove (e.g. @myteam)\")\n .option(\"-f, --force\", \"allow removing the default @kitn registry\")\n .action(async (namespace: string, opts) => {\n const { registryRemoveCommand } = await import(\"./commands/registry.js\");\n await registryRemoveCommand(namespace, opts);\n });\n\nregistry\n .command(\"list\")\n .description(\"List all configured registries\")\n .action(async () => {\n const { registryListCommand } = await import(\"./commands/registry.js\");\n await registryListCommand();\n });\n\nawait program.parseAsync();\nprintUpdateNotice();\n"],"mappings":"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","names":["join","readFile","writeFile","join","readFile","writeFile","join","text","readFile","writeFile","mkdir","access","pc","readFile","writeFile","access","join","join","z","componentType","p","pc","join","dirname","readFile","writeFile","mkdir","unlink","relative","fetcher","s","baseDir","barrelPath","barrelDir","updated","p","pc","mkdir","writeFile","join","p","pc","p","join","p","pc","join","relative","dirname","unlink","readFile","writeFile","existsSync","entry","p","p","pc","join","relative","existsSync","readFile","writeFile","mkdir","p","pc","execSync","p","pc","p","pc","initCommand","addCommand","listCommand","diffCommand","removeCommand","updateCommand","createCommand","infoCommand","checkCommand","registryAddCommand","registryRemoveCommand","registryListCommand"]}
|