@agentskit/cli 0.7.1 → 0.8.2
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 +2 -2
- package/dist/bin.cjs +183 -0
- package/dist/bin.cjs.map +1 -1
- package/dist/bin.js +1 -1
- package/dist/{chunk-72XFU2X2.js → chunk-FLIR7BRS.js} +185 -2
- package/dist/chunk-FLIR7BRS.js.map +1 -0
- package/dist/index.cjs +183 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +20 -9
- package/dist/chunk-72XFU2X2.js.map +0 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts","../src/providers.ts","../src/sessions.ts","../src/extensibility/telemetry/pricing.ts","../src/slash-commands.ts","../src/resolve.ts","../src/extensibility/permissions/policy.ts","../src/runtime/use-runtime.ts","../src/runtime/use-tool-permissions.ts","../src/runtime/use-session-meta.ts","../src/extensibility/hooks/runner.ts","../src/extensibility/hooks/shell-hooks.ts","../src/app/ChatApp.tsx","../src/commands/shared.ts","../src/extensibility/plugins/loader.ts","../src/extensibility/mcp/client.ts","../src/extensibility/mcp/bridge.ts","../src/commands/chat.ts","../src/run.ts","../src/run-ui.tsx","../src/commands/run.ts","../src/init.ts","../src/init-interactive.ts","../src/commands/init.ts","../src/doctor.ts","../src/commands/doctor.ts","../src/dev.ts","../src/commands/dev.ts","../src/commands/config.ts","../src/tunnel.ts","../src/commands/tunnel.ts","../src/extensibility/rag/embedders.ts","../src/extensibility/rag/runner.ts","../src/commands/rag.ts","../src/commands/index.ts"],"names":["path","readFile","join","homedir","resolve","openai","anthropic","gemini","ollama","deepseek","grok","kimi","createHash","existsSync","randomBytes","readFileSync","writeFileSync","readdirSync","statSync","input","id","researcher","coder","planner","critic","summarizer","webSearch","fetchUrl","filesystem","shell","composeSkills","sqliteChatMemory","fileChatMemory","useState","useMemo","useRef","useEffect","spawn","useChat","jsxs","Box","jsx","StatusHeader","ChatContainer","Text","Message","ToolCallView","ToolConfirmation","ThinkingIndicator","InputBar","readdir","stat","isAbsolute","pathToFileURL","render","React","runtime","createRuntime","mkdir","writeFile","kleur","select","checkbox","confirm","providers","pathResolve","chokidar","basename","mkdirSync","fileVectorMemory","createRAG","glob","Command"],"mappings":"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","file":"index.cjs","sourcesContent":["import { 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 {\n return undefined\n }\n}\n\nasync function loadTsConfig(path: string): Promise<AgentsKitConfig | undefined> {\n try {\n const mod = await import(path)\n return (mod.default ?? mod) as AgentsKitConfig\n } catch {\n return undefined\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 {\n return undefined\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 return {\n ...base,\n ...override,\n tools: { ...base.tools, ...override.tools },\n defaults: { ...base.defaults, ...override.defaults },\n runtime: { ...base.runtime, ...override.runtime },\n observability: { ...base.observability, ...override.observability },\n }\n}\n\nasync function loadLocalConfig(cwd: string): Promise<AgentsKitConfig | undefined> {\n const tsConfig = await loadTsConfig(join(cwd, '.agentskit.config.ts'))\n if (tsConfig) return tsConfig\n\n const jsonConfig = await loadJsonConfig(join(cwd, '.agentskit.config.json'))\n if (jsonConfig) return jsonConfig\n\n return await loadPackageJsonConfig(cwd)\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","import {\n anthropic,\n deepseek,\n gemini,\n grok,\n kimi,\n ollama,\n openai,\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-3-5-sonnet-latest',\n factory: (c) => anthropic(c),\n },\n gemini: {\n label: 'Gemini',\n envKeys: ['GEMINI_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-chat',\n factory: (c) => deepseek(c),\n },\n grok: {\n label: 'xAI Grok',\n envKeys: ['XAI_API_KEY'],\n requiresModel: true,\n factory: (c) => grok(c),\n },\n kimi: {\n label: 'Kimi',\n envKeys: ['KIMI_API_KEY', 'MOONSHOT_API_KEY'],\n requiresModel: true,\n factory: (c) => kimi(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 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 })\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 writeFileSync(metaPath(meta.id, cwd), JSON.stringify(meta, null, 2))\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 { 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|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 { researcher, coder, planner, critic, summarizer, composeSkills } from '@agentskit/skills'\nimport { fileChatMemory, sqliteChatMemory } from '@agentskit/memory'\n\nexport const skillRegistry: Record<string, SkillDefinition> = {\n researcher,\n coder,\n planner,\n critic,\n summarizer,\n}\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 return [shell({ timeout: 30_000 })]\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 process.stderr.write(`Unknown tool: ${name}\\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 skill = skillRegistry[skillName.trim()]\n if (!skill) {\n process.stderr.write(`Unknown skill: ${skillName}\\n`)\n return undefined\n }\n return skill\n}\n\nexport function resolveSkills(skillNames: string | undefined): SkillDefinition | undefined {\n if (!skillNames) return undefined\n const names = skillNames.split(',').map(s => s.trim())\n const resolved = names.map(n => skillRegistry[n]).filter(Boolean)\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 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 { 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 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 * Handlers that throw are reported via `onError` and treated as `continue`.\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 continue\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 { spawn } from 'node:child_process'\nimport type { HookEvent, HookHandler, HookPayload, HookResult } from '../plugins/types'\n\nexport interface ConfigHookEntry {\n /** Command to run. Executed through `sh -c`, so shell syntax is allowed. */\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\nfunction runShellHook(entry: ConfigHookEntry, payload: HookPayload): Promise<HookResult> {\n return new Promise((resolvePromise) => {\n const timeoutMs = entry.timeout ?? 5000\n const child = spawn('sh', ['-c', entry.run], {\n stdio: ['pipe', 'pipe', 'inherit'],\n })\n\n let stdout = ''\n child.stdout.on('data', (chunk) => {\n stdout += chunk.toString()\n })\n\n const timer = setTimeout(() => {\n child.kill('SIGTERM')\n }, timeoutMs)\n\n child.on('close', (code) => {\n clearTimeout(timer)\n if (code !== 0) {\n resolvePromise({\n decision: 'block',\n reason: `shell hook exited with code ${code}`,\n })\n return\n }\n const trimmed = stdout.trim()\n if (!trimmed) {\n resolvePromise({ decision: 'continue' })\n return\n }\n try {\n const parsed = JSON.parse(trimmed) as HookResult\n resolvePromise(parsed)\n } catch {\n // Hook printed non-JSON output; treat as continue.\n resolvePromise({ decision: 'continue' })\n }\n })\n\n child.on('error', (err) => {\n clearTimeout(timer)\n resolvePromise({ decision: 'block', reason: err.message })\n })\n\n try {\n child.stdin.write(JSON.stringify(payload))\n child.stdin.end()\n } catch {\n /* ignore */\n }\n })\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 { 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\nfunction 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 return [...tools, ...extra]\n }, [tools, options.extraTools])\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 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 { 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 true. Tests pass\n * false so the user's real home dir can't contaminate runs.\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 = true,\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 { spawn, type ChildProcessWithoutNullStreams } from 'node:child_process'\nimport type { McpServerSpec } from '../plugins/types'\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 const child = spawn(this.spec.command, this.spec.args ?? [], {\n env: { ...process.env, ...(this.spec.env ?? {}) },\n stdio: ['pipe', 'pipe', 'pipe'],\n }) as ChildProcessWithoutNullStreams\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 this.child?.kill('SIGTERM')\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 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 (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 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 skills: researcher,coder,planner,critic,summarizer')\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(\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 })\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 { 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 process.stderr.write('Error: --skill and --skills are mutually exclusive. Use one or the other.\\n')\n process.exit(1)\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","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 { mkdir, writeFile } from 'node:fs/promises'\nimport path from 'node:path'\n\nexport type StarterKind = 'react' | 'ink' | 'runtime' | 'multi-agent'\nexport type Provider = 'openai' | 'anthropic' | 'gemini' | 'ollama' | 'demo'\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}\n\ninterface RenderContext {\n template: StarterKind\n provider: Provider\n tools: ToolKind[]\n memory: MemoryKind\n pm: PackageManager\n}\n\nconst PROVIDER_IMPORT: Record<Exclude<Provider, 'demo'>, string> = {\n openai: 'openai',\n anthropic: 'anthropic',\n gemini: 'gemini',\n ollama: 'ollama',\n}\n\nconst 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 demo: 'demo',\n}\n\nconst 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 demo: null,\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 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\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/concepts/skill\n- Wire up RAG: https://www.agentskit.io/docs/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 ink: inkStarter,\n runtime: runtimeStarter,\n 'multi-agent': multiAgentStarter,\n}\n\nexport async function writeStarterProject(options: InitCommandOptions): Promise<void> {\n const ctx: RenderContext = {\n template: options.template,\n provider: options.provider ?? 'demo',\n tools: options.tools ?? [],\n memory: options.memory ?? 'none',\n pm: options.packageManager ?? 'pnpm',\n }\n\n const files = TEMPLATE_FN[ctx.template](ctx)\n await mkdir(options.targetDir, { recursive: true })\n\n await Promise.all(\n Object.entries(files).map(async ([relativePath, content]) => {\n const absolutePath = path.join(options.targetDir, relativePath)\n await mkdir(path.dirname(absolutePath), { recursive: true })\n await writeFile(absolutePath, content, 'utf8')\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: 'Ink chat (terminal UI)', value: 'ink', description: 'Same chat but in your terminal' },\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 })) as StarterKind\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 ],\n })) as Provider\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 })) as ToolKind[]\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 })) as MemoryKind\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 })) as PackageManager\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'))\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|ink|runtime|multi-agent)')\n .option('--dir <directory>', 'Target directory', 'agentskit-app')\n .option('--provider <provider>', 'LLM provider (openai|anthropic|gemini|ollama|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('-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 }\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\n }\n\n 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 )\n } else {\n printNextSteps(resolved)\n }\n })\n}\n","import { readFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { existsSync } from 'node:fs'\nimport { loadConfig } from './config'\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\nconst PROVIDER_ENV_KEYS: Record<string, string> = {\n openai: 'OPENAI_API_KEY',\n anthropic: 'ANTHROPIC_API_KEY',\n gemini: 'GEMINI_API_KEY',\n deepseek: 'DEEPSEEK_API_KEY',\n grok: 'XAI_API_KEY',\n kimi: 'KIMI_API_KEY',\n}\n\nconst PROVIDER_REACH_URLS: Record<string, string> = {\n openai: 'https://api.openai.com/v1/models',\n anthropic: 'https://api.anthropic.com/v1/messages',\n gemini: 'https://generativelanguage.googleapis.com/v1beta/models',\n ollama: 'http://localhost:11434/api/tags',\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 envKey = PROVIDER_ENV_KEYS[provider]\n if (!envKey) {\n return { status: 'skip', name: `${provider} API key`, detail: 'No env-key requirement for this provider' }\n }\n const value = process.env[envKey]\n if (!value) {\n return {\n status: 'skip',\n name: `${provider} API key`,\n detail: `${envKey} not set`,\n fix: `export ${envKey}=... (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 url = PROVIDER_REACH_URLS[provider]\n if (!url) {\n return { status: 'skip', name: `${provider} reachable`, detail: 'No reachability check configured' }\n }\n\n // Skip reachability if no API key is set for keyed providers\n const envKey = PROVIDER_ENV_KEYS[provider]\n if (envKey && !process.env[envKey]) {\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:\n provider === 'ollama'\n ? 'Start Ollama: `ollama serve` (or install from https://ollama.com)'\n : 'Check network / firewall / VPN settings',\n }\n } finally {\n clearTimeout(timer)\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 ?? ['openai', 'anthropic', 'gemini', 'ollama']\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 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 type { Command } from 'commander'\nimport { runDoctor, renderReport } from '../doctor'\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: openai,anthropic,gemini,ollama)',\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 { spawn, type ChildProcess } from 'node:child_process'\nimport { resolve as pathResolve, basename } from 'node:path'\nimport { existsSync } from 'node:fs'\nimport chokidar from 'chokidar'\nimport kleur from 'kleur'\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 ? 'tsx' : 'node'\n const baseArgs = [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 stopped = false\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 setTimeout(startChild, 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 (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 process.stdin.on('data', (data: Buffer) => {\n const key = data.toString()\n if (key === 'r') restart('manual')\n if (key === 'q' || key === '\\u0003') void stop()\n })\n }\n\n return {\n done,\n stop,\n restarts: () => restartCount,\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 { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport path from 'node:path'\nimport type { Command } from 'commander'\nimport { loadConfig } 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(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 if (existsSync(targetPath) && !options.force) {\n process.stderr.write(\n `Config already exists at ${targetPath}. Re-run with --force to overwrite.\\n`,\n )\n process.exit(1)\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 writeFileSync(targetPath, JSON.stringify(template, null, 2) + '\\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 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 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 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 })\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 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 process.on('SIGINT', () => {\n void stop()\n })\n }\n\n return {\n url: tunnel.url,\n done,\n stop,\n requests: () => requests,\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 { 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 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","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 { Command } from 'commander'\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'\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\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\n return program\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/config.ts","../src/providers.ts","../src/sessions.ts","../src/extensibility/telemetry/pricing.ts","../src/slash-commands.ts","../src/resolve.ts","../src/extensibility/permissions/policy.ts","../src/runtime/use-runtime.ts","../src/runtime/use-tool-permissions.ts","../src/runtime/use-session-meta.ts","../src/extensibility/hooks/runner.ts","../src/extensibility/hooks/shell-hooks.ts","../src/app/ChatApp.tsx","../src/commands/shared.ts","../src/extensibility/plugins/loader.ts","../src/extensibility/mcp/client.ts","../src/extensibility/mcp/bridge.ts","../src/commands/chat.ts","../src/run.ts","../src/run-ui.tsx","../src/commands/run.ts","../src/init.ts","../src/init-interactive.ts","../src/commands/init.ts","../src/doctor.ts","../src/commands/doctor.ts","../src/dev.ts","../src/commands/dev.ts","../src/commands/config.ts","../src/tunnel.ts","../src/commands/tunnel.ts","../src/extensibility/rag/embedders.ts","../src/extensibility/rag/runner.ts","../src/commands/rag.ts","../src/ai/scaffold.ts","../src/ai/planner.ts","../src/commands/ai.ts","../src/commands/index.ts"],"names":["path","readFile","join","homedir","resolve","openai","anthropic","gemini","ollama","deepseek","grok","kimi","createHash","existsSync","randomBytes","readFileSync","writeFileSync","readdirSync","statSync","input","id","researcher","coder","planner","critic","summarizer","webSearch","fetchUrl","filesystem","shell","composeSkills","sqliteChatMemory","fileChatMemory","useState","useMemo","useRef","useEffect","spawn","useChat","jsxs","Box","jsx","StatusHeader","ChatContainer","Text","Message","ToolCallView","ToolConfirmation","ThinkingIndicator","InputBar","readdir","stat","isAbsolute","pathToFileURL","render","React","runtime","createRuntime","mkdir","writeFile","kleur","select","checkbox","confirm","providers","pathResolve","chokidar","basename","mkdirSync","fileVectorMemory","createRAG","glob","toolImports","toolList","validateAgentSchema","Command"],"mappings":"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","file":"index.cjs","sourcesContent":["import { 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 {\n return undefined\n }\n}\n\nasync function loadTsConfig(path: string): Promise<AgentsKitConfig | undefined> {\n try {\n const mod = await import(path)\n return (mod.default ?? mod) as AgentsKitConfig\n } catch {\n return undefined\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 {\n return undefined\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 return {\n ...base,\n ...override,\n tools: { ...base.tools, ...override.tools },\n defaults: { ...base.defaults, ...override.defaults },\n runtime: { ...base.runtime, ...override.runtime },\n observability: { ...base.observability, ...override.observability },\n }\n}\n\nasync function loadLocalConfig(cwd: string): Promise<AgentsKitConfig | undefined> {\n const tsConfig = await loadTsConfig(join(cwd, '.agentskit.config.ts'))\n if (tsConfig) return tsConfig\n\n const jsonConfig = await loadJsonConfig(join(cwd, '.agentskit.config.json'))\n if (jsonConfig) return jsonConfig\n\n return await loadPackageJsonConfig(cwd)\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","import {\n anthropic,\n deepseek,\n gemini,\n grok,\n kimi,\n ollama,\n openai,\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-3-5-sonnet-latest',\n factory: (c) => anthropic(c),\n },\n gemini: {\n label: 'Gemini',\n envKeys: ['GEMINI_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-chat',\n factory: (c) => deepseek(c),\n },\n grok: {\n label: 'xAI Grok',\n envKeys: ['XAI_API_KEY'],\n requiresModel: true,\n factory: (c) => grok(c),\n },\n kimi: {\n label: 'Kimi',\n envKeys: ['KIMI_API_KEY', 'MOONSHOT_API_KEY'],\n requiresModel: true,\n factory: (c) => kimi(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 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 })\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 writeFileSync(metaPath(meta.id, cwd), JSON.stringify(meta, null, 2))\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 { 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|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 { researcher, coder, planner, critic, summarizer, composeSkills } from '@agentskit/skills'\nimport { fileChatMemory, sqliteChatMemory } from '@agentskit/memory'\n\nexport const skillRegistry: Record<string, SkillDefinition> = {\n researcher,\n coder,\n planner,\n critic,\n summarizer,\n}\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 return [shell({ timeout: 30_000 })]\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 process.stderr.write(`Unknown tool: ${name}\\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 skill = skillRegistry[skillName.trim()]\n if (!skill) {\n process.stderr.write(`Unknown skill: ${skillName}\\n`)\n return undefined\n }\n return skill\n}\n\nexport function resolveSkills(skillNames: string | undefined): SkillDefinition | undefined {\n if (!skillNames) return undefined\n const names = skillNames.split(',').map(s => s.trim())\n const resolved = names.map(n => skillRegistry[n]).filter(Boolean)\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 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 { 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 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 * Handlers that throw are reported via `onError` and treated as `continue`.\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 continue\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 { spawn } from 'node:child_process'\nimport type { HookEvent, HookHandler, HookPayload, HookResult } from '../plugins/types'\n\nexport interface ConfigHookEntry {\n /** Command to run. Executed through `sh -c`, so shell syntax is allowed. */\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\nfunction runShellHook(entry: ConfigHookEntry, payload: HookPayload): Promise<HookResult> {\n return new Promise((resolvePromise) => {\n const timeoutMs = entry.timeout ?? 5000\n const child = spawn('sh', ['-c', entry.run], {\n stdio: ['pipe', 'pipe', 'inherit'],\n })\n\n let stdout = ''\n child.stdout.on('data', (chunk) => {\n stdout += chunk.toString()\n })\n\n const timer = setTimeout(() => {\n child.kill('SIGTERM')\n }, timeoutMs)\n\n child.on('close', (code) => {\n clearTimeout(timer)\n if (code !== 0) {\n resolvePromise({\n decision: 'block',\n reason: `shell hook exited with code ${code}`,\n })\n return\n }\n const trimmed = stdout.trim()\n if (!trimmed) {\n resolvePromise({ decision: 'continue' })\n return\n }\n try {\n const parsed = JSON.parse(trimmed) as HookResult\n resolvePromise(parsed)\n } catch {\n // Hook printed non-JSON output; treat as continue.\n resolvePromise({ decision: 'continue' })\n }\n })\n\n child.on('error', (err) => {\n clearTimeout(timer)\n resolvePromise({ decision: 'block', reason: err.message })\n })\n\n try {\n child.stdin.write(JSON.stringify(payload))\n child.stdin.end()\n } catch {\n /* ignore */\n }\n })\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 { 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\nfunction 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 return [...tools, ...extra]\n }, [tools, options.extraTools])\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 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 { 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 true. Tests pass\n * false so the user's real home dir can't contaminate runs.\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 = true,\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 { spawn, type ChildProcessWithoutNullStreams } from 'node:child_process'\nimport type { McpServerSpec } from '../plugins/types'\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 const child = spawn(this.spec.command, this.spec.args ?? [], {\n env: { ...process.env, ...(this.spec.env ?? {}) },\n stdio: ['pipe', 'pipe', 'pipe'],\n }) as ChildProcessWithoutNullStreams\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 this.child?.kill('SIGTERM')\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 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 (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 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 skills: researcher,coder,planner,critic,summarizer')\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(\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 })\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 { 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 process.stderr.write('Error: --skill and --skills are mutually exclusive. Use one or the other.\\n')\n process.exit(1)\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","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 { mkdir, writeFile } from 'node:fs/promises'\nimport path from 'node:path'\n\nexport type StarterKind = 'react' | 'ink' | 'runtime' | 'multi-agent'\nexport type Provider = 'openai' | 'anthropic' | 'gemini' | 'ollama' | 'demo'\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}\n\ninterface RenderContext {\n template: StarterKind\n provider: Provider\n tools: ToolKind[]\n memory: MemoryKind\n pm: PackageManager\n}\n\nconst PROVIDER_IMPORT: Record<Exclude<Provider, 'demo'>, string> = {\n openai: 'openai',\n anthropic: 'anthropic',\n gemini: 'gemini',\n ollama: 'ollama',\n}\n\nconst 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 demo: 'demo',\n}\n\nconst 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 demo: null,\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 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\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/concepts/skill\n- Wire up RAG: https://www.agentskit.io/docs/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 ink: inkStarter,\n runtime: runtimeStarter,\n 'multi-agent': multiAgentStarter,\n}\n\nexport async function writeStarterProject(options: InitCommandOptions): Promise<void> {\n const ctx: RenderContext = {\n template: options.template,\n provider: options.provider ?? 'demo',\n tools: options.tools ?? [],\n memory: options.memory ?? 'none',\n pm: options.packageManager ?? 'pnpm',\n }\n\n const files = TEMPLATE_FN[ctx.template](ctx)\n await mkdir(options.targetDir, { recursive: true })\n\n await Promise.all(\n Object.entries(files).map(async ([relativePath, content]) => {\n const absolutePath = path.join(options.targetDir, relativePath)\n await mkdir(path.dirname(absolutePath), { recursive: true })\n await writeFile(absolutePath, content, 'utf8')\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: 'Ink chat (terminal UI)', value: 'ink', description: 'Same chat but in your terminal' },\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 })) as StarterKind\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 ],\n })) as Provider\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 })) as ToolKind[]\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 })) as MemoryKind\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 })) as PackageManager\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'))\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|ink|runtime|multi-agent)')\n .option('--dir <directory>', 'Target directory', 'agentskit-app')\n .option('--provider <provider>', 'LLM provider (openai|anthropic|gemini|ollama|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('-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 }\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\n }\n\n 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 )\n } else {\n printNextSteps(resolved)\n }\n })\n}\n","import { readFile } from 'node:fs/promises'\nimport { join } from 'node:path'\nimport { existsSync } from 'node:fs'\nimport { loadConfig } from './config'\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\nconst PROVIDER_ENV_KEYS: Record<string, string> = {\n openai: 'OPENAI_API_KEY',\n anthropic: 'ANTHROPIC_API_KEY',\n gemini: 'GEMINI_API_KEY',\n deepseek: 'DEEPSEEK_API_KEY',\n grok: 'XAI_API_KEY',\n kimi: 'KIMI_API_KEY',\n}\n\nconst PROVIDER_REACH_URLS: Record<string, string> = {\n openai: 'https://api.openai.com/v1/models',\n anthropic: 'https://api.anthropic.com/v1/messages',\n gemini: 'https://generativelanguage.googleapis.com/v1beta/models',\n ollama: 'http://localhost:11434/api/tags',\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 envKey = PROVIDER_ENV_KEYS[provider]\n if (!envKey) {\n return { status: 'skip', name: `${provider} API key`, detail: 'No env-key requirement for this provider' }\n }\n const value = process.env[envKey]\n if (!value) {\n return {\n status: 'skip',\n name: `${provider} API key`,\n detail: `${envKey} not set`,\n fix: `export ${envKey}=... (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 url = PROVIDER_REACH_URLS[provider]\n if (!url) {\n return { status: 'skip', name: `${provider} reachable`, detail: 'No reachability check configured' }\n }\n\n // Skip reachability if no API key is set for keyed providers\n const envKey = PROVIDER_ENV_KEYS[provider]\n if (envKey && !process.env[envKey]) {\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:\n provider === 'ollama'\n ? 'Start Ollama: `ollama serve` (or install from https://ollama.com)'\n : 'Check network / firewall / VPN settings',\n }\n } finally {\n clearTimeout(timer)\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 ?? ['openai', 'anthropic', 'gemini', 'ollama']\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 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 type { Command } from 'commander'\nimport { runDoctor, renderReport } from '../doctor'\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: openai,anthropic,gemini,ollama)',\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 { spawn, type ChildProcess } from 'node:child_process'\nimport { resolve as pathResolve, basename } from 'node:path'\nimport { existsSync } from 'node:fs'\nimport chokidar from 'chokidar'\nimport kleur from 'kleur'\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 ? 'tsx' : 'node'\n const baseArgs = [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 stopped = false\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 setTimeout(startChild, 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 (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 process.stdin.on('data', (data: Buffer) => {\n const key = data.toString()\n if (key === 'r') restart('manual')\n if (key === 'q' || key === '\\u0003') void stop()\n })\n }\n\n return {\n done,\n stop,\n restarts: () => restartCount,\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 { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { homedir } from 'node:os'\nimport path from 'node:path'\nimport type { Command } from 'commander'\nimport { loadConfig } 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(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 if (existsSync(targetPath) && !options.force) {\n process.stderr.write(\n `Config already exists at ${targetPath}. Re-run with --force to overwrite.\\n`,\n )\n process.exit(1)\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 writeFileSync(targetPath, JSON.stringify(template, null, 2) + '\\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 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 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 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 })\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 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 process.on('SIGINT', () => {\n void stop()\n })\n }\n\n return {\n url: tunnel.url,\n done,\n stop,\n requests: () => requests,\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 { 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 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","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","import { Command } from 'commander'\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'\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\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\n return program\n}\n"]}
|