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

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.
Files changed (52) hide show
  1. package/dist/acorn-I3UGQPDC.js +3132 -0
  2. package/dist/acorn-I3UGQPDC.js.map +1 -0
  3. package/dist/angular-5QCYWYQS.js +3032 -0
  4. package/dist/angular-5QCYWYQS.js.map +1 -0
  5. package/dist/babel-VVMWCS4G.js +7298 -0
  6. package/dist/babel-VVMWCS4G.js.map +1 -0
  7. package/dist/chunk-2H7UOFLK.js +11 -0
  8. package/dist/chunk-2H7UOFLK.js.map +1 -0
  9. package/dist/chunk-GFEVTHUW.js +19843 -0
  10. package/dist/chunk-GFEVTHUW.js.map +1 -0
  11. package/dist/{chunk-LAKPXKSS.js → chunk-Q455HC3P.js} +12 -5
  12. package/dist/chunk-Q455HC3P.js.map +1 -0
  13. package/dist/{create-445EVHYA.js → create-XJURMQC4.js} +9 -4
  14. package/dist/create-XJURMQC4.js.map +1 -0
  15. package/dist/estree-3QNQSWX3.js +4614 -0
  16. package/dist/estree-3QNQSWX3.js.map +1 -0
  17. package/dist/flow-CCY52CGJ.js +27548 -0
  18. package/dist/flow-CCY52CGJ.js.map +1 -0
  19. package/dist/glimmer-WEH5BTZ2.js +2896 -0
  20. package/dist/glimmer-WEH5BTZ2.js.map +1 -0
  21. package/dist/graphql-UERTLN2S.js +1268 -0
  22. package/dist/graphql-UERTLN2S.js.map +1 -0
  23. package/dist/html-2G7A573F.js +2928 -0
  24. package/dist/html-2G7A573F.js.map +1 -0
  25. package/dist/index.js +32 -38
  26. package/dist/index.js.map +1 -1
  27. package/dist/{init-O7CMWTZ6.js → init-K7EASUMM.js} +17 -18
  28. package/dist/init-K7EASUMM.js.map +1 -0
  29. package/dist/{link-V3ZDZKDE.js → link-YKDZ7Y6K.js} +2 -1
  30. package/dist/{link-V3ZDZKDE.js.map → link-YKDZ7Y6K.js.map} +1 -1
  31. package/dist/{login-NLTYFJL7.js → login-LBEXP7ET.js} +2 -1
  32. package/dist/{login-NLTYFJL7.js.map → login-LBEXP7ET.js.map} +1 -1
  33. package/dist/{logout-6ZYZGGVI.js → logout-S3PV4WE7.js} +2 -1
  34. package/dist/{logout-6ZYZGGVI.js.map → logout-S3PV4WE7.js.map} +1 -1
  35. package/dist/markdown-XILCBMG4.js +3553 -0
  36. package/dist/markdown-XILCBMG4.js.map +1 -0
  37. package/dist/meriyah-THC5AUEQ.js +2686 -0
  38. package/dist/meriyah-THC5AUEQ.js.map +1 -0
  39. package/dist/postcss-WBGWHY5F.js +5082 -0
  40. package/dist/postcss-WBGWHY5F.js.map +1 -0
  41. package/dist/{push-RUBMCAYR.js → push-N67OPGCD.js} +3 -2
  42. package/dist/{push-RUBMCAYR.js.map → push-N67OPGCD.js.map} +1 -1
  43. package/dist/typescript-NS3CY6IL.js +13205 -0
  44. package/dist/typescript-NS3CY6IL.js.map +1 -0
  45. package/dist/yaml-2RE4A77K.js +4226 -0
  46. package/dist/yaml-2RE4A77K.js.map +1 -0
  47. package/package.json +2 -5
  48. package/dist/chunk-AME2JH3Z.js +0 -191
  49. package/dist/chunk-AME2JH3Z.js.map +0 -1
  50. package/dist/chunk-LAKPXKSS.js.map +0 -1
  51. package/dist/create-445EVHYA.js.map +0 -1
  52. package/dist/init-O7CMWTZ6.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kalphq/cli",
3
- "version": "0.0.0-dev-20260416083945",
3
+ "version": "0.0.0-dev-20260416090302",
4
4
  "description": "Zero-config CLI for deploying Kalp agents",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -21,12 +21,9 @@
21
21
  "@clack/prompts": "^0.9.1",
22
22
  "citty": "^0.1.6",
23
23
  "esbuild": "^0.25.0",
24
- "giget": "^1.2.3",
25
24
  "picocolors": "^1.1.1",
26
- "prettier": "^3.3.3",
27
25
  "zod": "^3.25.76",
28
- "zod-to-json-schema": "^3.25.76",
29
- "@kalphq/sdk": "0.0.0-dev-20260416083945"
26
+ "@kalphq/sdk": "0.0.0-dev-20260416090302"
30
27
  },
31
28
  "devDependencies": {
32
29
  "@types/node": "^22.15.3",
@@ -1,191 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- // src/scaffold.ts
4
- import { writeFile, readFile, readdir, cp } from "fs/promises";
5
- import { fileURLToPath } from "url";
6
- import { join, dirname } from "path";
7
- import { format } from "prettier";
8
-
9
- // src/templates/index.ts
10
- var TEMPLATES = [
11
- {
12
- id: "customer-support",
13
- label: "Customer Support",
14
- hint: "ticket routing, escalation, knowledge base",
15
- secrets: ["OPENAI_API_KEY"]
16
- },
17
- {
18
- id: "b2b-sales",
19
- label: "B2B Sales Outreach",
20
- hint: "CRM enrichment, lead scoring",
21
- secrets: ["OPENAI_API_KEY", "CRM_API_KEY"]
22
- },
23
- {
24
- id: "financial-agent",
25
- label: "Financial Agent",
26
- hint: "market signals, portfolio analysis",
27
- secrets: ["OPENAI_API_KEY", "MARKET_DATA_API_KEY"]
28
- },
29
- {
30
- id: "minimal",
31
- label: "Minimal Skeleton",
32
- hint: "bare structure, start from scratch",
33
- secrets: []
34
- }
35
- ];
36
- function getTemplateMeta(id) {
37
- return TEMPLATES.find((t) => t.id === id);
38
- }
39
-
40
- // src/scaffold.ts
41
- var __filename = fileURLToPath(import.meta.url);
42
- var __dirname = dirname(__filename);
43
- var TEMPLATES_DIR = join(__dirname, "..", "templates");
44
- async function formatGeneratedFile(filePath, content) {
45
- if (!filePath.endsWith(".ts") && !filePath.endsWith(".tsx")) {
46
- return content;
47
- }
48
- try {
49
- return await format(content, {
50
- parser: "typescript",
51
- semi: true,
52
- singleQuote: false,
53
- trailingComma: "all",
54
- printWidth: 80
55
- });
56
- } catch {
57
- return content;
58
- }
59
- }
60
- async function replacePlaceholders(dir, map) {
61
- const entries = await readdir(dir, { withFileTypes: true });
62
- for (const entry of entries) {
63
- const fp = join(dir, entry.name);
64
- if (entry.isDirectory()) {
65
- await replacePlaceholders(fp, map);
66
- } else if (entry.isFile() && entry.name !== ".gitkeep") {
67
- try {
68
- let src = await readFile(fp, "utf-8");
69
- let changed = false;
70
- for (const [from, to] of Object.entries(map)) {
71
- if (src.includes(from)) {
72
- src = src.replaceAll(from, to);
73
- changed = true;
74
- }
75
- }
76
- if (changed) {
77
- const formatted = await formatGeneratedFile(fp, src);
78
- await writeFile(fp, formatted, "utf-8");
79
- }
80
- } catch {
81
- }
82
- }
83
- }
84
- }
85
- async function scaffoldProject(opts) {
86
- const { projectName, targetDir } = opts;
87
- await cp(join(TEMPLATES_DIR, "project"), targetDir, {
88
- recursive: true,
89
- force: true
90
- });
91
- const kalpConfig = `import { defineConfig } from "@kalphq/sdk";
92
-
93
- export default defineConfig({
94
- projectId: "${projectName}",
95
- secrets: [],
96
- });
97
- `;
98
- await writeFile(join(targetDir, "kalp.config.ts"), kalpConfig, "utf-8");
99
- await replacePlaceholders(targetDir, { __PROJECT_NAME__: projectName });
100
- }
101
- async function scaffoldAgent(opts) {
102
- const { agentName, templateId, cwd } = opts;
103
- const meta = getTemplateMeta(templateId);
104
- const agentDir = join(cwd, "agents", agentName);
105
- await cp(join(TEMPLATES_DIR, "agents", templateId), agentDir, {
106
- recursive: true,
107
- force: true
108
- });
109
- await replacePlaceholders(agentDir, { __AGENT_NAME__: agentName });
110
- if (meta.secrets.length > 0) {
111
- const envPath = join(cwd, ".env");
112
- let envExisting = "";
113
- try {
114
- envExisting = await readFile(envPath, "utf-8");
115
- } catch {
116
- }
117
- const toAdd = meta.secrets.filter((s) => !envExisting.includes(s)).map((s) => `${s}=`).join("\n");
118
- if (toAdd) {
119
- const content = envExisting ? envExisting.trimEnd() + "\n" + toAdd + "\n" : toAdd + "\n";
120
- await writeFile(envPath, content, "utf-8");
121
- }
122
- }
123
- }
124
-
125
- // src/utils/ui.ts
126
- import * as p from "@clack/prompts";
127
- import pc from "picocolors";
128
- async function promptProjectName(opts) {
129
- const message = opts?.message ?? "Project name?";
130
- const placeholder = opts?.placeholder ?? "my-project";
131
- const allowCurrentDir = opts?.allowCurrentDir ?? false;
132
- const answer = await p.text({
133
- message,
134
- placeholder,
135
- validate: (v) => {
136
- const value = v.trim();
137
- if (!value) return "Project name is required.";
138
- if (allowCurrentDir && value === ".") return;
139
- if (!/^[a-z0-9-]+$/.test(value)) {
140
- return allowCurrentDir ? "Use lowercase letters, numbers, and dashes only (or . for current directory)." : "Use lowercase letters, numbers, and dashes only.";
141
- }
142
- }
143
- });
144
- if (p.isCancel(answer)) {
145
- p.cancel("Cancelled.");
146
- process.exit(0);
147
- }
148
- return answer.trim();
149
- }
150
- async function promptAgentDetails() {
151
- const answers = await p.group(
152
- {
153
- name: () => p.text({
154
- message: "Agent name?",
155
- placeholder: "my-agent",
156
- validate: (v) => {
157
- if (!v.trim()) return "Agent name is required.";
158
- if (!/^[a-z0-9-]+$/.test(v)) {
159
- return "Use lowercase letters, numbers, and dashes only.";
160
- }
161
- }
162
- }),
163
- template: () => p.select({
164
- message: "Choose a template",
165
- options: TEMPLATES.map((t) => ({
166
- value: t.id,
167
- label: t.label,
168
- hint: pc.dim(t.hint)
169
- }))
170
- })
171
- },
172
- {
173
- onCancel: () => {
174
- p.cancel("Cancelled.");
175
- process.exit(0);
176
- }
177
- }
178
- );
179
- return {
180
- name: answers.name,
181
- templateId: answers.template
182
- };
183
- }
184
-
185
- export {
186
- scaffoldProject,
187
- scaffoldAgent,
188
- promptProjectName,
189
- promptAgentDetails
190
- };
191
- //# sourceMappingURL=chunk-AME2JH3Z.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/scaffold.ts","../src/templates/index.ts","../src/utils/ui.ts"],"sourcesContent":["import { writeFile, readFile, readdir, cp } from \"node:fs/promises\";\nimport { fileURLToPath } from \"node:url\";\nimport { join, dirname } from \"node:path\";\nimport { format } from \"prettier\";\nimport { getTemplateMeta, type TemplateId } from \"./templates/index.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nexport const TEMPLATES_DIR = join(__dirname, \"..\", \"templates\");\n\nasync function formatGeneratedFile(\n filePath: string,\n content: string,\n): Promise<string> {\n if (!filePath.endsWith(\".ts\") && !filePath.endsWith(\".tsx\")) {\n return content;\n }\n\n try {\n return await format(content, {\n parser: \"typescript\",\n semi: true,\n singleQuote: false,\n trailingComma: \"all\",\n printWidth: 80,\n });\n } catch {\n return content;\n }\n}\n\nasync function replacePlaceholders(\n dir: string,\n map: Record<string, string>,\n): Promise<void> {\n const entries = await readdir(dir, { withFileTypes: true });\n for (const entry of entries) {\n const fp = join(dir, entry.name);\n if (entry.isDirectory()) {\n await replacePlaceholders(fp, map);\n } else if (entry.isFile() && entry.name !== \".gitkeep\") {\n try {\n let src = await readFile(fp, \"utf-8\");\n let changed = false;\n for (const [from, to] of Object.entries(map)) {\n if (src.includes(from)) {\n src = src.replaceAll(from, to);\n changed = true;\n }\n }\n if (changed) {\n const formatted = await formatGeneratedFile(fp, src);\n await writeFile(fp, formatted, \"utf-8\");\n }\n } catch {\n // binary file — skip\n }\n }\n }\n}\n\nexport async function scaffoldProject(opts: {\n projectName: string;\n targetDir: string;\n}): Promise<void> {\n const { projectName, targetDir } = opts;\n\n // ── Copy project template (flat) to target directory ──────────────────\n await cp(join(TEMPLATES_DIR, \"project\"), targetDir, {\n recursive: true,\n force: true,\n });\n\n // ── kalp.config.ts ────────────────────────────────────────────────────\n const kalpConfig = `import { defineConfig } from \"@kalphq/sdk\";\n\nexport default defineConfig({\n projectId: \"${projectName}\",\n secrets: [],\n});\n`;\n await writeFile(join(targetDir, \"kalp.config.ts\"), kalpConfig, \"utf-8\");\n\n // ── Replace placeholders across the whole target ──────────────────────\n await replacePlaceholders(targetDir, { __PROJECT_NAME__: projectName });\n}\n\nexport async function scaffoldAgent(opts: {\n agentName: string;\n templateId: TemplateId;\n cwd: string;\n}): Promise<void> {\n const { agentName, templateId, cwd } = opts;\n const meta = getTemplateMeta(templateId);\n const agentDir = join(cwd, \"agents\", agentName);\n\n // ── Agent files via fs.cp ─────────────────────────────────────────────\n await cp(join(TEMPLATES_DIR, \"agents\", templateId), agentDir, {\n recursive: true,\n force: true,\n });\n await replacePlaceholders(agentDir, { __AGENT_NAME__: agentName });\n\n // ── .env at root (append missing secrets) ─────────────────────────────\n if (meta.secrets.length > 0) {\n const envPath = join(cwd, \".env\");\n let envExisting = \"\";\n try {\n envExisting = await readFile(envPath, \"utf-8\");\n } catch {\n // doesn't exist yet\n }\n const toAdd = meta.secrets\n .filter((s) => !envExisting.includes(s))\n .map((s) => `${s}=`)\n .join(\"\\n\");\n if (toAdd) {\n const content = envExisting\n ? envExisting.trimEnd() + \"\\n\" + toAdd + \"\\n\"\n : toAdd + \"\\n\";\n await writeFile(envPath, content, \"utf-8\");\n }\n }\n}\n","export type TemplateId =\n | \"customer-support\"\n | \"b2b-sales\"\n | \"financial-agent\"\n | \"minimal\";\n\nexport interface TemplateMeta {\n id: TemplateId;\n label: string;\n hint: string;\n secrets: string[];\n}\n\nexport interface TemplateFile {\n path: string;\n content: string;\n}\n\nexport interface Template {\n id: TemplateId;\n secrets: string[];\n files: (agent: string) => TemplateFile[];\n}\n\nexport const TEMPLATES: TemplateMeta[] = [\n {\n id: \"customer-support\",\n label: \"Customer Support\",\n hint: \"ticket routing, escalation, knowledge base\",\n secrets: [\"OPENAI_API_KEY\"],\n },\n {\n id: \"b2b-sales\",\n label: \"B2B Sales Outreach\",\n hint: \"CRM enrichment, lead scoring\",\n secrets: [\"OPENAI_API_KEY\", \"CRM_API_KEY\"],\n },\n {\n id: \"financial-agent\",\n label: \"Financial Agent\",\n hint: \"market signals, portfolio analysis\",\n secrets: [\"OPENAI_API_KEY\", \"MARKET_DATA_API_KEY\"],\n },\n {\n id: \"minimal\",\n label: \"Minimal Skeleton\",\n hint: \"bare structure, start from scratch\",\n secrets: [],\n },\n];\n\nexport function getTemplateMeta(id: TemplateId): TemplateMeta {\n return TEMPLATES.find((t) => t.id === id)!;\n}\n","import * as p from \"@clack/prompts\";\nimport pc from \"picocolors\";\nimport { TEMPLATES, type TemplateId } from \"../templates/index.js\";\n\nexport async function promptProjectName(opts?: {\n message?: string;\n placeholder?: string;\n allowCurrentDir?: boolean;\n}): Promise<string> {\n const message = opts?.message ?? \"Project name?\";\n const placeholder = opts?.placeholder ?? \"my-project\";\n const allowCurrentDir = opts?.allowCurrentDir ?? false;\n\n const answer = await p.text({\n message,\n placeholder,\n validate: (v) => {\n const value = v.trim();\n if (!value) return \"Project name is required.\";\n if (allowCurrentDir && value === \".\") return;\n if (!/^[a-z0-9-]+$/.test(value)) {\n return allowCurrentDir\n ? \"Use lowercase letters, numbers, and dashes only (or . for current directory).\"\n : \"Use lowercase letters, numbers, and dashes only.\";\n }\n },\n });\n\n if (p.isCancel(answer)) {\n p.cancel(\"Cancelled.\");\n process.exit(0);\n }\n\n return answer.trim();\n}\n\nexport async function promptAgentDetails(): Promise<{\n name: string;\n templateId: TemplateId;\n}> {\n const answers = 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 }),\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 return {\n name: answers.name,\n templateId: answers.template as TemplateId,\n };\n}\n"],"mappings":"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","names":[]}
@@ -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":[]}