@theokit/cli 3.0.2 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +239 -0
- package/LICENSE +2 -2
- package/README.md +13 -0
- package/dist/bin/theokit.cjs +59 -28
- package/dist/bin/theokit.cjs.map +1 -1
- package/dist/bin/theokit.js +59 -28
- package/dist/bin/theokit.js.map +1 -1
- package/dist/index.cjs +59 -28
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +127 -10
- package/dist/index.d.ts +127 -10
- package/dist/index.js +59 -28
- package/dist/index.js.map +1 -1
- package/package.json +19 -15
- package/templates/chatbot/.env.example +14 -0
- package/templates/chatbot/README.md +34 -0
- package/templates/chatbot/package.json +20 -0
- package/templates/chatbot/src/index.ts +88 -0
- package/templates/chatbot/tsconfig.json +12 -0
- package/templates/minimal/README.md +1 -1
- package/templates/multi-agent/.env.example +14 -0
- package/templates/multi-agent/README.md +33 -0
- package/templates/multi-agent/package.json +20 -0
- package/templates/multi-agent/src/index.ts +90 -0
- package/templates/multi-agent/tsconfig.json +12 -0
- package/templates/rag-agent/.env.example +14 -0
- package/templates/rag-agent/README.md +34 -0
- package/templates/rag-agent/package.json +21 -0
- package/templates/rag-agent/src/index.ts +115 -0
- package/templates/rag-agent/tsconfig.json +12 -0
- package/templates/telegram-bot/README.md +4 -4
- package/templates/telegram-bot/package.json +2 -2
- package/templates/telegram-bot/src/index.ts +2 -2
- package/templates/workflow-automation/.env.example +14 -0
- package/templates/workflow-automation/README.md +33 -0
- package/templates/workflow-automation/package.json +20 -0
- package/templates/workflow-automation/src/index.ts +86 -0
- package/templates/workflow-automation/tsconfig.json +12 -0
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dev/entry-resolver.ts","../src/commands/acp.ts","../src/commands/db.ts","../src/dev/runner.ts","../src/commands/dev.ts","../src/eval/config-loader.ts","../src/eval/report.ts","../src/eval/runner.ts","../src/commands/eval.ts","../src/version.ts","../src/init/templates.ts","../src/init/validate-name.ts","../src/init/scaffold.ts","../src/commands/init.ts","../src/inspect/gateway.ts","../src/inspect/plugins.ts","../src/commands/inspect.ts","../src/setup/gworkspace.ts","../src/commands/setup.ts","../src/commands/tasks.ts","../src/main.ts"],"names":["isAbsolute","resolve","existsSync","join","readFileSync","pathToFileURL","spawnSync","url","mkdirSync","dirname","writeFileSync","renameSync","readdirSync","unlinkSync","require","createRequire","spawn","pc","Eval","randomUUID","safePathJoin","PathTraversalError","fileURLToPath","lstatSync","relative","rmSync","randomBytes","p","homedir","Theokit","chmodSync","JsonFileTaskStore","Command"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Resolve the entry file for `theokit dev` (T4.1).\n *\n * Priority:\n * 1. Explicit `--entry <path>` flag.\n * 2. `package.json` `main` field.\n * 3. `src/index.ts` (or `.js` / `.mjs` / `.tsx`).\n * 4. `index.ts` at cwd root.\n *\n * Throws `entry_not_found` when nothing matches.\n *\n * @internal\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { isAbsolute, join, resolve } from \"node:path\";\n\nconst FALLBACK_CANDIDATES = [\n \"src/index.ts\",\n \"src/index.tsx\",\n \"src/index.mjs\",\n \"src/index.js\",\n \"index.ts\",\n \"index.mjs\",\n \"index.js\",\n];\n\nfunction entryNotFoundError(message: string): Error & { code?: string } {\n const err = new Error(message) as Error & { code?: string };\n err.code = \"entry_not_found\";\n return err;\n}\n\nfunction resolveFromExplicit(cwd: string, explicit: string): string {\n const abs = isAbsolute(explicit) ? explicit : resolve(cwd, explicit);\n if (!existsSync(abs)) throw entryNotFoundError(`Entry file not found: ${explicit}`);\n return abs;\n}\n\nfunction resolveFromPackageJson(cwd: string): string | undefined {\n const pkgPath = join(cwd, \"package.json\");\n if (!existsSync(pkgPath)) return undefined;\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf8\")) as { main?: string };\n if (typeof pkg.main === \"string\" && pkg.main.length > 0) {\n const abs = resolve(cwd, pkg.main);\n if (existsSync(abs)) return abs;\n }\n } catch {\n // Malformed package.json — fall through to candidates.\n }\n return undefined;\n}\n\nfunction resolveFromCandidates(cwd: string): string | undefined {\n for (const candidate of FALLBACK_CANDIDATES) {\n const abs = join(cwd, candidate);\n if (existsSync(abs)) return abs;\n }\n return undefined;\n}\n\nexport function resolveEntry(cwd: string, explicit?: string): string {\n if (explicit !== undefined && explicit.length > 0) return resolveFromExplicit(cwd, explicit);\n const fromPkg = resolveFromPackageJson(cwd);\n if (fromPkg !== undefined) return fromPkg;\n const fromCandidate = resolveFromCandidates(cwd);\n if (fromCandidate !== undefined) return fromCandidate;\n throw entryNotFoundError(\n `No entry file found. Pass --entry <path> or create one of: ${FALLBACK_CANDIDATES.join(\", \")}`,\n );\n}\n","/**\n * `theokit acp` CLI subcommand — launches an ACP stdio server pointing at\n * the resolved entry file's default-exported `SDKAgent` or factory.\n *\n * ADRs D357 + EC-4 (CJS interop fallback).\n *\n * @internal\n */\n\nimport { pathToFileURL } from \"node:url\";\nimport { resolveEntry } from \"../dev/entry-resolver.js\";\n\nexport interface AcpOptions {\n entry?: string;\n permission?: \"ask\" | \"auto\" | \"deny\";\n trustedTools?: string;\n permissionTimeoutMs?: string;\n}\n\n/**\n * Resolve the default export with CJS interop fallback (EC-4).\n *\n * ESM: `export default factory` → `mod.default === factory`\n * CJS: `module.exports = factory` → `mod.default === undefined`, `mod` IS factory\n */\nfunction resolveDefaultExport(mod: unknown): unknown {\n if (mod === null || mod === undefined) return undefined;\n const asObj = mod as { default?: unknown };\n return asObj.default ?? mod;\n}\n\nfunction isValidAgentShape(value: unknown): boolean {\n if (typeof value === \"function\") return true;\n if (typeof value !== \"object\" || value === null) return false;\n const obj = value as { agentId?: unknown; send?: unknown };\n return typeof obj.agentId === \"string\" && typeof obj.send === \"function\";\n}\n\nfunction fail(msg: string, code = 1): number {\n process.stderr.write(`theokit acp: ${msg}\\n`);\n return code;\n}\n\ntype ResolveAgentResult = { ok: true; agent: unknown } | { ok: false; exitCode: number };\n\nasync function loadAgentFromEntry(entryArg: string | undefined): Promise<ResolveAgentResult> {\n let entryPath: string;\n try {\n entryPath = resolveEntry(process.cwd(), entryArg);\n } catch (err) {\n return { ok: false, exitCode: fail(err instanceof Error ? err.message : String(err), 2) };\n }\n let mod: unknown;\n try {\n mod = await import(pathToFileURL(entryPath).href);\n } catch (err) {\n return {\n ok: false,\n exitCode: fail(`failed to import entry: ${err instanceof Error ? err.message : err}`, 1),\n };\n }\n const agent = resolveDefaultExport(mod);\n if (!isValidAgentShape(agent)) {\n return {\n ok: false,\n exitCode: fail(\n `entry ${entryPath} must export an SDKAgent or a factory (sessionId) => SDKAgent. Got: ${typeof agent}`,\n 2,\n ),\n };\n }\n return { ok: true, agent };\n}\n\ninterface ParsedFlags {\n permission: \"ask\" | \"auto\" | \"deny\";\n trustedTools?: ReadonlyArray<string>;\n permissionTimeoutMs?: number;\n}\n\ntype ParseFlagsResult = { ok: true; flags: ParsedFlags } | { ok: false; exitCode: number };\n\nfunction parseTrustedTools(raw: string | undefined): ReadonlyArray<string> | undefined {\n if (typeof raw !== \"string\" || raw.length === 0) return undefined;\n return raw\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n}\n\nfunction parseTimeout(raw: string | undefined): { ok: true; value?: number } | { ok: false } {\n if (typeof raw !== \"string\") return { ok: true };\n const n = Number.parseInt(raw, 10);\n if (!Number.isFinite(n) || n <= 0) return { ok: false };\n return { ok: true, value: n };\n}\n\nfunction parseFlags(opts: AcpOptions): ParseFlagsResult {\n const permission = opts.permission ?? \"ask\";\n if (permission !== \"ask\" && permission !== \"auto\" && permission !== \"deny\") {\n return { ok: false, exitCode: fail(`invalid --permission: ${permission}`, 2) };\n }\n const timeout = parseTimeout(opts.permissionTimeoutMs);\n if (!timeout.ok) {\n return {\n ok: false,\n exitCode: fail(`invalid --permission-timeout-ms: ${opts.permissionTimeoutMs}`, 2),\n };\n }\n const trustedTools = parseTrustedTools(opts.trustedTools);\n const flags: ParsedFlags = { permission };\n if (trustedTools !== undefined) flags.trustedTools = trustedTools;\n if (timeout.value !== undefined) flags.permissionTimeoutMs = timeout.value;\n return { ok: true, flags };\n}\n\nasync function importServeAcp(): Promise<\n { ok: true; serveAcp: typeof import(\"@theokit/acp\").serveAcp } | { ok: false; exitCode: number }\n> {\n try {\n const mod = await import(\"@theokit/acp\");\n return { ok: true, serveAcp: mod.serveAcp };\n } catch (err) {\n return {\n ok: false,\n exitCode: fail(\n `@theokit/acp not installed. Run: npm i @theokit/acp. (${err instanceof Error ? err.message : err})`,\n 1,\n ),\n };\n }\n}\n\nexport async function runAcp(opts: AcpOptions): Promise<number> {\n const agentRes = await loadAgentFromEntry(opts.entry);\n if (!agentRes.ok) return agentRes.exitCode;\n\n const flagsRes = parseFlags(opts);\n if (!flagsRes.ok) return flagsRes.exitCode;\n\n const serveRes = await importServeAcp();\n if (!serveRes.ok) return serveRes.exitCode;\n\n try {\n await serveRes.serveAcp({\n agent: agentRes.agent as never,\n permissionDefault: flagsRes.flags.permission,\n ...(flagsRes.flags.trustedTools !== undefined\n ? { trustedTools: flagsRes.flags.trustedTools }\n : {}),\n ...(flagsRes.flags.permissionTimeoutMs !== undefined\n ? { permissionTimeoutMs: flagsRes.flags.permissionTimeoutMs }\n : {}),\n });\n } catch (err) {\n return fail(err instanceof Error ? err.message : String(err), 1);\n }\n return 0;\n}\n\n// Test seam\nexport { isValidAgentShape, resolveDefaultExport };\n","/**\n * `theokit db` subcommand — thin wrapper over drizzle-kit (ADR D6 / orm-v1 D6:\n * delegate migrations to canonical drizzle-kit; do not reinvent).\n *\n * Subcommands:\n * - `theokit db generate` → drizzle-kit generate\n * - `theokit db migrate` → drizzle-kit migrate\n * - `theokit db studio` → drizzle-kit studio\n * - `theokit db push` → drizzle-kit push (dangerous, gated)\n * - `theokit db export-schema` → run @theokit/orm schema-export → .theokit/schema/{entity}.schema.json\n * - `theokit db check-schema-drift`\n * → re-emit and diff against committed schemas; exit 1 on drift\n *\n * Implementation principles:\n * - drizzle-kit lookups via the host workspace's node_modules (no bundled binary)\n * - export-schema and check-schema-drift load `orm.config.ts` from cwd\n * (must default-export `{ schema, dialect, db? }` shape — only `schema` is used)\n * - All file writes are atomic (write tmp + rename)\n * - All paths sanitized via path.resolve before write\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport {\n existsSync,\n mkdirSync,\n readdirSync,\n readFileSync,\n renameSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\ninterface DbCommandOptions {\n readonly cwd?: string;\n}\n\ninterface DbExportSchemaOptions extends DbCommandOptions {\n readonly out?: string;\n readonly config?: string;\n}\n\ntype DbCheckDriftOptions = DbExportSchemaOptions;\n\ninterface OrmConfig {\n schema: Record<string, unknown>;\n}\n\nfunction findDrizzleKit(cwd: string): string | null {\n const candidates = [\n join(cwd, \"node_modules\", \".bin\", \"drizzle-kit\"),\n join(cwd, \"node_modules\", \"drizzle-kit\", \"bin.cjs\"),\n ];\n for (const c of candidates) {\n if (existsSync(c)) return c;\n }\n return null;\n}\n\nfunction runDrizzleKit(verb: string, cwd: string, extraArgs: string[] = []): number {\n const bin = findDrizzleKit(cwd);\n if (!bin) {\n process.stderr.write(\n \"theokit db: drizzle-kit not found in node_modules. Install it: pnpm add -D drizzle-kit\\n\",\n );\n return 2;\n }\n const r = spawnSync(bin, [verb, ...extraArgs], { cwd, stdio: \"inherit\" });\n if (r.status === null) return 1;\n return r.status;\n}\n\nexport function runDbGenerate(opts: DbCommandOptions = {}): number {\n return runDrizzleKit(\"generate\", opts.cwd ?? process.cwd());\n}\nexport function runDbMigrate(opts: DbCommandOptions = {}): number {\n return runDrizzleKit(\"migrate\", opts.cwd ?? process.cwd());\n}\nexport function runDbStudio(opts: DbCommandOptions = {}): number {\n return runDrizzleKit(\"studio\", opts.cwd ?? process.cwd());\n}\nexport function runDbPush(opts: DbCommandOptions = {}): number {\n return runDrizzleKit(\"push\", opts.cwd ?? process.cwd());\n}\n\nasync function loadOrmConfig(configPath: string): Promise<OrmConfig> {\n if (!existsSync(configPath)) {\n throw new Error(\n `theokit db: orm.config not found at ${configPath}. Create one that default-exports { schema } (the Drizzle schema object).`,\n );\n }\n // Cache-bust so consecutive invocations (drift workflows, tests) see edits.\n const bust = `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n const url = `${pathToFileURL(configPath).href}?v=${bust}`;\n const mod = (await import(url)) as { default?: OrmConfig };\n if (!mod.default || typeof mod.default !== \"object\" || !mod.default.schema) {\n throw new Error(\n `theokit db: orm.config at ${configPath} must default-export { schema }. Got: ${typeof mod.default}`,\n );\n }\n return mod.default;\n}\n\ninterface SchemaExportModule {\n exportSchemas: (schema: Record<string, unknown>) => Record<string, unknown>;\n}\n\nasync function loadSchemaExporter(cwd: string): Promise<SchemaExportModule> {\n const candidates = [\n join(cwd, \"node_modules\", \"@theokit\", \"orm\", \"dist\", \"schema-export.js\"),\n join(cwd, \"node_modules\", \"@theokit\", \"orm\", \"schema-export.js\"),\n ];\n for (const c of candidates) {\n if (existsSync(c)) {\n return (await import(pathToFileURL(c).href)) as SchemaExportModule;\n }\n }\n throw new Error(\"theokit db: @theokit/orm is not installed. Install it: pnpm add @theokit/orm\");\n}\n\nfunction atomicWrite(filePath: string, content: string): void {\n mkdirSync(dirname(filePath), { recursive: true });\n const tmp = `${filePath}.${process.pid}.tmp`;\n writeFileSync(tmp, content, { mode: 0o644 });\n renameSync(tmp, filePath);\n}\n\nasync function loadConfigOrError(\n configPath: string,\n): Promise<{ ok: true; value: OrmConfig } | { ok: false; code: number }> {\n try {\n return { ok: true, value: await loadOrmConfig(configPath) };\n } catch (err) {\n process.stderr.write(`${err instanceof Error ? err.message : String(err)}\\n`);\n return { ok: false, code: 2 };\n }\n}\n\nasync function loadExporterOrError(\n cwd: string,\n): Promise<{ ok: true; value: SchemaExportModule } | { ok: false; code: number }> {\n try {\n return { ok: true, value: await loadSchemaExporter(cwd) };\n } catch (err) {\n process.stderr.write(`${err instanceof Error ? err.message : String(err)}\\n`);\n return { ok: false, code: 2 };\n }\n}\n\nfunction exportSchemasOrError(\n exporter: SchemaExportModule,\n schema: OrmConfig[\"schema\"],\n): { ok: true; value: Record<string, unknown> } | { ok: false; code: number } {\n try {\n return { ok: true, value: exporter.exportSchemas(schema) };\n } catch (err) {\n process.stderr.write(\n `theokit db: schema export failed: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n return { ok: false, code: 1 };\n }\n}\n\nfunction writeSchemasToOutDir(schemas: Record<string, unknown>, outDir: string): void {\n mkdirSync(outDir, { recursive: true });\n // Clean existing .schema.json files (so renamed/dropped entities don't linger)\n for (const f of readdirSync(outDir).filter((n) => n.endsWith(\".schema.json\"))) {\n unlinkSync(join(outDir, f));\n }\n for (const [name, schema] of Object.entries(schemas)) {\n const target = join(outDir, `${name}.schema.json`);\n atomicWrite(target, `${JSON.stringify(schema, null, 2)}\\n`);\n }\n}\n\nexport async function runDbExportSchema(opts: DbExportSchemaOptions = {}): Promise<number> {\n const cwd = opts.cwd ?? process.cwd();\n const configPath = resolve(cwd, opts.config ?? \"orm.config.ts\");\n const outDir = resolve(cwd, opts.out ?? \".theokit/schema\");\n\n const configResult = await loadConfigOrError(configPath);\n if (!configResult.ok) return configResult.code;\n\n const exporterResult = await loadExporterOrError(cwd);\n if (!exporterResult.ok) return exporterResult.code;\n\n const schemasResult = exportSchemasOrError(exporterResult.value, configResult.value.schema);\n if (!schemasResult.ok) return schemasResult.code;\n\n writeSchemasToOutDir(schemasResult.value, outDir);\n process.stdout.write(\n `theokit db: wrote ${Object.keys(schemasResult.value).length} schema(s) to ${outDir}\\n`,\n );\n return 0;\n}\n\nfunction readCommittedSchemas(outDir: string): Record<string, unknown> {\n if (!existsSync(outDir)) return {};\n const out: Record<string, unknown> = {};\n for (const f of readdirSync(outDir).filter((n) => n.endsWith(\".schema.json\"))) {\n const name = f.replace(/\\.schema\\.json$/, \"\");\n out[name] = JSON.parse(readFileSync(join(outDir, f), \"utf-8\"));\n }\n return out;\n}\n\ninterface SchemaDrift {\n added: string[];\n removed: string[];\n changed: string[];\n}\n\nfunction computeSchemaDrift(\n fresh: Record<string, unknown>,\n committed: Record<string, unknown>,\n): SchemaDrift {\n const freshKeys = new Set(Object.keys(fresh));\n const committedKeys = new Set(Object.keys(committed));\n const added = [...freshKeys].filter((k) => !committedKeys.has(k));\n const removed = [...committedKeys].filter((k) => !freshKeys.has(k));\n const changed = [...freshKeys].filter(\n (k) => committedKeys.has(k) && JSON.stringify(fresh[k]) !== JSON.stringify(committed[k]),\n );\n return { added, removed, changed };\n}\n\nfunction reportSchemaDrift(drift: SchemaDrift): number {\n const { added, removed, changed } = drift;\n if (added.length === 0 && removed.length === 0 && changed.length === 0) {\n process.stdout.write(\"theokit db: schema in sync (no drift)\\n\");\n return 0;\n }\n process.stderr.write(\"theokit db: schema drift detected\\n\");\n if (added.length > 0) process.stderr.write(` added: ${added.join(\", \")}\\n`);\n if (removed.length > 0) process.stderr.write(` removed: ${removed.join(\", \")}\\n`);\n if (changed.length > 0) process.stderr.write(` changed: ${changed.join(\", \")}\\n`);\n process.stderr.write(\"Run `theokit db export-schema` to refresh.\\n\");\n return 1;\n}\n\nexport async function runDbCheckSchemaDrift(opts: DbCheckDriftOptions = {}): Promise<number> {\n const cwd = opts.cwd ?? process.cwd();\n const configPath = resolve(cwd, opts.config ?? \"orm.config.ts\");\n const outDir = resolve(cwd, opts.out ?? \".theokit/schema\");\n\n const configResult = await loadConfigOrError(configPath);\n if (!configResult.ok) return configResult.code;\n\n const exporterResult = await loadExporterOrError(cwd);\n if (!exporterResult.ok) return exporterResult.code;\n\n const fresh = exporterResult.value.exportSchemas(configResult.value.schema);\n const committed = readCommittedSchemas(outDir);\n return reportSchemaDrift(computeSchemaDrift(fresh, committed));\n}\n","/**\n * Spawn `tsx --watch` against the resolved entry (T4.1, ADR D197).\n *\n * @internal\n */\n\nimport { type ChildProcess, spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { join } from \"node:path\";\n\ninterface RunnerOptions {\n entry: string;\n cwd: string;\n envFile?: string;\n /** Pass `--watch` to tsx. Default true (production). Tests use false. */\n watch?: boolean;\n}\n\ninterface RunnerHandle {\n child: ChildProcess;\n exited: Promise<number>;\n}\n\n/**\n * Resolve the `tsx` CLI bin from CLI-package node_modules (NOT user's).\n * Ensures consistent tsx version regardless of consumer project state.\n */\nfunction resolveTsxBin(): string {\n const require = createRequire(import.meta.url);\n // tsx exports the CLI under `./cli` (subpath); verified against\n // tsx@4.22 package.json exports.\n return require.resolve(\"tsx/cli\");\n}\n\nexport function startRunner(opts: RunnerOptions): RunnerHandle {\n const tsxBin = resolveTsxBin();\n const args: string[] = [];\n if (opts.watch !== false) args.push(\"--watch\");\n const envFile = opts.envFile ?? \".env\";\n const envFileAbs = join(opts.cwd, envFile);\n if (existsSync(envFileAbs)) {\n args.push(\"--env-file\", envFile);\n }\n args.push(opts.entry);\n\n const child = spawn(process.execPath, [tsxBin, ...args], {\n cwd: opts.cwd,\n stdio: \"inherit\",\n env: process.env,\n });\n\n const exited = new Promise<number>((resolve) => {\n child.on(\"exit\", (code, signal) => {\n resolve(code ?? (signal !== null ? 130 : 0));\n });\n });\n\n // Forward SIGINT / SIGTERM gracefully. Give child 5s to clean up, then\n // SIGKILL.\n let killTimer: NodeJS.Timeout | undefined;\n const forward = (sig: NodeJS.Signals): void => {\n if (child.killed) return;\n child.kill(sig);\n killTimer = setTimeout(() => {\n if (!child.killed) child.kill(\"SIGKILL\");\n }, 5000);\n killTimer.unref();\n };\n process.on(\"SIGINT\", () => forward(\"SIGTERM\"));\n process.on(\"SIGTERM\", () => forward(\"SIGTERM\"));\n\n // Clear the kill timer once the child exits.\n child.on(\"exit\", () => {\n if (killTimer !== undefined) clearTimeout(killTimer);\n });\n\n return { child, exited };\n}\n","/**\n * `theokit dev` — run the project's entry under `tsx --watch` with stdio\n * forwarding and graceful shutdown (T4.1, ADR D197).\n *\n * @internal\n */\n\nimport pc from \"picocolors\";\n\nimport { resolveEntry } from \"../dev/entry-resolver.js\";\nimport { startRunner } from \"../dev/runner.js\";\n\nexport interface DevOptions {\n entry?: string;\n env?: string;\n}\n\nexport async function runDev(opts: DevOptions): Promise<number> {\n let entry: string;\n try {\n entry = resolveEntry(process.cwd(), opts.entry);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n const code = (err as { code?: string }).code ?? \"unknown\";\n process.stderr.write(`${pc.red(\"error:\")} ${message}\\n ${pc.gray(`(code: ${code})`)}\\n`);\n return code === \"entry_not_found\" ? 2 : 1;\n }\n\n process.stdout.write(`${pc.cyan(\"[dev]\")} watching ${pc.bold(entry)} — Ctrl+C to stop.\\n`);\n\n let handle: ReturnType<typeof startRunner>;\n try {\n handle = startRunner({\n entry,\n cwd: process.cwd(),\n ...(opts.env !== undefined ? { envFile: opts.env } : {}),\n });\n } catch (err) {\n process.stderr.write(\n `${pc.red(\"error:\")} could not spawn tsx — ${err instanceof Error ? err.message : String(err)}\\n` +\n ` ${pc.gray(\"Hint: try `pnpm install` to repair @theokit/cli.\")}\\n`,\n );\n return 1;\n }\n\n const exitCode = await handle.exited;\n return exitCode;\n}\n","/**\n * Load + validate the user's `eval.config.{ts,mjs}` (T5.1).\n *\n * Uses dynamic `import()` so tsx handles `.ts` transpilation. Zod\n * validates the exported shape.\n *\n * @internal\n */\n\nimport { existsSync } from \"node:fs\";\nimport { isAbsolute, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport type { EvalConfig } from \"./types.js\";\n\nfunction configError(code: string, message: string): Error & { code?: string } {\n const err = new Error(message) as Error & { code?: string };\n err.code = code;\n return err;\n}\n\nasync function importConfig(abs: string): Promise<{ default?: unknown }> {\n try {\n return (await import(pathToFileURL(abs).href)) as { default?: unknown };\n } catch (cause) {\n throw configError(\n \"config_load_failed\",\n `Failed to load eval config (${abs}): ${cause instanceof Error ? cause.message : String(cause)}`,\n );\n }\n}\n\nfunction validateShape(cfg: Partial<EvalConfig>, abs: string): EvalConfig {\n if (!Array.isArray(cfg.dataset)) throwShapeError(abs, \"dataset\", \"must be an array\");\n if (!Array.isArray(cfg.scorers)) throwShapeError(abs, \"scorers\", \"must be an array\");\n if (cfg.agent === undefined || typeof cfg.agent !== \"object\") {\n throwShapeError(abs, \"agent\", \"must be an Agent.create() options object\");\n }\n return cfg as EvalConfig;\n}\n\nexport async function loadEvalConfig(cwd: string, configPath?: string): Promise<EvalConfig> {\n const relPath = configPath ?? \"./eval.config.ts\";\n const abs = isAbsolute(relPath) ? relPath : resolve(cwd, relPath);\n if (!existsSync(abs)) throw configError(\"config_not_found\", `Eval config not found: ${abs}`);\n\n const mod = await importConfig(abs);\n if (mod.default === undefined) {\n throw configError(\n \"config_no_default_export\",\n `Eval config (${abs}) must have a default export. Example: \\`export default { dataset, scorers, agent } satisfies EvalConfig;\\``,\n );\n }\n return validateShape(mod.default as Partial<EvalConfig>, abs);\n}\n\nfunction throwShapeError(abs: string, field: string, why: string): never {\n const err = new Error(`Eval config (${abs}) is invalid: field \"${field}\" ${why}.`) as Error & {\n code?: string;\n };\n err.code = \"config_invalid_shape\";\n throw err;\n}\n","/**\n * Markdown report emitter for `theokit eval` (T5.1).\n *\n * @internal\n */\n\nimport type { EvalRunResult } from \"./types.js\";\n\nexport function formatReport(result: EvalRunResult): string {\n const lines: string[] = [];\n lines.push(\"# Eval Report\");\n lines.push(\"\");\n lines.push(`- **Total rows:** ${result.aggregate.totalRows}`);\n lines.push(`- **Mean score:** ${result.aggregate.meanScore.toFixed(3)}`);\n lines.push(`- **Pass ratio (≥0.5):** ${(result.aggregate.passRatio * 100).toFixed(1)}%`);\n lines.push(`- **Error rows:** ${result.aggregate.errorRows}`);\n lines.push(\"\");\n lines.push(\"## Per-row results\");\n lines.push(\"\");\n lines.push(\"| # | Input | Output | Mean | Scores | Notes |\");\n lines.push(\"|---|---|---|---:|---|---|\");\n for (let i = 0; i < result.rows.length; i += 1) {\n const row = result.rows[i];\n if (row === undefined) continue;\n const input = escapeMd(truncate(row.input, 60));\n const output = row.error !== undefined ? `*error*` : escapeMd(truncate(row.output, 80));\n const mean = row.meanScore.toFixed(3);\n const scores =\n row.scores.length > 0\n ? row.scores\n .map(\n (s) =>\n `${s.name}=${s.score.toFixed(2)}${s.reason !== undefined ? ` (${escapeMd(s.reason)})` : \"\"}`,\n )\n .join(\"; \")\n : \"—\";\n const notes = row.error !== undefined ? escapeMd(row.error) : \"\";\n lines.push(`| ${i + 1} | ${input} | ${output} | ${mean} | ${scores} | ${notes} |`);\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction truncate(s: string, max: number): string {\n if (s.length <= max) return s;\n return `${s.slice(0, max - 1)}…`;\n}\n\nfunction escapeMd(s: string): string {\n return s.replaceAll(\"|\", \"\\\\|\").replaceAll(\"\\n\", \" \");\n}\n","/**\n * Eval runner — D212 swap: now consumes `Eval.create + .run` from the SDK\n * (Adoption Roadmap #2). The public `EvalConfig` shape is unchanged —\n * D199 made this a forward-compatible move.\n *\n * Why preserve the CLI's `EvalRunResult` shape: the markdown report\n * generator + existing tests depend on it. The SDK's `EvalRun` is a\n * superset; we adapt at the boundary.\n *\n * @internal\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { Eval, type EvalRun, type Scorer as SdkScorer } from \"@theokit/sdk/eval\";\n\nimport type { EvalConfig, EvalRowResult, EvalRunResult } from \"./types.js\";\n\nexport async function runEvalSuite(config: EvalConfig): Promise<EvalRunResult> {\n if (config.dataset.length === 0) {\n return {\n rows: [],\n aggregate: { meanScore: 0, passRatio: 0, totalRows: 0, errorRows: 0 },\n };\n }\n\n // Translate CLI's EvalConfig → SDK's EvalOptions. Scorers map 1:1 because\n // both surfaces use the same `Scorer` type per D207.\n const sdkScorers = config.scorers.map((s) => ({\n name: s.name,\n score: s.score as SdkScorer,\n }));\n\n const run: EvalRun = await Eval.create({\n // Unique per-process name for telemetry correlation (D213). Use UUID\n // so concurrent CLI invocations on different terminals don't collide.\n name: `theokit-eval-${randomUUID().slice(0, 8)}`,\n dataset: config.dataset,\n scorers: sdkScorers,\n agent: config.agent,\n ...(config.concurrency !== undefined ? { concurrency: config.concurrency } : {}),\n }).run();\n\n // Adapt SDK's EvalRun to the CLI's existing EvalRunResult shape. The CLI\n // shape is simpler (no p50/p95/tokens — those live in SDK aggregate);\n // the markdown report consumes the simple shape.\n const rows: EvalRowResult[] = run.rows.map((r) => ({\n input: r.input,\n output: r.output,\n ...(r.expected !== undefined ? { expected: r.expected } : {}),\n scores: r.scores.map((s) => ({\n name: s.name,\n score: s.score,\n ...(s.reason !== undefined ? { reason: s.reason } : {}),\n })),\n meanScore: r.meanScore,\n ...(r.error !== undefined ? { error: r.error } : {}),\n }));\n\n return {\n rows,\n aggregate: {\n meanScore: run.aggregate.meanScore,\n passRatio: run.aggregate.passRatio,\n totalRows: run.aggregate.totalRows,\n errorRows: run.aggregate.errorRows,\n },\n };\n}\n","/**\n * `theokit eval` — minimal v1 eval runner (T5.1, ADR D199).\n *\n * EC-F MUST FIX (edge-case review 2026-05-22): validate `--output` path\n * via `safePathJoin` (D80) BEFORE writing. Without this, --output\n * `../../../etc/passwd-report.md` escapes cwd.\n *\n * @internal\n */\n\nimport { writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\n\nimport { PathTraversalError, safePathJoin } from \"@theokit/sdk/path-safety\";\nimport pc from \"picocolors\";\n\nimport { loadEvalConfig } from \"../eval/config-loader.js\";\nimport { formatReport } from \"../eval/report.js\";\nimport { runEvalSuite } from \"../eval/runner.js\";\n\nexport interface EvalOptions {\n config?: string;\n output?: string;\n}\n\nfunction resolveOutputPath(cwd: string, output: string | undefined): string {\n const target = output ?? \"eval-report.md\";\n try {\n // EC-F: safePathJoin throws PathTraversalError if `target` escapes cwd.\n return safePathJoin(cwd, target);\n } catch (err) {\n if (err instanceof PathTraversalError) {\n const e = new Error(\n `--output path must be inside the current working directory. Got: ${target}`,\n ) as Error & { code?: string };\n e.code = \"invalid_output_path\";\n throw e;\n }\n throw err;\n }\n}\n\nfunction reportError(err: unknown, prefix = \"error:\"): { message: string; code: string } {\n const message = err instanceof Error ? err.message : String(err);\n const code = (err as { code?: string }).code ?? \"unknown\";\n process.stderr.write(`${pc.red(prefix)} ${message}\\n ${pc.gray(`(code: ${code})`)}\\n`);\n return { message, code };\n}\n\nasync function loadAndValidateConfig(\n cwd: string,\n configPath: string | undefined,\n): Promise<Awaited<ReturnType<typeof loadEvalConfig>> | { failureExit: number }> {\n try {\n return await loadEvalConfig(cwd, configPath);\n } catch (err) {\n const { code } = reportError(err);\n return { failureExit: code.startsWith(\"config_\") ? 2 : 1 };\n }\n}\n\nfunction writeReport(outputAbs: string, report: string): boolean {\n try {\n void dirname; // path is already resolved; dirname imported for future use\n writeFileSync(outputAbs, report, \"utf8\");\n return true;\n } catch (err) {\n process.stderr.write(\n `${pc.red(\"error:\")} could not write report to ${outputAbs} — ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n return false;\n }\n}\n\nexport async function runEval(opts: EvalOptions): Promise<number> {\n const cwd = process.cwd();\n\n // EC-F: validate --output BEFORE loading config (cheaper failure).\n let outputAbs: string;\n try {\n outputAbs = resolveOutputPath(cwd, opts.output);\n } catch (err) {\n reportError(err);\n return 2;\n }\n\n const configOrErr = await loadAndValidateConfig(cwd, opts.config);\n if (\"failureExit\" in configOrErr) return configOrErr.failureExit;\n const config = configOrErr;\n\n process.stdout.write(\n `${pc.cyan(\"[eval]\")} running ${config.dataset.length} prompt(s) with ${config.scorers.length} scorer(s)...\\n`,\n );\n\n let result: Awaited<ReturnType<typeof runEvalSuite>>;\n try {\n result = await runEvalSuite(config);\n } catch (err) {\n process.stderr.write(\n `${pc.red(\"error:\")} eval run failed — ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n return 1;\n }\n\n if (!writeReport(outputAbs, formatReport(result))) return 1;\n\n process.stdout.write(\n `\\n${pc.green(\"✓\")} ${result.aggregate.totalRows} rows · mean score ${result.aggregate.meanScore.toFixed(3)} · ` +\n `${(result.aggregate.passRatio * 100).toFixed(1)}% pass · ${result.aggregate.errorRows} error(s)\\n` +\n ` report: ${outputAbs}\\n`,\n );\n\n return 0;\n}\n","/**\n * Build-time version constants for @theokit/cli.\n *\n * `__SDK_VERSION__` is the sibling `@theokit/sdk` semver (NEVER\n * `workspace:*` — resolved at build time via tsup `define`). Used by\n * `init` templates to pin the SDK dep in scaffolded projects (EC-L\n * fix from edge-case review).\n *\n * `__CLI_VERSION__` is this package's semver. Exposed via `--version`.\n */\n\ndeclare const __SDK_VERSION__: string;\ndeclare const __CLI_VERSION__: string;\n\nexport const SDK_VERSION: string = __SDK_VERSION__;\nexport const CLI_VERSION: string = __CLI_VERSION__;\n","/**\n * Template registry for `theokit init` (T2.1, ADR D200).\n *\n * Three templates ship at v1: `minimal`, `ollama-local`, `telegram-bot`.\n * Each is a literal directory copied to `<dest>/` at scaffold time, with\n * `{{projectName}}` and `{{sdkVersion}}` substituted in text files.\n *\n * @internal\n */\n\ninterface TemplateMeta {\n readonly name: string;\n readonly description: string;\n readonly hint: string;\n}\n\nexport const TEMPLATES: ReadonlyArray<TemplateMeta> = [\n {\n name: \"minimal\",\n description: \"Smallest possible agent — one Agent.create + send + stream.\",\n hint: \"Set ANTHROPIC_API_KEY / OPENAI_API_KEY / OPENROUTER_API_KEY in .env.\",\n },\n {\n name: \"ollama-local\",\n description: \"100% local agent via Ollama (no remote API key required).\",\n hint: \"Requires `ollama serve` + `ollama pull llama3.2:3b`.\",\n },\n {\n name: \"telegram-bot\",\n description: \"Telegram bot via @theokit/gateway + grammy.\",\n hint: \"Get a bot token from @BotFather, set TELEGRAM_BOT_TOKEN in .env.\",\n },\n] as const;\n\nexport function findTemplate(name: string): TemplateMeta | undefined {\n return TEMPLATES.find((t) => t.name === name);\n}\n\nexport const DEFAULT_TEMPLATE = \"minimal\";\n","/**\n * EC-A MUST FIX (edge-case review 2026-05-22): validate project name\n * against npm rules BEFORE any filesystem write. npm rejects:\n * - uppercase letters\n * - spaces / special chars other than `.`, `-`, `_`\n * - leading dot / leading underscore (with exceptions)\n * - scoped names without `@<scope>/<name>` shape\n *\n * Without this, the onboarding flow breaks on FIRST `pnpm install`\n * with a cryptic npm error — and the user can't tell whether it's a\n * CLI bug or their input.\n *\n * @internal\n */\n\n/**\n * Returns `true` if the name is valid for use as the `name` field in\n * `package.json` (npm-compatible).\n *\n * Pattern derived from npm's own `validate-npm-package-name` rules\n * (simplified — we cover the common 99% case, not every edge of npm's\n * legacy compat).\n */\nconst NPM_NAME_RE = /^(?:@[a-z0-9-][a-z0-9._-]{0,213}\\/)?[a-z0-9][a-z0-9._-]{0,213}$/;\n\nconst RESERVED_NAMES = new Set([\"node_modules\", \"favicon.ico\", \"..\", \".\"]);\n\ninterface NameValidation {\n ok: boolean;\n reason?: string;\n}\n\nexport function validateProjectName(name: string): NameValidation {\n if (typeof name !== \"string\" || name.length === 0) {\n return { ok: false, reason: \"Project name is required.\" };\n }\n if (RESERVED_NAMES.has(name)) {\n return { ok: false, reason: `Name \"${name}\" is reserved.` };\n }\n if (name.length > 214) {\n return { ok: false, reason: \"Project name must be ≤ 214 characters.\" };\n }\n if (!NPM_NAME_RE.test(name)) {\n return {\n ok: false,\n reason:\n \"Invalid project name. Use lowercase letters, numbers, dashes, dots, or underscores. \" +\n \"Examples: `my-bot`, `@scope/my-bot`, `chat.bot`.\",\n };\n }\n return { ok: true };\n}\n","/**\n * Scaffold engine for `theokit init` (T2.1, ADRs D196 + D200).\n *\n * Walks `templates/<name>/`, copies files to `<dest>/`, performs\n * placeholder substitution (`{{projectName}}`, `{{sdkVersion}}`).\n *\n * **EC-B MUST FIX**: writes go to `<dest>.tmp-<random>/` first, then\n * atomic `renameSync` at the end. On any error mid-copy, the tmp dir\n * is cleaned up — `<dest>` is either fully scaffolded or absent.\n *\n * **EC-G MUST TEST**: symlinks at `<dest>` are rejected (path-guard).\n *\n * @internal\n */\n\nimport { randomBytes } from \"node:crypto\";\nimport {\n cpSync,\n existsSync,\n lstatSync,\n mkdirSync,\n readdirSync,\n readFileSync,\n renameSync,\n rmSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { SDK_VERSION } from \"../version.js\";\nimport { findTemplate } from \"./templates.js\";\nimport { validateProjectName } from \"./validate-name.js\";\n\ninterface ScaffoldOptions {\n projectName: string;\n template: string;\n cwd: string;\n force?: boolean;\n}\n\ninterface ScaffoldResult {\n destAbs: string;\n filesWritten: number;\n}\n\n/** Files NOT substituted (binary/strict-content). All current templates are text-only. */\nconst SUBSTITUTE_EXTS = new Set([\n \".ts\",\n \".tsx\",\n \".js\",\n \".mjs\",\n \".json\",\n \".md\",\n \".env\",\n \".example\",\n \".gitignore\",\n \".yml\",\n \".yaml\",\n]);\n\n/**\n * Resolve the bundled `templates/` directory. Works in both:\n * - dev (loaded from src/, templates at ../templates relative to src/init/)\n * - published (loaded from dist/, templates at ../../templates relative to dist/init/)\n */\nfunction resolveTemplatesRoot(): string {\n const here = fileURLToPath(new URL(\".\", import.meta.url));\n // Walk up looking for a `templates/` sibling.\n let dir = here;\n for (let i = 0; i < 5; i += 1) {\n const candidate = join(dir, \"templates\");\n if (existsSync(candidate) && lstatSync(candidate).isDirectory()) return candidate;\n const parent = dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n throw new Error(\n `Could not locate bundled templates/ directory (searched up from ${here}). ` +\n `This usually means the published tarball was built without \"files\": [\"templates\"] (EC-C regression).`,\n );\n}\n\nfunction scaffoldError(code: string, message: string): Error & { code?: string } {\n const err = new Error(message) as Error & { code?: string };\n err.code = code;\n return err;\n}\n\nfunction validateNameAndTemplate(opts: ScaffoldOptions): void {\n const nameCheck = validateProjectName(opts.projectName);\n if (!nameCheck.ok) {\n throw scaffoldError(\"invalid_project_name\", nameCheck.reason ?? \"Invalid project name.\");\n }\n if (findTemplate(opts.template) === undefined) {\n throw scaffoldError(\"unknown_template\", `Unknown template \"${opts.template}\".`);\n }\n}\n\nfunction validateDest(cwdAbs: string, destAbs: string, projectName: string, force: boolean): void {\n const rel = relative(cwdAbs, destAbs);\n if (rel.startsWith(\"..\") || isAbsolute(rel)) {\n throw scaffoldError(\n \"invalid_dest\",\n `Project name \"${projectName}\" escapes the working directory.`,\n );\n }\n if (!existsSync(destAbs)) return;\n if (lstatSync(destAbs).isSymbolicLink()) {\n throw scaffoldError(\n \"dest_is_symlink\",\n `Destination \"${destAbs}\" is a symlink. Refuse to follow (EC-G safety).`,\n );\n }\n if (readdirSync(destAbs).length > 0 && !force) {\n throw scaffoldError(\n \"dest_not_empty\",\n `Destination \"${destAbs}\" already exists and is not empty. Pass --force to overwrite.`,\n );\n }\n}\n\nfunction atomicCopy(\n sourceAbs: string,\n tmpAbs: string,\n destAbs: string,\n projectName: string,\n): number {\n try {\n mkdirSync(tmpAbs, { recursive: true });\n const filesWritten = copyTreeWithSubstitution(sourceAbs, tmpAbs, {\n projectName,\n sdkVersion: SDK_VERSION,\n });\n if (existsSync(destAbs)) rmSync(destAbs, { recursive: true, force: true });\n renameSync(tmpAbs, destAbs);\n return filesWritten;\n } catch (err) {\n try {\n rmSync(tmpAbs, { recursive: true, force: true });\n } catch {\n // best-effort cleanup\n }\n throw err;\n }\n}\n\nexport async function scaffold(opts: ScaffoldOptions): Promise<ScaffoldResult> {\n validateNameAndTemplate(opts);\n const cwdAbs = resolve(opts.cwd);\n const destAbs = resolve(cwdAbs, opts.projectName);\n validateDest(cwdAbs, destAbs, opts.projectName, opts.force === true);\n\n const tmpAbs = `${destAbs}.tmp-${randomBytes(4).toString(\"hex\")}`;\n const sourceAbs = join(resolveTemplatesRoot(), opts.template);\n if (!existsSync(sourceAbs)) {\n throw new Error(\n `Template directory not found: ${sourceAbs}. Ensure the published package included templates/ (EC-C).`,\n );\n }\n\n const filesWritten = atomicCopy(sourceAbs, tmpAbs, destAbs, opts.projectName);\n return { destAbs, filesWritten };\n}\n\ninterface SubstitutionVars {\n projectName: string;\n sdkVersion: string;\n}\n\nfunction copyTreeWithSubstitution(srcDir: string, destDir: string, vars: SubstitutionVars): number {\n // For test-friendliness + substitution control, walk the tree ourselves\n // instead of using `cpSync` opaque copy.\n const counter = { count: 0 };\n walk(srcDir, destDir, vars, counter);\n // `cpSync` left in import list for future use (e.g., copying binary assets).\n void cpSync;\n return counter.count;\n}\n\nfunction walk(src: string, dst: string, vars: SubstitutionVars, counter: { count: number }): void {\n mkdirSync(dst, { recursive: true });\n for (const entry of readdirSync(src, { withFileTypes: true })) {\n const srcPath = join(src, entry.name);\n const dstPath = join(dst, entry.name);\n if (entry.isDirectory()) {\n walk(srcPath, dstPath, vars, counter);\n } else if (entry.isFile()) {\n copyFile(srcPath, dstPath, entry.name, vars);\n counter.count += 1;\n }\n }\n}\n\nfunction copyFile(srcPath: string, dstPath: string, name: string, vars: SubstitutionVars): void {\n const content = readFileSync(srcPath, \"utf8\");\n const ext = name.includes(\".\") ? `.${name.split(\".\").pop() ?? \"\"}` : \"\";\n const shouldSubstitute =\n SUBSTITUTE_EXTS.has(ext) || name === \".gitignore\" || name === \".env.example\";\n const out = shouldSubstitute\n ? content\n .replaceAll(\"{{projectName}}\", vars.projectName)\n .replaceAll(\"{{sdkVersion}}\", vars.sdkVersion)\n : content;\n writeFileSync(dstPath, out, \"utf8\");\n}\n","/**\n * `theokit init [project-name]` — scaffold a new project from a bundled\n * template (T2.1, ADRs D196 + D200).\n *\n * @internal\n */\n\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\n\nimport { scaffold } from \"../init/scaffold.js\";\nimport { DEFAULT_TEMPLATE, findTemplate, TEMPLATES } from \"../init/templates.js\";\n\nexport interface InitOptions {\n template?: string;\n force?: boolean;\n here?: boolean;\n yes?: boolean;\n}\n\nasync function resolveProjectName(\n projectName: string | undefined,\n skipPrompts: boolean,\n): Promise<string | { exitCode: number }> {\n if (projectName !== undefined && projectName.length > 0) return projectName;\n if (skipPrompts) {\n process.stderr.write(\n `${pc.red(\"error: \")}project name is required in non-interactive mode. Pass it as the positional argument: ${pc.cyan(\n \"theokit init <project-name>\",\n )}\\n`,\n );\n return { exitCode: 2 };\n }\n const answer = await p.text({\n message: \"Project name?\",\n placeholder: \"my-bot\",\n validate: (v) => (v.length === 0 ? \"Required.\" : undefined),\n });\n if (p.isCancel(answer)) return { exitCode: 0 };\n return answer;\n}\n\nasync function resolveTemplate(\n optsTemplate: string | undefined,\n skipPrompts: boolean,\n): Promise<string | { exitCode: number }> {\n let template = optsTemplate ?? DEFAULT_TEMPLATE;\n if (optsTemplate === undefined && !skipPrompts) {\n const answer = await p.select({\n message: \"Pick a template:\",\n options: TEMPLATES.map((t) => ({ value: t.name, label: t.name, hint: t.description })),\n initialValue: DEFAULT_TEMPLATE,\n });\n if (p.isCancel(answer)) return { exitCode: 0 };\n template = answer as string;\n }\n if (findTemplate(template) === undefined) {\n process.stderr.write(\n `${pc.red(\"error: \")}unknown template \"${template}\". Available: ${TEMPLATES.map((t) => t.name).join(\", \")}\\n`,\n );\n return { exitCode: 2 };\n }\n return template;\n}\n\nconst USER_ERROR_CODES = new Set([\n \"invalid_project_name\",\n \"dest_not_empty\",\n \"invalid_dest\",\n \"unknown_template\",\n]);\n\nasync function runScaffold(name: string, template: string, force: boolean): Promise<number> {\n try {\n const result = await scaffold({\n projectName: name,\n template,\n cwd: process.cwd(),\n ...(force ? { force: true } : {}),\n });\n process.stdout.write(\n `\\n${pc.green(\"✓\")} Scaffolded ${pc.bold(name)} (${template}) — ${result.filesWritten} files written.\\n` +\n `\\nNext steps:\\n` +\n ` ${pc.cyan(`cd ${name}`)}\\n` +\n ` ${pc.cyan(\"pnpm install\")}\\n` +\n ` ${pc.cyan(\"cp .env.example .env\")} ${pc.gray(\"# edit your keys\")}\\n` +\n ` ${pc.cyan(\"pnpm dev\")}\\n\\n` +\n `Template hint: ${findTemplate(template)?.hint ?? \"\"}\\n`,\n );\n return 0;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n const code = (err as { code?: string }).code ?? \"unknown\";\n process.stderr.write(`${pc.red(\"error:\")} ${message}\\n ${pc.gray(`(code: ${code})`)}\\n`);\n return USER_ERROR_CODES.has(code) ? 2 : 1;\n }\n}\n\nexport async function runInit(projectName: string | undefined, opts: InitOptions): Promise<number> {\n const isTty = process.stdin.isTTY === true && process.stdout.isTTY === true;\n const skipPrompts = opts.yes === true || !isTty;\n\n const name = await resolveProjectName(projectName, skipPrompts);\n if (typeof name !== \"string\") return name.exitCode;\n\n const template = await resolveTemplate(opts.template, skipPrompts);\n if (typeof template !== \"string\") return template.exitCode;\n\n return runScaffold(name, template, opts.force === true);\n}\n","/**\n * Gateway adapter discovery for `theokit inspect` (T3.1).\n *\n * Unlike LLM providers (registry-based) and embedding adapters (single\n * catalog), gateway adapters live in separate workspace packages\n * (`@theokit/gateway-telegram`, `@theokit/gateway-discord`). We detect\n * presence by attempting to resolve the package; absent = not installed.\n *\n * @internal\n */\n\nimport { createRequire } from \"node:module\";\n\ninterface GatewayInfo {\n readonly name: string;\n readonly packageName: string;\n readonly installed: boolean;\n}\n\nconst KNOWN_GATEWAYS = [\n { name: \"telegram\", packageName: \"@theokit/gateway-telegram\" },\n { name: \"discord\", packageName: \"@theokit/gateway-discord\" },\n] as const;\n\nexport function listGatewayAdapters(): GatewayInfo[] {\n const require = createRequire(import.meta.url);\n return KNOWN_GATEWAYS.map((g) => {\n let installed = false;\n try {\n require.resolve(g.packageName);\n installed = true;\n } catch {\n installed = false;\n }\n return { name: g.name, packageName: g.packageName, installed };\n });\n}\n","/**\n * Plugin discovery for `theokit inspect` (T3.1, ADR D198).\n *\n * Read-only filesystem walk of `~/.theokit/plugins/` and\n * `<cwd>/.theokit/plugins/`. Does NOT execute plugin code (safe to run\n * in CI). Plugin manifests are markdown + YAML frontmatter per D77.\n *\n * @internal\n */\n\nimport { existsSync, lstatSync, readdirSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\ninterface PluginInfo {\n readonly name: string;\n readonly source: \"user-global\" | \"project\";\n readonly description?: string;\n readonly path: string;\n}\n\nfunction parseFrontmatter(content: string): { name?: string; description?: string } {\n const match = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n if (match === null) return {};\n const out: { name?: string; description?: string } = {};\n for (const line of (match[1] ?? \"\").split(\"\\n\")) {\n const [k, ...rest] = line.split(\":\");\n if (k === undefined || rest.length === 0) continue;\n const key = k.trim();\n const val = rest.join(\":\").trim();\n if (key === \"name\") out.name = val;\n else if (key === \"description\") out.description = val;\n }\n return out;\n}\n\nfunction loadPluginManifest(\n root: string,\n name: string,\n source: PluginInfo[\"source\"],\n): PluginInfo | undefined {\n const manifestPath = join(root, name, \"PLUGIN.md\");\n if (!existsSync(manifestPath)) return undefined;\n try {\n const fm = parseFrontmatter(readFileSync(manifestPath, \"utf8\"));\n return {\n name: fm.name ?? name,\n source,\n ...(fm.description !== undefined ? { description: fm.description } : {}),\n path: manifestPath,\n };\n } catch {\n // Malformed manifest — skip silently (per D198 invariant).\n return undefined;\n }\n}\n\nfunction walkPluginDir(root: string, source: PluginInfo[\"source\"]): PluginInfo[] {\n if (!existsSync(root) || !lstatSync(root).isDirectory()) return [];\n const out: PluginInfo[] = [];\n for (const entry of readdirSync(root, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const info = loadPluginManifest(root, entry.name, source);\n if (info !== undefined) out.push(info);\n }\n return out.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport function listPlugins(cwd: string): PluginInfo[] {\n const userPlugins = walkPluginDir(join(homedir(), \".theokit\", \"plugins\"), \"user-global\");\n const projectPlugins = walkPluginDir(join(cwd, \".theokit\", \"plugins\"), \"project\");\n // EC-N (DOCUMENT): project entries override user-global on name collision (mirror of D162).\n const byName = new Map<string, PluginInfo>();\n for (const p of userPlugins) byName.set(p.name, p);\n for (const p of projectPlugins) byName.set(p.name, p);\n return Array.from(byName.values()).sort((a, b) => a.name.localeCompare(b.name));\n}\n","/**\n * `theokit inspect` — discovery of bundled SDK assets + installed\n * gateway adapters + user plugins (T3.1, ADR D198 + D201).\n *\n * Consumes `Theokit.inspect.*` (D201) — the SDK's public introspection\n * API — to avoid `ERR_PACKAGE_PATH_NOT_EXPORTED` against published\n * installs (EC-E fix).\n *\n * @internal\n */\n\nimport { Theokit } from \"@theokit/sdk\";\nimport pc from \"picocolors\";\n\nimport { listGatewayAdapters } from \"../inspect/gateway.js\";\nimport { listPlugins } from \"../inspect/plugins.js\";\n\nexport interface InspectOptions {\n json?: boolean;\n filter?: string;\n}\n\ninterface InspectResult {\n providers: ReturnType<typeof Theokit.inspect.builtinProviders>;\n embeddingAdapters: ReturnType<typeof Theokit.inspect.embeddingAdapters>;\n gateways: ReturnType<typeof listGatewayAdapters>;\n plugins: ReturnType<typeof listPlugins>;\n}\n\nfunction collect(filter: string | undefined, cwd: string): InspectResult {\n const all = filter === undefined || filter === \"all\";\n const empty = { providers: [], embeddingAdapters: [], gateways: [], plugins: [] };\n const result: InspectResult = empty as InspectResult;\n if (all || filter === \"providers\") {\n result.providers = Theokit.inspect.builtinProviders();\n }\n if (all || filter === \"adapters\") {\n result.embeddingAdapters = Theokit.inspect.embeddingAdapters();\n }\n if (all || filter === \"gateway\") {\n result.gateways = listGatewayAdapters();\n }\n if (all || filter === \"plugins\") {\n result.plugins = listPlugins(cwd);\n }\n return result;\n}\n\nfunction formatProviders(providers: InspectResult[\"providers\"]): string[] {\n if (providers.length === 0) return [];\n const lines = [pc.bold(pc.cyan(\"Builtin LLM providers\"))];\n for (const p of providers) {\n const aliases =\n p.aliases !== undefined && p.aliases.length > 0 ? ` (aliases: ${p.aliases.join(\", \")})` : \"\";\n lines.push(\n ` • ${pc.green(p.name)}${aliases} — ${p.apiMode} · auth: ${p.authType} · ${p.baseUrl}`,\n );\n }\n lines.push(\"\");\n return lines;\n}\n\nfunction formatEmbeddings(adapters: InspectResult[\"embeddingAdapters\"]): string[] {\n if (adapters.length === 0) return [];\n const lines = [pc.bold(pc.cyan(\"Memory embedding adapters\"))];\n for (const a of adapters) {\n lines.push(` • ${pc.green(a.id)} — ${a.transport} · default model: ${a.defaultModel}`);\n }\n lines.push(\"\");\n return lines;\n}\n\nfunction formatGateways(gateways: InspectResult[\"gateways\"]): string[] {\n if (gateways.length === 0) return [];\n const lines = [pc.bold(pc.cyan(\"Gateway adapters\"))];\n for (const g of gateways) {\n const status = g.installed ? pc.green(\"installed\") : pc.gray(\"not installed\");\n lines.push(` • ${pc.green(g.name)} (${g.packageName}) — ${status}`);\n }\n lines.push(\"\");\n return lines;\n}\n\nfunction formatPlugins(r: InspectResult): string[] {\n if (r.plugins.length > 0) {\n const lines = [pc.bold(pc.cyan(\"User plugins\"))];\n for (const pl of r.plugins) {\n const desc = pl.description !== undefined ? ` — ${pl.description}` : \"\";\n lines.push(` • ${pc.green(pl.name)} [${pl.source}]${desc}`);\n }\n return lines;\n }\n if (r.providers.length > 0 || r.embeddingAdapters.length > 0) {\n return [pc.gray(\"(no user plugins found in ~/.theokit/plugins/ or ./.theokit/plugins/)\")];\n }\n return [];\n}\n\nfunction formatHuman(r: InspectResult): string {\n const lines = [\n ...formatProviders(r.providers),\n ...formatEmbeddings(r.embeddingAdapters),\n ...formatGateways(r.gateways),\n ...formatPlugins(r),\n ];\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport async function runInspect(opts: InspectOptions): Promise<number> {\n // Validate filter.\n const VALID_FILTERS = new Set([\"all\", \"providers\", \"adapters\", \"gateway\", \"plugins\"]);\n if (opts.filter !== undefined && !VALID_FILTERS.has(opts.filter)) {\n process.stderr.write(\n `${pc.red(\"error:\")} invalid --filter \"${opts.filter}\". Valid: ${Array.from(VALID_FILTERS).join(\", \")}\\n`,\n );\n return 2;\n }\n\n const result = collect(opts.filter, process.cwd());\n if (opts.json === true) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n } else {\n process.stdout.write(formatHuman(result));\n }\n return 0;\n}\n","/**\n * `theokit setup gworkspace` — Google Workspace credentials walkthrough.\n *\n * Pre-flight (EC-1 + EC-2): validate `credentials.json` is a Desktop-type\n * OAuth client BEFORE shelling out to upstream `google-workspace-mcp setup`.\n * Upstream does not surface this distinction up-front and users hit\n * cryptic 401s during `accounts add` otherwise.\n *\n * After validation, this wraps `npx google-workspace-mcp setup` and\n * `accounts add` so the SDK-branded experience matches `theokit init` /\n * `theokit dev`.\n *\n * Per ADR D344 v1.2: credentials live at upstream's default `~/.google-mcp/`.\n * Per ADR D345 v1.2: OAuth is fully delegated to upstream.\n *\n * @internal\n */\n\nimport { spawn } from \"node:child_process\";\nimport { chmodSync, existsSync, mkdirSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { isAbsolute, join, resolve } from \"node:path\";\n\nimport pc from \"picocolors\";\n\nconst UPSTREAM_PACKAGE = \"google-workspace-mcp@^2.3.0\";\nconst DEFAULT_CONFIG_DIR = join(homedir(), \".google-mcp\");\nconst DEFAULT_CREDS_FILENAME = \"credentials.json\";\n\nconst PROBE_TIMEOUT_MS = 10_000;\n\nexport interface GworkspaceSetupOptions {\n /** Comma-separated list of scopes to grant write access to (calendar,drive,sheets,docs,gmail). */\n writable?: string;\n /** When true, runs `npx google-workspace-mcp status` after setup. */\n probe?: boolean;\n /** When true, refuses interactive prompts. */\n nonInteractive?: boolean;\n /** Override path to credentials.json. Default ~/.google-mcp/credentials.json. */\n credentialsPath?: string;\n}\n\ntype CredentialsCheckOutcome =\n | { kind: \"ok\"; path: string }\n | { kind: \"missing\"; path: string }\n | { kind: \"malformed\"; path: string; reason: string }\n | { kind: \"wrong_type\"; path: string }\n | { kind: \"rejected_path\"; path: string; reason: string };\n\n/**\n * Validate the file at `credentialsPath`. Public for tests.\n *\n * - EC-2: rejects malformed JSON with a parse-error message.\n * - EC-1 (MUST FIX): rejects Web-type OAuth client (has `.web` key instead of `.installed`).\n * - Path traversal: rejects paths outside the user's home (defense in depth — D80).\n *\n * @internal\n */\nfunction isPathTraversal(p: string): boolean {\n return (\n p.includes(\"../\") ||\n p.includes(\"..\\\\\") ||\n p === \"..\" ||\n p.startsWith(\"../\") ||\n p.startsWith(\"..\\\\\")\n );\n}\n\nfunction readAndParseJson(\n resolved: string,\n): { kind: \"ok\"; parsed: unknown } | { kind: \"malformed\"; reason: string } {\n let raw: string;\n try {\n raw = readFileSync(resolved, \"utf8\");\n } catch (err) {\n return { kind: \"malformed\", reason: err instanceof Error ? err.message : String(err) };\n }\n try {\n return { kind: \"ok\", parsed: JSON.parse(raw) };\n } catch (err) {\n return { kind: \"malformed\", reason: err instanceof Error ? err.message : String(err) };\n }\n}\n\nfunction validateOAuthShape(parsed: unknown, resolved: string): CredentialsCheckOutcome {\n if (parsed === null || typeof parsed !== \"object\") {\n return { kind: \"malformed\", path: resolved, reason: \"expected JSON object\" };\n }\n const obj = parsed as { installed?: unknown; web?: unknown };\n if (obj.installed === undefined && obj.web !== undefined) {\n return { kind: \"wrong_type\", path: resolved };\n }\n if (typeof obj.installed !== \"object\" || obj.installed === null) {\n return {\n kind: \"malformed\",\n path: resolved,\n reason: \"missing `installed` block (expected Desktop OAuth client shape)\",\n };\n }\n return { kind: \"ok\", path: resolved };\n}\n\nexport function checkCredentialsFile(credentialsPath: string): CredentialsCheckOutcome {\n if (isPathTraversal(credentialsPath)) {\n return { kind: \"rejected_path\", path: credentialsPath, reason: \"path traversal\" };\n }\n const resolved = resolve(credentialsPath);\n if (!existsSync(resolved)) return { kind: \"missing\", path: resolved };\n\n const parseResult = readAndParseJson(resolved);\n if (parseResult.kind === \"malformed\") {\n return { kind: \"malformed\", path: resolved, reason: parseResult.reason };\n }\n return validateOAuthShape(parseResult.parsed, resolved);\n}\n\nfunction describeOutcome(o: CredentialsCheckOutcome): string {\n switch (o.kind) {\n case \"missing\":\n return (\n `${pc.red(\"error: \")}credentials.json not found at ${o.path}.\\n\\n` +\n `To create it:\\n` +\n ` 1. Go to https://console.cloud.google.com/apis/credentials\\n` +\n ` 2. Create OAuth 2.0 Client ID — Application type: ${pc.bold(\"Desktop application\")}\\n` +\n ` 3. Download the JSON and save it as ${o.path}\\n`\n );\n case \"malformed\":\n return `${pc.red(\"error: \")}credentials.json could not be parsed: ${o.reason}\\n path: ${o.path}\\n`;\n case \"wrong_type\":\n return (\n `${pc.red(\"error: \")}This looks like a ${pc.bold('\"Web application\"')} OAuth client.\\n\\n` +\n `Re-create as ${pc.bold('\"Desktop application\"')} in Google Cloud Console:\\n` +\n ` https://console.cloud.google.com/apis/credentials\\n` +\n `(Click \"+ Create credentials\" → \"OAuth client ID\" → Application type: ${pc.bold(\"Desktop app\")}.)\\n\\n` +\n `Then re-download and save to: ${o.path}\\n`\n );\n case \"rejected_path\":\n return `${pc.red(\"error: \")}credentials path rejected: ${o.reason}\\n path: ${o.path}\\n`;\n case \"ok\":\n return \"\";\n }\n}\n\nfunction resolveCredentialsPath(opts: GworkspaceSetupOptions): string {\n if (opts.credentialsPath !== undefined && opts.credentialsPath.length > 0) {\n return isAbsolute(opts.credentialsPath) ? opts.credentialsPath : resolve(opts.credentialsPath);\n }\n return join(DEFAULT_CONFIG_DIR, DEFAULT_CREDS_FILENAME);\n}\n\nasync function runProbeMode(): Promise<number> {\n process.stdout.write(`\\n${pc.cyan(\"[probe]\")} running upstream connectivity check...\\n`);\n const code = await spawnUpstream([\"status\"], PROBE_TIMEOUT_MS);\n if (code !== 0) {\n process.stderr.write(\n `${pc.yellow(\"warn: \")}upstream status reported a non-zero exit (${code}). Run \\`npx ${UPSTREAM_PACKAGE} accounts list\\` to inspect.\\n`,\n );\n return code;\n }\n return 0;\n}\n\nasync function runInteractiveSetup(): Promise<number> {\n process.stdout.write(\n `\\n${pc.cyan(\"→\")} delegating to upstream installer (${UPSTREAM_PACKAGE})...\\n`,\n );\n const setupCode = await spawnUpstream([\"setup\"]);\n if (setupCode !== 0) {\n process.stderr.write(`${pc.red(\"error: \")}upstream setup exited with code ${setupCode}.\\n`);\n return setupCode;\n }\n process.stdout.write(`\\n${pc.cyan(\"→\")} adding default account...\\n`);\n const addCode = await spawnUpstream([\"accounts\", \"add\", \"default\"]);\n if (addCode !== 0) {\n process.stderr.write(\n `${pc.red(\"error: \")}upstream \\`accounts add\\` exited with code ${addCode}.\\n`,\n );\n return addCode;\n }\n return 0;\n}\n\nexport async function runGworkspaceSetup(opts: GworkspaceSetupOptions): Promise<number> {\n const credentialsPath = resolveCredentialsPath(opts);\n\n // Ensure parent dir exists (mode 0700 where POSIX honored).\n try {\n mkdirSync(DEFAULT_CONFIG_DIR, { recursive: true, mode: 0o700 });\n } catch {\n // Non-fatal — if mkdir fails the credentials check will catch it.\n }\n\n // EC-1 + EC-2 + path-traversal — validate BEFORE shelling out.\n const outcome = checkCredentialsFile(credentialsPath);\n if (outcome.kind !== \"ok\") {\n process.stderr.write(describeOutcome(outcome));\n return 2;\n }\n\n // Defense-in-depth: best-effort chmod 600 on POSIX. Windows fails silently.\n try {\n chmodSync(outcome.path, 0o600);\n } catch {\n // EC-6 (DOCUMENT): non-fatal on Windows / FAT32. Carry on.\n }\n\n process.stdout.write(\n `${pc.green(\"✓\")} credentials validated: ${outcome.path}\\n${pc.dim(\" shape: Desktop OAuth client (installed block present)\")}\\n`,\n );\n\n if (opts.probe === true) return runProbeMode();\n\n if (opts.nonInteractive === true) {\n process.stdout.write(\n `${pc.dim(\"non-interactive mode: credentials staged. Next step (manual):\")}\\n ${pc.cyan(`npx ${UPSTREAM_PACKAGE} accounts add default`)}\\n`,\n );\n return 0;\n }\n\n const interactiveCode = await runInteractiveSetup();\n if (interactiveCode !== 0) return interactiveCode;\n\n if (typeof opts.writable === \"string\" && opts.writable.length > 0) {\n process.stdout.write(\n `\\n${pc.yellow(\"note:\")} you passed --writable=${opts.writable}. ` +\n `The upstream MCP server does not narrow scopes — all scopes are granted at consent.\\n` +\n `Write tools are gated at runtime by ${pc.bold(\"googleWorkspace({ writable: true })\")} in your code.\\n`,\n );\n }\n\n process.stdout.write(\n `\\n${pc.green(\"✓\")} gworkspace setup complete.\\n` +\n `${pc.dim(' Next: import { googleWorkspace } from \"@theokit/skills-google-workspace\".')}\\n`,\n );\n return 0;\n}\n\n/** Spawn `npx <UPSTREAM_PACKAGE> ...args` with an optional timeout. Returns exit code. @internal */\nfunction spawnUpstream(args: string[], timeoutMs?: number): Promise<number> {\n return new Promise((resolveExit) => {\n const child = spawn(\"npx\", [\"-y\", UPSTREAM_PACKAGE, ...args], {\n stdio: \"inherit\",\n env: process.env,\n });\n let timer: NodeJS.Timeout | undefined;\n if (timeoutMs !== undefined) {\n timer = setTimeout(() => {\n process.stderr.write(\n `${pc.yellow(\"warn: \")}upstream did not finish within ${timeoutMs}ms — killing.\\n`,\n );\n try {\n child.kill(\"SIGTERM\");\n } catch {\n // already dead\n }\n }, timeoutMs);\n }\n child.on(\"error\", (err) => {\n if (timer !== undefined) clearTimeout(timer);\n process.stderr.write(\n `${pc.red(\"error: \")}failed to spawn npx: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n resolveExit(1);\n });\n child.on(\"exit\", (code) => {\n if (timer !== undefined) clearTimeout(timer);\n resolveExit(code ?? 1);\n });\n });\n}\n","/**\n * `theokit setup <domain>` — top-level CLI verb dispatcher.\n *\n * Currently knows ONE domain: `gworkspace`. Future domains (`notion`,\n * `linear`, etc.) plug in the same way.\n *\n * Per ADR D346, `setup` is reserved for credential staging + connectivity\n * probes for third-party integrations. The flow shells out to the upstream\n * tool's own setup whenever that's safer than re-implementing OAuth.\n *\n * @internal\n */\n\nimport pc from \"picocolors\";\n\nimport { type GworkspaceSetupOptions, runGworkspaceSetup } from \"../setup/gworkspace.js\";\n\nexport interface SetupOptions {\n writable?: string;\n probe?: boolean;\n credentialsPath?: string;\n nonInteractive?: boolean;\n}\n\nexport async function runSetup(domain: string, opts: SetupOptions): Promise<number> {\n if (domain === \"gworkspace\") {\n const gworkspaceOpts: GworkspaceSetupOptions = {\n writable: opts.writable,\n probe: opts.probe === true,\n nonInteractive: opts.nonInteractive === true,\n ...(opts.credentialsPath !== undefined ? { credentialsPath: opts.credentialsPath } : {}),\n };\n return await runGworkspaceSetup(gworkspaceOpts);\n }\n process.stderr.write(\n `${pc.red(\"error: \")}unknown setup domain '${domain}'. Supported domains: gworkspace.\\n`,\n );\n return 2;\n}\n","/**\n * `theokit tasks {list|inspect|cancel}` — operator-facing observability\n * for the SDK Task registry (Adoption Roadmap gap #2; ADRs D361-D374).\n *\n * Reads from the JsonFileTaskStore at `$THEOKIT_HOME/tasks/` (default\n * fallback `cwd/.theokit/tasks/`). Cross-process cancel is best-effort:\n * the CLI marks `cancelRequested: true` in the handle file, and the\n * owning process honors it at the next checkpoint (EC-7).\n *\n * Exit codes (consistent with the other subcommands in this package):\n * 0 — success\n * 2 — permission / I/O failure\n * 3 — invalid task id grammar (D368)\n * 4 — task not found\n */\n\nimport { join } from \"node:path\";\n\nimport type { TaskFilter, TaskHandle, TaskState } from \"@theokit/sdk\";\nimport { JsonFileTaskStore, type TaskStore } from \"@theokit/sdk/task-store\";\n\n// Local copy of the id grammar — keeps the CLI dependency surface minimal\n// and matches D368 (`^[a-z0-9][a-z0-9_-]*$`). Adapters use reserved\n// prefixes wf-/b-/cron-; the CLI always allows them.\nconst TASK_ID_GRAMMAR = /^[a-z0-9][a-z0-9_-]*$/;\nfunction isValidTaskId(id: string): boolean {\n return TASK_ID_GRAMMAR.test(id);\n}\n\nexport interface TasksListOptions {\n state?: string;\n kind?: string;\n json?: boolean;\n}\n\nexport interface TasksInspectOptions {\n json?: boolean;\n}\n\nexport interface TasksCancelOptions {\n reason?: string;\n}\n\nfunction resolveStoreDir(): string {\n const fromEnv = process.env.THEOKIT_HOME;\n if (typeof fromEnv === \"string\" && fromEnv.length > 0) return join(fromEnv, \"tasks\");\n return join(process.cwd(), \".theokit\", \"tasks\");\n}\n\nfunction openStore(): TaskStore {\n const dir = resolveStoreDir();\n try {\n return new JsonFileTaskStore(dir);\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === \"EACCES\") {\n process.stderr.write(`tasks: cannot access store dir ${dir}: permission denied\\n`);\n throw new Error(\"permission_denied\");\n }\n throw err;\n }\n}\n\nfunction formatTable(handles: readonly TaskHandle[]): string {\n if (handles.length === 0) return \"No tasks found.\";\n const rows = handles.map((h) => ({\n id: h.id.slice(0, 24).padEnd(24),\n kind: h.kind.padEnd(8),\n state: h.state.padEnd(9),\n age: `${Math.floor((Date.now() - h.submittedAt) / 1000)}s`.padStart(6),\n }));\n const header = \"ID KIND STATE AGE\";\n const lines = rows.map((r) => `${r.id} ${r.kind} ${r.state} ${r.age}`);\n return [header, ...lines].join(\"\\n\");\n}\n\nasync function listHandles(store: TaskStore, opts: TasksListOptions): Promise<TaskHandle[]> {\n const filter: TaskFilter = {\n ...(opts.state !== undefined ? { state: opts.state as TaskState } : {}),\n ...(opts.kind !== undefined ? { kind: opts.kind as TaskHandle[\"kind\"] } : {}),\n };\n return store.list(filter);\n}\n\nexport async function runTasksList(opts: TasksListOptions): Promise<number> {\n let store: TaskStore;\n try {\n store = openStore();\n } catch {\n return 2;\n }\n const handles = await listHandles(store, opts);\n if (opts.json === true) {\n process.stdout.write(`${JSON.stringify(handles, null, 2)}\\n`);\n } else {\n process.stdout.write(`${formatTable(handles)}\\n`);\n }\n return 0;\n}\n\nfunction printHandleDetails(handle: TaskHandle): void {\n process.stdout.write(`id: ${handle.id}\\n`);\n process.stdout.write(`kind: ${handle.kind}\\n`);\n process.stdout.write(`state: ${handle.state}\\n`);\n process.stdout.write(`submittedAt: ${new Date(handle.submittedAt).toISOString()}\\n`);\n if (handle.startedAt !== undefined) {\n process.stdout.write(`startedAt: ${new Date(handle.startedAt).toISOString()}\\n`);\n }\n if (handle.finishedAt !== undefined) {\n process.stdout.write(`finishedAt: ${new Date(handle.finishedAt).toISOString()}\\n`);\n process.stdout.write(`result: ${JSON.stringify(handle.result)}\\n`);\n }\n if (handle.erroredAt !== undefined) {\n process.stdout.write(`erroredAt: ${new Date(handle.erroredAt).toISOString()}\\n`);\n process.stdout.write(`error: ${JSON.stringify(handle.error)}\\n`);\n }\n if (handle.cancelledAt !== undefined) {\n process.stdout.write(`cancelledAt: ${new Date(handle.cancelledAt).toISOString()}\\n`);\n }\n if (handle.cancelRequested === true) {\n process.stdout.write(`cancelRequested: true (awaiting owning process)\\n`);\n }\n}\n\nexport async function runTasksInspect(id: string, opts: TasksInspectOptions): Promise<number> {\n if (!isValidTaskId(id)) {\n process.stderr.write(`tasks: invalid id grammar: ${id}\\n`);\n return 3;\n }\n let store: TaskStore;\n try {\n store = openStore();\n } catch {\n return 2;\n }\n const handle = await store.get(id);\n if (handle === undefined) {\n process.stderr.write(`tasks: not found: ${id}\\n`);\n return 4;\n }\n if (opts.json === true) {\n process.stdout.write(`${JSON.stringify(handle, null, 2)}\\n`);\n } else {\n printHandleDetails(handle);\n }\n return 0;\n}\n\nexport async function runTasksCancel(id: string, _opts: TasksCancelOptions): Promise<number> {\n if (!isValidTaskId(id)) {\n process.stderr.write(`tasks: invalid id grammar: ${id}\\n`);\n return 3;\n }\n let store: TaskStore;\n try {\n store = openStore();\n } catch {\n return 2;\n }\n const handle = await store.get(id);\n if (handle === undefined) {\n process.stderr.write(`tasks: not found: ${id}\\n`);\n return 4;\n }\n if (handle.state === \"finished\" || handle.state === \"error\" || handle.state === \"cancelled\") {\n process.stdout.write(`task already terminal (state=${handle.state})\\n`);\n return 0;\n }\n if (handle.state === \"queued\") {\n // Direct transition (no owning process AbortController to flip).\n const cancelledAt = Date.now();\n await store.update(id, (h) => ({ ...h, state: \"cancelled\", cancelledAt }));\n process.stdout.write(`task ${id} cancelled (was queued)\\n`);\n return 0;\n }\n // Running: set cancelRequested flag; owning process honors at next checkpoint.\n await store.update(id, (h) => ({ ...h, cancelRequested: true }));\n process.stdout.write(\n `cancel requested for task ${id}; the owning process will honor it at the next checkpoint\\n`,\n );\n return 0;\n}\n","/**\n * Top-level CLI dispatcher via commander (ADR D194).\n *\n * Subcommands: `init`, `dev`, `inspect`, `eval`, `setup`, `acp`, `tasks`.\n *\n * Exit codes:\n * - 0 → success\n * - 1 → unknown error\n * - 2 → user error (bad flags, unknown subcommand suggestion)\n *\n * @internal\n */\n\nimport { Command } from \"commander\";\n\nimport { type AcpOptions, runAcp } from \"./commands/acp.js\";\nimport {\n runDbCheckSchemaDrift,\n runDbExportSchema,\n runDbGenerate,\n runDbMigrate,\n runDbPush,\n runDbStudio,\n} from \"./commands/db.js\";\nimport { type DevOptions, runDev } from \"./commands/dev.js\";\nimport { type EvalOptions, runEval } from \"./commands/eval.js\";\nimport { type InitOptions, runInit } from \"./commands/init.js\";\nimport { type InspectOptions, runInspect } from \"./commands/inspect.js\";\nimport { runSetup, type SetupOptions } from \"./commands/setup.js\";\nimport {\n runTasksCancel,\n runTasksInspect,\n runTasksList,\n type TasksCancelOptions,\n type TasksInspectOptions,\n type TasksListOptions,\n} from \"./commands/tasks.js\";\nimport { CLI_VERSION, SDK_VERSION } from \"./version.js\";\n\nfunction registerSubcommands(program: Command, setExit: (n: number) => void): void {\n program\n .command(\"init [project-name]\")\n .description(\"Scaffold a new agent project from a bundled template.\")\n .option(\"-t, --template <name>\", \"Template name: minimal | ollama-local | telegram-bot\")\n .option(\"-f, --force\", \"Overwrite a non-empty destination directory\")\n .option(\"--here\", \"Scaffold into the current directory\")\n .option(\"-y, --yes\", \"Skip interactive prompts (CI mode)\")\n .action(async (projectName: string | undefined, opts: InitOptions) => {\n setExit(await runInit(projectName, opts));\n });\n\n program\n .command(\"dev\")\n .description(\"Run the agent entry point under tsx --watch (hot-reload).\")\n .option(\"--entry <path>\", \"Entry file (default: src/index.ts or package.main)\")\n .option(\"--env <path>\", \"Env file to load (default: .env)\")\n .action(async (opts: DevOptions) => {\n setExit(await runDev(opts));\n });\n\n program\n .command(\"inspect\")\n .description(\"List builtin providers, embedding adapters, gateways, and plugins.\")\n .option(\"--json\", \"Emit machine-readable JSON instead of the human tree view\")\n .option(\n \"--filter <kind>\",\n \"Narrow output to one kind: providers | adapters | gateway | plugins\",\n )\n .action(async (opts: InspectOptions) => {\n setExit(await runInspect(opts));\n });\n\n program\n .command(\"eval\")\n .description(\"Run an eval suite against a real LLM and emit a markdown report.\")\n .option(\"-c, --config <path>\", \"Eval config file (default: ./eval.config.ts)\")\n .option(\"-o, --output <path>\", \"Report output path (default: ./eval-report.md)\")\n .action(async (opts: EvalOptions) => {\n setExit(await runEval(opts));\n });\n\n program\n .command(\"acp\")\n .description(\n \"Launch a stdio Agent Client Protocol (ACP) server pointing at the entry file's default-exported agent. Used by Zed/Cursor/Claude Desktop. ADRs D349-D360.\",\n )\n .option(\"--entry <path>\", \"Entry file (default: src/index.ts or package.main)\")\n .option(\"--permission <mode>\", \"Tool permission mode: ask | auto | deny (default: ask)\")\n .option(\"--trusted-tools <list>\", \"Comma-separated tool names that bypass ask\")\n .option(\"--permission-timeout-ms <ms>\", \"Permission request timeout in ms (default: 60000)\")\n .action(async (opts: AcpOptions) => {\n setExit(await runAcp(opts));\n });\n\n program\n .command(\"setup <domain>\")\n .description(\n \"Stage credentials + connectivity probe for a third-party integration. Domains: gworkspace (Google Workspace).\",\n )\n .option(\n \"--writable <products>\",\n \"Comma-separated products to grant write access (e.g., 'drive,calendar')\",\n )\n .option(\"--probe\", \"Run upstream connectivity check after staging credentials\")\n .option(\n \"--credentials-path <path>\",\n \"Override path to credentials.json (default: ~/.google-mcp/credentials.json)\",\n )\n .option(\"--non-interactive\", \"Refuse interactive prompts; suitable for CI\")\n .action(async (domain: string, opts: SetupOptions) => {\n setExit(await runSetup(domain, opts));\n });\n\n const db = program\n .command(\"db\")\n .description(\n \"Database tooling — wraps drizzle-kit (generate/migrate/studio/push) and emits polyglot JSON Schema 7 (export-schema/check-schema-drift). Consumes orm.config.ts that default-exports { schema }.\",\n );\n\n db.command(\"generate\")\n .description(\"drizzle-kit generate — generate SQL migrations from your schema diff\")\n .action(() => {\n setExit(runDbGenerate());\n });\n db.command(\"migrate\")\n .description(\"drizzle-kit migrate — apply pending migrations to the database\")\n .action(() => {\n setExit(runDbMigrate());\n });\n db.command(\"studio\")\n .description(\"drizzle-kit studio — launch the embedded data browser UI\")\n .action(() => {\n setExit(runDbStudio());\n });\n db.command(\"push\")\n .description(\"drizzle-kit push — direct schema sync (dangerous in prod; prototypes only)\")\n .action(() => {\n setExit(runDbPush());\n });\n db.command(\"export-schema\")\n .description(\n \"Emit JSON Schema 7 per entity to .theokit/schema/{entity}.schema.json (polyglot consumers).\",\n )\n .option(\"-o, --out <dir>\", \"Output directory (default: .theokit/schema)\")\n .option(\"-c, --config <path>\", \"Path to orm.config (default: orm.config.ts)\")\n .action(async (opts: { out?: string; config?: string }) => {\n setExit(await runDbExportSchema(opts));\n });\n db.command(\"check-schema-drift\")\n .description(\"Re-emit schemas and diff against committed copies. Exit 1 on drift.\")\n .option(\"-o, --out <dir>\", \"Output directory (default: .theokit/schema)\")\n .option(\"-c, --config <path>\", \"Path to orm.config (default: orm.config.ts)\")\n .action(async (opts: { out?: string; config?: string }) => {\n setExit(await runDbCheckSchemaDrift(opts));\n });\n\n const tasks = program\n .command(\"tasks\")\n .description(\"Observe SDK Task registry (list / inspect / cancel)\");\n\n tasks\n .command(\"list\")\n .description(\"List tasks in the local JsonFileTaskStore\")\n .option(\"--state <state>\", \"Filter by state (queued|running|finished|error|cancelled)\")\n .option(\"--kind <kind>\", \"Filter by kind (run|batch|workflow|cron|custom)\")\n .option(\"--json\", \"Emit machine-readable JSON instead of the table view\")\n .action(async (opts: TasksListOptions) => {\n setExit(await runTasksList(opts));\n });\n\n tasks\n .command(\"inspect <id>\")\n .description(\"Inspect a single task by id\")\n .option(\"--json\", \"Emit machine-readable JSON\")\n .action(async (id: string, opts: TasksInspectOptions) => {\n setExit(await runTasksInspect(id, opts));\n });\n\n tasks\n .command(\"cancel <id>\")\n .description(\"Cancel a task (best-effort cross-process via cancelRequested flag)\")\n .option(\"--reason <reason>\", \"Cancellation reason recorded in the registry\")\n .action(async (id: string, opts: TasksCancelOptions) => {\n setExit(await runTasksCancel(id, opts));\n });\n}\n\nfunction mapCommanderExitCode(code: string | undefined, fallback: number): number {\n if (code === \"commander.help\" || code === \"commander.helpDisplayed\") return 0;\n if (code === \"commander.version\") return 0;\n if (code === \"commander.unknownCommand\" || code === \"commander.unknownOption\") return 2;\n return fallback > 0 ? fallback : 2;\n}\n\nexport async function main(argv: ReadonlyArray<string>): Promise<number> {\n const program = new Command();\n program\n .name(\"theokit\")\n .description(\"Developer CLI for @theokit/sdk — init, dev, inspect, eval.\")\n .version(CLI_VERSION, \"-v, --version\", \"Print the CLI version and exit.\")\n .addHelpText(\n \"after\",\n `\\nBundled SDK version: ${SDK_VERSION}\\nAdoption Roadmap #1. See https://github.com/usetheo/theokit-sdk for docs.\\n\\nExit codes: 0=success · 1=unknown error · 2=user error.\\n`,\n );\n\n let exitCode = 0;\n const setExit = (code: number): void => {\n exitCode = code;\n };\n registerSubcommands(program, setExit);\n\n // Commander throws CommanderError after `exitOverride` runs (by design)\n // to interrupt further processing. We set exitCode in the callback and\n // swallow the throw — the caller (bin shim) reads our returned code.\n let commanderHandledIt = false;\n program.exitOverride((err) => {\n commanderHandledIt = true;\n exitCode = mapCommanderExitCode(err.code, err.exitCode);\n });\n\n try {\n await program.parseAsync(argv as string[]);\n } catch (err) {\n if (commanderHandledIt) {\n // exitCode already set by exitOverride callback.\n return exitCode;\n }\n process.stderr.write(`theokit: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n return exitCode;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/dev/entry-resolver.ts","../src/commands/acp.ts","../src/commands/db.ts","../src/dev/runner.ts","../src/commands/dev.ts","../src/eval/config-loader.ts","../src/eval/report.ts","../src/eval/runner.ts","../src/commands/eval.ts","../src/version.ts","../src/init/templates.ts","../src/init/validate-name.ts","../src/init/scaffold.ts","../src/commands/init.ts","../src/inspect/gateway.ts","../src/inspect/plugins.ts","../src/commands/inspect.ts","../src/setup/gworkspace.ts","../src/commands/setup.ts","../src/commands/tasks.ts","../src/main.ts"],"names":["isAbsolute","resolve","existsSync","join","readFileSync","pathToFileURL","spawnSync","url","mkdirSync","dirname","writeFileSync","renameSync","readdirSync","unlinkSync","require","createRequire","spawn","pc","Eval","randomUUID","safePathJoin","PathTraversalError","fileURLToPath","lstatSync","relative","rmSync","randomBytes","p","homedir","Theokit","chmodSync","JsonFileTaskStore","Command"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Resolve the entry file for `theokit dev` (T4.1).\n *\n * Priority:\n * 1. Explicit `--entry <path>` flag.\n * 2. `package.json` `main` field.\n * 3. `src/index.ts` (or `.js` / `.mjs` / `.tsx`).\n * 4. `index.ts` at cwd root.\n *\n * Note the order: `package.json` `main` beats `src/index.ts`. In a project whose `main` points at a\n * BUILT file (`dist/index.js`), `theokit dev` watches the build output rather than the source, which\n * looks like hot-reload silently not working.\n *\n * Throws an `Error` whose `code` is `entry_not_found` when nothing matches.\n *\n * @internal\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { isAbsolute, join, resolve } from \"node:path\";\n\nconst FALLBACK_CANDIDATES = [\n \"src/index.ts\",\n \"src/index.tsx\",\n \"src/index.mjs\",\n \"src/index.js\",\n \"index.ts\",\n \"index.mjs\",\n \"index.js\",\n];\n\nfunction entryNotFoundError(message: string): Error & { code?: string } {\n const err = new Error(message) as Error & { code?: string };\n err.code = \"entry_not_found\";\n return err;\n}\n\nfunction resolveFromExplicit(cwd: string, explicit: string): string {\n const abs = isAbsolute(explicit) ? explicit : resolve(cwd, explicit);\n if (!existsSync(abs)) throw entryNotFoundError(`Entry file not found: ${explicit}`);\n return abs;\n}\n\nfunction resolveFromPackageJson(cwd: string): string | undefined {\n const pkgPath = join(cwd, \"package.json\");\n if (!existsSync(pkgPath)) return undefined;\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf8\")) as { main?: string };\n if (typeof pkg.main === \"string\" && pkg.main.length > 0) {\n const abs = resolve(cwd, pkg.main);\n if (existsSync(abs)) return abs;\n }\n } catch {\n // Malformed package.json — fall through to candidates.\n }\n return undefined;\n}\n\nfunction resolveFromCandidates(cwd: string): string | undefined {\n for (const candidate of FALLBACK_CANDIDATES) {\n const abs = join(cwd, candidate);\n if (existsSync(abs)) return abs;\n }\n return undefined;\n}\n\n/**\n * Resolve the file `theokit dev` / `theokit acp` should load, as an absolute path.\n *\n * Existence is the only test — the file is not parsed and its extension is not checked, so a\n * `--entry` pointing at a `.json` resolves happily and fails later at import.\n *\n * A `package.json` that cannot be parsed is not an error: it is skipped and the fallback candidates\n * are tried. Same for a `main` that points at a missing file.\n *\n * @throws Error with `code === \"entry_not_found\"` — for an explicit path that does not exist, or\n * when no candidate matched.\n */\nexport function resolveEntry(cwd: string, explicit?: string): string {\n if (explicit !== undefined && explicit.length > 0) return resolveFromExplicit(cwd, explicit);\n const fromPkg = resolveFromPackageJson(cwd);\n if (fromPkg !== undefined) return fromPkg;\n const fromCandidate = resolveFromCandidates(cwd);\n if (fromCandidate !== undefined) return fromCandidate;\n throw entryNotFoundError(\n `No entry file found. Pass --entry <path> or create one of: ${FALLBACK_CANDIDATES.join(\", \")}`,\n );\n}\n","/**\n * `theokit acp` CLI subcommand — launches an ACP stdio server pointing at\n * the resolved entry file's default-exported `SDKAgent` or factory.\n *\n * Needs `@theokit/acp` installed in the consuming project (optional peer dependency of this package)\n * and an entry module whose default export is an `SDKAgent` or `(sessionId) => SDKAgent`.\n *\n * Exit codes: `0` when the host disconnects cleanly; `2` for a user error (entry not found, entry\n * exports the wrong thing, bad `--permission` or `--permission-timeout-ms`); `1` when the entry\n * throws on import, `@theokit/acp` is missing, or the server itself fails.\n *\n * ADRs D357 + EC-4 (CJS interop fallback).\n *\n * @internal\n */\n\nimport { pathToFileURL } from \"node:url\";\nimport { resolveEntry } from \"../dev/entry-resolver.js\";\n\n/**\n * Flags for {@link runAcp}. All values arrive as strings from commander — the numeric and enum\n * checks live in this module, not in the type.\n */\nexport interface AcpOptions {\n /** Entry module. Defaults to `package.json` `main`, then `src/index.ts` and siblings. */\n entry?: string;\n /** `ask` (default), `auto`, or `deny`. Anything else exits 2. */\n permission?: \"ask\" | \"auto\" | \"deny\";\n /** Comma-separated tool names. Effective in `ask` mode ONLY — `deny` blocks these too. */\n trustedTools?: string;\n /** Positive integer, milliseconds. Anything else exits 2. Only used in `ask` mode. */\n permissionTimeoutMs?: string;\n}\n\n/**\n * Resolve the default export with CJS interop fallback (EC-4).\n *\n * ESM: `export default factory` → `mod.default === factory`\n * CJS: `module.exports = factory` → `mod.default === undefined`, `mod` IS factory\n */\nfunction resolveDefaultExport(mod: unknown): unknown {\n if (mod === null || mod === undefined) return undefined;\n const asObj = mod as { default?: unknown };\n return asObj.default ?? mod;\n}\n\nfunction isValidAgentShape(value: unknown): boolean {\n if (typeof value === \"function\") return true;\n if (typeof value !== \"object\" || value === null) return false;\n const obj = value as { agentId?: unknown; send?: unknown };\n return typeof obj.agentId === \"string\" && typeof obj.send === \"function\";\n}\n\nfunction fail(msg: string, code = 1): number {\n process.stderr.write(`theokit acp: ${msg}\\n`);\n return code;\n}\n\ntype ResolveAgentResult = { ok: true; agent: unknown } | { ok: false; exitCode: number };\n\nasync function loadAgentFromEntry(entryArg: string | undefined): Promise<ResolveAgentResult> {\n let entryPath: string;\n try {\n entryPath = resolveEntry(process.cwd(), entryArg);\n } catch (err) {\n return { ok: false, exitCode: fail(err instanceof Error ? err.message : String(err), 2) };\n }\n let mod: unknown;\n try {\n mod = await import(pathToFileURL(entryPath).href);\n } catch (err) {\n return {\n ok: false,\n exitCode: fail(`failed to import entry: ${err instanceof Error ? err.message : err}`, 1),\n };\n }\n const agent = resolveDefaultExport(mod);\n if (!isValidAgentShape(agent)) {\n return {\n ok: false,\n exitCode: fail(\n `entry ${entryPath} must export an SDKAgent or a factory (sessionId) => SDKAgent. Got: ${typeof agent}`,\n 2,\n ),\n };\n }\n return { ok: true, agent };\n}\n\ninterface ParsedFlags {\n permission: \"ask\" | \"auto\" | \"deny\";\n trustedTools?: ReadonlyArray<string>;\n permissionTimeoutMs?: number;\n}\n\ntype ParseFlagsResult = { ok: true; flags: ParsedFlags } | { ok: false; exitCode: number };\n\nfunction parseTrustedTools(raw: string | undefined): ReadonlyArray<string> | undefined {\n if (typeof raw !== \"string\" || raw.length === 0) return undefined;\n return raw\n .split(\",\")\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n}\n\nfunction parseTimeout(raw: string | undefined): { ok: true; value?: number } | { ok: false } {\n if (typeof raw !== \"string\") return { ok: true };\n const n = Number.parseInt(raw, 10);\n if (!Number.isFinite(n) || n <= 0) return { ok: false };\n return { ok: true, value: n };\n}\n\nfunction parseFlags(opts: AcpOptions): ParseFlagsResult {\n const permission = opts.permission ?? \"ask\";\n if (permission !== \"ask\" && permission !== \"auto\" && permission !== \"deny\") {\n return { ok: false, exitCode: fail(`invalid --permission: ${permission}`, 2) };\n }\n const timeout = parseTimeout(opts.permissionTimeoutMs);\n if (!timeout.ok) {\n return {\n ok: false,\n exitCode: fail(`invalid --permission-timeout-ms: ${opts.permissionTimeoutMs}`, 2),\n };\n }\n const trustedTools = parseTrustedTools(opts.trustedTools);\n const flags: ParsedFlags = { permission };\n if (trustedTools !== undefined) flags.trustedTools = trustedTools;\n if (timeout.value !== undefined) flags.permissionTimeoutMs = timeout.value;\n return { ok: true, flags };\n}\n\nasync function importServeAcp(): Promise<\n { ok: true; serveAcp: typeof import(\"@theokit/acp\").serveAcp } | { ok: false; exitCode: number }\n> {\n try {\n const mod = await import(\"@theokit/acp\");\n return { ok: true, serveAcp: mod.serveAcp };\n } catch (err) {\n return {\n ok: false,\n exitCode: fail(\n `@theokit/acp not installed. Run: npm i @theokit/acp. (${err instanceof Error ? err.message : err})`,\n 1,\n ),\n };\n }\n}\n\n/**\n * Load the entry's default export and serve it over ACP on stdio, blocking until the host\n * disconnects.\n *\n * Importing the entry EXECUTES it: top-level side effects (a server bound to a port, a `console.log`)\n * happen before the protocol starts, and anything written to stdout corrupts the JSON-RPC stream.\n *\n * The entry is validated by shape, not by type — any function passes, and a bad factory only fails\n * when the host opens its first session. Note the ordering: the entry is resolved and imported\n * BEFORE the flags are parsed, so an invalid `--permission` on a project with no entry file reports\n * the entry problem.\n *\n * Only four `AcpServerOptions` fields are wired here (`agent`, `permissionDefault`, `trustedTools`,\n * `permissionTimeoutMs`); `maxPromptBytes`, `capabilities`, `info` and `log` keep their defaults and\n * cannot be set from the command line.\n *\n * @returns the process exit code (0 / 1 / 2 as described at the top of this file).\n */\nexport async function runAcp(opts: AcpOptions): Promise<number> {\n const agentRes = await loadAgentFromEntry(opts.entry);\n if (!agentRes.ok) return agentRes.exitCode;\n\n const flagsRes = parseFlags(opts);\n if (!flagsRes.ok) return flagsRes.exitCode;\n\n const serveRes = await importServeAcp();\n if (!serveRes.ok) return serveRes.exitCode;\n\n try {\n await serveRes.serveAcp({\n agent: agentRes.agent as never,\n permissionDefault: flagsRes.flags.permission,\n ...(flagsRes.flags.trustedTools !== undefined\n ? { trustedTools: flagsRes.flags.trustedTools }\n : {}),\n ...(flagsRes.flags.permissionTimeoutMs !== undefined\n ? { permissionTimeoutMs: flagsRes.flags.permissionTimeoutMs }\n : {}),\n });\n } catch (err) {\n return fail(err instanceof Error ? err.message : String(err), 1);\n }\n return 0;\n}\n\n// Test seam\nexport { isValidAgentShape, resolveDefaultExport };\n","/**\n * `theokit db` subcommand — thin wrapper over drizzle-kit (ADR D6 / orm-v1 D6:\n * delegate migrations to canonical drizzle-kit; do not reinvent).\n *\n * Subcommands:\n * - `theokit db generate` → drizzle-kit generate\n * - `theokit db migrate` → drizzle-kit migrate\n * - `theokit db studio` → drizzle-kit studio\n * - `theokit db push` → drizzle-kit push (dangerous, and NOT gated by this CLI —\n * drizzle-kit's own confirmation is the only prompt)\n * - `theokit db export-schema` → run @theokit/orm schema-export → .theokit/schema/{entity}.schema.json\n * - `theokit db check-schema-drift`\n * → re-emit and diff against committed schemas; exit 1 on drift\n *\n * Implementation principles:\n * - drizzle-kit lookups via the host workspace's node_modules (no bundled binary)\n * - export-schema and check-schema-drift load `orm.config.ts` from cwd\n * (must default-export `{ schema, dialect, db? }` shape — only `schema` is used)\n * - All file writes are atomic (write tmp + rename)\n * - All paths resolved with `path.resolve` before write. That normalises, it does not CONFINE:\n * `--out ../../elsewhere` resolves cleanly and writes there. These flags are operator input,\n * not untrusted input.\n *\n * Exit codes: `0` success; `1` the schema exporter threw, or (for `check-schema-drift`) drift was\n * found; `2` a precondition the operator can fix — drizzle-kit absent, `orm.config` missing or\n * without a `{ schema }` default export, `@theokit/orm` not installed. The four drizzle-kit\n * wrappers instead forward the child process's own exit code, and return `1` when it is killed by a\n * signal.\n */\n\nimport { spawnSync } from \"node:child_process\";\nimport {\n existsSync,\n mkdirSync,\n readdirSync,\n readFileSync,\n renameSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\n/** Shared options. `cwd` defaults to `process.cwd()` and is the root for every lookup below it. */\ninterface DbCommandOptions {\n readonly cwd?: string;\n}\n\n/** Options for the two schema commands. Both paths are resolved against `cwd`; neither is confined to it. */\ninterface DbExportSchemaOptions extends DbCommandOptions {\n /** Output directory. Default `.theokit/schema`. */\n readonly out?: string;\n /** Path to the ORM config module. Default `orm.config.ts`. */\n readonly config?: string;\n}\n\ntype DbCheckDriftOptions = DbExportSchemaOptions;\n\ninterface OrmConfig {\n schema: Record<string, unknown>;\n}\n\nfunction findDrizzleKit(cwd: string): string | null {\n const candidates = [\n join(cwd, \"node_modules\", \".bin\", \"drizzle-kit\"),\n join(cwd, \"node_modules\", \"drizzle-kit\", \"bin.cjs\"),\n ];\n for (const c of candidates) {\n if (existsSync(c)) return c;\n }\n return null;\n}\n\nfunction runDrizzleKit(verb: string, cwd: string, extraArgs: string[] = []): number {\n const bin = findDrizzleKit(cwd);\n if (!bin) {\n process.stderr.write(\n \"theokit db: drizzle-kit not found in node_modules. Install it: pnpm add -D drizzle-kit\\n\",\n );\n return 2;\n }\n const r = spawnSync(bin, [verb, ...extraArgs], { cwd, stdio: \"inherit\" });\n if (r.status === null) return 1;\n return r.status;\n}\n\n/** `drizzle-kit generate` in `cwd`, stdio inherited. Returns its exit code (2 if drizzle-kit is absent). */\nexport function runDbGenerate(opts: DbCommandOptions = {}): number {\n return runDrizzleKit(\"generate\", opts.cwd ?? process.cwd());\n}\n/** `drizzle-kit migrate` in `cwd`, stdio inherited. Returns its exit code (2 if drizzle-kit is absent). */\nexport function runDbMigrate(opts: DbCommandOptions = {}): number {\n return runDrizzleKit(\"migrate\", opts.cwd ?? process.cwd());\n}\n/**\n * `drizzle-kit studio` in `cwd`, stdio inherited. BLOCKS until the studio server is stopped —\n * `spawnSync` gives the child the terminal.\n */\nexport function runDbStudio(opts: DbCommandOptions = {}): number {\n return runDrizzleKit(\"studio\", opts.cwd ?? process.cwd());\n}\n/**\n * `drizzle-kit push` in `cwd` — applies the schema straight to the live database, with no migration\n * file. This CLI adds NO confirmation of its own; whatever drizzle-kit prompts is all the protection\n * there is. Prototypes only.\n */\nexport function runDbPush(opts: DbCommandOptions = {}): number {\n return runDrizzleKit(\"push\", opts.cwd ?? process.cwd());\n}\n\nasync function loadOrmConfig(configPath: string): Promise<OrmConfig> {\n if (!existsSync(configPath)) {\n throw new Error(\n `theokit db: orm.config not found at ${configPath}. Create one that default-exports { schema } (the Drizzle schema object).`,\n );\n }\n // Cache-bust so consecutive invocations (drift workflows, tests) see edits.\n const bust = `${Date.now()}-${Math.random().toString(36).slice(2)}`;\n const url = `${pathToFileURL(configPath).href}?v=${bust}`;\n const mod = (await import(url)) as { default?: OrmConfig };\n if (!mod.default || typeof mod.default !== \"object\" || !mod.default.schema) {\n throw new Error(\n `theokit db: orm.config at ${configPath} must default-export { schema }. Got: ${typeof mod.default}`,\n );\n }\n return mod.default;\n}\n\ninterface SchemaExportModule {\n exportSchemas: (schema: Record<string, unknown>) => Record<string, unknown>;\n}\n\nasync function loadSchemaExporter(cwd: string): Promise<SchemaExportModule> {\n const candidates = [\n join(cwd, \"node_modules\", \"@theokit\", \"orm\", \"dist\", \"schema-export.js\"),\n join(cwd, \"node_modules\", \"@theokit\", \"orm\", \"schema-export.js\"),\n ];\n for (const c of candidates) {\n if (existsSync(c)) {\n return (await import(pathToFileURL(c).href)) as SchemaExportModule;\n }\n }\n throw new Error(\"theokit db: @theokit/orm is not installed. Install it: pnpm add @theokit/orm\");\n}\n\nfunction atomicWrite(filePath: string, content: string): void {\n mkdirSync(dirname(filePath), { recursive: true });\n const tmp = `${filePath}.${process.pid}.tmp`;\n writeFileSync(tmp, content, { mode: 0o644 });\n renameSync(tmp, filePath);\n}\n\nasync function loadConfigOrError(\n configPath: string,\n): Promise<{ ok: true; value: OrmConfig } | { ok: false; code: number }> {\n try {\n return { ok: true, value: await loadOrmConfig(configPath) };\n } catch (err) {\n process.stderr.write(`${err instanceof Error ? err.message : String(err)}\\n`);\n return { ok: false, code: 2 };\n }\n}\n\nasync function loadExporterOrError(\n cwd: string,\n): Promise<{ ok: true; value: SchemaExportModule } | { ok: false; code: number }> {\n try {\n return { ok: true, value: await loadSchemaExporter(cwd) };\n } catch (err) {\n process.stderr.write(`${err instanceof Error ? err.message : String(err)}\\n`);\n return { ok: false, code: 2 };\n }\n}\n\nfunction exportSchemasOrError(\n exporter: SchemaExportModule,\n schema: OrmConfig[\"schema\"],\n): { ok: true; value: Record<string, unknown> } | { ok: false; code: number } {\n try {\n return { ok: true, value: exporter.exportSchemas(schema) };\n } catch (err) {\n process.stderr.write(\n `theokit db: schema export failed: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n return { ok: false, code: 1 };\n }\n}\n\nfunction writeSchemasToOutDir(schemas: Record<string, unknown>, outDir: string): void {\n mkdirSync(outDir, { recursive: true });\n // Clean existing .schema.json files (so renamed/dropped entities don't linger)\n for (const f of readdirSync(outDir).filter((n) => n.endsWith(\".schema.json\"))) {\n unlinkSync(join(outDir, f));\n }\n for (const [name, schema] of Object.entries(schemas)) {\n const target = join(outDir, `${name}.schema.json`);\n atomicWrite(target, `${JSON.stringify(schema, null, 2)}\\n`);\n }\n}\n\n/**\n * Emit one JSON Schema 7 file per entity, for consumers outside TypeScript.\n *\n * Loads `orm.config.ts` (override with `config`) and `@theokit/orm` from the project's own\n * `node_modules`, then writes `<out>/<entity>.schema.json` (default `.theokit/schema`). Each write is\n * atomic, but the directory is not: EVERY existing `*.schema.json` in `out` is deleted first, so\n * pointing `--out` at a directory holding unrelated schema files loses them.\n *\n * The config module is imported with a cache-busting query, so consecutive calls in one process see\n * edits — and re-run its top-level side effects.\n *\n * @returns 0 on success, 2 for a missing/invalid config or a missing `@theokit/orm`, 1 when the\n * exporter itself throws.\n */\nexport async function runDbExportSchema(opts: DbExportSchemaOptions = {}): Promise<number> {\n const cwd = opts.cwd ?? process.cwd();\n const configPath = resolve(cwd, opts.config ?? \"orm.config.ts\");\n const outDir = resolve(cwd, opts.out ?? \".theokit/schema\");\n\n const configResult = await loadConfigOrError(configPath);\n if (!configResult.ok) return configResult.code;\n\n const exporterResult = await loadExporterOrError(cwd);\n if (!exporterResult.ok) return exporterResult.code;\n\n const schemasResult = exportSchemasOrError(exporterResult.value, configResult.value.schema);\n if (!schemasResult.ok) return schemasResult.code;\n\n writeSchemasToOutDir(schemasResult.value, outDir);\n process.stdout.write(\n `theokit db: wrote ${Object.keys(schemasResult.value).length} schema(s) to ${outDir}\\n`,\n );\n return 0;\n}\n\nfunction readCommittedSchemas(outDir: string): Record<string, unknown> {\n if (!existsSync(outDir)) return {};\n const out: Record<string, unknown> = {};\n for (const f of readdirSync(outDir).filter((n) => n.endsWith(\".schema.json\"))) {\n const name = f.replace(/\\.schema\\.json$/, \"\");\n out[name] = JSON.parse(readFileSync(join(outDir, f), \"utf-8\"));\n }\n return out;\n}\n\ninterface SchemaDrift {\n added: string[];\n removed: string[];\n changed: string[];\n}\n\nfunction computeSchemaDrift(\n fresh: Record<string, unknown>,\n committed: Record<string, unknown>,\n): SchemaDrift {\n const freshKeys = new Set(Object.keys(fresh));\n const committedKeys = new Set(Object.keys(committed));\n const added = [...freshKeys].filter((k) => !committedKeys.has(k));\n const removed = [...committedKeys].filter((k) => !freshKeys.has(k));\n const changed = [...freshKeys].filter(\n (k) => committedKeys.has(k) && JSON.stringify(fresh[k]) !== JSON.stringify(committed[k]),\n );\n return { added, removed, changed };\n}\n\nfunction reportSchemaDrift(drift: SchemaDrift): number {\n const { added, removed, changed } = drift;\n if (added.length === 0 && removed.length === 0 && changed.length === 0) {\n process.stdout.write(\"theokit db: schema in sync (no drift)\\n\");\n return 0;\n }\n process.stderr.write(\"theokit db: schema drift detected\\n\");\n if (added.length > 0) process.stderr.write(` added: ${added.join(\", \")}\\n`);\n if (removed.length > 0) process.stderr.write(` removed: ${removed.join(\", \")}\\n`);\n if (changed.length > 0) process.stderr.write(` changed: ${changed.join(\", \")}\\n`);\n process.stderr.write(\"Run `theokit db export-schema` to refresh.\\n\");\n return 1;\n}\n\n/**\n * Re-derive the schemas and compare them to the committed copies in `out`. Writes nothing.\n *\n * Drift is reported per entity as added / removed / changed, where \"changed\" is a strict\n * `JSON.stringify` inequality — key ORDER counts, so a hand-edited file that only reorders keys\n * reads as drift.\n *\n * @returns 0 when in sync, 1 when any drift is found (the CI signal), 2 for a missing/invalid config\n * or a missing `@theokit/orm`. Unlike `export-schema`, an exporter throw here is NOT caught and\n * propagates to the caller.\n */\nexport async function runDbCheckSchemaDrift(opts: DbCheckDriftOptions = {}): Promise<number> {\n const cwd = opts.cwd ?? process.cwd();\n const configPath = resolve(cwd, opts.config ?? \"orm.config.ts\");\n const outDir = resolve(cwd, opts.out ?? \".theokit/schema\");\n\n const configResult = await loadConfigOrError(configPath);\n if (!configResult.ok) return configResult.code;\n\n const exporterResult = await loadExporterOrError(cwd);\n if (!exporterResult.ok) return exporterResult.code;\n\n const fresh = exporterResult.value.exportSchemas(configResult.value.schema);\n const committed = readCommittedSchemas(outDir);\n return reportSchemaDrift(computeSchemaDrift(fresh, committed));\n}\n","/**\n * Spawn `tsx --watch` against the resolved entry (T4.1, ADR D197).\n *\n * @internal\n */\n\nimport { type ChildProcess, spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { join } from \"node:path\";\n\n/** Input for {@link startRunner}. */\ninterface RunnerOptions {\n /** Absolute path to the file tsx should load. */\n entry: string;\n /** Working directory for the child, and the root `envFile` is resolved against. */\n cwd: string;\n /**\n * Env file passed to `tsx --env-file`, relative to `cwd`. Default `.env`.\n *\n * The flag is only added when the file EXISTS — a missing one (including a misspelled explicit\n * name) is skipped silently, so the child starts without those variables and nothing says so.\n */\n envFile?: string;\n /** Pass `--watch` to tsx. Default true (production). Tests use false. */\n watch?: boolean;\n /**\n * How the child's streams are wired. Default `\"inherit\"` — `theokit dev` MUST show the child's\n * output, which is most of what the command is for.\n *\n * A test asserting the child's EXIT CODE does not want its output: with `inherit`, a deliberately\n * broken entry file makes tsx print a transform error onto the test worker's stderr, and CI reads\n * that as a failed run even though the case passed. Measured on `develop`: four validate legs red\n * with every test green.\n */\n stdio?: \"inherit\" | \"ignore\";\n}\n\n/** `exited` resolves with the child's exit code, or `130` when it was killed by a signal. It never rejects. */\ninterface RunnerHandle {\n child: ChildProcess;\n exited: Promise<number>;\n}\n\n/**\n * Resolve the `tsx` CLI bin from CLI-package node_modules (NOT user's).\n * Ensures consistent tsx version regardless of consumer project state.\n */\nfunction resolveTsxBin(): string {\n const require = createRequire(import.meta.url);\n // tsx exports the CLI under `./cli` (subpath); verified against\n // tsx@4.22 package.json exports.\n return require.resolve(\"tsx/cli\");\n}\n\n/**\n * Spawn `tsx` on `opts.entry` and return the child plus a promise for its exit code.\n *\n * Returns immediately — the caller awaits `exited`. The child gets this process's `env` verbatim and\n * `stdio` per `opts.stdio` (default `\"inherit\"`).\n *\n * Installs `SIGINT`/`SIGTERM` listeners on the CURRENT process that forward `SIGTERM` to the child\n * and `SIGKILL` it 5s later. Those listeners are never removed, so calling this repeatedly in one\n * process accumulates them (fine for the CLI, which spawns once; a caller that does not should keep\n * that in mind).\n *\n * @throws whatever `require.resolve(\"tsx/cli\")` throws when tsx is missing from this package's\n * install — `theokit dev` turns that into exit 1 with a \"run pnpm install\" hint.\n */\nexport function startRunner(opts: RunnerOptions): RunnerHandle {\n const tsxBin = resolveTsxBin();\n const args: string[] = [];\n if (opts.watch !== false) args.push(\"--watch\");\n const envFile = opts.envFile ?? \".env\";\n const envFileAbs = join(opts.cwd, envFile);\n if (existsSync(envFileAbs)) {\n args.push(\"--env-file\", envFile);\n }\n args.push(opts.entry);\n\n const child = spawn(process.execPath, [tsxBin, ...args], {\n cwd: opts.cwd,\n stdio: opts.stdio ?? \"inherit\",\n env: process.env,\n });\n\n const exited = new Promise<number>((resolve) => {\n child.on(\"exit\", (code, signal) => {\n resolve(code ?? (signal !== null ? 130 : 0));\n });\n });\n\n // Forward SIGINT / SIGTERM gracefully. Give child 5s to clean up, then\n // SIGKILL.\n let killTimer: NodeJS.Timeout | undefined;\n const forward = (sig: NodeJS.Signals): void => {\n if (child.killed) return;\n child.kill(sig);\n killTimer = setTimeout(() => {\n if (!child.killed) child.kill(\"SIGKILL\");\n }, 5000);\n killTimer.unref();\n };\n process.on(\"SIGINT\", () => forward(\"SIGTERM\"));\n process.on(\"SIGTERM\", () => forward(\"SIGTERM\"));\n\n // Clear the kill timer once the child exits.\n child.on(\"exit\", () => {\n if (killTimer !== undefined) clearTimeout(killTimer);\n });\n\n return { child, exited };\n}\n","/**\n * `theokit dev` — run the project's entry under `tsx --watch` with stdio\n * forwarding and graceful shutdown (T4.1, ADR D197).\n *\n * Exit codes: `2` when no entry file can be resolved; `1` when `tsx` cannot be spawned; otherwise\n * the CHILD process's exit code, so a crashing agent makes `theokit dev` exit non-zero for reasons\n * that have nothing to do with the CLI.\n *\n * @internal\n */\n\nimport pc from \"picocolors\";\n\nimport { resolveEntry } from \"../dev/entry-resolver.js\";\nimport { startRunner } from \"../dev/runner.js\";\n\n/** Flags for {@link runDev}. */\nexport interface DevOptions {\n /** Entry file. Default: `package.json` `main`, then `src/index.ts` and siblings. */\n entry?: string;\n /**\n * Env file passed to `tsx --env-file`, relative to cwd. Default `.env`.\n *\n * Silently skipped when the file does not exist — including a `--env` you named yourself, so a\n * typo looks exactly like \"my variables are not loading\".\n */\n env?: string;\n}\n\n/**\n * Resolve the entry, spawn `tsx --watch` on it, and block until that child exits.\n *\n * The child inherits this process's stdio and environment, and `SIGINT`/`SIGTERM` are forwarded to\n * it as `SIGTERM` with a 5s grace period before `SIGKILL`. `tsx` comes from THIS package's\n * `node_modules`, not the project's, so the version is fixed regardless of the consumer's lockfile.\n *\n * @returns 2 for an unresolvable entry, 1 when the spawn fails, otherwise the child's exit code\n * (130 when it died from a signal).\n */\nexport async function runDev(opts: DevOptions): Promise<number> {\n let entry: string;\n try {\n entry = resolveEntry(process.cwd(), opts.entry);\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n const code = (err as { code?: string }).code ?? \"unknown\";\n process.stderr.write(`${pc.red(\"error:\")} ${message}\\n ${pc.gray(`(code: ${code})`)}\\n`);\n return code === \"entry_not_found\" ? 2 : 1;\n }\n\n process.stdout.write(`${pc.cyan(\"[dev]\")} watching ${pc.bold(entry)} — Ctrl+C to stop.\\n`);\n\n let handle: ReturnType<typeof startRunner>;\n try {\n handle = startRunner({\n entry,\n cwd: process.cwd(),\n ...(opts.env !== undefined ? { envFile: opts.env } : {}),\n });\n } catch (err) {\n process.stderr.write(\n `${pc.red(\"error:\")} could not spawn tsx — ${err instanceof Error ? err.message : String(err)}\\n` +\n ` ${pc.gray(\"Hint: try `pnpm install` to repair @theokit/cli.\")}\\n`,\n );\n return 1;\n }\n\n const exitCode = await handle.exited;\n return exitCode;\n}\n","/**\n * Load + validate the user's `eval.config.{ts,mjs}` (T5.1).\n *\n * Uses a bare dynamic `import()` — no transpiler is registered here, so whether a `.ts` config loads\n * is decided by the Node that runs the CLI (its type-stripping support) or by a loader the caller\n * arranged. When it cannot, the failure arrives as `config_load_failed`, not as a syntax error.\n *\n * Validation is three hand-written checks (see {@link loadEvalConfig}); no schema library is\n * involved, despite `zod` sitting in this package's dependencies.\n *\n * @internal\n */\n\nimport { existsSync } from \"node:fs\";\nimport { isAbsolute, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\n\nimport type { EvalConfig } from \"./types.js\";\n\nfunction configError(code: string, message: string): Error & { code?: string } {\n const err = new Error(message) as Error & { code?: string };\n err.code = code;\n return err;\n}\n\nasync function importConfig(abs: string): Promise<{ default?: unknown }> {\n try {\n return (await import(pathToFileURL(abs).href)) as { default?: unknown };\n } catch (cause) {\n throw configError(\n \"config_load_failed\",\n `Failed to load eval config (${abs}): ${cause instanceof Error ? cause.message : String(cause)}`,\n );\n }\n}\n\nfunction validateShape(cfg: Partial<EvalConfig>, abs: string): EvalConfig {\n if (!Array.isArray(cfg.dataset)) throwShapeError(abs, \"dataset\", \"must be an array\");\n if (!Array.isArray(cfg.scorers)) throwShapeError(abs, \"scorers\", \"must be an array\");\n if (cfg.agent === undefined || typeof cfg.agent !== \"object\") {\n throwShapeError(abs, \"agent\", \"must be an Agent.create() options object\");\n }\n return cfg as EvalConfig;\n}\n\n/**\n * Import the eval config and confirm it is roughly the right shape.\n *\n * IMPORTING EXECUTES IT: top-level code in the config runs before any validation.\n *\n * The check is shallow on purpose — `dataset` is an array, `scorers` is an array, `agent` is an\n * object. Element types are NOT inspected, so a scorer that is not a function, or a dataset entry\n * with no `input`, passes here and fails later inside the run, per row.\n *\n * @throws Error with a `code`: `config_not_found`, `config_load_failed` (the module threw),\n * `config_no_default_export`, `config_invalid_shape`. `theokit eval` maps every `config_*` code to\n * exit 2.\n */\nexport async function loadEvalConfig(cwd: string, configPath?: string): Promise<EvalConfig> {\n const relPath = configPath ?? \"./eval.config.ts\";\n const abs = isAbsolute(relPath) ? relPath : resolve(cwd, relPath);\n if (!existsSync(abs)) throw configError(\"config_not_found\", `Eval config not found: ${abs}`);\n\n const mod = await importConfig(abs);\n if (mod.default === undefined) {\n throw configError(\n \"config_no_default_export\",\n `Eval config (${abs}) must have a default export. Example: \\`export default { dataset, scorers, agent } satisfies EvalConfig;\\``,\n );\n }\n return validateShape(mod.default as Partial<EvalConfig>, abs);\n}\n\nfunction throwShapeError(abs: string, field: string, why: string): never {\n const err = new Error(`Eval config (${abs}) is invalid: field \"${field}\" ${why}.`) as Error & {\n code?: string;\n };\n err.code = \"config_invalid_shape\";\n throw err;\n}\n","/**\n * Markdown report emitter for `theokit eval` (T5.1).\n *\n * @internal\n */\n\nimport type { EvalRunResult } from \"./types.js\";\n\n/**\n * Render an {@link EvalRunResult} as the markdown report `theokit eval` writes.\n *\n * Pure — no I/O, deterministic, safe to snapshot in a test.\n *\n * The per-row table is LOSSY and says so nowhere in its own output: inputs are truncated to 60 UTF-16\n * units and outputs to 80, `|` is escaped and newlines are flattened to spaces, and a row that\n * errored shows `*error*` in place of its output. Read `EvalRunResult` itself when you need the full\n * text; there is no flag that widens the table.\n */\nexport function formatReport(result: EvalRunResult): string {\n const lines: string[] = [];\n lines.push(\"# Eval Report\");\n lines.push(\"\");\n lines.push(`- **Total rows:** ${result.aggregate.totalRows}`);\n lines.push(`- **Mean score:** ${result.aggregate.meanScore.toFixed(3)}`);\n lines.push(`- **Pass ratio (≥0.5):** ${(result.aggregate.passRatio * 100).toFixed(1)}%`);\n lines.push(`- **Error rows:** ${result.aggregate.errorRows}`);\n lines.push(\"\");\n lines.push(\"## Per-row results\");\n lines.push(\"\");\n lines.push(\"| # | Input | Output | Mean | Scores | Notes |\");\n lines.push(\"|---|---|---|---:|---|---|\");\n for (let i = 0; i < result.rows.length; i += 1) {\n const row = result.rows[i];\n if (row === undefined) continue;\n const input = escapeMd(truncate(row.input, 60));\n const output = row.error !== undefined ? `*error*` : escapeMd(truncate(row.output, 80));\n const mean = row.meanScore.toFixed(3);\n const scores =\n row.scores.length > 0\n ? row.scores\n .map(\n (s) =>\n `${s.name}=${s.score.toFixed(2)}${s.reason !== undefined ? ` (${escapeMd(s.reason)})` : \"\"}`,\n )\n .join(\"; \")\n : \"—\";\n const notes = row.error !== undefined ? escapeMd(row.error) : \"\";\n lines.push(`| ${i + 1} | ${input} | ${output} | ${mean} | ${scores} | ${notes} |`);\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\n\n/**\n * Truncate to at most `max` UTF-16 code units, cutting only on a CHARACTER boundary (#342).\n *\n * `String.prototype.slice` counts code units, so a cut that lands between the halves of a\n * surrogate pair keeps one half. A lone surrogate is not a Unicode scalar value: it has no UTF-8\n * encoding, so a writer, a diff tool or a markdown renderer downstream either substitutes U+FFFD\n * or rejects the file. Any dataset with emoji, astral CJK or mathematical alphanumerics hits it.\n *\n * The budget stays in code UNITS, deliberately — it exists to keep the markdown table narrow, and\n * a surrogate pair does occupy two of them. What changes is where the cut may fall: this walks the\n * string by code point (the default string iterator) and stops before the first one that would not\n * fit, so the result is at most `max` units and always well-formed.\n *\n * NOT grapheme segmentation. `Intl.Segmenter` would additionally keep a ZWJ sequence (a family\n * emoji, a flag) or a combining mark whole, which renders better — but splitting one produces a\n * VALID string that merely looks odd, while splitting a surrogate pair produces an invalid one.\n * Only the second is a correctness defect, and this fixes exactly that.\n */\nfunction truncate(s: string, max: number): string {\n if (s.length <= max) return s;\n const budget = max - 1; // one unit reserved for the ellipsis\n let out = \"\";\n for (const ch of s) {\n if (out.length + ch.length > budget) break;\n out += ch;\n }\n return `${out}…`;\n}\n\nfunction escapeMd(s: string): string {\n return s.replaceAll(\"|\", \"\\\\|\").replaceAll(\"\\n\", \" \");\n}\n","/**\n * Eval runner — D212 swap: now consumes `Eval.create + .run` from the SDK\n * (Adoption Roadmap #2). The public `EvalConfig` shape is unchanged —\n * D199 made this a forward-compatible move.\n *\n * Why preserve the CLI's `EvalRunResult` shape: the markdown report\n * generator + existing tests depend on it. The SDK's `EvalRun` is a\n * superset; we adapt at the boundary.\n *\n * @internal\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { Eval, type EvalRun, type Scorer as SdkScorer } from \"@theokit/sdk/eval\";\n\nimport type { EvalConfig, EvalRowResult, EvalRunResult } from \"./types.js\";\n\n/**\n * Run the suite through the SDK's `Eval.create().run()` and narrow the result to the CLI's shape.\n *\n * An empty `dataset` short-circuits: no agent is constructed, no provider is contacted, and a\n * zero-row result comes back with every aggregate at 0 (`meanScore: 0` there means \"nothing ran\",\n * not \"everything scored 0\").\n *\n * Each run gets a fresh `theokit-eval-<8 hex>` name for telemetry correlation (D213), so two runs of\n * the same config are never conflated. The SDK's richer per-run fields (latency percentiles, token\n * counts) are dropped here — the markdown report consumes the simple shape.\n *\n * Rejects if the underlying run rejects; `theokit eval` turns that into exit 1.\n */\nexport async function runEvalSuite(config: EvalConfig): Promise<EvalRunResult> {\n if (config.dataset.length === 0) {\n return {\n rows: [],\n aggregate: { meanScore: 0, passRatio: 0, totalRows: 0, errorRows: 0 },\n };\n }\n\n // Translate CLI's EvalConfig → SDK's EvalOptions. Scorers map 1:1 because\n // both surfaces use the same `Scorer` type per D207.\n const sdkScorers = config.scorers.map((s) => ({\n name: s.name,\n score: s.score as SdkScorer,\n }));\n\n const run: EvalRun = await Eval.create({\n // Unique per-process name for telemetry correlation (D213). Use UUID\n // so concurrent CLI invocations on different terminals don't collide.\n name: `theokit-eval-${randomUUID().slice(0, 8)}`,\n dataset: config.dataset,\n scorers: sdkScorers,\n agent: config.agent,\n ...(config.concurrency !== undefined ? { concurrency: config.concurrency } : {}),\n }).run();\n\n // Adapt SDK's EvalRun to the CLI's existing EvalRunResult shape. The CLI\n // shape is simpler (no p50/p95/tokens — those live in SDK aggregate);\n // the markdown report consumes the simple shape.\n const rows: EvalRowResult[] = run.rows.map((r) => ({\n input: r.input,\n output: r.output,\n ...(r.expected !== undefined ? { expected: r.expected } : {}),\n scores: r.scores.map((s) => ({\n name: s.name,\n score: s.score,\n ...(s.reason !== undefined ? { reason: s.reason } : {}),\n })),\n meanScore: r.meanScore,\n ...(r.error !== undefined ? { error: r.error } : {}),\n }));\n\n return {\n rows,\n aggregate: {\n meanScore: run.aggregate.meanScore,\n passRatio: run.aggregate.passRatio,\n totalRows: run.aggregate.totalRows,\n errorRows: run.aggregate.errorRows,\n },\n };\n}\n","/**\n * `theokit eval` — minimal v1 eval runner (T5.1, ADR D199).\n *\n * Reads `eval.config.ts` from cwd, runs every dataset entry against a REAL provider (each entry\n * costs one agent turn and real tokens), and writes a markdown report.\n *\n * Exit codes: `0` success; `2` for a `--output` that escapes cwd or ANY config-loading failure —\n * missing file, a throw while importing it, no default export, wrong shape (every one of those\n * carries a `config_*` code); `1` when the eval run itself fails or the report cannot be written.\n *\n * EC-F MUST FIX (edge-case review 2026-05-22): validate `--output` path\n * via `safePathJoin` (D80) BEFORE writing. Without this, --output\n * `../../../etc/passwd-report.md` escapes cwd.\n *\n * @internal\n */\n\nimport { writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\n\nimport { PathTraversalError, safePathJoin } from \"@theokit/sdk/path-safety\";\nimport pc from \"picocolors\";\n\nimport { loadEvalConfig } from \"../eval/config-loader.js\";\nimport { formatReport } from \"../eval/report.js\";\nimport { runEvalSuite } from \"../eval/runner.js\";\n\n/** Flags for {@link runEval}. */\nexport interface EvalOptions {\n /** Config module. Default `./eval.config.ts`. Absolute paths are used as-is and are NOT confined to cwd. */\n config?: string;\n /** Report path. Default `eval-report.md`. Must resolve INSIDE cwd (EC-F) or the run exits 2. */\n output?: string;\n}\n\nfunction resolveOutputPath(cwd: string, output: string | undefined): string {\n const target = output ?? \"eval-report.md\";\n try {\n // EC-F: safePathJoin throws PathTraversalError if `target` escapes cwd.\n return safePathJoin(cwd, target);\n } catch (err) {\n if (err instanceof PathTraversalError) {\n const e = new Error(\n `--output path must be inside the current working directory. Got: ${target}`,\n ) as Error & { code?: string };\n e.code = \"invalid_output_path\";\n throw e;\n }\n throw err;\n }\n}\n\nfunction reportError(err: unknown, prefix = \"error:\"): { message: string; code: string } {\n const message = err instanceof Error ? err.message : String(err);\n const code = (err as { code?: string }).code ?? \"unknown\";\n process.stderr.write(`${pc.red(prefix)} ${message}\\n ${pc.gray(`(code: ${code})`)}\\n`);\n return { message, code };\n}\n\nasync function loadAndValidateConfig(\n cwd: string,\n configPath: string | undefined,\n): Promise<Awaited<ReturnType<typeof loadEvalConfig>> | { failureExit: number }> {\n try {\n return await loadEvalConfig(cwd, configPath);\n } catch (err) {\n const { code } = reportError(err);\n return { failureExit: code.startsWith(\"config_\") ? 2 : 1 };\n }\n}\n\nfunction writeReport(outputAbs: string, report: string): boolean {\n try {\n void dirname; // path is already resolved; dirname imported for future use\n writeFileSync(outputAbs, report, \"utf8\");\n return true;\n } catch (err) {\n process.stderr.write(\n `${pc.red(\"error:\")} could not write report to ${outputAbs} — ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n return false;\n }\n}\n\n/**\n * Run the eval suite described by the config and write the markdown report.\n *\n * The `--output` path is validated FIRST, before the config is even loaded, so a bad path fails\n * before anything is spent. The report is overwritten without warning, and an existing report is\n * left untouched when the run fails.\n *\n * Note the asymmetry between the two paths: `--output` is confined to cwd, `--config` is not — the\n * config is a module you are choosing to execute, and executing it is the point.\n *\n * @returns the process exit code (0 / 1 / 2 as described at the top of this file). A suite where\n * every row errored still exits 0 — the report is the result, the exit code only reports whether the\n * run itself completed.\n */\nexport async function runEval(opts: EvalOptions): Promise<number> {\n const cwd = process.cwd();\n\n // EC-F: validate --output BEFORE loading config (cheaper failure).\n let outputAbs: string;\n try {\n outputAbs = resolveOutputPath(cwd, opts.output);\n } catch (err) {\n reportError(err);\n return 2;\n }\n\n const configOrErr = await loadAndValidateConfig(cwd, opts.config);\n if (\"failureExit\" in configOrErr) return configOrErr.failureExit;\n const config = configOrErr;\n\n process.stdout.write(\n `${pc.cyan(\"[eval]\")} running ${config.dataset.length} prompt(s) with ${config.scorers.length} scorer(s)...\\n`,\n );\n\n let result: Awaited<ReturnType<typeof runEvalSuite>>;\n try {\n result = await runEvalSuite(config);\n } catch (err) {\n process.stderr.write(\n `${pc.red(\"error:\")} eval run failed — ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n return 1;\n }\n\n if (!writeReport(outputAbs, formatReport(result))) return 1;\n\n process.stdout.write(\n `\\n${pc.green(\"✓\")} ${result.aggregate.totalRows} rows · mean score ${result.aggregate.meanScore.toFixed(3)} · ` +\n `${(result.aggregate.passRatio * 100).toFixed(1)}% pass · ${result.aggregate.errorRows} error(s)\\n` +\n ` report: ${outputAbs}\\n`,\n );\n\n return 0;\n}\n","/**\n * Build-time version constants for @theokit/cli.\n *\n * Both are substituted by tsup `define` at BUILD time, so they are plain string literals in the\n * shipped bundle. The `declare const` below only satisfies the type checker: evaluating this module\n * from unbuilt source, without that substitution, throws a ReferenceError at import.\n *\n * `__SDK_VERSION__` is the sibling `@theokit/sdk` semver (NEVER `workspace:*`). Used by `init`\n * templates to pin the SDK dep in scaffolded projects (EC-L fix from edge-case review).\n *\n * `__CLI_VERSION__` is this package's semver. Exposed via `--version`.\n */\n\ndeclare const __SDK_VERSION__: string;\ndeclare const __CLI_VERSION__: string;\n\n/**\n * The `@theokit/sdk` semver this CLI was BUILT against — a concrete version, never `workspace:*`.\n *\n * `theokit init` writes it into the scaffolded `package.json`, so it is what a new project pins. It\n * is not a claim about the SDK the current process has loaded, which may be a different version\n * entirely.\n */\nexport const SDK_VERSION: string = __SDK_VERSION__;\n/**\n * This package's semver, substituted at build time — what `theokit --version` prints.\n *\n * Distinct from {@link SDK_VERSION}, which is the `@theokit/sdk` version this CLI was built against\n * and the one `theokit init` writes into a scaffolded `package.json`. They move independently, so a\n * bug report should quote both.\n */\nexport const CLI_VERSION: string = __CLI_VERSION__;\n","/**\n * Template registry for `theokit init` (T2.1, ADR D200).\n *\n * Seven templates ship: `minimal`, `ollama-local`, `chatbot`, `multi-agent`,\n * `rag-agent`, `workflow-automation`, `telegram-bot`.\n * Each is a literal directory copied to `<dest>/` at scaffold time, with\n * `{{projectName}}` and `{{sdkVersion}}` substituted in text files.\n *\n * @internal\n */\n\n/** One template row: `name` is the flag value and directory name, `description` labels the picker, `hint` is printed after scaffolding. */\ninterface TemplateMeta {\n readonly name: string;\n readonly description: string;\n readonly hint: string;\n}\n\n/**\n * The bundled templates, in the order the interactive picker shows them. Each `name` MUST match a\n * directory under the package's `templates/`, which is what `theokit init` copies.\n *\n * This array is the single source for the `--template` help text and the picker — adding an entry\n * without adding the directory produces an accepted flag that fails at copy time.\n */\nexport const TEMPLATES: ReadonlyArray<TemplateMeta> = [\n {\n name: \"minimal\",\n description: \"Smallest possible agent — one Agent.create + send + stream.\",\n hint: \"Set ANTHROPIC_API_KEY / OPENAI_API_KEY / OPENROUTER_API_KEY in .env.\",\n },\n {\n name: \"ollama-local\",\n description: \"100% local agent via Ollama (no remote API key required).\",\n hint: \"Requires `ollama serve` + `ollama pull llama3.2:3b`.\",\n },\n {\n name: \"chatbot\",\n description: \"Conversational agent that resumes its own thread across runs.\",\n hint: \"SESSION_DIR=~/.claude writes sessions the Claude Code CLI can --continue.\",\n },\n {\n name: \"multi-agent\",\n description: \"A classifier routes to specialists, all from one AgentFactory prefix.\",\n hint: 'Pass the input as an argument: `pnpm dev \"Translate to French: hello\"`.',\n },\n {\n name: \"rag-agent\",\n description: \"Retrieval over your own files — Memory.openIndex behind a Tool.\",\n hint: \"Put markdown under .theokit/memory/ first, or there is nothing to cite.\",\n },\n {\n name: \"workflow-automation\",\n description: \"A committed Workflow (fn -> agentStep -> fn) handed to Cron.\",\n hint: \"WORKFLOW_CRON overrides the schedule; default is every 5 minutes.\",\n },\n {\n name: \"telegram-bot\",\n description: \"Telegram bot via @theokit/gateway + grammy.\",\n hint: \"Get a bot token from @BotFather, set TELEGRAM_BOT_TOKEN in .env.\",\n },\n] as const;\n\n/** Exact, case-sensitive lookup. `undefined` means \"not a template\" — every caller treats that as a user error. */\nexport function findTemplate(name: string): TemplateMeta | undefined {\n return TEMPLATES.find((t) => t.name === name);\n}\n\n/** Used when `--template` is absent and there is no TTY to ask on. */\nexport const DEFAULT_TEMPLATE = \"minimal\";\n","/**\n * EC-A MUST FIX (edge-case review 2026-05-22): validate project name\n * against npm rules BEFORE any filesystem write. npm rejects:\n * - uppercase letters\n * - spaces / special chars other than `.`, `-`, `_`\n * - leading dot / leading underscore (with exceptions)\n * - scoped names without `@<scope>/<name>` shape\n *\n * Without this, the onboarding flow breaks on FIRST `pnpm install`\n * with a cryptic npm error — and the user can't tell whether it's a\n * CLI bug or their input.\n *\n * @internal\n */\n\n/**\n * The shape an npm package name may take: an optional `@scope/` prefix, then a name starting with a\n * lowercase letter or digit and continuing with those plus `.`, `-`, `_`.\n *\n * Derived from npm's own `validate-npm-package-name` rules and deliberately simplified — it covers\n * the common case, not every corner of npm's legacy compatibility. It rejects uppercase, spaces and\n * a leading `.`/`_`/`-`; it does NOT check npm's core-module or URL-safety rules.\n */\nconst NPM_NAME_RE = /^(?:@[a-z0-9-][a-z0-9._-]{0,213}\\/)?[a-z0-9][a-z0-9._-]{0,213}$/;\n\nconst RESERVED_NAMES = new Set([\"node_modules\", \"favicon.ico\", \"..\", \".\"]);\n\n/** `reason` is present only when `ok` is false, and is written to be shown to the user verbatim. */\ninterface NameValidation {\n ok: boolean;\n reason?: string;\n}\n\n/**\n * Check a project name against npm's rules BEFORE anything is written to disk (EC-A) — otherwise the\n * onboarding flow breaks on the user's first `pnpm install`, with an npm error that does not say\n * whether the CLI or the input was at fault.\n *\n * Never throws; a rejection is `{ ok: false, reason }`. Rejects an empty name, `node_modules`,\n * `favicon.ico`, `.`, `..`, anything over 214 characters, and anything the npm name pattern refuses.\n *\n * It validates the NAME, not the destination: a scoped name like `@scope/my-bot` passes here and\n * then scaffolds into a nested `@scope/my-bot/` directory.\n */\nexport function validateProjectName(name: string): NameValidation {\n if (typeof name !== \"string\" || name.length === 0) {\n return { ok: false, reason: \"Project name is required.\" };\n }\n if (RESERVED_NAMES.has(name)) {\n return { ok: false, reason: `Name \"${name}\" is reserved.` };\n }\n if (name.length > 214) {\n return { ok: false, reason: \"Project name must be ≤ 214 characters.\" };\n }\n if (!NPM_NAME_RE.test(name)) {\n return {\n ok: false,\n reason:\n \"Invalid project name. Use lowercase letters, numbers, dashes, dots, or underscores. \" +\n \"Examples: `my-bot`, `@scope/my-bot`, `chat.bot`.\",\n };\n }\n return { ok: true };\n}\n","/**\n * Scaffold engine for `theokit init` (T2.1, ADRs D196 + D200).\n *\n * Walks `templates/<name>/`, copies files to `<dest>/`, performs\n * placeholder substitution (`{{projectName}}`, `{{sdkVersion}}`).\n *\n * **EC-B MUST FIX**: writes go to `<dest>.tmp-<random>/` first, then `renameSync` at the end. On any\n * error mid-copy the tmp dir is removed, so `<dest>` is never left half-written.\n *\n * \"Atomic\" describes the FRESH case. Under `force`, an existing `<dest>` is deleted before the\n * rename, so a failure in that narrow window leaves neither the old tree nor the new one — and the\n * old tree is gone unconditionally, with no backup.\n *\n * **EC-G MUST TEST**: symlinks at `<dest>` are rejected (path-guard).\n *\n * @internal\n */\n\nimport { randomBytes } from \"node:crypto\";\nimport {\n cpSync,\n existsSync,\n lstatSync,\n mkdirSync,\n readdirSync,\n readFileSync,\n renameSync,\n rmSync,\n writeFileSync,\n} from \"node:fs\";\nimport { dirname, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { SDK_VERSION } from \"../version.js\";\nimport { findTemplate } from \"./templates.js\";\nimport { validateProjectName } from \"./validate-name.js\";\n\n/** Input for {@link scaffold}. `projectName` doubles as the destination directory name. */\ninterface ScaffoldOptions {\n /** npm-valid package name; also the directory created under `cwd`. */\n projectName: string;\n /** Must be a name in the bundled registry. */\n template: string;\n /** Root the destination is resolved against and confined to. */\n cwd: string;\n /** Permit a non-empty destination by DELETING it first. Does not permit a symlink. */\n force?: boolean;\n}\n\n/** `filesWritten` counts regular files only; directories and any skipped entry are not counted. */\ninterface ScaffoldResult {\n destAbs: string;\n filesWritten: number;\n}\n\n/**\n * Extensions whose contents DO get `{{projectName}}` / `{{sdkVersion}}` substitution — despite the\n * name below, this is the include list, not an exclude list. `.gitignore` and `.env.example` are\n * matched by full filename as well. Anything else is copied byte-for-byte.\n */\nconst SUBSTITUTE_EXTS = new Set([\n \".ts\",\n \".tsx\",\n \".js\",\n \".mjs\",\n \".json\",\n \".md\",\n \".env\",\n \".example\",\n \".gitignore\",\n \".yml\",\n \".yaml\",\n]);\n\n/**\n * Resolve the bundled `templates/` directory. Works in both:\n * - dev (loaded from src/, templates at ../templates relative to src/init/)\n * - published (loaded from dist/, templates at ../../templates relative to dist/init/)\n */\nfunction resolveTemplatesRoot(): string {\n const here = fileURLToPath(new URL(\".\", import.meta.url));\n // Walk up looking for a `templates/` sibling.\n let dir = here;\n for (let i = 0; i < 5; i += 1) {\n const candidate = join(dir, \"templates\");\n if (existsSync(candidate) && lstatSync(candidate).isDirectory()) return candidate;\n const parent = dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n throw new Error(\n `Could not locate bundled templates/ directory (searched up from ${here}). ` +\n `This usually means the published tarball was built without \"files\": [\"templates\"] (EC-C regression).`,\n );\n}\n\n/**\n * Every coded refusal `scaffold` can throw. All of them are user errors — a bad name, a bad\n * template, a destination that escapes the cwd, is a symlink, or is not empty — so this list IS the\n * exit-code-2 set that `commands/init.ts` maps against.\n *\n * It is a typed union rather than a loose string so that adding a refusal without deciding its exit\n * code does not compile. `dest_is_symlink` used to be absent from that set and fell through to 1,\n * the code `--help` defines as \"unknown error\", which routed a plain user mistake to whichever CI\n * branch pages someone (#353).\n *\n * Node's own `err.code` values (`ENOENT`, `EACCES`, …) are deliberately NOT in here: an fs failure\n * carries a code too, and it is not a user error.\n */\nexport const SCAFFOLD_USER_ERROR_CODES = [\n \"invalid_project_name\",\n \"unknown_template\",\n \"invalid_dest\",\n \"dest_is_symlink\",\n \"dest_not_empty\",\n] as const;\n\nexport type ScaffoldUserErrorCode = (typeof SCAFFOLD_USER_ERROR_CODES)[number];\n\nfunction scaffoldError(code: ScaffoldUserErrorCode, message: string): Error & { code?: string } {\n const err = new Error(message) as Error & { code?: string };\n err.code = code;\n return err;\n}\n\nfunction validateNameAndTemplate(opts: ScaffoldOptions): void {\n const nameCheck = validateProjectName(opts.projectName);\n if (!nameCheck.ok) {\n throw scaffoldError(\"invalid_project_name\", nameCheck.reason ?? \"Invalid project name.\");\n }\n if (findTemplate(opts.template) === undefined) {\n throw scaffoldError(\"unknown_template\", `Unknown template \"${opts.template}\".`);\n }\n}\n\nfunction validateDest(cwdAbs: string, destAbs: string, projectName: string, force: boolean): void {\n const rel = relative(cwdAbs, destAbs);\n if (rel.startsWith(\"..\") || isAbsolute(rel)) {\n throw scaffoldError(\n \"invalid_dest\",\n `Project name \"${projectName}\" escapes the working directory.`,\n );\n }\n if (!existsSync(destAbs)) return;\n if (lstatSync(destAbs).isSymbolicLink()) {\n throw scaffoldError(\n \"dest_is_symlink\",\n `Destination \"${destAbs}\" is a symlink. Refuse to follow (EC-G safety).`,\n );\n }\n if (readdirSync(destAbs).length > 0 && !force) {\n throw scaffoldError(\n \"dest_not_empty\",\n `Destination \"${destAbs}\" already exists and is not empty. Pass --force to overwrite.`,\n );\n }\n}\n\nfunction atomicCopy(\n sourceAbs: string,\n tmpAbs: string,\n destAbs: string,\n projectName: string,\n): number {\n try {\n mkdirSync(tmpAbs, { recursive: true });\n const filesWritten = copyTreeWithSubstitution(sourceAbs, tmpAbs, {\n projectName,\n sdkVersion: SDK_VERSION,\n });\n if (existsSync(destAbs)) rmSync(destAbs, { recursive: true, force: true });\n renameSync(tmpAbs, destAbs);\n return filesWritten;\n } catch (err) {\n try {\n rmSync(tmpAbs, { recursive: true, force: true });\n } catch {\n // best-effort cleanup\n }\n throw err;\n }\n}\n\n/**\n * Copy a bundled template into `<cwd>/<projectName>`, substituting `{{projectName}}` and\n * `{{sdkVersion}}` in text files.\n *\n * Validation order is deliberate — name, then template, then destination — so nothing touches the\n * filesystem until the inputs are known good.\n *\n * @throws Error with a `code` property: `invalid_project_name`, `unknown_template`, `invalid_dest`\n * (the name escapes `cwd`), `dest_is_symlink` (refused, `force` does not override it),\n * `dest_not_empty` (pass `force`). A missing bundled `templates/` directory throws WITHOUT a code —\n * that is a packaging defect, not user input (EC-C).\n */\nexport async function scaffold(opts: ScaffoldOptions): Promise<ScaffoldResult> {\n validateNameAndTemplate(opts);\n const cwdAbs = resolve(opts.cwd);\n const destAbs = resolve(cwdAbs, opts.projectName);\n validateDest(cwdAbs, destAbs, opts.projectName, opts.force === true);\n\n const tmpAbs = `${destAbs}.tmp-${randomBytes(4).toString(\"hex\")}`;\n const sourceAbs = join(resolveTemplatesRoot(), opts.template);\n if (!existsSync(sourceAbs)) {\n throw new Error(\n `Template directory not found: ${sourceAbs}. Ensure the published package included templates/ (EC-C).`,\n );\n }\n\n const filesWritten = atomicCopy(sourceAbs, tmpAbs, destAbs, opts.projectName);\n return { destAbs, filesWritten };\n}\n\ninterface SubstitutionVars {\n projectName: string;\n sdkVersion: string;\n}\n\nfunction copyTreeWithSubstitution(srcDir: string, destDir: string, vars: SubstitutionVars): number {\n // For test-friendliness + substitution control, walk the tree ourselves\n // instead of using `cpSync` opaque copy.\n const counter = { count: 0 };\n walk(srcDir, destDir, vars, counter);\n // `cpSync` left in import list for future use (e.g., copying binary assets).\n void cpSync;\n return counter.count;\n}\n\nfunction walk(src: string, dst: string, vars: SubstitutionVars, counter: { count: number }): void {\n mkdirSync(dst, { recursive: true });\n for (const entry of readdirSync(src, { withFileTypes: true })) {\n const srcPath = join(src, entry.name);\n const dstPath = join(dst, entry.name);\n if (entry.isDirectory()) {\n walk(srcPath, dstPath, vars, counter);\n } else if (entry.isFile()) {\n copyFile(srcPath, dstPath, entry.name, vars);\n counter.count += 1;\n }\n }\n}\n\nfunction copyFile(srcPath: string, dstPath: string, name: string, vars: SubstitutionVars): void {\n const content = readFileSync(srcPath, \"utf8\");\n const ext = name.includes(\".\") ? `.${name.split(\".\").pop() ?? \"\"}` : \"\";\n const shouldSubstitute =\n SUBSTITUTE_EXTS.has(ext) || name === \".gitignore\" || name === \".env.example\";\n const out = shouldSubstitute\n ? content\n .replaceAll(\"{{projectName}}\", vars.projectName)\n .replaceAll(\"{{sdkVersion}}\", vars.sdkVersion)\n : content;\n writeFileSync(dstPath, out, \"utf8\");\n}\n","/**\n * `theokit init [project-name]` — scaffold a new project from a bundled\n * template (T2.1, ADRs D196 + D200).\n *\n * Exit codes: `0` success (and cancelled prompt — Ctrl+C at a prompt is not an error);\n * `2` user error (missing name in non-interactive mode, unknown template, invalid npm name,\n * destination not empty without `--force`); `1` anything else, including a destination that is a\n * symlink.\n *\n * @internal\n */\n\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\n\nimport { SCAFFOLD_USER_ERROR_CODES, scaffold } from \"../init/scaffold.js\";\nimport { DEFAULT_TEMPLATE, findTemplate, TEMPLATES } from \"../init/templates.js\";\n\n/** Flags for {@link runInit}, mirroring the `theokit init` options. */\nexport interface InitOptions {\n /** Template name. Prompted for when interactive and omitted; otherwise defaults to `minimal`. */\n template?: string;\n /** Allow a non-empty destination — it is DELETED and replaced, not merged into. */\n force?: boolean;\n /** Skip prompts (CI mode). Implied when stdin or stdout is not a TTY. */\n yes?: boolean;\n}\n\nasync function resolveProjectName(\n projectName: string | undefined,\n skipPrompts: boolean,\n): Promise<string | { exitCode: number }> {\n if (projectName !== undefined && projectName.length > 0) return projectName;\n if (skipPrompts) {\n process.stderr.write(\n `${pc.red(\"error: \")}project name is required in non-interactive mode. Pass it as the positional argument: ${pc.cyan(\n \"theokit init <project-name>\",\n )}\\n`,\n );\n return { exitCode: 2 };\n }\n const answer = await p.text({\n message: \"Project name?\",\n placeholder: \"my-bot\",\n validate: (v) => (v.length === 0 ? \"Required.\" : undefined),\n });\n if (p.isCancel(answer)) return { exitCode: 0 };\n return answer;\n}\n\nasync function resolveTemplate(\n optsTemplate: string | undefined,\n skipPrompts: boolean,\n): Promise<string | { exitCode: number }> {\n let template = optsTemplate ?? DEFAULT_TEMPLATE;\n if (optsTemplate === undefined && !skipPrompts) {\n const answer = await p.select({\n message: \"Pick a template:\",\n options: TEMPLATES.map((t) => ({ value: t.name, label: t.name, hint: t.description })),\n initialValue: DEFAULT_TEMPLATE,\n });\n if (p.isCancel(answer)) return { exitCode: 0 };\n template = answer as string;\n }\n if (findTemplate(template) === undefined) {\n process.stderr.write(\n `${pc.red(\"error: \")}unknown template \"${template}\". Available: ${TEMPLATES.map((t) => t.name).join(\", \")}\\n`,\n );\n return { exitCode: 2 };\n }\n return template;\n}\n\n// #353 — derived from the scaffolder rather than restated here. The hand-written copy was missing\n// `dest_is_symlink`, so a symlinked destination exited 1 (\"unknown error\") for what is squarely a\n// user mistake, and a CI job branching on 1 vs 2 routed it to the branch that pages someone.\nconst USER_ERROR_CODES: ReadonlySet<string> = new Set(SCAFFOLD_USER_ERROR_CODES);\n\nasync function runScaffold(name: string, template: string, force: boolean): Promise<number> {\n try {\n const result = await scaffold({\n projectName: name,\n template,\n cwd: process.cwd(),\n ...(force ? { force: true } : {}),\n });\n process.stdout.write(\n `\\n${pc.green(\"✓\")} Scaffolded ${pc.bold(name)} (${template}) — ${result.filesWritten} files written.\\n` +\n `\\nNext steps:\\n` +\n ` ${pc.cyan(`cd ${name}`)}\\n` +\n ` ${pc.cyan(\"pnpm install\")}\\n` +\n ` ${pc.cyan(\"cp .env.example .env\")} ${pc.gray(\"# edit your keys\")}\\n` +\n ` ${pc.cyan(\"pnpm dev\")}\\n\\n` +\n `Template hint: ${findTemplate(template)?.hint ?? \"\"}\\n`,\n );\n return 0;\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n const code = (err as { code?: string }).code ?? \"unknown\";\n process.stderr.write(`${pc.red(\"error:\")} ${message}\\n ${pc.gray(`(code: ${code})`)}\\n`);\n return USER_ERROR_CODES.has(code) ? 2 : 1;\n }\n}\n\n/**\n * Scaffold `./<project-name>` from a bundled template, resolving the name and template\n * interactively when it can.\n *\n * Prompts are used only on a real TTY (both stdin and stdout) and only when `--yes` was not passed.\n * Without a TTY the name becomes mandatory and the template falls back to `minimal`, so the same\n * command behaves differently under a pipe than in a terminal.\n *\n * The destination is always `<cwd>/<project-name>` — a name that would escape cwd is refused. With\n * `force`, an existing destination is REMOVED before the new tree is moved into place; there is no\n * merge and no backup.\n *\n * There is no scaffold-in-place option. `--here` used to be advertised and ignored (#351), and it\n * was removed rather than implemented because the writer cannot honour it: the tree is built in a\n * temp directory and moved into place with `rm` + `rename`, so a destination equal to `cwd` would\n * mean deleting the directory the process is running in. Writing in place needs a second write path\n * with weaker atomicity, which is a feature to ask for, not a flag to quietly repair.\n *\n * Returns the process exit code (0 / 2 / 1 as described at the top of this file). Cancelling a\n * prompt returns 0 and writes nothing.\n */\nexport async function runInit(projectName: string | undefined, opts: InitOptions): Promise<number> {\n const isTty = process.stdin.isTTY === true && process.stdout.isTTY === true;\n const skipPrompts = opts.yes === true || !isTty;\n\n const name = await resolveProjectName(projectName, skipPrompts);\n if (typeof name !== \"string\") return name.exitCode;\n\n const template = await resolveTemplate(opts.template, skipPrompts);\n if (typeof template !== \"string\") return template.exitCode;\n\n return runScaffold(name, template, opts.force === true);\n}\n","/**\n * Gateway adapter discovery for `theokit inspect` (T3.1).\n *\n * Unlike LLM providers (registry-based) and embedding adapters (single\n * catalog), gateway adapters live in separate workspace packages\n * (`@theokit/gateway-telegram`, `@theokit/gateway-discord`). We detect\n * presence by attempting to resolve the package; absent = not installed.\n *\n * @internal\n */\n\nimport { createRequire } from \"node:module\";\n\n/** One known gateway and whether this CLI can resolve its package. */\ninterface GatewayInfo {\n readonly name: string;\n readonly packageName: string;\n readonly installed: boolean;\n}\n\nconst KNOWN_GATEWAYS = [\n { name: \"telegram\", packageName: \"@theokit/gateway-telegram\" },\n { name: \"discord\", packageName: \"@theokit/gateway-discord\" },\n] as const;\n\n/**\n * Report which gateway packages are resolvable, for the fixed list known to this CLI version.\n *\n * Resolution is relative to THIS module, so it answers \"can the CLI see it\", which in a hoisted\n * monorepo or a global `npx` install is not the same question as \"is it a dependency of the user's\n * project\". Never throws and always returns one row per known gateway, `installed: false` included.\n */\nexport function listGatewayAdapters(): GatewayInfo[] {\n const require = createRequire(import.meta.url);\n return KNOWN_GATEWAYS.map((g) => {\n let installed = false;\n try {\n require.resolve(g.packageName);\n installed = true;\n } catch {\n installed = false;\n }\n return { name: g.name, packageName: g.packageName, installed };\n });\n}\n","/**\n * Plugin discovery for `theokit inspect` (T3.1, ADR D198).\n *\n * Read-only filesystem walk of `~/.theokit/plugins/` and\n * `<cwd>/.theokit/plugins/`. Does NOT execute plugin code (safe to run\n * in CI). Plugin manifests are markdown + YAML frontmatter per D77.\n *\n * @internal\n */\n\nimport { existsSync, lstatSync, readdirSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\n/** One discovered plugin. `path` points at its `PLUGIN.md`, not at the plugin directory. */\ninterface PluginInfo {\n readonly name: string;\n readonly source: \"user-global\" | \"project\";\n readonly description?: string;\n readonly path: string;\n}\n\nfunction parseFrontmatter(content: string): { name?: string; description?: string } {\n const match = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n if (match === null) return {};\n const out: { name?: string; description?: string } = {};\n for (const line of (match[1] ?? \"\").split(\"\\n\")) {\n const [k, ...rest] = line.split(\":\");\n if (k === undefined || rest.length === 0) continue;\n const key = k.trim();\n const val = rest.join(\":\").trim();\n if (key === \"name\") out.name = val;\n else if (key === \"description\") out.description = val;\n }\n return out;\n}\n\nfunction loadPluginManifest(\n root: string,\n name: string,\n source: PluginInfo[\"source\"],\n): PluginInfo | undefined {\n const manifestPath = join(root, name, \"PLUGIN.md\");\n if (!existsSync(manifestPath)) return undefined;\n try {\n const fm = parseFrontmatter(readFileSync(manifestPath, \"utf8\"));\n return {\n name: fm.name ?? name,\n source,\n ...(fm.description !== undefined ? { description: fm.description } : {}),\n path: manifestPath,\n };\n } catch {\n // Malformed manifest — skip silently (per D198 invariant).\n return undefined;\n }\n}\n\nfunction walkPluginDir(root: string, source: PluginInfo[\"source\"]): PluginInfo[] {\n if (!existsSync(root) || !lstatSync(root).isDirectory()) return [];\n const out: PluginInfo[] = [];\n for (const entry of readdirSync(root, { withFileTypes: true })) {\n if (!entry.isDirectory()) continue;\n const info = loadPluginManifest(root, entry.name, source);\n if (info !== undefined) out.push(info);\n }\n return out.sort((a, b) => a.name.localeCompare(b.name));\n}\n\n/**\n * Discover plugins from `~/.theokit/plugins/` and `<cwd>/.theokit/plugins/`, merged and sorted by name.\n *\n * A plugin is a DIRECTORY containing `PLUGIN.md`; the frontmatter's `name` wins over the directory\n * name when present. Directories without that file, and files with unreadable frontmatter, are\n * skipped silently (D198) — so \"my plugin is not listed\" almost always means a missing or malformed\n * `PLUGIN.md`, not a broken CLI.\n *\n * On a name collision the PROJECT entry replaces the user-global one (EC-N, mirroring D162), and the\n * shadowed entry is not reported.\n *\n * Never executes plugin code and never throws for a missing directory — safe in CI.\n */\nexport function listPlugins(cwd: string): PluginInfo[] {\n const userPlugins = walkPluginDir(join(homedir(), \".theokit\", \"plugins\"), \"user-global\");\n const projectPlugins = walkPluginDir(join(cwd, \".theokit\", \"plugins\"), \"project\");\n // EC-N (DOCUMENT): project entries override user-global on name collision (mirror of D162).\n const byName = new Map<string, PluginInfo>();\n for (const p of userPlugins) byName.set(p.name, p);\n for (const p of projectPlugins) byName.set(p.name, p);\n return Array.from(byName.values()).sort((a, b) => a.name.localeCompare(b.name));\n}\n","/**\n * `theokit inspect` — discovery of bundled SDK assets + installed\n * gateway adapters + user plugins (T3.1, ADR D198 + D201).\n *\n * Consumes `Theokit.inspect.*` (D201) — the SDK's public introspection\n * API — to avoid `ERR_PACKAGE_PATH_NOT_EXPORTED` against published\n * installs (EC-E fix).\n *\n * @internal\n */\n\nimport { Theokit } from \"@theokit/sdk\";\nimport pc from \"picocolors\";\n\nimport { listGatewayAdapters } from \"../inspect/gateway.js\";\nimport { listPlugins } from \"../inspect/plugins.js\";\n\n/** Flags for {@link runInspect}. */\nexport interface InspectOptions {\n /** Emit the whole result as JSON. The human view hides empty sections; the JSON never does. */\n json?: boolean;\n /**\n * One of `all` | `providers` | `adapters` | `gateway` | `plugins`. Omitted behaves like `all`.\n * `all` is accepted even though `--help` does not list it. Any other value exits 2.\n */\n filter?: string;\n}\n\ninterface InspectResult {\n providers: ReturnType<typeof Theokit.inspect.builtinProviders>;\n embeddingAdapters: ReturnType<typeof Theokit.inspect.embeddingAdapters>;\n gateways: ReturnType<typeof listGatewayAdapters>;\n plugins: ReturnType<typeof listPlugins>;\n}\n\nfunction collect(filter: string | undefined, cwd: string): InspectResult {\n const all = filter === undefined || filter === \"all\";\n const empty = { providers: [], embeddingAdapters: [], gateways: [], plugins: [] };\n const result: InspectResult = empty as InspectResult;\n if (all || filter === \"providers\") {\n result.providers = Theokit.inspect.builtinProviders();\n }\n if (all || filter === \"adapters\") {\n result.embeddingAdapters = Theokit.inspect.embeddingAdapters();\n }\n if (all || filter === \"gateway\") {\n result.gateways = listGatewayAdapters();\n }\n if (all || filter === \"plugins\") {\n result.plugins = listPlugins(cwd);\n }\n return result;\n}\n\nfunction formatProviders(providers: InspectResult[\"providers\"]): string[] {\n if (providers.length === 0) return [];\n const lines = [pc.bold(pc.cyan(\"Builtin LLM providers\"))];\n for (const p of providers) {\n const aliases =\n p.aliases !== undefined && p.aliases.length > 0 ? ` (aliases: ${p.aliases.join(\", \")})` : \"\";\n lines.push(\n ` • ${pc.green(p.name)}${aliases} — ${p.apiMode} · auth: ${p.authType} · ${p.baseUrl}`,\n );\n }\n lines.push(\"\");\n return lines;\n}\n\nfunction formatEmbeddings(adapters: InspectResult[\"embeddingAdapters\"]): string[] {\n if (adapters.length === 0) return [];\n const lines = [pc.bold(pc.cyan(\"Memory embedding adapters\"))];\n for (const a of adapters) {\n lines.push(` • ${pc.green(a.id)} — ${a.transport} · default model: ${a.defaultModel}`);\n }\n lines.push(\"\");\n return lines;\n}\n\nfunction formatGateways(gateways: InspectResult[\"gateways\"]): string[] {\n if (gateways.length === 0) return [];\n const lines = [pc.bold(pc.cyan(\"Gateway adapters\"))];\n for (const g of gateways) {\n const status = g.installed ? pc.green(\"installed\") : pc.gray(\"not installed\");\n lines.push(` • ${pc.green(g.name)} (${g.packageName}) — ${status}`);\n }\n lines.push(\"\");\n return lines;\n}\n\nfunction formatPlugins(r: InspectResult): string[] {\n if (r.plugins.length > 0) {\n const lines = [pc.bold(pc.cyan(\"User plugins\"))];\n for (const pl of r.plugins) {\n const desc = pl.description !== undefined ? ` — ${pl.description}` : \"\";\n lines.push(` • ${pc.green(pl.name)} [${pl.source}]${desc}`);\n }\n return lines;\n }\n if (r.providers.length > 0 || r.embeddingAdapters.length > 0) {\n return [pc.gray(\"(no user plugins found in ~/.theokit/plugins/ or ./.theokit/plugins/)\")];\n }\n return [];\n}\n\nfunction formatHuman(r: InspectResult): string {\n const lines = [\n ...formatProviders(r.providers),\n ...formatEmbeddings(r.embeddingAdapters),\n ...formatGateways(r.gateways),\n ...formatPlugins(r),\n ];\n return `${lines.join(\"\\n\")}\\n`;\n}\n\n/**\n * Print what this install can see: builtin LLM providers, embedding adapters, gateway packages, and\n * user plugins.\n *\n * Read-only and side-effect free — plugin code is never executed, only its `PLUGIN.md` frontmatter is\n * parsed, so it is safe in CI. What it reports is INSTALL-dependent, not absolute: gateways are\n * probed by resolving `@theokit/gateway-*` from THIS package's location, and plugins are read from\n * `~/.theokit/plugins/` plus `<cwd>/.theokit/plugins/`, so the answer changes with the working\n * directory and the user.\n *\n * The human view omits any section that came back empty, which reads identically to \"the section was\n * filtered out\". `--json` always carries all four keys.\n *\n * @returns 2 for an unknown `--filter`, 0 otherwise. Never non-zero for \"nothing found\".\n */\nexport async function runInspect(opts: InspectOptions): Promise<number> {\n // Validate filter.\n const VALID_FILTERS = new Set([\"all\", \"providers\", \"adapters\", \"gateway\", \"plugins\"]);\n if (opts.filter !== undefined && !VALID_FILTERS.has(opts.filter)) {\n process.stderr.write(\n `${pc.red(\"error:\")} invalid --filter \"${opts.filter}\". Valid: ${Array.from(VALID_FILTERS).join(\", \")}\\n`,\n );\n return 2;\n }\n\n const result = collect(opts.filter, process.cwd());\n if (opts.json === true) {\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n } else {\n process.stdout.write(formatHuman(result));\n }\n return 0;\n}\n","/**\n * `theokit setup gworkspace` — Google Workspace credentials walkthrough.\n *\n * Pre-flight (EC-1 + EC-2): validate `credentials.json` is a Desktop-type\n * OAuth client BEFORE shelling out to upstream `google-workspace-mcp setup`.\n * Upstream does not surface this distinction up-front and users hit\n * cryptic 401s during `accounts add` otherwise.\n *\n * After validation, this wraps `npx google-workspace-mcp setup` and\n * `accounts add` so the SDK-branded experience matches `theokit init` /\n * `theokit dev`.\n *\n * Needs: a `credentials.json` for a Desktop-type OAuth client that YOU downloaded from Google Cloud\n * Console (this command never creates one), and network access to run `npx` against the upstream\n * package. Nothing here reads an environment variable.\n *\n * Exit codes: `0` success; `2` when the credentials file is missing, unparseable, a Web-type client,\n * or its path was rejected; otherwise the upstream command's own exit code.\n *\n * Per ADR D344 v1.2: credentials live at upstream's default `~/.google-mcp/`.\n * Per ADR D345 v1.2: OAuth is fully delegated to upstream.\n *\n * @internal\n */\n\nimport { spawn } from \"node:child_process\";\nimport { chmodSync, existsSync, mkdirSync, readFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { isAbsolute, join, resolve } from \"node:path\";\n\nimport pc from \"picocolors\";\n\nconst UPSTREAM_PACKAGE = \"google-workspace-mcp@^2.3.0\";\nconst DEFAULT_CONFIG_DIR = join(homedir(), \".google-mcp\");\nconst DEFAULT_CREDS_FILENAME = \"credentials.json\";\n\nconst PROBE_TIMEOUT_MS = 10_000;\n\n/** Flags for {@link runGworkspaceSetup}. */\nexport interface GworkspaceSetupOptions {\n /**\n * Run `npx google-workspace-mcp status` INSTEAD of the setup flow, not after it: when true, the\n * function returns the probe's exit code and never runs `setup` or `accounts add`.\n */\n probe?: boolean;\n /** Validate + stage credentials, print the manual next step, and return 0 without spawning anything. */\n nonInteractive?: boolean;\n /** Override the credentials path. Default `~/.google-mcp/credentials.json`. A relative path resolves against cwd. */\n credentialsPath?: string;\n}\n\n/** Result of {@link checkCredentialsFile}. `path` is the resolved path, except on `rejected_path` where it is the raw input. */\ntype CredentialsCheckOutcome =\n | { kind: \"ok\"; path: string }\n | { kind: \"missing\"; path: string }\n | { kind: \"malformed\"; path: string; reason: string }\n | { kind: \"wrong_type\"; path: string }\n | { kind: \"rejected_path\"; path: string; reason: string };\n\n/**\n * Reject a path that contains a `..` segment.\n *\n * A literal-substring test, not a containment test: it looks for `..` only. An ABSOLUTE path outside\n * the home directory (`/etc/passwd`) contains no `..` and passes — this narrows the shapes a\n * traversal can take, it does not confine the path to any root.\n *\n * @internal\n */\nfunction isPathTraversal(p: string): boolean {\n return (\n p.includes(\"../\") ||\n p.includes(\"..\\\\\") ||\n p === \"..\" ||\n p.startsWith(\"../\") ||\n p.startsWith(\"..\\\\\")\n );\n}\n\nfunction readAndParseJson(\n resolved: string,\n): { kind: \"ok\"; parsed: unknown } | { kind: \"malformed\"; reason: string } {\n let raw: string;\n try {\n raw = readFileSync(resolved, \"utf8\");\n } catch (err) {\n return { kind: \"malformed\", reason: err instanceof Error ? err.message : String(err) };\n }\n try {\n return { kind: \"ok\", parsed: JSON.parse(raw) };\n } catch (err) {\n return { kind: \"malformed\", reason: err instanceof Error ? err.message : String(err) };\n }\n}\n\nfunction validateOAuthShape(parsed: unknown, resolved: string): CredentialsCheckOutcome {\n if (parsed === null || typeof parsed !== \"object\") {\n return { kind: \"malformed\", path: resolved, reason: \"expected JSON object\" };\n }\n const obj = parsed as { installed?: unknown; web?: unknown };\n if (obj.installed === undefined && obj.web !== undefined) {\n return { kind: \"wrong_type\", path: resolved };\n }\n if (typeof obj.installed !== \"object\" || obj.installed === null) {\n return {\n kind: \"malformed\",\n path: resolved,\n reason: \"missing `installed` block (expected Desktop OAuth client shape)\",\n };\n }\n return { kind: \"ok\", path: resolved };\n}\n\n/**\n * Classify the credentials file at `credentialsPath` before anything is shelled out to upstream.\n *\n * Never throws — every failure is one of the {@link CredentialsCheckOutcome} variants, each of which\n * has a matching operator-facing message in `describeOutcome`:\n * `rejected_path` (the path contains `..`), `missing`, `malformed` (unreadable or not JSON, or JSON\n * without an `installed` block), `wrong_type` (a Web-type client — `web` present, `installed`\n * absent, which is EC-1 and the failure upstream would only surface as a cryptic 401 much later).\n *\n * `ok` means the file parses and carries an `installed` object. It does NOT mean the client id is\n * valid, enabled, or scoped for anything — only the live upstream call can tell you that.\n */\nexport function checkCredentialsFile(credentialsPath: string): CredentialsCheckOutcome {\n if (isPathTraversal(credentialsPath)) {\n return { kind: \"rejected_path\", path: credentialsPath, reason: \"path traversal\" };\n }\n const resolved = resolve(credentialsPath);\n if (!existsSync(resolved)) return { kind: \"missing\", path: resolved };\n\n const parseResult = readAndParseJson(resolved);\n if (parseResult.kind === \"malformed\") {\n return { kind: \"malformed\", path: resolved, reason: parseResult.reason };\n }\n return validateOAuthShape(parseResult.parsed, resolved);\n}\n\nfunction describeOutcome(o: CredentialsCheckOutcome): string {\n switch (o.kind) {\n case \"missing\":\n return (\n `${pc.red(\"error: \")}credentials.json not found at ${o.path}.\\n\\n` +\n `To create it:\\n` +\n ` 1. Go to https://console.cloud.google.com/apis/credentials\\n` +\n ` 2. Create OAuth 2.0 Client ID — Application type: ${pc.bold(\"Desktop application\")}\\n` +\n ` 3. Download the JSON and save it as ${o.path}\\n`\n );\n case \"malformed\":\n return `${pc.red(\"error: \")}credentials.json could not be parsed: ${o.reason}\\n path: ${o.path}\\n`;\n case \"wrong_type\":\n return (\n `${pc.red(\"error: \")}This looks like a ${pc.bold('\"Web application\"')} OAuth client.\\n\\n` +\n `Re-create as ${pc.bold('\"Desktop application\"')} in Google Cloud Console:\\n` +\n ` https://console.cloud.google.com/apis/credentials\\n` +\n `(Click \"+ Create credentials\" → \"OAuth client ID\" → Application type: ${pc.bold(\"Desktop app\")}.)\\n\\n` +\n `Then re-download and save to: ${o.path}\\n`\n );\n case \"rejected_path\":\n return `${pc.red(\"error: \")}credentials path rejected: ${o.reason}\\n path: ${o.path}\\n`;\n case \"ok\":\n return \"\";\n }\n}\n\nfunction resolveCredentialsPath(opts: GworkspaceSetupOptions): string {\n if (opts.credentialsPath !== undefined && opts.credentialsPath.length > 0) {\n return isAbsolute(opts.credentialsPath) ? opts.credentialsPath : resolve(opts.credentialsPath);\n }\n return join(DEFAULT_CONFIG_DIR, DEFAULT_CREDS_FILENAME);\n}\n\nasync function runProbeMode(): Promise<number> {\n process.stdout.write(`\\n${pc.cyan(\"[probe]\")} running upstream connectivity check...\\n`);\n const code = await spawnUpstream([\"status\"], PROBE_TIMEOUT_MS);\n if (code !== 0) {\n process.stderr.write(\n `${pc.yellow(\"warn: \")}upstream status reported a non-zero exit (${code}). Run \\`npx ${UPSTREAM_PACKAGE} accounts list\\` to inspect.\\n`,\n );\n return code;\n }\n return 0;\n}\n\nasync function runInteractiveSetup(): Promise<number> {\n process.stdout.write(\n `\\n${pc.cyan(\"→\")} delegating to upstream installer (${UPSTREAM_PACKAGE})...\\n`,\n );\n const setupCode = await spawnUpstream([\"setup\"]);\n if (setupCode !== 0) {\n process.stderr.write(`${pc.red(\"error: \")}upstream setup exited with code ${setupCode}.\\n`);\n return setupCode;\n }\n process.stdout.write(`\\n${pc.cyan(\"→\")} adding default account...\\n`);\n const addCode = await spawnUpstream([\"accounts\", \"add\", \"default\"]);\n if (addCode !== 0) {\n process.stderr.write(\n `${pc.red(\"error: \")}upstream \\`accounts add\\` exited with code ${addCode}.\\n`,\n );\n return addCode;\n }\n return 0;\n}\n\n/**\n * Validate Google credentials, then hand the OAuth dance to upstream `google-workspace-mcp`.\n *\n * Side effects, in order: creates `~/.google-mcp/` (mode 0700, failure ignored); validates the\n * credentials file and STOPS with 2 if it is not a Desktop OAuth client; best-effort `chmod 600` on\n * it (ignored on Windows/FAT32, EC-6); then one of three exits — probe, non-interactive, or the\n * interactive `npx <upstream> setup` followed by `accounts add default`.\n *\n * Two things surprise callers. `--probe` REPLACES the setup instead of following it. And\n * `~/.google-mcp/` is created even when `credentialsPath` points somewhere else entirely.\n *\n * SCOPES ARE NOT NARROWED HERE, and nothing in this command can narrow them. OAuth is delegated\n * upstream (ADR D345), and the upstream MCP server asks for every scope it supports at the consent\n * screen — there is no per-product grant to choose. Write access is decided later, at runtime, by\n * `googleWorkspace({ writable: true })` in your own code. A `--writable <products>` flag used to be\n * advertised here and granted nothing (#351); it was removed rather than left implying a choice the\n * consent screen does not offer.\n *\n * The interactive path spawns `npx` with inherited stdio and no timeout, so it blocks on the\n * upstream prompts; only the probe is bounded (10s, then SIGTERM).\n *\n * @returns 0, 2 for a credentials problem, or the upstream command's exit code (1 when `npx` itself\n * could not be spawned).\n */\nexport async function runGworkspaceSetup(opts: GworkspaceSetupOptions): Promise<number> {\n const credentialsPath = resolveCredentialsPath(opts);\n\n // Ensure parent dir exists (mode 0700 where POSIX honored).\n try {\n mkdirSync(DEFAULT_CONFIG_DIR, { recursive: true, mode: 0o700 });\n } catch {\n // Non-fatal — if mkdir fails the credentials check will catch it.\n }\n\n // EC-1 + EC-2 + path-traversal — validate BEFORE shelling out.\n const outcome = checkCredentialsFile(credentialsPath);\n if (outcome.kind !== \"ok\") {\n process.stderr.write(describeOutcome(outcome));\n return 2;\n }\n\n // Defense-in-depth: best-effort chmod 600 on POSIX. Windows fails silently.\n try {\n chmodSync(outcome.path, 0o600);\n } catch {\n // EC-6 (DOCUMENT): non-fatal on Windows / FAT32. Carry on.\n }\n\n process.stdout.write(\n `${pc.green(\"✓\")} credentials validated: ${outcome.path}\\n${pc.dim(\" shape: Desktop OAuth client (installed block present)\")}\\n`,\n );\n\n if (opts.probe === true) return runProbeMode();\n\n if (opts.nonInteractive === true) {\n process.stdout.write(\n `${pc.dim(\"non-interactive mode: credentials staged. Next step (manual):\")}\\n ${pc.cyan(`npx ${UPSTREAM_PACKAGE} accounts add default`)}\\n`,\n );\n return 0;\n }\n\n const interactiveCode = await runInteractiveSetup();\n if (interactiveCode !== 0) return interactiveCode;\n\n process.stdout.write(\n `\\n${pc.green(\"✓\")} gworkspace setup complete.\\n` +\n `${pc.dim(' Next: import { googleWorkspace } from \"@theokit/skills-google-workspace\".')}\\n`,\n );\n return 0;\n}\n\n/** Spawn `npx <UPSTREAM_PACKAGE> ...args` with an optional timeout. Returns exit code. @internal */\nfunction spawnUpstream(args: string[], timeoutMs?: number): Promise<number> {\n return new Promise((resolveExit) => {\n const child = spawn(\"npx\", [\"-y\", UPSTREAM_PACKAGE, ...args], {\n stdio: \"inherit\",\n env: process.env,\n });\n let timer: NodeJS.Timeout | undefined;\n if (timeoutMs !== undefined) {\n timer = setTimeout(() => {\n process.stderr.write(\n `${pc.yellow(\"warn: \")}upstream did not finish within ${timeoutMs}ms — killing.\\n`,\n );\n try {\n child.kill(\"SIGTERM\");\n } catch {\n // already dead\n }\n }, timeoutMs);\n }\n child.on(\"error\", (err) => {\n if (timer !== undefined) clearTimeout(timer);\n process.stderr.write(\n `${pc.red(\"error: \")}failed to spawn npx: ${err instanceof Error ? err.message : String(err)}\\n`,\n );\n resolveExit(1);\n });\n child.on(\"exit\", (code) => {\n if (timer !== undefined) clearTimeout(timer);\n resolveExit(code ?? 1);\n });\n });\n}\n","/**\n * `theokit setup <domain>` — top-level CLI verb dispatcher.\n *\n * Currently knows ONE domain: `gworkspace`. Future domains (`notion`,\n * `linear`, etc.) plug in the same way.\n *\n * Per ADR D346, `setup` is reserved for credential staging + connectivity\n * probes for third-party integrations. The flow shells out to the upstream\n * tool's own setup whenever that's safer than re-implementing OAuth.\n *\n * @internal\n */\n\nimport pc from \"picocolors\";\n\nimport { type GworkspaceSetupOptions, runGworkspaceSetup } from \"../setup/gworkspace.js\";\n\n/** Flags for {@link runSetup}, forwarded verbatim to the domain handler. */\nexport interface SetupOptions {\n /** Run the upstream connectivity check INSTEAD of the setup flow, not after it. */\n probe?: boolean;\n /** Override the credentials file path. Default `~/.google-mcp/credentials.json`. */\n credentialsPath?: string;\n /** Stage credentials and stop, printing the manual next step. Suitable for CI. */\n nonInteractive?: boolean;\n}\n\n/**\n * Dispatch `theokit setup <domain>` to its handler. `gworkspace` is the only domain that exists.\n *\n * @returns 2 for an unknown domain, otherwise whatever the domain handler returned — which for\n * `gworkspace` includes the upstream installer's own exit code.\n */\nexport async function runSetup(domain: string, opts: SetupOptions): Promise<number> {\n if (domain === \"gworkspace\") {\n const gworkspaceOpts: GworkspaceSetupOptions = {\n probe: opts.probe === true,\n nonInteractive: opts.nonInteractive === true,\n ...(opts.credentialsPath !== undefined ? { credentialsPath: opts.credentialsPath } : {}),\n };\n return await runGworkspaceSetup(gworkspaceOpts);\n }\n process.stderr.write(\n `${pc.red(\"error: \")}unknown setup domain '${domain}'. Supported domains: gworkspace.\\n`,\n );\n return 2;\n}\n","/**\n * `theokit tasks {list|inspect|cancel}` — operator-facing observability\n * for the SDK Task registry (Adoption Roadmap gap #2; ADRs D361-D374).\n *\n * Reads from the JsonFileTaskStore at `$THEOKIT_HOME/tasks/` (default\n * fallback `cwd/.theokit/tasks/`). Cross-process cancel is best-effort:\n * the CLI marks `cancelRequested: true` in the handle file, and the\n * owning process honors it at the next checkpoint (EC-7).\n *\n * Exit codes:\n * 0 — success, INCLUDING a cancel of an already-terminal task and an empty list\n * 2 — the store directory could not be opened\n * 3 — invalid task id grammar (D368)\n * 4 — task not found\n *\n * These three commands are read-mostly and never start work: they observe a store some other process\n * owns. An empty listing means \"nothing in THIS store dir\", which is usually a `THEOKIT_HOME`\n * mismatch rather than an idle system.\n */\n\nimport { join } from \"node:path\";\n\nimport type { TaskFilter, TaskHandle, TaskState } from \"@theokit/sdk\";\nimport { JsonFileTaskStore, type TaskStore } from \"@theokit/sdk/task-store\";\n\n// Local copy of the id grammar — keeps the CLI dependency surface minimal\n// and matches D368 (`^[a-z0-9][a-z0-9_-]*$`). Adapters use reserved\n// prefixes wf-/b-/cron-; the CLI always allows them.\nconst TASK_ID_GRAMMAR = /^[a-z0-9][a-z0-9_-]*$/;\nfunction isValidTaskId(id: string): boolean {\n return TASK_ID_GRAMMAR.test(id);\n}\n\n/** Flags for {@link runTasksList}. Filter values are passed through to the store unvalidated. */\nexport interface TasksListOptions {\n /** `queued` | `running` | `finished` | `error` | `cancelled`. An unknown value simply matches nothing. */\n state?: string;\n /** `run` | `batch` | `workflow` | `cron` | `custom`. An unknown value simply matches nothing. */\n kind?: string;\n /** Emit the raw handles as JSON. The table view is lossy — see {@link runTasksList}. */\n json?: boolean;\n}\n\n/** Flags for {@link runTasksInspect}. */\nexport interface TasksInspectOptions {\n /** Emit the raw handle as JSON instead of the labelled field list. */\n json?: boolean;\n}\n\n/** Flags for {@link runTasksCancel}. */\nexport interface TasksCancelOptions {\n /**\n * Free-text reason, written to the task handle's `cancelReason` when this cancel actually\n * changes something (#351 — it used to be accepted and read by nothing). A task that is already\n * terminal is left untouched, reason or not.\n */\n reason?: string;\n}\n\n/**\n * Where the task store lives: `$THEOKIT_HOME/tasks` when `THEOKIT_HOME` is set and non-empty,\n * otherwise `<cwd>/.theokit/tasks`.\n *\n * Read fresh on every command, so the CLI must run with the same `THEOKIT_HOME` and — on the\n * fallback path — the same working directory as the process that owns the tasks.\n */\nfunction resolveStoreDir(): string {\n const fromEnv = process.env.THEOKIT_HOME;\n if (typeof fromEnv === \"string\" && fromEnv.length > 0) return join(fromEnv, \"tasks\");\n return join(process.cwd(), \".theokit\", \"tasks\");\n}\n\nfunction openStore(): TaskStore {\n const dir = resolveStoreDir();\n try {\n return new JsonFileTaskStore(dir);\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === \"EACCES\") {\n process.stderr.write(`tasks: cannot access store dir ${dir}: permission denied\\n`);\n throw new Error(\"permission_denied\");\n }\n throw err;\n }\n}\n\nfunction formatTable(handles: readonly TaskHandle[]): string {\n if (handles.length === 0) return \"No tasks found.\";\n const rows = handles.map((h) => ({\n id: h.id.slice(0, 24).padEnd(24),\n kind: h.kind.padEnd(8),\n state: h.state.padEnd(9),\n age: `${Math.floor((Date.now() - h.submittedAt) / 1000)}s`.padStart(6),\n }));\n const header = \"ID KIND STATE AGE\";\n const lines = rows.map((r) => `${r.id} ${r.kind} ${r.state} ${r.age}`);\n return [header, ...lines].join(\"\\n\");\n}\n\nasync function listHandles(store: TaskStore, opts: TasksListOptions): Promise<TaskHandle[]> {\n const filter: TaskFilter = {\n ...(opts.state !== undefined ? { state: opts.state as TaskState } : {}),\n ...(opts.kind !== undefined ? { kind: opts.kind as TaskHandle[\"kind\"] } : {}),\n };\n return store.list(filter);\n}\n\n/**\n * List tasks from the local `JsonFileTaskStore`, filtered by `--state` / `--kind`.\n *\n * The default table TRUNCATES the id to 24 characters and shows no timestamps — it is for scanning,\n * not for scripting. Pass `--json` for the untruncated handles, including `result`, `error` and\n * `cancelRequested`.\n *\n * Returns 2 when the store directory cannot be opened, otherwise 0 — an empty result is a success.\n */\nexport async function runTasksList(opts: TasksListOptions): Promise<number> {\n let store: TaskStore;\n try {\n store = openStore();\n } catch {\n return 2;\n }\n const handles = await listHandles(store, opts);\n if (opts.json === true) {\n process.stdout.write(`${JSON.stringify(handles, null, 2)}\\n`);\n } else {\n process.stdout.write(`${formatTable(handles)}\\n`);\n }\n return 0;\n}\n\nfunction printHandleDetails(handle: TaskHandle): void {\n process.stdout.write(`id: ${handle.id}\\n`);\n process.stdout.write(`kind: ${handle.kind}\\n`);\n process.stdout.write(`state: ${handle.state}\\n`);\n process.stdout.write(`submittedAt: ${new Date(handle.submittedAt).toISOString()}\\n`);\n if (handle.startedAt !== undefined) {\n process.stdout.write(`startedAt: ${new Date(handle.startedAt).toISOString()}\\n`);\n }\n if (handle.finishedAt !== undefined) {\n process.stdout.write(`finishedAt: ${new Date(handle.finishedAt).toISOString()}\\n`);\n process.stdout.write(`result: ${JSON.stringify(handle.result)}\\n`);\n }\n if (handle.erroredAt !== undefined) {\n process.stdout.write(`erroredAt: ${new Date(handle.erroredAt).toISOString()}\\n`);\n process.stdout.write(`error: ${JSON.stringify(handle.error)}\\n`);\n }\n if (handle.cancelledAt !== undefined) {\n process.stdout.write(`cancelledAt: ${new Date(handle.cancelledAt).toISOString()}\\n`);\n }\n if (handle.cancelRequested === true) {\n process.stdout.write(`cancelRequested: true (awaiting owning process)\\n`);\n }\n}\n\n/**\n * Print one task handle by id.\n *\n * Returns 3 when `id` does not match `^[a-z0-9][a-z0-9_-]*$` (checked before the store is touched),\n * 2 when the store cannot be opened, 4 when no such task exists, 0 otherwise.\n */\nexport async function runTasksInspect(id: string, opts: TasksInspectOptions): Promise<number> {\n if (!isValidTaskId(id)) {\n process.stderr.write(`tasks: invalid id grammar: ${id}\\n`);\n return 3;\n }\n let store: TaskStore;\n try {\n store = openStore();\n } catch {\n return 2;\n }\n const handle = await store.get(id);\n if (handle === undefined) {\n process.stderr.write(`tasks: not found: ${id}\\n`);\n return 4;\n }\n if (opts.json === true) {\n process.stdout.write(`${JSON.stringify(handle, null, 2)}\\n`);\n } else {\n printHandleDetails(handle);\n }\n return 0;\n}\n\n/**\n * Ask for a task to stop. Best-effort and asynchronous — this never kills a process.\n *\n * Three outcomes, all exit 0: a task already `finished` / `error` / `cancelled` is left untouched; a\n * `queued` task is transitioned to `cancelled` directly in the store, because no process owns it\n * yet; a `running` task only gets `cancelRequested: true` written, and stops when its owner reaches\n * its next checkpoint (EC-7). A `running` task whose owner is dead therefore stays `running` forever\n * with the flag set — inspect it to see that state.\n *\n * Returns 3 for a malformed id, 2 when the store cannot be opened, 4 when the task does not exist.\n */\nexport async function runTasksCancel(id: string, opts: TasksCancelOptions): Promise<number> {\n if (!isValidTaskId(id)) {\n process.stderr.write(`tasks: invalid id grammar: ${id}\\n`);\n return 3;\n }\n let store: TaskStore;\n try {\n store = openStore();\n } catch {\n return 2;\n }\n const handle = await store.get(id);\n if (handle === undefined) {\n process.stderr.write(`tasks: not found: ${id}\\n`);\n return 4;\n }\n if (handle.state === \"finished\" || handle.state === \"error\" || handle.state === \"cancelled\") {\n process.stdout.write(`task already terminal (state=${handle.state})\\n`);\n return 0;\n }\n if (handle.state === \"queued\") {\n // Direct transition (no owning process AbortController to flip).\n const cancelledAt = Date.now();\n await store.update(id, (h) => ({\n ...h,\n state: \"cancelled\",\n cancelledAt,\n ...(opts.reason !== undefined ? { cancelReason: opts.reason } : {}),\n }));\n process.stdout.write(`task ${id} cancelled (was queued)\\n`);\n return 0;\n }\n // Running: set cancelRequested flag; owning process honors at next checkpoint.\n await store.update(id, (h) => ({\n ...h,\n cancelRequested: true,\n ...(opts.reason !== undefined ? { cancelReason: opts.reason } : {}),\n }));\n process.stdout.write(\n `cancel requested for task ${id}; the owning process will honor it at the next checkpoint\\n`,\n );\n return 0;\n}\n","/**\n * Top-level CLI dispatcher via commander (ADR D194).\n *\n * Subcommands: `init`, `dev`, `inspect`, `eval`, `acp`, `setup`, `db`, `tasks`.\n *\n * Exit codes at this layer:\n * - 0 → success, and also `--help` / `--version`\n * - 1 → unknown error (an exception that escaped a subcommand)\n * - 2 → user error (unknown subcommand, unknown option, bad flag value)\n *\n * Subcommands are free to return codes of their own beyond these — `theokit tasks` uses 3 and 4,\n * `theokit db check-schema-drift` uses 1 to mean \"drift found\", and `theokit dev` forwards the\n * child process's exit code verbatim. Each command module documents its own.\n *\n * @internal\n */\n\nimport { Command } from \"commander\";\n\nimport { type AcpOptions, runAcp } from \"./commands/acp.js\";\nimport {\n runDbCheckSchemaDrift,\n runDbExportSchema,\n runDbGenerate,\n runDbMigrate,\n runDbPush,\n runDbStudio,\n} from \"./commands/db.js\";\nimport { type DevOptions, runDev } from \"./commands/dev.js\";\nimport { type EvalOptions, runEval } from \"./commands/eval.js\";\nimport { type InitOptions, runInit } from \"./commands/init.js\";\nimport { type InspectOptions, runInspect } from \"./commands/inspect.js\";\nimport { runSetup, type SetupOptions } from \"./commands/setup.js\";\nimport {\n runTasksCancel,\n runTasksInspect,\n runTasksList,\n type TasksCancelOptions,\n type TasksInspectOptions,\n type TasksListOptions,\n} from \"./commands/tasks.js\";\nimport { TEMPLATES } from \"./init/templates.js\";\nimport { CLI_VERSION, SDK_VERSION } from \"./version.js\";\n\nfunction registerSubcommands(program: Command, setExit: (n: number) => void): void {\n program\n .command(\"init [project-name]\")\n .description(\"Scaffold a new agent project from a bundled template.\")\n .option(\n \"-t, --template <name>\",\n // Derived from the registry, not restated. This line named three templates while the\n // registry held seven — a help text that lists options is a second copy of the list, and\n // the copy is the one that goes stale.\n `Template name: ${TEMPLATES.map((t) => t.name).join(\" | \")}`,\n )\n .option(\"-f, --force\", \"Overwrite a non-empty destination directory\")\n .option(\"-y, --yes\", \"Skip interactive prompts (CI mode)\")\n .action(async (projectName: string | undefined, opts: InitOptions) => {\n setExit(await runInit(projectName, opts));\n });\n\n program\n .command(\"dev\")\n .description(\"Run the agent entry point under tsx --watch (hot-reload).\")\n .option(\"--entry <path>\", \"Entry file (default: src/index.ts or package.main)\")\n .option(\"--env <path>\", \"Env file to load (default: .env)\")\n .action(async (opts: DevOptions) => {\n setExit(await runDev(opts));\n });\n\n program\n .command(\"inspect\")\n .description(\"List builtin providers, embedding adapters, gateways, and plugins.\")\n .option(\"--json\", \"Emit machine-readable JSON instead of the human tree view\")\n .option(\n \"--filter <kind>\",\n \"Narrow output to one kind: providers | adapters | gateway | plugins\",\n )\n .action(async (opts: InspectOptions) => {\n setExit(await runInspect(opts));\n });\n\n program\n .command(\"eval\")\n .description(\"Run an eval suite against a real LLM and emit a markdown report.\")\n .option(\"-c, --config <path>\", \"Eval config file (default: ./eval.config.ts)\")\n .option(\"-o, --output <path>\", \"Report output path (default: ./eval-report.md)\")\n .action(async (opts: EvalOptions) => {\n setExit(await runEval(opts));\n });\n\n program\n .command(\"acp\")\n .description(\n \"Launch a stdio Agent Client Protocol (ACP) server pointing at the entry file's default-exported agent. Used by ACP-compatible hosts. ADRs D349-D360.\",\n )\n .option(\"--entry <path>\", \"Entry file (default: src/index.ts or package.main)\")\n .option(\"--permission <mode>\", \"Tool permission mode: ask | auto | deny (default: ask)\")\n .option(\"--trusted-tools <list>\", \"Comma-separated tool names that bypass ask\")\n .option(\"--permission-timeout-ms <ms>\", \"Permission request timeout in ms (default: 60000)\")\n .action(async (opts: AcpOptions) => {\n setExit(await runAcp(opts));\n });\n\n program\n .command(\"setup <domain>\")\n .description(\n \"Stage credentials + connectivity probe for a third-party integration. Domains: gworkspace (Google Workspace).\",\n )\n .option(\"--probe\", \"Run upstream connectivity check after staging credentials\")\n .option(\n \"--credentials-path <path>\",\n \"Override path to credentials.json (default: ~/.google-mcp/credentials.json)\",\n )\n .option(\"--non-interactive\", \"Refuse interactive prompts; suitable for CI\")\n .action(async (domain: string, opts: SetupOptions) => {\n setExit(await runSetup(domain, opts));\n });\n\n const db = program\n .command(\"db\")\n .description(\n \"Database tooling — wraps drizzle-kit (generate/migrate/studio/push) and emits polyglot JSON Schema 7 (export-schema/check-schema-drift). Consumes orm.config.ts that default-exports { schema }.\",\n );\n\n db.command(\"generate\")\n .description(\"drizzle-kit generate — generate SQL migrations from your schema diff\")\n .action(() => {\n setExit(runDbGenerate());\n });\n db.command(\"migrate\")\n .description(\"drizzle-kit migrate — apply pending migrations to the database\")\n .action(() => {\n setExit(runDbMigrate());\n });\n db.command(\"studio\")\n .description(\"drizzle-kit studio — launch the embedded data browser UI\")\n .action(() => {\n setExit(runDbStudio());\n });\n db.command(\"push\")\n .description(\"drizzle-kit push — direct schema sync (dangerous in prod; prototypes only)\")\n .action(() => {\n setExit(runDbPush());\n });\n db.command(\"export-schema\")\n .description(\n \"Emit JSON Schema 7 per entity to .theokit/schema/{entity}.schema.json (polyglot consumers).\",\n )\n .option(\"-o, --out <dir>\", \"Output directory (default: .theokit/schema)\")\n .option(\"-c, --config <path>\", \"Path to orm.config (default: orm.config.ts)\")\n .action(async (opts: { out?: string; config?: string }) => {\n setExit(await runDbExportSchema(opts));\n });\n db.command(\"check-schema-drift\")\n .description(\"Re-emit schemas and diff against committed copies. Exit 1 on drift.\")\n .option(\"-o, --out <dir>\", \"Output directory (default: .theokit/schema)\")\n .option(\"-c, --config <path>\", \"Path to orm.config (default: orm.config.ts)\")\n .action(async (opts: { out?: string; config?: string }) => {\n setExit(await runDbCheckSchemaDrift(opts));\n });\n\n const tasks = program\n .command(\"tasks\")\n .description(\"Observe SDK Task registry (list / inspect / cancel)\");\n\n tasks\n .command(\"list\")\n .description(\"List tasks in the local JsonFileTaskStore\")\n .option(\"--state <state>\", \"Filter by state (queued|running|finished|error|cancelled)\")\n .option(\"--kind <kind>\", \"Filter by kind (run|batch|workflow|cron|custom)\")\n .option(\"--json\", \"Emit machine-readable JSON instead of the table view\")\n .action(async (opts: TasksListOptions) => {\n setExit(await runTasksList(opts));\n });\n\n tasks\n .command(\"inspect <id>\")\n .description(\"Inspect a single task by id\")\n .option(\"--json\", \"Emit machine-readable JSON\")\n .action(async (id: string, opts: TasksInspectOptions) => {\n setExit(await runTasksInspect(id, opts));\n });\n\n tasks\n .command(\"cancel <id>\")\n .description(\"Cancel a task (best-effort cross-process via cancelRequested flag)\")\n .option(\"--reason <reason>\", \"Cancellation reason recorded in the registry\")\n .action(async (id: string, opts: TasksCancelOptions) => {\n setExit(await runTasksCancel(id, opts));\n });\n}\n\nfunction mapCommanderExitCode(code: string | undefined, fallback: number): number {\n if (code === \"commander.help\" || code === \"commander.helpDisplayed\") return 0;\n if (code === \"commander.version\") return 0;\n if (code === \"commander.unknownCommand\" || code === \"commander.unknownOption\") return 2;\n return fallback > 0 ? fallback : 2;\n}\n\n/**\n * Parse `argv` and run the matching subcommand, returning the process exit code instead of exiting.\n *\n * `argv` is commander-shaped, i.e. the full `process.argv`: `[execPath, scriptPath, ...args]`. The\n * first two entries are skipped, so passing `[\"theokit\", \"init\"]` silently drops `init` — pass\n * `[\"node\", \"theokit\", \"init\"]` when synthesising one.\n *\n * Never throws and never calls `process.exit`; the caller decides what to do with the code (the\n * bundled `bin/theokit.ts` shim exits with it). Writes to `process.stdout` and `process.stderr`\n * directly, so redirect the streams if you need to capture the output.\n *\n * Returns `0` for success and for `--help` / `--version`, `2` for a user error, `1` for anything\n * that escaped a subcommand as an exception, and otherwise whatever the subcommand returned.\n */\nexport async function main(argv: ReadonlyArray<string>): Promise<number> {\n const program = new Command();\n program\n .name(\"theokit\")\n .description(\"Developer CLI for @theokit/sdk — init, dev, inspect, eval.\")\n .version(CLI_VERSION, \"-v, --version\", \"Print the CLI version and exit.\")\n .addHelpText(\n \"after\",\n `\\nBundled SDK version: ${SDK_VERSION}\\nAdoption Roadmap #1. See https://github.com/usetheo/theokit-sdk for docs.\\n\\nExit codes: 0=success · 1=unknown error · 2=user error.\\n`,\n );\n\n let exitCode = 0;\n const setExit = (code: number): void => {\n exitCode = code;\n };\n registerSubcommands(program, setExit);\n\n // Commander throws CommanderError after `exitOverride` runs (by design)\n // to interrupt further processing. We set exitCode in the callback and\n // swallow the throw — the caller (bin shim) reads our returned code.\n let commanderHandledIt = false;\n program.exitOverride((err) => {\n commanderHandledIt = true;\n exitCode = mapCommanderExitCode(err.code, err.exitCode);\n });\n\n try {\n await program.parseAsync(argv as string[]);\n } catch (err) {\n if (commanderHandledIt) {\n // exitCode already set by exitOverride callback.\n return exitCode;\n }\n process.stderr.write(`theokit: ${err instanceof Error ? err.message : String(err)}\\n`);\n return 1;\n }\n return exitCode;\n}\n"]}
|