@kraken-ai/platform 0.0.3 → 0.0.4
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/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/server.d.cts +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/{types-CkknNKNr.d.cts → types-_lfbhFJH.d.cts} +2 -2
- package/dist/{types-CkknNKNr.d.ts → types-_lfbhFJH.d.ts} +2 -2
- package/package.json +12 -12
package/dist/cli.js
CHANGED
|
@@ -624,7 +624,7 @@ var agentDefinitionSchema = z8.object({
|
|
|
624
624
|
var platformAgentConfigSchema = z8.object({
|
|
625
625
|
agent: agentDefinitionSchema,
|
|
626
626
|
connectors: z8.array(z8.string()).optional(),
|
|
627
|
-
|
|
627
|
+
triggers: z8.array(triggerConfigSchema),
|
|
628
628
|
identity: identityConfigSchema.optional(),
|
|
629
629
|
resources: resourceLimitsSchema.optional(),
|
|
630
630
|
retries: retryPolicySchema.optional(),
|
|
@@ -1237,7 +1237,7 @@ export default definePlatformAgent({
|
|
|
1237
1237
|
model: "google/gemini-2.5-flash-preview-05-20",
|
|
1238
1238
|
instructions: "You are a helpful assistant.",
|
|
1239
1239
|
},
|
|
1240
|
-
|
|
1240
|
+
triggers: [{ type: "manual" }],
|
|
1241
1241
|
});
|
|
1242
1242
|
`
|
|
1243
1243
|
);
|
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 trigger: { 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 trigger: 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":";;;AAGA,YAAYA,SAAO;;;ACAnB,OAAO,QAAQ;AACf,OAAO,UAAU;;;ACDjB,IAAM,gBACJ,EAAE,cAAc,QAAQ,QACxB,QAAQ,IAAI,gBAAgB,QAC3B,QAAQ,OAAO,SAAS;AAE3B,IAAM,OAAO,CAAC,MAAc,UAAkB;AAC5C,QAAM,UAAU,QAAQ,IAAI;AAC5B,QAAM,WAAW,QAAQ,KAAK;AAC9B,SAAO,CAAC,MAAuB,gBAAgB,GAAG,OAAO,GAAG,CAAC,GAAG,QAAQ,KAAK;AAC/E;AAEO,IAAM,OAAO,KAAK,GAAG,EAAE;AACvB,IAAM,MAAM,KAAK,GAAG,EAAE;AACtB,IAAM,MAAM,KAAK,IAAI,EAAE;AACvB,IAAM,SAAS,KAAK,IAAI,EAAE;AAC1B,IAAM,QAAQ,KAAK,IAAI,EAAE;AACzB,IAAM,OAAO,KAAK,IAAI,EAAE;AAMxB,IAAM,OAAO,CAAC,QAAsB;AACzC,UAAQ,OAAO,MAAM,KAAK,IAAI,aAAa,CAAC,IAAI,OAAO,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,GAAG;AAAA,CAAI;AACtF;;;ACpBO,IAAM,oBAAoB;AAG1B,IAAM,oBAAoB,CAAC,SAChC,KAAK,WAAW,IAAI,aAAa,KAAK,IAAI,IAAI,kBAAkB,KAAK,IAAI;AAKpE,IAAM,mBAAmB;AAEzB,IAAM,mBAAmB,CAAC,aAC/B,SAAS,WAAW,IAAI,gBAAgB,KAAK,QAAQ,IAAI,iBAAiB,KAAK,QAAQ;AAGlF,IAAM,iBAAiB,CAAC,OAAwB;AACrD,QAAM,OAAO,GAAG,SAAS,KAAK,IAAI,GAAG,MAAM,GAAG,EAAE,IAAI;AACpD,SAAO,iBAAiB,IAAI;AAC9B;AAKO,IAAM,kBAAkB;AAExB,IAAM,kBAAkB,CAAC,SAC9B,KAAK,WAAW,IAAI,UAAU,KAAK,IAAI,IAAI,gBAAgB,KAAK,IAAI;AAK/D,IAAM,sBAAsB;AAEnC,IAAM,kBAAkB,oBAAI,IAAI;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,IAAM,sBAAsB,CAAC,SAClC,oBAAoB,KAAK,IAAI,KAAK,CAAC,gBAAgB,IAAI,IAAI;AAI7D,IAAM,mBAAmB;AACzB,IAAM,qBAAqB;AAepB,IAAM,uBAAuB,CAAC,WAA+B;AAClE,aAAW,SAAS,OAAO,QAAQ;AACjC,sBAAkB,YAAY,MAAM,EAAE;AACtC,iCAA6B,sBAAsB,MAAM,OAAO,CAAC;AACjE,iCAA6B,uBAAuB,MAAM,QAAQ,CAAC;AACnE,QAAI,MAAM,SAAS;AACjB,iBAAW,CAAC,YAAY,YAAY,KAAK,OAAO,QAAQ,MAAM,OAAO,GAAG;AACtE,0BAAkB,qBAAqB,UAAU;AACjD,qCAA6B,uBAAuB,cAAc,CAAC;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AAEA,aAAW,SAAS,OAAO,SAAS;AAClC,sBAAkB,cAAc,MAAM,IAAI;AAC1C,iCAA6B,uBAAuB,MAAM,QAAQ,CAAC;AACnE,eAAW,OAAO,MAAM,SAAS;AAC/B,0BAAoB,qBAAqB,IAAI,IAAI;AAAA,IACnD;AAAA,EACF;AAEA,aAAW,aAAa,OAAO,YAAY;AACzC,sBAAkB,gBAAgB,UAAU,EAAE;AAC9C,eAAW,QAAQ,UAAU,OAAO;AAClC,sBAAgB,uBAAuB,KAAK,IAAI;AAChD,mCAA6B,6BAA6B,KAAK,YAAY,CAAC;AAAA,IAC9E;AAAA,EACF;AAEA,aAAW,YAAY,OAAO,WAAW;AACvC,sBAAkB,iBAAiB,SAAS,QAAQ;AACpD,eAAW,SAAS,SAAS,SAAS;AACpC,wBAAkB,uBAAuB,MAAM,IAAI;AACnD,6BAAuB,yBAAyB,MAAM,QAAQ,CAAC;AAC/D,6BAAuB,0BAA0B,MAAM,SAAS,CAAC;AAAA,IACnE;AAAA,EACF;AAEA,aAAW,SAAS,OAAO,QAAQ;AACjC,qBAAiB,YAAY,MAAM,EAAE;AAAA,EACvC;AACF;AAIA,IAAM,oBAAoB,CAAC,YAAoB,UAAwB;AACrE,MAAI,CAAC,kBAAkB,KAAK,GAAG;AAC7B,UAAM,IAAI;AAAA,MACR,0BAA0B,UAAU,KAAK,KAAK,iBAAiB,iBAAiB;AAAA,IAClF;AAAA,EACF;AACF;AAEA,IAAM,kBAAkB,CAAC,YAAoB,UAAwB;AACnE,MAAI,CAAC,gBAAgB,KAAK,GAAG;AAC3B,UAAM,IAAI;AAAA,MACR,0BAA0B,UAAU,KAAK,KAAK,iBAAiB,eAAe;AAAA,IAChF;AAAA,EACF;AACF;AAEA,IAAM,sBAAsB,CAAC,YAAoB,UAAwB;AACvE,MAAI,CAAC,oBAAoB,KAAK,GAAG;AAC/B,UAAM,IAAI;AAAA,MACR,0BAA0B,UAAU,KAAK,KAAK,iBAAiB,mBAAmB;AAAA,IACpF;AAAA,EACF;AACF;AAEA,IAAM,mBAAmB,CAAC,YAAoB,UAAwB;AACpE,MAAI,CAAC,eAAe,KAAK,GAAG;AAC1B,UAAM,IAAI;AAAA,MACR,0BAA0B,UAAU,KAAK,KAAK,iBAAiB,gBAAgB;AAAA,IACjF;AAAA,EACF;AACF;AAMA,IAAM,+BAA+B,CACnC,SACA,QACA,UACS;AACT,MAAI,CAAC,UAAU,OAAO,WAAW,SAAU;AAC3C,MAAI,QAAQ,kBAAkB;AAC5B,UAAM,IAAI;AAAA,MACR,0BAA0B,OAAO,qCAAqC,gBAAgB;AAAA,IACxF;AAAA,EACF;AAEA,QAAM,QAAQ,OAAO;AACrB,MAAI,OAAO;AACT,UAAM,OAAO,OAAO,KAAK,KAAK;AAC9B,QAAI,KAAK,SAAS,oBAAoB;AACpC,YAAM,IAAI;AAAA,QACR,0BAA0B,OAAO,QAAQ,KAAK,MAAM,mCAAmC,kBAAkB;AAAA,MAC3G;AAAA,IACF;AACA,eAAW,OAAO,MAAM;AACtB,0BAAoB,GAAG,OAAO,kBAAkB,GAAG;AACnD,mCAA6B,SAAS,MAAM,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC;AAAA,IACnE;AAAA,EACF;AAEA,QAAM,QAAQ,OAAO;AACrB,MAAI,OAAO;AACT,iCAA6B,SAAS,OAAO,QAAQ,CAAC;AAAA,EACxD;AAEA,aAAW,WAAW,CAAC,SAAS,SAAS,OAAO,GAAY;AAC1D,UAAM,WAAW,OAAO,OAAO;AAC/B,QAAI,UAAU;AACZ,iBAAW,WAAW,UAAU;AAC9B,qCAA6B,SAAS,SAAS,QAAQ,CAAC;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AACF;AAQA,IAAM,yBAAyB,CAC7B,SACA,QACA,UACS;AACT,MAAI,CAAC,UAAU,OAAO,WAAW,SAAU;AAC3C,MAAI,QAAQ,kBAAkB;AAC5B,UAAM,IAAI;AAAA,MACR,0BAA0B,OAAO,qCAAqC,gBAAgB;AAAA,IACxF;AAAA,EACF;AAEA,MAAI,UAAU,QAAQ;AACpB,UAAM,IAAI;AAAA,MACR,0BAA0B,OAAO;AAAA,IACnC;AAAA,EACF;AAGA,MAAI,aAAa,QAAQ;AACvB,WAAO,OAAO;AAAA,EAChB;AAEA,QAAM,QAAQ,OAAO;AACrB,MAAI,OAAO;AACT,UAAM,OAAO,OAAO,KAAK,KAAK;AAC9B,QAAI,KAAK,SAAS,oBAAoB;AACpC,YAAM,IAAI;AAAA,QACR,0BAA0B,OAAO,QAAQ,KAAK,MAAM,mCAAmC,kBAAkB;AAAA,MAC3G;AAAA,IACF;AACA,eAAW,OAAO,MAAM;AACtB,0BAAoB,GAAG,OAAO,kBAAkB,GAAG;AACnD,6BAAuB,SAAS,MAAM,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC;AAAA,IAC7D;AAAA,EACF;AAEA,QAAM,QAAQ,OAAO;AACrB,MAAI,OAAO;AACT,2BAAuB,SAAS,OAAO,QAAQ,CAAC;AAAA,EAClD;AAEA,aAAW,WAAW,CAAC,SAAS,SAAS,OAAO,GAAY;AAC1D,UAAM,WAAW,OAAO,OAAO;AAC/B,QAAI,UAAU;AACZ,iBAAW,WAAW,UAAU;AAC9B,+BAAuB,SAAS,SAAS,QAAQ,CAAC;AAAA,MACpD;AAAA,IACF;AAAA,EACF;AACF;;;AFjOO,IAAM,gBAAgB,CAAC,SAAuB,gBAA8B;AAEjF,uBAAqB,OAAO;AAE5B,QAAM,SAAS,KAAK,KAAK,aAAa,YAAY;AAClD,MAAI,CAAC,GAAG,WAAW,MAAM,GAAG;AAC1B,OAAG,UAAU,QAAQ,EAAE,WAAW,KAAK,CAAC;AAAA,EAC1C;AAGA,QAAM,mBAAmB,KAAK,KAAK,QAAQ,cAAc;AACzD,MAAI,GAAG,WAAW,gBAAgB,GAAG;AACnC,OAAG,OAAO,gBAAgB;AAC1B;AAAA,MACE;AAAA,IACF;AAAA,EACF;AAEA,KAAG,cAAc,KAAK,KAAK,QAAQ,aAAa,GAAG,kBAAkB,QAAQ,MAAM,CAAC;AACpF,KAAG,cAAc,KAAK,KAAK,QAAQ,cAAc,GAAG,mBAAmB,QAAQ,OAAO,CAAC;AAEvF,QAAM,oBAAoB,KAAK,KAAK,QAAQ,iBAAiB;AAC7D,MAAI,QAAQ,WAAW,SAAS,GAAG;AACjC,OAAG,cAAc,mBAAmB,sBAAsB,QAAQ,UAAU,CAAC;AAAA,EAC/E,WAAW,GAAG,WAAW,iBAAiB,GAAG;AAC3C,OAAG,OAAO,iBAAiB;AAAA,EAC7B;AAEA,KAAG,cAAc,KAAK,KAAK,QAAQ,gBAAgB,GAAG,sBAAsB,QAAQ,SAAS,CAAC;AAC9F,KAAG,cAAc,KAAK,KAAK,QAAQ,gBAAgB,GAAG,qBAAqB,QAAQ,SAAS,CAAC;AAE7F,QAAM,uBAAuB,KAAK,KAAK,QAAQ,qBAAqB;AACpE,QAAM,mBAAmB;AAAA,IACvB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACA,MAAI,kBAAkB;AACpB,OAAG,cAAc,sBAAsB,gBAAgB;AAAA,EACzD,WAAW,GAAG,WAAW,oBAAoB,GAAG;AAC9C,OAAG,OAAO,oBAAoB;AAAA,EAChC;AAEA,KAAG;AAAA,IACD,KAAK,KAAK,QAAQ,YAAY;AAAA,IAC9B;AAAA,MACE,QAAQ,WAAW,SAAS;AAAA,MAC5B,QAAQ,UAAU,SAAS;AAAA,MAC3B,oBAAoB;AAAA,IACtB;AAAA,EACF;AACA,KAAG,cAAc,KAAK,KAAK,QAAQ,eAAe,GAAG,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AACvF;AAEA,IAAM,oBAAoB,CAAC,WAAkC;AAC3D,QAAM,UAAU,OACb,IAAI,CAAC,MAAM;AACV,UAAM,QAAQ,mBAAmB,EAAE,KAAK;AACxC,UAAM,SAAS,mBAAmB,EAAE,MAAM;AAC1C,UAAM,UAAU,oBAAoB,EAAE,OAAO;AAC7C,WAAO,MAAM,EAAE,EAAE;AAAA,aAAoB,KAAK;AAAA,cAAiB,MAAM;AAAA,eAAkB,OAAO;AAAA;AAAA,EAC5F,CAAC,EACA,KAAK,IAAI;AAEZ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,sBAAsB,CAC1B,YACW;AACX,MAAI,CAAC,WAAW,OAAO,KAAK,OAAO,EAAE,WAAW,GAAG;AACjD,WAAO;AAAA,EACT;AACA,QAAM,UAAU,OAAO,QAAQ,OAAO,EACnC,IAAI,CAAC,CAAC,MAAM,MAAM,MAAM,IAAI,IAAI,MAAM,mBAAmB,MAAM,CAAC,EAAE,EAClE,KAAK,IAAI;AACZ,SAAO,KAAK,OAAO;AACrB;AAEA,IAAM,qBAAqB,CAAC,YAAmC;AAC7D,QAAM,UAAU,QACb,IAAI,CAAC,MAAM;AACV,UAAM,SAAS,mBAAmB,EAAE,MAAM;AAC1C,UAAM,MAAM,gBAAgB,EAAE,OAAO;AACrC,WAAO,MAAM,EAAE,IAAI;AAAA,cAAqB,MAAM;AAAA,WAAc,GAAG;AAAA;AAAA,EACjE,CAAC,EACA,KAAK,IAAI;AAEZ,SAAO;AAAA;AAAA;AAAA,EAAwG,OAAO;AAAA;AAAA;AACxH;AAEA,IAAM,wBAAwB,CAAC,eAA0C;AACvE,QAAM,MAAM,WAAW,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,KAAK;AAEzD,QAAM,UAAU,WACb,IAAI,CAAC,MAAM;AACV,UAAM,QAAQ,EAAE,MACb,IAAI,CAAC,MAAM;AACV,YAAM,SAAS,mBAAmB,EAAE,UAAU;AAC9C,aAAO,QAAQ,EAAE,IAAI,MAAM,MAAM;AAAA,IACnC,CAAC,EACA,KAAK,IAAI;AACZ,WAAO,MAAM,EAAE,EAAE;AAAA,EAAS,KAAK;AAAA;AAAA,EACjC,CAAC,EACA,KAAK,IAAI;AAEZ,SAAO;AAAA;AAAA,4BAAgG,GAAG;AAAA;AAAA;AAAA,EAA2C,OAAO;AAAA;AAAA;AAC9J;AAEA,IAAM,mBAAmB,CACvB,eACA,cACA,qBACW;AACX,MAAI,UAAU;AAAA;AAAA;AAAA;AAAA;AACd,MAAI,eAAe;AACjB,eAAW;AAAA;AAAA,EACb;AACA,MAAI,cAAc;AAChB,eAAW;AAAA;AAAA,EACb;AACA,MAAI,kBAAkB;AACpB,eAAW;AAAA;AAAA,EACb;AACA,SAAO;AACT;AAEA,IAAM,2BAA2B,CAC/B,QACA,YACA,WACkB;AAClB,QAAM,UAAoB,CAAC;AAE3B,MAAI,OAAO,SAAS,GAAG;AACrB,UAAM,MAAM,OAAO,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,KAAK;AACrD,YAAQ,KAAK,gBAAgB,GAAG,GAAG;AAAA,EACrC;AACA,MAAI,WAAW,SAAS,GAAG;AACzB,UAAM,MAAM,WAAW,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,KAAK;AACzD,YAAQ,KAAK,oBAAoB,GAAG,GAAG;AAAA,EACzC;AACA,MAAI,OAAO,SAAS,GAAG;AACrB,UAAM,MAAM,OAAO,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,KAAK;AACrD,YAAQ,KAAK,gBAAgB,GAAG,GAAG;AAAA,EACrC;AAEA,MAAI,QAAQ,WAAW,EAAG,QAAO;AAEjC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAEA,IAAM,oBAAoB;AAS1B,IAAM,qBAAqB,CAAC,QAAiC,QAAQ,MAAc;AACjF,MAAI,QAAQ,kBAAmB,QAAO;AACtC,MAAI,CAAC,UAAU,OAAO,KAAK,MAAM,EAAE,WAAW,EAAG,QAAO;AAGxD,QAAM,QAAQ,OAAO;AACrB,MAAI,OAAO;AACT,UAAM,UAAU,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM;AACrD,UAAM,UAAU,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM;AAEnD,QAAI,QAAQ,WAAW,KAAK,QAAQ,CAAC,KAAK,SAAS;AACjD,aAAO,GAAG,mBAAmB,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC;AAAA,IACrD;AACA,QAAI,QAAQ,SAAS,GAAG;AACtB,YAAM,WAAW,QAAQ,IAAI,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,KAAK;AAChF,aAAO,UAAU,GAAG,QAAQ,YAAY;AAAA,IAC1C;AACA,QAAI,QAAQ,WAAW,KAAK,SAAS;AACnC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,OAAO,OAAO;AACpB,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK,UAAU;AACb,YAAM,QAAQ,OAAO;AACrB,UAAI,CAAC,MAAO,QAAO;AACnB,YAAM,WAAW,IAAI,IAAK,OAAO,YAAyB,CAAC,CAAC;AAC5D,YAAM,SAAS,OAAO,QAAQ,KAAK,EAChC,IAAI,CAAC,CAAC,GAAG,GAAG,MAAM;AACjB,cAAM,WAAW,CAAC,SAAS,IAAI,CAAC;AAChC,cAAM,SAAS,mBAAmB,KAAK,QAAQ,CAAC;AAChD,eAAO,GAAG,CAAC,GAAG,WAAW,MAAM,EAAE,KAAK,MAAM;AAAA,MAC9C,CAAC,EACA,KAAK,IAAI;AACZ,aAAO,KAAK,MAAM;AAAA,IACpB;AAAA,IACA,KAAK,SAAS;AACZ,YAAM,QAAQ,OAAO;AACrB,aAAO,GAAG,mBAAmB,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC;AAAA,IACtD;AAAA,IACA;AACE,aAAO;AAAA,EACX;AACF;AAEA,IAAM,kBAAkB,CAAC,YAAmC;AAC1D,MAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,QAAM,SAAS,QAAQ,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,KAAK,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI;AACnF,SAAO,KAAK,MAAM;AACpB;AAEA,IAAM,iBAAiB,CAAC,SAAyB;AAC/C,UAAQ,KAAK,YAAY,GAAG;AAAA,IAC1B,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAUA,IAAM,wBAAwB,CAAC,cAAwC;AACrE,MAAI,UAAU,WAAW,EAAG,QAAO,KAAK,UAAU,CAAC,GAAG,MAAM,CAAC;AAE7D,QAAM,SAGF,CAAC;AACL,aAAW,KAAK,WAAW;AACzB,UAAM,UAGF,CAAC;AACL,eAAW,KAAK,EAAE,SAAS;AACzB,cAAQ,EAAE,IAAI,IAAI,EAAE,QAAQ,EAAE,QAAQ,SAAS,EAAE,QAAQ;AAAA,IAC3D;AACA,WAAO,EAAE,QAAQ,IAAI;AAAA,EACvB;AAEA,SAAO,KAAK,UAAU,QAAQ,MAAM,CAAC;AACvC;AAOA,IAAM,uBAAuB,CAAC,cAAwC;AACpE,MAAI,UAAU,WAAW,GAAG;AAC1B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,KAAK,IAAI;AAAA,EACb;AAEA,QAAM,UAAU,UACb,IAAI,CAAC,MAAM;AACV,UAAM,eAAe,EAAE,QACpB,IAAI,CAAC,MAAM;AACV,YAAM,SAAS,mBAAmB,EAAE,MAAM;AAC1C,YAAM,UAAU,mBAAmB,EAAE,OAAO;AAC5C,aAAO,UAAU,EAAE,IAAI;AAAA,kBAAyB,MAAM;AAAA,mBAAsB,OAAO;AAAA;AAAA,IACrF,CAAC,EACA,KAAK,IAAI;AACZ,WAAO,QAAQ,EAAE,QAAQ;AAAA,EAAS,YAAY;AAAA;AAAA,EAChD,CAAC,EACA,KAAK,IAAI;AAEZ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;;;AGlWA,OAAOC,SAAQ;AACf,OAAO,QAAQ;AACf,OAAOC,WAAU;AAOjB,IAAM,iBAAiB,MAAMA,MAAK,KAAK,GAAG,QAAQ,GAAG,YAAY;AACjE,IAAM,kBAAkB,MAAMA,MAAK,KAAK,eAAe,GAAG,kBAAkB;AAErE,IAAM,kBAAkB,CAAC,UAA6B;AAC3D,QAAM,MAAM,eAAe;AAC3B,MAAI,CAACD,IAAG,WAAW,GAAG,GAAG;AACvB,IAAAA,IAAG,UAAU,KAAK,EAAE,WAAW,MAAM,MAAM,IAAM,CAAC;AAAA,EACpD;AACA,QAAM,WAAW,gBAAgB;AACjC,EAAAA,IAAG,cAAc,UAAU,KAAK,UAAU,OAAO,MAAM,CAAC,GAAG,EAAE,MAAM,IAAM,CAAC;AAC5E;AAEO,IAAM,kBAAkB,MAA0B;AACvD,QAAM,WAAW,gBAAgB;AACjC,MAAI,QAA4B;AAEhC,MAAIA,IAAG,WAAW,QAAQ,GAAG;AAC3B,QAAI;AACF,cAAQ,KAAK,MAAMA,IAAG,aAAa,UAAU,OAAO,CAAC;AAAA,IACvD,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,SAAS,QAAQ,IAAI;AAC3B,QAAM,SAAS,QAAQ,IAAI;AAE3B,MAAI,UAAU,QAAQ;AACpB,WAAO;AAAA,MACL,QAAQ,UAAU,OAAO,UAAU;AAAA,MACnC,SAAS,UAAU,OAAO,WAAW;AAAA,IACvC;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,mBAAmB,MAAY;AAC1C,QAAM,WAAW,gBAAgB;AACjC,MAAIA,IAAG,WAAW,QAAQ,GAAG;AAC3B,IAAAA,IAAG,WAAW,QAAQ;AAAA,EACxB;AACF;;;ACnDA,OAAOE,SAAQ;AACf,OAAOC,WAAU;AACjB,SAAS,qBAAqB;AAC9B,YAAYC,SAAO;;;ACHnB,YAAY,OAAO;AAwCZ,IAAM,4BAA8B,SAAO;AAAA,EAChD,QAAU,SAAS,SAAO,GAAK,UAAQ,CAAC;AAAA,EACxC,SAAW,SAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACnC,YAAc,UAAQ;AACxB,CAAC;AAEM,IAAM,sBACV,SAAO;AAAA,EACN,UAAY,SAAS,SAAO,GAAG,yBAAyB;AAC1D,CAAC,EACA,OAAO;;;AClDV,YAAYC,QAAO;AAEZ,IAAM,oBAAsB,QAAK,CAAC,OAAO,WAAW,MAAM,CAAC;;;ACFlE,YAAYC,QAAO;AAEZ,IAAM,kBAAoB,QAAK,CAAC,gBAAgB,gBAAgB,kBAAkB,CAAC;AAInF,IAAM,uBAAyB,UAAO;AAAA,EAC3C,iBAAmB,SAAQ,UAAO,CAAC;AAAA,EACnC,wBAA0B,SAAQ,UAAO,CAAC,EAAE,SAAS;AAAA,EACrD,WAAW,gBAAgB,SAAS;AAAA,EACpC,uBAAyB,UAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAC9D,CAAC;;;ACXD,YAAYC,QAAO;AAEZ,IAAM,2BAA6B,UAAO;AAAA,EAC/C,OAAS,UAAO,EAAE,SAAS;AAAA,EAC3B,WAAa,WAAQ,EAAE,SAAS;AAAA,EAChC,WAAa,WAAQ,EAAE,SAAS;AAAA,EAChC,WAAa,WAAQ,EAAE,SAAS;AAClC,CAAC;;;ACND,YAAYC,QAAO;;;ACDnB,YAAYC,QAAO;AAEZ,IAAM,uBAAyB,UAAO;AAAA,EAC3C,WAAa,UAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,YAAc,UAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,gBAAkB,UAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AACvD,CAAC;AAIM,IAAM,oBAAsB,UAAO;AAAA,EACxC,aAAe,UAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC9C,gBAAkB,UAAO,EAAE,SAAS,EAAE,SAAS;AACjD,CAAC;AAIM,IAAM,0BAA4B,UAAO;AAAA,EAC9C,iBAAmB,UAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS;AACpD,CAAC;;;ACnBD,YAAYC,QAAO;AAEZ,IAAM,mBAAqB,UAAO;AAAA,EACvC,SAAW,SAAQ,UAAO,CAAC,EAAE,IAAI,CAAC;AAAA,EAClC,sBAAwB,UAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EACvD,yBAA2B,UAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9D,sBAAwB,UAAO,EAAE,SAAS,EAAE,SAAS;AACvD,CAAC;;;ACPD,YAAYC,QAAO;AAEnB,IAAM,oBAAsB,UAAO;AAAA,EACjC,MAAQ,WAAQ,MAAM;AAAA,EACtB,YAAc,UAAO;AAAA,EACrB,UAAY,UAAO,EAAE,SAAS;AAChC,CAAC;AAED,IAAM,uBAAyB,UAAO;AAAA,EACpC,MAAQ,WAAQ,SAAS;AAAA,EACzB,MAAQ,UAAO,EAAE,WAAW,GAAG;AAAA,EAC/B,QAAU,QAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,SAAS;AAC3C,CAAC;AAED,IAAM,qBAAuB,UAAO;AAAA,EAClC,MAAQ,WAAQ,OAAO;AAAA,EACvB,QAAU,UAAO;AAAA,EACjB,OAAS,UAAO;AAClB,CAAC;AAED,IAAM,mBAAqB,UAAO,EAAE,MAAQ,WAAQ,KAAK,EAAE,CAAC;AAE5D,IAAM,sBAAwB,UAAO,EAAE,MAAQ,WAAQ,QAAQ,EAAE,CAAC;AAE3D,IAAM,sBAAwB,sBAAmB,QAAQ;AAAA,EAC9D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;;;AHnBD,IAAM,sBAAwB,QAAK,CAAC,OAAO,UAAU,MAAM,CAAC;AAE5D,IAAM,iBAAmB,QAAK,CAAC,UAAU,SAAS,QAAQ,QAAQ,OAAO,CAAC;AAEnE,IAAM,wBACV,UAAO;AAAA,EACN,MAAQ,UAAO,EAAE,IAAI,CAAC;AAAA,EACtB,OAAS,UAAO,EAAE,IAAI,CAAC;AAAA,EACvB,cAAgB,UAAO,EAAE,IAAI,CAAC;AAAA,EAC9B,aAAe,UAAO,EAAE,SAAS;AAAA,EACjC,QAAU,SAAQ,UAAO,CAAC,EAAE,SAAS;AAAA,EACrC,aAAe,UAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC/C,0BAA4B,WAAQ,EAAE,SAAS;AAAA,EAC/C,iBAAmB,UAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,eAAe,oBAAoB,SAAS;AAAA,EAC5C,UAAU,eAAe,SAAS;AACpC,CAAC,EACA,OAAO;AAMH,IAAM,4BACV,UAAO;AAAA,EACN,OAAO;AAAA,EACP,YAAc,SAAQ,UAAO,CAAC,EAAE,SAAS;AAAA,EACzC,SAAS;AAAA,EACT,UAAU,qBAAqB,SAAS;AAAA,EACxC,WAAW,qBAAqB,SAAS;AAAA,EACzC,SAAS,kBAAkB,SAAS;AAAA,EACpC,aAAa,wBAAwB,SAAS;AAAA,EAC9C,MAAM,iBAAiB,SAAS;AAAA,EAChC,eAAe,yBAAyB,SAAS;AAAA,EACjD,aAAa,kBAAkB,SAAS;AAAA,EACxC,SAAS,oBAAoB,SAAS;AACxC,CAAC,EACA,OAAO;;;AIhDV,YAAYC,QAAO;AAEZ,IAAM,2BACV,UAAO;AAAA,EACN,MAAQ,UAAO,EAAE,IAAI,CAAC;AAAA,EACtB,aAAe,UAAO,EAAE,SAAS;AACnC,CAAC,EACA,OAAO;;;ATIH,IAAM,iBAAiB;AACvB,IAAM,eAAe;AAI5B,IAAM,mBAAqB,WAAO;AAAA,EAChC,MAAQ,WAAO,EAAE,IAAI,CAAC;AAAA,EACtB,MAAQ,WAAO,EAAE,IAAI,CAAC;AAAA,EACtB,SAAW,WAAO;AACpB,CAAC;AAED,IAAM,uBAAyB,WAAO;AAAA,EACpC,MAAQ,WAAO,EAAE,IAAI,CAAC;AAAA,EACtB,MAAQ,WAAO,EAAE,IAAI,CAAC;AACxB,CAAC;AAED,IAAM,mBAAqB,WAAO;AAAA,EAChC,MAAQ,WAAO,EAAE,IAAI,CAAC;AAAA,EACtB,YAAc,WAAO,EAAE,IAAI,CAAC;AAAA,EAC5B,QAAQ;AACV,CAAC;AAEM,IAAM,wBAA0B,WAAO;AAAA,EAC5C,QAAU,UAAM,gBAAgB;AAAA,EAChC,QAAU,UAAM,gBAAgB;AAAA,EAChC,YAAc,UAAM,oBAAoB;AAC1C,CAAC;AASM,IAAM,iBAAiB,MAAe,QAAQ,IAAI,cAAc,SAAS,KAAK,MAAM;AAI3F,IAAM,wBAAwB,CAC5B,UAEA,SAAS,QACT,OAAO,UAAU,YAChB,MAAkC,WAAW,mBAC9C,YAAY;AAOP,IAAM,iBAAiB,OAAO,gBAAoD;AACvF,QAAM,gBAAgBC,MAAK,KAAK,aAAa,QAAQ,QAAQ;AAC7D,QAAM,gBAAgBC,IAAG,WAAW,aAAa,KAAKA,IAAG,SAAS,aAAa,EAAE,YAAY;AAC7F,QAAM,YAAY,gBAAgB,gBAAgBD,MAAK,KAAK,aAAa,QAAQ;AACjF,QAAM,kBAAkB,gBAAgB,gBAAgB;AAExD,MAAI,CAACC,IAAG,WAAW,SAAS,KAAK,CAACA,IAAG,SAAS,SAAS,EAAE,YAAY,GAAG;AACtE,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,aAAa,eAAe;AAClC,QAAM,QAAQA,IACX,YAAY,SAAS,EACrB,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK,KAAK,EAAE,SAAS,MAAM,KAAM,cAAc,EAAE,SAAS,KAAK,CAAE,EAC1F,KAAK;AAER,QAAM,OAAO,oBAAI,IAA6B;AAE9C,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAWD,MAAK,KAAK,WAAW,IAAI;AAC1C,QAAI;AACF,YAAM,MAAO,MAAM,OAAO,cAAc,QAAQ,EAAE;AAClD,YAAM,WAAW,IAAI;AACrB,UAAI,sBAAsB,QAAQ,KAAK,CAAC,KAAK,IAAI,SAAS,OAAO,MAAM,IAAI,GAAG;AAC5E,aAAK,IAAI,SAAS,OAAO,MAAM,MAAM;AAAA,UACnC,QAAQ,SAAS;AAAA,UACjB,YAAY,GAAG,eAAe,IAAI,IAAI;AAAA,QACxC,CAAC;AAAA,MACH;AAAA,IACF,SAAS,KAAK;AACZ;AAAA,QACE,YAAY,eAAe,IAAI,IAAI,KAAK,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,MAC1F;AAAA,IACF;AAAA,EACF;AAEA,SAAO,CAAC,GAAG,KAAK,OAAO,CAAC;AAC1B;AAIA,IAAM,iBAAiB,MAAM;AAE7B,IAAM,iBAAiB,CAAC,gBAAmD;AACzE,QAAM,YAAYA,MAAK,KAAK,aAAa,QAAQ;AAEjD,MAAI,CAACC,IAAG,WAAW,SAAS,KAAK,CAACA,IAAG,SAAS,SAAS,EAAE,YAAY,GAAG;AACtE,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,QAAQA,IAAG,YAAY,SAAS,EAAE,KAAK;AAE7C,QAAM,SAAoC,CAAC;AAE3C,aAAW,QAAQ,OAAO;AACxB,QAAI,CAAC,KAAK,SAAS,KAAK,GAAG;AACzB,WAAK,mBAAmB,IAAI,0CAA0C;AACtE;AAAA,IACF;AAEA,UAAM,WAAW,KAAK,QAAQ,SAAS,EAAE;AACzC,QAAI,CAAC,iBAAiB,QAAQ,GAAG;AAC/B;AAAA,QACE,mBAAmB,IAAI;AAAA,MACzB;AACA;AAAA,IACF;AAEA,UAAM,WAAWD,MAAK,KAAK,WAAW,IAAI;AAC1C,UAAM,OAAOC,IAAG,SAAS,QAAQ;AACjC,QAAI,KAAK,OAAO,gBAAgB;AAC9B,WAAK,mBAAmB,IAAI,aAAa,cAAc,cAAc;AACrE;AAAA,IACF;AAEA,UAAM,UAAUA,IAAG,aAAa,UAAU,OAAO;AACjD,WAAO,KAAK,EAAE,MAAM,MAAM,MAAM,UAAU,IAAI,IAAI,QAAQ,CAAC;AAAA,EAC7D;AAEA,SAAO;AACT;AAIA,IAAM,qBAAqB,CAAC,gBAAuD;AACjF,QAAM,oBAAoBD,MAAK,KAAK,aAAa,QAAQ,YAAY;AACrE,QAAM,oBACJC,IAAG,WAAW,iBAAiB,KAAKA,IAAG,SAAS,iBAAiB,EAAE,YAAY;AACjF,QAAM,gBAAgB,oBAClB,oBACAD,MAAK,KAAK,aAAa,YAAY;AACvC,QAAM,sBAAsB,oBAAoB,oBAAoB;AAEpE,MAAI,CAACC,IAAG,WAAW,aAAa,KAAK,CAACA,IAAG,SAAS,aAAa,EAAE,YAAY,GAAG;AAC9E,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,UAAUA,IAAG,YAAY,eAAe,EAAE,eAAe,KAAK,CAAC;AACrE,QAAM,aAA4C,CAAC;AAEnD,aAAW,SAAS,SAAS;AAC3B,QAAI,CAAC,MAAM,YAAY,EAAG;AAE1B,UAAM,OAAO,MAAM;AACnB,QAAI,CAAC,kBAAkB,IAAI,GAAG;AAC5B;AAAA,QACE,YAAY,mBAAmB,IAAI,IAAI;AAAA,MACzC;AACA;AAAA,IACF;AAEA,UAAM,UAAUD,MAAK,KAAK,eAAe,IAAI;AAC7C,UAAM,iBAAiBC,IAAG,WAAWD,MAAK,KAAK,SAAS,cAAc,CAAC;AACvE,UAAM,gBAAgBC,IAAG,WAAWD,MAAK,KAAK,SAAS,YAAY,CAAC;AACpE,UAAM,aAAaC,IAAG,WAAWD,MAAK,KAAK,SAAS,UAAU,CAAC;AAC/D,UAAM,cAAcC,IAAG,WAAWD,MAAK,KAAK,SAAS,WAAW,CAAC;AACjE,UAAM,aAAaC,IAAG,WAAWD,MAAK,KAAK,SAAS,UAAU,CAAC;AAE/D,QAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,cAAc,CAAC,eAAe,CAAC,YAAY;AACnF;AAAA,IACF;AAEA,eAAW,KAAK,EAAE,MAAM,MAAM,GAAG,mBAAmB,IAAI,IAAI,IAAI,CAAC;AAAA,EACnE;AAEA,SAAO,WAAW,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAC/D;AAIO,IAAM,kBAAkB,OAAO,gBAAkD;AACtF,QAAM,aAAa,MAAM,eAAe,WAAW;AAEnD,QAAM,SAAoC,CAAC;AAC3C,aAAW,EAAE,QAAQ,WAAW,KAAK,YAAY;AAC/C,UAAM,OAAO,OAAO,MAAM;AAC1B,QAAI,CAAC,kBAAkB,IAAI,GAAG;AAC5B,YAAM,IAAI,MAAM,wBAAwB,IAAI,uBAAuB,iBAAiB,EAAE;AAAA,IACxF;AACA,WAAO,KAAK,EAAE,MAAM,YAAY,OAAO,CAAC;AAAA,EAC1C;AAEA,QAAM,SAAS,eAAe,WAAW;AACzC,QAAM,aAAa,mBAAmB,WAAW;AAEjD,SAAO,EAAE,QAAQ,QAAQ,WAAW;AACtC;AAKO,IAAM,eAAe,CAAC,aAAoC;AAC/D,UAAQ,OAAO,MAAM,GAAG,cAAc;AAAA,CAAI;AAC1C,UAAQ,OAAO,MAAM,KAAK,UAAU,QAAQ,CAAC;AAC7C,UAAQ,OAAO,MAAM;AAAA,EAAK,YAAY;AAAA,CAAI;AAC5C;;;AUvNO,IAAM,OAAO,OAAO,OAAe,UAA4C;AACpF,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,MAAI,MAAM,WAAW,EAAG,QAAO,MAAM,CAAC,KAAK;AAE3C,QAAM,EAAE,OAAO,OAAO,IAAI;AAC1B,MAAI,CAAC,MAAM,MAAO,QAAO;AAEzB,MAAI,SAAS;AAEb,QAAM,SAAS,MAAY;AAEzB,WAAO,MAAM,KAAK,IAAI,KAAK,CAAC;AAAA,CAAI;AAChC,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,YAAM,SAAS,MAAM,SAAS,KAAK,QAAG,IAAI;AAC1C,YAAM,OAAO,MAAM,CAAC,KAAK;AACzB,YAAM,OAAO,MAAM,SAAS,KAAK,IAAI,IAAI,IAAI,IAAI;AACjD,aAAO,MAAM,KAAK,MAAM,IAAI,IAAI;AAAA,CAAI;AAAA,IACtC;AAAA,EACF;AAEA,QAAM,QAAQ,MAAY;AAExB,UAAM,QAAQ,MAAM,SAAS;AAC7B,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,aAAO,MAAM,gBAAgB;AAAA,IAC/B;AAAA,EACF;AAEA,QAAM,WAAW,IAAI;AACrB,QAAM,OAAO;AAEb,SAAO;AAEP,SAAO,IAAI,QAAuB,CAAC,YAAY;AAC7C,UAAM,SAAS,CAAC,SAAuB;AACrC,YAAM,MAAM,KAAK,SAAS;AAE1B,UAAI,QAAQ,YAAY,QAAQ,KAAK;AAEnC,cAAM;AACN,kBAAU,SAAS,IAAI,MAAM,UAAU,MAAM;AAC7C,eAAO;AAAA,MACT,WAAW,QAAQ,YAAY,QAAQ,KAAK;AAE1C,cAAM;AACN,kBAAU,SAAS,KAAK,MAAM;AAC9B,eAAO;AAAA,MACT,WAAW,QAAQ,QAAQ,QAAQ,MAAM;AAEvC,gBAAQ;AACR,cAAM;AACN,gBAAQ,MAAM,MAAM,KAAK,IAAI;AAAA,MAC/B,WAAW,QAAQ,OAAU,QAAQ,UAAU,QAAQ,KAAK;AAE1D,gBAAQ;AACR,cAAM;AACN,gBAAQ,IAAI;AAAA,MACd;AAAA,IACF;AAEA,UAAM,UAAU,MAAY;AAC1B,YAAM,eAAe,QAAQ,MAAM;AACnC,YAAM,WAAW,KAAK;AACtB,YAAM,MAAM;AAAA,IACd;AAEA,UAAM,GAAG,QAAQ,MAAM;AAAA,EACzB,CAAC;AACH;;;ACuHA,YAAYE,SAAO;AAEnB,IAAM,kBAAoB,WAAS,WAAO,GAAK,YAAQ,CAAC;AAEjD,IAAM,uBACV,WAAO;AAAA,EACN,IAAM,WAAO;AAAA,EACb,MAAQ,WAAO;AAAA,EACf,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAW,WAAS,WAAO,GAAG,eAAe,EAAE,SAAS;AAC1D,CAAC,EACA,YAAY;AAEf,IAAM,uBACH,WAAO;AAAA,EACN,MAAQ,WAAO;AAAA,EACf,MAAQ,WAAO;AAAA,EACf,aAAe,WAAO,EAAE,SAAS;AACnC,CAAC,EACA,YAAY;AAER,IAAM,uBACV,WAAO;AAAA,EACN,MAAQ,WAAO;AAAA,EACf,QAAQ;AAAA,EACR,SAAW,UAAM,oBAAoB;AACvC,CAAC,EACA,YAAY;AAEf,IAAM,yBACH,WAAO;AAAA,EACN,MAAQ,WAAO;AAAA,EACf,aAAe,WAAO;AAAA,EACtB,YAAY;AACd,CAAC,EACA,YAAY;AAER,IAAM,2BACV,WAAO;AAAA,EACN,IAAM,WAAO;AAAA,EACb,OAAS,UAAM,sBAAsB;AACvC,CAAC,EACA,YAAY;AAER,IAAM,uBACV,WAAO;AAAA,EACN,IAAM,WAAO;AAAA,EACb,MAAQ,WAAO;AAAA,EACf,aAAe,WAAO,EAAE,SAAS;AACnC,CAAC,EACA,YAAY;AAEf,IAAM,+BACH,WAAO;AAAA,EACN,MAAQ,WAAO;AAAA,EACf,aAAe,WAAO;AAAA,EACtB,QAAQ;AAAA,EACR,SAAS;AACX,CAAC,EACA,YAAY;AAER,IAAM,0BACV,WAAO;AAAA,EACN,UAAY,WAAO;AAAA,EACnB,SAAW,UAAM,4BAA4B;AAC/C,CAAC,EACA,YAAY;;;AhB7Of,IAAM,WAAW,oBAAI,IAAI,CAAC,SAAS,YAAY,UAAU,YAAY,QAAQ,KAAK,CAAC;AAQ5E,IAAM,YAAY,CAAC,SAA+B;AACvD,QAAM,UAAU,KAAK,CAAC;AACtB,MAAI,CAAC,WAAW,YAAY,YAAY,CAAC,SAAS,IAAI,OAAO,GAAG;AAC9D,WAAO,EAAE,SAAS,QAAQ,YAAY,CAAC,GAAG,OAAO,CAAC,EAAE;AAAA,EACtD;AAEA,QAAM,gBAAgB,oBAAI,IAAI,CAAC,SAAS,MAAM,CAAC;AAC/C,QAAM,aAAuB,CAAC;AAC9B,QAAM,QAAgC,CAAC;AACvC,WAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,UAAM,MAAM,KAAK,CAAC;AAClB,QAAI,KAAK,WAAW,IAAI,GAAG;AACzB,YAAM,OAAO,IAAI,MAAM,CAAC;AACxB,UAAI,cAAc,IAAI,IAAI,GAAG;AAC3B,cAAM,IAAI,IAAI;AAAA,MAChB,OAAO;AACL,cAAM,OAAO,KAAK,EAAE,CAAC;AACrB,YAAI,SAAS,QAAW;AACtB,gBAAM,IAAI,IAAI;AAAA,QAChB;AAAA,MACF;AAAA,IACF,WAAW,KAAK;AACd,iBAAW,KAAK,GAAG;AAAA,IACrB;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,YAAY,MAAM;AACtC;AAeO,IAAM,aAAa,OAAO,QAAoB,SAAmC;AACtF,UAAQ,OAAO,SAAS;AAAA,IACtB,KAAK;AACH,YAAM,YAAY,QAAQ,IAAI;AAC9B,aAAO;AAAA,IACT,KAAK;AACH,aAAO,eAAe,QAAQ,IAAI;AAAA,IACpC,KAAK;AACH,aAAO,UAAU,QAAQ,IAAI;AAAA,IAC/B,KAAK;AACH,aAAO,eAAe,QAAQ,IAAI;AAAA,IACpC,KAAK;AACH,aAAO,WAAW,QAAQ,IAAI;AAAA,IAChC,KAAK;AACH,mBAAa,IAAI;AACjB,aAAO;AAAA,IACT,KAAK;AACH,gBAAU,IAAI;AACd,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEA,IAAM,cAAc,OAAO,QAAoB,SAAiC;AAC9E,QAAM,MAAM,OAAO,MAAM,OAAQ,MAAM,KAAK,OAAO,gBAAgB;AACnE,QAAM,MAAM,OAAO,MAAM,OAAQ,MAAM,KAAK,OAAO,WAAW;AAE9D,MAAI,CAAC,OAAO,CAAC,KAAK;AAChB,SAAK,IAAI,2CAA2C;AACpD;AAAA,EACF;AAEA,OAAK,gBAAgB,EAAE,SAAS,KAAK,QAAQ,IAAI,CAAC;AAClD,OAAK,IAAI,mCAAmC,GAAG,EAAE;AACnD;AAIA,IAAM,oBAAkC;AAAA,EACtC,QAAQ,CAAC;AAAA,EACT,SAAS,CAAC;AAAA,EACV,YAAY,CAAC;AAAA,EACb,WAAW,CAAC;AAAA,EACZ,QAAQ,CAAC;AACX;AAEA,IAAM,qBAAqB,OACzB,OACA,SAC0B;AAC1B,QAAM,UAAU,EAAE,eAAe,UAAU,MAAM,MAAM,GAAG;AAC1D,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,UAAU,WAAW,MAAM,WAAW,MAAM,GAAG,GAAM;AAE3D,MAAI;AACF,UAAM,YAAY,CAAC,UAAU,WAAW,cAAc,aAAa,QAAQ;AAC3E,UAAM,YAAY,MAAM,QAAQ;AAAA,MAC9B,UAAU;AAAA,QAAI,CAAC,OACb,KACG,MAAM,GAAG,MAAM,OAAO,kBAAkB,EAAE,IAAI,EAAE,SAAS,QAAQ,WAAW,OAAO,CAAC,EACpF,KAAK,OAAO,QAAQ;AACnB,cAAI,CAAC,IAAI,GAAI,QAAO;AAEpB,gBAAM,OAAgB,MAAM,IAAI,KAAK;AACrC,UAAC,IAA0C,YAAY;AACvD,iBAAO;AAAA,QACT,CAAC,EACA,MAAM,MAAM,IAAI;AAAA,MACrB;AAAA,IACF;AAEA,UAAM,CAAC,WAAW,YAAY,eAAe,cAAc,SAAS,IAAI;AAExE,UAAM,YAAY,UAAU,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;AAC/C,QAAI,WAAW;AACb,WAAK,+BAA+B,MAAM,OAAO,2CAA2C;AAC5F,aAAO;AAAA,IACT;AAIA,UAAM,SAAS,kBAAkB,WAAa,UAAM,oBAAoB,GAAG,QAAQ;AACnF,UAAM,UAAU,kBAAkB,YAAc,UAAM,oBAAoB,GAAG,SAAS;AACtF,UAAM,aAAa;AAAA,MACjB;AAAA,MACE,UAAM,wBAAwB;AAAA,MAChC;AAAA,IACF;AACA,UAAM,YAAY;AAAA,MAChB;AAAA,MACE,UAAM,uBAAuB;AAAA,MAC/B;AAAA,IACF;AACA,UAAM,SAAS,kBAAkB,WAAa,UAAM,oBAAoB,GAAG,QAAQ;AAEnF,WAAO,EAAE,QAAQ,SAAS,YAAY,WAAW,OAAO;AAAA,EAC1D,UAAE;AACA,iBAAa,OAAO;AAAA,EACtB;AACF;AAMA,IAAM,oBAAoB,CACxB,KACA,WACA,iBACQ;AACR,MAAI,CAAC,KAAK,GAAI,QAAO,CAAC;AACtB,QAAM,OAAQ,IAA0C;AACxD,QAAM,SAAS,UAAU,UAAU,IAAI;AACvC,MAAI,CAAC,OAAO,SAAS;AACnB,UAAM,IAAI;AAAA,MACR,8BAA8B,YAAY,cAAgB,kBAAc,OAAO,KAAK,CAAC;AAAA,IACvF;AAAA,EACF;AACA,SAAO,OAAO;AAChB;AAKA,IAAM,sBAAsB,CAAC,OAAwB,WAAuC;AAC1F,QAAM,iBAAiB,IAAI,IAAI,OAAO,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAC7D,QAAM,qBAAqB,IAAI,IAAI,OAAO,WAAW,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AACrE,QAAM,iBAAiB,IAAI,IAAI,OAAO,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAI7D,QAAM,cAA6B,MAAM,OACtC,OAAO,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,IAAI,CAAC,EACzC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE;AAEnE,QAAM,cAA6B,MAAM,OACtC,OAAO,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,IAAI,CAAC,EACzC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,EAAE,KAAK,EAAE;AAE5C,QAAM,kBAAqC,MAAM,WAC9C,OAAO,CAAC,MAAM,CAAC,mBAAmB,IAAI,EAAE,IAAI,CAAC,EAC7C,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,EAAE,EAAE;AAEzC,SAAO;AAAA,IACL,QAAQ,CAAC,GAAG,OAAO,QAAQ,GAAG,WAAW;AAAA,IACzC,SAAS,OAAO;AAAA,IAChB,YAAY,CAAC,GAAG,OAAO,YAAY,GAAG,eAAe;AAAA,IACrD,WAAW,OAAO;AAAA,IAClB,QAAQ,CAAC,GAAG,OAAO,QAAQ,GAAG,WAAW;AAAA,EAC3C;AACF;AAIA,IAAM,iBAAiB,OAAO,QAAoB,SAAmC;AACnF,QAAM,SAAS,OAAO,MAAM,OAAO,QAAQ,IAAI;AAG/C,MAAI;AACJ,MAAI;AACF,eAAW,MAAM,KAAK,gBAAgB,MAAM;AAAA,EAC9C,SAAS,KAAK;AACZ,SAAK,IAAI,8BAA8B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AACzF,WAAO;AAAA,EACT;AAGA,QAAM,QAAQ,KAAK,gBAAgB;AACnC,MAAI;AACJ,MAAI,OAAO,UAAU,OAAO,SAAS;AACnC,QAAI;AACF,eAAS,MAAM,mBAAmB,OAAO,IAAI;AAAA,IAC/C,SAAS,KAAK;AACZ,WAAK;AAAA,QACH,kCAAkC,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC;AAAA,MACpF;AACA,aAAO;AAAA,IACT;AAAA,EACF,OAAO;AACL;AAAA,MACE;AAAA,IACF;AACA,aAAS;AAAA,EACX;AAGA,QAAM,SAAS,oBAAoB,UAAU,MAAM;AAGnD,MAAI,WAAW,OAAO,OAAO;AAC3B,UAAM,EAAE,aAAa,cAAc,OAAO,IAAI,MAAM,OAAO,IAAS;AACpE,UAAM,EAAE,KAAK,IAAI,MAAM,OAAO,MAAW;AACzC,UAAM,EAAE,OAAO,IAAI,MAAM,OAAO,IAAS;AAEzC,UAAM,UAAU,YAAY,KAAK,OAAO,GAAG,eAAe,CAAC;AAC3D,QAAI;AACF,WAAK,cAAc,QAAQ,OAAO;AAAA,IACpC,SAAS,KAAK;AACZ,aAAO,SAAS,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAChD,WAAK,IAAI,2BAA2B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AACtF,aAAO;AAAA,IACT;AAEA,QAAI;AACF,YAAM,QAAQ;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,UAAI,QAAQ;AAEZ,iBAAW,QAAQ,OAAO;AACxB,cAAM,eAAe,KAAK,QAAQ,cAAc,IAAI;AACpD,cAAM,gBAAgB,KAAK,SAAS,cAAc,IAAI;AACtD,cAAM,WAAW,aAAa,cAAc,YAAY;AACxD,cAAM,YAAY,aAAa,cAAc,aAAa;AAC1D,YAAI,aAAa,WAAW;AAC1B,eAAK,IAAI,qCAAqC,IAAI,EAAE;AACpD,kBAAQ;AAAA,QACV;AAAA,MACF;AAEA,UAAI,OAAO;AACT,aAAK,IAAI,kDAAkD;AAC3D,eAAO;AAAA,MACT;AACA,WAAK,IAAI,yBAAyB;AAClC,aAAO;AAAA,IACT,UAAE;AACA,aAAO,SAAS,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAAA,IAClD;AAAA,EACF;AAEA,MAAI;AACF,SAAK,cAAc,QAAQ,MAAM;AAAA,EACnC,SAAS,KAAK;AACZ,SAAK,IAAI,2BAA2B,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,EAAE;AACtF,WAAO;AAAA,EACT;AAGA,QAAM,aAAa,SAAS,OAAO,SAAS,SAAS,OAAO,SAAS,SAAS,WAAW;AACzF,QAAM,cAAc,OAAO,OAAO,SAAS,OAAO,WAAW,SAAS,OAAO,OAAO;AACpF,OAAK,IAAI,uBAAuB,UAAU,YAAY,WAAW,mBAAmB;AACpF,SAAO;AACT;AAEA,IAAM,eAAe,CACnB,cACA,aACkB;AAClB,MAAI;AACF,WAAO,aAAa,UAAU,OAAO;AAAA,EACvC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAGO,IAAM,oBAAoB,CAAC,SAAiB,SACjD;AAAA,EACE;AAAA,EACA,+BAA+B,OAAO;AAAA,EACtC;AAAA,EACA;AAAA,EACA,iCAAiC,KAAK,UAAU,IAAI,CAAC;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,IAAI;AAEb,IAAM,qBAAqB,YAA+B;AACxD,QAAM,EAAE,aAAa,WAAW,IAAI,MAAM,OAAO,IAAS;AAC1D,QAAM,YAAY;AAClB,MAAI,CAAC,WAAW,SAAS,EAAG,QAAO,CAAC;AACpC,SAAO,YAAY,SAAS,EACzB,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK,KAAK,EAAE,SAAS,KAAK,KAAK,EAAE,SAAS,MAAM,CAAC,EAC1E,KAAK;AACV;AAEA,IAAM,YAAY,OAAO,QAAoB,SAAmC;AAC9E,MAAI,OAAO,OAAO,WAAW,CAAC;AAE9B,MAAI,CAAC,MAAM;AACT,UAAM,SAAS,MAAM,mBAAmB;AACxC,QAAI,OAAO,WAAW,GAAG;AACvB,WAAK,IAAI,gFAAgF;AACzF,aAAO;AAAA,IACT;AACA,QAAI,OAAO,WAAW,GAAG;AACvB,aAAO,OAAO,CAAC;AAAA,IACjB,OAAO;AACL,YAAM,WAAW,MAAM,KAAK,oBAAoB,MAAM;AACtD,UAAI,CAAC,SAAU,QAAO;AACtB,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,CAAC,KAAM,QAAO;AAElB,QAAM,OAAO,KAAK,SAAS,GAAG,IAAI,OAAO,UAAU,IAAI;AAEvD,QAAM,EAAE,MAAM,IAAI,MAAM,OAAO,eAAoB;AACnD,QAAM,EAAE,QAAQ,IAAI,MAAM,OAAO,MAAW;AAC5C,QAAM,EAAE,eAAAC,eAAc,IAAI,MAAM,OAAO,KAAU;AAEjD,QAAM,UAAUA,eAAc,QAAQ,IAAI,CAAC,EAAE;AAC7C,QAAM,YAAY,kBAAkB,SAAS,IAAI;AAEjD,QAAM,QAAQ,MAAM,OAAO,CAAC,MAAM,SAAS,GAAG;AAAA,IAC5C,OAAO;AAAA,IACP,KAAK,QAAQ,IAAI;AAAA,EACnB,CAAC;AAED,SAAO,IAAI,QAAQ,CAACC,aAAY;AAC9B,UAAM,GAAG,QAAQ,CAACC,UAASD,SAAQC,SAAQ,CAAC,CAAC;AAAA,EAC/C,CAAC;AACH;AAEA,IAAM,iBAAiB,OAAO,QAAoB,SAAmC;AACnF,QAAM,MAAM,OAAO,MAAM,OAAO,QAAQ,IAAI;AAC5C,QAAM,WAAW,MAAM,KAAK,gBAAgB,GAAG;AAE/C,QAAM,QAAQ,SAAS,OAAO,SAAS,SAAS,OAAO,SAAS,SAAS,WAAW;AACpF,MAAI,UAAU,GAAG;AACf,SAAK,IAAI,oEAAoE;AAC7E,WAAO;AAAA,EACT;AAEA,MAAI,UAAU,OAAO,OAAO;AAC1B,iBAAa,QAAQ;AAAA,EACvB,OAAO;AACL,SAAK,IAAI,KAAK,UAAU,UAAU,MAAM,CAAC,CAAC;AAAA,EAC5C;AACA,SAAO;AACT;AAEA,IAAM,aAAa,OAAO,QAAoB,SAAmC;AAC/E,QAAM,OAAO,OAAO,MAAM,QAAS,MAAM,KAAK,OAAO,gBAAgB;AACrE,MAAI,CAAC,MAAM;AACT,SAAK,IAAI,kCAAkC;AAC3C,WAAO;AAAA,EACT;AAEA,QAAM,EAAE,eAAe,UAAU,IAAI,MAAM,OAAO,IAAS;AAC3D,QAAM,EAAE,KAAK,IAAI,MAAM,OAAO,MAAW;AAEzC,QAAM,OAAO,KAAK,QAAQ,IAAI,GAAG,IAAI;AACrC,YAAU,KAAK,MAAM,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AACnD,YAAU,KAAK,MAAM,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AACnD,YAAU,KAAK,MAAM,YAAY,GAAG,EAAE,WAAW,KAAK,CAAC;AAEvD;AAAA,IACE,KAAK,MAAM,cAAc;AAAA,IACzB,KAAK;AAAA,MACH;AAAA,QACE;AAAA,QACA,SAAS;AAAA,QACT,MAAM;AAAA,QACN,SAAS,EAAE,OAAO,MAAM;AAAA,QACxB,cAAc;AAAA,UACZ,aAAa;AAAA,UACb,uBAAuB;AAAA,QACzB;AAAA,QACA,iBAAiB;AAAA,UACf,YAAY;AAAA,QACd;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA;AAAA,IACE,KAAK,MAAM,eAAe;AAAA,IAC1B,KAAK;AAAA,MACH;AAAA,QACE,iBAAiB;AAAA,UACf,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,kBAAkB;AAAA,UAClB,mBAAmB;AAAA,UACnB,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,SAAS;AAAA,UACT,aAAa;AAAA,UACb,iBAAiB;AAAA,UACjB,cAAc;AAAA,QAChB;AAAA,QACA,SAAS,CAAC,UAAU,UAAU,YAAY;AAAA,MAC5C;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA;AAAA,IACE,KAAK,MAAM,UAAU,aAAa;AAAA,IAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWF;AAEA,gBAAc,KAAK,MAAM,YAAY,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,CAAkD;AAE1F,OAAK,IAAI,sBAAsB,IAAI,GAAG;AACtC,OAAK,IAAI;AAAA,OAAU,IAAI;AAAA;AAAA;AAAA;AAAA,CAAuD;AAC9E,SAAO;AACT;AAEA,IAAM,eAAe,CAAC,SAAwB;AAC5C,OAAK,iBAAiB;AACtB,OAAK,IAAI,sBAAsB;AACjC;AAEA,IAAM,YAAY,CAAC,SAAwB;AACzC,OAAK;AAAA,IACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BF,KAAK;AAAA,EACL;AACF;AAIA,IAAM,iBAAiB,OAAO,aAAsC;AAClE,QAAM,EAAE,gBAAgB,IAAI,MAAM,OAAO,UAAe;AACxD,QAAM,KAAK,gBAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,CAAC;AAC3E,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,OAAG,SAAS,UAAU,CAAC,WAAW;AAChC,SAAG,MAAM;AACT,cAAQ,MAAM;AAAA,IAChB,CAAC;AAAA,EACH,CAAC;AACH;AAEA,IAAM,OAAO,YAAY;AACvB,QAAM,SAAS,UAAU,QAAQ,KAAK,MAAM,CAAC,CAAC;AAC9C,QAAM,WAAW,MAAM,WAAW,QAAQ;AAAA,IACxC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,WAAW;AAAA,IAClB,QAAQ;AAAA,IACR,KAAK,QAAQ;AAAA,EACf,CAAC;AACD,MAAI,aAAa,EAAG,SAAQ,KAAK,QAAQ;AAC3C;AAEA,KAAK,KAAK;","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/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"]}
|
package/dist/index.cjs
CHANGED
|
@@ -252,7 +252,7 @@ var agentDefinitionSchema = z9.object({
|
|
|
252
252
|
var platformAgentConfigSchema = z9.object({
|
|
253
253
|
agent: agentDefinitionSchema,
|
|
254
254
|
connectors: z9.array(z9.string()).optional(),
|
|
255
|
-
|
|
255
|
+
triggers: z9.array(triggerConfigSchema),
|
|
256
256
|
identity: identityConfigSchema.optional(),
|
|
257
257
|
resources: resourceLimitsSchema.optional(),
|
|
258
258
|
retries: retryPolicySchema.optional(),
|