@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.
- package/dist/{chunk-JKYWI53H.js → chunk-S3GDDAMX.js} +245 -233
- package/dist/chunk-S3GDDAMX.js.map +1 -0
- package/dist/{chunk-BQOY6ZUE.js → chunk-ZC6AEFXW.js} +10 -10
- package/dist/chunk-ZC6AEFXW.js.map +1 -0
- package/dist/{create-2G3FCCZT.js → create-M4XZB5C4.js} +2 -2
- package/dist/index.js +4 -4
- package/dist/{init-2RJWFHB2.js → init-HZE6TJJU.js} +2 -2
- package/dist/{migrate-SKXD4OXC.js → migrate-ET4ZIJEX.js} +2 -2
- package/dist/{push-C7QBEOEG.js → push-BYCTNMMF.js} +2 -2
- package/package.json +2 -2
- package/dist/chunk-BQOY6ZUE.js.map +0 -1
- package/dist/chunk-JKYWI53H.js.map +0 -1
- /package/dist/{create-2G3FCCZT.js.map → create-M4XZB5C4.js.map} +0 -0
- /package/dist/{init-2RJWFHB2.js.map → init-HZE6TJJU.js.map} +0 -0
- /package/dist/{migrate-SKXD4OXC.js.map → migrate-ET4ZIJEX.js.map} +0 -0
- /package/dist/{push-C7QBEOEG.js.map → push-BYCTNMMF.js.map} +0 -0
|
@@ -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
|
-
|
|
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
|
-
|
|
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-
|
|
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,
|
|
19782
|
-
const 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 {
|
|
19791
|
+
const stepProcessFile = `import { defineStep } from "@kalphq/sdk";
|
|
19792
19792
|
import { z } from "zod";
|
|
19793
19793
|
|
|
19794
|
-
export const processQuery =
|
|
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 {
|
|
19815
|
+
const stepFormatFile = `import { defineStep } from "@kalphq/sdk";
|
|
19816
19816
|
import { z } from "zod";
|
|
19817
19817
|
|
|
19818
|
-
export const formatResponse =
|
|
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 {
|
|
19843
|
+
const toolFile = `import { defineTool } from "@kalphq/sdk";
|
|
19844
19844
|
import { z } from "zod";
|
|
19845
19845
|
|
|
19846
|
-
export const searchTool =
|
|
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
|
|
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-
|
|
19955
|
+
//# sourceMappingURL=chunk-ZC6AEFXW.js.map
|