@kalphq/cli 0.0.0-dev-20260513152102 → 0.0.0-dev-20260517015600

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.
Files changed (75) hide show
  1. package/dist/{add-YZSIMRPC.js → add-5WUS5HGV.js} +16 -8
  2. package/dist/add-5WUS5HGV.js.map +1 -0
  3. package/dist/{agents-WYK6WNQP.js → agents-L22L47II.js} +3 -3
  4. package/dist/ai-7EBQF25Y.js +12 -0
  5. package/dist/ai-7EBQF25Y.js.map +1 -0
  6. package/dist/{chunk-IZXCZ3IA.js → chunk-4CPUJ537.js} +2 -2
  7. package/dist/chunk-5YUU3KLB.js +40 -0
  8. package/dist/chunk-5YUU3KLB.js.map +1 -0
  9. package/dist/chunk-7KVCCBPJ.js +139 -0
  10. package/dist/chunk-7KVCCBPJ.js.map +1 -0
  11. package/dist/{chunk-S3KAVLVM.js → chunk-D53K6UE6.js} +2 -2
  12. package/dist/chunk-D53K6UE6.js.map +1 -0
  13. package/dist/{chunk-4CEJYSJY.js → chunk-DLUULDXW.js} +12 -45
  14. package/dist/chunk-DLUULDXW.js.map +1 -0
  15. package/dist/chunk-DXNHT4HF.js +99 -0
  16. package/dist/chunk-DXNHT4HF.js.map +1 -0
  17. package/dist/{chunk-XVD3FFOJ.js → chunk-JXR6TPR5.js} +51 -72
  18. package/dist/chunk-JXR6TPR5.js.map +1 -0
  19. package/dist/chunk-LEKRFM4Q.js +49 -0
  20. package/dist/chunk-LEKRFM4Q.js.map +1 -0
  21. package/dist/chunk-QT2JFINP.js +99 -0
  22. package/dist/chunk-QT2JFINP.js.map +1 -0
  23. package/dist/{chunk-5SZMD7E6.js → chunk-TNNBTSDC.js} +2 -2
  24. package/dist/{chunk-5SZMD7E6.js.map → chunk-TNNBTSDC.js.map} +1 -1
  25. package/dist/{generate-JW2DMJ3W.js → chunk-ZX7TIQM7.js} +127 -120
  26. package/dist/chunk-ZX7TIQM7.js.map +1 -0
  27. package/dist/{create-UCJ77P62.js → create-ILPQCRA2.js} +2 -2
  28. package/dist/{delete-QPYVL4OU.js → delete-AJFAAGYJ.js} +9 -8
  29. package/dist/{delete-QPYVL4OU.js.map → delete-AJFAAGYJ.js.map} +1 -1
  30. package/dist/{delete-FIXMFFNZ.js → delete-IFVGULOA.js} +21 -13
  31. package/dist/delete-IFVGULOA.js.map +1 -0
  32. package/dist/{deploy-DRZZ3YRB.js → deploy-EWYNN3VU.js} +9 -6
  33. package/dist/{deploy-DRZZ3YRB.js.map → deploy-EWYNN3VU.js.map} +1 -1
  34. package/dist/{dev-5YY6W4WM.js → dev-3IEEUVYM.js} +66 -11
  35. package/dist/dev-3IEEUVYM.js.map +1 -0
  36. package/dist/generate-2MO7PZBT.js +69 -0
  37. package/dist/generate-2MO7PZBT.js.map +1 -0
  38. package/dist/generate-ODZUKTF2.js +146 -0
  39. package/dist/generate-ODZUKTF2.js.map +1 -0
  40. package/dist/index.js +32 -12
  41. package/dist/index.js.map +1 -1
  42. package/dist/{list-FKH4DWCF.js → list-BNQ34QG3.js} +6 -5
  43. package/dist/{list-FKH4DWCF.js.map → list-BNQ34QG3.js.map} +1 -1
  44. package/dist/{list-GZBBOFX5.js → list-WHYV5JZ4.js} +5 -4
  45. package/dist/{list-GZBBOFX5.js.map → list-WHYV5JZ4.js.map} +1 -1
  46. package/dist/{login-MGPA2VYV.js → login-BDLHS4HC.js} +13 -8
  47. package/dist/login-BDLHS4HC.js.map +1 -0
  48. package/dist/{mcp-DRMQYA7E.js → mcp-77OLNT5R.js} +2 -2
  49. package/dist/{pull-V7QJBVNZ.js → pull-CFDZS6VB.js} +8 -7
  50. package/dist/{pull-V7QJBVNZ.js.map → pull-CFDZS6VB.js.map} +1 -1
  51. package/dist/{push-P6CKRYT7.js → push-OL7562HM.js} +159 -47
  52. package/dist/push-OL7562HM.js.map +1 -0
  53. package/dist/runtime-template/studio/index.html +3 -0
  54. package/dist/{secrets-M43LLCTB.js → secrets-BPESLXMK.js} +6 -6
  55. package/dist/{sync-LTBH6DI5.js → sync-JJDODKMO.js} +8 -7
  56. package/dist/{sync-LTBH6DI5.js.map → sync-JJDODKMO.js.map} +1 -1
  57. package/package.json +5 -4
  58. package/dist/add-YZSIMRPC.js.map +0 -1
  59. package/dist/chunk-4CEJYSJY.js.map +0 -1
  60. package/dist/chunk-LPEV4QH2.js +0 -208
  61. package/dist/chunk-LPEV4QH2.js.map +0 -1
  62. package/dist/chunk-S3KAVLVM.js.map +0 -1
  63. package/dist/chunk-VCFH3R34.js +0 -103
  64. package/dist/chunk-VCFH3R34.js.map +0 -1
  65. package/dist/chunk-XVD3FFOJ.js.map +0 -1
  66. package/dist/delete-FIXMFFNZ.js.map +0 -1
  67. package/dist/dev-5YY6W4WM.js.map +0 -1
  68. package/dist/generate-JW2DMJ3W.js.map +0 -1
  69. package/dist/login-MGPA2VYV.js.map +0 -1
  70. package/dist/push-P6CKRYT7.js.map +0 -1
  71. /package/dist/{agents-WYK6WNQP.js.map → agents-L22L47II.js.map} +0 -0
  72. /package/dist/{chunk-IZXCZ3IA.js.map → chunk-4CPUJ537.js.map} +0 -0
  73. /package/dist/{create-UCJ77P62.js.map → create-ILPQCRA2.js.map} +0 -0
  74. /package/dist/{mcp-DRMQYA7E.js.map → mcp-77OLNT5R.js.map} +0 -0
  75. /package/dist/{secrets-M43LLCTB.js.map → secrets-BPESLXMK.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/secrets/delete.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { requireAuth } from \"@/utils/auth\";\nimport { generateTypes } from \"@/utils/codegen\";\nimport { resolveProvider } from \"@/utils/providers\";\nimport { readLocalSecretsFromConfig, writeLocalSecretsToConfig } from \"@/utils/secrets-config\";\nimport { resolveSecretsRuntimeConfigPath } from \"@/utils/secrets-runtime\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete a secret from remote runtime and local config\",\n },\n args: {\n key: {\n type: \"string\",\n alias: \"k\",\n description: \"Secret key to delete\",\n },\n yes: {\n type: \"boolean\",\n alias: \"y\",\n description: \"Skip confirmation prompt\",\n default: false,\n },\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n\n if (args.help) {\n p.log.info(`${pc.bold(\"Usage\")}: kalp secrets delete -k <KEY>`);\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp secrets delete\")}`);\n\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n let configPath: string;\n try {\n configPath = await resolveSecretsRuntimeConfigPath(cwd);\n } catch (error) {\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n\n const provider = resolveProvider();\n let remoteSecrets;\n try {\n remoteSecrets = await provider.listSecrets({ cwd, configPath });\n } catch (error) {\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n\n if (!remoteSecrets || remoteSecrets.length === 0) {\n p.log.info(pc.dim(\"No remote secrets to delete.\"));\n p.outro(\"Done\");\n return;\n }\n\n let key = args.key?.trim();\n if (!key) {\n const selected = await p.select({\n message: \"Select a secret to delete\",\n options: remoteSecrets\n .map((secret) => secret.name)\n .sort((a, b) => a.localeCompare(b))\n .map((name) => ({ value: name, label: name })),\n });\n if (p.isCancel(selected)) {\n p.outro(\"Cancelled\");\n return;\n }\n key = String(selected);\n }\n\n const existsRemote = remoteSecrets.some((secret) => secret.name === key);\n if (!existsRemote) {\n p.log.error(`Secret ${pc.cyan(key)} not found in remote runtime.`);\n process.exit(1);\n }\n\n if (!args.yes) {\n const confirmed = await p.confirm({\n message: `Delete ${pc.cyan(key)} from remote runtime and local config?`,\n initialValue: false,\n });\n if (p.isCancel(confirmed) || !confirmed) {\n p.outro(\"Cancelled\");\n return;\n }\n }\n\n const spinner = p.spinner();\n spinner.start(`Deleting ${pc.cyan(key)}`);\n\n try {\n await provider.deleteSecret({ cwd, configPath, name: key });\n const localSecrets = await readLocalSecretsFromConfig(cwd);\n await writeLocalSecretsToConfig(\n cwd,\n localSecrets.filter((secret) => secret !== key),\n );\n await generateTypes(cwd);\n\n spinner.stop(`Secret ${pc.cyan(key)} deleted`);\n p.outro(\"Done\");\n } catch (error) {\n spinner.stop(\"Failed to delete secret\");\n p.log.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":["spinner"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/dev.ts"],"sourcesContent":["import { watch, type FSWatcher } from \"node:fs\";\nimport { copyFile, mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { setTimeout as delay } from \"node:timers/promises\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { execa } from \"execa\";\nimport open from \"open\";\nimport { generateTypes } from \"@/utils/codegen\";\nimport { ensureSecretKey } from \"@/utils/secret\";\nimport { readAgentManifest, computePushHash } from \"@/utils/manifest\";\nimport { validateCompiledIR } from \"@/utils/validate\";\nimport {\n materializeRuntime,\n readLocalAgentNames,\n writeRuntimeAgentsSnapshot,\n} from \"@/utils/runtime\";\n\nconst LOGO = \"🦋\";\nconst LOCAL_MANIFESTS_DIR = \".kalp/runtime/local-manifests\";\nconst HOT_RELOAD_DEBOUNCE_MS = 450;\n\nasync function putLocalManifest(params: {\n cwd: string;\n configPath: string;\n key: string;\n manifestPath: string;\n}): Promise<void> {\n await execa(\n \"npx\",\n [\n \"wrangler\",\n \"kv\",\n \"key\",\n \"put\",\n params.key,\n \"--path\",\n params.manifestPath,\n \"--binding\",\n \"KALP_MANIFESTS\",\n \"--local\",\n \"--config\",\n params.configPath,\n ],\n { cwd: params.cwd },\n );\n}\n\nasync function putLocalValue(params: {\n cwd: string;\n configPath: string;\n key: string;\n value: string;\n}): Promise<void> {\n await execa(\n \"npx\",\n [\n \"wrangler\",\n \"kv\",\n \"key\",\n \"put\",\n params.key,\n params.value,\n \"--binding\",\n \"KALP_MANIFESTS\",\n \"--local\",\n \"--config\",\n params.configPath,\n ],\n { cwd: params.cwd },\n );\n}\n\nasync function syncLocalRuntimeState(params: {\n cwd: string;\n runtimeDir: string;\n configPath: string;\n}): Promise<{ synced: number; failed: string[] }> {\n const { cwd, runtimeDir, configPath } = params;\n await writeRuntimeAgentsSnapshot({ cwd, runtimeDir, mode: \"local\" });\n\n const manifestDir = join(cwd, LOCAL_MANIFESTS_DIR);\n await rm(manifestDir, { recursive: true, force: true });\n await mkdir(manifestDir, { recursive: true });\n\n const agentNames = await readLocalAgentNames(cwd);\n const failed: string[] = [];\n let synced = 0;\n\n for (const agentName of agentNames) {\n try {\n const manifest = await readAgentManifest({ cwd, agentName });\n const hash = computePushHash(manifest.ir);\n const validation = validateCompiledIR({ agentName, ir: manifest.ir, hash });\n if (!validation.ok) {\n const details = (validation.errors ?? []).join(\" | \");\n throw new Error(\n `validation failed (${validation.phase})${details ? `: ${details}` : \"\"}`,\n );\n }\n\n const manifestKey = `${agentName}:${hash}`;\n const latestKey = `${agentName}:latest`;\n const manifestPath = join(manifestDir, `${agentName}-${hash}.json`);\n await writeFile(manifestPath, JSON.stringify(manifest.ir), \"utf-8\");\n\n await putLocalManifest({\n cwd,\n configPath,\n key: manifestKey,\n manifestPath,\n });\n await putLocalValue({\n cwd,\n configPath,\n key: latestKey,\n value: hash,\n });\n synced += 1;\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n failed.push(`${agentName}: ${reason}`);\n }\n }\n\n return { synced, failed };\n}\n\nexport default defineCommand({\n meta: { name: \"dev\", description: \"Run Worker + Studio local environment\" },\n async run() {\n const cwd = process.cwd();\n\n p.intro(`${LOGO} ${pc.bold(\"kalp dev\")}`);\n\n await generateTypes(cwd);\n await ensureSecretKey(cwd);\n await copyFile(join(cwd, \".env\"), join(cwd, \".dev.vars\"));\n const devVarsPath = join(cwd, \".dev.vars\");\n const devVarsContent = await readFile(devVarsPath, \"utf-8\");\n const nextDevVars = devVarsContent\n .replace(/^KALP_ENV=.*$/m, \"\")\n .replace(/^KALP_RUNTIME_MODE=.*$/m, \"\")\n .trimEnd();\n await writeFile(\n devVarsPath,\n `${nextDevVars}\\nKALP_ENV=local\\nKALP_RUNTIME_MODE=local\\n`,\n \"utf-8\",\n );\n const runtime = await materializeRuntime(cwd, { mode: \"local\" });\n const initialSync = await syncLocalRuntimeState({\n cwd,\n runtimeDir: runtime.runtimeDir,\n configPath: runtime.wranglerConfigPath,\n });\n if (initialSync.failed.length > 0) {\n for (const failure of initialSync.failed) {\n p.log.warn(`Local sync skipped ${failure}`);\n }\n }\n p.log.info(\n `${pc.dim(\"Local agent runtime synced:\")} ${pc.cyan(String(initialSync.synced))}`,\n );\n\n p.note(\"Starting local runtime (wrangler dev :8787)\");\n\n const backend = execa(\n \"npx\",\n [\n \"wrangler\",\n \"dev\",\n \"--port\",\n \"8787\",\n \"--local\",\n \"--config\",\n runtime.wranglerConfigPath,\n ],\n { cwd, stdio: \"inherit\" },\n );\n\n let hotReloadTimer: NodeJS.Timeout | null = null;\n let hotReloadRunning = false;\n let hotReloadPending = false;\n\n const runHotReloadSync = async () => {\n if (hotReloadRunning) {\n hotReloadPending = true;\n return;\n }\n\n hotReloadRunning = true;\n try {\n const sync = await syncLocalRuntimeState({\n cwd,\n runtimeDir: runtime.runtimeDir,\n configPath: runtime.wranglerConfigPath,\n });\n if (sync.failed.length > 0) {\n p.log.warn(\n `Local hot reload synced ${sync.synced} agents with ${sync.failed.length} warnings.`,\n );\n for (const failure of sync.failed) {\n p.log.warn(`Hot reload skipped ${failure}`);\n }\n } else {\n p.log.info(pc.dim(`Local hot reload synced ${sync.synced} agents.`));\n }\n } finally {\n hotReloadRunning = false;\n if (hotReloadPending) {\n hotReloadPending = false;\n void runHotReloadSync();\n }\n }\n };\n\n const scheduleHotReloadSync = () => {\n if (hotReloadTimer) clearTimeout(hotReloadTimer);\n hotReloadTimer = setTimeout(() => {\n void runHotReloadSync();\n }, HOT_RELOAD_DEBOUNCE_MS);\n };\n\n const watchers: FSWatcher[] = [];\n const watchTargets = [join(cwd, \"agents\"), join(cwd, \".kalp\", \"state.json\")];\n for (const target of watchTargets) {\n try {\n const watcher = watch(\n target,\n target.endsWith(\".json\") ? undefined : { recursive: true },\n () => scheduleHotReloadSync(),\n );\n watchers.push(watcher);\n } catch {\n // Ignore missing targets (e.g. no agents yet)\n }\n }\n\n const shutdown = () => {\n if (hotReloadTimer) {\n clearTimeout(hotReloadTimer);\n hotReloadTimer = null;\n }\n for (const watcher of watchers) {\n watcher.close();\n }\n backend.kill(\"SIGINT\");\n };\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n await delay(2500);\n const studioUrl = \"http://localhost:8787/studio/login\";\n await open(studioUrl);\n p.log.success(`Studio opened at ${pc.cyan(studioUrl)}`);\n\n try {\n await backend;\n } finally {\n shutdown();\n process.off(\"SIGINT\", shutdown);\n process.off(\"SIGTERM\", shutdown);\n }\n },\n});\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/mcp/generate.ts","../src/utils/mcp-codegen.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { cwd } from \"node:process\";\nimport { generateMcpTypes } from \"@/utils/mcp-codegen\";\nimport { generateTypes } from \"@/utils/codegen\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"generate\",\n description: \"Generate MCP tool types into .kalp/mcp.types.d.ts\",\n },\n args: {\n strict: {\n type: \"boolean\",\n description: \"Fail when at least one MCP server cannot be introspected\",\n default: false,\n },\n },\n async run({ args }) {\n p.intro(`${LOGO} ${pc.bold(\"kalp mcp generate\")}`);\n const spinner = p.spinner();\n spinner.start(\"Discovering MCP servers and generating types\");\n\n try {\n const projectCwd = cwd();\n await generateTypes(projectCwd);\n const result = await generateMcpTypes(projectCwd, {\n strict: args.strict,\n });\n\n spinner.stop(\"MCP type generation completed\");\n\n if (result.servers.length === 0) {\n p.log.warn(\n \"No MCP servers found in kalp.config.ts. Generated an empty McpRegistry.\",\n );\n } else {\n for (const server of result.servers) {\n p.log.info(\n `${pc.bold(server.serverName)} (${server.transport}) -> ${server.tools.length} tools`,\n );\n }\n }\n\n if (result.warnings.length > 0) {\n p.log.warn(pc.bold(\"Warnings:\"));\n for (const warning of result.warnings) {\n p.log.warn(`- ${warning}`);\n }\n }\n\n p.outro(`Types written to ${pc.cyan(result.outputPath)}`);\n } catch (error) {\n spinner.stop(\"MCP type generation failed\");\n const message = error instanceof Error ? error.message : String(error);\n p.cancel(message);\n process.exitCode = 1;\n }\n },\n});\n","import { writeMcpTypes } from \"@/utils/codegen\";\nimport { loadProjectConfig } from \"@/utils/project-config\";\nimport { compile } from \"json-schema-to-typescript\";\n\nconst MCP_CLIENT_NAME = \"kalp-cli\";\nconst MCP_PROTOCOL_VERSION = \"2025-06-18\";\n\ntype McpTransport = \"sse\" | \"stdio\";\n\ninterface McpServerConfigInput {\n transport: McpTransport;\n url: string;\n}\n\ninterface McpToolDefinition {\n name: string;\n inputSchema?: unknown;\n outputSchema?: unknown;\n}\n\ninterface McpServerTypesResult {\n serverName: string;\n transport: McpTransport;\n url: string;\n tools: McpToolDefinition[];\n warnings: string[];\n}\n\nexport interface McpGenerateResult {\n outputPath: string;\n servers: McpServerTypesResult[];\n warnings: string[];\n}\n\ninterface JsonRpcSuccess<T> {\n jsonrpc: \"2.0\";\n id?: string | number;\n result: T;\n}\n\ninterface JsonRpcFailure {\n jsonrpc: \"2.0\";\n id?: string | number;\n error: {\n code: number;\n message: string;\n data?: unknown;\n };\n}\n\ntype JsonRpcResponse<T> = JsonRpcSuccess<T> | JsonRpcFailure;\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" ? (value as Record<string, unknown>) : null;\n}\n\nfunction isMcpTransport(value: unknown): value is McpTransport {\n return value === \"sse\" || value === \"stdio\";\n}\n\nfunction toPascalCase(value: string): string {\n const normalized = value\n .replace(/[^a-zA-Z0-9]+/g, \" \")\n .trim()\n .split(/\\s+/g)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\"\");\n\n if (!normalized) return \"Generated\";\n return /^[0-9]/.test(normalized) ? `N${normalized}` : normalized;\n}\n\nfunction getServerConfigs(raw: Record<string, unknown>): Record<string, McpServerConfigInput> {\n const mcp = asRecord(raw.mcp);\n if (!mcp) return {};\n\n const servers: Record<string, McpServerConfigInput> = {};\n for (const [serverName, serverConfigRaw] of Object.entries(mcp)) {\n const serverConfig = asRecord(serverConfigRaw);\n if (!serverConfig) continue;\n\n const transport = serverConfig.transport;\n const url = serverConfig.url;\n if (!isMcpTransport(transport) || typeof url !== \"string\" || !url.trim()) {\n continue;\n }\n\n servers[serverName] = {\n transport,\n url: url.trim(),\n };\n }\n\n return servers;\n}\n\nfunction createRpcPayload(\n id: number | string,\n method: string,\n params?: Record<string, unknown>,\n): Record<string, unknown> {\n if (params) {\n return {\n jsonrpc: \"2.0\",\n id,\n method,\n params,\n };\n }\n\n return {\n jsonrpc: \"2.0\",\n id,\n method,\n };\n}\n\nasync function postJsonRpc<T>(\n url: string,\n body: Record<string, unknown>,\n protocolVersion: string,\n): Promise<JsonRpcResponse<T>> {\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n accept: \"application/json\",\n \"MCP-Protocol-Version\": protocolVersion,\n },\n body: JSON.stringify(body),\n });\n\n const text = await response.text();\n if (!response.ok) {\n throw new Error(`Request failed with HTTP ${response.status}: ${text.slice(0, 300)}`);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n throw new Error(`Invalid JSON-RPC response payload: ${text.slice(0, 300)}`);\n }\n\n const record = asRecord(parsed);\n if (!record) {\n throw new Error(\"Invalid JSON-RPC response shape.\");\n }\n\n return record as JsonRpcResponse<T>;\n}\n\nasync function initializeServer(url: string): Promise<string> {\n const initResponse = await postJsonRpc<{ protocolVersion?: string }>(\n url,\n createRpcPayload(1, \"initialize\", {\n protocolVersion: MCP_PROTOCOL_VERSION,\n capabilities: {},\n clientInfo: { name: MCP_CLIENT_NAME, version: \"0.1.0\" },\n }),\n MCP_PROTOCOL_VERSION,\n );\n\n if (\"error\" in initResponse) {\n throw new Error(\n `initialize failed (${initResponse.error.code}): ${initResponse.error.message}`,\n );\n }\n\n const negotiatedVersion =\n typeof initResponse.result?.protocolVersion === \"string\"\n ? initResponse.result.protocolVersion\n : MCP_PROTOCOL_VERSION;\n\n await postJsonRpc(\n url,\n {\n jsonrpc: \"2.0\",\n method: \"notifications/initialized\",\n },\n negotiatedVersion,\n ).catch(() => {\n // Notification failures should not block type generation.\n });\n\n return negotiatedVersion;\n}\n\nfunction parseToolsFromResponse(value: unknown): {\n tools: McpToolDefinition[];\n nextCursor?: string;\n} {\n const record = asRecord(value);\n if (!record) return { tools: [] };\n\n const nextCursor =\n typeof record.nextCursor === \"string\" ? record.nextCursor : undefined;\n const rawTools = Array.isArray(record.tools) ? record.tools : [];\n\n const tools: McpToolDefinition[] = [];\n for (const item of rawTools) {\n const tool = asRecord(item);\n if (!tool) continue;\n const name = typeof tool.name === \"string\" ? tool.name.trim() : \"\";\n if (!name) continue;\n\n tools.push({\n name,\n inputSchema: tool.inputSchema,\n outputSchema: tool.outputSchema,\n });\n }\n\n return { tools, nextCursor };\n}\n\nasync function fetchServerTools(\n serverName: string,\n config: McpServerConfigInput,\n): Promise<McpServerTypesResult> {\n const warnings: string[] = [];\n\n if (config.transport !== \"sse\") {\n warnings.push(\n `Server \"${serverName}\" uses \"${config.transport}\" transport and was skipped. Only \"sse\" transport is supported by kalp mcp generate.`,\n );\n return {\n serverName,\n transport: config.transport,\n url: config.url,\n tools: [],\n warnings,\n };\n }\n\n const protocolVersion = await initializeServer(config.url);\n const tools: McpToolDefinition[] = [];\n\n let cursor: string | undefined;\n let page = 0;\n const seen = new Set<string>();\n\n while (page < 200) {\n const params = cursor ? { cursor } : {};\n const response = await postJsonRpc<{ tools?: unknown[]; nextCursor?: string }>(\n config.url,\n createRpcPayload(`tools-list-${page + 1}`, \"tools/list\", params),\n protocolVersion,\n );\n\n if (\"error\" in response) {\n throw new Error(\n `tools/list failed (${response.error.code}): ${response.error.message}`,\n );\n }\n\n const parsed = parseToolsFromResponse(response.result);\n for (const tool of parsed.tools) {\n if (seen.has(tool.name)) continue;\n seen.add(tool.name);\n tools.push(tool);\n }\n\n page += 1;\n if (!parsed.nextCursor || parsed.nextCursor === cursor) {\n break;\n }\n cursor = parsed.nextCursor;\n }\n\n if (page >= 200) {\n warnings.push(\n `Server \"${serverName}\" reached the pagination safety limit while listing tools.`,\n );\n }\n\n return {\n serverName,\n transport: config.transport,\n url: config.url,\n tools: tools.sort((a, b) => a.name.localeCompare(b.name)),\n warnings,\n };\n}\n\nfunction isSchemaObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nasync function compileSchemaType(\n schema: unknown,\n typeName: string,\n): Promise<{ declaration: string; warning?: string } | null> {\n if (!isSchemaObject(schema)) return null;\n\n try {\n const declaration = await compile(schema as any, typeName, {\n bannerComment: \"\",\n unreachableDefinitions: true,\n style: {\n semi: true,\n },\n unknownAny: true,\n });\n return { declaration: declaration.trim() };\n } catch (error) {\n return {\n declaration: `export type ${typeName} = unknown;`,\n warning: `Could not compile schema for ${typeName}. Falling back to unknown.`,\n };\n }\n}\n\ninterface CompiledMcpTool {\n name: string;\n inputTypeName: string;\n outputTypeName: string;\n}\n\ninterface CompiledServer {\n result: McpServerTypesResult;\n tools: CompiledMcpTool[];\n}\n\nasync function compileServerToolTypes(\n serverResults: McpServerTypesResult[],\n warnings: string[],\n): Promise<{\n declarations: string[];\n servers: CompiledServer[];\n}> {\n const declarationMap = new Map<string, string>();\n const usedTypeNames = new Set<string>();\n const servers: CompiledServer[] = [];\n\n const reserveTypeName = (baseName: string): string => {\n if (!usedTypeNames.has(baseName)) {\n usedTypeNames.add(baseName);\n return baseName;\n }\n let suffix = 2;\n while (usedTypeNames.has(`${baseName}${suffix}`)) {\n suffix += 1;\n }\n const nextName = `${baseName}${suffix}`;\n usedTypeNames.add(nextName);\n return nextName;\n };\n\n for (const server of serverResults) {\n const tools: CompiledMcpTool[] = [];\n for (const tool of server.tools) {\n const baseName = `${toPascalCase(server.serverName)}${toPascalCase(tool.name)}`;\n const inputTypeName = reserveTypeName(`${baseName}Input`);\n const outputTypeName = reserveTypeName(`${baseName}Output`);\n\n // eslint-disable-next-line no-await-in-loop\n const inputDeclaration = await compileSchemaType(tool.inputSchema, inputTypeName);\n if (inputDeclaration?.declaration) {\n declarationMap.set(inputTypeName, inputDeclaration.declaration);\n } else {\n declarationMap.set(inputTypeName, `export type ${inputTypeName} = unknown;`);\n }\n if (inputDeclaration?.warning) {\n warnings.push(inputDeclaration.warning);\n }\n\n // eslint-disable-next-line no-await-in-loop\n const outputDeclaration = await compileSchemaType(tool.outputSchema, outputTypeName);\n if (outputDeclaration?.declaration) {\n declarationMap.set(outputTypeName, outputDeclaration.declaration);\n } else {\n declarationMap.set(outputTypeName, `export type ${outputTypeName} = unknown;`);\n }\n if (outputDeclaration?.warning) {\n warnings.push(outputDeclaration.warning);\n }\n\n tools.push({\n name: tool.name,\n inputTypeName,\n outputTypeName,\n });\n }\n servers.push({ result: server, tools });\n }\n\n return {\n declarations: Array.from(declarationMap.values()),\n servers,\n };\n}\n\nfunction renderMcpTypes(\n declarations: string[],\n servers: CompiledServer[],\n): string {\n const lines: string[] = [\n \"// 🦋 Kalp Generated MCP Types\",\n \"// This file is auto-generated by `kalp mcp generate`.\",\n \"// Do not edit manually.\",\n \"\",\n \"import \\\"@kalphq/sdk\\\";\",\n \"\",\n ];\n\n if (declarations.length > 0) {\n for (const declaration of declarations) {\n lines.push(declaration.trim());\n lines.push(\"\");\n }\n }\n\n lines.push('declare module \"@kalphq/sdk\" {');\n lines.push(\" interface McpRegistry {\");\n for (const server of servers) {\n lines.push(` ${JSON.stringify(server.result.serverName)}: {`);\n for (const tool of server.tools) {\n lines.push(\n ` ${JSON.stringify(tool.name)}: (input: ${tool.inputTypeName}) => Promise<${tool.outputTypeName}>;`,\n );\n }\n lines.push(\" };\");\n }\n lines.push(\" }\");\n lines.push(\"}\");\n lines.push(\"\");\n\n return lines.join(\"\\n\");\n}\n\nexport async function generateMcpTypes(\n cwd: string,\n options: { strict?: boolean } = {},\n): Promise<McpGenerateResult> {\n const { raw } = await loadProjectConfig(cwd);\n const servers = getServerConfigs(raw);\n const warnings: string[] = [];\n\n const serverResults: McpServerTypesResult[] = [];\n for (const [serverName, config] of Object.entries(servers).sort((a, b) =>\n a[0].localeCompare(b[0]),\n )) {\n try {\n // eslint-disable-next-line no-await-in-loop\n const result = await fetchServerTools(serverName, config);\n serverResults.push(result);\n warnings.push(...result.warnings);\n } catch (error) {\n const message = `Failed to introspect \"${serverName}\" (${config.url}): ${\n error instanceof Error ? error.message : String(error)\n }`;\n if (options.strict) {\n throw new Error(message);\n }\n warnings.push(message);\n serverResults.push({\n serverName,\n transport: config.transport,\n url: config.url,\n tools: [],\n warnings: [message],\n });\n }\n }\n\n const compiled = await compileServerToolTypes(serverResults, warnings);\n const content = renderMcpTypes(compiled.declarations, compiled.servers);\n const outputPath = await writeMcpTypes(cwd, content);\n\n return {\n outputPath,\n servers: serverResults,\n warnings,\n };\n}\n"],"mappings":"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","names":["cwd","spinner"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/login.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport {\n saveAuthConfig,\n type AuthConfig,\n} from \"@/utils/auth\";\nimport { resolveProvider } from \"@/utils/providers\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: { name: \"login\", description: \"Sign in to remote runtime\" },\n async run() {\n p.intro(`${LOGO} ${pc.bold(\"kalp login\")}`);\n\n const provider = resolveProvider();\n const proceed = await p.confirm({\n message: \"Sign in to remote runtime now?\",\n initialValue: true,\n });\n if (p.isCancel(proceed) || !proceed) {\n p.outro(\"Cancelled\");\n return;\n }\n\n const s = p.spinner();\n s.start(\"Opening sign-in flow\");\n\n try {\n await provider.login();\n } catch {\n s.stop(pc.red(\"Sign-in failed\"));\n process.exit(1);\n }\n\n s.stop(\"Sign-in complete\");\n s.start(\"Reading runtime identity\");\n const identity = await provider.whoami();\n const accountId = identity?.accountId;\n const email = identity?.email;\n\n if (!accountId || !email) {\n s.stop(pc.red(\"Could not resolve account identity from wrangler whoami\"));\n process.exit(1);\n }\n\n const authConfig: AuthConfig = {\n provider: \"cloudflare\",\n accountId,\n email,\n expiresAt: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString(),\n };\n\n await saveAuthConfig(authConfig);\n\n s.stop(\"Authentication saved\");\n p.log.success(`Logged in as ${pc.cyan(authConfig.email)}`);\n p.note(`Workspace ID: ${pc.cyan(authConfig.accountId)}`, \"Runtime\");\n p.outro(pc.green(\"Ready to deploy your agents\"));\n },\n});\n"],"mappings":";;;;;;;;AAAA,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AAOf,IAAM,OAAO;AAEb,IAAO,gBAAQ,cAAc;AAAA,EAC3B,MAAM,EAAE,MAAM,SAAS,aAAa,4BAA4B;AAAA,EAChE,MAAM,MAAM;AACV,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,YAAY,CAAC,EAAE;AAE1C,UAAM,WAAW,gBAAgB;AACjC,UAAM,UAAU,MAAQ,UAAQ;AAAA,MAC9B,SAAS;AAAA,MACT,cAAc;AAAA,IAChB,CAAC;AACD,QAAM,WAAS,OAAO,KAAK,CAAC,SAAS;AACnC,MAAE,QAAM,WAAW;AACnB;AAAA,IACF;AAEA,UAAM,IAAM,UAAQ;AACpB,MAAE,MAAM,sBAAsB;AAE9B,QAAI;AACF,YAAM,SAAS,MAAM;AAAA,IACvB,QAAQ;AACN,QAAE,KAAK,GAAG,IAAI,gBAAgB,CAAC;AAC/B,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,MAAE,KAAK,kBAAkB;AACzB,MAAE,MAAM,0BAA0B;AAClC,UAAM,WAAW,MAAM,SAAS,OAAO;AACvC,UAAM,YAAY,UAAU;AAC5B,UAAM,QAAQ,UAAU;AAExB,QAAI,CAAC,aAAa,CAAC,OAAO;AACxB,QAAE,KAAK,GAAG,IAAI,yDAAyD,CAAC;AACxE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,aAAyB;AAAA,MAC7B,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA,WAAW,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,GAAI,EAAE,YAAY;AAAA,IACzE;AAEA,UAAM,eAAe,UAAU;AAE/B,MAAE,KAAK,sBAAsB;AAC7B,IAAE,MAAI,QAAQ,gBAAgB,GAAG,KAAK,WAAW,KAAK,CAAC,EAAE;AACzD,IAAE,OAAK,iBAAiB,GAAG,KAAK,WAAW,SAAS,CAAC,IAAI,SAAS;AAClE,IAAE,QAAM,GAAG,MAAM,6BAA6B,CAAC;AAAA,EACjD;AACF,CAAC;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/push.ts","../src/utils/ir/export.ts"],"sourcesContent":["import { access, mkdir, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { ensureConfig } from \"@/utils/fs\";\nimport { generateTypes } from \"@/utils/codegen\";\nimport { readAgentManifest, computePushHash } from \"@/utils/manifest\";\nimport { requireAuth } from \"@/utils/auth\";\nimport { runInitialDeploy } from \"@/utils/deploy\";\nimport {\n type ProjectAgentState,\n type ProjectState,\n readProjectState,\n writeProjectState,\n} from \"@/utils/project-state\";\nimport { validateCompiledIR } from \"@/utils/validate\";\nimport { materializeRuntime, readLocalAgentNames } from \"@/utils/runtime\";\nimport { resolveProvider } from \"@/utils/providers\";\nimport { exportCompiledIrForDebug } from \"@/utils/ir/export\";\nimport {\n promptDeployTarget,\n showKalpCloudWaitlist,\n} from \"@/utils/deploy-target\";\n\nconst LOGO = \"🦋\";\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n return `${(bytes / 1024).toFixed(1)} KB`;\n}\n\nfunction createInitialState(): ProjectState {\n return {\n workerUrl: null,\n deployedAt: null,\n accountId: null,\n studioCredentialsFingerprint: null,\n serviceKeyFingerprint: null,\n agents: {},\n };\n}\n\nfunction ensureAgentState(\n state: ProjectState,\n agentName: string,\n localPath: string,\n): ProjectAgentState {\n const existing = state.agents[agentName];\n if (existing) {\n existing.localPath = localPath;\n return existing;\n }\n\n const created: ProjectAgentState = {\n currentHash: null,\n currentVersion: 0,\n lastLocalHash: null,\n lastRemoteHash: null,\n lastPushedAt: null,\n localPath,\n workerUrl: state.workerUrl\n ? `${state.workerUrl.replace(/\\/$/, \"\")}/a/${agentName}`\n : null,\n };\n state.agents[agentName] = created;\n return created;\n}\n\ntype PushTarget = \"local\" | \"remote\";\n\ninterface PushResult {\n pushed: number;\n skipped: number;\n failed: number;\n}\n\ninterface RemoteAgentIndexEntry {\n name: string;\n hash: string;\n version: string | null;\n versionNumber: number | null;\n updatedAt: string;\n workerUrl: string | null;\n label?: string;\n tags?: string[];\n}\n\ninterface PruneResult {\n removedAgents: string[];\n deletedKeys: number;\n}\n\nasync function readRemoteAgentsIndex(\n cwd: string,\n wranglerConfigPath: string,\n): Promise<RemoteAgentIndexEntry[]> {\n const provider = resolveProvider();\n const output = await provider\n .getValue({\n cwd,\n configPath: wranglerConfigPath,\n key: \"agents:index\",\n })\n .catch(() => null);\n if (!output) return [];\n try {\n const parsed = JSON.parse(output) as unknown;\n if (!Array.isArray(parsed)) return [];\n return parsed as RemoteAgentIndexEntry[];\n } catch {\n return [];\n }\n}\n\nasync function writeRemoteAgentsIndex(\n cwd: string,\n wranglerConfigPath: string,\n entries: RemoteAgentIndexEntry[],\n): Promise<void> {\n const path = join(cwd, \".kalp\", \"agents-index.json\");\n await writeFile(path, JSON.stringify(entries, null, 2), \"utf-8\");\n const provider = resolveProvider();\n try {\n await provider.putManifest({\n cwd,\n configPath: wranglerConfigPath,\n key: \"agents:index\",\n jsonPath: path,\n });\n } finally {\n await rm(path, { force: true });\n }\n}\n\nasync function pruneStaleRemoteAgents(params: {\n cwd: string;\n wranglerConfigPath: string;\n remoteEntries: RemoteAgentIndexEntry[];\n localAgentNames: string[];\n}): Promise<PruneResult> {\n const { cwd, wranglerConfigPath, remoteEntries, localAgentNames } = params;\n const localSet = new Set(localAgentNames);\n const staleEntries = remoteEntries.filter(\n (entry) => !localSet.has(entry.name),\n );\n\n if (staleEntries.length === 0) {\n return { removedAgents: [], deletedKeys: 0 };\n }\n\n const preview = staleEntries\n .slice(0, 3)\n .map((entry) => entry.name)\n .join(\", \");\n const suffix =\n staleEntries.length > 3 ? ` and ${staleEntries.length - 3} more` : \"\";\n const confirmation = await p.confirm({\n message: `Found ${staleEntries.length} stale remote agents that no longer exist locally (e.g., ${pc.cyan(preview)}${suffix}). Do you want to prune them from the remote runtime?`,\n initialValue: true,\n });\n\n if (p.isCancel(confirmation)) {\n p.outro(\"Cancelled\");\n process.exit(0);\n }\n\n if (!confirmation) {\n return { removedAgents: [], deletedKeys: 0 };\n }\n\n const provider = resolveProvider();\n let deletedKeys = 0;\n\n for (const entry of staleEntries) {\n const latestKey = `${entry.name}:latest`;\n const latestHash = await provider\n .getValue({ cwd, configPath: wranglerConfigPath, key: latestKey })\n .catch(() => null);\n\n const hashes = new Set<string>();\n if (entry.hash) hashes.add(entry.hash);\n if (latestHash) hashes.add(latestHash);\n\n const latestDeleted = await provider\n .deleteValue({\n cwd,\n configPath: wranglerConfigPath,\n key: latestKey,\n })\n .then(() => true)\n .catch(() => false);\n if (latestDeleted) deletedKeys += 1;\n\n for (const hash of hashes) {\n const deleted = await provider\n .deleteValue({\n cwd,\n configPath: wranglerConfigPath,\n key: `${entry.name}:${hash}`,\n })\n .then(() => true)\n .catch(() => false);\n if (deleted) deletedKeys += 1;\n }\n }\n\n const filtered = remoteEntries.filter((entry) => localSet.has(entry.name));\n await writeRemoteAgentsIndex(cwd, wranglerConfigPath, filtered);\n\n return {\n removedAgents: staleEntries\n .map((entry) => entry.name)\n .sort((a, b) => a.localeCompare(b)),\n deletedKeys,\n };\n}\n\nasync function mergeRemoteAgentIndexEntry(params: {\n cwd: string;\n wranglerConfigPath: string;\n entry: RemoteAgentIndexEntry;\n}): Promise<void> {\n const { cwd, wranglerConfigPath, entry } = params;\n const currentIndex = await readRemoteAgentsIndex(cwd, wranglerConfigPath);\n const merged = [\n ...currentIndex.filter((existing) => existing.name !== entry.name),\n entry,\n ].sort((a, b) => a.name.localeCompare(b.name));\n\n await writeRemoteAgentsIndex(cwd, wranglerConfigPath, merged);\n}\n\nasync function pushRemoteManifest(params: {\n cwd: string;\n wranglerConfigPath: string;\n agentName: string;\n hash: string;\n ir: unknown;\n}): Promise<void> {\n const { cwd, wranglerConfigPath, agentName, hash, ir } = params;\n const manifestKey = `${agentName}:${hash}`;\n const latestKey = `${agentName}:latest`;\n const manifestPath = join(cwd, \".kalp\", `${agentName}-${hash}.json`);\n await mkdir(join(cwd, \".kalp\"), { recursive: true });\n await writeFile(manifestPath, JSON.stringify(ir), \"utf-8\");\n\n const provider = resolveProvider();\n try {\n await provider.putManifest({\n cwd,\n configPath: wranglerConfigPath,\n key: manifestKey,\n jsonPath: manifestPath,\n });\n await provider.putValue({\n cwd,\n configPath: wranglerConfigPath,\n key: latestKey,\n value: hash,\n });\n } finally {\n await rm(manifestPath, { force: true });\n }\n}\n\nexport default defineCommand({\n meta: { name: \"push\", description: \"Upload updated agents\" },\n args: {\n agent: {\n type: \"string\",\n alias: \"a\",\n description: \"Agent name to push\",\n required: false,\n },\n local: {\n type: \"boolean\",\n description: \"Update only local runtime snapshot and state\",\n required: false,\n default: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n const target: PushTarget = args.local ? \"local\" : \"remote\";\n const isBulkPush = !args.agent;\n\n p.intro(`${LOGO} ${pc.bold(\"kalp push\")}`);\n\n await ensureConfig(cwd).catch(() => {\n p.log.error(`${pc.cyan(\"kalp.config.ts\")} not found`);\n process.exit(1);\n });\n await generateTypes(cwd);\n\n const availableAgents = await readLocalAgentNames(cwd);\n if (availableAgents.length === 0) {\n p.log.error(\"No local agents found in ./agents\");\n process.exit(1);\n }\n\n let selectedAgents: string[] = [];\n if (args.agent) {\n if (!availableAgents.includes(args.agent)) {\n p.log.error(`Agent ${pc.cyan(args.agent)} not found`);\n process.exit(1);\n }\n selectedAgents = [args.agent];\n } else {\n selectedAgents = availableAgents;\n }\n\n let state = (await readProjectState(cwd)) ?? createInitialState();\n let runtime = await materializeRuntime(cwd, { mode: target });\n\n if (target === \"remote\") {\n await requireAuth().catch(() => {\n p.log.error(\"Not authenticated. Run `kalp login` first.\");\n process.exit(1);\n });\n\n if (!state.workerUrl) {\n const target = await promptDeployTarget(\n \"No remote runtime detected yet. Where do you want to deploy?\",\n );\n if (!target) {\n p.outro(\"Cancelled\");\n return;\n }\n if (target === \"kalp-cloud\") {\n showKalpCloudWaitlist();\n p.outro(pc.green(\"Got it — you'll hear from us soon.\"));\n return;\n }\n const s = p.spinner();\n s.start(\"Running initial deploy\");\n const deploy = await runInitialDeploy(cwd);\n s.stop(\"Initial deploy completed\");\n state = (await readProjectState(cwd)) ?? createInitialState();\n state.workerUrl = deploy.workerUrl;\n state.accountId = deploy.accountId;\n state.deployedAt = new Date().toISOString();\n }\n\n runtime = await materializeRuntime(cwd, { mode: \"remote\" });\n\n if (isBulkPush) {\n const currentIndex = await readRemoteAgentsIndex(\n cwd,\n runtime.wranglerConfigPath,\n );\n const prune = await pruneStaleRemoteAgents({\n cwd,\n wranglerConfigPath: runtime.wranglerConfigPath,\n remoteEntries: currentIndex,\n localAgentNames: availableAgents,\n });\n\n if (prune.removedAgents.length > 0) {\n p.log.info(\n `Pruned stale remote agents: ${pc.cyan(prune.removedAgents.join(\", \"))} ${pc.dim(`(${prune.deletedKeys} keys cleaned)`)}`,\n );\n }\n }\n }\n\n const spinner = p.spinner();\n const result: PushResult = { pushed: 0, skipped: 0, failed: 0 };\n const failures: string[] = [];\n\n for (const agentName of selectedAgents) {\n const agentPath = join(cwd, \"agents\", agentName, \"index.ts\");\n await access(agentPath).catch(() => {\n failures.push(`${agentName}: missing ${agentPath}`);\n });\n\n try {\n spinner.start(`Compiling ${pc.cyan(agentName)}`);\n const manifest = await readAgentManifest({ cwd, agentName });\n const hash = computePushHash(manifest.ir);\n const validation = validateCompiledIR({\n agentName,\n ir: manifest.ir,\n hash,\n });\n if (!validation.ok) {\n const details = (validation.errors ?? []).join(\" | \");\n throw new Error(\n `validation failed (${validation.phase})${details ? `: ${details}` : \"\"}`,\n );\n }\n\n const agentState = ensureAgentState(state, agentName, agentPath);\n const previousHash =\n target === \"local\"\n ? agentState.lastLocalHash\n : agentState.lastRemoteHash;\n\n if (previousHash === hash) {\n result.skipped += 1;\n spinner.stop(`Skipped ${pc.cyan(agentName)} (no changes)`);\n continue;\n }\n\n if (target === \"remote\") {\n spinner.message(`Uploading agent ${pc.cyan(agentName)} to remote runtime`);\n await pushRemoteManifest({\n cwd,\n wranglerConfigPath: runtime.wranglerConfigPath,\n agentName,\n hash,\n ir: manifest.ir,\n });\n }\n\n agentState.currentVersion = Math.max(0, agentState.currentVersion) + 1;\n agentState.currentHash = hash;\n agentState.lastPushedAt = new Date().toISOString();\n agentState.workerUrl =\n state.workerUrl && target === \"remote\"\n ? `${state.workerUrl.replace(/\\/$/, \"\")}/a/${agentName}`\n : agentState.workerUrl;\n\n if (target === \"local\") {\n agentState.lastLocalHash = hash;\n } else {\n agentState.lastRemoteHash = hash;\n agentState.lastLocalHash = hash;\n\n const nextEntry: RemoteAgentIndexEntry = {\n name: agentName,\n hash,\n version: `v${agentState.currentVersion}`,\n versionNumber: agentState.currentVersion,\n updatedAt: agentState.lastPushedAt,\n workerUrl: agentState.workerUrl,\n label: manifest.ir.metadata?.label,\n tags: manifest.ir.metadata?.tags,\n };\n await mergeRemoteAgentIndexEntry({\n cwd,\n wranglerConfigPath: runtime.wranglerConfigPath,\n entry: nextEntry,\n });\n }\n\n const bundles = manifest.ir.bundles || {};\n await exportCompiledIrForDebug({\n cwd,\n agentName,\n ir: manifest.ir,\n });\n const totalSize = Object.values(bundles).reduce(\n (sum, bundle) => sum + Buffer.byteLength(bundle.code),\n 0,\n );\n const handlerCount = Object.keys(bundles).length;\n spinner.stop(\n `${pc.bold(agentName)} pushed ${pc.dim(`(v${agentState.currentVersion})`)} · ${handlerCount} handlers · ${formatBytes(totalSize)}`,\n );\n result.pushed += 1;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n failures.push(`${agentName}: ${message}`);\n spinner.stop(`Failed ${pc.cyan(agentName)}`);\n result.failed += 1;\n }\n }\n\n await writeProjectState(cwd, state);\n await materializeRuntime(cwd, { mode: target });\n\n p.note(\n `Successfully pushed ${result.pushed} agents. ${result.skipped} omitted (no changes). ${result.failed} failed.`,\n target === \"local\" ? \"Local push\" : \"Remote push\",\n );\n if (target === \"remote\" && result.pushed > 0) {\n p.log.info(\n pc.dim(\n \"Changes propagating to remote Studio (eventual consistency, up to ~60s).\",\n ),\n );\n }\n\n if (failures.length > 0) {\n for (const failure of failures) {\n p.log.error(failure);\n }\n p.outro(`${LOGO} ${pc.red(\"Push completed with failures\")}`);\n process.exit(1);\n }\n\n p.outro(`${LOGO} ${pc.green(\"Push complete\")}`);\n },\n});\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\n/**\n * TODO remove after SaaS observability: debug IR export for local inspection.\n */\nexport async function exportCompiledIrForDebug(params: {\n cwd: string;\n agentName: string;\n ir: unknown;\n}): Promise<string> {\n const { cwd, agentName, ir } = params;\n const outDir = join(cwd, \".kalp\", \"exports\", agentName);\n await mkdir(outDir, { recursive: true });\n const outputPath = join(outDir, \"ir.json\");\n await writeFile(outputPath, `${JSON.stringify(ir, null, 2)}\\n`, \"utf-8\");\n return outputPath;\n}\n"],"mappings":"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","names":["mkdir","writeFile","join","join","writeFile","mkdir","target","spinner"]}