@kalphq/cli 0.0.0-dev-20260416061740 → 0.0.0-dev-20260416063606
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/{build-WJ6ZTDWJ.js → build-2V4OQ3G3.js} +4 -3
- package/dist/{build-WJ6ZTDWJ.js.map → build-2V4OQ3G3.js.map} +1 -1
- package/dist/{create-IOQTXJLI.js → create-AMCRXGOA.js} +5 -7
- package/dist/create-AMCRXGOA.js.map +1 -0
- package/dist/index.js +3 -3
- package/dist/{init-CB5FVJKL.js → init-FLJXMJQZ.js} +9 -8
- package/dist/init-FLJXMJQZ.js.map +1 -0
- package/package.json +2 -2
- package/dist/create-IOQTXJLI.js.map +0 -1
- package/dist/init-CB5FVJKL.js.map +0 -1
|
@@ -13,8 +13,9 @@ import * as esbuild from "esbuild";
|
|
|
13
13
|
import { readdir, stat } from "fs/promises";
|
|
14
14
|
import { resolve, dirname } from "path";
|
|
15
15
|
async function glob(pattern) {
|
|
16
|
-
const
|
|
17
|
-
const
|
|
16
|
+
const normalized = pattern.replace(/\\/g, "/");
|
|
17
|
+
const dir = dirname(dirname(normalized));
|
|
18
|
+
const filename = normalized.split("/").pop() ?? "";
|
|
18
19
|
const results = [];
|
|
19
20
|
try {
|
|
20
21
|
const entries = await readdir(dir, { withFileTypes: true });
|
|
@@ -118,4 +119,4 @@ async function _build() {
|
|
|
118
119
|
export {
|
|
119
120
|
build_default as default
|
|
120
121
|
};
|
|
121
|
-
//# sourceMappingURL=build-
|
|
122
|
+
//# sourceMappingURL=build-2V4OQ3G3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/build.ts","../src/commands/utils.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { readFile } from \"node:fs/promises\";\nimport { resolve, relative } from \"node:path\";\nimport { z } from \"zod\";\nimport * as esbuild from \"esbuild\";\nimport { glob } from \"./utils.js\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: { name: \"build\", description: \"Bundle agents for deployment\" },\n async run() {\n await _build();\n },\n});\n\nconst KalpConfigSchema = z.object({\n projectId: z.string().min(1),\n region: z.string().optional(),\n secrets: z.array(z.string()).optional(),\n});\n\nasync function _build(): Promise<void> {\n p.intro(`${LOGO} ${pc.bold(\"kalp build\")}`);\n\n const cwd = process.cwd();\n const configPath = resolve(cwd, \"kalp.config.ts\");\n\n // ── Validate kalp.config.ts ────────────────────────────────────────────\n const s = p.spinner();\n s.start(\"Reading kalp.config.ts\");\n\n let configRaw = \"\";\n try {\n configRaw = await readFile(configPath, \"utf-8\");\n } catch {\n s.stop(pc.red(\"kalp.config.ts not found\"));\n p.outro(`${pc.dim(\"Run\")} ${pc.cyan(\"kalp init\")} ${pc.dim(\"first.\")}`);\n process.exit(1);\n }\n\n // Extract the config object from defineConfig({...}) using a lightweight regex\n const match = configRaw.match(/defineConfig\\(\\s*(\\{[\\s\\S]*?\\})\\s*\\)/);\n if (!match?.[1]) {\n s.stop(pc.red(\"Could not parse kalp.config.ts\"));\n process.exit(1);\n }\n\n let parsed: z.infer<typeof KalpConfigSchema>;\n try {\n // Evaluate the config object (safe: it's the user's own config file)\n const fn = new Function(`return ${match[1]}`);\n parsed = KalpConfigSchema.parse(fn());\n } catch (err) {\n s.stop(pc.red(\"Invalid kalp.config.ts\"));\n if (err instanceof z.ZodError) {\n for (const issue of err.issues) {\n p.log.error(` ${issue.path.join(\".\")}: ${issue.message}`);\n }\n }\n process.exit(1);\n }\n\n s.stop(`Project ${pc.cyan(parsed.projectId)} validated`);\n\n // ── Discover agent entry points ────────────────────────────────────────\n s.start(\"Discovering agents\");\n\n const agentEntries = await glob(resolve(cwd, \"agents/*/index.ts\"));\n if (agentEntries.length === 0) {\n s.stop(pc.yellow(\"No agents found in agents/\"));\n p.outro(pc.dim(\"Create an agent first.\"));\n process.exit(0);\n }\n\n s.stop(`Found ${pc.cyan(String(agentEntries.length))} agent(s)`);\n\n // ── Bundle with esbuild ────────────────────────────────────────────────\n s.start(\"Bundling agents\");\n\n const outdir = resolve(cwd, \"meta/dist\");\n try {\n await esbuild.build({\n entryPoints: agentEntries,\n bundle: true,\n platform: \"node\",\n target: \"es2022\",\n format: \"esm\",\n outdir,\n minify: true,\n treeShaking: true,\n external: [\"@kalphq/sdk\"],\n logLevel: \"silent\",\n });\n } catch (err) {\n s.stop(pc.red(\"Build failed\"));\n console.error(err);\n process.exit(1);\n }\n\n s.stop(\"Bundle ready\");\n\n // ── Summary ────────────────────────────────────────────────────────────\n const lines = agentEntries.map(\n (e: string) => ` ${pc.dim(\"•\")} ${pc.cyan(relative(cwd, e))}`,\n );\n p.note(lines.join(\"\\n\"), \"Bundled agents\");\n\n p.outro(\n `${LOGO} ${pc.green(\"Build complete.\")} ${pc.dim(`Output → meta/dist/`)}`,\n );\n}\n","import { readdir, stat } from \"node:fs/promises\";\nimport { resolve, dirname } from \"node:path\";\n\
|
|
1
|
+
{"version":3,"sources":["../src/commands/build.ts","../src/commands/utils.ts"],"sourcesContent":["import { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { readFile } from \"node:fs/promises\";\nimport { resolve, relative } from \"node:path\";\nimport { z } from \"zod\";\nimport * as esbuild from \"esbuild\";\nimport { glob } from \"./utils.js\";\n\nconst LOGO = \"🦋\";\n\nexport default defineCommand({\n meta: { name: \"build\", description: \"Bundle agents for deployment\" },\n async run() {\n await _build();\n },\n});\n\nconst KalpConfigSchema = z.object({\n projectId: z.string().min(1),\n region: z.string().optional(),\n secrets: z.array(z.string()).optional(),\n});\n\nasync function _build(): Promise<void> {\n p.intro(`${LOGO} ${pc.bold(\"kalp build\")}`);\n\n const cwd = process.cwd();\n const configPath = resolve(cwd, \"kalp.config.ts\");\n\n // ── Validate kalp.config.ts ────────────────────────────────────────────\n const s = p.spinner();\n s.start(\"Reading kalp.config.ts\");\n\n let configRaw = \"\";\n try {\n configRaw = await readFile(configPath, \"utf-8\");\n } catch {\n s.stop(pc.red(\"kalp.config.ts not found\"));\n p.outro(`${pc.dim(\"Run\")} ${pc.cyan(\"kalp init\")} ${pc.dim(\"first.\")}`);\n process.exit(1);\n }\n\n // Extract the config object from defineConfig({...}) using a lightweight regex\n const match = configRaw.match(/defineConfig\\(\\s*(\\{[\\s\\S]*?\\})\\s*\\)/);\n if (!match?.[1]) {\n s.stop(pc.red(\"Could not parse kalp.config.ts\"));\n process.exit(1);\n }\n\n let parsed: z.infer<typeof KalpConfigSchema>;\n try {\n // Evaluate the config object (safe: it's the user's own config file)\n const fn = new Function(`return ${match[1]}`);\n parsed = KalpConfigSchema.parse(fn());\n } catch (err) {\n s.stop(pc.red(\"Invalid kalp.config.ts\"));\n if (err instanceof z.ZodError) {\n for (const issue of err.issues) {\n p.log.error(` ${issue.path.join(\".\")}: ${issue.message}`);\n }\n }\n process.exit(1);\n }\n\n s.stop(`Project ${pc.cyan(parsed.projectId)} validated`);\n\n // ── Discover agent entry points ────────────────────────────────────────\n s.start(\"Discovering agents\");\n\n const agentEntries = await glob(resolve(cwd, \"agents/*/index.ts\"));\n if (agentEntries.length === 0) {\n s.stop(pc.yellow(\"No agents found in agents/\"));\n p.outro(pc.dim(\"Create an agent first.\"));\n process.exit(0);\n }\n\n s.stop(`Found ${pc.cyan(String(agentEntries.length))} agent(s)`);\n\n // ── Bundle with esbuild ────────────────────────────────────────────────\n s.start(\"Bundling agents\");\n\n const outdir = resolve(cwd, \"meta/dist\");\n try {\n await esbuild.build({\n entryPoints: agentEntries,\n bundle: true,\n platform: \"node\",\n target: \"es2022\",\n format: \"esm\",\n outdir,\n minify: true,\n treeShaking: true,\n external: [\"@kalphq/sdk\"],\n logLevel: \"silent\",\n });\n } catch (err) {\n s.stop(pc.red(\"Build failed\"));\n console.error(err);\n process.exit(1);\n }\n\n s.stop(\"Bundle ready\");\n\n // ── Summary ────────────────────────────────────────────────────────────\n const lines = agentEntries.map(\n (e: string) => ` ${pc.dim(\"•\")} ${pc.cyan(relative(cwd, e))}`,\n );\n p.note(lines.join(\"\\n\"), \"Bundled agents\");\n\n p.outro(\n `${LOGO} ${pc.green(\"Build complete.\")} ${pc.dim(`Output → meta/dist/`)}`,\n );\n}\n","import { readdir, stat } from \"node:fs/promises\";\nimport { resolve, dirname } from \"node:path\";\n\nexport async function glob(pattern: string): Promise<string[]> {\n // Normalize to forward slashes for consistent parsing (Windows/Unix)\n const normalized = pattern.replace(/\\\\/g, \"/\");\n const dir = dirname(dirname(normalized));\n const filename = normalized.split(\"/\").pop() ?? \"\";\n\n const results: string[] = [];\n\n try {\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n if (!entry.isDirectory()) continue;\n const candidate = resolve(dir, entry.name, filename);\n try {\n const s = await stat(candidate);\n if (s.isFile()) results.push(candidate);\n } catch {\n // file doesn't exist in this subdirectory\n }\n }\n } catch {\n // parent directory doesn't exist\n }\n\n return results;\n}\n"],"mappings":"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","names":["resolve","resolve"]}
|
|
@@ -8,10 +8,10 @@ import {
|
|
|
8
8
|
// src/commands/create.ts
|
|
9
9
|
import { join } from "path";
|
|
10
10
|
import { access } from "fs/promises";
|
|
11
|
+
import { execSync } from "child_process";
|
|
11
12
|
import { defineCommand } from "citty";
|
|
12
13
|
import * as p from "@clack/prompts";
|
|
13
14
|
import pc from "picocolors";
|
|
14
|
-
import { installDependencies, detectPackageManager } from "nypm";
|
|
15
15
|
var LOGO = "\u{1F98B}";
|
|
16
16
|
var create_default = defineCommand({
|
|
17
17
|
meta: { name: "create", description: "Add a new agent to the project" },
|
|
@@ -82,14 +82,12 @@ var create_default = defineCommand({
|
|
|
82
82
|
s.start("Creating project structure");
|
|
83
83
|
await scaffoldProject({ projectName, targetDir: cwd });
|
|
84
84
|
s.stop("Project structure created");
|
|
85
|
-
|
|
86
|
-
const pmName = pm?.name ?? "npm";
|
|
87
|
-
s.start(`Installing dependencies ${pc.dim(`(${pmName} install)`)}`);
|
|
85
|
+
s.start("Installing dependencies");
|
|
88
86
|
try {
|
|
89
|
-
|
|
87
|
+
execSync("npm install", { cwd, stdio: "pipe" });
|
|
90
88
|
s.stop("Dependencies installed");
|
|
91
89
|
} catch {
|
|
92
|
-
s.stop(pc.yellow("Install
|
|
90
|
+
s.stop(pc.yellow("Install failed \u2014 run npm install manually."));
|
|
93
91
|
}
|
|
94
92
|
}
|
|
95
93
|
s.start(`Scaffolding agent ${pc.cyan(agentAnswers.name)}`);
|
|
@@ -115,4 +113,4 @@ var create_default = defineCommand({
|
|
|
115
113
|
export {
|
|
116
114
|
create_default as default
|
|
117
115
|
};
|
|
118
|
-
//# sourceMappingURL=create-
|
|
116
|
+
//# sourceMappingURL=create-AMCRXGOA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/create.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport { access } from \"node:fs/promises\";\nimport { execSync } from \"node:child_process\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { scaffoldProject, scaffoldAgent } from \"../scaffold.js\";\nimport { TEMPLATES, type TemplateId } from \"../templates/index.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 let needsInit = false;\n try {\n await access(join(cwd, \"kalp.config.ts\"));\n } catch {\n needsInit = true;\n }\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\n const initAnswers = await p.group(\n {\n name: () =>\n p.text({\n message: \"Project name?\",\n placeholder: \"my-project\",\n validate: (v) => {\n if (!v.trim()) return \"Project name is required.\";\n if (!/^[a-z0-9-]+$/.test(v))\n return \"Use lowercase letters, numbers, and dashes only.\";\n },\n }),\n },\n {\n onCancel: () => {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n },\n },\n );\n\n projectName = initAnswers.name;\n }\n\n // ── Agent prompts ────────────────────────────────────────────────────\n const agentAnswers = await p.group(\n {\n name: () =>\n p.text({\n message: \"Agent name?\",\n placeholder: \"my-agent\",\n validate: (v) => {\n if (!v.trim()) return \"Agent name is required.\";\n if (!/^[a-z0-9-]+$/.test(v))\n return \"Use lowercase letters, numbers, and dashes only.\";\n },\n }),\n template: () =>\n p.select<TemplateId>({\n message: \"Choose a template\",\n options: TEMPLATES.map((t) => ({\n value: t.id,\n label: t.label,\n hint: pc.dim(t.hint),\n })),\n }),\n },\n {\n onCancel: () => {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n },\n },\n );\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 execSync(\"npm install\", { cwd, stdio: \"pipe\" });\n s.stop(\"Dependencies installed\");\n } catch {\n s.stop(pc.yellow(\"Install failed — run npm install manually.\"));\n }\n }\n\n // ── Scaffold agent ───────────────────────────────────────────────────\n s.start(`Scaffolding agent ${pc.cyan(agentAnswers.name)}`);\n await scaffoldAgent({\n agentName: agentAnswers.name,\n templateId: agentAnswers.template as 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":"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","names":[]}
|
package/dist/index.js
CHANGED
|
@@ -9,9 +9,9 @@ var main = defineCommand({
|
|
|
9
9
|
description: "\u{1F98B} Zero-config agent infrastructure"
|
|
10
10
|
},
|
|
11
11
|
subCommands: {
|
|
12
|
-
init: () => import("./init-
|
|
13
|
-
create: () => import("./create-
|
|
14
|
-
build: () => import("./build-
|
|
12
|
+
init: () => import("./init-FLJXMJQZ.js").then((r) => r.default),
|
|
13
|
+
create: () => import("./create-AMCRXGOA.js").then((r) => r.default),
|
|
14
|
+
build: () => import("./build-2V4OQ3G3.js").then((r) => r.default)
|
|
15
15
|
}
|
|
16
16
|
});
|
|
17
17
|
runMain(main);
|
|
@@ -6,10 +6,10 @@ import {
|
|
|
6
6
|
// src/commands/init.ts
|
|
7
7
|
import { join, resolve, basename } from "path";
|
|
8
8
|
import { access, mkdir } from "fs/promises";
|
|
9
|
+
import { execSync } from "child_process";
|
|
9
10
|
import { defineCommand } from "citty";
|
|
10
11
|
import * as p from "@clack/prompts";
|
|
11
12
|
import pc from "picocolors";
|
|
12
|
-
import { installDependencies } from "nypm";
|
|
13
13
|
var LOGO = "\u{1F98B}";
|
|
14
14
|
var init_default = defineCommand({
|
|
15
15
|
meta: { name: "init", description: "Scaffold a new Kalp project" },
|
|
@@ -56,14 +56,15 @@ var init_default = defineCommand({
|
|
|
56
56
|
s.stop("Project structure created");
|
|
57
57
|
s.start("Installing dependencies");
|
|
58
58
|
try {
|
|
59
|
-
|
|
59
|
+
execSync("npm install", { cwd: targetDir, stdio: "pipe" });
|
|
60
60
|
s.stop("Dependencies installed");
|
|
61
|
-
} catch {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
)
|
|
61
|
+
} catch (err) {
|
|
62
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
63
|
+
s.stop(pc.yellow("Install failed"));
|
|
64
|
+
p.log.warn(
|
|
65
|
+
`Run ${pc.cyan("npm install")} manually in ${isCurrentDir ? "this directory" : answers.name + "/"}`
|
|
66
66
|
);
|
|
67
|
+
p.log.info(pc.dim(msg.split("\n")[0] ?? "Unknown error"));
|
|
67
68
|
}
|
|
68
69
|
const cdHint = isCurrentDir ? "" : ` 1. ${pc.cyan(`cd ${answers.name}`)}
|
|
69
70
|
`;
|
|
@@ -85,4 +86,4 @@ var init_default = defineCommand({
|
|
|
85
86
|
export {
|
|
86
87
|
init_default as default
|
|
87
88
|
};
|
|
88
|
-
//# sourceMappingURL=init-
|
|
89
|
+
//# sourceMappingURL=init-FLJXMJQZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/init.ts"],"sourcesContent":["import { join, resolve, basename } from \"node:path\";\nimport { access, mkdir } from \"node:fs/promises\";\nimport { execSync } from \"node:child_process\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { scaffoldProject } from \"../scaffold.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 answers = await p.group(\n {\n name: () =>\n p.text({\n message: \"What is the name of your project?\",\n placeholder: \"my-agent\",\n initialValue: \"\",\n validate: (v) => {\n if (!v.trim()) return \"Project name is required.\";\n if (v.trim() !== \".\" && !/^[a-z0-9-]+$/.test(v))\n return \"Use lowercase letters, numbers, and dashes only (or . for current directory).\";\n },\n }),\n },\n {\n onCancel: () => {\n p.cancel(\"Setup cancelled.\");\n process.exit(0);\n },\n },\n );\n\n const isCurrentDir = answers.name.trim() === \".\";\n const targetDir = isCurrentDir ? cwd : resolve(cwd, answers.name);\n const projectName = isCurrentDir ? basename(cwd) : answers.name;\n\n // ── Guard: already initialized ───────────────────────────────────────\n try {\n await access(join(targetDir, \"kalp.config.ts\"));\n p.log.error(\n `${pc.cyan(\"kalp.config.ts\")} already exists in ${pc.cyan(targetDir)}. Run ${pc.cyan(\"kalp create\")} to add an agent.`,\n );\n process.exit(1);\n } catch {\n // expected: file doesn't exist yet\n }\n\n // ── Create target directory if needed ─────────────────────────────────\n if (!isCurrentDir) {\n await mkdir(targetDir, { recursive: true });\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 execSync(\"npm install\", { cwd: targetDir, stdio: \"pipe\" });\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(\"npm install\")} manually in ${isCurrentDir ? \"this directory\" : answers.name + \"/\"}`,\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 ${answers.name}`)}\\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":"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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-20260416063606",
|
|
4
4
|
"description": "Zero-config CLI for deploying Kalp agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"nypm": "^0.3.12",
|
|
25
25
|
"picocolors": "^1.1.1",
|
|
26
26
|
"zod": "^3.25.76",
|
|
27
|
-
"@kalphq/sdk": "0.0.0-dev-
|
|
27
|
+
"@kalphq/sdk": "0.0.0-dev-20260416063606"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/node": "^22.15.3",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/create.ts"],"sourcesContent":["import { join } from \"node:path\";\nimport { access } from \"node:fs/promises\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { installDependencies, detectPackageManager } from \"nypm\";\nimport { scaffoldProject, scaffoldAgent } from \"../scaffold.js\";\nimport { TEMPLATES, type TemplateId } from \"../templates/index.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 let needsInit = false;\n try {\n await access(join(cwd, \"kalp.config.ts\"));\n } catch {\n needsInit = true;\n }\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\n const initAnswers = await p.group(\n {\n name: () =>\n p.text({\n message: \"Project name?\",\n placeholder: \"my-project\",\n validate: (v) => {\n if (!v.trim()) return \"Project name is required.\";\n if (!/^[a-z0-9-]+$/.test(v))\n return \"Use lowercase letters, numbers, and dashes only.\";\n },\n }),\n },\n {\n onCancel: () => {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n },\n },\n );\n\n projectName = initAnswers.name;\n }\n\n // ── Agent prompts ────────────────────────────────────────────────────\n const agentAnswers = await p.group(\n {\n name: () =>\n p.text({\n message: \"Agent name?\",\n placeholder: \"my-agent\",\n validate: (v) => {\n if (!v.trim()) return \"Agent name is required.\";\n if (!/^[a-z0-9-]+$/.test(v))\n return \"Use lowercase letters, numbers, and dashes only.\";\n },\n }),\n template: () =>\n p.select<TemplateId>({\n message: \"Choose a template\",\n options: TEMPLATES.map((t) => ({\n value: t.id,\n label: t.label,\n hint: pc.dim(t.hint),\n })),\n }),\n },\n {\n onCancel: () => {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n },\n },\n );\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 const pm = await detectPackageManager(cwd);\n const pmName = pm?.name ?? \"npm\";\n s.start(`Installing dependencies ${pc.dim(`(${pmName} install)`)}`);\n try {\n await installDependencies({ cwd, silent: true });\n s.stop(\"Dependencies installed\");\n } catch {\n s.stop(pc.yellow(\"Install skipped — run npm install manually.\"));\n }\n }\n\n // ── Scaffold agent ───────────────────────────────────────────────────\n s.start(`Scaffolding agent ${pc.cyan(agentAnswers.name)}`);\n await scaffoldAgent({\n agentName: agentAnswers.name,\n templateId: agentAnswers.template as 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":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/init.ts"],"sourcesContent":["import { join, resolve, basename } from \"node:path\";\nimport { access, mkdir } from \"node:fs/promises\";\nimport { defineCommand } from \"citty\";\nimport * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { installDependencies } from \"nypm\";\nimport { scaffoldProject } from \"../scaffold.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 answers = await p.group(\n {\n name: () =>\n p.text({\n message: \"What is the name of your project?\",\n placeholder: \"my-agent\",\n initialValue: \"\",\n validate: (v) => {\n if (!v.trim()) return \"Project name is required.\";\n if (v.trim() !== \".\" && !/^[a-z0-9-]+$/.test(v))\n return \"Use lowercase letters, numbers, and dashes only (or . for current directory).\";\n },\n }),\n },\n {\n onCancel: () => {\n p.cancel(\"Setup cancelled.\");\n process.exit(0);\n },\n },\n );\n\n const isCurrentDir = answers.name.trim() === \".\";\n const targetDir = isCurrentDir ? cwd : resolve(cwd, answers.name);\n const projectName = isCurrentDir ? basename(cwd) : answers.name;\n\n // ── Guard: already initialized ───────────────────────────────────────\n try {\n await access(join(targetDir, \"kalp.config.ts\"));\n p.log.error(\n `${pc.cyan(\"kalp.config.ts\")} already exists in ${pc.cyan(targetDir)}. Run ${pc.cyan(\"kalp create\")} to add an agent.`,\n );\n process.exit(1);\n } catch {\n // expected: file doesn't exist yet\n }\n\n // ── Create target directory if needed ─────────────────────────────────\n if (!isCurrentDir) {\n await mkdir(targetDir, { recursive: true });\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 installDependencies({ cwd: targetDir, silent: true });\n s.stop(\"Dependencies installed\");\n } catch {\n s.stop(\n pc.yellow(\n `Skipped — run ${pc.cyan(\"npm install\")} in ${isCurrentDir ? \"this directory\" : answers.name + \"/\"}`,\n ),\n );\n }\n\n const cdHint = isCurrentDir\n ? \"\"\n : ` 1. ${pc.cyan(`cd ${answers.name}`)}\\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":"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","names":[]}
|