@kalphq/cli 0.0.0-dev-20260416091527 → 0.0.0-dev-20260420003114
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-GFEVTHUW.js → chunk-DOHVZBJO.js} +59 -64
- package/dist/chunk-DOHVZBJO.js.map +1 -0
- package/dist/chunk-INMLAVHJ.js +217 -0
- package/dist/chunk-INMLAVHJ.js.map +1 -0
- package/dist/{create-XJURMQC4.js → create-LCVZRFEF.js} +8 -4
- package/dist/{create-XJURMQC4.js.map → create-LCVZRFEF.js.map} +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/{init-K7EASUMM.js → init-VMOFA2AV.js} +2 -2
- package/dist/manifest-LKYALPCB.js +82 -0
- package/dist/manifest-LKYALPCB.js.map +1 -0
- package/dist/push-RUUHE6RW.js +81 -0
- package/dist/push-RUUHE6RW.js.map +1 -0
- package/dist/skill-IGGMF5GR.js +346 -0
- package/dist/skill-IGGMF5GR.js.map +1 -0
- package/package.json +2 -2
- package/templates/project/meta/manifest-registry.json +1 -0
- package/templates/project/meta/manifests/.gitkeep +1 -0
- package/templates/project/meta/skills/.gitkeep +1 -0
- package/templates/project/meta/skills/applied.json +4 -0
- package/dist/chunk-GFEVTHUW.js.map +0 -1
- package/dist/push-YFHHNITO.js +0 -174
- package/dist/push-YFHHNITO.js.map +0 -1
- package/templates/agents/b2b-sales/index.ts +0 -57
- package/templates/agents/b2b-sales/signals/deal-won.ts +0 -31
- package/templates/agents/b2b-sales/signals/hot-lead-alert.ts +0 -29
- package/templates/agents/b2b-sales/steps/qualify-prospect.ts +0 -50
- package/templates/agents/b2b-sales/steps/score-lead.ts +0 -24
- package/templates/agents/b2b-sales/tools/enrich-company.ts +0 -17
- package/templates/agents/b2b-sales/tools/send-slack-notification.ts +0 -26
- package/templates/agents/b2b-sales/webhooks/crm-inbound.ts +0 -27
- package/templates/agents/b2b-sales/webhooks/stripe-payment.ts +0 -27
- package/templates/agents/customer-support/index.ts +0 -60
- package/templates/agents/customer-support/signals/escalation-needed.ts +0 -28
- package/templates/agents/customer-support/signals/ticket-resolved.ts +0 -29
- package/templates/agents/customer-support/steps/classify-ticket.ts +0 -22
- package/templates/agents/customer-support/steps/escalate-ticket.ts +0 -53
- package/templates/agents/customer-support/tools/create-jira-issue.ts +0 -30
- package/templates/agents/customer-support/tools/search-kb.ts +0 -13
- package/templates/agents/customer-support/webhooks/slack-escalation.ts +0 -27
- package/templates/agents/customer-support/webhooks/zendesk-ticket.ts +0 -29
- package/templates/agents/financial-agent/index.ts +0 -50
- package/templates/agents/financial-agent/signals/market-alert.ts +0 -31
- package/templates/agents/financial-agent/signals/portfolio-rebalance.ts +0 -27
- package/templates/agents/financial-agent/steps/analyze-signal.ts +0 -26
- package/templates/agents/financial-agent/steps/rebalance-check.ts +0 -55
- package/templates/agents/financial-agent/tools/fetch-market-data.ts +0 -13
- package/templates/agents/financial-agent/tools/send-email-alert.ts +0 -31
- package/templates/agents/financial-agent/webhooks/exchange-webhook.ts +0 -33
- package/templates/agents/financial-agent/webhooks/tradingview-alert.ts +0 -30
- package/templates/agents/minimal/index.ts +0 -24
- package/templates/agents/minimal/signals/error-alert.ts +0 -26
- package/templates/agents/minimal/signals/task-complete.ts +0 -25
- package/templates/agents/minimal/steps/example-step.ts +0 -13
- package/templates/agents/minimal/steps/transform-data.ts +0 -32
- package/templates/agents/minimal/tools/example-tool.ts +0 -13
- package/templates/agents/minimal/tools/http-request.ts +0 -26
- package/templates/agents/minimal/webhooks/generic-inbound.ts +0 -25
- package/templates/agents/minimal/webhooks/health-check.ts +0 -23
- /package/dist/{init-K7EASUMM.js.map → init-VMOFA2AV.js.map} +0 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/utils/manifest.ts
|
|
4
|
+
import { createHash } from "crypto";
|
|
5
|
+
import { existsSync } from "fs";
|
|
6
|
+
import { access, mkdtemp, mkdir, readFile, readdir, rm, writeFile } from "fs/promises";
|
|
7
|
+
import { join, resolve } from "path";
|
|
8
|
+
import { pathToFileURL } from "url";
|
|
9
|
+
import { build } from "esbuild";
|
|
10
|
+
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
11
|
+
function asRecord(value) {
|
|
12
|
+
return typeof value === "object" && value !== null ? value : {};
|
|
13
|
+
}
|
|
14
|
+
function asString(value) {
|
|
15
|
+
return typeof value === "string" ? value : void 0;
|
|
16
|
+
}
|
|
17
|
+
function asArray(value) {
|
|
18
|
+
return Array.isArray(value) ? value : [];
|
|
19
|
+
}
|
|
20
|
+
function toJsonSchema(schema, name) {
|
|
21
|
+
try {
|
|
22
|
+
return zodToJsonSchema(schema, name);
|
|
23
|
+
} catch {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function serializeSystemPrompt(systemPrompt) {
|
|
28
|
+
if (typeof systemPrompt === "string") {
|
|
29
|
+
return { type: "static", value: systemPrompt };
|
|
30
|
+
}
|
|
31
|
+
if (typeof systemPrompt === "function") {
|
|
32
|
+
return { type: "dynamic" };
|
|
33
|
+
}
|
|
34
|
+
return { type: "none" };
|
|
35
|
+
}
|
|
36
|
+
function serializeSteps(steps) {
|
|
37
|
+
return steps.map((step, index) => {
|
|
38
|
+
const item = asRecord(step);
|
|
39
|
+
return {
|
|
40
|
+
id: asString(item.id) ?? `step_${index + 1}`,
|
|
41
|
+
description: asString(item.description) ?? "",
|
|
42
|
+
inputSchema: toJsonSchema(item.input, `step_${index + 1}_input`),
|
|
43
|
+
outputSchema: toJsonSchema(item.output, `step_${index + 1}_output`)
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function serializeTools(tools) {
|
|
48
|
+
return tools.map((tool, index) => {
|
|
49
|
+
const item = asRecord(tool);
|
|
50
|
+
return {
|
|
51
|
+
id: asString(item.id) ?? `tool_${index + 1}`,
|
|
52
|
+
description: asString(item.description) ?? "",
|
|
53
|
+
inputSchema: toJsonSchema(item.input, `tool_${index + 1}_input`)
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function serializeRoutes(routes) {
|
|
58
|
+
return routes.map((route, index) => {
|
|
59
|
+
const item = asRecord(route);
|
|
60
|
+
return {
|
|
61
|
+
id: asString(item.id) ?? `route_${index + 1}`,
|
|
62
|
+
method: asString(item.method) ?? "GET",
|
|
63
|
+
path: asString(item.path) ?? "/",
|
|
64
|
+
inputSchema: toJsonSchema(item.input, `route_${index + 1}_input`)
|
|
65
|
+
};
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function serializeFlows(flows) {
|
|
69
|
+
return flows.map((flow, index) => {
|
|
70
|
+
const item = asRecord(flow);
|
|
71
|
+
const steps = asArray(item.steps).map((s, stepIndex) => {
|
|
72
|
+
const step = asRecord(s);
|
|
73
|
+
return asString(step.id) ?? `step_${stepIndex + 1}`;
|
|
74
|
+
});
|
|
75
|
+
return {
|
|
76
|
+
id: asString(item.id) ?? `flow_${index + 1}`,
|
|
77
|
+
description: asString(item.description) ?? "",
|
|
78
|
+
steps
|
|
79
|
+
};
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
async function loadAgentModule(agentPath, cwd) {
|
|
83
|
+
const tempDir = await mkdtemp(join(cwd, ".kalp-manifest-"));
|
|
84
|
+
const outFile = join(tempDir, "agent.manifest.mjs");
|
|
85
|
+
await build({
|
|
86
|
+
entryPoints: [agentPath],
|
|
87
|
+
outfile: outFile,
|
|
88
|
+
bundle: true,
|
|
89
|
+
format: "esm",
|
|
90
|
+
platform: "node",
|
|
91
|
+
target: "node18",
|
|
92
|
+
logLevel: "silent",
|
|
93
|
+
packages: "external",
|
|
94
|
+
plugins: [
|
|
95
|
+
{
|
|
96
|
+
name: "relative-js-to-ts",
|
|
97
|
+
setup(buildCtx) {
|
|
98
|
+
buildCtx.onResolve({ filter: /^\.+\/.*\.js$/ }, (args) => {
|
|
99
|
+
const resolved = resolve(args.resolveDir, args.path);
|
|
100
|
+
if (existsSync(resolved)) {
|
|
101
|
+
return { path: resolved };
|
|
102
|
+
}
|
|
103
|
+
const tsPath = resolved.replace(/\.js$/, ".ts");
|
|
104
|
+
if (existsSync(tsPath)) {
|
|
105
|
+
return { path: tsPath };
|
|
106
|
+
}
|
|
107
|
+
const tsxPath = resolved.replace(/\.js$/, ".tsx");
|
|
108
|
+
if (existsSync(tsxPath)) {
|
|
109
|
+
return { path: tsxPath };
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
});
|
|
117
|
+
const loaded = await import(`${pathToFileURL(outFile).href}?t=${Date.now()}`);
|
|
118
|
+
return {
|
|
119
|
+
agent: loaded.default,
|
|
120
|
+
tempDir
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
async function readAgentManifest(params) {
|
|
124
|
+
const { cwd, agentName } = params;
|
|
125
|
+
const agentPath = join(cwd, "agents", agentName, "index.ts");
|
|
126
|
+
await access(agentPath);
|
|
127
|
+
let tempDir;
|
|
128
|
+
try {
|
|
129
|
+
const loaded = await loadAgentModule(agentPath, cwd);
|
|
130
|
+
tempDir = loaded.tempDir;
|
|
131
|
+
const agent = asRecord(loaded.agent);
|
|
132
|
+
return {
|
|
133
|
+
format: "kalp-agent-manifest",
|
|
134
|
+
schemaVersion: 1,
|
|
135
|
+
generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
136
|
+
agent: {
|
|
137
|
+
id: asString(agent.id),
|
|
138
|
+
name: asString(agent.name) ?? agentName,
|
|
139
|
+
description: asString(agent.description) ?? "",
|
|
140
|
+
systemPrompt: serializeSystemPrompt(agent.systemPrompt),
|
|
141
|
+
lifecycle: {
|
|
142
|
+
onInit: typeof agent.onInit === "function",
|
|
143
|
+
onMessage: typeof agent.onMessage === "function",
|
|
144
|
+
onTick: typeof agent.onTick === "function"
|
|
145
|
+
},
|
|
146
|
+
steps: serializeSteps(asArray(agent.steps)),
|
|
147
|
+
tools: serializeTools(asArray(agent.tools)),
|
|
148
|
+
routes: serializeRoutes(asArray(agent.routes)),
|
|
149
|
+
flows: serializeFlows(asArray(agent.flows))
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
} finally {
|
|
153
|
+
if (tempDir) {
|
|
154
|
+
await rm(tempDir, { recursive: true, force: true });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function getHash(payload) {
|
|
159
|
+
return createHash("sha256").update(payload).digest("hex");
|
|
160
|
+
}
|
|
161
|
+
function parseVersionFromFileName(fileName) {
|
|
162
|
+
const match = /^v(\d{4})\.json$/.exec(fileName);
|
|
163
|
+
return match ? Number(match[1]) : null;
|
|
164
|
+
}
|
|
165
|
+
async function writeVersionedManifest(params) {
|
|
166
|
+
const { cwd, agentName, manifest } = params;
|
|
167
|
+
const agentMetaDir = join(cwd, "meta", "manifests", agentName);
|
|
168
|
+
await mkdir(agentMetaDir, { recursive: true });
|
|
169
|
+
const files = await readdir(agentMetaDir);
|
|
170
|
+
const versions = files.map(parseVersionFromFileName).filter((v) => v !== null).sort((a, b) => a - b);
|
|
171
|
+
const latestVersion = versions.at(-1) ?? 0;
|
|
172
|
+
const nextVersion = latestVersion + 1;
|
|
173
|
+
const versionId = `v${String(nextVersion).padStart(4, "0")}`;
|
|
174
|
+
const previousVersionId = latestVersion > 0 ? `v${String(latestVersion).padStart(4, "0")}` : null;
|
|
175
|
+
const payload = JSON.stringify(manifest);
|
|
176
|
+
const record = {
|
|
177
|
+
version: nextVersion,
|
|
178
|
+
versionId,
|
|
179
|
+
previousVersionId,
|
|
180
|
+
hash: getHash(payload),
|
|
181
|
+
generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
182
|
+
manifest
|
|
183
|
+
};
|
|
184
|
+
const versionFile = join(agentMetaDir, `${versionId}.json`);
|
|
185
|
+
await writeFile(versionFile, JSON.stringify(record, null, 2) + "\n", "utf-8");
|
|
186
|
+
await writeFile(
|
|
187
|
+
join(agentMetaDir, "latest.json"),
|
|
188
|
+
JSON.stringify(record, null, 2) + "\n",
|
|
189
|
+
"utf-8"
|
|
190
|
+
);
|
|
191
|
+
const registryPath = join(cwd, "meta", "manifest-registry.json");
|
|
192
|
+
const registry = await readManifestRegistry(registryPath);
|
|
193
|
+
registry[agentName] = {
|
|
194
|
+
latestVersion: record.version,
|
|
195
|
+
latestVersionId: record.versionId,
|
|
196
|
+
updatedAt: record.generatedAt
|
|
197
|
+
};
|
|
198
|
+
await writeFile(registryPath, JSON.stringify(registry, null, 2) + "\n", "utf-8");
|
|
199
|
+
return {
|
|
200
|
+
...record,
|
|
201
|
+
outputPath: versionFile
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
async function readManifestRegistry(registryPath) {
|
|
205
|
+
try {
|
|
206
|
+
const src = await readFile(registryPath, "utf-8");
|
|
207
|
+
return JSON.parse(src);
|
|
208
|
+
} catch {
|
|
209
|
+
return {};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
export {
|
|
214
|
+
readAgentManifest,
|
|
215
|
+
writeVersionedManifest
|
|
216
|
+
};
|
|
217
|
+
//# sourceMappingURL=chunk-INMLAVHJ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/manifest.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { access, mkdtemp, mkdir, readFile, readdir, rm, writeFile } 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 steps: Array<{\n id: string;\n description: string;\n inputSchema: Record<string, unknown> | null;\n outputSchema: Record<string, unknown> | null;\n }>;\n tools: Array<{\n id: string;\n description: string;\n inputSchema: Record<string, unknown> | null;\n }>;\n routes: Array<{\n id: string;\n method: string;\n path: string;\n inputSchema: Record<string, unknown> | null;\n }>;\n flows: Array<{\n id: string;\n description: string;\n steps: string[];\n }>;\n };\n}\n\nexport interface ManifestVersionRecord {\n version: number;\n versionId: string;\n previousVersionId: string | null;\n hash: string;\n generatedAt: string;\n manifest: AgentManifestV1;\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(schema: unknown, name: string): Record<string, unknown> | null {\n try {\n return zodToJsonSchema(schema as ZodTypeAny, name) as Record<string, unknown>;\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 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 description: asString(item.description) ?? \"\",\n inputSchema: toJsonSchema(item.input, `tool_${index + 1}_input`),\n };\n });\n}\n\nfunction serializeRoutes(routes: unknown[]): 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 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(flows: unknown[]): 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 return asString(step.id) ?? `step_${stepIndex + 1}`;\n });\n\n return {\n id: asString(item.id) ?? `flow_${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\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 steps: serializeSteps(asArray(agent.steps)),\n tools: serializeTools(asArray(agent.tools)),\n routes: serializeRoutes(asArray(agent.routes)),\n flows: serializeFlows(asArray(agent.flows)),\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 parseVersionFromFileName(fileName: string): number | null {\n const match = /^v(\\d{4})\\.json$/.exec(fileName);\n return match ? Number(match[1]) : null;\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\", \"manifests\", agentName);\n await mkdir(agentMetaDir, { recursive: true });\n\n const files = await readdir(agentMetaDir);\n const versions = files\n .map(parseVersionFromFileName)\n .filter((v): v is number => v !== null)\n .sort((a, b) => a - b);\n\n const latestVersion = versions.at(-1) ?? 0;\n const nextVersion = latestVersion + 1;\n const versionId = `v${String(nextVersion).padStart(4, \"0\")}`;\n const previousVersionId =\n latestVersion > 0 ? `v${String(latestVersion).padStart(4, \"0\")}` : null;\n\n const payload = JSON.stringify(manifest);\n const record: ManifestVersionRecord = {\n version: nextVersion,\n versionId,\n previousVersionId,\n hash: getHash(payload),\n generatedAt: new Date().toISOString(),\n manifest,\n };\n\n const versionFile = join(agentMetaDir, `${versionId}.json`);\n await writeFile(versionFile, JSON.stringify(record, null, 2) + \"\\n\", \"utf-8\");\n await writeFile(\n join(agentMetaDir, \"latest.json\"),\n JSON.stringify(record, null, 2) + \"\\n\",\n \"utf-8\",\n );\n\n const registryPath = join(cwd, \"meta\", \"manifest-registry.json\");\n const registry = await readManifestRegistry(registryPath);\n registry[agentName] = {\n latestVersion: record.version,\n latestVersionId: record.versionId,\n updatedAt: record.generatedAt,\n };\n await writeFile(registryPath, JSON.stringify(registry, null, 2) + \"\\n\", \"utf-8\");\n\n return {\n ...record,\n outputPath: versionFile,\n };\n}\n\nasync function readManifestRegistry(\n registryPath: string,\n): Promise<\n Record<\n string,\n {\n latestVersion: number;\n latestVersionId: string;\n updatedAt: string;\n }\n >\n> {\n try {\n const src = await readFile(registryPath, \"utf-8\");\n return JSON.parse(src) as Record<\n string,\n {\n latestVersion: number;\n latestVersionId: string;\n updatedAt: string;\n }\n >;\n } catch {\n return {};\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
promptProjectName,
|
|
5
5
|
scaffoldAgent,
|
|
6
6
|
scaffoldProject
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-DOHVZBJO.js";
|
|
8
8
|
import {
|
|
9
9
|
installDeps,
|
|
10
10
|
isProjectInitialized
|
|
@@ -53,7 +53,6 @@ var create_default = defineCommand({
|
|
|
53
53
|
s.start(`Scaffolding agent ${pc.cyan(agentAnswers.name)}`);
|
|
54
54
|
await scaffoldAgent({
|
|
55
55
|
agentName: agentAnswers.name,
|
|
56
|
-
templateId: agentAnswers.templateId,
|
|
57
56
|
cwd
|
|
58
57
|
});
|
|
59
58
|
s.stop("Agent created");
|
|
@@ -61,10 +60,15 @@ var create_default = defineCommand({
|
|
|
61
60
|
[
|
|
62
61
|
`${pc.dim("\u2022")} ${pc.cyan(`agents/${agentAnswers.name}/index.ts`)}`,
|
|
63
62
|
`${pc.dim("\u2022")} ${pc.cyan(`agents/${agentAnswers.name}/steps/`)}`,
|
|
64
|
-
`${pc.dim("\u2022")} ${pc.cyan(`agents/${agentAnswers.name}/tools/`)}
|
|
63
|
+
`${pc.dim("\u2022")} ${pc.cyan(`agents/${agentAnswers.name}/tools/`)}`,
|
|
64
|
+
`${pc.dim("\u2022")} ${pc.cyan(`agents/${agentAnswers.name}/skills/`)}`
|
|
65
65
|
].join("\n"),
|
|
66
66
|
"Created"
|
|
67
67
|
);
|
|
68
|
+
p.log.info(pc.bold("Next"));
|
|
69
|
+
p.log.info(
|
|
70
|
+
`Run ${pc.cyan(`kalp skill add -a ${agentAnswers.name} -s chat-core`)} to bootstrap capabilities.`
|
|
71
|
+
);
|
|
68
72
|
p.outro(
|
|
69
73
|
`${LOGO} ${pc.green(`Agent ${pc.bold(agentAnswers.name)} is ready.`)}`
|
|
70
74
|
);
|
|
@@ -73,4 +77,4 @@ var create_default = defineCommand({
|
|
|
73
77
|
export {
|
|
74
78
|
create_default as default
|
|
75
79
|
};
|
|
76
|
-
//# sourceMappingURL=create-
|
|
80
|
+
//# sourceMappingURL=create-LCVZRFEF.js.map
|
|
@@ -1 +1 @@
|
|
|
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.js\";\nimport { installDeps, isProjectInitialized } from \"../utils/fs.js\";\nimport { promptAgentDetails, promptProjectName } from \"../utils/ui.js\";\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(\n pc.yellow(\n \"Install failed — run npx --no-install nci (or npm install) manually.\",\n ),\n );\n }\n }\n\n // ── Scaffold agent ───────────────────────────────────────────────────\n s.start(`Scaffolding agent ${pc.cyan(agentAnswers.name)}`);\n await scaffoldAgent({\n agentName: agentAnswers.name,\n
|
|
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.js\";\nimport { installDeps, isProjectInitialized } from \"../utils/fs.js\";\nimport { promptAgentDetails, promptProjectName } from \"../utils/ui.js\";\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(\n pc.yellow(\n \"Install failed — run npx --no-install nci (or npm install) manually.\",\n ),\n );\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}/skills/`)}`,\n ].join(\"\\n\"),\n \"Created\",\n );\n\n p.log.info(pc.bold(\"Next\"));\n p.log.info(\n `Run ${pc.cyan(`kalp skill add -a ${agentAnswers.name} -s chat-core`)} to bootstrap capabilities.`,\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;AAAA,UACA,GAAG;AAAA,YACD;AAAA,UACF;AAAA,QACF;AAAA,MACF;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,MAClE,EAAE,KAAK,IAAI;AAAA,MACX;AAAA,IACF;AAEA,IAAE,MAAI,KAAK,GAAG,KAAK,MAAM,CAAC;AAC1B,IAAE,MAAI;AAAA,MACJ,OAAO,GAAG,KAAK,qBAAqB,aAAa,IAAI,eAAe,CAAC;AAAA,IACvE;AAEA,IAAE;AAAA,MACA,GAAG,IAAI,IAAI,GAAG,MAAM,SAAS,GAAG,KAAK,aAAa,IAAI,CAAC,YAAY,CAAC;AAAA,IACtE;AAAA,EACF;AACF,CAAC;","names":[]}
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,8 @@ var LOGO = "\u{1F98B}";
|
|
|
8
8
|
var COMMANDS = [
|
|
9
9
|
["init", "Create a new Kalp project"],
|
|
10
10
|
["create", "Add a new agent"],
|
|
11
|
+
["skill", "Manage reusable agent skills"],
|
|
12
|
+
["manifest", "Generate versioned agent manifest"],
|
|
11
13
|
["push", "Push agent to Kalp"],
|
|
12
14
|
["link", "Link project to Kalp cloud"],
|
|
13
15
|
["login", "Authenticate with Kalp"],
|
|
@@ -38,9 +40,11 @@ var main = defineCommand({
|
|
|
38
40
|
}
|
|
39
41
|
},
|
|
40
42
|
subCommands: {
|
|
41
|
-
init: () => import("./init-
|
|
42
|
-
create: () => import("./create-
|
|
43
|
-
|
|
43
|
+
init: () => import("./init-VMOFA2AV.js").then((r) => r.default),
|
|
44
|
+
create: () => import("./create-LCVZRFEF.js").then((r) => r.default),
|
|
45
|
+
skill: () => import("./skill-IGGMF5GR.js").then((r) => r.default),
|
|
46
|
+
manifest: () => import("./manifest-LKYALPCB.js").then((r) => r.default),
|
|
47
|
+
push: () => import("./push-RUUHE6RW.js").then((r) => r.default),
|
|
44
48
|
link: () => import("./link-YKDZ7Y6K.js").then((r) => r.default),
|
|
45
49
|
login: () => import("./login-LBEXP7ET.js").then((r) => r.default),
|
|
46
50
|
logout: () => import("./logout-S3PV4WE7.js").then((r) => r.default)
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { defineCommand, runMain } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\n\nconst LOGO = \"🦋\";\n\nconst COMMANDS = [\n [\"init\", \"Create a new Kalp project\"],\n [\"create\", \"Add a new agent\"],\n [\"push\", \"Push agent to Kalp\"],\n [\"link\", \"Link project to Kalp cloud\"],\n [\"login\", \"Authenticate with Kalp\"],\n [\"logout\", \"Sign out from Kalp\"],\n] as const;\n\nfunction printHelp(): void {\n p.log.info(`${pc.bold(\"Usage\")}: kalp <command> [options]`);\n console.log(\"\");\n p.log.info(pc.bold(\"Commands\"));\n\n for (const [name, desc] of COMMANDS) {\n console.log(` ${pc.cyan(name.padEnd(10))}${desc}`);\n }\n\n console.log(\"\");\n p.log.info(`Run ${pc.cyan(\"kalp <command> --help\")} for more info.`);\n}\n\nconst main = defineCommand({\n meta: {\n name: \"kalp\",\n version: \"0.0.1\",\n description: \"🦋 Zero-config agent infrastructure\",\n },\n args: {\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n subCommands: {\n init: () => import(\"./commands/init.js\").then((r) => r.default),\n create: () => import(\"./commands/create.js\").then((r) => r.default),\n push: () => import(\"./commands/push.js\").then((r) => r.default),\n link: () => import(\"./commands/link.js\").then((r) => r.default),\n login: () => import(\"./commands/login.js\").then((r) => r.default),\n logout: () => import(\"./commands/logout.js\").then((r) => r.default),\n },\n run({ args }) {\n const firstArg = process.argv[2];\n\n if (args.help) {\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n return;\n }\n\n if (firstArg) {\n return;\n }\n\n // Default: show commands (same as help)\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n },\n});\n\nrunMain(main);\n"],"mappings":";;;AAAA,SAAS,eAAe,eAAe;AACvC,YAAY,OAAO;AACnB,OAAO,QAAQ;AAEf,IAAM,OAAO;AAEb,IAAM,WAAW;AAAA,EACf,CAAC,QAAQ,2BAA2B;AAAA,EACpC,CAAC,UAAU,iBAAiB;AAAA,EAC5B,CAAC,QAAQ,oBAAoB;AAAA,EAC7B,CAAC,QAAQ,4BAA4B;AAAA,EACrC,CAAC,SAAS,wBAAwB;AAAA,EAClC,CAAC,UAAU,oBAAoB;AACjC;AAEA,SAAS,YAAkB;AACzB,EAAE,MAAI,KAAK,GAAG,GAAG,KAAK,OAAO,CAAC,4BAA4B;AAC1D,UAAQ,IAAI,EAAE;AACd,EAAE,MAAI,KAAK,GAAG,KAAK,UAAU,CAAC;AAE9B,aAAW,CAAC,MAAM,IAAI,KAAK,UAAU;AACnC,YAAQ,IAAI,KAAK,GAAG,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;AAAA,EACpD;AAEA,UAAQ,IAAI,EAAE;AACd,EAAE,MAAI,KAAK,OAAO,GAAG,KAAK,uBAAuB,CAAC,iBAAiB;AACrE;AAEA,IAAM,OAAO,cAAc;AAAA,EACzB,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,MAAM,MAAM,OAAO,oBAAoB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IAC9D,QAAQ,MAAM,OAAO,sBAAsB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IAClE,MAAM,MAAM,OAAO,oBAAoB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IAC9D,MAAM,MAAM,OAAO,oBAAoB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IAC9D,OAAO,MAAM,OAAO,qBAAqB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IAChE,QAAQ,MAAM,OAAO,sBAAsB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,EACpE;AAAA,EACA,IAAI,EAAE,KAAK,GAAG;AACZ,UAAM,WAAW,QAAQ,KAAK,CAAC;AAE/B,QAAI,KAAK,MAAM;AACb,MAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,MAAM,CAAC,EAAE;AACpC,gBAAU;AACV,MAAE,QAAM,wBAAiB;AACzB;AAAA,IACF;AAEA,QAAI,UAAU;AACZ;AAAA,IACF;AAGA,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,MAAM,CAAC,EAAE;AACpC,cAAU;AACV,IAAE,QAAM,wBAAiB;AAAA,EAC3B;AACF,CAAC;AAED,QAAQ,IAAI;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { defineCommand, runMain } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\n\nconst LOGO = \"🦋\";\n\nconst COMMANDS = [\n [\"init\", \"Create a new Kalp project\"],\n [\"create\", \"Add a new agent\"],\n [\"skill\", \"Manage reusable agent skills\"],\n [\"manifest\", \"Generate versioned agent manifest\"],\n [\"push\", \"Push agent to Kalp\"],\n [\"link\", \"Link project to Kalp cloud\"],\n [\"login\", \"Authenticate with Kalp\"],\n [\"logout\", \"Sign out from Kalp\"],\n] as const;\n\nfunction printHelp(): void {\n p.log.info(`${pc.bold(\"Usage\")}: kalp <command> [options]`);\n console.log(\"\");\n p.log.info(pc.bold(\"Commands\"));\n\n for (const [name, desc] of COMMANDS) {\n console.log(` ${pc.cyan(name.padEnd(10))}${desc}`);\n }\n\n console.log(\"\");\n p.log.info(`Run ${pc.cyan(\"kalp <command> --help\")} for more info.`);\n}\n\nconst main = defineCommand({\n meta: {\n name: \"kalp\",\n version: \"0.0.1\",\n description: \"🦋 Zero-config agent infrastructure\",\n },\n args: {\n help: {\n type: \"boolean\",\n alias: \"h\",\n description: \"Show help\",\n default: false,\n },\n },\n subCommands: {\n init: () => import(\"./commands/init.js\").then((r) => r.default),\n create: () => import(\"./commands/create.js\").then((r) => r.default),\n skill: () => import(\"./commands/skill.js\").then((r) => r.default),\n manifest: () => import(\"./commands/manifest.js\").then((r) => r.default),\n push: () => import(\"./commands/push.js\").then((r) => r.default),\n link: () => import(\"./commands/link.js\").then((r) => r.default),\n login: () => import(\"./commands/login.js\").then((r) => r.default),\n logout: () => import(\"./commands/logout.js\").then((r) => r.default),\n },\n run({ args }) {\n const firstArg = process.argv[2];\n\n if (args.help) {\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n return;\n }\n\n if (firstArg) {\n return;\n }\n\n // Default: show commands (same as help)\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n printHelp();\n p.outro(\"Happy coding 🦋\");\n },\n});\n\nrunMain(main);\n"],"mappings":";;;AAAA,SAAS,eAAe,eAAe;AACvC,YAAY,OAAO;AACnB,OAAO,QAAQ;AAEf,IAAM,OAAO;AAEb,IAAM,WAAW;AAAA,EACf,CAAC,QAAQ,2BAA2B;AAAA,EACpC,CAAC,UAAU,iBAAiB;AAAA,EAC5B,CAAC,SAAS,8BAA8B;AAAA,EACxC,CAAC,YAAY,mCAAmC;AAAA,EAChD,CAAC,QAAQ,oBAAoB;AAAA,EAC7B,CAAC,QAAQ,4BAA4B;AAAA,EACrC,CAAC,SAAS,wBAAwB;AAAA,EAClC,CAAC,UAAU,oBAAoB;AACjC;AAEA,SAAS,YAAkB;AACzB,EAAE,MAAI,KAAK,GAAG,GAAG,KAAK,OAAO,CAAC,4BAA4B;AAC1D,UAAQ,IAAI,EAAE;AACd,EAAE,MAAI,KAAK,GAAG,KAAK,UAAU,CAAC;AAE9B,aAAW,CAAC,MAAM,IAAI,KAAK,UAAU;AACnC,YAAQ,IAAI,KAAK,GAAG,KAAK,KAAK,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;AAAA,EACpD;AAEA,UAAQ,IAAI,EAAE;AACd,EAAE,MAAI,KAAK,OAAO,GAAG,KAAK,uBAAuB,CAAC,iBAAiB;AACrE;AAEA,IAAM,OAAO,cAAc;AAAA,EACzB,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,MAAM,MAAM,OAAO,oBAAoB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IAC9D,QAAQ,MAAM,OAAO,sBAAsB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IAClE,OAAO,MAAM,OAAO,qBAAqB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IAChE,UAAU,MAAM,OAAO,wBAAwB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IACtE,MAAM,MAAM,OAAO,oBAAoB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IAC9D,MAAM,MAAM,OAAO,oBAAoB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IAC9D,OAAO,MAAM,OAAO,qBAAqB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,IAChE,QAAQ,MAAM,OAAO,sBAAsB,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO;AAAA,EACpE;AAAA,EACA,IAAI,EAAE,KAAK,GAAG;AACZ,UAAM,WAAW,QAAQ,KAAK,CAAC;AAE/B,QAAI,KAAK,MAAM;AACb,MAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,MAAM,CAAC,EAAE;AACpC,gBAAU;AACV,MAAE,QAAM,wBAAiB;AACzB;AAAA,IACF;AAEA,QAAI,UAAU;AACZ;AAAA,IACF;AAGA,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,MAAM,CAAC,EAAE;AACpC,cAAU;AACV,IAAE,QAAM,wBAAiB;AAAA,EAC3B;AACF,CAAC;AAED,QAAQ,IAAI;","names":[]}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
promptProjectName,
|
|
4
4
|
scaffoldProject
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-DOHVZBJO.js";
|
|
6
6
|
import {
|
|
7
7
|
ensureDirectory,
|
|
8
8
|
installDeps,
|
|
@@ -72,4 +72,4 @@ var init_default = defineCommand({
|
|
|
72
72
|
export {
|
|
73
73
|
init_default as default
|
|
74
74
|
};
|
|
75
|
-
//# sourceMappingURL=init-
|
|
75
|
+
//# sourceMappingURL=init-VMOFA2AV.js.map
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
readAgentManifest,
|
|
4
|
+
writeVersionedManifest
|
|
5
|
+
} from "./chunk-INMLAVHJ.js";
|
|
6
|
+
import {
|
|
7
|
+
ensureConfig
|
|
8
|
+
} from "./chunk-Q455HC3P.js";
|
|
9
|
+
import "./chunk-2H7UOFLK.js";
|
|
10
|
+
|
|
11
|
+
// src/commands/manifest.ts
|
|
12
|
+
import { access } from "fs/promises";
|
|
13
|
+
import { join } from "path";
|
|
14
|
+
import { defineCommand } from "citty";
|
|
15
|
+
import * as p from "@clack/prompts";
|
|
16
|
+
import pc from "picocolors";
|
|
17
|
+
var LOGO = "\u{1F98B}";
|
|
18
|
+
var manifest_default = defineCommand({
|
|
19
|
+
meta: {
|
|
20
|
+
name: "manifest",
|
|
21
|
+
description: "Generate a versioned JSON manifest for an agent"
|
|
22
|
+
},
|
|
23
|
+
args: {
|
|
24
|
+
agent: {
|
|
25
|
+
type: "string",
|
|
26
|
+
alias: "a",
|
|
27
|
+
description: "Agent name",
|
|
28
|
+
required: false
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
async run({ args }) {
|
|
32
|
+
const cwd = process.cwd();
|
|
33
|
+
p.intro(`${LOGO} ${pc.bold("kalp manifest")}`);
|
|
34
|
+
const agentName = args.agent;
|
|
35
|
+
if (!agentName) {
|
|
36
|
+
p.log.error(`Missing required flag ${pc.cyan("-a <agent-name>")}`);
|
|
37
|
+
p.outro(pc.dim(`Example: ${pc.cyan("kalp manifest -a my-agent")}`));
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
await ensureConfig(cwd);
|
|
42
|
+
} catch {
|
|
43
|
+
p.log.error(`${pc.cyan("kalp.config.ts")} not found`);
|
|
44
|
+
p.outro(pc.dim(`Run ${pc.cyan("kalp init")} first.`));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
const agentPath = join(cwd, "agents", agentName, "index.ts");
|
|
48
|
+
try {
|
|
49
|
+
await access(agentPath);
|
|
50
|
+
} catch {
|
|
51
|
+
p.log.error(
|
|
52
|
+
`Agent ${pc.cyan(agentName)} not found at ${pc.cyan(`agents/${agentName}/index.ts`)}`
|
|
53
|
+
);
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
const s = p.spinner();
|
|
57
|
+
s.start(`Generating manifest for ${pc.cyan(agentName)}`);
|
|
58
|
+
try {
|
|
59
|
+
const manifest = await readAgentManifest({ cwd, agentName });
|
|
60
|
+
const version = await writeVersionedManifest({ cwd, agentName, manifest });
|
|
61
|
+
s.stop(`Manifest ${pc.cyan(version.versionId)} generated`);
|
|
62
|
+
console.log("\n" + pc.dim("\u2500".repeat(50)));
|
|
63
|
+
console.log(pc.cyan("Agent Manifest (JSON):"));
|
|
64
|
+
console.log(pc.dim("\u2500".repeat(50)));
|
|
65
|
+
console.log(JSON.stringify(version, null, 2));
|
|
66
|
+
console.log(pc.dim("\u2500".repeat(50)) + "\n");
|
|
67
|
+
p.log.info(`${pc.cyan("Saved")}: ${version.outputPath}`);
|
|
68
|
+
p.outro(
|
|
69
|
+
`${LOGO} ${pc.green("Manifest ready")} ${pc.dim("\u2014 versioned in meta/manifests")}`
|
|
70
|
+
);
|
|
71
|
+
} catch (err) {
|
|
72
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
73
|
+
s.stop(pc.red("Could not generate agent manifest"));
|
|
74
|
+
p.log.info(pc.dim(msg.split("\n")[0] ?? "Unknown error"));
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
export {
|
|
80
|
+
manifest_default as default
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=manifest-LKYALPCB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/manifest.ts"],"sourcesContent":["import { access } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { ensureConfig } from \"../utils/fs.js\";\nimport { readAgentManifest, writeVersionedManifest } from \"../utils/manifest.js\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: {\n name: \"manifest\",\n description: \"Generate a versioned JSON manifest for an agent\",\n },\n args: {\n agent: {\n type: \"string\",\n alias: \"a\",\n description: \"Agent name\",\n required: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n\n p.intro(`${LOGO} ${pc.bold(\"kalp manifest\")}`);\n\n const agentName = args.agent;\n if (!agentName) {\n p.log.error(`Missing required flag ${pc.cyan(\"-a <agent-name>\")}`);\n p.outro(pc.dim(`Example: ${pc.cyan(\"kalp manifest -a my-agent\")}`));\n process.exit(1);\n }\n\n try {\n await ensureConfig(cwd);\n } catch {\n p.log.error(`${pc.cyan(\"kalp.config.ts\")} not found`);\n p.outro(pc.dim(`Run ${pc.cyan(\"kalp init\")} first.`));\n process.exit(1);\n }\n\n const agentPath = join(cwd, \"agents\", agentName, \"index.ts\");\n try {\n await access(agentPath);\n } catch {\n p.log.error(\n `Agent ${pc.cyan(agentName)} not found at ${pc.cyan(`agents/${agentName}/index.ts`)}`,\n );\n process.exit(1);\n }\n\n const s = p.spinner();\n s.start(`Generating manifest for ${pc.cyan(agentName)}`);\n\n try {\n const manifest = await readAgentManifest({ cwd, agentName });\n const version = await writeVersionedManifest({ cwd, agentName, manifest });\n\n s.stop(`Manifest ${pc.cyan(version.versionId)} generated`);\n\n console.log(\"\\n\" + pc.dim(\"─\".repeat(50)));\n console.log(pc.cyan(\"Agent Manifest (JSON):\"));\n console.log(pc.dim(\"─\".repeat(50)));\n console.log(JSON.stringify(version, null, 2));\n console.log(pc.dim(\"─\".repeat(50)) + \"\\n\");\n p.log.info(`${pc.cyan(\"Saved\")}: ${version.outputPath}`);\n\n p.outro(\n `${LOGO} ${pc.green(\"Manifest ready\")} ${pc.dim(\"— versioned in meta/manifests\")}`,\n );\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n s.stop(pc.red(\"Could not generate agent manifest\"));\n p.log.info(pc.dim(msg.split(\"\\n\")[0] ?? \"Unknown error\"));\n process.exit(1);\n }\n },\n});\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AAIf,IAAM,OAAO;AAEb,IAAO,mBAAQ,cAAc;AAAA,EAC3B,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,aAAa;AAAA,EACf;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,MAAM,QAAQ,IAAI;AAExB,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,eAAe,CAAC,EAAE;AAE7C,UAAM,YAAY,KAAK;AACvB,QAAI,CAAC,WAAW;AACd,MAAE,MAAI,MAAM,yBAAyB,GAAG,KAAK,iBAAiB,CAAC,EAAE;AACjE,MAAE,QAAM,GAAG,IAAI,YAAY,GAAG,KAAK,2BAA2B,CAAC,EAAE,CAAC;AAClE,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,QAAI;AACF,YAAM,aAAa,GAAG;AAAA,IACxB,QAAQ;AACN,MAAE,MAAI,MAAM,GAAG,GAAG,KAAK,gBAAgB,CAAC,YAAY;AACpD,MAAE,QAAM,GAAG,IAAI,OAAO,GAAG,KAAK,WAAW,CAAC,SAAS,CAAC;AACpD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,YAAY,KAAK,KAAK,UAAU,WAAW,UAAU;AAC3D,QAAI;AACF,YAAM,OAAO,SAAS;AAAA,IACxB,QAAQ;AACN,MAAE,MAAI;AAAA,QACJ,SAAS,GAAG,KAAK,SAAS,CAAC,iBAAiB,GAAG,KAAK,UAAU,SAAS,WAAW,CAAC;AAAA,MACrF;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,IAAM,UAAQ;AACpB,MAAE,MAAM,2BAA2B,GAAG,KAAK,SAAS,CAAC,EAAE;AAEvD,QAAI;AACF,YAAM,WAAW,MAAM,kBAAkB,EAAE,KAAK,UAAU,CAAC;AAC3D,YAAM,UAAU,MAAM,uBAAuB,EAAE,KAAK,WAAW,SAAS,CAAC;AAEzE,QAAE,KAAK,YAAY,GAAG,KAAK,QAAQ,SAAS,CAAC,YAAY;AAEzD,cAAQ,IAAI,OAAO,GAAG,IAAI,SAAI,OAAO,EAAE,CAAC,CAAC;AACzC,cAAQ,IAAI,GAAG,KAAK,wBAAwB,CAAC;AAC7C,cAAQ,IAAI,GAAG,IAAI,SAAI,OAAO,EAAE,CAAC,CAAC;AAClC,cAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC5C,cAAQ,IAAI,GAAG,IAAI,SAAI,OAAO,EAAE,CAAC,IAAI,IAAI;AACzC,MAAE,MAAI,KAAK,GAAG,GAAG,KAAK,OAAO,CAAC,KAAK,QAAQ,UAAU,EAAE;AAEvD,MAAE;AAAA,QACA,GAAG,IAAI,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,GAAG,IAAI,oCAA+B,CAAC;AAAA,MAClF;AAAA,IACF,SAAS,KAAK;AACZ,YAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC3D,QAAE,KAAK,GAAG,IAAI,mCAAmC,CAAC;AAClD,MAAE,MAAI,KAAK,GAAG,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,KAAK,eAAe,CAAC;AACxD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACF,CAAC;","names":[]}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import {
|
|
3
|
+
readAgentManifest,
|
|
4
|
+
writeVersionedManifest
|
|
5
|
+
} from "./chunk-INMLAVHJ.js";
|
|
6
|
+
import {
|
|
7
|
+
ensureConfig
|
|
8
|
+
} from "./chunk-Q455HC3P.js";
|
|
9
|
+
import "./chunk-2H7UOFLK.js";
|
|
10
|
+
|
|
11
|
+
// src/commands/push.ts
|
|
12
|
+
import { access } from "fs/promises";
|
|
13
|
+
import { join } from "path";
|
|
14
|
+
import { defineCommand } from "citty";
|
|
15
|
+
import * as p from "@clack/prompts";
|
|
16
|
+
import pc from "picocolors";
|
|
17
|
+
var LOGO = "\u{1F98B}";
|
|
18
|
+
var push_default = defineCommand({
|
|
19
|
+
meta: { name: "push", description: "Push an agent to Kalp (preview mode)" },
|
|
20
|
+
args: {
|
|
21
|
+
agent: {
|
|
22
|
+
type: "string",
|
|
23
|
+
alias: "a",
|
|
24
|
+
description: "Agent name to push",
|
|
25
|
+
required: false
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
async run({ args }) {
|
|
29
|
+
const cwd = process.cwd();
|
|
30
|
+
p.intro(`${LOGO} ${pc.bold("kalp push")}`);
|
|
31
|
+
const agentName = args.agent;
|
|
32
|
+
if (!agentName) {
|
|
33
|
+
p.log.error(`Missing required flag ${pc.cyan("-a <agent-name>")}`);
|
|
34
|
+
p.outro(pc.dim(`Example: ${pc.cyan("kalp push -a my-agent")}`));
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
await ensureConfig(cwd);
|
|
39
|
+
} catch {
|
|
40
|
+
p.log.error(`${pc.cyan("kalp.config.ts")} not found`);
|
|
41
|
+
p.outro(pc.dim(`Run ${pc.cyan("kalp init")} first.`));
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
const agentPath = join(cwd, "agents", agentName, "index.ts");
|
|
45
|
+
try {
|
|
46
|
+
await access(agentPath);
|
|
47
|
+
} catch {
|
|
48
|
+
p.log.error(
|
|
49
|
+
`Agent ${pc.cyan(agentName)} not found at ${pc.cyan(`agents/${agentName}/index.ts`)}`
|
|
50
|
+
);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
const s = p.spinner();
|
|
54
|
+
s.start(`Generating manifest for ${pc.cyan(agentName)}`);
|
|
55
|
+
let manifest;
|
|
56
|
+
let version;
|
|
57
|
+
try {
|
|
58
|
+
manifest = await readAgentManifest({ cwd, agentName });
|
|
59
|
+
version = await writeVersionedManifest({ cwd, agentName, manifest });
|
|
60
|
+
} catch (err) {
|
|
61
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
62
|
+
s.stop(pc.red("Could not generate agent manifest"));
|
|
63
|
+
p.log.info(pc.dim(msg.split("\n")[0] ?? "Unknown error"));
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
s.stop(`Manifest ${pc.cyan(version.versionId)} generated`);
|
|
67
|
+
console.log("\n" + pc.dim("\u2500".repeat(50)));
|
|
68
|
+
console.log(pc.cyan("Agent Manifest (JSON):"));
|
|
69
|
+
console.log(pc.dim("\u2500".repeat(50)));
|
|
70
|
+
console.log(JSON.stringify(version, null, 2));
|
|
71
|
+
console.log(pc.dim("\u2500".repeat(50)) + "\n");
|
|
72
|
+
p.log.info(`${pc.cyan("Saved")}: ${version.outputPath}`);
|
|
73
|
+
p.outro(
|
|
74
|
+
`${LOGO} ${pc.green("Manifest ready")} ${pc.dim("\u2014 versioned in meta/manifests")}`
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
export {
|
|
79
|
+
push_default as default
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=push-RUUHE6RW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/push.ts"],"sourcesContent":["import { access } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { ensureConfig } from \"../utils/fs.js\";\nimport {\n readAgentManifest,\n writeVersionedManifest,\n} from \"../utils/manifest.js\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: { name: \"push\", description: \"Push an agent to Kalp (preview mode)\" },\n args: {\n agent: {\n type: \"string\",\n alias: \"a\",\n description: \"Agent name to push\",\n required: false,\n },\n },\n async run({ args }) {\n const cwd = process.cwd();\n\n p.intro(`${LOGO} ${pc.bold(\"kalp push\")}`);\n\n // ── Validate agent name ─────────────────────────────────────────────────\n const agentName = args.agent;\n if (!agentName) {\n p.log.error(`Missing required flag ${pc.cyan(\"-a <agent-name>\")}`);\n p.outro(pc.dim(`Example: ${pc.cyan(\"kalp push -a my-agent\")}`));\n process.exit(1);\n }\n\n // ── Validate kalp.config.ts exists ─────────────────────────────────────\n try {\n await ensureConfig(cwd);\n } catch {\n p.log.error(`${pc.cyan(\"kalp.config.ts\")} not found`);\n p.outro(pc.dim(`Run ${pc.cyan(\"kalp init\")} first.`));\n process.exit(1);\n }\n\n // ── Find agent ──────────────────────────────────────────────────────────\n const agentPath = join(cwd, \"agents\", agentName, \"index.ts\");\n try {\n await access(agentPath);\n } catch {\n p.log.error(\n `Agent ${pc.cyan(agentName)} not found at ${pc.cyan(`agents/${agentName}/index.ts`)}`,\n );\n process.exit(1);\n }\n\n const s = p.spinner();\n s.start(`Generating manifest for ${pc.cyan(agentName)}`);\n\n let manifest;\n let version;\n\n try {\n manifest = await readAgentManifest({ cwd, agentName });\n version = await writeVersionedManifest({ cwd, agentName, manifest });\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n s.stop(pc.red(\"Could not generate agent manifest\"));\n p.log.info(pc.dim(msg.split(\"\\n\")[0] ?? \"Unknown error\"));\n process.exit(1);\n }\n\n s.stop(`Manifest ${pc.cyan(version.versionId)} generated`);\n\n // ── Output JSON ─────────────────────────────────────────────────────────\n console.log(\"\\n\" + pc.dim(\"─\".repeat(50)));\n console.log(pc.cyan(\"Agent Manifest (JSON):\"));\n console.log(pc.dim(\"─\".repeat(50)));\n console.log(JSON.stringify(version, null, 2));\n console.log(pc.dim(\"─\".repeat(50)) + \"\\n\");\n p.log.info(`${pc.cyan(\"Saved\")}: ${version.outputPath}`);\n\n p.outro(\n `${LOGO} ${pc.green(\"Manifest ready\")} ${pc.dim(\"— versioned in meta/manifests\")}`,\n );\n },\n});\n"],"mappings":";;;;;;;;;;;AAAA,SAAS,cAAc;AACvB,SAAS,YAAY;AACrB,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AAOf,IAAM,OAAO;AAEb,IAAO,eAAQ,cAAc;AAAA,EAC3B,MAAM,EAAE,MAAM,QAAQ,aAAa,uCAAuC;AAAA,EAC1E,MAAM;AAAA,IACJ,OAAO;AAAA,MACL,MAAM;AAAA,MACN,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EACA,MAAM,IAAI,EAAE,KAAK,GAAG;AAClB,UAAM,MAAM,QAAQ,IAAI;AAExB,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,WAAW,CAAC,EAAE;AAGzC,UAAM,YAAY,KAAK;AACvB,QAAI,CAAC,WAAW;AACd,MAAE,MAAI,MAAM,yBAAyB,GAAG,KAAK,iBAAiB,CAAC,EAAE;AACjE,MAAE,QAAM,GAAG,IAAI,YAAY,GAAG,KAAK,uBAAuB,CAAC,EAAE,CAAC;AAC9D,cAAQ,KAAK,CAAC;AAAA,IAChB;AAGA,QAAI;AACF,YAAM,aAAa,GAAG;AAAA,IACxB,QAAQ;AACN,MAAE,MAAI,MAAM,GAAG,GAAG,KAAK,gBAAgB,CAAC,YAAY;AACpD,MAAE,QAAM,GAAG,IAAI,OAAO,GAAG,KAAK,WAAW,CAAC,SAAS,CAAC;AACpD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAGA,UAAM,YAAY,KAAK,KAAK,UAAU,WAAW,UAAU;AAC3D,QAAI;AACF,YAAM,OAAO,SAAS;AAAA,IACxB,QAAQ;AACN,MAAE,MAAI;AAAA,QACJ,SAAS,GAAG,KAAK,SAAS,CAAC,iBAAiB,GAAG,KAAK,UAAU,SAAS,WAAW,CAAC;AAAA,MACrF;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,IAAM,UAAQ;AACpB,MAAE,MAAM,2BAA2B,GAAG,KAAK,SAAS,CAAC,EAAE;AAEvD,QAAI;AACJ,QAAI;AAEJ,QAAI;AACF,iBAAW,MAAM,kBAAkB,EAAE,KAAK,UAAU,CAAC;AACrD,gBAAU,MAAM,uBAAuB,EAAE,KAAK,WAAW,SAAS,CAAC;AAAA,IACrE,SAAS,KAAK;AACZ,YAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC3D,QAAE,KAAK,GAAG,IAAI,mCAAmC,CAAC;AAClD,MAAE,MAAI,KAAK,GAAG,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,KAAK,eAAe,CAAC;AACxD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,MAAE,KAAK,YAAY,GAAG,KAAK,QAAQ,SAAS,CAAC,YAAY;AAGzD,YAAQ,IAAI,OAAO,GAAG,IAAI,SAAI,OAAO,EAAE,CAAC,CAAC;AACzC,YAAQ,IAAI,GAAG,KAAK,wBAAwB,CAAC;AAC7C,YAAQ,IAAI,GAAG,IAAI,SAAI,OAAO,EAAE,CAAC,CAAC;AAClC,YAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAC5C,YAAQ,IAAI,GAAG,IAAI,SAAI,OAAO,EAAE,CAAC,IAAI,IAAI;AACzC,IAAE,MAAI,KAAK,GAAG,GAAG,KAAK,OAAO,CAAC,KAAK,QAAQ,UAAU,EAAE;AAEvD,IAAE;AAAA,MACA,GAAG,IAAI,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,GAAG,IAAI,oCAA+B,CAAC;AAAA,IAClF;AAAA,EACF;AACF,CAAC;","names":[]}
|