@kalphq/cli 0.0.0-dev-20260512071408 → 0.0.0-dev-20260512201224
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-MA4DL2YO.js → chunk-QQELBQEG.js} +12 -8
- package/dist/{chunk-MA4DL2YO.js.map → chunk-QQELBQEG.js.map} +1 -1
- package/dist/{chunk-M3P4O62Y.js → chunk-QSSJ4LP2.js} +5 -3
- package/dist/chunk-QSSJ4LP2.js.map +1 -0
- package/dist/chunk-VCFH3R34.js +103 -0
- package/dist/chunk-VCFH3R34.js.map +1 -0
- package/dist/{chunk-MMR5WRLY.js → chunk-ZMNBWAXJ.js} +87 -5
- package/dist/chunk-ZMNBWAXJ.js.map +1 -0
- package/dist/{deploy-S7C33NB2.js → deploy-IYYTAX3O.js} +12 -5
- package/dist/deploy-IYYTAX3O.js.map +1 -0
- package/dist/dev-YFNI27W3.js +236 -0
- package/dist/dev-YFNI27W3.js.map +1 -0
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/{login-72Q2FQZR.js → login-CJJF46JM.js} +2 -2
- package/dist/{push-MF3OA3VW.js → push-UDZ6KV3S.js} +35 -122
- package/dist/push-UDZ6KV3S.js.map +1 -0
- package/dist/runtime-template/worker-entry.js +118 -1
- package/package.json +4 -4
- package/dist/chunk-M3P4O62Y.js.map +0 -1
- package/dist/chunk-MMR5WRLY.js.map +0 -1
- package/dist/deploy-S7C33NB2.js.map +0 -1
- package/dist/dev-HSFFD4Q5.js +0 -70
- package/dist/dev-HSFFD4Q5.js.map +0 -1
- package/dist/push-MF3OA3VW.js.map +0 -1
- /package/dist/{login-72Q2FQZR.js.map → login-CJJF46JM.js.map} +0 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
computePushHash,
|
|
4
|
+
readAgentManifest,
|
|
5
|
+
validateCompiledIR
|
|
6
|
+
} from "./chunk-VCFH3R34.js";
|
|
7
|
+
import {
|
|
8
|
+
ensureSecretKey,
|
|
9
|
+
materializeRuntime,
|
|
10
|
+
readLocalAgentNames,
|
|
11
|
+
writeRuntimeAgentsSnapshot
|
|
12
|
+
} from "./chunk-QQELBQEG.js";
|
|
13
|
+
|
|
14
|
+
// src/commands/dev.ts
|
|
15
|
+
import { watch } from "fs";
|
|
16
|
+
import { copyFile, mkdir, readFile, rm, writeFile } from "fs/promises";
|
|
17
|
+
import { join } from "path";
|
|
18
|
+
import { setTimeout as delay } from "timers/promises";
|
|
19
|
+
import { defineCommand } from "citty";
|
|
20
|
+
import * as p from "@clack/prompts";
|
|
21
|
+
import pc from "picocolors";
|
|
22
|
+
import { execa } from "execa";
|
|
23
|
+
import open from "open";
|
|
24
|
+
var LOGO = "\u{1F98B}";
|
|
25
|
+
var LOCAL_MANIFESTS_DIR = ".kalp/runtime/local-manifests";
|
|
26
|
+
var HOT_RELOAD_DEBOUNCE_MS = 450;
|
|
27
|
+
async function putLocalManifest(params) {
|
|
28
|
+
await execa(
|
|
29
|
+
"npx",
|
|
30
|
+
[
|
|
31
|
+
"wrangler",
|
|
32
|
+
"kv",
|
|
33
|
+
"key",
|
|
34
|
+
"put",
|
|
35
|
+
params.key,
|
|
36
|
+
"--path",
|
|
37
|
+
params.manifestPath,
|
|
38
|
+
"--binding",
|
|
39
|
+
"KALP_MANIFESTS",
|
|
40
|
+
"--local",
|
|
41
|
+
"--config",
|
|
42
|
+
params.configPath
|
|
43
|
+
],
|
|
44
|
+
{ cwd: params.cwd }
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
async function putLocalValue(params) {
|
|
48
|
+
await execa(
|
|
49
|
+
"npx",
|
|
50
|
+
[
|
|
51
|
+
"wrangler",
|
|
52
|
+
"kv",
|
|
53
|
+
"key",
|
|
54
|
+
"put",
|
|
55
|
+
params.key,
|
|
56
|
+
params.value,
|
|
57
|
+
"--binding",
|
|
58
|
+
"KALP_MANIFESTS",
|
|
59
|
+
"--local",
|
|
60
|
+
"--config",
|
|
61
|
+
params.configPath
|
|
62
|
+
],
|
|
63
|
+
{ cwd: params.cwd }
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
async function syncLocalRuntimeState(params) {
|
|
67
|
+
const { cwd, runtimeDir, configPath } = params;
|
|
68
|
+
await writeRuntimeAgentsSnapshot({ cwd, runtimeDir, mode: "local" });
|
|
69
|
+
const manifestDir = join(cwd, LOCAL_MANIFESTS_DIR);
|
|
70
|
+
await rm(manifestDir, { recursive: true, force: true });
|
|
71
|
+
await mkdir(manifestDir, { recursive: true });
|
|
72
|
+
const agentNames = await readLocalAgentNames(cwd);
|
|
73
|
+
const failed = [];
|
|
74
|
+
let synced = 0;
|
|
75
|
+
for (const agentName of agentNames) {
|
|
76
|
+
try {
|
|
77
|
+
const manifest = await readAgentManifest({ cwd, agentName });
|
|
78
|
+
const hash = computePushHash(manifest.ir);
|
|
79
|
+
const validation = validateCompiledIR({ agentName, ir: manifest.ir, hash });
|
|
80
|
+
if (!validation.ok) {
|
|
81
|
+
const details = (validation.errors ?? []).join(" | ");
|
|
82
|
+
throw new Error(
|
|
83
|
+
`validation failed (${validation.phase})${details ? `: ${details}` : ""}`
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
const manifestKey = `${agentName}:${hash}`;
|
|
87
|
+
const latestKey = `${agentName}:latest`;
|
|
88
|
+
const manifestPath = join(manifestDir, `${agentName}-${hash}.json`);
|
|
89
|
+
await writeFile(manifestPath, JSON.stringify(manifest.ir), "utf-8");
|
|
90
|
+
await putLocalManifest({
|
|
91
|
+
cwd,
|
|
92
|
+
configPath,
|
|
93
|
+
key: manifestKey,
|
|
94
|
+
manifestPath
|
|
95
|
+
});
|
|
96
|
+
await putLocalValue({
|
|
97
|
+
cwd,
|
|
98
|
+
configPath,
|
|
99
|
+
key: latestKey,
|
|
100
|
+
value: hash
|
|
101
|
+
});
|
|
102
|
+
synced += 1;
|
|
103
|
+
} catch (error) {
|
|
104
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
105
|
+
failed.push(`${agentName}: ${reason}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return { synced, failed };
|
|
109
|
+
}
|
|
110
|
+
var dev_default = defineCommand({
|
|
111
|
+
meta: { name: "dev", description: "Run Worker + Studio local environment" },
|
|
112
|
+
async run() {
|
|
113
|
+
const cwd = process.cwd();
|
|
114
|
+
p.intro(`${LOGO} ${pc.bold("kalp dev")}`);
|
|
115
|
+
await ensureSecretKey(cwd);
|
|
116
|
+
await copyFile(join(cwd, ".env"), join(cwd, ".dev.vars"));
|
|
117
|
+
const devVarsPath = join(cwd, ".dev.vars");
|
|
118
|
+
const devVarsContent = await readFile(devVarsPath, "utf-8");
|
|
119
|
+
const nextDevVars = devVarsContent.replace(/^KALP_ENV=.*$/m, "").replace(/^KALP_RUNTIME_MODE=.*$/m, "").trimEnd();
|
|
120
|
+
await writeFile(
|
|
121
|
+
devVarsPath,
|
|
122
|
+
`${nextDevVars}
|
|
123
|
+
KALP_ENV=local
|
|
124
|
+
KALP_RUNTIME_MODE=local
|
|
125
|
+
`,
|
|
126
|
+
"utf-8"
|
|
127
|
+
);
|
|
128
|
+
const runtime = await materializeRuntime(cwd, { mode: "local" });
|
|
129
|
+
const initialSync = await syncLocalRuntimeState({
|
|
130
|
+
cwd,
|
|
131
|
+
runtimeDir: runtime.runtimeDir,
|
|
132
|
+
configPath: runtime.wranglerConfigPath
|
|
133
|
+
});
|
|
134
|
+
if (initialSync.failed.length > 0) {
|
|
135
|
+
for (const failure of initialSync.failed) {
|
|
136
|
+
p.log.warn(`Local sync skipped ${failure}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
p.log.info(
|
|
140
|
+
`${pc.dim("Local agent runtime synced:")} ${pc.cyan(String(initialSync.synced))}`
|
|
141
|
+
);
|
|
142
|
+
p.note("Starting local runtime (wrangler dev :8787)");
|
|
143
|
+
const backend = execa(
|
|
144
|
+
"npx",
|
|
145
|
+
[
|
|
146
|
+
"wrangler",
|
|
147
|
+
"dev",
|
|
148
|
+
"--port",
|
|
149
|
+
"8787",
|
|
150
|
+
"--local",
|
|
151
|
+
"--config",
|
|
152
|
+
runtime.wranglerConfigPath
|
|
153
|
+
],
|
|
154
|
+
{ cwd, stdio: "inherit" }
|
|
155
|
+
);
|
|
156
|
+
let hotReloadTimer = null;
|
|
157
|
+
let hotReloadRunning = false;
|
|
158
|
+
let hotReloadPending = false;
|
|
159
|
+
const runHotReloadSync = async () => {
|
|
160
|
+
if (hotReloadRunning) {
|
|
161
|
+
hotReloadPending = true;
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
hotReloadRunning = true;
|
|
165
|
+
try {
|
|
166
|
+
const sync = await syncLocalRuntimeState({
|
|
167
|
+
cwd,
|
|
168
|
+
runtimeDir: runtime.runtimeDir,
|
|
169
|
+
configPath: runtime.wranglerConfigPath
|
|
170
|
+
});
|
|
171
|
+
if (sync.failed.length > 0) {
|
|
172
|
+
p.log.warn(
|
|
173
|
+
`Local hot reload synced ${sync.synced} agents with ${sync.failed.length} warnings.`
|
|
174
|
+
);
|
|
175
|
+
for (const failure of sync.failed) {
|
|
176
|
+
p.log.warn(`Hot reload skipped ${failure}`);
|
|
177
|
+
}
|
|
178
|
+
} else {
|
|
179
|
+
p.log.info(pc.dim(`Local hot reload synced ${sync.synced} agents.`));
|
|
180
|
+
}
|
|
181
|
+
} finally {
|
|
182
|
+
hotReloadRunning = false;
|
|
183
|
+
if (hotReloadPending) {
|
|
184
|
+
hotReloadPending = false;
|
|
185
|
+
void runHotReloadSync();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
const scheduleHotReloadSync = () => {
|
|
190
|
+
if (hotReloadTimer) clearTimeout(hotReloadTimer);
|
|
191
|
+
hotReloadTimer = setTimeout(() => {
|
|
192
|
+
void runHotReloadSync();
|
|
193
|
+
}, HOT_RELOAD_DEBOUNCE_MS);
|
|
194
|
+
};
|
|
195
|
+
const watchers = [];
|
|
196
|
+
const watchTargets = [join(cwd, "agents"), join(cwd, ".kalp", "state.json")];
|
|
197
|
+
for (const target of watchTargets) {
|
|
198
|
+
try {
|
|
199
|
+
const watcher = watch(
|
|
200
|
+
target,
|
|
201
|
+
target.endsWith(".json") ? void 0 : { recursive: true },
|
|
202
|
+
() => scheduleHotReloadSync()
|
|
203
|
+
);
|
|
204
|
+
watchers.push(watcher);
|
|
205
|
+
} catch {
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
const shutdown = () => {
|
|
209
|
+
if (hotReloadTimer) {
|
|
210
|
+
clearTimeout(hotReloadTimer);
|
|
211
|
+
hotReloadTimer = null;
|
|
212
|
+
}
|
|
213
|
+
for (const watcher of watchers) {
|
|
214
|
+
watcher.close();
|
|
215
|
+
}
|
|
216
|
+
backend.kill("SIGINT");
|
|
217
|
+
};
|
|
218
|
+
process.on("SIGINT", shutdown);
|
|
219
|
+
process.on("SIGTERM", shutdown);
|
|
220
|
+
await delay(2500);
|
|
221
|
+
const studioUrl = "http://localhost:8787/studio/login";
|
|
222
|
+
await open(studioUrl);
|
|
223
|
+
p.log.success(`Studio opened at ${pc.cyan(studioUrl)}`);
|
|
224
|
+
try {
|
|
225
|
+
await backend;
|
|
226
|
+
} finally {
|
|
227
|
+
shutdown();
|
|
228
|
+
process.off("SIGINT", shutdown);
|
|
229
|
+
process.off("SIGTERM", shutdown);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
export {
|
|
234
|
+
dev_default as default
|
|
235
|
+
};
|
|
236
|
+
//# sourceMappingURL=dev-YFNI27W3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 { 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 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":[]}
|
package/dist/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import pc from "picocolors";
|
|
|
8
8
|
// package.json
|
|
9
9
|
var package_default = {
|
|
10
10
|
name: "@kalphq/cli",
|
|
11
|
-
version: "0.0.0-dev-
|
|
11
|
+
version: "0.0.0-dev-20260512201224",
|
|
12
12
|
description: "Zero-config CLI for deploying Kalp agents",
|
|
13
13
|
type: "module",
|
|
14
14
|
license: "MIT",
|
|
@@ -93,13 +93,13 @@ var main = defineCommand({
|
|
|
93
93
|
},
|
|
94
94
|
subCommands: {
|
|
95
95
|
create: () => import("./create-XC55BUCS.js").then((r) => r.default),
|
|
96
|
-
deploy: () => import("./deploy-
|
|
97
|
-
push: () => import("./push-
|
|
96
|
+
deploy: () => import("./deploy-IYYTAX3O.js").then((r) => r.default),
|
|
97
|
+
push: () => import("./push-UDZ6KV3S.js").then((r) => r.default),
|
|
98
98
|
link: () => import("./link-WZQSR2TM.js").then((r) => r.default),
|
|
99
99
|
secrets: () => import("./secrets-P7ADVLOS.js").then((r) => r.default),
|
|
100
|
-
login: () => import("./login-
|
|
100
|
+
login: () => import("./login-CJJF46JM.js").then((r) => r.default),
|
|
101
101
|
logout: () => import("./logout-U5V5K775.js").then((r) => r.default),
|
|
102
|
-
dev: () => import("./dev-
|
|
102
|
+
dev: () => import("./dev-YFNI27W3.js").then((r) => r.default)
|
|
103
103
|
},
|
|
104
104
|
run({ args }) {
|
|
105
105
|
const firstArg = process.argv[2];
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../package.json"],"sourcesContent":["import { defineCommand, runMain } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport pkg from \"../package.json\";\n\nconst LOGO = \"🦋\";\n\nconst COMMANDS = [\n [\"create\", \"Add a new agent\"],\n [\"deploy\", \"Deploy your agents runtime\"],\n [\"push\", \"Publish agent runtime version\"],\n [\"link\", \"Link project to Kalp cloud\"],\n [\"secrets\", \"Manage secrets\"],\n [\"login\", \"Sign in to remote runtime\"],\n [\"logout\", \"Sign out from Kalp\"],\n [\"dev\", \"Run Worker + Studio locally\"],\n] as const;\n\nfunction printHelp(): void {\n p.log.info(`${pc.bold(\"Usage\")}: kalp <command> [options]`);\n console.log(\"\");\n p.log.info(pc.bold(\"Commands\"));\n\n for (const [name, desc] of COMMANDS) {\n console.log(` ${pc.cyan(name.padEnd(10))}${desc}`);\n }\n\n console.log(\"\");\n p.log.info(`Run ${pc.cyan(\"kalp <command> --help\")} for more info.`);\n}\n\nconst main = defineCommand({\n meta: {\n name: \"kalp\",\n version: pkg.version,\n description: \"🦋 Zero-config agent infrastructure\",\n },\n args: {\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n subCommands: {\n create: () => import(\"./commands/create\").then((r) => r.default),\n deploy: () => import(\"./commands/deploy\").then((r) => r.default),\n push: () => import(\"./commands/push\").then((r) => r.default),\n link: () => import(\"./commands/link\").then((r) => r.default),\n secrets: () => import(\"./commands/secrets\").then((r) => r.default),\n login: () => import(\"./commands/login\").then((r) => r.default),\n logout: () => import(\"./commands/logout\").then((r) => r.default),\n dev: () => import(\"./commands/dev\").then((r) => r.default),\n },\n run({ args }) {\n const firstArg = process.argv[2];\n\n if (args.help) {\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n return;\n }\n\n if (firstArg) {\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n },\n});\n\nrunMain(main);\n","{\n \"name\": \"@kalphq/cli\",\n \"version\": \"0.0.0-dev-
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../package.json"],"sourcesContent":["import { defineCommand, runMain } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport pkg from \"../package.json\";\n\nconst LOGO = \"🦋\";\n\nconst COMMANDS = [\n [\"create\", \"Add a new agent\"],\n [\"deploy\", \"Deploy your agents runtime\"],\n [\"push\", \"Publish agent runtime version\"],\n [\"link\", \"Link project to Kalp cloud\"],\n [\"secrets\", \"Manage secrets\"],\n [\"login\", \"Sign in to remote runtime\"],\n [\"logout\", \"Sign out from Kalp\"],\n [\"dev\", \"Run Worker + Studio locally\"],\n] as const;\n\nfunction printHelp(): void {\n p.log.info(`${pc.bold(\"Usage\")}: kalp <command> [options]`);\n console.log(\"\");\n p.log.info(pc.bold(\"Commands\"));\n\n for (const [name, desc] of COMMANDS) {\n console.log(` ${pc.cyan(name.padEnd(10))}${desc}`);\n }\n\n console.log(\"\");\n p.log.info(`Run ${pc.cyan(\"kalp <command> --help\")} for more info.`);\n}\n\nconst main = defineCommand({\n meta: {\n name: \"kalp\",\n version: pkg.version,\n description: \"🦋 Zero-config agent infrastructure\",\n },\n args: {\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n subCommands: {\n create: () => import(\"./commands/create\").then((r) => r.default),\n deploy: () => import(\"./commands/deploy\").then((r) => r.default),\n push: () => import(\"./commands/push\").then((r) => r.default),\n link: () => import(\"./commands/link\").then((r) => r.default),\n secrets: () => import(\"./commands/secrets\").then((r) => r.default),\n login: () => import(\"./commands/login\").then((r) => r.default),\n logout: () => import(\"./commands/logout\").then((r) => r.default),\n dev: () => import(\"./commands/dev\").then((r) => r.default),\n },\n run({ args }) {\n const firstArg = process.argv[2];\n\n if (args.help) {\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n return;\n }\n\n if (firstArg) {\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n },\n});\n\nrunMain(main);\n","{\n \"name\": \"@kalphq/cli\",\n \"version\": \"0.0.0-dev-20260512201224\",\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 && pnpm run build:studio && pnpm run build:runtime-template\",\n \"build:studio\": \"pnpm --filter=@kalphq/studio build\",\n \"build:runtime-template\": \"node ./scripts/prepare-runtime-template.mjs\",\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 \"execa\": \"^9.6.1\",\n \"jiti\": \"^2.6.1\",\n \"jose\": \"^5.10.0\",\n \"json-stable-stringify\": \"1.3.0\",\n \"open\": \"^11.0.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":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
resolveProvider
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ZMNBWAXJ.js";
|
|
5
5
|
import {
|
|
6
6
|
saveAuthConfig
|
|
7
7
|
} from "./chunk-5RODADXW.js";
|
|
@@ -58,4 +58,4 @@ var login_default = defineCommand({
|
|
|
58
58
|
export {
|
|
59
59
|
login_default as default
|
|
60
60
|
};
|
|
61
|
-
//# sourceMappingURL=login-
|
|
61
|
+
//# sourceMappingURL=login-CJJF46JM.js.map
|
|
@@ -1,136 +1,44 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
computePushHash,
|
|
4
|
+
readAgentManifest,
|
|
5
|
+
validateCompiledIR
|
|
6
|
+
} from "./chunk-VCFH3R34.js";
|
|
2
7
|
import {
|
|
3
8
|
ensureConfig
|
|
4
9
|
} from "./chunk-INB3LG6O.js";
|
|
5
10
|
import {
|
|
6
11
|
runInitialDeploy
|
|
7
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-QSSJ4LP2.js";
|
|
8
13
|
import {
|
|
9
14
|
resolveProvider
|
|
10
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-ZMNBWAXJ.js";
|
|
11
16
|
import {
|
|
12
17
|
materializeRuntime,
|
|
13
18
|
readLocalAgentNames,
|
|
14
19
|
readProjectState,
|
|
15
20
|
writeProjectState
|
|
16
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-QQELBQEG.js";
|
|
17
22
|
import {
|
|
18
23
|
requireAuth
|
|
19
24
|
} from "./chunk-5RODADXW.js";
|
|
20
25
|
import "./chunk-FO24J6XL.js";
|
|
21
26
|
|
|
22
27
|
// src/commands/push.ts
|
|
23
|
-
import { access
|
|
24
|
-
import { join as
|
|
28
|
+
import { access, mkdir as mkdir2, rm, writeFile as writeFile2 } from "fs/promises";
|
|
29
|
+
import { join as join2 } from "path";
|
|
25
30
|
import { defineCommand } from "citty";
|
|
26
31
|
import * as p from "@clack/prompts";
|
|
27
32
|
import pc from "picocolors";
|
|
28
33
|
|
|
29
|
-
// src/utils/manifest/index.ts
|
|
30
|
-
import { access, readFile, rm, mkdtemp } from "fs/promises";
|
|
31
|
-
import { join } from "path";
|
|
32
|
-
import { tmpdir } from "os";
|
|
33
|
-
import { buildAgent } from "@kalphq/compiler";
|
|
34
|
-
|
|
35
|
-
// src/utils/ir/hashIR.ts
|
|
36
|
-
import { calculateAgentHash } from "@kalphq/compiler";
|
|
37
|
-
function computePushHash(ir) {
|
|
38
|
-
const bundles = ir.bundles || {};
|
|
39
|
-
const handlers = Object.keys(bundles).reduce(
|
|
40
|
-
(acc, hash) => ({
|
|
41
|
-
...acc,
|
|
42
|
-
[hash]: { hash }
|
|
43
|
-
}),
|
|
44
|
-
{}
|
|
45
|
-
);
|
|
46
|
-
return calculateAgentHash(ir, handlers);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// src/utils/manifest/index.ts
|
|
50
|
-
async function readAgentManifest(params) {
|
|
51
|
-
const { cwd, agentName } = params;
|
|
52
|
-
const agentPath = join(cwd, "agents", agentName, "index.ts");
|
|
53
|
-
await access(agentPath);
|
|
54
|
-
const tempOutDir = await mkdtemp(join(tmpdir(), "kalp-build-"));
|
|
55
|
-
try {
|
|
56
|
-
await buildAgent(agentPath, tempOutDir, cwd);
|
|
57
|
-
const irContent = await readFile(join(tempOutDir, "ir.json"), "utf-8");
|
|
58
|
-
const ir = JSON.parse(irContent);
|
|
59
|
-
return {
|
|
60
|
-
format: "kalp-agent-manifest",
|
|
61
|
-
schemaVersion: 3,
|
|
62
|
-
ir,
|
|
63
|
-
metadata: {
|
|
64
|
-
generatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
} finally {
|
|
68
|
-
await rm(tempOutDir, { recursive: true, force: true });
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// src/utils/validate.ts
|
|
73
|
-
import {
|
|
74
|
-
analyzeHandler,
|
|
75
|
-
calculateAgentHash as calculateAgentHash2,
|
|
76
|
-
validateIR,
|
|
77
|
-
validateIRBindings
|
|
78
|
-
} from "@kalphq/compiler";
|
|
79
|
-
function validateCompiledIR(input) {
|
|
80
|
-
const { ir, hash } = input;
|
|
81
|
-
const bundles = ir.bundles || {};
|
|
82
|
-
const bundleHashes = Object.keys(bundles);
|
|
83
|
-
const irValidation = validateIR(ir);
|
|
84
|
-
if (!irValidation.valid) {
|
|
85
|
-
return { ok: false, phase: "ir", errors: irValidation.errors };
|
|
86
|
-
}
|
|
87
|
-
const bindingsValidation = validateIRBindings(ir, bundleHashes);
|
|
88
|
-
if (!bindingsValidation.valid) {
|
|
89
|
-
return { ok: false, phase: "bindings", errors: bindingsValidation.errors };
|
|
90
|
-
}
|
|
91
|
-
const handlers = bundleHashes.reduce(
|
|
92
|
-
(acc, key) => ({ ...acc, [key]: { hash: key } }),
|
|
93
|
-
{}
|
|
94
|
-
);
|
|
95
|
-
const expectedHash = calculateAgentHash2(ir, handlers);
|
|
96
|
-
if (expectedHash !== hash) {
|
|
97
|
-
return {
|
|
98
|
-
ok: false,
|
|
99
|
-
phase: "hash",
|
|
100
|
-
errors: [
|
|
101
|
-
`Hash mismatch: client provided ${hash}, calculated ${expectedHash}`
|
|
102
|
-
]
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
const analysis = Object.entries(bundles).map(
|
|
106
|
-
([name, bundle]) => ({
|
|
107
|
-
name,
|
|
108
|
-
...analyzeHandler(bundle.code)
|
|
109
|
-
})
|
|
110
|
-
);
|
|
111
|
-
const blockers = analysis.flatMap(
|
|
112
|
-
(entry) => entry.blockers.map((blocker) => `${blocker} in ${entry.name}`)
|
|
113
|
-
);
|
|
114
|
-
if (blockers.length > 0) {
|
|
115
|
-
return {
|
|
116
|
-
ok: false,
|
|
117
|
-
phase: "analysis",
|
|
118
|
-
blockers,
|
|
119
|
-
errors: blockers.map((b) => `[Analysis Blocker] ${b}`),
|
|
120
|
-
analysis
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
return { ok: true, analysis };
|
|
124
|
-
}
|
|
125
|
-
|
|
126
34
|
// src/utils/ir/export.ts
|
|
127
35
|
import { mkdir, writeFile } from "fs/promises";
|
|
128
|
-
import { join
|
|
36
|
+
import { join } from "path";
|
|
129
37
|
async function exportCompiledIrForDebug(params) {
|
|
130
38
|
const { cwd, agentName, ir } = params;
|
|
131
|
-
const outDir =
|
|
39
|
+
const outDir = join(cwd, ".kalp", "exports", agentName);
|
|
132
40
|
await mkdir(outDir, { recursive: true });
|
|
133
|
-
const outputPath =
|
|
41
|
+
const outputPath = join(outDir, "ir.json");
|
|
134
42
|
await writeFile(outputPath, `${JSON.stringify(ir, null, 2)}
|
|
135
43
|
`, "utf-8");
|
|
136
44
|
return outputPath;
|
|
@@ -186,7 +94,7 @@ async function readRemoteAgentsIndex(cwd, wranglerConfigPath) {
|
|
|
186
94
|
}
|
|
187
95
|
}
|
|
188
96
|
async function writeRemoteAgentsIndex(cwd, wranglerConfigPath, entries) {
|
|
189
|
-
const path =
|
|
97
|
+
const path = join2(cwd, ".kalp", "agents-index.json");
|
|
190
98
|
await writeFile2(path, JSON.stringify(entries, null, 2), "utf-8");
|
|
191
99
|
const provider = resolveProvider();
|
|
192
100
|
try {
|
|
@@ -197,15 +105,24 @@ async function writeRemoteAgentsIndex(cwd, wranglerConfigPath, entries) {
|
|
|
197
105
|
jsonPath: path
|
|
198
106
|
});
|
|
199
107
|
} finally {
|
|
200
|
-
await
|
|
108
|
+
await rm(path, { force: true });
|
|
201
109
|
}
|
|
202
110
|
}
|
|
111
|
+
async function mergeRemoteAgentIndexEntry(params) {
|
|
112
|
+
const { cwd, wranglerConfigPath, entry } = params;
|
|
113
|
+
const currentIndex = await readRemoteAgentsIndex(cwd, wranglerConfigPath);
|
|
114
|
+
const merged = [
|
|
115
|
+
...currentIndex.filter((existing) => existing.name !== entry.name),
|
|
116
|
+
entry
|
|
117
|
+
].sort((a, b) => a.name.localeCompare(b.name));
|
|
118
|
+
await writeRemoteAgentsIndex(cwd, wranglerConfigPath, merged);
|
|
119
|
+
}
|
|
203
120
|
async function pushRemoteManifest(params) {
|
|
204
121
|
const { cwd, wranglerConfigPath, agentName, hash, ir } = params;
|
|
205
122
|
const manifestKey = `${agentName}:${hash}`;
|
|
206
123
|
const latestKey = `${agentName}:latest`;
|
|
207
|
-
const manifestPath =
|
|
208
|
-
await mkdir2(
|
|
124
|
+
const manifestPath = join2(cwd, ".kalp", `${agentName}-${hash}.json`);
|
|
125
|
+
await mkdir2(join2(cwd, ".kalp"), { recursive: true });
|
|
209
126
|
await writeFile2(manifestPath, JSON.stringify(ir), "utf-8");
|
|
210
127
|
const provider = resolveProvider();
|
|
211
128
|
try {
|
|
@@ -222,7 +139,7 @@ async function pushRemoteManifest(params) {
|
|
|
222
139
|
value: hash
|
|
223
140
|
});
|
|
224
141
|
} finally {
|
|
225
|
-
await
|
|
142
|
+
await rm(manifestPath, { force: true });
|
|
226
143
|
}
|
|
227
144
|
}
|
|
228
145
|
var push_default = defineCommand({
|
|
@@ -285,8 +202,8 @@ var push_default = defineCommand({
|
|
|
285
202
|
const result = { pushed: 0, skipped: 0, failed: 0 };
|
|
286
203
|
const failures = [];
|
|
287
204
|
for (const agentName of selectedAgents) {
|
|
288
|
-
const agentPath =
|
|
289
|
-
await
|
|
205
|
+
const agentPath = join2(cwd, "agents", agentName, "index.ts");
|
|
206
|
+
await access(agentPath).catch(() => {
|
|
290
207
|
failures.push(`${agentName}: missing ${agentPath}`);
|
|
291
208
|
});
|
|
292
209
|
try {
|
|
@@ -326,10 +243,6 @@ var push_default = defineCommand({
|
|
|
326
243
|
} else {
|
|
327
244
|
agentState.lastRemoteHash = hash;
|
|
328
245
|
agentState.lastLocalHash = hash;
|
|
329
|
-
const currentIndex = await readRemoteAgentsIndex(
|
|
330
|
-
cwd,
|
|
331
|
-
runtime.wranglerConfigPath
|
|
332
|
-
);
|
|
333
246
|
const nextEntry = {
|
|
334
247
|
name: agentName,
|
|
335
248
|
hash,
|
|
@@ -340,11 +253,11 @@ var push_default = defineCommand({
|
|
|
340
253
|
label: manifest.ir.metadata?.label,
|
|
341
254
|
tags: manifest.ir.metadata?.tags
|
|
342
255
|
};
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
256
|
+
await mergeRemoteAgentIndexEntry({
|
|
257
|
+
cwd,
|
|
258
|
+
wranglerConfigPath: runtime.wranglerConfigPath,
|
|
259
|
+
entry: nextEntry
|
|
260
|
+
});
|
|
348
261
|
}
|
|
349
262
|
const bundles = manifest.ir.bundles || {};
|
|
350
263
|
await exportCompiledIrForDebug({
|
|
@@ -394,4 +307,4 @@ var push_default = defineCommand({
|
|
|
394
307
|
export {
|
|
395
308
|
push_default as default
|
|
396
309
|
};
|
|
397
|
-
//# sourceMappingURL=push-
|
|
310
|
+
//# sourceMappingURL=push-UDZ6KV3S.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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 { 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\";\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 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:\n state.workerUrl ? `${state.workerUrl.replace(/\\/$/, \"\")}/a/${agentName}` : 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\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 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: \"Publish agent runtime version\" },\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\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\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 p.log.warn(\"No .kalp/state.json found. Running initial deploy first...\");\n const deploy = await runInitialDeploy(cwd);\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\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({ 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 agentState = ensureAgentState(state, agentName, agentPath);\n const previousHash =\n target === \"local\" ? agentState.lastLocalHash : 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(\"Publishing runtime version\");\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","spinner"]}
|