@kalphq/cli 0.1.0 → 0.2.0

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 (92) hide show
  1. package/dist/{add-UCN5EAL3.js → add-KRHLYYTO.js} +10 -37
  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-MMS3GWBG.js +50 -0
  6. package/dist/chunk-MMS3GWBG.js.map +1 -0
  7. package/dist/{create-PENWHZ26.js → create-7J5R6OVF.js} +44 -35
  8. package/dist/create-7J5R6OVF.js.map +1 -0
  9. package/dist/{delete-6MKUQ3XK.js → delete-47ZP6XRB.js} +10 -27
  10. package/dist/delete-47ZP6XRB.js.map +1 -0
  11. package/dist/index.js +10 -11
  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-BOE33VSI.js → list-3ZQIFUOT.js} +1 -2
  16. package/dist/list-3ZQIFUOT.js.map +1 -0
  17. package/dist/{login-22HHVS52.js → login-JYPWGL6P.js} +1 -2
  18. package/dist/login-JYPWGL6P.js.map +1 -0
  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-SIK6J5AF.js → secrets-KFMVBKJQ.js} +8 -5
  24. package/dist/secrets-KFMVBKJQ.js.map +1 -0
  25. package/dist/sync-YFM5P3IS.js +120 -0
  26. package/dist/sync-YFM5P3IS.js.map +1 -0
  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-UCN5EAL3.js.map +0 -1
  31. package/dist/agents/b2b-sales/signals/.gitkeep +0 -0
  32. package/dist/agents/b2b-sales/webhooks/.gitkeep +0 -0
  33. package/dist/agents/customer-support/signals/.gitkeep +0 -0
  34. package/dist/agents/customer-support/webhooks/.gitkeep +0 -0
  35. package/dist/agents/financial-agent/signals/.gitkeep +0 -0
  36. package/dist/agents/financial-agent/webhooks/.gitkeep +0 -0
  37. package/dist/agents/minimal/signals/.gitkeep +0 -0
  38. package/dist/agents/minimal/webhooks/.gitkeep +0 -0
  39. package/dist/angular-5QCYWYQS.js +0 -3032
  40. package/dist/angular-5QCYWYQS.js.map +0 -1
  41. package/dist/babel-VVMWCS4G.js +0 -7298
  42. package/dist/babel-VVMWCS4G.js.map +0 -1
  43. package/dist/chunk-2H7UOFLK.js +0 -11
  44. package/dist/chunk-2H7UOFLK.js.map +0 -1
  45. package/dist/chunk-EAMMDUE3.js +0 -298
  46. package/dist/chunk-EAMMDUE3.js.map +0 -1
  47. package/dist/chunk-MECZEYSU.js +0 -19963
  48. package/dist/chunk-MECZEYSU.js.map +0 -1
  49. package/dist/chunk-TPTPZH2W.js +0 -40
  50. package/dist/chunk-TPTPZH2W.js.map +0 -1
  51. package/dist/create-PENWHZ26.js.map +0 -1
  52. package/dist/delete-6MKUQ3XK.js.map +0 -1
  53. package/dist/estree-3QNQSWX3.js +0 -4614
  54. package/dist/estree-3QNQSWX3.js.map +0 -1
  55. package/dist/flow-CCY52CGJ.js +0 -27548
  56. package/dist/flow-CCY52CGJ.js.map +0 -1
  57. package/dist/glimmer-WEH5BTZ2.js +0 -2896
  58. package/dist/glimmer-WEH5BTZ2.js.map +0 -1
  59. package/dist/graphql-UERTLN2S.js +0 -1268
  60. package/dist/graphql-UERTLN2S.js.map +0 -1
  61. package/dist/html-2G7A573F.js +0 -2928
  62. package/dist/html-2G7A573F.js.map +0 -1
  63. package/dist/init-WOEW2QED.js +0 -73
  64. package/dist/init-WOEW2QED.js.map +0 -1
  65. package/dist/list-BOE33VSI.js.map +0 -1
  66. package/dist/login-22HHVS52.js.map +0 -1
  67. package/dist/markdown-XILCBMG4.js +0 -3553
  68. package/dist/markdown-XILCBMG4.js.map +0 -1
  69. package/dist/meriyah-THC5AUEQ.js +0 -2686
  70. package/dist/meriyah-THC5AUEQ.js.map +0 -1
  71. package/dist/migrate-GA7EHSDG.js +0 -80
  72. package/dist/migrate-GA7EHSDG.js.map +0 -1
  73. package/dist/postcss-WBGWHY5F.js +0 -5082
  74. package/dist/postcss-WBGWHY5F.js.map +0 -1
  75. package/dist/push-2B4NWFGC.js +0 -81
  76. package/dist/push-2B4NWFGC.js.map +0 -1
  77. package/dist/secrets-SIK6J5AF.js.map +0 -1
  78. package/dist/templates/agents/b2b-sales/signals/.gitkeep +0 -0
  79. package/dist/templates/agents/b2b-sales/webhooks/.gitkeep +0 -0
  80. package/dist/templates/agents/customer-support/signals/.gitkeep +0 -0
  81. package/dist/templates/agents/customer-support/webhooks/.gitkeep +0 -0
  82. package/dist/templates/agents/financial-agent/signals/.gitkeep +0 -0
  83. package/dist/templates/agents/financial-agent/webhooks/.gitkeep +0 -0
  84. package/dist/templates/agents/minimal/signals/.gitkeep +0 -0
  85. package/dist/templates/agents/minimal/webhooks/.gitkeep +0 -0
  86. package/dist/typescript-NS3CY6IL.js +0 -13205
  87. package/dist/typescript-NS3CY6IL.js.map +0 -1
  88. package/dist/yaml-2RE4A77K.js +0 -4226
  89. package/dist/yaml-2RE4A77K.js.map +0 -1
  90. package/templates/project/meta/snapshot.json +0 -1
  91. package/templates/project/package.json +0 -16
  92. package/templates/project/tsconfig.json +0 -14
@@ -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,298 +0,0 @@
1
- #!/usr/bin/env node
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
- });
134
- const loaded = await import(`${pathToFileURL(outFile).href}?t=${Date.now()}`);
135
- return {
136
- agent: loaded.default,
137
- tempDir
138
- };
139
- }
140
- async function readAgentManifest(params) {
141
- const { cwd, agentName } = params;
142
- const agentPath = join(cwd, "agents", agentName, "index.ts");
143
- await access(agentPath);
144
- let tempDir;
145
- try {
146
- const loaded = await loadAgentModule(agentPath, cwd);
147
- tempDir = loaded.tempDir;
148
- const agent = asRecord(loaded.agent);
149
- const steps = serializeSteps(asArray(agent.steps));
150
- const tools = serializeTools(asArray(agent.tools));
151
- const routes = serializeRoutes(asArray(agent.routes));
152
- const stepIds = new Set(steps.map((step) => step.id));
153
- const flows = serializeFlows(asArray(agent.flows), stepIds);
154
- return {
155
- format: "kalp-agent-manifest",
156
- schemaVersion: 1,
157
- generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
158
- agent: {
159
- id: asString(agent.id),
160
- name: asString(agent.name) ?? agentName,
161
- description: asString(agent.description) ?? "",
162
- systemPrompt: serializeSystemPrompt(agent.systemPrompt),
163
- lifecycle: {
164
- onInit: typeof agent.onInit === "function",
165
- onMessage: typeof agent.onMessage === "function",
166
- onTick: typeof agent.onTick === "function"
167
- },
168
- actions: {
169
- ai: true,
170
- wait: true,
171
- fetch: true,
172
- runStep: true,
173
- callTool: true,
174
- runFlow: true
175
- },
176
- steps,
177
- tools,
178
- routes,
179
- flows,
180
- execution: {
181
- stepOrder: steps.map((step) => step.id),
182
- toolOrder: tools.map((tool) => tool.id),
183
- routeOrder: routes.map((route) => route.id),
184
- flowOrder: flows.map((flow) => flow.id)
185
- }
186
- }
187
- };
188
- } finally {
189
- if (tempDir) {
190
- await rm(tempDir, { recursive: true, force: true });
191
- }
192
- }
193
- }
194
- function getHash(payload) {
195
- return createHash("sha256").update(payload).digest("hex");
196
- }
197
- function isManifestVersionFile(fileName) {
198
- return fileName.endsWith(".json");
199
- }
200
- function createVersionId(payload, generatedAt) {
201
- return createHash("sha256").update(payload).update(generatedAt).digest("hex").slice(0, 8);
202
- }
203
- async function readManifestVersionFile(filePath) {
204
- try {
205
- const src = await readFile(filePath, "utf-8");
206
- return JSON.parse(src);
207
- } catch {
208
- return null;
209
- }
210
- }
211
- async function writeVersionedManifest(params) {
212
- const { cwd, agentName, manifest } = params;
213
- const agentMetaDir = join(cwd, "meta", "migrations", agentName);
214
- await mkdir(agentMetaDir, { recursive: true });
215
- const files = await readdir(agentMetaDir);
216
- const versionFiles = files.filter(isManifestVersionFile);
217
- const existingRecords = (await Promise.all(
218
- versionFiles.map(
219
- (file) => readManifestVersionFile(join(agentMetaDir, file))
220
- )
221
- )).filter((record2) => record2 !== null);
222
- const latestVersion = existingRecords.map((record2) => record2.version).sort((a, b) => a - b).at(-1) ?? 0;
223
- const nextVersion = latestVersion + 1;
224
- const payload = JSON.stringify(manifest);
225
- const generatedAt = (/* @__PURE__ */ new Date()).toISOString();
226
- const versionId = createVersionId(payload, generatedAt);
227
- const record = {
228
- version: nextVersion,
229
- versionId,
230
- hash: getHash(payload),
231
- generatedAt,
232
- immutable: true,
233
- manifest
234
- };
235
- const versionFile = join(agentMetaDir, `${versionId}.json`);
236
- await writeFile(versionFile, JSON.stringify(record, null, 2) + "\n", "utf-8");
237
- const snapshotPath = join(cwd, "meta", "snapshot.json");
238
- const snapshot = await readSnapshot(snapshotPath);
239
- const prev = snapshot[agentName] ?? { latest: "", versions: [] };
240
- const versions = prev.versions.includes(versionId) ? prev.versions : [...prev.versions, versionId];
241
- snapshot[agentName] = { latest: versionId, versions };
242
- await writeFile(
243
- snapshotPath,
244
- JSON.stringify(snapshot, null, 2) + "\n",
245
- "utf-8"
246
- );
247
- return {
248
- ...record,
249
- outputPath: versionFile
250
- };
251
- }
252
- async function readLatestVersionedManifest(params) {
253
- const { cwd, agentName } = params;
254
- const agentMetaDir = join(cwd, "meta", "migrations", agentName);
255
- const snapshotPath = join(cwd, "meta", "snapshot.json");
256
- const snapshot = await readSnapshot(snapshotPath);
257
- const agentEntry = snapshot[agentName];
258
- if (agentEntry?.latest) {
259
- const latestFile = join(agentMetaDir, `${agentEntry.latest}.json`);
260
- const latest = await readManifestVersionFile(latestFile);
261
- if (latest) {
262
- return {
263
- ...latest,
264
- outputPath: latestFile
265
- };
266
- }
267
- }
268
- const files = await readdir(agentMetaDir).catch(() => []);
269
- const records = (await Promise.all(
270
- files.filter(isManifestVersionFile).map((file) => readManifestVersionFile(join(agentMetaDir, file)))
271
- )).filter((record) => record !== null);
272
- if (records.length === 0) {
273
- return null;
274
- }
275
- const newest = records.sort((a, b) => b.version - a.version)[0] ?? null;
276
- if (!newest) {
277
- return null;
278
- }
279
- return {
280
- ...newest,
281
- outputPath: join(agentMetaDir, `${newest.versionId}.json`)
282
- };
283
- }
284
- async function readSnapshot(snapshotPath) {
285
- try {
286
- const src = await readFile(snapshotPath, "utf-8");
287
- return JSON.parse(src);
288
- } catch {
289
- return {};
290
- }
291
- }
292
-
293
- export {
294
- readAgentManifest,
295
- writeVersionedManifest,
296
- readLatestVersionedManifest
297
- };
298
- //# sourceMappingURL=chunk-EAMMDUE3.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/manifest.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport {\n access,\n mkdtemp,\n mkdir,\n readFile,\n readdir,\n rm,\n writeFile,\n} from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { build } from \"esbuild\";\nimport 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 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\ninterface ManifestRegistryEntry {\n latest: string;\n versions: string[];\n}\n\ninterface LoadedAgentModule {\n agent: unknown;\n tempDir: string;\n}\n\ninterface AgentItemWithInput {\n id?: unknown;\n description?: unknown;\n input?: unknown;\n}\n\ninterface AgentStepItem extends AgentItemWithInput {\n output?: unknown;\n}\n\ninterface AgentRouteItem extends AgentItemWithInput {\n method?: unknown;\n path?: unknown;\n}\n\ninterface AgentFlowItem {\n id?: unknown;\n description?: unknown;\n steps?: unknown;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null\n ? (value as Record<string, unknown>)\n : {};\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction asArray(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction 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\nfunction 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\nfunction serializeSteps(steps: unknown[]): 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\nfunction serializeTools(tools: unknown[]): 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\nfunction 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\nfunction 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\nasync function loadAgentModule(\n agentPath: string,\n cwd: string,\n): Promise<LoadedAgentModule> {\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 });\n\n const loaded = (await import(\n `${pathToFileURL(outFile).href}?t=${Date.now()}`\n )) as { default?: unknown };\n\n return {\n agent: loaded.default,\n tempDir,\n };\n}\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 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 rm(tempDir, { recursive: true, force: true });\n }\n }\n}\n\nfunction getHash(payload: string): string {\n return createHash(\"sha256\").update(payload).digest(\"hex\");\n}\n\nfunction isManifestVersionFile(fileName: string): boolean {\n return fileName.endsWith(\".json\");\n}\n\nfunction createVersionId(payload: string, generatedAt: string): string {\n return createHash(\"sha256\")\n .update(payload)\n .update(generatedAt)\n .digest(\"hex\")\n .slice(0, 8);\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\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 payload = JSON.stringify(manifest);\n const generatedAt = new Date().toISOString();\n const versionId = createVersionId(payload, generatedAt);\n const record: ManifestVersionRecord = {\n version: nextVersion,\n versionId,\n hash: getHash(payload),\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 // Try to read from snapshot first\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 // Fallback: scan directory and find latest by version number\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\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"],"mappings":"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","names":["record"]}