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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/{add-TSWPTKEC.js → add-KRHLYYTO.js} +7 -6
  2. package/dist/add-KRHLYYTO.js.map +1 -0
  3. package/dist/chunk-INB3LG6O.js +25 -0
  4. package/dist/chunk-INB3LG6O.js.map +1 -0
  5. package/dist/{chunk-KD6MYE65.js → chunk-MMS3GWBG.js} +2 -53
  6. package/dist/{chunk-KD6MYE65.js.map → chunk-MMS3GWBG.js.map} +1 -1
  7. package/dist/{create-M4XZB5C4.js → create-7J5R6OVF.js} +44 -36
  8. package/dist/create-7J5R6OVF.js.map +1 -0
  9. package/dist/{delete-IDNFBWDW.js → delete-47ZP6XRB.js} +7 -6
  10. package/dist/delete-47ZP6XRB.js.map +1 -0
  11. package/dist/index.js +6 -10
  12. package/dist/index.js.map +1 -1
  13. package/dist/{link-YCIA4JJ3.js → link-WZQSR2TM.js} +1 -2
  14. package/dist/{link-YCIA4JJ3.js.map → link-WZQSR2TM.js.map} +1 -1
  15. package/dist/{list-OKKHGKJA.js → list-3ZQIFUOT.js} +1 -2
  16. package/dist/{list-OKKHGKJA.js.map → list-3ZQIFUOT.js.map} +1 -1
  17. package/dist/{login-SIKUBDGO.js → login-JYPWGL6P.js} +1 -2
  18. package/dist/{login-SIKUBDGO.js.map → login-JYPWGL6P.js.map} +1 -1
  19. package/dist/{logout-OJM3VAOF.js → logout-V67DZZXO.js} +1 -2
  20. package/dist/{logout-OJM3VAOF.js.map → logout-V67DZZXO.js.map} +1 -1
  21. package/dist/push-RBTBXCP7.js +205 -0
  22. package/dist/push-RBTBXCP7.js.map +1 -0
  23. package/dist/{secrets-FHVISDYJ.js → secrets-KFMVBKJQ.js} +5 -6
  24. package/dist/{secrets-FHVISDYJ.js.map → secrets-KFMVBKJQ.js.map} +1 -1
  25. package/dist/{sync-2UR3KCWW.js → sync-YFM5P3IS.js} +4 -5
  26. package/dist/{sync-2UR3KCWW.js.map → sync-YFM5P3IS.js.map} +1 -1
  27. package/package.json +5 -5
  28. package/dist/acorn-I3UGQPDC.js +0 -3132
  29. package/dist/acorn-I3UGQPDC.js.map +0 -1
  30. package/dist/add-TSWPTKEC.js.map +0 -1
  31. package/dist/angular-5QCYWYQS.js +0 -3032
  32. package/dist/angular-5QCYWYQS.js.map +0 -1
  33. package/dist/babel-VVMWCS4G.js +0 -7298
  34. package/dist/babel-VVMWCS4G.js.map +0 -1
  35. package/dist/chunk-2H7UOFLK.js +0 -11
  36. package/dist/chunk-2H7UOFLK.js.map +0 -1
  37. package/dist/chunk-S3GDDAMX.js +0 -455
  38. package/dist/chunk-S3GDDAMX.js.map +0 -1
  39. package/dist/chunk-TPTPZH2W.js +0 -40
  40. package/dist/chunk-TPTPZH2W.js.map +0 -1
  41. package/dist/chunk-ZC6AEFXW.js +0 -19955
  42. package/dist/chunk-ZC6AEFXW.js.map +0 -1
  43. package/dist/create-M4XZB5C4.js.map +0 -1
  44. package/dist/delete-IDNFBWDW.js.map +0 -1
  45. package/dist/estree-3QNQSWX3.js +0 -4614
  46. package/dist/estree-3QNQSWX3.js.map +0 -1
  47. package/dist/flow-CCY52CGJ.js +0 -27548
  48. package/dist/flow-CCY52CGJ.js.map +0 -1
  49. package/dist/glimmer-WEH5BTZ2.js +0 -2896
  50. package/dist/glimmer-WEH5BTZ2.js.map +0 -1
  51. package/dist/graphql-UERTLN2S.js +0 -1268
  52. package/dist/graphql-UERTLN2S.js.map +0 -1
  53. package/dist/html-2G7A573F.js +0 -2928
  54. package/dist/html-2G7A573F.js.map +0 -1
  55. package/dist/init-HZE6TJJU.js +0 -74
  56. package/dist/init-HZE6TJJU.js.map +0 -1
  57. package/dist/markdown-XILCBMG4.js +0 -3553
  58. package/dist/markdown-XILCBMG4.js.map +0 -1
  59. package/dist/meriyah-THC5AUEQ.js +0 -2686
  60. package/dist/meriyah-THC5AUEQ.js.map +0 -1
  61. package/dist/migrate-ET4ZIJEX.js +0 -94
  62. package/dist/migrate-ET4ZIJEX.js.map +0 -1
  63. package/dist/postcss-WBGWHY5F.js +0 -5082
  64. package/dist/postcss-WBGWHY5F.js.map +0 -1
  65. package/dist/push-BYCTNMMF.js +0 -81
  66. package/dist/push-BYCTNMMF.js.map +0 -1
  67. package/dist/typescript-NS3CY6IL.js +0 -13205
  68. package/dist/typescript-NS3CY6IL.js.map +0 -1
  69. package/dist/yaml-2RE4A77K.js +0 -4226
  70. package/dist/yaml-2RE4A77K.js.map +0 -1
  71. package/templates/project/meta/snapshot.json +0 -1
  72. package/templates/project/package.json +0 -16
  73. package/templates/project/tsconfig.json +0 -18
@@ -1,11 +0,0 @@
1
- #!/usr/bin/env node
2
- var __defProp = Object.defineProperty;
3
- var __export = (target, all) => {
4
- for (var name in all)
5
- __defProp(target, name, { get: all[name], enumerable: true });
6
- };
7
-
8
- export {
9
- __export
10
- };
11
- //# sourceMappingURL=chunk-2H7UOFLK.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,455 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- // src/utils/manifest/hash.ts
4
- var ADJECTIVES = [
5
- "ancient",
6
- "bold",
7
- "brave",
8
- "bright",
9
- "calm",
10
- "cool",
11
- "cosmic",
12
- "crimson",
13
- "curious",
14
- "daring",
15
- "divine",
16
- "eager",
17
- "elegant",
18
- "fierce",
19
- "gentle",
20
- "golden",
21
- "gracious",
22
- "happy",
23
- "honest",
24
- "humble",
25
- "jolly",
26
- "joyful",
27
- "kind",
28
- "lively",
29
- "lucky",
30
- "magic",
31
- "mighty",
32
- "modern",
33
- "noble",
34
- "peaceful",
35
- "polished",
36
- "proud",
37
- "quick",
38
- "quiet",
39
- "radiant",
40
- "rapid",
41
- "royal",
42
- "serene",
43
- "shiny",
44
- "silent",
45
- "sleek",
46
- "swift",
47
- "tender",
48
- "timely",
49
- "trusting",
50
- "vivid",
51
- "warm",
52
- "wild",
53
- "wise",
54
- "witty",
55
- "zesty"
56
- ];
57
- var NOUNS = [
58
- "arrow",
59
- "aurora",
60
- "breeze",
61
- "canyon",
62
- "comet",
63
- "crystal",
64
- "dawn",
65
- "diamond",
66
- "dragon",
67
- "dream",
68
- "eagle",
69
- "echo",
70
- "falcon",
71
- "flame",
72
- "forest",
73
- "galaxy",
74
- "garden",
75
- "harbor",
76
- "harmony",
77
- "horizon",
78
- "island",
79
- "journey",
80
- "lagoon",
81
- "meadow",
82
- "miracle",
83
- "moon",
84
- "mountain",
85
- "nebula",
86
- "ocean",
87
- "orchard",
88
- "phoenix",
89
- "pioneer",
90
- "prairie",
91
- "quasar",
92
- "rainbow",
93
- "rapids",
94
- "river",
95
- "shadow",
96
- "silence",
97
- "sky",
98
- "solar",
99
- "star",
100
- "storm",
101
- "summit",
102
- "sunrise",
103
- "sunset",
104
- "thunder",
105
- "tide",
106
- "valley",
107
- "voyage",
108
- "waterfall",
109
- "wave",
110
- "wildflower",
111
- "wisdom",
112
- "zenith"
113
- ];
114
- function getRandomElement(arr) {
115
- return arr[Math.floor(Math.random() * arr.length)];
116
- }
117
- function createVersionId(version) {
118
- const adjective = getRandomElement(ADJECTIVES);
119
- const noun = getRandomElement(NOUNS);
120
- const versionStr = version.toString().padStart(4, "0");
121
- return `${versionStr}_${adjective}_${noun}`;
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
- }
133
- async function readManifestVersionFile(filePath) {
134
- try {
135
- const src = await readFile(filePath, "utf-8");
136
- return JSON.parse(src);
137
- } catch {
138
- return null;
139
- }
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
- }
149
- async function writeVersionedManifest(params) {
150
- const { cwd, agentName, manifest } = params;
151
- const agentMetaDir = join(cwd, "meta", "migrations", agentName);
152
- await mkdir(agentMetaDir, { recursive: true });
153
- const files = await readdir(agentMetaDir);
154
- const versionFiles = files.filter(isManifestVersionFile);
155
- const existingRecords = (await Promise.all(
156
- versionFiles.map(
157
- (file) => readManifestVersionFile(join(agentMetaDir, file))
158
- )
159
- )).filter((record2) => record2 !== null);
160
- const latestVersion = existingRecords.map((record2) => record2.version).sort((a, b) => a - b).at(-1) ?? 0;
161
- const nextVersion = latestVersion + 1;
162
- const generatedAt = (/* @__PURE__ */ new Date()).toISOString();
163
- const versionId = createVersionId(nextVersion);
164
- const record = {
165
- version: nextVersion,
166
- versionId,
167
- hash: getManifestHash(manifest),
168
- generatedAt,
169
- immutable: true,
170
- manifest
171
- };
172
- const versionFile = join(agentMetaDir, `${versionId}.json`);
173
- await writeFile(versionFile, JSON.stringify(record, null, 2) + "\n", "utf-8");
174
- const snapshotPath = join(cwd, "meta", "snapshot.json");
175
- const snapshot = await readSnapshot(snapshotPath);
176
- const prev = snapshot[agentName] ?? { latest: "", versions: [] };
177
- const versions = prev.versions.includes(versionId) ? prev.versions : [...prev.versions, versionId];
178
- snapshot[agentName] = { latest: versionId, versions };
179
- await writeFile(
180
- snapshotPath,
181
- JSON.stringify(snapshot, null, 2) + "\n",
182
- "utf-8"
183
- );
184
- return {
185
- ...record,
186
- outputPath: versionFile
187
- };
188
- }
189
- async function readLatestVersionedManifest(params) {
190
- const { cwd, agentName } = params;
191
- const agentMetaDir = join(cwd, "meta", "migrations", agentName);
192
- const snapshotPath = join(cwd, "meta", "snapshot.json");
193
- const snapshot = await readSnapshot(snapshotPath);
194
- const agentEntry = snapshot[agentName];
195
- if (agentEntry?.latest) {
196
- const latestFile = join(agentMetaDir, `${agentEntry.latest}.json`);
197
- const latest = await readManifestVersionFile(latestFile);
198
- if (latest) {
199
- return {
200
- ...latest,
201
- outputPath: latestFile
202
- };
203
- }
204
- }
205
- const files = await readdir(agentMetaDir).catch(() => []);
206
- const records = (await Promise.all(
207
- files.filter(isManifestVersionFile).map((file) => readManifestVersionFile(join(agentMetaDir, file)))
208
- )).filter((record) => record !== null);
209
- if (records.length === 0) {
210
- return null;
211
- }
212
- const newest = records.sort((a, b) => b.version - a.version)[0] ?? null;
213
- if (!newest) {
214
- return null;
215
- }
216
- return {
217
- ...newest,
218
- outputPath: join(agentMetaDir, `${newest.versionId}.json`)
219
- };
220
- }
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) {
234
- try {
235
- return zodToJsonSchema(schema, name);
236
- } catch {
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
- }
446
- }
447
- }
448
-
449
- export {
450
- getManifestHash,
451
- writeVersionedManifest,
452
- readLatestVersionedManifest,
453
- readAgentManifest
454
- };
455
- //# sourceMappingURL=chunk-S3GDDAMX.js.map
@@ -1 +0,0 @@
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"]}
@@ -1,40 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- // src/utils/fs.ts
4
- import { access, mkdir } from "fs/promises";
5
- import { join } from "path";
6
- import { exec } from "child_process";
7
- import { promisify } from "util";
8
- var execAsync = promisify(exec);
9
- async function isProjectInitialized(cwd) {
10
- try {
11
- await access(join(cwd, "kalp.config.ts"));
12
- return true;
13
- } catch {
14
- return false;
15
- }
16
- }
17
- async function ensureConfig(cwd) {
18
- const initialized = await isProjectInitialized(cwd);
19
- if (!initialized) {
20
- throw new Error("kalp.config.ts not found");
21
- }
22
- }
23
- async function ensureDirectory(path) {
24
- await mkdir(path, { recursive: true });
25
- }
26
- async function installDeps(cwd) {
27
- try {
28
- await execAsync("npx --no-install nci", { cwd });
29
- } catch {
30
- await execAsync("npm install", { cwd });
31
- }
32
- }
33
-
34
- export {
35
- isProjectInitialized,
36
- ensureConfig,
37
- ensureDirectory,
38
- installDeps
39
- };
40
- //# sourceMappingURL=chunk-TPTPZH2W.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/fs.ts"],"sourcesContent":["import { access, mkdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { exec } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execAsync = promisify(exec);\n\nexport async function isProjectInitialized(cwd: string): Promise<boolean> {\n try {\n await access(join(cwd, \"kalp.config.ts\"));\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function ensureConfig(cwd: string): Promise<void> {\n const initialized = await isProjectInitialized(cwd);\n if (!initialized) {\n throw new Error(\"kalp.config.ts not found\");\n }\n}\n\nexport async function ensureDirectory(path: string): Promise<void> {\n await mkdir(path, { recursive: true });\n}\n\nexport async function installDeps(cwd: string): Promise<void> {\n try {\n await execAsync(\"npx --no-install nci\", { cwd });\n } catch {\n await execAsync(\"npm install\", { cwd });\n }\n}\n"],"mappings":";;;AAAA,SAAS,QAAQ,aAAa;AAC9B,SAAS,YAAY;AACrB,SAAS,YAAY;AACrB,SAAS,iBAAiB;AAE1B,IAAM,YAAY,UAAU,IAAI;AAEhC,eAAsB,qBAAqB,KAA+B;AACxE,MAAI;AACF,UAAM,OAAO,KAAK,KAAK,gBAAgB,CAAC;AACxC,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,aAAa,KAA4B;AAC7D,QAAM,cAAc,MAAM,qBAAqB,GAAG;AAClD,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI,MAAM,0BAA0B;AAAA,EAC5C;AACF;AAEA,eAAsB,gBAAgB,MAA6B;AACjE,QAAM,MAAM,MAAM,EAAE,WAAW,KAAK,CAAC;AACvC;AAEA,eAAsB,YAAY,KAA4B;AAC5D,MAAI;AACF,UAAM,UAAU,wBAAwB,EAAE,IAAI,CAAC;AAAA,EACjD,QAAQ;AACN,UAAM,UAAU,eAAe,EAAE,IAAI,CAAC;AAAA,EACxC;AACF;","names":[]}