@kraken-ai/platform 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-PPT6GGYL.js → chunk-SL6WL3X6.js} +243 -67
- package/dist/chunk-SL6WL3X6.js.map +1 -0
- package/dist/cli.js +1102 -374
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +415 -240
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1072 -368
- package/dist/index.d.ts +1072 -368
- package/dist/index.js +183 -172
- package/dist/index.js.map +1 -1
- package/dist/server.cjs +219 -45
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.cts +264 -28
- package/dist/server.d.ts +264 -28
- package/dist/server.js +15 -20
- package/dist/server.js.map +1 -1
- package/package.json +20 -16
- package/dist/chunk-PPT6GGYL.js.map +0 -1
- package/dist/types-_lfbhFJH.d.cts +0 -451
- package/dist/types-_lfbhFJH.d.ts +0 -451
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/cli/codegen.ts","../src/cli/log.ts","../src/cli/validate.ts","../src/cli/credentials.ts","../src/cli/discover.ts","../src/agents/types/action.ts","../src/agents/types/environment.ts","../src/agents/types/identity.ts","../src/agents/types/notifications.ts","../src/agents/types/platform-agent.ts","../src/agents/types/resources.ts","../src/agents/types/team.ts","../src/agents/types/trigger.ts","../src/agents/types/skill.ts","../src/cli/pick.ts","../src/platform/types.ts"],"sourcesContent":["// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport * as z from \"zod\";\nimport type { SchemaBundle } from \"./cli/codegen\";\nimport { generateTypes } from \"./cli/codegen\";\nimport { clearCredentials, loadCredentials, saveCredentials } from \"./cli/credentials\";\nimport { discoverProject, emitManifest, type ProjectManifest } from \"./cli/discover\";\nimport { warn } from \"./cli/log\";\nimport { pick } from \"./cli/pick\";\nimport {\n type AgentSchema,\n agentSchemaValidator,\n type ConnectorSchema,\n connectorSchemaValidator,\n pipelineSchemaValidator,\n querySchemaValidator,\n type SkillSchema,\n skillSchemaValidator,\n} from \"./platform/types\";\n\n// --- Arg parsing ---\n\nconst COMMANDS = new Set([\"login\", \"generate\", \"logout\", \"discover\", \"init\", \"dev\"]);\n\ninterface ParsedArgs {\n command: string;\n positional: string[];\n flags: Record<string, string>;\n}\n\nexport const parseArgs = (args: string[]): ParsedArgs => {\n const command = args[0];\n if (!command || command === \"--help\" || !COMMANDS.has(command)) {\n return { command: \"help\", positional: [], flags: {} };\n }\n\n const BOOLEAN_FLAGS = new Set([\"check\", \"emit\"]);\n const positional: string[] = [];\n const flags: Record<string, string> = {};\n for (let i = 1; i < args.length; i++) {\n const arg = args[i];\n if (arg?.startsWith(\"--\")) {\n const name = arg.slice(2);\n if (BOOLEAN_FLAGS.has(name)) {\n flags[name] = \"\";\n } else {\n const next = args[++i];\n if (next !== undefined) {\n flags[name] = next;\n }\n }\n } else if (arg) {\n positional.push(arg);\n }\n }\n\n return { command, positional, flags };\n};\n\n// --- Command runner (dependency-injected for testability) ---\n\nexport interface CliDeps {\n clearCredentials: typeof clearCredentials;\n loadCredentials: typeof loadCredentials;\n saveCredentials: typeof saveCredentials;\n generateTypes: typeof generateTypes;\n discoverProject: (dir: string) => Promise<ProjectManifest>;\n fetch: typeof globalThis.fetch;\n prompt: (question: string) => Promise<string>;\n log: (message: string) => void;\n}\n\nexport const runCommand = async (parsed: ParsedArgs, deps: CliDeps): Promise<number> => {\n switch (parsed.command) {\n case \"login\":\n await handleLogin(parsed, deps);\n return 0;\n case \"generate\":\n return handleGenerate(parsed, deps);\n case \"dev\":\n return handleDev(parsed, deps);\n case \"discover\":\n return handleDiscover(parsed, deps);\n case \"init\":\n return handleInit(parsed, deps);\n case \"logout\":\n handleLogout(deps);\n return 0;\n case \"help\":\n printHelp(deps);\n return 0;\n default:\n return 0;\n }\n};\n\nconst handleLogin = async (parsed: ParsedArgs, deps: CliDeps): Promise<void> => {\n const url = parsed.flags.url ?? (await deps.prompt(\"Platform URL: \"));\n const key = parsed.flags.key ?? (await deps.prompt(\"API Key: \"));\n\n if (!url || !key) {\n deps.log(\"Error: both URL and API key are required.\");\n return;\n }\n\n deps.saveCredentials({ baseUrl: url, apiKey: key });\n deps.log(`Credentials saved. Connected to ${url}`);\n};\n\n// --- Remote schema fetching ---\n\nconst emptySchemaBundle: SchemaBundle = {\n agents: [],\n queries: [],\n connectors: [],\n pipelines: [],\n skills: [],\n};\n\nconst fetchRemoteSchemas = async (\n creds: { apiKey: string; baseUrl: string },\n deps: Pick<CliDeps, \"fetch\">,\n): Promise<SchemaBundle> => {\n const headers = { Authorization: `Bearer ${creds.apiKey}` };\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n\n try {\n const endpoints = [\"agents\", \"queries\", \"connectors\", \"pipelines\", \"skills\"] as const;\n const responses = await Promise.all(\n endpoints.map((ep) =>\n deps\n .fetch(`${creds.baseUrl}/api/v1/schema/${ep}`, { headers, signal: controller.signal })\n .then(async (res) => {\n if (!res.ok) return res;\n // Pre-parse JSON so we can validate synchronously\n const data: unknown = await res.json();\n (res as Response & { _jsonData: unknown })._jsonData = data;\n return res;\n })\n .catch(() => null),\n ),\n );\n\n const [agentsRes, queriesRes, connectorsRes, pipelinesRes, skillsRes] = responses;\n\n const allFailed = responses.every((r) => !r?.ok);\n if (allFailed) {\n warn(`Could not reach platform at ${creds.baseUrl}. Generating from local definitions only.`);\n return emptySchemaBundle;\n }\n\n // Shape validation — hard error (exit 1) on structural failures.\n // Network failures are soft (return empty array).\n const agents = parseEndpointData(agentsRes, z.array(agentSchemaValidator), \"agents\");\n const queries = parseEndpointData(queriesRes, z.array(querySchemaValidator), \"queries\");\n const connectors = parseEndpointData(\n connectorsRes,\n z.array(connectorSchemaValidator),\n \"connectors\",\n );\n const pipelines = parseEndpointData(\n pipelinesRes,\n z.array(pipelineSchemaValidator),\n \"pipelines\",\n );\n const skills = parseEndpointData(skillsRes, z.array(skillSchemaValidator), \"skills\");\n\n return { agents, queries, connectors, pipelines, skills };\n } finally {\n clearTimeout(timeout);\n }\n};\n\n/**\n * Validate endpoint data with Zod. Network failures (null/!ok) return empty array.\n * Shape validation failures throw — matches fail-fast rationale.\n */\nconst parseEndpointData = <T>(\n res: Response | null | undefined,\n validator: z.ZodType<T[]>,\n endpointName: string,\n): T[] => {\n if (!res?.ok) return [];\n const data = (res as Response & { _jsonData: unknown })._jsonData;\n const result = validator.safeParse(data);\n if (!result.success) {\n throw new Error(\n `Invalid remote schema from ${endpointName} endpoint: ${z.prettifyError(result.error)}`,\n );\n }\n return result.data;\n};\n\n// --- Merge local + remote ---\n\n// Dedup invariant: local entity name matches remote entity id\nconst mergeLocalAndRemote = (local: ProjectManifest, remote: SchemaBundle): SchemaBundle => {\n const remoteAgentIds = new Set(remote.agents.map((a) => a.id));\n const remoteConnectorIds = new Set(remote.connectors.map((c) => c.id));\n const remoteSkillIds = new Set(remote.skills.map((s) => s.id));\n\n // Local entities contribute to ID unions in platform-types.d.ts.\n // They also appear in detailed registries with empty schemas — accepted trade-off.\n const localAgents: AgentSchema[] = local.agents\n .filter((a) => !remoteAgentIds.has(a.name))\n .map((a) => ({ id: a.name, name: a.name, input: {}, output: {} }));\n\n const localSkills: SkillSchema[] = local.skills\n .filter((s) => !remoteSkillIds.has(s.name))\n .map((s) => ({ id: s.name, name: s.name }));\n\n const localConnectors: ConnectorSchema[] = local.connectors\n .filter((c) => !remoteConnectorIds.has(c.name))\n .map((c) => ({ id: c.name, tools: [] }));\n\n return {\n agents: [...remote.agents, ...localAgents],\n queries: remote.queries,\n connectors: [...remote.connectors, ...localConnectors],\n pipelines: remote.pipelines,\n skills: [...remote.skills, ...localSkills],\n };\n};\n\n// --- Generate command ---\n\nconst handleGenerate = async (parsed: ParsedArgs, deps: CliDeps): Promise<number> => {\n const outDir = parsed.flags.dir ?? process.cwd();\n\n // 1. Local discovery (always runs)\n let manifest: ProjectManifest;\n try {\n manifest = await deps.discoverProject(outDir);\n } catch (err) {\n deps.log(`Error discovering project: ${err instanceof Error ? err.message : String(err)}`);\n return 1;\n }\n\n // 2. Remote schemas (optional — only when authenticated)\n const creds = deps.loadCredentials();\n let remote: SchemaBundle;\n if (creds?.apiKey && creds?.baseUrl) {\n try {\n remote = await fetchRemoteSchemas(creds, deps);\n } catch (err) {\n deps.log(\n `Error fetching remote schemas: ${err instanceof Error ? err.message : String(err)}`,\n );\n return 1;\n }\n } else {\n warn(\n \"Not logged in. Generating from local definitions only. Run `kraken login` to sync with the platform.\",\n );\n remote = emptySchemaBundle;\n }\n\n // 3. Merge — local contributes IDs, remote contributes full schemas\n const bundle = mergeLocalAndRemote(manifest, remote);\n\n // 4. Generate or check\n if (\"check\" in parsed.flags) {\n const { mkdtempSync, readFileSync, rmSync } = await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n const { tmpdir } = await import(\"node:os\");\n\n const tempDir = mkdtempSync(join(tmpdir(), \"kraken-check-\"));\n try {\n deps.generateTypes(bundle, tempDir);\n } catch (err) {\n rmSync(tempDir, { recursive: true, force: true });\n deps.log(`Error generating types: ${err instanceof Error ? err.message : String(err)}`);\n return 1;\n }\n\n try {\n const files = [\n \"pipelines.json\",\n \"pipelines.d.ts\",\n \"pipelines.ts\", // stale file detection — should not exist after migration\n \"agents.d.ts\",\n \"queries.d.ts\",\n \"connectors.d.ts\",\n \"platform-types.d.ts\",\n \"index.d.ts\",\n \"manifest.json\",\n ];\n let stale = false;\n\n for (const file of files) {\n const existingPath = join(outDir, \".kraken-ai\", file);\n const generatedPath = join(tempDir, \".kraken-ai\", file);\n const existing = safeReadFile(readFileSync, existingPath);\n const generated = safeReadFile(readFileSync, generatedPath);\n if (existing !== generated) {\n deps.log(`Schema drift detected: .kraken-ai/${file}`);\n stale = true;\n }\n }\n\n if (stale) {\n deps.log(\"Run `kraken generate` to update generated types.\");\n return 1;\n }\n deps.log(\"Schemas are up to date.\");\n return 0;\n } finally {\n rmSync(tempDir, { recursive: true, force: true });\n }\n }\n\n try {\n deps.generateTypes(bundle, outDir);\n } catch (err) {\n deps.log(`Error generating types: ${err instanceof Error ? err.message : String(err)}`);\n return 1;\n }\n\n // 5. Summary\n const localCount = manifest.agents.length + manifest.skills.length + manifest.connectors.length;\n const remoteCount = remote.agents.length + remote.connectors.length + remote.skills.length;\n deps.log(`Generated types for ${localCount} local + ${remoteCount} remote entities.`);\n return 0;\n};\n\nconst safeReadFile = (\n readFileSync: typeof import(\"node:fs\").readFileSync,\n filePath: string,\n): string | null => {\n try {\n return readFileSync(filePath, \"utf-8\");\n } catch {\n return null;\n }\n};\n\n/** Build the bootstrap script that tsx -e evaluates. Wrapped in async IIFE because tsx -e is CJS. */\nexport const buildDevBootstrap = (fileUrl: string, file: string): string =>\n [\n `void (async () => {`,\n ` const mod = await import(\"${fileUrl}\");`,\n ` const a = mod.default;`,\n ` if (!a || a.__type !== \"PlatformAgent\") {`,\n ` console.error(\"Error: \" + ${JSON.stringify(file)} + \" must export a PlatformAgent as default.\");`,\n ` process.exit(1);`,\n ` }`,\n ` const { runDev } = await import(\"@kraken-ai/platform/server\");`,\n ` await runDev(a);`,\n `})();`,\n ].join(\"\\n\");\n\nconst discoverAgentFiles = async (): Promise<string[]> => {\n const { readdirSync, existsSync } = await import(\"node:fs\");\n const agentsDir = \"agents\";\n if (!existsSync(agentsDir)) return [];\n return readdirSync(agentsDir)\n .filter((f) => f.endsWith(\".ts\") || f.endsWith(\".js\") || f.endsWith(\".mjs\"))\n .sort();\n};\n\nconst handleDev = async (parsed: ParsedArgs, deps: CliDeps): Promise<number> => {\n let name = parsed.positional[0];\n\n if (!name) {\n const agents = await discoverAgentFiles();\n if (agents.length === 0) {\n deps.log(\"No agent files found in agents/. Create one or pass a name: kraken dev <agent>\");\n return 1;\n }\n if (agents.length === 1) {\n name = agents[0];\n } else {\n const selected = await pick(\"Select an agent:\", agents);\n if (!selected) return 0;\n name = selected;\n }\n }\n\n if (!name) return 1;\n\n const file = name.includes(\"/\") ? name : `agents/${name}`;\n\n const { spawn } = await import(\"node:child_process\");\n const { resolve } = await import(\"node:path\");\n const { pathToFileURL } = await import(\"node:url\");\n\n const fileUrl = pathToFileURL(resolve(file)).href;\n const bootstrap = buildDevBootstrap(fileUrl, file);\n\n const child = spawn(\"tsx\", [\"-e\", bootstrap], {\n stdio: \"inherit\",\n cwd: process.cwd(),\n });\n\n return new Promise((resolve) => {\n child.on(\"exit\", (code) => resolve(code ?? 1));\n });\n};\n\nconst handleDiscover = async (parsed: ParsedArgs, deps: CliDeps): Promise<number> => {\n const dir = parsed.flags.dir ?? process.cwd();\n const manifest = await deps.discoverProject(dir);\n\n const total = manifest.agents.length + manifest.skills.length + manifest.connectors.length;\n if (total === 0) {\n deps.log(\"No entities found in agents/, skills/, or connectors/ directories.\");\n return 1;\n }\n\n if (\"emit\" in parsed.flags) {\n emitManifest(manifest);\n } else {\n deps.log(JSON.stringify(manifest, null, 2));\n }\n return 0;\n};\n\nconst handleInit = async (parsed: ParsedArgs, deps: CliDeps): Promise<number> => {\n const name = parsed.flags.name ?? (await deps.prompt(\"Project name: \"));\n if (!name) {\n deps.log(\"Error: project name is required.\");\n return 1;\n }\n\n const { writeFileSync, mkdirSync } = await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n\n const root = join(process.cwd(), name);\n mkdirSync(join(root, \"agents\"), { recursive: true });\n mkdirSync(join(root, \"skills\"), { recursive: true });\n mkdirSync(join(root, \"connectors\"), { recursive: true });\n\n writeFileSync(\n join(root, \"package.json\"),\n JSON.stringify(\n {\n name,\n private: true,\n type: \"module\",\n scripts: { build: \"tsc\" },\n dependencies: {\n \"kraken-ai\": \"latest\",\n \"@kraken-ai/platform\": \"latest\",\n },\n devDependencies: {\n typescript: \"^5\",\n },\n },\n null,\n 2,\n ),\n );\n\n writeFileSync(\n join(root, \"tsconfig.json\"),\n JSON.stringify(\n {\n compilerOptions: {\n target: \"ES2022\",\n module: \"NodeNext\",\n moduleResolution: \"nodenext\",\n resolveJsonModule: true,\n strict: true,\n outDir: \"dist\",\n rootDir: \".\",\n declaration: true,\n esModuleInterop: true,\n skipLibCheck: true,\n },\n include: [\"agents\", \"skills\", \"connectors\"],\n },\n null,\n 2,\n ),\n );\n\n writeFileSync(\n join(root, \"agents\", \"my-agent.ts\"),\n `import { definePlatformAgent } from \"@kraken-ai/platform\";\n\nexport default definePlatformAgent({\n agent: {\n name: \"my-agent\",\n model: \"google/gemini-2.5-flash-preview-05-20\",\n instructions: \"You are a helpful assistant.\",\n },\n triggers: [{ type: \"manual\" }],\n});\n`,\n );\n\n writeFileSync(join(root, \".gitignore\"), `node_modules/\\ndist/\\n.kraken-ai/\\ndata/\\n.env\\n`);\n\n deps.log(`Created project at ${root}/`);\n deps.log(`\\n cd ${name}\\n pnpm install\\n kraken login\\n kraken generate\\n`);\n return 0;\n};\n\nconst handleLogout = (deps: CliDeps): void => {\n deps.clearCredentials();\n deps.log(\"Credentials cleared.\");\n};\n\nconst printHelp = (deps: CliDeps): void => {\n deps.log(\n `\nkraken — Kraken AI Platform CLI\n\nCommands:\n dev Run an agent locally with an interactive REPL\n [agent] Agent filename, e.g. researcher.ts (optional — picks from agents/ if omitted)\n\n login Store API credentials\n --url <platform-url> Platform instance URL\n --key <api-key> API key\n\n generate Discover local entities and fetch remote schemas to generate types\n --dir <path> Project root / output directory (default: cwd)\n --check Check if types are up-to-date (exit 1 if stale)\n\n discover Scan agents/, skills/, connectors/ and output project manifest\n --dir <path> Project root (default: cwd)\n --emit Output with sentinel markers (for orchestrator)\n\n init Create a new Kraken project\n --name <project-name> Project name\n\n logout Clear stored credentials\n\nEnvironment variables:\n KRAKEN_API_KEY API key (overrides stored credentials)\n KRAKEN_BASE_URL Platform URL (overrides stored credentials)\n`.trim(),\n );\n};\n\n// --- CLI entrypoint ---\n\nconst readlinePrompt = async (question: string): Promise<string> => {\n const { createInterface } = await import(\"node:readline\");\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n resolve(answer);\n });\n });\n};\n\nconst main = async () => {\n const parsed = parseArgs(process.argv.slice(2));\n const exitCode = await runCommand(parsed, {\n clearCredentials,\n loadCredentials,\n saveCredentials,\n generateTypes,\n discoverProject,\n fetch: globalThis.fetch,\n prompt: readlinePrompt,\n log: console.log,\n });\n if (exitCode !== 0) process.exit(exitCode);\n};\n\nvoid main();\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport type {\n AgentSchema,\n ConnectorSchema,\n PipelineSchema,\n QueryColumn,\n QuerySchema,\n SkillSchema,\n} from \"../platform/types\";\nimport { warn } from \"./log\";\nimport { validateSchemaBundle } from \"./validate\";\n\nexport interface SchemaBundle {\n agents: AgentSchema[];\n queries: QuerySchema[];\n connectors: ConnectorSchema[];\n pipelines: PipelineSchema[];\n skills: SkillSchema[];\n}\n\nexport const generateTypes = (schemas: SchemaBundle, projectRoot: string): void => {\n // Validate ALL identifiers before any file writes (safety invariant #4)\n validateSchemaBundle(schemas);\n\n const outDir = path.join(projectRoot, \".kraken-ai\");\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n\n // Cleanup stale pipelines.ts BEFORE new file writes (safety invariant #4)\n const stalePipelinesTs = path.join(outDir, \"pipelines.ts\");\n if (fs.existsSync(stalePipelinesTs)) {\n fs.rmSync(stalePipelinesTs);\n warn(\n \"Migrated: removed .kraken-ai/pipelines.ts. Pipeline schemas now in pipelines.json + pipelines.d.ts.\",\n );\n }\n\n fs.writeFileSync(path.join(outDir, \"agents.d.ts\"), generateAgentsDts(schemas.agents));\n fs.writeFileSync(path.join(outDir, \"queries.d.ts\"), generateQueriesDts(schemas.queries));\n\n const connectorsDtsPath = path.join(outDir, \"connectors.d.ts\");\n if (schemas.connectors.length > 0) {\n fs.writeFileSync(connectorsDtsPath, generateConnectorsDts(schemas.connectors));\n } else if (fs.existsSync(connectorsDtsPath)) {\n fs.rmSync(connectorsDtsPath);\n }\n\n fs.writeFileSync(path.join(outDir, \"pipelines.json\"), generatePipelinesJson(schemas.pipelines));\n fs.writeFileSync(path.join(outDir, \"pipelines.d.ts\"), generatePipelinesDts(schemas.pipelines));\n\n const platformTypesDtsPath = path.join(outDir, \"platform-types.d.ts\");\n const platformTypesDts = generatePlatformTypesDts(\n schemas.agents,\n schemas.connectors,\n schemas.skills,\n );\n if (platformTypesDts) {\n fs.writeFileSync(platformTypesDtsPath, platformTypesDts);\n } else if (fs.existsSync(platformTypesDtsPath)) {\n fs.rmSync(platformTypesDtsPath);\n }\n\n fs.writeFileSync(\n path.join(outDir, \"index.d.ts\"),\n generateIndexDts(\n schemas.connectors.length > 0,\n schemas.pipelines.length > 0,\n platformTypesDts != null,\n ),\n );\n fs.writeFileSync(path.join(outDir, \"manifest.json\"), JSON.stringify(schemas, null, 2));\n};\n\nconst generateAgentsDts = (agents: AgentSchema[]): string => {\n const entries = agents\n .map((a) => {\n const input = jsonSchemaToTsType(a.input);\n const output = jsonSchemaToTsType(a.output);\n const actions = generateActionsType(a.actions);\n return ` \"${a.id}\": {\\n input: ${input}\\n output: ${output}\\n actions: ${actions}\\n }`;\n })\n .join(\"\\n\");\n\n return [\n `// Auto-generated by \\`kraken generate\\` — do not edit manually`,\n `export {};`,\n ``,\n `declare module \"@kraken-ai/platform\" {`,\n ` interface AgentRegistry {`,\n entries,\n ` }`,\n `}`,\n ``,\n ].join(\"\\n\");\n};\n\nconst generateActionsType = (\n actions: Record<string, Record<string, unknown>> | undefined,\n): string => {\n if (!actions || Object.keys(actions).length === 0) {\n return \"Record<string, never>\";\n }\n const entries = Object.entries(actions)\n .map(([name, schema]) => `\"${name}\": ${jsonSchemaToTsType(schema)}`)\n .join(\"; \");\n return `{ ${entries} }`;\n};\n\nconst generateQueriesDts = (queries: QuerySchema[]): string => {\n const entries = queries\n .map((q) => {\n const params = jsonSchemaToTsType(q.params);\n const row = columnsToTsType(q.columns);\n return ` \"${q.name}\": {\\n params: ${params}\\n row: ${row}\\n }`;\n })\n .join(\"\\n\");\n\n return `// Auto-generated by \\`kraken generate\\` — do not edit manually\\n\\nexport interface QueryRegistry {\\n${entries}\\n}\\n`;\n};\n\nconst generateConnectorsDts = (connectors: ConnectorSchema[]): string => {\n const ids = connectors.map((c) => `\"${c.id}\"`).join(\" | \");\n\n const entries = connectors\n .map((c) => {\n const tools = c.tools\n .map((t) => {\n const params = jsonSchemaToTsType(t.parameters);\n return ` \"${t.name}\": ${params}`;\n })\n .join(\"\\n\");\n return ` \"${c.id}\": {\\n${tools}\\n }`;\n })\n .join(\"\\n\");\n\n return `// Auto-generated by \\`kraken generate\\` — do not edit manually\\n\\nexport type ConnectorId = ${ids};\\n\\nexport interface ConnectorTools {\\n${entries}\\n}\\n`;\n};\n\nconst generateIndexDts = (\n hasConnectors: boolean,\n hasPipelines: boolean,\n hasPlatformTypes: boolean,\n): string => {\n let content = `// Auto-generated by \\`kraken generate\\` — do not edit manually\\n\\n/// <reference path=\"./agents.d.ts\" />\\nexport type { QueryRegistry } from \"./queries\"\\n`;\n if (hasConnectors) {\n content += `export type { ConnectorId, ConnectorTools } from \"./connectors\"\\n`;\n }\n if (hasPipelines) {\n content += `/// <reference path=\"./pipelines.d.ts\" />\\n`;\n }\n if (hasPlatformTypes) {\n content += `/// <reference path=\"./platform-types.d.ts\" />\\n`;\n }\n return content;\n};\n\nconst generatePlatformTypesDts = (\n agents: AgentSchema[],\n connectors: ConnectorSchema[],\n skills: SkillSchema[],\n): string | null => {\n const entries: string[] = [];\n\n if (agents.length > 0) {\n const ids = agents.map((a) => `\"${a.id}\"`).join(\" | \");\n entries.push(` agentId: ${ids};`);\n }\n if (connectors.length > 0) {\n const ids = connectors.map((c) => `\"${c.id}\"`).join(\" | \");\n entries.push(` connectorId: ${ids};`);\n }\n if (skills.length > 0) {\n const ids = skills.map((s) => `\"${s.id}\"`).join(\" | \");\n entries.push(` skillId: ${ids};`);\n }\n\n if (entries.length === 0) return null;\n\n return [\n `// Auto-generated by \\`kraken generate\\` — do not edit manually`,\n `export {};`,\n ``,\n `declare module \"@kraken-ai/platform\" {`,\n ` interface KrakenTypeRegistry {`,\n ...entries,\n ` }`,\n `}`,\n ``,\n ].join(\"\\n\");\n};\n\nconst MAX_TS_TYPE_DEPTH = 20;\n\n/**\n * Convert a JSON Schema node to a TypeScript type string.\n *\n * Safety invariant: ONLY emits fixed TS type keywords (string, number, boolean,\n * unknown, null, Record<string, unknown>) and validated property names.\n * MUST NOT interpolate arbitrary schema values (enum members, defaults, descriptions).\n */\nconst jsonSchemaToTsType = (schema: Record<string, unknown>, depth = 0): string => {\n if (depth > MAX_TS_TYPE_DEPTH) return \"unknown\";\n if (!schema || Object.keys(schema).length === 0) return \"unknown\";\n\n // Handle anyOf (nullable patterns and unions)\n const anyOf = schema.anyOf as Record<string, unknown>[] | undefined;\n if (anyOf) {\n const nonNull = anyOf.filter((s) => s.type !== \"null\");\n const hasNull = anyOf.some((s) => s.type === \"null\");\n\n if (nonNull.length === 1 && nonNull[0] && hasNull) {\n return `${jsonSchemaToTsType(nonNull[0], depth + 1)} | null`;\n }\n if (nonNull.length > 1) {\n const variants = nonNull.map((s) => jsonSchemaToTsType(s, depth + 1)).join(\" | \");\n return hasNull ? `${variants} | null` : variants;\n }\n if (nonNull.length === 0 && hasNull) {\n return \"null\";\n }\n }\n\n const type = schema.type as string | undefined;\n switch (type) {\n case \"string\":\n return \"string\";\n case \"number\":\n case \"integer\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"null\":\n return \"null\";\n case \"object\": {\n const props = schema.properties as Record<string, Record<string, unknown>> | undefined;\n if (!props) return \"Record<string, unknown>\";\n const required = new Set((schema.required as string[]) ?? []);\n const fields = Object.entries(props)\n .map(([k, val]) => {\n const optional = !required.has(k);\n const tsType = jsonSchemaToTsType(val, depth + 1);\n return `${k}${optional ? \"?\" : \"\"}: ${tsType}`;\n })\n .join(\"; \");\n return `{ ${fields} }`;\n }\n case \"array\": {\n const items = schema.items as Record<string, unknown> | undefined;\n return `${jsonSchemaToTsType(items ?? {}, depth + 1)}[]`;\n }\n default:\n return \"unknown\";\n }\n};\n\nconst columnsToTsType = (columns: QueryColumn[]): string => {\n if (columns.length === 0) return \"Record<string, unknown>\";\n const fields = columns.map((c) => `${c.name}: ${columnTypeToTs(c.type)}`).join(\"; \");\n return `{ ${fields} }`;\n};\n\nconst columnTypeToTs = (type: string): string => {\n switch (type.toLowerCase()) {\n case \"string\":\n case \"text\":\n case \"varchar\":\n return \"string\";\n case \"number\":\n case \"integer\":\n case \"float\":\n case \"double\":\n case \"decimal\":\n return \"number\";\n case \"boolean\":\n case \"bool\":\n return \"boolean\";\n default:\n return \"unknown\";\n }\n};\n\n// --- Pipeline codegen (JSON data + type declarations) ---\n\n/**\n * Generate pipelines.json — pure JSON data via JSON.stringify.\n * No string interpolation, no execution risk. (Safety invariant #2)\n *\n * Output structure: { [pipeline]: { [query]: { params, returns } } }\n */\nconst generatePipelinesJson = (pipelines: PipelineSchema[]): string => {\n if (pipelines.length === 0) return JSON.stringify({}, null, 2);\n\n const result: Record<\n string,\n Record<string, { params: Record<string, unknown>; returns: Record<string, unknown> }>\n > = {};\n for (const p of pipelines) {\n const queries: Record<\n string,\n { params: Record<string, unknown>; returns: Record<string, unknown> }\n > = {};\n for (const q of p.queries) {\n queries[q.name] = { params: q.params, returns: q.returns };\n }\n result[p.pipeline] = queries;\n }\n\n return JSON.stringify(result, null, 2);\n};\n\n/**\n * Generate pipelines.d.ts — PipelineRegistry interface with TypeScript types.\n * Uses declare module augmentation pattern (matches platform-types.d.ts).\n * Only emits fixed TS type keywords and validated property names. (Safety invariant #1)\n */\nconst generatePipelinesDts = (pipelines: PipelineSchema[]): string => {\n if (pipelines.length === 0) {\n return [\n `// Auto-generated by \\`kraken generate\\` — do not edit manually`,\n `export {};`,\n ``,\n `declare module \"@kraken-ai/platform\" {`,\n ` interface PipelineRegistry {}`,\n `}`,\n ``,\n ].join(\"\\n\");\n }\n\n const entries = pipelines\n .map((p) => {\n const queryEntries = p.queries\n .map((q) => {\n const params = jsonSchemaToTsType(q.params);\n const returns = jsonSchemaToTsType(q.returns);\n return ` \"${q.name}\": {\\n params: ${params}\\n returns: ${returns}\\n }`;\n })\n .join(\"\\n\");\n return ` \"${p.pipeline}\": {\\n${queryEntries}\\n }`;\n })\n .join(\"\\n\");\n\n return [\n `// Auto-generated by \\`kraken generate\\` — do not edit manually`,\n `export {};`,\n ``,\n `declare module \"@kraken-ai/platform\" {`,\n ` interface PipelineRegistry {`,\n entries,\n ` }`,\n `}`,\n ``,\n ].join(\"\\n\");\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nconst supportsColor =\n !(\"NO_COLOR\" in process.env) &&\n process.env.FORCE_COLOR !== \"0\" &&\n (process.stderr.isTTY ?? false);\n\nconst code = (open: number, close: number) => {\n const openStr = `\\x1b[${open}m`;\n const closeStr = `\\x1b[${close}m`;\n return (s: string): string => (supportsColor ? `${openStr}${s}${closeStr}` : s);\n};\n\nexport const bold = code(1, 22);\nexport const dim = code(2, 22);\nexport const red = code(31, 39);\nexport const yellow = code(33, 39);\nexport const green = code(32, 39);\nexport const cyan = code(36, 39);\n\nexport const info = (msg: string): void => {\n process.stderr.write(` ${dim(\"[kraken-ai:\")} ${cyan(\"info\")}${dim(\"]\")} ${msg}\\n`);\n};\n\nexport const warn = (msg: string): void => {\n process.stderr.write(` ${dim(\"[kraken-ai:\")} ${yellow(\"warn\")}${dim(\"]\")} ${msg}\\n`);\n};\n\nexport const error = (msg: string): void => {\n process.stderr.write(` ${dim(\"[kraken-ai:\")} ${red(\"error\")}${dim(\"]\")} ${msg}\\n`);\n};\n\nexport const success = (msg: string): void => {\n process.stderr.write(` ${dim(\"[kraken-ai:\")} ${green(\"ok\")}${dim(\"]\")} ${msg}\\n`);\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport type { SchemaBundle } from \"./codegen\";\n\n// ─── Entity Name Validation ───\n\nexport const ENTITY_NAME_REGEX = /^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$/;\n\n/** Single-char names (e.g. \"a\") are valid — the regex requires min 2 chars, so we also allow /^[a-z0-9]$/ */\nexport const isValidEntityName = (name: string): boolean =>\n name.length === 1 ? /^[a-z0-9]$/.test(name) : ENTITY_NAME_REGEX.test(name);\n\n// ─── Skill Name Validation ───\n\n/** Skill filenames allow uppercase: e.g. someFile-name.md, Research.md */\nexport const SKILL_NAME_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9-]{0,62}[a-zA-Z0-9]$/;\n\nexport const isValidSkillName = (basename: string): boolean =>\n basename.length === 1 ? /^[a-zA-Z0-9]$/.test(basename) : SKILL_NAME_REGEX.test(basename);\n\n/** Skill IDs from remote may include .md extension */\nexport const isValidSkillId = (id: string): boolean => {\n const base = id.endsWith(\".md\") ? id.slice(0, -3) : id;\n return isValidSkillName(base);\n};\n\n// ─── Tool Name Validation ───\n\n/** Tool names allow underscores (e.g., fs_read, fs_write) */\nexport const TOOL_NAME_REGEX = /^[a-z][a-z0-9_-]{0,62}[a-z0-9]$/;\n\nexport const isValidToolName = (name: string): boolean =>\n name.length === 1 ? /^[a-z]$/.test(name) : TOOL_NAME_REGEX.test(name);\n\n// ─── Property Name Validation ───\n\n/** JS/TS property names with 255-char length cap to prevent DoS */\nexport const PROPERTY_NAME_REGEX = /^[a-zA-Z_$][a-zA-Z0-9_$]{0,254}$/;\n\nconst FORBIDDEN_PROPS = new Set([\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n \"__defineGetter__\",\n \"__defineSetter__\",\n \"__lookupGetter__\",\n \"__lookupSetter__\",\n]);\n\nexport const isValidPropertyName = (name: string): boolean =>\n PROPERTY_NAME_REGEX.test(name) && !FORBIDDEN_PROPS.has(name);\n\n// ─── Schema Bundle Validation ───\n\nconst MAX_SCHEMA_DEPTH = 20;\nconst MAX_OBJECT_BREADTH = 200;\n\n/**\n * Validates all identifiers in a SchemaBundle before codegen.\n * Throws on the first invalid identifier — fail-fast.\n *\n * Checks:\n * - Entity names (agent IDs, connector IDs, pipeline names, query names)\n * - Skill IDs (allows .md extension)\n * - Tool names (allows underscores)\n * - Property names in JSON Schema (recursive, with depth/breadth limits)\n * - Column names in query schemas\n * - Rejects `$ref` keys in pipeline schemas\n * - Strips `pattern` keys from pipeline schemas (ReDoS prevention)\n */\nexport const validateSchemaBundle = (bundle: SchemaBundle): void => {\n for (const agent of bundle.agents) {\n assertValidEntity(\"agent id\", agent.id);\n validateJsonSchemaProperties(\"agent input schema\", agent.input, 0);\n validateJsonSchemaProperties(\"agent output schema\", agent.output, 0);\n if (agent.actions) {\n for (const [actionName, actionSchema] of Object.entries(agent.actions)) {\n assertValidEntity(\"agent action name\", actionName);\n validateJsonSchemaProperties(\"agent action schema\", actionSchema, 0);\n }\n }\n }\n\n for (const query of bundle.queries) {\n assertValidEntity(\"query name\", query.name);\n validateJsonSchemaProperties(\"query params schema\", query.params, 0);\n for (const col of query.columns) {\n assertValidProperty(\"query column name\", col.name);\n }\n }\n\n for (const connector of bundle.connectors) {\n assertValidEntity(\"connector id\", connector.id);\n for (const tool of connector.tools) {\n assertValidTool(\"connector tool name\", tool.name);\n validateJsonSchemaProperties(\"connector tool parameters\", tool.parameters, 0);\n }\n }\n\n for (const pipeline of bundle.pipelines) {\n assertValidEntity(\"pipeline name\", pipeline.pipeline);\n for (const query of pipeline.queries) {\n assertValidEntity(\"pipeline query name\", query.name);\n validatePipelineSchema(\"pipeline query params\", query.params, 0);\n validatePipelineSchema(\"pipeline query returns\", query.returns, 0);\n }\n }\n\n for (const skill of bundle.skills) {\n assertValidSkill(\"skill id\", skill.id);\n }\n};\n\n// ─── Internal Assertion Helpers ───\n\nconst assertValidEntity = (entityType: string, value: string): void => {\n if (!isValidEntityName(value)) {\n throw new Error(\n `Invalid remote schema: ${entityType} \"${value}\". Must match ${ENTITY_NAME_REGEX}`,\n );\n }\n};\n\nconst assertValidTool = (entityType: string, value: string): void => {\n if (!isValidToolName(value)) {\n throw new Error(\n `Invalid remote schema: ${entityType} \"${value}\". Must match ${TOOL_NAME_REGEX}`,\n );\n }\n};\n\nconst assertValidProperty = (entityType: string, value: string): void => {\n if (!isValidPropertyName(value)) {\n throw new Error(\n `Invalid remote schema: ${entityType} \"${value}\". Must match ${PROPERTY_NAME_REGEX} and not be a forbidden property`,\n );\n }\n};\n\nconst assertValidSkill = (entityType: string, value: string): void => {\n if (!isValidSkillId(value)) {\n throw new Error(\n `Invalid remote schema: ${entityType} \"${value}\". Must match ${SKILL_NAME_REGEX} (with optional .md extension)`,\n );\n }\n};\n\n/**\n * Validates property names in a JSON Schema node recursively.\n * Used for agent/query/connector schemas where we only need property name validation.\n */\nconst validateJsonSchemaProperties = (\n context: string,\n schema: Record<string, unknown>,\n depth: number,\n): void => {\n if (!schema || typeof schema !== \"object\") return;\n if (depth > MAX_SCHEMA_DEPTH) {\n throw new Error(\n `Invalid remote schema: ${context} exceeds maximum nesting depth of ${MAX_SCHEMA_DEPTH}`,\n );\n }\n\n const props = schema.properties as Record<string, Record<string, unknown>> | undefined;\n if (props) {\n const keys = Object.keys(props);\n if (keys.length > MAX_OBJECT_BREADTH) {\n throw new Error(\n `Invalid remote schema: ${context} has ${keys.length} properties, exceeding limit of ${MAX_OBJECT_BREADTH}`,\n );\n }\n for (const key of keys) {\n assertValidProperty(`${context} property name`, key);\n validateJsonSchemaProperties(context, props[key] ?? {}, depth + 1);\n }\n }\n\n const items = schema.items as Record<string, unknown> | undefined;\n if (items) {\n validateJsonSchemaProperties(context, items, depth + 1);\n }\n\n for (const keyword of [\"anyOf\", \"oneOf\", \"allOf\"] as const) {\n const variants = schema[keyword] as Record<string, unknown>[] | undefined;\n if (variants) {\n for (const variant of variants) {\n validateJsonSchemaProperties(context, variant, depth + 1);\n }\n }\n }\n};\n\n/**\n * Validates pipeline JSON Schema nodes with stricter checks:\n * - All property name validation from validateJsonSchemaProperties\n * - Rejects `$ref` keys (prevents circular reference bypass in z.fromJSONSchema())\n * - Strips `pattern` keys (prevents ReDoS in z.fromJSONSchema() line 328)\n */\nconst validatePipelineSchema = (\n context: string,\n schema: Record<string, unknown>,\n depth: number,\n): void => {\n if (!schema || typeof schema !== \"object\") return;\n if (depth > MAX_SCHEMA_DEPTH) {\n throw new Error(\n `Invalid remote schema: ${context} exceeds maximum nesting depth of ${MAX_SCHEMA_DEPTH}`,\n );\n }\n\n if (\"$ref\" in schema) {\n throw new Error(\n `Invalid remote schema: ${context} contains \"$ref\" which is not supported in pipeline schemas`,\n );\n }\n\n // Strip `pattern` keys to prevent ReDoS in z.fromJSONSchema()\n if (\"pattern\" in schema) {\n delete schema.pattern;\n }\n\n const props = schema.properties as Record<string, Record<string, unknown>> | undefined;\n if (props) {\n const keys = Object.keys(props);\n if (keys.length > MAX_OBJECT_BREADTH) {\n throw new Error(\n `Invalid remote schema: ${context} has ${keys.length} properties, exceeding limit of ${MAX_OBJECT_BREADTH}`,\n );\n }\n for (const key of keys) {\n assertValidProperty(`${context} property name`, key);\n validatePipelineSchema(context, props[key] ?? {}, depth + 1);\n }\n }\n\n const items = schema.items as Record<string, unknown> | undefined;\n if (items) {\n validatePipelineSchema(context, items, depth + 1);\n }\n\n for (const keyword of [\"anyOf\", \"oneOf\", \"allOf\"] as const) {\n const variants = schema[keyword] as Record<string, unknown>[] | undefined;\n if (variants) {\n for (const variant of variants) {\n validatePipelineSchema(context, variant, depth + 1);\n }\n }\n }\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nexport interface Credentials {\n apiKey: string;\n baseUrl: string;\n}\n\nconst credentialsDir = () => path.join(os.homedir(), \".kraken-ai\");\nconst credentialsPath = () => path.join(credentialsDir(), \"credentials.json\");\n\nexport const saveCredentials = (creds: Credentials): void => {\n const dir = credentialsDir();\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o700 });\n }\n const filePath = credentialsPath();\n fs.writeFileSync(filePath, JSON.stringify(creds, null, 2), { mode: 0o600 });\n};\n\nexport const loadCredentials = (): Credentials | null => {\n const filePath = credentialsPath();\n let creds: Credentials | null = null;\n\n if (fs.existsSync(filePath)) {\n try {\n creds = JSON.parse(fs.readFileSync(filePath, \"utf-8\")) as Credentials;\n } catch {\n return null;\n }\n }\n\n const envKey = process.env.KRAKEN_API_KEY;\n const envUrl = process.env.KRAKEN_BASE_URL;\n\n if (envKey || envUrl) {\n return {\n apiKey: envKey ?? creds?.apiKey ?? \"\",\n baseUrl: envUrl ?? creds?.baseUrl ?? \"\",\n };\n }\n\n return creds;\n};\n\nexport const clearCredentials = (): void => {\n const filePath = credentialsPath();\n if (fs.existsSync(filePath)) {\n fs.unlinkSync(filePath);\n }\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport * as z from \"zod\";\nimport type { PlatformAgentConfig } from \"../agents/types/index\";\nimport { platformAgentConfigSchema } from \"../agents/types/index\";\nimport { warn } from \"./log\";\nimport { ENTITY_NAME_REGEX, isValidEntityName, isValidSkillName } from \"./validate\";\n\n// ─── Sentinel Markers ───\n\nexport const MANIFEST_START = \"---KRAKEN-MANIFEST-START---\";\nexport const MANIFEST_END = \"---KRAKEN-MANIFEST-END---\";\n\n// ─── Project Manifest Schema ───\n\nconst skillEntrySchema = z.object({\n name: z.string().min(1),\n path: z.string().min(1),\n content: z.string(),\n});\n\nconst connectorEntrySchema = z.object({\n name: z.string().min(1),\n path: z.string().min(1),\n});\n\nconst agentEntrySchema = z.object({\n name: z.string().min(1),\n entryPoint: z.string().min(1),\n config: platformAgentConfigSchema,\n});\n\nexport const projectManifestSchema = z.object({\n agents: z.array(agentEntrySchema),\n skills: z.array(skillEntrySchema),\n connectors: z.array(connectorEntrySchema),\n});\n\nexport type ProjectManifest = z.infer<typeof projectManifestSchema>;\n\n// ─── tsx Availability ───\n\n/** Check whether tsx is registered as an ESM loader. The platform image and\n * intake container set `NODE_OPTIONS=--import tsx/esm` so this env-var check\n * is the canonical detection signal. */\nexport const isTsxAvailable = (): boolean => process.env.NODE_OPTIONS?.includes(\"tsx\") === true;\n\n// ─── Agent Discovery ───\n\nconst isPlatformAgentExport = (\n value: unknown,\n): value is { __type: \"PlatformAgent\"; config: PlatformAgentConfig } =>\n value != null &&\n typeof value === \"object\" &&\n (value as Record<string, unknown>).__type === \"PlatformAgent\" &&\n \"config\" in value;\n\ninterface DiscoveredAgent {\n config: PlatformAgentConfig;\n entryPoint: string;\n}\n\nexport const discoverAgents = async (projectRoot: string): Promise<DiscoveredAgent[]> => {\n const distAgentsDir = path.join(projectRoot, \"dist\", \"agents\");\n const useDistAgents = fs.existsSync(distAgentsDir) && fs.statSync(distAgentsDir).isDirectory();\n const agentsDir = useDistAgents ? distAgentsDir : path.join(projectRoot, \"agents\");\n const agentsDirPrefix = useDistAgents ? \"dist/agents\" : \"agents\";\n\n if (!fs.existsSync(agentsDir) || !fs.statSync(agentsDir).isDirectory()) {\n return [];\n }\n\n const tsxEnabled = isTsxAvailable();\n const files = fs\n .readdirSync(agentsDir)\n .filter((f) => f.endsWith(\".js\") || f.endsWith(\".mjs\") || (tsxEnabled && f.endsWith(\".ts\")))\n .sort();\n\n const seen = new Map<string, DiscoveredAgent>();\n\n for (const file of files) {\n const filePath = path.join(agentsDir, file);\n try {\n const mod = (await import(pathToFileURL(filePath).href)) as Record<string, unknown>;\n const exported = mod.default;\n if (isPlatformAgentExport(exported) && !seen.has(exported.config.agent.name)) {\n seen.set(exported.config.agent.name, {\n config: exported.config,\n entryPoint: `${agentsDirPrefix}/${file}`,\n });\n }\n } catch (err) {\n warn(\n `Skipping ${agentsDirPrefix}/${file}: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n\n return [...seen.values()];\n};\n\n// ─── Skill Discovery ───\n\nconst MAX_SKILL_SIZE = 100 * 1024; // 100KB\n\nconst discoverSkills = (projectRoot: string): ProjectManifest[\"skills\"] => {\n const skillsDir = path.join(projectRoot, \"skills\");\n\n if (!fs.existsSync(skillsDir) || !fs.statSync(skillsDir).isDirectory()) {\n return [];\n }\n\n const files = fs.readdirSync(skillsDir).sort();\n\n const skills: ProjectManifest[\"skills\"] = [];\n\n for (const file of files) {\n if (!file.endsWith(\".md\")) {\n warn(`Skipping skills/${file}: skill files must have a .md extension.`);\n continue;\n }\n\n const basename = file.replace(/\\.md$/, \"\");\n if (!isValidSkillName(basename)) {\n warn(\n `Skipping skills/${file}: name must match [a-zA-Z0-9-] (letters, digits, hyphens only).`,\n );\n continue;\n }\n\n const filePath = path.join(skillsDir, file);\n const stat = fs.statSync(filePath);\n if (stat.size > MAX_SKILL_SIZE) {\n warn(`Skipping skills/${file}: exceeds ${MAX_SKILL_SIZE} byte limit.`);\n continue;\n }\n\n const content = fs.readFileSync(filePath, \"utf-8\");\n skills.push({ name: file, path: `skills/${file}`, content });\n }\n\n return skills;\n};\n\n// ─── Connector Discovery ───\n\nconst discoverConnectors = (projectRoot: string): ProjectManifest[\"connectors\"] => {\n const distConnectorsDir = path.join(projectRoot, \"dist\", \"connectors\");\n const useDistConnectors =\n fs.existsSync(distConnectorsDir) && fs.statSync(distConnectorsDir).isDirectory();\n const connectorsDir = useDistConnectors\n ? distConnectorsDir\n : path.join(projectRoot, \"connectors\");\n const connectorsDirPrefix = useDistConnectors ? \"dist/connectors\" : \"connectors\";\n\n if (!fs.existsSync(connectorsDir) || !fs.statSync(connectorsDir).isDirectory()) {\n return [];\n }\n\n const entries = fs.readdirSync(connectorsDir, { withFileTypes: true });\n const connectors: ProjectManifest[\"connectors\"] = [];\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n\n const name = entry.name;\n if (!isValidEntityName(name)) {\n warn(\n `Skipping ${connectorsDirPrefix}/${name}: name must match [a-z0-9-] (lowercase, digits, hyphens only).`,\n );\n continue;\n }\n\n const connDir = path.join(connectorsDir, name);\n const hasPackageJson = fs.existsSync(path.join(connDir, \"package.json\"));\n const hasDockerfile = fs.existsSync(path.join(connDir, \"Dockerfile\"));\n const hasIndexJs = fs.existsSync(path.join(connDir, \"index.js\"));\n const hasIndexMjs = fs.existsSync(path.join(connDir, \"index.mjs\"));\n const hasIndexTs = fs.existsSync(path.join(connDir, \"index.ts\"));\n\n if (!hasPackageJson && !hasDockerfile && !hasIndexJs && !hasIndexMjs && !hasIndexTs) {\n continue;\n }\n\n connectors.push({ name, path: `${connectorsDirPrefix}/${name}/` });\n }\n\n return connectors.sort((a, b) => a.name.localeCompare(b.name));\n};\n\n// ─── Full Project Discovery ───\n\nexport const discoverProject = async (projectRoot: string): Promise<ProjectManifest> => {\n const discovered = await discoverAgents(projectRoot);\n\n const agents: ProjectManifest[\"agents\"] = [];\n for (const { config, entryPoint } of discovered) {\n const name = config.agent.name;\n if (!isValidEntityName(name)) {\n throw new Error(`Invalid agent name: \"${name}\". Names must match ${ENTITY_NAME_REGEX}`);\n }\n agents.push({ name, entryPoint, config });\n }\n\n const skills = discoverSkills(projectRoot);\n const connectors = discoverConnectors(projectRoot);\n\n return { agents, skills, connectors };\n};\n\n// ─── Manifest Output ───\n\n/** Output manifest between sentinel markers for orchestrator parsing. */\nexport const emitManifest = (manifest: ProjectManifest): void => {\n process.stdout.write(`${MANIFEST_START}\\n`);\n process.stdout.write(JSON.stringify(manifest));\n process.stdout.write(`\\n${MANIFEST_END}\\n`);\n};\n\n/** Parse manifest from stdout that may contain noise before/after sentinel markers. */\nexport const parseManifestFromOutput = (stdout: string): ProjectManifest => {\n const startIdx = stdout.indexOf(MANIFEST_START);\n const endIdx = stdout.indexOf(MANIFEST_END);\n\n if (startIdx === -1 || endIdx === -1 || endIdx <= startIdx) {\n throw new Error(\"Discovery produced no output: sentinel markers not found\");\n }\n\n const jsonStr = stdout.slice(startIdx + MANIFEST_START.length, endIdx).trim();\n\n let raw: unknown;\n try {\n raw = JSON.parse(jsonStr);\n } catch {\n throw new Error(`Discovery produced invalid JSON: ${jsonStr.slice(0, 200)}`);\n }\n\n const result = projectManifestSchema.safeParse(raw);\n if (!result.success) {\n throw new Error(`Discovery produced invalid manifest: ${result.error.message}`);\n }\n\n return result.data;\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport * as z from \"zod\";\n\n/** Action names follow entity naming convention: lowercase alphanumeric with hyphens, 1-64 chars. */\nexport const ACTION_NAME_REGEX = /^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$/;\n\n/** Validates an action name (allows single-char names like \"a\"). */\nexport const isValidActionName = (name: string): boolean =>\n name.length === 1 ? /^[a-z0-9]$/.test(name) : ACTION_NAME_REGEX.test(name);\n\n/** Input for a single action variant in defineActions(). */\nexport interface ActionVariantInput<\n S extends z.ZodObject<z.ZodRawShape> = z.ZodObject<z.ZodRawShape>,\n> {\n schema: S;\n webhook?: string;\n // Method syntax → bivariant parameter checking, so specific handler args\n // (e.g. { reason: string }) are assignable to the default (z.infer<ZodObject>).\n handler?(payload: z.infer<S>): Promise<void>;\n}\n\n/** Serializable config for a single action variant (stored in manifest/DB). */\nexport interface ActionVariantConfig {\n schema: Record<string, unknown>;\n webhook?: string;\n hasHandler: boolean;\n}\n\n/** Serializable portion of action definitions (stored in agent config). */\nexport interface PlatformActionsConfig {\n variants: Record<string, ActionVariantConfig>;\n}\n\n/** Full action definitions including in-memory schemas and handlers for runtime use. */\nexport interface PlatformActions {\n readonly __type: \"PlatformActions\";\n readonly config: PlatformActionsConfig;\n readonly zodSchemas: Record<string, z.ZodObject<z.ZodRawShape>>;\n readonly handlers: Readonly<Record<string, (payload: unknown) => Promise<void>>>;\n}\n\nexport const actionVariantConfigSchema = z.object({\n schema: z.record(z.string(), z.unknown()),\n webhook: z.string().url().optional(),\n hasHandler: z.boolean(),\n});\n\nexport const actionsConfigSchema = z\n .object({\n variants: z.record(z.string(), actionVariantConfigSchema),\n })\n .strict();\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport * as z from \"zod\";\n\nexport const environmentSchema = z.enum([\"dev\", \"staging\", \"prod\"]);\n\nexport type Environment = z.infer<typeof environmentSchema>;\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport * as z from \"zod\";\n\nexport const jitPolicySchema = z.enum([\"auto-approve\", \"policy-based\", \"require-approval\"]);\n\nexport type JitPolicy = z.infer<typeof jitPolicySchema>;\n\nexport const identityConfigSchema = z.object({\n basePermissions: z.array(z.string()),\n requestablePermissions: z.array(z.string()).optional(),\n jitPolicy: jitPolicySchema.optional(),\n maxJitDurationMinutes: z.number().int().positive().optional(),\n});\n\nexport type IdentityConfig = z.infer<typeof identityConfigSchema>;\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport * as z from \"zod\";\n\nexport const notificationConfigSchema = z.object({\n slack: z.string().optional(),\n onSuccess: z.boolean().optional(),\n onFailure: z.boolean().optional(),\n onTimeout: z.boolean().optional(),\n});\n\nexport type NotificationConfig = z.infer<typeof notificationConfigSchema>;\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport type { ModelString } from \"kraken-ai\";\nimport * as z from \"zod\";\nimport { actionsConfigSchema, type PlatformActionsConfig } from \"./action\";\nimport { environmentSchema } from \"./environment\";\nimport { identityConfigSchema } from \"./identity\";\nimport { notificationConfigSchema } from \"./notifications\";\nimport type { AgentId } from \"./registry\";\nimport { concurrencyPolicySchema, resourceLimitsSchema, retryPolicySchema } from \"./resources\";\nimport { teamConfigSchema } from \"./team\";\nimport { triggerConfigSchema } from \"./trigger\";\n\nconst thinkingLevelSchema = z.enum([\"low\", \"medium\", \"high\"]);\n\nconst logLevelSchema = z.enum([\"silent\", \"debug\", \"info\", \"warn\", \"error\"]);\n\nexport const agentDefinitionSchema = z\n .object({\n name: z.string().min(1),\n model: z.string().min(1),\n instructions: z.string().min(1),\n description: z.string().optional(),\n skills: z.array(z.string()).optional(),\n temperature: z.number().min(0).max(2).optional(),\n allowTemperatureOverride: z.boolean().optional(),\n maxOutputTokens: z.number().int().positive().optional(),\n thinkingLevel: thinkingLevelSchema.optional(),\n logLevel: logLevelSchema.optional(),\n })\n .strict();\n\nexport type AgentDefinition = Omit<z.infer<typeof agentDefinitionSchema>, \"model\"> & {\n model: ModelString;\n};\n\nexport const platformAgentConfigSchema = z\n .object({\n agent: agentDefinitionSchema,\n connectors: z.array(z.string()).optional(),\n triggers: z.array(triggerConfigSchema),\n identity: identityConfigSchema.optional(),\n resources: resourceLimitsSchema.optional(),\n retries: retryPolicySchema.optional(),\n concurrency: concurrencyPolicySchema.optional(),\n team: teamConfigSchema.optional(),\n notifications: notificationConfigSchema.optional(),\n environment: environmentSchema.optional(),\n actions: actionsConfigSchema.optional(),\n })\n .strict();\n\nexport type PlatformAgentConfig = Omit<\n z.infer<typeof platformAgentConfigSchema>,\n \"agent\" | \"actions\"\n> & {\n agent: AgentDefinition;\n actions?: PlatformActionsConfig;\n};\n\nexport interface PlatformAgent {\n readonly __type: \"PlatformAgent\";\n readonly config: PlatformAgentConfig;\n readonly runtime?: unknown;\n /** In-memory schemas for action variants. Not serialized — runtime use only. */\n readonly actionZodSchemas?: Record<string, import(\"zod\").ZodObject<import(\"zod\").ZodRawShape>>;\n /** Action handler functions. Not serialized — runtime use only. */\n readonly actionHandlers?: Readonly<Record<string, (payload: unknown) => Promise<void>>>;\n /** Team member PlatformAgent objects. Not serialized — runtime use only (dev mode delegation). */\n readonly teamAgents?: readonly PlatformAgent[];\n}\n\n/** Team member reference: local PlatformAgent or remote AgentId string. */\nexport type TeamMember = PlatformAgent | AgentId;\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport * as z from \"zod\";\n\nexport const resourceLimitsSchema = z.object({\n maxTokens: z.number().int().positive().optional(),\n maxCostUsd: z.number().positive().optional(),\n timeoutSeconds: z.number().int().positive().optional(),\n});\n\nexport type ResourceLimits = z.infer<typeof resourceLimitsSchema>;\n\nexport const retryPolicySchema = z.object({\n maxAttempts: z.number().int().min(1).optional(),\n backoffSeconds: z.number().positive().optional(),\n});\n\nexport type RetryPolicy = z.infer<typeof retryPolicySchema>;\n\nexport const concurrencyPolicySchema = z.object({\n maxParallelRuns: z.number().int().min(1).optional(),\n});\n\nexport type ConcurrencyPolicy = z.infer<typeof concurrencyPolicySchema>;\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport * as z from \"zod\";\n\nexport const teamConfigSchema = z.object({\n members: z.array(z.string()).min(1),\n maxConcurrentWorkers: z.number().int().min(1).optional(),\n maxTokenBudgetPerWorker: z.number().int().positive().optional(),\n maxDurationPerWorker: z.number().positive().optional(),\n});\n\nexport type TeamConfig = z.infer<typeof teamConfigSchema>;\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport * as z from \"zod\";\n\nconst cronTriggerSchema = z.object({\n type: z.literal(\"cron\"),\n expression: z.string(),\n timezone: z.string().optional(),\n});\n\nconst webhookTriggerSchema = z.object({\n type: z.literal(\"webhook\"),\n path: z.string().startsWith(\"/\"),\n method: z.enum([\"POST\", \"GET\"]).optional(),\n});\n\nconst eventTriggerSchema = z.object({\n type: z.literal(\"event\"),\n source: z.string(),\n event: z.string(),\n});\n\nconst apiTriggerSchema = z.object({ type: z.literal(\"api\") });\n\nconst manualTriggerSchema = z.object({ type: z.literal(\"manual\") });\n\nexport const triggerConfigSchema = z.discriminatedUnion(\"type\", [\n cronTriggerSchema,\n webhookTriggerSchema,\n eventTriggerSchema,\n apiTriggerSchema,\n manualTriggerSchema,\n]);\n\nexport type TriggerConfig = z.infer<typeof triggerConfigSchema>;\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport * as z from \"zod\";\n\nexport const platformSkillInputSchema = z\n .object({\n name: z.string().min(1),\n description: z.string().optional(),\n })\n .strict();\n\nexport interface PlatformSkill {\n readonly __type: \"PlatformSkill\";\n readonly name: string;\n readonly description?: string;\n}\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport { cyan, dim } from \"./log\";\n\n/** Interactive arrow-key picker. Returns the selected item or null if cancelled. */\nexport const pick = async (label: string, items: string[]): Promise<string | null> => {\n if (items.length === 0) return null;\n if (items.length === 1) return items[0] ?? null;\n\n const { stdin, stdout } = process;\n if (!stdin.isTTY) return null;\n\n let cursor = 0;\n\n const render = (): void => {\n // Move up to overwrite previous render (skip on first draw)\n stdout.write(` ${dim(label)}\\n`);\n for (let i = 0; i < items.length; i++) {\n const marker = i === cursor ? cyan(\"❯\") : \" \";\n const item = items[i] ?? \"\";\n const text = i === cursor ? cyan(item) : dim(item);\n stdout.write(` ${marker} ${text}\\n`);\n }\n };\n\n const clear = (): void => {\n // Move cursor up (label + items) and clear each line\n const lines = items.length + 1;\n for (let i = 0; i < lines; i++) {\n stdout.write(\"\\x1b[1A\\x1b[2K\");\n }\n };\n\n stdin.setRawMode(true);\n stdin.resume();\n\n render();\n\n return new Promise<string | null>((resolve) => {\n const onData = (data: Buffer): void => {\n const key = data.toString();\n\n if (key === \"\\x1b[A\" || key === \"k\") {\n // Up arrow or k\n clear();\n cursor = (cursor - 1 + items.length) % items.length;\n render();\n } else if (key === \"\\x1b[B\" || key === \"j\") {\n // Down arrow or j\n clear();\n cursor = (cursor + 1) % items.length;\n render();\n } else if (key === \"\\r\" || key === \"\\n\") {\n // Enter\n cleanup();\n clear();\n resolve(items[cursor] ?? null);\n } else if (key === \"\\x03\" || key === \"\\x1b\" || key === \"q\") {\n // Ctrl+C, Escape, or q\n cleanup();\n clear();\n resolve(null);\n }\n };\n\n const cleanup = (): void => {\n stdin.removeListener(\"data\", onData);\n stdin.setRawMode(false);\n stdin.pause();\n };\n\n stdin.on(\"data\", onData);\n });\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\n// --- Client Config ---\n\nexport interface PlatformClientConfig {\n baseUrl: string;\n apiKey: string;\n}\n\n// --- Pagination ---\n\nexport interface PaginationParams {\n cursor?: string;\n limit?: number;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n cursor: string | null;\n hasMore: boolean;\n}\n\n// --- SSE Events ---\n\nexport type AgentEvent =\n | { type: \"text\"; content: string }\n | { type: \"tool_call\"; name: string; args: Record<string, unknown> }\n | { type: \"tool_result\"; name: string; result: unknown }\n | { type: \"thinking\"; content: string }\n | { type: \"action\"; name: string; payload: Record<string, unknown>; actionExecutionId: string }\n | { type: \"done\"; output: string; usage?: { tokens: number } }\n | { type: \"error\"; message: string; code: string };\n\n// --- Agents ---\n\nexport interface AgentInfo {\n id: string;\n name: string;\n description?: string;\n}\n\nexport interface ThreadInfo {\n id: string;\n agentId: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ThreadMessage {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n content: string;\n toolCalls?: Array<{\n name: string;\n args: Record<string, unknown>;\n result: unknown;\n }>;\n createdAt: string;\n usage?: { tokens: number };\n}\n\n// --- Data Queries ---\n\nexport interface QueryInfo {\n name: string;\n description?: string;\n params: Record<string, unknown>;\n columns: QueryColumn[];\n}\n\nexport interface QueryColumn {\n name: string;\n type: string;\n description?: string;\n}\n\nexport interface QueryResult<TRow = Record<string, unknown>> {\n rows: TRow[];\n cursor: string | null;\n hasMore: boolean;\n}\n\n// --- Runs ---\n\n/*\n * Run state machine states:\n *\n * QUEUED — Job received, waiting for worker capacity\n * PROVISIONING — Creating Docker networks, starting gateway + sidecars + runtime\n * RUNNING — Runtime container executing the agent\n * DRAINING — Runtime exited, flushing remaining Redis events to PostgreSQL\n * COMPLETED — Run finished (exit 0), all events persisted, resources torn down\n * FAILED — Run failed (exit 1, crash, provisioning error, or retry exhausted)\n * AWAITING_APPROVAL — (Future) Human-in-the-loop — run paused pending approval\n * RETRYING — (Future) Run-level retry — re-queuing after failure\n *\n * Transitions:\n * QUEUED → PROVISIONING → RUNNING → DRAINING → COMPLETED\n * │ │ │\n * └───→ FAILED ←─┘─────────────────────┘\n *\n * Future transitions:\n * RUNNING → AWAITING_APPROVAL → RUNNING\n * FAILED → RETRYING → QUEUED\n */\nexport type RunState =\n | \"QUEUED\"\n | \"PROVISIONING\"\n | \"RUNNING\"\n | \"DRAINING\"\n | \"COMPLETED\"\n | \"FAILED\"\n | \"AWAITING_APPROVAL\"\n | \"RETRYING\";\n\nexport interface RunRecord {\n runId: string;\n agentId: string;\n input: string;\n state: RunState;\n exitCode?: number;\n createdAt: string;\n updatedAt: string;\n retryCount: number;\n error?: string;\n}\n\nexport interface StartRunParams {\n agentId: string;\n tag?: string;\n environment?: \"dev\" | \"staging\" | \"prod\";\n input: string;\n connectors?: string[];\n envVars?: Record<string, string>;\n}\n\nexport interface RunEvent {\n eventId: string;\n eventType: string;\n payload: Record<string, unknown>;\n}\n\n// --- Schema (for CLI codegen) ---\n\nexport interface AgentSchema {\n id: string;\n name: string;\n input: Record<string, unknown>;\n output: Record<string, unknown>;\n actions?: Record<string, Record<string, unknown>>;\n}\n\nexport interface QuerySchema {\n name: string;\n params: Record<string, unknown>;\n columns: QueryColumn[];\n}\n\nexport interface ConnectorSchema {\n id: string;\n tools: Array<{\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n }>;\n}\n\nexport interface SkillSchema {\n id: string;\n name: string;\n description?: string;\n}\n\n// --- Pipeline Schemas (for CLI codegen) ---\n\nexport interface PipelineQuerySchema {\n name: string;\n description: string;\n params: Record<string, unknown>;\n returns: Record<string, unknown>;\n}\n\nexport interface PipelineSchema {\n pipeline: string;\n queries: PipelineQuerySchema[];\n}\n\n// --- Zod runtime validation schemas for remote API responses ---\n// Used by fetchRemoteSchemas() to replace unsafe `as` casts.\n// .passthrough() tolerates extra fields from API version changes.\n\nimport * as z from \"zod\";\n\nconst jsonSchemaValue = z.record(z.string(), z.unknown());\n\nexport const agentSchemaValidator = z\n .object({\n id: z.string(),\n name: z.string(),\n input: jsonSchemaValue,\n output: jsonSchemaValue,\n actions: z.record(z.string(), jsonSchemaValue).optional(),\n })\n .passthrough();\n\nconst queryColumnValidator = z\n .object({\n name: z.string(),\n type: z.string(),\n description: z.string().optional(),\n })\n .passthrough();\n\nexport const querySchemaValidator = z\n .object({\n name: z.string(),\n params: jsonSchemaValue,\n columns: z.array(queryColumnValidator),\n })\n .passthrough();\n\nconst connectorToolValidator = z\n .object({\n name: z.string(),\n description: z.string(),\n parameters: jsonSchemaValue,\n })\n .passthrough();\n\nexport const connectorSchemaValidator = z\n .object({\n id: z.string(),\n tools: z.array(connectorToolValidator),\n })\n .passthrough();\n\nexport const skillSchemaValidator = z\n .object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional(),\n })\n .passthrough();\n\nconst pipelineQuerySchemaValidator = z\n .object({\n name: z.string(),\n description: z.string(),\n params: jsonSchemaValue,\n returns: jsonSchemaValue,\n })\n .passthrough();\n\nexport const pipelineSchemaValidator = z\n .object({\n pipeline: z.string(),\n queries: z.array(pipelineQuerySchemaValidator),\n })\n .passthrough();\n"],"mappings":"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","names":["z","fs","path","fs","path","z","z","z","z","z","z","z","z","z","path","fs","z","pathToFileURL","resolve","code"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/internal/secret-string.ts","../src/cli/api-keys.ts","../src/cli/codegen.ts","../../../../private-packages/platform-core/src/qualified-name.ts","../../../../private-packages/platform-core/src/types/environment.ts","../../../../private-packages/platform-core/src/types/identity.ts","../../../../private-packages/platform-core/src/types/notifications.ts","../../../../private-packages/platform-core/src/types/platform-agent.ts","../../../../private-packages/platform-core/src/validate.ts","../../../../private-packages/platform-core/src/types/resources.ts","../../../../private-packages/platform-core/src/types/team.ts","../../../../private-packages/platform-core/src/types/trigger.ts","../../../../private-packages/platform-core/src/types/skill.ts","../src/cli/validate.ts","../src/cli/credentials.ts","../src/cli/discover.ts","../src/cli/log.ts","../src/cli/pick.ts","../src/platform/types.ts"],"sourcesContent":["// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport * as z from \"zod\";\nimport { handleApiKeys } from \"./cli/api-keys\";\nimport type { SchemaBundle } from \"./cli/codegen\";\nimport { generateTypes } from \"./cli/codegen\";\nimport { clearCredentials, loadCredentials, saveCredentials } from \"./cli/credentials\";\nimport { discoverProject, emitManifest, type ProjectManifest } from \"./cli/discover\";\nimport { bold, dim, warn } from \"./cli/log\";\nimport { pick } from \"./cli/pick\";\nimport { SecretString, unwrapSecret } from \"./internal/secret-string\";\nimport {\n type ActionSchema,\n type AgentSchema,\n actionSchemaValidator,\n agentSchemaValidator,\n type ConnectorSchema,\n connectorSchemaValidator,\n pipelineSchemaValidator,\n querySchemaValidator,\n type SkillSchema,\n skillSchemaValidator,\n} from \"./platform/types\";\n\n// --- Arg parsing ---\n\nconst COMMANDS = new Set([\"login\", \"generate\", \"logout\", \"discover\", \"dev\", \"api-keys\"]);\n\nexport interface ParsedArgs {\n command: string;\n positional: string[];\n flags: Record<string, string>;\n}\n\nexport const parseArgs = (args: string[]): ParsedArgs => {\n const command = args[0];\n if (!command || command === \"--help\" || !COMMANDS.has(command)) {\n return { command: \"help\", positional: [], flags: {} };\n }\n\n const BOOLEAN_FLAGS = new Set([\"check\", \"emit\"]);\n const positional: string[] = [];\n const flags: Record<string, string> = {};\n for (let i = 1; i < args.length; i++) {\n const arg = args[i];\n if (arg?.startsWith(\"--\")) {\n const name = arg.slice(2);\n if (BOOLEAN_FLAGS.has(name)) {\n flags[name] = \"\";\n } else {\n const next = args[++i];\n if (next !== undefined) {\n flags[name] = next;\n }\n }\n } else if (arg) {\n positional.push(arg);\n }\n }\n\n return { command, positional, flags };\n};\n\n// --- Command runner (dependency-injected for testability) ---\n\nexport interface CliDeps {\n clearCredentials: typeof clearCredentials;\n loadCredentials: typeof loadCredentials;\n saveCredentials: typeof saveCredentials;\n generateTypes: typeof generateTypes;\n discoverProject: (dir: string) => Promise<ProjectManifest>;\n fetch: typeof globalThis.fetch;\n prompt: (question: string) => Promise<string>;\n log: (message: string) => void;\n openUrl: (url: string) => Promise<void>;\n}\n\nexport const runCommand = async (parsed: ParsedArgs, deps: CliDeps): Promise<number> => {\n switch (parsed.command) {\n case \"login\":\n return handleLogin(parsed, deps);\n case \"generate\":\n return handleGenerate(parsed, deps);\n case \"dev\":\n return handleDev(parsed, deps);\n case \"api-keys\":\n return handleApiKeys(parsed, deps);\n case \"discover\":\n return handleDiscover(parsed, deps);\n case \"logout\":\n handleLogout(deps);\n return 0;\n case \"help\":\n printHelp(deps);\n return 0;\n default:\n return 0;\n }\n};\n\nconst DEVICE_CODE_GRANT_TYPE = \"urn:ietf:params:oauth:grant-type:device_code\";\nconst LOGIN_TIMEOUT_MS = 16 * 60 * 1000; // 16 minutes\nconst MAX_TRANSIENT_FAILURES = 3;\n\ninterface DeviceCodeResponse {\n deviceCode: string;\n userCode: string;\n verificationUri: string;\n expiresIn: number;\n interval: number;\n}\n\ninterface TokenResponse {\n error?: string;\n accessToken?: string;\n user?: { email: string; name: string };\n}\n\nconst handleLogin = async (parsed: ParsedArgs, deps: CliDeps): Promise<number> => {\n const baseUrl = parsed.flags.url ?? (await deps.prompt(\"Platform URL: \"));\n\n if (!baseUrl || !/^https?:\\/\\//.test(baseUrl)) {\n deps.log(\"Error: a valid HTTP(S) URL is required.\");\n return 1;\n }\n\n // Step 1: Request device code\n let deviceCodeRes: DeviceCodeResponse;\n try {\n const res = await deps.fetch(`${baseUrl}/api/cli/device-code`, { method: \"POST\" });\n if (!res.ok) {\n deps.log(`Error: device code request failed (HTTP ${String(res.status)})`);\n return 1;\n }\n deviceCodeRes = (await res.json()) as DeviceCodeResponse;\n } catch (err) {\n deps.log(\n `Error: could not reach ${baseUrl} — ${err instanceof Error ? err.message : String(err)}`,\n );\n return 1;\n }\n\n const { deviceCode, verificationUri, userCode } = deviceCodeRes;\n if (!deviceCode || !verificationUri || !userCode || deviceCodeRes.interval == null) {\n deps.log(\"Error: invalid device code response from server.\");\n return 1;\n }\n\n // Step 2: Show code and open browser\n deps.log(`\\n Your device code: ${bold(userCode)}\\n`);\n deps.log(` Opening ${verificationUri}`);\n deps.log(` ${dim(\"If the browser doesn't open, visit the URL manually.\")}\\n`);\n\n void deps.openUrl(verificationUri).catch(() => {});\n\n // Step 3: Poll for token\n let interval = deviceCodeRes.interval;\n const deadline = Date.now() + LOGIN_TIMEOUT_MS;\n let transientFailures = 0;\n\n while (Date.now() < deadline) {\n await sleep(interval * 1000);\n\n let tokenRes: TokenResponse;\n try {\n const res = await deps.fetch(`${baseUrl}/api/cli/token`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ deviceCode, grant_type: DEVICE_CODE_GRANT_TYPE }),\n });\n\n if (res.status >= 500) {\n transientFailures++;\n if (transientFailures >= MAX_TRANSIENT_FAILURES) {\n deps.log(\"Error: server returned repeated errors. Please try again later.\");\n return 1;\n }\n continue;\n }\n\n const contentType = res.headers.get(\"content-type\") ?? \"\";\n if (!contentType.includes(\"json\")) {\n transientFailures++;\n if (transientFailures >= MAX_TRANSIENT_FAILURES) {\n deps.log(\"Error: server returned unexpected response format.\");\n return 1;\n }\n continue;\n }\n\n tokenRes = (await res.json()) as TokenResponse;\n transientFailures = 0;\n } catch {\n transientFailures++;\n if (transientFailures >= MAX_TRANSIENT_FAILURES) {\n deps.log(\"Error: could not reach server. Please check your network and try again.\");\n return 1;\n }\n continue;\n }\n\n if (tokenRes.error === \"authorization_pending\") {\n continue;\n }\n\n if (tokenRes.error === \"slow_down\") {\n interval += 5;\n continue;\n }\n\n if (tokenRes.error === \"access_denied\") {\n deps.log(\"Authorization denied.\");\n return 1;\n }\n\n if (tokenRes.error === \"expired_token\") {\n deps.log(\"Device code expired. Please run `kraken login` again.\");\n return 1;\n }\n\n if (tokenRes.accessToken) {\n deps.saveCredentials({ apiKey: tokenRes.accessToken, baseUrl });\n const who = tokenRes.user?.email ? ` as ${tokenRes.user.email}` : \"\";\n deps.log(`Logged in${who}. Credentials saved.`);\n return 0;\n }\n\n // Unknown error\n deps.log(`Error: ${tokenRes.error ?? \"unknown error\"}`);\n return 1;\n }\n\n deps.log(\"Error: login timed out. Please try again.\");\n return 1;\n};\n\nconst sleep = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms));\n\n// --- Remote schema fetching ---\n\nconst emptySchemaBundle: SchemaBundle = {\n agents: [],\n queries: [],\n connectors: [],\n pipelines: [],\n skills: [],\n actions: [],\n};\n\ninterface RemoteFetchResult {\n bundle: SchemaBundle;\n reachable: boolean;\n}\n\nconst fetchRemoteSchemas = async (\n creds: { apiKey: string; baseUrl: string },\n deps: Pick<CliDeps, \"fetch\">,\n): Promise<RemoteFetchResult> => {\n const apiKey = new SecretString(creds.apiKey);\n const headers = { Authorization: `Bearer ${unwrapSecret(apiKey)}` };\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n\n try {\n const endpoints = [\n \"agents\",\n \"queries\",\n \"connectors\",\n \"pipelines\",\n \"skills\",\n \"actions\",\n ] as const;\n const responses = await Promise.all(\n endpoints.map((ep) =>\n deps\n .fetch(`${creds.baseUrl}/api/v1/schema/${ep}`, { headers, signal: controller.signal })\n .then(async (res) => {\n if (!res.ok) return res;\n // Pre-parse JSON so we can validate synchronously\n const data: unknown = await res.json();\n (res as Response & { _jsonData: unknown })._jsonData = data;\n return res;\n })\n .catch(() => null),\n ),\n );\n\n const [agentsRes, queriesRes, connectorsRes, pipelinesRes, skillsRes, actionsRes] = responses;\n\n const allFailed = responses.every((r) => !r?.ok);\n if (allFailed) {\n warn(`Could not reach platform at ${creds.baseUrl}. Generating from local definitions only.`);\n return { bundle: emptySchemaBundle, reachable: false };\n }\n\n // Shape validation — hard error (exit 1) on structural failures.\n // Network failures are soft (return empty array).\n const agents = parseEndpointData(agentsRes, z.array(agentSchemaValidator), \"agents\");\n const queries = parseEndpointData(queriesRes, z.array(querySchemaValidator), \"queries\");\n const connectors = parseEndpointData(\n connectorsRes,\n z.array(connectorSchemaValidator),\n \"connectors\",\n );\n const pipelines = parseEndpointData(\n pipelinesRes,\n z.array(pipelineSchemaValidator),\n \"pipelines\",\n );\n const skills = parseEndpointData(skillsRes, z.array(skillSchemaValidator), \"skills\");\n const actions = parseEndpointData(actionsRes, z.array(actionSchemaValidator), \"actions\");\n\n return { bundle: { agents, queries, connectors, pipelines, skills, actions }, reachable: true };\n } finally {\n clearTimeout(timeout);\n }\n};\n\n/**\n * Validate endpoint data with Zod. Network failures (null/!ok) return empty array.\n * Shape validation failures throw — matches fail-fast rationale.\n */\nconst parseEndpointData = <T>(\n res: Response | null | undefined,\n validator: z.ZodType<T[]>,\n endpointName: string,\n): T[] => {\n if (!res?.ok) return [];\n const data = (res as Response & { _jsonData: unknown })._jsonData;\n const result = validator.safeParse(data);\n if (!result.success) {\n throw new Error(\n `Invalid remote schema from ${endpointName} endpoint: ${z.prettifyError(result.error)}`,\n );\n }\n return result.data;\n};\n\n// --- Git remote helpers ---\n\nconst execFileAsync = promisify(execFile);\n\n/** Extract `owner/repo` from a git remote URL (SSH or HTTPS). */\nconst parseGitRemoteFullName = (url: string): string | null => {\n // git@github.com:owner/repo.git or https://github.com/owner/repo.git\n const match = url.match(/[:/]([^/:]+\\/[^/.]+?)(?:\\.git)?\\s*$/);\n return match?.[1] ?? null;\n};\n\n/** Read the git remote origin URL and extract `owner/repo`. */\nconst getGitRemoteFullName = async (cwd: string): Promise<string | null> => {\n try {\n const { stdout } = await execFileAsync(\"git\", [\"remote\", \"get-url\", \"origin\"], { cwd });\n return parseGitRemoteFullName(stdout.trim());\n } catch {\n return null;\n }\n};\n\n/** Ask the orchestrator for the repo name that matches a `owner/repo` full name. */\nconst resolveRepoName = async (\n fullName: string,\n creds: { apiKey: string; baseUrl: string },\n deps: Pick<CliDeps, \"fetch\">,\n): Promise<string | null> => {\n const apiKey = new SecretString(creds.apiKey);\n try {\n const res = await deps.fetch(\n `${creds.baseUrl}/api/v1/schema/repo-name?fullName=${encodeURIComponent(fullName)}`,\n { headers: { Authorization: `Bearer ${unwrapSecret(apiKey)}` } },\n );\n if (!res.ok) return null;\n const data = (await res.json()) as { name: string };\n return data.name;\n } catch {\n return null;\n }\n};\n\n// --- Merge local + remote ---\n\n// Local entities use bare names (no repo prefix) — the developer references them\n// via direct TS import or bare string (\"researcher\", \"research-guidelines.md\").\n// Remote entities from other repos keep their qualified names (\"other-repo/analyst\").\n// When repoName is known, remote IDs prefixed with it are the same repo's copy of\n// a local entity — those are filtered out. Remote entities from OTHER repos with the\n// same bare name are kept (they have distinct qualified IDs).\nconst mergeLocalAndRemote = (\n local: ProjectManifest,\n remote: SchemaBundle,\n repoName: string | null,\n): SchemaBundle => {\n const localAgentNames = new Set(local.agents.map((a) => a.name));\n const localConnectorNames = new Set(local.connectors.map((c) => c.name));\n const localSkillNames = new Set(local.skills.map((s) => s.name));\n const localActionNames = new Set(local.actions.map((a) => a.name));\n\n const localAgents: AgentSchema[] = local.agents.map((a) => ({\n id: a.name,\n name: a.name,\n input: {},\n output: {},\n config: a.config,\n }));\n const localSkills: SkillSchema[] = local.skills.map((s) => ({\n id: s.name,\n name: s.name,\n }));\n const localConnectors: ConnectorSchema[] = local.connectors.map((c) => ({\n id: c.name,\n tools: [],\n }));\n const localActions: ActionSchema[] = local.actions.map((a) => ({\n id: a.name,\n name: a.name,\n schema: a.config.schema,\n hasHandler: a.config.hasHandler,\n }));\n\n // A remote entity is a duplicate of a local one only if it's from the SAME repo.\n // Remote entities from other repos with the same bare name are kept with their\n // qualified IDs (e.g. \"other-repo/reviewer\" alongside local \"reviewer\").\n const isSameRepoLocal = (remoteId: string, localNames: Set<string>): boolean => {\n const slashIdx = remoteId.indexOf(\"/\");\n if (slashIdx === -1) return localNames.has(remoteId);\n const remoteRepo = remoteId.slice(0, slashIdx);\n const bareName = remoteId.slice(slashIdx + 1);\n if (!localNames.has(bareName)) return false;\n // Only filter out if this is our own repo's copy\n return repoName !== null && remoteRepo === repoName;\n };\n\n const remoteOnlyAgents = remote.agents.filter((a) => !isSameRepoLocal(a.id, localAgentNames));\n const remoteOnlyConnectors = remote.connectors.filter(\n (c) => !isSameRepoLocal(c.id, localConnectorNames),\n );\n const remoteOnlySkills = remote.skills.filter((s) => !isSameRepoLocal(s.id, localSkillNames));\n const remoteOnlyActions = remote.actions.filter((a) => !isSameRepoLocal(a.id, localActionNames));\n\n return {\n agents: [...localAgents, ...remoteOnlyAgents],\n queries: remote.queries,\n connectors: [...localConnectors, ...remoteOnlyConnectors],\n pipelines: remote.pipelines,\n skills: [...localSkills, ...remoteOnlySkills],\n actions: [...localActions, ...remoteOnlyActions],\n };\n};\n\n// --- Generate command ---\n\nconst handleGenerate = async (parsed: ParsedArgs, deps: CliDeps): Promise<number> => {\n const outDir = parsed.flags.dir ?? process.cwd();\n\n // 1. Local discovery (always runs)\n let manifest: ProjectManifest;\n try {\n manifest = await deps.discoverProject(outDir);\n } catch (err) {\n deps.log(`Error discovering project: ${err instanceof Error ? err.message : String(err)}`);\n return 1;\n }\n\n // 2. Remote schemas (optional — only when authenticated)\n const creds = deps.loadCredentials();\n let remote: SchemaBundle;\n let remoteReachable = false;\n let repoName: string | null = null;\n if (creds?.apiKey && creds?.baseUrl) {\n try {\n const result = await fetchRemoteSchemas(creds, deps);\n remote = result.bundle;\n remoteReachable = result.reachable;\n } catch (err) {\n deps.log(\n `Error fetching remote schemas: ${err instanceof Error ? err.message : String(err)}`,\n );\n return 1;\n }\n\n // Resolve local repo name from git remote → orchestrator lookup\n const fullName = await getGitRemoteFullName(outDir);\n if (fullName) {\n repoName = await resolveRepoName(fullName, creds, deps);\n }\n } else {\n warn(\n \"Not logged in. Generating from local definitions only. Run `kraken login` to sync with the platform.\",\n );\n remote = emptySchemaBundle;\n }\n\n // 3. Merge — local entities qualified with repo name, remote IDs are already qualified\n const bundle = mergeLocalAndRemote(manifest, remote, repoName);\n\n // 4. Generate or check\n if (\"check\" in parsed.flags) {\n const { mkdtempSync, readFileSync, rmSync } = await import(\"node:fs\");\n const { join } = await import(\"node:path\");\n const { tmpdir } = await import(\"node:os\");\n\n const tempDir = mkdtempSync(join(tmpdir(), \"kraken-check-\"));\n try {\n deps.generateTypes(bundle, tempDir);\n } catch (err) {\n rmSync(tempDir, { recursive: true, force: true });\n deps.log(`Error generating types: ${err instanceof Error ? err.message : String(err)}`);\n return 1;\n }\n\n try {\n const files = [\n \"pipelines.json\",\n \"pipelines.d.ts\",\n \"agents.d.ts\",\n \"queries.d.ts\",\n \"connectors.d.ts\",\n \"actions.d.ts\",\n \"platform-types.d.ts\",\n \"index.d.ts\",\n \"manifest.json\",\n ];\n let stale = false;\n\n for (const file of files) {\n const existingPath = join(outDir, \".kraken-ai\", file);\n const generatedPath = join(tempDir, \".kraken-ai\", file);\n const existing = safeReadFile(readFileSync, existingPath);\n const generated = safeReadFile(readFileSync, generatedPath);\n if (existing !== generated) {\n deps.log(`Schema drift detected: .kraken-ai/${file}`);\n stale = true;\n }\n }\n\n if (stale) {\n deps.log(\"Run `kraken generate` to update generated types.\");\n return 1;\n }\n deps.log(\"Schemas are up to date.\");\n return 0;\n } finally {\n rmSync(tempDir, { recursive: true, force: true });\n }\n }\n\n try {\n deps.generateTypes(bundle, outDir);\n } catch (err) {\n deps.log(`Error generating types: ${err instanceof Error ? err.message : String(err)}`);\n return 1;\n }\n\n // 5. Summary — count remote-only entities (not overlapping with local)\n const localNames = {\n agents: new Set(manifest.agents.map((a) => a.name)),\n connectors: new Set(manifest.connectors.map((c) => c.name)),\n skills: new Set(manifest.skills.map((s) => s.name)),\n actions: new Set(manifest.actions.map((a) => a.name)),\n };\n const matchesLocalSummary = (remoteId: string, names: Set<string>): boolean => {\n const slashIdx = remoteId.indexOf(\"/\");\n if (slashIdx !== -1) {\n return names.has(remoteId.slice(slashIdx + 1));\n }\n return names.has(remoteId);\n };\n const remoteOnlyAgents = remote.agents.filter(\n (a) => !matchesLocalSummary(a.id, localNames.agents),\n );\n const remoteOnlyConnectors = remote.connectors.filter(\n (c) => !matchesLocalSummary(c.id, localNames.connectors),\n );\n const remoteOnlySkills = remote.skills.filter(\n (s) => !matchesLocalSummary(s.id, localNames.skills),\n );\n const remoteOnlyActions = remote.actions.filter(\n (a) => !matchesLocalSummary(a.id, localNames.actions),\n );\n\n const lines: string[] = [];\n lines.push(` ${dim(\"[kraken-ai]\")} ${bold(\"Generated types:\")}`);\n for (const a of manifest.agents) lines.push(` agent ${a.name}`);\n for (const a of remoteOnlyAgents) lines.push(` agent ${a.id} (remote)`);\n for (const c of manifest.connectors) lines.push(` connector ${c.name}`);\n for (const c of remoteOnlyConnectors) lines.push(` connector ${c.id} (remote)`);\n for (const s of manifest.skills) lines.push(` skill ${s.name}`);\n for (const s of remoteOnlySkills) lines.push(` skill ${s.id} (remote)`);\n for (const a of manifest.actions) lines.push(` action ${a.name}`);\n for (const a of remoteOnlyActions) lines.push(` action ${a.id} (remote)`);\n if (bundle.queries.length > 0) lines.push(` queries ${String(bundle.queries.length)}`);\n if (bundle.pipelines.length > 0) lines.push(` pipelines ${String(bundle.pipelines.length)}`);\n const hasRemote =\n remoteOnlyAgents.length +\n remoteOnlyConnectors.length +\n remoteOnlySkills.length +\n remoteOnlyActions.length >\n 0;\n if (!hasRemote && remoteReachable) {\n lines.push(\"\");\n lines.push(\" All platform entities are defined locally. No remote-only dependencies.\");\n }\n deps.log(lines.join(\"\\n\"));\n return 0;\n};\n\nconst safeReadFile = (\n readFileSync: typeof import(\"node:fs\").readFileSync,\n filePath: string,\n): string | null => {\n try {\n return readFileSync(filePath, \"utf-8\");\n } catch {\n return null;\n }\n};\n\n/** Build the bootstrap script that tsx -e evaluates. Wrapped in async IIFE because tsx -e is CJS. */\nexport const buildDevBootstrap = (fileUrl: string, file: string): string =>\n [\n `void (async () => {`,\n ` const mod = await import(\"${fileUrl}\");`,\n ` const a = mod.default;`,\n ` if (!a || a.__type !== \"PlatformAgent\") {`,\n ` console.error(\"Error: \" + ${JSON.stringify(file)} + \" must export a PlatformAgent as default.\");`,\n ` process.exit(1);`,\n ` }`,\n ` const { runDev } = await import(\"@kraken-ai/platform/server\");`,\n ` await runDev(a);`,\n `})();`,\n ].join(\"\\n\");\n\nconst discoverAgentFiles = async (): Promise<string[]> => {\n const { readdirSync, existsSync } = await import(\"node:fs\");\n const agentsDir = \"src/agents\";\n if (!existsSync(agentsDir)) return [];\n return readdirSync(agentsDir)\n .filter((f) => f.endsWith(\".ts\") || f.endsWith(\".js\") || f.endsWith(\".mjs\"))\n .sort();\n};\n\nconst handleDev = async (parsed: ParsedArgs, deps: CliDeps): Promise<number> => {\n let name = parsed.positional[0];\n\n if (!name) {\n const agents = await discoverAgentFiles();\n if (agents.length === 0) {\n deps.log(\n \"No agent files found in src/agents/. Create one or pass a name: kraken dev <agent>\",\n );\n return 1;\n }\n if (agents.length === 1) {\n name = agents[0];\n } else {\n const selected = await pick(\"Select an agent:\", agents);\n if (!selected) return 0;\n name = selected;\n }\n }\n\n if (!name) return 1;\n\n const file = name.includes(\"/\") ? name : `src/agents/${name}`;\n\n const { spawn } = await import(\"node:child_process\");\n const { resolve } = await import(\"node:path\");\n const { pathToFileURL } = await import(\"node:url\");\n\n const fileUrl = pathToFileURL(resolve(file)).href;\n const bootstrap = buildDevBootstrap(fileUrl, file);\n\n const child = spawn(\"tsx\", [\"-e\", bootstrap], {\n stdio: \"inherit\",\n cwd: process.cwd(),\n });\n\n return new Promise((resolve) => {\n child.on(\"exit\", (code) => resolve(code ?? 1));\n });\n};\n\nconst handleDiscover = async (parsed: ParsedArgs, deps: CliDeps): Promise<number> => {\n const dir = parsed.flags.dir ?? process.cwd();\n const manifest = await deps.discoverProject(dir);\n\n const total =\n manifest.agents.length +\n manifest.skills.length +\n manifest.connectors.length +\n manifest.actions.length;\n if (total === 0) {\n deps.log(\n \"No entities found in src/agents/, src/skills/, src/connectors/, or src/actions/ directories.\",\n );\n return 1;\n }\n\n if (\"emit\" in parsed.flags) {\n emitManifest(manifest);\n } else {\n deps.log(JSON.stringify(manifest, null, 2));\n }\n return 0;\n};\n\nconst handleLogout = (deps: CliDeps): void => {\n deps.clearCredentials();\n deps.log(\"Credentials cleared.\");\n};\n\nconst printHelp = (deps: CliDeps): void => {\n deps.log(\n `\nkraken — Kraken AI Platform CLI\n\nCommands:\n dev Run an agent locally with an interactive REPL\n [agent] Agent filename, e.g. researcher.ts (optional — picks from src/agents/ if omitted)\n\n login Authenticate via browser-based device authorization\n --url <platform-url> Platform instance URL\n\n api-keys Manage API keys for server-side SDK authentication\n create --name <name> [--expires 90d] Create a new API key\n list List all API keys\n revoke <id> Revoke an API key\n\n generate Discover local entities and fetch remote schemas to generate types\n --dir <path> Project root / output directory (default: cwd)\n --check Check if types are up-to-date (exit 1 if stale)\n\n logout Clear stored credentials\n\nEnvironment variables:\n KRAKEN_API_KEY API key (overrides stored credentials)\n KRAKEN_BASE_URL Platform URL (overrides stored credentials)\n`.trim(),\n );\n};\n\n// --- CLI entrypoint ---\n\nconst readlinePrompt = async (question: string): Promise<string> => {\n const { createInterface } = await import(\"node:readline\");\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n return new Promise((resolve) => {\n rl.question(question, (answer) => {\n rl.close();\n resolve(answer);\n });\n });\n};\n\nconst openUrlImpl = async (url: string): Promise<void> => {\n if (!/^https?:\\/\\//.test(url)) return;\n const { platform } = await import(\"node:os\");\n\n try {\n const p = platform();\n if (p === \"darwin\") {\n await execFileAsync(\"open\", [url]);\n } else if (p === \"win32\") {\n await execFileAsync(\"cmd\", [\"/c\", \"start\", \"\", url]);\n } else {\n await execFileAsync(\"xdg-open\", [url]);\n }\n } catch {\n // Fail silently — URL is already printed for manual use\n }\n};\n\nconst main = async () => {\n const parsed = parseArgs(process.argv.slice(2));\n const exitCode = await runCommand(parsed, {\n clearCredentials,\n loadCredentials,\n saveCredentials,\n generateTypes,\n discoverProject,\n fetch: globalThis.fetch,\n prompt: readlinePrompt,\n log: console.log,\n openUrl: openUrlImpl,\n });\n if (exitCode !== 0) process.exit(exitCode);\n};\n\nvoid main();\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport { inspect } from \"node:util\";\n\nexport class SecretString {\n readonly #value: string;\n\n constructor(value: string) {\n this.#value = value;\n }\n\n unmasked(): string {\n return this.#value;\n }\n\n toJSON(): string {\n return \"[REDACTED]\";\n }\n\n toString(): string {\n return \"[REDACTED]\";\n }\n\n [Symbol.toPrimitive](): string {\n return \"[REDACTED]\";\n }\n\n [inspect.custom](): string {\n return \"SecretString([REDACTED])\";\n }\n}\n\nexport const unwrapSecret = (value: SecretString | string): string =>\n value instanceof SecretString ? value.unmasked() : value;\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport type { CliDeps, ParsedArgs } from \"../cli\";\nimport { SecretString, unwrapSecret } from \"../internal/secret-string\";\n\nconst DURATION_RE = /^(\\d+)(h|d|y)$/;\n\nconst parseDuration = (input: string): Date | null => {\n const match = DURATION_RE.exec(input);\n if (!match) return null;\n const amount = Number(match[1]);\n const unit = match[2];\n const now = new Date();\n switch (unit) {\n case \"h\":\n return new Date(now.getTime() + amount * 3_600_000);\n case \"d\":\n return new Date(now.getTime() + amount * 86_400_000);\n case \"y\":\n return new Date(now.getTime() + amount * 365.25 * 86_400_000);\n default:\n return null;\n }\n};\n\nconst VALID_ENVIRONMENTS = new Set([\"dev\", \"staging\", \"prod\"]);\n\ninterface ApiKeyResponse {\n id: string;\n name: string;\n key: string;\n environment: string;\n expiresAt: string | null;\n createdAt: string;\n}\n\ninterface ApiKeyListItem {\n id: string;\n name: string;\n prefix: string;\n environment: string;\n createdAt: string;\n lastUsed: string | null;\n expiresAt: string | null;\n expired: boolean;\n}\n\nconst getAuthHeaders = (apiKey: string): Record<string, string> => {\n const secret = new SecretString(apiKey);\n return { Authorization: `Bearer ${unwrapSecret(secret)}`, \"Content-Type\": \"application/json\" };\n};\n\n/** Walk the cause chain to collect all error messages (undici nests causes deeply). */\nconst collectErrorMessages = (err: unknown): string => {\n const parts: string[] = [];\n let current: unknown = err;\n while (current instanceof Error) {\n if (current.message) parts.push(current.message);\n current = (current as Error & { cause?: unknown }).cause;\n }\n return parts.join(\": \");\n};\n\nconst formatNetworkError = (err: unknown, baseUrl: string): string => {\n const msg = collectErrorMessages(err);\n\n if (msg.includes(\"unknown scheme\")) {\n return `Invalid platform URL \"${baseUrl}\" — must start with https:// (or http:// for local dev).\\n Run \\`kraken login\\` to update your credentials.`;\n }\n if (msg.includes(\"ECONNREFUSED\")) {\n return `Could not connect to ${baseUrl} — is the platform running?\\n Check the URL or run \\`kraken login\\` to update it.`;\n }\n if (msg.includes(\"ENOTFOUND\")) {\n return `Could not resolve hostname for ${baseUrl} — check the URL.\\n Run \\`kraken login\\` to update your credentials.`;\n }\n if (msg.includes(\"abort\") || msg.includes(\"TIMEOUT\")) {\n return `Request to ${baseUrl} timed out.\\n Check your network connection or try again.`;\n }\n return `Could not reach ${baseUrl}. Check that the platform is running and the URL is correct.\\n Run \\`kraken login\\` to update your credentials.`;\n};\n\nconst normalizeBaseUrl = (baseUrl: string): string => {\n if (!/^https?:\\/\\//.test(baseUrl)) {\n return `https://${baseUrl}`;\n }\n return baseUrl;\n};\n\n/** Wrapper around fetch that normalizes the base URL scheme, catches network errors, and logs a friendly message. Returns null on failure. */\nconst fetchApi = async (\n deps: CliDeps,\n url: string,\n baseUrl: string,\n init?: RequestInit,\n): Promise<Response | null> => {\n const normalizedBase = normalizeBaseUrl(baseUrl);\n const normalizedUrl = baseUrl !== normalizedBase ? url.replace(baseUrl, normalizedBase) : url;\n try {\n return await deps.fetch(normalizedUrl, init);\n } catch (err) {\n deps.log(`Error: ${formatNetworkError(err, normalizedBase)}`);\n return null;\n }\n};\n\nconst handleCreate = async (parsed: ParsedArgs, deps: CliDeps): Promise<number> => {\n const creds = deps.loadCredentials();\n if (!creds?.apiKey || !creds?.baseUrl) {\n deps.log(\"Error: not logged in. Run `kraken login` first.\");\n return 1;\n }\n\n const name = parsed.flags.name;\n if (!name) {\n deps.log(\n \"Error: --name is required.\\n Usage: kraken api-keys create --name <name> [--env dev] [--expires 90d]\",\n );\n return 1;\n }\n\n const environment = parsed.flags.env ?? \"dev\";\n if (!VALID_ENVIRONMENTS.has(environment)) {\n deps.log(`Error: invalid environment \"${environment}\". Must be one of: dev, staging, prod.`);\n return 1;\n }\n\n let expiresAt: string | undefined;\n if (parsed.flags.expires) {\n const date = parseDuration(parsed.flags.expires);\n if (!date) {\n deps.log(\n `Error: invalid duration \"${parsed.flags.expires}\". Use format like 90d, 24h, or 1y.`,\n );\n return 1;\n }\n expiresAt = date.toISOString();\n }\n\n const res = await fetchApi(deps, `${creds.baseUrl}/api/v1/api-keys`, creds.baseUrl, {\n method: \"POST\",\n headers: getAuthHeaders(creds.apiKey),\n body: JSON.stringify({ name, environment, expiresAt }),\n });\n if (!res) return 1;\n\n if (!res.ok) {\n const body = (await res.json()) as { error?: string };\n deps.log(`Error: ${body.error ?? `request failed (${String(res.status)})`}`);\n return 1;\n }\n\n const data = (await res.json()) as ApiKeyResponse;\n deps.log(`\\n API Key created successfully.\\n`);\n deps.log(` Name: ${data.name}`);\n deps.log(` Env: ${data.environment}`);\n deps.log(` Key: ${data.key}`);\n if (data.expiresAt) {\n deps.log(` Expires: ${data.expiresAt}`);\n }\n deps.log(`\\n Copy this key now — it will not be shown again.\\n`);\n\n return 0;\n};\n\nconst handleList = async (parsed: ParsedArgs, deps: CliDeps): Promise<number> => {\n const creds = deps.loadCredentials();\n if (!creds?.apiKey || !creds?.baseUrl) {\n deps.log(\"Error: not logged in. Run `kraken login` first.\");\n return 1;\n }\n\n const envFilter = parsed.flags.env;\n const query = envFilter ? `?environment=${encodeURIComponent(envFilter)}` : \"\";\n const res = await fetchApi(deps, `${creds.baseUrl}/api/v1/api-keys${query}`, creds.baseUrl, {\n headers: getAuthHeaders(creds.apiKey),\n });\n if (!res) return 1;\n\n if (!res.ok) {\n const body = (await res.json()) as { error?: string };\n deps.log(`Error: ${body.error ?? `request failed (${String(res.status)})`}`);\n return 1;\n }\n\n const keys = (await res.json()) as ApiKeyListItem[];\n if (keys.length === 0) {\n deps.log(\"No API keys found. Create one with: kraken api-keys create --name <name>\");\n return 0;\n }\n\n deps.log(\"\\n API Keys:\\n\");\n deps.log(\n \" ID Name Env Key Created Last Used Expires\",\n );\n deps.log(` ${\"─\".repeat(150)}`);\n for (const k of keys) {\n const expired = k.expired ? \" (expired)\" : \"\";\n const lastUsed = k.lastUsed ? k.lastUsed.slice(0, 10) : \"never\";\n const expires = k.expiresAt ? `${k.expiresAt.slice(0, 10)}${expired}` : \"never\";\n deps.log(\n ` ${k.id} ${k.name.padEnd(16)}${k.environment.padEnd(10)}${k.prefix.padEnd(23)}${k.createdAt.slice(0, 10).padEnd(20)}${lastUsed.padEnd(20)}${expires}`,\n );\n }\n deps.log(\"\");\n\n return 0;\n};\n\nconst handleRevoke = async (parsed: ParsedArgs, deps: CliDeps): Promise<number> => {\n const creds = deps.loadCredentials();\n if (!creds?.apiKey || !creds?.baseUrl) {\n deps.log(\"Error: not logged in. Run `kraken login` first.\");\n return 1;\n }\n\n const id = parsed.positional[1];\n if (!id) {\n deps.log(\"Error: key ID is required.\\n Usage: kraken api-keys revoke <id>\");\n return 1;\n }\n\n const res = await fetchApi(\n deps,\n `${creds.baseUrl}/api/v1/api-keys/${encodeURIComponent(id)}`,\n creds.baseUrl,\n {\n method: \"DELETE\",\n headers: getAuthHeaders(creds.apiKey),\n },\n );\n if (!res) return 1;\n\n if (res.status === 404) {\n deps.log(\"Error: API key not found.\");\n return 1;\n }\n\n if (!res.ok) {\n const body = (await res.json()) as { error?: string };\n deps.log(`Error: ${body.error ?? `request failed (${String(res.status)})`}`);\n return 1;\n }\n\n deps.log(\"API key revoked successfully.\");\n return 0;\n};\n\nexport const handleApiKeys = async (parsed: ParsedArgs, deps: CliDeps): Promise<number> => {\n const subcommand = parsed.positional[0];\n\n switch (subcommand) {\n case \"create\":\n return handleCreate(parsed, deps);\n case \"list\":\n return handleList(parsed, deps);\n case \"revoke\":\n return handleRevoke(parsed, deps);\n default:\n deps.log(\n `kraken api-keys — Manage API keys\\n\\n` +\n `Commands:\\n` +\n ` create --name <name> [--env dev] [--expires 90d] Create a new API key\\n` +\n ` list [--env dev|staging|prod] List API keys\\n` +\n ` revoke <id> Revoke an API key\\n`,\n );\n return 0;\n }\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport type {\n ActionSchema,\n AgentSchema,\n ConnectorSchema,\n PipelineSchema,\n QueryColumn,\n QuerySchema,\n SkillSchema,\n} from \"../platform/types\";\nimport { validateSchemaBundle } from \"./validate\";\n\nexport interface SchemaBundle {\n agents: AgentSchema[];\n queries: QuerySchema[];\n connectors: ConnectorSchema[];\n pipelines: PipelineSchema[];\n skills: SkillSchema[];\n actions: ActionSchema[];\n}\n\nexport const generateTypes = (schemas: SchemaBundle, projectRoot: string): void => {\n // Validate ALL identifiers before any file writes (safety invariant #4)\n validateSchemaBundle(schemas);\n\n const outDir = path.join(projectRoot, \".kraken-ai\");\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n\n fs.writeFileSync(\n path.join(outDir, \"agents.d.ts\"),\n generateAgentsDts(schemas.agents, schemas.actions),\n );\n fs.writeFileSync(path.join(outDir, \"queries.d.ts\"), generateQueriesDts(schemas.queries));\n\n const connectorsDtsPath = path.join(outDir, \"connectors.d.ts\");\n if (schemas.connectors.length > 0) {\n fs.writeFileSync(connectorsDtsPath, generateConnectorsDts(schemas.connectors));\n } else if (fs.existsSync(connectorsDtsPath)) {\n fs.rmSync(connectorsDtsPath);\n }\n\n const actionsDtsPath = path.join(outDir, \"actions.d.ts\");\n if (schemas.actions.length > 0) {\n fs.writeFileSync(actionsDtsPath, generateActionsDts(schemas.actions));\n } else if (fs.existsSync(actionsDtsPath)) {\n fs.rmSync(actionsDtsPath);\n }\n\n fs.writeFileSync(path.join(outDir, \"pipelines.json\"), generatePipelinesJson(schemas.pipelines));\n fs.writeFileSync(path.join(outDir, \"pipelines.d.ts\"), generatePipelinesDts(schemas.pipelines));\n\n const platformTypesDtsPath = path.join(outDir, \"platform-types.d.ts\");\n const platformTypesDts = generatePlatformTypesDts(\n schemas.agents,\n schemas.connectors,\n schemas.skills,\n schemas.actions,\n );\n if (platformTypesDts) {\n fs.writeFileSync(platformTypesDtsPath, platformTypesDts);\n } else if (fs.existsSync(platformTypesDtsPath)) {\n fs.rmSync(platformTypesDtsPath);\n }\n\n fs.writeFileSync(\n path.join(outDir, \"index.d.ts\"),\n generateIndexDts(\n schemas.connectors.length > 0,\n schemas.actions.length > 0,\n schemas.pipelines.length > 0,\n platformTypesDts != null,\n ),\n );\n fs.writeFileSync(path.join(outDir, \"manifest.json\"), JSON.stringify(schemas, null, 2));\n};\n\nconst generateAgentsDts = (agents: AgentSchema[], actions: ActionSchema[]): string => {\n const actionsByName = new Map(actions.map((a) => [a.name, a]));\n\n const entries = agents\n .map((a) => {\n const input = jsonSchemaToTsType(a.input);\n const output = jsonSchemaToTsType(a.output);\n // Build per-agent actions type from the agent's action references + global action schemas.\n // a.actions may be an empty {} from remote APIs — treat that the same as undefined.\n const hasInlineActions = a.actions && Object.keys(a.actions).length > 0;\n const agentActions = hasInlineActions\n ? a.actions\n : buildAgentActionsFromRefs(a, actionsByName);\n const actionsType = generateActionsType(agentActions);\n return ` \"${a.id}\": {\\n input: ${input}\\n output: ${output}\\n actions: ${actionsType}\\n }`;\n })\n .join(\"\\n\");\n\n return [\n `// Auto-generated by \\`kraken generate\\` — do not edit manually`,\n `export {};`,\n ``,\n `declare module \"@kraken-ai/platform\" {`,\n ` interface AgentRegistry {`,\n entries,\n ` }`,\n `}`,\n ``,\n ].join(\"\\n\");\n};\n\n/** Build agent actions map from config.actions string[] by looking up ActionSchema entries. */\nconst buildAgentActionsFromRefs = (\n agent: AgentSchema,\n actionsByName: Map<string, ActionSchema>,\n): Record<string, Record<string, unknown>> | undefined => {\n const actionNames = agent.config?.actions;\n if (!actionNames || actionNames.length === 0) return undefined;\n\n const result: Record<string, Record<string, unknown>> = {};\n for (const name of actionNames) {\n const bareName = name.includes(\"/\") ? name.slice(name.indexOf(\"/\") + 1) : name;\n const actionSchema = actionsByName.get(bareName) ?? actionsByName.get(name);\n if (actionSchema) {\n result[name] = actionSchema.schema;\n }\n }\n return Object.keys(result).length > 0 ? result : undefined;\n};\n\nconst generateActionsType = (\n actions: Record<string, Record<string, unknown>> | undefined,\n): string => {\n if (!actions || Object.keys(actions).length === 0) {\n return \"Record<string, never>\";\n }\n const entries = Object.entries(actions)\n .map(([name, schema]) => `\"${name}\": ${jsonSchemaToTsType(schema)}`)\n .join(\"; \");\n return `{ ${entries} }`;\n};\n\nconst generateActionsDts = (actions: ActionSchema[]): string => {\n const entries = actions.map((a) => ` \"${a.name}\": ${jsonSchemaToTsType(a.schema)}`).join(\"\\n\");\n\n return [\n `// Auto-generated by \\`kraken generate\\` — do not edit manually`,\n `export {};`,\n ``,\n `declare module \"@kraken-ai/platform\" {`,\n ` interface ActionRegistry {`,\n entries,\n ` }`,\n `}`,\n ``,\n ].join(\"\\n\");\n};\n\nconst generateQueriesDts = (queries: QuerySchema[]): string => {\n const entries = queries\n .map((q) => {\n const params = jsonSchemaToTsType(q.params);\n const row = columnsToTsType(q.columns);\n return ` \"${q.name}\": {\\n params: ${params}\\n row: ${row}\\n }`;\n })\n .join(\"\\n\");\n\n return `// Auto-generated by \\`kraken generate\\` — do not edit manually\\n\\nexport interface QueryRegistry {\\n${entries}\\n}\\n`;\n};\n\nconst generateConnectorsDts = (connectors: ConnectorSchema[]): string => {\n const ids = connectors.map((c) => `\"${c.id}\"`).join(\" | \");\n\n const entries = connectors\n .map((c) => {\n const tools = c.tools\n .map((t) => {\n const params = jsonSchemaToTsType(t.parameters);\n return ` \"${t.name}\": ${params}`;\n })\n .join(\"\\n\");\n return ` \"${c.id}\": {\\n${tools}\\n }`;\n })\n .join(\"\\n\");\n\n return `// Auto-generated by \\`kraken generate\\` — do not edit manually\\n\\nexport type ConnectorId = ${ids};\\n\\nexport interface ConnectorTools {\\n${entries}\\n}\\n`;\n};\n\nconst generateIndexDts = (\n hasConnectors: boolean,\n hasActions: boolean,\n hasPipelines: boolean,\n hasPlatformTypes: boolean,\n): string => {\n let content = `// Auto-generated by \\`kraken generate\\` — do not edit manually\\n\\n/// <reference path=\"./agents.d.ts\" />\\nexport type { QueryRegistry } from \"./queries\"\\n`;\n if (hasConnectors) {\n content += `export type { ConnectorId, ConnectorTools } from \"./connectors\"\\n`;\n }\n if (hasActions) {\n content += `/// <reference path=\"./actions.d.ts\" />\\n`;\n }\n if (hasPipelines) {\n content += `/// <reference path=\"./pipelines.d.ts\" />\\n`;\n }\n if (hasPlatformTypes) {\n content += `/// <reference path=\"./platform-types.d.ts\" />\\n`;\n }\n return content;\n};\n\nconst generatePlatformTypesDts = (\n agents: AgentSchema[],\n connectors: ConnectorSchema[],\n skills: SkillSchema[],\n actions: ActionSchema[],\n): string | null => {\n const entries: string[] = [];\n\n if (agents.length > 0) {\n const ids = agents.map((a) => `\"${a.id}\"`).join(\" | \");\n entries.push(` agentId: ${ids};`);\n }\n if (connectors.length > 0) {\n const ids = connectors.map((c) => `\"${c.id}\"`).join(\" | \");\n entries.push(` connectorId: ${ids};`);\n }\n if (skills.length > 0) {\n const ids = skills.map((s) => `\"${s.id}\"`).join(\" | \");\n entries.push(` skillId: ${ids};`);\n }\n if (actions.length > 0) {\n const ids = actions.map((a) => `\"${a.name}\"`).join(\" | \");\n entries.push(` actionId: ${ids};`);\n }\n\n if (entries.length === 0) return null;\n\n return [\n `// Auto-generated by \\`kraken generate\\` — do not edit manually`,\n `export {};`,\n ``,\n `declare module \"@kraken-ai/platform\" {`,\n ` interface KrakenTypeRegistry {`,\n ...entries,\n ` }`,\n `}`,\n ``,\n ].join(\"\\n\");\n};\n\nconst MAX_TS_TYPE_DEPTH = 20;\n\n/**\n * Convert a JSON Schema node to a TypeScript type string.\n *\n * Safety invariant: ONLY emits fixed TS type keywords (string, number, boolean,\n * unknown, null, Record<string, unknown>) and validated property names.\n * MUST NOT interpolate arbitrary schema values (enum members, defaults, descriptions).\n */\nconst jsonSchemaToTsType = (schema: Record<string, unknown>, depth = 0): string => {\n if (depth > MAX_TS_TYPE_DEPTH) return \"unknown\";\n if (!schema || Object.keys(schema).length === 0) return \"unknown\";\n\n // Handle anyOf (nullable patterns and unions)\n const anyOf = schema.anyOf as Record<string, unknown>[] | undefined;\n if (anyOf) {\n const nonNull = anyOf.filter((s) => s.type !== \"null\");\n const hasNull = anyOf.some((s) => s.type === \"null\");\n\n if (nonNull.length === 1 && nonNull[0] && hasNull) {\n return `${jsonSchemaToTsType(nonNull[0], depth + 1)} | null`;\n }\n if (nonNull.length > 1) {\n const variants = nonNull.map((s) => jsonSchemaToTsType(s, depth + 1)).join(\" | \");\n return hasNull ? `${variants} | null` : variants;\n }\n if (nonNull.length === 0 && hasNull) {\n return \"null\";\n }\n }\n\n const type = schema.type as string | undefined;\n switch (type) {\n case \"string\":\n return \"string\";\n case \"number\":\n case \"integer\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"null\":\n return \"null\";\n case \"object\": {\n const props = schema.properties as Record<string, Record<string, unknown>> | undefined;\n if (!props) return \"Record<string, unknown>\";\n const required = new Set((schema.required as string[]) ?? []);\n const fields = Object.entries(props)\n .map(([k, val]) => {\n const optional = !required.has(k);\n const tsType = jsonSchemaToTsType(val, depth + 1);\n return `${k}${optional ? \"?\" : \"\"}: ${tsType}`;\n })\n .join(\"; \");\n return `{ ${fields} }`;\n }\n case \"array\": {\n const items = schema.items as Record<string, unknown> | undefined;\n return `${jsonSchemaToTsType(items ?? {}, depth + 1)}[]`;\n }\n default:\n return \"unknown\";\n }\n};\n\nconst columnsToTsType = (columns: QueryColumn[]): string => {\n if (columns.length === 0) return \"Record<string, unknown>\";\n const fields = columns.map((c) => `${c.name}: ${columnTypeToTs(c.type)}`).join(\"; \");\n return `{ ${fields} }`;\n};\n\nconst columnTypeToTs = (type: string): string => {\n switch (type.toLowerCase()) {\n case \"string\":\n case \"text\":\n case \"varchar\":\n return \"string\";\n case \"number\":\n case \"integer\":\n case \"float\":\n case \"double\":\n case \"decimal\":\n return \"number\";\n case \"boolean\":\n case \"bool\":\n return \"boolean\";\n default:\n return \"unknown\";\n }\n};\n\n// --- Pipeline codegen (JSON data + type declarations) ---\n\n/**\n * Generate pipelines.json — pure JSON data via JSON.stringify.\n * No string interpolation, no execution risk. (Safety invariant #2)\n *\n * Output structure: { [pipeline]: { [query]: { params, returns } } }\n */\nconst generatePipelinesJson = (pipelines: PipelineSchema[]): string => {\n if (pipelines.length === 0) return JSON.stringify({}, null, 2);\n\n const result: Record<\n string,\n Record<string, { params: Record<string, unknown>; returns: Record<string, unknown> }>\n > = {};\n for (const p of pipelines) {\n const queries: Record<\n string,\n { params: Record<string, unknown>; returns: Record<string, unknown> }\n > = {};\n for (const q of p.queries) {\n queries[q.name] = { params: q.params, returns: q.returns };\n }\n result[p.pipeline] = queries;\n }\n\n return JSON.stringify(result, null, 2);\n};\n\n/**\n * Generate pipelines.d.ts — PipelineRegistry interface with TypeScript types.\n * Uses declare module augmentation pattern (matches platform-types.d.ts).\n * Only emits fixed TS type keywords and validated property names. (Safety invariant #1)\n */\nconst generatePipelinesDts = (pipelines: PipelineSchema[]): string => {\n if (pipelines.length === 0) {\n return [\n `// Auto-generated by \\`kraken generate\\` — do not edit manually`,\n `export {};`,\n ``,\n `declare module \"@kraken-ai/platform\" {`,\n ` interface PipelineRegistry {}`,\n `}`,\n ``,\n ].join(\"\\n\");\n }\n\n const entries = pipelines\n .map((p) => {\n const queryEntries = p.queries\n .map((q) => {\n const params = jsonSchemaToTsType(q.params);\n const returns = jsonSchemaToTsType(q.returns);\n return ` \"${q.name}\": {\\n params: ${params}\\n returns: ${returns}\\n }`;\n })\n .join(\"\\n\");\n return ` \"${p.pipeline}\": {\\n${queryEntries}\\n }`;\n })\n .join(\"\\n\");\n\n return [\n `// Auto-generated by \\`kraken generate\\` — do not edit manually`,\n `export {};`,\n ``,\n `declare module \"@kraken-ai/platform\" {`,\n ` interface PipelineRegistry {`,\n entries,\n ` }`,\n `}`,\n ``,\n ].join(\"\\n\");\n};\n","/**\n * Joins a repo name and primitive name into the qualified `repo/primitive` form.\n * Throws if either segment is empty.\n */\nexport const qualify = (repoName: string, primitiveName: string): string => {\n if (!repoName) throw new Error(\"repoName must not be empty\");\n if (!primitiveName) throw new Error(\"primitiveName must not be empty\");\n return `${repoName}/${primitiveName}`;\n};\n\n/**\n * Splits a qualified name into its repo and primitive components.\n * Requires exactly one `/` with non-empty segments on both sides.\n */\nexport const parse = (qualified: string): { repoName: string; primitiveName: string } => {\n const slashIndex = qualified.indexOf(\"/\");\n if (slashIndex === -1) {\n throw new Error(`Expected qualified name with \"/\" separator, got: \"${qualified}\"`);\n }\n if (qualified.indexOf(\"/\", slashIndex + 1) !== -1) {\n throw new Error(`Expected exactly one \"/\" in qualified name, got: \"${qualified}\"`);\n }\n const repoName = qualified.slice(0, slashIndex);\n const primitiveName = qualified.slice(slashIndex + 1);\n if (!repoName || !primitiveName) {\n throw new Error(`Both repo and primitive segments must be non-empty, got: \"${qualified}\"`);\n }\n return { repoName, primitiveName };\n};\n\n/**\n * Returns true if the name is in qualified `repo/entity` form —\n * exactly one `/` with non-empty segments on both sides.\n * Purely structural; no format validation.\n */\nexport const isQualified = (name: string): boolean => {\n const slashIndex = name.indexOf(\"/\");\n if (slashIndex === -1 || slashIndex === 0 || slashIndex === name.length - 1) return false;\n return name.indexOf(\"/\", slashIndex + 1) === -1;\n};\n","import * as z from \"zod\";\n\nexport const environmentSchema = z.enum([\"dev\", \"staging\", \"prod\"]);\n\nexport type Environment = z.infer<typeof environmentSchema>;\n","import * as z from \"zod\";\n\nexport const jitPolicySchema = z.enum([\"auto-approve\", \"policy-based\", \"require-approval\"]);\n\nexport type JitPolicy = z.infer<typeof jitPolicySchema>;\n\nexport const identityConfigSchema = z.object({\n basePermissions: z.array(z.string()),\n requestablePermissions: z.array(z.string()).optional(),\n jitPolicy: jitPolicySchema.optional(),\n maxJitDurationMinutes: z.number().int().positive().optional(),\n});\n\nexport type IdentityConfig = z.infer<typeof identityConfigSchema>;\n","import * as z from \"zod\";\n\nexport const notificationConfigSchema = z.object({\n slack: z.string().optional(),\n onSuccess: z.boolean().optional(),\n onFailure: z.boolean().optional(),\n onTimeout: z.boolean().optional(),\n});\n\nexport type NotificationConfig = z.infer<typeof notificationConfigSchema>;\n","import type { ModelString } from \"kraken-ai\";\nimport * as z from \"zod\";\nimport { isQualified } from \"../qualified-name\";\nimport {\n isValidPrimitiveName,\n isValidQualifiedName,\n isValidQualifiedSkillId,\n isValidSkillId,\n} from \"../validate\";\nimport { environmentSchema } from \"./environment\";\nimport { identityConfigSchema } from \"./identity\";\nimport { notificationConfigSchema } from \"./notifications\";\nimport { concurrencyPolicySchema, resourceLimitsSchema, retryPolicySchema } from \"./resources\";\nimport { teamConfigSchema } from \"./team\";\nimport { triggerConfigSchema } from \"./trigger\";\n\nconst thinkingLevelSchema = z.enum([\"low\", \"medium\", \"high\"]);\n\nconst logLevelSchema = z.enum([\"silent\", \"debug\", \"info\", \"warn\", \"error\"]);\n\nexport const agentDefinitionSchema = z\n .object({\n name: z.string().min(1),\n model: z.string().min(1),\n instructions: z.string().min(1),\n description: z.string().optional(),\n skills: z.array(z.string()).optional(),\n temperature: z.number().min(0).max(2).optional(),\n allowTemperatureOverride: z.boolean().optional(),\n maxOutputTokens: z.number().int().positive().optional(),\n thinkingLevel: thinkingLevelSchema.optional(),\n logLevel: logLevelSchema.optional(),\n })\n .strict();\n\nexport type AgentDefinition = Omit<z.infer<typeof agentDefinitionSchema>, \"model\"> & {\n model: ModelString;\n};\n\nexport const platformAgentConfigSchema = z\n .object({\n agent: agentDefinitionSchema,\n connectors: z.array(z.string()).optional(),\n triggers: z.array(triggerConfigSchema),\n identity: identityConfigSchema.optional(),\n resources: resourceLimitsSchema.optional(),\n retries: retryPolicySchema.optional(),\n concurrency: concurrencyPolicySchema.optional(),\n team: teamConfigSchema.optional(),\n notifications: notificationConfigSchema.optional(),\n environment: environmentSchema.optional(),\n actions: z.array(z.string()).optional(),\n })\n .strict()\n .superRefine((data, ctx) => {\n // Validate team member references\n for (const member of data.team?.members ?? []) {\n const valid = isQualified(member)\n ? isValidQualifiedName(member)\n : isValidPrimitiveName(member);\n if (!valid) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"team\", \"members\"],\n message: `Invalid team member name: \"${member}\"`,\n });\n }\n }\n\n // Validate connector references\n for (const connector of data.connectors ?? []) {\n const valid = isQualified(connector)\n ? isValidQualifiedName(connector)\n : isValidPrimitiveName(connector);\n if (!valid) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"connectors\"],\n message: `Invalid connector name: \"${connector}\"`,\n });\n }\n }\n\n // Validate skill references\n for (const skill of data.agent.skills ?? []) {\n const valid = isQualified(skill) ? isValidQualifiedSkillId(skill) : isValidSkillId(skill);\n if (!valid) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"agent\", \"skills\"],\n message: `Invalid skill ID: \"${skill}\"`,\n });\n }\n }\n\n // Validate action references\n for (const action of data.actions ?? []) {\n const valid = isQualified(action)\n ? isValidQualifiedName(action)\n : isValidPrimitiveName(action);\n if (!valid) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n path: [\"actions\"],\n message: `Invalid action name: \"${action}\"`,\n });\n }\n }\n });\n\nexport type PlatformAgentConfig = Omit<z.infer<typeof platformAgentConfigSchema>, \"agent\"> & {\n agent: AgentDefinition;\n};\n\nexport interface PlatformAgent {\n readonly __type: \"PlatformAgent\";\n readonly config: PlatformAgentConfig;\n readonly runtime?: unknown;\n /** In-memory schemas for action variants. Not serialized — runtime use only. */\n readonly actionZodSchemas?: Record<string, import(\"zod\").ZodObject<import(\"zod\").ZodRawShape>>;\n /** Action handler functions. Not serialized — runtime use only. */\n readonly actionHandlers?: Readonly<Record<string, (payload: unknown) => Promise<void>>>;\n /** Action webhook URLs. Not serialized — runtime use only. */\n readonly actionWebhooks?: Readonly<Record<string, string | undefined>>;\n /** Team member PlatformAgent objects. Not serialized — runtime use only (dev mode delegation). */\n readonly teamAgents?: readonly PlatformAgent[];\n}\n\n/** Team member reference: local PlatformAgent or remote agent ID string. */\nexport type TeamMember = PlatformAgent | string;\n","import { isQualified, parse } from \"./qualified-name\";\n\n// ─── Primitive Name Validation ───\n\nexport const PRIMITIVE_NAME_REGEX = /^[a-z0-9][a-z0-9-]{0,62}[a-z0-9]$/;\n\n/** Single-char names (e.g. \"a\") are valid — the regex requires min 2 chars, so we also allow /^[a-z0-9]$/ */\nexport const isValidPrimitiveName = (name: string): boolean =>\n name.length === 1 ? /^[a-z0-9]$/.test(name) : PRIMITIVE_NAME_REGEX.test(name);\n\n// ─── Skill Name Validation ───\n\n/** Skill filenames allow uppercase: e.g. someFile-name.md, Research.md */\nexport const SKILL_NAME_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9-]{0,62}[a-zA-Z0-9]$/;\n\nexport const isValidSkillName = (basename: string): boolean =>\n basename.length === 1 ? /^[a-zA-Z0-9]$/.test(basename) : SKILL_NAME_REGEX.test(basename);\n\n/** Skill IDs from remote may include .md extension */\nexport const isValidSkillId = (id: string): boolean => {\n const base = id.endsWith(\".md\") ? id.slice(0, -3) : id;\n return isValidSkillName(base);\n};\n\n// ─── Qualified Name Validation ───\n\n/** Validates a qualified `repo/primitive` name — both segments must pass `isValidPrimitiveName`. */\nexport const isValidQualifiedName = (name: string): boolean => {\n if (!isQualified(name)) return false;\n const { repoName, primitiveName } = parse(name);\n return isValidPrimitiveName(repoName) && isValidPrimitiveName(primitiveName);\n};\n\n/** Validates a qualified skill ID — repo segment passes `isValidPrimitiveName`, primitive segment passes `isValidSkillId`. */\nexport const isValidQualifiedSkillId = (id: string): boolean => {\n if (!isQualified(id)) return false;\n const { repoName, primitiveName } = parse(id);\n return isValidPrimitiveName(repoName) && isValidSkillId(primitiveName);\n};\n\n// ─── Tool Name Validation ───\n\n/** Tool names allow underscores (e.g., fs_read, fs_write) */\nexport const TOOL_NAME_REGEX = /^[a-z][a-z0-9_-]{0,62}[a-z0-9]$/;\n\nexport const isValidToolName = (name: string): boolean =>\n name.length === 1 ? /^[a-z]$/.test(name) : TOOL_NAME_REGEX.test(name);\n\n// ─── Property Name Validation ───\n\n/** JS/TS property names with 255-char length cap to prevent DoS */\nexport const PROPERTY_NAME_REGEX = /^[a-zA-Z_$][a-zA-Z0-9_$]{0,254}$/;\n\nconst FORBIDDEN_PROPS = new Set([\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n \"__defineGetter__\",\n \"__defineSetter__\",\n \"__lookupGetter__\",\n \"__lookupSetter__\",\n]);\n\nexport const isValidPropertyName = (name: string): boolean =>\n PROPERTY_NAME_REGEX.test(name) && !FORBIDDEN_PROPS.has(name);\n","import * as z from \"zod\";\n\nexport const resourceLimitsSchema = z.object({\n maxTokens: z.number().int().positive().optional(),\n maxCostUsd: z.number().positive().optional(),\n timeoutSeconds: z.number().int().positive().optional(),\n});\n\nexport type ResourceLimits = z.infer<typeof resourceLimitsSchema>;\n\nexport const retryPolicySchema = z.object({\n maxAttempts: z.number().int().min(1).optional(),\n backoffSeconds: z.number().positive().optional(),\n});\n\nexport type RetryPolicy = z.infer<typeof retryPolicySchema>;\n\nexport const concurrencyPolicySchema = z.object({\n maxParallelRuns: z.number().int().min(1).optional(),\n});\n\nexport type ConcurrencyPolicy = z.infer<typeof concurrencyPolicySchema>;\n","import * as z from \"zod\";\n\nexport const teamConfigSchema = z.object({\n members: z.array(z.string()).min(1),\n maxConcurrentWorkers: z.number().int().min(1).optional(),\n maxTokenBudgetPerWorker: z.number().int().positive().optional(),\n maxDurationPerWorker: z.number().positive().optional(),\n});\n\nexport type TeamConfig = z.infer<typeof teamConfigSchema>;\n","import * as z from \"zod\";\n\nconst cronTriggerSchema = z.object({\n type: z.literal(\"cron\"),\n expression: z.string(),\n timezone: z.string().optional(),\n});\n\nconst webhookTriggerSchema = z.object({\n type: z.literal(\"webhook\"),\n path: z.string().startsWith(\"/\"),\n method: z.enum([\"POST\", \"GET\"]).optional(),\n});\n\nconst eventTriggerSchema = z.object({\n type: z.literal(\"event\"),\n source: z.string(),\n event: z.string(),\n});\n\nconst apiTriggerSchema = z.object({ type: z.literal(\"api\") });\n\nconst manualTriggerSchema = z.object({ type: z.literal(\"manual\") });\n\nexport const triggerConfigSchema = z.discriminatedUnion(\"type\", [\n cronTriggerSchema,\n webhookTriggerSchema,\n eventTriggerSchema,\n apiTriggerSchema,\n manualTriggerSchema,\n]);\n\nexport type TriggerConfig = z.infer<typeof triggerConfigSchema>;\n","import * as z from \"zod\";\n\nexport const platformSkillInputSchema = z\n .object({\n name: z.string().min(1),\n description: z.string().optional(),\n })\n .strict();\n\nexport interface PlatformSkill {\n readonly __type: \"PlatformSkill\";\n readonly name: string;\n readonly description?: string;\n}\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\n// Re-export basic validators from platform-core for SDK consumers\nexport {\n isValidPrimitiveName,\n isValidPropertyName,\n isValidQualifiedName,\n isValidQualifiedSkillId,\n isValidSkillId,\n isValidSkillName,\n isValidToolName,\n PRIMITIVE_NAME_REGEX,\n PROPERTY_NAME_REGEX,\n SKILL_NAME_REGEX,\n TOOL_NAME_REGEX,\n} from \"@kraken-ai/platform-core\";\n\nimport {\n isValidPrimitiveName,\n isValidPropertyName,\n isValidQualifiedName,\n isValidQualifiedSkillId,\n isValidSkillId,\n isValidToolName,\n PRIMITIVE_NAME_REGEX,\n PROPERTY_NAME_REGEX,\n SKILL_NAME_REGEX,\n TOOL_NAME_REGEX,\n} from \"@kraken-ai/platform-core\";\nimport type { SchemaBundle } from \"./codegen\";\n\n// ─── Schema Bundle Validation ───\n\nconst MAX_SCHEMA_DEPTH = 20;\nconst MAX_OBJECT_BREADTH = 200;\n\n/**\n * Validates all identifiers in a SchemaBundle before codegen.\n * Throws on the first invalid identifier — fail-fast.\n *\n * Checks:\n * - Primitive names (agent IDs, connector IDs, pipeline names, query names)\n * - Skill IDs (allows .md extension)\n * - Tool names (allows underscores)\n * - Property names in JSON Schema (recursive, with depth/breadth limits)\n * - Column names in query schemas\n * - Rejects `$ref` keys in pipeline schemas\n * - Strips `pattern` keys from pipeline schemas (ReDoS prevention)\n */\nexport const validateSchemaBundle = (bundle: SchemaBundle): void => {\n for (const agent of bundle.agents) {\n assertValidPrimitive(\"agent id\", agent.id);\n validateJsonSchemaProperties(\"agent input schema\", agent.input, 0);\n validateJsonSchemaProperties(\"agent output schema\", agent.output, 0);\n if (agent.actions) {\n for (const [actionName, actionSchema] of Object.entries(agent.actions)) {\n assertValidPrimitive(\"agent action name\", actionName);\n validateJsonSchemaProperties(\"agent action schema\", actionSchema, 0);\n }\n }\n }\n\n for (const query of bundle.queries) {\n assertValidPrimitive(\"query name\", query.name);\n validateJsonSchemaProperties(\"query params schema\", query.params, 0);\n for (const col of query.columns) {\n assertValidProperty(\"query column name\", col.name);\n }\n }\n\n for (const connector of bundle.connectors) {\n assertValidPrimitive(\"connector id\", connector.id);\n for (const tool of connector.tools) {\n assertValidTool(\"connector tool name\", tool.name);\n validateJsonSchemaProperties(\"connector tool parameters\", tool.parameters, 0);\n }\n }\n\n for (const pipeline of bundle.pipelines) {\n assertValidPrimitive(\"pipeline name\", pipeline.pipeline);\n for (const query of pipeline.queries) {\n assertValidPrimitive(\"pipeline query name\", query.name);\n validatePipelineSchema(\"pipeline query params\", query.params, 0);\n validatePipelineSchema(\"pipeline query returns\", query.returns, 0);\n }\n }\n\n for (const skill of bundle.skills) {\n assertValidSkill(\"skill id\", skill.id);\n }\n\n for (const action of bundle.actions) {\n assertValidPrimitive(\"action id\", action.id);\n validateJsonSchemaProperties(\"action schema\", action.schema, 0);\n }\n};\n\n// ─── Internal Assertion Helpers ───\n\nconst assertValidPrimitive = (label: string, value: string): void => {\n if (!isValidPrimitiveName(value) && !isValidQualifiedName(value)) {\n throw new Error(\n `Invalid remote schema: ${label} \"${value}\". Must match ${PRIMITIVE_NAME_REGEX} or repo/primitive format`,\n );\n }\n};\n\nconst assertValidTool = (label: string, value: string): void => {\n if (!isValidToolName(value)) {\n throw new Error(`Invalid remote schema: ${label} \"${value}\". Must match ${TOOL_NAME_REGEX}`);\n }\n};\n\nconst assertValidProperty = (label: string, value: string): void => {\n if (!isValidPropertyName(value)) {\n throw new Error(\n `Invalid remote schema: ${label} \"${value}\". Must match ${PROPERTY_NAME_REGEX} and not be a forbidden property`,\n );\n }\n};\n\nconst assertValidSkill = (label: string, value: string): void => {\n if (!isValidSkillId(value) && !isValidQualifiedSkillId(value)) {\n throw new Error(\n `Invalid remote schema: ${label} \"${value}\". Must match ${SKILL_NAME_REGEX} (with optional .md extension) or repo/skill format`,\n );\n }\n};\n\n/**\n * Validates property names in a JSON Schema node recursively.\n * Used for agent/query/connector schemas where we only need property name validation.\n */\nconst validateJsonSchemaProperties = (\n context: string,\n schema: Record<string, unknown>,\n depth: number,\n): void => {\n if (!schema || typeof schema !== \"object\") return;\n if (depth > MAX_SCHEMA_DEPTH) {\n throw new Error(\n `Invalid remote schema: ${context} exceeds maximum nesting depth of ${MAX_SCHEMA_DEPTH}`,\n );\n }\n\n const props = schema.properties as Record<string, Record<string, unknown>> | undefined;\n if (props) {\n const keys = Object.keys(props);\n if (keys.length > MAX_OBJECT_BREADTH) {\n throw new Error(\n `Invalid remote schema: ${context} has ${keys.length} properties, exceeding limit of ${MAX_OBJECT_BREADTH}`,\n );\n }\n for (const key of keys) {\n assertValidProperty(`${context} property name`, key);\n validateJsonSchemaProperties(context, props[key] ?? {}, depth + 1);\n }\n }\n\n const items = schema.items as Record<string, unknown> | undefined;\n if (items) {\n validateJsonSchemaProperties(context, items, depth + 1);\n }\n\n for (const keyword of [\"anyOf\", \"oneOf\", \"allOf\"] as const) {\n const variants = schema[keyword] as Record<string, unknown>[] | undefined;\n if (variants) {\n for (const variant of variants) {\n validateJsonSchemaProperties(context, variant, depth + 1);\n }\n }\n }\n};\n\n/**\n * Validates pipeline JSON Schema nodes with stricter checks:\n * - All property name validation from validateJsonSchemaProperties\n * - Rejects `$ref` keys (prevents circular reference bypass in z.fromJSONSchema())\n * - Strips `pattern` keys (prevents ReDoS in z.fromJSONSchema() line 328)\n */\nconst validatePipelineSchema = (\n context: string,\n schema: Record<string, unknown>,\n depth: number,\n): void => {\n if (!schema || typeof schema !== \"object\") return;\n if (depth > MAX_SCHEMA_DEPTH) {\n throw new Error(\n `Invalid remote schema: ${context} exceeds maximum nesting depth of ${MAX_SCHEMA_DEPTH}`,\n );\n }\n\n if (\"$ref\" in schema) {\n throw new Error(\n `Invalid remote schema: ${context} contains \"$ref\" which is not supported in pipeline schemas`,\n );\n }\n\n // Strip `pattern` keys to prevent ReDoS in z.fromJSONSchema()\n if (\"pattern\" in schema) {\n delete schema.pattern;\n }\n\n const props = schema.properties as Record<string, Record<string, unknown>> | undefined;\n if (props) {\n const keys = Object.keys(props);\n if (keys.length > MAX_OBJECT_BREADTH) {\n throw new Error(\n `Invalid remote schema: ${context} has ${keys.length} properties, exceeding limit of ${MAX_OBJECT_BREADTH}`,\n );\n }\n for (const key of keys) {\n assertValidProperty(`${context} property name`, key);\n validatePipelineSchema(context, props[key] ?? {}, depth + 1);\n }\n }\n\n const items = schema.items as Record<string, unknown> | undefined;\n if (items) {\n validatePipelineSchema(context, items, depth + 1);\n }\n\n for (const keyword of [\"anyOf\", \"oneOf\", \"allOf\"] as const) {\n const variants = schema[keyword] as Record<string, unknown>[] | undefined;\n if (variants) {\n for (const variant of variants) {\n validatePipelineSchema(context, variant, depth + 1);\n }\n }\n }\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\nexport interface Credentials {\n apiKey: string;\n baseUrl: string;\n}\n\nconst credentialsDir = () => path.join(os.homedir(), \".kraken-ai\");\nconst credentialsPath = () => path.join(credentialsDir(), \"credentials.json\");\n\nexport const saveCredentials = (creds: Credentials): void => {\n const dir = credentialsDir();\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true, mode: 0o700 });\n }\n const filePath = credentialsPath();\n fs.writeFileSync(filePath, JSON.stringify(creds, null, 2), { mode: 0o600 });\n};\n\nexport const loadCredentials = (): Credentials | null => {\n const filePath = credentialsPath();\n let creds: Credentials | null = null;\n\n if (fs.existsSync(filePath)) {\n try {\n creds = JSON.parse(fs.readFileSync(filePath, \"utf-8\")) as Credentials;\n } catch {\n return null;\n }\n }\n\n const envKey = process.env.KRAKEN_API_KEY;\n const envUrl = process.env.KRAKEN_BASE_URL;\n\n if (envKey || envUrl) {\n return {\n apiKey: envKey ?? creds?.apiKey ?? \"\",\n baseUrl: envUrl ?? creds?.baseUrl ?? \"\",\n };\n }\n\n return creds;\n};\n\nexport const clearCredentials = (): void => {\n const filePath = credentialsPath();\n if (fs.existsSync(filePath)) {\n fs.unlinkSync(filePath);\n }\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport {\n type ActionConfig,\n isValidPrimitiveName,\n isValidSkillName,\n type PlatformAgentConfig,\n PRIMITIVE_NAME_REGEX,\n platformAgentConfigSchema,\n} from \"@kraken-ai/platform-core\";\nimport * as z from \"zod\";\nimport { warn } from \"./log\";\n\n// ─── Sentinel Markers ───\n\nexport const MANIFEST_START = \"---KRAKEN-MANIFEST-START---\";\nexport const MANIFEST_END = \"---KRAKEN-MANIFEST-END---\";\n\n// ─── Project Manifest Schema ───\n\nconst skillEntrySchema = z.object({\n name: z.string().min(1),\n path: z.string().min(1),\n content: z.string(),\n});\n\nconst toolSpecSchema = z.object({\n name: z.string(),\n description: z.string(),\n parameters: z.record(z.string(), z.unknown()).default({}),\n annotations: z\n .object({\n readOnlyHint: z.boolean().optional(),\n destructiveHint: z.boolean().optional(),\n idempotentHint: z.boolean().optional(),\n })\n .optional(),\n});\n\nconst resourceSpecSchema = z.object({\n name: z.string(),\n uri: z.string(),\n description: z.string(),\n mimeType: z.string().optional(),\n});\n\nconst promptSpecSchema = z.object({\n name: z.string(),\n description: z.string(),\n arguments: z\n .array(\n z.object({\n name: z.string(),\n description: z.string().optional(),\n required: z.boolean().optional(),\n }),\n )\n .optional(),\n});\n\nconst connectorEntrySchema = z.object({\n name: z.string().min(1),\n path: z.string().min(1),\n toolSpecs: z.array(toolSpecSchema).default([]),\n resourceSpecs: z.array(resourceSpecSchema).default([]),\n promptSpecs: z.array(promptSpecSchema).default([]),\n});\n\nconst agentEntrySchema = z.object({\n name: z.string().min(1),\n entryPoint: z.string().min(1),\n config: platformAgentConfigSchema,\n});\n\nconst actionConfigSchema = z.object({\n schema: z.record(z.string(), z.unknown()),\n webhook: z.string().url().optional(),\n hasHandler: z.boolean(),\n});\n\nconst actionEntrySchema = z.object({\n name: z.string().min(1),\n entryPoint: z.string().min(1),\n config: actionConfigSchema,\n});\n\nexport const projectManifestSchema = z.object({\n agents: z.array(agentEntrySchema),\n skills: z.array(skillEntrySchema),\n connectors: z.array(connectorEntrySchema),\n actions: z.array(actionEntrySchema).default([]),\n});\n\nexport type ProjectManifest = z.infer<typeof projectManifestSchema>;\n\n// ─── tsx Availability ───\n\n/** Check whether tsx is registered as an ESM loader via NODE_OPTIONS. */\nexport const isTsxAvailable = (): boolean => process.env.NODE_OPTIONS?.includes(\"tsx\") === true;\n\n/** Resolve and load tsx/esm from the project's node_modules so .ts files can\n * be dynamically imported. Returns true if tsx is now available. */\nlet tsxLoaded = false;\nconst ensureTsxLoader = async (projectRoot: string): Promise<boolean> => {\n if (isTsxAvailable() || tsxLoaded) return true;\n // Only load tsx if it's an actual dependency of the project (present in its\n // own node_modules), not a transitive dep from a parent directory.\n if (!fs.existsSync(path.join(projectRoot, \"node_modules\", \"tsx\"))) return false;\n try {\n const require = createRequire(path.join(projectRoot, \"package.json\"));\n const tsxEsmPath = require.resolve(\"tsx/esm\");\n await import(pathToFileURL(tsxEsmPath).href);\n tsxLoaded = true;\n return true;\n } catch {\n return false;\n }\n};\n\n// ─── Agent Discovery ───\n\nconst isPlatformAgentExport = (\n value: unknown,\n): value is { __type: \"PlatformAgent\"; config: PlatformAgentConfig } =>\n value != null &&\n typeof value === \"object\" &&\n (value as Record<string, unknown>).__type === \"PlatformAgent\" &&\n \"config\" in value;\n\ninterface DiscoveredAgent {\n config: PlatformAgentConfig;\n entryPoint: string;\n}\n\nexport const discoverAgents = async (projectRoot: string): Promise<DiscoveredAgent[]> => {\n const distAgentsDir = path.join(projectRoot, \"dist\", \"agents\");\n const useDistAgents = fs.existsSync(distAgentsDir) && fs.statSync(distAgentsDir).isDirectory();\n const agentsDir = useDistAgents ? distAgentsDir : path.join(projectRoot, \"src\", \"agents\");\n const agentsDirPrefix = useDistAgents ? \"dist/agents\" : \"src/agents\";\n\n if (!fs.existsSync(agentsDir) || !fs.statSync(agentsDir).isDirectory()) {\n return [];\n }\n\n const tsxEnabled = await ensureTsxLoader(projectRoot);\n const allFiles = fs.readdirSync(agentsDir);\n const files = allFiles\n .filter((f) => f.endsWith(\".js\") || f.endsWith(\".mjs\") || (tsxEnabled && f.endsWith(\".ts\")))\n .sort();\n\n if (!tsxEnabled) {\n const skippedTs = allFiles.filter((f) => f.endsWith(\".ts\"));\n if (skippedTs.length > 0) {\n warn(\n `Found ${String(skippedTs.length)} .ts agent file(s) but tsx is not available. ` +\n \"Install tsx as a devDependency or build your project first.\",\n );\n }\n }\n\n const seen = new Map<string, DiscoveredAgent>();\n\n for (const file of files) {\n const filePath = path.join(agentsDir, file);\n try {\n const mod = (await import(pathToFileURL(filePath).href)) as Record<string, unknown>;\n const exported = mod.default;\n if (isPlatformAgentExport(exported) && !seen.has(exported.config.agent.name)) {\n seen.set(exported.config.agent.name, {\n config: exported.config,\n entryPoint: `${agentsDirPrefix}/${file}`,\n });\n }\n } catch (err) {\n warn(\n `Skipping ${agentsDirPrefix}/${file}: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n\n return [...seen.values()];\n};\n\n// ─── Skill Discovery ───\n\nconst MAX_SKILL_SIZE = 100 * 1024; // 100KB\n\nconst discoverSkills = (projectRoot: string): ProjectManifest[\"skills\"] => {\n const skillsDir = path.join(projectRoot, \"src\", \"skills\");\n\n if (!fs.existsSync(skillsDir) || !fs.statSync(skillsDir).isDirectory()) {\n return [];\n }\n\n const files = fs.readdirSync(skillsDir).sort();\n\n const skills: ProjectManifest[\"skills\"] = [];\n\n for (const file of files) {\n if (!file.endsWith(\".md\")) {\n warn(`Skipping src/skills/${file}: skill files must have a .md extension.`);\n continue;\n }\n\n const basename = file.replace(/\\.md$/, \"\");\n if (!isValidSkillName(basename)) {\n warn(\n `Skipping src/skills/${file}: name must match [a-zA-Z0-9-] (letters, digits, hyphens only).`,\n );\n continue;\n }\n\n const filePath = path.join(skillsDir, file);\n const stat = fs.statSync(filePath);\n if (stat.size > MAX_SKILL_SIZE) {\n warn(`Skipping src/skills/${file}: exceeds ${MAX_SKILL_SIZE} byte limit.`);\n continue;\n }\n\n const content = fs.readFileSync(filePath, \"utf-8\");\n skills.push({ name: file, path: `src/skills/${file}`, content });\n }\n\n return skills;\n};\n\n// ─── Connector Discovery ───\n\ninterface ConnectorToolSpec {\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n annotations?: {\n readOnlyHint?: boolean;\n destructiveHint?: boolean;\n idempotentHint?: boolean;\n };\n}\n\ninterface ConnectorResourceSpec {\n name: string;\n uri: string;\n description: string;\n mimeType?: string;\n}\n\ninterface ConnectorPromptSpec {\n name: string;\n description: string;\n arguments?: Array<{\n name: string;\n description?: string;\n required?: boolean;\n }>;\n}\n\ninterface ConnectorExport {\n __type: \"PlatformConnector\";\n name: string;\n tools?: Record<\n string,\n { description: string; input: z.ZodType; annotations?: Record<string, unknown> }\n >;\n resources?: Record<string, { description: string; uri: string; mimeType?: string }>;\n prompts?: Record<\n string,\n {\n description: string;\n arguments?: ReadonlyArray<{ name: string; description?: string; required?: boolean }>;\n }\n >;\n}\n\nconst isPlatformConnectorExport = (value: unknown): value is ConnectorExport =>\n value != null &&\n typeof value === \"object\" &&\n (value as Record<string, unknown>).__type === \"PlatformConnector\";\n\nconst serializeToolParameters = (input: z.ZodType): Record<string, unknown> => {\n try {\n return z.toJSONSchema(input, { target: \"draft-2020-12\" }) as Record<string, unknown>;\n } catch {\n warn(\"Failed to serialize tool parameters via z.toJSONSchema(); falling back to {}\");\n return {};\n }\n};\n\nconst extractConnectorSpecs = (\n conn: ConnectorExport,\n): {\n toolSpecs: ConnectorToolSpec[];\n resourceSpecs: ConnectorResourceSpec[];\n promptSpecs: ConnectorPromptSpec[];\n} => {\n const toolSpecs: ConnectorToolSpec[] = [];\n if (conn.tools) {\n for (const [name, tool] of Object.entries(conn.tools)) {\n const spec: ConnectorToolSpec = {\n name,\n description: tool.description,\n parameters: serializeToolParameters(tool.input),\n };\n if (tool.annotations) {\n const { readOnlyHint, destructiveHint, idempotentHint } = tool.annotations as {\n readOnlyHint?: boolean;\n destructiveHint?: boolean;\n idempotentHint?: boolean;\n };\n if (\n readOnlyHint !== undefined ||\n destructiveHint !== undefined ||\n idempotentHint !== undefined\n ) {\n spec.annotations = {\n ...(readOnlyHint !== undefined ? { readOnlyHint } : {}),\n ...(destructiveHint !== undefined ? { destructiveHint } : {}),\n ...(idempotentHint !== undefined ? { idempotentHint } : {}),\n };\n }\n }\n toolSpecs.push(spec);\n }\n }\n\n const resourceSpecs: ConnectorResourceSpec[] = [];\n if (conn.resources) {\n for (const [name, resource] of Object.entries(conn.resources)) {\n const spec: ConnectorResourceSpec = {\n name,\n uri: resource.uri,\n description: resource.description,\n };\n if (resource.mimeType) {\n spec.mimeType = resource.mimeType;\n }\n resourceSpecs.push(spec);\n }\n }\n\n const promptSpecs: ConnectorPromptSpec[] = [];\n if (conn.prompts) {\n for (const [name, prompt] of Object.entries(conn.prompts)) {\n const spec: ConnectorPromptSpec = {\n name,\n description: prompt.description,\n };\n if (prompt.arguments) {\n spec.arguments = [...prompt.arguments];\n }\n promptSpecs.push(spec);\n }\n }\n\n return { toolSpecs, resourceSpecs, promptSpecs };\n};\n\n/** Find the importable entry point for a connector directory, or undefined. */\nconst findConnectorEntryPoint = (connDir: string, tsxEnabled: boolean): string | undefined => {\n const candidates = [\"index.js\", \"index.mjs\"];\n if (tsxEnabled) candidates.push(\"index.ts\");\n\n for (const candidate of candidates) {\n const filePath = path.join(connDir, candidate);\n if (fs.existsSync(filePath)) return filePath;\n }\n return undefined;\n};\n\nconst discoverConnectors = async (projectRoot: string): Promise<ProjectManifest[\"connectors\"]> => {\n const distConnectorsDir = path.join(projectRoot, \"dist\", \"connectors\");\n const useDistConnectors =\n fs.existsSync(distConnectorsDir) && fs.statSync(distConnectorsDir).isDirectory();\n const connectorsDir = useDistConnectors\n ? distConnectorsDir\n : path.join(projectRoot, \"src\", \"connectors\");\n const connectorsDirPrefix = useDistConnectors ? \"dist/connectors\" : \"src/connectors\";\n\n if (!fs.existsSync(connectorsDir) || !fs.statSync(connectorsDir).isDirectory()) {\n return [];\n }\n\n const tsxEnabled = await ensureTsxLoader(projectRoot);\n const entries = fs.readdirSync(connectorsDir, { withFileTypes: true });\n const connectors: ProjectManifest[\"connectors\"] = [];\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n\n const name = entry.name;\n if (!isValidPrimitiveName(name)) {\n warn(\n `Skipping ${connectorsDirPrefix}/${name}: name must match [a-z0-9-] (lowercase, digits, hyphens only).`,\n );\n continue;\n }\n\n const connDir = path.join(connectorsDir, name);\n const hasPackageJson = fs.existsSync(path.join(connDir, \"package.json\"));\n const hasDockerfile = fs.existsSync(path.join(connDir, \"Dockerfile\"));\n const hasIndexJs = fs.existsSync(path.join(connDir, \"index.js\"));\n const hasIndexMjs = fs.existsSync(path.join(connDir, \"index.mjs\"));\n const hasIndexTs = fs.existsSync(path.join(connDir, \"index.ts\"));\n\n if (!hasPackageJson && !hasDockerfile && !hasIndexJs && !hasIndexMjs && !hasIndexTs) {\n continue;\n }\n\n const connectorPath = `${connectorsDirPrefix}/${name}/`;\n const entryPoint = findConnectorEntryPoint(connDir, tsxEnabled);\n\n if (!entryPoint) {\n connectors.push({\n name,\n path: connectorPath,\n toolSpecs: [],\n resourceSpecs: [],\n promptSpecs: [],\n });\n continue;\n }\n\n try {\n const mod = (await import(pathToFileURL(entryPoint).href)) as Record<string, unknown>;\n const exported = mod.default;\n\n if (isPlatformConnectorExport(exported)) {\n const specs = extractConnectorSpecs(exported);\n connectors.push({ name, path: connectorPath, ...specs });\n } else {\n connectors.push({\n name,\n path: connectorPath,\n toolSpecs: [],\n resourceSpecs: [],\n promptSpecs: [],\n });\n }\n } catch (err) {\n warn(\n `Skipping introspection for ${connectorsDirPrefix}/${name}: ${err instanceof Error ? err.message : String(err)}`,\n );\n connectors.push({\n name,\n path: connectorPath,\n toolSpecs: [],\n resourceSpecs: [],\n promptSpecs: [],\n });\n }\n }\n\n return connectors.sort((a, b) => a.name.localeCompare(b.name));\n};\n\n// ─── Action Discovery ───\n\nconst isPlatformActionExport = (\n value: unknown,\n): value is { __type: \"PlatformAction\"; name: string; config: ActionConfig } =>\n value != null &&\n typeof value === \"object\" &&\n (value as Record<string, unknown>).__type === \"PlatformAction\" &&\n \"name\" in value &&\n \"config\" in value;\n\ninterface DiscoveredAction {\n name: string;\n entryPoint: string;\n config: ActionConfig;\n}\n\nexport const discoverActions = async (projectRoot: string): Promise<DiscoveredAction[]> => {\n const distActionsDir = path.join(projectRoot, \"dist\", \"actions\");\n const useDistActions = fs.existsSync(distActionsDir) && fs.statSync(distActionsDir).isDirectory();\n const actionsDir = useDistActions ? distActionsDir : path.join(projectRoot, \"src\", \"actions\");\n const actionsDirPrefix = useDistActions ? \"dist/actions\" : \"src/actions\";\n\n if (!fs.existsSync(actionsDir) || !fs.statSync(actionsDir).isDirectory()) {\n return [];\n }\n\n const tsxEnabled = await ensureTsxLoader(projectRoot);\n const allFiles = fs.readdirSync(actionsDir);\n const files = allFiles\n .filter((f) => f.endsWith(\".js\") || f.endsWith(\".mjs\") || (tsxEnabled && f.endsWith(\".ts\")))\n .sort();\n\n if (!tsxEnabled) {\n const skippedTs = allFiles.filter((f) => f.endsWith(\".ts\"));\n if (skippedTs.length > 0) {\n warn(\n `Found ${String(skippedTs.length)} .ts action file(s) but tsx is not available. ` +\n \"Install tsx as a devDependency or build your project first.\",\n );\n }\n }\n\n const seen = new Map<string, DiscoveredAction>();\n\n for (const file of files) {\n const filePath = path.join(actionsDir, file);\n try {\n const mod = (await import(pathToFileURL(filePath).href)) as Record<string, unknown>;\n const exported = mod.default;\n if (isPlatformActionExport(exported) && !seen.has(exported.name)) {\n if (!isValidPrimitiveName(exported.name)) {\n warn(\n `Skipping ${actionsDirPrefix}/${file}: action name \"${exported.name}\" must match [a-z0-9-] (lowercase, digits, hyphens only).`,\n );\n continue;\n }\n seen.set(exported.name, {\n name: exported.name,\n entryPoint: `${actionsDirPrefix}/${file}`,\n config: exported.config,\n });\n }\n } catch (err) {\n warn(\n `Skipping ${actionsDirPrefix}/${file}: ${err instanceof Error ? err.message : String(err)}`,\n );\n }\n }\n\n return [...seen.values()];\n};\n\n// ─── Full Project Discovery ───\n\nexport const discoverProject = async (projectRoot: string): Promise<ProjectManifest> => {\n const discovered = await discoverAgents(projectRoot);\n\n const agents: ProjectManifest[\"agents\"] = [];\n for (const { config, entryPoint } of discovered) {\n const name = config.agent.name;\n if (!isValidPrimitiveName(name)) {\n throw new Error(`Invalid agent name: \"${name}\". Names must match ${PRIMITIVE_NAME_REGEX}`);\n }\n agents.push({ name, entryPoint, config });\n }\n\n const skills = discoverSkills(projectRoot);\n const connectors = await discoverConnectors(projectRoot);\n const actions = await discoverActions(projectRoot);\n\n return { agents, skills, connectors, actions };\n};\n\n// ─── Manifest Output ───\n\n/** Output manifest between sentinel markers for orchestrator parsing. */\nexport const emitManifest = (manifest: ProjectManifest): void => {\n process.stdout.write(`${MANIFEST_START}\\n`);\n process.stdout.write(JSON.stringify(manifest));\n process.stdout.write(`\\n${MANIFEST_END}\\n`);\n};\n\n/** Parse manifest from stdout that may contain noise before/after sentinel markers. */\nexport const parseManifestFromOutput = (stdout: string): ProjectManifest => {\n const startIdx = stdout.indexOf(MANIFEST_START);\n const endIdx = stdout.indexOf(MANIFEST_END);\n\n if (startIdx === -1 || endIdx === -1 || endIdx <= startIdx) {\n throw new Error(\"Discovery produced no output: sentinel markers not found\");\n }\n\n const jsonStr = stdout.slice(startIdx + MANIFEST_START.length, endIdx).trim();\n\n let raw: unknown;\n try {\n raw = JSON.parse(jsonStr);\n } catch {\n throw new Error(`Discovery produced invalid JSON: ${jsonStr.slice(0, 200)}`);\n }\n\n const result = projectManifestSchema.safeParse(raw);\n if (!result.success) {\n throw new Error(`Discovery produced invalid manifest: ${result.error.message}`);\n }\n\n return result.data;\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nconst supportsColor =\n !(\"NO_COLOR\" in process.env) &&\n process.env.FORCE_COLOR !== \"0\" &&\n (process.stderr.isTTY ?? false);\n\nconst code = (open: number, close: number) => {\n const openStr = `\\x1b[${open}m`;\n const closeStr = `\\x1b[${close}m`;\n return (s: string): string => (supportsColor ? `${openStr}${s}${closeStr}` : s);\n};\n\nexport const bold = code(1, 22);\nexport const dim = code(2, 22);\nexport const red = code(31, 39);\nexport const yellow = code(33, 39);\nexport const green = code(32, 39);\nexport const cyan = code(36, 39);\n\nexport const info = (msg: string): void => {\n process.stderr.write(` ${dim(\"[kraken-ai:\")} ${cyan(\"info\")}${dim(\"]\")} ${msg}\\n`);\n};\n\nexport const warn = (msg: string): void => {\n process.stderr.write(` ${dim(\"[kraken-ai:\")} ${yellow(\"warn\")}${dim(\"]\")} ${msg}\\n`);\n};\n\nexport const error = (msg: string): void => {\n process.stderr.write(` ${dim(\"[kraken-ai:\")} ${red(\"error\")}${dim(\"]\")} ${msg}\\n`);\n};\n\nexport const success = (msg: string): void => {\n process.stderr.write(` ${dim(\"[kraken-ai:\")} ${green(\"ok\")}${dim(\"]\")} ${msg}\\n`);\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport { cyan, dim } from \"./log\";\n\n/** Interactive arrow-key picker. Returns the selected item or null if cancelled. */\nexport const pick = async (label: string, items: string[]): Promise<string | null> => {\n if (items.length === 0) return null;\n if (items.length === 1) return items[0] ?? null;\n\n const { stdin, stdout } = process;\n if (!stdin.isTTY) return null;\n\n let cursor = 0;\n\n const render = (): void => {\n // Move up to overwrite previous render (skip on first draw)\n stdout.write(` ${dim(label)}\\n`);\n for (let i = 0; i < items.length; i++) {\n const marker = i === cursor ? cyan(\"❯\") : \" \";\n const item = items[i] ?? \"\";\n const text = i === cursor ? cyan(item) : dim(item);\n stdout.write(` ${marker} ${text}\\n`);\n }\n };\n\n const clear = (): void => {\n // Move cursor up (label + items) and clear each line\n const lines = items.length + 1;\n for (let i = 0; i < lines; i++) {\n stdout.write(\"\\x1b[1A\\x1b[2K\");\n }\n };\n\n stdin.setRawMode(true);\n stdin.resume();\n\n render();\n\n return new Promise<string | null>((resolve) => {\n const onData = (data: Buffer): void => {\n const key = data.toString();\n\n if (key === \"\\x1b[A\" || key === \"k\") {\n // Up arrow or k\n clear();\n cursor = (cursor - 1 + items.length) % items.length;\n render();\n } else if (key === \"\\x1b[B\" || key === \"j\") {\n // Down arrow or j\n clear();\n cursor = (cursor + 1) % items.length;\n render();\n } else if (key === \"\\r\" || key === \"\\n\") {\n // Enter\n cleanup();\n clear();\n resolve(items[cursor] ?? null);\n } else if (key === \"\\x03\" || key === \"\\x1b\" || key === \"q\") {\n // Ctrl+C, Escape, or q\n cleanup();\n clear();\n resolve(null);\n }\n };\n\n const cleanup = (): void => {\n stdin.removeListener(\"data\", onData);\n stdin.setRawMode(false);\n stdin.pause();\n };\n\n stdin.on(\"data\", onData);\n });\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\n// --- Client Config ---\n\nexport interface PlatformClientConfig {\n baseUrl?: string;\n apiKey?: string;\n}\n\n// --- Pagination ---\n\nexport interface PaginationParams {\n cursor?: string;\n limit?: number;\n}\n\nexport interface PaginatedResponse<T> {\n data: T[];\n cursor: string | null;\n hasMore: boolean;\n}\n\n// --- SSE Events ---\n\nexport type AgentEvent =\n | { type: \"text\"; content: string }\n | { type: \"tool_call\"; name: string; args: Record<string, unknown> }\n | { type: \"tool_result\"; name: string; result: unknown }\n | { type: \"thinking\"; content: string }\n | { type: \"action\"; name: string; payload: Record<string, unknown>; actionExecutionId: string }\n | { type: \"done\"; output: string; usage?: { tokens: number } }\n | { type: \"error\"; message: string; code: string };\n\n// --- Agents ---\n\nexport interface AgentInfo {\n id: string;\n name: string;\n description?: string;\n}\n\nexport interface ThreadInfo {\n id: string;\n agentId: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ThreadMessage {\n id: string;\n threadId: string;\n role: \"user\" | \"assistant\";\n content: string;\n toolCalls?: Array<{\n name: string;\n args: Record<string, unknown>;\n result: unknown;\n }>;\n createdAt: string;\n usage?: { tokens: number };\n}\n\n// --- Data Queries ---\n\nexport interface QueryInfo {\n name: string;\n description?: string;\n params: Record<string, unknown>;\n columns: QueryColumn[];\n}\n\nexport interface QueryColumn {\n name: string;\n type: string;\n description?: string;\n}\n\nexport interface QueryResult<TRow = Record<string, unknown>> {\n rows: TRow[];\n cursor: string | null;\n hasMore: boolean;\n}\n\n// --- Runs ---\n\n/*\n * Run state machine states:\n *\n * QUEUED — Job received, waiting for worker capacity\n * PROVISIONING — Creating Docker networks, starting gateway + sidecars + runtime\n * RUNNING — Runtime container executing the agent\n * DRAINING — Runtime exited, flushing remaining Redis events to PostgreSQL\n * COMPLETED — Run finished (exit 0), all events persisted, resources torn down\n * FAILED — Run failed (exit 1, crash, provisioning error, or retry exhausted)\n * AWAITING_APPROVAL — (Future) Human-in-the-loop — run paused pending approval\n * RETRYING — (Future) Run-level retry — re-queuing after failure\n *\n * Transitions:\n * QUEUED → PROVISIONING → RUNNING → DRAINING → COMPLETED\n * │ │ │\n * └───→ FAILED ←─┘─────────────────────┘\n *\n * Future transitions:\n * RUNNING → AWAITING_APPROVAL → RUNNING\n * FAILED → RETRYING → QUEUED\n */\nexport type RunState =\n | \"QUEUED\"\n | \"PROVISIONING\"\n | \"RUNNING\"\n | \"DRAINING\"\n | \"COMPLETED\"\n | \"FAILED\"\n | \"AWAITING_APPROVAL\"\n | \"RETRYING\";\n\nexport interface RunRecord {\n runId: string;\n agentId: string;\n input: string;\n state: RunState;\n exitCode?: number;\n createdAt: string;\n updatedAt: string;\n retryCount: number;\n error?: string;\n}\n\nexport interface StartRunParams {\n agentId: string;\n tag?: string;\n environment?: \"dev\" | \"staging\" | \"prod\";\n input: string;\n connectors?: string[];\n envVars?: Record<string, string>;\n /** When true, tool calls are logged but not executed. */\n dryRun?: boolean;\n}\n\nexport interface RunEvent {\n eventId: string;\n eventType: string;\n payload: Record<string, unknown>;\n}\n\n// --- Schema (for CLI codegen) ---\n\nexport interface AgentSchema {\n id: string;\n name: string;\n input: Record<string, unknown>;\n output: Record<string, unknown>;\n actions?: Record<string, Record<string, unknown>>;\n config?: { actions?: string[]; [key: string]: unknown };\n}\n\nexport interface QuerySchema {\n name: string;\n params: Record<string, unknown>;\n columns: QueryColumn[];\n}\n\nexport interface ConnectorSchema {\n id: string;\n tools: Array<{\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n }>;\n}\n\nexport interface SkillSchema {\n id: string;\n name: string;\n description?: string;\n}\n\nexport interface ActionSchema {\n id: string;\n name: string;\n schema: Record<string, unknown>;\n hasHandler: boolean;\n}\n\n// --- Pipeline Schemas (for CLI codegen) ---\n\nexport interface PipelineQuerySchema {\n name: string;\n description: string;\n params: Record<string, unknown>;\n returns: Record<string, unknown>;\n}\n\nexport interface PipelineSchema {\n pipeline: string;\n queries: PipelineQuerySchema[];\n}\n\n// --- Zod runtime validation schemas for remote API responses ---\n// Used by fetchRemoteSchemas() to replace unsafe `as` casts.\n// .passthrough() tolerates extra fields from API version changes.\n\nimport * as z from \"zod\";\n\nconst jsonSchemaValue = z.record(z.string(), z.unknown());\n\nexport const agentSchemaValidator = z\n .object({\n id: z.string(),\n name: z.string(),\n input: jsonSchemaValue,\n output: jsonSchemaValue,\n actions: z.record(z.string(), jsonSchemaValue).optional(),\n })\n .passthrough();\n\nconst queryColumnValidator = z\n .object({\n name: z.string(),\n type: z.string(),\n description: z.string().optional(),\n })\n .passthrough();\n\nexport const querySchemaValidator = z\n .object({\n name: z.string(),\n params: jsonSchemaValue,\n columns: z.array(queryColumnValidator),\n })\n .passthrough();\n\nconst connectorToolValidator = z\n .object({\n name: z.string(),\n description: z.string(),\n parameters: jsonSchemaValue,\n })\n .passthrough();\n\nexport const connectorSchemaValidator = z\n .object({\n id: z.string(),\n tools: z.array(connectorToolValidator),\n })\n .passthrough();\n\nexport const skillSchemaValidator = z\n .object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional(),\n })\n .passthrough();\n\nexport const actionSchemaValidator = z\n .object({\n id: z.string(),\n name: z.string(),\n schema: z.record(z.string(), z.unknown()),\n hasHandler: z.boolean(),\n })\n .passthrough();\n\nconst pipelineQuerySchemaValidator = z\n .object({\n name: z.string(),\n description: z.string(),\n params: jsonSchemaValue,\n returns: jsonSchemaValue,\n })\n .passthrough();\n\nexport const pipelineSchemaValidator = z\n .object({\n pipeline: z.string(),\n queries: z.array(pipelineQuerySchemaValidator),\n })\n .passthrough();\n"],"mappings":"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","names":["z","z","z","z","z","z","z","z","fs","path","fs","path","z","fs","path","require","z","pathToFileURL","resolve","code"]}
|