@agentskit/cli 0.13.40 → 0.13.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -1
- package/dist/bin.cjs +41 -97
- package/dist/bin.cjs.map +1 -1
- package/dist/bin.js +1 -1
- package/dist/{chunk-7ALDICSL.js → chunk-Z4BXQEGB.js} +43 -99
- package/dist/chunk-Z4BXQEGB.js.map +1 -0
- package/dist/index.cjs +41 -97
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.js +1 -1
- package/package.json +19 -18
- package/dist/chunk-7ALDICSL.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config.ts","../src/providers.ts","../src/sessions.ts","../src/extensibility/telemetry/pricing.ts","../src/extensibility/permissions/policy.ts","../src/extensibility/hooks/runner.ts","../src/extensibility/hooks/shell-hooks.ts","../src/slash-commands.ts","../src/resolve.ts","../src/runtime/use-runtime.ts","../src/runtime/use-tool-permissions.ts","../src/runtime/use-session-meta.ts","../src/app/ChatApp.tsx","../src/extensibility/plugins/loader.ts","../src/extensibility/mcp/client.ts","../src/extensibility/mcp/bridge.ts","../src/run.ts","../src/init-providers.ts","../src/init-writer.ts","../src/init.ts","../src/provider-registry.ts","../src/doctor.ts","../src/dev.ts","../src/tunnel.ts","../src/extensibility/rag/embedders.ts","../src/extensibility/rag/runner.ts","../package.json","../src/commands/shared.ts","../src/commands/chat.ts","../src/run-ui.tsx","../src/commands/run.ts","../src/init-interactive.ts","../src/commands/init.ts","../src/commands/doctor.ts","../src/commands/dev.ts","../src/commands/config.ts","../src/commands/tunnel.ts","../src/commands/rag.ts","../src/ai/scaffold.ts","../src/ai/planner.ts","../src/commands/ai.ts","../src/commands/flow.ts","../src/pii.ts","../src/commands/pii.ts","../src/rules/cursor.ts","../src/rules/windsurf.ts","../src/rules/codex.ts","../src/rules/claude-code.ts","../src/rules.ts","../src/commands/rules.ts","../src/registry.ts","../src/components/scan.ts","../src/components/config.ts","../src/components/install.ts","../src/components/fetch.ts","../src/components/validate.ts","../src/components/marker.ts","../src/components/flow.ts","../src/components/node-fs.ts","../src/commands/add-component.ts","../src/commands/add.ts","../src/commands/registry-maintenance.ts","../src/commands/index.ts"],"names":["path","resolve","join","homedir","input","id","useState","useMemo","useRef","useEffect","readdir","adapterImport","writeStarterProject","existsSync","readFile","providers","require","pathResolve","kleur","React","createRuntime","jsxs","Box","jsx","Text","render","mkdirSync","writeFileSync","toolImports","toolList","writeFile","mkdir","access","dirname","resolvePath","parseYaml","pathToFileURL","readFileSync","ensureDir","existing","isAbsolute","lstat","i","j","sep","DEFAULT_REGISTRY","base","createHash","getText","readme"],"mappings":"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","file":"chunk-Z4BXQEGB.js","sourcesContent":["import { access, readFile } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { resolve, join } from 'node:path'\n\nexport interface AgentsKitConfig {\n tools?: {\n filesystem?: { basePath?: string }\n shell?: { allowed?: string[]; timeout?: number; maxOutput?: number }\n webSearch?: { provider?: string; maxResults?: number }\n }\n defaults?: {\n provider?: string\n model?: string\n /** Reserved — prefer `apiKeyEnv` so keys stay out of committed configs. */\n apiKey?: string\n /** Name of the env var holding the API key, e.g. `OPENROUTER_API_KEY`. */\n apiKeyEnv?: string\n baseUrl?: string\n tools?: string\n skill?: string\n system?: string\n memoryBackend?: string\n }\n runtime?: {\n maxSteps?: number\n maxDelegationDepth?: number\n }\n observability?: {\n console?: boolean | { format?: 'human' | 'json' }\n langsmith?: { projectName?: string }\n }\n /**\n * Plugin specifiers. Each entry is a package name (`@org/plugin`) or\n * a relative/absolute path to a module exporting a `Plugin`.\n */\n plugins?: string[]\n /**\n * Shell-based hooks keyed by event name. See `extensibility/hooks`.\n */\n hooks?: Record<string, Array<{ run: string; matcher?: string; timeout?: number }>>\n /**\n * Retrieval-augmented generation config. Indexes files via\n * `agentskit rag index`. Chat-side auto-retrieval lands in a later phase.\n */\n rag?: {\n enabled?: boolean\n backend?: 'memory' | 'file'\n dir?: string\n sources?: string[]\n embedder?: { provider?: string; model?: string; apiKey?: string; baseUrl?: string }\n chunkSize?: number\n topK?: number\n }\n /**\n * MCP servers to spawn on chat start. Tools list + call bridge\n * them into the runtime tool set as `<serverName>__<toolName>`.\n */\n mcp?: {\n servers?: Record<string, { command: string; args?: string[]; env?: Record<string, string>; timeout?: number }>\n }\n /**\n * Tool permission policy. See `extensibility/permissions`.\n */\n permissions?: {\n mode?: 'default' | 'plan' | 'acceptEdits' | 'bypassPermissions'\n rules?: Array<{\n tool: string\n action: 'allow' | 'ask' | 'deny'\n scope?: 'session' | 'project' | 'global'\n }>\n }\n}\n\nasync function loadJsonConfig(path: string): Promise<AgentsKitConfig | undefined> {\n try {\n const raw = await readFile(path, 'utf8')\n return JSON.parse(raw) as AgentsKitConfig\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return undefined\n throw new Error(`Failed to load JSON config ${path}: ${err instanceof Error ? err.message : String(err)}`)\n }\n}\n\nasync function loadTsConfig(path: string): Promise<AgentsKitConfig | undefined> {\n try {\n await access(path)\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return undefined\n throw err\n }\n try {\n const mod = await import(`${path}?agentskit_config=${Date.now()}`)\n return (mod.default ?? mod) as AgentsKitConfig\n } catch (err) {\n throw new Error(`Failed to load TypeScript config ${path}: ${err instanceof Error ? err.message : String(err)}`)\n }\n}\n\nasync function loadPackageJsonConfig(dir: string): Promise<AgentsKitConfig | undefined> {\n try {\n const raw = await readFile(join(dir, 'package.json'), 'utf8')\n const pkg = JSON.parse(raw) as Record<string, unknown>\n if (pkg.agentskit && typeof pkg.agentskit === 'object') {\n return pkg.agentskit as AgentsKitConfig\n }\n return undefined\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return undefined\n throw new Error(`Failed to load package.json config ${dir}: ${err instanceof Error ? err.message : String(err)}`)\n }\n}\n\nexport interface LoadConfigOptions {\n cwd?: string\n /**\n * Root directory to read the global config from. Defaults to `~`. Tests\n * pass a tmpdir here so the user's real `~/.agentskit/config.json` can't\n * contaminate results. Pass `null` to disable global config entirely.\n */\n home?: string | null\n}\n\nfunction mergeConfigs(\n base: AgentsKitConfig | undefined,\n override: AgentsKitConfig | undefined,\n): AgentsKitConfig | undefined {\n if (!base && !override) return undefined\n if (!base) return override\n if (!override) return base\n const merge = (left: unknown, right: unknown): unknown => {\n if (!left || typeof left !== 'object' || Array.isArray(left)) return right\n if (!right || typeof right !== 'object' || Array.isArray(right)) return right\n const out: Record<string, unknown> = { ...(left as Record<string, unknown>) }\n for (const [key, value] of Object.entries(right as Record<string, unknown>)) {\n out[key] = key in out ? merge(out[key], value) : value\n }\n return out\n }\n return merge(base, override) as AgentsKitConfig\n}\n\nasync function loadLocalConfig(cwd: string): Promise<AgentsKitConfig | undefined> {\n const tsConfig = await loadTsConfig(join(cwd, '.agentskit.config.ts'))\n const jsonConfig = await loadJsonConfig(join(cwd, '.agentskit.config.json'))\n const packageConfig = await loadPackageJsonConfig(cwd)\n return mergeConfigs(mergeConfigs(packageConfig, jsonConfig), tsConfig)\n}\n\nasync function loadGlobalConfig(home: string | null | undefined): Promise<AgentsKitConfig | undefined> {\n if (home === null) return undefined\n const globalDir = join(home ?? homedir(), '.agentskit')\n const tsConfig = await loadTsConfig(join(globalDir, 'config.ts'))\n if (tsConfig) return tsConfig\n return await loadJsonConfig(join(globalDir, 'config.json'))\n}\n\n/**\n * Load an AgentsKit config file. Node-only — uses fs/promises.\n *\n * Merges in precedence order (later wins):\n * 1. `~/.agentskit/config.(ts|json)` — user-wide defaults\n * 2. `.agentskit.config.ts` in cwd\n * 3. `.agentskit.config.json` in cwd\n * 4. `\"agentskit\"` field in `package.json`\n *\n * Returns `undefined` if nothing is found.\n */\nexport async function loadConfig(options?: LoadConfigOptions): Promise<AgentsKitConfig | undefined> {\n const cwd = resolve(options?.cwd ?? process.cwd())\n const global = await loadGlobalConfig(options?.home)\n const local = await loadLocalConfig(cwd)\n return mergeConfigs(global, local)\n}\n\nconst SECRET_KEY = /^(api[-_]?key|token|secret|password|authorization|private[-_]?key)$/i\nconst SECRET_ENV_KEY = /(?:^|_)(?:api_?key|token|secret|password|authorization|private_?key)$/i\n\nfunction isSecretKey(key: string): boolean {\n return SECRET_KEY.test(key) || SECRET_ENV_KEY.test(key)\n}\n\n/** Return a display-safe copy; secrets are never printed by default. */\nexport function redactConfig(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(redactConfig)\n if (!value || typeof value !== 'object') return value\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>).map(([key, child]) => [\n key,\n isSecretKey(key) ? '[REDACTED]' : redactConfig(child),\n ]),\n )\n}\n","import {\n anthropic,\n deepseek,\n gemini,\n groq,\n grok,\n kimi,\n ollama,\n openai,\n openrouter,\n} from '@agentskit/adapters'\nimport type { AdapterFactory } from '@agentskit/core'\n\nexport interface ChatProviderOptions {\n provider: string\n model?: string\n apiKey?: string\n baseUrl?: string\n}\n\nexport interface ResolvedChatProvider {\n adapter: AdapterFactory\n provider: string\n model?: string\n mode: 'demo' | 'live'\n summary: string\n}\n\ninterface ProviderEntry {\n label: string\n envKeys: string[]\n defaultModel?: string\n requiresModel?: boolean\n factory: (config: { apiKey: string; model: string; baseUrl?: string }) => AdapterFactory\n}\n\nconst providers: Record<string, ProviderEntry> = {\n openai: {\n label: 'OpenAI',\n envKeys: ['OPENAI_API_KEY'],\n defaultModel: 'gpt-4o-mini',\n factory: (c) => openai(c),\n },\n anthropic: {\n label: 'Anthropic',\n envKeys: ['ANTHROPIC_API_KEY'],\n defaultModel: 'claude-sonnet-4-6',\n factory: (c) => anthropic(c),\n },\n gemini: {\n label: 'Gemini',\n envKeys: ['GEMINI_API_KEY', 'GOOGLE_API_KEY', 'GOOGLE_GENERATIVE_AI_API_KEY'],\n defaultModel: 'gemini-2.5-flash',\n factory: (c) => gemini(c),\n },\n ollama: {\n label: 'Ollama',\n envKeys: [],\n defaultModel: 'llama3.1',\n factory: (c) => ollama({ model: c.model, baseUrl: c.baseUrl }),\n },\n deepseek: {\n label: 'DeepSeek',\n envKeys: ['DEEPSEEK_API_KEY'],\n defaultModel: 'deepseek-flash',\n factory: (c) => deepseek(c),\n },\n grok: {\n label: 'xAI Grok',\n envKeys: ['XAI_API_KEY'],\n defaultModel: 'grok-4.20-0309-non-reasoning',\n factory: (c) => grok(c),\n },\n kimi: {\n label: 'Kimi',\n envKeys: ['KIMI_API_KEY', 'MOONSHOT_API_KEY'],\n defaultModel: 'kimi-k2.6',\n factory: (c) => kimi(c),\n },\n groq: {\n label: 'Groq',\n envKeys: ['GROQ_API_KEY'],\n defaultModel: 'openai/gpt-oss-120b',\n factory: (c) => groq(c),\n },\n openrouter: {\n label: 'OpenRouter',\n envKeys: ['OPENROUTER_API_KEY'],\n defaultModel: '~anthropic/claude-haiku-latest',\n factory: (c) => openrouter(c),\n },\n}\n\nfunction createDemoAdapter(provider: string, model?: string): AdapterFactory {\n return {\n createSource: ({ messages }) => {\n let cancelled = false\n\n return {\n stream: async function* () {\n const userMessages = messages.filter(message => message.role === 'user')\n const lastMessage = userMessages[userMessages.length - 1]\n const reply = [\n `Provider: ${provider}${model ? ` (${model})` : ''}.`,\n 'This is the AgentsKit CLI demo adapter.',\n `You said: ${lastMessage?.content ?? ''}`,\n ].join(' ')\n\n for (const chunk of reply.match(/.{1,18}/g) ?? []) {\n if (cancelled) return\n await new Promise(resolve => setTimeout(resolve, 35))\n yield { type: 'text' as const, content: chunk }\n }\n\n yield { type: 'done' as const }\n },\n abort: () => {\n cancelled = true\n },\n }\n },\n }\n}\n\nexport function resolveChatProvider(options: ChatProviderOptions): ResolvedChatProvider {\n const name = options.provider.toLowerCase()\n\n if (name === 'demo') {\n return {\n adapter: createDemoAdapter(name, options.model),\n provider: name,\n model: options.model,\n mode: 'demo',\n summary: 'demo adapter (no network, no API key required)',\n }\n }\n\n const entry = providers[name]\n if (!entry) {\n const supported = ['demo', ...Object.keys(providers)].join(', ')\n throw new Error(`Unsupported provider \"${options.provider}\". Try ${supported}.`)\n }\n\n // Resolve API key: try explicit flag first, then each envKey in order\n let apiKey = options.apiKey\n if (!apiKey) {\n for (const key of entry.envKeys) {\n apiKey = process.env[key]\n if (apiKey) break\n }\n }\n if (!apiKey && entry.envKeys.length > 0) {\n const keyList = entry.envKeys.join(' or ')\n throw new Error(`${entry.label} requires an API key. Pass --api-key or set ${keyList}.`)\n }\n\n // Resolve model\n const model = options.model ?? entry.defaultModel\n if (!model) {\n throw new Error(`${entry.label} requires --model in the current CLI version.`)\n }\n\n return {\n adapter: entry.factory({ apiKey: apiKey ?? '', model, baseUrl: options.baseUrl }),\n provider: name,\n model,\n mode: 'live',\n summary: `${entry.label} live adapter`,\n }\n}\n","import { createHash, randomBytes } from 'node:crypto'\nimport {\n existsSync,\n mkdirSync,\n readFileSync,\n readdirSync,\n statSync,\n chmodSync,\n writeFileSync,\n} from 'node:fs'\nimport { homedir } from 'node:os'\nimport { join } from 'node:path'\n\nexport interface SessionMetadata {\n id: string\n cwd: string\n createdAt: string\n updatedAt: string\n messageCount: number\n preview: string\n provider?: string\n model?: string\n /** Optional human-readable label. Set via `/rename` or `renameSession`. */\n label?: string\n /** Session id this one was forked from, if any. */\n forkedFrom?: string\n}\n\nexport interface SessionRecord {\n metadata: SessionMetadata\n file: string\n}\n\nconst ROOT = join(homedir(), '.agentskit', 'sessions')\nconst META_SUFFIX = '.meta.json'\n\nfunction cwdHash(cwd: string = process.cwd()): string {\n return createHash('sha256').update(cwd).digest('hex').slice(0, 12)\n}\n\nfunction dirFor(cwd: string = process.cwd()): string {\n return join(ROOT, cwdHash(cwd))\n}\n\nfunction ensureDir(dir: string): void {\n if (!existsSync(dir)) mkdirSync(dir, { recursive: true, mode: 0o700 })\n chmodSync(dir, 0o700)\n}\n\n/** Generate a new session id — ISO-ish timestamp + 6 random hex chars. */\nexport function generateSessionId(): string {\n const ts = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19)\n const suffix = randomBytes(3).toString('hex')\n return `${ts}-${suffix}`\n}\n\nexport function sessionFilePath(id: string, cwd: string = process.cwd()): string {\n ensureDir(dirFor(cwd))\n return join(dirFor(cwd), `${id}.json`)\n}\n\nfunction metaPath(id: string, cwd: string = process.cwd()): string {\n return join(dirFor(cwd), `${id}${META_SUFFIX}`)\n}\n\nfunction readMeta(id: string, cwd: string = process.cwd()): SessionMetadata | null {\n const path = metaPath(id, cwd)\n if (!existsSync(path)) return null\n try {\n return JSON.parse(readFileSync(path, 'utf8')) as SessionMetadata\n } catch {\n return null\n }\n}\n\nexport function writeSessionMeta(meta: SessionMetadata, cwd: string = process.cwd()): void {\n ensureDir(dirFor(cwd))\n const path = metaPath(meta.id, cwd)\n writeFileSync(path, JSON.stringify(meta, null, 2), { mode: 0o600 })\n chmodSync(path, 0o600)\n}\n\n/** Derive a short preview (first user message, one line, max 80 chars). */\nexport function derivePreview(messages: Array<{ role: string; content: string }>): string {\n const firstUser = messages.find(m => m.role === 'user' && m.content.trim())\n if (!firstUser) return '(empty)'\n const single = firstUser.content.replace(/\\s+/g, ' ').trim()\n return single.length > 80 ? `${single.slice(0, 80)}…` : single\n}\n\nexport function listSessions(cwd: string = process.cwd()): SessionRecord[] {\n const dir = dirFor(cwd)\n if (!existsSync(dir)) return []\n\n const entries = readdirSync(dir)\n const records: SessionRecord[] = []\n\n for (const entry of entries) {\n if (!entry.endsWith('.json') || entry.endsWith(META_SUFFIX)) continue\n const id = entry.replace(/\\.json$/, '')\n const meta = readMeta(id, cwd)\n const file = join(dir, entry)\n if (meta) {\n records.push({ metadata: meta, file })\n } else {\n // No meta file — synthesize from file stats so legacy sessions still show.\n const stats = statSync(file)\n records.push({\n metadata: {\n id,\n cwd,\n createdAt: stats.birthtime.toISOString(),\n updatedAt: stats.mtime.toISOString(),\n messageCount: 0,\n preview: '(legacy session)',\n },\n file,\n })\n }\n }\n\n // Most recently updated first\n records.sort((a, b) => b.metadata.updatedAt.localeCompare(a.metadata.updatedAt))\n return records\n}\n\nexport function findLatestSession(cwd: string = process.cwd()): SessionRecord | null {\n const all = listSessions(cwd)\n return all[0] ?? null\n}\n\nexport function findSession(id: string, cwd: string = process.cwd()): SessionRecord | null {\n const all = listSessions(cwd)\n const exact = all.find(s => s.metadata.id === id || s.metadata.label === id)\n if (exact) return exact\n // Allow prefix match so users can type the first few chars.\n const prefix = all.find(s => s.metadata.id.startsWith(id))\n return prefix ?? null\n}\n\n/** Attach or update a human-readable label on an existing session. */\nexport function renameSession(\n id: string,\n label: string,\n cwd: string = process.cwd(),\n): SessionMetadata {\n const record = findSession(id, cwd)\n if (!record) throw new Error(`No session matching \"${id}\".`)\n const next: SessionMetadata = { ...record.metadata, label, updatedAt: new Date().toISOString() }\n writeSessionMeta(next, cwd)\n return next\n}\n\n/**\n * Copy an existing session's message file into a new session so the user\n * can branch a conversation without disturbing the original.\n */\nexport function forkSession(\n id: string,\n cwd: string = process.cwd(),\n): ResolvedSession {\n const record = findSession(id, cwd)\n if (!record) throw new Error(`No session matching \"${id}\".`)\n\n const newId = generateSessionId()\n const newFile = sessionFilePath(newId, cwd)\n\n if (existsSync(record.file)) {\n writeFileSync(newFile, readFileSync(record.file, 'utf8'))\n }\n\n const now = new Date().toISOString()\n writeSessionMeta(\n {\n ...record.metadata,\n id: newId,\n createdAt: now,\n updatedAt: now,\n forkedFrom: record.metadata.id,\n label: undefined,\n },\n cwd,\n )\n\n return { id: newId, file: newFile, isNew: true }\n}\n\nexport interface ResolveSessionInput {\n explicitPath?: string\n resumeId?: string | true\n forceNew?: boolean\n cwd?: string\n}\n\nexport interface ResolvedSession {\n id: string\n file: string\n isNew: boolean\n}\n\n/**\n * Decide which session file to read/write:\n * - `explicitPath` wins if given (legacy `--memory-path` flag).\n * - `forceNew` creates a fresh session.\n * - `resumeId === true` → latest in cwd.\n * - `resumeId` string → that id (or prefix).\n * - Otherwise: resume latest if one exists, else create new. Matches\n * Claude Code's \"pick up where you left off\" default.\n */\nexport function resolveSession(input: ResolveSessionInput): ResolvedSession {\n const cwd = input.cwd ?? process.cwd()\n\n if (input.explicitPath) {\n return { id: 'custom', file: input.explicitPath, isNew: !existsSync(input.explicitPath) }\n }\n\n if (input.forceNew) {\n const id = generateSessionId()\n return { id, file: sessionFilePath(id, cwd), isNew: true }\n }\n\n if (input.resumeId) {\n const target = input.resumeId === true\n ? findLatestSession(cwd)\n : findSession(input.resumeId, cwd)\n if (target) {\n return { id: target.metadata.id, file: target.file, isNew: false }\n }\n // Explicit resume asked for a session that doesn't exist — fall through\n // to a new one rather than erroring, and warn.\n process.stderr.write(\n `No session matching \"${String(input.resumeId)}\" — starting a new one.\\n`\n )\n }\n\n const latest = findLatestSession(cwd)\n if (latest) return { id: latest.metadata.id, file: latest.file, isNew: false }\n\n const id = generateSessionId()\n return { id, file: sessionFilePath(id, cwd), isNew: true }\n}\n","/**\n * Per-million-token prices in USD. Keeps only a few canonical models —\n * hosts can override at runtime via `registerPricing`. Values are\n * publicly listed prices as of 2026-Q1 and may drift; authoritative\n * cost tracking should come from the provider's invoice.\n */\nexport interface ModelPricing {\n inputPerM: number\n outputPerM: number\n}\n\nconst builtinPricing: Record<string, ModelPricing> = {\n 'gpt-4o': { inputPerM: 2.5, outputPerM: 10 },\n 'gpt-4o-mini': { inputPerM: 0.15, outputPerM: 0.6 },\n 'gpt-4.1': { inputPerM: 2, outputPerM: 8 },\n 'gpt-4.1-mini': { inputPerM: 0.4, outputPerM: 1.6 },\n 'claude-opus-4': { inputPerM: 15, outputPerM: 75 },\n 'claude-sonnet-4': { inputPerM: 3, outputPerM: 15 },\n 'claude-haiku-4': { inputPerM: 0.8, outputPerM: 4 },\n 'gemini-2.5-pro': { inputPerM: 1.25, outputPerM: 10 },\n 'gemini-2.5-flash': { inputPerM: 0.3, outputPerM: 2.5 },\n}\n\nconst customPricing: Record<string, ModelPricing> = {}\n\nexport function registerPricing(model: string, pricing: ModelPricing): void {\n customPricing[model] = pricing\n}\n\nexport function getPricing(model: string | undefined): ModelPricing | undefined {\n if (!model) return undefined\n if (customPricing[model]) return customPricing[model]\n if (builtinPricing[model]) return builtinPricing[model]\n // Prefix match: `openai/gpt-4o` → `gpt-4o`.\n const short = model.includes('/') ? model.split('/').pop()! : model\n return customPricing[short] ?? builtinPricing[short]\n}\n\nexport interface TokenUsageLike {\n promptTokens: number\n completionTokens: number\n}\n\nexport interface ComputedCost {\n model: string\n inputUsd: number\n outputUsd: number\n totalUsd: number\n}\n\n/** Returns computed cost, or `undefined` if no pricing is registered for the model. */\nexport function computeCost(\n model: string | undefined,\n usage: TokenUsageLike,\n): ComputedCost | undefined {\n if (!model) return undefined\n const pricing = getPricing(model)\n if (!pricing) return undefined\n const inputUsd = (usage.promptTokens / 1_000_000) * pricing.inputPerM\n const outputUsd = (usage.completionTokens / 1_000_000) * pricing.outputPerM\n return {\n model,\n inputUsd,\n outputUsd,\n totalUsd: inputUsd + outputUsd,\n }\n}\n","import type { ToolDefinition } from '@agentskit/core'\n\nexport type PermissionMode = 'default' | 'plan' | 'acceptEdits' | 'bypassPermissions'\n\nexport type PermissionAction = 'allow' | 'ask' | 'deny'\n\nexport interface PermissionRule {\n /** Exact name, or a `RegExp` / `\"re:pattern\"` string matching the tool name. */\n tool: string | RegExp\n action: PermissionAction\n scope?: 'session' | 'project' | 'global'\n}\n\nexport interface PermissionPolicy {\n mode: PermissionMode\n rules: PermissionRule[]\n}\n\nexport const defaultPolicy: PermissionPolicy = {\n mode: 'default',\n rules: [],\n}\n\n/**\n * Resolve an action for a tool name. Modes override specific rules:\n *\n * - `bypassPermissions`: everything → allow\n * - `plan`: everything → ask (pretend the agent is planning)\n * - `acceptEdits`: fs_write / edit tools → allow, others unchanged\n * - `default`: rules drive it; no matching rule → ask\n */\nexport function evaluatePolicy(policy: PermissionPolicy, toolName: string): PermissionAction {\n if (policy.mode === 'bypassPermissions') return 'allow'\n if (policy.mode === 'plan') return 'ask'\n\n for (const rule of policy.rules) {\n if (matchesRule(rule, toolName)) return rule.action\n }\n\n if (policy.mode === 'acceptEdits' && /^(fs_write|edit|write_file)/.test(toolName)) {\n return 'allow'\n }\n\n return 'ask'\n}\n\nfunction matchesRule(rule: PermissionRule, toolName: string): boolean {\n if (rule.tool instanceof RegExp) return rule.tool.test(toolName)\n const str = rule.tool\n if (str.startsWith('re:')) return new RegExp(str.slice(3)).test(toolName)\n return str === toolName\n}\n\n/**\n * Apply the policy to a tool definition. Returns the tool with\n * `requiresConfirmation` set per the evaluated action, or `null` when the\n * tool is denied (the caller should skip it entirely).\n */\nexport function applyPolicyToTool(\n policy: PermissionPolicy,\n tool: ToolDefinition,\n): ToolDefinition | null {\n const action = evaluatePolicy(policy, tool.name)\n if (action === 'deny') return null\n if (action === 'allow') return { ...tool, requiresConfirmation: false }\n return { ...tool, requiresConfirmation: true }\n}\n\n/** Filter+annotate a tool list under a policy. Denied tools dropped. */\nexport function applyPolicyToTools(\n policy: PermissionPolicy,\n tools: ToolDefinition[],\n): ToolDefinition[] {\n const out: ToolDefinition[] = []\n for (const tool of tools) {\n const gated = applyPolicyToTool(policy, tool)\n if (gated) out.push(gated)\n }\n return out\n}\n","import type { HookEvent, HookHandler, HookPayload, HookResult } from '../plugins/types'\n\nexport interface HookDispatchResult {\n /** Final payload after any `modify` handlers. */\n payload: HookPayload\n /** True when any handler returned `block`. */\n blocked: boolean\n /** Block reason from the first blocking handler, if any. */\n reason?: string\n}\n\n/**\n * Runs every handler registered for an event in order. Handlers can:\n * - `continue`: do nothing, pass payload through\n * - `modify`: replace the payload for subsequent handlers\n * - `block`: stop dispatch and surface a reason to the caller\n *\n * Handler failures block by default so enforcement hooks cannot fail open.\n */\nexport class HookDispatcher {\n private readonly handlers = new Map<HookEvent, HookHandler[]>()\n\n constructor(\n handlers: HookHandler[] = [],\n private readonly onError: (handler: HookHandler, err: unknown) => void = (_h, err) =>\n process.stderr.write(\n `[agentskit] hook error: ${err instanceof Error ? err.message : String(err)}\\n`,\n ),\n ) {\n for (const handler of handlers) this.register(handler)\n }\n\n register(handler: HookHandler): void {\n const list = this.handlers.get(handler.event) ?? []\n list.push(handler)\n this.handlers.set(handler.event, list)\n }\n\n async dispatch(event: HookEvent, payload: HookPayload): Promise<HookDispatchResult> {\n const list = this.handlers.get(event) ?? []\n let current: HookPayload = { ...payload, event }\n\n for (const handler of list) {\n if (!this.matches(handler, current)) continue\n\n let result: HookResult\n try {\n result = await handler.run(current)\n } catch (err) {\n this.onError(handler, err)\n return { payload: current, blocked: true, reason: 'hook failed' }\n }\n\n if (result.decision === 'block') {\n return { payload: current, blocked: true, reason: result.reason }\n }\n if (result.decision === 'modify') {\n current = { ...result.payload, event }\n }\n }\n\n return { payload: current, blocked: false }\n }\n\n private matches(handler: HookHandler, payload: HookPayload): boolean {\n if (!handler.matcher) return true\n if (typeof handler.matcher === 'function') return handler.matcher(payload)\n return handler.matcher.test(String(payload.tool ?? payload.prompt ?? ''))\n }\n}\n","import { runShell, type RunResult } from '@agentskit/cross-platform'\nimport type { HookEvent, HookHandler, HookPayload, HookResult } from '../plugins/types'\n\nconst MAX_HOOK_STDOUT_BYTES = 64 * 1024\n\nexport interface ConfigHookEntry {\n /**\n * Command to run through the platform shell (`sh -c` on POSIX, `cmd.exe /d /s /c`\n * on Windows), so shell syntax is allowed. The process tree is killed on timeout.\n */\n run: string\n /** Optional regex string the hook's subject must match to fire. */\n matcher?: string\n /** Millisecond budget. Default 5000. */\n timeout?: number\n}\n\nexport type ConfigHooksMap = Partial<Record<HookEvent, ConfigHookEntry[]>>\n\n/**\n * Normalize `config.hooks` (shell entries) into `HookHandler[]`. The shell\n * command receives the JSON-serialized payload on stdin. It can print a\n * single JSON object on stdout to `modify` the payload, or exit non-zero\n * to `block`.\n *\n * { \"decision\": \"continue\" } — default, no output needed\n * { \"decision\": \"block\", \"reason\": \"…\" } — also signalled by non-zero exit\n * { \"decision\": \"modify\", \"payload\": … } — swaps the payload\n */\nexport function configHooksToHandlers(config: ConfigHooksMap | undefined): HookHandler[] {\n if (!config) return []\n const handlers: HookHandler[] = []\n for (const [event, entries] of Object.entries(config) as Array<[HookEvent, ConfigHookEntry[]]>) {\n for (const entry of entries) {\n handlers.push({\n event,\n matcher: entry.matcher ? new RegExp(entry.matcher) : undefined,\n run: (payload) => runShellHook(entry, payload),\n })\n }\n }\n return handlers\n}\n\nasync function runShellHook(entry: ConfigHookEntry, payload: HookPayload): Promise<HookResult> {\n const timeoutMs = entry.timeout ?? 5000\n let result: RunResult\n try {\n result = await runShell(entry.run, {\n input: JSON.stringify(payload),\n timeoutMs,\n // Hooks are fire-and-judge: no grace period once the budget is spent.\n killGraceMs: 0,\n maxOutputBytes: MAX_HOOK_STDOUT_BYTES,\n })\n } catch (err) {\n return { decision: 'block', reason: err instanceof Error ? err.message : String(err) }\n }\n if (result.stderr) process.stderr.write(result.stderr)\n if (result.truncated) {\n return { decision: 'block', reason: `shell hook output exceeded ${MAX_HOOK_STDOUT_BYTES} bytes` }\n }\n if (result.timedOut) return { decision: 'block', reason: `shell hook timed out after ${timeoutMs}ms` }\n if (result.code !== 0) return { decision: 'block', reason: `shell hook exited with code ${result.code}` }\n const trimmed = result.stdout.trim()\n if (!trimmed) return { decision: 'continue' }\n try {\n const parsed = JSON.parse(trimmed) as HookResult\n if (!parsed || typeof parsed !== 'object' || !('decision' in parsed) ||\n !['continue', 'block', 'modify'].includes(String(parsed.decision))) {\n return { decision: 'block', reason: 'shell hook returned an invalid decision' }\n }\n return parsed\n } catch {\n return { decision: 'block', reason: 'shell hook returned invalid JSON' }\n }\n}\n","import type { ChatReturn } from '@agentskit/core'\nimport { forkSession, renameSession } from './sessions'\nimport { computeCost } from './extensibility/telemetry'\n\nexport type FeedbackKind = 'info' | 'warn' | 'error' | 'success'\n\nexport interface SlashCommandContext {\n chat: ChatReturn\n /** Short-form snapshot of the live runtime config. */\n runtime: {\n provider: string\n model?: string\n mode: string\n baseUrl?: string\n tools?: string\n skill?: string\n sessionId?: string\n }\n /** Mutators — each rebuilds the underlying adapter/tool chain. */\n setProvider: (value: string) => void\n setModel: (value: string | undefined) => void\n setApiKey: (value: string | undefined) => void\n setBaseUrl: (value: string | undefined) => void\n setTools: (value: string | undefined) => void\n setSkill: (value: string | undefined) => void\n /** Print a status line in the chat UI (non-streamed). */\n feedback: (message: string, kind?: FeedbackKind) => void\n /** Registered commands — `help` uses this to list them. */\n commands: SlashCommand[]\n}\n\nexport interface SlashCommand {\n name: string\n description: string\n usage?: string\n aliases?: string[]\n run: (ctx: SlashCommandContext, argsText: string) => void | Promise<void>\n}\n\n/**\n * Parse a user-typed line as a slash command. Returns `null` when the\n * input is a regular chat message so callers can fall back to `chat.send`.\n */\nexport function parseSlashCommand(input: string): { name: string; args: string } | null {\n if (!input.startsWith('/')) return null\n const match = input.slice(1).match(/^(\\S+)\\s*([\\s\\S]*)$/)\n if (!match) return null\n return { name: match[1], args: match[2] ?? '' }\n}\n\nexport function createSlashRegistry(commands: SlashCommand[]): Map<string, SlashCommand> {\n const map = new Map<string, SlashCommand>()\n for (const cmd of commands) {\n map.set(cmd.name, cmd)\n for (const alias of cmd.aliases ?? []) map.set(alias, cmd)\n }\n return map\n}\n\n/**\n * Built-in slash commands. Extend by composing your own array:\n * `[...builtinSlashCommands, myCommand]`.\n * Commands registered later override earlier ones by name.\n */\nexport const builtinSlashCommands: SlashCommand[] = [\n {\n name: 'help',\n aliases: ['?'],\n description: 'List available slash commands.',\n run(ctx) {\n const seen = new Set<string>()\n const lines: string[] = []\n for (const cmd of ctx.commands) {\n if (seen.has(cmd.name)) continue\n seen.add(cmd.name)\n const suffix = cmd.usage ? ` (${cmd.usage})` : ''\n lines.push(` /${cmd.name.padEnd(10)} ${cmd.description}${suffix}`)\n }\n ctx.feedback(`Slash commands:\\n${lines.join('\\n')}`, 'info')\n },\n },\n {\n name: 'model',\n description: 'Switch the active model.',\n usage: '/model <name>',\n run(ctx, args) {\n const value = args.trim()\n if (!value) {\n ctx.feedback(\n `Current model: ${ctx.runtime.model ?? 'unset'}. Usage: /model <name>`,\n 'warn',\n )\n return\n }\n ctx.setModel(value)\n ctx.feedback(`Model → ${value}`, 'success')\n },\n },\n {\n name: 'provider',\n description: 'Switch the adapter provider.',\n usage: '/provider openai|anthropic|gemini|ollama|deepseek|grok|kimi|groq|openrouter|demo',\n run(ctx, args) {\n const value = args.trim()\n if (!value) {\n ctx.feedback(\n `Current provider: ${ctx.runtime.provider}. Usage: /provider <name>`,\n 'warn',\n )\n return\n }\n ctx.setProvider(value)\n ctx.feedback(`Provider → ${value}`, 'success')\n },\n },\n {\n name: 'base-url',\n aliases: ['baseurl'],\n description: 'Override provider base URL.',\n usage: '/base-url <url|clear>',\n run(ctx, args) {\n const value = args.trim()\n if (!value || value === 'clear') {\n ctx.setBaseUrl(undefined)\n ctx.feedback('Base URL cleared.', 'success')\n return\n }\n ctx.setBaseUrl(value)\n ctx.feedback(`Base URL → ${value}`, 'success')\n },\n },\n {\n name: 'tools',\n description: 'Set active tools (comma-separated) or clear them.',\n usage: '/tools web_search,fetch_url | /tools clear',\n run(ctx, args) {\n const value = args.trim()\n if (!value || value === 'clear') {\n ctx.setTools(undefined)\n ctx.feedback('Tools reset to defaults.', 'success')\n return\n }\n ctx.setTools(value)\n ctx.feedback(`Tools → ${value}`, 'success')\n },\n },\n {\n name: 'skill',\n description: 'Set active skill(s) (comma-separated) or clear them.',\n usage: '/skill researcher,coder | /skill clear',\n run(ctx, args) {\n const value = args.trim()\n if (!value || value === 'clear') {\n ctx.setSkill(undefined)\n ctx.feedback('Skills cleared.', 'success')\n return\n }\n ctx.setSkill(value)\n ctx.feedback(`Skills → ${value}`, 'success')\n },\n },\n {\n name: 'clear',\n aliases: ['reset'],\n description: 'Clear the conversation history in this session.',\n async run(ctx) {\n await ctx.chat.clear()\n ctx.feedback('History cleared.', 'success')\n },\n },\n {\n name: 'usage',\n description: 'Show the cumulative token usage for this session.',\n run(ctx) {\n const usage = ctx.chat.usage\n if (!usage || usage.totalTokens === 0) {\n ctx.feedback('No usage reported yet for this session.', 'info')\n return\n }\n ctx.feedback(\n `Tokens — prompt=${usage.promptTokens} completion=${usage.completionTokens} total=${usage.totalTokens}`,\n 'info',\n )\n },\n },\n {\n name: 'cost',\n description: 'Estimate the cost so far for the current model.',\n run(ctx) {\n const usage = ctx.chat.usage\n const model = ctx.runtime.model\n if (!usage || usage.totalTokens === 0) {\n ctx.feedback('No usage reported yet for this session.', 'info')\n return\n }\n const cost = computeCost(model, usage)\n if (!cost) {\n ctx.feedback(\n `No pricing registered for model \"${model ?? 'unset'}\". Register with registerPricing() or provide a known model name.`,\n 'warn',\n )\n return\n }\n ctx.feedback(\n `$${cost.totalUsd.toFixed(4)} total (in=$${cost.inputUsd.toFixed(4)} out=$${cost.outputUsd.toFixed(4)} model=${cost.model})`,\n 'info',\n )\n },\n },\n {\n name: 'rename',\n description: 'Attach a human-readable label to the current session.',\n usage: '/rename <label>',\n run(ctx, args) {\n const label = args.trim()\n const sessionId = ctx.runtime.sessionId\n if (!sessionId || sessionId === 'custom') {\n ctx.feedback('Rename is only available for managed sessions.', 'warn')\n return\n }\n if (!label) {\n ctx.feedback('Usage: /rename <label>', 'warn')\n return\n }\n try {\n renameSession(sessionId, label)\n ctx.feedback(`Session labeled \"${label}\".`, 'success')\n } catch (err) {\n ctx.feedback(`/rename failed: ${err instanceof Error ? err.message : String(err)}`, 'error')\n }\n },\n },\n {\n name: 'fork',\n description: 'Branch a copy of the current session. Does not switch to it.',\n run(ctx) {\n const sessionId = ctx.runtime.sessionId\n if (!sessionId || sessionId === 'custom') {\n ctx.feedback('Fork is only available for managed sessions.', 'warn')\n return\n }\n try {\n const result = forkSession(sessionId)\n ctx.feedback(\n `Forked into ${result.id}. Resume with:\\n agentskit chat --resume ${result.id}`,\n 'success',\n )\n } catch (err) {\n ctx.feedback(`/fork failed: ${err instanceof Error ? err.message : String(err)}`, 'error')\n }\n },\n },\n {\n name: 'exit',\n aliases: ['quit', 'q'],\n description: 'Exit the chat.',\n run() {\n process.exit(0)\n },\n },\n]\n","import type { ChatMemory, SkillDefinition, ToolDefinition } from '@agentskit/core'\nimport { webSearch, fetchUrl, filesystem, shell } from '@agentskit/tools'\nimport { composeSkills, getBuiltinSkills } from '@agentskit/skills'\nimport { fileChatMemory, sqliteChatMemory } from '@agentskit/memory'\nimport { getIntegration, integrationToolsFromEnv } from '@agentskit/integrations'\n\n/** Prototype-safe registry built from the canonical skills catalog. */\nfunction buildSkillRegistry(): Record<string, SkillDefinition> {\n const reg = Object.create(null) as Record<string, SkillDefinition>\n for (const skill of getBuiltinSkills()) {\n reg[skill.name] = skill\n }\n return reg\n}\n\nexport const skillRegistry: Record<string, SkillDefinition> = buildSkillRegistry()\n\ntype ToolKind = 'web_search' | 'fetch_url' | 'filesystem' | 'shell'\n\nconst BUILTIN_NAMES: Record<ToolKind, readonly string[]> = {\n web_search: ['web_search'],\n fetch_url: ['fetch_url'],\n filesystem: ['fs_read', 'fs_write', 'fs_list'],\n shell: ['shell'],\n}\n\nfunction instantiate(kind: ToolKind): ToolDefinition[] {\n switch (kind) {\n case 'web_search':\n return [webSearch()]\n case 'fetch_url':\n return [fetchUrl()]\n case 'filesystem':\n return filesystem({ basePath: process.cwd() })\n case 'shell':\n // CLI gates shell behind requiresConfirmation; explicit allowAny\n // surfaces the dual-use nature without forcing every CLI user to\n // pick an allowlist up front.\n return [shell({ timeout: 30_000, allowAny: true })]\n }\n}\n\nfunction gateTool(tool: ToolDefinition): ToolDefinition {\n // Preserve an explicit `false` from the tool author, otherwise force on.\n if (tool.requiresConfirmation === false) return tool\n return { ...tool, requiresConfirmation: true }\n}\n\n/**\n * Resolves the tool set for `agentskit chat`.\n *\n * - Explicit `--tools web_search,fetch_url`: those tools run without\n * confirmation (user opted in).\n * - No `--tools` flag: `web_search` and `fetch_url` are registered but\n * wrapped with `requiresConfirmation: true`. The agent can still call\n * them; the user just approves each call the first time. Mirrors the\n * Claude Code \"permission on first use\" pattern.\n */\nexport function resolveTools(toolNames: string | undefined): ToolDefinition[] {\n if (!toolNames) {\n return [...instantiate('web_search'), ...instantiate('fetch_url')].map(gateTool)\n }\n\n const tools: ToolDefinition[] = []\n for (const name of toolNames.split(',').map(s => s.trim()).filter(Boolean)) {\n switch (name) {\n case 'web_search':\n case 'fetch_url':\n case 'filesystem':\n case 'shell':\n tools.push(...instantiate(name))\n break\n default: {\n // Catalog integration by slug? Read its credential from the\n // environment (via the integration's apiKey envHint).\n if (getIntegration(name)) {\n const { tools: projected, credentialFound, envVar } = integrationToolsFromEnv(name, process.env)\n if (!credentialFound) {\n process.stderr.write(`Integration \"${name}\" needs ${envVar} set in the environment.\\n`)\n }\n tools.push(...projected)\n } else {\n process.stderr.write(`Unknown tool: ${name}\\n`)\n }\n }\n }\n }\n return tools\n}\n\n/** Exposed for UI layers that want to render \"N tools auto-allowed\" hints. */\nexport function getBuiltinToolNames(kind: ToolKind): readonly string[] {\n return BUILTIN_NAMES[kind]\n}\n\nexport function resolveSkill(skillName: string | undefined): SkillDefinition | undefined {\n if (!skillName) return undefined\n const key = skillName.trim()\n // Object.create(null) registry is prototype-safe; hasOwn still documents intent.\n if (!Object.prototype.hasOwnProperty.call(skillRegistry, key)) {\n process.stderr.write(`Unknown skill: ${skillName}\\n`)\n return undefined\n }\n return skillRegistry[key]\n}\n\nexport function resolveSkills(skillNames: string | undefined): SkillDefinition | undefined {\n if (!skillNames) return undefined\n const names = skillNames.split(',').map(s => s.trim()).filter(Boolean)\n const resolved: SkillDefinition[] = []\n for (const n of names) {\n if (Object.prototype.hasOwnProperty.call(skillRegistry, n)) {\n resolved.push(skillRegistry[n]!)\n }\n }\n if (resolved.length === 0) {\n process.stderr.write(`No valid skills found in: ${skillNames}\\n`)\n return undefined\n }\n if (resolved.length === 1) return resolved[0]\n return composeSkills(...resolved)\n}\n\nexport function resolveMemory(backend: string | undefined, memoryPath: string): ChatMemory {\n switch (backend) {\n case 'sqlite':\n return sqliteChatMemory({ path: memoryPath.replace(/\\.json$/, '.db') })\n case 'file':\n default:\n return fileChatMemory(memoryPath)\n }\n}\n","import { useMemo, useState } from 'react'\nimport { resolveChatProvider } from '../providers'\nimport { resolveMemory, resolveTools, skillRegistry } from '../resolve'\nimport { applyPolicyToTools, type PermissionPolicy } from '../extensibility/permissions'\n\nexport interface UseRuntimeOptions {\n provider: string\n model?: string\n apiKey?: string\n baseUrl?: string\n tools?: string\n skill?: string\n memoryBackend?: string\n memoryPath?: string\n /** Optional permission policy applied to the resolved tool set. */\n permissionPolicy?: PermissionPolicy\n}\n\nexport function useRuntime(options: UseRuntimeOptions) {\n const [provider, setProvider] = useState(options.provider)\n const [model, setModel] = useState(options.model)\n const [apiKey, setApiKey] = useState(options.apiKey)\n const [baseUrl, setBaseUrl] = useState(options.baseUrl)\n const [toolsFlag, setToolsFlag] = useState<string | undefined>(options.tools)\n const [skillFlag, setSkillFlag] = useState<string | undefined>(options.skill)\n\n const runtime = useMemo(\n () => resolveChatProvider({ provider, model, apiKey, baseUrl }),\n [provider, model, apiKey, baseUrl],\n )\n\n const memory = useMemo(\n () => resolveMemory(options.memoryBackend, options.memoryPath ?? '.agentskit-history.json'),\n [options.memoryPath, options.memoryBackend],\n )\n\n const tools = useMemo(() => {\n const resolved = resolveTools(toolsFlag)\n if (!options.permissionPolicy) return resolved\n return applyPolicyToTools(options.permissionPolicy, resolved)\n }, [toolsFlag, options.permissionPolicy])\n\n const skills = useMemo(() => {\n if (!skillFlag) return undefined\n const names = skillFlag.split(',').map(s => s.trim())\n const resolved = names.map(n => skillRegistry[n]).filter(Boolean)\n if (resolved.length === 0) return undefined\n return resolved\n }, [skillFlag])\n\n return {\n runtime,\n memory,\n tools,\n skills,\n state: { provider, model, apiKey, baseUrl, toolsFlag, skillFlag },\n setProvider,\n setModel,\n setApiKey,\n setBaseUrl,\n setToolsFlag,\n setSkillFlag,\n }\n}\n","import { useEffect, useMemo, useRef, useState } from 'react'\nimport type { ChatReturn } from '@agentskit/core'\n\nexport function useToolPermissions(chat: ChatReturn) {\n const [sessionAllowed, setSessionAllowed] = useState<Set<string>>(new Set())\n const autoApprovedRef = useRef<Set<string>>(new Set())\n\n useEffect(() => {\n if (sessionAllowed.size === 0) return\n for (const message of chat.messages) {\n for (const call of message.toolCalls ?? []) {\n if (\n call.status === 'requires_confirmation' &&\n sessionAllowed.has(call.name) &&\n !autoApprovedRef.current.has(call.id)\n ) {\n autoApprovedRef.current.add(call.id)\n void chat.approve(call.id)\n }\n }\n }\n }, [chat.messages, sessionAllowed, chat.approve])\n\n const handleApproveAlways = (toolCallId: string, toolName: string) => {\n setSessionAllowed(prev => {\n if (prev.has(toolName)) return prev\n const next = new Set(prev)\n next.add(toolName)\n return next\n })\n autoApprovedRef.current.add(toolCallId)\n void chat.approve(toolCallId)\n }\n\n const awaitingConfirmation = useMemo(\n () =>\n chat.messages.some(message =>\n message.toolCalls?.some(\n call => call.status === 'requires_confirmation' && !sessionAllowed.has(call.name),\n ),\n ),\n [chat.messages, sessionAllowed],\n )\n\n return { sessionAllowed, handleApproveAlways, awaitingConfirmation }\n}\n","import { useEffect, useRef } from 'react'\nimport type { Message as ChatMessage } from '@agentskit/core'\nimport { derivePreview, writeSessionMeta } from '../sessions'\n\nexport interface UseSessionMetaOptions {\n sessionId?: string\n messages: ChatMessage[]\n provider: string\n model?: string\n}\n\nexport function useSessionMeta(options: UseSessionMetaOptions) {\n const sessionCreatedAtRef = useRef<string | undefined>(undefined)\n const messageCount = options.messages.length\n const firstUserContent = options.messages.find(m => m.role === 'user')?.content ?? ''\n\n useEffect(() => {\n const sessionId = options.sessionId\n if (!sessionId || sessionId === 'custom') return\n if (!sessionCreatedAtRef.current) {\n sessionCreatedAtRef.current = new Date().toISOString()\n }\n try {\n writeSessionMeta({\n id: sessionId,\n cwd: process.cwd(),\n createdAt: sessionCreatedAtRef.current,\n updatedAt: new Date().toISOString(),\n messageCount,\n preview: derivePreview(options.messages),\n provider: options.provider,\n model: options.model,\n })\n } catch {\n // ignore\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [options.sessionId, messageCount, firstUserContent, options.provider, options.model])\n}\n","import React, { useMemo, useState } from 'react'\nimport { Box, Text } from 'ink'\nimport {\n ChatContainer,\n InputBar,\n Message,\n StatusHeader,\n ThinkingIndicator,\n ToolCallView,\n ToolConfirmation,\n useChat,\n} from '@agentskit/ink'\nimport type { Message as ChatMessage, SkillDefinition, ToolCall, ToolDefinition } from '@agentskit/core'\nimport { resolveChatProvider } from '../providers'\nimport {\n builtinSlashCommands,\n createSlashRegistry,\n parseSlashCommand,\n type FeedbackKind,\n type SlashCommand,\n type SlashCommandContext,\n} from '../slash-commands'\nimport type { AgentsKitConfig } from '../config'\nimport { useRuntime } from '../runtime/use-runtime'\nimport { useToolPermissions } from '../runtime/use-tool-permissions'\nimport { useSessionMeta } from '../runtime/use-session-meta'\nimport { HookDispatcher } from '../extensibility/hooks'\nimport type { HookHandler } from '../extensibility/plugins'\nimport { applyPolicyToTools } from '../extensibility/permissions'\nimport { useEffect } from 'react'\n\nexport interface ChatCommandOptions {\n provider: string\n model?: string\n system?: string\n memoryPath?: string\n sessionId?: string\n apiKey?: string\n baseUrl?: string\n tools?: string\n skill?: string\n memoryBackend?: string\n agentsKitConfig?: AgentsKitConfig\n /**\n * Extra slash commands appended to the built-ins. Later entries with\n * the same name override earlier ones, so consumers can replace a\n * built-in by re-registering its name.\n */\n slashCommands?: SlashCommand[]\n /** Extra tools contributed by plugins — merged into the resolved tool set. */\n extraTools?: ToolDefinition[]\n /** Extra skills contributed by plugins — merged into the resolved skill set. */\n extraSkills?: SkillDefinition[]\n /** Hook handlers — from plugins + config. Fire on lifecycle events. */\n hookHandlers?: HookHandler[]\n /** Permission policy for tool calls. */\n permissionPolicy?: import('../extensibility/permissions').PermissionPolicy\n}\n\nexport function groupIntoTurns(messages: ChatMessage[]): ChatMessage[][] {\n const turns: ChatMessage[][] = []\n let current: ChatMessage[] = []\n for (const message of messages) {\n if (message.role === 'user') {\n if (current.length > 0) turns.push(current)\n current = [message]\n } else if (message.role === 'system') {\n if (current.length > 0) turns.push(current)\n turns.push([message])\n current = []\n } else {\n current.push(message)\n }\n }\n if (current.length > 0) turns.push(current)\n return turns\n}\n\nexport function ChatApp(options: ChatCommandOptions) {\n const {\n runtime,\n memory,\n tools,\n skills,\n state: { baseUrl, toolsFlag, skillFlag },\n setProvider,\n setModel,\n setApiKey,\n setBaseUrl,\n setToolsFlag,\n setSkillFlag,\n } = useRuntime(options)\n\n const mergedTools = useMemo(() => {\n const extra = options.extraTools ?? []\n const combined = [...tools, ...extra]\n return options.permissionPolicy\n ? applyPolicyToTools(options.permissionPolicy, combined)\n : combined\n }, [tools, options.extraTools, options.permissionPolicy])\n\n const mergedSkills = useMemo(() => {\n const extra = options.extraSkills ?? []\n if (!skills && extra.length === 0) return undefined\n return [...(skills ?? []), ...extra]\n }, [skills, options.extraSkills])\n\n const chat = useChat({\n adapter: runtime.adapter,\n memory,\n systemPrompt: options.system,\n tools: mergedTools.length > 0 ? mergedTools : undefined,\n skills: mergedSkills,\n })\n\n const { sessionAllowed, handleApproveAlways, awaitingConfirmation } = useToolPermissions(chat)\n\n useSessionMeta({\n sessionId: options.sessionId,\n messages: chat.messages,\n provider: runtime.provider,\n model: runtime.model,\n })\n\n const turns = useMemo(() => groupIntoTurns(chat.messages), [chat.messages])\n const toolNames = toolsFlag ? toolsFlag.split(',').map(s => s.trim()).filter(Boolean) : []\n\n const [feedback, setFeedback] = useState<{ message: string; kind: FeedbackKind } | null>(null)\n\n const hookDispatcher = useMemo(\n () => new HookDispatcher(options.hookHandlers ?? []),\n [options.hookHandlers],\n )\n\n useEffect(() => {\n void hookDispatcher.dispatch('SessionStart', {\n event: 'SessionStart',\n sessionId: options.sessionId,\n provider: runtime.provider,\n model: runtime.model,\n })\n return () => {\n void hookDispatcher.dispatch('SessionEnd', {\n event: 'SessionEnd',\n sessionId: options.sessionId,\n })\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [hookDispatcher])\n\n const slashCommands = useMemo<SlashCommand[]>(\n () => [...builtinSlashCommands, ...(options.slashCommands ?? [])],\n [options.slashCommands],\n )\n const slashRegistry = useMemo(() => createSlashRegistry(slashCommands), [slashCommands])\n\n const handleSubmitInput = async (raw: string): Promise<boolean> => {\n const parsed = parseSlashCommand(raw)\n if (!parsed) {\n const hookResult = await hookDispatcher.dispatch('UserPromptSubmit', {\n event: 'UserPromptSubmit',\n prompt: raw,\n })\n if (hookResult.blocked) {\n setFeedback({\n message: `Prompt blocked: ${hookResult.reason ?? 'hook refused'}`,\n kind: 'warn',\n })\n return true\n }\n setFeedback(null)\n return false\n }\n const cmd = slashRegistry.get(parsed.name)\n if (!cmd) {\n setFeedback({\n message: `Unknown command: /${parsed.name}. Type /help for the list.`,\n kind: 'error',\n })\n return true\n }\n const ctx: SlashCommandContext = {\n chat,\n runtime: {\n provider: runtime.provider,\n model: runtime.model,\n mode: runtime.mode,\n baseUrl,\n tools: toolsFlag,\n skill: skillFlag,\n sessionId: options.sessionId,\n },\n setProvider,\n setModel,\n setApiKey,\n setBaseUrl,\n setTools: setToolsFlag,\n setSkill: setSkillFlag,\n feedback: (message, kind = 'info') => setFeedback({ message, kind }),\n commands: slashCommands,\n }\n try {\n await cmd.run(ctx, parsed.args)\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n setFeedback({ message: `/${parsed.name} failed: ${message}`, kind: 'error' })\n }\n return true\n }\n\n return (\n <Box flexDirection=\"column\" gap={1}>\n <StatusHeader\n provider={runtime.provider}\n model={runtime.model}\n mode={runtime.mode}\n tools={toolNames}\n messageCount={chat.messages.length}\n sessionId={options.sessionId}\n />\n\n <ChatContainer>\n {turns.map((turn, turnIdx) => {\n const assistantSteps = turn.filter(m => m.role === 'assistant').length\n let stepIndex = 0\n return (\n <Box key={`turn-${turnIdx}`} flexDirection=\"column\" gap={1}>\n {turn.map(message => {\n const showStep = message.role === 'assistant' && assistantSteps > 1\n if (showStep) stepIndex++\n return (\n <Box key={message.id} flexDirection=\"column\">\n {showStep ? (\n <Text dimColor>↻ step {stepIndex}/{assistantSteps}</Text>\n ) : null}\n <Message message={message} />\n {message.toolCalls?.map((toolCall: ToolCall) => (\n <Box key={toolCall.id} flexDirection=\"column\">\n <ToolCallView toolCall={toolCall} expanded />\n {toolCall.status === 'requires_confirmation' &&\n !sessionAllowed.has(toolCall.name) ? (\n <ToolConfirmation\n toolCall={toolCall}\n onApprove={chat.approve}\n onDeny={chat.deny}\n onApproveAlways={handleApproveAlways}\n />\n ) : null}\n </Box>\n ))}\n </Box>\n )\n })}\n </Box>\n )\n })}\n </ChatContainer>\n\n <ThinkingIndicator\n visible={chat.status === 'streaming'}\n label={toolNames.length > 0 ? 'agent working' : 'thinking'}\n />\n\n {chat.error ? (\n <Box borderStyle=\"round\" borderColor=\"red\" paddingX={1} flexDirection=\"column\">\n <Text color=\"red\" bold>✗ {chat.error.name || 'Error'}</Text>\n <Text color=\"red\">{chat.error.message}</Text>\n </Box>\n ) : null}\n\n {feedback ? (\n <Box borderStyle=\"round\" borderColor={feedbackBorder(feedback.kind)} paddingX={1}>\n <Text color={feedbackBorder(feedback.kind)}>{feedback.message}</Text>\n </Box>\n ) : null}\n\n <InputBar\n chat={chat}\n placeholder=\"Type a message or /help for commands\"\n disabled={awaitingConfirmation}\n onSubmitInput={handleSubmitInput}\n />\n </Box>\n )\n}\n\nfunction feedbackBorder(kind: FeedbackKind): string {\n switch (kind) {\n case 'error':\n return 'red'\n case 'warn':\n return 'yellow'\n case 'success':\n return 'green'\n case 'info':\n default:\n return 'cyan'\n }\n}\n\nexport function renderChatHeader(options: ChatCommandOptions): string {\n const runtime = resolveChatProvider(options)\n const parts = [`provider=${runtime.provider}`]\n if (runtime.model) parts.push(`model=${runtime.model}`)\n parts.push(`mode=${runtime.mode}`)\n if (options.tools) parts.push(`tools=${options.tools}`)\n if (options.skill) parts.push(`skill=${options.skill}`)\n if (options.memoryBackend) parts.push(`memory=${options.memoryBackend}`)\n return parts.join(' ')\n}\n","import { readdir, stat } from 'node:fs/promises'\nimport { homedir } from 'node:os'\nimport { isAbsolute, join, resolve } from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport type { Plugin, PluginBundle, PluginContext, PluginFactory } from './types'\n\nexport interface LoadPluginsOptions {\n /** Plugin specifiers: absolute paths, relative paths, or package names. */\n specs?: string[]\n /** Extra directories to auto-discover plugin modules from. */\n pluginDirs?: string[]\n /** Working directory; defaults to process.cwd(). */\n cwd?: string\n /**\n * Auto-discover from `~/.agentskit/plugins`. Defaults to false because\n * discovery executes arbitrary third-party code.\n */\n autoDiscoverUserDir?: boolean\n /** Error logger. Defaults to stderr. */\n onError?: (spec: string, err: unknown) => void\n /** Info logger. */\n log?: (msg: string) => void\n}\n\n/**\n * Load every plugin listed in `specs` + any auto-discovered module in\n * `pluginDirs` (and `~/.agentskit/plugins` by default). Failures on a single\n * plugin are reported but do not abort the rest — a broken third-party\n * plugin should never prevent the CLI from starting.\n */\nexport async function loadPlugins(options: LoadPluginsOptions = {}): Promise<PluginBundle> {\n const {\n specs = [],\n pluginDirs = [],\n cwd = process.cwd(),\n autoDiscoverUserDir = false,\n onError = (spec, err) =>\n process.stderr.write(\n `[agentskit] plugin \"${spec}\" failed to load: ${err instanceof Error ? err.message : String(err)}\\n`,\n ),\n log = () => {},\n } = options\n\n const resolvedSpecs = [...specs]\n\n const discoveryDirs = [...pluginDirs]\n if (autoDiscoverUserDir) discoveryDirs.push(join(homedir(), '.agentskit', 'plugins'))\n for (const dir of discoveryDirs) {\n const discovered = await discoverPluginsInDir(dir)\n resolvedSpecs.push(...discovered)\n }\n\n const plugins: Plugin[] = []\n for (const spec of resolvedSpecs) {\n try {\n const plugin = await loadPluginFromSpec(spec, cwd, log)\n if (plugin) plugins.push(plugin)\n } catch (err) {\n onError(spec, err)\n }\n }\n\n return mergePluginsIntoBundle(plugins)\n}\n\nasync function discoverPluginsInDir(dir: string): Promise<string[]> {\n try {\n const entries = await readdir(dir)\n const absolutes = entries\n .filter(name => /\\.(m?js|ts)$/i.test(name))\n .map(name => join(dir, name))\n // Validate each is a file; skip subdirs / broken symlinks silently.\n const validated: string[] = []\n for (const p of absolutes) {\n try {\n const s = await stat(p)\n if (s.isFile()) validated.push(p)\n } catch {\n /* ignore */\n }\n }\n return validated\n } catch {\n return []\n }\n}\n\nasync function loadPluginFromSpec(\n spec: string,\n cwd: string,\n log: (msg: string) => void,\n): Promise<Plugin | undefined> {\n const isPath = spec.startsWith('./') || spec.startsWith('../') || isAbsolute(spec)\n const importTarget = isPath\n ? pathToFileURL(resolve(cwd, spec)).href\n : spec\n\n const mod = await import(importTarget)\n const exported: unknown = mod.default ?? mod.plugin ?? mod\n const sourcePath = isPath ? resolve(cwd, spec) : undefined\n\n const ctx: PluginContext = {\n cwd,\n sourcePath,\n log: (msg: string) => log(`[${spec}] ${msg}`),\n }\n\n if (typeof exported === 'function') {\n const factory = exported as PluginFactory\n return await factory(ctx)\n }\n\n if (exported && typeof exported === 'object' && 'name' in (exported as object)) {\n const plugin = exported as Plugin\n if (plugin.init) await plugin.init(ctx)\n return plugin\n }\n\n throw new Error(\n 'Module did not export a Plugin — expected default export to be a Plugin object or a PluginFactory function.',\n )\n}\n\n/**\n * Merge every plugin's records into a single bundle. Later plugins override\n * earlier ones by name (last-write-wins) — users override built-ins without\n * forking.\n */\nexport function mergePluginsIntoBundle(plugins: Plugin[]): PluginBundle {\n const bundle: PluginBundle = {\n plugins,\n slashCommands: [],\n tools: [],\n skills: [],\n providers: {},\n hooks: [],\n mcpServers: [],\n }\n\n for (const plugin of plugins) {\n if (plugin.slashCommands) bundle.slashCommands.push(...plugin.slashCommands)\n if (plugin.tools) bundle.tools.push(...plugin.tools)\n if (plugin.skills) bundle.skills.push(...plugin.skills)\n if (plugin.hooks) bundle.hooks.push(...plugin.hooks)\n if (plugin.mcpServers) bundle.mcpServers.push(...plugin.mcpServers)\n if (plugin.providers) {\n for (const [name, factory] of Object.entries(plugin.providers)) {\n bundle.providers[name] = factory\n }\n }\n }\n\n return bundle\n}\n","import type { ChildProcessWithoutNullStreams } from 'node:child_process'\nimport { killProcessTree, spawnNodeChild } from '@agentskit/cross-platform'\nimport type { McpServerSpec } from '../plugins/types'\n\nconst MAX_FRAME_BYTES = 1024 * 1024\nconst DISPOSE_GRACE_MS = 1000\n\nexport interface McpTool {\n name: string\n description?: string\n inputSchema?: unknown\n}\n\ninterface JsonRpcResponse {\n jsonrpc: '2.0'\n id: number | string\n result?: unknown\n error?: { code: number; message: string; data?: unknown }\n}\n\n/**\n * Minimal JSON-RPC-over-stdio client for an MCP server. This is a\n * pragmatic subset of the MCP protocol sufficient for `tools/list` +\n * `tools/call` — full spec support lives in `@modelcontextprotocol/sdk`\n * if/when we depend on it.\n *\n * Transport: newline-delimited JSON (per the MCP stdio transport spec).\n */\nexport class McpClient {\n private child: ChildProcessWithoutNullStreams | undefined\n private buffer = ''\n private nextId = 1\n private readonly pending = new Map<number, (res: JsonRpcResponse) => void>()\n private disposed = false\n\n constructor(\n readonly spec: McpServerSpec,\n private readonly onError: (err: unknown) => void = (err) =>\n process.stderr.write(\n `[agentskit] mcp[${spec.name}] error: ${err instanceof Error ? err.message : String(err)}\\n`,\n ),\n ) {}\n\n async start(): Promise<void> {\n if (this.child) return\n // `npx`, `uvx` & co. are .cmd shims on Windows; spawnNodeChild resolves them.\n const child = spawnNodeChild(this.spec.command, this.spec.args ?? [], {\n env: { ...process.env, ...(this.spec.env ?? {}) },\n stdio: 'pipe',\n })\n this.child = child\n\n child.stdout.on('data', (chunk) => this.onStdout(chunk.toString()))\n child.stderr.on('data', (chunk) => {\n process.stderr.write(`[mcp ${this.spec.name}] ${chunk}`)\n })\n child.on('error', (err) => this.onError(err))\n child.on('close', () => {\n this.disposed = true\n for (const pending of this.pending.values()) {\n pending({ jsonrpc: '2.0', id: 0, error: { code: -1, message: 'server closed' } })\n }\n this.pending.clear()\n })\n\n await this.request('initialize', {\n protocolVersion: '2024-11-05',\n capabilities: {},\n clientInfo: { name: 'agentskit', version: '0' },\n })\n }\n\n async listTools(): Promise<McpTool[]> {\n const res = await this.request('tools/list', {})\n const tools = (res as { tools?: McpTool[] }).tools ?? []\n return tools\n }\n\n async callTool(name: string, args: unknown): Promise<unknown> {\n return await this.request('tools/call', { name, arguments: args })\n }\n\n dispose(): void {\n if (this.disposed) return\n this.disposed = true\n for (const pending of this.pending.values()) {\n pending({ jsonrpc: '2.0', id: 0, error: { code: -32800, message: 'client disposed' } })\n }\n this.pending.clear()\n const child = this.child\n if (!child || child.killed) return\n // Kill the whole tree: `npx`/cmd.exe wrappers leave the real server as a grandchild.\n const kill = (signal: NodeJS.Signals): void => {\n if (child.pid === undefined || child.exitCode !== null || child.signalCode !== null) return\n void killProcessTree(child.pid, signal, sig => child.kill(sig))\n }\n kill('SIGTERM')\n const timer = setTimeout(() => kill('SIGKILL'), DISPOSE_GRACE_MS)\n timer.unref()\n }\n\n private request(method: string, params: unknown): Promise<unknown> {\n return new Promise((resolvePromise, rejectPromise) => {\n if (!this.child || this.disposed) {\n rejectPromise(new Error(`mcp server ${this.spec.name} not running`))\n return\n }\n const id = this.nextId++\n const timeoutMs = this.spec.timeout ?? 10_000\n const timer = setTimeout(() => {\n this.pending.delete(id)\n rejectPromise(new Error(`mcp ${this.spec.name}.${method} timed out`))\n }, timeoutMs)\n\n this.pending.set(id, (res) => {\n clearTimeout(timer)\n if (res.error) {\n rejectPromise(new Error(`mcp ${method} failed: ${res.error.message}`))\n return\n }\n resolvePromise(res.result)\n })\n\n const message = JSON.stringify({ jsonrpc: '2.0', id, method, params }) + '\\n'\n this.child.stdin.write(message)\n })\n }\n\n private onStdout(chunk: string): void {\n this.buffer += chunk\n if (Buffer.byteLength(this.buffer, 'utf8') > MAX_FRAME_BYTES && !this.buffer.includes('\\n')) {\n this.onError(new Error(`mcp ${this.spec.name} frame exceeded ${MAX_FRAME_BYTES} bytes`))\n this.dispose()\n return\n }\n let newlineIndex = this.buffer.indexOf('\\n')\n while (newlineIndex !== -1) {\n const line = this.buffer.slice(0, newlineIndex).trim()\n this.buffer = this.buffer.slice(newlineIndex + 1)\n if (Buffer.byteLength(line, 'utf8') > MAX_FRAME_BYTES) {\n this.onError(new Error(`mcp ${this.spec.name} frame exceeded ${MAX_FRAME_BYTES} bytes`))\n this.dispose()\n return\n }\n if (line) {\n try {\n const parsed = JSON.parse(line) as JsonRpcResponse\n const pending = this.pending.get(Number(parsed.id))\n if (pending) {\n this.pending.delete(Number(parsed.id))\n pending(parsed)\n }\n } catch (err) {\n this.onError(err)\n }\n }\n newlineIndex = this.buffer.indexOf('\\n')\n }\n }\n}\n","import type { ToolDefinition } from '@agentskit/core'\nimport type { McpServerSpec } from '../plugins/types'\nimport { McpClient, type McpTool } from './client'\n\nexport interface McpBridgeResult {\n clients: McpClient[]\n tools: ToolDefinition[]\n}\n\n/**\n * Start every MCP server in `specs`, call `tools/list`, and produce a\n * `ToolDefinition[]` whose `execute` forwards to the server via\n * `tools/call`. Returns the live clients so the caller can dispose them\n * on session end.\n */\nexport async function bridgeMcpServers(specs: McpServerSpec[]): Promise<McpBridgeResult> {\n const clients: McpClient[] = []\n const tools: ToolDefinition[] = []\n\n for (const spec of specs) {\n const client = new McpClient(spec)\n try {\n await client.start()\n const mcpTools = await client.listTools()\n for (const mcpTool of mcpTools) {\n tools.push(mcpToolToDefinition(spec.name, client, mcpTool))\n }\n clients.push(client)\n } catch (err) {\n process.stderr.write(\n `[agentskit] mcp server \"${spec.name}\" failed: ${err instanceof Error ? err.message : String(err)}\\n`,\n )\n client.dispose()\n }\n }\n\n return { clients, tools }\n}\n\nfunction mcpToolToDefinition(\n serverName: string,\n client: McpClient,\n tool: McpTool,\n): ToolDefinition {\n return {\n name: `${serverName}__${tool.name}`,\n description: tool.description ?? `MCP tool ${tool.name} from ${serverName}`,\n schema: (tool.inputSchema ?? { type: 'object', properties: {} }) as never,\n execute: async (args) => {\n return await client.callTool(tool.name, args)\n },\n }\n}\n\nexport function disposeMcpClients(clients: McpClient[]): void {\n for (const client of clients) client.dispose()\n}\n","import { createRuntime } from '@agentskit/runtime'\nimport type { AgentEvent, Observer } from '@agentskit/core'\nimport { resolveChatProvider } from './providers'\nimport { resolveTools, resolveSkill, resolveSkills, resolveMemory } from './resolve'\n\nexport interface RunCommandOptions {\n provider: string\n model?: string\n apiKey?: string\n baseUrl?: string\n task?: string\n skill?: string\n skills?: string\n tools?: string\n memory?: string\n memoryBackend?: string\n systemPrompt?: string\n maxSteps?: string\n verbose?: boolean\n pretty?: boolean\n}\n\nfunction formatEvent(event: AgentEvent): string {\n switch (event.type) {\n case 'agent:step':\n return `[step ${event.step}] ${event.action}`\n case 'llm:start':\n return `[llm] start (${event.messageCount} messages)`\n case 'llm:end': {\n const preview = event.content.length > 100 ? event.content.slice(0, 100) + '...' : event.content\n return `[llm] done (${event.durationMs}ms) \"${preview}\"`\n }\n case 'tool:start':\n return `[tool] ${event.name} ${JSON.stringify(event.args)}`\n case 'tool:end':\n return `[tool] ${event.name} done (${event.durationMs}ms)`\n case 'error':\n return `[error] ${event.error.message}`\n default:\n return `[${event.type}]`\n }\n}\n\nexport async function runAgent(task: string, options: RunCommandOptions): Promise<void> {\n if (options.skill && options.skills) {\n throw new Error('--skill and --skills are mutually exclusive. Use one or the other.')\n }\n\n const { adapter } = resolveChatProvider({\n provider: options.provider,\n model: options.model,\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n })\n\n const tools = resolveTools(options.tools)\n const skill = options.skills\n ? resolveSkills(options.skills)\n : resolveSkill(options.skill)\n const memory = options.memory\n ? resolveMemory(options.memoryBackend, options.memory)\n : undefined\n\n const observers: Observer[] = []\n if (options.verbose) {\n observers.push({\n name: 'cli-verbose',\n on(event: AgentEvent) {\n process.stderr.write(formatEvent(event) + '\\n')\n },\n })\n }\n\n const runtime = createRuntime({\n adapter,\n tools,\n memory,\n systemPrompt: options.systemPrompt,\n maxSteps: options.maxSteps ? parseInt(options.maxSteps, 10) : undefined,\n observers,\n })\n\n const result = await runtime.run(task, {\n skill: skill ?? undefined,\n })\n\n process.stdout.write(result.content + '\\n')\n}\n","export type Provider =\n | 'openai'\n | 'anthropic'\n | 'gemini'\n | 'ollama'\n | 'deepseek'\n | 'grok'\n | 'kimi'\n | 'groq'\n | 'openrouter'\n | 'demo'\n\nexport const PROVIDER_IMPORT: Record<Exclude<Provider, 'demo'>, string> = {\n openai: 'openai',\n anthropic: 'anthropic',\n gemini: 'gemini',\n ollama: 'ollama',\n deepseek: 'deepseek',\n grok: 'grok',\n kimi: 'kimi',\n groq: 'groq',\n openrouter: 'openrouter',\n}\n\nexport const PROVIDER_DEFAULT_MODEL: Record<Provider, string> = {\n openai: 'gpt-4o-mini',\n anthropic: 'claude-sonnet-4-6',\n gemini: 'gemini-2.5-flash',\n ollama: 'llama3.1',\n deepseek: 'deepseek-chat',\n grok: 'grok-4.20-0309-non-reasoning',\n kimi: 'kimi-k2-0711-preview',\n groq: 'openai/gpt-oss-120b',\n openrouter: '~anthropic/claude-haiku-latest',\n demo: 'demo',\n}\n\nexport const PROVIDER_ENV_KEY: Record<Provider, string | null> = {\n openai: 'OPENAI_API_KEY',\n anthropic: 'ANTHROPIC_API_KEY',\n gemini: 'GEMINI_API_KEY',\n ollama: null,\n deepseek: 'DEEPSEEK_API_KEY',\n grok: 'XAI_API_KEY',\n kimi: 'KIMI_API_KEY',\n groq: 'GROQ_API_KEY',\n openrouter: 'OPENROUTER_API_KEY',\n demo: null,\n}\n","import { lstat, mkdir, mkdtemp, readdir, rename, rm, writeFile } from 'node:fs/promises'\nimport { randomUUID } from 'node:crypto'\nimport path from 'node:path'\nimport type { InitCommandOptions, StarterKind, ToolKind, MemoryKind, PackageManager } from './init'\nimport type { Provider } from './init-providers'\n\ntype RenderContext = { template: StarterKind; provider: Provider; tools: ToolKind[]; memory: MemoryKind; pm: PackageManager }\ntype TemplateRenderer = (ctx: RenderContext) => Record<string, string>\n\nconst PACKAGE_RANGES: Record<string, string> = {\n '@agentskit/adapters': '^0.15.2', '@agentskit/angular': '^0.5.3', '@agentskit/ink': '^0.10.9',\n '@agentskit/memory': '^0.11.8', '@agentskit/react': '^0.8.3', '@agentskit/runtime': '^0.10.15',\n '@agentskit/skills': '^0.9.3', '@agentskit/svelte': '^0.5.3', '@agentskit/tools': '^0.13.6', '@agentskit/vue': '^0.5.3',\n}\n\nfunction align(files: Record<string, string>): Record<string, string> {\n const result = { ...files }\n for (const file of ['package.json', 'deno.json']) {\n if (!files[file]) continue\n const parsed = JSON.parse(files[file]!) as Record<string, unknown>\n const sections = file === 'package.json' ? ['dependencies', 'devDependencies', 'peerDependencies'] : ['imports']\n for (const sectionName of sections) {\n const section = parsed[sectionName]\n if (!section || typeof section !== 'object' || Array.isArray(section)) continue\n for (const [name, range] of Object.entries(PACKAGE_RANGES)) if (name in section) {\n (section as Record<string, unknown>)[name] = file === 'deno.json' ? `npm:${name}@${range}` : range\n }\n }\n result[file] = `${JSON.stringify(parsed, null, 2)}\\n`\n }\n return result\n}\n\nasync function existing(filePath: string) {\n try { return await lstat(filePath) } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') return undefined\n throw error\n }\n}\n\nexport async function writeStarterProject(options: InitCommandOptions, renderers: Record<StarterKind, TemplateRenderer>): Promise<string[]> {\n const ctx: RenderContext = { template: options.template, provider: options.provider ?? 'demo', tools: options.tools ?? [], memory: options.memory ?? 'none', pm: options.packageManager ?? 'pnpm' }\n const files = align(renderers[ctx.template](ctx))\n await mkdir(options.targetDir, { recursive: true })\n const target = await lstat(options.targetDir)\n if (target.isSymbolicLink() || !target.isDirectory()) throw new Error(`Refusing to write starter into non-directory target: ${options.targetDir}`)\n if ((await readdir(options.targetDir)).length > 0 && !options.force) throw new Error(`Target directory is not empty: ${options.targetDir} (re-run with --force to overwrite generated files)`)\n const overwritten: string[] = []\n for (const [relativePath, content] of Object.entries(files)) {\n const absolutePath = path.join(options.targetDir, relativePath)\n await mkdir(path.dirname(absolutePath), { recursive: true })\n const destination = await existing(absolutePath)\n if (destination?.isSymbolicLink()) throw new Error(`Refusing to overwrite symlink: ${absolutePath}`)\n if (destination) overwritten.push(relativePath)\n const tempDir = await mkdtemp(path.join(path.dirname(absolutePath), `.agentskit-init-${randomUUID()}-`))\n try { await writeFile(path.join(tempDir, path.basename(absolutePath)), content, 'utf8'); await rename(path.join(tempDir, path.basename(absolutePath)), absolutePath) }\n finally { await rm(tempDir, { recursive: true, force: true }).catch(() => {}) }\n }\n return overwritten\n}\n","import path from 'node:path'\nimport {\n PROVIDER_DEFAULT_MODEL,\n PROVIDER_ENV_KEY,\n PROVIDER_IMPORT,\n} from './init-providers'\nimport type { Provider } from './init-providers'\nimport { writeStarterProject as writeProject } from './init-writer'\n\nexport type { Provider } from './init-providers'\n\nexport type StarterKind =\n | 'react'\n | 'nextjs'\n | 'ink'\n | 'runtime'\n | 'multi-agent'\n | 'sveltekit'\n | 'nuxt'\n | 'vite-ink'\n | 'cloudflare-workers'\n | 'bun'\n | 'expo'\n | 'deno-deploy'\n | 'angular'\nexport type ToolKind = 'web_search' | 'filesystem' | 'shell'\nexport type MemoryKind = 'none' | 'file' | 'sqlite'\nexport type PackageManager = 'pnpm' | 'npm' | 'yarn' | 'bun'\n\nexport interface InitCommandOptions {\n targetDir: string\n template: StarterKind\n provider?: Provider\n tools?: ToolKind[]\n memory?: MemoryKind\n packageManager?: PackageManager\n /** Refuse non-empty destinations unless explicitly enabled. */\n force?: boolean\n}\n\ninterface RenderContext {\n template: StarterKind\n provider: Provider\n tools: ToolKind[]\n memory: MemoryKind\n pm: PackageManager\n}\n\nfunction adapterCall(provider: Provider, prefix = 'process.env'): string {\n const model = PROVIDER_DEFAULT_MODEL[provider]\n if (provider === 'demo') return `demoAdapter()`\n if (provider === 'ollama') return `ollama({ model: '${model}' })`\n const envKey = PROVIDER_ENV_KEY[provider]!\n return `${PROVIDER_IMPORT[provider]}({ apiKey: ${prefix}.${envKey} ?? '', model: '${model}' })`\n}\n\nfunction denoAdapterCall(provider: Provider): string {\n if (provider === 'demo') return 'demoAdapter()'\n if (provider === 'ollama') return `ollama({ model: '${PROVIDER_DEFAULT_MODEL[provider]}' })`\n return `${PROVIDER_IMPORT[provider]}({ apiKey: Deno.env.get('${PROVIDER_ENV_KEY[provider]!}') ?? '', model: '${PROVIDER_DEFAULT_MODEL[provider]}' })`\n}\n\nfunction viteAdapterCall(provider: Provider): string {\n if (provider === 'demo') return `demoAdapter()`\n if (provider === 'ollama') return `ollama({ model: '${PROVIDER_DEFAULT_MODEL[provider]}' })`\n const envKey = PROVIDER_ENV_KEY[provider]!\n return `${PROVIDER_IMPORT[provider]}({ apiKey: import.meta.env.VITE_${envKey} ?? '', model: '${PROVIDER_DEFAULT_MODEL[provider]}' })`\n}\n\nfunction adapterImport(provider: Provider): string {\n if (provider === 'demo') return ''\n return `import { ${PROVIDER_IMPORT[provider]} } from '@agentskit/adapters'\\n`\n}\n\nfunction toolImports(tools: ToolKind[]): string {\n if (tools.length === 0) return ''\n return `import { ${tools.map(t => t === 'web_search' ? 'webSearch' : t).join(', ')} } from '@agentskit/tools'\\n`\n}\n\nfunction toolList(tools: ToolKind[]): string {\n if (tools.length === 0) return '[]'\n const calls = tools.map(t => {\n if (t === 'web_search') return 'webSearch()'\n if (t === 'filesystem') return `...filesystem({ basePath: './workspace' })`\n if (t === 'shell') return `shell({ allowedCommands: ['ls', 'cat'] })`\n return ''\n })\n return `[${calls.join(', ')}]`\n}\n\nfunction memoryImport(memory: MemoryKind): string {\n if (memory === 'file') return `import { fileChatMemory } from '@agentskit/memory'\\n`\n if (memory === 'sqlite') return `import { sqliteChatMemory } from '@agentskit/memory'\\n`\n return ''\n}\n\nfunction memoryCall(memory: MemoryKind): string {\n if (memory === 'file') return `fileChatMemory('./.agentskit-history.json')`\n if (memory === 'sqlite') return `sqliteChatMemory({ path: './.agentskit-history.db' })`\n return 'undefined'\n}\n\nfunction demoAdapterSnippet(): string {\n return `function demoAdapter() {\n return {\n createSource: () => ({\n stream: async function* () {\n yield { type: 'text' as const, content: 'Hello from your AgentsKit starter. ' }\n yield { type: 'text' as const, content: 'Configure a real adapter to talk to a model.' }\n yield { type: 'done' as const }\n },\n abort: () => {},\n }),\n }\n}\\n\\n`\n}\n\n// ============================================================================\n// Templates\n// ============================================================================\n\nfunction reactStarter(ctx: RenderContext): Record<string, string> {\n const deps: Record<string, string> = {\n '@agentskit/react': '^0.4.0',\n react: '^19.0.0',\n 'react-dom': '^19.0.0',\n }\n if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n if (ctx.tools.length > 0) deps['@agentskit/tools'] = '^0.4.0'\n if (ctx.memory !== 'none') deps['@agentskit/memory'] = '^0.4.0'\n\n const includesDemo = ctx.provider === 'demo'\n const adapter = ctx.provider === 'demo' ? viteAdapterCall(ctx.provider) : viteAdapterCall(ctx.provider)\n const envKey = PROVIDER_ENV_KEY[ctx.provider]\n const envContent = envKey ? `VITE_${envKey}=\\n` : '# No API key required for the local provider\\n'\n\n return {\n 'package.json': JSON.stringify(\n {\n name: path.basename(ctx.template === 'react' ? 'agentskit-react-app' : 'agentskit-app'),\n private: true,\n type: 'module',\n scripts: {\n dev: 'vite',\n build: 'vite build',\n preview: 'vite preview',\n },\n dependencies: deps,\n devDependencies: {\n '@types/react': '^19.0.0',\n '@types/react-dom': '^19.0.0',\n '@vitejs/plugin-react': '^5.0.0',\n typescript: '^5.5.0',\n vite: '^7.0.0',\n },\n },\n null,\n 2,\n ) + '\\n',\n\n 'index.html': `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>AgentsKit React Starter</title>\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"/src/main.tsx\"></script>\n </body>\n</html>\n`,\n\n 'vite.config.ts': `import { defineConfig } from 'vite'\nimport react from '@vitejs/plugin-react'\n\nexport default defineConfig({ plugins: [react()] })\n`,\n\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n lib: ['ES2022', 'DOM'],\n module: 'ESNext',\n moduleResolution: 'bundler',\n jsx: 'react-jsx',\n strict: true,\n noEmit: true,\n skipLibCheck: true,\n },\n include: ['src'],\n },\n null,\n 2,\n ) + '\\n',\n\n 'src/main.tsx': `import React from 'react'\nimport ReactDOM from 'react-dom/client'\nimport App from './App'\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n <React.StrictMode>\n <App />\n </React.StrictMode>,\n)\n`,\n\n 'src/App.tsx': `import { ChatContainer, InputBar, Message, useChat } from '@agentskit/react'\n${adapterImport(ctx.provider)}${toolImports(ctx.tools)}${memoryImport(ctx.memory)}import '@agentskit/react/theme'\n\n${includesDemo ? demoAdapterSnippet() : ''}export default function App() {\n const chat = useChat({\n adapter: ${adapter},${ctx.tools.length > 0 ? `\\n tools: ${toolList(ctx.tools)},` : ''}${ctx.memory !== 'none' ? `\\n memory: ${memoryCall(ctx.memory)},` : ''}\n })\n\n return (\n <ChatContainer>\n {chat.messages.map(message => (\n <Message key={message.id} message={message} />\n ))}\n <InputBar chat={chat} />\n </ChatContainer>\n )\n}\n`,\n\n '.env.example': envContent,\n\n '.gitignore': `node_modules\ndist\n.env\n.env.local\n.agentskit-history.*\n`,\n\n 'README.md': readmeFor(ctx),\n }\n}\n\nfunction inkStarter(ctx: RenderContext): Record<string, string> {\n const deps: Record<string, string> = {\n '@agentskit/ink': '^0.4.0',\n ink: '^7.0.0',\n react: '^19.0.0',\n }\n if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n if (ctx.tools.length > 0) deps['@agentskit/tools'] = '^0.4.0'\n if (ctx.memory !== 'none') deps['@agentskit/memory'] = '^0.4.0'\n\n return {\n 'package.json': JSON.stringify(\n {\n name: 'agentskit-ink-app',\n private: true,\n type: 'module',\n scripts: {\n dev: 'tsx src/index.tsx',\n start: 'tsx src/index.tsx',\n },\n dependencies: deps,\n devDependencies: {\n '@types/react': '^19.0.0',\n '@types/react-dom': '^19.0.0',\n tsx: '^4.20.0',\n typescript: '^5.5.0',\n },\n },\n null,\n 2,\n ) + '\\n',\n\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'bundler',\n jsx: 'react-jsx',\n strict: true,\n noEmit: true,\n skipLibCheck: true,\n },\n include: ['src'],\n },\n null,\n 2,\n ) + '\\n',\n\n 'src/index.tsx': `import React from 'react'\nimport { render } from 'ink'\nimport { ChatContainer, InputBar, Message, useChat } from '@agentskit/ink'\n${adapterImport(ctx.provider)}${toolImports(ctx.tools)}${memoryImport(ctx.memory)}\n${ctx.provider === 'demo' ? demoAdapterSnippet() : ''}function App() {\n const chat = useChat({\n adapter: ${adapterCall(ctx.provider)},${ctx.tools.length > 0 ? `\\n tools: ${toolList(ctx.tools)},` : ''}${ctx.memory !== 'none' ? `\\n memory: ${memoryCall(ctx.memory)},` : ''}\n })\n\n return (\n <ChatContainer>\n {chat.messages.map(message => (\n <Message key={message.id} message={message} />\n ))}\n <InputBar chat={chat} />\n </ChatContainer>\n )\n}\n\nrender(<App />)\n`,\n\n '.env.example': PROVIDER_ENV_KEY[ctx.provider]\n ? `${PROVIDER_ENV_KEY[ctx.provider]}=\\n`\n : '# No API key required for the local provider\\n',\n\n '.gitignore': `node_modules\n.env\n.env.local\n.agentskit-history.*\n`,\n\n 'README.md': readmeFor(ctx),\n }\n}\n\nfunction runtimeStarter(ctx: RenderContext): Record<string, string> {\n const deps: Record<string, string> = {\n '@agentskit/runtime': '^0.4.0',\n }\n if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n if (ctx.tools.length > 0) deps['@agentskit/tools'] = '^0.4.0'\n if (ctx.memory !== 'none') deps['@agentskit/memory'] = '^0.4.0'\n\n return {\n 'package.json': JSON.stringify(\n {\n name: 'agentskit-runtime-app',\n private: true,\n type: 'module',\n scripts: {\n start: 'tsx src/index.ts',\n dev: 'tsx src/index.ts',\n },\n dependencies: deps,\n devDependencies: {\n tsx: '^4.20.0',\n typescript: '^5.5.0',\n },\n },\n null,\n 2,\n ) + '\\n',\n\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'bundler',\n strict: true,\n noEmit: true,\n skipLibCheck: true,\n },\n include: ['src'],\n },\n null,\n 2,\n ) + '\\n',\n\n 'src/index.ts': `import { createRuntime } from '@agentskit/runtime'\n${adapterImport(ctx.provider)}${toolImports(ctx.tools)}${memoryImport(ctx.memory)}\n${ctx.provider === 'demo' ? demoAdapterSnippet() : ''}const runtime = createRuntime({\n adapter: ${adapterCall(ctx.provider)},${ctx.tools.length > 0 ? `\\n tools: ${toolList(ctx.tools)},` : ''}${ctx.memory !== 'none' ? `\\n memory: ${memoryCall(ctx.memory)},` : ''}\n maxSteps: 10,\n})\n\nconst task = process.argv.slice(2).join(' ') || 'Say hello and tell me one fact about TypeScript.'\nconst result = await runtime.run(task)\n\nconsole.log(result.content)\nconsole.log(\\`\\\\n— \\${result.steps} steps · \\${result.toolCalls.length} tool calls · \\${result.durationMs}ms\\`)\n`,\n\n '.env.example': PROVIDER_ENV_KEY[ctx.provider]\n ? `${PROVIDER_ENV_KEY[ctx.provider]}=\\n`\n : '# No API key required for the local provider\\n',\n\n '.gitignore': `node_modules\n.env\n.env.local\n.agentskit-history.*\n`,\n\n 'README.md': readmeFor(ctx),\n }\n}\n\nfunction multiAgentStarter(ctx: RenderContext): Record<string, string> {\n const deps: Record<string, string> = {\n '@agentskit/runtime': '^0.4.0',\n '@agentskit/skills': '^0.4.0',\n }\n if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n if (ctx.tools.length === 0) ctx.tools = ['web_search']\n deps['@agentskit/tools'] = '^0.4.0'\n\n return {\n 'package.json': JSON.stringify(\n {\n name: 'agentskit-multi-agent',\n private: true,\n type: 'module',\n scripts: {\n start: 'tsx src/index.ts',\n dev: 'tsx src/index.ts',\n },\n dependencies: deps,\n devDependencies: {\n tsx: '^4.20.0',\n typescript: '^5.5.0',\n },\n },\n null,\n 2,\n ) + '\\n',\n\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n module: 'ESNext',\n moduleResolution: 'bundler',\n strict: true,\n noEmit: true,\n skipLibCheck: true,\n },\n include: ['src'],\n },\n null,\n 2,\n ) + '\\n',\n\n 'src/index.ts': `import { createRuntime } from '@agentskit/runtime'\nimport { planner, researcher } from '@agentskit/skills'\n${adapterImport(ctx.provider)}${toolImports(ctx.tools)}\n${ctx.provider === 'demo' ? demoAdapterSnippet() : ''}const runtime = createRuntime({\n adapter: ${adapterCall(ctx.provider)},\n maxSteps: 10,\n maxDelegationDepth: 2,\n})\n\nconst task = process.argv.slice(2).join(' ') || 'Research the current state of WebGPU and summarize.'\n\nconst result = await runtime.run(task, {\n skill: planner,\n delegates: {\n researcher: {\n skill: researcher,\n tools: ${toolList(ctx.tools)},\n maxSteps: 5,\n },\n },\n})\n\nconsole.log(result.content)\nconsole.log(\\`\\\\n— \\${result.steps} steps · \\${result.toolCalls.length} tool calls\\`)\n`,\n\n '.env.example': PROVIDER_ENV_KEY[ctx.provider]\n ? `${PROVIDER_ENV_KEY[ctx.provider]}=\\n`\n : '# No API key required for the local provider\\n',\n\n '.gitignore': `node_modules\n.env\n.env.local\n`,\n\n 'README.md': readmeFor(ctx),\n }\n}\n\n// ============================================================================\n// Edge / framework-specific templates\n// ============================================================================\n\nfunction buildAdapterServerImport(provider: Provider): string {\n if (provider === 'demo') return ''\n return `import { ${PROVIDER_IMPORT[provider]} } from '@agentskit/adapters'\\n`\n}\n\nfunction envExampleFor(provider: Provider): string {\n const envKey = PROVIDER_ENV_KEY[provider]\n return envKey ? `${envKey}=\\n` : '# No API key required for the demo provider\\n'\n}\n\nfunction sveltekitStarter(ctx: RenderContext): Record<string, string> {\n const deps: Record<string, string> = {\n '@agentskit/svelte': '^0.4.0',\n '@sveltejs/kit': '^2.0.0',\n svelte: '^5.0.0',\n }\n if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n\n const adapterCallStr = adapterCall(ctx.provider)\n const adapterImport = buildAdapterServerImport(ctx.provider)\n const demoSnippet = ctx.provider === 'demo' ? demoAdapterSnippet() : ''\n\n return {\n 'package.json': JSON.stringify(\n {\n name: 'agentskit-sveltekit-app',\n private: true,\n type: 'module',\n scripts: {\n dev: 'vite dev',\n build: 'vite build',\n preview: 'vite preview',\n check: 'svelte-check --tsconfig ./tsconfig.json',\n },\n dependencies: deps,\n devDependencies: {\n '@sveltejs/adapter-auto': '^4.0.0',\n '@sveltejs/vite-plugin-svelte': '^6.0.0',\n 'svelte-check': '^4.0.0',\n typescript: '^5.5.0',\n vite: '^7.0.0',\n },\n },\n null,\n 2,\n ) + '\\n',\n\n 'svelte.config.js': `import adapter from '@sveltejs/adapter-auto'\nimport { vitePreprocess } from '@sveltejs/vite-plugin-svelte'\n\nexport default {\n preprocess: vitePreprocess(),\n kit: { adapter: adapter() },\n}\n`,\n\n 'vite.config.ts': `import { sveltekit } from '@sveltejs/kit/vite'\nimport { defineConfig } from 'vite'\nexport default defineConfig({ plugins: [sveltekit()] })\n`,\n\n 'tsconfig.json': JSON.stringify(\n {\n extends: './.svelte-kit/tsconfig.json',\n compilerOptions: {\n allowJs: true, checkJs: true, esModuleInterop: true,\n forceConsistentCasingInFileNames: true, resolveJsonModule: true,\n skipLibCheck: true, sourceMap: true, strict: true, moduleResolution: 'bundler',\n },\n },\n null,\n 2,\n ) + '\\n',\n\n 'src/app.html': `<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n %sveltekit.head%\n </head>\n <body>%sveltekit.body%</body>\n</html>\n`,\n\n 'src/routes/+page.svelte': `<script lang=\"ts\">\n import { useChat } from '@agentskit/svelte'\n import '@agentskit/svelte/theme'\n\n const chat = useChat({ endpoint: '/api/chat' })\n</script>\n\n<main>\n {#each $chat.messages as message (message.id)}\n <article data-ak-message data-role={message.role}>{message.content}</article>\n {/each}\n <form on:submit|preventDefault={() => chat.send($chat.input)}>\n <input bind:value={$chat.input} />\n <button>Send</button>\n </form>\n</main>\n`,\n\n 'src/routes/api/chat/+server.ts': `import type { RequestHandler } from './$types'\n${adapterImport}${demoSnippet}export const POST: RequestHandler = async ({ request }) => {\n const { messages } = await request.json()\n const adapter = ${adapterCallStr}\n const source = adapter.createSource({ messages: messages.map((m: { role: string; content: string }, i: number) => ({\n id: String(i), role: m.role, content: m.content,\n status: 'complete' as const, createdAt: new Date(0),\n })) })\n\n const stream = new ReadableStream<Uint8Array>({\n async start(controller) {\n const encoder = new TextEncoder()\n for await (const chunk of source.stream()) {\n if (chunk.type === 'text') controller.enqueue(encoder.encode(chunk.content))\n }\n controller.close()\n },\n })\n return new Response(stream, { headers: { 'content-type': 'text/plain; charset=utf-8' } })\n}\n`,\n\n '.env.example': envExampleFor(ctx.provider),\n '.gitignore': 'node_modules\\n.svelte-kit\\nbuild\\n.env\\n.env.local\\n',\n 'README.md': readmeFor(ctx),\n }\n}\n\nfunction nuxtStarter(ctx: RenderContext): Record<string, string> {\n const deps: Record<string, string> = {\n '@agentskit/vue': '^0.4.0',\n nuxt: '^4.0.0',\n vue: '^3.5.0',\n }\n if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n\n const adapterCallStr = adapterCall(ctx.provider)\n const adapterImport = buildAdapterServerImport(ctx.provider)\n const demoSnippet = ctx.provider === 'demo' ? demoAdapterSnippet() : ''\n\n return {\n 'package.json': JSON.stringify(\n {\n name: 'agentskit-nuxt-app',\n private: true,\n type: 'module',\n scripts: {\n dev: 'nuxt dev',\n build: 'nuxt build',\n preview: 'nuxt preview',\n generate: 'nuxt generate',\n },\n dependencies: deps,\n devDependencies: { typescript: '^5.5.0' },\n },\n null,\n 2,\n ) + '\\n',\n\n 'nuxt.config.ts': `export default defineNuxtConfig({\n compatibilityDate: '2026-04-01',\n modules: [],\n typescript: { strict: true },\n})\n`,\n\n 'tsconfig.json': JSON.stringify(\n { extends: './.nuxt/tsconfig.json' },\n null,\n 2,\n ) + '\\n',\n\n 'app.vue': `<script setup lang=\"ts\">\nimport { useChat } from '@agentskit/vue'\nimport '@agentskit/vue/theme'\n\nconst { messages, input, send } = useChat({ endpoint: '/api/chat' })\n</script>\n\n<template>\n <main>\n <article v-for=\"message in messages\" :key=\"message.id\" :data-role=\"message.role\">\n {{ message.content }}\n </article>\n <form @submit.prevent=\"send(input)\">\n <input v-model=\"input\" />\n <button>Send</button>\n </form>\n </main>\n</template>\n`,\n\n 'server/api/chat.post.ts': `${adapterImport}${demoSnippet}export default defineEventHandler(async (event) => {\n const { messages } = await readBody<{ messages: Array<{ role: string; content: string }> }>(event)\n const adapter = ${adapterCallStr}\n const source = adapter.createSource({ messages: messages.map((m, i) => ({\n id: String(i), role: m.role as 'user' | 'assistant' | 'system',\n content: m.content, status: 'complete' as const, createdAt: new Date(0),\n })) })\n\n setHeader(event, 'content-type', 'text/plain; charset=utf-8')\n return sendStream(event, new ReadableStream<Uint8Array>({\n async start(controller) {\n const encoder = new TextEncoder()\n for await (const chunk of source.stream()) {\n if (chunk.type === 'text') controller.enqueue(encoder.encode(chunk.content))\n }\n controller.close()\n },\n }))\n})\n`,\n\n '.env.example': envExampleFor(ctx.provider),\n '.gitignore': 'node_modules\\n.nuxt\\n.output\\n.env\\n.env.local\\n',\n 'README.md': readmeFor(ctx),\n }\n}\n\nfunction viteInkStarter(ctx: RenderContext): Record<string, string> {\n const deps: Record<string, string> = {\n '@agentskit/ink': '^0.4.0',\n ink: '^7.0.0',\n react: '^19.0.0',\n }\n if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n if (ctx.tools.length > 0) deps['@agentskit/tools'] = '^0.4.0'\n\n return {\n 'package.json': JSON.stringify(\n {\n name: 'agentskit-vite-ink-app',\n private: true,\n type: 'module',\n scripts: {\n dev: 'vite-node --watch src/index.tsx',\n start: 'vite-node src/index.tsx',\n build: 'vite build',\n },\n dependencies: deps,\n devDependencies: {\n '@types/react': '^19.0.0',\n 'vite-node': '^4.0.0',\n vite: '^7.0.0',\n typescript: '^5.5.0',\n },\n },\n null,\n 2,\n ) + '\\n',\n\n 'vite.config.ts': `import { defineConfig } from 'vite'\nexport default defineConfig({\n build: { ssr: true, target: 'node22', rollupOptions: { input: 'src/index.tsx' } },\n})\n`,\n\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022', module: 'ESNext', moduleResolution: 'bundler',\n jsx: 'react-jsx', strict: true, noEmit: true, skipLibCheck: true,\n },\n include: ['src'],\n },\n null,\n 2,\n ) + '\\n',\n\n 'src/index.tsx': `import React from 'react'\nimport { render } from 'ink'\nimport { ChatContainer, InputBar, Message, useChat } from '@agentskit/ink'\n${adapterImport(ctx.provider)}${toolImports(ctx.tools)}\n${ctx.provider === 'demo' ? demoAdapterSnippet() : ''}function App() {\n const chat = useChat({\n adapter: ${adapterCall(ctx.provider)},${ctx.tools.length > 0 ? `\\n tools: ${toolList(ctx.tools)},` : ''}\n })\n\n return (\n <ChatContainer>\n {chat.messages.map(message => (\n <Message key={message.id} message={message} />\n ))}\n <InputBar chat={chat} />\n </ChatContainer>\n )\n}\n\nrender(<App />)\n`,\n\n '.env.example': envExampleFor(ctx.provider),\n '.gitignore': 'node_modules\\ndist\\n.env\\n.env.local\\n.agentskit-history.*\\n',\n 'README.md': readmeFor(ctx),\n }\n}\n\nfunction cloudflareWorkersStarter(ctx: RenderContext): Record<string, string> {\n const deps: Record<string, string> = {\n 'itty-router': '^5.0.0',\n }\n if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n\n const adapterCallEdge = adapterCall(ctx.provider, 'env')\n const adapterImport = buildAdapterServerImport(ctx.provider)\n const demoSnippet = ctx.provider === 'demo' ? demoAdapterSnippet() : ''\n const envKey = PROVIDER_ENV_KEY[ctx.provider]\n\n return {\n 'package.json': JSON.stringify(\n {\n name: 'agentskit-cf-worker',\n private: true,\n type: 'module',\n scripts: {\n dev: 'wrangler dev',\n deploy: 'wrangler deploy',\n },\n dependencies: deps,\n devDependencies: {\n '@cloudflare/workers-types': '^4.0.0',\n typescript: '^5.5.0',\n wrangler: '^3.0.0',\n },\n },\n null,\n 2,\n ) + '\\n',\n\n 'wrangler.toml': `name = \"agentskit-cf-worker\"\nmain = \"src/worker.ts\"\ncompatibility_date = \"2026-04-01\"\ncompatibility_flags = [\"nodejs_compat\"]\n\n# Bind D1 + KV when you wire memory:\n# [[d1_databases]]\n# binding = \"DB\"\n# database_name = \"agentskit\"\n#\n# [[kv_namespaces]]\n# binding = \"KV\"\n# id = \"...\"\n\n[vars]\n${envKey ? `# Set ${envKey} via 'wrangler secret put ${envKey}'` : '# No API key required for the demo provider'}\n`,\n\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022', module: 'ESNext', moduleResolution: 'bundler',\n lib: ['ES2022'], types: ['@cloudflare/workers-types'],\n strict: true, noEmit: true, skipLibCheck: true,\n },\n include: ['src'],\n },\n null,\n 2,\n ) + '\\n',\n\n 'src/worker.ts': `import { Router } from 'itty-router'\n${adapterImport}\n${demoSnippet}interface Env {\n ${envKey ? `${envKey}: string` : '/* no env vars */'}\n}\n\nconst router = Router()\n\nrouter.post('/chat', async (request: Request, env: Env) => {\n const { messages } = await request.json() as { messages: Array<{ role: string; content: string }> }\n const adapter = ${adapterCallEdge}\n const source = adapter.createSource({ messages: messages.map((m, i) => ({\n id: String(i), role: m.role as 'user' | 'assistant' | 'system',\n content: m.content, status: 'complete' as const, createdAt: new Date(0),\n })) })\n\n const stream = new ReadableStream<Uint8Array>({\n async start(controller) {\n const encoder = new TextEncoder()\n for await (const chunk of source.stream()) {\n if (chunk.type === 'text') controller.enqueue(encoder.encode(chunk.content))\n }\n controller.close()\n },\n })\n return new Response(stream, { headers: { 'content-type': 'text/plain; charset=utf-8' } })\n})\n\nrouter.all('*', () => new Response('not found', { status: 404 }))\n\nexport default {\n fetch: (req: Request, env: Env, ctx: ExecutionContext) => router.handle(req, env, ctx),\n} satisfies ExportedHandler<Env>\n`,\n\n '.env.example': envExampleFor(ctx.provider),\n '.gitignore': 'node_modules\\n.wrangler\\n.dev.vars\\n.env\\n.env.local\\n',\n 'README.md': readmeFor(ctx),\n }\n}\n\nfunction bunStarter(ctx: RenderContext): Record<string, string> {\n const deps: Record<string, string> = {}\n if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n const adapterCallStr = adapterCall(ctx.provider)\n const adapterImport = buildAdapterServerImport(ctx.provider)\n const demoSnippet = ctx.provider === 'demo' ? demoAdapterSnippet() : ''\n\n return {\n 'package.json': JSON.stringify(\n {\n name: 'agentskit-bun-server',\n private: true,\n type: 'module',\n scripts: {\n dev: 'bun --hot src/server.ts',\n start: 'bun src/server.ts',\n },\n dependencies: deps,\n devDependencies: { typescript: '^5.5.0' },\n },\n null,\n 2,\n ) + '\\n',\n\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022', module: 'ESNext', moduleResolution: 'bundler',\n types: ['bun-types'], strict: true, noEmit: true, skipLibCheck: true,\n },\n include: ['src'],\n },\n null,\n 2,\n ) + '\\n',\n\n 'src/server.ts': `${adapterImport}${demoSnippet}const adapter = ${adapterCallStr}\n\nconst server = Bun.serve({\n port: Number(process.env.PORT ?? 3000),\n async fetch(request) {\n const url = new URL(request.url)\n if (request.method === 'POST' && url.pathname === '/chat') {\n const { messages } = await request.json() as { messages: Array<{ role: string; content: string }> }\n const source = adapter.createSource({ messages: messages.map((m, i) => ({\n id: String(i), role: m.role as 'user' | 'assistant' | 'system',\n content: m.content, status: 'complete' as const, createdAt: new Date(0),\n })) })\n const stream = new ReadableStream<Uint8Array>({\n async start(controller) {\n const encoder = new TextEncoder()\n for await (const chunk of source.stream()) {\n if (chunk.type === 'text') controller.enqueue(encoder.encode(chunk.content))\n }\n controller.close()\n },\n })\n return new Response(stream, { headers: { 'content-type': 'text/plain; charset=utf-8' } })\n }\n if (url.pathname === '/') {\n return new Response(\\`<!doctype html><title>AgentsKit Bun starter</title>\n<body><pre>POST /chat with { messages: [...] }</pre></body>\\`, {\n headers: { 'content-type': 'text/html' },\n })\n }\n return new Response('not found', { status: 404 })\n },\n})\n\nconsole.log(\\`Listening on http://localhost:\\${server.port}\\`)\n`,\n\n '.env.example': envExampleFor(ctx.provider),\n '.gitignore': 'node_modules\\n.env\\n.env.local\\nbun.lockb\\n',\n 'README.md': readmeFor(ctx),\n }\n}\n\nfunction nextjsStarter(ctx: RenderContext): Record<string, string> {\n const deps: Record<string, string> = {\n '@agentskit/react': '^0.4.0',\n next: '^15.0.0',\n react: '^19.0.0',\n 'react-dom': '^19.0.0',\n }\n if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n if (ctx.tools.length > 0) deps['@agentskit/tools'] = '^0.4.0'\n\n const envKey = PROVIDER_ENV_KEY[ctx.provider]\n const adapter = adapterCall(ctx.provider)\n const apiAdapterImport = ctx.provider === 'demo'\n ? ''\n : `import { ${PROVIDER_IMPORT[ctx.provider as Exclude<Provider, 'demo'>]} } from '@agentskit/adapters'\\n`\n const apiDemoSnippet = ctx.provider === 'demo' ? demoAdapterSnippet() : ''\n\n return {\n 'package.json': JSON.stringify(\n {\n name: 'agentskit-nextjs-app',\n private: true,\n type: 'module',\n scripts: {\n dev: 'next dev',\n build: 'next build',\n start: 'next start',\n lint: 'next lint',\n },\n dependencies: deps,\n devDependencies: {\n '@types/node': '^22.0.0',\n '@types/react': '^19.0.0',\n '@types/react-dom': '^19.0.0',\n typescript: '^5.5.0',\n },\n },\n null,\n 2,\n ) + '\\n',\n\n 'next.config.mjs': `/** @type {import('next').NextConfig} */\nconst nextConfig = {}\nexport default nextConfig\n`,\n\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022',\n lib: ['dom', 'dom.iterable', 'ES2022'],\n allowJs: true,\n skipLibCheck: true,\n strict: true,\n noEmit: true,\n esModuleInterop: true,\n module: 'ESNext',\n moduleResolution: 'bundler',\n resolveJsonModule: true,\n isolatedModules: true,\n jsx: 'preserve',\n incremental: true,\n plugins: [{ name: 'next' }],\n paths: { '@/*': ['./*'] },\n },\n include: ['next-env.d.ts', '**/*.ts', '**/*.tsx', '.next/types/**/*.ts'],\n exclude: ['node_modules'],\n },\n null,\n 2,\n ) + '\\n',\n\n 'app/layout.tsx': `import type { ReactNode } from 'react'\nimport '@agentskit/react/theme'\n\nexport const metadata = { title: 'AgentsKit · Next.js Starter' }\n\nexport default function RootLayout({ children }: { children: ReactNode }) {\n return (\n <html lang=\"en\">\n <body>{children}</body>\n </html>\n )\n}\n`,\n\n 'app/page.tsx': `'use client'\n\nimport { ChatContainer, InputBar, Message, useChat } from '@agentskit/react'\nimport { genericAdapter } from './chat-adapter'\n\nexport default function Page() {\n const chat = useChat({ adapter: genericAdapter('/api/chat') })\n\n return (\n <main style={{ display: 'grid', placeItems: 'center', minHeight: '100dvh' }}>\n <ChatContainer>\n {chat.messages.map(message => (\n <Message key={message.id} message={message} />\n ))}\n <InputBar chat={chat} />\n </ChatContainer>\n </main>\n )\n}\n`,\n\n 'app/chat-adapter.ts': `import { generic } from '@agentskit/adapters'\n\nexport const genericAdapter = (route: string) => generic({\n fetch: async ({ messages, signal }) => {\n const response = await fetch(route, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ messages }),\n signal,\n })\n if (!response.body) throw new Error('No body returned from /api/chat')\n return response\n },\n})\n`,\n\n 'app/api/chat/route.ts': `${apiAdapterImport}${apiDemoSnippet}export const runtime = 'edge'\n\nexport async function POST(request: Request) {\n const { messages } = await request.json() as { messages: Array<{ role: string; content: string }> }\n\n const adapter = ${adapter}\n\n const source = adapter.createSource({ messages: messages.map((message, index) => ({\n id: String(index),\n role: message.role as 'user' | 'assistant' | 'system',\n content: message.content,\n status: 'complete' as const,\n createdAt: new Date(0),\n })) })\n\n const stream = new ReadableStream<Uint8Array>({\n async start(controller) {\n const encoder = new TextEncoder()\n try {\n for await (const chunk of source.stream()) {\n if (chunk.type === 'text') controller.enqueue(encoder.encode(chunk.content))\n }\n } catch (err) {\n controller.error(err)\n return\n }\n controller.close()\n },\n })\n\n return new Response(stream, {\n headers: { 'Content-Type': 'text/plain; charset=utf-8', 'Cache-Control': 'no-cache' },\n })\n}\n`,\n\n '.env.example': envKey ? `${envKey}=\\n` : '# No API key required for the demo provider\\n',\n\n '.gitignore': `node_modules\n.next\nout\n.env\n.env.local\n.agentskit-history.*\n`,\n\n 'README.md': readmeFor(ctx),\n }\n}\n\nfunction expoStarter(ctx: RenderContext): Record<string, string> {\n const deps: Record<string, string> = {\n expo: '^54.0.0',\n 'expo-router': '^7.0.0',\n 'expo-secure-store': '^15.0.0',\n react: '^19.0.0',\n 'react-native': '^0.84.0',\n }\n if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n const adapterCallStr = adapterCall(ctx.provider)\n const adapterImport = ctx.provider === 'demo' ? '' : `import { ${PROVIDER_IMPORT[ctx.provider]} } from '@agentskit/adapters'\\n`\n const demoSnippet = ctx.provider === 'demo' ? demoAdapterSnippet() : ''\n\n return {\n 'package.json': JSON.stringify(\n {\n name: 'agentskit-expo-app',\n version: '1.0.0',\n main: 'expo-router/entry',\n scripts: {\n start: 'expo start',\n android: 'expo start --android',\n ios: 'expo start --ios',\n web: 'expo start --web',\n },\n dependencies: deps,\n devDependencies: {\n '@types/react': '^19.0.0',\n typescript: '^5.5.0',\n },\n },\n null,\n 2,\n ) + '\\n',\n\n 'app.json': JSON.stringify(\n {\n expo: {\n name: 'AgentsKit Expo Starter',\n slug: 'agentskit-expo',\n scheme: 'agentskit',\n plugins: ['expo-router', 'expo-secure-store'],\n ios: { bundleIdentifier: 'com.example.agentskit' },\n android: { package: 'com.example.agentskit' },\n },\n },\n null,\n 2,\n ) + '\\n',\n\n 'tsconfig.json': JSON.stringify(\n { extends: 'expo/tsconfig.base', compilerOptions: { strict: true } },\n null,\n 2,\n ) + '\\n',\n\n 'app/_layout.tsx': `import { Stack } from 'expo-router'\nimport { AuthProvider } from '../lib/auth'\n\nexport default function RootLayout() {\n return (\n <AuthProvider>\n <Stack />\n </AuthProvider>\n )\n}\n`,\n\n 'app/index.tsx': `import { useState } from 'react'\nimport { Text, TextInput, View, Pressable, ScrollView } from 'react-native'\nimport { useAuth } from '../lib/auth'\n${adapterImport}${demoSnippet}export default function Chat() {\n const { token, signIn, signOut } = useAuth()\n const [messages, setMessages] = useState<{ role: 'user' | 'assistant'; content: string }[]>([])\n const [input, setInput] = useState('')\n\n if (!token) {\n return (\n <View style={{ flex: 1, justifyContent: 'center', padding: 24 }}>\n <Text style={{ fontSize: 20, marginBottom: 12 }}>Sign in to chat</Text>\n <Pressable onPress={() => signIn('demo-token')}><Text>Sign in</Text></Pressable>\n </View>\n )\n }\n\n async function send() {\n if (!input.trim()) return\n const next = [...messages, { role: 'user' as const, content: input }]\n setMessages(next)\n setInput('')\n const adapter = ${adapterCallStr}\n const source = adapter.createSource({ messages: next.map((m, i) => ({\n id: String(i), role: m.role, content: m.content,\n status: 'complete' as const, createdAt: new Date(0),\n })) })\n let acc = ''\n for await (const chunk of source.stream()) {\n if (chunk.type === 'text') {\n acc += chunk.content\n setMessages([...next, { role: 'assistant', content: acc }])\n }\n }\n }\n\n return (\n <View style={{ flex: 1, padding: 16 }}>\n <Pressable onPress={signOut}><Text>Sign out</Text></Pressable>\n <ScrollView style={{ flex: 1 }}>\n {messages.map((m, i) => (\n <Text key={i} style={{ marginVertical: 4 }}>{m.role}: {m.content}</Text>\n ))}\n </ScrollView>\n <TextInput value={input} onChangeText={setInput} onSubmitEditing={send} placeholder=\"Ask anything…\" />\n </View>\n )\n}\n`,\n\n 'lib/auth.tsx': `import { createContext, useContext, useEffect, useState, type ReactNode } from 'react'\nimport * as SecureStore from 'expo-secure-store'\n\ninterface AuthValue { token: string | null; signIn: (t: string) => void; signOut: () => void }\nconst AuthCtx = createContext<AuthValue>({ token: null, signIn: () => {}, signOut: () => {} })\n\nexport function AuthProvider({ children }: { children: ReactNode }) {\n const [token, setToken] = useState<string | null>(null)\n\n useEffect(() => {\n SecureStore.getItemAsync('agentskit_token').then(setToken).catch(() => {})\n }, [])\n\n return (\n <AuthCtx.Provider\n value={{\n token,\n signIn: (t) => { SecureStore.setItemAsync('agentskit_token', t); setToken(t) },\n signOut: () => { SecureStore.deleteItemAsync('agentskit_token'); setToken(null) },\n }}\n >\n {children}\n </AuthCtx.Provider>\n )\n}\n\nexport const useAuth = () => useContext(AuthCtx)\n`,\n\n '.env.example': envExampleFor(ctx.provider),\n '.gitignore': 'node_modules\\n.expo\\ndist\\n.env\\n.env.local\\n',\n 'README.md': readmeFor(ctx),\n }\n}\n\nfunction denoDeployStarter(ctx: RenderContext): Record<string, string> {\n const adapterCallEdge = denoAdapterCall(ctx.provider)\n const adapterImport = ctx.provider === 'demo'\n ? ''\n : `import { ${PROVIDER_IMPORT[ctx.provider]} } from 'npm:@agentskit/adapters'\\n`\n const demoSnippet = ctx.provider === 'demo' ? demoAdapterSnippet() : ''\n\n return {\n 'deno.json': JSON.stringify(\n {\n tasks: {\n dev: 'deno run --allow-net --allow-env --watch main.ts',\n start: 'deno run --allow-net --allow-env main.ts',\n deploy: 'deployctl deploy --project=agentskit-deno main.ts',\n },\n imports: {\n '@agentskit/adapters': 'npm:@agentskit/adapters@^0.4.0',\n },\n },\n null,\n 2,\n ) + '\\n',\n\n 'main.ts': `${adapterImport}${demoSnippet}const adapter = ${adapterCallEdge}\n\nDeno.serve(async (request) => {\n const url = new URL(request.url)\n if (request.method === 'POST' && url.pathname === '/chat') {\n const { messages } = await request.json() as { messages: Array<{ role: string; content: string }> }\n const source = adapter.createSource({ messages: messages.map((m, i) => ({\n id: String(i), role: m.role as 'user' | 'assistant' | 'system',\n content: m.content, status: 'complete' as const, createdAt: new Date(0),\n })) })\n const stream = new ReadableStream<Uint8Array>({\n async start(controller) {\n const encoder = new TextEncoder()\n for await (const chunk of source.stream()) {\n if (chunk.type === 'text') controller.enqueue(encoder.encode(chunk.content))\n }\n controller.close()\n },\n })\n return new Response(stream, { headers: { 'content-type': 'text/plain; charset=utf-8' } })\n }\n return new Response(\\`<!doctype html><title>AgentsKit Deno Deploy starter</title>\n<body><pre>POST /chat with { messages: [...] }</pre></body>\\`, {\n headers: { 'content-type': 'text/html' },\n })\n})\n`,\n\n '.env.example': envExampleFor(ctx.provider),\n '.gitignore': '.env\\n.env.local\\n',\n 'README.md': readmeFor(ctx),\n }\n}\n\nfunction angularStarter(ctx: RenderContext): Record<string, string> {\n const deps: Record<string, string> = {\n '@agentskit/angular': '^0.4.0',\n '@angular/core': '^21.0.0',\n '@angular/common': '^21.0.0',\n '@angular/compiler': '^21.0.0',\n '@angular/platform-browser': '^21.0.0',\n '@angular/platform-browser-dynamic': '^21.0.0',\n rxjs: '^7.8.0',\n 'zone.js': '^0.16.1',\n }\n if (ctx.provider !== 'demo') deps['@agentskit/adapters'] = '^0.4.0'\n\n return {\n 'package.json': JSON.stringify(\n {\n name: 'agentskit-angular-app',\n private: true,\n scripts: {\n dev: 'ng serve',\n build: 'ng build',\n start: 'ng serve',\n },\n dependencies: deps,\n devDependencies: {\n '@angular/cli': '^21.0.0',\n '@angular/compiler-cli': '^21.0.0',\n typescript: '^5.5.0',\n },\n },\n null,\n 2,\n ) + '\\n',\n\n 'angular.json': JSON.stringify(\n {\n $schema: './node_modules/@angular/cli/lib/config/schema.json',\n version: 1,\n projects: {\n app: {\n projectType: 'application',\n root: '',\n sourceRoot: 'src',\n prefix: 'ak',\n architect: {\n build: {\n builder: '@angular/build:application',\n options: { browser: 'src/main.ts', tsConfig: 'tsconfig.json', index: 'src/index.html' },\n },\n serve: { builder: '@angular/build:dev-server', options: { buildTarget: 'app:build' } },\n },\n },\n },\n },\n null,\n 2,\n ) + '\\n',\n\n 'tsconfig.json': JSON.stringify(\n {\n compilerOptions: {\n target: 'ES2022', module: 'preserve', moduleResolution: 'bundler',\n strict: true, experimentalDecorators: true, useDefineForClassFields: false,\n lib: ['ES2022', 'DOM'],\n },\n include: ['src/**/*.ts'],\n },\n null,\n 2,\n ) + '\\n',\n\n 'src/index.html': `<!doctype html>\n<html><head><title>AgentsKit Angular</title></head>\n<body><ak-root></ak-root></body></html>\n`,\n\n 'src/main.ts': `import { bootstrapApplication } from '@angular/platform-browser'\nimport 'zone.js'\nimport { AppComponent } from './app'\n\nbootstrapApplication(AppComponent)\n`,\n\n 'src/app.ts': `import { Component, signal } from '@angular/core'\nimport { CommonModule } from '@angular/common'\n\n@Component({\n selector: 'ak-root',\n standalone: true,\n imports: [CommonModule],\n template: \\`\n <main style=\"max-width: 640px; margin: 2rem auto;\">\n <h1>AgentsKit · Angular standalone</h1>\n <p>Wire @agentskit/angular here. See the docs for the chat service binding.</p>\n <p>Counter (sanity): {{ count() }}</p>\n <button (click)=\"bump()\">+1</button>\n </main>\n \\`,\n})\nexport class AppComponent {\n readonly count = signal(0)\n bump() { this.count.update(n => n + 1) }\n}\n`,\n\n '.env.example': envExampleFor(ctx.provider),\n '.gitignore': 'node_modules\\ndist\\n.angular\\n.env\\n.env.local\\n',\n 'README.md': readmeFor(ctx),\n }\n}\n\nfunction readmeFor(ctx: RenderContext): string {\n const installCmd = ctx.pm === 'npm' ? 'npm install' : `${ctx.pm} install`\n const runCmd = ctx.pm === 'npm' ? 'npm run dev' : `${ctx.pm} dev`\n const envKey = PROVIDER_ENV_KEY[ctx.provider]\n\n return `# AgentsKit ${ctx.template} starter\n\nGenerated by \\`agentskit init\\`.\n\n## Stack\n\n- **Template**: \\`${ctx.template}\\`\n- **Provider**: \\`${ctx.provider}\\`${ctx.tools.length ? `\\n- **Tools**: ${ctx.tools.map(t => `\\`${t}\\``).join(', ')}` : ''}${ctx.memory !== 'none' ? `\\n- **Memory**: \\`${ctx.memory}\\`` : ''}\n\n## Run\n\n\\`\\`\\`bash\n${installCmd}\n${envKey ? `cp .env.example .env\\n# add ${envKey}=...` : '# No API key required'}\n${runCmd}\n\\`\\`\\`\n\n## Next steps\n\n- Open the AgentsKit docs at https://www.agentskit.io/docs\n- Add a custom skill: https://www.agentskit.io/docs/get-started/concepts/skill\n- Wire up RAG: https://www.agentskit.io/docs/reference/recipes/rag-chat\n\n## License\n\nISC\n`\n}\n\n// ============================================================================\n// Main\n// ============================================================================\n\nconst TEMPLATE_FN: Record<StarterKind, (ctx: RenderContext) => Record<string, string>> = {\n react: reactStarter,\n nextjs: nextjsStarter,\n ink: inkStarter,\n runtime: runtimeStarter,\n 'multi-agent': multiAgentStarter,\n sveltekit: sveltekitStarter,\n nuxt: nuxtStarter,\n 'vite-ink': viteInkStarter,\n 'cloudflare-workers': cloudflareWorkersStarter,\n bun: bunStarter,\n expo: expoStarter,\n 'deno-deploy': denoDeployStarter,\n angular: angularStarter,\n}\n\nexport async function writeStarterProject(options: InitCommandOptions): Promise<string[]> {\n return writeProject(options, TEMPLATE_FN)\n}\n","/**\n * Static provider metadata consumed by the CLI doctor. This is deliberately\n * separate from the adapters catalog: doctor must stay deterministic and\n * must never fetch a catalog at runtime.\n */\nexport type ProviderRuntimeSupport = 'cli' | 'adapter-only' | 'local'\n\nexport type ProviderEnvConfig =\n | { status: 'required'; keys: readonly string[] }\n | { status: 'not-required'; reason: string }\n | { status: 'unsupported'; reason: string }\n\nexport type ProviderReachability =\n | { status: 'supported'; url: string }\n | { status: 'unsupported'; reason: string }\n\nexport type ProviderDefaultModel =\n | { status: 'known'; id: string }\n | { status: 'unsupported'; reason: string }\n\nexport interface ProviderRegistryEntry {\n id: string\n label: string\n runtime: ProviderRuntimeSupport\n /** Matching provider id in the committed adapters catalog, when present. */\n catalogId?: string\n env: ProviderEnvConfig\n reachability: ProviderReachability\n defaultModel: ProviderDefaultModel\n doctorDefault?: boolean\n}\n\nexport const PROVIDER_REGISTRY = [\n {\n id: 'demo',\n label: 'Demo',\n runtime: 'local',\n env: { status: 'not-required', reason: 'Demo adapter does not use provider credentials.' },\n reachability: { status: 'unsupported', reason: 'Demo adapter has no upstream endpoint.' },\n defaultModel: { status: 'known', id: 'demo' },\n },\n {\n id: 'openai',\n label: 'OpenAI',\n runtime: 'cli',\n catalogId: 'openai',\n env: { status: 'required', keys: ['OPENAI_API_KEY'] },\n reachability: { status: 'supported', url: 'https://api.openai.com/v1/models' },\n defaultModel: { status: 'known', id: 'gpt-4o-mini' },\n doctorDefault: true,\n },\n {\n id: 'anthropic',\n label: 'Anthropic',\n runtime: 'cli',\n catalogId: 'anthropic',\n env: { status: 'required', keys: ['ANTHROPIC_API_KEY'] },\n reachability: { status: 'supported', url: 'https://api.anthropic.com/v1/messages' },\n defaultModel: { status: 'known', id: 'claude-sonnet-4-6' },\n doctorDefault: true,\n },\n {\n id: 'gemini',\n label: 'Gemini',\n runtime: 'cli',\n catalogId: 'google',\n env: { status: 'required', keys: ['GEMINI_API_KEY', 'GOOGLE_API_KEY', 'GOOGLE_GENERATIVE_AI_API_KEY'] },\n reachability: { status: 'supported', url: 'https://generativelanguage.googleapis.com/v1beta/models' },\n defaultModel: { status: 'known', id: 'gemini-2.5-flash' },\n doctorDefault: true,\n },\n {\n id: 'ollama',\n label: 'Ollama',\n runtime: 'local',\n env: { status: 'not-required', reason: 'Ollama runs locally and does not require an API key.' },\n reachability: { status: 'supported', url: 'http://localhost:11434/api/tags' },\n defaultModel: { status: 'known', id: 'llama3.1' },\n doctorDefault: true,\n },\n {\n id: 'deepseek',\n label: 'DeepSeek',\n runtime: 'cli',\n catalogId: 'deepseek',\n env: { status: 'required', keys: ['DEEPSEEK_API_KEY'] },\n reachability: { status: 'supported', url: 'https://api.deepseek.com/models' },\n defaultModel: { status: 'known', id: 'deepseek-flash' },\n },\n {\n id: 'grok',\n label: 'xAI Grok',\n runtime: 'cli',\n catalogId: 'xai',\n env: { status: 'required', keys: ['XAI_API_KEY'] },\n reachability: { status: 'supported', url: 'https://api.x.ai/v1/models' },\n defaultModel: { status: 'known', id: 'grok-4.20-0309-non-reasoning' },\n },\n {\n id: 'kimi',\n label: 'Kimi',\n runtime: 'cli',\n catalogId: 'moonshotai',\n env: { status: 'required', keys: ['KIMI_API_KEY', 'MOONSHOT_API_KEY'] },\n reachability: { status: 'supported', url: 'https://api.moonshot.ai/v1/models' },\n defaultModel: { status: 'known', id: 'kimi-k2.6' },\n },\n {\n id: 'groq',\n label: 'Groq',\n runtime: 'cli',\n catalogId: 'groq',\n env: { status: 'required', keys: ['GROQ_API_KEY'] },\n reachability: { status: 'supported', url: 'https://api.groq.com/openai/v1/models' },\n defaultModel: { status: 'known', id: 'openai/gpt-oss-120b' },\n },\n {\n id: 'openrouter',\n label: 'OpenRouter',\n runtime: 'cli',\n catalogId: 'openrouter',\n env: { status: 'required', keys: ['OPENROUTER_API_KEY'] },\n reachability: { status: 'supported', url: 'https://openrouter.ai/api/v1/models' },\n defaultModel: { status: 'known', id: '~anthropic/claude-haiku-latest' },\n },\n {\n id: 'mistral',\n label: 'Mistral',\n runtime: 'adapter-only',\n catalogId: 'mistral',\n env: { status: 'required', keys: ['MISTRAL_API_KEY'] },\n reachability: { status: 'supported', url: 'https://api.mistral.ai/v1/models' },\n defaultModel: { status: 'known', id: 'codestral-latest' },\n },\n {\n id: 'cohere',\n label: 'Cohere',\n runtime: 'adapter-only',\n catalogId: 'cohere',\n env: { status: 'required', keys: ['COHERE_API_KEY'] },\n reachability: { status: 'supported', url: 'https://api.cohere.com/v1/models' },\n defaultModel: { status: 'known', id: 'c4ai-aya-expanse-32b' },\n },\n {\n id: 'together',\n label: 'Together',\n runtime: 'adapter-only',\n catalogId: 'togetherai',\n env: { status: 'required', keys: ['TOGETHER_API_KEY'] },\n reachability: { status: 'supported', url: 'https://api.together.xyz/v1/models' },\n defaultModel: { status: 'known', id: 'deepseek-ai/DeepSeek-R1' },\n },\n {\n id: 'fireworks',\n label: 'Fireworks',\n runtime: 'adapter-only',\n catalogId: 'fireworks-ai',\n env: { status: 'required', keys: ['FIREWORKS_API_KEY'] },\n reachability: { status: 'supported', url: 'https://api.fireworks.ai/inference/v1/models' },\n defaultModel: { status: 'known', id: 'accounts/fireworks/models/deepseek-v4-flash-0731' },\n },\n {\n id: 'huggingface',\n label: 'Hugging Face',\n runtime: 'adapter-only',\n catalogId: 'huggingface',\n env: { status: 'required', keys: ['HF_TOKEN'] },\n reachability: { status: 'supported', url: 'https://router.huggingface.co/v1/models' },\n defaultModel: { status: 'known', id: 'deepseek-ai/DeepSeek-R1-0528' },\n },\n {\n id: 'lmstudio',\n label: 'LM Studio',\n runtime: 'local',\n catalogId: 'lmstudio',\n env: { status: 'not-required', reason: 'LM Studio runs locally and does not require a provider key.' },\n reachability: { status: 'supported', url: 'http://127.0.0.1:1234/v1/models' },\n defaultModel: { status: 'known', id: 'openai/gpt-oss-20b' },\n },\n {\n id: 'vllm',\n label: 'vLLM',\n runtime: 'local',\n env: { status: 'not-required', reason: 'vLLM is a local server and does not require a provider key.' },\n reachability: { status: 'supported', url: 'http://localhost:8000/v1/models' },\n defaultModel: { status: 'known', id: 'meta-llama/Llama-3.1-8B-Instruct' },\n },\n {\n id: 'llamacpp',\n label: 'llama.cpp',\n runtime: 'local',\n env: { status: 'not-required', reason: 'llama.cpp is a local server and does not require a provider key.' },\n reachability: { status: 'supported', url: 'http://localhost:8080/v1/models' },\n defaultModel: { status: 'known', id: 'local-model' },\n },\n {\n id: 'cerebras',\n label: 'Cerebras',\n runtime: 'adapter-only',\n catalogId: 'cerebras',\n env: { status: 'required', keys: ['CEREBRAS_API_KEY'] },\n reachability: { status: 'supported', url: 'https://api.cerebras.ai/v1/models' },\n defaultModel: { status: 'known', id: 'gpt-oss-120b' },\n },\n] as const satisfies readonly ProviderRegistryEntry[]\n\nexport const DEFAULT_DOCTOR_PROVIDERS = PROVIDER_REGISTRY\n .filter(entry => 'doctorDefault' in entry && entry.doctorDefault === true)\n .map(entry => entry.id)\n\nexport function getProviderRegistryEntry(provider: string): ProviderRegistryEntry | undefined {\n return PROVIDER_REGISTRY.find(entry => entry.id === provider.toLowerCase())\n}\n\n/** Return an explicit unsupported profile instead of silently omitting a provider. */\nexport function resolveProviderRegistryEntry(provider: string): ProviderRegistryEntry {\n return getProviderRegistryEntry(provider) ?? {\n id: provider,\n label: provider,\n runtime: 'adapter-only',\n env: { status: 'unsupported', reason: 'Provider is not in the CLI doctor registry.' },\n reachability: { status: 'unsupported', reason: 'Provider is not in the CLI doctor registry.' },\n defaultModel: { status: 'unsupported', reason: 'Provider is not in the CLI doctor registry.' },\n }\n}\n","import { readFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { existsSync } from 'node:fs'\nimport { loadConfig } from './config'\nimport { DEFAULT_DOCTOR_PROVIDERS, resolveProviderRegistryEntry } from './provider-registry'\nimport type { ProviderRegistryEntry } from './provider-registry'\n\nexport type CheckStatus = 'pass' | 'warn' | 'fail' | 'skip'\n\nexport interface CheckResult {\n status: CheckStatus\n name: string\n detail?: string\n fix?: string\n}\n\nexport interface DoctorReport {\n results: CheckResult[]\n pass: number\n warn: number\n fail: number\n skip: number\n}\n\nfunction providerReachabilityFix(entry: ProviderRegistryEntry): string {\n if (entry.id === 'ollama') {\n return 'Start Ollama: `ollama serve` (or install from https://ollama.com)'\n }\n if (entry.runtime === 'local') {\n return `Start ${entry.label} server and verify its local endpoint`\n }\n return 'Check network / firewall / VPN settings'\n}\n\n// ============================================================================\n// Individual checks\n// ============================================================================\n\nexport async function checkNodeVersion(): Promise<CheckResult> {\n const major = Number(process.versions.node.split('.')[0])\n if (Number.isNaN(major)) {\n return { status: 'fail', name: 'Node version', detail: 'Could not parse process.versions.node' }\n }\n if (major < 22) {\n return {\n status: 'fail',\n name: 'Node version',\n detail: `Node ${process.versions.node} (need 22+)`,\n fix: 'Install Node 22 LTS or newer (https://nodejs.org)',\n }\n }\n if (major === 25) {\n return {\n status: 'warn',\n name: 'Node version',\n detail: `Node ${process.versions.node} — Docusaurus apps may break here`,\n fix: 'Use Node 22 LTS for the legacy docs app, or stay on 25 for everything else',\n }\n }\n return { status: 'pass', name: 'Node version', detail: `Node ${process.versions.node}` }\n}\n\nexport async function checkPnpm(): Promise<CheckResult> {\n // We can't run binaries directly, but we can detect the lockfile signal\n const cwd = process.cwd()\n const hasPnpm = existsSync(join(cwd, 'pnpm-lock.yaml')) || existsSync(join(cwd, 'pnpm-workspace.yaml'))\n if (hasPnpm) {\n return { status: 'pass', name: 'Package manager', detail: 'pnpm detected (lockfile)' }\n }\n if (existsSync(join(cwd, 'package-lock.json'))) {\n return { status: 'warn', name: 'Package manager', detail: 'npm detected — pnpm recommended for monorepo workflows' }\n }\n if (existsSync(join(cwd, 'yarn.lock'))) {\n return { status: 'pass', name: 'Package manager', detail: 'yarn detected' }\n }\n if (existsSync(join(cwd, 'bun.lock')) || existsSync(join(cwd, 'bun.lockb'))) {\n return { status: 'pass', name: 'Package manager', detail: 'bun detected' }\n }\n return {\n status: 'skip',\n name: 'Package manager',\n detail: 'No lockfile found in cwd',\n }\n}\n\nexport async function checkPackageJson(): Promise<CheckResult> {\n const path = join(process.cwd(), 'package.json')\n if (!existsSync(path)) {\n return {\n status: 'warn',\n name: 'package.json',\n detail: 'No package.json in cwd',\n fix: 'Run from a project directory (or use `agentskit init` to create one)',\n }\n }\n try {\n const pkg = JSON.parse(await readFile(path, 'utf8')) as Record<string, unknown>\n const deps = {\n ...((pkg.dependencies as Record<string, string>) ?? {}),\n ...((pkg.devDependencies as Record<string, string>) ?? {}),\n }\n const akDeps = Object.entries(deps).filter(([name]) => name.startsWith('@agentskit/'))\n if (akDeps.length === 0) {\n return { status: 'skip', name: 'AgentsKit packages', detail: 'No @agentskit/* deps found in package.json' }\n }\n return {\n status: 'pass',\n name: 'AgentsKit packages',\n detail: `${akDeps.length} installed: ${akDeps.map(([n]) => n.replace('@agentskit/', '')).join(', ')}`,\n }\n } catch (err) {\n return {\n status: 'fail',\n name: 'package.json',\n detail: `Could not parse: ${(err as Error).message}`,\n }\n }\n}\n\nexport async function checkProviderEnv(provider: string): Promise<CheckResult> {\n const entry = resolveProviderRegistryEntry(provider)\n if (entry.env.status === 'unsupported') {\n return { status: 'skip', name: `${provider} API key`, detail: entry.env.reason }\n }\n if (entry.env.status === 'not-required') {\n return { status: 'skip', name: `${provider} API key`, detail: entry.env.reason }\n }\n const envKey = entry.env.keys.find(key => process.env[key])\n const expectedKeys = entry.env.keys.join(' or ')\n const value = envKey ? process.env[envKey] : undefined\n if (!value) {\n return {\n status: 'skip',\n name: `${provider} API key`,\n detail: `${expectedKeys} not set`,\n fix: `export ${entry.env.keys[0]}=... (only needed if you use ${provider})`,\n }\n }\n if (value.length < 16) {\n return {\n status: 'warn',\n name: `${provider} API key`,\n detail: `${envKey} looks too short (${value.length} chars)`,\n fix: 'Verify the key is complete and not truncated',\n }\n }\n return { status: 'pass', name: `${provider} API key`, detail: `${envKey} set (${value.length} chars)` }\n}\n\nexport async function checkProviderReachable(\n provider: string,\n fetchImpl: typeof fetch = fetch,\n timeoutMs = 4000,\n): Promise<CheckResult> {\n const entry = resolveProviderRegistryEntry(provider)\n if (entry.reachability.status === 'unsupported') {\n return { status: 'skip', name: `${provider} reachable`, detail: entry.reachability.reason }\n }\n const url = entry.reachability.url\n\n // Skip reachability if no API key is set for keyed providers\n if (entry.env.status === 'required' && !entry.env.keys.some(key => process.env[key])) {\n return { status: 'skip', name: `${provider} reachable`, detail: 'Skipped — no API key configured' }\n }\n\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), timeoutMs)\n try {\n const res = await fetchImpl(url, {\n method: 'GET',\n signal: controller.signal,\n })\n // 200-299 = healthy; 401/403 = reachable but auth issue (still pass);\n // 404+ = reachable but endpoint may have changed (warn)\n if (res.status >= 200 && res.status < 400) {\n return { status: 'pass', name: `${provider} reachable`, detail: `${url} → ${res.status} OK` }\n }\n if (res.status === 401 || res.status === 403 || res.status === 405) {\n return { status: 'pass', name: `${provider} reachable`, detail: `${url} → ${res.status} (host reachable)` }\n }\n return {\n status: 'warn',\n name: `${provider} reachable`,\n detail: `${url} → HTTP ${res.status}`,\n fix: 'Host reachable but returned unexpected status — check provider docs',\n }\n } catch (err) {\n const reason = (err as Error).name === 'AbortError' ? `timeout after ${timeoutMs}ms` : (err as Error).message\n return {\n status: 'fail',\n name: `${provider} reachable`,\n detail: `${url} → ${reason}`,\n fix: providerReachabilityFix(entry),\n }\n } finally {\n clearTimeout(timer)\n }\n}\n\nexport async function checkProviderDefaultModel(provider: string): Promise<CheckResult> {\n const entry = resolveProviderRegistryEntry(provider)\n if (entry.defaultModel.status === 'unsupported') {\n return { status: 'skip', name: `${provider} default model`, detail: entry.defaultModel.reason }\n }\n return {\n status: 'pass',\n name: `${provider} default model`,\n detail: entry.defaultModel.id,\n }\n}\n\nexport async function checkConfig(): Promise<CheckResult> {\n try {\n const config = await loadConfig()\n if (!config) {\n return { status: 'skip', name: 'AgentsKit config', detail: 'No .agentskit.config or package.json#agentskit found' }\n }\n return {\n status: 'pass',\n name: 'AgentsKit config',\n detail: `loaded — defaults: ${JSON.stringify(config.defaults ?? {})}`,\n }\n } catch (err) {\n return {\n status: 'warn',\n name: 'AgentsKit config',\n detail: `Could not load: ${(err as Error).message}`,\n }\n }\n}\n\n// ============================================================================\n// Orchestration\n// ============================================================================\n\nexport interface DoctorOptions {\n /** Provider names to check. Defaults to all known providers. */\n providers?: string[]\n /** Skip the network reachability checks. */\n noNetwork?: boolean\n /** Custom fetch (for tests). */\n fetchImpl?: typeof fetch\n}\n\nexport async function runDoctor(options: DoctorOptions = {}): Promise<DoctorReport> {\n const providers = options.providers ?? DEFAULT_DOCTOR_PROVIDERS\n const fetchImpl = options.fetchImpl ?? fetch\n\n const checks: Array<Promise<CheckResult>> = [\n checkNodeVersion(),\n checkPnpm(),\n checkPackageJson(),\n checkConfig(),\n ]\n\n for (const provider of providers) {\n checks.push(checkProviderEnv(provider))\n checks.push(checkProviderDefaultModel(provider))\n if (!options.noNetwork) {\n checks.push(checkProviderReachable(provider, fetchImpl))\n }\n }\n\n const results = await Promise.all(checks)\n\n return {\n results,\n pass: results.filter(r => r.status === 'pass').length,\n warn: results.filter(r => r.status === 'warn').length,\n fail: results.filter(r => r.status === 'fail').length,\n skip: results.filter(r => r.status === 'skip').length,\n }\n}\n\n// ============================================================================\n// Renderer (TTY-friendly)\n// ============================================================================\n\nconst ICON: Record<CheckStatus, string> = {\n pass: '✔',\n warn: '⚠',\n fail: '✘',\n skip: '○',\n}\n\nexport function renderReport(report: DoctorReport, opts: { color?: boolean } = {}): string {\n const color = opts.color ?? true\n const c = (code: string, text: string) => (color ? `\\x1b[${code}m${text}\\x1b[0m` : text)\n const colorFor: Record<CheckStatus, (t: string) => string> = {\n pass: t => c('32', t), // green\n warn: t => c('33', t), // yellow\n fail: t => c('31', t), // red\n skip: t => c('90', t), // dim\n }\n\n const lines: string[] = []\n\n // Header\n lines.push('')\n lines.push(` ${c('1;36', '⚡ AgentsKit Doctor')}`)\n lines.push(` ${c('90', '─'.repeat(50))}`)\n lines.push('')\n\n // Group results by category\n const groups: Record<string, CheckResult[]> = {\n 'Environment': [],\n 'Providers': [],\n 'Network': [],\n }\n for (const r of report.results) {\n if (r.name.includes('reachable')) {\n groups['Network'].push(r)\n } else if (r.name.includes('API key')) {\n groups['Providers'].push(r)\n } else {\n groups['Environment'].push(r)\n }\n }\n\n for (const [group, results] of Object.entries(groups)) {\n if (results.length === 0) continue\n lines.push(` ${c('1', group)}`)\n for (const r of results) {\n const icon = colorFor[r.status](ICON[r.status])\n const name = r.name.padEnd(28)\n const detail = r.detail ? c('90', r.detail) : ''\n lines.push(` ${icon} ${name} ${detail}`)\n if (r.fix && r.status !== 'pass') {\n lines.push(` ${c('90', '↳ ' + r.fix)}`)\n }\n }\n lines.push('')\n }\n\n // Summary bar\n lines.push(` ${c('90', '─'.repeat(50))}`)\n const parts: string[] = []\n if (report.pass > 0) parts.push(colorFor.pass(`${report.pass} passed`))\n if (report.warn > 0) parts.push(colorFor.warn(`${report.warn} warnings`))\n if (report.fail > 0) parts.push(colorFor.fail(`${report.fail} failed`))\n if (report.skip > 0) parts.push(colorFor.skip(`${report.skip} skipped`))\n lines.push(` ${parts.join(' · ')}`)\n\n // Verdict\n if (report.fail === 0) {\n lines.push(` ${c('32', '✔ Ready to build agents.')}`)\n } else {\n lines.push(` ${c('31', '✘ Fix the issues above before continuing.')}`)\n }\n lines.push('')\n return lines.join('\\n')\n}\n","import { spawn, type ChildProcess } from 'node:child_process'\nimport { createRequire } from 'node:module'\nimport { resolve as pathResolve, basename } from 'node:path'\nimport { existsSync } from 'node:fs'\nimport chokidar from 'chokidar'\nimport kleur from 'kleur'\n\nconst require = createRequire(import.meta.url)\n\nfunction resolveTsxCli(): string {\n try {\n return require.resolve('tsx/cli')\n } catch {\n throw new Error('TypeScript execution requires the packaged tsx dependency')\n }\n}\n\nexport interface DevOptions {\n /** Entry file to run (relative or absolute). */\n entry: string\n /** Globs to watch for changes. Defaults to common project files. */\n watch?: string[]\n /** Globs to ignore. */\n ignore?: string[]\n /** Args to pass through to the entry script. */\n scriptArgs?: string[]\n /** Debounce ms before restart after a change. */\n debounceMs?: number\n /**\n * Spawner override for tests. Defaults to spawning `tsx` (or `node` for\n * .js entries) as a child process.\n */\n spawn?: (cmd: string, args: string[]) => ChildProcess\n /** Watch override for tests. Defaults to chokidar. */\n watcher?: (paths: string[], opts: { ignored?: string[] }) => DevWatcher\n /** Stdout sink for tests. */\n stdout?: NodeJS.WritableStream\n /** Stderr sink for tests. */\n stderr?: NodeJS.WritableStream\n}\n\nexport interface DevWatcher {\n on(event: 'change' | 'add' | 'unlink', listener: (path: string) => void): this\n close(): Promise<void>\n}\n\nconst DEFAULT_WATCH = [\n '**/*.ts',\n '**/*.tsx',\n '**/*.mjs',\n '**/*.json',\n '.agentskit.config.*',\n]\n\nconst DEFAULT_IGNORE = [\n '**/node_modules/**',\n '**/dist/**',\n '**/build/**',\n '**/.next/**',\n '**/.turbo/**',\n '**/.git/**',\n '**/coverage/**',\n '**/*.test.ts',\n '**/*.spec.ts',\n]\n\n/**\n * Run an entry file via tsx, restart it on relevant file changes.\n * Resolves when stop() is called or the watcher closes.\n *\n * Returns a controller so callers (and tests) can stop the loop and\n * inspect activity counters.\n */\nexport interface DevController {\n /** Promise that resolves when the dev session ends. */\n done: Promise<void>\n /** Stop the dev loop and clean up. */\n stop: () => Promise<void>\n /** Number of times the entry has been (re)started. */\n restarts: () => number\n}\n\nexport function startDev(options: DevOptions): DevController {\n const entry = pathResolve(process.cwd(), options.entry)\n if (!existsSync(entry)) {\n throw new Error(`Entry file not found: ${entry}`)\n }\n\n const stdout = options.stdout ?? process.stdout\n const stderr = options.stderr ?? process.stderr\n const debounceMs = options.debounceMs ?? 200\n\n const isTs = entry.endsWith('.ts') || entry.endsWith('.tsx')\n const cmd = isTs ? process.execPath : 'node'\n const baseArgs = isTs\n ? [resolveTsxCli(), entry, ...(options.scriptArgs ?? [])]\n : [entry, ...(options.scriptArgs ?? [])]\n\n const spawnFn =\n options.spawn ??\n ((c: string, a: string[]) =>\n spawn(c, a, {\n stdio: ['inherit', 'pipe', 'pipe'],\n env: { ...process.env, FORCE_COLOR: '1' },\n }))\n\n const watchPaths = options.watch ?? DEFAULT_WATCH\n const ignorePaths = [...DEFAULT_IGNORE, ...(options.ignore ?? [])]\n const watcherFactory =\n options.watcher ??\n ((paths, opts) => chokidar.watch(paths, { ignored: opts.ignored, ignoreInitial: true }) as unknown as DevWatcher)\n\n const watcher = watcherFactory(watchPaths, { ignored: ignorePaths })\n\n let child: ChildProcess | undefined\n let restartCount = 0\n let restartTimer: NodeJS.Timeout | undefined\n let delayedStartTimer: NodeJS.Timeout | undefined\n let stopped = false\n let stdinListener: ((data: Buffer) => void) | undefined\n let resolveDone: () => void\n const done = new Promise<void>(r => { resolveDone = r })\n\n const banner = (msg: string, color: 'green' | 'yellow' | 'red' | 'cyan' = 'green') => {\n const time = new Date().toTimeString().slice(0, 8)\n stdout.write(kleur[color](`[agentskit dev ${time}] `) + msg + '\\n')\n }\n\n const startChild = () => {\n restartCount++\n banner(`▸ starting ${kleur.bold(basename(entry))} (restart #${restartCount - 1})`, 'cyan')\n\n const c = spawnFn(cmd, baseArgs)\n child = c\n c.stdout?.on('data', (d: Buffer) => stdout.write(d))\n c.stderr?.on('data', (d: Buffer) => stderr.write(d))\n c.on('exit', (code, signal) => {\n if (stopped) return\n if (signal === 'SIGTERM' || signal === 'SIGINT') return\n if (code === 0) {\n banner(`✓ exited cleanly — waiting for changes`, 'green')\n } else {\n banner(`✗ exited with code ${code} — waiting for changes`, 'red')\n }\n })\n }\n\n const restart = (path: string) => {\n if (restartTimer) clearTimeout(restartTimer)\n restartTimer = setTimeout(() => {\n restartTimer = undefined\n banner(`↻ change detected — ${path}`, 'yellow')\n if (child && !child.killed && child.exitCode === null) {\n child.kill('SIGTERM')\n }\n // Brief pause so the SIGTERM is delivered before we spawn again.\n delayedStartTimer = setTimeout(() => {\n delayedStartTimer = undefined\n if (!stopped) startChild()\n }, 80)\n }, debounceMs)\n }\n\n watcher.on('change', restart)\n watcher.on('add', restart)\n watcher.on('unlink', restart)\n\n startChild()\n\n const stop = async () => {\n if (stopped) return\n stopped = true\n if (restartTimer) clearTimeout(restartTimer)\n if (delayedStartTimer) clearTimeout(delayedStartTimer)\n if (stdinListener) process.stdin.off('data', stdinListener)\n if (process.stdin.isTTY && process.stdin.setRawMode) process.stdin.setRawMode(false)\n if (child && !child.killed && child.exitCode === null) {\n child.kill('SIGTERM')\n }\n await watcher.close()\n banner(`stopped`, 'cyan')\n resolveDone()\n }\n\n // Keyboard handling: 'r' = restart now, 'q' / Ctrl+C = stop\n if (process.stdin.isTTY && process.stdin.setRawMode) {\n process.stdin.setRawMode(true)\n process.stdin.resume()\n stdinListener = (data: Buffer) => {\n const key = data.toString()\n if (key === 'r') restart('manual')\n if (key === 'q' || key === '\\u0003') void stop()\n }\n process.stdin.on('data', stdinListener)\n }\n\n return {\n done,\n stop,\n restarts: () => restartCount,\n }\n}\n","import kleur from 'kleur'\n\nexport interface TunnelOptions {\n /** Local port to expose. Required. */\n port: number\n /** Optional subdomain hint (best-effort — provider may decline). */\n subdomain?: string\n /** Local hostname (default: 'localhost'). */\n host?: string\n /** Tunnel factory override for tests. Defaults to `localtunnel`. */\n open?: (opts: { port: number; subdomain?: string; local_host?: string }) => Promise<TunnelLike>\n /** Stdout/stderr sinks for tests. */\n stdout?: NodeJS.WritableStream\n /** Called once the tunnel URL is known. */\n onReady?: (url: string) => void\n}\n\nexport interface TunnelLike {\n url: string\n on(event: 'request' | 'error' | 'close', listener: (...args: unknown[]) => void): unknown\n close(): void\n}\n\nexport interface TunnelController {\n /** The public URL once ready. */\n url: string\n /** Resolves when the tunnel closes (or stop() is called). */\n done: Promise<void>\n /** Stop the tunnel and resolve done. */\n stop: () => Promise<void>\n /** Number of requests proxied so far. */\n requests: () => number\n}\n\n/**\n * Open a public tunnel to a local port.\n *\n * Uses `localtunnel` by default — no account required, free, URL is\n * something like `https://word-word-12345.loca.lt`. First-time visitors\n * may see a `loca.lt` interstitial click-through; that's a known\n * provider quirk, not an AgentsKit issue.\n */\nexport async function startTunnel(options: TunnelOptions): Promise<TunnelController> {\n const stdout = options.stdout ?? process.stdout\n const open =\n options.open ??\n (async (opts) => {\n const lt = (await import('localtunnel')).default\n return (await lt(opts)) as TunnelLike\n })\n\n const banner = (msg: string, color: 'green' | 'yellow' | 'red' | 'cyan' = 'green') => {\n const time = new Date().toTimeString().slice(0, 8)\n stdout.write(kleur[color](`[agentskit tunnel ${time}] `) + msg + '\\n')\n }\n\n banner(`opening tunnel to ${options.host ?? 'localhost'}:${options.port}...`, 'cyan')\n\n const tunnel = await open({\n port: options.port,\n subdomain: options.subdomain,\n local_host: options.host,\n })\n\n let requests = 0\n let stopped = false\n let signalHandler: (() => void) | undefined\n let resolveDone: () => void\n const done = new Promise<void>(r => { resolveDone = r })\n\n tunnel.on('request', () => {\n requests++\n })\n\n tunnel.on('close', () => {\n if (stopped) return\n if (signalHandler) process.off('SIGINT', signalHandler)\n banner(`tunnel closed by remote`, 'yellow')\n resolveDone()\n })\n\n tunnel.on('error', (...args: unknown[]) => {\n const err = args[0] as Error | undefined\n banner(`error: ${err?.message ?? 'unknown'}`, 'red')\n resolveDone()\n })\n\n banner(`✓ ready`, 'green')\n stdout.write('\\n')\n stdout.write(` ${kleur.bold('Public URL:')} ${kleur.cyan(tunnel.url)}\\n`)\n stdout.write(` ${kleur.bold('Local:')} http://${options.host ?? 'localhost'}:${options.port}\\n`)\n stdout.write('\\n')\n stdout.write(kleur.dim(` Forward webhooks here, then ${kleur.bold('Ctrl+C')} to stop.\\n\\n`))\n\n options.onReady?.(tunnel.url)\n\n const stop = async () => {\n if (stopped) return\n stopped = true\n if (signalHandler) process.off('SIGINT', signalHandler)\n tunnel.close()\n banner(`stopped — proxied ${requests} request${requests === 1 ? '' : 's'}`, 'cyan')\n resolveDone()\n }\n\n // Hook Ctrl+C — but only if we're attached to a TTY (don't break tests)\n if (process.stdin.isTTY) {\n signalHandler = () => {\n void stop()\n }\n process.on('SIGINT', signalHandler)\n }\n\n return {\n url: tunnel.url,\n done,\n stop,\n requests: () => requests,\n }\n}\n","import type { EmbedFn } from '@agentskit/core'\n\nexport interface OpenAiEmbedderConfig {\n apiKey: string\n model?: string\n baseUrl?: string\n}\n\n/**\n * Minimal OpenAI-compatible embedder. Works with the official OpenAI API\n * or any gateway that speaks the `/v1/embeddings` shape (OpenRouter,\n * Azure OpenAI, local servers, etc.). One embedding per call — batching\n * is a follow-up when demand arrives.\n */\nexport function createOpenAiEmbedder(config: OpenAiEmbedderConfig): EmbedFn {\n const model = config.model ?? 'text-embedding-3-small'\n const baseUrl = (config.baseUrl ?? 'https://api.openai.com').replace(/\\/$/, '')\n\n return async (text: string): Promise<number[]> => {\n // CodeQL js/file-access-to-http: not fixed by design. Sending `text`\n // (which may originate from a local document during RAG indexing) to\n // the embeddings endpoint is the entire purpose of an embedder — the\n // call goes only to the operator-configured `baseUrl`.\n const res = await fetch(`${baseUrl}/v1/embeddings`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${config.apiKey}`,\n },\n body: JSON.stringify({ model, input: text }),\n })\n if (!res.ok) {\n const body = await res.text().catch(() => '')\n throw new Error(`embedder ${model} HTTP ${res.status}: ${body}`)\n }\n const json = (await res.json()) as { data?: Array<{ embedding: number[] }> }\n const first = json.data?.[0]?.embedding\n if (!first) throw new Error(`embedder ${model}: response missing data[0].embedding`)\n return first\n }\n}\n","import { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport { glob } from 'node:fs/promises'\nimport { fileVectorMemory } from '@agentskit/memory'\nimport { createRAG } from '@agentskit/rag'\nimport type { RAG } from '@agentskit/rag'\nimport type { EmbedFn } from '@agentskit/core'\nimport { createOpenAiEmbedder } from './embedders'\n\nexport interface RagConfig {\n enabled?: boolean\n backend?: 'memory' | 'file'\n dir?: string\n sources?: string[]\n embedder?: {\n provider?: string\n model?: string\n apiKey?: string\n baseUrl?: string\n }\n chunkSize?: number\n topK?: number\n}\n\nexport interface BuildRagOptions {\n config: RagConfig\n cwd?: string\n /** Override the embedder resolution (useful for tests). */\n embedder?: EmbedFn\n}\n\nexport interface IndexResult {\n /** Number of input documents ingested. */\n documentCount: number\n /** Sources globbed + ingested (absolute paths). */\n sources: string[]\n}\n\n/** Resolve an `EmbedFn` from config. Currently only OpenAI-compatible. */\nexport function resolveEmbedder(config: RagConfig): EmbedFn {\n const embedder = config.embedder\n const provider = embedder?.provider ?? 'openai'\n if (provider !== 'openai') {\n throw new Error(`Unsupported RAG embedder provider: ${provider}. Only \"openai\" is built-in.`)\n }\n const apiKey = embedder?.apiKey ?? process.env.OPENAI_API_KEY ?? process.env.OPENROUTER_API_KEY\n if (!apiKey) {\n throw new Error('RAG embedder needs an API key (config.rag.embedder.apiKey or OPENAI_API_KEY env).')\n }\n return createOpenAiEmbedder({\n apiKey,\n model: embedder?.model,\n baseUrl: embedder?.baseUrl,\n })\n}\n\n/**\n * Build a live `RAG` instance from a config. Wires the embedder + vector\n * store but does not ingest anything — call `indexSources` for that.\n */\nexport function buildRagFromConfig(options: BuildRagOptions): RAG {\n const cwd = options.cwd ?? process.cwd()\n const dir = resolve(cwd, options.config.dir ?? './.agentskit-rag')\n const store = fileVectorMemory({ path: `${dir}/store.json` })\n const embed = options.embedder ?? resolveEmbedder(options.config)\n return createRAG({\n embed,\n store,\n chunkSize: options.config.chunkSize,\n topK: options.config.topK,\n })\n}\n\n/**\n * Glob `config.sources` from `cwd`, read each file, and ingest through the\n * provided RAG. Returns a summary of what was indexed.\n */\nexport async function indexSources(rag: RAG, config: RagConfig, cwd?: string): Promise<IndexResult> {\n const root = cwd ?? process.cwd()\n const sources = config.sources ?? []\n const absolutePaths: string[] = []\n\n for (const pattern of sources) {\n for await (const match of glob(pattern, { cwd: root })) {\n absolutePaths.push(resolve(root, match))\n }\n }\n\n const documents = await Promise.all(\n absolutePaths.map(async (path) => ({\n id: path,\n content: await readFile(path, 'utf8'),\n source: path,\n })),\n )\n\n if (documents.length > 0) await rag.ingest(documents)\n\n return { documentCount: documents.length, sources: absolutePaths }\n}\n","{\n \"name\": \"@agentskit/cli\",\n \"version\": \"0.13.42\",\n \"description\": \"CLI for AgentsKit chat and project scaffolding.\",\n \"engines\": {\n \"node\": \">=22\"\n },\n \"keywords\": [\n \"agentskit\",\n \"ai\",\n \"agents\",\n \"llm\",\n \"chat\",\n \"typescript\",\n \"cli\",\n \"command-line\",\n \"scaffolding\",\n \"openai\",\n \"anthropic\",\n \"claude\",\n \"gemini\",\n \"chatgpt\",\n \"ai-agents\",\n \"autonomous-agents\",\n \"create-app\",\n \"terminal\"\n ],\n \"type\": \"module\",\n \"sideEffects\": false,\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"bin\": {\n \"agentskit\": \"./dist/bin.js\"\n },\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run\",\n \"test:coverage\": \"vitest run --coverage\",\n \"lint\": \"tsc --noEmit\",\n \"dev\": \"tsup --watch\"\n },\n \"dependencies\": {\n \"@agentskit/adapters\": \"workspace:*\",\n \"@agentskit/core\": \"workspace:*\",\n \"@agentskit/cross-platform\": \"workspace:*\",\n \"@agentskit/ink\": \"workspace:*\",\n \"@agentskit/integrations\": \"workspace:*\",\n \"@agentskit/memory\": \"workspace:*\",\n \"@agentskit/rag\": \"workspace:*\",\n \"@agentskit/runtime\": \"workspace:*\",\n \"@agentskit/skills\": \"workspace:*\",\n \"@agentskit/tools\": \"workspace:*\",\n \"@inquirer/prompts\": \"^8.7.2\",\n \"chokidar\": \"^5.0.0\",\n \"commander\": \"^14.0.3\",\n \"ink\": \"^7.1.1\",\n \"kleur\": \"^4.1.5\",\n \"localtunnel\": \"^2.0.2\",\n \"react\": \"^19.2.8\",\n \"tsx\": \"^4.23.13\",\n \"yaml\": \"^2.9.1\"\n },\n \"devDependencies\": {\n \"@testing-library/jest-dom\": \"^7.0.1\",\n \"@testing-library/react\": \"^16.3.3\",\n \"@types/localtunnel\": \"^2.0.4\",\n \"@types/node\": \"^25.9.5\",\n \"@types/react\": \"^19.2.17\",\n \"happy-dom\": \"^20.14.5\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^6.0.3\",\n \"vitest\": \"^4.1.11\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"provenance\": true\n },\n \"agentskit\": {\n \"stability\": \"beta\",\n \"stabilityNote\": \"chat, init, run commands stable.\"\n },\n \"license\": \"MIT\",\n \"homepage\": \"https://www.agentskit.io/docs/reference/packages/cli\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/AgentsKit-io/agentskit\",\n \"directory\": \"packages/cli\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/AgentsKit-io/agentskit/issues\"\n },\n \"author\": \"AgentsKit Contributors\"\n}\n","import type { AgentsKitConfig } from '../config'\n\nexport function mergeWithConfig(\n options: Record<string, unknown>,\n config: AgentsKitConfig | undefined,\n): Record<string, unknown> {\n if (!config) return options\n const d = config.defaults ?? {}\n\n const resolvedApiKey =\n (options.apiKey as string | undefined) ??\n (d.apiKeyEnv ? process.env[d.apiKeyEnv] : undefined) ??\n d.apiKey\n\n return {\n ...options,\n provider: options.provider !== 'demo' ? options.provider : (d.provider ?? options.provider),\n model: options.model ?? d.model,\n apiKey: resolvedApiKey,\n baseUrl: options.baseUrl ?? d.baseUrl,\n tools: options.tools ?? d.tools,\n skill: options.skill ?? d.skill,\n system: options.system ?? d.system,\n memoryBackend: options.memoryBackend ?? d.memoryBackend,\n }\n}\n","import React from 'react'\nimport { render } from 'ink'\nimport type { Command } from 'commander'\nimport { loadConfig } from '../config'\nimport { ChatApp, renderChatHeader } from '../app/ChatApp'\nimport { listSessions, resolveSession } from '../sessions'\nimport { mergeWithConfig } from './shared'\nimport { loadPlugins } from '../extensibility/plugins'\nimport { bridgeMcpServers, disposeMcpClients } from '../extensibility/mcp'\nimport { configHooksToHandlers } from '../extensibility/hooks'\nimport type { ConfigHooksMap } from '../extensibility/hooks'\nimport type { PermissionMode, PermissionPolicy } from '../extensibility/permissions'\n\nexport function registerChatCommand(program: Command): void {\n program\n .command('chat')\n .description('Start a terminal chat session.')\n .option('--provider <provider>', 'Provider to use', 'demo')\n .option('--model <model>', 'Model name')\n .option('--api-key <key>', 'API key for the selected provider')\n .option('--base-url <url>', 'Override provider base URL')\n .option('--system <prompt>', 'System prompt')\n .option('--memory <path>', 'Explicit memory file path (overrides session management)')\n .option('--tools <tools>', 'Comma-separated tools: web_search,fetch_url,filesystem,shell')\n .option('--skill <skills>', 'Comma-separated skill names from @agentskit/skills (e.g. researcher, pr-reviewer)')\n .option('--memory-backend <backend>', 'Memory backend: file (default), sqlite')\n .option('--new', 'Start a fresh chat session (ignore previous conversations in this directory)')\n .option('--resume [id]', 'Resume a prior session by id; omit id to resume the latest')\n .option('--list-sessions', 'List saved sessions for this directory and exit')\n .option('--no-config', 'Skip loading .agentskit.config.json')\n .option(\n '--plugin-dir <dir>',\n 'Extra directory to auto-discover plugin modules from (repeatable)',\n (value: string, prev: string[] = []) => [...prev, value],\n [],\n )\n .option('--discover-plugins', 'Also auto-discover plugins from ~/.agentskit/plugins')\n .option(\n '--mode <mode>',\n 'Permission mode: default | plan | acceptEdits | bypassPermissions',\n )\n .action(async (options) => {\n if (options.listSessions) {\n const sessions = listSessions()\n if (sessions.length === 0) {\n process.stdout.write('No saved sessions for this directory.\\n')\n return\n }\n for (const s of sessions) {\n const { id, updatedAt, messageCount, preview, model, label, forkedFrom } = s.metadata\n const display = label ? `${label} (${id})` : id\n const forkNote = forkedFrom ? ` ← fork ${forkedFrom}` : ''\n process.stdout.write(\n `${display} ${updatedAt} msgs=${messageCount}${model ? ` model=${model}` : ''}${forkNote}\\n ${preview}\\n`,\n )\n }\n return\n }\n\n const config = options.config !== false ? await loadConfig() : undefined\n const merged = mergeWithConfig(options, config)\n\n const session = resolveSession({\n explicitPath: options.memory as string | undefined,\n forceNew: Boolean(options.new),\n resumeId: options.resume,\n })\n\n if (!session.isNew && !options.memory) {\n process.stdout.write(\n `Resuming session ${session.id}. Start fresh with --new or list with --list-sessions.\\n`,\n )\n }\n\n const pluginBundle = await loadPlugins({\n specs: config?.plugins ?? [],\n pluginDirs: (options.pluginDir as string[]) ?? [],\n autoDiscoverUserDir: Boolean(options.discoverPlugins),\n })\n\n const configHooks = configHooksToHandlers(config?.hooks as ConfigHooksMap | undefined)\n const hookHandlers = [...configHooks, ...pluginBundle.hooks]\n\n const configMcpSpecs = Object.entries(config?.mcp?.servers ?? {}).map(([name, spec]) => ({\n name,\n command: spec.command,\n args: spec.args,\n env: spec.env,\n timeout: spec.timeout,\n }))\n const allMcpSpecs = [...configMcpSpecs, ...pluginBundle.mcpServers]\n const { clients: mcpClients, tools: mcpTools } = await bridgeMcpServers(allMcpSpecs)\n\n const policyMode = (options.mode ?? config?.permissions?.mode ?? 'default') as PermissionMode\n const permissionPolicy: PermissionPolicy = {\n mode: policyMode,\n rules: (config?.permissions?.rules ?? []).map(r => ({\n tool: r.tool,\n action: r.action,\n scope: r.scope,\n })),\n }\n\n const chatOptions = {\n apiKey: (merged.apiKey ?? options.apiKey) as string | undefined,\n baseUrl: (merged.baseUrl ?? options.baseUrl) as string | undefined,\n provider: merged.provider as string,\n model: merged.model as string | undefined,\n system: (merged.system ?? options.system) as string | undefined,\n memoryPath: session.file,\n sessionId: session.id,\n tools: (merged.tools ?? options.tools) as string | undefined,\n skill: (merged.skill ?? options.skill) as string | undefined,\n memoryBackend: (merged.memoryBackend ?? options.memoryBackend) as string | undefined,\n agentsKitConfig: config,\n slashCommands: pluginBundle.slashCommands,\n extraTools: [...pluginBundle.tools, ...mcpTools],\n extraSkills: pluginBundle.skills,\n hookHandlers,\n permissionPolicy,\n }\n process.stdout.write(`${renderChatHeader(chatOptions)}\\n`)\n const instance = render(React.createElement(ChatApp, chatOptions))\n try {\n await instance.waitUntilExit()\n } finally {\n disposeMcpClients(mcpClients)\n }\n\n if (options.memory) {\n process.stdout.write(\n `\\nSession saved to ${session.file}. Resume with --memory ${session.file}\\n`,\n )\n } else {\n process.stdout.write(\n `\\nSession saved. Resume with:\\n agentskit chat --resume ${session.id}\\nOr start fresh with:\\n agentskit chat --new\\n`,\n )\n }\n })\n}\n","import React, { useEffect, useState } from 'react'\nimport { Box, Text } from 'ink'\nimport { createRuntime } from '@agentskit/runtime'\nimport type { AgentEvent, Observer } from '@agentskit/core'\nimport { resolveChatProvider } from './providers'\nimport { resolveTools, resolveSkill, resolveSkills, resolveMemory } from './resolve'\nimport type { RunCommandOptions } from './run'\n\ninterface ToolCallInfo {\n name: string\n status: 'running' | 'done' | 'error'\n durationMs?: number\n}\n\nexport function RunApp({ task, options }: { task: string; options: RunCommandOptions }) {\n const [status, setStatus] = useState<'running' | 'done' | 'error'>('running')\n const [currentStep, setCurrentStep] = useState(0)\n const [toolCalls, setToolCalls] = useState<ToolCallInfo[]>([])\n const [result, setResult] = useState('')\n const [error, setError] = useState('')\n const [durationMs, setDurationMs] = useState(0)\n\n useEffect(() => {\n async function execute() {\n if (options.skill && options.skills) {\n setError('--skill and --skills are mutually exclusive.')\n setStatus('error')\n return\n }\n\n const { adapter } = resolveChatProvider({\n provider: options.provider,\n model: options.model,\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n })\n\n const tools = resolveTools(options.tools)\n const skill = options.skills\n ? resolveSkills(options.skills)\n : resolveSkill(options.skill)\n const memory = options.memory\n ? resolveMemory(options.memoryBackend, options.memory)\n : undefined\n\n const observers: Observer[] = [{\n name: 'run-ui',\n on(event: AgentEvent) {\n switch (event.type) {\n case 'agent:step':\n setCurrentStep(event.step)\n break\n case 'tool:start':\n setToolCalls(prev => [...prev, { name: event.name, status: 'running' }])\n break\n case 'tool:end':\n setToolCalls(prev => prev.map(tc =>\n tc.name === event.name && tc.status === 'running'\n ? { ...tc, status: 'done', durationMs: event.durationMs }\n : tc\n ))\n break\n case 'error':\n setToolCalls(prev => prev.map(tc =>\n tc.status === 'running' ? { ...tc, status: 'error' } : tc\n ))\n break\n }\n },\n }]\n\n const runtime = createRuntime({\n adapter,\n tools,\n memory,\n systemPrompt: options.systemPrompt,\n maxSteps: options.maxSteps ? parseInt(options.maxSteps, 10) : undefined,\n observers,\n })\n\n try {\n const runResult = await runtime.run(task, { skill: skill ?? undefined })\n setResult(runResult.content)\n setDurationMs(runResult.durationMs)\n setStatus('done')\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err))\n setStatus('error')\n }\n }\n\n void execute()\n }, [])\n\n return (\n <Box flexDirection=\"column\" gap={1}>\n <Text bold color=\"cyan\">agentskit run</Text>\n <Text dimColor>Task: {task}</Text>\n\n {status === 'running' && currentStep > 0 && (\n <Text color=\"yellow\">{'⟳'} Step {currentStep}</Text>\n )}\n\n {toolCalls.map((tc, i) => (\n <Box key={i} marginLeft={2}>\n <Text color={tc.status === 'running' ? 'yellow' : tc.status === 'done' ? 'green' : 'red'}>\n {tc.status === 'running' ? '⟳' : tc.status === 'done' ? '✓' : '✗'}{' '}\n {tc.name}\n {tc.durationMs !== undefined ? ` (${tc.durationMs}ms)` : ''}\n </Text>\n </Box>\n ))}\n\n {status === 'running' && (\n <Text color=\"yellow\">Running...</Text>\n )}\n\n {status === 'done' && (\n <Box flexDirection=\"column\">\n <Text color=\"green\" bold>Done ({durationMs}ms)</Text>\n <Text>{result}</Text>\n </Box>\n )}\n\n {status === 'error' && (\n <Text color=\"red\" bold>Error: {error}</Text>\n )}\n </Box>\n )\n}\n","import React from 'react'\nimport { render } from 'ink'\nimport type { Command } from 'commander'\nimport { loadConfig } from '../config'\nimport { runAgent } from '../run'\nimport { RunApp } from '../run-ui'\nimport { mergeWithConfig } from './shared'\n\nexport function registerRunCommand(program: Command): void {\n program\n .command('run [task]')\n .description('Execute an agent task and output the result.')\n .option('--task <task>', 'Task string (alternative to positional argument)')\n .option('--provider <provider>', 'Provider to use', 'demo')\n .option('--model <model>', 'Model name')\n .option('--api-key <key>', 'API key for the selected provider')\n .option('--base-url <url>', 'Override provider base URL')\n .option('--skill <skill>', 'Single skill to use')\n .option('--skills <skills>', 'Comma-separated skills (composed together)')\n .option('--tools <tools>', 'Comma-separated tools: web_search,filesystem,shell')\n .option('--memory <path>', 'Path for memory persistence')\n .option('--memory-backend <backend>', 'Memory backend: file (default), sqlite')\n .option('--system-prompt <prompt>', 'System prompt')\n .option('--max-steps <steps>', 'Maximum agent steps', '10')\n .option('--verbose', 'Stream agent steps to stderr')\n .option('--pretty', 'Use rich Ink-based output')\n .option('--no-config', 'Skip loading .agentskit.config.json')\n .action(async (positionalTask: string | undefined, options) => {\n const task = options.task ?? positionalTask\n if (!task) {\n process.stderr.write('Error: task is required. Pass as argument or use --task.\\n')\n process.exit(1)\n }\n\n const config = options.config !== false ? await loadConfig() : undefined\n const merged = mergeWithConfig(options, config)\n\n if (options.pretty) {\n render(React.createElement(RunApp, { task, options }))\n } else {\n try {\n await runAgent(task, { ...options, provider: merged.provider, model: merged.model })\n } catch (err) {\n process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\\n`)\n process.exit(1)\n }\n }\n })\n}\n","import { input, select, checkbox, confirm } from '@inquirer/prompts'\nimport kleur from 'kleur'\nimport path from 'node:path'\nimport { existsSync } from 'node:fs'\nimport type {\n InitCommandOptions,\n StarterKind,\n Provider,\n ToolKind,\n MemoryKind,\n PackageManager,\n} from './init'\n\ninterface InteractiveResult {\n options: InitCommandOptions\n cancelled: boolean\n}\n\n/**\n * Run the interactive init flow. Returns the resolved InitCommandOptions\n * to feed into writeStarterProject. If the user cancels (Ctrl+C), returns\n * { cancelled: true }.\n */\nexport async function runInteractiveInit(\n defaults: { dir?: string; template?: StarterKind } = {},\n): Promise<InteractiveResult> {\n process.stdout.write(`\\n${kleur.bold().green('▲')} ${kleur.bold('agentskit init')}\\n`)\n process.stdout.write(kleur.dim(' Generate a starter project — answer five questions.\\n\\n'))\n\n try {\n const targetDir = await input({\n message: 'Project directory:',\n default: defaults.dir ?? 'agentskit-app',\n validate: (value) => {\n if (!value.trim()) return 'A directory name is required.'\n const abs = path.resolve(process.cwd(), value)\n if (existsSync(abs)) return `${value} already exists. Pick a different name.`\n return true\n },\n })\n\n const template = await select<StarterKind>({\n message: 'Template:',\n default: defaults.template ?? 'react',\n choices: [\n { name: 'React chat (Vite + browser)', value: 'react', description: 'Streaming UI with @agentskit/react' },\n { name: 'Next.js chat (App Router + Route Handler)', value: 'nextjs', description: 'app/api/chat streams to a useChat client' },\n { name: 'SvelteKit chat', value: 'sveltekit', description: '@agentskit/svelte client + server route streaming' },\n { name: 'Nuxt chat', value: 'nuxt', description: '@agentskit/vue composable + Nitro server route streaming' },\n { name: 'Ink chat (terminal UI)', value: 'ink', description: 'Same chat but in your terminal' },\n { name: 'Vite + Ink (terminal, hot-reload)', value: 'vite-ink', description: 'Ink chat with vite-node hot reload' },\n { name: 'Cloudflare Workers (edge)', value: 'cloudflare-workers', description: 'Edge runtime with itty-router + streaming' },\n { name: 'Bun server', value: 'bun', description: 'Bun.serve with hot reload' },\n { name: 'Deno Deploy', value: 'deno-deploy', description: 'Deno.serve with deployctl + npm: imports' },\n { name: 'Expo + auth (mobile)', value: 'expo', description: 'expo-router + expo-secure-store + chat screen' },\n { name: 'Angular standalone', value: 'angular', description: 'Angular 21 standalone bootstrap with @agentskit/angular' },\n { name: 'Runtime (headless agent, no UI)', value: 'runtime', description: 'Autonomous task → result' },\n { name: 'Multi-agent (planner + delegates)', value: 'multi-agent', description: 'Supervisor pattern, ready to extend' },\n ],\n })\n\n const provider = await select<Provider>({\n message: 'LLM provider:',\n default: 'demo',\n choices: [\n { name: 'Demo (no API key — deterministic stub)', value: 'demo' },\n { name: 'OpenAI', value: 'openai' },\n { name: 'Anthropic', value: 'anthropic' },\n { name: 'Gemini', value: 'gemini' },\n { name: 'Ollama (local, no key)', value: 'ollama' },\n { name: 'DeepSeek', value: 'deepseek' },\n { name: 'xAI Grok', value: 'grok' },\n { name: 'Kimi', value: 'kimi' },\n { name: 'Groq', value: 'groq' },\n { name: 'OpenRouter', value: 'openrouter' },\n ],\n })\n\n let tools: ToolKind[] = []\n if (template !== 'react') {\n // React template focuses on chat; tools are most useful in runtime / multi-agent / ink\n tools = await checkbox<ToolKind>({\n message: 'Tools (space to toggle, enter to confirm):',\n choices: [\n { name: 'web_search', value: 'web_search' },\n { name: 'filesystem', value: 'filesystem' },\n { name: 'shell', value: 'shell' },\n ],\n })\n }\n\n const memory = await select<MemoryKind>({\n message: 'Memory backend:',\n default: 'none',\n choices: [\n { name: 'None (stateless)', value: 'none' },\n { name: 'File (JSON on disk)', value: 'file' },\n { name: 'SQLite (better-sqlite3)', value: 'sqlite' },\n ],\n })\n\n const packageManager = await select<PackageManager>({\n message: 'Package manager:',\n default: 'pnpm',\n choices: [\n { name: 'pnpm', value: 'pnpm' },\n { name: 'npm', value: 'npm' },\n { name: 'yarn', value: 'yarn' },\n { name: 'bun', value: 'bun' },\n ],\n })\n\n process.stdout.write('\\n' + kleur.dim(' Summary:\\n'))\n process.stdout.write(kleur.dim(` dir ${targetDir}\\n`))\n process.stdout.write(kleur.dim(` template ${template}\\n`))\n process.stdout.write(kleur.dim(` provider ${provider}\\n`))\n if (tools.length) process.stdout.write(kleur.dim(` tools ${tools.join(', ')}\\n`))\n process.stdout.write(kleur.dim(` memory ${memory}\\n`))\n process.stdout.write(kleur.dim(` pm ${packageManager}\\n\\n`))\n\n const proceed = await confirm({ message: 'Generate?', default: true })\n if (!proceed) {\n process.stdout.write(kleur.yellow('Cancelled.\\n'))\n return { cancelled: true, options: { targetDir, template, provider, tools, memory, packageManager } }\n }\n\n return {\n cancelled: false,\n options: {\n targetDir: path.resolve(process.cwd(), targetDir),\n template,\n provider,\n tools,\n memory,\n packageManager,\n },\n }\n } catch (err) {\n // ExitPromptError thrown on Ctrl+C\n if ((err as Error).name === 'ExitPromptError') {\n process.stdout.write(kleur.yellow('\\nCancelled.\\n'))\n return { cancelled: true, options: { targetDir: '', template: 'react' } }\n }\n throw err\n }\n}\n\nexport function printNextSteps(options: InitCommandOptions): void {\n const dir = path.relative(process.cwd(), options.targetDir) || '.'\n const pm = options.packageManager ?? 'pnpm'\n const installCmd = pm === 'npm' ? 'npm install' : `${pm} install`\n const runCmd = pm === 'npm' ? 'npm run dev' : `${pm} dev`\n\n process.stdout.write('\\n' + kleur.green('✓ Created starter at ') + kleur.bold(dir) + '\\n\\n')\n process.stdout.write(kleur.bold('Next steps:\\n\\n'))\n process.stdout.write(` ${kleur.cyan('cd')} ${dir}\\n`)\n process.stdout.write(` ${kleur.cyan(installCmd)}\\n`)\n if (options.provider && options.provider !== 'demo' && options.provider !== 'ollama') {\n process.stdout.write(\n ` ${kleur.cyan('cp')} .env.example .env ${kleur.dim('# add your API key')}\\n`,\n )\n }\n process.stdout.write(` ${kleur.cyan(runCmd)}\\n\\n`)\n process.stdout.write(kleur.dim(' Docs: https://www.agentskit.io/docs\\n'))\n process.stdout.write(\n kleur.yellow(' ★ Star AgentsKit') +\n kleur.dim(' (solo-built — it helps a lot): https://github.com/AgentsKit-io/agentskit\\n\\n'),\n )\n}\n","import path from 'node:path'\nimport type { Command } from 'commander'\nimport { writeStarterProject } from '../init'\nimport type { StarterKind, Provider, ToolKind, MemoryKind, PackageManager } from '../init'\nimport { runInteractiveInit, printNextSteps } from '../init-interactive'\n\nexport function registerInitCommand(program: Command): void {\n program\n .command('init')\n .description('Generate a starter project. Run with no flags for interactive mode.')\n .option('--template <template>', 'Starter template (react|nextjs|sveltekit|nuxt|ink|vite-ink|cloudflare-workers|bun|deno-deploy|expo|angular|runtime|multi-agent)')\n .option('--dir <directory>', 'Target directory', 'agentskit-app')\n .option('--provider <provider>', 'LLM provider (openai|anthropic|gemini|ollama|deepseek|grok|kimi|groq|openrouter|demo)')\n .option('--tools <tools>', 'Comma-separated tools (web_search,filesystem,shell)')\n .option('--memory <backend>', 'Memory backend (none|file|sqlite)')\n .option('--pm <packageManager>', 'Package manager (pnpm|npm|yarn|bun)')\n .option('--force', 'Overwrite generated files in a non-empty target directory')\n .option('-y, --yes', 'Skip interactive prompts; use flag values + defaults')\n .action(async (rawOptions) => {\n const isCi = !process.stdout.isTTY || rawOptions.yes || rawOptions.template\n let resolved: Parameters<typeof writeStarterProject>[0]\n\n if (isCi) {\n const template = (rawOptions.template ?? 'react') as StarterKind\n resolved = {\n targetDir: path.resolve(process.cwd(), rawOptions.dir),\n template,\n provider: (rawOptions.provider ?? 'demo') as Provider,\n tools: rawOptions.tools\n ? (rawOptions.tools.split(',').map((t: string) => t.trim()) as ToolKind[])\n : [],\n memory: (rawOptions.memory ?? 'none') as MemoryKind,\n packageManager: (rawOptions.pm ?? 'pnpm') as PackageManager,\n force: Boolean(rawOptions.force),\n }\n } else {\n const result = await runInteractiveInit({\n dir: rawOptions.dir,\n template: rawOptions.template as StarterKind | undefined,\n })\n if (result.cancelled) {\n process.exit(0)\n }\n resolved = { ...result.options, force: Boolean(rawOptions.force) }\n }\n\n const overwritten = (await writeStarterProject(resolved)) ?? []\n\n if (isCi) {\n process.stdout.write(\n `Created ${resolved.template} starter in ${path.relative(process.cwd(), resolved.targetDir) || '.'}\\n` +\n (overwritten.length > 0 ? `Overwritten: ${overwritten.join(', ')}\\n` : '') +\n `★ Star AgentsKit (solo-built — it helps a lot): https://github.com/AgentsKit-io/agentskit\\n`,\n )\n } else {\n printNextSteps(resolved)\n if (overwritten.length > 0) {\n process.stdout.write(`Overwritten: ${overwritten.join(', ')}\\n`)\n }\n }\n })\n}\n","import type { Command } from 'commander'\nimport { runDoctor, renderReport } from '../doctor'\nimport { DEFAULT_DOCTOR_PROVIDERS } from '../provider-registry'\n\nexport function registerDoctorCommand(program: Command): void {\n program\n .command('doctor')\n .description('Diagnose your AgentsKit environment.')\n .option('--no-network', 'Skip provider reachability checks')\n .option(\n '--providers <providers>',\n `Comma-separated providers to check (default: ${DEFAULT_DOCTOR_PROVIDERS.join(',')})`,\n )\n .option('--json', 'Emit JSON instead of formatted output')\n .action(async (options) => {\n const providers = options.providers\n ? options.providers.split(',').map((p: string) => p.trim()).filter(Boolean)\n : undefined\n\n const report = await runDoctor({\n providers,\n noNetwork: options.network === false,\n })\n\n if (options.json) {\n process.stdout.write(JSON.stringify(report, null, 2) + '\\n')\n } else {\n process.stdout.write(renderReport(report, { color: process.stdout.isTTY }))\n }\n\n if (report.fail > 0) process.exit(1)\n })\n}\n","import type { Command } from 'commander'\nimport { startDev } from '../dev'\n\nexport function registerDevCommand(program: Command): void {\n program\n .command('dev [entry]')\n .description('Run an entry file with hot-reload on file changes.')\n .option('--watch <globs>', 'Comma-separated glob patterns to watch')\n .option('--ignore <globs>', 'Comma-separated glob patterns to ignore')\n .option('--debounce <ms>', 'Debounce window before restart', '200')\n .action(async (positional: string | undefined, options) => {\n const entry = positional ?? 'src/index.ts'\n const watch = options.watch\n ? (options.watch as string).split(',').map((s: string) => s.trim()).filter(Boolean)\n : undefined\n const ignore = options.ignore\n ? (options.ignore as string).split(',').map((s: string) => s.trim()).filter(Boolean)\n : undefined\n\n try {\n const controller = startDev({\n entry,\n watch,\n ignore,\n debounceMs: Number(options.debounce) || 200,\n })\n await controller.done\n } catch (err) {\n process.stderr.write(`Error: ${(err as Error).message}\\n`)\n process.exit(1)\n }\n })\n}\n","import { mkdirSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport path from 'node:path'\nimport type { Command } from 'commander'\nimport { loadConfig, redactConfig } from '../config'\n\nexport function registerConfigCommand(program: Command): void {\n program\n .command('config')\n .description('Show or scaffold the AgentsKit config.')\n .argument(\n '[action]',\n 'Action: \"init\" to create a template, \"show\" to print the merged config.',\n 'show',\n )\n .option('--global', 'Write/read the global config at ~/.agentskit/config.json (default)')\n .option('--local', 'Write/read a project-level .agentskit.config.json in the current directory')\n .option('--force', 'Overwrite an existing config file')\n .action(async (action: string, options) => {\n const isLocal = Boolean(options.local)\n const targetPath = isLocal\n ? path.join(process.cwd(), '.agentskit.config.json')\n : path.join(homedir(), '.agentskit', 'config.json')\n\n if (action === 'show') {\n const config = await loadConfig()\n process.stdout.write(JSON.stringify(redactConfig(config ?? {}), null, 2) + '\\n')\n return\n }\n\n if (action !== 'init') {\n process.stderr.write(`Unknown action: ${action}. Use \"init\" or \"show\".\\n`)\n process.exit(2)\n }\n\n const template = {\n defaults: {\n provider: 'openai',\n baseUrl: 'https://openrouter.ai/api',\n apiKeyEnv: 'OPENROUTER_API_KEY',\n model: 'openai/gpt-oss-120b:free',\n tools: 'web_search,fetch_url',\n },\n }\n\n mkdirSync(path.dirname(targetPath), { recursive: true })\n // `wx` fails if the file exists — atomic create that closes the\n // exists-then-write race. `w` overwrites only with --force.\n try {\n writeFileSync(targetPath, JSON.stringify(template, null, 2) + '\\n', {\n flag: options.force ? 'w' : 'wx',\n })\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'EEXIST') {\n process.stderr.write(\n `Config already exists at ${targetPath}. Re-run with --force to overwrite.\\n`,\n )\n process.exit(1)\n }\n throw err\n }\n process.stdout.write(\n `Wrote ${targetPath}\\n` +\n `Edit it to taste, then run:\\n agentskit chat\\n` +\n `(flags on the CLI still win over config values.)\\n`,\n )\n })\n}\n","import type { Command } from 'commander'\nimport { startTunnel } from '../tunnel'\n\nexport function registerTunnelCommand(program: Command): void {\n program\n .command('tunnel <port>')\n .description('Open a public URL pointing to a local port (great for webhooks).')\n .option('--subdomain <name>', 'Hint for a stable subdomain (provider may decline)')\n .option('--host <host>', 'Local hostname', 'localhost')\n .action(async (port: string, options) => {\n const portNum = Number(port)\n if (Number.isNaN(portNum) || portNum < 1 || portNum > 65535) {\n process.stderr.write(`Error: invalid port: ${port}\\n`)\n process.exit(2)\n }\n try {\n const controller = await startTunnel({\n port: portNum,\n subdomain: options.subdomain,\n host: options.host,\n })\n await controller.done\n } catch (err) {\n process.stderr.write(`Error: ${(err as Error).message}\\n`)\n process.exit(1)\n }\n })\n}\n","import type { Command } from 'commander'\nimport { loadConfig } from '../config'\nimport { buildRagFromConfig, indexSources, type RagConfig } from '../extensibility/rag'\n\nexport function registerRagCommand(program: Command): void {\n const rag = program.command('rag').description('Retrieval-augmented generation utilities.')\n\n rag\n .command('index')\n .description('Index files referenced by config.rag.sources into the vector store.')\n .option('--source <glob>', 'Glob to index (overrides config.rag.sources; repeatable)',\n (value: string, prev: string[] = []) => [...prev, value],\n [])\n .action(async (options) => {\n const config = await loadConfig()\n const rawConfig = (config as unknown as { rag?: RagConfig })?.rag\n const overrideSources = options.source as string[]\n const ragConfig: RagConfig = {\n ...(rawConfig ?? {}),\n sources: overrideSources.length > 0 ? overrideSources : rawConfig?.sources ?? [],\n }\n if (!ragConfig.sources || ragConfig.sources.length === 0) {\n process.stderr.write('No RAG sources configured. Set config.rag.sources or pass --source <glob>.\\n')\n process.exit(1)\n }\n try {\n const instance = buildRagFromConfig({ config: ragConfig })\n const result = await indexSources(instance, ragConfig)\n process.stdout.write(\n `Indexed ${result.documentCount} document${result.documentCount === 1 ? '' : 's'}.\\n`,\n )\n for (const source of result.sources) {\n process.stdout.write(` • ${source}\\n`)\n }\n } catch (err) {\n process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\\n`)\n process.exit(1)\n }\n })\n}\n","import type { AgentSchema, AgentSchemaTool } from '@agentskit/core/agent-schema'\n\nexport interface ScaffoldFile {\n path: string\n content: string\n}\n\nfunction snakeToCamel(name: string): string {\n return name.replace(/[-_](\\w)/g, (_, c: string) => c.toUpperCase())\n}\n\nfunction toolStub(tool: AgentSchemaTool): string {\n const fnName = snakeToCamel(tool.name)\n const schema = tool.schema ? JSON.stringify(tool.schema, null, 2) : '{ type: \"object\", properties: {} }'\n return `import { defineTool } from '@agentskit/core'\n\n/**\n * ${tool.description ?? tool.name}\n * ${tool.implementation ? `\\n * Implementation hint: ${tool.implementation}` : ''}\n */\nexport const ${fnName} = defineTool({\n name: '${tool.name}',\n description: ${JSON.stringify(tool.description ?? '')},\n schema: ${schema} as const,\n ${tool.requiresConfirmation ? 'requiresConfirmation: true,' : ''}\n async execute(args) {\n // TODO: implement ${tool.name}\n return { args }\n },\n})\n`\n}\n\nfunction indexTs(schema: AgentSchema): string {\n const toolImports = (schema.tools ?? [])\n .map(t => `import { ${snakeToCamel(t.name)} } from './tools/${t.name}'`)\n .join('\\n')\n const toolList = (schema.tools ?? []).map(t => snakeToCamel(t.name)).join(', ')\n return `import { createRuntime } from '@agentskit/runtime'\n${toolImports}\n\nexport const agent = {\n name: '${schema.name}',\n systemPrompt: ${JSON.stringify(schema.systemPrompt ?? '')},\n tools: [${toolList}],\n}\n\nexport function createAgent(adapter: Parameters<typeof createRuntime>[0]['adapter']) {\n return createRuntime({\n adapter,\n systemPrompt: agent.systemPrompt,\n tools: agent.tools,\n })\n}\n`\n}\n\nfunction readme(schema: AgentSchema): string {\n const lines: string[] = []\n lines.push(`# ${schema.name}`)\n lines.push('')\n if (schema.description) lines.push(schema.description, '')\n lines.push(`## Model`)\n lines.push('')\n lines.push(`- Provider: \\`${schema.model.provider}\\``)\n if (schema.model.model) lines.push(`- Model: \\`${schema.model.model}\\``)\n lines.push('')\n if (schema.tools && schema.tools.length > 0) {\n lines.push('## Tools')\n lines.push('')\n for (const t of schema.tools) {\n lines.push(`- \\`${t.name}\\` — ${t.description ?? ''}`)\n }\n lines.push('')\n }\n if (schema.skills && schema.skills.length > 0) {\n lines.push('## Skills')\n lines.push('')\n for (const s of schema.skills) lines.push(`- ${s}`)\n lines.push('')\n }\n lines.push('## Generated by')\n lines.push('')\n lines.push('`npx agentskit ai \"<description>\"`')\n lines.push('')\n return lines.join('\\n')\n}\n\n/**\n * Render an `AgentSchema` into the set of files a project needs:\n * `agent.json`, `agent.ts` (runtime wrapper), tool stubs, and a\n * README. Returns the files without touching disk — callers decide\n * where to write.\n */\nexport function scaffoldAgent(schema: AgentSchema): ScaffoldFile[] {\n const files: ScaffoldFile[] = [\n { path: 'agent.json', content: JSON.stringify(schema, null, 2) + '\\n' },\n { path: 'agent.ts', content: indexTs(schema) },\n { path: 'README.md', content: readme(schema) },\n ]\n for (const tool of schema.tools ?? []) {\n files.push({ path: `tools/${tool.name}.ts`, content: toolStub(tool) })\n }\n return files\n}\n\nexport async function writeScaffold(\n files: ScaffoldFile[],\n outDir: string,\n opts: { overwrite?: boolean } = {},\n): Promise<string[]> {\n const { writeFile, mkdir, access } = await import('node:fs/promises')\n const { dirname, join } = await import('node:path')\n const written: string[] = []\n for (const f of files) {\n const full = join(outDir, f.path)\n await mkdir(dirname(full), { recursive: true })\n if (!opts.overwrite) {\n try {\n await access(full)\n continue // skip existing\n } catch {\n // file does not exist — proceed\n }\n }\n await writeFile(full, f.content, 'utf8')\n written.push(f.path)\n }\n return written\n}\n","import type { AdapterFactory, AdapterRequest, Message } from '@agentskit/core'\nimport { validateAgentSchema, type AgentSchema } from '@agentskit/core/agent-schema'\n\nexport type AgentPlanner = (description: string) => Promise<AgentSchema>\n\nconst PLANNER_SYSTEM_PROMPT = `You design AI agents for the AgentsKit framework.\nGiven a user's plain-language description, return a single JSON object\nmatching the AgentsKit AgentSchema type. Do not include commentary or\nmarkdown fences — emit raw JSON only.\n\nSchema:\n{\n \"name\": \"kebab-or-snake-case\",\n \"description\": \"short summary\",\n \"systemPrompt\": \"you are...\",\n \"model\": { \"provider\": \"anthropic\"|\"openai\"|\"gemini\"|..., \"model\": \"...\" },\n \"tools\": [{ \"name\": \"search\", \"description\": \"...\", \"schema\": {...}, \"implementation\": \"fetch('/api/search?q=...')\" }],\n \"memory\": { \"kind\": \"inMemory\"|\"localStorage\", \"key\": \"...\" },\n \"skills\": [\"researcher\", \"critic\"]\n}\n\nPrefer fewer well-scoped tools over many overlapping ones. Name tools\nin snake_case.`\n\nfunction extractJson(text: string): string {\n const fenced = text.match(/```(?:json)?\\s*([\\s\\S]+?)```/)\n const raw = fenced?.[1] ?? text\n const start = raw.indexOf('{')\n const end = raw.lastIndexOf('}')\n if (start < 0 || end <= start) throw new Error('Planner response did not contain a JSON object')\n return raw.slice(start, end + 1)\n}\n\n/**\n * Turn an `AdapterFactory` into an `AgentPlanner`. The planner drives\n * the model with a fixed system prompt that asks for a JSON AgentSchema,\n * then validates the result.\n */\nexport function createAdapterPlanner(adapter: AdapterFactory): AgentPlanner {\n return async (description: string) => {\n const messages: Message[] = [\n { id: 'sys', role: 'system', content: PLANNER_SYSTEM_PROMPT, status: 'complete', createdAt: new Date(0) },\n { id: 'user', role: 'user', content: description, status: 'complete', createdAt: new Date(0) },\n ]\n const request: AdapterRequest = { messages, context: { temperature: 0 } }\n const source = adapter.createSource(request)\n let text = ''\n for await (const chunk of source.stream()) {\n if (chunk.type === 'text' && chunk.content) text += chunk.content\n }\n const json = extractJson(text)\n return validateAgentSchema(JSON.parse(json))\n }\n}\n","import type { Command } from 'commander'\nimport { writeScaffold, scaffoldAgent, createAdapterPlanner } from '../ai'\nimport { resolveChatProvider } from '../providers'\n\nexport function registerAiCommand(program: Command): void {\n program\n .command('ai <description...>')\n .description('Generate an agent (config + tools + skill wiring) from a natural-language description.')\n .option('-o, --out <dir>', 'Output directory', './my-agent')\n .option('--provider <provider>', 'Planner provider (openai | anthropic | ...)', 'anthropic')\n .option('--model <model>', 'Planner model id')\n .option('--api-key <key>', 'API key (falls back to env)')\n .option('--base-url <url>', 'Override base URL (for OpenAI-compatible endpoints)')\n .option('--overwrite', 'Overwrite existing files', false)\n .option('--dry-run', 'Print the plan + files without writing', false)\n .action(async (descriptionWords: string[], options) => {\n const description = descriptionWords.join(' ').trim()\n if (!description) {\n process.stderr.write('agentskit ai: missing description.\\n')\n process.exit(1)\n }\n\n const resolved = resolveChatProvider({\n provider: options.provider,\n model: options.model,\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n })\n const planner = createAdapterPlanner(resolved.adapter)\n\n process.stderr.write(`Planning agent for: \"${description}\"\\n`)\n const schema = await planner(description)\n const files = scaffoldAgent(schema)\n\n if (options.dryRun) {\n process.stdout.write(JSON.stringify({ schema, files: files.map(f => f.path) }, null, 2) + '\\n')\n return\n }\n\n const written = await writeScaffold(files, options.out, { overwrite: options.overwrite })\n process.stderr.write(`Wrote ${written.length} file(s) to ${options.out}\\n`)\n for (const f of written) process.stderr.write(` + ${f}\\n`)\n })\n}\n","/**\n * `agentskit flow` — visual YAML editor for durable DAGs.\n *\n * Subcommands:\n * • `validate <file>` — parse the YAML/JSON, type-check the DAG, report\n * duplicate ids, missing handlers, unknown deps, and cycles.\n * • `render <file>` — emit a Mermaid `flowchart TD` to stdout. The\n * visual editor's preview pane consumes the same output.\n * • `run <file>` — compile + execute. Handler registry is loaded\n * from `--registry <module>`; the module's default export must be a\n * `FlowRegistry`. With `--store <path>`, the durable step log is\n * persisted as JSONL — pass the same `--run-id` to resume.\n */\n\nimport { readFile } from 'node:fs/promises'\nimport { resolve as resolvePath } from 'node:path'\nimport { pathToFileURL } from 'node:url'\nimport { parse as parseYaml } from 'yaml'\nimport type { Command } from 'commander'\nimport {\n compileFlow,\n createFileStepLog,\n flowToMermaid,\n validateFlow,\n type FlowDefinition,\n type FlowRegistry,\n type FlowRunEvent,\n type StepLogStore,\n} from '@agentskit/runtime'\n\nasync function loadDefinition(file: string): Promise<FlowDefinition> {\n const raw = await readFile(resolvePath(file), 'utf8')\n const parsed = file.endsWith('.json') ? JSON.parse(raw) : parseYaml(raw)\n if (!parsed || typeof parsed !== 'object') throw new Error('flow file must be an object')\n const def = parsed as FlowDefinition\n if (!def.name || !Array.isArray(def.nodes)) {\n throw new Error('flow file must have `name` and `nodes[]`')\n }\n return def\n}\n\nasync function loadRegistry(modulePath: string): Promise<FlowRegistry> {\n const url = pathToFileURL(resolvePath(modulePath)).href\n const mod = (await import(url)) as { default?: FlowRegistry; registry?: FlowRegistry }\n const registry = mod.default ?? mod.registry\n if (!registry || typeof registry !== 'object') {\n throw new Error(`registry module \"${modulePath}\" must default-export a FlowRegistry`)\n }\n return registry\n}\n\nexport function registerFlowCommand(program: Command): void {\n const flow = program.command('flow').description('Compile and run visual YAML flows as durable DAGs.')\n\n flow\n .command('validate <file>')\n .description('Type-check a flow file: ids, handlers (when --registry given), deps, cycles.')\n .option('--registry <module>', 'JS/TS module exporting FlowRegistry as default')\n .action(async (file: string, options: { registry?: string }) => {\n try {\n const def = await loadDefinition(file)\n const registry = options.registry ? await loadRegistry(options.registry) : undefined\n const result = validateFlow(def, registry)\n if (result.ok) {\n process.stdout.write(`flow \"${def.name}\" ok — ${result.order.length} node(s), order: ${result.order.join(' → ')}\\n`)\n return\n }\n for (const issue of result.issues) {\n process.stderr.write(` ✗ [${issue.code}] ${issue.message}\\n`)\n }\n process.exit(1)\n } catch (err) {\n process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\\n`)\n process.exit(1)\n }\n })\n\n flow\n .command('render <file>')\n .description('Emit a Mermaid flowchart for the flow.')\n .action(async (file: string) => {\n try {\n const def = await loadDefinition(file)\n process.stdout.write(flowToMermaid(def) + '\\n')\n } catch (err) {\n process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\\n`)\n process.exit(1)\n }\n })\n\n flow\n .command('run <file>')\n .description('Compile and execute a flow with a handler registry.')\n .requiredOption('--registry <module>', 'JS/TS module exporting FlowRegistry as default')\n .option('--input <json>', 'JSON string passed to handlers as ctx.input')\n .option('--store <path>', 'Persist durable step log as JSONL at <path>')\n .option('--run-id <id>', 'Resume a previous run by reusing its id')\n .option('--max-attempts <n>', 'Retries per node (default 1)', '1')\n .option('--retry-delay <ms>', 'Delay between attempts in ms', '0')\n .option('--verbose', 'Stream node events to stderr')\n .action(async (file: string, options: {\n registry: string\n input?: string\n store?: string\n runId?: string\n maxAttempts: string\n retryDelay: string\n verbose?: boolean\n }) => {\n try {\n const def = await loadDefinition(file)\n const registry = await loadRegistry(options.registry)\n const compiled = compileFlow({ definition: def, registry })\n const input = options.input ? JSON.parse(options.input) : undefined\n const store: StepLogStore | undefined = options.store\n ? await createFileStepLog(resolvePath(options.store))\n : undefined\n const onEvent = options.verbose\n ? (e: FlowRunEvent) => process.stderr.write(JSON.stringify(e) + '\\n')\n : undefined\n const outputs = await compiled.run(input, {\n runId: options.runId,\n store,\n maxAttempts: Number(options.maxAttempts),\n retryDelayMs: Number(options.retryDelay),\n onEvent,\n })\n process.stdout.write(JSON.stringify(outputs, null, 2) + '\\n')\n } catch (err) {\n process.stderr.write(`Error: ${err instanceof Error ? err.message : String(err)}\\n`)\n process.exit(1)\n }\n })\n}\n","import { readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport { validatePIITaxonomy, type TaxonomyValidationResult } from '@agentskit/core/security'\n\nexport interface LintReport {\n file: string\n result: TaxonomyValidationResult\n ruleCount: number\n}\n\nexport function lintTaxonomyFile(filePath: string): LintReport {\n const absolute = resolve(filePath)\n let raw: string\n try {\n raw = readFileSync(absolute, 'utf8')\n } catch (err) {\n return {\n file: absolute,\n ruleCount: 0,\n result: {\n ok: false,\n issues: [{ index: -1, path: '', message: `cannot read file: ${(err as Error).message}` }],\n },\n }\n }\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch (err) {\n return {\n file: absolute,\n ruleCount: 0,\n result: {\n ok: false,\n issues: [{ index: -1, path: '', message: `invalid JSON: ${(err as Error).message}` }],\n },\n }\n }\n\n const result = validatePIITaxonomy(parsed)\n const ruleCount =\n parsed && typeof parsed === 'object' && Array.isArray((parsed as { rules?: unknown }).rules)\n ? ((parsed as { rules: unknown[] }).rules.length)\n : 0\n return { file: absolute, result, ruleCount }\n}\n\nexport function renderLintReport(report: LintReport, opts: { color?: boolean } = {}): string {\n const { color = false } = opts\n const red = (s: string) => (color ? `\u001b[31m${s}\u001b[0m` : s)\n const green = (s: string) => (color ? `\u001b[32m${s}\u001b[0m` : s)\n const dim = (s: string) => (color ? `\u001b[2m${s}\u001b[0m` : s)\n\n const lines: string[] = []\n lines.push(dim(report.file))\n if (report.result.ok) {\n lines.push(green(`✓ valid · ${report.ruleCount} rule${report.ruleCount === 1 ? '' : 's'}`))\n } else {\n lines.push(red(`✗ ${report.result.issues.length} issue${report.result.issues.length === 1 ? '' : 's'}`))\n for (const issue of report.result.issues) {\n lines.push(` ${red('•')} ${issue.path || '<root>'}: ${issue.message}`)\n }\n }\n return `${lines.join('\\n')}\\n`\n}\n","import type { Command } from 'commander'\nimport { lintTaxonomyFile, renderLintReport } from '../pii'\n\nexport function registerPiiCommand(program: Command): void {\n const pii = program\n .command('pii')\n .description('Inspect and validate PII taxonomies.')\n\n pii\n .command('lint <file...>')\n .description('Validate one or more PII taxonomy JSON files.')\n .option('--json', 'Emit JSON instead of formatted output')\n .action((files: string[], options: { json?: boolean }) => {\n const reports = files.map(lintTaxonomyFile)\n const failed = reports.filter(r => !r.result.ok).length\n\n if (options.json) {\n process.stdout.write(JSON.stringify(reports, null, 2) + '\\n')\n } else {\n for (const report of reports) {\n process.stdout.write(renderLintReport(report, { color: process.stdout.isTTY }))\n }\n if (failed > 0) {\n process.stderr.write(`\\n${failed} of ${reports.length} taxonomy file${reports.length === 1 ? '' : 's'} failed validation\\n`)\n }\n }\n\n if (failed > 0) process.exit(1)\n })\n}\n","/**\n * Cursor `.cursor/rules/agentskit.mdc` — applied to every file in the\n * workspace. Teaches Cursor the AgentsKit conventions so generated\n * code respects named-export-only, package boundaries, and the\n * for-agents/* manifest without extra prompting.\n */\nexport const CURSOR_RULE = `---\ndescription: AgentsKit conventions — apply to every file in this workspace\nglobs: [\"**/*.ts\", \"**/*.tsx\"]\nalwaysApply: true\n---\n\n# AgentsKit project rules\n\nWhen writing or editing TypeScript in this workspace, follow these rules. They\nare non-negotiable and enforced by CI.\n\n## Imports\n\n- Use **named exports only**. No \\`export default\\`.\n- Import from package roots: \\`@agentskit/core\\`, \\`@agentskit/runtime\\`, \\`@agentskit/react\\`,\n \\`@agentskit/ink\\`, \\`@agentskit/adapters\\`, \\`@agentskit/tools\\`, \\`@agentskit/skills\\`,\n \\`@agentskit/memory\\`, \\`@agentskit/rag\\`, \\`@agentskit/observability\\`, \\`@agentskit/eval\\`,\n \\`@agentskit/sandbox\\`, \\`@agentskit/cli\\`, \\`@agentskit/templates\\`.\n- For tools subpaths, use \\`@agentskit/tools/integrations\\`, \\`@agentskit/tools/mcp\\`,\n \\`@agentskit/tools/mcp-devtools\\`.\n\n## Types\n\n- TypeScript strict mode is on. **Do not use \\`any\\`** — use \\`unknown\\` and narrow.\n- Headless React components: no hardcoded styles, use \\`data-ak-*\\` attributes.\n\n## Errors\n\n- Never \\`throw new Error(...)\\` inside package source. Use the typed errors from\n \\`@agentskit/core\\`: \\`AdapterError\\`, \\`ToolError\\`, \\`MemoryError\\`, \\`RuntimeError\\`,\n \\`SandboxError\\`, \\`SkillError\\`, \\`ConfigError\\`. Pair with \\`ErrorCodes.<...>\\`.\n\n## Tests\n\n- vitest. Place tests under \\`packages/<pkg>/tests/\\` mirroring \\`src/\\`.\n- E2E lives in \\`apps/example-*\\` with Playwright.\n\n## Versioning\n\n- Every PR with a behavior change requires a Changeset (\\`pnpm changeset\\`).\n\n## Where to look first\n\n- Architecture, contracts, ADRs: \\`docs/architecture/adrs/\\`\n- Per-package conventions: \\`packages/<pkg>/CONVENTIONS.md\\`\n- Agent-facing index: \\`AGENTS.md\\` and \\`apps/docs-next/content/docs/for-agents/\\`\n`\n","/**\n * Windsurf `.windsurfrules` — plain markdown loaded into Cascade's\n * context for every chat in this workspace.\n */\nexport const WINDSURF_RULE = `# AgentsKit project rules (read first)\n\nThis workspace builds AgentsKit — a JavaScript agent toolkit with a 10 KB core,\nsix formal contracts, and ~19 plug-and-play packages. When generating or\nediting code, follow these rules — they are enforced by CI.\n\n## Imports\n- **Named exports only.** No \\`export default\\`.\n- Import from package roots (\\`@agentskit/core\\`, \\`@agentskit/runtime\\`, \\`@agentskit/react\\`, etc.).\n- Tools subpaths: \\`@agentskit/tools/integrations\\`, \\`@agentskit/tools/mcp\\`, \\`@agentskit/tools/mcp-devtools\\`.\n\n## Types\n- Strict mode TypeScript. **No \\`any\\`** — use \\`unknown\\` and narrow.\n\n## Errors\n- **Do not** \\`throw new Error(...)\\` in package source. Use \\`AdapterError\\` /\n \\`ToolError\\` / \\`MemoryError\\` / \\`RuntimeError\\` / \\`SandboxError\\` / \\`SkillError\\` /\n \\`ConfigError\\` from \\`@agentskit/core\\`, paired with \\`ErrorCodes\\`.\n\n## Tests\n- vitest. Tests live in \\`packages/<pkg>/tests/\\` mirroring \\`src/\\`.\n- E2E lives in \\`apps/example-*\\` with Playwright.\n\n## Versioning\n- Every behavior change needs a Changeset (\\`pnpm changeset\\`).\n\n## Read first\n- \\`AGENTS.md\\` — universal agent guidance\n- \\`apps/docs-next/content/docs/for-agents/\\` — per-package agent docs\n- \\`docs/architecture/adrs/\\` — six core contracts (Adapter, Tool, Memory, Retriever, Skill, Runtime)\n- \\`packages/<pkg>/CONVENTIONS.md\\` — per-package contribution rules\n`\n","/**\n * Codex / Aider profile block — appended to the existing AGENTS.md\n * via `agentskit rules codex`. Codex and Aider both read AGENTS.md\n * but benefit from a structured profile listing the test runner,\n * allowed commands, and recommended models.\n */\nexport const CODEX_PROFILE = `<!-- agentskit-codex-profile:start -->\n## Codex / Aider profile\n\nStructured hints for CLI coding agents (OpenAI Codex, Aider, Claude Code,\nCursor) running against this workspace. Update via \\`agentskit rules codex\\`.\n\n\\`\\`\\`yaml\n# AgentsKit Codex profile v1\nprofile: agentskit\nruntime: node-25\npackage_manager: pnpm\ntest_runner: vitest\nbuild_runner: turborepo\n\nallowed_commands:\n - pnpm install\n - pnpm build\n - pnpm test\n - pnpm lint\n - pnpm changeset\n - pnpm --filter @agentskit/* test\n - pnpm --filter @agentskit/* lint\n - pnpm --filter @agentskit/* build\n\nrestricted_paths:\n - packages/core/src/errors.ts # Touch carefully — every package depends on the typed errors here.\n - packages/core/src/security/ # Security-sensitive — small surface, requires review.\n - docs/architecture/adrs/ # Contract changes need a new ADR + major bump.\n\nmodels_recommended:\n - claude-sonnet-4-6 # Default — long context, fast.\n - gpt-5 # Strong reasoning for refactors / cross-package work.\n - claude-opus-4-7 # Heavy refactors, contract redesigns.\n\ninvariants:\n core_max_kb_gzip: 10\n no_default_exports: true\n strict_typescript: true\n no_bare_throw_new_error: true\n named_exports_only: true\n changeset_required_for_behavior_changes: true\n\nread_first:\n - AGENTS.md\n - apps/docs-next/content/docs/for-agents/\n - docs/architecture/adrs/\n\\`\\`\\`\n<!-- agentskit-codex-profile:end -->\n`\n","/**\n * Claude Code outputs split into two distinct surfaces:\n *\n * - **Skill bundle** at `.claude/skills/agentskit/SKILL.md` — the\n * Anthropic skill-spec file. Skills don't auto-register slash\n * commands; they shape the conceptual capability the agent picks\n * up when relevant.\n *\n * - **Project-scoped slash commands** at `.claude/commands/*.md` —\n * the actual `/<name>` invocations Claude Code surfaces in the\n * palette. These live alongside (not inside) the skill bundle.\n *\n * Both are real Claude Code conventions; they live at different paths\n * and serve different purposes. Bundling slash commands inside a skill\n * folder (as an earlier draft did) silently produces files Claude\n * Code never reads.\n */\n\nexport interface ClaudeCodeFile {\n /** Path relative to the surface root. */\n path: string\n contents: string\n}\n\nexport const CLAUDE_CODE_SKILL: ClaudeCodeFile[] = [\n {\n path: 'SKILL.md',\n contents: `---\nname: agentskit\ndescription: Scaffold AgentsKit projects, add tools/skills, run doctor, and inspect the runtime — wraps the agentskit CLI.\n---\n\n# AgentsKit\n\nSkill bundle for working with the AgentsKit toolkit from inside Claude Code.\n\nPair this skill with the project-scoped slash commands at \\`.claude/commands/agentskit-*.md\\`:\n\n- \\`/agentskit-new-agent\\` — interactive scaffold (\\`agentskit init\\`)\n- \\`/agentskit-doctor\\` — diagnose the local environment (\\`agentskit doctor\\`)\n- \\`/agentskit-add-tool\\` — add a tool integration template\n- \\`/agentskit-add-skill\\` — add a skill template\n- \\`/agentskit-lint-pii\\` — validate a PII taxonomy file\n- \\`/agentskit-rules\\` — write \\`.cursor/rules\\` / \\`.windsurfrules\\` / Codex profile\n\nWhen the user is inside an AgentsKit workspace, prefer the slash commands over\nhand-rolling shell invocations — they share the canonical defaults.\n\nFor convention reminders (named exports only, no bare throw, etc.), read\n\\`AGENTS.md\\` at the workspace root.\n`,\n },\n]\n\nexport const CLAUDE_CODE_SLASH_COMMANDS: ClaudeCodeFile[] = [\n {\n path: 'agentskit-new-agent.md',\n contents: `---\ndescription: Scaffold a new AgentsKit project (interactive)\nallowed-tools: Bash(npx agentskit init:*)\n---\n\nRun \\`npx @agentskit/cli init\\` interactively in the user's chosen directory.\nAfter scaffold completes, summarise the layout (templates created, next\ncommands the user should run).\n`,\n },\n {\n path: 'agentskit-doctor.md',\n contents: `---\ndescription: Run the AgentsKit environment doctor and summarise findings\nallowed-tools: Bash(npx agentskit doctor:*)\n---\n\nRun \\`npx @agentskit/cli doctor\\` in the workspace root. Format the output\ninto pass / warn / fail buckets and propose a fix for each fail / warn.\n`,\n },\n {\n path: 'agentskit-add-tool.md',\n contents: `---\ndescription: Add a tool template to the current package\n---\n\nAsk the user which tool to add. Use \\`packages/templates/src/blueprints/tool.ts\\`\nto scaffold the file under \\`packages/<pkg>/src/tools/\\`. Update the package's\n\\`src/index.ts\\` to re-export the new tool. Add a vitest mock test under\n\\`packages/<pkg>/tests/\\`.\n`,\n },\n {\n path: 'agentskit-add-skill.md',\n contents: `---\ndescription: Add a skill template to @agentskit/skills\n---\n\nUse \\`packages/templates/src/blueprints/skill.ts\\` to scaffold a new skill\nunder \\`packages/skills/src/\\`. Re-export from the package index. Add a\ngolden-dataset test fixture under \\`packages/skills/tests/\\` (10–50 input/\nexpected examples, per the conventions).\n`,\n },\n {\n path: 'agentskit-lint-pii.md',\n contents: `---\ndescription: Validate a PII taxonomy JSON file\nallowed-tools: Bash(npx agentskit pii lint:*)\n---\n\nAsk the user for a path. Run \\`npx @agentskit/cli pii lint <path>\\` and\ndisplay the report. If issues exist, suggest concrete fixes per the\nissue messages.\n`,\n },\n {\n path: 'agentskit-rules.md',\n contents: `---\ndescription: Write editor rule files (Cursor / Windsurf / Codex / Claude Code)\nallowed-tools: Bash(npx agentskit rules:*)\n---\n\nAsk which editor (or \"all\"). Run the matching:\n- \\`npx @agentskit/cli rules cursor\\`\n- \\`npx @agentskit/cli rules windsurf\\`\n- \\`npx @agentskit/cli rules codex\\`\n- \\`npx @agentskit/cli rules claude-code\\`\n\nAfter writing, summarise which files landed and what each one does.\n`,\n },\n]\n","import { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { dirname, join, resolve } from 'node:path'\nimport { ConfigError, ErrorCodes } from '@agentskit/core'\nimport { CURSOR_RULE } from './rules/cursor'\nimport { WINDSURF_RULE } from './rules/windsurf'\nimport { CODEX_PROFILE } from './rules/codex'\nimport { CLAUDE_CODE_SKILL, CLAUDE_CODE_SLASH_COMMANDS } from './rules/claude-code'\n\nexport type Editor = 'cursor' | 'windsurf' | 'codex' | 'claude-code' | 'all'\n\nexport interface RulesWriteResult {\n editor: Editor\n files: Array<{ path: string; action: 'wrote' | 'skipped' | 'updated' }>\n}\n\nconst CODEX_BLOCK_START = '<!-- agentskit-codex-profile:start -->'\nconst CODEX_BLOCK_END = '<!-- agentskit-codex-profile:end -->'\n\nasync function ensureDir(path: string): Promise<void> {\n await mkdir(dirname(path), { recursive: true })\n}\n\nasync function writeIfChanged(\n absPath: string,\n contents: string,\n force: boolean,\n): Promise<'wrote' | 'skipped' | 'updated'> {\n let existing: string | undefined\n try {\n existing = await readFile(absPath, 'utf8')\n } catch {\n // not present\n }\n if (existing === contents) return 'skipped'\n if (existing !== undefined && !force) {\n // Append-or-update flow handled by callers that need it; default\n // here is to overwrite when contents differ AND force is on.\n return 'skipped'\n }\n await ensureDir(absPath)\n await writeFile(absPath, contents, 'utf8')\n return existing === undefined ? 'wrote' : 'updated'\n}\n\nasync function writeCursor(rootDir: string, force: boolean): Promise<RulesWriteResult['files']> {\n const path = join(rootDir, '.cursor', 'rules', 'agentskit.mdc')\n const action = await writeIfChanged(path, CURSOR_RULE, force)\n return [{ path, action }]\n}\n\nasync function writeWindsurf(rootDir: string, force: boolean): Promise<RulesWriteResult['files']> {\n const path = join(rootDir, '.windsurfrules')\n const action = await writeIfChanged(path, WINDSURF_RULE, force)\n return [{ path, action }]\n}\n\n/**\n * Codex profile is appended to the existing AGENTS.md, replacing any\n * previous profile block delimited by the sentinel comments. If\n * AGENTS.md does not exist, write it with just the profile (deployers\n * are expected to add the rest of the universal-agent guidance).\n *\n * Sentinel parsing rules:\n * - Search the END sentinel only AFTER the START sentinel — prevents\n * a stray `:end -->` inside YAML content from pulling the slice to\n * the wrong position.\n * - Find the LAST end after the start so a duplicate-paste of the\n * block collapses into one rather than half-overwriting.\n * - Refuse to modify if a START sentinel is present without any END\n * after it (file truncated mid-block) — the user has hand-edited\n * something we don't understand and we should not append on top.\n * - Require --force for ANY write to a populated AGENTS.md (in-place\n * block update OR first-time append). AGENTS.md is load-bearing\n * and every codex run on a populated one must be opt-in.\n */\nasync function writeCodex(rootDir: string, force: boolean): Promise<RulesWriteResult['files']> {\n const path = join(rootDir, 'AGENTS.md')\n let existing = ''\n try {\n existing = await readFile(path, 'utf8')\n } catch {\n // not present — write a fresh AGENTS.md with just the profile.\n }\n const startIdx = existing.indexOf(CODEX_BLOCK_START)\n const endIdx =\n startIdx >= 0\n ? existing.lastIndexOf(CODEX_BLOCK_END, existing.length)\n : -1\n if (startIdx >= 0 && endIdx <= startIdx) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `${path}: found agentskit-codex-profile:start sentinel but no matching :end after it — refusing to modify a half-edited block.`,\n hint: 'Restore the closing sentinel or remove the partial block, then re-run.',\n })\n }\n let next: string\n if (startIdx >= 0 && endIdx > startIdx) {\n next =\n existing.slice(0, startIdx) +\n CODEX_PROFILE.trimEnd() +\n existing.slice(endIdx + CODEX_BLOCK_END.length)\n } else if (existing) {\n next = `${existing.replace(/\\s+$/, '')}\\n\\n${CODEX_PROFILE}`\n } else {\n next = CODEX_PROFILE\n }\n if (next === existing) return [{ path, action: 'skipped' }]\n if (existing && !force) {\n return [{ path, action: 'skipped' }]\n }\n await ensureDir(path)\n await writeFile(path, next, 'utf8')\n return [{ path, action: existing ? 'updated' : 'wrote' }]\n}\n\nasync function writeClaudeCode(rootDir: string, force: boolean): Promise<RulesWriteResult['files']> {\n const out: RulesWriteResult['files'] = []\n // Skill bundle (.claude/skills/<name>/SKILL.md) — Claude Code skill format.\n const skillRoot = join(rootDir, '.claude', 'skills', 'agentskit')\n for (const file of CLAUDE_CODE_SKILL) {\n const abs = join(skillRoot, file.path)\n const action = await writeIfChanged(abs, file.contents, force)\n out.push({ path: abs, action })\n }\n // Project-scoped slash commands (.claude/commands/*.md) — Claude Code's\n // actual location for `/<name>` invocations. Skill bundles do not\n // register slash commands automatically; the two surfaces are separate.\n const commandsRoot = join(rootDir, '.claude', 'commands')\n for (const cmd of CLAUDE_CODE_SLASH_COMMANDS) {\n const abs = join(commandsRoot, cmd.path)\n const action = await writeIfChanged(abs, cmd.contents, force)\n out.push({ path: abs, action })\n }\n return out\n}\n\nexport async function writeRules(\n editor: Editor,\n options: { rootDir?: string; force?: boolean } = {},\n): Promise<RulesWriteResult[]> {\n const root = resolve(options.rootDir ?? process.cwd())\n const force = options.force === true\n if (editor === 'all') {\n return [\n { editor: 'cursor', files: await writeCursor(root, force) },\n { editor: 'windsurf', files: await writeWindsurf(root, force) },\n { editor: 'codex', files: await writeCodex(root, force) },\n { editor: 'claude-code', files: await writeClaudeCode(root, force) },\n ]\n }\n switch (editor) {\n case 'cursor':\n return [{ editor, files: await writeCursor(root, force) }]\n case 'windsurf':\n return [{ editor, files: await writeWindsurf(root, force) }]\n case 'codex':\n return [{ editor, files: await writeCodex(root, force) }]\n case 'claude-code':\n return [{ editor, files: await writeClaudeCode(root, force) }]\n }\n}\n","import type { Command } from 'commander'\nimport { writeRules, type Editor } from '../rules'\n\nconst VALID: Editor[] = ['cursor', 'windsurf', 'codex', 'claude-code', 'all']\n\nexport function registerRulesCommand(program: Command): void {\n program\n .command('rules <editor>')\n .description(\n 'Write editor rule files (cursor | windsurf | codex | claude-code | all). Teaches the editor AgentsKit conventions so generated code respects named-export-only, package boundaries, and the for-agents/* manifest.',\n )\n .option('--out <dir>', 'Workspace root to write files into (default: cwd)')\n .option('-f, --force', 'Overwrite existing rule files (codex / claude-code skill always update in place)')\n .action(async (editor: string, options: { out?: string; force?: boolean }) => {\n if (!(VALID as string[]).includes(editor)) {\n process.stderr.write(`unknown editor \"${editor}\". Valid: ${VALID.join(', ')}\\n`)\n process.exit(1)\n }\n try {\n const results = await writeRules(editor as Editor, {\n rootDir: options.out,\n force: options.force === true,\n })\n const counts = { wrote: 0, updated: 0, skipped: 0 }\n for (const { editor: ed, files } of results) {\n process.stdout.write(`\\n[${ed}]\\n`)\n for (const f of files) {\n counts[f.action]++\n process.stdout.write(` ${f.action.padEnd(7)} ${f.path}\\n`)\n }\n }\n process.stdout.write(\n `\\nDone — ${counts.wrote} wrote, ${counts.updated} updated, ${counts.skipped} skipped.\\n`,\n )\n if (counts.skipped > 0 && options.force !== true) {\n process.stdout.write(`(re-run with --force to overwrite skipped files)\\n`)\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n process.stderr.write(`\\nrules failed: ${message}\\n`)\n process.exit(1)\n }\n })\n}\n","/**\n * AgentsKit Registry client — fetches ready-made agents from the registry and\n * copies their source into the user's project (shadcn-style; the user owns the\n * code). Sources, in order:\n * 1. Hosted index — https://registry.agentskit.io/r/<id>.json (meta + inlined sources)\n * 2. Raw GitHub — the registry repo's registry/<id>/ files (works before hosting is live)\n */\nimport { lstat, mkdir, writeFile } from 'node:fs/promises'\nimport { dirname, isAbsolute, join, relative, resolve, sep } from 'node:path'\n\nconst RAW_BASE = 'https://raw.githubusercontent.com/AgentsKit-io/agentskit-registry/main'\n// The committed, prebuilt index (fast path) — served straight from the repo, no\n// separate deploy. Falls back to walking the agent source below.\nconst HOSTED_BASE = `${RAW_BASE}/public/r`\nconst FETCH_TIMEOUT_MS = 15_000\nconst MAX_RESPONSE_BYTES = 2 * 1024 * 1024\nconst MAX_AGENT_FILES = 100\nconst SAFE_ID = /^[a-z0-9]+(?:-[a-z0-9]+)*$/\n\nfunction assertSafeId(id: string): void {\n if (!SAFE_ID.test(id)) throw new Error(`Invalid registry agent id: ${JSON.stringify(id)}`)\n}\n\nfunction assertSafeRelativePath(filePath: string): void {\n if (!filePath || isAbsolute(filePath) || filePath.includes('\\0')) {\n throw new Error(`Invalid registry file path: ${JSON.stringify(filePath)}`)\n }\n const normalized = filePath.replace(/\\\\/g, '/')\n if (normalized.split('/').some(part => part === '..' || part === '')) {\n throw new Error(`Registry file path must stay relative: ${JSON.stringify(filePath)}`)\n }\n}\n\nfunction assertInside(parent: string, child: string): void {\n const rel = relative(resolve(parent), resolve(child))\n if (rel === '..' || rel.startsWith(`..${sep}`) || isAbsolute(rel)) {\n throw new Error(`Registry destination escapes target directory: ${child}`)\n }\n}\n\nasync function assertNoSymlinkAncestors(targetDir: string, baseDir: string): Promise<void> {\n for (const path of [targetDir, baseDir]) {\n try {\n if ((await lstat(resolve(path))).isSymbolicLink()) {\n throw new Error(`Registry destination contains a symlink ancestor: ${resolve(path)}`)\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error\n }\n }\n\n // If the selected base does not exist yet, inspect only its missing-path\n // ancestors until the first existing directory. Do not walk system parents\n // of an already-existing user-selected base (for example /var on macOS).\n let current = resolve(baseDir)\n while (true) {\n try {\n if ((await lstat(current)).isSymbolicLink()) {\n throw new Error(`Registry destination contains a symlink ancestor: ${current}`)\n }\n return\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error\n }\n const parent = dirname(current)\n if (parent === current) return\n current = parent\n }\n}\n\nasync function fetchWithLimits(url: string, fetchImpl: typeof fetch): Promise<Response> {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS)\n try {\n const response = await fetchImpl(url, { signal: controller.signal })\n if (!response.ok) throw new Error(`${response.status} ${response.statusText}`)\n const body = await response.arrayBuffer()\n if (body.byteLength > MAX_RESPONSE_BYTES) {\n throw new Error(`Registry response exceeded ${MAX_RESPONSE_BYTES} bytes`)\n }\n return new Response(body, { status: response.status, headers: response.headers })\n } finally {\n clearTimeout(timer)\n }\n}\n\nexport interface RegistryEnvVar {\n name: string\n description: string\n required?: boolean\n}\n\nexport interface RegistryFile {\n path: string\n content: string\n}\n\nexport interface RegistryAgent {\n id: string\n title: string\n description: string\n category: string\n packages: string[]\n env?: RegistryEnvVar[]\n files: string[]\n sources: RegistryFile[]\n /** draft agents are catalog-only until promoted to validated. */\n status?: 'draft' | 'alpha' | 'validated' | 'deprecated'\n installable?: boolean\n /** Inline skill for `--run` (data only). Null for agents that compose tools. */\n skill?: RegistrySkill | null\n}\n\nexport interface RegistrySkill {\n name: string\n description: string\n systemPrompt: string\n}\n\nexport interface FetchOptions {\n /** Injectable fetch (tests). Defaults to global fetch. */\n fetchImpl?: typeof fetch\n}\n\nasync function getJson(url: string, fetchImpl: typeof fetch): Promise<unknown> {\n const res = await fetchWithLimits(url, fetchImpl)\n return JSON.parse(await res.text())\n}\n\nasync function getText(url: string, fetchImpl: typeof fetch): Promise<string> {\n const res = await fetchWithLimits(url, fetchImpl)\n return res.text()\n}\n\n/** Fetch an agent descriptor with inlined file sources, hosted first then raw GitHub. */\nexport async function fetchAgent(id: string, options: FetchOptions = {}): Promise<RegistryAgent> {\n assertSafeId(id)\n const fetchImpl = options.fetchImpl ?? globalThis.fetch\n try {\n const hosted = (await getJson(`${HOSTED_BASE}/${id}.json`, fetchImpl)) as RegistryAgent\n if (hosted?.sources?.length) return hosted\n throw new Error('hosted entry missing sources')\n } catch {\n // Fallback: read the repo source directly (no hosting required).\n const meta = (await getJson(`${RAW_BASE}/registry/${id}/meta.json`, fetchImpl)) as Omit<\n RegistryAgent,\n 'sources'\n >\n if (!Array.isArray(meta.files) || meta.files.length > MAX_AGENT_FILES) {\n throw new Error(`Registry agent contains too many files (maximum ${MAX_AGENT_FILES})`)\n }\n for (const rel of meta.files) assertSafeRelativePath(rel)\n const sources = await Promise.all(\n meta.files.map(async (rel) => ({\n path: rel,\n content: await getText(`${RAW_BASE}/registry/${id}/${rel}`, fetchImpl),\n })),\n )\n return { ...meta, sources }\n }\n}\n\n/**\n * Resolve an agent's runnable systemPrompt — from the hosted `skill` field, or\n * by extracting the inline skill from the fetched `agent.ts` source (raw-GitHub\n * fallback). Returns null for tool-composing agents (no inline prompt).\n */\nexport function resolveSystemPrompt(agent: RegistryAgent): string | null {\n if (agent.skill?.systemPrompt) return agent.skill.systemPrompt\n const src = agent.sources.find((f) => f.path === 'agent.ts')?.content\n if (!src) return null\n const m = src.match(/systemPrompt:\\s*`((?:\\\\.|[^`\\\\])*)`/)\n return m ? m[1].replace(/\\\\`/g, '`').replace(/\\\\\\$\\{/g, '${') : null\n}\n\nexport interface AddOptions extends FetchOptions {\n /** Directory to write the agent into. Default `./agents`. */\n outDir?: string\n /** Overwrite existing files. Default false. */\n force?: boolean\n /** Injectable writer (tests). */\n writeFileImpl?: (path: string, content: string) => Promise<void>\n /** Injectable existence check (tests). */\n existsImpl?: (path: string) => Promise<boolean>\n}\n\nexport interface AddResult {\n agent: RegistryAgent\n written: string[]\n targetDir: string\n}\n\nasync function defaultExists(path: string): Promise<boolean> {\n const { access } = await import('node:fs/promises')\n try {\n await access(path)\n return true\n } catch {\n return false\n }\n}\n\nfunction assertInstallable(agent: RegistryAgent): void {\n if (agent.status === 'draft' || agent.installable === false) {\n throw new Error(\n `\"${agent.id}\" is a catalog draft — not installable yet. ` +\n `Browse the roadmap at https://registry.agentskit.io/r/catalog.json`,\n )\n }\n if (agent.status === 'alpha') {\n console.warn(`[agentskit] \"${agent.id}\" is alpha — experimental; review before production use.`)\n }\n if (agent.status === 'deprecated') {\n throw new Error(`\"${agent.id}\" is deprecated and no longer installable from the registry.`)\n }\n}\n\n/** Fetch an agent and write its source files into the project. */\nexport async function addAgent(id: string, options: AddOptions = {}): Promise<AddResult> {\n const agent = await fetchAgent(id, options)\n assertInstallable(agent)\n const baseDir = options.outDir ?? 'agents'\n const targetDir = join(baseDir, id)\n assertInside(baseDir, targetDir)\n await assertNoSymlinkAncestors(targetDir, baseDir)\n const exists = options.existsImpl ?? defaultExists\n const write =\n options.writeFileImpl ??\n (async (path: string, content: string) => {\n await mkdir(dirname(path), { recursive: true })\n await writeFile(path, content, 'utf8')\n })\n\n const written: string[] = []\n // Validate and check every destination before writing any file, so a later\n // conflict cannot leave a partially installed agent behind.\n for (const file of agent.sources) {\n assertSafeRelativePath(file.path)\n const dest = join(targetDir, file.path)\n assertInside(targetDir, dest)\n if (!options.force && (await exists(dest))) {\n throw new Error(`${dest} already exists (re-run with --force to overwrite)`)\n }\n }\n for (const file of agent.sources) {\n const dest = join(targetDir, file.path)\n await write(dest, file.content)\n written.push(dest)\n }\n return { agent, written, targetDir }\n}\n\n// ---------------------------------------------------------------------------\n// diff / update — keep a copied agent in sync with the registry (shadcn-style)\n// ---------------------------------------------------------------------------\n\nexport type DiffLine = { type: ' ' | '-' | '+'; text: string }\n\n/** Minimal line-level diff (LCS) — no dependency. */\nexport function lineDiff(a: string, b: string): DiffLine[] {\n const x = a.split('\\n')\n const y = b.split('\\n')\n const m = x.length\n const n = y.length\n const lcs: number[][] = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0))\n for (let i = m - 1; i >= 0; i--) {\n for (let j = n - 1; j >= 0; j--) {\n lcs[i][j] = x[i] === y[j] ? lcs[i + 1][j + 1] + 1 : Math.max(lcs[i + 1][j], lcs[i][j + 1])\n }\n }\n const out: DiffLine[] = []\n let i = 0\n let j = 0\n while (i < m && j < n) {\n if (x[i] === y[j]) {\n out.push({ type: ' ', text: x[i] })\n i++\n j++\n } else if (lcs[i + 1][j] >= lcs[i][j + 1]) {\n out.push({ type: '-', text: x[i++] })\n } else {\n out.push({ type: '+', text: y[j++] })\n }\n }\n while (i < m) out.push({ type: '-', text: x[i++] })\n while (j < n) out.push({ type: '+', text: y[j++] })\n return out\n}\n\nexport interface FileDiff {\n path: string\n status: 'unchanged' | 'modified' | 'missing-local'\n diff?: DiffLine[]\n upstream: string\n}\n\nexport interface DiffAgentOptions extends FetchOptions {\n outDir?: string\n readFileImpl?: (path: string) => Promise<string | null>\n}\n\n/** Compare a locally-copied agent against the registry's current source. */\nexport async function diffAgent(id: string, options: DiffAgentOptions = {}): Promise<{\n agent: RegistryAgent\n targetDir: string\n files: FileDiff[]\n}> {\n const agent = await fetchAgent(id, options)\n const targetDir = join(options.outDir ?? 'agents', id)\n const readLocal =\n options.readFileImpl ??\n (async (p: string) => {\n const { readFile } = await import('node:fs/promises')\n try {\n return await readFile(p, 'utf8')\n } catch {\n return null\n }\n })\n\n const files: FileDiff[] = []\n for (const f of agent.sources) {\n const local = await readLocal(join(targetDir, f.path))\n if (local == null) {\n files.push({ path: f.path, status: 'missing-local', upstream: f.content })\n } else if (local === f.content) {\n files.push({ path: f.path, status: 'unchanged', upstream: f.content })\n } else {\n files.push({ path: f.path, status: 'modified', diff: lineDiff(local, f.content), upstream: f.content })\n }\n }\n return { agent, targetDir, files }\n}\n","/**\n * Project scanner (RFC-0006 D3/D4).\n *\n * Inspects a project directory and produces a {@link ProjectScan}: the UI binding,\n * meta-framework, package manager, TypeScript flag, source dir, import alias,\n * styling, and monorepo signals that `agentskit add` needs when there is no\n * committed `.agentskit/components.json`. Pure + deterministic + dependency-light:\n * all filesystem access goes through an injectable {@link ScanFs}, so it is fully\n * unit-testable with an in-memory tree and never guesses silently — ambiguous\n * signals resolve to `'unknown'`/`null` and surface later in validation.\n */\nimport { join } from 'node:path'\nimport type {\n MetaFramework,\n PackageManager,\n ProjectScan,\n UiBinding,\n} from './types'\n\n/** The only filesystem surface the scanner needs. Injectable for tests. */\nexport interface ScanFs {\n /** Return the file contents, or `null` if it does not exist / can't be read. */\n readFile: (path: string) => string | null\n /** Whether a file or directory exists at `path`. */\n exists: (path: string) => boolean\n}\n\ninterface PackageJson {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n peerDependencies?: Record<string, string>\n}\n\n/** Merge all dependency buckets into one name→range map. */\nfunction allDeps(pkg: PackageJson | null): Record<string, string> {\n if (!pkg) return {}\n return { ...pkg.peerDependencies, ...pkg.devDependencies, ...pkg.dependencies }\n}\n\nfunction readJson<T>(fs: ScanFs, path: string): T | null {\n const raw = fs.readFile(path)\n if (raw == null) return null\n try {\n return JSON.parse(raw) as T\n } catch {\n return null\n }\n}\n\nfunction detectPackageManager(fs: ScanFs, root: string): PackageManager {\n if (fs.exists(join(root, 'pnpm-lock.yaml'))) return 'pnpm'\n if (fs.exists(join(root, 'bun.lockb')) || fs.exists(join(root, 'bun.lock'))) return 'bun'\n if (fs.exists(join(root, 'yarn.lock'))) return 'yarn'\n return 'npm'\n}\n\n/**\n * UI binding from dependencies. Order matters: react-native and the various\n * meta-framework UI libs must be checked before the bare `react`/`vue` they build\n * on, so `expo`/`react-native` is never misread as plain `react`.\n */\nfunction detectUiBinding(deps: Record<string, string>): UiBinding | 'unknown' {\n const has = (name: string): boolean => name in deps\n if (has('react-native') || has('expo')) return 'react-native'\n if (has('@angular/core')) return 'angular'\n if (has('svelte')) return 'svelte'\n if (has('nuxt') || has('vue')) return 'vue'\n if (has('solid-js')) return 'solid'\n if (has('ink')) return 'ink'\n if (has('react')) return 'react'\n return 'unknown'\n}\n\n/**\n * Meta-framework — decides WHERE a server file lands. Distinguishes app vs pages\n * router (Next), SSR vs SPA (Angular), and the no-server bundlers (vite/cra).\n */\nfunction detectMetaFramework(\n fs: ScanFs,\n root: string,\n deps: Record<string, string>,\n uiBinding: UiBinding | 'unknown',\n): MetaFramework | 'unknown' {\n const has = (name: string): boolean => name in deps\n const hasPrefix = (prefix: string): boolean => Object.keys(deps).some((d) => d.startsWith(prefix))\n\n if (has('next')) {\n // App Router when an `app/` (or `src/app/`) dir exists, else Pages Router.\n if (fs.exists(join(root, 'app')) || fs.exists(join(root, 'src/app'))) return 'next-app'\n return 'next-pages'\n }\n if (hasPrefix('@remix-run/')) return 'remix'\n if (has('@tanstack/react-start') || has('@tanstack/start')) return 'tanstack-start'\n if (has('@sveltejs/kit')) return 'sveltekit'\n if (has('nuxt')) return 'nuxt'\n if (has('astro')) return 'astro'\n if (uiBinding === 'angular') {\n return has('@angular/ssr') || has('@angular/platform-server') ? 'angular-ssr' : 'angular-spa'\n }\n if (has('expo')) return 'expo'\n if (has('react-scripts')) return 'cra'\n if (has('vite')) return 'vite'\n if (uiBinding === 'ink') return 'node'\n if (uiBinding === 'unknown') return 'unknown'\n return 'none'\n}\n\n/** First `@/*`-style alias from tsconfig `compilerOptions.paths`, sans `/*`. */\nfunction detectImportAlias(fs: ScanFs, root: string): string | null {\n const tsconfig = readJson<{ compilerOptions?: { paths?: Record<string, string[]> } }>(\n fs,\n join(root, 'tsconfig.json'),\n )\n const paths = tsconfig?.compilerOptions?.paths\n if (!paths) return null\n for (const key of Object.keys(paths)) {\n // e.g. \"@/*\" → \"@\", \"~/*\" → \"~\". Skip exact (non-wildcard) mappings.\n if (key.endsWith('/*')) return key.slice(0, -2)\n }\n return null\n}\n\nconst CSS_ENTRY_CANDIDATES = [\n 'app/globals.css',\n 'app/global.css',\n 'src/app/globals.css',\n 'src/index.css',\n 'src/styles/globals.css',\n 'styles/globals.css',\n 'src/app.css',\n 'src/styles.css',\n]\n\nfunction detectStyling(\n fs: ScanFs,\n root: string,\n deps: Record<string, string>,\n): ProjectScan['styling'] {\n const tailwind =\n 'tailwindcss' in deps ||\n fs.exists(join(root, 'tailwind.config.ts')) ||\n fs.exists(join(root, 'tailwind.config.js')) ||\n fs.exists(join(root, 'tailwind.config.cjs')) ||\n fs.exists(join(root, 'tailwind.config.mjs'))\n let cssEntry: string | null = null\n for (const candidate of CSS_ENTRY_CANDIDATES) {\n if (fs.exists(join(root, candidate))) {\n cssEntry = candidate\n break\n }\n }\n return { mode: tailwind ? 'tailwind-preset' : 'data-attrs-only', cssEntry }\n}\n\nfunction detectMonorepo(fs: ScanFs, root: string): ProjectScan['monorepo'] {\n if (fs.exists(join(root, 'pnpm-workspace.yaml'))) return { tool: 'pnpm', root }\n if (fs.exists(join(root, 'turbo.json'))) return { tool: 'turbo', root }\n if (fs.exists(join(root, 'nx.json'))) return { tool: 'nx', root }\n return null\n}\n\n/**\n * Scan `root` and return the detected {@link ProjectScan}. Never throws — a\n * missing/unparseable `package.json` yields an all-`unknown`/default scan that the\n * validator then reports, rather than a crash or a silent wrong guess.\n */\nexport function scanProject(fs: ScanFs, root = '.'): ProjectScan {\n const pkg = readJson<PackageJson>(fs, join(root, 'package.json'))\n const deps = allDeps(pkg)\n\n const uiBinding = detectUiBinding(deps)\n const metaFramework = detectMetaFramework(fs, root, deps, uiBinding)\n const srcDir = fs.exists(join(root, 'src')) ? 'src' : null\n\n return {\n uiBinding,\n metaFramework,\n packageManager: detectPackageManager(fs, root),\n typescript: fs.exists(join(root, 'tsconfig.json')),\n srcDir,\n importAlias: detectImportAlias(fs, root),\n styling: detectStyling(fs, root, deps),\n monorepo: detectMonorepo(fs, root),\n }\n}\n","/**\n * `.agentskit/components.json` — build / read / write (RFC-0006 D3).\n *\n * `agentskit init` writes this file once; every later `add` reads it and skips\n * scanning. This module derives a sensible default `ComponentsConfig` from a\n * {@link ProjectScan}, and (de)serializes it. Pure + injectable I/O so it is\n * unit-testable; the interactive `init` command wires these together with prompts.\n */\nimport { join } from 'node:path'\nimport type { ComponentsConfig, MetaFramework, ProjectScan } from './types'\n\n/** Where the config lives, relative to the project (or workspace package) root. */\nexport const CONFIG_PATH = '.agentskit/components.json'\n\n/** Pinned, fetchable in v1 (the hosted registry URL becomes an alias later, D3). */\nexport const SCHEMA_URL =\n 'https://raw.githubusercontent.com/AgentsKit-io/agentskit-registry/v1/schema/components.json'\n\nexport const DEFAULT_REGISTRY = 'https://registry.agentskit.io'\n\n/** Idiomatic server route directory per meta-framework. */\nconst SERVER_DIR_BY_META: Record<MetaFramework, string> = {\n 'next-app': 'app/api',\n 'next-pages': 'pages/api',\n remix: 'app/routes',\n 'tanstack-start': 'app/routes',\n astro: 'src/pages/api',\n sveltekit: 'src/routes/api',\n nuxt: 'server/api',\n 'angular-ssr': 'src/server',\n expo: 'server',\n vite: 'server',\n cra: 'server',\n 'angular-spa': 'server',\n node: 'server',\n none: 'server',\n}\n\nfunction joinPath(base: string, sub: string): string {\n return base ? `${base}/${sub}` : sub\n}\n\n/**\n * Derive a default {@link ComponentsConfig} from a scan. The values are\n * best-effort, framework-idiomatic defaults the user can edit; `init` may override\n * any of them via prompts. Falls back gracefully when the scan is `unknown`.\n */\nexport function buildConfig(scan: ProjectScan): ComponentsConfig {\n const uiBinding = scan.uiBinding === 'unknown' ? 'react' : scan.uiBinding\n const metaFramework = scan.metaFramework === 'unknown' ? 'none' : scan.metaFramework\n const srcBase = scan.srcDir ?? ''\n\n const componentsPath = joinPath(srcBase, 'components')\n const libPath = joinPath(srcBase, 'lib')\n // Next respects a `src/` dir for its router; prefix the server path when present.\n const rawServer = SERVER_DIR_BY_META[metaFramework]\n const serverPath =\n srcBase && (metaFramework === 'next-app' || metaFramework === 'next-pages') && !rawServer.startsWith('src/')\n ? joinPath(srcBase, rawServer)\n : rawServer\n\n const alias = scan.importAlias\n\n return {\n $schema: SCHEMA_URL,\n schemaVersion: 1,\n uiBinding,\n metaFramework,\n typescript: scan.typescript,\n styling: {\n mode: scan.styling.mode,\n css: scan.styling.cssEntry ?? 'app/globals.css',\n tailwindConfig: null,\n },\n aliases: {\n // components + lib are import-aliased when the project has one; the server\n // route is a framework-routed filesystem location, so it mirrors its path.\n components: alias ? `${alias}/components` : `./${componentsPath}`,\n lib: alias ? `${alias}/lib` : `./${libPath}`,\n server: serverPath,\n },\n paths: {\n root: scan.monorepo?.root ?? '.',\n components: componentsPath,\n lib: libPath,\n server: serverPath,\n },\n registries: { default: DEFAULT_REGISTRY },\n }\n}\n\n/** Serialize a config to pretty JSON (with a trailing newline, matching editors). */\nexport function serializeConfig(config: ComponentsConfig): string {\n return `${JSON.stringify(config, null, 2)}\\n`\n}\n\n/** Parse + shallow-validate a config string. Returns `null` on malformed input. */\nexport function parseConfig(raw: string): ComponentsConfig | null {\n let data: unknown\n try {\n data = JSON.parse(raw)\n } catch {\n return null\n }\n if (!data || typeof data !== 'object') return null\n const c = data as Partial<ComponentsConfig>\n if (typeof c.schemaVersion !== 'number' || !c.uiBinding || !c.metaFramework || !c.registries) {\n return null\n }\n return c as ComponentsConfig\n}\n\n/** Injectable config I/O — `read` returns file contents or `null`; `write` persists. */\nexport interface ConfigIo {\n read: (path: string) => string | null\n write: (path: string, content: string) => void\n}\n\n/** Read the committed config under `root`, or `null` when absent/malformed. */\nexport function readConfig(io: ConfigIo, root = '.'): ComponentsConfig | null {\n const raw = io.read(join(root, CONFIG_PATH))\n return raw == null ? null : parseConfig(raw)\n}\n\n/** Write the config under `root`, returning the path written. */\nexport function writeConfig(io: ConfigIo, config: ComponentsConfig, root = '.'): string {\n const path = join(root, CONFIG_PATH)\n io.write(path, serializeConfig(config))\n return path\n}\n\n/**\n * Resolve the effective config: the committed one when present (zero prompts),\n * else a default derived from the scan. The boolean reports whether it was loaded\n * from disk (vs. freshly derived → the caller should suggest running `init`).\n */\nexport function resolveConfig(\n io: ConfigIo,\n scan: ProjectScan,\n root = '.',\n): { config: ComponentsConfig; fromDisk: boolean } {\n const existing = readConfig(io, root)\n if (existing) return { config: existing, fromDisk: true }\n return { config: buildConfig(scan), fromDisk: false }\n}\n","/**\n * Path-containment guard + transactional file writer (RFC-0006 D16/D10).\n *\n * `sha256` verifies file *content* and the signed manifest verifies the checksum\n * list — but neither constrains *where* a file is written. A valid-checksum entry\n * with `path: '../../.env'` would escape the target via `join`. D16 closes that:\n * every registry path is validated (no absolute, no `..`) and every resolved\n * destination is asserted to stay inside the target dir, on both the write and the\n * diff-read paths.\n *\n * `commitFiles` adds the D10 transactional property at the unit level: validate\n * ALL paths + collect ALL conflicts before writing ANY file, then write, rolling\n * back everything written so far if any write fails. (The real-filesystem adapter\n * layers the sibling temp-dir + atomic rename on top; the all-or-nothing semantics\n * and the containment guard live here, fully testable.)\n */\nimport { isAbsolute, resolve, sep } from 'node:path'\n\n/** Raised on a path-traversal / unsafe-path / unresolved-conflict violation. */\nexport class IntegrityError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'IntegrityError'\n }\n}\n\n/**\n * Publish-time path validation: a registry file path must be relative and contain\n * no `..` segment (and no empty/`.`-only segment). Pure predicate — the authoring\n * tooling rejects a manifest that fails this; the CLI re-checks at install.\n */\nexport function isSafeRegistryPath(rel: string): boolean {\n if (rel === '' || isAbsolute(rel)) return false\n const segments = rel.split(/[/\\\\]/)\n for (const s of segments) {\n if (s === '' || s === '.' || s === '..') return false\n }\n return true\n}\n\n/**\n * Resolve `rel` under `targetDir` and assert the result stays within it (D16).\n * Throws {@link IntegrityError} on an unsafe path or an escape; otherwise returns\n * the absolute destination. Use on every write AND every diff read.\n */\nexport function assertContained(targetDir: string, rel: string): string {\n if (!isSafeRegistryPath(rel)) {\n throw new IntegrityError(`unsafe registry path rejected: ${JSON.stringify(rel)}`)\n }\n const base = resolve(targetDir)\n const dest = resolve(base, rel)\n if (dest !== base && !dest.startsWith(base + sep)) {\n throw new IntegrityError(`path escapes the target directory: ${JSON.stringify(rel)}`)\n }\n return dest\n}\n\n/** Minimal filesystem surface for the writer. Injectable for tests. */\nexport interface WriteFs {\n exists: (path: string) => boolean\n /** Write `content`, creating parent directories as needed. */\n write: (path: string, content: string) => void\n /** Remove a file (used for rollback). */\n remove: (path: string) => void\n}\n\n/** A file to install, with its path relative to the target directory. */\nexport interface FileToWrite {\n path: string\n content: string\n}\n\nexport interface CommitOptions {\n /** Overwrite files that already exist. Default: abort on any conflict. */\n force?: boolean\n}\n\nexport interface CommitResult {\n /** Absolute destinations written, in order. */\n written: string[]\n}\n\n/**\n * Install `files` into `targetDir` transactionally:\n * 1. validate + contain every path (D16) — any failure aborts before any write;\n * 2. collect ALL pre-existing conflicts — abort listing them unless `force`;\n * 3. write; if any write throws, roll back everything written and rethrow.\n *\n * Never leaves a partially-written tree.\n */\nexport function commitFiles(\n fs: WriteFs,\n targetDir: string,\n files: ReadonlyArray<FileToWrite>,\n options: CommitOptions = {},\n): CommitResult {\n // 1 — resolve + contain every destination first.\n const planned = files.map((f) => ({ dest: assertContained(targetDir, f.path), content: f.content, rel: f.path }))\n\n // 2 — collect all conflicts up front (no throw-on-first).\n if (!options.force) {\n const conflicts = planned.filter((p) => fs.exists(p.dest)).map((p) => p.rel)\n if (conflicts.length > 0) {\n throw new IntegrityError(\n `refusing to overwrite ${conflicts.length} existing file(s) (use --force): ${conflicts.join(', ')}`,\n )\n }\n }\n\n // 3 — write, rolling back on any failure.\n const written: string[] = []\n try {\n for (const p of planned) {\n fs.write(p.dest, p.content)\n written.push(p.dest)\n }\n } catch (err) {\n for (const dest of written.reverse()) {\n try {\n fs.remove(dest)\n } catch {\n // best-effort rollback; surface the original error below\n }\n }\n const message = err instanceof Error ? err.message : String(err)\n throw new IntegrityError(`install failed and was rolled back (${written.length} file(s) removed): ${message}`)\n }\n\n return { written }\n}\n","/**\n * Registry fetch client with per-file integrity (RFC-0006 D9/D14).\n *\n * Resolves a component identifier (`name` / `@org/name` / `https://…`) to a\n * registry base + item id, fetches the manifest at the pinned ref, and fetches\n * each port file (inline content or per-path), verifying a SHA-256 over every file\n * and aborting the WHOLE install on any mismatch. Private registries authenticate\n * via `components.json` `registryAuth` (base URL → env var name) — never an argv\n * token. The signed-manifest check is an injected `signatureVerifier` seam (the\n * minisign/Ed25519 primitive lands in its own slice, tested against a real key).\n *\n * Network access is injected (`FetchLike`) so the whole client is unit-testable\n * with no real requests.\n */\nimport { createHash } from 'node:crypto'\nimport type { ComponentPort, ComponentsConfig, RegistryComponent } from './types'\nimport { IntegrityError, type FileToWrite } from './install'\n\n/** Highest registry `schemaVersion` this CLI understands. */\nexport const SUPPORTED_SCHEMA_VERSION = 1\n\nexport const DEFAULT_REGISTRY = 'https://registry.agentskit.io'\n\nexport interface FetchResponseLike {\n ok: boolean\n status: number\n text: () => Promise<string>\n}\nexport type FetchLike = (\n url: string,\n init?: { headers?: Record<string, string> },\n) => Promise<FetchResponseLike>\n\n/** A resolved registry location for one item. */\nexport interface RegistryRef {\n base: string\n itemId: string\n}\n\nexport interface ResolveOptions {\n /** `--registry` override (highest precedence). */\n registryBase?: string\n}\n\n/**\n * Resolve an identifier to a {@link RegistryRef} (D9):\n * - `https://…/r/foo.json` → that URL's directory as base, `foo` as the item;\n * - `@org/name` → `config.registries[org]` as base, `name` as the item;\n * - `name` → the default registry (`--registry` > `registries.default`).\n */\nexport function resolveIdentifier(\n identifier: string,\n config: Pick<ComponentsConfig, 'registries'> | undefined,\n options: ResolveOptions = {},\n): RegistryRef {\n const registries = config?.registries ?? {}\n\n if (/^https?:\\/\\//.test(identifier)) {\n // Direct URL to a manifest: strip `/r/<id>.json` (or any trailing file) → base.\n const m = identifier.match(/^(.*?)\\/r\\/([^/]+?)(?:\\.json)?$/)\n if (m) return { base: m[1]!, itemId: m[2]! }\n const url = new URL(identifier)\n const id = url.pathname.split('/').filter(Boolean).pop()?.replace(/\\.json$/, '') ?? identifier\n return { base: `${url.origin}`, itemId: id }\n }\n\n if (identifier.startsWith('@')) {\n const slash = identifier.indexOf('/')\n if (slash < 0) throw new IntegrityError(`invalid namespaced identifier: ${identifier}`)\n const org = identifier.slice(1, slash)\n const name = identifier.slice(slash + 1)\n const base = registries[org]\n if (!base) throw new IntegrityError(`unknown registry namespace \"@${org}\" — add it to components.json registries`)\n return { base, itemId: name }\n }\n\n const base = options.registryBase ?? registries.default ?? DEFAULT_REGISTRY\n return { base, itemId: identifier }\n}\n\n/**\n * Authorization header for a private registry: `registryAuth` maps a base URL to\n * the ENV VAR NAME holding its bearer token (D9 — secret never in the file, never\n * in argv). Returns `{}` when no match or the env var is unset.\n */\nexport function resolveAuthHeader(\n base: string,\n config: Pick<ComponentsConfig, 'registryAuth'> | undefined,\n env: Record<string, string | undefined> = {},\n): Record<string, string> {\n const map = config?.registryAuth\n if (!map) return {}\n for (const [registryBase, envVar] of Object.entries(map)) {\n let configured: URL\n let target: URL\n try {\n configured = new URL(registryBase)\n target = new URL(base)\n } catch {\n continue\n }\n const configuredPath = configured.pathname.replace(/\\/+$/, '') || '/'\n const targetPath = target.pathname.replace(/\\/+$/, '') || '/'\n const samePathBoundary =\n configuredPath === '/' || targetPath === configuredPath || targetPath.startsWith(`${configuredPath}/`)\n if (target.origin === configured.origin && samePathBoundary) {\n const token = env[envVar]\n if (token) return { authorization: `Bearer ${token}` }\n }\n }\n return {}\n}\n\n/** Lowercase hex SHA-256 of a string. */\nexport function sha256Hex(content: string): string {\n return createHash('sha256').update(content, 'utf8').digest('hex')\n}\n\n/** Throw {@link IntegrityError} listing every file whose content fails its sha256. */\nexport function verifyChecksums(files: ReadonlyArray<{ path: string; content: string; sha256: string }>): void {\n const bad = files.filter((f) => sha256Hex(f.content) !== f.sha256).map((f) => f.path)\n if (bad.length > 0) {\n throw new IntegrityError(`checksum mismatch — install aborted for ${bad.length} file(s): ${bad.join(', ')}`)\n }\n}\n\nexport interface FetchOptions extends ResolveOptions {\n fetchImpl?: FetchLike\n env?: Record<string, string | undefined>\n config?: Pick<ComponentsConfig, 'registries' | 'registryAuth'>\n /**\n * Optional signed-manifest verifier (D9). Receives the raw manifest JSON and the\n * raw signature; returns whether it is valid. When provided, a manifest that\n * fails verification aborts the fetch. The minisign signature path is\n * `<manifest-url>.minisig`.\n */\n signatureVerifier?: (manifestRaw: string, signatureRaw: string) => Promise<boolean>\n}\n\nfunction manifestUrl(ref: RegistryRef): string {\n return `${ref.base}/r/${ref.itemId}.json`\n}\nfunction fileUrl(ref: RegistryRef, path: string): string {\n return `${ref.base}/r/${ref.itemId}/${path}`\n}\n\nasync function getText(fetchImpl: FetchLike, url: string, headers: Record<string, string>): Promise<string> {\n const res = await fetchImpl(url, { headers })\n if (!res.ok) throw new IntegrityError(`fetch failed (${res.status}) for ${url}`)\n return res.text()\n}\n\n/** Fetch + parse + integrity/version-gate the component manifest. */\nexport async function fetchManifest(identifier: string, options: FetchOptions = {}): Promise<{\n ref: RegistryRef\n component: RegistryComponent\n}> {\n const fetchImpl = options.fetchImpl ?? (globalThis.fetch as unknown as FetchLike)\n const ref = resolveIdentifier(identifier, options.config, options)\n const headers = resolveAuthHeader(ref.base, options.config, options.env)\n\n const raw = await getText(fetchImpl, manifestUrl(ref), headers)\n\n if (options.signatureVerifier) {\n const sig = await getText(fetchImpl, `${manifestUrl(ref)}.minisig`, headers)\n const ok = await options.signatureVerifier(raw, sig)\n if (!ok) throw new IntegrityError(`manifest signature verification failed for ${ref.itemId}`)\n }\n\n let parsed: unknown\n try {\n parsed = JSON.parse(raw)\n } catch {\n throw new IntegrityError(`manifest is not valid JSON for ${ref.itemId}`)\n }\n const component = parsed as RegistryComponent\n if (component?.kind !== 'component') {\n throw new IntegrityError(`\"${ref.itemId}\" is not a component (kind=${String((component as { kind?: string })?.kind)})`)\n }\n if (typeof component.schemaVersion !== 'number' || component.schemaVersion > SUPPORTED_SCHEMA_VERSION) {\n throw new IntegrityError(\n `\"${ref.itemId}\" needs a newer CLI (schemaVersion ${component.schemaVersion} > ${SUPPORTED_SCHEMA_VERSION})`,\n )\n }\n return { ref, component }\n}\n\n/**\n * Fetch a port's files — inline `content` when present, else per-path — verify the\n * SHA-256 of every file, and return them ready for `commitFiles`. Aborts the whole\n * set on any mismatch (D14/D9). `target` overrides are preserved on each file.\n */\nexport async function fetchPortFiles(\n ref: RegistryRef,\n port: ComponentPort,\n options: FetchOptions = {},\n): Promise<FileToWrite[]> {\n const fetchImpl = options.fetchImpl ?? (globalThis.fetch as unknown as FetchLike)\n const headers = resolveAuthHeader(ref.base, options.config, options.env)\n\n const resolved = await Promise.all(\n port.files.map(async (f) => {\n const content = f.content ?? (await getText(fetchImpl, fileUrl(ref, f.path), headers))\n return { path: f.path, content, sha256: f.sha256 }\n }),\n )\n\n verifyChecksums(resolved)\n return resolved.map((f) => ({ path: f.path, content: f.content }))\n}\n","/**\n * Component install validator (RFC-0006 install-flow step 5; D4/D5/D11/D12).\n *\n * Given a {@link ProjectScan} and a {@link RegistryComponent}, decide whether the\n * component can be installed into this project — BEFORE any file is written. It\n * resolves the port by `uiBinding`, then checks: framework-target support, peer\n * version ranges, runtime/embedding satisfiability, server-only env scope, TS/JS\n * compatibility, styling, and serverless rate-limit durability. Pure + deterministic;\n * returns structured issues (never throws) so the CLI can print them and a\n * `--dry-run`/`--yes` flow can branch on `ok`.\n */\nimport type { ComponentPort, MetaFramework, ProjectScan, RegistryComponent } from './types'\n\nexport type ValidationSeverity = 'error' | 'warning'\n\nexport interface ValidationIssue {\n severity: ValidationSeverity\n code: string\n message: string\n}\n\nexport interface ValidationResult {\n /** True when there are no `error`-severity issues. */\n ok: boolean\n /** The resolved port for the detected `uiBinding`, when one exists. */\n port?: ComponentPort\n issues: ValidationIssue[]\n}\n\nexport interface ValidateInput {\n scan: ProjectScan\n component: RegistryComponent\n /** Installed dependency versions (name → version) from the project package.json. */\n installed?: Record<string, string>\n}\n\n/** Meta-frameworks with no Node server runtime (pure client / device). */\nconst NO_NODE_SERVER: ReadonlySet<MetaFramework> = new Set([\n 'expo',\n 'vite',\n 'cra',\n 'angular-spa',\n 'none',\n])\n\n/** Meta-frameworks commonly deployed serverless (per-instance limiter is unsafe). */\nconst SERVERLESS_CAPABLE: ReadonlySet<MetaFramework> = new Set([\n 'next-app',\n 'next-pages',\n 'remix',\n 'tanstack-start',\n 'sveltekit',\n 'nuxt',\n])\n\ninterface Semver {\n major: number\n minor: number\n patch: number\n}\n\n/** Parse `1.2.3` / `v1.2.3` / `1.2` (prerelease + build stripped). `null` if unparseable. */\nfunction parseVersion(input: string): Semver | null {\n const cleaned = input.trim().replace(/^[v=]+/, '').split(/[-+]/)[0] ?? ''\n const parts = cleaned.split('.')\n if (parts.length === 0 || parts[0] === '') return null\n const nums = parts.map((p) => Number.parseInt(p, 10))\n if (nums.some((n) => Number.isNaN(n))) return null\n return { major: nums[0] ?? 0, minor: nums[1] ?? 0, patch: nums[2] ?? 0 }\n}\n\nfunction cmp(a: Semver, b: Semver): number {\n return a.major - b.major || a.minor - b.minor || a.patch - b.patch\n}\n\n/**\n * Minimal range satisfier — the subset peerRanges actually use: `*`/empty, exact,\n * comparators (`>=`,`>`,`<=`,`<`,`=`), caret (`^`), tilde (`~`), and `workspace:*`\n * (always satisfied — the version is repo-owner-controlled, RFC-0006 D11). A `||`\n * union is supported by splitting. Unknown forms fail OPEN (treated as satisfied)\n * so an unrecognised range never wrongly blocks an install.\n */\nexport function satisfiesRange(version: string, range: string): boolean {\n const r = range.trim()\n if (r === '' || r === '*' || r === 'x' || r.startsWith('workspace:')) return true\n if (r.includes('||')) return r.split('||').some((part) => satisfiesRange(version, part))\n\n const v = parseVersion(version)\n if (!v) return true // can't parse installed version → don't block\n\n const m = r.match(/^(>=|<=|>|<|=|\\^|~)?\\s*(.+)$/)\n if (!m) return true\n const op = m[1] ?? '='\n const target = parseVersion(m[2]!)\n if (!target) return true\n\n switch (op) {\n case '>=':\n return cmp(v, target) >= 0\n case '>':\n return cmp(v, target) > 0\n case '<=':\n return cmp(v, target) <= 0\n case '<':\n return cmp(v, target) < 0\n case '^': {\n // Compatible within the leftmost non-zero version segment.\n if (cmp(v, target) < 0) return false\n if (target.major > 0) return v.major === target.major\n if (target.minor > 0) return v.major === 0 && v.minor === target.minor\n return v.major === 0 && v.minor === 0 && v.patch === target.patch\n }\n case '~':\n // Same major.minor, patch >=.\n return v.major === target.major && v.minor === target.minor && cmp(v, target) >= 0\n default:\n return cmp(v, target) === 0\n }\n}\n\nexport function validateInstall(input: ValidateInput): ValidationResult {\n const { scan, component, installed = {} } = input\n const issues: ValidationIssue[] = []\n const err = (code: string, message: string) => issues.push({ severity: 'error', code, message })\n const warn = (code: string, message: string) => issues.push({ severity: 'warning', code, message })\n\n const supported = Object.keys(component.ports)\n\n // ── Framework-target support (D4). ─────────────────────────────────────────\n if (scan.uiBinding === 'unknown') {\n err('framework-unknown', `Could not detect the UI framework. ${component.id} supports: ${supported.join(', ')}.`)\n return { ok: false, issues }\n }\n const port = component.ports[scan.uiBinding]\n if (!port) {\n err(\n 'binding-unsupported',\n `${component.id} has no \"${scan.uiBinding}\" port. Supported bindings: ${supported.join(', ')}.`,\n )\n return { ok: false, issues }\n }\n // The declared (uiBinding, metaFramework) pair must be shipped.\n const pairShipped = component.frameworks.some(\n (t) => t.uiBinding === scan.uiBinding && (scan.metaFramework === 'unknown' || t.metaFramework === scan.metaFramework),\n )\n if (scan.metaFramework !== 'unknown' && !pairShipped) {\n err(\n 'target-unsupported',\n `${component.id} does not ship a ${scan.uiBinding} × ${scan.metaFramework} target.`,\n )\n }\n\n // ── Peer ranges (D11): port-level overrides component-level. ───────────────\n const peerRanges = { ...component.peerRanges, ...port.peerRanges }\n for (const [name, range] of Object.entries(peerRanges)) {\n const have = installed[name]\n if (have == null) continue // not yet installed — will be added; don't block\n if (!satisfiesRange(have, range)) {\n err('peer-mismatch', `${name}@${have} does not satisfy required ${range}.`)\n }\n }\n\n // ── Runtime + embedding satisfiability (D5/D6). ────────────────────────────\n const server = port.server\n if (server) {\n const noServer = NO_NODE_SERVER.has(scan.metaFramework as MetaFramework)\n if (server.runtimeRequirement === 'nodejs' && noServer && server.delivery === 'bundled') {\n err(\n 'runtime-unsatisfiable',\n `${scan.metaFramework} has no Node server, but this port needs a bundled Node handler. Use a hosted endpoint instead.`,\n )\n }\n if (server.embeddingBackend === 'onnx-node' && noServer) {\n err(\n 'embedding-unsatisfiable',\n `The onnx-node embedder needs a Node runtime; ${scan.metaFramework} can't run it. Use a BYO/api-remote embedder.`,\n )\n }\n // Server-only secret would land in a client bundle (D5 env scope).\n if (noServer && server.delivery === 'bundled') {\n for (const e of component.env ?? []) {\n if (e.scope === 'server' && e.required) {\n err('env-client-leak', `Server-only env \"${e.name}\" can't be bundled into a client-only ${scan.metaFramework} target.`)\n }\n }\n }\n // Durable rate-limit on serverless (D5).\n if (server.rateLimitBackend === 'memory' && SERVERLESS_CAPABLE.has(scan.metaFramework as MetaFramework)) {\n warn(\n 'ratelimit-memory',\n `In-memory rate-limit is per-instance and ineffective on serverless ${scan.metaFramework}. Set UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN for a durable limiter.`,\n )\n }\n }\n\n // ── TS / JS compatibility (D12). ───────────────────────────────────────────\n if (port.language === 'ts' && !scan.typescript) {\n err('language-ts-only', `${component.id}'s ${scan.uiBinding} port is TypeScript-only, but this is a JavaScript project.`)\n }\n\n // ── Styling (D8). ──────────────────────────────────────────────────────────\n if (port.stylingMode === 'tailwind-preset' && scan.styling.mode !== 'tailwind-preset') {\n warn('styling-tailwind', `This port expects Tailwind, which wasn't detected. The component still renders via its --ak-* tokens; wire the preset manually.`)\n }\n\n return { ok: !issues.some((i) => i.severity === 'error'), port, issues }\n}\n","/**\n * Install marker + tamper-evident audit chain (RFC-0006 D9/D15).\n *\n * Two cooperating records track what was installed and prove it was not silently\n * altered:\n *\n * • The **install marker** is the `installed[]` array on `components.json`. Each\n * entry is keyed by `{ id, installPath }` so the same component can live in\n * several workspace packages (monorepo-safe) without collisions. The per-file\n * `{ sha, installedAt }` map captures content hashes at install time, which is\n * what later powers the 3-way diff/update (D15).\n *\n * • The **audit chain** is the append-only `.agentskit/install-log.jsonl`\n * (NDJSON). Each {@link AuditEntry} carries the SHA-256 of the *canonical* prior\n * entry in `prevEntryHash`, hash-linking the log: tampering with, reordering, or\n * deleting any entry breaks the chain at a detectable index (D9).\n *\n * Everything here is pure + deterministic: timestamps are injected (`now`), object\n * keys are canonicalised (recursively sorted) before hashing so the chain is\n * reproducible, and the only I/O is (de)serialisation of strings — the\n * real-filesystem append lives in the command layer. All throws reuse\n * {@link IntegrityError} (the repo forbids bare `new Error`).\n */\nimport type { AuditEntry, ComponentsConfig, FrameworkTarget, InstalledComponent } from './types'\nimport { sha256Hex } from './fetch'\nimport { IntegrityError } from './install'\nimport type { FileToWrite } from './install'\n\n/**\n * Guard the per-file marker map: a duplicate relative path within a single\n * component install would silently collapse two files into one hash slot, masking\n * a real diff later. Reuse {@link IntegrityError} (the repo forbids bare\n * `new Error`).\n */\nfunction assertUniquePaths(files: ReadonlyArray<FileToWrite>): void {\n const seen = new Set<string>()\n for (const f of files) {\n if (seen.has(f.path)) {\n throw new IntegrityError(`duplicate file path in install marker: ${JSON.stringify(f.path)}`)\n }\n seen.add(f.path)\n }\n}\n\n// ── Install marker — `installed[]` on components.json (D15) ─────────────────\n\n/** A marker entry is identified by this composite key (monorepo-safe). */\nfunction sameKey(entry: InstalledComponent, id: string, installPath: string): boolean {\n return entry.id === id && entry.installPath === installPath\n}\n\n/**\n * Add `entry`, or replace the existing one with the same `{ id, installPath }`.\n * Returns a new config (immutably) — the input is never mutated. Order is stable:\n * a replacement keeps its slot; a new entry is appended.\n */\nexport function upsertInstalled(config: ComponentsConfig, entry: InstalledComponent): ComponentsConfig {\n const current = config.installed ?? []\n const idx = current.findIndex((e) => sameKey(e, entry.id, entry.installPath))\n const installed =\n idx === -1 ? [...current, entry] : current.map((e, i) => (i === idx ? entry : e))\n return { ...config, installed }\n}\n\n/** Find the recorded install for `{ id, installPath }`, or `undefined`. */\nexport function findInstalled(\n config: ComponentsConfig,\n id: string,\n installPath: string,\n): InstalledComponent | undefined {\n return (config.installed ?? []).find((e) => sameKey(e, id, installPath))\n}\n\n/**\n * Remove the recorded install for `{ id, installPath }`. Returns a new config\n * (immutably); a no-op when the entry is absent.\n */\nexport function removeInstalled(config: ComponentsConfig, id: string, installPath: string): ComponentsConfig {\n const current = config.installed ?? []\n return { ...config, installed: current.filter((e) => !sameKey(e, id, installPath)) }\n}\n\n/**\n * Build an {@link InstalledComponent} marker for a just-written component. The\n * per-file map records the SHA-256 (hex) of each file's content at install time —\n * the basis for the later 3-way diff. `now` is injected (never `Date.now()`) so\n * the result is deterministic and testable.\n */\nexport function buildInstalledComponent(args: {\n id: string\n framework: FrameworkTarget\n installPath: string\n ref: string\n version: string\n files: ReadonlyArray<FileToWrite>\n now: string\n}): InstalledComponent {\n assertUniquePaths(args.files)\n const files: Record<string, { sha: string; installedAt: string }> = {}\n for (const f of args.files) {\n files[f.path] = { sha: sha256Hex(f.content), installedAt: args.now }\n }\n return {\n id: args.id,\n kind: 'component',\n framework: args.framework,\n installPath: args.installPath,\n ref: args.ref,\n version: args.version,\n files,\n }\n}\n\n// ── Canonical JSON — recursively sorted keys (reproducible hashing) ─────────\n\n/**\n * Recursively sort object keys so two structurally-equal values serialise\n * identically regardless of key insertion order. Arrays keep their order (it is\n * semantic); objects are rebuilt with sorted keys; primitives pass through.\n */\nfunction canonicalize(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(canonicalize)\n if (value !== null && typeof value === 'object') {\n const sorted: Record<string, unknown> = {}\n for (const key of Object.keys(value as Record<string, unknown>).sort()) {\n sorted[key] = canonicalize((value as Record<string, unknown>)[key])\n }\n return sorted\n }\n return value\n}\n\n/** Canonical JSON string of a value (keys sorted recursively). */\nexport function canonicalJson(value: unknown): string {\n return JSON.stringify(canonicalize(value))\n}\n\n/** SHA-256 (hex) of the canonical JSON of an audit entry. */\nfunction hashEntry(entry: AuditEntry): string {\n return sha256Hex(canonicalJson(entry))\n}\n\n// ── Audit chain — `.agentskit/install-log.jsonl` (D9) ──────────────────────\n\n/**\n * Link a new entry onto the chain: its `prevEntryHash` is the SHA-256 of the\n * canonical last prior entry (`''` when the log is empty). Returns the completed\n * {@link AuditEntry}; `prevEntries` is not mutated.\n */\nexport function appendAudit(\n prevEntries: ReadonlyArray<AuditEntry>,\n entry: Omit<AuditEntry, 'prevEntryHash'>,\n): AuditEntry {\n const prev = prevEntries.length > 0 ? prevEntries[prevEntries.length - 1] : undefined\n const prevEntryHash = prev ? hashEntry(prev) : ''\n return { ...entry, prevEntryHash }\n}\n\n/** Serialise the chain to NDJSON (one JSON object per line, trailing newline). */\nexport function serializeAuditLog(entries: ReadonlyArray<AuditEntry>): string {\n if (entries.length === 0) return ''\n return `${entries.map((e) => JSON.stringify(e)).join('\\n')}\\n`\n}\n\n/**\n * Parse NDJSON back into entries, skipping blank lines and silently dropping any\n * line that is not a well-formed JSON object. (Verification of the *chain* itself\n * is {@link verifyAuditChain}'s job — parsing only rejects unstructured noise.)\n */\nexport function parseAuditLog(raw: string): AuditEntry[] {\n const out: AuditEntry[] = []\n for (const line of raw.split('\\n')) {\n const trimmed = line.trim()\n if (trimmed === '') continue\n let parsed: unknown\n try {\n parsed = JSON.parse(trimmed)\n } catch {\n continue\n }\n if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {\n out.push(parsed as AuditEntry)\n }\n }\n return out\n}\n\n/**\n * Walk the chain, recomputing each entry's expected `prevEntryHash` from the prior\n * entry. The first entry must carry `''`. Returns `{ ok, brokenAt }` where\n * `brokenAt` is the index of the first entry whose link does not match (or `null`\n * when the whole chain is intact). Detects tampering, reordering, and deletion.\n */\nexport function verifyAuditChain(entries: ReadonlyArray<AuditEntry>): { ok: boolean; brokenAt: number | null } {\n for (let i = 0; i < entries.length; i++) {\n const expected = i === 0 ? '' : hashEntry(entries[i - 1])\n if (entries[i].prevEntryHash !== expected) {\n return { ok: false, brokenAt: i }\n }\n }\n return { ok: true, brokenAt: null }\n}\n","/**\n * `agentskit add <component>` orchestrator (RFC-0006 install flow).\n *\n * The capstone that wires the component subsystem into one transactional install:\n * scan → resolve config → fetch manifest → validate → fetch+verify files →\n * commit (path-guarded, rollback) → write marker → append audit chain.\n *\n * Pure orchestration over injected adapters (filesystem, network, clock) so the\n * whole flow is unit-testable end-to-end with no real I/O. The CLI command layer\n * supplies the real `node:fs`/`fetch` adapters and the interactive prompts; this\n * module makes none of those decisions itself.\n */\nimport { join } from 'node:path'\nimport type { FrameworkTarget, RegistryEnvVar } from './types'\nimport { type ScanFs, scanProject } from './scan'\nimport { type ConfigIo, CONFIG_PATH, resolveConfig, writeConfig } from './config'\nimport { fetchManifest, fetchPortFiles, type FetchLike } from './fetch'\nimport { validateInstall, type ValidationIssue } from './validate'\nimport { type WriteFs, commitFiles, IntegrityError } from './install'\nimport {\n appendAudit,\n buildInstalledComponent,\n parseAuditLog,\n serializeAuditLog,\n upsertInstalled,\n} from './marker'\n\n/** Audit log path, relative to the project (or workspace package) root. */\nexport const AUDIT_PATH = '.agentskit/install-log.jsonl'\n\n/** Injected adapters — real `node:fs`/`fetch` in the command, fakes in tests. */\nexport interface AddDeps {\n scanFs: ScanFs\n /** Read/write for `components.json` and the audit log. */\n io: ConfigIo\n /** File install surface (write + remove for rollback). */\n writeFs: WriteFs\n /** Network. Defaults to global fetch. */\n fetchImpl?: FetchLike\n /** Injected clock → deterministic markers/audit. */\n now: () => string\n env?: Record<string, string | undefined>\n}\n\nexport interface AddOptions {\n identifier: string\n root?: string\n /** `--out` install dir override. Defaults to the port's `defaultTarget`. */\n outDir?: string\n /** Overwrite existing files instead of aborting on conflict. */\n force?: boolean\n /** `--registry` base override. */\n registryBase?: string\n /** Optional signed-manifest verifier (e.g. `makeSignatureVerifier(SHIPPED_KEY)`). */\n signatureVerifier?: (manifestRaw: string, signatureRaw: string) => Promise<boolean>\n}\n\nexport interface AddResult {\n id: string\n version: string\n installPath: string\n framework: FrameworkTarget\n /** Absolute paths written. */\n written: string[]\n /** npm packages the component composes (install these). */\n packages: string[]\n /** Env the component needs. */\n env: RegistryEnvVar[]\n /** Non-blocking validation warnings (rate-limit, styling, …). */\n warnings: ValidationIssue[]\n /** Whether config came from a committed components.json (vs derived → suggest init). */\n configFromDisk: boolean\n}\n\n/** Merge a project's declared dependency versions for the peer-range check. */\nfunction installedVersions(scanFs: ScanFs, root: string): Record<string, string> {\n const raw = scanFs.readFile(join(root, 'package.json'))\n if (raw == null) return {}\n try {\n const pkg = JSON.parse(raw) as {\n dependencies?: Record<string, string>\n devDependencies?: Record<string, string>\n peerDependencies?: Record<string, string>\n }\n return { ...pkg.peerDependencies, ...pkg.devDependencies, ...pkg.dependencies }\n } catch {\n return {}\n }\n}\n\n/**\n * Install a component end-to-end. Throws {@link IntegrityError} (with the joined\n * messages) when validation fails or any integrity check trips — leaving nothing\n * written (commit is transactional). On success the marker + audit chain are\n * persisted and an {@link AddResult} is returned for the command to print.\n */\nexport async function addComponent(options: AddOptions, deps: AddDeps): Promise<AddResult> {\n const root = options.root ?? '.'\n\n // 1 — scan + resolve config.\n const scan = scanProject(deps.scanFs, root)\n const { config, fromDisk } = resolveConfig(deps.io, scan, root)\n\n // 2 — fetch + integrity/version-gate the manifest.\n const { ref, component } = await fetchManifest(options.identifier, {\n fetchImpl: deps.fetchImpl,\n env: deps.env,\n config,\n registryBase: options.registryBase,\n signatureVerifier: options.signatureVerifier,\n })\n\n // 3 — validate against the detected project (framework, peers, runtime, …).\n const validation = validateInstall({\n scan,\n component,\n installed: installedVersions(deps.scanFs, root),\n })\n if (!validation.ok || !validation.port) {\n const errors = validation.issues.filter((i) => i.severity === 'error').map((i) => i.message)\n throw new IntegrityError(`cannot install ${component.id}: ${errors.join('; ') || 'no compatible port'}`)\n }\n const port = validation.port\n\n // 4 — fetch + checksum every port file.\n const files = await fetchPortFiles(ref, port, { fetchImpl: deps.fetchImpl, env: deps.env, config })\n\n // 5 — transactional, path-guarded commit.\n const installPath = options.outDir ?? port.defaultTarget\n const { written } = commitFiles(deps.writeFs, installPath, files, { force: options.force })\n\n // 6 — record the marker on components.json.\n const framework: FrameworkTarget = {\n uiBinding: port.uiBinding,\n metaFramework: scan.metaFramework === 'unknown' ? config.metaFramework : scan.metaFramework,\n }\n const now = deps.now()\n const marker = buildInstalledComponent({\n id: component.id,\n framework,\n installPath,\n ref: ref.base,\n version: component.version,\n files,\n now,\n })\n writeConfig(deps.io, upsertInstalled(config, marker), root)\n\n // 7 — append the tamper-evident audit entry.\n const auditPath = join(root, AUDIT_PATH)\n const prev = parseAuditLog(deps.io.read(auditPath) ?? '')\n const entry = appendAudit(prev, {\n schemaVersion: 1,\n eventType: 'install',\n id: component.id,\n version: component.version,\n ref: ref.base,\n files: files.map((f) => ({ path: f.path, sha256: marker.files[f.path]!.sha })),\n manifestSigRef: options.signatureVerifier ? `${ref.itemId}.minisig` : '',\n timestamp: now,\n })\n deps.io.write(auditPath, serializeAuditLog([...prev, entry]))\n\n return {\n id: component.id,\n version: component.version,\n installPath,\n framework,\n written,\n packages: [...component.packages, ...(port.packages ?? [])],\n env: component.env ?? [],\n warnings: validation.issues.filter((i) => i.severity === 'warning'),\n configFromDisk: fromDisk,\n }\n}\n\n/** Re-export so the command can reference where config/audit live. */\nexport { CONFIG_PATH }\n","/**\n * Real Node.js filesystem and network adapters for the RFC-0006 component subsystem.\n *\n * This is the only module that touches `node:fs` or the network on behalf of the\n * scanner, writer, and config I/O — every other module in `components/` accepts the\n * injected interfaces so it stays unit-testable without touching disk.\n *\n * Proxy / custom-CA awareness is a documented follow-up; `nodeFetch` is intentionally\n * minimal and delegates entirely to `globalThis.fetch`.\n */\nimport { dirname } from 'node:path'\nimport { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs'\nimport type { ConfigIo } from './config'\nimport type { FetchLike } from './fetch'\nimport type { WriteFs } from './install'\nimport type { ScanFs } from './scan'\n\n/**\n * `ScanFs` backed by the real Node.js filesystem.\n * `readFile` returns `null` on ENOENT or any other read error rather than throwing.\n */\nexport function nodeScanFs(): ScanFs {\n return {\n readFile(path: string): string | null {\n try {\n return readFileSync(path, 'utf8')\n } catch {\n return null\n }\n },\n exists(path: string): boolean {\n return existsSync(path)\n },\n }\n}\n\n/**\n * `WriteFs` backed by the real Node.js filesystem.\n * `write` creates all ancestor directories before writing (equivalent to `mkdir -p`).\n * `remove` is force/silent so it does not throw when the file is already absent\n * (rollback paths call it after a partial write and must not double-fault).\n */\nexport function nodeWriteFs(): WriteFs {\n return {\n exists(path: string): boolean {\n return existsSync(path)\n },\n write(path: string, content: string): void {\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, content, 'utf8')\n },\n remove(path: string): void {\n rmSync(path, { force: true })\n },\n }\n}\n\n/**\n * `ConfigIo` backed by the real Node.js filesystem.\n * `read` mirrors `nodeScanFs().readFile`; `write` mirrors `nodeWriteFs().write`\n * (creates parent directories as needed).\n */\nexport function nodeConfigIo(): ConfigIo {\n return {\n read(path: string): string | null {\n try {\n return readFileSync(path, 'utf8')\n } catch {\n return null\n }\n },\n write(path: string, content: string): void {\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, content, 'utf8')\n },\n }\n}\n\n/**\n * Minimal `FetchLike` that delegates to `globalThis.fetch`.\n *\n * Proxy / custom-CA support (e.g. `HTTPS_PROXY`, `NODE_EXTRA_CA_CERTS`) is a\n * documented follow-up; wire an undici `ProxyAgent` here when that slice lands.\n */\nexport const nodeFetch: FetchLike = async (\n url: string,\n init?: { headers?: Record<string, string> },\n): Promise<{ ok: boolean; status: number; text: () => Promise<string> }> => {\n const res = await globalThis.fetch(url, { headers: init?.headers })\n return {\n ok: res.ok,\n status: res.status,\n text: () => res.text(),\n }\n}\n","/**\n * `agentskit add <name>` — component install path (RFC-0006 D1 auto-detect).\n *\n * Thin glue over `addComponent`: builds the real `node:fs`/network adapters, runs\n * the transactional install, and prints the result. Detection is by trying to\n * fetch a component manifest — if the id isn't a component in the registry\n * (`fetch failed` / `not a component`), this returns `not-a-component` so the\n * caller falls back to the agent path. All other failures (validation, checksum,\n * path-escape) are real component errors and surface to the user.\n */\nimport { addComponent, type AddResult } from '../components/flow'\nimport { nodeConfigIo, nodeFetch, nodeScanFs, nodeWriteFs } from '../components/node-fs'\nimport { IntegrityError } from '../components/install'\n\nexport interface ComponentAddOptions {\n out?: string\n force?: boolean\n registry?: string\n}\n\nexport type ComponentAddOutcome = 'installed' | 'not-a-component'\n\n/** True when the error means \"this id is not a registry component\" (→ try agent). */\nfunction isNotAComponent(err: unknown): boolean {\n return err instanceof IntegrityError && /fetch failed|is not a component/i.test(err.message)\n}\n\nfunction printReport(result: AddResult): void {\n const { id, version, installPath, framework, written, packages, env, warnings, configFromDisk } = result\n const out = process.stdout\n out.write(`\\n✓ Installed ${id}@${version} → ${installPath}/ (${framework.uiBinding} × ${framework.metaFramework})\\n`)\n out.write(` wrote ${written.length} file${written.length === 1 ? '' : 's'}\\n`)\n\n if (packages.length > 0) {\n out.write(`\\nInstall the packages it composes:\\n npm install ${packages.join(' ')}\\n`)\n }\n const required = env.filter((e) => e.required)\n if (required.length > 0) {\n out.write(`\\nRequired environment:\\n`)\n for (const e of required) out.write(` ${e.name} — ${e.description}\\n`)\n }\n if (warnings.length > 0) {\n out.write(`\\nWarnings:\\n`)\n for (const w of warnings) out.write(` ⚠ ${w.message}\\n`)\n }\n if (!configFromDisk) {\n out.write(`\\nTip: run \\`agentskit init\\` to commit .agentskit/components.json and skip the scan next time.\\n`)\n }\n out.write('\\n')\n}\n\n/**\n * Attempt a component install for `name`. Returns `'installed'` on success,\n * `'not-a-component'` when the id is not a registry component (caller should try\n * the agent path). Throws on a genuine component install failure.\n */\nexport async function tryComponentAdd(\n name: string,\n options: ComponentAddOptions,\n): Promise<ComponentAddOutcome> {\n try {\n const result = await addComponent(\n { identifier: name, outDir: options.out, force: options.force === true, registryBase: options.registry },\n {\n scanFs: nodeScanFs(),\n io: nodeConfigIo(),\n writeFs: nodeWriteFs(),\n fetchImpl: nodeFetch,\n now: () => new Date().toISOString(),\n env: process.env,\n },\n )\n printReport(result)\n return 'installed'\n } catch (err) {\n if (isNotAComponent(err)) return 'not-a-component'\n throw err\n }\n}\n","import type { Command } from 'commander'\nimport { addAgent, resolveSystemPrompt } from '../registry'\nimport { runAgent } from '../run'\nimport { tryComponentAdd } from './add-component'\n\nexport function registerAddCommand(program: Command): void {\n program\n .command('add <name>')\n .description(\n 'Add a ready-made agent or UI component from the AgentsKit registry (registry.agentskit.io). Auto-detects which: a component is scanned/validated against your project and installed transactionally; an agent is copied into ./agents. You own the code. e.g. `agentskit add docs-chat` (component) or `agentskit add research --run \"…\"` (agent).',\n )\n .option('--out <dir>', 'Directory to install into (component: the port dir; agent: ./agents)')\n .option('-f, --force', 'Overwrite existing files')\n .option('--registry <url>', 'Registry base URL override (component install)')\n .option('--run <task>', 'Run the agent on this task right after adding it')\n .option('--provider <provider>', 'Provider for --run (openai, anthropic, gemini, ollama, groq, openrouter, demo)', 'demo')\n .option('--model <model>', 'Model for --run')\n .option('--api-key <key>', 'API key for --run (else read from the provider env var)')\n .action(\n async (\n agent: string,\n options: {\n out?: string\n force?: boolean\n registry?: string\n run?: string\n provider: string\n model?: string\n apiKey?: string\n },\n ) => {\n try {\n // Auto-detect (RFC-0006 D1): try the component registry first; fall back\n // to the agent path when the id is not a component.\n const outcome = await tryComponentAdd(agent, {\n out: options.out,\n force: options.force,\n registry: options.registry,\n })\n if (outcome === 'installed') return\n\n const result = await addAgent(agent, { outDir: options.out, force: options.force === true })\n process.stdout.write(`\\nAdded \"${result.agent.title}\" → ${result.targetDir}/\\n`)\n for (const f of result.written) process.stdout.write(` wrote ${f}\\n`)\n\n if (result.agent.packages.length > 0) {\n process.stdout.write(`\\nInstall the packages it uses:\\n`)\n process.stdout.write(` npm install ${result.agent.packages.join(' ')} @agentskit/adapters\\n`)\n }\n const required = (result.agent.env ?? []).filter((e) => e.required)\n if (required.length > 0) {\n process.stdout.write(`\\nRequired environment:\\n`)\n for (const e of required) process.stdout.write(` ${e.name} — ${e.description}\\n`)\n }\n const readme = result.written.find((f) => f.toLowerCase().endsWith('readme.md'))\n process.stdout.write(readme ? `\\nSee ${readme} for usage.\\n` : '\\n')\n\n if (options.run) {\n const systemPrompt = resolveSystemPrompt(result.agent)\n if (!systemPrompt) {\n process.stderr.write(\n `\\n--run is not supported for \"${agent}\" (it composes tools/keys). Use it as a library — see the README.\\n`,\n )\n process.exit(1)\n }\n process.stdout.write(`\\nRunning \"${result.agent.title}\" via ${options.provider}…\\n\\n`)\n await runAgent(options.run, {\n provider: options.provider,\n model: options.model,\n apiKey: options.apiKey,\n systemPrompt,\n maxSteps: '8',\n })\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n process.stderr.write(`\\nadd failed: ${message}\\n`)\n process.stderr.write(`(browse agents at https://registry.agentskit.io)\\n`)\n process.exit(1)\n }\n },\n )\n}\n","import type { Command } from 'commander'\nimport { mkdir, writeFile } from 'node:fs/promises'\nimport { dirname, join } from 'node:path'\nimport { diffAgent } from '../registry'\n\nexport function registerDiffCommand(program: Command): void {\n program\n .command('diff <agent>')\n .description('Show how your local copy of a registry agent differs from the current registry source.')\n .option('--out <dir>', 'Directory the agent was added into (default: ./agents)')\n .action(async (agent: string, options: { out?: string }) => {\n try {\n const { targetDir, files } = await diffAgent(agent, { outDir: options.out })\n let changed = 0\n for (const f of files) {\n if (f.status === 'unchanged') continue\n changed++\n process.stdout.write(`\\n${f.status === 'missing-local' ? 'missing' : 'modified'}: ${join(targetDir, f.path)}\\n`)\n if (f.diff) {\n for (const line of f.diff) {\n if (line.type === ' ') continue\n process.stdout.write(` ${line.type} ${line.text}\\n`)\n }\n }\n }\n process.stdout.write(\n changed === 0\n ? `\\n${agent}: up to date with the registry.\\n`\n : `\\n${changed} file(s) differ. Run \\`agentskit update ${agent}\\` to apply the registry version.\\n`,\n )\n } catch (err) {\n process.stderr.write(`\\ndiff failed: ${err instanceof Error ? err.message : String(err)}\\n`)\n process.exit(1)\n }\n })\n}\n\nexport function registerUpdateCommand(program: Command): void {\n program\n .command('update <agent>')\n .description('Update your local copy of a registry agent to the current registry source.')\n .option('--out <dir>', 'Directory the agent was added into (default: ./agents)')\n .option('-f, --force', 'Apply without listing the changes first')\n .action(async (agent: string, options: { out?: string; force?: boolean }) => {\n try {\n const { targetDir, files } = await diffAgent(agent, { outDir: options.out })\n const changed = files.filter((f) => f.status !== 'unchanged')\n if (changed.length === 0) {\n process.stdout.write(`\\n${agent}: already up to date.\\n`)\n return\n }\n if (!options.force) {\n process.stdout.write(`\\nWill overwrite ${changed.length} file(s) with the registry version:\\n`)\n for (const f of changed) process.stdout.write(` ${f.path} (${f.status})\\n`)\n }\n for (const f of changed) {\n const dest = join(targetDir, f.path)\n await mkdir(dirname(dest), { recursive: true })\n await writeFile(dest, f.upstream, 'utf8')\n process.stdout.write(` updated ${dest}\\n`)\n }\n process.stdout.write(`\\nUpdated ${agent}. Review the changes with your VCS before committing.\\n`)\n } catch (err) {\n process.stderr.write(`\\nupdate failed: ${err instanceof Error ? err.message : String(err)}\\n`)\n process.exit(1)\n }\n })\n}\n","import { Command } from 'commander'\nimport packageJson from '../../package.json'\nimport { registerChatCommand } from './chat'\nimport { registerRunCommand } from './run'\nimport { registerInitCommand } from './init'\nimport { registerDoctorCommand } from './doctor'\nimport { registerDevCommand } from './dev'\nimport { registerConfigCommand } from './config'\nimport { registerTunnelCommand } from './tunnel'\nimport { registerRagCommand } from './rag'\nimport { registerAiCommand } from './ai'\nimport { registerFlowCommand } from './flow'\nimport { registerPiiCommand } from './pii'\nimport { registerRulesCommand } from './rules'\nimport { registerAddCommand } from './add'\nimport { registerDiffCommand, registerUpdateCommand } from './registry-maintenance'\n\nexport function createCli(): Command {\n const program = new Command()\n program\n .name('agentskit')\n .description('AgentsKit CLI for chat demos and project bootstrapping.')\n .version(packageJson.version)\n\n registerChatCommand(program)\n registerRunCommand(program)\n registerInitCommand(program)\n registerDoctorCommand(program)\n registerDevCommand(program)\n registerConfigCommand(program)\n registerTunnelCommand(program)\n registerRagCommand(program)\n registerAiCommand(program)\n registerFlowCommand(program)\n registerPiiCommand(program)\n registerRulesCommand(program)\n registerAddCommand(program)\n registerDiffCommand(program)\n registerUpdateCommand(program)\n\n return program\n}\n"]}
|