@kalphq/cli 0.0.0-dev-20260416084549 → 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/{chunk-LAKPXKSS.js → chunk-Q455HC3P.js} +12 -5
- package/dist/chunk-Q455HC3P.js.map +1 -0
- package/dist/{create-T76IFYRP.js → create-XJURMQC4.js} +7 -3
- package/dist/create-XJURMQC4.js.map +1 -0
- package/dist/index.js +29 -35
- package/dist/index.js.map +1 -1
- package/dist/{init-SDITDMG6.js → init-K7EASUMM.js} +15 -17
- package/dist/init-K7EASUMM.js.map +1 -0
- package/dist/push-YFHHNITO.js +174 -0
- package/dist/push-YFHHNITO.js.map +1 -0
- package/package.json +9 -9
- package/dist/chunk-LAKPXKSS.js.map +0 -1
- package/dist/create-T76IFYRP.js.map +0 -1
- package/dist/init-SDITDMG6.js.map +0 -1
- package/dist/push-YFAB7TWQ.js +0 -104
- package/dist/push-YFAB7TWQ.js.map +0 -1
|
@@ -22,10 +22,17 @@ async function ensureDirectory(path) {
|
|
|
22
22
|
await mkdir(path, { recursive: true });
|
|
23
23
|
}
|
|
24
24
|
async function installDeps(cwd) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
try {
|
|
26
|
+
execSync("npx --no-install nci", {
|
|
27
|
+
cwd,
|
|
28
|
+
stdio: "pipe"
|
|
29
|
+
});
|
|
30
|
+
} catch {
|
|
31
|
+
execSync("npm install", {
|
|
32
|
+
cwd,
|
|
33
|
+
stdio: "pipe"
|
|
34
|
+
});
|
|
35
|
+
}
|
|
29
36
|
}
|
|
30
37
|
|
|
31
38
|
export {
|
|
@@ -34,4 +41,4 @@ export {
|
|
|
34
41
|
ensureDirectory,
|
|
35
42
|
installDeps
|
|
36
43
|
};
|
|
37
|
-
//# sourceMappingURL=chunk-
|
|
44
|
+
//# sourceMappingURL=chunk-Q455HC3P.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/fs.ts"],"sourcesContent":["import { access, mkdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { execSync } from \"node:child_process\";\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 execSync(\"npx --no-install nci\", {\n cwd,\n stdio: \"pipe\",\n });\n } catch {\n execSync(\"npm install\", {\n cwd,\n stdio: \"pipe\",\n });\n }\n}\n"],"mappings":";;;AAAA,SAAS,QAAQ,aAAa;AAC9B,SAAS,YAAY;AACrB,SAAS,gBAAgB;AAEzB,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,aAAS,wBAAwB;AAAA,MAC/B;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAAA,EACH,QAAQ;AACN,aAAS,eAAe;AAAA,MACtB;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
import {
|
|
9
9
|
installDeps,
|
|
10
10
|
isProjectInitialized
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-Q455HC3P.js";
|
|
12
12
|
import "./chunk-2H7UOFLK.js";
|
|
13
13
|
|
|
14
14
|
// src/commands/create.ts
|
|
@@ -43,7 +43,11 @@ var create_default = defineCommand({
|
|
|
43
43
|
await installDeps(cwd);
|
|
44
44
|
s.stop("Dependencies installed");
|
|
45
45
|
} catch {
|
|
46
|
-
s.stop(
|
|
46
|
+
s.stop(
|
|
47
|
+
pc.yellow(
|
|
48
|
+
"Install failed \u2014 run npx --no-install nci (or npm install) manually."
|
|
49
|
+
)
|
|
50
|
+
);
|
|
47
51
|
}
|
|
48
52
|
}
|
|
49
53
|
s.start(`Scaffolding agent ${pc.cyan(agentAnswers.name)}`);
|
|
@@ -69,4 +73,4 @@ var create_default = defineCommand({
|
|
|
69
73
|
export {
|
|
70
74
|
create_default as default
|
|
71
75
|
};
|
|
72
|
-
//# sourceMappingURL=create-
|
|
76
|
+
//# sourceMappingURL=create-XJURMQC4.js.map
|
|
@@ -0,0 +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 templateId: agentAnswers.templateId,\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 ].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;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,YAAY,aAAa;AAAA,MACzB;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,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":[]}
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,24 @@ import { defineCommand, runMain } from "citty";
|
|
|
5
5
|
import * as p from "@clack/prompts";
|
|
6
6
|
import pc from "picocolors";
|
|
7
7
|
var LOGO = "\u{1F98B}";
|
|
8
|
+
var COMMANDS = [
|
|
9
|
+
["init", "Create a new Kalp project"],
|
|
10
|
+
["create", "Add a new agent"],
|
|
11
|
+
["push", "Push agent to Kalp"],
|
|
12
|
+
["link", "Link project to Kalp cloud"],
|
|
13
|
+
["login", "Authenticate with Kalp"],
|
|
14
|
+
["logout", "Sign out from Kalp"]
|
|
15
|
+
];
|
|
16
|
+
function printHelp() {
|
|
17
|
+
p.log.info(`${pc.bold("Usage")}: kalp <command> [options]`);
|
|
18
|
+
console.log("");
|
|
19
|
+
p.log.info(pc.bold("Commands"));
|
|
20
|
+
for (const [name, desc] of COMMANDS) {
|
|
21
|
+
console.log(` ${pc.cyan(name.padEnd(10))}${desc}`);
|
|
22
|
+
}
|
|
23
|
+
console.log("");
|
|
24
|
+
p.log.info(`Run ${pc.cyan("kalp <command> --help")} for more info.`);
|
|
25
|
+
}
|
|
8
26
|
var main = defineCommand({
|
|
9
27
|
meta: {
|
|
10
28
|
name: "kalp",
|
|
@@ -20,51 +38,27 @@ var main = defineCommand({
|
|
|
20
38
|
}
|
|
21
39
|
},
|
|
22
40
|
subCommands: {
|
|
23
|
-
init: () => import("./init-
|
|
24
|
-
create: () => import("./create-
|
|
25
|
-
push: () => import("./push-
|
|
41
|
+
init: () => import("./init-K7EASUMM.js").then((r) => r.default),
|
|
42
|
+
create: () => import("./create-XJURMQC4.js").then((r) => r.default),
|
|
43
|
+
push: () => import("./push-YFHHNITO.js").then((r) => r.default),
|
|
26
44
|
link: () => import("./link-YKDZ7Y6K.js").then((r) => r.default),
|
|
27
45
|
login: () => import("./login-LBEXP7ET.js").then((r) => r.default),
|
|
28
46
|
logout: () => import("./logout-S3PV4WE7.js").then((r) => r.default)
|
|
29
47
|
},
|
|
30
48
|
run({ args }) {
|
|
49
|
+
const firstArg = process.argv[2];
|
|
31
50
|
if (args.help) {
|
|
32
51
|
p.intro(`${LOGO} ${pc.bold("kalp")}`);
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
` ${pc.cyan("kalp create")} ${pc.dim("\u2014 Add a new agent")}`,
|
|
39
|
-
` ${pc.cyan("kalp push")} ${pc.dim("\u2014 Push agent to Kalp")}`,
|
|
40
|
-
` ${pc.cyan("kalp link")} ${pc.dim("\u2014 Link project to Kalp cloud")}`,
|
|
41
|
-
` ${pc.cyan("kalp login")} ${pc.dim("\u2014 Authenticate with Kalp")}`,
|
|
42
|
-
` ${pc.cyan("kalp logout")} ${pc.dim("\u2014 Sign out from Kalp")}`,
|
|
43
|
-
``,
|
|
44
|
-
`${pc.dim("Run")} ${pc.cyan("kalp <command> --help")} ${pc.dim("for more info.")}`
|
|
45
|
-
].join("\n"),
|
|
46
|
-
"Commands"
|
|
47
|
-
);
|
|
48
|
-
p.outro(pc.dim("Happy coding \u{1F98B}"));
|
|
52
|
+
printHelp();
|
|
53
|
+
p.outro("Happy coding \u{1F98B}");
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
if (firstArg) {
|
|
49
57
|
return;
|
|
50
58
|
}
|
|
51
59
|
p.intro(`${LOGO} ${pc.bold("kalp")}`);
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
`${pc.dim("Available commands:")}`,
|
|
55
|
-
``,
|
|
56
|
-
` ${pc.cyan("kalp init")} ${pc.dim("\u2014 Create a new Kalp project")}`,
|
|
57
|
-
` ${pc.cyan("kalp create")} ${pc.dim("\u2014 Add a new agent")}`,
|
|
58
|
-
` ${pc.cyan("kalp push")} ${pc.dim("\u2014 Push agent to Kalp")}`,
|
|
59
|
-
` ${pc.cyan("kalp link")} ${pc.dim("\u2014 Link project to Kalp cloud")}`,
|
|
60
|
-
` ${pc.cyan("kalp login")} ${pc.dim("\u2014 Authenticate with Kalp")}`,
|
|
61
|
-
` ${pc.cyan("kalp logout")} ${pc.dim("\u2014 Sign out from Kalp")}`,
|
|
62
|
-
``,
|
|
63
|
-
`${pc.dim("Run")} ${pc.cyan("kalp <command> --help")} ${pc.dim("for more info.")}`
|
|
64
|
-
].join("\n"),
|
|
65
|
-
"Commands"
|
|
66
|
-
);
|
|
67
|
-
p.outro(pc.dim("Happy coding \u{1F98B}"));
|
|
60
|
+
printHelp();
|
|
61
|
+
p.outro("Happy coding \u{1F98B}");
|
|
68
62
|
}
|
|
69
63
|
});
|
|
70
64
|
runMain(main);
|
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 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 if (args.help) {\n p.intro(`${LOGO} ${pc.bold(\"kalp\")}`);\n
|
|
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":[]}
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
ensureDirectory,
|
|
8
8
|
installDeps,
|
|
9
9
|
isProjectInitialized
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-Q455HC3P.js";
|
|
11
11
|
import "./chunk-2H7UOFLK.js";
|
|
12
12
|
|
|
13
13
|
// src/commands/init.ts
|
|
@@ -50,28 +50,26 @@ var init_default = defineCommand({
|
|
|
50
50
|
const msg = err instanceof Error ? err.message : String(err);
|
|
51
51
|
s.stop(pc.yellow("Install failed"));
|
|
52
52
|
p.log.warn(
|
|
53
|
-
`Run ${pc.cyan("npx nci")} manually in ${isCurrentDir ? "this directory" : projectInputName + "/"}`
|
|
53
|
+
`Run ${pc.cyan("npx --no-install nci")} (or ${pc.cyan("npm install")}) manually in ${isCurrentDir ? "this directory" : projectInputName + "/"}`
|
|
54
54
|
);
|
|
55
55
|
p.log.info(pc.dim(msg.split("\n")[0] ?? "Unknown error"));
|
|
56
56
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
p.
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
"You're ready \u{1F98B}"
|
|
70
|
-
);
|
|
57
|
+
p.log.success("Project scaffolded");
|
|
58
|
+
p.log.info(`${pc.cyan("kalp.config.ts")} \u2014 project config`);
|
|
59
|
+
p.log.info(`${pc.cyan("package.json")} \u2014 dependencies`);
|
|
60
|
+
p.log.info(`${pc.cyan("agents/")} \u2014 your agents live here`);
|
|
61
|
+
console.log("");
|
|
62
|
+
p.log.info(pc.bold("Next"));
|
|
63
|
+
if (!isCurrentDir) {
|
|
64
|
+
p.log.info(`1. ${pc.cyan(`cd ${projectInputName}`)}`);
|
|
65
|
+
p.log.info(`2. ${pc.cyan("kalp create")} \u2014 add your first agent`);
|
|
66
|
+
} else {
|
|
67
|
+
p.log.info(`1. ${pc.cyan("kalp create")} \u2014 add your first agent`);
|
|
68
|
+
}
|
|
71
69
|
p.outro(pc.green("Kalp initialized successfully."));
|
|
72
70
|
}
|
|
73
71
|
});
|
|
74
72
|
export {
|
|
75
73
|
init_default as default
|
|
76
74
|
};
|
|
77
|
-
//# sourceMappingURL=init-
|
|
75
|
+
//# sourceMappingURL=init-K7EASUMM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/init.ts"],"sourcesContent":["import { resolve, basename } from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { scaffoldProject } from \"../scaffold.js\";\nimport { promptProjectName } from \"../utils/ui.js\";\nimport {\n ensureDirectory,\n installDeps,\n isProjectInitialized,\n} from \"../utils/fs.js\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: { name: \"init\", description: \"Scaffold a new Kalp project\" },\n async run() {\n const cwd = process.cwd();\n\n p.intro(`${LOGO} ${pc.bold(\"kalp init\")}`);\n\n const projectInputName = await promptProjectName({\n message: \"What is the name of your project?\",\n placeholder: \"my-agent\",\n allowCurrentDir: true,\n });\n\n const isCurrentDir = projectInputName === \".\";\n const targetDir = isCurrentDir ? cwd : resolve(cwd, projectInputName);\n const projectName = isCurrentDir ? basename(cwd) : projectInputName;\n\n // ── Guard: already initialized ───────────────────────────────────────\n if (await isProjectInitialized(targetDir)) {\n p.log.error(\n `${pc.cyan(\"kalp.config.ts\")} already exists in this directory. Run ${pc.cyan(\"kalp create\")} to add an agent.`,\n );\n process.exit(1);\n }\n\n // ── Create target directory if needed ─────────────────────────────────\n if (!isCurrentDir) {\n await ensureDirectory(targetDir);\n }\n\n const s = p.spinner();\n\n s.start(\"Creating project structure\");\n await scaffoldProject({ projectName, targetDir });\n s.stop(\"Project structure created\");\n\n s.start(\"Installing dependencies\");\n try {\n await installDeps(targetDir);\n s.stop(\"Dependencies installed\");\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n s.stop(pc.yellow(\"Install failed\"));\n p.log.warn(\n `Run ${pc.cyan(\"npx --no-install nci\")} (or ${pc.cyan(\"npm install\")}) manually in ${isCurrentDir ? \"this directory\" : projectInputName + \"/\"}`,\n );\n p.log.info(pc.dim(msg.split(\"\\n\")[0] ?? \"Unknown error\"));\n }\n\n p.log.success(\"Project scaffolded\");\n p.log.info(`${pc.cyan(\"kalp.config.ts\")} — project config`);\n p.log.info(`${pc.cyan(\"package.json\")} — dependencies`);\n p.log.info(`${pc.cyan(\"agents/\")} — your agents live here`);\n console.log(\"\");\n p.log.info(pc.bold(\"Next\"));\n if (!isCurrentDir) {\n p.log.info(`1. ${pc.cyan(`cd ${projectInputName}`)}`);\n p.log.info(`2. ${pc.cyan(\"kalp create\")} — add your first agent`);\n } else {\n p.log.info(`1. ${pc.cyan(\"kalp create\")} — add your first agent`);\n }\n\n p.outro(pc.green(\"Kalp initialized successfully.\"));\n },\n});\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAS,SAAS,gBAAgB;AAClC,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AASf,IAAM,OAAO;AAEb,IAAO,eAAQ,cAAc;AAAA,EAC3B,MAAM,EAAE,MAAM,QAAQ,aAAa,8BAA8B;AAAA,EACjE,MAAM,MAAM;AACV,UAAM,MAAM,QAAQ,IAAI;AAExB,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,WAAW,CAAC,EAAE;AAEzC,UAAM,mBAAmB,MAAM,kBAAkB;AAAA,MAC/C,SAAS;AAAA,MACT,aAAa;AAAA,MACb,iBAAiB;AAAA,IACnB,CAAC;AAED,UAAM,eAAe,qBAAqB;AAC1C,UAAM,YAAY,eAAe,MAAM,QAAQ,KAAK,gBAAgB;AACpE,UAAM,cAAc,eAAe,SAAS,GAAG,IAAI;AAGnD,QAAI,MAAM,qBAAqB,SAAS,GAAG;AACzC,MAAE,MAAI;AAAA,QACJ,GAAG,GAAG,KAAK,gBAAgB,CAAC,0CAA0C,GAAG,KAAK,aAAa,CAAC;AAAA,MAC9F;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAGA,QAAI,CAAC,cAAc;AACjB,YAAM,gBAAgB,SAAS;AAAA,IACjC;AAEA,UAAM,IAAM,UAAQ;AAEpB,MAAE,MAAM,4BAA4B;AACpC,UAAM,gBAAgB,EAAE,aAAa,UAAU,CAAC;AAChD,MAAE,KAAK,2BAA2B;AAElC,MAAE,MAAM,yBAAyB;AACjC,QAAI;AACF,YAAM,YAAY,SAAS;AAC3B,QAAE,KAAK,wBAAwB;AAAA,IACjC,SAAS,KAAK;AACZ,YAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC3D,QAAE,KAAK,GAAG,OAAO,gBAAgB,CAAC;AAClC,MAAE,MAAI;AAAA,QACJ,OAAO,GAAG,KAAK,sBAAsB,CAAC,QAAQ,GAAG,KAAK,aAAa,CAAC,iBAAiB,eAAe,mBAAmB,mBAAmB,GAAG;AAAA,MAC/I;AACA,MAAE,MAAI,KAAK,GAAG,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,KAAK,eAAe,CAAC;AAAA,IAC1D;AAEA,IAAE,MAAI,QAAQ,oBAAoB;AAClC,IAAE,MAAI,KAAK,GAAG,GAAG,KAAK,gBAAgB,CAAC,wBAAmB;AAC1D,IAAE,MAAI,KAAK,GAAG,GAAG,KAAK,cAAc,CAAC,sBAAiB;AACtD,IAAE,MAAI,KAAK,GAAG,GAAG,KAAK,SAAS,CAAC,+BAA0B;AAC1D,YAAQ,IAAI,EAAE;AACd,IAAE,MAAI,KAAK,GAAG,KAAK,MAAM,CAAC;AAC1B,QAAI,CAAC,cAAc;AACjB,MAAE,MAAI,KAAK,MAAM,GAAG,KAAK,MAAM,gBAAgB,EAAE,CAAC,EAAE;AACpD,MAAE,MAAI,KAAK,MAAM,GAAG,KAAK,aAAa,CAAC,8BAAyB;AAAA,IAClE,OAAO;AACL,MAAE,MAAI,KAAK,MAAM,GAAG,KAAK,aAAa,CAAC,8BAAyB;AAAA,IAClE;AAEA,IAAE,QAAM,GAAG,MAAM,gCAAgC,CAAC;AAAA,EACpD;AACF,CAAC;","names":[]}
|
|
@@ -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-
|
|
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,14 +17,14 @@
|
|
|
17
17
|
"access": "public"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"zod": "
|
|
27
|
-
"@kalphq/sdk": "0.0.0-dev-
|
|
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"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/node": "^22.15.3",
|
|
@@ -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 { execSync } from \"node:child_process\";\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 execSync(\"npx nci\", {\n cwd,\n stdio: \"pipe\",\n });\n}\n"],"mappings":";;;AAAA,SAAS,QAAQ,aAAa;AAC9B,SAAS,YAAY;AACrB,SAAS,gBAAgB;AAEzB,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,WAAS,WAAW;AAAA,IAClB;AAAA,IACA,OAAO;AAAA,EACT,CAAC;AACH;","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.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(pc.yellow(\"Install failed — run npx nci manually.\"));\n }\n }\n\n // ── Scaffold agent ───────────────────────────────────────────────────\n s.start(`Scaffolding agent ${pc.cyan(agentAnswers.name)}`);\n await scaffoldAgent({\n agentName: agentAnswers.name,\n templateId: agentAnswers.templateId,\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 ].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,6CAAwC,CAAC;AAAA,MAC5D;AAAA,IACF;AAGA,MAAE,MAAM,qBAAqB,GAAG,KAAK,aAAa,IAAI,CAAC,EAAE;AACzD,UAAM,cAAc;AAAA,MAClB,WAAW,aAAa;AAAA,MACxB,YAAY,aAAa;AAAA,MACzB;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,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/init.ts"],"sourcesContent":["import { resolve, basename } from \"node:path\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { scaffoldProject } from \"../scaffold.js\";\nimport { promptProjectName } from \"../utils/ui.js\";\nimport {\n ensureDirectory,\n installDeps,\n isProjectInitialized,\n} from \"../utils/fs.js\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: { name: \"init\", description: \"Scaffold a new Kalp project\" },\n async run() {\n const cwd = process.cwd();\n\n p.intro(`${LOGO} ${pc.bold(\"kalp init\")}`);\n\n const projectInputName = await promptProjectName({\n message: \"What is the name of your project?\",\n placeholder: \"my-agent\",\n allowCurrentDir: true,\n });\n\n const isCurrentDir = projectInputName === \".\";\n const targetDir = isCurrentDir ? cwd : resolve(cwd, projectInputName);\n const projectName = isCurrentDir ? basename(cwd) : projectInputName;\n\n // ── Guard: already initialized ───────────────────────────────────────\n if (await isProjectInitialized(targetDir)) {\n p.log.error(\n `${pc.cyan(\"kalp.config.ts\")} already exists in this directory. Run ${pc.cyan(\"kalp create\")} to add an agent.`,\n );\n process.exit(1);\n }\n\n // ── Create target directory if needed ─────────────────────────────────\n if (!isCurrentDir) {\n await ensureDirectory(targetDir);\n }\n\n const s = p.spinner();\n\n s.start(\"Creating project structure\");\n await scaffoldProject({ projectName, targetDir });\n s.stop(\"Project structure created\");\n\n s.start(\"Installing dependencies\");\n try {\n await installDeps(targetDir);\n s.stop(\"Dependencies installed\");\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n s.stop(pc.yellow(\"Install failed\"));\n p.log.warn(\n `Run ${pc.cyan(\"npx nci\")} manually in ${isCurrentDir ? \"this directory\" : projectInputName + \"/\"}`,\n );\n p.log.info(pc.dim(msg.split(\"\\n\")[0] ?? \"Unknown error\"));\n }\n\n const cdHint = isCurrentDir\n ? \"\"\n : ` 1. ${pc.cyan(`cd ${projectInputName}`)}\\n`;\n const nextStep = isCurrentDir ? \"1\" : \"2\";\n\n p.note(\n [\n `${pc.dim(\"•\")} ${pc.cyan(\"kalp.config.ts\")} ${pc.dim(\"— project config\")}`,\n `${pc.dim(\"•\")} ${pc.cyan(\"package.json\")} ${pc.dim(\"— dependencies\")}`,\n `${pc.dim(\"•\")} ${pc.cyan(\"agents/\")} ${pc.dim(\"— your agents live here\")}`,\n ``,\n `${pc.dim(\"Next:\")}`,\n `${cdHint} ${nextStep}. ${pc.cyan(\"kalp create\")} ${pc.dim(\"— add your first agent\")}`,\n ].join(\"\\n\"),\n \"You're ready 🦋\",\n );\n\n p.outro(pc.green(\"Kalp initialized successfully.\"));\n },\n});\n"],"mappings":";;;;;;;;;;;;;AAAA,SAAS,SAAS,gBAAgB;AAClC,SAAS,qBAAqB;AAC9B,YAAY,OAAO;AACnB,OAAO,QAAQ;AASf,IAAM,OAAO;AAEb,IAAO,eAAQ,cAAc;AAAA,EAC3B,MAAM,EAAE,MAAM,QAAQ,aAAa,8BAA8B;AAAA,EACjE,MAAM,MAAM;AACV,UAAM,MAAM,QAAQ,IAAI;AAExB,IAAE,QAAM,GAAG,IAAI,IAAI,GAAG,KAAK,WAAW,CAAC,EAAE;AAEzC,UAAM,mBAAmB,MAAM,kBAAkB;AAAA,MAC/C,SAAS;AAAA,MACT,aAAa;AAAA,MACb,iBAAiB;AAAA,IACnB,CAAC;AAED,UAAM,eAAe,qBAAqB;AAC1C,UAAM,YAAY,eAAe,MAAM,QAAQ,KAAK,gBAAgB;AACpE,UAAM,cAAc,eAAe,SAAS,GAAG,IAAI;AAGnD,QAAI,MAAM,qBAAqB,SAAS,GAAG;AACzC,MAAE,MAAI;AAAA,QACJ,GAAG,GAAG,KAAK,gBAAgB,CAAC,0CAA0C,GAAG,KAAK,aAAa,CAAC;AAAA,MAC9F;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAGA,QAAI,CAAC,cAAc;AACjB,YAAM,gBAAgB,SAAS;AAAA,IACjC;AAEA,UAAM,IAAM,UAAQ;AAEpB,MAAE,MAAM,4BAA4B;AACpC,UAAM,gBAAgB,EAAE,aAAa,UAAU,CAAC;AAChD,MAAE,KAAK,2BAA2B;AAElC,MAAE,MAAM,yBAAyB;AACjC,QAAI;AACF,YAAM,YAAY,SAAS;AAC3B,QAAE,KAAK,wBAAwB;AAAA,IACjC,SAAS,KAAK;AACZ,YAAM,MAAM,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC3D,QAAE,KAAK,GAAG,OAAO,gBAAgB,CAAC;AAClC,MAAE,MAAI;AAAA,QACJ,OAAO,GAAG,KAAK,SAAS,CAAC,gBAAgB,eAAe,mBAAmB,mBAAmB,GAAG;AAAA,MACnG;AACA,MAAE,MAAI,KAAK,GAAG,IAAI,IAAI,MAAM,IAAI,EAAE,CAAC,KAAK,eAAe,CAAC;AAAA,IAC1D;AAEA,UAAM,SAAS,eACX,KACA,QAAQ,GAAG,KAAK,MAAM,gBAAgB,EAAE,CAAC;AAAA;AAC7C,UAAM,WAAW,eAAe,MAAM;AAEtC,IAAE;AAAA,MACA;AAAA,QACE,GAAG,GAAG,IAAI,QAAG,CAAC,IAAI,GAAG,KAAK,gBAAgB,CAAC,IAAI,GAAG,IAAI,uBAAkB,CAAC;AAAA,QACzE,GAAG,GAAG,IAAI,QAAG,CAAC,IAAI,GAAG,KAAK,cAAc,CAAC,IAAI,GAAG,IAAI,qBAAgB,CAAC;AAAA,QACrE,GAAG,GAAG,IAAI,QAAG,CAAC,IAAI,GAAG,KAAK,SAAS,CAAC,IAAI,GAAG,IAAI,8BAAyB,CAAC;AAAA,QACzE;AAAA,QACA,GAAG,GAAG,IAAI,OAAO,CAAC;AAAA,QAClB,GAAG,MAAM,KAAK,QAAQ,KAAK,GAAG,KAAK,aAAa,CAAC,IAAI,GAAG,IAAI,6BAAwB,CAAC;AAAA,MACvF,EAAE,KAAK,IAAI;AAAA,MACX;AAAA,IACF;AAEA,IAAE,QAAM,GAAG,MAAM,gCAAgC,CAAC;AAAA,EACpD;AACF,CAAC;","names":[]}
|
package/dist/push-YFAB7TWQ.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
ensureConfig
|
|
4
|
-
} from "./chunk-LAKPXKSS.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-YFAB7TWQ.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":[]}
|