@kalphq/cli 0.0.0-dev-20260422003724 → 0.0.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.
- package/dist/{add-LVQAW23G.js → add-KRHLYYTO.js} +4 -3
- package/dist/add-KRHLYYTO.js.map +1 -0
- package/dist/chunk-INB3LG6O.js +25 -0
- package/dist/chunk-INB3LG6O.js.map +1 -0
- package/dist/{create-VTJKDUMA.js → create-7J5R6OVF.js} +44 -35
- package/dist/create-7J5R6OVF.js.map +1 -0
- package/dist/{delete-AFDTCA52.js → delete-47ZP6XRB.js} +4 -3
- package/dist/delete-47ZP6XRB.js.map +1 -0
- package/dist/index.js +6 -10
- package/dist/index.js.map +1 -1
- package/dist/{link-YCIA4JJ3.js → link-WZQSR2TM.js} +1 -2
- package/dist/{link-YCIA4JJ3.js.map → link-WZQSR2TM.js.map} +1 -1
- package/dist/{list-OKKHGKJA.js → list-3ZQIFUOT.js} +1 -2
- package/dist/{list-OKKHGKJA.js.map → list-3ZQIFUOT.js.map} +1 -1
- package/dist/{login-SIKUBDGO.js → login-JYPWGL6P.js} +1 -2
- package/dist/{login-SIKUBDGO.js.map → login-JYPWGL6P.js.map} +1 -1
- package/dist/{logout-OJM3VAOF.js → logout-V67DZZXO.js} +1 -2
- package/dist/{logout-OJM3VAOF.js.map → logout-V67DZZXO.js.map} +1 -1
- package/dist/push-RBTBXCP7.js +205 -0
- package/dist/push-RBTBXCP7.js.map +1 -0
- package/dist/{secrets-PXU3BYSN.js → secrets-KFMVBKJQ.js} +5 -6
- package/dist/{secrets-PXU3BYSN.js.map → secrets-KFMVBKJQ.js.map} +1 -1
- package/dist/{sync-HEIRRPCA.js → sync-YFM5P3IS.js} +1 -2
- package/dist/{sync-HEIRRPCA.js.map → sync-YFM5P3IS.js.map} +1 -1
- package/package.json +4 -4
- package/dist/acorn-I3UGQPDC.js +0 -3132
- package/dist/acorn-I3UGQPDC.js.map +0 -1
- package/dist/add-LVQAW23G.js.map +0 -1
- package/dist/angular-5QCYWYQS.js +0 -3032
- package/dist/angular-5QCYWYQS.js.map +0 -1
- package/dist/babel-VVMWCS4G.js +0 -7298
- package/dist/babel-VVMWCS4G.js.map +0 -1
- package/dist/chunk-2H7UOFLK.js +0 -11
- package/dist/chunk-2H7UOFLK.js.map +0 -1
- package/dist/chunk-3DCOV57B.js +0 -19947
- package/dist/chunk-3DCOV57B.js.map +0 -1
- package/dist/chunk-TMVNFUDA.js +0 -452
- package/dist/chunk-TMVNFUDA.js.map +0 -1
- package/dist/chunk-TPTPZH2W.js +0 -40
- package/dist/chunk-TPTPZH2W.js.map +0 -1
- package/dist/create-VTJKDUMA.js.map +0 -1
- package/dist/delete-AFDTCA52.js.map +0 -1
- package/dist/estree-3QNQSWX3.js +0 -4614
- package/dist/estree-3QNQSWX3.js.map +0 -1
- package/dist/flow-CCY52CGJ.js +0 -27548
- package/dist/flow-CCY52CGJ.js.map +0 -1
- package/dist/glimmer-WEH5BTZ2.js +0 -2896
- package/dist/glimmer-WEH5BTZ2.js.map +0 -1
- package/dist/graphql-UERTLN2S.js +0 -1268
- package/dist/graphql-UERTLN2S.js.map +0 -1
- package/dist/html-2G7A573F.js +0 -2928
- package/dist/html-2G7A573F.js.map +0 -1
- package/dist/init-O2XMITQ6.js +0 -73
- package/dist/init-O2XMITQ6.js.map +0 -1
- package/dist/markdown-XILCBMG4.js +0 -3553
- package/dist/markdown-XILCBMG4.js.map +0 -1
- package/dist/meriyah-THC5AUEQ.js +0 -2686
- package/dist/meriyah-THC5AUEQ.js.map +0 -1
- package/dist/migrate-CIEU36X6.js +0 -94
- package/dist/migrate-CIEU36X6.js.map +0 -1
- package/dist/postcss-WBGWHY5F.js +0 -5082
- package/dist/postcss-WBGWHY5F.js.map +0 -1
- package/dist/push-Y57MBTBB.js +0 -81
- package/dist/push-Y57MBTBB.js.map +0 -1
- package/dist/typescript-NS3CY6IL.js +0 -13205
- package/dist/typescript-NS3CY6IL.js.map +0 -1
- package/dist/yaml-2RE4A77K.js +0 -4226
- package/dist/yaml-2RE4A77K.js.map +0 -1
- package/templates/project/meta/snapshot.json +0 -1
- package/templates/project/package.json +0 -16
- package/templates/project/tsconfig.json +0 -18
package/dist/chunk-TMVNFUDA.js
DELETED
|
@@ -1,452 +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.inputSchema, `step_${index + 1}_input`),
|
|
259
|
-
outputSchema: toJsonSchema(item.outputSchema, `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.inputSchema, `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.inputSchema, `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
|
-
},
|
|
427
|
-
steps,
|
|
428
|
-
tools,
|
|
429
|
-
routes,
|
|
430
|
-
flows,
|
|
431
|
-
execution: {
|
|
432
|
-
stepOrder: steps.map((step) => step.id),
|
|
433
|
-
toolOrder: tools.map((tool) => tool.id),
|
|
434
|
-
routeOrder: routes.map((route) => route.id),
|
|
435
|
-
flowOrder: flows.map((flow) => flow.id)
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
};
|
|
439
|
-
} finally {
|
|
440
|
-
if (tempDir) {
|
|
441
|
-
await cleanupTempDir(tempDir);
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
export {
|
|
447
|
-
getManifestHash,
|
|
448
|
-
writeVersionedManifest,
|
|
449
|
-
readLatestVersionedManifest,
|
|
450
|
-
readAgentManifest
|
|
451
|
-
};
|
|
452
|
-
//# sourceMappingURL=chunk-TMVNFUDA.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 };\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 inputSchema?: unknown;\n}\n\nexport interface AgentStepItem extends AgentItemWithInput {\n outputSchema?: 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.inputSchema, `step_${index + 1}_input`),\n outputSchema: toJsonSchema(item.outputSchema, `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.inputSchema, `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.inputSchema, `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 },\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"]}
|
package/dist/chunk-TPTPZH2W.js
DELETED
|
@@ -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":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/create.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { scaffoldProject, scaffoldAgent } from \"@/scaffold\";\nimport { installDeps, isProjectInitialized } from \"@/utils/fs\";\nimport { promptAgentDetails, promptProjectName } from \"@/utils/ui\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: { name: \"create\", description: \"Add a new agent to the project\" },\n async run() {\n const cwd = process.cwd();\n\n p.intro(`${LOGO} ${pc.bold(\"kalp create\")}`);\n\n // ── Check if project is initialized ─────────────────────────────────\n const needsInit = !(await isProjectInitialized(cwd));\n\n // ── Init phase (inline — one unified timeline) ───────────────────────\n let projectName: string | undefined;\n if (needsInit) {\n p.log.warn(\n `No ${pc.cyan(\"kalp.config.ts\")} found — initializing project first.`,\n );\n projectName = await promptProjectName({\n message: \"Project name?\",\n placeholder: \"my-project\",\n });\n }\n\n // ── Agent prompts ────────────────────────────────────────────────────\n const agentAnswers = await promptAgentDetails();\n\n const s = p.spinner();\n\n // ── Scaffold project if needed ───────────────────────────────────────\n if (needsInit && projectName) {\n s.start(\"Creating project structure\");\n await scaffoldProject({ projectName, targetDir: cwd });\n s.stop(\"Project structure created\");\n\n s.start(\"Installing Dependencies\");\n try {\n await installDeps(cwd);\n s.stop(\"Dependencies installed\");\n } catch {\n s.stop(pc.yellow(\"Install failed — run npm install manually.\"));\n }\n }\n\n // ── Scaffold agent ───────────────────────────────────────────────────\n s.start(`Scaffolding agent ${pc.cyan(agentAnswers.name)}`);\n await scaffoldAgent({\n agentName: agentAnswers.name,\n cwd,\n });\n s.stop(\"Agent created\");\n\n p.note(\n [\n `${pc.dim(\"•\")} ${pc.cyan(`agents/${agentAnswers.name}/index.ts`)}`,\n `${pc.dim(\"•\")} ${pc.cyan(`agents/${agentAnswers.name}/steps/`)}`,\n `${pc.dim(\"•\")} ${pc.cyan(`agents/${agentAnswers.name}/tools/`)}`,\n `${pc.dim(\"•\")} ${pc.cyan(`agents/${agentAnswers.name}/routes/`)}`,\n `${pc.dim(\"•\")} ${pc.cyan(`agents/${agentAnswers.name}/flows/`)}`,\n ].join(\"\\n\"),\n \"Created\",\n );\n\n p.outro(\n `${LOGO} ${pc.green(`Agent ${pc.bold(agentAnswers.name)} is ready.`)}`,\n );\n },\n});\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AAKf,IAAM,OAAO;AAEb,IAAO,iBAAQ,cAAc;AAAA,EAC3B,MAAM,EAAE,MAAM,UAAU,aAAa,iCAAiC;AAAA,EACtE,MAAM,MAAM;AACV,UAAM,MAAM,QAAQ,IAAI;AAExB,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,aAAa,CAAC,EAAE;AAG3C,UAAM,YAAY,CAAE,MAAM,qBAAqB,GAAG;AAGlD,QAAI;AACJ,QAAI,WAAW;AACb,MAAE,MAAI;AAAA,QACJ,MAAM,GAAG,KAAK,gBAAgB,CAAC;AAAA,MACjC;AACA,oBAAc,MAAM,kBAAkB;AAAA,QACpC,SAAS;AAAA,QACT,aAAa;AAAA,MACf,CAAC;AAAA,IACH;AAGA,UAAM,eAAe,MAAM,mBAAmB;AAE9C,UAAM,IAAM,UAAQ;AAGpB,QAAI,aAAa,aAAa;AAC5B,QAAE,MAAM,4BAA4B;AACpC,YAAM,gBAAgB,EAAE,aAAa,WAAW,IAAI,CAAC;AACrD,QAAE,KAAK,2BAA2B;AAElC,QAAE,MAAM,yBAAyB;AACjC,UAAI;AACF,cAAM,YAAY,GAAG;AACrB,UAAE,KAAK,wBAAwB;AAAA,MACjC,QAAQ;AACN,UAAE,KAAK,GAAG,OAAO,iDAA4C,CAAC;AAAA,MAChE;AAAA,IACF;AAGA,MAAE,MAAM,qBAAqB,GAAG,KAAK,aAAa,IAAI,CAAC,EAAE;AACzD,UAAM,cAAc;AAAA,MAClB,WAAW,aAAa;AAAA,MACxB;AAAA,IACF,CAAC;AACD,MAAE,KAAK,eAAe;AAEtB,IAAE;AAAA,MACA;AAAA,QACE,GAAG,GAAG,IAAI,QAAG,CAAC,IAAI,GAAG,KAAK,UAAU,aAAa,IAAI,WAAW,CAAC;AAAA,QACjE,GAAG,GAAG,IAAI,QAAG,CAAC,IAAI,GAAG,KAAK,UAAU,aAAa,IAAI,SAAS,CAAC;AAAA,QAC/D,GAAG,GAAG,IAAI,QAAG,CAAC,IAAI,GAAG,KAAK,UAAU,aAAa,IAAI,SAAS,CAAC;AAAA,QAC/D,GAAG,GAAG,IAAI,QAAG,CAAC,IAAI,GAAG,KAAK,UAAU,aAAa,IAAI,UAAU,CAAC;AAAA,QAChE,GAAG,GAAG,IAAI,QAAG,CAAC,IAAI,GAAG,KAAK,UAAU,aAAa,IAAI,SAAS,CAAC;AAAA,MACjE,EAAE,KAAK,IAAI;AAAA,MACX;AAAA,IACF;AAEA,IAAE;AAAA,MACA,GAAG,IAAI,IAAI,GAAG,MAAM,SAAS,GAAG,KAAK,aAAa,IAAI,CAAC,YAAY,CAAC;AAAA,IACtE;AAAA,EACF;AACF,CAAC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/secrets/delete.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { getAuthToken } from \"@/utils/auth\";\nimport { generateTypes } from \"@/utils/codegen\";\n\nconst LOGO = \"🦋\";\n\ninterface CloudSecret {\n key: string;\n}\n\nasync function fetchSecretsFromCloud(): Promise<CloudSecret[]> {\n // TODO: Implement real API call to Kalp Cloud\n return [{ key: \"STRIPE_SECRET_KEY\" }, { key: \"OPENAI_API_KEY\" }];\n}\n\nasync function deleteSecretFromCloud(key: string): Promise<void> {\n // TODO: Implement real API call to Kalp Cloud\n console.log(pc.dim(`[Simulated] Deleting secret ${key} from Kalp Cloud...`));\n}\n\nasync function removeSecretFromLocalConfig(\n cwd: string,\n key: string,\n): Promise<void> {\n const configPath = join(cwd, \"kalp.config.ts\");\n let content: string;\n\n try {\n content = await readFile(configPath, \"utf-8\");\n } catch {\n throw new Error(\"kalp.config.ts not found. Run `kalp init` first.\");\n }\n\n // Check if key exists\n const regex = new RegExp(`[\"']${key}[\"']`);\n if (!regex.test(content)) {\n // Key not in local config, that's ok\n throw new Error(`Secret ${key} not found in local config`);\n }\n\n // Remove secret from array\n const match = content.match(/secrets:\\s*\\[([^\\]]*)\\]/);\n\n if (!match) {\n throw new Error(\"Could not find secrets array in kalp.config.ts\");\n }\n\n const currentArray = match[1];\n if (!currentArray) {\n throw new Error(\"Secrets array is empty in kalp.config.ts\");\n }\n\n // Remove the key and clean up commas\n let newArray = currentArray\n .replace(new RegExp(`[\"']${key}[\"']\\\\s*,?\\\\s*`), \"\")\n .trim();\n // Remove trailing comma if any\n newArray = newArray.replace(/,\\s*$/, \"\");\n\n content = content.replace(\n /secrets:\\s*\\[([^\\]]*)\\]/,\n `secrets: [${newArray}]`,\n );\n\n await writeFile(configPath, content, \"utf-8\");\n}\n\nasync function regenerateTypes(cwd: string): Promise<void> {\n // Regenerate .kalp/types.d.ts based on kalp.config.ts\n await generateTypes(cwd);\n}\n\nexport default defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete a secret from Kalp Cloud and local config\",\n },\n args: {\n key: {\n type: \"string\",\n alias: \"k\",\n description: \"Secret key name to delete\",\n },\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n yes: {\n type: \"boolean\",\n alias: \"y\",\n description: \"Skip confirmation\",\n default: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n\n if (args.help) {\n p.log.info(`${pc.bold(\"Usage\")}: kalp secrets delete -k <key>`);\n p.log.info(pc.dim(\"Example: kalp secrets delete -k STRIPE_SECRET_KEY\"));\n return;\n }\n\n p.intro(`${LOGO} ${pc.bold(\"kalp secrets delete\")}`);\n\n const token = await getAuthToken();\n if (!token) {\n p.log.warn(pc.yellow(\"Not logged in. Run `kalp login` first.\"));\n p.outro(\"Authentication required\");\n return;\n }\n\n let key = args.key;\n\n // Interactive selection if not provided\n if (!key) {\n const secrets = await fetchSecretsFromCloud();\n if (secrets.length === 0) {\n p.log.info(pc.dim(\"No secrets found in Kalp Cloud.\"));\n p.outro(\"Nothing to delete\");\n return;\n }\n\n const selected = await p.select({\n message: \"Select a secret to delete\",\n options: secrets.map((s) => ({ value: s.key, label: s.key })),\n });\n\n if (p.isCancel(selected)) {\n p.outro(\"Cancelled\");\n return;\n }\n\n key = selected as string;\n }\n\n // Confirmation unless --yes flag\n if (!args.yes) {\n const confirm = await p.confirm({\n message: `Are you sure you want to delete ${pc.cyan(key)}? This action cannot be undone.`,\n initialValue: false,\n });\n\n if (p.isCancel(confirm) || !confirm) {\n p.outro(\"Cancelled\");\n return;\n }\n }\n\n const s = p.spinner();\n s.start(`Deleting ${pc.cyan(key)}...`);\n\n try {\n // Delete from cloud (simulated)\n await deleteSecretFromCloud(key);\n\n // Remove from local config\n await removeSecretFromLocalConfig(cwd, key);\n\n // Regenerate types from config\n await regenerateTypes(cwd);\n\n s.stop(`Secret ${pc.cyan(key)} deleted successfully`);\n p.outro(\"Done\");\n } catch (error) {\n s.stop(\"Failed to delete secret\");\n p.log.error(\n pc.red(\n `Error: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n p.outro(\"Failed\");\n process.exit(1);\n }\n },\n});\n"],"mappings":"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","names":["s","confirm"]}
|