@kalphq/cli 0.0.0-dev-20260416090302 → 0.0.0-dev-20260416091527

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/index.js CHANGED
@@ -40,7 +40,7 @@ var main = defineCommand({
40
40
  subCommands: {
41
41
  init: () => import("./init-K7EASUMM.js").then((r) => r.default),
42
42
  create: () => import("./create-XJURMQC4.js").then((r) => r.default),
43
- push: () => import("./push-N67OPGCD.js").then((r) => r.default),
43
+ push: () => import("./push-YFHHNITO.js").then((r) => r.default),
44
44
  link: () => import("./link-YKDZ7Y6K.js").then((r) => r.default),
45
45
  login: () => import("./login-LBEXP7ET.js").then((r) => r.default),
46
46
  logout: () => import("./logout-S3PV4WE7.js").then((r) => r.default)
@@ -0,0 +1,174 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ensureConfig
4
+ } from "./chunk-Q455HC3P.js";
5
+ import "./chunk-2H7UOFLK.js";
6
+
7
+ // src/commands/push.ts
8
+ import { existsSync } from "fs";
9
+ import { access, mkdtemp, rm } from "fs/promises";
10
+ import { join, resolve } from "path";
11
+ import { pathToFileURL } from "url";
12
+ import { defineCommand } from "citty";
13
+ import * as p from "@clack/prompts";
14
+ import { build } from "esbuild";
15
+ import pc from "picocolors";
16
+ import { zodToJsonSchema } from "zod-to-json-schema";
17
+ var LOGO = "\u{1F98B}";
18
+ function toJsonSchema(schema, name) {
19
+ try {
20
+ return zodToJsonSchema(schema, name);
21
+ } catch {
22
+ return null;
23
+ }
24
+ }
25
+ function asRecord(value) {
26
+ return typeof value === "object" && value !== null ? value : {};
27
+ }
28
+ function asString(value) {
29
+ return typeof value === "string" ? value : void 0;
30
+ }
31
+ function asArray(value) {
32
+ return Array.isArray(value) ? value : [];
33
+ }
34
+ function serializeSteps(steps) {
35
+ return steps.map((step, index) => {
36
+ const item = asRecord(step);
37
+ return {
38
+ id: asString(item.id) ?? `step_${index}`,
39
+ description: asString(item.description) ?? "",
40
+ inputSchema: toJsonSchema(item.input, `step_${index}_input`),
41
+ outputSchema: toJsonSchema(item.output, `step_${index}_output`)
42
+ };
43
+ });
44
+ }
45
+ function serializeItems(items, kind) {
46
+ return items.map((item, index) => {
47
+ const parsed = asRecord(item);
48
+ return {
49
+ id: asString(parsed.id) ?? `${kind}_${index}`,
50
+ description: asString(parsed.description) ?? "",
51
+ inputSchema: toJsonSchema(parsed.input, `${kind}_${index}_input`)
52
+ };
53
+ });
54
+ }
55
+ async function loadAgentModule(agentPath, cwd) {
56
+ const tempDir = await mkdtemp(join(cwd, ".kalp-push-"));
57
+ const outFile = join(tempDir, "agent.preview.mjs");
58
+ await build({
59
+ entryPoints: [agentPath],
60
+ outfile: outFile,
61
+ bundle: true,
62
+ format: "esm",
63
+ platform: "node",
64
+ target: "node18",
65
+ logLevel: "silent",
66
+ packages: "external",
67
+ plugins: [
68
+ {
69
+ name: "relative-js-to-ts",
70
+ setup(buildCtx) {
71
+ buildCtx.onResolve({ filter: /^\.+\/.*\.js$/ }, (args) => {
72
+ const resolved = resolve(args.resolveDir, args.path);
73
+ if (existsSync(resolved)) {
74
+ return { path: resolved };
75
+ }
76
+ const tsPath = resolved.replace(/\.js$/, ".ts");
77
+ if (existsSync(tsPath)) {
78
+ return { path: tsPath };
79
+ }
80
+ const tsxPath = resolved.replace(/\.js$/, ".tsx");
81
+ if (existsSync(tsxPath)) {
82
+ return { path: tsxPath };
83
+ }
84
+ return null;
85
+ });
86
+ }
87
+ }
88
+ ]
89
+ });
90
+ const loaded = await import(`${pathToFileURL(outFile).href}?t=${Date.now()}`);
91
+ return {
92
+ agent: loaded.default,
93
+ tempDir
94
+ };
95
+ }
96
+ var push_default = defineCommand({
97
+ meta: { name: "push", description: "Push an agent to Kalp (preview mode)" },
98
+ args: {
99
+ agent: {
100
+ type: "string",
101
+ alias: "a",
102
+ description: "Agent name to push",
103
+ required: false
104
+ }
105
+ },
106
+ async run({ args }) {
107
+ const cwd = process.cwd();
108
+ p.intro(`${LOGO} ${pc.bold("kalp push")}`);
109
+ const agentName = args.agent;
110
+ if (!agentName) {
111
+ p.log.error(`Missing required flag ${pc.cyan("-a <agent-name>")}`);
112
+ p.outro(pc.dim(`Example: ${pc.cyan("kalp push -a my-agent")}`));
113
+ process.exit(1);
114
+ }
115
+ try {
116
+ await ensureConfig(cwd);
117
+ } catch {
118
+ p.log.error(`${pc.cyan("kalp.config.ts")} not found`);
119
+ p.outro(pc.dim(`Run ${pc.cyan("kalp init")} first.`));
120
+ process.exit(1);
121
+ }
122
+ const agentPath = join(cwd, "agents", agentName, "index.ts");
123
+ try {
124
+ await access(agentPath);
125
+ } catch {
126
+ p.log.error(
127
+ `Agent ${pc.cyan(agentName)} not found at ${pc.cyan(`agents/${agentName}/index.ts`)}`
128
+ );
129
+ process.exit(1);
130
+ }
131
+ const s = p.spinner();
132
+ s.start(`Parsing agent ${pc.cyan(agentName)}`);
133
+ let tempDir;
134
+ let agentConfig;
135
+ try {
136
+ const loaded = await loadAgentModule(agentPath, cwd);
137
+ tempDir = loaded.tempDir;
138
+ const agent = asRecord(loaded.agent);
139
+ agentConfig = {
140
+ id: asString(agent.id) ?? void 0,
141
+ name: asString(agent.name) ?? agentName,
142
+ description: asString(agent.description) ?? "",
143
+ source: agentPath,
144
+ systemPrompt: asString(agent.systemPrompt) ?? "",
145
+ steps: serializeSteps(asArray(agent.steps)),
146
+ tools: serializeItems(asArray(agent.tools), "tool"),
147
+ webhooks: serializeItems(asArray(agent.webhooks), "webhook"),
148
+ signals: serializeItems(asArray(agent.signals), "signal")
149
+ };
150
+ } catch (err) {
151
+ const msg = err instanceof Error ? err.message : String(err);
152
+ s.stop(pc.red("Could not parse agent module"));
153
+ p.log.info(pc.dim(msg.split("\n")[0] ?? "Unknown error"));
154
+ process.exit(1);
155
+ } finally {
156
+ if (tempDir) {
157
+ await rm(tempDir, { recursive: true, force: true });
158
+ }
159
+ }
160
+ s.stop("Agent parsed");
161
+ console.log("\n" + pc.dim("\u2500".repeat(50)));
162
+ console.log(pc.cyan("Agent Configuration (JSON):"));
163
+ console.log(pc.dim("\u2500".repeat(50)));
164
+ console.log(JSON.stringify(agentConfig, null, 2));
165
+ console.log(pc.dim("\u2500".repeat(50)) + "\n");
166
+ p.outro(
167
+ `${LOGO} ${pc.green("Preview ready")} ${pc.dim("\u2014 push to deploy coming soon")}`
168
+ );
169
+ }
170
+ });
171
+ export {
172
+ push_default as default
173
+ };
174
+ //# sourceMappingURL=push-YFHHNITO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/push.ts"],"sourcesContent":["import { existsSync } from \"node:fs\";\nimport { access, mkdtemp, rm } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport { build } from \"esbuild\";\nimport pc from \"picocolors\";\nimport type { ZodTypeAny } from \"zod\";\nimport { zodToJsonSchema } from \"zod-to-json-schema\";\nimport { ensureConfig } from \"../utils/fs.js\";\n\nconst LOGO = \"🦋\";\n\ntype JsonSchema = Record<string, unknown>;\n\ninterface AgentItemWithInput {\n id?: unknown;\n description?: unknown;\n input?: unknown;\n}\n\ninterface AgentStepItem extends AgentItemWithInput {\n output?: unknown;\n}\n\ninterface LoadedAgentModule {\n agent: unknown;\n tempDir: string;\n}\n\nfunction toJsonSchema(schema: unknown, name: string): JsonSchema | null {\n try {\n return zodToJsonSchema(schema as ZodTypeAny, name) as JsonSchema;\n } catch {\n return null;\n }\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 serializeSteps(steps: unknown[]): Record<string, unknown>[] {\n return steps.map((step, index) => {\n const item = asRecord(step) as AgentStepItem;\n return {\n id: asString(item.id) ?? `step_${index}`,\n description: asString(item.description) ?? \"\",\n inputSchema: toJsonSchema(item.input, `step_${index}_input`),\n outputSchema: toJsonSchema(item.output, `step_${index}_output`),\n };\n });\n}\n\nfunction serializeItems(\n items: unknown[],\n kind: \"tool\" | \"webhook\" | \"signal\",\n): Record<string, unknown>[] {\n return items.map((item, index) => {\n const parsed = asRecord(item) as AgentItemWithInput;\n return {\n id: asString(parsed.id) ?? `${kind}_${index}`,\n description: asString(parsed.description) ?? \"\",\n inputSchema: toJsonSchema(parsed.input, `${kind}_${index}_input`),\n };\n });\n}\n\nasync function loadAgentModule(\n agentPath: string,\n cwd: string,\n): Promise<LoadedAgentModule> {\n const tempDir = await mkdtemp(join(cwd, \".kalp-push-\"));\n const outFile = join(tempDir, \"agent.preview.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 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(`Parsing agent ${pc.cyan(agentName)}`);\n let tempDir: string | undefined;\n let agentConfig: Record<string, unknown>;\n\n try {\n const loaded = await loadAgentModule(agentPath, cwd);\n tempDir = loaded.tempDir;\n\n const agent = asRecord(loaded.agent);\n agentConfig = {\n id: asString(agent.id) ?? undefined,\n name: asString(agent.name) ?? agentName,\n description: asString(agent.description) ?? \"\",\n source: agentPath,\n systemPrompt: asString(agent.systemPrompt) ?? \"\",\n steps: serializeSteps(asArray(agent.steps)),\n tools: serializeItems(asArray(agent.tools), \"tool\"),\n webhooks: serializeItems(asArray(agent.webhooks), \"webhook\"),\n signals: serializeItems(asArray(agent.signals), \"signal\"),\n };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n s.stop(pc.red(\"Could not parse agent module\"));\n p.log.info(pc.dim(msg.split(\"\\n\")[0] ?? \"Unknown error\"));\n process.exit(1);\n } finally {\n if (tempDir) {\n await rm(tempDir, { recursive: true, force: true });\n }\n }\n\n s.stop(\"Agent parsed\");\n\n // ── Output JSON ─────────────────────────────────────────────────────────\n console.log(\"\\n\" + pc.dim(\"─\".repeat(50)));\n console.log(pc.cyan(\"Agent Configuration (JSON):\"));\n console.log(pc.dim(\"─\".repeat(50)));\n console.log(JSON.stringify(agentConfig, null, 2));\n console.log(pc.dim(\"─\".repeat(50)) + \"\\n\");\n\n p.outro(\n `${LOGO} ${pc.green(\"Preview ready\")} ${pc.dim(\"— push to deploy coming soon\")}`,\n );\n },\n});\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kalphq/cli",
3
- "version": "0.0.0-dev-20260416090302",
3
+ "version": "0.0.0-dev-20260416091527",
4
4
  "description": "Zero-config CLI for deploying Kalp agents",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -17,13 +17,14 @@
17
17
  "access": "public"
18
18
  },
19
19
  "dependencies": {
20
- "@antfu/ni": "^24.4.0",
21
- "@clack/prompts": "^0.9.1",
22
- "citty": "^0.1.6",
23
- "esbuild": "^0.25.0",
24
- "picocolors": "^1.1.1",
25
- "zod": "^3.25.76",
26
- "@kalphq/sdk": "0.0.0-dev-20260416090302"
20
+ "@antfu/ni": "24.4.0",
21
+ "@clack/prompts": "0.9.1",
22
+ "citty": "0.1.6",
23
+ "esbuild": "0.25.0",
24
+ "picocolors": "1.1.1",
25
+ "zod": "3.25.76",
26
+ "zod-to-json-schema": "3.25.2",
27
+ "@kalphq/sdk": "0.0.0-dev-20260416091527"
27
28
  },
28
29
  "devDependencies": {
29
30
  "@types/node": "^22.15.3",
@@ -1,104 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- ensureConfig
4
- } from "./chunk-Q455HC3P.js";
5
- import "./chunk-2H7UOFLK.js";
6
-
7
- // src/commands/push.ts
8
- import { join } from "path";
9
- import { readFile } from "fs/promises";
10
- import { defineCommand } from "citty";
11
- import * as p from "@clack/prompts";
12
- import pc from "picocolors";
13
- var LOGO = "\u{1F98B}";
14
- var push_default = defineCommand({
15
- meta: { name: "push", description: "Push an agent to Kalp (preview mode)" },
16
- args: {
17
- agent: {
18
- type: "string",
19
- alias: "a",
20
- description: "Agent name to push",
21
- required: false
22
- }
23
- },
24
- async run({ args }) {
25
- const cwd = process.cwd();
26
- p.intro(`${LOGO} ${pc.bold("kalp push")}`);
27
- const agentName = args.agent;
28
- if (!agentName) {
29
- p.log.error(`Missing required flag ${pc.cyan("-a <agent-name>")}`);
30
- p.outro(pc.dim(`Example: ${pc.cyan("kalp push -a my-agent")}`));
31
- process.exit(1);
32
- }
33
- try {
34
- await ensureConfig(cwd);
35
- } catch {
36
- p.log.error(`${pc.cyan("kalp.config.ts")} not found`);
37
- p.outro(pc.dim(`Run ${pc.cyan("kalp init")} first.`));
38
- process.exit(1);
39
- }
40
- const agentPath = join(cwd, "agents", agentName, "index.ts");
41
- let agentCode;
42
- try {
43
- agentCode = await readFile(agentPath, "utf-8");
44
- } catch {
45
- p.log.error(
46
- `Agent ${pc.cyan(agentName)} not found at ${pc.cyan(`agents/${agentName}/index.ts`)}`
47
- );
48
- process.exit(1);
49
- }
50
- const s = p.spinner();
51
- s.start(`Parsing agent ${pc.cyan(agentName)}`);
52
- const defineAgentMatch = agentCode.match(
53
- /defineAgent\(\s*(\{[\s\S]*?\})\s*\)/
54
- );
55
- if (!defineAgentMatch?.[1]) {
56
- s.stop(pc.red("Could not parse defineAgent call"));
57
- process.exit(1);
58
- }
59
- const stepMatches = [
60
- ...agentCode.matchAll(/createStep\(\s*(\{[\s\S]*?\})\s*\)/g)
61
- ];
62
- const toolMatches = [
63
- ...agentCode.matchAll(/createTool\(\s*(\{[\s\S]*?\})\s*\)/g)
64
- ];
65
- const steps = stepMatches.map((match, i) => {
66
- const content = match[1] ?? "";
67
- const idMatch = content.match(/id:\s*["']([^"']+)["']/);
68
- const descMatch = content.match(/description:\s*["']([^"']+)["']/);
69
- return {
70
- id: idMatch?.[1] ?? `step_${i}`,
71
- description: descMatch?.[1] ?? ""
72
- };
73
- });
74
- const tools = toolMatches.map((match, i) => {
75
- const content = match[1] ?? "";
76
- const idMatch = content.match(/id:\s*["']([^"']+)["']/);
77
- const descMatch = content.match(/description:\s*["']([^"']+)["']/);
78
- return {
79
- id: idMatch?.[1] ?? `tool_${i}`,
80
- description: descMatch?.[1] ?? ""
81
- };
82
- });
83
- const agentConfig = {
84
- name: agentName,
85
- source: agentPath,
86
- steps,
87
- tools
88
- // Future: full AST parsing with Zod schema extraction
89
- };
90
- s.stop("Agent parsed");
91
- console.log("\n" + pc.dim("\u2500".repeat(50)));
92
- console.log(pc.cyan("Agent Configuration (JSON):"));
93
- console.log(pc.dim("\u2500".repeat(50)));
94
- console.log(JSON.stringify(agentConfig, null, 2));
95
- console.log(pc.dim("\u2500".repeat(50)) + "\n");
96
- p.outro(
97
- `${LOGO} ${pc.green("Preview ready")} ${pc.dim("\u2014 push to deploy coming soon")}`
98
- );
99
- }
100
- });
101
- export {
102
- push_default as default
103
- };
104
- //# sourceMappingURL=push-N67OPGCD.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/commands/push.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport { readFile } from \"node:fs/promises\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { ensureConfig } from \"../utils/fs.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 let agentCode: string;\n try {\n agentCode = await readFile(agentPath, \"utf-8\");\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(`Parsing agent ${pc.cyan(agentName)}`);\n\n // ── Parse agent config from TypeScript ──────────────────────────────────\n // Extract defineAgent({...}) call using regex\n const defineAgentMatch = agentCode.match(\n /defineAgent\\(\\s*(\\{[\\s\\S]*?\\})\\s*\\)/,\n );\n if (!defineAgentMatch?.[1]) {\n s.stop(pc.red(\"Could not parse defineAgent call\"));\n process.exit(1);\n }\n\n // Extract steps and tools arrays for schema generation\n const stepMatches = [\n ...agentCode.matchAll(/createStep\\(\\s*(\\{[\\s\\S]*?\\})\\s*\\)/g),\n ];\n const toolMatches = [\n ...agentCode.matchAll(/createTool\\(\\s*(\\{[\\s\\S]*?\\})\\s*\\)/g),\n ];\n\n const steps = stepMatches.map((match, i) => {\n const content = match[1] ?? \"\";\n const idMatch = content.match(/id:\\s*[\"']([^\"']+)[\"']/);\n const descMatch = content.match(/description:\\s*[\"']([^\"']+)[\"']/);\n return {\n id: idMatch?.[1] ?? `step_${i}`,\n description: descMatch?.[1] ?? \"\",\n };\n });\n\n const tools = toolMatches.map((match, i) => {\n const content = match[1] ?? \"\";\n const idMatch = content.match(/id:\\s*[\"']([^\"']+)[\"']/);\n const descMatch = content.match(/description:\\s*[\"']([^\"']+)[\"']/);\n return {\n id: idMatch?.[1] ?? `tool_${i}`,\n description: descMatch?.[1] ?? \"\",\n };\n });\n\n // ── Build JSON representation ───────────────────────────────────────────\n const agentConfig = {\n name: agentName,\n source: agentPath,\n steps,\n tools,\n // Future: full AST parsing with Zod schema extraction\n };\n\n s.stop(\"Agent parsed\");\n\n // ── Output JSON ─────────────────────────────────────────────────────────\n console.log(\"\\n\" + pc.dim(\"─\".repeat(50)));\n console.log(pc.cyan(\"Agent Configuration (JSON):\"));\n console.log(pc.dim(\"─\".repeat(50)));\n console.log(JSON.stringify(agentConfig, null, 2));\n console.log(pc.dim(\"─\".repeat(50)) + \"\\n\");\n\n p.outro(\n `${LOGO} ${pc.green(\"Preview ready\")} ${pc.dim(\"— push to deploy coming soon\")}`,\n );\n },\n});\n"],"mappings":"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","names":[]}