@kraken-ai/platform 0.0.2 → 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/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../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/agents/define.ts","../src/agents/define-connector.ts","../src/agents/define-skill.ts","../src/cli/discover.ts","../src/platform/http.ts","../src/platform/sse.ts","../src/platform/agent-handle.ts","../src/platform/agents.ts","../src/platform/data.ts","../src/platform/pipelines.ts","../src/platform/runs.ts","../src/platform/client.ts"],"sourcesContent":["// 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 type { ZodType } from \"zod\";\nimport { SecurityError } from \"./errors\";\nimport type { PlatformActions } from \"./types/action\";\nimport type { PlatformConnector } from \"./types/connector\";\nimport {\n type PlatformAgent,\n type PlatformAgentConfig,\n platformAgentConfigSchema,\n type TeamMember,\n} from \"./types/index\";\nimport type { ConnectorRef, SkillRef } from \"./types/refs\";\nimport type { PlatformSkill } from \"./types/skill\";\n\nconst FORBIDDEN_AGENT_KEYS = [\"tools\", \"team\", \"kernel\"] as const;\n\n/** Duck-type check for Agent instance (has `definition`, `name`, `run`). */\nconst isAgentInstance = (\n value: unknown,\n): value is {\n definition: Record<string, unknown>;\n name: string;\n run: (...args: unknown[]) => unknown;\n} =>\n value != null &&\n typeof value === \"object\" &&\n \"definition\" in value &&\n \"name\" in value &&\n \"run\" in value &&\n typeof (value as Record<string, unknown>).run === \"function\";\n\nconst assertNoInjection = (agent: unknown): void => {\n if (agent == null || typeof agent !== \"object\") return;\n if (isAgentInstance(agent)) return;\n\n for (const key of FORBIDDEN_AGENT_KEYS) {\n if (key in agent) {\n throw new SecurityError(\n `\"agent.${key}\" is not allowed in PlatformAgentConfig. ` +\n `Tools come from \"connectors\", team members from \"team.members\". ` +\n `All are platform-managed and injected via the governance gateway.`,\n );\n }\n }\n};\n\nconst isPlatformSkill = (v: unknown): v is PlatformSkill =>\n v != null && typeof v === \"object\" && (v as Record<string, unknown>).__type === \"PlatformSkill\";\n\nconst isPlatformConnector = (v: unknown): v is PlatformConnector =>\n v != null &&\n typeof v === \"object\" &&\n (v as Record<string, unknown>).__type === \"PlatformConnector\";\n\nconst isPlatformAgent = (v: unknown): v is PlatformAgent =>\n v != null && typeof v === \"object\" && (v as Record<string, unknown>).__type === \"PlatformAgent\";\n\n// PlatformSkill → extract name; SkillId (string literal after `kraken generate`) → passthrough.\nconst normalizeSkillRef = (ref: SkillRef): string => (isPlatformSkill(ref) ? ref.name : ref);\n\n// When ConnectorId is the error-message type (before `kraken generate`),\n// only the PlatformConnector branch is reachable in practice.\nconst normalizeConnectorRef = (ref: ConnectorRef): string =>\n isPlatformConnector(ref) ? ref.name : ref;\n\nconst normalizeTeamMember = (ref: TeamMember): string =>\n isPlatformAgent(ref) ? ref.config.agent.name : ref;\n\ntype AgentInputField =\n | (Omit<PlatformAgentConfig[\"agent\"], \"skills\"> & { outputSchema?: ZodType; skills?: SkillRef[] })\n | { definition: Record<string, unknown>; name: string; run: (...args: unknown[]) => unknown };\n\nconst isPlatformActions = (v: unknown): v is PlatformActions =>\n v != null && typeof v === \"object\" && (v as Record<string, unknown>).__type === \"PlatformActions\";\n\ninterface PlatformAgentInputConfig\n extends Omit<PlatformAgentConfig, \"agent\" | \"connectors\" | \"team\" | \"actions\"> {\n agent: AgentInputField;\n connectors?: ConnectorRef[];\n team?: Omit<PlatformAgentConfig[\"team\"] & object, \"members\"> & { members: TeamMember[] };\n actions?: PlatformActions;\n}\n\nexport const definePlatformAgent = <TOutput extends ZodType = ZodType>(\n config: PlatformAgentInputConfig & { agent: AgentInputField & { outputSchema?: TOutput } },\n): PlatformAgent & { outputSchema?: TOutput } => {\n assertNoInjection(config.agent);\n\n let agentDef: Record<string, unknown>;\n let runtime: unknown;\n let outputSchema: TOutput | undefined;\n\n if (isAgentInstance(config.agent)) {\n agentDef = config.agent.definition;\n runtime = config.agent;\n } else {\n const {\n outputSchema: os,\n skills: rawSkills,\n ...rest\n } = config.agent as PlatformAgentConfig[\"agent\"] & {\n outputSchema?: TOutput;\n skills?: SkillRef[];\n };\n agentDef = {\n ...rest,\n skills: rawSkills?.map(normalizeSkillRef),\n };\n outputSchema = os;\n }\n\n const normalizedConnectors = config.connectors?.map(normalizeConnectorRef);\n const normalizedTeam = config.team\n ? { ...config.team, members: config.team.members.map(normalizeTeamMember) }\n : undefined;\n\n // Preserve PlatformAgent team members for dev mode delegation\n const teamAgents = config.team?.members.filter((m): m is PlatformAgent => isPlatformAgent(m));\n\n // Extract serializable actions config and preserve Zod schemas + handlers separately\n let actionsConfig: PlatformAgentConfig[\"actions\"];\n let actionZodSchemas: PlatformAgent[\"actionZodSchemas\"];\n let actionHandlers: PlatformAgent[\"actionHandlers\"];\n if (config.actions && isPlatformActions(config.actions)) {\n actionsConfig = config.actions.config;\n actionZodSchemas = config.actions.zodSchemas;\n const h = config.actions.handlers;\n actionHandlers = Object.keys(h).length > 0 ? h : undefined;\n }\n\n const parsed = platformAgentConfigSchema.parse({\n ...config,\n agent: agentDef,\n connectors: normalizedConnectors,\n team: normalizedTeam,\n actions: actionsConfig,\n });\n\n return {\n __type: \"PlatformAgent\" as const,\n config: parsed as PlatformAgentConfig,\n runtime,\n outputSchema,\n actionZodSchemas,\n actionHandlers,\n teamAgents: teamAgents && teamAgents.length > 0 ? teamAgents : undefined,\n };\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport type * as z from \"zod\";\nimport type { ConnectorDefinition, ConnectorToolDef, PlatformConnector } from \"./types/connector\";\n\n/**\n * Define a connector tool.\n *\n * Infers handler arg types from the `input` schema.\n */\nexport const defineTool = <T extends z.ZodType>(def: ConnectorToolDef<T>): ConnectorToolDef<T> =>\n def;\n\nexport const defineConnector = <const T extends ConnectorDefinition>(\n input: T,\n): PlatformConnector => {\n if (!input.name || input.name.length === 0) {\n throw new Error(\"Connector name must not be empty\");\n }\n\n const tools = input.tools ? Object.freeze({ ...input.tools }) : undefined;\n const resources = input.resources ? Object.freeze({ ...input.resources }) : undefined;\n const prompts = input.prompts ? Object.freeze({ ...input.prompts }) : undefined;\n\n return Object.freeze({\n __type: \"PlatformConnector\" as const,\n name: input.name,\n description: input.description,\n instructions: input.instructions,\n tools,\n resources,\n prompts,\n });\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport { type PlatformSkill, platformSkillInputSchema } from \"./types/skill\";\n\nexport const defineSkill = (input: { name: string; description?: string }): PlatformSkill => {\n const parsed = platformSkillInputSchema.parse(input);\n return Object.freeze({\n __type: \"PlatformSkill\" as const,\n name: parsed.name,\n description: parsed.description,\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 type { PlatformClientConfig } from \"./types\";\n\nexport class PlatformError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n ) {\n super(message);\n this.name = \"PlatformError\";\n }\n}\n\nexport class HttpClient {\n readonly baseUrlForStream: string;\n private readonly baseUrl: string;\n private readonly apiKey: string;\n\n constructor(config: PlatformClientConfig) {\n this.baseUrl = config.baseUrl.replace(/\\/+$/, \"\");\n this.baseUrlForStream = this.baseUrl;\n this.apiKey = config.apiKey;\n\n const isLocalhost = this.baseUrl.includes(\"localhost\") || this.baseUrl.includes(\"127.0.0.1\");\n if (this.baseUrl.startsWith(\"http://\") && !isLocalhost) {\n console.warn(\n \"[kraken-ai] WARNING: baseUrl does not use HTTPS. API keys will be sent in plaintext.\",\n );\n }\n }\n\n async get<T>(path: string, params?: Record<string, string>): Promise<T> {\n const url = this.buildUrl(path, params);\n const response = await fetch(url, {\n method: \"GET\",\n headers: this.authHeaders(),\n });\n return this.handleResponse<T>(response);\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n const response = await fetch(this.buildUrl(path), {\n method: \"POST\",\n headers: { ...this.authHeaders(), \"Content-Type\": \"application/json\" },\n body: body ? JSON.stringify(body) : undefined,\n });\n return this.handleResponse<T>(response);\n }\n\n async postStream(path: string, body: unknown, signal?: AbortSignal): Promise<Response> {\n const response = await fetch(this.buildUrl(path), {\n method: \"POST\",\n headers: {\n ...this.authHeaders(),\n \"Content-Type\": \"application/json\",\n Accept: \"text/event-stream\",\n },\n body: JSON.stringify(body),\n signal,\n });\n if (!response.ok) {\n const err = (await response.json().catch(() => ({ error: \"Unknown error\" }))) as {\n error: string;\n };\n throw new PlatformError(err.error ?? \"Unknown error\", response.status);\n }\n return response;\n }\n\n private buildUrl(path: string, params?: Record<string, string>): string {\n const url = `${this.baseUrl}${path}`;\n if (!params || Object.keys(params).length === 0) return url;\n const qs = new URLSearchParams(params).toString();\n return `${url}?${qs}`;\n }\n\n authHeaders(): Record<string, string> {\n return { Authorization: `Bearer ${this.apiKey}` };\n }\n\n private async handleResponse<T>(response: Response): Promise<T> {\n if (!response.ok) {\n const body = (await response.json().catch(() => ({ error: \"Unknown error\" }))) as {\n error: string;\n };\n throw new PlatformError(body.error ?? \"Unknown error\", response.status);\n }\n return response.json() as Promise<T>;\n }\n}\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport type { AgentEvent } from \"./types\";\n\nconst VALID_EVENT_TYPES = new Set([\n \"text\",\n \"tool_call\",\n \"tool_result\",\n \"thinking\",\n \"action\",\n \"done\",\n \"error\",\n]);\n\nexport async function* parseSSEStream(\n stream: ReadableStream<Uint8Array>,\n): AsyncGenerator<AgentEvent> {\n const decoder = new TextDecoder();\n const reader = stream.getReader();\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n const parts = buffer.split(\"\\n\\n\");\n // Last part is incomplete — keep it in buffer\n buffer = parts.pop() ?? \"\";\n\n for (const part of parts) {\n const event = parseBlock(part);\n if (event) yield event;\n }\n }\n\n // Process any remaining buffer\n if (buffer.trim()) {\n const event = parseBlock(buffer);\n if (event) yield event;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nconst parseBlock = (block: string): AgentEvent | null => {\n let eventType: string | null = null;\n let data: string | null = null;\n\n for (const line of block.split(\"\\n\")) {\n if (line.startsWith(\":\")) continue; // comment\n if (line.startsWith(\"event: \")) {\n eventType = line.slice(7).trim();\n } else if (line.startsWith(\"data: \")) {\n data = line.slice(6);\n }\n }\n\n if (!eventType || !data || !VALID_EVENT_TYPES.has(eventType)) return null;\n\n try {\n const parsed = JSON.parse(data) as Record<string, unknown>;\n return { type: eventType, ...parsed } as AgentEvent;\n } catch {\n return null;\n }\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport type { HttpClient } from \"./http\";\nimport { PlatformError } from \"./http\";\nimport { parseSSEStream } from \"./sse\";\nimport type { AgentEvent } from \"./types\";\n\n// --- Public types ---\n\nexport interface AgentRegistryEntry {\n input: unknown;\n output: unknown;\n actions: Record<string, unknown>;\n}\n\n/**\n * Augmentable agent registry — `kraken generate` populates this via\n * `declare module \"@kraken-ai/platform\" { interface AgentRegistry { ... } }`.\n * When populated, `client.agent(\"id\")` infers input/output/actions automatically.\n */\n// biome-ignore lint/complexity/noBannedTypes: must be an empty interface for module augmentation\nexport type AgentRegistry = {};\n\nexport interface GenerateOpts {\n signal?: AbortSignal;\n}\n\nexport interface GenerateResult<T extends AgentRegistryEntry> {\n readonly threadId: string;\n stream(): AsyncIterable<AgentEvent>;\n readonly result: Promise<T[\"output\"]>;\n}\n\n// --- Deferred promise helper ---\n\ninterface Deferred<T> {\n promise: Promise<T>;\n resolve: (value: T) => void;\n reject: (error: Error) => void;\n}\n\nconst deferred = <T>(): Deferred<T> => {\n let resolve: (value: T) => void;\n let reject: (error: Error) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n // biome-ignore lint/style/noNonNullAssertion: assigned synchronously in Promise constructor\n return { promise, resolve: resolve!, reject: reject! };\n};\n\n// --- AgentHandle ---\n\nexport class AgentHandle<T extends AgentRegistryEntry> {\n private readonly actionHandlers = new Map<string, (payload: unknown) => void | Promise<void>>();\n private threadId: string | undefined;\n\n constructor(\n private readonly http: HttpClient,\n private readonly agentId: string,\n opts?: { threadId?: string },\n ) {\n this.threadId = opts?.threadId;\n }\n\n onAction<K extends keyof T[\"actions\"] & string>(\n name: K,\n handler: (payload: T[\"actions\"][K]) => void | Promise<void>,\n ): void {\n this.actionHandlers.set(name, handler as (payload: unknown) => void | Promise<void>);\n }\n\n async generate(input: T[\"input\"], opts?: GenerateOpts): Promise<GenerateResult<T>> {\n if (!this.threadId) {\n const info = await this.http.post<{ id: string }>(`/api/v1/agents/${this.agentId}/threads`);\n this.threadId = info.id;\n }\n\n const response = await this.http.postStream(\n `/api/v1/agents/${this.agentId}/threads/${this.threadId}/messages`,\n { content: typeof input === \"string\" ? input : JSON.stringify(input) },\n opts?.signal,\n );\n\n if (!response.body) {\n throw new PlatformError(\"Response body is empty\", 0);\n }\n\n const rawStream = parseSSEStream(response.body);\n const {\n promise: resultPromise,\n resolve: resolveResult,\n reject: rejectResult,\n } = deferred<T[\"output\"]>();\n\n const actionHandlers = this.actionHandlers;\n const http = this.http;\n const agentId = this.agentId;\n const threadId = this.threadId;\n\n async function* streamWithDispatch(): AsyncGenerator<AgentEvent> {\n try {\n for await (const event of rawStream) {\n if (event.type === \"action\") {\n const handler = actionHandlers.get(event.name);\n if (handler) {\n await handler(event.payload);\n }\n void http\n .post(\n `/api/v1/agents/${agentId}/threads/${threadId}/actions/${event.actionExecutionId}/ack`,\n )\n .catch(() => {\n // Ack failure is non-fatal\n });\n }\n if (event.type === \"done\") {\n resolveResult((event as { output: unknown }).output as T[\"output\"]);\n }\n if (event.type === \"error\") {\n rejectResult(new PlatformError((event as { message: string }).message, 0));\n }\n yield event;\n }\n } catch (err) {\n rejectResult(err instanceof Error ? err : new Error(String(err)));\n throw err;\n }\n }\n\n let streamGenerator: AsyncGenerator<AgentEvent> | null = null;\n let streamStarted = false;\n\n const ensureStream = () => {\n if (!streamGenerator) {\n streamGenerator = streamWithDispatch();\n }\n return streamGenerator;\n };\n\n const backgroundConsume = async () => {\n if (streamStarted) return;\n streamStarted = true;\n const gen = ensureStream();\n for await (const _ of gen) {\n void _;\n }\n };\n\n const result: GenerateResult<T> = {\n threadId,\n stream() {\n streamStarted = true;\n return ensureStream();\n },\n get result() {\n void backgroundConsume();\n return resultPromise;\n },\n };\n\n return result;\n }\n}\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport type { HttpClient } from \"./http\";\nimport { PlatformError } from \"./http\";\nimport { parseSSEStream } from \"./sse\";\nimport type {\n AgentEvent,\n AgentInfo,\n PaginatedResponse,\n PaginationParams,\n ThreadInfo,\n ThreadMessage,\n} from \"./types\";\n\nexport class AgentThread {\n constructor(\n private readonly http: HttpClient,\n private readonly agentId: string,\n public readonly threadId: string,\n ) {}\n\n async sendMessage(\n content: string,\n opts?: { signal?: AbortSignal },\n ): Promise<AsyncIterable<AgentEvent>> {\n const response = await this.http.postStream(\n `/api/v1/agents/${this.agentId}/threads/${this.threadId}/messages`,\n { content },\n opts?.signal,\n );\n if (!response.body) {\n throw new PlatformError(\"Response body is empty\", 0);\n }\n return parseSSEStream(response.body);\n }\n\n async getMessages(params?: PaginationParams): Promise<PaginatedResponse<ThreadMessage>> {\n const qs = buildPaginationQuery(params);\n return this.http.get(`/api/v1/agents/${this.agentId}/threads/${this.threadId}/messages`, qs);\n }\n}\n\nexport class AgentsNamespace {\n constructor(private readonly http: HttpClient) {}\n\n async list(): Promise<AgentInfo[]> {\n const result = await this.http.get<{ data: AgentInfo[] }>(\"/api/v1/agents\");\n return result.data;\n }\n\n async createThread(agentId: string): Promise<AgentThread> {\n const info = await this.http.post<ThreadInfo>(`/api/v1/agents/${agentId}/threads`);\n return new AgentThread(this.http, agentId, info.id);\n }\n\n async getThread(agentId: string, threadId: string): Promise<AgentThread> {\n await this.http.get<ThreadInfo>(`/api/v1/agents/${agentId}/threads/${threadId}`);\n return new AgentThread(this.http, agentId, threadId);\n }\n\n async listThreads(\n agentId: string,\n params?: PaginationParams,\n ): Promise<PaginatedResponse<ThreadInfo>> {\n const qs = buildPaginationQuery(params);\n return this.http.get(`/api/v1/agents/${agentId}/threads`, qs);\n }\n}\n\nconst buildPaginationQuery = (params?: PaginationParams): Record<string, string> | undefined => {\n if (!params) return undefined;\n const qs: Record<string, string> = {};\n if (params.cursor) qs.cursor = params.cursor;\n if (params.limit != null) qs.limit = String(params.limit);\n return Object.keys(qs).length > 0 ? qs : undefined;\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport type { HttpClient } from \"./http\";\nimport type { PaginationParams, QueryInfo, QueryResult } from \"./types\";\n\nexport class DataNamespace {\n constructor(private readonly http: HttpClient) {}\n\n async list(): Promise<QueryInfo[]> {\n const result = await this.http.get<{ data: QueryInfo[] }>(\"/api/v1/data/queries\");\n return result.data;\n }\n\n async describe(queryName: string): Promise<QueryInfo> {\n return this.http.get(`/api/v1/data/queries/${queryName}`);\n }\n\n async query<TRow = Record<string, unknown>>(\n queryName: string,\n params?: Record<string, unknown>,\n pagination?: PaginationParams,\n ): Promise<QueryResult<TRow>> {\n return this.http.post(`/api/v1/data/queries/${queryName}/execute`, {\n params,\n ...pagination,\n });\n }\n}\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport * as z from \"zod\";\nimport type { HttpClient } from \"./http\";\n\ninterface QuerySchema<P extends z.ZodType, R extends z.ZodType> {\n params: P;\n returns: R;\n}\n\nexport class PipelinesNamespace {\n constructor(private readonly http: HttpClient) {}\n\n async query<P extends z.ZodType, R extends z.ZodType>(\n pipeline: string,\n queryName: string,\n schema: QuerySchema<P, R>,\n params: z.infer<P>,\n ): Promise<z.infer<R>[]> {\n const result = await this.http.post<{ rows: unknown[] }>(\n `/api/v1/pipelines/${encodeURIComponent(pipeline)}/queries/${encodeURIComponent(queryName)}`,\n params,\n );\n\n try {\n return z.array(schema.returns).parse(result.rows);\n } catch (e) {\n throw new Error(\n `Pipeline schema may have changed — run 'kraken generate' to update types.\\n\\nOriginal error: ${(e as Error).message}`,\n );\n }\n }\n}\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport type { HttpClient } from \"./http\";\nimport { PlatformError } from \"./http\";\nimport type { RunEvent, RunRecord, StartRunParams } from \"./types\";\n\nexport class RunsNamespace {\n constructor(private readonly http: HttpClient) {}\n\n async start(params: StartRunParams): Promise<{ runId: string }> {\n return this.http.post(\"/api/v1/runs\", params);\n }\n\n async get(runId: string): Promise<RunRecord> {\n return this.http.get(`/api/v1/runs/${runId}`);\n }\n\n async cancel(runId: string): Promise<{ success: boolean }> {\n return this.http.post(`/api/v1/runs/${runId}/cancel`);\n }\n\n async getEvents(\n runId: string,\n opts?: { afterEventId?: string },\n ): Promise<{ events: RunEvent[] }> {\n const params = opts?.afterEventId ? { afterEventId: opts.afterEventId } : undefined;\n return this.http.get(`/api/v1/runs/${runId}/events`, params);\n }\n\n async *streamEvents(runId: string, opts?: { signal?: AbortSignal }): AsyncGenerator<RunEvent> {\n const response = await fetch(\n `${this.http.baseUrlForStream}/api/v1/runs/${runId}/events/stream`,\n {\n headers: {\n Accept: \"text/event-stream\",\n ...this.http.authHeaders(),\n },\n signal: opts?.signal,\n },\n );\n\n if (!response.ok || !response.body) {\n throw new PlatformError(\"Failed to connect to event stream\", response.status);\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const raw = line.slice(6).trim();\n if (!raw || raw === \"[DONE]\") continue;\n try {\n yield JSON.parse(raw) as RunEvent;\n } catch {\n // skip malformed\n }\n }\n }\n } finally {\n reader.cancel();\n }\n }\n}\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport { AgentHandle, type AgentRegistry, type AgentRegistryEntry } from \"./agent-handle\";\nimport { AgentsNamespace } from \"./agents\";\nimport { DataNamespace } from \"./data\";\nimport { HttpClient, PlatformError } from \"./http\";\nimport { PipelinesNamespace } from \"./pipelines\";\nimport { RunsNamespace } from \"./runs\";\nimport type { PlatformClientConfig } from \"./types\";\n\n/** Resolve agent type: if K is a known key in AgentRegistry use it, otherwise fall back to AgentRegistryEntry. */\ntype ResolveAgent<K extends string> = K extends keyof AgentRegistry\n ? AgentRegistry[K]\n : AgentRegistryEntry;\n\nexport class PlatformClient {\n public readonly agents: AgentsNamespace;\n public readonly data: DataNamespace;\n public readonly pipelines: PipelinesNamespace;\n public readonly runs: RunsNamespace;\n private readonly http: HttpClient;\n\n constructor(config: PlatformClientConfig) {\n if (!config.baseUrl) throw new Error(\"baseUrl is required\");\n if (!config.apiKey) throw new Error(\"apiKey is required\");\n\n this.http = new HttpClient(config);\n this.agents = new AgentsNamespace(this.http);\n this.data = new DataNamespace(this.http);\n this.pipelines = new PipelinesNamespace(this.http);\n this.runs = new RunsNamespace(this.http);\n }\n\n agent<K extends string>(\n id: K,\n opts?: { mode?: \"local\" | \"remote\"; threadId?: string },\n ): AgentHandle<ResolveAgent<K>> {\n if (opts?.mode === \"local\") {\n throw new PlatformError(\"Local mode not yet implemented\", 0);\n }\n return new AgentHandle<ResolveAgent<K>>(this.http, id, {\n threadId: opts?.threadId,\n });\n }\n}\n"],"mappings":"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","names":["z","z","z","z","z","z","z","z","path","z"]}
1
+ {"version":3,"sources":["../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/agents/define.ts","../src/agents/define-connector.ts","../src/agents/define-skill.ts","../src/cli/discover.ts","../src/platform/http.ts","../src/platform/sse.ts","../src/platform/agent-handle.ts","../src/platform/agents.ts","../src/platform/data.ts","../src/platform/pipelines.ts","../src/platform/runs.ts","../src/platform/client.ts"],"sourcesContent":["// 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 type { ZodType } from \"zod\";\nimport { SecurityError } from \"./errors\";\nimport type { PlatformActions } from \"./types/action\";\nimport type { PlatformConnector } from \"./types/connector\";\nimport {\n type PlatformAgent,\n type PlatformAgentConfig,\n platformAgentConfigSchema,\n type TeamMember,\n} from \"./types/index\";\nimport type { ConnectorRef, SkillRef } from \"./types/refs\";\nimport type { PlatformSkill } from \"./types/skill\";\n\nconst FORBIDDEN_AGENT_KEYS = [\"tools\", \"team\", \"kernel\"] as const;\n\n/** Duck-type check for Agent instance (has `definition`, `name`, `run`). */\nconst isAgentInstance = (\n value: unknown,\n): value is {\n definition: Record<string, unknown>;\n name: string;\n run: (...args: unknown[]) => unknown;\n} =>\n value != null &&\n typeof value === \"object\" &&\n \"definition\" in value &&\n \"name\" in value &&\n \"run\" in value &&\n typeof (value as Record<string, unknown>).run === \"function\";\n\nconst assertNoInjection = (agent: unknown): void => {\n if (agent == null || typeof agent !== \"object\") return;\n if (isAgentInstance(agent)) return;\n\n for (const key of FORBIDDEN_AGENT_KEYS) {\n if (key in agent) {\n throw new SecurityError(\n `\"agent.${key}\" is not allowed in PlatformAgentConfig. ` +\n `Tools come from \"connectors\", team members from \"team.members\". ` +\n `All are platform-managed and injected via the governance gateway.`,\n );\n }\n }\n};\n\nconst isPlatformSkill = (v: unknown): v is PlatformSkill =>\n v != null && typeof v === \"object\" && (v as Record<string, unknown>).__type === \"PlatformSkill\";\n\nconst isPlatformConnector = (v: unknown): v is PlatformConnector =>\n v != null &&\n typeof v === \"object\" &&\n (v as Record<string, unknown>).__type === \"PlatformConnector\";\n\nconst isPlatformAgent = (v: unknown): v is PlatformAgent =>\n v != null && typeof v === \"object\" && (v as Record<string, unknown>).__type === \"PlatformAgent\";\n\n// PlatformSkill → extract name; SkillId (string literal after `kraken generate`) → passthrough.\nconst normalizeSkillRef = (ref: SkillRef): string => (isPlatformSkill(ref) ? ref.name : ref);\n\n// When ConnectorId is the error-message type (before `kraken generate`),\n// only the PlatformConnector branch is reachable in practice.\nconst normalizeConnectorRef = (ref: ConnectorRef): string =>\n isPlatformConnector(ref) ? ref.name : ref;\n\nconst normalizeTeamMember = (ref: TeamMember): string =>\n isPlatformAgent(ref) ? ref.config.agent.name : ref;\n\ntype AgentInputField =\n | (Omit<PlatformAgentConfig[\"agent\"], \"skills\"> & { outputSchema?: ZodType; skills?: SkillRef[] })\n | { definition: Record<string, unknown>; name: string; run: (...args: unknown[]) => unknown };\n\nconst isPlatformActions = (v: unknown): v is PlatformActions =>\n v != null && typeof v === \"object\" && (v as Record<string, unknown>).__type === \"PlatformActions\";\n\ninterface PlatformAgentInputConfig\n extends Omit<PlatformAgentConfig, \"agent\" | \"connectors\" | \"team\" | \"actions\"> {\n agent: AgentInputField;\n connectors?: ConnectorRef[];\n team?: Omit<PlatformAgentConfig[\"team\"] & object, \"members\"> & { members: TeamMember[] };\n actions?: PlatformActions;\n}\n\nexport const definePlatformAgent = <TOutput extends ZodType = ZodType>(\n config: PlatformAgentInputConfig & { agent: AgentInputField & { outputSchema?: TOutput } },\n): PlatformAgent & { outputSchema?: TOutput } => {\n assertNoInjection(config.agent);\n\n let agentDef: Record<string, unknown>;\n let runtime: unknown;\n let outputSchema: TOutput | undefined;\n\n if (isAgentInstance(config.agent)) {\n agentDef = config.agent.definition;\n runtime = config.agent;\n } else {\n const {\n outputSchema: os,\n skills: rawSkills,\n ...rest\n } = config.agent as PlatformAgentConfig[\"agent\"] & {\n outputSchema?: TOutput;\n skills?: SkillRef[];\n };\n agentDef = {\n ...rest,\n skills: rawSkills?.map(normalizeSkillRef),\n };\n outputSchema = os;\n }\n\n const normalizedConnectors = config.connectors?.map(normalizeConnectorRef);\n const normalizedTeam = config.team\n ? { ...config.team, members: config.team.members.map(normalizeTeamMember) }\n : undefined;\n\n // Preserve PlatformAgent team members for dev mode delegation\n const teamAgents = config.team?.members.filter((m): m is PlatformAgent => isPlatformAgent(m));\n\n // Extract serializable actions config and preserve Zod schemas + handlers separately\n let actionsConfig: PlatformAgentConfig[\"actions\"];\n let actionZodSchemas: PlatformAgent[\"actionZodSchemas\"];\n let actionHandlers: PlatformAgent[\"actionHandlers\"];\n if (config.actions && isPlatformActions(config.actions)) {\n actionsConfig = config.actions.config;\n actionZodSchemas = config.actions.zodSchemas;\n const h = config.actions.handlers;\n actionHandlers = Object.keys(h).length > 0 ? h : undefined;\n }\n\n const parsed = platformAgentConfigSchema.parse({\n ...config,\n agent: agentDef,\n connectors: normalizedConnectors,\n team: normalizedTeam,\n actions: actionsConfig,\n });\n\n return {\n __type: \"PlatformAgent\" as const,\n config: parsed as PlatformAgentConfig,\n runtime,\n outputSchema,\n actionZodSchemas,\n actionHandlers,\n teamAgents: teamAgents && teamAgents.length > 0 ? teamAgents : undefined,\n };\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport type * as z from \"zod\";\nimport type { ConnectorDefinition, ConnectorToolDef, PlatformConnector } from \"./types/connector\";\n\n/**\n * Define a connector tool.\n *\n * Infers handler arg types from the `input` schema.\n */\nexport const defineTool = <T extends z.ZodType>(def: ConnectorToolDef<T>): ConnectorToolDef<T> =>\n def;\n\nexport const defineConnector = <const T extends ConnectorDefinition>(\n input: T,\n): PlatformConnector => {\n if (!input.name || input.name.length === 0) {\n throw new Error(\"Connector name must not be empty\");\n }\n\n const tools = input.tools ? Object.freeze({ ...input.tools }) : undefined;\n const resources = input.resources ? Object.freeze({ ...input.resources }) : undefined;\n const prompts = input.prompts ? Object.freeze({ ...input.prompts }) : undefined;\n\n return Object.freeze({\n __type: \"PlatformConnector\" as const,\n name: input.name,\n description: input.description,\n instructions: input.instructions,\n tools,\n resources,\n prompts,\n });\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport { type PlatformSkill, platformSkillInputSchema } from \"./types/skill\";\n\nexport const defineSkill = (input: { name: string; description?: string }): PlatformSkill => {\n const parsed = platformSkillInputSchema.parse(input);\n return Object.freeze({\n __type: \"PlatformSkill\" as const,\n name: parsed.name,\n description: parsed.description,\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 type { PlatformClientConfig } from \"./types\";\n\nexport class PlatformError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n ) {\n super(message);\n this.name = \"PlatformError\";\n }\n}\n\nexport class HttpClient {\n readonly baseUrlForStream: string;\n private readonly baseUrl: string;\n private readonly apiKey: string;\n\n constructor(config: PlatformClientConfig) {\n this.baseUrl = config.baseUrl.replace(/\\/+$/, \"\");\n this.baseUrlForStream = this.baseUrl;\n this.apiKey = config.apiKey;\n\n const isLocalhost = this.baseUrl.includes(\"localhost\") || this.baseUrl.includes(\"127.0.0.1\");\n if (this.baseUrl.startsWith(\"http://\") && !isLocalhost) {\n console.warn(\n \"[kraken-ai] WARNING: baseUrl does not use HTTPS. API keys will be sent in plaintext.\",\n );\n }\n }\n\n async get<T>(path: string, params?: Record<string, string>): Promise<T> {\n const url = this.buildUrl(path, params);\n const response = await fetch(url, {\n method: \"GET\",\n headers: this.authHeaders(),\n });\n return this.handleResponse<T>(response);\n }\n\n async post<T>(path: string, body?: unknown): Promise<T> {\n const response = await fetch(this.buildUrl(path), {\n method: \"POST\",\n headers: { ...this.authHeaders(), \"Content-Type\": \"application/json\" },\n body: body ? JSON.stringify(body) : undefined,\n });\n return this.handleResponse<T>(response);\n }\n\n async postStream(path: string, body: unknown, signal?: AbortSignal): Promise<Response> {\n const response = await fetch(this.buildUrl(path), {\n method: \"POST\",\n headers: {\n ...this.authHeaders(),\n \"Content-Type\": \"application/json\",\n Accept: \"text/event-stream\",\n },\n body: JSON.stringify(body),\n signal,\n });\n if (!response.ok) {\n const err = (await response.json().catch(() => ({ error: \"Unknown error\" }))) as {\n error: string;\n };\n throw new PlatformError(err.error ?? \"Unknown error\", response.status);\n }\n return response;\n }\n\n private buildUrl(path: string, params?: Record<string, string>): string {\n const url = `${this.baseUrl}${path}`;\n if (!params || Object.keys(params).length === 0) return url;\n const qs = new URLSearchParams(params).toString();\n return `${url}?${qs}`;\n }\n\n authHeaders(): Record<string, string> {\n return { Authorization: `Bearer ${this.apiKey}` };\n }\n\n private async handleResponse<T>(response: Response): Promise<T> {\n if (!response.ok) {\n const body = (await response.json().catch(() => ({ error: \"Unknown error\" }))) as {\n error: string;\n };\n throw new PlatformError(body.error ?? \"Unknown error\", response.status);\n }\n return response.json() as Promise<T>;\n }\n}\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport type { AgentEvent } from \"./types\";\n\nconst VALID_EVENT_TYPES = new Set([\n \"text\",\n \"tool_call\",\n \"tool_result\",\n \"thinking\",\n \"action\",\n \"done\",\n \"error\",\n]);\n\nexport async function* parseSSEStream(\n stream: ReadableStream<Uint8Array>,\n): AsyncGenerator<AgentEvent> {\n const decoder = new TextDecoder();\n const reader = stream.getReader();\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n const parts = buffer.split(\"\\n\\n\");\n // Last part is incomplete — keep it in buffer\n buffer = parts.pop() ?? \"\";\n\n for (const part of parts) {\n const event = parseBlock(part);\n if (event) yield event;\n }\n }\n\n // Process any remaining buffer\n if (buffer.trim()) {\n const event = parseBlock(buffer);\n if (event) yield event;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nconst parseBlock = (block: string): AgentEvent | null => {\n let eventType: string | null = null;\n let data: string | null = null;\n\n for (const line of block.split(\"\\n\")) {\n if (line.startsWith(\":\")) continue; // comment\n if (line.startsWith(\"event: \")) {\n eventType = line.slice(7).trim();\n } else if (line.startsWith(\"data: \")) {\n data = line.slice(6);\n }\n }\n\n if (!eventType || !data || !VALID_EVENT_TYPES.has(eventType)) return null;\n\n try {\n const parsed = JSON.parse(data) as Record<string, unknown>;\n return { type: eventType, ...parsed } as AgentEvent;\n } catch {\n return null;\n }\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport type { HttpClient } from \"./http\";\nimport { PlatformError } from \"./http\";\nimport { parseSSEStream } from \"./sse\";\nimport type { AgentEvent } from \"./types\";\n\n// --- Public types ---\n\nexport interface AgentRegistryEntry {\n input: unknown;\n output: unknown;\n actions: Record<string, unknown>;\n}\n\n/**\n * Augmentable agent registry — `kraken generate` populates this via\n * `declare module \"@kraken-ai/platform\" { interface AgentRegistry { ... } }`.\n * When populated, `client.agent(\"id\")` infers input/output/actions automatically.\n */\n// biome-ignore lint/complexity/noBannedTypes: must be an empty interface for module augmentation\nexport type AgentRegistry = {};\n\nexport interface GenerateOpts {\n signal?: AbortSignal;\n}\n\nexport interface GenerateResult<T extends AgentRegistryEntry> {\n readonly threadId: string;\n stream(): AsyncIterable<AgentEvent>;\n readonly result: Promise<T[\"output\"]>;\n}\n\n// --- Deferred promise helper ---\n\ninterface Deferred<T> {\n promise: Promise<T>;\n resolve: (value: T) => void;\n reject: (error: Error) => void;\n}\n\nconst deferred = <T>(): Deferred<T> => {\n let resolve: (value: T) => void;\n let reject: (error: Error) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n // biome-ignore lint/style/noNonNullAssertion: assigned synchronously in Promise constructor\n return { promise, resolve: resolve!, reject: reject! };\n};\n\n// --- AgentHandle ---\n\nexport class AgentHandle<T extends AgentRegistryEntry> {\n private readonly actionHandlers = new Map<string, (payload: unknown) => void | Promise<void>>();\n private threadId: string | undefined;\n\n constructor(\n private readonly http: HttpClient,\n private readonly agentId: string,\n opts?: { threadId?: string },\n ) {\n this.threadId = opts?.threadId;\n }\n\n onAction<K extends keyof T[\"actions\"] & string>(\n name: K,\n handler: (payload: T[\"actions\"][K]) => void | Promise<void>,\n ): void {\n this.actionHandlers.set(name, handler as (payload: unknown) => void | Promise<void>);\n }\n\n async generate(input: T[\"input\"], opts?: GenerateOpts): Promise<GenerateResult<T>> {\n if (!this.threadId) {\n const info = await this.http.post<{ id: string }>(`/api/v1/agents/${this.agentId}/threads`);\n this.threadId = info.id;\n }\n\n const response = await this.http.postStream(\n `/api/v1/agents/${this.agentId}/threads/${this.threadId}/messages`,\n { content: typeof input === \"string\" ? input : JSON.stringify(input) },\n opts?.signal,\n );\n\n if (!response.body) {\n throw new PlatformError(\"Response body is empty\", 0);\n }\n\n const rawStream = parseSSEStream(response.body);\n const {\n promise: resultPromise,\n resolve: resolveResult,\n reject: rejectResult,\n } = deferred<T[\"output\"]>();\n\n const actionHandlers = this.actionHandlers;\n const http = this.http;\n const agentId = this.agentId;\n const threadId = this.threadId;\n\n async function* streamWithDispatch(): AsyncGenerator<AgentEvent> {\n try {\n for await (const event of rawStream) {\n if (event.type === \"action\") {\n const handler = actionHandlers.get(event.name);\n if (handler) {\n await handler(event.payload);\n }\n void http\n .post(\n `/api/v1/agents/${agentId}/threads/${threadId}/actions/${event.actionExecutionId}/ack`,\n )\n .catch(() => {\n // Ack failure is non-fatal\n });\n }\n if (event.type === \"done\") {\n resolveResult((event as { output: unknown }).output as T[\"output\"]);\n }\n if (event.type === \"error\") {\n rejectResult(new PlatformError((event as { message: string }).message, 0));\n }\n yield event;\n }\n } catch (err) {\n rejectResult(err instanceof Error ? err : new Error(String(err)));\n throw err;\n }\n }\n\n let streamGenerator: AsyncGenerator<AgentEvent> | null = null;\n let streamStarted = false;\n\n const ensureStream = () => {\n if (!streamGenerator) {\n streamGenerator = streamWithDispatch();\n }\n return streamGenerator;\n };\n\n const backgroundConsume = async () => {\n if (streamStarted) return;\n streamStarted = true;\n const gen = ensureStream();\n for await (const _ of gen) {\n void _;\n }\n };\n\n const result: GenerateResult<T> = {\n threadId,\n stream() {\n streamStarted = true;\n return ensureStream();\n },\n get result() {\n void backgroundConsume();\n return resultPromise;\n },\n };\n\n return result;\n }\n}\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport type { HttpClient } from \"./http\";\nimport { PlatformError } from \"./http\";\nimport { parseSSEStream } from \"./sse\";\nimport type {\n AgentEvent,\n AgentInfo,\n PaginatedResponse,\n PaginationParams,\n ThreadInfo,\n ThreadMessage,\n} from \"./types\";\n\nexport class AgentThread {\n constructor(\n private readonly http: HttpClient,\n private readonly agentId: string,\n public readonly threadId: string,\n ) {}\n\n async sendMessage(\n content: string,\n opts?: { signal?: AbortSignal },\n ): Promise<AsyncIterable<AgentEvent>> {\n const response = await this.http.postStream(\n `/api/v1/agents/${this.agentId}/threads/${this.threadId}/messages`,\n { content },\n opts?.signal,\n );\n if (!response.body) {\n throw new PlatformError(\"Response body is empty\", 0);\n }\n return parseSSEStream(response.body);\n }\n\n async getMessages(params?: PaginationParams): Promise<PaginatedResponse<ThreadMessage>> {\n const qs = buildPaginationQuery(params);\n return this.http.get(`/api/v1/agents/${this.agentId}/threads/${this.threadId}/messages`, qs);\n }\n}\n\nexport class AgentsNamespace {\n constructor(private readonly http: HttpClient) {}\n\n async list(): Promise<AgentInfo[]> {\n const result = await this.http.get<{ data: AgentInfo[] }>(\"/api/v1/agents\");\n return result.data;\n }\n\n async createThread(agentId: string): Promise<AgentThread> {\n const info = await this.http.post<ThreadInfo>(`/api/v1/agents/${agentId}/threads`);\n return new AgentThread(this.http, agentId, info.id);\n }\n\n async getThread(agentId: string, threadId: string): Promise<AgentThread> {\n await this.http.get<ThreadInfo>(`/api/v1/agents/${agentId}/threads/${threadId}`);\n return new AgentThread(this.http, agentId, threadId);\n }\n\n async listThreads(\n agentId: string,\n params?: PaginationParams,\n ): Promise<PaginatedResponse<ThreadInfo>> {\n const qs = buildPaginationQuery(params);\n return this.http.get(`/api/v1/agents/${agentId}/threads`, qs);\n }\n}\n\nconst buildPaginationQuery = (params?: PaginationParams): Record<string, string> | undefined => {\n if (!params) return undefined;\n const qs: Record<string, string> = {};\n if (params.cursor) qs.cursor = params.cursor;\n if (params.limit != null) qs.limit = String(params.limit);\n return Object.keys(qs).length > 0 ? qs : undefined;\n};\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport type { HttpClient } from \"./http\";\nimport type { PaginationParams, QueryInfo, QueryResult } from \"./types\";\n\nexport class DataNamespace {\n constructor(private readonly http: HttpClient) {}\n\n async list(): Promise<QueryInfo[]> {\n const result = await this.http.get<{ data: QueryInfo[] }>(\"/api/v1/data/queries\");\n return result.data;\n }\n\n async describe(queryName: string): Promise<QueryInfo> {\n return this.http.get(`/api/v1/data/queries/${queryName}`);\n }\n\n async query<TRow = Record<string, unknown>>(\n queryName: string,\n params?: Record<string, unknown>,\n pagination?: PaginationParams,\n ): Promise<QueryResult<TRow>> {\n return this.http.post(`/api/v1/data/queries/${queryName}/execute`, {\n params,\n ...pagination,\n });\n }\n}\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport * as z from \"zod\";\nimport type { HttpClient } from \"./http\";\n\ninterface QuerySchema<P extends z.ZodType, R extends z.ZodType> {\n params: P;\n returns: R;\n}\n\nexport class PipelinesNamespace {\n constructor(private readonly http: HttpClient) {}\n\n async query<P extends z.ZodType, R extends z.ZodType>(\n pipeline: string,\n queryName: string,\n schema: QuerySchema<P, R>,\n params: z.infer<P>,\n ): Promise<z.infer<R>[]> {\n const result = await this.http.post<{ rows: unknown[] }>(\n `/api/v1/pipelines/${encodeURIComponent(pipeline)}/queries/${encodeURIComponent(queryName)}`,\n params,\n );\n\n try {\n return z.array(schema.returns).parse(result.rows);\n } catch (e) {\n throw new Error(\n `Pipeline schema may have changed — run 'kraken generate' to update types.\\n\\nOriginal error: ${(e as Error).message}`,\n );\n }\n }\n}\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport type { HttpClient } from \"./http\";\nimport { PlatformError } from \"./http\";\nimport type { RunEvent, RunRecord, StartRunParams } from \"./types\";\n\nexport class RunsNamespace {\n constructor(private readonly http: HttpClient) {}\n\n async start(params: StartRunParams): Promise<{ runId: string }> {\n return this.http.post(\"/api/v1/runs\", params);\n }\n\n async get(runId: string): Promise<RunRecord> {\n return this.http.get(`/api/v1/runs/${runId}`);\n }\n\n async cancel(runId: string): Promise<{ success: boolean }> {\n return this.http.post(`/api/v1/runs/${runId}/cancel`);\n }\n\n async getEvents(\n runId: string,\n opts?: { afterEventId?: string },\n ): Promise<{ events: RunEvent[] }> {\n const params = opts?.afterEventId ? { afterEventId: opts.afterEventId } : undefined;\n return this.http.get(`/api/v1/runs/${runId}/events`, params);\n }\n\n async *streamEvents(runId: string, opts?: { signal?: AbortSignal }): AsyncGenerator<RunEvent> {\n const response = await fetch(\n `${this.http.baseUrlForStream}/api/v1/runs/${runId}/events/stream`,\n {\n headers: {\n Accept: \"text/event-stream\",\n ...this.http.authHeaders(),\n },\n signal: opts?.signal,\n },\n );\n\n if (!response.ok || !response.body) {\n throw new PlatformError(\"Failed to connect to event stream\", response.status);\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n buffer = lines.pop() ?? \"\";\n\n for (const line of lines) {\n if (!line.startsWith(\"data: \")) continue;\n const raw = line.slice(6).trim();\n if (!raw || raw === \"[DONE]\") continue;\n try {\n yield JSON.parse(raw) as RunEvent;\n } catch {\n // skip malformed\n }\n }\n }\n } finally {\n reader.cancel();\n }\n }\n}\n","// Copyright (c) Optima Engineering LLC\n// SPDX-License-Identifier: BUSL-1.1\n\nimport { AgentHandle, type AgentRegistry, type AgentRegistryEntry } from \"./agent-handle\";\nimport { AgentsNamespace } from \"./agents\";\nimport { DataNamespace } from \"./data\";\nimport { HttpClient, PlatformError } from \"./http\";\nimport { PipelinesNamespace } from \"./pipelines\";\nimport { RunsNamespace } from \"./runs\";\nimport type { PlatformClientConfig } from \"./types\";\n\n/** Resolve agent type: if K is a known key in AgentRegistry use it, otherwise fall back to AgentRegistryEntry. */\ntype ResolveAgent<K extends string> = K extends keyof AgentRegistry\n ? AgentRegistry[K]\n : AgentRegistryEntry;\n\nexport class PlatformClient {\n public readonly agents: AgentsNamespace;\n public readonly data: DataNamespace;\n public readonly pipelines: PipelinesNamespace;\n public readonly runs: RunsNamespace;\n private readonly http: HttpClient;\n\n constructor(config: PlatformClientConfig) {\n if (!config.baseUrl) throw new Error(\"baseUrl is required\");\n if (!config.apiKey) throw new Error(\"apiKey is required\");\n\n this.http = new HttpClient(config);\n this.agents = new AgentsNamespace(this.http);\n this.data = new DataNamespace(this.http);\n this.pipelines = new PipelinesNamespace(this.http);\n this.runs = new RunsNamespace(this.http);\n }\n\n agent<K extends string>(\n id: K,\n opts?: { mode?: \"local\" | \"remote\"; threadId?: string },\n ): AgentHandle<ResolveAgent<K>> {\n if (opts?.mode === \"local\") {\n throw new PlatformError(\"Local mode not yet implemented\", 0);\n }\n return new AgentHandle<ResolveAgent<K>>(this.http, id, {\n threadId: opts?.threadId,\n });\n }\n}\n"],"mappings":"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","names":["z","z","z","z","z","z","z","z","path","z"]}
package/dist/server.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { P as PlatformConnector, c as PlatformAgent, y as ConnectorSchema } from './types-CkknNKNr.cjs';
1
+ import { P as PlatformConnector, c as PlatformAgent, y as ConnectorSchema } from './types-_lfbhFJH.cjs';
2
2
  import { ToolDefinition } from 'kraken-ai';
3
3
  import 'zod';
4
4
 
package/dist/server.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { P as PlatformConnector, c as PlatformAgent, y as ConnectorSchema } from './types-CkknNKNr.js';
1
+ import { P as PlatformConnector, c as PlatformAgent, y as ConnectorSchema } from './types-_lfbhFJH.js';
2
2
  import { ToolDefinition } from 'kraken-ai';
3
3
  import 'zod';
4
4
 
@@ -227,7 +227,7 @@ declare const platformAgentConfigSchema: z.ZodObject<{
227
227
  }>>;
228
228
  }, z.core.$strict>;
229
229
  connectors: z.ZodOptional<z.ZodArray<z.ZodString>>;
230
- trigger: z.ZodDiscriminatedUnion<[z.ZodObject<{
230
+ triggers: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
231
231
  type: z.ZodLiteral<"cron">;
232
232
  expression: z.ZodString;
233
233
  timezone: z.ZodOptional<z.ZodString>;
@@ -246,7 +246,7 @@ declare const platformAgentConfigSchema: z.ZodObject<{
246
246
  type: z.ZodLiteral<"api">;
247
247
  }, z.core.$strip>, z.ZodObject<{
248
248
  type: z.ZodLiteral<"manual">;
249
- }, z.core.$strip>], "type">;
249
+ }, z.core.$strip>], "type">>;
250
250
  identity: z.ZodOptional<z.ZodObject<{
251
251
  basePermissions: z.ZodArray<z.ZodString>;
252
252
  requestablePermissions: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -227,7 +227,7 @@ declare const platformAgentConfigSchema: z.ZodObject<{
227
227
  }>>;
228
228
  }, z.core.$strict>;
229
229
  connectors: z.ZodOptional<z.ZodArray<z.ZodString>>;
230
- trigger: z.ZodDiscriminatedUnion<[z.ZodObject<{
230
+ triggers: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
231
231
  type: z.ZodLiteral<"cron">;
232
232
  expression: z.ZodString;
233
233
  timezone: z.ZodOptional<z.ZodString>;
@@ -246,7 +246,7 @@ declare const platformAgentConfigSchema: z.ZodObject<{
246
246
  type: z.ZodLiteral<"api">;
247
247
  }, z.core.$strip>, z.ZodObject<{
248
248
  type: z.ZodLiteral<"manual">;
249
- }, z.core.$strip>], "type">;
249
+ }, z.core.$strip>], "type">>;
250
250
  identity: z.ZodOptional<z.ZodObject<{
251
251
  basePermissions: z.ZodArray<z.ZodString>;
252
252
  requestablePermissions: z.ZodOptional<z.ZodArray<z.ZodString>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kraken-ai/platform",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "description": "Kraken AI Platform SDK — PlatformClient and kraken CLI",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",