@kalphq/cli 0.0.0-dev-20260423051216 → 0.0.0-dev-20260423065358
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
CHANGED
|
@@ -42,7 +42,7 @@ var main = defineCommand({
|
|
|
42
42
|
},
|
|
43
43
|
subCommands: {
|
|
44
44
|
create: () => import("./create-7J5R6OVF.js").then((r) => r.default),
|
|
45
|
-
push: () => import("./push-
|
|
45
|
+
push: () => import("./push-XGCLLURN.js").then((r) => r.default),
|
|
46
46
|
link: () => import("./link-WZQSR2TM.js").then((r) => r.default),
|
|
47
47
|
secrets: () => import("./secrets-KFMVBKJQ.js").then((r) => r.default),
|
|
48
48
|
login: () => import("./login-JYPWGL6P.js").then((r) => r.default),
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
import { access as access2 } from "fs/promises";
|
|
8
8
|
import { join as join4 } from "path";
|
|
9
9
|
import { defineCommand } from "citty";
|
|
10
|
-
import * as
|
|
10
|
+
import * as p2 from "@clack/prompts";
|
|
11
11
|
import pc from "picocolors";
|
|
12
12
|
|
|
13
13
|
// src/utils/manifest/index.ts
|
|
@@ -304,10 +304,44 @@ async function readAgentManifest(params) {
|
|
|
304
304
|
}
|
|
305
305
|
}
|
|
306
306
|
|
|
307
|
+
// src/utils/issues.ts
|
|
308
|
+
import * as p from "picocolors";
|
|
309
|
+
var severityIcons = {
|
|
310
|
+
error: p.red("\u2718"),
|
|
311
|
+
warning: p.yellow("\u26A0"),
|
|
312
|
+
info: p.blue("\u2139")
|
|
313
|
+
};
|
|
314
|
+
var severityLabels = {
|
|
315
|
+
error: p.red("Error"),
|
|
316
|
+
warning: p.yellow("Warning"),
|
|
317
|
+
info: p.blue("Info")
|
|
318
|
+
};
|
|
319
|
+
function renderLegacyError(error, showDebug = true) {
|
|
320
|
+
const lines = [];
|
|
321
|
+
const debugMatch = error.match(/\(debug: (.+)\)$/);
|
|
322
|
+
const debug = debugMatch ? debugMatch[1] : void 0;
|
|
323
|
+
const mainError = debugMatch ? error.replace(/\(debug: .+\)$/, "").trim() : error;
|
|
324
|
+
lines.push(p.red(p.bold(`\u2718 ${mainError.split("\n")[0]}`)));
|
|
325
|
+
const fixMatch = mainError.match(/Fix:\n((?:- .+\n?)+)/);
|
|
326
|
+
if (fixMatch) {
|
|
327
|
+
lines.push("");
|
|
328
|
+
lines.push(p.green(" Fix:"));
|
|
329
|
+
const fixLines = fixMatch[1]?.split("\n").filter(Boolean) ?? [];
|
|
330
|
+
for (const line of fixLines) {
|
|
331
|
+
lines.push(` ${line.replace(/^- /, "")}`);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
if (showDebug && debug) {
|
|
335
|
+
lines.push("");
|
|
336
|
+
lines.push(p.dim(` (debug: ${debug})`));
|
|
337
|
+
}
|
|
338
|
+
return lines.join("\n");
|
|
339
|
+
}
|
|
340
|
+
|
|
307
341
|
// package.json
|
|
308
342
|
var package_default = {
|
|
309
343
|
name: "@kalphq/cli",
|
|
310
|
-
version: "0.0.0-dev-
|
|
344
|
+
version: "0.0.0-dev-20260423065358",
|
|
311
345
|
description: "Zero-config CLI for deploying Kalp agents",
|
|
312
346
|
type: "module",
|
|
313
347
|
license: "MIT",
|
|
@@ -370,17 +404,22 @@ function printPushResult(agentName, hash, handlers) {
|
|
|
370
404
|
);
|
|
371
405
|
console.log(div + "\n");
|
|
372
406
|
}
|
|
373
|
-
function printPushError(phase, errors, blockers) {
|
|
407
|
+
function printPushError(phase, errors, blockers, verbose) {
|
|
374
408
|
const div = pc.dim("\u2500".repeat(48));
|
|
375
409
|
console.log("\n" + div);
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
for (const b of blockers)
|
|
382
|
-
|
|
383
|
-
|
|
410
|
+
for (const e of errors) {
|
|
411
|
+
console.log(renderLegacyError(e, verbose));
|
|
412
|
+
console.log("");
|
|
413
|
+
}
|
|
414
|
+
if (phase === "analysis" && blockers) {
|
|
415
|
+
for (const b of blockers) {
|
|
416
|
+
console.log(pc.red(`\u2718 Blocker: ${b}`));
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
if (!verbose) {
|
|
420
|
+
console.log(pc.dim(`
|
|
421
|
+
Run with --verbose for more details.
|
|
422
|
+
`));
|
|
384
423
|
}
|
|
385
424
|
console.log(div + "\n");
|
|
386
425
|
}
|
|
@@ -392,30 +431,36 @@ var push_default = defineCommand({
|
|
|
392
431
|
alias: "a",
|
|
393
432
|
description: "Agent name to push",
|
|
394
433
|
required: false
|
|
434
|
+
},
|
|
435
|
+
verbose: {
|
|
436
|
+
type: "boolean",
|
|
437
|
+
alias: "v",
|
|
438
|
+
description: "Show debug information",
|
|
439
|
+
default: false
|
|
395
440
|
}
|
|
396
441
|
},
|
|
397
442
|
async run({ args }) {
|
|
398
443
|
const cwd = process.cwd();
|
|
399
444
|
const agentName = args.agent;
|
|
400
|
-
|
|
445
|
+
p2.intro(`${LOGO} ${pc.bold("kalp push")}`);
|
|
401
446
|
if (!agentName) {
|
|
402
|
-
|
|
447
|
+
p2.log.error(`Missing required flag ${pc.cyan("-a <agent-name>")}`);
|
|
403
448
|
process.exit(1);
|
|
404
449
|
}
|
|
405
450
|
try {
|
|
406
451
|
await ensureConfig(cwd);
|
|
407
452
|
} catch {
|
|
408
|
-
|
|
453
|
+
p2.log.error(`${pc.cyan("kalp.config.ts")} not found`);
|
|
409
454
|
process.exit(1);
|
|
410
455
|
}
|
|
411
456
|
const agentPath = join4(cwd, "agents", agentName, "index.ts");
|
|
412
457
|
try {
|
|
413
458
|
await access2(agentPath);
|
|
414
459
|
} catch {
|
|
415
|
-
|
|
460
|
+
p2.log.error(`Agent ${pc.cyan(agentName)} not found`);
|
|
416
461
|
process.exit(1);
|
|
417
462
|
}
|
|
418
|
-
const s =
|
|
463
|
+
const s = p2.spinner();
|
|
419
464
|
s.start(`Compiling ${pc.cyan(agentName)}`);
|
|
420
465
|
const manifest = await readAgentManifest({ cwd, agentName });
|
|
421
466
|
const hash = computePushHash(manifest.ir, manifest.handlers);
|
|
@@ -445,10 +490,10 @@ var push_default = defineCommand({
|
|
|
445
490
|
s.stop(pc.green("Pushed successfully"));
|
|
446
491
|
printPushResult(agentName, hash, manifest.handlers);
|
|
447
492
|
const dashboardUrl = `${CLOUD_API}/a/${agentName}`;
|
|
448
|
-
|
|
493
|
+
p2.outro(`${LOGO} ${pc.green("Agent live at")} ${pc.cyan(dashboardUrl)}`);
|
|
449
494
|
}
|
|
450
495
|
});
|
|
451
496
|
export {
|
|
452
497
|
push_default as default
|
|
453
498
|
};
|
|
454
|
-
//# sourceMappingURL=push-
|
|
499
|
+
//# sourceMappingURL=push-XGCLLURN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/push.ts","../src/utils/manifest/index.ts","../src/utils/manifest/build.ts","../src/utils/manifest/handlers.ts","../src/utils/ir/hashIR.ts","../src/utils/issues.ts","../package.json"],"sourcesContent":["import { access } 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 { readAgentManifest, computePushHash } from \"@/utils/manifest\";\nimport { renderLegacyError } from \"@/utils/issues\";\nimport packageJson from \"../../package.json\" with { type: \"json\" };\n\nconst LOGO = \"🦋\";\n\nconst CLI_VERSION: string = packageJson.version;\nconst IS_DEV_VERSION = CLI_VERSION.includes(\"dev\");\nconst CLOUD_API =\n process.env.KALP_CLOUD_URL ||\n (IS_DEV_VERSION ? \"http://localhost:3000\" : \"https://app.usekalp.com\");\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n return `${(bytes / 1024).toFixed(1)} KB`;\n}\n\nfunction printPushResult(\n agentName: string,\n hash: string,\n handlers: Record<string, { size: number }>,\n) {\n const div = pc.dim(\"─\".repeat(48));\n const handlerCount = Object.keys(handlers).length;\n const totalSize = Object.values(handlers).reduce((sum, h) => sum + h.size, 0);\n\n console.log(\"\\n\" + div);\n console.log(pc.green(\"✔ Deployed\"));\n console.log(\"\");\n console.log(` ${pc.bold(agentName)} ${pc.dim(hash.slice(0, 7))}...`);\n console.log(\n ` ${pc.dim(String(handlerCount))} handlers · ${formatBytes(totalSize)}`,\n );\n console.log(div + \"\\n\");\n}\n\nfunction printPushError(\n phase: string,\n errors: string[],\n blockers?: string[],\n verbose?: boolean,\n) {\n const div = pc.dim(\"─\".repeat(48));\n console.log(\"\\n\" + div);\n\n // Use DX-first rendering for all errors\n for (const e of errors) {\n console.log(renderLegacyError(e, verbose));\n console.log(\"\"); // Empty line between errors\n }\n\n if (phase === \"analysis\" && blockers) {\n for (const b of blockers) {\n console.log(pc.red(`✘ Blocker: ${b}`));\n }\n }\n\n if (!verbose) {\n console.log(pc.dim(`\\nRun with --verbose for more details.\\n`));\n }\n\n console.log(div + \"\\n\");\n}\n\nexport default defineCommand({\n meta: { name: \"push\", description: \"Push agent to Kalp cloud\" },\n args: {\n agent: {\n type: \"string\",\n alias: \"a\",\n description: \"Agent name to push\",\n required: false,\n },\n verbose: {\n type: \"boolean\",\n alias: \"v\",\n description: \"Show debug information\",\n default: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n const agentName = args.agent;\n\n p.intro(`${LOGO} ${pc.bold(\"kalp push\")}`);\n\n if (!agentName) {\n p.log.error(`Missing required flag ${pc.cyan(\"-a <agent-name>\")}`);\n process.exit(1);\n }\n\n try {\n await ensureConfig(cwd);\n } catch {\n p.log.error(`${pc.cyan(\"kalp.config.ts\")} not found`);\n process.exit(1);\n }\n\n const agentPath = join(cwd, \"agents\", agentName, \"index.ts\");\n try {\n await access(agentPath);\n } catch {\n p.log.error(`Agent ${pc.cyan(agentName)} not found`);\n process.exit(1);\n }\n\n const s = p.spinner();\n s.start(`Compiling ${pc.cyan(agentName)}`);\n\n const manifest = await readAgentManifest({ cwd, agentName });\n const hash = computePushHash(manifest.ir, manifest.handlers);\n\n s.stop(\n `Compiled ${pc.cyan(agentName)} — ${Object.keys(manifest.handlers).length} handlers`,\n );\n s.start(`Pushing to cloud`);\n\n const response = await fetch(`${CLOUD_API}/api/agents/push`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n agentName,\n ir: manifest.ir,\n hash,\n bundle: { handlers: manifest.handlers },\n }),\n });\n\n const body = (await response.json().catch(() => null)) as Record<\n string,\n unknown\n > | null;\n\n if (!response.ok) {\n s.stop(pc.red(\"Push failed\"));\n const phase = (body?.phase as string) ?? \"unknown\";\n const errors = (body?.errors as string[]) ?? [`HTTP ${response.status}`];\n const blockers = body?.blockers as string[] | undefined;\n printPushError(phase, errors, blockers);\n process.exit(1);\n }\n\n s.stop(pc.green(\"Pushed successfully\"));\n printPushResult(agentName, hash, manifest.handlers);\n\n const dashboardUrl = `${CLOUD_API}/a/${agentName}`;\n p.outro(`${LOGO} ${pc.green(\"Agent live at\")} ${pc.cyan(dashboardUrl)}`);\n },\n});\n","import { access } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { compileAgent } from \"@kalphq/compiler\";\nimport { loadAgentModule, cleanupTempDir } from \"@/utils/manifest/build\";\nimport { extractHandlers } from \"@/utils/manifest/handlers\";\nimport type { AgentManifestV2 } from \"@/utils/manifest/types\";\nexport type {\n AgentManifestV2,\n LoadedAgentModule,\n} from \"@/utils/manifest/types\";\nexport type { HandlerMap, HandlerEntry } from \"@/utils/manifest/handlers\";\nexport { asRecord, asString, asArray } from \"@/utils/manifest/types\";\nexport { loadAgentModule, cleanupTempDir } from \"@/utils/manifest/build\";\nexport { extractHandlers } from \"@/utils/manifest/handlers\";\nexport { getManifestHash } from \"@/utils/manifest/hash\";\nexport { getIRHash, computePushHash } from \"@/utils/ir/hashIR\";\n\nexport async function readAgentManifest(params: {\n cwd: string;\n agentName: string;\n}): Promise<AgentManifestV2> {\n const { cwd, agentName } = params;\n const agentPath = join(cwd, \"agents\", agentName, \"index.ts\");\n await access(agentPath);\n\n let tempDir: string | undefined;\n\n try {\n const loaded = await loadAgentModule(agentPath, cwd);\n tempDir = loaded.tempDir;\n\n const [ir, handlers] = await Promise.all([\n compileAgent(loaded.agent),\n extractHandlers(agentPath, loaded.agent, cwd),\n ]);\n\n return {\n format: \"kalp-agent-manifest\",\n schemaVersion: 2,\n codeHash: loaded.codeHash,\n ir,\n handlers,\n metadata: {\n generatedAt: new Date().toISOString(),\n },\n };\n } finally {\n if (tempDir) {\n await cleanupTempDir(tempDir);\n }\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { mkdtemp, readFile, rm } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { build } from \"esbuild\";\nimport type { LoadedAgentModule } from \"@/utils/manifest/types\";\n\nasync function getHash(payload: string): Promise<string> {\n const { createHash } = await import(\"node:crypto\");\n return createHash(\"sha256\").update(payload).digest(\"hex\");\n}\n\nexport async function loadAgentModule(\n agentPath: string,\n cwd: string,\n): Promise<LoadedAgentModule> {\n const tempDir = await mkdtemp(join(cwd, \".kalp-temp-\"));\n const outFile = join(tempDir, \"agent.manifest.mjs\");\n\n await build({\n entryPoints: [agentPath],\n outfile: outFile,\n bundle: true,\n format: \"esm\",\n platform: \"node\",\n target: \"node18\",\n logLevel: \"silent\",\n packages: \"external\",\n plugins: [\n {\n name: \"relative-js-to-ts\",\n setup(buildCtx) {\n buildCtx.onResolve({ filter: /^\\.\\/.*\\.js$/ }, (args) => {\n const resolved = resolve(args.resolveDir, args.path);\n if (existsSync(resolved)) {\n return { path: resolved };\n }\n\n const tsPath = resolved.replace(/\\.js$/, \".ts\");\n if (existsSync(tsPath)) {\n return { path: tsPath };\n }\n\n const tsxPath = resolved.replace(/\\.js$/, \".tsx\");\n if (existsSync(tsxPath)) {\n return { path: tsxPath };\n }\n\n return null;\n });\n },\n },\n {\n name: \"tsconfig-paths\",\n setup(buildCtx) {\n buildCtx.onResolve({ filter: /^@\\// }, (args) => {\n const withoutPrefix = args.path.replace(/^@\\//, \"\");\n const resolved = resolve(cwd, withoutPrefix);\n\n if (existsSync(resolved)) {\n return { path: resolved };\n }\n\n const tsPath = resolved + \".ts\";\n if (existsSync(tsPath)) {\n return { path: tsPath };\n }\n\n const tsxPath = resolved + \".tsx\";\n if (existsSync(tsxPath)) {\n return { path: tsxPath };\n }\n\n const indexTsPath = join(resolved, \"index.ts\");\n if (existsSync(indexTsPath)) {\n return { path: indexTsPath };\n }\n\n return null;\n });\n },\n },\n ],\n });\n\n const loaded = (await import(\n `${pathToFileURL(outFile).href}?t=${Date.now()}`\n )) as { default?: unknown };\n\n const bundledCode = await readFile(outFile, \"utf-8\");\n const codeHash = await getHash(bundledCode);\n\n return {\n agent: loaded.default,\n tempDir,\n codeHash,\n };\n}\n\nexport async function cleanupTempDir(tempDir: string): Promise<void> {\n await rm(tempDir, { recursive: true, force: true });\n}\n","import { existsSync } from \"node:fs\";\nimport { mkdtemp, rm, writeFile } from \"node:fs/promises\";\nimport { createHash } from \"node:crypto\";\nimport { basename, join, resolve } from \"node:path\";\nimport { build } from \"esbuild\";\n\nexport interface HandlerEntry {\n name: string;\n code: string;\n hash: string;\n size: number;\n}\n\nexport type HandlerMap = Record<string, HandlerEntry>;\n\nfunction sha256(content: string): string {\n return createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\nconst asRecord = (v: unknown): Record<string, unknown> | undefined =>\n v != null && typeof v === \"object\" && !Array.isArray(v)\n ? (v as Record<string, unknown>)\n : undefined;\n\nconst asString = (v: unknown): string | undefined =>\n typeof v === \"string\" ? v : undefined;\n\nconst asArray = (v: unknown): unknown[] => (Array.isArray(v) ? v : []);\n\ninterface WrapperSpec {\n name: string;\n code: string;\n}\n\nfunction buildWrappers(agentPath: string, agentConfig: unknown): WrapperSpec[] {\n const raw = asRecord(agentConfig);\n if (!raw) return [];\n\n const wrappers: WrapperSpec[] = [];\n const escapedPath = agentPath.replace(/\\\\/g, \"/\");\n\n if (raw.onMessage != null) {\n wrappers.push({\n name: \"onMessage\",\n code: `import agent from \"${escapedPath}\";\\nexport default agent.onMessage;\\n`,\n });\n }\n\n if (raw.onInit != null) {\n wrappers.push({\n name: \"onInit\",\n code: `import agent from \"${escapedPath}\";\\nexport default agent.onInit;\\n`,\n });\n }\n\n if (raw.onTick != null) {\n wrappers.push({\n name: \"onTick\",\n code: `import agent from \"${escapedPath}\";\\nexport default agent.onTick;\\n`,\n });\n }\n\n for (const step of asArray(raw.steps)) {\n const rec = asRecord(step);\n const id = rec ? asString(rec.id) : undefined;\n if (!id) continue;\n const safeName = `steps.${id}`;\n wrappers.push({\n name: safeName,\n code: `import agent from \"${escapedPath}\";\\nconst _s = Array.isArray(agent.steps) ? agent.steps.find((s) => s.id === \"${id}\") : null;\\nexport default _s?.run ?? null;\\n`,\n });\n }\n\n for (const tool of asArray(raw.tools)) {\n const rec = asRecord(tool);\n const id = rec ? asString(rec.id) : undefined;\n if (!id) continue;\n const safeName = `tools.${id}`;\n wrappers.push({\n name: safeName,\n code: `import agent from \"${escapedPath}\";\\nconst _t = Array.isArray(agent.tools) ? agent.tools.find((t) => t.id === \"${id}\") : null;\\nexport default _t?.execute ?? null;\\n`,\n });\n }\n\n for (const flow of asArray(raw.flows)) {\n const rec = asRecord(flow);\n if (!rec) continue;\n for (const fs of asArray(rec.steps)) {\n const frec = asRecord(fs);\n const id = frec ? asString(frec.id) : undefined;\n if (!id) continue;\n const safeName = `steps.${id}`;\n if (wrappers.some((w) => w.name === safeName)) continue;\n wrappers.push({\n name: safeName,\n code: `import agent from \"${escapedPath}\";\\nconst _s = Array.isArray(agent.steps) ? agent.steps.find((s) => s.id === \"${id}\") : null;\\nexport default _s?.run ?? null;\\n`,\n });\n }\n }\n\n return wrappers;\n}\n\nfunction makePlugins(cwd: string) {\n return [\n {\n name: \"relative-js-to-ts\",\n setup(buildCtx: any) {\n buildCtx.onResolve({ filter: /^\\.\\/.*\\.js$/ }, (args: any) => {\n const resolved = resolve(args.resolveDir, args.path);\n if (existsSync(resolved)) return { path: resolved };\n const tsPath = resolved.replace(/\\.js$/, \".ts\");\n if (existsSync(tsPath)) return { path: tsPath };\n const tsxPath = resolved.replace(/\\.js$/, \".tsx\");\n if (existsSync(tsxPath)) return { path: tsxPath };\n return null;\n });\n },\n },\n {\n name: \"tsconfig-paths\",\n setup(buildCtx: any) {\n buildCtx.onResolve({ filter: /^@\\// }, (args: any) => {\n const withoutPrefix = args.path.replace(/^@\\//, \"\");\n const resolved = resolve(cwd, withoutPrefix);\n if (existsSync(resolved)) return { path: resolved };\n const tsPath = resolved + \".ts\";\n if (existsSync(tsPath)) return { path: tsPath };\n const tsxPath = resolved + \".tsx\";\n if (existsSync(tsxPath)) return { path: tsxPath };\n const indexTsPath = join(resolved, \"index.ts\");\n if (existsSync(indexTsPath)) return { path: indexTsPath };\n return null;\n });\n },\n },\n ];\n}\n\nexport async function extractHandlers(\n agentPath: string,\n agentConfig: unknown,\n cwd: string,\n): Promise<HandlerMap> {\n const wrappers = buildWrappers(agentPath, agentConfig);\n if (wrappers.length === 0) return {};\n\n const tempDir = await mkdtemp(join(cwd, \".kalp-handlers-\"));\n\n try {\n const entryPoints: Record<string, string> = {};\n\n for (const wrapper of wrappers) {\n const safeFileName = wrapper.name.replace(/\\./g, \"_\") + \".ts\";\n const wrapperPath = join(tempDir, safeFileName);\n await writeFile(wrapperPath, wrapper.code, \"utf-8\");\n entryPoints[wrapper.name] = wrapperPath;\n }\n\n const result = await build({\n entryPoints,\n bundle: true,\n outdir: tempDir,\n format: \"esm\",\n platform: \"browser\",\n target: \"es2020\",\n logLevel: \"silent\",\n packages: \"external\",\n splitting: false,\n write: false,\n plugins: makePlugins(cwd),\n });\n\n const handlerMap: HandlerMap = {};\n\n for (const outputFile of result.outputFiles) {\n const fileName = basename(outputFile.path, \".js\");\n const wrapper = wrappers.find((w) => w.name === fileName);\n if (!wrapper) continue;\n\n const code = outputFile.text;\n handlerMap[wrapper.name] = {\n name: wrapper.name,\n code,\n hash: sha256(code),\n size: outputFile.contents.byteLength,\n };\n }\n\n return handlerMap;\n } finally {\n await rm(tempDir, { recursive: true, force: true });\n }\n}\n","import type { IRGraph } from \"@kalphq/sdk\";\nimport { createHash } from \"crypto\";\nimport stableStringify from \"json-stable-stringify\";\nimport type { HandlerMap } from \"@/utils/manifest/handlers\";\n\nexport function getIRHash(ir: IRGraph): string {\n return createHash(\"sha256\")\n .update(stableStringify(ir) ?? JSON.stringify(ir))\n .digest(\"hex\");\n}\n\nexport function computePushHash(ir: IRGraph, handlers: HandlerMap): string {\n const sortedHandlerHashes = Object.keys(handlers)\n .sort()\n .map((k) => handlers[k]!.hash)\n .join(\"|\");\n const bundleHash = createHash(\"sha256\")\n .update(sortedHandlerHashes)\n .digest(\"hex\");\n const payload =\n stableStringify({ ir, bundleHash }) ?? JSON.stringify({ ir, bundleHash });\n return createHash(\"sha256\").update(payload).digest(\"hex\");\n}\n","import type { ValidationIssue, Severity } from \"@kalphq/compiler\";\nimport * as p from \"picocolors\";\n\ninterface RenderOptions {\n format?: \"pretty\" | \"json\" | \"minimal\";\n showDebug?: boolean;\n}\n\nconst severityIcons: Record<Severity, string> = {\n error: p.red(\"✘\"),\n warning: p.yellow(\"⚠\"),\n info: p.blue(\"ℹ\"),\n};\n\nconst severityLabels: Record<Severity, string> = {\n error: p.red(\"Error\"),\n warning: p.yellow(\"Warning\"),\n info: p.blue(\"Info\"),\n};\n\nfunction groupByContext(\n issues: ValidationIssue[],\n): Map<string, ValidationIssue[]> {\n const groups = new Map<string, ValidationIssue[]>();\n\n for (const issue of issues) {\n const context = issue.context ?? \"General\";\n const existing = groups.get(context) ?? [];\n existing.push(issue);\n groups.set(context, existing);\n }\n\n return groups;\n}\n\nfunction renderPrettyIssue(issue: ValidationIssue, showDebug: boolean): string {\n const lines: string[] = [];\n\n // Header with icon and severity\n lines.push(`${severityIcons[issue.severity]} ${p.bold(issue.message)}`);\n\n // Context (location in code)\n if (issue.context) {\n lines.push(p.dim(` Found in: ${issue.context}`));\n }\n if (issue.location) {\n lines.push(p.dim(` Location: ${issue.location}`));\n }\n\n // Empty line before fix\n lines.push(\"\");\n\n // Fix section\n if (issue.fix) {\n lines.push(p.green(\" Fix:\"));\n const fixLines = issue.fix.split(\"\\n\");\n for (const fixLine of fixLines) {\n lines.push(` ${fixLine}`);\n }\n }\n\n // Debug info (optional)\n if (showDebug && issue.debug) {\n lines.push(\"\");\n lines.push(p.dim(` (debug: ${issue.debug})`));\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction renderGroupedIssues(\n issues: ValidationIssue[],\n showDebug: boolean,\n): string {\n const groups = groupByContext(issues);\n const output: string[] = [];\n\n for (const [context, contextIssues] of groups) {\n // Context header\n output.push(p.cyan(p.bold(`→ ${context}`)));\n output.push(\"\");\n\n // Issues in this context\n for (const issue of contextIssues) {\n output.push(renderPrettyIssue(issue, showDebug));\n output.push(\"\"); // Empty line between issues\n }\n }\n\n return output.join(\"\\n\");\n}\n\nfunction renderMinimalIssue(issue: ValidationIssue): string {\n const icon =\n issue.severity === \"error\" ? \"✘\" : issue.severity === \"warning\" ? \"⚠\" : \"ℹ\";\n const context = issue.context ? ` [${issue.context}]` : \"\";\n return `${icon} ${issue.message}${context}`;\n}\n\nexport function renderIssues(\n issues: ValidationIssue[],\n options: RenderOptions = {},\n): string {\n const { format = \"pretty\", showDebug = false } = options;\n\n if (issues.length === 0) {\n return p.green(\"✓ No issues found\");\n }\n\n // Sort by severity: errors first, then warnings, then info\n const sorted = [...issues].sort((a, b) => {\n const severityOrder = { error: 0, warning: 1, info: 2 };\n return severityOrder[a.severity] - severityOrder[b.severity];\n });\n\n switch (format) {\n case \"json\":\n return JSON.stringify(sorted, null, 2);\n\n case \"minimal\":\n return sorted.map(renderMinimalIssue).join(\"\\n\");\n\n case \"pretty\":\n default: {\n const output: string[] = [];\n\n // Summary header\n const errorCount = issues.filter((i) => i.severity === \"error\").length;\n const warningCount = issues.filter(\n (i) => i.severity === \"warning\",\n ).length;\n const infoCount = issues.filter((i) => i.severity === \"info\").length;\n\n if (errorCount > 0) {\n output.push(\n p.red(\n p.bold(`Found ${errorCount} error${errorCount > 1 ? \"s\" : \"\"}`),\n ),\n );\n }\n if (warningCount > 0) {\n output.push(\n p.yellow(`${warningCount} warning${warningCount > 1 ? \"s\" : \"\"}`),\n );\n }\n if (infoCount > 0) {\n output.push(p.blue(`${infoCount} info`));\n }\n output.push(\"\");\n\n // Grouped issues\n output.push(renderGroupedIssues(sorted, showDebug));\n\n return output.join(\"\\n\");\n }\n }\n}\n\n// Render legacy error strings in DX-first format\nexport function renderLegacyError(\n error: string,\n showDebug: boolean = true,\n): string {\n const lines: string[] = [];\n\n // Extract debug info if present\n const debugMatch = error.match(/\\(debug: (.+)\\)$/);\n const debug = debugMatch ? debugMatch[1] : undefined;\n const mainError = debugMatch\n ? error.replace(/\\(debug: .+\\)$/, \"\").trim()\n : error;\n\n lines.push(p.red(p.bold(`✘ ${mainError.split(\"\\n\")[0]}`)));\n\n // Show fix if present in the error\n const fixMatch = mainError.match(/Fix:\\n((?:- .+\\n?)+)/);\n if (fixMatch) {\n lines.push(\"\");\n lines.push(p.green(\" Fix:\"));\n const fixLines = fixMatch[1]?.split(\"\\n\").filter(Boolean) ?? [];\n for (const line of fixLines) {\n lines.push(` ${line.replace(/^- /, \"\")}`);\n }\n }\n\n if (showDebug && debug) {\n lines.push(\"\");\n lines.push(p.dim(` (debug: ${debug})`));\n }\n\n return lines.join(\"\\n\");\n}\n","{\n \"name\": \"@kalphq/cli\",\n \"version\": \"0.0.0-dev-20260423065358\",\n \"description\": \"Zero-config CLI for deploying Kalp agents\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"author\": \"Kalp HQ\",\n \"bin\": {\n \"kalp\": \"./dist/index.js\"\n },\n \"main\": \"./dist/index.js\",\n \"files\": [\n \"dist\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"tsc --noEmit\",\n \"prepublishOnly\": \"pnpm build\"\n },\n \"dependencies\": {\n \"@antfu/ni\": \"24.4.0\",\n \"@clack/prompts\": \"0.9.1\",\n \"@kalphq/compiler\": \"workspace:*\",\n \"@kalphq/project\": \"workspace:*\",\n \"@kalphq/sdk\": \"workspace:*\",\n \"citty\": \"0.1.6\",\n \"esbuild\": \"0.25.0\",\n \"json-stable-stringify\": \"1.3.0\",\n \"picocolors\": \"1.1.1\",\n \"zod\": \"3.25.76\"\n },\n \"devDependencies\": {\n \"@types/json-stable-stringify\": \"1.2.0\",\n \"@types/node\": \"^22.15.3\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.0.0\"\n }\n}\n"],"mappings":"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","names":["access","join","p","join","createHash","existsSync","mkdtemp","rm","join","resolve","build","createHash","createHash","join","join","access"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kalphq/cli",
|
|
3
|
-
"version": "0.0.0-dev-
|
|
3
|
+
"version": "0.0.0-dev-20260423065358",
|
|
4
4
|
"description": "Zero-config CLI for deploying Kalp agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
"json-stable-stringify": "1.3.0",
|
|
24
24
|
"picocolors": "1.1.1",
|
|
25
25
|
"zod": "3.25.76",
|
|
26
|
-
"@kalphq/compiler": "0.0.0-dev-
|
|
27
|
-
"@kalphq/
|
|
28
|
-
"@kalphq/
|
|
26
|
+
"@kalphq/compiler": "0.0.0-dev-20260423065358",
|
|
27
|
+
"@kalphq/sdk": "0.0.0-dev-20260423065358",
|
|
28
|
+
"@kalphq/project": "0.0.0-dev-20260423065358"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/json-stable-stringify": "1.2.0",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/push.ts","../src/utils/manifest/index.ts","../src/utils/manifest/build.ts","../src/utils/manifest/handlers.ts","../src/utils/ir/hashIR.ts","../package.json"],"sourcesContent":["import { access } 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 { readAgentManifest, computePushHash } from \"@/utils/manifest\";\nimport packageJson from \"../../package.json\" with { type: \"json\" };\n\nconst LOGO = \"🦋\";\n\nconst CLI_VERSION: string = packageJson.version;\nconst IS_DEV_VERSION = CLI_VERSION.includes(\"dev\");\nconst CLOUD_API =\n process.env.KALP_CLOUD_URL ||\n (IS_DEV_VERSION ? \"http://localhost:3000\" : \"https://app.usekalp.com\");\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n return `${(bytes / 1024).toFixed(1)} KB`;\n}\n\nfunction printPushResult(\n agentName: string,\n hash: string,\n handlers: Record<string, { size: number }>,\n) {\n const div = pc.dim(\"─\".repeat(48));\n const handlerCount = Object.keys(handlers).length;\n const totalSize = Object.values(handlers).reduce((sum, h) => sum + h.size, 0);\n\n console.log(\"\\n\" + div);\n console.log(pc.green(\"✔ Deployed\"));\n console.log(\"\");\n console.log(` ${pc.bold(agentName)} ${pc.dim(hash.slice(0, 7))}...`);\n console.log(\n ` ${pc.dim(String(handlerCount))} handlers · ${formatBytes(totalSize)}`,\n );\n console.log(div + \"\\n\");\n}\n\nfunction printPushError(phase: string, errors: string[], blockers?: string[]) {\n const div = pc.dim(\"─\".repeat(48));\n console.log(\"\\n\" + div);\n if (phase === \"ir\") {\n for (const e of errors) console.log(pc.red(`✘ invalid IR: ${e}`));\n } else if (phase === \"bindings\") {\n for (const e of errors) console.log(pc.red(`✘ handler missing: ${e}`));\n } else if (phase === \"analysis\" && blockers) {\n for (const b of blockers) console.log(pc.red(`✘ blockers found: ${b}`));\n } else {\n for (const e of errors) console.log(pc.red(`✘ ${e}`));\n }\n console.log(div + \"\\n\");\n}\n\nexport default defineCommand({\n meta: { name: \"push\", description: \"Push agent to Kalp cloud\" },\n args: {\n agent: {\n type: \"string\",\n alias: \"a\",\n description: \"Agent name to push\",\n required: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n const agentName = args.agent;\n\n p.intro(`${LOGO} ${pc.bold(\"kalp push\")}`);\n\n if (!agentName) {\n p.log.error(`Missing required flag ${pc.cyan(\"-a <agent-name>\")}`);\n process.exit(1);\n }\n\n try {\n await ensureConfig(cwd);\n } catch {\n p.log.error(`${pc.cyan(\"kalp.config.ts\")} not found`);\n process.exit(1);\n }\n\n const agentPath = join(cwd, \"agents\", agentName, \"index.ts\");\n try {\n await access(agentPath);\n } catch {\n p.log.error(`Agent ${pc.cyan(agentName)} not found`);\n process.exit(1);\n }\n\n const s = p.spinner();\n s.start(`Compiling ${pc.cyan(agentName)}`);\n\n const manifest = await readAgentManifest({ cwd, agentName });\n const hash = computePushHash(manifest.ir, manifest.handlers);\n\n s.stop(\n `Compiled ${pc.cyan(agentName)} — ${Object.keys(manifest.handlers).length} handlers`,\n );\n s.start(`Pushing to cloud`);\n\n const response = await fetch(`${CLOUD_API}/api/agents/push`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n agentName,\n ir: manifest.ir,\n hash,\n bundle: { handlers: manifest.handlers },\n }),\n });\n\n const body = (await response.json().catch(() => null)) as Record<\n string,\n unknown\n > | null;\n\n if (!response.ok) {\n s.stop(pc.red(\"Push failed\"));\n const phase = (body?.phase as string) ?? \"unknown\";\n const errors = (body?.errors as string[]) ?? [`HTTP ${response.status}`];\n const blockers = body?.blockers as string[] | undefined;\n printPushError(phase, errors, blockers);\n process.exit(1);\n }\n\n s.stop(pc.green(\"Pushed successfully\"));\n printPushResult(agentName, hash, manifest.handlers);\n\n const dashboardUrl = `${CLOUD_API}/a/${agentName}`;\n p.outro(`${LOGO} ${pc.green(\"Agent live at\")} ${pc.cyan(dashboardUrl)}`);\n },\n});\n","import { access } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { compileAgent } from \"@kalphq/compiler\";\nimport { loadAgentModule, cleanupTempDir } from \"@/utils/manifest/build\";\nimport { extractHandlers } from \"@/utils/manifest/handlers\";\nimport type { AgentManifestV2 } from \"@/utils/manifest/types\";\nexport type {\n AgentManifestV2,\n LoadedAgentModule,\n} from \"@/utils/manifest/types\";\nexport type { HandlerMap, HandlerEntry } from \"@/utils/manifest/handlers\";\nexport { asRecord, asString, asArray } from \"@/utils/manifest/types\";\nexport { loadAgentModule, cleanupTempDir } from \"@/utils/manifest/build\";\nexport { extractHandlers } from \"@/utils/manifest/handlers\";\nexport { getManifestHash } from \"@/utils/manifest/hash\";\nexport { getIRHash, computePushHash } from \"@/utils/ir/hashIR\";\n\nexport async function readAgentManifest(params: {\n cwd: string;\n agentName: string;\n}): Promise<AgentManifestV2> {\n const { cwd, agentName } = params;\n const agentPath = join(cwd, \"agents\", agentName, \"index.ts\");\n await access(agentPath);\n\n let tempDir: string | undefined;\n\n try {\n const loaded = await loadAgentModule(agentPath, cwd);\n tempDir = loaded.tempDir;\n\n const [ir, handlers] = await Promise.all([\n compileAgent(loaded.agent),\n extractHandlers(agentPath, loaded.agent, cwd),\n ]);\n\n return {\n format: \"kalp-agent-manifest\",\n schemaVersion: 2,\n codeHash: loaded.codeHash,\n ir,\n handlers,\n metadata: {\n generatedAt: new Date().toISOString(),\n },\n };\n } finally {\n if (tempDir) {\n await cleanupTempDir(tempDir);\n }\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { mkdtemp, readFile, rm } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { build } from \"esbuild\";\nimport type { LoadedAgentModule } from \"@/utils/manifest/types\";\n\nasync function getHash(payload: string): Promise<string> {\n const { createHash } = await import(\"node:crypto\");\n return createHash(\"sha256\").update(payload).digest(\"hex\");\n}\n\nexport async function loadAgentModule(\n agentPath: string,\n cwd: string,\n): Promise<LoadedAgentModule> {\n const tempDir = await mkdtemp(join(cwd, \".kalp-temp-\"));\n const outFile = join(tempDir, \"agent.manifest.mjs\");\n\n await build({\n entryPoints: [agentPath],\n outfile: outFile,\n bundle: true,\n format: \"esm\",\n platform: \"node\",\n target: \"node18\",\n logLevel: \"silent\",\n packages: \"external\",\n plugins: [\n {\n name: \"relative-js-to-ts\",\n setup(buildCtx) {\n buildCtx.onResolve({ filter: /^\\.\\/.*\\.js$/ }, (args) => {\n const resolved = resolve(args.resolveDir, args.path);\n if (existsSync(resolved)) {\n return { path: resolved };\n }\n\n const tsPath = resolved.replace(/\\.js$/, \".ts\");\n if (existsSync(tsPath)) {\n return { path: tsPath };\n }\n\n const tsxPath = resolved.replace(/\\.js$/, \".tsx\");\n if (existsSync(tsxPath)) {\n return { path: tsxPath };\n }\n\n return null;\n });\n },\n },\n {\n name: \"tsconfig-paths\",\n setup(buildCtx) {\n buildCtx.onResolve({ filter: /^@\\// }, (args) => {\n const withoutPrefix = args.path.replace(/^@\\//, \"\");\n const resolved = resolve(cwd, withoutPrefix);\n\n if (existsSync(resolved)) {\n return { path: resolved };\n }\n\n const tsPath = resolved + \".ts\";\n if (existsSync(tsPath)) {\n return { path: tsPath };\n }\n\n const tsxPath = resolved + \".tsx\";\n if (existsSync(tsxPath)) {\n return { path: tsxPath };\n }\n\n const indexTsPath = join(resolved, \"index.ts\");\n if (existsSync(indexTsPath)) {\n return { path: indexTsPath };\n }\n\n return null;\n });\n },\n },\n ],\n });\n\n const loaded = (await import(\n `${pathToFileURL(outFile).href}?t=${Date.now()}`\n )) as { default?: unknown };\n\n const bundledCode = await readFile(outFile, \"utf-8\");\n const codeHash = await getHash(bundledCode);\n\n return {\n agent: loaded.default,\n tempDir,\n codeHash,\n };\n}\n\nexport async function cleanupTempDir(tempDir: string): Promise<void> {\n await rm(tempDir, { recursive: true, force: true });\n}\n","import { existsSync } from \"node:fs\";\nimport { mkdtemp, rm, writeFile } from \"node:fs/promises\";\nimport { createHash } from \"node:crypto\";\nimport { basename, join, resolve } from \"node:path\";\nimport { build } from \"esbuild\";\n\nexport interface HandlerEntry {\n name: string;\n code: string;\n hash: string;\n size: number;\n}\n\nexport type HandlerMap = Record<string, HandlerEntry>;\n\nfunction sha256(content: string): string {\n return createHash(\"sha256\").update(content).digest(\"hex\");\n}\n\nconst asRecord = (v: unknown): Record<string, unknown> | undefined =>\n v != null && typeof v === \"object\" && !Array.isArray(v)\n ? (v as Record<string, unknown>)\n : undefined;\n\nconst asString = (v: unknown): string | undefined =>\n typeof v === \"string\" ? v : undefined;\n\nconst asArray = (v: unknown): unknown[] => (Array.isArray(v) ? v : []);\n\ninterface WrapperSpec {\n name: string;\n code: string;\n}\n\nfunction buildWrappers(agentPath: string, agentConfig: unknown): WrapperSpec[] {\n const raw = asRecord(agentConfig);\n if (!raw) return [];\n\n const wrappers: WrapperSpec[] = [];\n const escapedPath = agentPath.replace(/\\\\/g, \"/\");\n\n if (raw.onMessage != null) {\n wrappers.push({\n name: \"onMessage\",\n code: `import agent from \"${escapedPath}\";\\nexport default agent.onMessage;\\n`,\n });\n }\n\n if (raw.onInit != null) {\n wrappers.push({\n name: \"onInit\",\n code: `import agent from \"${escapedPath}\";\\nexport default agent.onInit;\\n`,\n });\n }\n\n if (raw.onTick != null) {\n wrappers.push({\n name: \"onTick\",\n code: `import agent from \"${escapedPath}\";\\nexport default agent.onTick;\\n`,\n });\n }\n\n for (const step of asArray(raw.steps)) {\n const rec = asRecord(step);\n const id = rec ? asString(rec.id) : undefined;\n if (!id) continue;\n const safeName = `steps.${id}`;\n wrappers.push({\n name: safeName,\n code: `import agent from \"${escapedPath}\";\\nconst _s = Array.isArray(agent.steps) ? agent.steps.find((s) => s.id === \"${id}\") : null;\\nexport default _s?.run ?? null;\\n`,\n });\n }\n\n for (const tool of asArray(raw.tools)) {\n const rec = asRecord(tool);\n const id = rec ? asString(rec.id) : undefined;\n if (!id) continue;\n const safeName = `tools.${id}`;\n wrappers.push({\n name: safeName,\n code: `import agent from \"${escapedPath}\";\\nconst _t = Array.isArray(agent.tools) ? agent.tools.find((t) => t.id === \"${id}\") : null;\\nexport default _t?.execute ?? null;\\n`,\n });\n }\n\n for (const flow of asArray(raw.flows)) {\n const rec = asRecord(flow);\n if (!rec) continue;\n for (const fs of asArray(rec.steps)) {\n const frec = asRecord(fs);\n const id = frec ? asString(frec.id) : undefined;\n if (!id) continue;\n const safeName = `steps.${id}`;\n if (wrappers.some((w) => w.name === safeName)) continue;\n wrappers.push({\n name: safeName,\n code: `import agent from \"${escapedPath}\";\\nconst _s = Array.isArray(agent.steps) ? agent.steps.find((s) => s.id === \"${id}\") : null;\\nexport default _s?.run ?? null;\\n`,\n });\n }\n }\n\n return wrappers;\n}\n\nfunction makePlugins(cwd: string) {\n return [\n {\n name: \"relative-js-to-ts\",\n setup(buildCtx: any) {\n buildCtx.onResolve({ filter: /^\\.\\/.*\\.js$/ }, (args: any) => {\n const resolved = resolve(args.resolveDir, args.path);\n if (existsSync(resolved)) return { path: resolved };\n const tsPath = resolved.replace(/\\.js$/, \".ts\");\n if (existsSync(tsPath)) return { path: tsPath };\n const tsxPath = resolved.replace(/\\.js$/, \".tsx\");\n if (existsSync(tsxPath)) return { path: tsxPath };\n return null;\n });\n },\n },\n {\n name: \"tsconfig-paths\",\n setup(buildCtx: any) {\n buildCtx.onResolve({ filter: /^@\\// }, (args: any) => {\n const withoutPrefix = args.path.replace(/^@\\//, \"\");\n const resolved = resolve(cwd, withoutPrefix);\n if (existsSync(resolved)) return { path: resolved };\n const tsPath = resolved + \".ts\";\n if (existsSync(tsPath)) return { path: tsPath };\n const tsxPath = resolved + \".tsx\";\n if (existsSync(tsxPath)) return { path: tsxPath };\n const indexTsPath = join(resolved, \"index.ts\");\n if (existsSync(indexTsPath)) return { path: indexTsPath };\n return null;\n });\n },\n },\n ];\n}\n\nexport async function extractHandlers(\n agentPath: string,\n agentConfig: unknown,\n cwd: string,\n): Promise<HandlerMap> {\n const wrappers = buildWrappers(agentPath, agentConfig);\n if (wrappers.length === 0) return {};\n\n const tempDir = await mkdtemp(join(cwd, \".kalp-handlers-\"));\n\n try {\n const entryPoints: Record<string, string> = {};\n\n for (const wrapper of wrappers) {\n const safeFileName = wrapper.name.replace(/\\./g, \"_\") + \".ts\";\n const wrapperPath = join(tempDir, safeFileName);\n await writeFile(wrapperPath, wrapper.code, \"utf-8\");\n entryPoints[wrapper.name] = wrapperPath;\n }\n\n const result = await build({\n entryPoints,\n bundle: true,\n outdir: tempDir,\n format: \"esm\",\n platform: \"browser\",\n target: \"es2020\",\n logLevel: \"silent\",\n packages: \"external\",\n splitting: false,\n write: false,\n plugins: makePlugins(cwd),\n });\n\n const handlerMap: HandlerMap = {};\n\n for (const outputFile of result.outputFiles) {\n const fileName = basename(outputFile.path, \".js\");\n const wrapper = wrappers.find((w) => w.name === fileName);\n if (!wrapper) continue;\n\n const code = outputFile.text;\n handlerMap[wrapper.name] = {\n name: wrapper.name,\n code,\n hash: sha256(code),\n size: outputFile.contents.byteLength,\n };\n }\n\n return handlerMap;\n } finally {\n await rm(tempDir, { recursive: true, force: true });\n }\n}\n","import type { IRGraph } from \"@kalphq/sdk\";\nimport { createHash } from \"crypto\";\nimport stableStringify from \"json-stable-stringify\";\nimport type { HandlerMap } from \"@/utils/manifest/handlers\";\n\nexport function getIRHash(ir: IRGraph): string {\n return createHash(\"sha256\")\n .update(stableStringify(ir) ?? JSON.stringify(ir))\n .digest(\"hex\");\n}\n\nexport function computePushHash(ir: IRGraph, handlers: HandlerMap): string {\n const sortedHandlerHashes = Object.keys(handlers)\n .sort()\n .map((k) => handlers[k]!.hash)\n .join(\"|\");\n const bundleHash = createHash(\"sha256\")\n .update(sortedHandlerHashes)\n .digest(\"hex\");\n const payload =\n stableStringify({ ir, bundleHash }) ?? JSON.stringify({ ir, bundleHash });\n return createHash(\"sha256\").update(payload).digest(\"hex\");\n}\n","{\n \"name\": \"@kalphq/cli\",\n \"version\": \"0.0.0-dev-20260423051216\",\n \"description\": \"Zero-config CLI for deploying Kalp agents\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"author\": \"Kalp HQ\",\n \"bin\": {\n \"kalp\": \"./dist/index.js\"\n },\n \"main\": \"./dist/index.js\",\n \"files\": [\n \"dist\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"tsc --noEmit\",\n \"prepublishOnly\": \"pnpm build\"\n },\n \"dependencies\": {\n \"@antfu/ni\": \"24.4.0\",\n \"@clack/prompts\": \"0.9.1\",\n \"@kalphq/compiler\": \"workspace:*\",\n \"@kalphq/project\": \"workspace:*\",\n \"@kalphq/sdk\": \"workspace:*\",\n \"citty\": \"0.1.6\",\n \"esbuild\": \"0.25.0\",\n \"json-stable-stringify\": \"1.3.0\",\n \"picocolors\": \"1.1.1\",\n \"zod\": \"3.25.76\"\n },\n \"devDependencies\": {\n \"@types/json-stable-stringify\": \"1.2.0\",\n \"@types/node\": \"^22.15.3\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.0.0\"\n }\n}\n"],"mappings":"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","names":["access","join","join","createHash","existsSync","mkdtemp","rm","join","resolve","build","createHash","createHash","join","join","access"]}
|