@kalphq/cli 0.0.0-dev-20260420070136 → 0.0.0-dev-20260421194335

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.
@@ -1,231 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- // src/utils/manifest.ts
4
- import { createHash } from "crypto";
5
- import { existsSync } from "fs";
6
- import {
7
- access,
8
- mkdtemp,
9
- mkdir,
10
- readFile,
11
- readdir,
12
- rm,
13
- writeFile
14
- } from "fs/promises";
15
- import { join, resolve } from "path";
16
- import { pathToFileURL } from "url";
17
- import { build } from "esbuild";
18
- import { zodToJsonSchema } from "zod-to-json-schema";
19
- function asRecord(value) {
20
- return typeof value === "object" && value !== null ? value : {};
21
- }
22
- function asString(value) {
23
- return typeof value === "string" ? value : void 0;
24
- }
25
- function asArray(value) {
26
- return Array.isArray(value) ? value : [];
27
- }
28
- function toJsonSchema(schema, name) {
29
- try {
30
- return zodToJsonSchema(schema, name);
31
- } catch {
32
- return null;
33
- }
34
- }
35
- function serializeSystemPrompt(systemPrompt) {
36
- if (typeof systemPrompt === "string") {
37
- return { type: "static", value: systemPrompt };
38
- }
39
- if (typeof systemPrompt === "function") {
40
- return { type: "dynamic" };
41
- }
42
- return { type: "none" };
43
- }
44
- function serializeSteps(steps) {
45
- return steps.map((step, index) => {
46
- const item = asRecord(step);
47
- return {
48
- id: asString(item.id) ?? `step_${index + 1}`,
49
- order: index + 1,
50
- description: asString(item.description) ?? "",
51
- inputSchema: toJsonSchema(item.input, `step_${index + 1}_input`),
52
- outputSchema: toJsonSchema(item.output, `step_${index + 1}_output`)
53
- };
54
- });
55
- }
56
- function serializeTools(tools) {
57
- return tools.map((tool, index) => {
58
- const item = asRecord(tool);
59
- return {
60
- id: asString(item.id) ?? `tool_${index + 1}`,
61
- order: index + 1,
62
- description: asString(item.description) ?? "",
63
- inputSchema: toJsonSchema(item.input, `tool_${index + 1}_input`)
64
- };
65
- });
66
- }
67
- function serializeRoutes(routes) {
68
- return routes.map((route, index) => {
69
- const item = asRecord(route);
70
- return {
71
- id: asString(item.id) ?? `route_${index + 1}`,
72
- order: index + 1,
73
- method: asString(item.method) ?? "GET",
74
- path: asString(item.path) ?? "/",
75
- inputSchema: toJsonSchema(item.input, `route_${index + 1}_input`)
76
- };
77
- });
78
- }
79
- function serializeFlows(flows, stepIds) {
80
- return flows.map((flow, index) => {
81
- const item = asRecord(flow);
82
- const steps = asArray(item.steps).map((s, stepIndex) => {
83
- const step = asRecord(s);
84
- const stepId = asString(step.id) ?? `step_${stepIndex + 1}`;
85
- return {
86
- order: stepIndex + 1,
87
- stepId,
88
- existsInAgentSteps: stepIds.has(stepId)
89
- };
90
- });
91
- return {
92
- id: asString(item.id) ?? `flow_${index + 1}`,
93
- order: index + 1,
94
- description: asString(item.description) ?? "",
95
- steps
96
- };
97
- });
98
- }
99
- async function loadAgentModule(agentPath, cwd) {
100
- const tempDir = await mkdtemp(join(cwd, ".kalp-manifest-"));
101
- const outFile = join(tempDir, "agent.manifest.mjs");
102
- await build({
103
- entryPoints: [agentPath],
104
- outfile: outFile,
105
- bundle: true,
106
- format: "esm",
107
- platform: "node",
108
- target: "node18",
109
- logLevel: "silent",
110
- packages: "external",
111
- plugins: [
112
- {
113
- name: "relative-js-to-ts",
114
- setup(buildCtx) {
115
- buildCtx.onResolve({ filter: /^\.+\/.*\.js$/ }, (args) => {
116
- const resolved = resolve(args.resolveDir, args.path);
117
- if (existsSync(resolved)) {
118
- return { path: resolved };
119
- }
120
- const tsPath = resolved.replace(/\.js$/, ".ts");
121
- if (existsSync(tsPath)) {
122
- return { path: tsPath };
123
- }
124
- const tsxPath = resolved.replace(/\.js$/, ".tsx");
125
- if (existsSync(tsxPath)) {
126
- return { path: tsxPath };
127
- }
128
- return null;
129
- });
130
- }
131
- },
132
- {
133
- name: "tsconfig-paths",
134
- setup(buildCtx) {
135
- buildCtx.onResolve({ filter: /^@\// }, (args) => {
136
- const withoutPrefix = args.path.replace(/^@\//, "");
137
- const resolved = resolve(cwd, withoutPrefix);
138
- if (existsSync(resolved)) {
139
- return { path: resolved };
140
- }
141
- const tsPath = resolved + ".ts";
142
- if (existsSync(tsPath)) {
143
- return { path: tsPath };
144
- }
145
- const tsxPath = resolved + ".tsx";
146
- if (existsSync(tsxPath)) {
147
- return { path: tsxPath };
148
- }
149
- const indexTsPath = join(resolved, "index.ts");
150
- if (existsSync(indexTsPath)) {
151
- return { path: indexTsPath };
152
- }
153
- return null;
154
- });
155
- }
156
- }
157
- ]
158
- });
159
- const loaded = await import(`${pathToFileURL(outFile).href}?t=${Date.now()}`);
160
- return {
161
- agent: loaded.default,
162
- tempDir
163
- };
164
- }
165
- async function readAgentManifest(params) {
166
- const { cwd, agentName } = params;
167
- const agentPath = join(cwd, "agents", agentName, "index.ts");
168
- await access(agentPath);
169
- let tempDir;
170
- try {
171
- const loaded = await loadAgentModule(agentPath, cwd);
172
- tempDir = loaded.tempDir;
173
- const agent = asRecord(loaded.agent);
174
- const steps = serializeSteps(asArray(agent.steps));
175
- const tools = serializeTools(asArray(agent.tools));
176
- const routes = serializeRoutes(asArray(agent.routes));
177
- const stepIds = new Set(steps.map((step) => step.id));
178
- const flows = serializeFlows(asArray(agent.flows), stepIds);
179
- return {
180
- format: "kalp-agent-manifest",
181
- schemaVersion: 1,
182
- generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
183
- agent: {
184
- id: asString(agent.id),
185
- name: asString(agent.name) ?? agentName,
186
- description: asString(agent.description) ?? "",
187
- systemPrompt: serializeSystemPrompt(agent.systemPrompt),
188
- lifecycle: {
189
- onInit: typeof agent.onInit === "function",
190
- onMessage: typeof agent.onMessage === "function",
191
- onTick: typeof agent.onTick === "function"
192
- },
193
- actions: {
194
- ai: true,
195
- wait: true,
196
- fetch: true,
197
- runStep: true,
198
- callTool: true,
199
- runFlow: true
200
- },
201
- steps,
202
- tools,
203
- routes,
204
- flows,
205
- execution: {
206
- stepOrder: steps.map((step) => step.id),
207
- toolOrder: tools.map((tool) => tool.id),
208
- routeOrder: routes.map((route) => route.id),
209
- flowOrder: flows.map((flow) => flow.id)
210
- }
211
- }
212
- };
213
- } finally {
214
- if (tempDir) {
215
- await rm(tempDir, { recursive: true, force: true });
216
- }
217
- }
218
- }
219
- function getHash(payload) {
220
- return createHash("sha256").update(payload).digest("hex");
221
- }
222
- function getManifestHash(manifest) {
223
- const { generatedAt: _, ...manifestWithoutTimestamp } = manifest;
224
- return getHash(JSON.stringify(manifestWithoutTimestamp));
225
- }
226
- function isManifestVersionFile(fileName) {
227
- return fileName.endsWith(".json");
228
- }
3
+ // src/utils/manifest/hash.ts
229
4
  var ADJECTIVES = [
230
5
  "ancient",
231
6
  "bold",
@@ -345,6 +120,16 @@ function createVersionId(version) {
345
120
  const versionStr = version.toString().padStart(4, "0");
346
121
  return `${versionStr}_${adjective}_${noun}`;
347
122
  }
123
+ function getManifestHash(manifest) {
124
+ return manifest.codeHash;
125
+ }
126
+
127
+ // src/utils/manifest/io.ts
128
+ import { mkdir, readdir, readFile, writeFile } from "fs/promises";
129
+ import { join } from "path";
130
+ function isManifestVersionFile(fileName) {
131
+ return fileName.endsWith(".json");
132
+ }
348
133
  async function readManifestVersionFile(filePath) {
349
134
  try {
350
135
  const src = await readFile(filePath, "utf-8");
@@ -353,6 +138,14 @@ async function readManifestVersionFile(filePath) {
353
138
  return null;
354
139
  }
355
140
  }
141
+ async function readSnapshot(snapshotPath) {
142
+ try {
143
+ const src = await readFile(snapshotPath, "utf-8");
144
+ return JSON.parse(src);
145
+ } catch {
146
+ return {};
147
+ }
148
+ }
356
149
  async function writeVersionedManifest(params) {
357
150
  const { cwd, agentName, manifest } = params;
358
151
  const agentMetaDir = join(cwd, "meta", "migrations", agentName);
@@ -425,19 +218,238 @@ async function readLatestVersionedManifest(params) {
425
218
  outputPath: join(agentMetaDir, `${newest.versionId}.json`)
426
219
  };
427
220
  }
428
- async function readSnapshot(snapshotPath) {
221
+
222
+ // src/utils/manifest/types.ts
223
+ import { zodToJsonSchema } from "zod-to-json-schema";
224
+ function asRecord(value) {
225
+ return typeof value === "object" && value !== null ? value : {};
226
+ }
227
+ function asString(value) {
228
+ return typeof value === "string" ? value : void 0;
229
+ }
230
+ function asArray(value) {
231
+ return Array.isArray(value) ? value : [];
232
+ }
233
+ function toJsonSchema(schema, name) {
429
234
  try {
430
- const src = await readFile(snapshotPath, "utf-8");
431
- return JSON.parse(src);
235
+ return zodToJsonSchema(schema, name);
432
236
  } catch {
433
- return {};
237
+ return null;
238
+ }
239
+ }
240
+
241
+ // src/utils/manifest/serialize.ts
242
+ function serializeSystemPrompt(systemPrompt) {
243
+ if (typeof systemPrompt === "string") {
244
+ return { type: "static", value: systemPrompt };
245
+ }
246
+ if (typeof systemPrompt === "function") {
247
+ return { type: "dynamic" };
248
+ }
249
+ return { type: "none" };
250
+ }
251
+ function serializeSteps(steps) {
252
+ return steps.map((step, index) => {
253
+ const item = asRecord(step);
254
+ return {
255
+ id: asString(item.id) ?? `step_${index + 1}`,
256
+ order: index + 1,
257
+ description: asString(item.description) ?? "",
258
+ inputSchema: toJsonSchema(item.input, `step_${index + 1}_input`),
259
+ outputSchema: toJsonSchema(item.output, `step_${index + 1}_output`)
260
+ };
261
+ });
262
+ }
263
+ function serializeTools(tools) {
264
+ return tools.map((tool, index) => {
265
+ const item = asRecord(tool);
266
+ return {
267
+ id: asString(item.id) ?? `tool_${index + 1}`,
268
+ order: index + 1,
269
+ description: asString(item.description) ?? "",
270
+ inputSchema: toJsonSchema(item.input, `tool_${index + 1}_input`)
271
+ };
272
+ });
273
+ }
274
+ function serializeRoutes(routes) {
275
+ return routes.map((route, index) => {
276
+ const item = asRecord(route);
277
+ return {
278
+ id: asString(item.id) ?? `route_${index + 1}`,
279
+ order: index + 1,
280
+ method: asString(item.method) ?? "GET",
281
+ path: asString(item.path) ?? "/",
282
+ inputSchema: toJsonSchema(item.input, `route_${index + 1}_input`)
283
+ };
284
+ });
285
+ }
286
+ function serializeFlows(flows, stepIds) {
287
+ return flows.map((flow, index) => {
288
+ const item = asRecord(flow);
289
+ const steps = asArray(item.steps).map((s, stepIndex) => {
290
+ const step = asRecord(s);
291
+ const stepId = asString(step.id) ?? `step_${stepIndex + 1}`;
292
+ return {
293
+ order: stepIndex + 1,
294
+ stepId,
295
+ existsInAgentSteps: stepIds.has(stepId)
296
+ };
297
+ });
298
+ return {
299
+ id: asString(item.id) ?? `flow_${index + 1}`,
300
+ order: index + 1,
301
+ description: asString(item.description) ?? "",
302
+ steps
303
+ };
304
+ });
305
+ }
306
+
307
+ // src/utils/manifest/build.ts
308
+ import { existsSync } from "fs";
309
+ import { mkdtemp, readFile as readFile2, rm } from "fs/promises";
310
+ import { join as join2, resolve } from "path";
311
+ import { pathToFileURL } from "url";
312
+ import { build } from "esbuild";
313
+ async function getHash(payload) {
314
+ const { createHash } = await import("crypto");
315
+ return createHash("sha256").update(payload).digest("hex");
316
+ }
317
+ async function loadAgentModule(agentPath, cwd) {
318
+ const tempDir = await mkdtemp(join2(cwd, ".kalp-manifest-"));
319
+ const outFile = join2(tempDir, "agent.manifest.mjs");
320
+ await build({
321
+ entryPoints: [agentPath],
322
+ outfile: outFile,
323
+ bundle: true,
324
+ format: "esm",
325
+ platform: "node",
326
+ target: "node18",
327
+ logLevel: "silent",
328
+ packages: "external",
329
+ plugins: [
330
+ {
331
+ name: "relative-js-to-ts",
332
+ setup(buildCtx) {
333
+ buildCtx.onResolve({ filter: /^\.\/.*\.js$/ }, (args) => {
334
+ const resolved = resolve(args.resolveDir, args.path);
335
+ if (existsSync(resolved)) {
336
+ return { path: resolved };
337
+ }
338
+ const tsPath = resolved.replace(/\.js$/, ".ts");
339
+ if (existsSync(tsPath)) {
340
+ return { path: tsPath };
341
+ }
342
+ const tsxPath = resolved.replace(/\.js$/, ".tsx");
343
+ if (existsSync(tsxPath)) {
344
+ return { path: tsxPath };
345
+ }
346
+ return null;
347
+ });
348
+ }
349
+ },
350
+ {
351
+ name: "tsconfig-paths",
352
+ setup(buildCtx) {
353
+ buildCtx.onResolve({ filter: /^@\// }, (args) => {
354
+ const withoutPrefix = args.path.replace(/^@\//, "");
355
+ const resolved = resolve(cwd, withoutPrefix);
356
+ if (existsSync(resolved)) {
357
+ return { path: resolved };
358
+ }
359
+ const tsPath = resolved + ".ts";
360
+ if (existsSync(tsPath)) {
361
+ return { path: tsPath };
362
+ }
363
+ const tsxPath = resolved + ".tsx";
364
+ if (existsSync(tsxPath)) {
365
+ return { path: tsxPath };
366
+ }
367
+ const indexTsPath = join2(resolved, "index.ts");
368
+ if (existsSync(indexTsPath)) {
369
+ return { path: indexTsPath };
370
+ }
371
+ return null;
372
+ });
373
+ }
374
+ }
375
+ ]
376
+ });
377
+ const loaded = await import(`${pathToFileURL(outFile).href}?t=${Date.now()}`);
378
+ const bundledCode = await readFile2(outFile, "utf-8");
379
+ const codeHash = await getHash(bundledCode);
380
+ return {
381
+ agent: loaded.default,
382
+ tempDir,
383
+ codeHash
384
+ };
385
+ }
386
+ async function cleanupTempDir(tempDir) {
387
+ await rm(tempDir, { recursive: true, force: true });
388
+ }
389
+
390
+ // src/utils/manifest/index.ts
391
+ import { access } from "fs/promises";
392
+ import { join as join3 } from "path";
393
+ async function readAgentManifest(params) {
394
+ const { cwd, agentName } = params;
395
+ const agentPath = join3(cwd, "agents", agentName, "index.ts");
396
+ await access(agentPath);
397
+ let tempDir;
398
+ try {
399
+ const loaded = await loadAgentModule(agentPath, cwd);
400
+ tempDir = loaded.tempDir;
401
+ const agent = asRecord(loaded.agent);
402
+ const steps = serializeSteps(asArray(agent.steps));
403
+ const tools = serializeTools(asArray(agent.tools));
404
+ const routes = serializeRoutes(asArray(agent.routes));
405
+ const stepIds = new Set(steps.map((step) => step.id));
406
+ const flows = serializeFlows(asArray(agent.flows), stepIds);
407
+ return {
408
+ format: "kalp-agent-manifest",
409
+ schemaVersion: 1,
410
+ generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
411
+ codeHash: loaded.codeHash,
412
+ agent: {
413
+ id: asString(agent.id),
414
+ name: asString(agent.name) ?? agentName,
415
+ description: asString(agent.description) ?? "",
416
+ systemPrompt: serializeSystemPrompt(agent.systemPrompt),
417
+ lifecycle: {
418
+ onInit: typeof agent.onInit === "function",
419
+ onMessage: typeof agent.onMessage === "function",
420
+ onTick: typeof agent.onTick === "function"
421
+ },
422
+ actions: {
423
+ ai: true,
424
+ wait: true,
425
+ fetch: true,
426
+ runStep: true,
427
+ callTool: true,
428
+ runFlow: true
429
+ },
430
+ steps,
431
+ tools,
432
+ routes,
433
+ flows,
434
+ execution: {
435
+ stepOrder: steps.map((step) => step.id),
436
+ toolOrder: tools.map((tool) => tool.id),
437
+ routeOrder: routes.map((route) => route.id),
438
+ flowOrder: flows.map((flow) => flow.id)
439
+ }
440
+ }
441
+ };
442
+ } finally {
443
+ if (tempDir) {
444
+ await cleanupTempDir(tempDir);
445
+ }
434
446
  }
435
447
  }
436
448
 
437
449
  export {
438
- readAgentManifest,
439
450
  getManifestHash,
440
451
  writeVersionedManifest,
441
- readLatestVersionedManifest
452
+ readLatestVersionedManifest,
453
+ readAgentManifest
442
454
  };
443
- //# sourceMappingURL=chunk-JKYWI53H.js.map
455
+ //# sourceMappingURL=chunk-S3GDDAMX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/manifest/hash.ts","../src/utils/manifest/io.ts","../src/utils/manifest/types.ts","../src/utils/manifest/serialize.ts","../src/utils/manifest/build.ts","../src/utils/manifest/index.ts"],"sourcesContent":["import type { AgentManifestV1 } from \"@/utils/manifest/types\";\n\n// Fantasy adjectives for migration names (like Drizzle)\nconst ADJECTIVES = [\n \"ancient\",\n \"bold\",\n \"brave\",\n \"bright\",\n \"calm\",\n \"cool\",\n \"cosmic\",\n \"crimson\",\n \"curious\",\n \"daring\",\n \"divine\",\n \"eager\",\n \"elegant\",\n \"fierce\",\n \"gentle\",\n \"golden\",\n \"gracious\",\n \"happy\",\n \"honest\",\n \"humble\",\n \"jolly\",\n \"joyful\",\n \"kind\",\n \"lively\",\n \"lucky\",\n \"magic\",\n \"mighty\",\n \"modern\",\n \"noble\",\n \"peaceful\",\n \"polished\",\n \"proud\",\n \"quick\",\n \"quiet\",\n \"radiant\",\n \"rapid\",\n \"royal\",\n \"serene\",\n \"shiny\",\n \"silent\",\n \"sleek\",\n \"swift\",\n \"tender\",\n \"timely\",\n \"trusting\",\n \"vivid\",\n \"warm\",\n \"wild\",\n \"wise\",\n \"witty\",\n \"zesty\",\n] as const;\n\n// Fantasy nouns for migration names\nconst NOUNS = [\n \"arrow\",\n \"aurora\",\n \"breeze\",\n \"canyon\",\n \"comet\",\n \"crystal\",\n \"dawn\",\n \"diamond\",\n \"dragon\",\n \"dream\",\n \"eagle\",\n \"echo\",\n \"falcon\",\n \"flame\",\n \"forest\",\n \"galaxy\",\n \"garden\",\n \"harbor\",\n \"harmony\",\n \"horizon\",\n \"island\",\n \"journey\",\n \"lagoon\",\n \"meadow\",\n \"miracle\",\n \"moon\",\n \"mountain\",\n \"nebula\",\n \"ocean\",\n \"orchard\",\n \"phoenix\",\n \"pioneer\",\n \"prairie\",\n \"quasar\",\n \"rainbow\",\n \"rapids\",\n \"river\",\n \"shadow\",\n \"silence\",\n \"sky\",\n \"solar\",\n \"star\",\n \"storm\",\n \"summit\",\n \"sunrise\",\n \"sunset\",\n \"thunder\",\n \"tide\",\n \"valley\",\n \"voyage\",\n \"waterfall\",\n \"wave\",\n \"wildflower\",\n \"wisdom\",\n \"zenith\",\n] as const;\n\nfunction getRandomElement<T extends readonly string[]>(arr: T): T[number] {\n return arr[Math.floor(Math.random() * arr.length)] as T[number];\n}\n\nexport function createVersionId(version: number): string {\n const adjective = getRandomElement(ADJECTIVES);\n const noun = getRandomElement(NOUNS);\n const versionStr = version.toString().padStart(4, \"0\");\n return `${versionStr}_${adjective}_${noun}`;\n}\n\nexport function getManifestHash(manifest: AgentManifestV1): string {\n return manifest.codeHash;\n}\n","import { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { ManifestVersionRecord, ManifestRegistryEntry } from \"./types\";\nimport { createVersionId, getManifestHash } from \"./hash\";\nimport type { AgentManifestV1 } from \"./types\";\n\nfunction isManifestVersionFile(fileName: string): boolean {\n return fileName.endsWith(\".json\");\n}\n\nasync function readManifestVersionFile(\n filePath: string,\n): Promise<ManifestVersionRecord | null> {\n try {\n const src = await readFile(filePath, \"utf-8\");\n return JSON.parse(src) as ManifestVersionRecord;\n } catch {\n return null;\n }\n}\n\nasync function readSnapshot(\n snapshotPath: string,\n): Promise<Record<string, ManifestRegistryEntry>> {\n try {\n const src = await readFile(snapshotPath, \"utf-8\");\n return JSON.parse(src) as Record<string, ManifestRegistryEntry>;\n } catch {\n return {};\n }\n}\n\nexport async function writeVersionedManifest(params: {\n cwd: string;\n agentName: string;\n manifest: AgentManifestV1;\n}): Promise<ManifestVersionRecord & { outputPath: string }> {\n const { cwd, agentName, manifest } = params;\n const agentMetaDir = join(cwd, \"meta\", \"migrations\", agentName);\n await mkdir(agentMetaDir, { recursive: true });\n\n const files = await readdir(agentMetaDir);\n const versionFiles = files.filter(isManifestVersionFile);\n const existingRecords = (\n await Promise.all(\n versionFiles.map((file) =>\n readManifestVersionFile(join(agentMetaDir, file)),\n ),\n )\n ).filter((record): record is ManifestVersionRecord => record !== null);\n\n const latestVersion =\n existingRecords\n .map((record) => record.version)\n .sort((a, b) => a - b)\n .at(-1) ?? 0;\n const nextVersion = latestVersion + 1;\n\n const generatedAt = new Date().toISOString();\n const versionId = createVersionId(nextVersion);\n const record: ManifestVersionRecord = {\n version: nextVersion,\n versionId,\n hash: getManifestHash(manifest),\n generatedAt,\n immutable: true,\n manifest,\n };\n\n const versionFile = join(agentMetaDir, `${versionId}.json`);\n await writeFile(versionFile, JSON.stringify(record, null, 2) + \"\\n\", \"utf-8\");\n\n const snapshotPath = join(cwd, \"meta\", \"snapshot.json\");\n const snapshot = await readSnapshot(snapshotPath);\n const prev = snapshot[agentName] ?? { latest: \"\", versions: [] };\n const versions = prev.versions.includes(versionId)\n ? prev.versions\n : [...prev.versions, versionId];\n snapshot[agentName] = { latest: versionId, versions };\n await writeFile(\n snapshotPath,\n JSON.stringify(snapshot, null, 2) + \"\\n\",\n \"utf-8\",\n );\n\n return {\n ...record,\n outputPath: versionFile,\n };\n}\n\nexport async function readLatestVersionedManifest(params: {\n cwd: string;\n agentName: string;\n}): Promise<(ManifestVersionRecord & { outputPath: string }) | null> {\n const { cwd, agentName } = params;\n const agentMetaDir = join(cwd, \"meta\", \"migrations\", agentName);\n const snapshotPath = join(cwd, \"meta\", \"snapshot.json\");\n\n const snapshot = await readSnapshot(snapshotPath);\n const agentEntry = snapshot[agentName];\n\n if (agentEntry?.latest) {\n const latestFile = join(agentMetaDir, `${agentEntry.latest}.json`);\n const latest = await readManifestVersionFile(latestFile);\n if (latest) {\n return {\n ...latest,\n outputPath: latestFile,\n };\n }\n }\n\n const files = await readdir(agentMetaDir).catch(() => [] as string[]);\n const records = (\n await Promise.all(\n files\n .filter(isManifestVersionFile)\n .map((file) => readManifestVersionFile(join(agentMetaDir, file))),\n )\n ).filter((record): record is ManifestVersionRecord => record !== null);\n\n if (records.length === 0) {\n return null;\n }\n\n const newest = records.sort((a, b) => b.version - a.version)[0] ?? null;\n if (!newest) {\n return null;\n }\n\n return {\n ...newest,\n outputPath: join(agentMetaDir, `${newest.versionId}.json`),\n };\n}\n","import type { ZodTypeAny } from \"zod\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\n\nexport interface AgentManifestV1 {\n format: \"kalp-agent-manifest\";\n schemaVersion: 1;\n generatedAt: string;\n codeHash: string;\n agent: {\n id?: string;\n name: string;\n description: string;\n systemPrompt:\n | { type: \"static\"; value: string }\n | { type: \"dynamic\" }\n | { type: \"none\" };\n lifecycle: {\n onInit: boolean;\n onMessage: boolean;\n onTick: boolean;\n };\n actions: {\n ai: boolean;\n wait: boolean;\n fetch: boolean;\n runStep: boolean;\n callTool: boolean;\n runFlow: boolean;\n };\n steps: Array<{\n id: string;\n order: number;\n description: string;\n inputSchema: Record<string, unknown> | null;\n outputSchema: Record<string, unknown> | null;\n }>;\n tools: Array<{\n id: string;\n order: number;\n description: string;\n inputSchema: Record<string, unknown> | null;\n }>;\n routes: Array<{\n id: string;\n order: number;\n method: string;\n path: string;\n inputSchema: Record<string, unknown> | null;\n }>;\n flows: Array<{\n id: string;\n order: number;\n description: string;\n steps: Array<{\n order: number;\n stepId: string;\n existsInAgentSteps: boolean;\n }>;\n }>;\n execution: {\n stepOrder: string[];\n toolOrder: string[];\n routeOrder: string[];\n flowOrder: string[];\n };\n };\n}\n\nexport interface ManifestVersionRecord {\n version: number;\n versionId: string;\n hash: string;\n generatedAt: string;\n immutable: true;\n manifest: AgentManifestV1;\n}\n\nexport interface ManifestRegistryEntry {\n latest: string;\n versions: string[];\n}\n\nexport interface LoadedAgentModule {\n agent: unknown;\n tempDir: string;\n}\n\nexport interface AgentItemWithInput {\n id?: unknown;\n description?: unknown;\n input?: unknown;\n}\n\nexport interface AgentStepItem extends AgentItemWithInput {\n output?: unknown;\n}\n\nexport interface AgentRouteItem extends AgentItemWithInput {\n method?: unknown;\n path?: unknown;\n}\n\nexport interface AgentFlowItem {\n id?: unknown;\n description?: unknown;\n steps?: unknown;\n}\n\nexport function asRecord(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null\n ? (value as Record<string, unknown>)\n : {};\n}\n\nexport function asString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nexport function asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nexport function toJsonSchema(\n schema: unknown,\n name: string,\n): Record<string, unknown> | null {\n try {\n return zodToJsonSchema(schema as ZodTypeAny, name) as Record<\n string,\n unknown\n >;\n } catch {\n return null;\n }\n}\n","import type {\n AgentManifestV1,\n AgentStepItem,\n AgentItemWithInput,\n AgentRouteItem,\n AgentFlowItem,\n} from \"@/utils/manifest/types\";\nimport {\n asRecord,\n asString,\n asArray,\n toJsonSchema,\n} from \"@/utils/manifest/types\";\n\nexport function serializeSystemPrompt(\n systemPrompt: unknown,\n): AgentManifestV1[\"agent\"][\"systemPrompt\"] {\n if (typeof systemPrompt === \"string\") {\n return { type: \"static\", value: systemPrompt };\n }\n\n if (typeof systemPrompt === \"function\") {\n return { type: \"dynamic\" };\n }\n\n return { type: \"none\" };\n}\n\nexport function serializeSteps(\n steps: unknown[],\n): AgentManifestV1[\"agent\"][\"steps\"] {\n return steps.map((step, index) => {\n const item = asRecord(step) as AgentStepItem;\n return {\n id: asString(item.id) ?? `step_${index + 1}`,\n order: index + 1,\n description: asString(item.description) ?? \"\",\n inputSchema: toJsonSchema(item.input, `step_${index + 1}_input`),\n outputSchema: toJsonSchema(item.output, `step_${index + 1}_output`),\n };\n });\n}\n\nexport function serializeTools(\n tools: unknown[],\n): AgentManifestV1[\"agent\"][\"tools\"] {\n return tools.map((tool, index) => {\n const item = asRecord(tool) as AgentItemWithInput;\n return {\n id: asString(item.id) ?? `tool_${index + 1}`,\n order: index + 1,\n description: asString(item.description) ?? \"\",\n inputSchema: toJsonSchema(item.input, `tool_${index + 1}_input`),\n };\n });\n}\n\nexport function serializeRoutes(\n routes: unknown[],\n): AgentManifestV1[\"agent\"][\"routes\"] {\n return routes.map((route, index) => {\n const item = asRecord(route) as AgentRouteItem;\n return {\n id: asString(item.id) ?? `route_${index + 1}`,\n order: index + 1,\n method: asString(item.method) ?? \"GET\",\n path: asString(item.path) ?? \"/\",\n inputSchema: toJsonSchema(item.input, `route_${index + 1}_input`),\n };\n });\n}\n\nexport function serializeFlows(\n flows: unknown[],\n stepIds: Set<string>,\n): AgentManifestV1[\"agent\"][\"flows\"] {\n return flows.map((flow, index) => {\n const item = asRecord(flow) as AgentFlowItem;\n const steps = asArray(item.steps).map((s, stepIndex) => {\n const step = asRecord(s);\n const stepId = asString(step.id) ?? `step_${stepIndex + 1}`;\n return {\n order: stepIndex + 1,\n stepId,\n existsInAgentSteps: stepIds.has(stepId),\n };\n });\n\n return {\n id: asString(item.id) ?? `flow_${index + 1}`,\n order: index + 1,\n description: asString(item.description) ?? \"\",\n steps,\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 & { codeHash: string }> {\n const tempDir = await mkdtemp(join(cwd, \".kalp-manifest-\"));\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","export type {\n AgentManifestV1,\n ManifestVersionRecord,\n ManifestRegistryEntry,\n LoadedAgentModule,\n AgentItemWithInput,\n AgentStepItem,\n AgentRouteItem,\n AgentFlowItem,\n} from \"@/utils/manifest/types\";\n\nexport {\n asRecord,\n asString,\n asArray,\n toJsonSchema,\n} from \"@/utils/manifest/types\";\n\nexport {\n serializeSystemPrompt,\n serializeSteps,\n serializeTools,\n serializeRoutes,\n serializeFlows,\n} from \"@/utils/manifest/serialize\";\n\nexport { loadAgentModule, cleanupTempDir } from \"@/utils/manifest/build\";\n\nexport { createVersionId, getManifestHash } from \"@/utils/manifest/hash\";\n\nexport {\n writeVersionedManifest,\n readLatestVersionedManifest,\n} from \"@/utils/manifest/io\";\n\n// Main function to read agent manifest\nimport { access } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { loadAgentModule, cleanupTempDir } from \"@/utils/manifest/build\";\nimport {\n serializeSystemPrompt,\n serializeSteps,\n serializeTools,\n serializeRoutes,\n serializeFlows,\n} from \"@/utils/manifest/serialize\";\nimport {\n asRecord,\n asString,\n asArray,\n type AgentManifestV1,\n} from \"@/utils/manifest/types\";\n\nexport async function readAgentManifest(params: {\n cwd: string;\n agentName: string;\n}): Promise<AgentManifestV1> {\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 const agent = asRecord(loaded.agent);\n const steps = serializeSteps(asArray(agent.steps));\n const tools = serializeTools(asArray(agent.tools));\n const routes = serializeRoutes(asArray(agent.routes));\n const stepIds = new Set(steps.map((step) => step.id));\n const flows = serializeFlows(asArray(agent.flows), stepIds);\n\n return {\n format: \"kalp-agent-manifest\",\n schemaVersion: 1,\n generatedAt: new Date().toISOString(),\n codeHash: loaded.codeHash,\n agent: {\n id: asString(agent.id),\n name: asString(agent.name) ?? agentName,\n description: asString(agent.description) ?? \"\",\n systemPrompt: serializeSystemPrompt(agent.systemPrompt),\n lifecycle: {\n onInit: typeof agent.onInit === \"function\",\n onMessage: typeof agent.onMessage === \"function\",\n onTick: typeof agent.onTick === \"function\",\n },\n actions: {\n ai: true,\n wait: true,\n fetch: true,\n runStep: true,\n callTool: true,\n runFlow: true,\n },\n steps,\n tools,\n routes,\n flows,\n execution: {\n stepOrder: steps.map((step) => step.id),\n toolOrder: tools.map((tool) => tool.id),\n routeOrder: routes.map((route) => route.id),\n flowOrder: flows.map((flow) => flow.id),\n },\n },\n };\n } finally {\n if (tempDir) {\n await cleanupTempDir(tempDir);\n }\n }\n}\n"],"mappings":"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","names":["record","readFile","join","join","join"]}
@@ -19778,8 +19778,8 @@ export default defineAgent({
19778
19778
  routes: [healthRoute],
19779
19779
  flows: [chatFlow],
19780
19780
 
19781
- async onMessage({ message, ctx, actions }) {
19782
- const stream = actions.ai.stream({
19781
+ async onMessage({ message, ai }) {
19782
+ const stream = ai.stream({
19783
19783
  model: "openai/gpt-4o-mini",
19784
19784
  system: "You are a helpful assistant.",
19785
19785
  prompt: message.text,
@@ -19788,10 +19788,10 @@ export default defineAgent({
19788
19788
  return stream;
19789
19789
  },
19790
19790
  });`;
19791
- const stepProcessFile = `import { createStep } from "@kalphq/sdk";
19791
+ const stepProcessFile = `import { defineStep } from "@kalphq/sdk";
19792
19792
  import { z } from "zod";
19793
19793
 
19794
- export const processQuery = createStep({
19794
+ export const processQuery = defineStep({
19795
19795
  id: "process_query",
19796
19796
  description: "Analyze and enhance user query",
19797
19797
  input: z.object({ query: z.string() }),
@@ -19812,10 +19812,10 @@ export const processQuery = createStep({
19812
19812
  };
19813
19813
  },
19814
19814
  });`;
19815
- const stepFormatFile = `import { createStep } from "@kalphq/sdk";
19815
+ const stepFormatFile = `import { defineStep } from "@kalphq/sdk";
19816
19816
  import { z } from "zod";
19817
19817
 
19818
- export const formatResponse = createStep({
19818
+ export const formatResponse = defineStep({
19819
19819
  id: "format_response",
19820
19820
  description: "Format final response with metadata",
19821
19821
  input: z.object({
@@ -19840,10 +19840,10 @@ export const formatResponse = createStep({
19840
19840
  };
19841
19841
  },
19842
19842
  });`;
19843
- const toolFile = `import { createTool } from "@kalphq/sdk";
19843
+ const toolFile = `import { defineTool } from "@kalphq/sdk";
19844
19844
  import { z } from "zod";
19845
19845
 
19846
- export const searchTool = createTool({
19846
+ export const searchTool = defineTool({
19847
19847
  id: "search",
19848
19848
  description: "Search for relevant information",
19849
19849
  input: z.object({ query: z.string(), limit: z.number().default(3) }),
@@ -19863,7 +19863,7 @@ export const healthRoute = defineRoute({
19863
19863
  id: "health",
19864
19864
  method: "GET",
19865
19865
  path: "/health",
19866
- handler: async (_req, res, { ctx }) => {
19866
+ handler: async (_req, res) => {
19867
19867
  res.json({
19868
19868
  status: "ok",
19869
19869
  agent: "${agentName}",
@@ -19952,4 +19952,4 @@ export {
19952
19952
  promptProjectName,
19953
19953
  promptAgentDetails
19954
19954
  };
19955
- //# sourceMappingURL=chunk-BQOY6ZUE.js.map
19955
+ //# sourceMappingURL=chunk-ZC6AEFXW.js.map